summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dir-locals.el1
-rw-r--r--.github/dockerfiles/Dockerfile.ubuntu-base2
-rw-r--r--.github/workflows/main.yaml2
-rw-r--r--.gitignore4
-rw-r--r--HOWTO/INSTALL-CROSS.md10
-rw-r--r--Makefile.in2
-rw-r--r--OTP_VERSION2
-rw-r--r--bootstrap/bin/no_dot_erlang.bootbin6933 -> 6881 bytes
-rw-r--r--bootstrap/bin/start.bootbin6933 -> 6881 bytes
-rw-r--r--bootstrap/bin/start_clean.bootbin6933 -> 6881 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_asm.beambin11056 -> 11048 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_block.beambin3852 -> 4716 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_clean.beambin3868 -> 3852 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_jump.beambin10280 -> 10672 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_kernel_to_ssa.beambin27676 -> 27688 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_listing.beambin1632 -> 2108 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_peep.beambin3560 -> 0 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa.beambin15196 -> 15192 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_bc_size.beambin9964 -> 9980 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_bool.beambin22844 -> 22848 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_bsm.beambin17924 -> 17908 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_codegen.beambin38552 -> 38976 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_dead.beambin12572 -> 15608 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_opt.beambin50268 -> 51704 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_pp.beambin6040 -> 8308 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_pre_codegen.beambin47696 -> 47668 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_recv.beambin14004 -> 13984 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_ssa_type.beambin35200 -> 35728 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_trim.beambin9524 -> 9540 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_types.beambin15584 -> 15524 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_utils.beambin3528 -> 3092 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_validator.beambin50264 -> 50304 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl.beambin28136 -> 28224 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_clauses.beambin2756 -> 2756 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_inline.beambin32804 -> 32816 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compile.beambin38448 -> 38400 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compiler.app5
-rw-r--r--bootstrap/lib/compiler/ebin/core_lint.beambin12500 -> 12524 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_scan.beambin6072 -> 6072 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/erl_bifs.beambin2088 -> 2104 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_fold.beambin42264 -> 41964 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_inline.beambin3448 -> 3444 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_messages.beambin3480 -> 3468 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_core.beambin58308 -> 58316 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_kernel.beambin41700 -> 41696 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application.beambin4328 -> 4324 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_controller.beambin35004 -> 34976 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_master.beambin6240 -> 6240 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_starter.beambin1204 -> 1200 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/code.beambin15296 -> 15284 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/code_server.beambin21880 -> 21880 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log.beambin28228 -> 28224 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log_1.beambin21828 -> 21820 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/dist_ac.beambin23296 -> 23316 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/dist_util.beambin16448 -> 16716 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_boot_server.beambin5604 -> 5600 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_erts_errors.beambin19664 -> 19648 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_kernel_errors.beambin2436 -> 2432 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erpc.beambin9016 -> 9036 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file.beambin14328 -> 14320 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file_io_server.beambin15128 -> 15072 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_sctp.beambin3176 -> 3172 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_tcp_socket.beambin31928 -> 31932 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_udp_socket.beambin23668 -> 23660 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/global.beambin28340 -> 28316 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/group.beambin14000 -> 13988 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/group_history.beambin7032 -> 7040 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet.beambin26652 -> 26652 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_config.beambin7252 -> 7248 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_db.beambin26600 -> 26644 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_dns.beambin17832 -> 17816 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_parse.beambin12880 -> 12896 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_res.beambin13536 -> 13560 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_tcp_dist.beambin7980 -> 8208 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/kernel.app2
-rw-r--r--bootstrap/lib/kernel/ebin/kernel_config.beambin2672 -> 2648 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/logger.beambin15340 -> 15436 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/logger_disk_log_h.beambin3264 -> 3180 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/logger_formatter.beambin8884 -> 8888 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/logger_std_h.beambin9668 -> 9684 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/net_kernel.beambin27776 -> 27756 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/os.beambin5276 -> 5428 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/pg.beambin8168 -> 8164 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/ram_file.beambin5172 -> 5152 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/raw_file_io.beambin1516 -> 1500 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/raw_file_io_deflate.beambin2576 -> 2576 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/rpc.beambin14896 -> 14888 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/socket.beambin24160 -> 24144 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/user.beambin10996 -> 10996 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/user_drv.beambin11196 -> 11196 bytes
-rw-r--r--bootstrap/lib/kernel/include/dist.hrl106
-rw-r--r--bootstrap/lib/stdlib/ebin/array.beambin11104 -> 11136 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/beam_lib.beambin18568 -> 18560 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/binary.beambin11284 -> 11284 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/c.beambin18280 -> 18284 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/calendar.beambin8016 -> 7992 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets.beambin45040 -> 45024 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_utils.beambin24852 -> 24836 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_v9.beambin44020 -> 44012 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/epp.beambin28696 -> 28696 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_anno.beambin3456 -> 3488 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_error.beambin10444 -> 10524 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_eval.beambin34952 -> 34976 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_expand_records.beambin19080 -> 19096 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_internal.beambin6852 -> 6868 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_lint.beambin88020 -> 88904 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_parse.beambin140740 -> 140744 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_posix_msg.beambin5184 -> 5180 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_pp.beambin26664 -> 26812 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_scan.beambin25364 -> 25212 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_stdlib_errors.beambin16000 -> 16100 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_tar.beambin30032 -> 30016 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/ets.beambin20620 -> 20648 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/file_sorter.beambin26864 -> 26852 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/filelib.beambin11228 -> 11236 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gb_sets.beambin7512 -> 7536 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gb_trees.beambin5064 -> 5072 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen.beambin6924 -> 6956 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_fsm.beambin13968 -> 13964 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_server.beambin17940 -> 17932 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_statem.beambin24604 -> 24604 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io.beambin7884 -> 7928 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib.beambin13104 -> 13120 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib_format.beambin15856 -> 12092 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib_format_ryu_table.beambin19156 -> 0 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib_pretty.beambin20516 -> 20516 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/lists.beambin28524 -> 28668 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/log_mf_h.beambin2340 -> 2340 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/ms_transform.beambin18348 -> 18400 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/ordsets.beambin1832 -> 1824 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/otp_internal.beambin6028 -> 5456 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/proc_lib.beambin14684 -> 14712 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/proplists.beambin4768 -> 4788 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc.beambin63264 -> 63256 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc_pt.beambin66924 -> 66932 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/queue.beambin8640 -> 8656 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/re.beambin12300 -> 12308 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/sets.beambin8444 -> 8484 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/shell.beambin28796 -> 28788 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/shell_docs.beambin17632 -> 17632 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/sofs.beambin34740 -> 34708 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/stdlib.app3
-rw-r--r--bootstrap/lib/stdlib/ebin/string.beambin33716 -> 33720 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/supervisor.beambin24848 -> 24868 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/supervisor_bridge.beambin5300 -> 5312 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/timer.beambin5216 -> 5396 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/unicode.beambin13112 -> 13120 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/unicode_util.beambin201432 -> 201448 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/uri_string.beambin26604 -> 26572 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/win32reg.beambin5276 -> 5280 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/zip.beambin23928 -> 23924 bytes
-rw-r--r--erts/autoconf/README.md10
-rw-r--r--erts/config.h.in26
-rwxr-xr-xerts/configure16904
-rw-r--r--erts/configure.ac (renamed from erts/configure.in)837
-rw-r--r--erts/doc/src/erl_dist_protocol.xml25
-rw-r--r--erts/doc/src/erlang.xml23
-rw-r--r--erts/doc/src/match_spec.xml9
-rw-r--r--erts/emulator/Makefile2
-rw-r--r--erts/emulator/Makefile.in76
-rw-r--r--erts/emulator/asmjit.version2
-rw-r--r--erts/emulator/asmjit/a64.h98
-rw-r--r--erts/emulator/asmjit/arm.h92
-rw-r--r--erts/emulator/asmjit/arm/a64assembler.cpp5126
-rw-r--r--erts/emulator/asmjit/arm/a64assembler.h94
-rw-r--r--erts/emulator/asmjit/arm/a64builder.cpp68
-rw-r--r--erts/emulator/asmjit/arm/a64builder.h79
-rw-r--r--erts/emulator/asmjit/arm/a64compiler.cpp77
-rw-r--r--erts/emulator/asmjit/arm/a64compiler.h259
-rw-r--r--erts/emulator/asmjit/arm/a64emithelper.cpp422
-rw-r--r--erts/emulator/asmjit/arm/a64emithelper_p.h70
-rw-r--r--erts/emulator/asmjit/arm/a64emitter.h1278
-rw-r--r--erts/emulator/asmjit/arm/a64globals.h1932
-rw-r--r--erts/emulator/asmjit/arm/a64instapi.cpp254
-rw-r--r--erts/emulator/asmjit/arm/a64instapi_p.h59
-rw-r--r--erts/emulator/asmjit/arm/a64instdb.cpp1977
-rw-r--r--erts/emulator/asmjit/arm/a64instdb.h96
-rw-r--r--erts/emulator/asmjit/arm/a64instdb_p.h903
-rw-r--r--erts/emulator/asmjit/arm/a64operand.cpp77
-rw-r--r--erts/emulator/asmjit/arm/a64operand.h329
-rw-r--r--erts/emulator/asmjit/arm/a64rapass.cpp787
-rw-r--r--erts/emulator/asmjit/arm/a64rapass_p.h120
-rw-r--r--erts/emulator/asmjit/arm/a64utils.h218
-rw-r--r--erts/emulator/asmjit/arm/armarchtraits_p.h92
-rw-r--r--erts/emulator/asmjit/arm/armfeatures.cpp474
-rw-r--r--erts/emulator/asmjit/arm/armfeatures.h206
-rw-r--r--erts/emulator/asmjit/arm/armformatter.cpp428
-rw-r--r--erts/emulator/asmjit/arm/armformatter_p.h90
-rw-r--r--erts/emulator/asmjit/arm/armfunc.cpp220
-rw-r--r--erts/emulator/asmjit/arm/armfunc_p.h55
-rw-r--r--erts/emulator/asmjit/arm/armglobals.h98
-rw-r--r--erts/emulator/asmjit/arm/armoperand.h648
-rw-r--r--erts/emulator/asmjit/asmjit.h6
-rw-r--r--erts/emulator/asmjit/core.h9
-rw-r--r--erts/emulator/asmjit/core/api-config.h66
-rw-r--r--erts/emulator/asmjit/core/archtraits.cpp8
-rw-r--r--erts/emulator/asmjit/core/codeholder.h2
-rw-r--r--erts/emulator/asmjit/core/compiler.cpp2
-rw-r--r--erts/emulator/asmjit/core/cpuinfo.cpp8
-rw-r--r--erts/emulator/asmjit/core/emitter.cpp26
-rw-r--r--erts/emulator/asmjit/core/formatter.cpp20
-rw-r--r--erts/emulator/asmjit/core/func.cpp12
-rw-r--r--erts/emulator/asmjit/core/func.h55
-rw-r--r--erts/emulator/asmjit/core/inst.cpp28
-rw-r--r--erts/emulator/asmjit/core/jitallocator.cpp165
-rw-r--r--erts/emulator/asmjit/core/jitallocator.h60
-rw-r--r--erts/emulator/asmjit/core/jitruntime.cpp65
-rw-r--r--erts/emulator/asmjit/core/jitruntime.h13
-rw-r--r--erts/emulator/asmjit/core/ralocal.cpp2
-rw-r--r--erts/emulator/asmjit/core/rapass.cpp88
-rw-r--r--erts/emulator/asmjit/core/rapass_p.h8
-rw-r--r--erts/emulator/asmjit/core/support.h46
-rw-r--r--erts/emulator/asmjit/core/virtmem.cpp548
-rw-r--r--erts/emulator/asmjit/core/virtmem.h226
-rw-r--r--erts/emulator/asmjit/x86/x86assembler.cpp4
-rw-r--r--erts/emulator/asmjit/x86/x86builder.cpp4
-rw-r--r--erts/emulator/asmjit/x86/x86compiler.cpp4
-rw-r--r--erts/emulator/asmjit/x86/x86compiler.h59
-rw-r--r--erts/emulator/asmjit/x86/x86emithelper.cpp10
-rw-r--r--erts/emulator/asmjit/x86/x86emithelper_p.h6
-rw-r--r--erts/emulator/asmjit/x86/x86emitter.h138
-rw-r--r--erts/emulator/asmjit/x86/x86features.cpp4
-rw-r--r--erts/emulator/asmjit/x86/x86func.cpp4
-rw-r--r--erts/emulator/asmjit/x86/x86instapi.cpp16
-rw-r--r--erts/emulator/asmjit/x86/x86instdb.cpp2879
-rw-r--r--erts/emulator/asmjit/x86/x86instdb.h297
-rw-r--r--erts/emulator/asmjit/x86/x86operand.cpp4
-rw-r--r--erts/emulator/asmjit/x86/x86rapass.cpp186
-rw-r--r--erts/emulator/asmjit/x86/x86rapass_p.h7
-rw-r--r--erts/emulator/beam/atom.names3
-rw-r--r--erts/emulator/beam/beam_bif_load.c7
-rw-r--r--erts/emulator/beam/beam_bp.c303
-rw-r--r--erts/emulator/beam/beam_bp.h3
-rw-r--r--erts/emulator/beam/beam_common.c276
-rw-r--r--erts/emulator/beam/beam_common.h39
-rw-r--r--erts/emulator/beam/beam_debug.c4
-rw-r--r--erts/emulator/beam/beam_file.c252
-rw-r--r--erts/emulator/beam/beam_file.h9
-rw-r--r--erts/emulator/beam/beam_load.c25
-rw-r--r--erts/emulator/beam/beam_load.h2
-rw-r--r--erts/emulator/beam/bif.c14
-rw-r--r--erts/emulator/beam/break.c36
-rw-r--r--erts/emulator/beam/dist.h96
-rw-r--r--erts/emulator/beam/emu/beam_emu.c24
-rw-r--r--erts/emulator/beam/emu/bs_instrs.tab144
-rw-r--r--erts/emulator/beam/emu/emu_load.c77
-rw-r--r--erts/emulator/beam/emu/instrs.tab45
-rw-r--r--erts/emulator/beam/emu/load.h5
-rw-r--r--erts/emulator/beam/emu/map_instrs.tab8
-rw-r--r--erts/emulator/beam/emu/ops.tab85
-rw-r--r--erts/emulator/beam/emu/predicates.tab21
-rw-r--r--erts/emulator/beam/erl_alloc.c2
-rw-r--r--erts/emulator/beam/erl_alloc.types1
-rw-r--r--erts/emulator/beam/erl_bif_info.c23
-rw-r--r--erts/emulator/beam/erl_bif_trace.c14
-rw-r--r--erts/emulator/beam/erl_bits.c69
-rw-r--r--erts/emulator/beam/erl_db_util.c29
-rw-r--r--erts/emulator/beam/erl_fun.c108
-rw-r--r--erts/emulator/beam/erl_fun.h27
-rw-r--r--erts/emulator/beam/erl_gc.c802
-rw-r--r--erts/emulator/beam/erl_gc.h6
-rw-r--r--erts/emulator/beam/erl_lock_check.c3
-rw-r--r--erts/emulator/beam/erl_message.c61
-rw-r--r--erts/emulator/beam/erl_message.h63
-rw-r--r--erts/emulator/beam/erl_nfunc_sched.h9
-rw-r--r--erts/emulator/beam/erl_nif.c80
-rw-r--r--erts/emulator/beam/erl_proc_sig_queue.c599
-rw-r--r--erts/emulator/beam/erl_proc_sig_queue.h52
-rw-r--r--erts/emulator/beam/erl_process.c32
-rw-r--r--erts/emulator/beam/erl_process.h32
-rw-r--r--erts/emulator/beam/erl_process_dump.c2
-rw-r--r--erts/emulator/beam/erl_process_lock.h50
-rw-r--r--erts/emulator/beam/erl_vm.h43
-rw-r--r--erts/emulator/beam/external.c416
-rw-r--r--erts/emulator/beam/generators.tab88
-rw-r--r--erts/emulator/beam/jit/arm/beam_asm.hpp1570
-rw-r--r--erts/emulator/beam/jit/arm/beam_asm_global.cpp360
-rw-r--r--erts/emulator/beam/jit/arm/beam_asm_module.cpp854
-rw-r--r--erts/emulator/beam/jit/arm/generators.tab497
-rw-r--r--erts/emulator/beam/jit/arm/instr_arith.cpp1177
-rw-r--r--erts/emulator/beam/jit/arm/instr_bif.cpp991
-rw-r--r--erts/emulator/beam/jit/arm/instr_bs.cpp1357
-rw-r--r--erts/emulator/beam/jit/arm/instr_call.cpp217
-rw-r--r--erts/emulator/beam/jit/arm/instr_common.cpp1633
-rw-r--r--erts/emulator/beam/jit/arm/instr_float.cpp162
-rw-r--r--erts/emulator/beam/jit/arm/instr_fun.cpp412
-rw-r--r--erts/emulator/beam/jit/arm/instr_guard_bifs.cpp727
-rw-r--r--erts/emulator/beam/jit/arm/instr_map.cpp276
-rw-r--r--erts/emulator/beam/jit/arm/instr_msg.cpp385
-rw-r--r--erts/emulator/beam/jit/arm/instr_select.cpp479
-rw-r--r--erts/emulator/beam/jit/arm/instr_trace.cpp217
-rw-r--r--erts/emulator/beam/jit/arm/ops.tab1308
-rw-r--r--erts/emulator/beam/jit/arm/predicates.tab107
-rw-r--r--erts/emulator/beam/jit/arm/process_main.cpp314
-rw-r--r--erts/emulator/beam/jit/asm_load.c109
-rw-r--r--erts/emulator/beam/jit/beam_asm.h139
-rw-r--r--erts/emulator/beam/jit/beam_jit_common.cpp (renamed from erts/emulator/beam/jit/beam_jit_common.c)502
-rw-r--r--erts/emulator/beam/jit/beam_jit_common.h101
-rw-r--r--erts/emulator/beam/jit/beam_jit_common.hpp280
-rw-r--r--erts/emulator/beam/jit/beam_jit_main.cpp (renamed from erts/emulator/beam/jit/x86/beam_asm.cpp)537
-rw-r--r--erts/emulator/beam/jit/beam_jit_perf.cpp (renamed from erts/emulator/beam/jit/x86/beam_asm_perf.cpp)2
-rw-r--r--erts/emulator/beam/jit/load.h12
-rw-r--r--erts/emulator/beam/jit/x86/beam_asm.hpp378
-rw-r--r--erts/emulator/beam/jit/x86/beam_asm_global.cpp113
-rw-r--r--erts/emulator/beam/jit/x86/beam_asm_module.cpp292
-rw-r--r--erts/emulator/beam/jit/x86/generators.tab47
-rw-r--r--erts/emulator/beam/jit/x86/instr_arith.cpp239
-rw-r--r--erts/emulator/beam/jit/x86/instr_bif.cpp445
-rw-r--r--erts/emulator/beam/jit/x86/instr_bs.cpp112
-rw-r--r--erts/emulator/beam/jit/x86/instr_call.cpp128
-rw-r--r--erts/emulator/beam/jit/x86/instr_common.cpp155
-rw-r--r--erts/emulator/beam/jit/x86/instr_float.cpp143
-rw-r--r--erts/emulator/beam/jit/x86/instr_fun.cpp394
-rw-r--r--erts/emulator/beam/jit/x86/instr_guard_bifs.cpp30
-rw-r--r--erts/emulator/beam/jit/x86/instr_map.cpp83
-rw-r--r--erts/emulator/beam/jit/x86/instr_msg.cpp9
-rw-r--r--erts/emulator/beam/jit/x86/instr_select.cpp68
-rw-r--r--erts/emulator/beam/jit/x86/instr_trace.cpp78
-rw-r--r--erts/emulator/beam/jit/x86/ops.tab99
-rw-r--r--erts/emulator/beam/jit/x86/predicates.tab6
-rw-r--r--erts/emulator/beam/jit/x86/process_main.cpp348
-rw-r--r--erts/emulator/beam/predicates.tab19
-rw-r--r--erts/emulator/beam/utils.c1
-rw-r--r--erts/emulator/internal_doc/BeamAsm.md65
-rw-r--r--erts/emulator/internal_doc/beam_makeops.md6
-rw-r--r--erts/emulator/internal_doc/figures/beamasm-perf-annotate.pngbin100853 -> 108415 bytes
-rw-r--r--erts/emulator/internal_doc/figures/perf-beamasm.pngbin151978 -> 210188 bytes
-rw-r--r--erts/emulator/pcre/local_config.h3
-rw-r--r--erts/emulator/pcre/pcre_exec.c2
-rw-r--r--erts/emulator/ryu/README.ryu_update.md20
-rw-r--r--erts/emulator/ryu/common.h115
-rw-r--r--erts/emulator/ryu/d2s.c712
-rw-r--r--erts/emulator/ryu/d2s_full_table.h367
-rw-r--r--erts/emulator/ryu/d2s_intrinsics.h358
-rw-r--r--erts/emulator/ryu/digit_table.h35
-rw-r--r--erts/emulator/ryu/ryu.h36
-rw-r--r--erts/emulator/ryu/ryu.mk57
-rw-r--r--erts/emulator/sys/unix/erl_unix_sys.h14
-rw-r--r--erts/emulator/test/Makefile2
-rw-r--r--erts/emulator/test/alloc_SUITE.erl6
-rw-r--r--erts/emulator/test/binary_SUITE.erl25
-rw-r--r--erts/emulator/test/distribution_SUITE.erl6
-rw-r--r--erts/emulator/test/erts_test_utils.erl2
-rw-r--r--erts/emulator/test/exception_SUITE.erl53
-rw-r--r--erts/emulator/test/hash_SUITE.erl115
-rw-r--r--erts/emulator/test/hello_SUITE_data/hello.erl2
-rw-r--r--erts/emulator/test/hibernate_SUITE.erl6
-rw-r--r--erts/emulator/test/jit_SUITE.erl (renamed from erts/emulator/test/perf_SUITE.erl)108
-rw-r--r--erts/emulator/test/map_SUITE.erl15
-rw-r--r--erts/emulator/test/map_SUITE_data/badmap_17.erl58
-rw-r--r--erts/emulator/test/num_bif_SUITE.erl62
-rw-r--r--erts/emulator/test/tuple_SUITE.erl188
-rwxr-xr-xerts/emulator/utils/beam_makeops43
-rw-r--r--erts/epmd/src/epmd_int.h12
-rw-r--r--erts/etc/unix/Install.src1
-rw-r--r--erts/etc/unix/cerl.src2
-rw-r--r--erts/etc/unix/etp-commands.in10
-rw-r--r--erts/etc/unix/etp-thr.py6
-rw-r--r--erts/etc/unix/etp.py2
-rw-r--r--erts/include/internal/ethr_internal.h30
-rw-r--r--erts/include/internal/gcc/ethr_atomic.h8
-rw-r--r--erts/include/internal/gcc/ethr_dw_atomic.h8
-rw-r--r--erts/lib_src/common/erl_misc_utils.c12
-rw-r--r--erts/lib_src/pthread/ethread.c10
-rw-r--r--erts/lib_src/yielding_c_fun/lib/tiny_regex_c/UPGRADE_NOTE10
-rw-r--r--erts/preloaded/ebin/atomics.beambin4616 -> 4624 bytes
-rw-r--r--erts/preloaded/ebin/counters.beambin4856 -> 4868 bytes
-rw-r--r--erts/preloaded/ebin/erl_init.beambin2824 -> 2832 bytes
-rw-r--r--erts/preloaded/ebin/erl_prim_loader.beambin60372 -> 59696 bytes
-rw-r--r--erts/preloaded/ebin/erl_tracer.beambin2436 -> 2452 bytes
-rw-r--r--erts/preloaded/ebin/erlang.beambin131428 -> 131460 bytes
-rw-r--r--erts/preloaded/ebin/erts_code_purger.beambin12560 -> 12584 bytes
-rw-r--r--erts/preloaded/ebin/erts_dirty_process_signal_handler.beambin3020 -> 3032 bytes
-rw-r--r--erts/preloaded/ebin/erts_internal.beambin26432 -> 26440 bytes
-rw-r--r--erts/preloaded/ebin/erts_literal_area_collector.beambin3968 -> 3988 bytes
-rw-r--r--erts/preloaded/ebin/init.beambin60364 -> 60400 bytes
-rw-r--r--erts/preloaded/ebin/persistent_term.beambin1992 -> 2000 bytes
-rw-r--r--erts/preloaded/ebin/prim_buffer.beambin4052 -> 4064 bytes
-rw-r--r--erts/preloaded/ebin/prim_eval.beambin1648 -> 1656 bytes
-rw-r--r--erts/preloaded/ebin/prim_file.beambin32848 -> 32852 bytes
-rw-r--r--erts/preloaded/ebin/prim_inet.beambin91892 -> 91836 bytes
-rw-r--r--erts/preloaded/ebin/prim_net.beambin6200 -> 6208 bytes
-rw-r--r--erts/preloaded/ebin/prim_socket.beambin32556 -> 32556 bytes
-rw-r--r--erts/preloaded/ebin/prim_zip.beambin25904 -> 25860 bytes
-rw-r--r--erts/preloaded/ebin/socket_registry.beambin19824 -> 19832 bytes
-rw-r--r--erts/preloaded/ebin/zlib.beambin22544 -> 22536 bytes
-rw-r--r--erts/preloaded/src/erlang.erl6
-rw-r--r--erts/test/Makefile5
-rw-r--r--erts/test/otp_SUITE.erl327
-rw-r--r--erts/test/otp_SUITE_data/.keep0
-rw-r--r--erts/test/parallel_messages_SUITE.erl465
-rw-r--r--erts/test/parallel_messages_SUITE_data/visualize_throughput.html304
-rw-r--r--erts/test/upgrade_SUITE.erl2
-rw-r--r--lib/asn1/src/asn1.app.src2
-rwxr-xr-xlib/common_test/configure1045
-rw-r--r--lib/common_test/configure.ac14
-rw-r--r--lib/common_test/configure.in14
-rw-r--r--lib/common_test/src/common_test.app.src10
-rw-r--r--lib/common_test/src/test_server.erl15
-rw-r--r--lib/common_test/src/test_server_ctrl.erl145
-rw-r--r--lib/common_test/src/test_server_node.erl240
-rw-r--r--lib/common_test/test_server/Makefile5
-rwxr-xr-xlib/common_test/test_server/configure3075
-rw-r--r--lib/common_test/test_server/configure.ac (renamed from lib/common_test/test_server/configure.in)97
-rw-r--r--lib/common_test/test_server/ts_install.erl2
-rw-r--r--lib/compiler/internal_doc/beam_ssa.md107
-rw-r--r--lib/compiler/src/Makefile1
-rw-r--r--lib/compiler/src/beam_asm.erl14
-rw-r--r--lib/compiler/src/beam_block.erl73
-rw-r--r--lib/compiler/src/beam_clean.erl4
-rw-r--r--lib/compiler/src/beam_dict.erl12
-rw-r--r--lib/compiler/src/beam_flatten.erl2
-rw-r--r--lib/compiler/src/beam_jump.erl46
-rw-r--r--lib/compiler/src/beam_listing.erl25
-rw-r--r--lib/compiler/src/beam_peep.erl223
-rw-r--r--lib/compiler/src/beam_ssa_codegen.erl57
-rw-r--r--lib/compiler/src/beam_ssa_dead.erl449
-rw-r--r--lib/compiler/src/beam_ssa_opt.erl124
-rw-r--r--lib/compiler/src/beam_ssa_pp.erl106
-rw-r--r--lib/compiler/src/beam_ssa_pre_codegen.erl191
-rw-r--r--lib/compiler/src/beam_ssa_type.erl175
-rw-r--r--lib/compiler/src/beam_utils.erl29
-rw-r--r--lib/compiler/src/beam_validator.erl41
-rw-r--r--lib/compiler/src/beam_z.erl26
-rw-r--r--lib/compiler/src/compile.erl52
-rw-r--r--lib/compiler/src/compiler.app.src5
-rwxr-xr-xlib/compiler/src/genop.tab12
-rw-r--r--lib/compiler/src/sys_core_fold.erl47
-rw-r--r--lib/compiler/test/Makefile18
-rw-r--r--lib/compiler/test/beam_except_SUITE.erl16
-rw-r--r--lib/compiler/test/beam_ssa_SUITE.erl18
-rw-r--r--lib/compiler/test/beam_type_SUITE.erl19
-rw-r--r--lib/compiler/test/beam_utils_SUITE.erl6
-rw-r--r--lib/compiler/test/bs_match_SUITE.erl6
-rw-r--r--lib/compiler/test/compile_SUITE.erl172
-rw-r--r--lib/compiler/test/compile_SUITE_data/asm_labels.erl47
-rw-r--r--lib/compiler/test/compile_SUITE_data/funs.erl8
-rw-r--r--lib/compiler/test/compile_SUITE_data/types_pp.erl127
-rw-r--r--lib/compiler/test/core_fold_SUITE.erl2
-rw-r--r--lib/compiler/test/fun_SUITE.erl4
-rw-r--r--lib/compiler/test/guard_SUITE.erl147
-rw-r--r--lib/compiler/test/lc_SUITE.erl4
-rw-r--r--lib/compiler/test/match_SUITE.erl6
-rw-r--r--lib/compiler/test/misc_SUITE.erl11
-rw-r--r--lib/compiler/test/test_lib.erl1
-rw-r--r--lib/compiler/test/trycatch_SUITE.erl2
-rw-r--r--lib/crypto/c_src/Makefile.in8
-rw-r--r--lib/crypto/c_src/crypto.c5
-rw-r--r--lib/crypto/c_src/hash_equals.c51
-rw-r--r--lib/crypto/c_src/hash_equals.h28
-rwxr-xr-xlib/crypto/configure5553
-rw-r--r--lib/crypto/configure.ac908
-rw-r--r--lib/crypto/configure.in807
-rw-r--r--lib/crypto/doc/src/crypto.xml14
-rw-r--r--lib/crypto/src/crypto.app.src2
-rw-r--r--lib/crypto/src/crypto.erl12
-rw-r--r--lib/crypto/test/crypto_SUITE.erl17
-rw-r--r--lib/dialyzer/doc/src/dialyzer.xml20
-rw-r--r--lib/dialyzer/src/Makefile4
-rw-r--r--lib/dialyzer/src/cerl_closurean.erl856
-rw-r--r--lib/dialyzer/src/cerl_lib.erl457
-rw-r--r--lib/dialyzer/src/cerl_pmatch.erl620
-rw-r--r--lib/dialyzer/src/cerl_typean.erl994
-rw-r--r--lib/dialyzer/src/dialyzer.app.src12
-rw-r--r--lib/dialyzer/src/dialyzer.hrl2
-rw-r--r--lib/dialyzer/src/dialyzer_analysis_callgraph.erl11
-rw-r--r--lib/dialyzer/src/dialyzer_callgraph.erl16
-rw-r--r--lib/dialyzer/src/dialyzer_cl.erl4
-rw-r--r--lib/dialyzer/src/dialyzer_clean_core.erl5
-rw-r--r--lib/dialyzer/src/dialyzer_codeserver.erl21
-rw-r--r--lib/dialyzer/src/dialyzer_contracts.erl114
-rw-r--r--lib/dialyzer/src/dialyzer_coordinator.erl253
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl99
-rw-r--r--lib/dialyzer/src/dialyzer_dep.erl72
-rw-r--r--lib/dialyzer/src/dialyzer_options.erl32
-rw-r--r--lib/dialyzer/src/dialyzer_succ_typings.erl533
-rw-r--r--lib/dialyzer/src/dialyzer_typesig.erl649
-rw-r--r--lib/dialyzer/src/dialyzer_utils.erl185
-rw-r--r--lib/dialyzer/src/dialyzer_worker.erl119
-rw-r--r--lib/dialyzer/src/erl_types.erl562
-rw-r--r--lib/dialyzer/src/typer.erl3
-rw-r--r--lib/dialyzer/test/Makefile2
-rw-r--r--lib/dialyzer/test/erl_types_SUITE.erl75
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/opaque_key4
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/para32
-rw-r--r--lib/dialyzer/test/property_test/erl_types_prop.erl229
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/binary_redef.erl22
-rw-r--r--lib/diameter/src/diameter.app.src2
-rw-r--r--lib/edoc/src/edoc.app.src2
-rw-r--r--lib/edoc/src/edoc_layout_chunks.erl66
-rw-r--r--lib/edoc/src/edoc_tags.erl1
-rw-r--r--lib/edoc/src/edoc_types.erl27
-rw-r--r--lib/eldap/src/eldap.app.src2
-rw-r--r--lib/erl_docgen/src/docgen_xml_to_chunk.erl49
-rw-r--r--lib/erl_docgen/src/erl_docgen.app.src2
-rw-r--r--lib/erl_interface/config.h.in29
-rwxr-xr-xlib/erl_interface/configure5814
-rw-r--r--lib/erl_interface/configure.ac (renamed from lib/erl_interface/configure.in)70
-rwxr-xr-xlib/erl_interface/src/auxdir/config.guess1700
-rwxr-xr-xlib/erl_interface/src/auxdir/config.sub1860
-rwxr-xr-xlib/erl_interface/src/auxdir/install-sh541
-rw-r--r--lib/erl_interface/src/connect/ei_connect.c44
-rw-r--r--lib/erl_interface/src/connect/ei_connect_int.h35
-rw-r--r--lib/erl_interface/src/misc/ei_compat.c6
-rw-r--r--lib/erl_interface/src/misc/ei_internal.h2
-rw-r--r--lib/erl_interface/src/misc/show_msg.c16
-rw-r--r--lib/erl_interface/src/prog/erl_call.c10
-rw-r--r--lib/erl_interface/test/ei_accept_SUITE.erl26
-rw-r--r--lib/erl_interface/test/ei_tmo_SUITE.erl167
-rw-r--r--lib/inets/src/inets_app/inets.app.src4
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java18
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java30
-rw-r--r--lib/kernel/doc/src/kernel_app.xml16
-rw-r--r--lib/kernel/examples/erl_uds_dist/src/erl_uds_dist.erl17
-rw-r--r--lib/kernel/include/dist.hrl106
-rw-r--r--lib/kernel/src/auth.erl2
-rw-r--r--lib/kernel/src/dist_util.erl20
-rw-r--r--lib/kernel/src/inet_db.erl433
-rw-r--r--lib/kernel/src/inet_dns.hrl8
-rw-r--r--lib/kernel/src/inet_res.erl282
-rw-r--r--lib/kernel/src/inet_tcp_dist.erl12
-rw-r--r--lib/kernel/src/kernel.app.src2
-rw-r--r--lib/kernel/src/logger.erl8
-rw-r--r--lib/kernel/src/logger_disk_log_h.erl115
-rw-r--r--lib/kernel/src/os.erl19
-rw-r--r--lib/kernel/test/erl_distribution_SUITE.erl45
-rw-r--r--lib/kernel/test/erl_distribution_wb_SUITE.erl101
-rw-r--r--lib/kernel/test/file_name_SUITE.erl4
-rw-r--r--lib/kernel/test/global_SUITE.erl88
-rw-r--r--lib/kernel/test/global_SUITE_data/global_trace.erl80
-rw-r--r--lib/kernel/test/inet_res_SUITE.erl389
-rw-r--r--lib/kernel/test/inet_res_SUITE_data/otptest/0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.zone2
-rw-r--r--lib/kernel/test/inet_res_SUITE_data/otptest/0.0.127.in-addr.arpa.zone1
-rw-r--r--lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone3
-rw-r--r--lib/kernel/test/interactive_shell_SUITE.erl1325
-rw-r--r--lib/kernel/test/kernel_SUITE.erl2
-rw-r--r--lib/kernel/test/logger_SUITE.erl26
-rw-r--r--lib/kernel/test/seq_trace_SUITE.erl75
-rwxr-xr-xlib/megaco/configure4040
-rw-r--r--lib/megaco/configure.ac (renamed from lib/megaco/configure.in)30
-rw-r--r--lib/mnesia/src/mnesia_bup.erl2
-rw-r--r--lib/mnesia/src/mnesia_dumper.erl2
-rw-r--r--lib/mnesia/src/mnesia_frag.erl2
-rw-r--r--lib/mnesia/src/mnesia_monitor.erl2
-rw-r--r--lib/mnesia/src/mnesia_recover.erl6
-rw-r--r--lib/observer/src/observer.app.src2
-rw-r--r--lib/observer/test/crashdump_helper.erl2
-rw-r--r--lib/observer/test/observer_SUITE.erl2
-rwxr-xr-xlib/odbc/configure4128
-rw-r--r--lib/odbc/configure.ac (renamed from lib/odbc/configure.in)106
-rw-r--r--lib/os_mon/src/os_mon.app.src2
-rw-r--r--lib/parsetools/src/parsetools.app.src2
-rw-r--r--lib/public_key/src/public_key.app.src2
-rw-r--r--lib/sasl/src/release_handler.erl10
-rw-r--r--lib/sasl/src/sasl.app.src2
-rw-r--r--lib/sasl/test/sasl_SUITE.erl2
-rwxr-xr-xlib/snmp/configure1055
-rw-r--r--lib/snmp/configure.ac (renamed from lib/snmp/configure.in)17
-rw-r--r--lib/snmp/doc/src/snmpm.xml333
-rw-r--r--lib/snmp/src/agent/snmpa.erl15
-rw-r--r--lib/snmp/src/agent/snmpa_agent.erl242
-rw-r--r--lib/snmp/src/agent/snmpa_mib.erl24
-rw-r--r--lib/snmp/src/agent/snmpa_net_if.erl12
-rw-r--r--lib/snmp/src/agent/snmpa_trap.erl18
-rw-r--r--lib/snmp/src/app/snmp.app.src2
-rw-r--r--lib/snmp/src/manager/snmpm.erl249
-rw-r--r--lib/snmp/src/manager/snmpm_config.erl88
-rw-r--r--lib/snmp/src/manager/snmpm_server.erl212
-rw-r--r--lib/snmp/test/snmp_agent_mibs_SUITE.erl4
-rw-r--r--lib/snmp/test/snmp_manager_config_SUITE.erl28
-rw-r--r--lib/ssh/src/ssh.app.src4
-rw-r--r--lib/ssl/src/inet_tls_dist.erl11
-rw-r--r--lib/ssl/test/ssl_dist_SUITE.erl45
-rw-r--r--lib/stdlib/doc/src/array.xml2
-rw-r--r--lib/stdlib/doc/src/calendar.xml18
-rw-r--r--lib/stdlib/doc/src/gen_statem.xml12
-rw-r--r--lib/stdlib/doc/src/lists.xml42
-rw-r--r--lib/stdlib/doc/src/ms_transform.xml4
-rw-r--r--lib/stdlib/doc/src/timer.xml33
-rwxr-xr-xlib/stdlib/scripts/generate_ryu_table.escript108
-rw-r--r--lib/stdlib/src/Makefile1
-rw-r--r--lib/stdlib/src/calendar.erl33
-rw-r--r--lib/stdlib/src/erl_error.erl2
-rw-r--r--lib/stdlib/src/erl_lint.erl87
-rw-r--r--lib/stdlib/src/erl_posix_msg.erl2
-rw-r--r--lib/stdlib/src/erl_pp.erl6
-rw-r--r--lib/stdlib/src/erl_stdlib_errors.erl7
-rw-r--r--lib/stdlib/src/gen.erl2
-rw-r--r--lib/stdlib/src/gen_statem.erl41
-rw-r--r--lib/stdlib/src/io.erl3
-rw-r--r--lib/stdlib/src/io_lib_format.erl260
-rw-r--r--lib/stdlib/src/io_lib_format_ryu_table.erl686
-rw-r--r--lib/stdlib/src/lists.erl20
-rw-r--r--lib/stdlib/src/ms_transform.erl3
-rw-r--r--lib/stdlib/src/otp_internal.erl64
-rw-r--r--lib/stdlib/src/proc_lib.erl51
-rw-r--r--lib/stdlib/src/stdlib.app.src3
-rw-r--r--lib/stdlib/src/supervisor.erl23
-rw-r--r--lib/stdlib/src/timer.erl693
-rw-r--r--lib/stdlib/test/beam_lib_SUITE.erl21
-rw-r--r--lib/stdlib/test/calendar_SUITE.erl56
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl76
-rw-r--r--lib/stdlib/test/erl_pp_SUITE.erl26
-rw-r--r--lib/stdlib/test/ets_SUITE_data/visualize_throughput.html16
-rw-r--r--lib/stdlib/test/gen_server_SUITE.erl13
-rw-r--r--lib/stdlib/test/io_SUITE.erl10
-rw-r--r--lib/stdlib/test/lists_SUITE.erl20
-rw-r--r--lib/stdlib/test/ms_transform_SUITE.erl29
-rw-r--r--lib/stdlib/test/proc_lib_SUITE.erl39
-rw-r--r--lib/stdlib/test/shell_SUITE.erl2
-rw-r--r--lib/stdlib/test/shell_docs_SUITE.erl13
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/erlang.docs_v12
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/file.docs_v12
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_altname_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_copy_opened_3_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_1_func.txt3
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_2_func.txt3
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_3_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_int_3_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_open_2_func.txt9
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_path_eval_3_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_read_file_info_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_write_file_info_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_2_func.txt8
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_5_func.txt9
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_cb.txt3
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_interfaces_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_3_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_0_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_3_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_type.txt3
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/re.docs_v12
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/shell_docs_SUITE.docs_v11
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/sofs.docs_v12
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/stdlib_re.txt9
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_grun_3_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_internal_run_4_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_ucompile_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_urun_3_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_fam2rel_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_rel2fam_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_!_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_*_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_++_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_--_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_<_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=<_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_==_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=_=_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>=_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang__=_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang___2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_0_func.txt35
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_1_func.txt35
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_info_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_sizes_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_and_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_append_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_band_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_1_func.txt7
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_2_func.txt10
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bnot_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bor_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsl_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsr_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bxor_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_call_on_load_function_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_delay_trap_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_nl_0_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_string_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dist_get_stat_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_div_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dmonitor_node_3_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_append_vm_tag_data_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_0_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_data_0_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_prepend_vm_tag_data_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_put_tag_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_restore_tag_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_spread_tag_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_1_func.txt17
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_2_func.txt26
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_3_func.txt37
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_1_func.txt18
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_signal_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_after_on_load_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_loading_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_format_cpu_topology_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_fun_info_mfa_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_function_exported_3_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_garbage_collect_message_area_0_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_gather_gc_info_result_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_cookie_1_func.txt9
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_group_leader_2_func.txt4
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_has_prepared_code_on_load_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_hibernate_3_func.txt3
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_iolist_to_iovec_1_func.txt25
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_is_process_alive_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_link_1_func.txt60
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_list_to_existing_atom_1_func.txt4
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_load_module_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_fun_3_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_ref_0_func.txt2
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_memory_0_func.txt7
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_message_queue_data_0_type.txt4
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_2_func.txt4
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_3_func.txt80
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_node_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_not_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_or_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_call_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_get_data_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_set_data_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_posixtime_to_universaltime_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_pre_loaded_0_func.txt8
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_prepare_loading_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_flag_2_func.txt8
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_info_2_func.txt16
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_raise_3_func.txt17
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_register_2_func.txt13
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_rem_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_send_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_info_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_2_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_1_func.txt12
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_2_func.txt9
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cpu_topology_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_3_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_spawn_opt_4_func.txt11
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_0_type.txt10
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_extrainfo_0_type.txt10
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_statistics_1_func.txt20
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_subtract_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_system_info_1_func.txt8
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_binary_2_func.txt7
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_iovec_2_func.txt1
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_trace_3_func.txt9
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_type.txt14
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unalias_1_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_universaltime_to_posixtime_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unlink_1_func.txt51
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unregister_1_func.txt9
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_whereis_1_func.txt6
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_xor_2_func.txt5
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE.txt4
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_cb.txt3
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_type.txt3
-rw-r--r--lib/stdlib/test/shell_docs_SUITE_data/user_drv.docs_v11
-rw-r--r--lib/stdlib/test/stdlib_SUITE.erl2
-rw-r--r--lib/stdlib/test/stdlib_bench_SUITE.erl46
-rw-r--r--lib/stdlib/test/timer_SUITE.erl10
-rw-r--r--lib/stdlib/test/timer_simple_SUITE.erl317
-rw-r--r--lib/tools/emacs/erlang_appwiz.el2
-rw-r--r--lib/wx/Makefile1
-rwxr-xr-xlib/wx/autoconf/config.guess1700
-rwxr-xr-xlib/wx/autoconf/config.sub1860
-rwxr-xr-xlib/wx/autoconf/install-sh541
-rw-r--r--lib/wx/config.mk.in8
-rwxr-xr-xlib/wx/configure4268
-rw-r--r--lib/wx/configure.ac (renamed from lib/wx/configure.in)146
-rw-r--r--lib/wx/src/wx.app.src2
-rwxr-xr-xmake/autoconf/config.guess (renamed from lib/common_test/priv/auxdir/config.guess)0
-rwxr-xr-xmake/autoconf/config.sub (renamed from lib/common_test/priv/auxdir/config.sub)0
-rwxr-xr-xmake/autoconf/install-sh (renamed from lib/common_test/priv/auxdir/install-sh)0
-rw-r--r--make/autoconf/otp.m4 (renamed from erts/aclocal.m4)773
-rwxr-xr-xmake/autoconf/win32.config.cache.static (renamed from erts/autoconf/win32.config.cache.static)6
-rwxr-xr-xmake/autoconf/win64.config.cache.static (renamed from erts/autoconf/win64.config.cache.static)6
-rwxr-xr-xmake/configure4376
-rw-r--r--make/configure.ac (renamed from make/configure.in)38
-rw-r--r--make/doc.mk4
-rw-r--r--make/otp_version_tickets_in_merge8
-rw-r--r--make/target.mk4
-rwxr-xr-xmake/test_target_script.sh2
-rwxr-xr-xotp_build79
-rwxr-xr-xotp_patch_apply4
-rwxr-xr-xscripts/build-otp-tar2
-rwxr-xr-xscripts/pre-push6
-rwxr-xr-xscripts/run-dialyzer4
-rw-r--r--system/doc/efficiency_guide/commoncaveats.xmlsrc15
-rw-r--r--system/doc/tutorial/c_port.xmlsrc2
-rw-r--r--xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf6
-rw-r--r--xcomp/erl-xcomp-arm-android.conf6
-rw-r--r--xcomp/erl-xcomp-arm-linux.conf6
-rw-r--r--xcomp/erl-xcomp-arm64-android.conf6
-rw-r--r--xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf6
-rw-r--r--xcomp/erl-xcomp-avr32-atmel-linux-gnu.conf6
-rw-r--r--xcomp/erl-xcomp-mips-linux.conf6
-rw-r--r--xcomp/erl-xcomp-powerpc-dso-linux-gnu.conf6
-rw-r--r--xcomp/erl-xcomp-powerpc64-bgq-linux.conf6
-rw-r--r--xcomp/erl-xcomp-x86_64-android.conf6
-rw-r--r--xcomp/erl-xcomp-x86_64-saf-linux-gnu.conf6
-rw-r--r--xcomp/erl-xcomp.conf.template6
808 files changed, 80465 insertions, 48078 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index 970aecb551..860f2248a8 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -2,6 +2,7 @@
(
(erlang-mode (indent-tabs-mode . nil))
(autoconf-mode (indent-tabs-mode . nil))
+ (m4-mode (indent-tabs-mode . nil))
(java-mode (indent-tabs-mode . nil))
(perl-mode (indent-tabs-mode . nil))
(xml-mode (indent-tabs-mode . nil))
diff --git a/.github/dockerfiles/Dockerfile.ubuntu-base b/.github/dockerfiles/Dockerfile.ubuntu-base
index 93cc3f2b45..f18ff2dd47 100644
--- a/.github/dockerfiles/Dockerfile.ubuntu-base
+++ b/.github/dockerfiles/Dockerfile.ubuntu-base
@@ -6,6 +6,8 @@ FROM ubuntu
ENV INSTALL_LIBS="zlib1g-dev libncurses5-dev libssl-dev unixodbc-dev libgmp3-dev libwxbase3.0-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libsctp-dev lksctp-tools"
ENV DEBIAN_FRONTEND=noninteractive
+ENV LANG=C.UTF-8
+ENV LC_ALL=C.UTF-8
RUN apt-get update && \
apt-get -y upgrade && \
diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 1d1f2b44bc..1d9d5f2f63 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -175,7 +175,7 @@ jobs:
## Documentation checks
- if: matrix.type == 'documentation'
- name: Run xmllimt
+ name: Run xmllint
run: docker run otp "make xmllint"
- if: matrix.type == 'documentation'
name: Run html link check
diff --git a/.gitignore b/.gitignore
index 794d384b4d..a7e935b7b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -59,8 +59,8 @@ a.out.dSYM/
*.pdb
local.static.config.cache
tcltk85_win32_bin.tar.gz
-erts/autoconf/win32.config.cache
-erts/autoconf/win64.config.cache
+make/autoconf/win32.config.cache
+make/autoconf/win64.config.cache
erts/emulator/obj/
erts/emulator/pcre/obj/
erts/emulator/pcre/win32/
diff --git a/HOWTO/INSTALL-CROSS.md b/HOWTO/INSTALL-CROSS.md
index f2494e6f1c..7366811a43 100644
--- a/HOWTO/INSTALL-CROSS.md
+++ b/HOWTO/INSTALL-CROSS.md
@@ -130,11 +130,11 @@ be built.
`<HOST>` is the host/target system that you build for. It does not have to be
a full `CPU-VENDOR-OS` triplet, but can be. The full canonicalized
`CPU-VENDOR-OS` triplet will be created by executing
-`$ERL_TOP/erts/autoconf/config.sub <HOST>`. If `config.sub` fails, you need
+`$ERL_TOP/make/autoconf/config.sub <HOST>`. If `config.sub` fails, you need
to be more specific.
`<BUILD>` should equal the `CPU-VENDOR-OS` triplet of the system that you
-build on. If you execute `$ERL_TOP/erts/autoconf/config.guess`, it will in
+build on. If you execute `$ERL_TOP/make/autoconf/config.guess`, it will in
most cases print the triplet you want to use for this.
The use of `<HOST>` and `<BUILD>` values that differ will trigger cross
@@ -344,15 +344,15 @@ cross compilation using `$ERL_TOP/otp_build configure`.
`--build=$erl_xcomp_build` argument to the `configure` script. It does
not have to be a full `CPU-VENDOR-OS` triplet, but can be. The full
`CPU-VENDOR-OS` triplet will be created by
- `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build`. If set to `guess`,
+ `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build`. If set to `guess`,
the build system will be guessed using
- `$ERL_TOP/erts/autoconf/config.guess`.
+ `$ERL_TOP/make/autoconf/config.guess`.
* `erl_xcomp_host` - Cross host/target system to build for. This value will
be passed as `--host=$erl_xcomp_host` argument to the `configure` script.
It does not have to be a full `CPU-VENDOR-OS` triplet, but can be. The
full `CPU-VENDOR-OS` triplet will be created by
- `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host`.
+ `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host`.
* `erl_xcomp_configure_flags` - Extra configure flags to pass to the
`configure` script.
diff --git a/Makefile.in b/Makefile.in
index bf867f66ce..a7849b8a8c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1095,7 +1095,7 @@ tests release_tests: $(TEST_DIRS)
$(TEST_DIRS):
if test -f $@/Makefile; then \
- (cd $@; $(MAKE) TESTROOT="$(TESTSUITE_ROOT)" \
+ (cd $@; $(MAKE) TESTROOT="$(TESTSUITE_ROOT)" ERL_TOP="$(ERL_TOP)" \
PATH=$(TEST_PATH_PREFIX)$(BOOT_PREFIX)"$${PATH}" release_tests) || exit $$?; \
fi
diff --git a/OTP_VERSION b/OTP_VERSION
index beafbdd5e8..b89c848bbe 100644
--- a/OTP_VERSION
+++ b/OTP_VERSION
@@ -1 +1 @@
-24.1.2
+25.0-rc0
diff --git a/bootstrap/bin/no_dot_erlang.boot b/bootstrap/bin/no_dot_erlang.boot
index 3e0d3f3601..9bc45122e1 100644
--- a/bootstrap/bin/no_dot_erlang.boot
+++ b/bootstrap/bin/no_dot_erlang.boot
Binary files differ
diff --git a/bootstrap/bin/start.boot b/bootstrap/bin/start.boot
index 3e0d3f3601..9bc45122e1 100644
--- a/bootstrap/bin/start.boot
+++ b/bootstrap/bin/start.boot
Binary files differ
diff --git a/bootstrap/bin/start_clean.boot b/bootstrap/bin/start_clean.boot
index 3e0d3f3601..9bc45122e1 100644
--- a/bootstrap/bin/start_clean.boot
+++ b/bootstrap/bin/start_clean.boot
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_asm.beam b/bootstrap/lib/compiler/ebin/beam_asm.beam
index f1bccf56dc..17523e89e1 100644
--- a/bootstrap/lib/compiler/ebin/beam_asm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_asm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_block.beam b/bootstrap/lib/compiler/ebin/beam_block.beam
index 9dbed5dfa2..a0527cb73d 100644
--- a/bootstrap/lib/compiler/ebin/beam_block.beam
+++ b/bootstrap/lib/compiler/ebin/beam_block.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_clean.beam b/bootstrap/lib/compiler/ebin/beam_clean.beam
index 7fad16c7d3..fa8d2cc8e9 100644
--- a/bootstrap/lib/compiler/ebin/beam_clean.beam
+++ b/bootstrap/lib/compiler/ebin/beam_clean.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_jump.beam b/bootstrap/lib/compiler/ebin/beam_jump.beam
index ea808d20bc..f7fe4a1e1e 100644
--- a/bootstrap/lib/compiler/ebin/beam_jump.beam
+++ b/bootstrap/lib/compiler/ebin/beam_jump.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_kernel_to_ssa.beam b/bootstrap/lib/compiler/ebin/beam_kernel_to_ssa.beam
index 25b14e58a3..1dcefebf9b 100644
--- a/bootstrap/lib/compiler/ebin/beam_kernel_to_ssa.beam
+++ b/bootstrap/lib/compiler/ebin/beam_kernel_to_ssa.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_listing.beam b/bootstrap/lib/compiler/ebin/beam_listing.beam
index fde816c110..9e811ea22f 100644
--- a/bootstrap/lib/compiler/ebin/beam_listing.beam
+++ b/bootstrap/lib/compiler/ebin/beam_listing.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_peep.beam b/bootstrap/lib/compiler/ebin/beam_peep.beam
deleted file mode 100644
index 8f3d8962b8..0000000000
--- a/bootstrap/lib/compiler/ebin/beam_peep.beam
+++ /dev/null
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa.beam b/bootstrap/lib/compiler/ebin/beam_ssa.beam
index b5ae0c8e0d..07dcbbbc33 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_bc_size.beam b/bootstrap/lib/compiler/ebin/beam_ssa_bc_size.beam
index 9b91bd9bdc..df386da40f 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_bc_size.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_bc_size.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_bool.beam b/bootstrap/lib/compiler/ebin/beam_ssa_bool.beam
index aabaf0b44d..2df664e8d8 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_bool.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_bool.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_bsm.beam b/bootstrap/lib/compiler/ebin/beam_ssa_bsm.beam
index 0b00d981f0..62d5c902c2 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_bsm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_bsm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_codegen.beam b/bootstrap/lib/compiler/ebin/beam_ssa_codegen.beam
index f3f6a2483d..ea852bcdf0 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_codegen.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_codegen.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_dead.beam b/bootstrap/lib/compiler/ebin/beam_ssa_dead.beam
index 73a845193a..08dcd109ca 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_dead.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_dead.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_opt.beam b/bootstrap/lib/compiler/ebin/beam_ssa_opt.beam
index cbbe63ae31..09ef719aea 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_opt.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_opt.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_pp.beam b/bootstrap/lib/compiler/ebin/beam_ssa_pp.beam
index 0da9e9d8a6..c3c90622fc 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_pp.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_pp.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_pre_codegen.beam b/bootstrap/lib/compiler/ebin/beam_ssa_pre_codegen.beam
index d75c4c55fc..e68410b49d 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_pre_codegen.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_pre_codegen.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_recv.beam b/bootstrap/lib/compiler/ebin/beam_ssa_recv.beam
index 0151a2e706..5a3e421f6e 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_recv.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_recv.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_ssa_type.beam b/bootstrap/lib/compiler/ebin/beam_ssa_type.beam
index 697f8f6f23..0e412a1224 100644
--- a/bootstrap/lib/compiler/ebin/beam_ssa_type.beam
+++ b/bootstrap/lib/compiler/ebin/beam_ssa_type.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_trim.beam b/bootstrap/lib/compiler/ebin/beam_trim.beam
index 5d6d124132..600c1363a4 100644
--- a/bootstrap/lib/compiler/ebin/beam_trim.beam
+++ b/bootstrap/lib/compiler/ebin/beam_trim.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_types.beam b/bootstrap/lib/compiler/ebin/beam_types.beam
index 00653a1588..0a3673b6ee 100644
--- a/bootstrap/lib/compiler/ebin/beam_types.beam
+++ b/bootstrap/lib/compiler/ebin/beam_types.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_utils.beam b/bootstrap/lib/compiler/ebin/beam_utils.beam
index 3c7d3aa3b5..a74b165f9c 100644
--- a/bootstrap/lib/compiler/ebin/beam_utils.beam
+++ b/bootstrap/lib/compiler/ebin/beam_utils.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_validator.beam b/bootstrap/lib/compiler/ebin/beam_validator.beam
index ffb43389a5..36ff012602 100644
--- a/bootstrap/lib/compiler/ebin/beam_validator.beam
+++ b/bootstrap/lib/compiler/ebin/beam_validator.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl.beam b/bootstrap/lib/compiler/ebin/cerl.beam
index 6415ba73a5..7de1ce071f 100644
--- a/bootstrap/lib/compiler/ebin/cerl.beam
+++ b/bootstrap/lib/compiler/ebin/cerl.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_clauses.beam b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
index 8f5d43d1a6..aa8b40c3a0 100644
--- a/bootstrap/lib/compiler/ebin/cerl_clauses.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_inline.beam b/bootstrap/lib/compiler/ebin/cerl_inline.beam
index 0d6904e4fd..cea9f48f8c 100644
--- a/bootstrap/lib/compiler/ebin/cerl_inline.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_inline.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compile.beam b/bootstrap/lib/compiler/ebin/compile.beam
index 279f5e194c..50a318b979 100644
--- a/bootstrap/lib/compiler/ebin/compile.beam
+++ b/bootstrap/lib/compiler/ebin/compile.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compiler.app b/bootstrap/lib/compiler/ebin/compiler.app
index 516f28d4f3..c84ab46131 100644
--- a/bootstrap/lib/compiler/ebin/compiler.app
+++ b/bootstrap/lib/compiler/ebin/compiler.app
@@ -34,7 +34,6 @@
beam_kernel_to_ssa,
beam_listing,
beam_opcodes,
- beam_peep,
beam_ssa,
beam_ssa_bc_size,
beam_ssa_bool,
@@ -82,5 +81,5 @@
{registered, []},
{applications, [kernel, stdlib]},
{env, []},
- {runtime_dependencies, ["stdlib-3.13","kernel-7.0","erts-11.0",
- "crypto-3.6"]}]}.
+ {runtime_dependencies, ["stdlib-3.15","kernel-7.0","erts-11.0",
+ "crypto-4.5"]}]}.
diff --git a/bootstrap/lib/compiler/ebin/core_lint.beam b/bootstrap/lib/compiler/ebin/core_lint.beam
index 5ee46bdf47..11457395ac 100644
--- a/bootstrap/lib/compiler/ebin/core_lint.beam
+++ b/bootstrap/lib/compiler/ebin/core_lint.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_scan.beam b/bootstrap/lib/compiler/ebin/core_scan.beam
index d02ac0d553..5f512ee8df 100644
--- a/bootstrap/lib/compiler/ebin/core_scan.beam
+++ b/bootstrap/lib/compiler/ebin/core_scan.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/erl_bifs.beam b/bootstrap/lib/compiler/ebin/erl_bifs.beam
index 17c4e1c119..72e40a1c26 100644
--- a/bootstrap/lib/compiler/ebin/erl_bifs.beam
+++ b/bootstrap/lib/compiler/ebin/erl_bifs.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_fold.beam b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
index e41b8d7b8c..7ab2765a6c 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_fold.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_inline.beam b/bootstrap/lib/compiler/ebin/sys_core_inline.beam
index 020b5e1782..d4cb0a38ac 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_inline.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_inline.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_messages.beam b/bootstrap/lib/compiler/ebin/sys_messages.beam
index a73a6e16ab..cf72d60bee 100644
--- a/bootstrap/lib/compiler/ebin/sys_messages.beam
+++ b/bootstrap/lib/compiler/ebin/sys_messages.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam
index f00beca596..5be6392d78 100644
--- a/bootstrap/lib/compiler/ebin/v3_core.beam
+++ b/bootstrap/lib/compiler/ebin/v3_core.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_kernel.beam b/bootstrap/lib/compiler/ebin/v3_kernel.beam
index 5d5034d574..229874e448 100644
--- a/bootstrap/lib/compiler/ebin/v3_kernel.beam
+++ b/bootstrap/lib/compiler/ebin/v3_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application.beam b/bootstrap/lib/kernel/ebin/application.beam
index c483be1bfc..c2301294c2 100644
--- a/bootstrap/lib/kernel/ebin/application.beam
+++ b/bootstrap/lib/kernel/ebin/application.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_controller.beam b/bootstrap/lib/kernel/ebin/application_controller.beam
index c91dc12b66..73c4dccf71 100644
--- a/bootstrap/lib/kernel/ebin/application_controller.beam
+++ b/bootstrap/lib/kernel/ebin/application_controller.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_master.beam b/bootstrap/lib/kernel/ebin/application_master.beam
index b33ffefe5a..3572242d6a 100644
--- a/bootstrap/lib/kernel/ebin/application_master.beam
+++ b/bootstrap/lib/kernel/ebin/application_master.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_starter.beam b/bootstrap/lib/kernel/ebin/application_starter.beam
index 76389d5a52..b8e937b06e 100644
--- a/bootstrap/lib/kernel/ebin/application_starter.beam
+++ b/bootstrap/lib/kernel/ebin/application_starter.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/code.beam b/bootstrap/lib/kernel/ebin/code.beam
index 424cd89028..4949197fb2 100644
--- a/bootstrap/lib/kernel/ebin/code.beam
+++ b/bootstrap/lib/kernel/ebin/code.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/code_server.beam b/bootstrap/lib/kernel/ebin/code_server.beam
index d9f205f7d7..e2eddcce88 100644
--- a/bootstrap/lib/kernel/ebin/code_server.beam
+++ b/bootstrap/lib/kernel/ebin/code_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log.beam b/bootstrap/lib/kernel/ebin/disk_log.beam
index 5c135ebed8..99f78abb98 100644
--- a/bootstrap/lib/kernel/ebin/disk_log.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log_1.beam b/bootstrap/lib/kernel/ebin/disk_log_1.beam
index 80f8427f8d..ebf53644ba 100644
--- a/bootstrap/lib/kernel/ebin/disk_log_1.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log_1.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/dist_ac.beam b/bootstrap/lib/kernel/ebin/dist_ac.beam
index 7ad634716e..3be44caf68 100644
--- a/bootstrap/lib/kernel/ebin/dist_ac.beam
+++ b/bootstrap/lib/kernel/ebin/dist_ac.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/dist_util.beam b/bootstrap/lib/kernel/ebin/dist_util.beam
index 7793ecace4..67ef514e76 100644
--- a/bootstrap/lib/kernel/ebin/dist_util.beam
+++ b/bootstrap/lib/kernel/ebin/dist_util.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_boot_server.beam b/bootstrap/lib/kernel/ebin/erl_boot_server.beam
index dae1ab427c..699eeaf1a9 100644
--- a/bootstrap/lib/kernel/ebin/erl_boot_server.beam
+++ b/bootstrap/lib/kernel/ebin/erl_boot_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_erts_errors.beam b/bootstrap/lib/kernel/ebin/erl_erts_errors.beam
index 9f7cd7df47..93e76a3ed9 100644
--- a/bootstrap/lib/kernel/ebin/erl_erts_errors.beam
+++ b/bootstrap/lib/kernel/ebin/erl_erts_errors.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_kernel_errors.beam b/bootstrap/lib/kernel/ebin/erl_kernel_errors.beam
index aa98334072..4ab24bc760 100644
--- a/bootstrap/lib/kernel/ebin/erl_kernel_errors.beam
+++ b/bootstrap/lib/kernel/ebin/erl_kernel_errors.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erpc.beam b/bootstrap/lib/kernel/ebin/erpc.beam
index 81048671a4..7f59ce6c72 100644
--- a/bootstrap/lib/kernel/ebin/erpc.beam
+++ b/bootstrap/lib/kernel/ebin/erpc.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file.beam b/bootstrap/lib/kernel/ebin/file.beam
index 9e2ccc4384..1608244bdd 100644
--- a/bootstrap/lib/kernel/ebin/file.beam
+++ b/bootstrap/lib/kernel/ebin/file.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file_io_server.beam b/bootstrap/lib/kernel/ebin/file_io_server.beam
index 62e072baa7..94d8986350 100644
--- a/bootstrap/lib/kernel/ebin/file_io_server.beam
+++ b/bootstrap/lib/kernel/ebin/file_io_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_sctp.beam b/bootstrap/lib/kernel/ebin/gen_sctp.beam
index 66396860ff..2dc441c52a 100644
--- a/bootstrap/lib/kernel/ebin/gen_sctp.beam
+++ b/bootstrap/lib/kernel/ebin/gen_sctp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_tcp_socket.beam b/bootstrap/lib/kernel/ebin/gen_tcp_socket.beam
index e71272d071..692182fc19 100644
--- a/bootstrap/lib/kernel/ebin/gen_tcp_socket.beam
+++ b/bootstrap/lib/kernel/ebin/gen_tcp_socket.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_udp_socket.beam b/bootstrap/lib/kernel/ebin/gen_udp_socket.beam
index 9bc07a711e..528ee2331d 100644
--- a/bootstrap/lib/kernel/ebin/gen_udp_socket.beam
+++ b/bootstrap/lib/kernel/ebin/gen_udp_socket.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/global.beam b/bootstrap/lib/kernel/ebin/global.beam
index 56ba635c60..f1e082841e 100644
--- a/bootstrap/lib/kernel/ebin/global.beam
+++ b/bootstrap/lib/kernel/ebin/global.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/group.beam b/bootstrap/lib/kernel/ebin/group.beam
index bd8ad6948e..b89c8e24b8 100644
--- a/bootstrap/lib/kernel/ebin/group.beam
+++ b/bootstrap/lib/kernel/ebin/group.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/group_history.beam b/bootstrap/lib/kernel/ebin/group_history.beam
index f95b1229ee..127a060c36 100644
--- a/bootstrap/lib/kernel/ebin/group_history.beam
+++ b/bootstrap/lib/kernel/ebin/group_history.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet.beam b/bootstrap/lib/kernel/ebin/inet.beam
index 23ecec65dd..146900f81d 100644
--- a/bootstrap/lib/kernel/ebin/inet.beam
+++ b/bootstrap/lib/kernel/ebin/inet.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_config.beam b/bootstrap/lib/kernel/ebin/inet_config.beam
index f36e6c5592..ef8fce960d 100644
--- a/bootstrap/lib/kernel/ebin/inet_config.beam
+++ b/bootstrap/lib/kernel/ebin/inet_config.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_db.beam b/bootstrap/lib/kernel/ebin/inet_db.beam
index cddd91d3d0..77086bb103 100644
--- a/bootstrap/lib/kernel/ebin/inet_db.beam
+++ b/bootstrap/lib/kernel/ebin/inet_db.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_dns.beam b/bootstrap/lib/kernel/ebin/inet_dns.beam
index 2f27439f9b..4cb2ae812a 100644
--- a/bootstrap/lib/kernel/ebin/inet_dns.beam
+++ b/bootstrap/lib/kernel/ebin/inet_dns.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_parse.beam b/bootstrap/lib/kernel/ebin/inet_parse.beam
index e55e747bc7..13362ff802 100644
--- a/bootstrap/lib/kernel/ebin/inet_parse.beam
+++ b/bootstrap/lib/kernel/ebin/inet_parse.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_res.beam b/bootstrap/lib/kernel/ebin/inet_res.beam
index 3c2df45993..ca3eda884e 100644
--- a/bootstrap/lib/kernel/ebin/inet_res.beam
+++ b/bootstrap/lib/kernel/ebin/inet_res.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
index cb927beda5..c5ef18d4aa 100644
--- a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
+++ b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/kernel.app b/bootstrap/lib/kernel/ebin/kernel.app
index 8621630ad5..98d18357b6 100644
--- a/bootstrap/lib/kernel/ebin/kernel.app
+++ b/bootstrap/lib/kernel/ebin/kernel.app
@@ -155,6 +155,6 @@
{shell_docs_ansi,auto}
]},
{mod, {kernel, []}},
- {runtime_dependencies, ["erts-12.0", "stdlib-3.13", "sasl-3.0", "crypto-5.0"]}
+ {runtime_dependencies, ["erts-12.0", "stdlib-3.15", "sasl-3.0", "crypto-5.0"]}
]
}.
diff --git a/bootstrap/lib/kernel/ebin/kernel_config.beam b/bootstrap/lib/kernel/ebin/kernel_config.beam
index 7850013863..247b7a7e5a 100644
--- a/bootstrap/lib/kernel/ebin/kernel_config.beam
+++ b/bootstrap/lib/kernel/ebin/kernel_config.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/logger.beam b/bootstrap/lib/kernel/ebin/logger.beam
index 7015f8dbf7..092be72605 100644
--- a/bootstrap/lib/kernel/ebin/logger.beam
+++ b/bootstrap/lib/kernel/ebin/logger.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/logger_disk_log_h.beam b/bootstrap/lib/kernel/ebin/logger_disk_log_h.beam
index df2a359a78..c41e2b91cb 100644
--- a/bootstrap/lib/kernel/ebin/logger_disk_log_h.beam
+++ b/bootstrap/lib/kernel/ebin/logger_disk_log_h.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/logger_formatter.beam b/bootstrap/lib/kernel/ebin/logger_formatter.beam
index 0874f8de46..877a22587f 100644
--- a/bootstrap/lib/kernel/ebin/logger_formatter.beam
+++ b/bootstrap/lib/kernel/ebin/logger_formatter.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/logger_std_h.beam b/bootstrap/lib/kernel/ebin/logger_std_h.beam
index 34d19eb954..ff2545eb2e 100644
--- a/bootstrap/lib/kernel/ebin/logger_std_h.beam
+++ b/bootstrap/lib/kernel/ebin/logger_std_h.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/net_kernel.beam b/bootstrap/lib/kernel/ebin/net_kernel.beam
index 65a54f22e9..5a628bf575 100644
--- a/bootstrap/lib/kernel/ebin/net_kernel.beam
+++ b/bootstrap/lib/kernel/ebin/net_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/os.beam b/bootstrap/lib/kernel/ebin/os.beam
index a907f9f2c6..87add18c7b 100644
--- a/bootstrap/lib/kernel/ebin/os.beam
+++ b/bootstrap/lib/kernel/ebin/os.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/pg.beam b/bootstrap/lib/kernel/ebin/pg.beam
index 2dd5265a20..9c59e2ab28 100644
--- a/bootstrap/lib/kernel/ebin/pg.beam
+++ b/bootstrap/lib/kernel/ebin/pg.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/ram_file.beam b/bootstrap/lib/kernel/ebin/ram_file.beam
index d1c4df77a4..1d97670ca2 100644
--- a/bootstrap/lib/kernel/ebin/ram_file.beam
+++ b/bootstrap/lib/kernel/ebin/ram_file.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/raw_file_io.beam b/bootstrap/lib/kernel/ebin/raw_file_io.beam
index 62ee19cba8..164863b7fb 100644
--- a/bootstrap/lib/kernel/ebin/raw_file_io.beam
+++ b/bootstrap/lib/kernel/ebin/raw_file_io.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/raw_file_io_deflate.beam b/bootstrap/lib/kernel/ebin/raw_file_io_deflate.beam
index 6deb5b7a66..df5e542126 100644
--- a/bootstrap/lib/kernel/ebin/raw_file_io_deflate.beam
+++ b/bootstrap/lib/kernel/ebin/raw_file_io_deflate.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/rpc.beam b/bootstrap/lib/kernel/ebin/rpc.beam
index 353f3d81d6..a99558dd1a 100644
--- a/bootstrap/lib/kernel/ebin/rpc.beam
+++ b/bootstrap/lib/kernel/ebin/rpc.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/socket.beam b/bootstrap/lib/kernel/ebin/socket.beam
index 24da3d2a9b..3bac1a7e7d 100644
--- a/bootstrap/lib/kernel/ebin/socket.beam
+++ b/bootstrap/lib/kernel/ebin/socket.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/user.beam b/bootstrap/lib/kernel/ebin/user.beam
index 2d28cec7d3..d954f6cce7 100644
--- a/bootstrap/lib/kernel/ebin/user.beam
+++ b/bootstrap/lib/kernel/ebin/user.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/user_drv.beam b/bootstrap/lib/kernel/ebin/user_drv.beam
index e3d5927875..8554d63e22 100644
--- a/bootstrap/lib/kernel/ebin/user_drv.beam
+++ b/bootstrap/lib/kernel/ebin/user_drv.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/include/dist.hrl b/bootstrap/lib/kernel/include/dist.hrl
index 05beaf9a48..7080b60f2e 100644
--- a/bootstrap/lib/kernel/include/dist.hrl
+++ b/bootstrap/lib/kernel/include/dist.hrl
@@ -22,35 +22,54 @@
%% Distribution capabilities flags (corresponds with dist.h).
%%
--define(DFLAG_PUBLISHED,1).
--define(DFLAG_ATOM_CACHE,2).
--define(DFLAG_EXTENDED_REFERENCES,4).
--define(DFLAG_DIST_MONITOR,8).
--define(DFLAG_FUN_TAGS,16#10).
--define(DFLAG_DIST_MONITOR_NAME,16#20).
--define(DFLAG_HIDDEN_ATOM_CACHE,16#40).
--define(DFLAG_NEW_FUN_TAGS,16#80).
--define(DFLAG_EXTENDED_PIDS_PORTS,16#100).
--define(DFLAG_EXPORT_PTR_TAG,16#200).
--define(DFLAG_BIT_BINARIES,16#400).
--define(DFLAG_NEW_FLOATS,16#800).
--define(DFLAG_UNICODE_IO,16#1000).
--define(DFLAG_DIST_HDR_ATOM_CACHE,16#2000).
--define(DFLAG_SMALL_ATOM_TAGS, 16#4000).
--define(DFLAG_UTF8_ATOMS, 16#10000).
--define(DFLAG_MAP_TAG, 16#20000).
--define(DFLAG_BIG_CREATION, 16#40000).
--define(DFLAG_SEND_SENDER, 16#80000).
--define(DFLAG_BIG_SEQTRACE_LABELS, 16#100000).
-%% -define(DFLAG_NO_MAGIC, 16#200000). %% Used internally only
--define(DFLAG_EXIT_PAYLOAD, 16#400000).
--define(DFLAG_FRAGMENTS, 16#00800000).
--define(DFLAG_HANDSHAKE_23, 16#01000000).
--define(DFLAG_RESERVED, 16#fe000000).
--define(DFLAG_SPAWN, 16#100000000).
--define(DFLAG_NAME_ME, 16#200000000).
--define(DFLAG_V4_NC, 16#400000000).
--define(DFLAG_ALIAS, 16#800000000).
+-define(DFLAG_PUBLISHED, 16#01).
+-define(DFLAG_ATOM_CACHE, 16#02).
+-define(DFLAG_EXTENDED_REFERENCES, 16#04).
+-define(DFLAG_DIST_MONITOR, 16#08).
+-define(DFLAG_FUN_TAGS, 16#10).
+-define(DFLAG_DIST_MONITOR_NAME, 16#20).
+-define(DFLAG_HIDDEN_ATOM_CACHE, 16#40).
+-define(DFLAG_NEW_FUN_TAGS, 16#80).
+-define(DFLAG_EXTENDED_PIDS_PORTS, 16#100).
+-define(DFLAG_EXPORT_PTR_TAG, 16#200).
+-define(DFLAG_BIT_BINARIES, 16#400).
+-define(DFLAG_NEW_FLOATS, 16#800).
+-define(DFLAG_UNICODE_IO, 16#1000).
+-define(DFLAG_DIST_HDR_ATOM_CACHE, 16#2000).
+-define(DFLAG_SMALL_ATOM_TAGS, 16#4000).
+-define(DFLAG_UTF8_ATOMS, 16#10000).
+-define(DFLAG_MAP_TAG, 16#20000).
+-define(DFLAG_BIG_CREATION, 16#40000).
+-define(DFLAG_SEND_SENDER, 16#80000).
+-define(DFLAG_BIG_SEQTRACE_LABELS, 16#100000).
+%% -define(DFLAG_NO_MAGIC, 16#200000). %% Used internally only
+-define(DFLAG_EXIT_PAYLOAD, 16#400000).
+-define(DFLAG_FRAGMENTS, 16#00800000).
+-define(DFLAG_HANDSHAKE_23, 16#01000000).
+-define(DFLAG_UNLINK_ID, 16#02000000).
+-define(DFLAG_MANDATORY_25_DIGEST, 16#04000000).
+-define(DFLAG_RESERVED, 16#f8000000).
+
+%% Second 32-bit flag word.
+-define(DFLAG_SPAWN, (16#01 bsl 32)).
+-define(DFLAG_NAME_ME, (16#02 bsl 32)).
+-define(DFLAG_V4_NC, (16#04 bsl 32)).
+-define(DFLAG_ALIAS, (16#08 bsl 32)).
+
+%% The following flags are mandatory in OTP 25. OTP 25 and higher
+%% will accept ?DFLAG_MANDATORY_25_DIGEST as a shorthand for all those
+%% flags.
+-define(MANDATORY_DFLAGS_25,
+ (?DFLAG_EXTENDED_REFERENCES bor
+ ?DFLAG_FUN_TAGS bor
+ ?DFLAG_EXTENDED_PIDS_PORTS bor
+ ?DFLAG_NEW_FUN_TAGS bor
+ ?DFLAG_EXPORT_PTR_TAG bor
+ ?DFLAG_BIT_BINARIES bor
+ ?DFLAG_NEW_FLOATS bor
+ ?DFLAG_UTF8_ATOMS bor
+ ?DFLAG_MAP_TAG bor
+ ?DFLAG_BIG_CREATION)).
%% Also update dflag2str() in ../src/dist_util.erl
%% when adding flags...
@@ -62,3 +81,32 @@
-define(ERL_DIST_VER_LOW, ?ERL_DIST_VER_5).
-define(ERL_DIST_VER_HIGH, ?ERL_DIST_VER_6).
+%%%
+%%% To avoid having to extend the number of distribution flags from 64
+%%% to 128, a scheme for garbage collection of the flags was
+%%% introduced in OTP 25.
+%%%
+%%% In OTP 25, ?DFLAG_MANDATORY_25_DIGEST was introduced as a synonym
+%%% for the flags defined by ?MANDATORY_DFLAGS_25. OTP 25/26 will
+%%% accept the old flags to support communication with 24 and earlier,
+%%% as well as ?DFLAG_MANDATORY_25_DIGEST.
+%%%
+%%% OTP 27 will make ?DFLAG_MANDATORY_25_DIGEST mandatory, meaning that an
+%%% OTP 27 node can only communicate with OTP 25 and higher.
+%%%
+%%% An OTP 27 node will also introduce the new flag
+%%% ?DFLAG_MANDATORY_27_DIGEST:
+%%%
+%%% * If ?DFLAG_MANDATORY_27_DIGEST is set, it means that all bit
+%%% numbers defined by ?MANDATORY_DFLAGS_25, as well as the bit
+%%% number defined by ?DFLAG_MANDATORY_25_DIGEST and any other bits
+%%% made mandatory in OTP 26/27, lose their previous meanings. New
+%%% meanings can then be assigned to those bit numbers as
+%%% needed. (This is for communication between nodes from OTP 27 and
+%%% up.)
+%%%
+%%% * If ?DFLAG_MANDATORY_27_DIGEST is not set, then
+%%% ?DFLAG_MANDATORY_25_DIGEST must be set and all bit numbers
+%%% defined by ?MANDATORY_DFLAGS_25 are ignored. (This is for
+%%% communication between an OTP 27 node and an OTP 25/26 node.)
+%%%
diff --git a/bootstrap/lib/stdlib/ebin/array.beam b/bootstrap/lib/stdlib/ebin/array.beam
index e837453f20..dac86eecfe 100644
--- a/bootstrap/lib/stdlib/ebin/array.beam
+++ b/bootstrap/lib/stdlib/ebin/array.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/beam_lib.beam b/bootstrap/lib/stdlib/ebin/beam_lib.beam
index ed700d6ba8..c548df711e 100644
--- a/bootstrap/lib/stdlib/ebin/beam_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/beam_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/binary.beam b/bootstrap/lib/stdlib/ebin/binary.beam
index 7ec31e98b1..fd56a9b7fd 100644
--- a/bootstrap/lib/stdlib/ebin/binary.beam
+++ b/bootstrap/lib/stdlib/ebin/binary.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/c.beam b/bootstrap/lib/stdlib/ebin/c.beam
index d90c1727fd..98a26ea121 100644
--- a/bootstrap/lib/stdlib/ebin/c.beam
+++ b/bootstrap/lib/stdlib/ebin/c.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/calendar.beam b/bootstrap/lib/stdlib/ebin/calendar.beam
index 5915a4e686..c538e0ae39 100644
--- a/bootstrap/lib/stdlib/ebin/calendar.beam
+++ b/bootstrap/lib/stdlib/ebin/calendar.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets.beam b/bootstrap/lib/stdlib/ebin/dets.beam
index 3e0f0f5b23..518686925c 100644
--- a/bootstrap/lib/stdlib/ebin/dets.beam
+++ b/bootstrap/lib/stdlib/ebin/dets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_utils.beam b/bootstrap/lib/stdlib/ebin/dets_utils.beam
index 8f93a0809f..c0c9154822 100644
--- a/bootstrap/lib/stdlib/ebin/dets_utils.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_utils.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_v9.beam b/bootstrap/lib/stdlib/ebin/dets_v9.beam
index 8cf80d1a5c..2a83b79cf6 100644
--- a/bootstrap/lib/stdlib/ebin/dets_v9.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_v9.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/epp.beam b/bootstrap/lib/stdlib/ebin/epp.beam
index 78cc9153c4..8e8575daea 100644
--- a/bootstrap/lib/stdlib/ebin/epp.beam
+++ b/bootstrap/lib/stdlib/ebin/epp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_anno.beam b/bootstrap/lib/stdlib/ebin/erl_anno.beam
index ad2d06a96f..12f143190a 100644
--- a/bootstrap/lib/stdlib/ebin/erl_anno.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_anno.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_error.beam b/bootstrap/lib/stdlib/ebin/erl_error.beam
index 6538b9170b..e2197f1f13 100644
--- a/bootstrap/lib/stdlib/ebin/erl_error.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_error.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_eval.beam b/bootstrap/lib/stdlib/ebin/erl_eval.beam
index 520a833887..75a8eca126 100644
--- a/bootstrap/lib/stdlib/ebin/erl_eval.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_eval.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
index d37758d1f0..b97eab3f6f 100644
--- a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_internal.beam b/bootstrap/lib/stdlib/ebin/erl_internal.beam
index bf480ea73b..533f5cc1bc 100644
--- a/bootstrap/lib/stdlib/ebin/erl_internal.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_internal.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_lint.beam b/bootstrap/lib/stdlib/ebin/erl_lint.beam
index 3d1c5c77a4..eb44ced5be 100644
--- a/bootstrap/lib/stdlib/ebin/erl_lint.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_lint.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_parse.beam b/bootstrap/lib/stdlib/ebin/erl_parse.beam
index a4f5280984..10698d7f65 100644
--- a/bootstrap/lib/stdlib/ebin/erl_parse.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_parse.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_posix_msg.beam b/bootstrap/lib/stdlib/ebin/erl_posix_msg.beam
index cf5239d693..1f0d961ead 100644
--- a/bootstrap/lib/stdlib/ebin/erl_posix_msg.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_posix_msg.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_pp.beam b/bootstrap/lib/stdlib/ebin/erl_pp.beam
index cf0edba32c..ed3dc68895 100644
--- a/bootstrap/lib/stdlib/ebin/erl_pp.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_pp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_scan.beam b/bootstrap/lib/stdlib/ebin/erl_scan.beam
index 0bde6b6502..b844a6ef2c 100644
--- a/bootstrap/lib/stdlib/ebin/erl_scan.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_scan.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_stdlib_errors.beam b/bootstrap/lib/stdlib/ebin/erl_stdlib_errors.beam
index 742bd0d79c..74f43e9859 100644
--- a/bootstrap/lib/stdlib/ebin/erl_stdlib_errors.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_stdlib_errors.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_tar.beam b/bootstrap/lib/stdlib/ebin/erl_tar.beam
index be66732e82..0738591a73 100644
--- a/bootstrap/lib/stdlib/ebin/erl_tar.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_tar.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/ets.beam b/bootstrap/lib/stdlib/ebin/ets.beam
index 7579a1f031..e6bdc1b1b2 100644
--- a/bootstrap/lib/stdlib/ebin/ets.beam
+++ b/bootstrap/lib/stdlib/ebin/ets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/file_sorter.beam b/bootstrap/lib/stdlib/ebin/file_sorter.beam
index ad98ee9aa3..09e3d9804a 100644
--- a/bootstrap/lib/stdlib/ebin/file_sorter.beam
+++ b/bootstrap/lib/stdlib/ebin/file_sorter.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/filelib.beam b/bootstrap/lib/stdlib/ebin/filelib.beam
index 4124948a8d..d604e5113d 100644
--- a/bootstrap/lib/stdlib/ebin/filelib.beam
+++ b/bootstrap/lib/stdlib/ebin/filelib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gb_sets.beam b/bootstrap/lib/stdlib/ebin/gb_sets.beam
index bd84607fae..8ee142f1d4 100644
--- a/bootstrap/lib/stdlib/ebin/gb_sets.beam
+++ b/bootstrap/lib/stdlib/ebin/gb_sets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gb_trees.beam b/bootstrap/lib/stdlib/ebin/gb_trees.beam
index 454ba0aa9f..c8c115739b 100644
--- a/bootstrap/lib/stdlib/ebin/gb_trees.beam
+++ b/bootstrap/lib/stdlib/ebin/gb_trees.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen.beam b/bootstrap/lib/stdlib/ebin/gen.beam
index a989fa0f8a..c3211dc736 100644
--- a/bootstrap/lib/stdlib/ebin/gen.beam
+++ b/bootstrap/lib/stdlib/ebin/gen.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_fsm.beam b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
index 893084c55a..7dbc1bbb29 100644
--- a/bootstrap/lib/stdlib/ebin/gen_fsm.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_server.beam b/bootstrap/lib/stdlib/ebin/gen_server.beam
index 65344338eb..7b904e4957 100644
--- a/bootstrap/lib/stdlib/ebin/gen_server.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_server.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_statem.beam b/bootstrap/lib/stdlib/ebin/gen_statem.beam
index 4ae3fbf28b..14f6f1b4ca 100644
--- a/bootstrap/lib/stdlib/ebin/gen_statem.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_statem.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io.beam b/bootstrap/lib/stdlib/ebin/io.beam
index a54a1e2865..cc237b7227 100644
--- a/bootstrap/lib/stdlib/ebin/io.beam
+++ b/bootstrap/lib/stdlib/ebin/io.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib.beam b/bootstrap/lib/stdlib/ebin/io_lib.beam
index 838e1764fe..092bd6a0c0 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib_format.beam b/bootstrap/lib/stdlib/ebin/io_lib_format.beam
index 988d41cb8a..595c4fdd50 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib_format.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib_format.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib_format_ryu_table.beam b/bootstrap/lib/stdlib/ebin/io_lib_format_ryu_table.beam
deleted file mode 100644
index 7d95fef996..0000000000
--- a/bootstrap/lib/stdlib/ebin/io_lib_format_ryu_table.beam
+++ /dev/null
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
index 1c0b4f9885..a35f2f34cd 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/lists.beam b/bootstrap/lib/stdlib/ebin/lists.beam
index 95cfff6211..44f2416244 100644
--- a/bootstrap/lib/stdlib/ebin/lists.beam
+++ b/bootstrap/lib/stdlib/ebin/lists.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/log_mf_h.beam b/bootstrap/lib/stdlib/ebin/log_mf_h.beam
index 30fc545d63..95ad491712 100644
--- a/bootstrap/lib/stdlib/ebin/log_mf_h.beam
+++ b/bootstrap/lib/stdlib/ebin/log_mf_h.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/ms_transform.beam b/bootstrap/lib/stdlib/ebin/ms_transform.beam
index 917fc45f40..5a3a157cb2 100644
--- a/bootstrap/lib/stdlib/ebin/ms_transform.beam
+++ b/bootstrap/lib/stdlib/ebin/ms_transform.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/ordsets.beam b/bootstrap/lib/stdlib/ebin/ordsets.beam
index 3e904d7e86..34cb647584 100644
--- a/bootstrap/lib/stdlib/ebin/ordsets.beam
+++ b/bootstrap/lib/stdlib/ebin/ordsets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/otp_internal.beam b/bootstrap/lib/stdlib/ebin/otp_internal.beam
index fd7795c36f..9203fe56f2 100644
--- a/bootstrap/lib/stdlib/ebin/otp_internal.beam
+++ b/bootstrap/lib/stdlib/ebin/otp_internal.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/proc_lib.beam b/bootstrap/lib/stdlib/ebin/proc_lib.beam
index f15a7e2199..500e1286ac 100644
--- a/bootstrap/lib/stdlib/ebin/proc_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/proc_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/proplists.beam b/bootstrap/lib/stdlib/ebin/proplists.beam
index e3d584e232..dfb7e96ed0 100644
--- a/bootstrap/lib/stdlib/ebin/proplists.beam
+++ b/bootstrap/lib/stdlib/ebin/proplists.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc.beam b/bootstrap/lib/stdlib/ebin/qlc.beam
index cb59b4e6a2..49e7d525be 100644
--- a/bootstrap/lib/stdlib/ebin/qlc.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc_pt.beam b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
index 4f5e240e4a..7bf32137df 100644
--- a/bootstrap/lib/stdlib/ebin/qlc_pt.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/queue.beam b/bootstrap/lib/stdlib/ebin/queue.beam
index f06730ff26..58498e4235 100644
--- a/bootstrap/lib/stdlib/ebin/queue.beam
+++ b/bootstrap/lib/stdlib/ebin/queue.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/re.beam b/bootstrap/lib/stdlib/ebin/re.beam
index 4eb8ad8b32..510a78bddc 100644
--- a/bootstrap/lib/stdlib/ebin/re.beam
+++ b/bootstrap/lib/stdlib/ebin/re.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/sets.beam b/bootstrap/lib/stdlib/ebin/sets.beam
index 8bd8c5dca4..60e60723de 100644
--- a/bootstrap/lib/stdlib/ebin/sets.beam
+++ b/bootstrap/lib/stdlib/ebin/sets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/shell.beam b/bootstrap/lib/stdlib/ebin/shell.beam
index fe013f311b..7e95353831 100644
--- a/bootstrap/lib/stdlib/ebin/shell.beam
+++ b/bootstrap/lib/stdlib/ebin/shell.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/shell_docs.beam b/bootstrap/lib/stdlib/ebin/shell_docs.beam
index 04d5c41d9f..5272b75280 100644
--- a/bootstrap/lib/stdlib/ebin/shell_docs.beam
+++ b/bootstrap/lib/stdlib/ebin/shell_docs.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/sofs.beam b/bootstrap/lib/stdlib/ebin/sofs.beam
index 9d5a0d4fa2..f2835b79db 100644
--- a/bootstrap/lib/stdlib/ebin/sofs.beam
+++ b/bootstrap/lib/stdlib/ebin/sofs.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/stdlib.app b/bootstrap/lib/stdlib/ebin/stdlib.app
index dd1a969d3d..322c34bab2 100644
--- a/bootstrap/lib/stdlib/ebin/stdlib.app
+++ b/bootstrap/lib/stdlib/ebin/stdlib.app
@@ -71,7 +71,6 @@
io,
io_lib,
io_lib_format,
- io_lib_format_ryu_table,
io_lib_fread,
io_lib_pretty,
lists,
@@ -111,6 +110,6 @@
dets]},
{applications, [kernel]},
{env, []},
- {runtime_dependencies, ["sasl-3.0","kernel-7.0","erts-12.0","crypto-3.3",
+ {runtime_dependencies, ["sasl-3.0","kernel-7.0","erts-12.0","crypto-4.5",
"compiler-5.0"]}
]}.
diff --git a/bootstrap/lib/stdlib/ebin/string.beam b/bootstrap/lib/stdlib/ebin/string.beam
index c1e09b2c27..e6de6b5a2d 100644
--- a/bootstrap/lib/stdlib/ebin/string.beam
+++ b/bootstrap/lib/stdlib/ebin/string.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/supervisor.beam b/bootstrap/lib/stdlib/ebin/supervisor.beam
index 8f7186146e..32be59fc5b 100644
--- a/bootstrap/lib/stdlib/ebin/supervisor.beam
+++ b/bootstrap/lib/stdlib/ebin/supervisor.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam b/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam
index e84b1b42e5..b97eeef567 100644
--- a/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam
+++ b/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/timer.beam b/bootstrap/lib/stdlib/ebin/timer.beam
index 9fe97e284f..c136abfee4 100644
--- a/bootstrap/lib/stdlib/ebin/timer.beam
+++ b/bootstrap/lib/stdlib/ebin/timer.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/unicode.beam b/bootstrap/lib/stdlib/ebin/unicode.beam
index e0bd7593d2..4f2cc7d584 100644
--- a/bootstrap/lib/stdlib/ebin/unicode.beam
+++ b/bootstrap/lib/stdlib/ebin/unicode.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/unicode_util.beam b/bootstrap/lib/stdlib/ebin/unicode_util.beam
index 857aaf0b5c..6a7474b36a 100644
--- a/bootstrap/lib/stdlib/ebin/unicode_util.beam
+++ b/bootstrap/lib/stdlib/ebin/unicode_util.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/uri_string.beam b/bootstrap/lib/stdlib/ebin/uri_string.beam
index 076e3e74e8..3870e8318b 100644
--- a/bootstrap/lib/stdlib/ebin/uri_string.beam
+++ b/bootstrap/lib/stdlib/ebin/uri_string.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/win32reg.beam b/bootstrap/lib/stdlib/ebin/win32reg.beam
index 96869dd3f1..b7254aad0e 100644
--- a/bootstrap/lib/stdlib/ebin/win32reg.beam
+++ b/bootstrap/lib/stdlib/ebin/win32reg.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/zip.beam b/bootstrap/lib/stdlib/ebin/zip.beam
index c957632721..13de1063ff 100644
--- a/bootstrap/lib/stdlib/ebin/zip.beam
+++ b/bootstrap/lib/stdlib/ebin/zip.beam
Binary files differ
diff --git a/erts/autoconf/README.md b/erts/autoconf/README.md
new file mode 100644
index 0000000000..4643e61f49
--- /dev/null
+++ b/erts/autoconf/README.md
@@ -0,0 +1,10 @@
+All files in this directory except for the README.md files are copies
+of primary files located in the `$ERL_TOP/make/autoconf` directory.
+Files in this directory are updated automatically when executing
+`$ERL_TOP/otp_build update_configure [--no-commit]`.
+
+The files in this directory are only kept here in order not to break
+external scripts that might depend on them being here. You typically
+want to use the files in the `$ERL_TOP/make/autoconf` directory and
+*not* the ones in this directory. The files in this directory will
+eventually be removed.
diff --git a/erts/config.h.in b/erts/config.h.in
index afdb89d5cc..9af8efe751 100644
--- a/erts/config.h.in
+++ b/erts/config.h.in
@@ -1,4 +1,4 @@
-/* config.h.in. Generated from configure.in by autoheader. */
+/* config.h.in. Generated from configure.ac by autoheader. */
#ifndef __ERTS_CONFIG_H__
@@ -31,6 +31,9 @@
format (like some ARMs). */
#undef DOUBLE_MIDDLE_ENDIAN
+/* Define if we need frame pointers on the Erlang stack */
+#undef ERLANG_FRAME_POINTERS
+
/* Define if sbrk()/brk() wrappers can track malloc()s core memory use */
#undef ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC
@@ -385,9 +388,6 @@
/* Define if only run in Sparc TSO mode */
#undef ETHR_SPARC_TSO
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef ETHR_TIME_WITH_SYS_TIME
-
/* Define as a boolean indicating whether you trust gcc's __atomic_* builtins
memory barrier implementations, or not */
#undef ETHR_TRUST_GCC_ATOMIC_BUILTINS_MEMORY_BARRIERS
@@ -791,9 +791,6 @@
/* Define to 1 if you have the `memmove' function. */
#undef HAVE_MEMMOVE
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
/* Define if the pthread.h header file is in pthread/mit directory. */
#undef HAVE_MIT_PTHREAD_H
@@ -950,6 +947,9 @@
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
@@ -1220,9 +1220,6 @@
*/
#undef REDEFINE_FD_SETSIZE
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
/* Define the sbrk() argument type. */
#undef SBRK_ARG_TYPE
@@ -1274,7 +1271,9 @@
/* The size of `__int64', as computed by sizeof. */
#undef SIZEOF___INT64
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
#undef STDC_HEADERS
/* define if the variable sys_errlist is declared in a system header file */
@@ -1290,9 +1289,6 @@
clock_get_time() */
#undef SYS_HRTIME_USING_MACH_CLOCK_GET_TIME
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
#undef TM_IN_SYS_TIME
@@ -1332,7 +1328,7 @@
/* Define to `long int' if <sys/types.h> does not define. */
#undef off_t
-/* Define to `int' if <sys/types.h> does not define. */
+/* Define as a signed integer type capable of holding a process identifier. */
#undef pid_t
/* Define to `unsigned int' if <sys/types.h> does not define. */
diff --git a/erts/configure b/erts/configure
index 85a3e20a05..10121181ef 100755
--- a/erts/configure
+++ b/erts/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +221,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +253,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +292,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +310,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +332,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +380,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +398,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +430,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +459,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +503,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +517,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +534,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,50 +606,47 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="vsn.mk"
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="emulator/beam/erl_process.c"
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
+ac_func_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
CFLAGS32
@@ -636,7 +664,6 @@ FLAVORS
PRIMARY_FLAVOR
JIT_ARCH
JIT_ENABLED
-ac_ct_CXX
M4
LIBRT
BITS64
@@ -668,25 +695,12 @@ DEXPORT
ERLANG_OSTYPE
HCFLAGS
HCC
-INSTALL_DIR
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-XMLLINT
-FOP
-XSLTPROC
-LN_S
-PERL
-YFLAGS
-YACC
CP
MKDIR
LIBCARBON
ARCH
OPSYS
EXTERNAL_WORD_SIZE
-EGREP
-GREP
PROFILE_COMPILER
USE_PGO
XCRUN
@@ -698,6 +712,20 @@ DEBUG_FLAGS
ERTS_CONFIG_H_IDIR
MIXED_MINGW
MIXED_VC
+INSTALL_DIR
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+XMLLINT
+FOP
+XSLTPROC
+LN_S
+PERL
+YFLAGS
+YACC
+EGREP
+GREP
+ac_ct_CXX
GCC
STATIC_DRIVERS
STATIC_NIFS
@@ -710,6 +738,10 @@ OBJEXT
EXEEXT
ac_ct_CC
CROSS_COMPILING
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -879,9 +911,9 @@ erl_xcomp_gethrvtime_procfs_ioctl
erl_xcomp_clock_gettime_cpu_time
erl_xcomp_after_morecore_hook
erl_xcomp_dlsym_brk_wrappers
+CCC
YACC
-YFLAGS
-CCC'
+YFLAGS'
# Initialize some variables set by options.
@@ -950,8 +982,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -992,9 +1022,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1018,9 +1048,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1231,9 +1261,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1247,9 +1277,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1293,9 +1323,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1311,7 +1341,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1375,7 +1405,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1493,6 +1523,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1740,9 +1771,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1770,7 +1801,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1778,7 +1810,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1788,9 +1820,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1807,14 +1839,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1822,14 +1854,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1845,14 +1878,14 @@ fi
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1860,17 +1893,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1885,10 +1919,87 @@ fi
} # ac_fn_c_try_link
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
# ac_fn_c_try_run LINENO
# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
ac_fn_c_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1898,25 +2009,26 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
@@ -1941,7 +2053,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0;
@@ -1951,14 +2063,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=0 ac_mid=0
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1968,9 +2081,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid; break
-else
+else $as_nop
as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
@@ -1978,14 +2092,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0;
@@ -1995,14 +2109,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=-1 ac_mid=-1
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0;
@@ -2012,9 +2127,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=$ac_mid; break
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
@@ -2022,14 +2138,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
ac_lo= ac_hi=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -2037,7 +2153,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -2047,12 +2163,13 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
case $ac_lo in #((
?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -2062,12 +2179,12 @@ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.val", "w");
@@ -2095,9 +2212,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
ac_retval=1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -2110,43 +2228,6 @@ rm -f conftest.val
} # ac_fn_c_compute_int
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
@@ -2154,26 +2235,28 @@ fi
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
@@ -2184,11 +2267,12 @@ $as_echo "$ac_res" >&6; }
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -2196,16 +2280,9 @@ else
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ which can conflict with char $2 (); below. */
+#include <limits.h>
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -2223,115 +2300,29 @@ choke me
#endif
int
-main ()
+main (void)
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
# ----------------------------------------------------
# Tries to find if the field MEMBER exists in type AGGR, after including
@@ -2339,16 +2330,17 @@ fi
ac_fn_c_check_member ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+printf %s "checking for $2.$3... " >&6; }
+if eval test \${$4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$5
int
-main ()
+main (void)
{
static $2 ac_aggr;
if (ac_aggr.$3)
@@ -2357,14 +2349,15 @@ return 0;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$4=yes"
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$5
int
-main ()
+main (void)
{
static $2 ac_aggr;
if (sizeof ac_aggr.$3)
@@ -2373,41 +2366,45 @@ return 0;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$4=yes"
-else
+else $as_nop
eval "$4=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$4
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_member
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
as_decl_name=`echo $2|sed 's/ *(.*//'`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ eval ac_save_FLAGS=\$$6
+ as_fn_append $6 " $5"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
#ifndef $as_decl_name
#ifdef __cplusplus
@@ -2421,19 +2418,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ eval $6=\$ac_save_FLAGS
+
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-} # ac_fn_c_check_decl
+} # ac_fn_check_decl
# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
# -------------------------------------------
@@ -2442,17 +2442,18 @@ $as_echo "$ac_res" >&6; }
ac_fn_c_check_type ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
eval "$3=no"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof ($2))
return 0;
@@ -2460,12 +2461,13 @@ if (sizeof ($2))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof (($2)))
return 0;
@@ -2473,67 +2475,50 @@ if (sizeof (($2)))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
eval "$3=yes"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_type
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-} # ac_fn_cxx_try_compile
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -2566,8 +2551,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2602,7 +2591,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2637,11 +2626,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2652,8 +2643,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2677,7 +2668,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2685,14 +2676,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2700,15 +2691,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2716,8 +2707,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2731,63 +2722,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2797,19 +2773,652 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+# Test code for whether the C++ compiler supports C++98 (global declarations)
+ac_cxx_conftest_cxx98_globals='
+// Does the compiler advertise C++98 conformance?
+#if !defined __cplusplus || __cplusplus < 199711L
+# error "Compiler does not advertise C++98 conformance"
+#endif
+
+// These inclusions are to reject old compilers that
+// lack the unsuffixed header files.
+#include <cstdlib>
+#include <exception>
+
+// <cassert> and <cstring> are *not* freestanding headers in C++98.
+extern void assert (int);
+namespace std {
+ extern int strcmp (const char *, const char *);
+}
+
+// Namespaces, exceptions, and templates were all added after "C++ 2.0".
+using std::exception;
+using std::strcmp;
+
+namespace {
+
+void test_exception_syntax()
+{
+ try {
+ throw "test";
+ } catch (const char *s) {
+ // Extra parentheses suppress a warning when building autoconf itself,
+ // due to lint rules shared with more typical C programs.
+ assert (!(strcmp) (s, "test"));
+ }
+}
+
+template <typename T> struct test_template
+{
+ T const val;
+ explicit test_template(T t) : val(t) {}
+ template <typename U> T add(U u) { return static_cast<T>(u) + val; }
+};
+
+} // anonymous namespace
+'
+
+# Test code for whether the C++ compiler supports C++98 (body of main)
+ac_cxx_conftest_cxx98_main='
+ assert (argc);
+ assert (! argv[0]);
+{
+ test_exception_syntax ();
+ test_template<double> tt (2.0);
+ assert (tt.add (4) == 6.0);
+ assert (true && !false);
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (global declarations)
+ac_cxx_conftest_cxx11_globals='
+// Does the compiler advertise C++ 2011 conformance?
+#if !defined __cplusplus || __cplusplus < 201103L
+# error "Compiler does not advertise C++11 conformance"
+#endif
+
+namespace cxx11test
+{
+ constexpr int get_val() { return 20; }
+
+ struct testinit
+ {
+ int i;
+ double d;
+ };
+
+ class delegate
+ {
+ public:
+ delegate(int n) : n(n) {}
+ delegate(): delegate(2354) {}
+
+ virtual int getval() { return this->n; };
+ protected:
+ int n;
+ };
+
+ class overridden : public delegate
+ {
+ public:
+ overridden(int n): delegate(n) {}
+ virtual int getval() override final { return this->n * 2; }
+ };
+
+ class nocopy
+ {
+ public:
+ nocopy(int i): i(i) {}
+ nocopy() = default;
+ nocopy(const nocopy&) = delete;
+ nocopy & operator=(const nocopy&) = delete;
+ private:
+ int i;
+ };
+
+ // for testing lambda expressions
+ template <typename Ret, typename Fn> Ret eval(Fn f, Ret v)
+ {
+ return f(v);
+ }
+
+ // for testing variadic templates and trailing return types
+ template <typename V> auto sum(V first) -> V
+ {
+ return first;
+ }
+ template <typename V, typename... Args> auto sum(V first, Args... rest) -> V
+ {
+ return first + sum(rest...);
+ }
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (body of main)
+ac_cxx_conftest_cxx11_main='
+{
+ // Test auto and decltype
+ auto a1 = 6538;
+ auto a2 = 48573953.4;
+ auto a3 = "String literal";
+
+ int total = 0;
+ for (auto i = a3; *i; ++i) { total += *i; }
+
+ decltype(a2) a4 = 34895.034;
+}
+{
+ // Test constexpr
+ short sa[cxx11test::get_val()] = { 0 };
+}
+{
+ // Test initializer lists
+ cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+ // Test range-based for
+ int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3,
+ 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+ for (auto &x : array) { x += 23; }
+}
+{
+ // Test lambda expressions
+ using cxx11test::eval;
+ assert (eval ([](int x) { return x*2; }, 21) == 42);
+ double d = 2.0;
+ assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0);
+ assert (d == 5.0);
+ assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0);
+ assert (d == 5.0);
+}
+{
+ // Test use of variadic templates
+ using cxx11test::sum;
+ auto a = sum(1);
+ auto b = sum(1, 2);
+ auto c = sum(1.0, 2.0, 3.0);
+}
+{
+ // Test constructor delegation
+ cxx11test::delegate d1;
+ cxx11test::delegate d2();
+ cxx11test::delegate d3(45);
+}
+{
+ // Test override and final
+ cxx11test::overridden o1(55464);
+}
+{
+ // Test nullptr
+ char *c = nullptr;
+}
+{
+ // Test template brackets
+ test_template<::test_template<int>> v(test_template<int>(12));
+}
+{
+ // Unicode literals
+ char const *utf8 = u8"UTF-8 string \u2500";
+ char16_t const *utf16 = u"UTF-8 string \u2500";
+ char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+'
+
+# Test code for whether the C compiler supports C++11 (complete).
+ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals}
+${ac_cxx_conftest_cxx11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ ${ac_cxx_conftest_cxx11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C++98 (complete).
+ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals}
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H"
+as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="install-sh config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2820,12 +3429,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2834,24 +3443,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2861,11 +3470,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2925,6 +3535,96 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
no_werror_CFLAGS=$(echo "$CFLAGS" | sed 's/-Werror\([^=]\|$\)/ /g')
if test "$CFLAGS" != "$no_werror_CFLAGS"; then
CFLAGS="$no_werror_CFLAGS"
@@ -2968,61 +3668,33 @@ erl_top=${ERL_TOP}
# echo X
# echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-ac_aux_dir=
-for ac_dir in $srcdir/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in $srcdir/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-#
-# To configure for free source run ./configure --host=free_source
-#
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -3041,21 +3713,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -3074,10 +3747,108 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=$host
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
+fi
+
+
if test "$cross_compiling" = "yes"; then
CROSS_COMPILING=yes
else
@@ -3096,6 +3867,15 @@ else
fi
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3104,11 +3884,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -3116,11 +3897,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3131,11 +3916,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3144,11 +3929,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -3156,11 +3942,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3171,11 +3961,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -3183,8 +3973,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -3197,11 +3987,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -3209,11 +4000,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3224,11 +4019,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3237,11 +4032,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -3250,15 +4046,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3274,18 +4074,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3296,11 +4096,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -3308,11 +4109,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3323,11 +4128,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3340,11 +4145,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -3352,11 +4158,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3367,11 +4177,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3383,8 +4193,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -3392,25 +4202,129 @@ esac
fi
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -3420,7 +4334,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -3428,7 +4342,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3440,9 +4354,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -3463,11 +4377,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -3484,7 +4399,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -3500,44 +4415,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3551,15 +4468,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -3568,7 +4485,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -3580,8 +4497,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -3589,10 +4506,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -3600,39 +4517,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3646,11 +4564,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -3659,31 +4578,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3693,29 +4613,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3724,57 +4648,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3789,94 +4716,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3886,11 +4863,12 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
-$as_echo_n "checking for library containing strerror... " >&6; }
-if ${ac_cv_search_strerror+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+printf %s "checking for library containing strerror... " >&6; }
+if test ${ac_cv_search_strerror+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -3898,46 +4876,48 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char strerror ();
int
-main ()
+main (void)
{
return strerror ();
;
return 0;
}
_ACEOF
-for ac_lib in '' cposix; do
+for ac_lib in '' cposix
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_strerror=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_strerror+:} false; then :
+ if test ${ac_cv_search_strerror+y}
+then :
break
fi
done
-if ${ac_cv_search_strerror+:} false; then :
+if test ${ac_cv_search_strerror+y}
+then :
-else
+else $as_nop
ac_cv_search_strerror=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
-$as_echo "$ac_cv_search_strerror" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
+printf "%s\n" "$ac_cv_search_strerror" >&6; }
ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
@@ -3949,7 +4929,8 @@ ENABLE_ALLOC_TYPE_VARS=
# Check whether --enable-bootstrap-only was given.
-if test "${enable_bootstrap_only+set}" = set; then :
+if test ${enable_bootstrap_only+y}
+then :
enableval=$enable_bootstrap_only; if test "X$enableval" = "Xyes"; then
# Disable stuff not necessary in a bootstrap only system in order
# to speed up things by reducing the amount of stuff needing to be
@@ -3965,73 +4946,80 @@ fi
# Check whether --enable-dirty-schedulers-test was given.
-if test "${enable_dirty_schedulers_test+set}" = set; then :
+if test ${enable_dirty_schedulers_test+y}
+then :
enableval=$enable_dirty_schedulers_test; case "$enableval" in
yes) enable_dirty_schedulers_test=yes ;;
*) enable_dirty_schedulers_test=no ;;
esac
-else
+else $as_nop
enable_dirty_schedulers_test=no
fi
# Check whether --enable-smp-require-native-atomics was given.
-if test "${enable_smp_require_native_atomics+set}" = set; then :
+if test ${enable_smp_require_native_atomics+y}
+then :
enableval=$enable_smp_require_native_atomics; case "$enableval" in
no) smp_require_native_atomics=no ;;
*) smp_require_native_atomics=yes ;;
esac
-else
+else $as_nop
smp_require_native_atomics=yes
fi
# Check whether --with-termcap was given.
-if test "${with_termcap+set}" = set; then :
+if test ${with_termcap+y}
+then :
withval=$with_termcap;
-else
+else $as_nop
with_termcap=yes
fi
# Check whether --enable-lock-checking was given.
-if test "${enable_lock_checking+set}" = set; then :
+if test ${enable_lock_checking+y}
+then :
enableval=$enable_lock_checking; case "$enableval" in
no) enable_lock_check=no ;;
*) enable_lock_check=yes ;;
esac
-else
+else $as_nop
enable_lock_check=no
fi
# Check whether --enable-lock-counter was given.
-if test "${enable_lock_counter+set}" = set; then :
+if test ${enable_lock_counter+y}
+then :
enableval=$enable_lock_counter; case "$enableval" in
no) enable_lock_count=no ;;
*) enable_lock_count=yes ;;
esac
-else
+else $as_nop
enable_lock_count=no
fi
# Check whether --enable-kernel-poll was given.
-if test "${enable_kernel_poll+set}" = set; then :
+if test ${enable_kernel_poll+y}
+then :
enableval=$enable_kernel_poll; case "$enableval" in
no) enable_kernel_poll=no ;;
*) enable_kernel_poll=yes ;;
esac
-else
+else $as_nop
enable_kernel_poll=unknown
fi
# Check whether --enable-sctp was given.
-if test "${enable_sctp+set}" = set; then :
+if test ${enable_sctp+y}
+then :
enableval=$enable_sctp; case "x$enableval" in
xno|xyes|xlib|x)
;;
@@ -4043,44 +5031,48 @@ fi
# Check whether --enable-jit was given.
-if test "${enable_jit+set}" = set; then :
+if test ${enable_jit+y}
+then :
enableval=$enable_jit; case "$enableval" in
no) enable_jit=no ;;
*) enable_jit=yes ;;
esac
-else
+else $as_nop
enable_jit=auto
fi
# Check whether --enable-m64-build was given.
-if test "${enable_m64_build+set}" = set; then :
+if test ${enable_m64_build+y}
+then :
enableval=$enable_m64_build; case "$enableval" in
no) enable_m64_build=no ;;
*) enable_m64_build=yes ;;
esac
-else
+else $as_nop
enable_m64_build=no
fi
# Check whether --enable-m32-build was given.
-if test "${enable_m32_build+set}" = set; then :
+if test ${enable_m32_build+y}
+then :
enableval=$enable_m32_build; case "$enableval" in
no) enable_m32_build=no ;;
*) enable_m32_build=yes ;;
esac
-else
+else $as_nop
enable_m32_build=no
fi
# Check whether --with-dynamic-trace was given.
-if test "${with_dynamic_trace+set}" = set; then :
+if test ${with_dynamic_trace+y}
+then :
withval=$with_dynamic_trace;
fi
@@ -4093,17 +5085,17 @@ case "$with_dynamic_trace" in
no) DYNAMIC_TRACE_FRAMEWORK=;;
lttng)
-$as_echo "#define USE_LTTNG 1" >>confdefs.h
+printf "%s\n" "#define USE_LTTNG 1" >>confdefs.h
DYNAMIC_TRACE_FRAMEWORK=lttng;;
dtrace)
-$as_echo "#define USE_DTRACE 1" >>confdefs.h
+printf "%s\n" "#define USE_DTRACE 1" >>confdefs.h
DYNAMIC_TRACE_FRAMEWORK=dtrace;;
systemtap)
-$as_echo "#define USE_SYSTEMTAP 1" >>confdefs.h
+printf "%s\n" "#define USE_SYSTEMTAP 1" >>confdefs.h
DYNAMIC_TRACE_FRAMEWORK=systemtap;;
*)
@@ -4112,12 +5104,13 @@ esac
if test X"$DYNAMIC_TRACE_FRAMEWORK" != X""; then
-$as_echo "#define USE_DYNAMIC_TRACE 1" >>confdefs.h
+printf "%s\n" "#define USE_DYNAMIC_TRACE 1" >>confdefs.h
fi
# Check whether --enable-vm-probes was given.
-if test "${enable_vm_probes+set}" = set; then :
+if test ${enable_vm_probes+y}
+then :
enableval=$enable_vm_probes; case "$enableval" in
no) use_vm_probes=no ;;
*)
@@ -4127,7 +5120,7 @@ if test "${enable_vm_probes+set}" = set; then :
as_fn_error $? "Can not enable VM probes without any dynamic tracing framework!" "$LINENO" 5;
fi;;
esac
-else
+else $as_nop
if test X"$DYNAMIC_TRACE_FRAMEWORK" != X""; then
use_vm_probes=yes ;
else
@@ -4141,14 +5134,15 @@ if test X"$DYNAMIC_TRACE_FRAMEWORK" != X"lttng"; then
if test X"$use_vm_probes" = X"yes"; then
USE_VM_PROBES=yes
-$as_echo "#define USE_VM_PROBES 1" >>confdefs.h
+printf "%s\n" "#define USE_VM_PROBES 1" >>confdefs.h
fi
fi
# Check whether --with-assumed-cache-line-size was given.
-if test "${with_assumed_cache_line_size+set}" = set; then :
+if test ${with_assumed_cache_line_size+y}
+then :
withval=$with_assumed_cache_line_size;
fi
@@ -4164,51 +5158,50 @@ case "$with_assumed_cache_line_size" in
esac
-cat >>confdefs.h <<_ACEOF
-#define ASSUMED_CACHE_LINE_SIZE $with_assumed_cache_line_size
-_ACEOF
+printf "%s\n" "#define ASSUMED_CACHE_LINE_SIZE $with_assumed_cache_line_size" >>confdefs.h
# Check whether --enable-systemd was given.
-if test "${enable_systemd+set}" = set; then :
+if test ${enable_systemd+y}
+then :
enableval=$enable_systemd;
-else
+else $as_nop
enable_systemd=no
fi
# Check whether --enable-saved-compile-time was given.
-if test "${enable_saved_compile_time+set}" = set; then :
+if test ${enable_saved_compile_time+y}
+then :
enableval=$enable_saved_compile_time; case "$enableval" in
no) save_compile_time=0 ;;
*) save_compile_time=1 ;;
esac
-else
+else $as_nop
save_compile_time=1
fi
-cat >>confdefs.h <<_ACEOF
-#define ERTS_SAVED_COMPILE_TIME $save_compile_time
-_ACEOF
+printf "%s\n" "#define ERTS_SAVED_COMPILE_TIME $save_compile_time" >>confdefs.h
# Check whether --with-microstate-accounting was given.
-if test "${with_microstate_accounting+set}" = set; then :
+if test ${with_microstate_accounting+y}
+then :
withval=$with_microstate_accounting;
-else
+else $as_nop
with_microstate_accounting=yes
fi
case "$with_microstate_accounting" in
yes)
-$as_echo "#define ERTS_ENABLE_MSACC 1" >>confdefs.h
+printf "%s\n" "#define ERTS_ENABLE_MSACC 1" >>confdefs.h
;;
extra)
-$as_echo "#define ERTS_ENABLE_MSACC 2" >>confdefs.h
+printf "%s\n" "#define ERTS_ENABLE_MSACC 2" >>confdefs.h
;;
*) ;;
esac
@@ -4222,18 +5215,18 @@ else
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking OTP release" >&5
-$as_echo_n "checking OTP release... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking OTP release" >&5
+printf %s "checking OTP release... " >&6; }
SYSTEM_VSN=`cat $ERL_TOP/OTP_VERSION | sed "s|\([0-9]*\).*|\1|"`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SYSTEM_VSN" >&5
-$as_echo "$SYSTEM_VSN" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SYSTEM_VSN" >&5
+printf "%s\n" "$SYSTEM_VSN" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking OTP version" >&5
-$as_echo_n "checking OTP version... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking OTP version" >&5
+printf %s "checking OTP version... " >&6; }
OTP_VERSION=`cat $ERL_TOP/OTP_VERSION`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTP_VERSION" >&5
-$as_echo "$OTP_VERSION" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTP_VERSION" >&5
+printf "%s\n" "$OTP_VERSION" >&6; }
if test X${enable_m64_build} = Xyes; then
@@ -4258,18 +5251,20 @@ else
fi
# Check whether --enable-static-nifs was given.
-if test "${enable_static_nifs+set}" = set; then :
+if test ${enable_static_nifs+y}
+then :
enableval=$enable_static_nifs; STATIC_NIFS="$enableval"
-else
+else $as_nop
STATIC_NIFS=no
fi
# Check whether --enable-static-drivers was given.
-if test "${enable_static_drivers+set}" = set; then :
+if test ${enable_static_drivers+y}
+then :
enableval=$enable_static_drivers; STATIC_DRIVERS="$enableval"
-else
+else $as_nop
STATIC_DRIVERS=no
fi
@@ -4277,24 +5272,24 @@ fi
# Check whether --with-ets-write-concurrency-locks was given.
-if test "${with_ets_write_concurrency_locks+set}" = set; then :
+if test ${with_ets_write_concurrency_locks+y}
+then :
withval=$with_ets_write_concurrency_locks;
fi
if test X"$with_ets_write_concurrency_locks" != X""; then
-cat >>confdefs.h <<_ACEOF
-#define ERTS_DB_HASH_LOCK_CNT $with_ets_write_concurrency_locks
-_ACEOF
+printf "%s\n" "#define ERTS_DB_HASH_LOCK_CNT $with_ets_write_concurrency_locks" >>confdefs.h
fi
# Check whether --with-spectre-mitigation was given.
-if test "${with_spectre_mitigation+set}" = set; then :
+if test ${with_spectre_mitigation+y}
+then :
withval=$with_spectre_mitigation;
-else
+else $as_nop
with_spectre_mitigation=no
fi
@@ -4308,31 +5303,36 @@ esac
i_noretpoline_attr=""
-if test X"$with_spectre_mitigation" != X"no"; then
+if test X"$with_spectre_mitigation" != X"no"
+then :
+
CFLAGS="$CFLAGS -mindirect-branch=thunk"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for spectre mitigation" >&5
-$as_echo_n "checking for spectre mitigation... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for spectre mitigation" >&5
+printf %s "checking for spectre mitigation... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
as_fn_error $? "no" "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+ if test X"$with_spectre_mitigation" = X"incomplete"
+then :
- if test X"$with_spectre_mitigation" = X"incomplete"; then
# gcc and clang support this attribute if they're recent enough. Note
# that we must compile with -Werror to check for actual support as they
# warn rather than error out on unsupported attributes.
@@ -4341,37 +5341,45 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
i_preserve_cflags="$CFLAGS"
CFLAGS="$CFLAGS -Werror"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether spectre mitigation can be disabled on a per-function basis" >&5
-$as_echo_n "checking whether spectre mitigation can be disabled on a per-function basis... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether spectre mitigation can be disabled on a per-function basis" >&5
+printf %s "checking whether spectre mitigation can be disabled on a per-function basis... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$i_noretpoline_attr
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
as_fn_error $? "no" "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS="$i_preserve_cflags"
- fi
+
fi
+fi
+
+
+printf "%s\n" "#define ERTS_NO_RETPOLINE $i_noretpoline_attr" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ERTS_NO_RETPOLINE $i_noretpoline_attr
-_ACEOF
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -4381,11 +5389,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -4393,11 +5402,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4408,11 +5421,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4421,11 +5434,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -4433,11 +5447,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4448,11 +5466,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -4460,8 +5478,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -4474,11 +5492,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -4486,11 +5505,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4501,11 +5524,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4514,11 +5537,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -4527,15 +5551,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4551,18 +5579,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4573,11 +5601,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -4585,11 +5614,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4600,11 +5633,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4617,11 +5650,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -4629,11 +5663,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4644,11 +5682,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4660,34 +5698,138 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
fi
+else
+ CC="$ac_cv_prog_CC"
fi
fi
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -4697,20 +5839,21 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -4720,29 +5863,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -4751,57 +5898,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -4816,94 +5966,797 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+printf "%s\n" "$CXX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+printf "%s\n" "$ac_ct_CXX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5
+printf %s "checking whether the compiler supports GNU C++... " >&6; }
+if test ${ac_cv_cxx_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
{
- return p[i];
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
}
-static char *f (char * (*g) (char **, int), char **p, ...)
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+y}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+printf %s "checking whether $CXX accepts -g... " >&6; }
+if test ${ac_cv_prog_cxx_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
+
+ ;
+ return 0;
}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_g=yes
+else $as_nop
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+int
+main (void)
+{
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
int
-main ()
+main (void)
{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+
;
return 0;
}
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+printf "%s\n" "$ac_cv_prog_cxx_g" >&6; }
+if test $ac_test_CXXFLAGS; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_prog_cxx_stdcxx=no
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
+printf %s "checking for $CXX option to enable C++11 features... " >&6; }
+if test ${ac_cv_prog_cxx_11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_11=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx11_program
+_ACEOF
+for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA
do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx11=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx11" != "xno" && break
done
rm -f conftest.$ac_ext
-CC=$ac_save_CC
+CXX=$ac_save_CXX
+fi
+
+if test "x$ac_cv_prog_cxx_cxx11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx11"
+fi
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+ ac_prog_cxx_stdcxx=cxx11
+fi
+fi
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
+printf %s "checking for $CXX option to enable C++98 features... " >&6; }
+if test ${ac_cv_prog_cxx_98+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_98=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx98_program
+_ACEOF
+for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA
+do
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx98=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx98" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+fi
+if test "x$ac_cv_prog_cxx_cxx98" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx98" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx98"
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98
+ ac_prog_cxx_stdcxx=cxx98
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
fi
ac_ext=c
@@ -4912,7 +6765,658 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+for ac_prog in 'bison -y' byacc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_YACC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_YACC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+printf "%s\n" "$YACC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+for ac_prog in perl5 perl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="/usr/local/bin:/opt/local/bin:/usr/local/gnu/bin:${PATH}"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+printf "%s\n" "$PERL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$PERL" && break
+done
+test -n "$PERL" || PERL="false"
+
+if test "$PERL" = "false"; then
+ ac_cv_path_PERL=false
+ PERL=false
+fi
+
+if test "$ac_cv_path_PERL" = false; then
+ as_fn_error $? "Perl version 5 is required to build the emulator!" "$LINENO" 5
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+if test "$ac_cv_prog_AR" = false; then
+ as_fn_error $? "No 'ar' command found in PATH" "$LINENO" 5
+fi
+
+
+#
+# Get programs needed for building the documentation
+#
+
+## Delete previous failed configure results
+if test -f doc/CONF_INFO; then
+ rm -f doc/CONF_INFO
+fi
+
+for ac_prog in xsltproc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_XSLTPROC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$XSLTPROC"; then
+ ac_cv_prog_XSLTPROC="$XSLTPROC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_XSLTPROC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+XSLTPROC=$ac_cv_prog_XSLTPROC
+if test -n "$XSLTPROC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
+printf "%s\n" "$XSLTPROC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$XSLTPROC" && break
+done
+
+if test -z "$XSLTPROC"; then
+ echo "xsltproc" >> doc/CONF_INFO
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: No 'xsltproc' command found: the documentation cannot be built" >&5
+printf "%s\n" "$as_me: WARNING: No 'xsltproc' command found: the documentation cannot be built" >&2;}
+fi
+
+for ac_prog in fop
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_FOP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$FOP"; then
+ ac_cv_prog_FOP="$FOP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_FOP="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+FOP=$ac_cv_prog_FOP
+if test -n "$FOP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5
+printf "%s\n" "$FOP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$FOP" && break
+done
+
+if test -z "$FOP"; then
+ FOP="$ERL_TOP/make/fakefop"
+ echo "fop" >> doc/CONF_INFO
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: No 'fop' command found: going to generate placeholder PDF files" >&5
+printf "%s\n" "$as_me: WARNING: No 'fop' command found: going to generate placeholder PDF files" >&2;}
+fi
+
+for ac_prog in xmllint
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_XMLLINT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$XMLLINT"; then
+ ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_XMLLINT="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+XMLLINT=$ac_cv_prog_XMLLINT
+if test -n "$XMLLINT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
+printf "%s\n" "$XMLLINT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$XMLLINT" && break
+done
+
+if test -z "$XMLLINT"; then
+ echo "xmllint" >> doc/CONF_INFO
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: No 'xmllint' command found: can't run the xmllint target for the documentation" >&5
+printf "%s\n" "$as_me: WARNING: No 'xmllint' command found: can't run the xmllint target for the documentation" >&2;}
+fi
+
+case $host in
+ *-*-solaris*|free_source)
+ if test -x /usr/ucb/install; then
+ INSTALL="/usr/ucb/install -c"
+ fi
+ ;;
+ *)
+ ;;
+esac
+
+ # Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test ${ac_cv_path_install+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+ ./ | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test ${ac_cv_path_install+y}; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a directory including parents" >&5
+printf %s "checking how to create a directory including parents... " >&6; }
+if test ${ac_cv_prog_mkdir_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+temp_name_base=config.$$
+temp_name=$temp_name_base/x/y/z
+$INSTALL -d $temp_name >/dev/null 2>&1
+ac_cv_prog_mkdir_p=none
+if test -d $temp_name; then
+ ac_cv_prog_mkdir_p="$INSTALL -d"
+else
+ mkdir -p $temp_name >/dev/null 2>&1
+ if test -d $temp_name; then
+ ac_cv_prog_mkdir_p="mkdir -p"
+ fi
+fi
+rm -fr $temp_name_base
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_mkdir_p" >&5
+printf "%s\n" "$ac_cv_prog_mkdir_p" >&6; }
+
+case "${ac_cv_prog_mkdir_p}" in
+ none) as_fn_error $? "don't know how create directories with parents" "$LINENO" 5 ;;
+ *) INSTALL_DIR="$ac_cv_prog_mkdir_p" ;;
+esac
+
+
+case $host_os in
+ darwin*)
+ INSTALL_DATA="$INSTALL_DATA -p";;
+ *)
+ ;;
+esac
+
+
+case $build in
+ *tile*)
+ INSTALL_PROGRAM="$INSTALL_PROGRAM -m755"
+ INSTALL_SCRIPT="$INSTALL_SCRIPT -m755"
+ ;;
+ *)
+ ;;
+esac
case $host_os in
@@ -4944,111 +7448,111 @@ MIXED_VSL=no
MIXED_VC=no
MIXED_MINGW=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
-$as_echo_n "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
+printf %s "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
-$as_echo "MSYS and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
+printf "%s\n" "MSYS and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
-$as_echo "Cygwin and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
+printf "%s\n" "Cygwin and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /bin/wslpath; then
CFLAGS="$CFLAGS -O2"
MIXED_WSL=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
-$as_echo "WSL and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
+printf "%s\n" "WSL and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not within any known env" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$MIXED_MSYS" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
-$as_echo_n "checking for mixed cygwin and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
+printf %s "checking for mixed cygwin and native MinGW environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with cygwin" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
-$as_echo_n "checking for mixed MSYS and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
+printf %s "checking for mixed MSYS and native MinGW environment... " >&6; }
if test "x$GCC" = x"yes"; then
if test -x /usr/bin/msys-=.0.dll; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with msys" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
-$as_echo_n "checking if we mix cygwin with any native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
+printf %s "checking if we mix cygwin with any native compiler... " >&6; }
if test "X$MIXED_CYGWIN" = "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
-$as_echo_n "checking if we mix msys with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
+printf %s "checking if we mix msys with another native compiler... " >&6; }
if test "X$MIXED_MSYS" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
-$as_echo_n "checking if we mix WSL with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
+printf %s "checking if we mix WSL with another native compiler... " >&6; }
if test "X$MIXED_WSL" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
@@ -5089,20 +7593,25 @@ esac
lfs_conf=ok
lfs_source=none
-if test "${LFS_CFLAGS+set}" = "set" || \
- test "${LFS_LDFLAGS+set}" = "set" || \
- test "${LFS_LIBS+set}" = "set"; then
+if test "${LFS_CFLAGS+set}" = "set" || test "${LFS_LDFLAGS+set}" = "set" || test "${LFS_LIBS+set}" = "set"
+then :
+
lfs_source=user
-else
-if test "$cross_compiling" != "yes"; then
+else $as_nop
+
+
+if test "$cross_compiling" != "yes"
+then :
+
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -5110,11 +7619,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5126,23 +7639,26 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-else
+
+else $as_nop
+
host_getconf="$host_alias-getconf"
# Extract the first word of "$host_getconf", so it can be a program name with args.
set dummy $host_getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -5150,11 +7666,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="$host_getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5166,25 +7686,28 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""
+then :
+
GETCONF=
prfx="$erl_xcomp_sysroot"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
set dummy ${ac_tool_prefix}getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path.
@@ -5195,11 +7718,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5211,11 +7738,11 @@ esac
fi
GETCONF=$ac_cv_path_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5224,11 +7751,12 @@ if test -z "$ac_cv_path_GETCONF"; then
ac_pt_GETCONF=$GETCONF
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ac_pt_GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_GETCONF="$ac_pt_GETCONF" # Let the user override the test with a path.
@@ -5239,11 +7767,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5255,11 +7787,11 @@ esac
fi
ac_pt_GETCONF=$ac_cv_path_ac_pt_GETCONF
if test -n "$ac_pt_GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
-$as_echo "$ac_pt_GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
+printf "%s\n" "$ac_pt_GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_pt_GETCONF" = x; then
@@ -5267,8 +7799,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
GETCONF=$ac_pt_GETCONF
@@ -5277,38 +7809,41 @@ else
GETCONF="$ac_cv_path_GETCONF"
fi
- fi
+
+fi
+
fi
test "$GETCONF" = "false" || lfs_source=getconf
+
fi
if test "$lfs_source" = "none"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to check for large file support flags; no getconf is available" >&5
-$as_echo "$as_me: WARNING: Do not know how to check for large file support flags; no getconf is available" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to check for large file support flags; no getconf is available" >&5
+printf "%s\n" "$as_me: WARNING: Do not know how to check for large file support flags; no getconf is available" >&2;}
else
for var in CFLAGS LDFLAGS LIBS; do
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for large file support $var" >&5
-$as_echo_n "checking for large file support $var... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for large file support $var" >&5
+printf %s "checking for large file support $var... " >&6; }
if test $lfs_source = user; then
eval "lfs_val=\"\$LFS_$var\""
else
eval "lfs_var=LFS_$var"
lfs_val=`$GETCONF $lfs_var 2>/dev/null` || lfs_conf=failed
if test $lfs_conf = failed; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
break
fi
eval "$lfs_var=\"$lfs_val\""
fi
test "$lfs_val" != "" || lfs_val=none
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lfs_val" >&5
-$as_echo "$lfs_val" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lfs_val" >&5
+printf "%s\n" "$lfs_val" >&6; }
done
if test $lfs_conf = failed; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Check for large file support flags failed; $GETCONF failed" >&5
-$as_echo "$as_me: WARNING: Check for large file support flags failed; $GETCONF failed" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Check for large file support flags failed; $GETCONF failed" >&5
+printf "%s\n" "$as_me: WARNING: Check for large file support flags failed; $GETCONF failed" >&2;}
else
CFLAGS="$CFLAGS $LFS_CFLAGS"
DEBUG_CFLAGS="$DEBUG_CFLAGS $LFS_CFLAGS"
@@ -5317,103 +7852,123 @@ $as_echo "$as_me: WARNING: Check for large file support flags failed; $GETCONF f
fi
fi
-if test "x$GCC" = xyes; then
+if test "x$GCC" = xyes
+then :
+
# Treat certain GCC warnings as errors
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
WERRORFLAGS="-Werror=return-type $WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=implicit to WERRORFLAGS (via CFLAGS)... " >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=implicit to WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=implicit $WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
WERRORFLAGS="-Werror=implicit $WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=undef to WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=undef to WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=undef $WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
WERRORFLAGS="-Werror=undef $WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
# until the emulator can handle this, I suggest we turn it off!
@@ -5435,19 +7990,20 @@ $as_echo "no" >&6; }
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
warn_decl_after_st=true
-else
+else $as_nop
warn_decl_after_st=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test "X$warn_decl_after_st" = "Xtrue"; then
WFLAGS="$WFLAGS -Wdeclaration-after-statement"
fi
@@ -5458,50 +8014,59 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
# Until version 10, gcc has had -fcommon as default, which allows and merges
# such dubious duplicates.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -fno-common to CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -fno-common to CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fno-common $CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CFLAGS="-fno-common $CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
-else
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+
+
+else $as_nop
+
WFLAGS=""
WERRORFLAGS=${WERRORFLAGS:-""}
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking C99 support" >&5
-$as_echo_n "checking C99 support... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking C99 support" >&5
+printf %s "checking C99 support... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#if __STDC_VERSION__ < 199901L
@@ -5511,22 +8076,23 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
CFLAGS="-std=gnu99 $CFLAGS"
DEBUG_CFLAGS="-std=gnu99 $DEBUG_CFLAGS"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGS for -O switch" >&5
-$as_echo_n "checking CFLAGS for -O switch... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking CFLAGS for -O switch" >&5
+printf %s "checking CFLAGS for -O switch... " >&6; }
case "$CFLAGS" in
- *-O*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; } ;;
+ *-O*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; } ;;
*)
as_fn_error $? "
CFLAGS must contain a -O flag. If you need to edit the CFLAGS you probably
@@ -5541,20 +8107,22 @@ esac
## Check if we can do profile guided optimization of beam_emu
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-generate -Werror..." >&5
-$as_echo_n "checking whether $CC accepts -fprofile-generate -Werror...... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-generate -Werror..." >&5
+printf %s "checking whether $CC accepts -fprofile-generate -Werror...... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fprofile-generate -Werror $CFLAGS";
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes
+then :
can_enable_flag=false
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
return 0;
-else
+else $as_nop
can_enable_flag=true
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -5562,31 +8130,38 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
PROFILE_GENERATE=true
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+else $as_nop
+
PROFILE_GENERATE=false
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-use -Werror..." >&5
-$as_echo_n "checking whether $CC accepts -fprofile-use -Werror...... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-use -Werror..." >&5
+printf %s "checking whether $CC accepts -fprofile-use -Werror...... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fprofile-use -Werror $CFLAGS";
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes
+then :
can_enable_flag=false
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
return 0;
-else
+else $as_nop
can_enable_flag=true
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -5594,31 +8169,38 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
PROFILE_USE=true
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+else $as_nop
+
PROFILE_USE=false
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-use -fprofile-correction -Werror..." >&5
-$as_echo_n "checking whether $CC accepts -fprofile-use -fprofile-correction -Werror...... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-use -fprofile-correction -Werror..." >&5
+printf %s "checking whether $CC accepts -fprofile-use -fprofile-correction -Werror...... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fprofile-use -fprofile-correction -Werror $CFLAGS";
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes
+then :
can_enable_flag=false
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
return 0;
-else
+else $as_nop
can_enable_flag=true
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -5626,112 +8208,132 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
PROFILE_CORRECTION=true
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+else $as_nop
+
PROFILE_CORRECTION=false
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+if test "X$PROFILE_CORRECTION" = "Xtrue"
+then :
-if test "X$PROFILE_CORRECTION" = "Xtrue"; then
saved_CFLAGS=$CFLAGS
saved_LDFLAGS=$LDFLAGS
CFLAGS="-fprofile-generate $saved_CFLAGS"
LDFLAGS="-fprofile-generate $saved_LDFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC links with -fprofile-generate" >&5
-$as_echo_n "checking whether $CC links with -fprofile-generate... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC links with -fprofile-generate" >&5
+printf %s "checking whether $CC links with -fprofile-generate... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
PROFILE_GENERATE=true
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
PROFILE_GENERATE=false
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS=$saved_CFLAGS
LDFLAGS=$saved_LDFLAGS
+
fi
## Check if this is clang
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-instr-generate -Werror..." >&5
-$as_echo_n "checking whether $CC accepts -fprofile-instr-generate -Werror...... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-instr-generate -Werror..." >&5
+printf %s "checking whether $CC accepts -fprofile-instr-generate -Werror...... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fprofile-instr-generate -Werror $CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
PROFILE_INSTR_GENERATE=true
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+else $as_nop
+
PROFILE_INSTR_GENERATE=false
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+
+if test "X$PROFILE_INSTR_GENERATE" = "Xtrue"
+then :
-if test "X$PROFILE_INSTR_GENERATE" = "Xtrue"; then
# It was clang, now we also have to check if we have llvm-profdata and that
# we can link programs with -fprofile-instr-use
saved_CFLAGS=$CFLAGS;
CFLAGS="-fprofile-instr-generate -Werror $saved_CFLAGS"
- if test "$cross_compiling" = yes; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling PGO when cross-compiling" >&5
-$as_echo "$as_me: Disabling PGO when cross-compiling" >&6;}
-else
+ if test "$cross_compiling" = yes
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling PGO when cross-compiling" >&5
+printf "%s\n" "$as_me: Disabling PGO when cross-compiling" >&6;}
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
# Extract the first word of "llvm-profdata", so it can be a program name with args.
set dummy llvm-profdata; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LLVM_PROFDATA+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_LLVM_PROFDATA+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $LLVM_PROFDATA in
[\\/]* | ?:[\\/]*)
ac_cv_path_LLVM_PROFDATA="$LLVM_PROFDATA" # Let the user override the test with a path.
@@ -5742,11 +8344,15 @@ as_dummy="$PATH:/Library/Developer/CommandLineTools/usr/bin"
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_LLVM_PROFDATA="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_LLVM_PROFDATA="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5758,11 +8364,11 @@ esac
fi
LLVM_PROFDATA=$ac_cv_path_LLVM_PROFDATA
if test -n "$LLVM_PROFDATA"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROFDATA" >&5
-$as_echo "$LLVM_PROFDATA" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROFDATA" >&5
+printf "%s\n" "$LLVM_PROFDATA" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5770,11 +8376,12 @@ fi
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_XCRUN+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_XCRUN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$XCRUN"; then
ac_cv_prog_XCRUN="$XCRUN" # Let the user override the test.
else
@@ -5782,11 +8389,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_XCRUN="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5797,58 +8408,70 @@ fi
fi
XCRUN=$ac_cv_prog_XCRUN
if test -n "$XCRUN"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XCRUN" >&5
-$as_echo "$XCRUN" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XCRUN" >&5
+printf "%s\n" "$XCRUN" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
test -n "$XCRUN" && break
done
- if test "X$XCRUN" != "X" -a "X$LLVM_PROFDATA" = "X"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $XCRUN $LLVM_PROFDATA" >&5
-$as_echo_n "checking for $XCRUN $LLVM_PROFDATA... " >&6; }
- if $XCRUN $LLVM_PROFDATA --help 2>& 5 >& 5; then
+ if test "X$XCRUN" != "X" -a "X$LLVM_PROFDATA" = "X"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $XCRUN $LLVM_PROFDATA" >&5
+printf %s "checking for $XCRUN $LLVM_PROFDATA... " >&6; }
+ if $XCRUN $LLVM_PROFDATA --help 2>& 5 >& 5
+then :
+
LLVM_PROFDATA="$XCRUN $LLVM_PROFDATA"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+
+fi
+
+ if test "X$LLVM_PROFDATA" != "X"
+then :
- if test "X$LLVM_PROFDATA" != "X"; then
CFLAGS="-fprofile-instr-use=default.profdata $saved_CFLAGS";
$LLVM_PROFDATA merge -output=default.profdata *.profraw;
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-instr-use=default.profdata -Werror" >&5
-$as_echo_n "checking whether $CC accepts -fprofile-instr-use=default.profdata -Werror... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -fprofile-instr-use=default.profdata -Werror" >&5
+printf %s "checking whether $CC accepts -fprofile-instr-use=default.profdata -Werror... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
PROFILE_INSTR_USE=true
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
PROFILE_INSTR_USE=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
rm -f default.profdata
- fi
+
+fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
@@ -5856,54 +8479,56 @@ fi
rm -f *.profraw
CFLAGS=$saved_CFLAGS;
+
fi
# Check whether --enable-pgo was given.
-if test "${enable_pgo+set}" = set; then :
+if test ${enable_pgo+y}
+then :
enableval=$enable_pgo; case "$enableval" in
no) enable_pgo=no ;;
*) enable_pgo=yes ;;
esac
-else
+else $as_nop
enable_pgo=default
fi
USE_PGO=false
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to do PGO of erts" >&5
-$as_echo_n "checking whether to do PGO of erts... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to do PGO of erts" >&5
+printf %s "checking whether to do PGO of erts... " >&6; }
if test $enable_pgo = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabled by user" >&5
-$as_echo "no, disabled by user" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, disabled by user" >&5
+printf "%s\n" "no, disabled by user" >&6; }
elif test $CROSS_COMPILING = yes; then
if test $enable_pgo = yes; then
as_fn_error $? "cannot use PGO when cross-compiling" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, cross compiling" >&5
-$as_echo "no, cross compiling" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, cross compiling" >&5
+printf "%s\n" "no, cross compiling" >&6; }
fi
elif test "X$host" = "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, not supported in windows" >&5
-$as_echo "no, not supported in windows" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, not supported in windows" >&5
+printf "%s\n" "no, not supported in windows" >&6; }
elif test "X$PROFILE_GENERATE" = "Xtrue" -a "X$PROFILE_USE" = "Xtrue" -a "X$PROFILE_CORRECTION" = "Xtrue"; then
## We need -fprofile-generate and -fprofile-correction support to use PGO with
## gcc as multiple threads run within the executed object files
USE_PGO=true
PROFILE_COMPILER=gcc
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, using -fprofile-generate -fprofile-correction" >&5
-$as_echo "yes, using -fprofile-generate -fprofile-correction" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, using -fprofile-generate -fprofile-correction" >&5
+printf "%s\n" "yes, using -fprofile-generate -fprofile-correction" >&6; }
elif test "X$PROFILE_INSTR_GENERATE" = "Xtrue" -a "X$PROFILE_INSTR_USE" = "Xtrue"; then
USE_PGO=true
PROFILE_COMPILER=clang
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, using -fprofile-instr-generate" >&5
-$as_echo "yes, using -fprofile-instr-generate" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, using -fprofile-instr-generate" >&5
+printf "%s\n" "yes, using -fprofile-instr-generate" >&6; }
else
if test $enable_pgo = yes; then
as_fn_error $? "cannot use PGO with this compiler" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
@@ -5912,418 +8537,52 @@ USE_PGO=false
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
+done
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-fi
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
fi
-
-done
-
-
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -6332,14 +8591,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
# Needed for ARCH and smp checks below
if test "x$ac_cv_sizeof_void_p" = x8; then
@@ -6371,8 +8628,8 @@ esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking target hardware architecture" >&5
-$as_echo_n "checking target hardware architecture... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target hardware architecture" >&5
+printf %s "checking target hardware architecture... " >&6; }
if test "x$host_alias" != "x" -a "x$host_cpu" != "x"; then
chk_arch_=$host_cpu
else
@@ -6414,50 +8671,50 @@ $as_echo_n "checking target hardware architecture... " >&6; }
e2k) ARCH=e2k;;
*) ARCH=noarch;;
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH" >&5
-$as_echo "$ARCH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ARCH" >&5
+printf "%s\n" "$ARCH" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compilation mode forces ARCH adjustment" >&5
-$as_echo_n "checking whether compilation mode forces ARCH adjustment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compilation mode forces ARCH adjustment" >&5
+printf %s "checking whether compilation mode forces ARCH adjustment... " >&6; }
case "$ARCH-$ac_cv_sizeof_void_p" in
x86-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=x86 to ARCH=amd64" >&5
-$as_echo "yes: adjusting ARCH=x86 to ARCH=amd64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=x86 to ARCH=amd64" >&5
+printf "%s\n" "yes: adjusting ARCH=x86 to ARCH=amd64" >&6; }
ARCH=amd64
;;
amd64-4)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=amd64 to ARCH=x86" >&5
-$as_echo "yes: adjusting ARCH=amd64 to ARCH=x86" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=amd64 to ARCH=x86" >&5
+printf "%s\n" "yes: adjusting ARCH=amd64 to ARCH=x86" >&6; }
ARCH=x86
;;
ultrasparc-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&5
-$as_echo "yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&5
+printf "%s\n" "yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&6; }
ARCH=sparc64
;;
sparc64-4)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&5
-$as_echo "yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&5
+printf "%s\n" "yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&6; }
ARCH=ultrasparc
;;
ppc64-4)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc64 to ARCH=ppc" >&5
-$as_echo "yes: adjusting ARCH=ppc64 to ARCH=ppc" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc64 to ARCH=ppc" >&5
+printf "%s\n" "yes: adjusting ARCH=ppc64 to ARCH=ppc" >&6; }
ARCH=ppc
;;
ppc-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc to ARCH=ppc64" >&5
-$as_echo "yes: adjusting ARCH=ppc to ARCH=ppc64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc to ARCH=ppc64" >&5
+printf "%s\n" "yes: adjusting ARCH=ppc to ARCH=ppc64" >&6; }
ARCH=ppc64
;;
arm-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=arm to ARCH=arm64" >&5
-$as_echo "yes: adjusting ARCH=arm to ARCH=arm64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=arm to ARCH=arm64" >&5
+printf "%s\n" "yes: adjusting ARCH=arm to ARCH=arm64" >&6; }
ARCH=arm64
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no: ARCH is $ARCH" >&5
-$as_echo "no: ARCH is $ARCH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no: ARCH is $ARCH" >&5
+printf "%s\n" "no: ARCH is $ARCH" >&6; }
;;
esac
@@ -6469,8 +8726,8 @@ $as_echo "no: ARCH is $ARCH" >&6; }
case $ARCH-$OPSYS in
amd64-darwin*|arm64-darwin*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: Adjusting LDFLAGS to cope with 64bit Darwin" >&5
-$as_echo "$as_me: Adjusting LDFLAGS to cope with 64bit Darwin" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Adjusting LDFLAGS to cope with 64bit Darwin" >&5
+printf "%s\n" "$as_me: Adjusting LDFLAGS to cope with 64bit Darwin" >&6;}
case $LDFLAGS in
*-m64*)
;;
@@ -6490,8 +8747,8 @@ $as_echo "$as_me: Adjusting LDFLAGS to cope with 64bit Darwin" >&6;}
;;
*)
if test X${enable_m64_build} = Xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: Adjusting LDFLAGS to use -m64" >&5
-$as_echo "$as_me: Adjusting LDFLAGS to use -m64" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Adjusting LDFLAGS to use -m64" >&5
+printf "%s\n" "$as_me: Adjusting LDFLAGS to use -m64" >&6;}
case $LDFLAGS in
*-m64*)
;;
@@ -6501,8 +8758,8 @@ $as_echo "$as_me: Adjusting LDFLAGS to use -m64" >&6;}
esac
fi;
if test X${enable_m32_build} = Xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: Adjusting LDFLAGS to use -m32" >&5
-$as_echo "$as_me: Adjusting LDFLAGS to use -m32" >&6;} ;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Adjusting LDFLAGS to use -m32" >&5
+printf "%s\n" "$as_me: Adjusting LDFLAGS to use -m32" >&6;} ;
case $LDFLAGS in
*-m32*)
;;
@@ -6514,18 +8771,18 @@ $as_echo "$as_me: Adjusting LDFLAGS to use -m32" >&6;} ;
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if VM has to be linked with Carbon framework" >&5
-$as_echo_n "checking if VM has to be linked with Carbon framework... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if VM has to be linked with Carbon framework" >&5
+printf %s "checking if VM has to be linked with Carbon framework... " >&6; }
case $ARCH-$OPSYS in
*-darwin*)
LIBCARBON="-framework Carbon -framework Cocoa"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
;;
*)
LIBCARBON=
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
;;
esac
@@ -6535,11 +8792,12 @@ _search_path=/bin:/usr/bin:/usr/local/bin:$PATH
# Extract the first word of "mkdir", so it can be a program name with args.
set dummy mkdir; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MKDIR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MKDIR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $MKDIR in
[\\/]* | ?:[\\/]*)
ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path.
@@ -6549,11 +8807,15 @@ else
for as_dir in $_search_path
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_MKDIR="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6566,11 +8828,11 @@ esac
fi
MKDIR=$ac_cv_path_MKDIR
if test -n "$MKDIR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5
-$as_echo "$MKDIR" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5
+printf "%s\n" "$MKDIR" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -6580,11 +8842,12 @@ fi
# Extract the first word of "cp", so it can be a program name with args.
set dummy cp; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_CP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $CP in
[\\/]* | ?:[\\/]*)
ac_cv_path_CP="$CP" # Let the user override the test with a path.
@@ -6594,11 +8857,15 @@ else
for as_dir in $_search_path
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_CP="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6611,11 +8878,11 @@ esac
fi
CP=$ac_cv_path_CP
if test -n "$CP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5
-$as_echo "$CP" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CP" >&5
+printf "%s\n" "$CP" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -6631,762 +8898,20 @@ _search_path=
# just the right place.
rm -f "$ERL_TOP/erts/CONF_INFO"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we are building a sharing-preserving emulator" >&5
-$as_echo_n "checking if we are building a sharing-preserving emulator... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we are building a sharing-preserving emulator" >&5
+printf %s "checking if we are building a sharing-preserving emulator... " >&6; }
if test "$enable_sharing_preserving" = "yes"; then
-$as_echo "#define SHCOPY 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-for ac_prog in 'bison -y' byacc
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_YACC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$YACC"; then
- ac_cv_prog_YACC="$YACC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_YACC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-YACC=$ac_cv_prog_YACC
-if test -n "$YACC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
-$as_echo "$YACC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$YACC" && break
-done
-test -n "$YACC" || YACC="yacc"
-
-for ac_prog in perl5 perl
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PERL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PERL in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="/usr/local/bin:/opt/local/bin:/usr/local/gnu/bin:${PATH}"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-if test -n "$PERL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
+printf "%s\n" "#define SHCOPY 1" >>confdefs.h
- test -n "$PERL" && break
-done
-test -n "$PERL" || PERL="false"
-
-if test "$PERL" = "false"; then
- ac_cv_path_PERL=false
- PERL=false
-fi
-
-if test "$ac_cv_path_PERL" = false; then
- as_fn_error $? "Perl version 5 is required to build the emulator!" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-fi
-
-if test "$ac_cv_prog_AR" = false; then
- as_fn_error $? "No 'ar' command found in PATH" "$LINENO" 5
-fi
-
-#
-# Get programs needed for building the documentation
-#
-
-## Delete previous failed configure results
-if test -f doc/CONF_INFO; then
- rm -f doc/CONF_INFO
-fi
-
-for ac_prog in xsltproc
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_XSLTPROC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$XSLTPROC"; then
- ac_cv_prog_XSLTPROC="$XSLTPROC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_XSLTPROC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-XSLTPROC=$ac_cv_prog_XSLTPROC
-if test -n "$XSLTPROC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
-$as_echo "$XSLTPROC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$XSLTPROC" && break
-done
-
-if test -z "$XSLTPROC"; then
- echo "xsltproc" >> doc/CONF_INFO
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No 'xsltproc' command found: the documentation cannot be built" >&5
-$as_echo "$as_me: WARNING: No 'xsltproc' command found: the documentation cannot be built" >&2;}
-fi
-
-for ac_prog in fop
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_FOP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$FOP"; then
- ac_cv_prog_FOP="$FOP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_FOP="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-FOP=$ac_cv_prog_FOP
-if test -n "$FOP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5
-$as_echo "$FOP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$FOP" && break
-done
-
-if test -z "$FOP"; then
- FOP="$ERL_TOP/make/fakefop"
- echo "fop" >> doc/CONF_INFO
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No 'fop' command found: going to generate placeholder PDF files" >&5
-$as_echo "$as_me: WARNING: No 'fop' command found: going to generate placeholder PDF files" >&2;}
-fi
-
-for ac_prog in xmllint
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_XMLLINT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$XMLLINT"; then
- ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_XMLLINT="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-XMLLINT=$ac_cv_prog_XMLLINT
-if test -n "$XMLLINT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
-$as_echo "$XMLLINT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$XMLLINT" && break
-done
-
-if test -z "$XMLLINT"; then
- echo "xmllint" >> doc/CONF_INFO
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No 'xmllint' command found: can't run the xmllint target for the documentation" >&5
-$as_echo "$as_me: WARNING: No 'xmllint' command found: can't run the xmllint target for the documentation" >&2;}
-fi
-
-case $host in
- *-*-solaris*|free_source)
- if test -x /usr/ucb/install; then
- INSTALL="/usr/ucb/install -c"
- fi
- ;;
- *)
- ;;
-esac
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a directory including parents" >&5
-$as_echo_n "checking how to create a directory including parents... " >&6; }
-if ${ac_cv_prog_mkdir_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-temp_name_base=config.$$
-temp_name=$temp_name_base/x/y/z
-$INSTALL -d $temp_name >/dev/null 2>&1
-ac_cv_prog_mkdir_p=none
-if test -d $temp_name; then
- ac_cv_prog_mkdir_p="$INSTALL -d"
-else
- mkdir -p $temp_name >/dev/null 2>&1
- if test -d $temp_name; then
- ac_cv_prog_mkdir_p="mkdir -p"
- fi
-fi
-rm -fr $temp_name_base
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_mkdir_p" >&5
-$as_echo "$ac_cv_prog_mkdir_p" >&6; }
-
-case "${ac_cv_prog_mkdir_p}" in
- none) as_fn_error $? "don't know how create directories with parents" "$LINENO" 5 ;;
- *) INSTALL_DIR="$ac_cv_prog_mkdir_p" ;;
-esac
-
-
-case $host_os in
- darwin*)
- INSTALL_DATA="$INSTALL_DATA -p";;
- *)
- ;;
-esac
-
-
-case $build in
- *tile*)
- INSTALL_PROGRAM="$INSTALL_PROGRAM -m755"
- INSTALL_SCRIPT="$INSTALL_SCRIPT -m755"
- ;;
- *)
- ;;
-esac
-
-
HCC='$(CC)'
HCFLAGS=""
HCFLAGS="$HCFLAGS -I${ERL_TOP}/erts/$host"
@@ -7417,68 +8942,79 @@ esac
# AIX 4.x (perhaps only for x>=2) wants -Wl,-bexpall,-brtl and doesn't
# reliably return an error for others, thus we separate it out.
# Otherwise we assume that if the linker accepts the flag, it is needed.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra flags needed to export symbols" >&5
-$as_echo_n "checking for extra flags needed to export symbols... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for extra flags needed to export symbols" >&5
+printf %s "checking for extra flags needed to export symbols... " >&6; }
DEXPORT=""
-case $host_os in
- aix*|os400*)
+case $host_os in #(
+ aix*|os400*) :
+
DEXPORT=-Wl,-bexpall,-brtl
- ;;
- bsdi*)
+ ;; #(
+ bsdi*) :
+
DEXPORT="-rdynamic "
- ;;
- win32)
+ ;; #(
+ win32) :
+
DEXPORT=""
- ;;
- *)
+ ;; #(
+ *) :
+
+ DEXPORT=
save_ldflags="$LDFLAGS"
LDFLAGS=-Wl,-export-dynamic
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- DEXPORT=-Wl,-export-dynamic
-else
+if ac_fn_c_try_link "$LINENO"
+then :
+ DEXPORT="$LDFLAGS"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$DEXPORT" = ""
+then :
- LDFLAGS=-Wl,-Bexport
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ LDFLAGS=-Wl,-Bexport
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- DEXPORT=-Wl,-Bexport
+if ac_fn_c_try_link "$LINENO"
+then :
+ DEXPORT="$LDFLAGS"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
+
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
LDFLAGS="$save_ldflags"
- ;;
+ ;;
esac
+
case "x$DEXPORT" in
"x")
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; };;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; };;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEXPORT" >&5
-$as_echo "$DEXPORT" >&6; };;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DEXPORT" >&5
+printf "%s\n" "$DEXPORT" >&6; };;
esac
# Check for Solaris/ultrasparc /dev/perfmon interface
@@ -7486,7 +9022,7 @@ esac
case "${host}:${GCC}" in
sparc-*-solaris*:yes)
-$as_echo "#define HAVE_SOLARIS_SPARC_PERFMON 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SOLARIS_SPARC_PERFMON 1" >>confdefs.h
;;
*)
@@ -7498,8 +9034,8 @@ case $host_os in
darwin19*)
# Disable stack checking to avoid crashing with a segment fault
# in macOS Catalina.
- { $as_echo "$as_me:${as_lineno-$LINENO}: Turning off stack check on macOS 10.15 (Catalina)" >&5
-$as_echo "$as_me: Turning off stack check on macOS 10.15 (Catalina)" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Turning off stack check on macOS 10.15 (Catalina)" >&5
+printf "%s\n" "$as_me: Turning off stack check on macOS 10.15 (Catalina)" >&6;}
CFLAGS="-fno-stack-check $CFLAGS"
;;
*)
@@ -7508,11 +9044,12 @@ esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
-$as_echo_n "checking for sin in -lm... " >&6; }
-if ${ac_cv_lib_m_sin+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
+printf %s "checking for sin in -lm... " >&6; }
+if test ${ac_cv_lib_m_sin+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7521,43 +9058,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char sin ();
int
-main ()
+main (void)
{
return sin ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_m_sin=yes
-else
+else $as_nop
ac_cv_lib_m_sin=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
-$as_echo "$ac_cv_lib_m_sin" >&6; }
-if test "x$ac_cv_lib_m_sin" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
+printf "%s\n" "$ac_cv_lib_m_sin" >&6; }
+if test "x$ac_cv_lib_m_sin" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h
LIBS="-lm $LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7566,43 +9101,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char dlopen ();
int
-main ()
+main (void)
{
return dlopen ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_dl_dlopen=yes
-else
+else $as_nop
ac_cv_lib_dl_dlopen=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBDL 1" >>confdefs.h
LIBS="-ldl $LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5
-$as_echo_n "checking for main in -linet... " >&6; }
-if ${ac_cv_lib_inet_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5
+printf %s "checking for main in -linet... " >&6; }
+if test ${ac_cv_lib_inet_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-linet $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7610,38 +9143,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_inet_main=yes
-else
+else $as_nop
ac_cv_lib_inet_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5
-$as_echo "$ac_cv_lib_inet_main" >&6; }
-if test "x$ac_cv_lib_inet_main" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBINET 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5
+printf "%s\n" "$ac_cv_lib_inet_main" >&6; }
+if test "x$ac_cv_lib_inet_main" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBINET 1" >>confdefs.h
LIBS="-linet $LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5
-$as_echo_n "checking for openpty in -lutil... " >&6; }
-if ${ac_cv_lib_util_openpty+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5
+printf %s "checking for openpty in -lutil... " >&6; }
+if test ${ac_cv_lib_util_openpty+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lutil $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7650,33 +9184,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char openpty ();
int
-main ()
+main (void)
{
return openpty ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_util_openpty=yes
-else
+else $as_nop
ac_cv_lib_util_openpty=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5
-$as_echo "$ac_cv_lib_util_openpty" >&6; }
-if test "x$ac_cv_lib_util_openpty" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBUTIL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5
+printf "%s\n" "$ac_cv_lib_util_openpty" >&6; }
+if test "x$ac_cv_lib_util_openpty" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBUTIL 1" >>confdefs.h
LIBS="-lutil $LIBS"
@@ -7686,97 +9217,104 @@ fi
# Check whether --enable-native-ethr-impls was given.
-if test "${enable_native_ethr_impls+set}" = set; then :
+if test ${enable_native_ethr_impls+y}
+then :
enableval=$enable_native_ethr_impls; case "$enableval" in
no) disable_native_ethr_impls=yes ;;
*) disable_native_ethr_impls=no ;;
esac
-else
+else $as_nop
disable_native_ethr_impls=no
fi
test "X$disable_native_ethr_impls" = "Xyes" &&
-$as_echo "#define ETHR_DISABLE_NATIVE_IMPLS 1" >>confdefs.h
+printf "%s\n" "#define ETHR_DISABLE_NATIVE_IMPLS 1" >>confdefs.h
# Check whether --enable-x86-out-of-order was given.
-if test "${enable_x86_out_of_order+set}" = set; then :
+if test ${enable_x86_out_of_order+y}
+then :
enableval=$enable_x86_out_of_order;
fi
# Check whether --enable-prefer-gcc-native-ethr-impls was given.
-if test "${enable_prefer_gcc_native_ethr_impls+set}" = set; then :
+if test ${enable_prefer_gcc_native_ethr_impls+y}
+then :
enableval=$enable_prefer_gcc_native_ethr_impls; case "$enableval" in
yes) enable_prefer_gcc_native_ethr_impls=yes ;;
*) enable_prefer_gcc_native_ethr_impls=no ;;
esac
-else
+else $as_nop
enable_prefer_gcc_native_ethr_impls=no
fi
test $enable_prefer_gcc_native_ethr_impls = yes &&
-$as_echo "#define ETHR_PREFER_GCC_NATIVE_IMPLS 1" >>confdefs.h
+printf "%s\n" "#define ETHR_PREFER_GCC_NATIVE_IMPLS 1" >>confdefs.h
# Check whether --enable-trust-gcc-atomic-builtins-memory-barriers was given.
-if test "${enable_trust_gcc_atomic_builtins_memory_barriers+set}" = set; then :
+if test ${enable_trust_gcc_atomic_builtins_memory_barriers+y}
+then :
enableval=$enable_trust_gcc_atomic_builtins_memory_barriers; case "$enableval" in
yes) trust_gcc_atomic_builtins_mbs=1 ;;
*) trust_gcc_atomic_builtins_mbs=0 ;;
esac
-else
+else $as_nop
trust_gcc_atomic_builtins_mbs=0
fi
-cat >>confdefs.h <<_ACEOF
-#define ETHR_TRUST_GCC_ATOMIC_BUILTINS_MEMORY_BARRIERS $trust_gcc_atomic_builtins_mbs
-_ACEOF
+printf "%s\n" "#define ETHR_TRUST_GCC_ATOMIC_BUILTINS_MEMORY_BARRIERS $trust_gcc_atomic_builtins_mbs" >>confdefs.h
# Check whether --with-libatomic_ops was given.
-if test "${with_libatomic_ops+set}" = set; then :
+if test ${with_libatomic_ops+y}
+then :
withval=$with_libatomic_ops;
fi
# Check whether --with-with_sparc_memory_order was given.
-if test "${with_with_sparc_memory_order+set}" = set; then :
+if test ${with_with_sparc_memory_order+y}
+then :
withval=$with_with_sparc_memory_order;
fi
# Check whether --enable-ppc-lwsync-instruction was given.
-if test "${enable_ppc_lwsync_instruction+set}" = set; then :
+if test ${enable_ppc_lwsync_instruction+y}
+then :
enableval=$enable_ppc_lwsync_instruction; case "$enableval" in
no) enable_lwsync=no ;;
*) enable_lwsync=yes ;;
esac
-else
+else $as_nop
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -7785,14 +9323,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
case $host_cpu-$ac_cv_sizeof_void_p in
@@ -7807,12 +9343,12 @@ fi
case $enable_lwsync in
no)
-$as_echo "#define ETHR_PPC_HAVE_NO_LWSYNC 1" >>confdefs.h
+printf "%s\n" "#define ETHR_PPC_HAVE_NO_LWSYNC 1" >>confdefs.h
;;
yes)
-$as_echo "#define ETHR_PPC_HAVE_LWSYNC 1" >>confdefs.h
+printf "%s\n" "#define ETHR_PPC_HAVE_LWSYNC 1" >>confdefs.h
;;
*)
@@ -7823,29 +9359,34 @@ esac
NEED_NPTL_PTHREAD_H=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
-$as_echo_n "checking for native win32 threads... " >&6; }
-if test "X$host_os" = "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
+printf %s "checking for native win32 threads... " >&6; }
+if test "X$host_os" = "Xwin32"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
THR_DEFS="-DWIN32_THREADS"
THR_LIBS=
THR_LIB_NAME=win32_threads
THR_LIB_TYPE=win32_threads
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
THR_DEFS=
THR_LIBS=
THR_LIB_NAME=
THR_LIB_TYPE=posix_unknown
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+printf %s "checking for pthread_create in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lpthread $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7854,40 +9395,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_pthread_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_pthread_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes
+then :
THR_LIBS="-lpthread"
fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
+printf %s "checking for pthread_create in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lc_r $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7896,96 +9439,112 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_c_r_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_c_r_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_create" = xyes
+then :
THR_LIBS="-lc_r"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
-if test "x$ac_cv_func_pthread_create" = xyes; then :
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
+if test "x$ac_cv_func_pthread_create" = xyes
+then :
THR_LIBS="none_needed"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
-$as_echo_n "checking if the '-pthread' switch can be used... " >&6; }
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
+printf %s "checking if the '-pthread' switch can be used... " >&6; }
saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -pthread"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_create((void*)0,(void*)0,(void*)0,(void*)0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
THR_DEFS="-pthread"
THR_LIBS="-pthread"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS=$saved_cflags
if test "x$THR_LIBS" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- fi
- if test "x$THR_LIBS" != "x"; then
+fi
+
+ if test "x$THR_LIBS" != "x"
+then :
+
THR_DEFS="$THR_DEFS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS"
THR_LIB_NAME=pthread
if test "x$THR_LIBS" = "xnone_needed"; then
THR_LIBS=
fi
- case $host_os in
- solaris*)
- THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;;
- linux*)
+ case $host_os in #(
+ solaris*) :
+
+ THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS"
+ ;; #(
+ linux*) :
+
THR_DEFS="$THR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS"
-if test "$cross_compiling" != "yes"; then
+if test "$cross_compiling" != "yes"
+then :
+
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -7993,11 +9552,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -8009,23 +9572,26 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-else
+
+else $as_nop
+
host_getconf="$host_alias-getconf"
# Extract the first word of "$host_getconf", so it can be a program name with args.
set dummy $host_getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -8033,11 +9599,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="$host_getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -8049,25 +9619,28 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""
+then :
+
GETCONF=
prfx="$erl_xcomp_sysroot"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
set dummy ${ac_tool_prefix}getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path.
@@ -8078,11 +9651,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -8094,11 +9671,11 @@ esac
fi
GETCONF=$ac_cv_path_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -8107,11 +9684,12 @@ if test -z "$ac_cv_path_GETCONF"; then
ac_pt_GETCONF=$GETCONF
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ac_pt_GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_GETCONF="$ac_pt_GETCONF" # Let the user override the test with a path.
@@ -8122,11 +9700,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -8138,11 +9720,11 @@ esac
fi
ac_pt_GETCONF=$ac_cv_path_ac_pt_GETCONF
if test -n "$ac_pt_GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
-$as_echo "$ac_pt_GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
+printf "%s\n" "$ac_pt_GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_pt_GETCONF" = x; then
@@ -8150,8 +9732,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
GETCONF=$ac_pt_GETCONF
@@ -8160,11 +9742,13 @@ else
GETCONF="$ac_cv_path_GETCONF"
fi
- fi
+
+fi
+
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
-$as_echo_n "checking for Native POSIX Thread Library... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
+printf %s "checking for Native POSIX Thread Library... " >&6; }
libpthr_vsn=`$GETCONF GNU_LIBPTHREAD_VERSION 2>/dev/null`
if test $? -eq 0; then
case "$libpthr_vsn" in
@@ -8180,24 +9764,28 @@ $as_echo_n "checking for Native POSIX Thread Library... " >&6; }
else
nptl=no
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
-$as_echo "$nptl" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
+printf "%s\n" "$nptl" >&6; }
if test $nptl = cross; then
nptl=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
- if test $nptl = yes; then
+ if test $nptl = yes
+then :
+
THR_LIB_TYPE=posix_nptl
need_nptl_incldir=no
- ac_fn_c_check_header_mongrel "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_nptl_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_nptl_pthread_h" = xyes
+then :
need_nptl_incldir=yes
NEED_NPTL_PTHREAD_H=yes
fi
+ if test $need_nptl_incldir = yes
+then :
- if test $need_nptl_incldir = yes; then
# Ahh...
nptl_path="$C_INCLUDE_PATH:$CPATH"
if test X$cross_compiling != Xyes; then
@@ -8218,13 +9806,13 @@ fi
IFS=$save_ifs
nptl_incldir=
for dir in $nptl_ws_path; do
- as_ac_Header=`$as_echo "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
nptl_incldir=$dir/nptl
fi
-
if test "x$nptl_incldir" != "x"; then
THR_DEFS="$THR_DEFS -isystem $nptl_incldir"
break
@@ -8233,38 +9821,43 @@ fi
if test "x$nptl_incldir" = "x"; then
as_fn_error $? "Failed to locate nptl system include directory" "$LINENO" 5
fi
- fi
- fi
- ;;
- *) ;;
- esac
+
+fi
+
+fi
+ ;; #(
+ *) :
+ ;;
+esac
saved_cppflags=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $THR_DEFS"
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes
+then :
\
-$as_echo "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
fi
-
CPPFLAGS=$saved_cppflags
- fi
+
+fi
+
fi
@@ -8272,11 +9865,12 @@ fi
ERTS_INTERNAL_X_LIBS=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat" >&5
-$as_echo_n "checking for kstat_open in -lkstat... " >&6; }
-if ${ac_cv_lib_kstat_kstat_open+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat" >&5
+printf %s "checking for kstat_open in -lkstat... " >&6; }
+if test ${ac_cv_lib_kstat_kstat_open+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lkstat $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8285,32 +9879,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char kstat_open ();
int
-main ()
+main (void)
{
return kstat_open ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_kstat_kstat_open=yes
-else
+else $as_nop
ac_cv_lib_kstat_kstat_open=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open" >&5
-$as_echo "$ac_cv_lib_kstat_kstat_open" >&6; }
-if test "x$ac_cv_lib_kstat_kstat_open" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open" >&5
+printf "%s\n" "$ac_cv_lib_kstat_kstat_open" >&6; }
+if test "x$ac_cv_lib_kstat_kstat_open" = xyes
+then :
-$as_echo "#define HAVE_KSTAT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_KSTAT 1" >>confdefs.h
ERTS_INTERNAL_X_LIBS="$ERTS_INTERNAL_X_LIBS -lkstat"
fi
@@ -8351,11 +9944,12 @@ fi
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8364,30 +9958,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -8401,11 +9994,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
-$as_echo_n "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_raw+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
+printf %s "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_raw+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8414,7 +10008,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -8427,23 +10021,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_raw=yes
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_raw=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_raw" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_raw" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_try_find_pthread_compatible+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_try_find_pthread_compatible+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_monotonic $default_resolution_clock_gettime_monotonic $high_resolution_clock_gettime_monotonic $low_resolution_clock_gettime_monotonic; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8453,7 +10049,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -8466,56 +10062,70 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_try_find_pthread_compatible=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_try_find_pthread_compatible=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_monotonic_try_find_pthread_compatible = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_try_find_pthread_compatible" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_try_find_pthread_compatible" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_try_find_pthread_compatible" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_try_find_pthread_compatible" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- for ac_func in clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ if test "$LD_MAY_BE_WEAK" != "no"
+then :
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
fi
-done
- else
- for ac_func in clock_getres clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+
+else $as_nop
+
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
- fi
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with monotonic clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_monotonic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
+printf %s "checking for mach clock_get_time() with monotonic clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_monotonic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8524,7 +10134,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -8539,16 +10149,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_monotonic=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_monotonic=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
-$as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_monotonic" >&6; }
erl_corrected_monotonic_clock=no
case $erl_cv_clock_gettime_monotonic_try_find_pthread_compatible-$ac_cv_func_gethrtime-$erl_cv_mach_clock_get_time_monotonic-$host_os in
@@ -8615,17 +10226,17 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
case $erl_monotonic_clock_func in
clock_gettime)
-$as_echo "#define ETHR_HAVE_CLOCK_GETTIME_MONOTONIC 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_CLOCK_GETTIME_MONOTONIC 1" >>confdefs.h
;;
mach_clock_get_time)
-$as_echo "#define ETHR_HAVE_MACH_CLOCK_GET_TIME 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_MACH_CLOCK_GET_TIME 1" >>confdefs.h
;;
gethrtime)
-$as_echo "#define ETHR_HAVE_GETHRTIME 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_GETHRTIME 1" >>confdefs.h
;;
*)
@@ -8634,9 +10245,7 @@ esac
if test "x$erl_monotonic_clock_id" != "x"; then
-cat >>confdefs.h <<_ACEOF
-#define ETHR_MONOTONIC_CLOCK_ID $erl_monotonic_clock_id
-_ACEOF
+printf "%s\n" "#define ETHR_MONOTONIC_CLOCK_ID $erl_monotonic_clock_id" >>confdefs.h
fi
@@ -8654,18 +10263,19 @@ ethr_modified_default_stack_size=
# Check whether --with-threadnames was given.
-if test "${with_threadnames+set}" = set; then :
+if test ${with_threadnames+y}
+then :
withval=$with_threadnames;
-else
+else $as_nop
with_threadnames=yes
fi
ethr_lib_name=ethread
-case "$THR_LIB_NAME" in
+case "$THR_LIB_NAME" in #(
+ win32_threads) :
- win32_threads)
ETHR_THR_LIB_BASE_DIR=win
# * _WIN32_WINNT >= 0x0400 is needed for
# TryEnterCriticalSection
@@ -8694,7 +10304,7 @@ case "$THR_LIB_NAME" in
fi
-$as_echo "#define ETHR_WIN32_THREADS 1" >>confdefs.h
+printf "%s\n" "#define ETHR_WIN32_THREADS 1" >>confdefs.h
if test "X$disable_native_ethr_impls" = "Xyes"; then
@@ -8703,8 +10313,8 @@ $as_echo "#define ETHR_WIN32_THREADS 1" >>confdefs.h
else
ilckd="_InterlockedDecrement"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -8720,7 +10330,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -8733,23 +10343,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDDECREMENT 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDDECREMENT 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedDecrement_rel"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -8765,7 +10374,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -8778,23 +10387,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDDECREMENT_REL 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDDECREMENT_REL 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedIncrement"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -8810,7 +10418,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -8823,23 +10431,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDINCREMENT 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDINCREMENT 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedIncrement_acq"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -8855,7 +10462,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -8868,23 +10475,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedExchangeAdd"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -8900,7 +10506,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -8913,23 +10519,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedExchangeAdd_acq"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -8945,7 +10550,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -8958,23 +10563,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedAnd"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -8990,7 +10594,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -9003,23 +10607,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDAND 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDAND 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedOr"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -9035,7 +10638,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -9048,23 +10651,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDOR 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDOR 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedExchange"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -9080,7 +10682,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -9093,23 +10695,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDEXCHANGE 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDEXCHANGE 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedCompareExchange"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "3" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -9125,7 +10726,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -9138,24 +10739,23 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes
ilckd="_InterlockedCompareExchange_acq"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "3" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -9171,7 +10771,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -9184,24 +10784,23 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes
ilckd="_InterlockedCompareExchange_rel"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "3" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (long) 0);";;
@@ -9217,7 +10816,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile long *var;
@@ -9230,25 +10829,24 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes
ilckd="_InterlockedDecrement64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9264,7 +10862,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9277,23 +10875,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDDECREMENT64 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDDECREMENT64 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedDecrement64_rel"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9309,7 +10906,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9322,23 +10919,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDDECREMENT64_REL 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDDECREMENT64_REL 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedIncrement64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9354,7 +10950,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9367,23 +10963,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDINCREMENT64 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDINCREMENT64 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedIncrement64_acq"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "1" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9399,7 +10994,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9412,23 +11007,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedExchangeAdd64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9444,7 +11038,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9457,23 +11051,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedExchangeAdd64_acq"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9489,7 +11082,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9502,23 +11095,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedAnd64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9534,7 +11126,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9547,23 +11139,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDAND64 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDAND64 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedOr64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9579,7 +11170,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9592,23 +11183,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDOR64 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDOR64 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedExchange64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "2" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9624,7 +11214,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9637,23 +11227,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDEXCHANGE64 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDEXCHANGE64 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
ilckd="_InterlockedCompareExchange64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "3" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9669,7 +11258,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9682,24 +11271,23 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes
ilckd="_InterlockedCompareExchange64_acq"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "3" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9715,7 +11303,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9728,24 +11316,23 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes
ilckd="_InterlockedCompareExchange64_rel"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "3" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9761,7 +11348,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9774,25 +11361,24 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes
ilckd="_InterlockedCompareExchange128"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
-$as_echo_n "checking for ${ilckd}()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ilckd}()" >&5
+printf %s "checking for ${ilckd}()... " >&6; }
case "4" in
"1") ilckd_call="${ilckd}(var);";;
"2") ilckd_call="${ilckd}(var, (__int64) 0);";;
@@ -9808,7 +11394,7 @@ $as_echo_n "checking for ${ilckd}()... " >&6; }
#include <intrin.h>
int
-main ()
+main (void)
{
volatile __int64 *var;
@@ -9821,30 +11407,29 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_interlocked_op=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $have_interlocked_op = yes &&
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128 1
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
-$as_echo "$have_interlocked_op" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_interlocked_op" >&5
+printf "%s\n" "$have_interlocked_op" >&6; }
fi
if test "$ethr_have_native_atomics" = "yes"; then
ethr_native_atomic_implementation=windows
ethr_have_native_spinlock=yes
fi
- ;;
+ ;; #(
+ pthread) :
- pthread)
ETHR_THR_LIB_BASE_DIR=pthread
-$as_echo "#define ETHR_PTHREADS 1" >>confdefs.h
+printf "%s\n" "#define ETHR_PTHREADS 1" >>confdefs.h
case $host_os in
openbsd*)
@@ -9881,27 +11466,27 @@ $as_echo "#define ETHR_PTHREADS 1" >>confdefs.h
esac
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if SIGUSR1 and SIGUSR2 can be used" >&5
-$as_echo_n "checking if SIGUSR1 and SIGUSR2 can be used... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $usable_sigusrx" >&5
-$as_echo "$usable_sigusrx" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if SIGUSR1 and SIGUSR2 can be used" >&5
+printf %s "checking if SIGUSR1 and SIGUSR2 can be used... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $usable_sigusrx" >&5
+printf "%s\n" "$usable_sigusrx" >&6; }
if test $usable_sigusrx = cross; then
usable_sigusrx=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
if test $usable_sigusrx = no; then
ETHR_DEFS="$ETHR_DEFS -DETHR_UNUSABLE_SIGUSRX"
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigaltstack can be used" >&5
-$as_echo_n "checking if sigaltstack can be used... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $usable_sigaltstack" >&5
-$as_echo "$usable_sigaltstack" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if sigaltstack can be used" >&5
+printf %s "checking if sigaltstack can be used... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $usable_sigaltstack" >&5
+printf "%s\n" "$usable_sigaltstack" >&6; }
if test $usable_sigaltstack = cross; then
usable_sigaltstack=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
if test $usable_sigaltstack = no; then
ETHR_DEFS="$ETHR_DEFS -DETHR_UNUSABLE_SIGALTSTACK"
@@ -9916,73 +11501,54 @@ $as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;
saved_libs="$LIBS"
LIBS="$LIBS $ETHR_X_LIBS"
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
\
-$as_echo "#define ETHR_HAVE_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes
+then :
\
-$as_echo "#define ETHR_HAVE_MIT_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_MIT_PTHREAD_H 1" >>confdefs.h
fi
-
if test $NEED_NPTL_PTHREAD_H = yes; then
-$as_echo "#define ETHR_NEED_NPTL_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define ETHR_NEED_NPTL_PTHREAD_H 1" >>confdefs.h
fi
- ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
-if test "x$ac_cv_header_sched_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
+if test "x$ac_cv_header_sched_h" = xyes
+then :
\
-$as_echo "#define ETHR_HAVE_SCHED_H 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_SCHED_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_time_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = xyes
+then :
\
-$as_echo "#define ETHR_HAVE_SYS_TIME_H 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_SYS_TIME_H 1" >>confdefs.h
fi
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <time.h>
- #include <sys/time.h>
-int
-main ()
-{
-struct timeval *tv; return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-$as_echo "#define ETHR_TIME_WITH_SYS_TIME 1" >>confdefs.h
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable PTHREAD_STACK_MIN" >&5
-$as_echo_n "checking for usable PTHREAD_STACK_MIN... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for usable PTHREAD_STACK_MIN" >&5
+printf %s "checking for usable PTHREAD_STACK_MIN... " >&6; }
pthread_stack_min=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9997,32 +11563,34 @@ $as_echo_n "checking for usable PTHREAD_STACK_MIN... " >&6; }
#endif
int
-main ()
+main (void)
{
return PTHREAD_STACK_MIN;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
pthread_stack_min=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pthread_stack_min" >&5
-$as_echo "$pthread_stack_min" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pthread_stack_min" >&5
+printf "%s\n" "$pthread_stack_min" >&6; }
test $pthread_stack_min != yes || {
-$as_echo "#define ETHR_HAVE_USABLE_PTHREAD_STACK_MIN 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_USABLE_PTHREAD_STACK_MIN 1" >>confdefs.h
}
ac_fn_c_check_func "$LINENO" "pthread_spin_lock" "ac_cv_func_pthread_spin_lock"
-if test "x$ac_cv_func_pthread_spin_lock" = xyes; then :
+if test "x$ac_cv_func_pthread_spin_lock" = xyes
+then :
\
ethr_have_native_spinlock=yes \
-$as_echo "#define ETHR_HAVE_PTHREAD_SPIN_LOCK 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_SPIN_LOCK 1" >>confdefs.h
fi
@@ -10030,16 +11598,20 @@ fi
have_sched_yield=no
have_librt_sched_yield=no
ac_fn_c_check_func "$LINENO" "sched_yield" "ac_cv_func_sched_yield"
-if test "x$ac_cv_func_sched_yield" = xyes; then :
+if test "x$ac_cv_func_sched_yield" = xyes
+then :
have_sched_yield=yes
fi
- if test $have_sched_yield = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5
-$as_echo_n "checking for sched_yield in -lrt... " >&6; }
-if ${ac_cv_lib_rt_sched_yield+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test $have_sched_yield = no
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5
+printf %s "checking for sched_yield in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_sched_yield+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -10048,41 +11620,43 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char sched_yield ();
int
-main ()
+main (void)
{
return sched_yield ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_sched_yield=yes
-else
+else $as_nop
ac_cv_lib_rt_sched_yield=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5
-$as_echo "$ac_cv_lib_rt_sched_yield" >&6; }
-if test "x$ac_cv_lib_rt_sched_yield" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5
+printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; }
+if test "x$ac_cv_lib_rt_sched_yield" = xyes
+then :
have_librt_sched_yield=yes
ETHR_X_LIBS="$ETHR_X_LIBS -lrt"
fi
- fi
- if test $have_sched_yield = yes || test $have_librt_sched_yield = yes; then
-$as_echo "#define ETHR_HAVE_SCHED_YIELD 1" >>confdefs.h
+fi
+ if test $have_sched_yield = yes || test $have_librt_sched_yield = yes
+then :
+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sched_yield() returns an int" >&5
-$as_echo_n "checking whether sched_yield() returns an int... " >&6; }
+printf "%s\n" "#define ETHR_HAVE_SCHED_YIELD 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sched_yield() returns an int" >&5
+printf %s "checking whether sched_yield() returns an int... " >&6; }
sched_yield_ret_int=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10092,39 +11666,44 @@ $as_echo_n "checking whether sched_yield() returns an int... " >&6; }
#endif
int
-main ()
+main (void)
{
int sched_yield();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
sched_yield_ret_int=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sched_yield_ret_int" >&5
-$as_echo "$sched_yield_ret_int" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $sched_yield_ret_int" >&5
+printf "%s\n" "$sched_yield_ret_int" >&6; }
if test $sched_yield_ret_int = yes; then
-$as_echo "#define ETHR_SCHED_YIELD_RET_INT 1" >>confdefs.h
+printf "%s\n" "#define ETHR_SCHED_YIELD_RET_INT 1" >>confdefs.h
fi
- fi
+
+fi
have_pthread_yield=no
ac_fn_c_check_func "$LINENO" "pthread_yield" "ac_cv_func_pthread_yield"
-if test "x$ac_cv_func_pthread_yield" = xyes; then :
+if test "x$ac_cv_func_pthread_yield" = xyes
+then :
have_pthread_yield=yes
fi
- if test $have_pthread_yield = yes; then
+ if test $have_pthread_yield = yes
+then :
+
-$as_echo "#define ETHR_HAVE_PTHREAD_YIELD 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_YIELD 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_yield() returns an int" >&5
-$as_echo_n "checking whether pthread_yield() returns an int... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_yield() returns an int" >&5
+printf %s "checking whether pthread_yield() returns an int... " >&6; }
pthread_yield_ret_int=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10138,49 +11717,56 @@ $as_echo_n "checking whether pthread_yield() returns an int... " >&6; }
#endif
int
-main ()
+main (void)
{
int pthread_yield();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pthread_yield_ret_int=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pthread_yield_ret_int" >&5
-$as_echo "$pthread_yield_ret_int" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pthread_yield_ret_int" >&5
+printf "%s\n" "$pthread_yield_ret_int" >&6; }
if test $pthread_yield_ret_int = yes; then
-$as_echo "#define ETHR_PTHREAD_YIELD_RET_INT 1" >>confdefs.h
+printf "%s\n" "#define ETHR_PTHREAD_YIELD_RET_INT 1" >>confdefs.h
fi
- fi
+
+fi
have_pthread_rwlock_init=no
ac_fn_c_check_func "$LINENO" "pthread_rwlock_init" "ac_cv_func_pthread_rwlock_init"
-if test "x$ac_cv_func_pthread_rwlock_init" = xyes; then :
+if test "x$ac_cv_func_pthread_rwlock_init" = xyes
+then :
have_pthread_rwlock_init=yes
fi
- if test $have_pthread_rwlock_init = yes; then
+ if test $have_pthread_rwlock_init = yes
+then :
ethr_have_pthread_rwlockattr_setkind_np=no
ac_fn_c_check_func "$LINENO" "pthread_rwlockattr_setkind_np" "ac_cv_func_pthread_rwlockattr_setkind_np"
-if test "x$ac_cv_func_pthread_rwlockattr_setkind_np" = xyes; then :
+if test "x$ac_cv_func_pthread_rwlockattr_setkind_np" = xyes
+then :
ethr_have_pthread_rwlockattr_setkind_np=yes
fi
- if test $ethr_have_pthread_rwlockattr_setkind_np = yes; then
+ if test $ethr_have_pthread_rwlockattr_setkind_np = yes
+then :
-$as_echo "#define ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP" >&5
-$as_echo_n "checking for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP... " >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP" >&5
+printf %s "checking for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP... " >&6; }
ethr_pthread_rwlock_writer_nonrecursive_initializer_np=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10194,7 +11780,7 @@ $as_echo_n "checking for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP... " >&6;
#endif
int
-main ()
+main (void)
{
pthread_rwlockattr_t *attr;
@@ -10205,47 +11791,53 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_pthread_rwlock_writer_nonrecursive_initializer_np=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_pthread_rwlock_writer_nonrecursive_initializer_np" >&5
-$as_echo "$ethr_pthread_rwlock_writer_nonrecursive_initializer_np" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_pthread_rwlock_writer_nonrecursive_initializer_np" >&5
+printf "%s\n" "$ethr_pthread_rwlock_writer_nonrecursive_initializer_np" >&6; }
if test $ethr_pthread_rwlock_writer_nonrecursive_initializer_np = yes; then
-$as_echo "#define ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 1" >>confdefs.h
fi
- fi
- fi
+
+fi
+
+fi
if test "$force_pthread_rwlocks" = "yes"; then
-$as_echo "#define ETHR_FORCE_PTHREAD_RWLOCK 1" >>confdefs.h
+printf "%s\n" "#define ETHR_FORCE_PTHREAD_RWLOCK 1" >>confdefs.h
if test $have_pthread_rwlock_init = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Forced usage of pthread rwlocks. Note that this implementation may suffer from starvation issues." >&5
-$as_echo "$as_me: WARNING: Forced usage of pthread rwlocks. Note that this implementation may suffer from starvation issues." >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Forced usage of pthread rwlocks. Note that this implementation may suffer from starvation issues." >&5
+printf "%s\n" "$as_me: WARNING: Forced usage of pthread rwlocks. Note that this implementation may suffer from starvation issues." >&2;}
else
as_fn_error $? "User forced usage of pthread rwlock, but no such implementation was found" "$LINENO" 5
fi
fi
ac_fn_c_check_func "$LINENO" "pthread_attr_setguardsize" "ac_cv_func_pthread_attr_setguardsize"
-if test "x$ac_cv_func_pthread_attr_setguardsize" = xyes; then :
+if test "x$ac_cv_func_pthread_attr_setguardsize" = xyes
+then :
\
-$as_echo "#define ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE 1" >>confdefs.h
fi
- if test "x$erl_monotonic_clock_id" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_cond_timedwait() can use the monotonic clock $erl_monotonic_clock_id for timeout" >&5
-$as_echo_n "checking whether pthread_cond_timedwait() can use the monotonic clock $erl_monotonic_clock_id for timeout... " >&6; }
+ if test "x$erl_monotonic_clock_id" != "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_cond_timedwait() can use the monotonic clock $erl_monotonic_clock_id for timeout" >&5
+printf %s "checking whether pthread_cond_timedwait() can use the monotonic clock $erl_monotonic_clock_id for timeout... " >&6; }
pthread_cond_timedwait_monotonic=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10257,15 +11849,9 @@ $as_echo_n "checking whether pthread_cond_timedwait() can use the monotonic cloc
#elif defined(ETHR_HAVE_PTHREAD_H)
# include <pthread.h>
#endif
- #ifdef ETHR_TIME_WITH_SYS_TIME
- # include <time.h>
+ #include <time.h>
+ #ifdef ETHR_HAVE_SYS_TIME_H
# include <sys/time.h>
- #else
- # ifdef ETHR_HAVE_SYS_TIME_H
- # include <sys/time.h>
- # else
- # include <time.h>
- # endif
#endif
#if defined(ETHR_HAVE_MACH_CLOCK_GET_TIME)
# include <mach/clock.h>
@@ -10273,7 +11859,7 @@ $as_echo_n "checking whether pthread_cond_timedwait() can use the monotonic cloc
#endif
int
-main ()
+main (void)
{
int res;
@@ -10290,23 +11876,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pthread_cond_timedwait_monotonic=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pthread_cond_timedwait_monotonic" >&5
-$as_echo "$pthread_cond_timedwait_monotonic" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pthread_cond_timedwait_monotonic" >&5
+printf "%s\n" "$pthread_cond_timedwait_monotonic" >&6; }
if test $pthread_cond_timedwait_monotonic = yes; then
-$as_echo "#define ETHR_HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 1" >>confdefs.h
fi
- fi
+
+fi
linux_futex=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Linux futexes" >&5
-$as_echo_n "checking for Linux futexes... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Linux futexes" >&5
+printf %s "checking for Linux futexes... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10316,7 +11904,7 @@ $as_echo_n "checking for Linux futexes... " >&6; }
#include <sys/time.h>
int
-main ()
+main (void)
{
int i = 1;
@@ -10330,20 +11918,21 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
linux_futex=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $linux_futex" >&5
-$as_echo "$linux_futex" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $linux_futex" >&5
+printf "%s\n" "$linux_futex" >&6; }
test $linux_futex = yes &&
-$as_echo "#define ETHR_HAVE_LINUX_FUTEX 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_LINUX_FUTEX 1" >>confdefs.h
pthread_setname=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_setname_np" >&5
-$as_echo_n "checking for pthread_setname_np... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_setname_np" >&5
+printf %s "checking for pthread_setname_np... " >&6; }
old_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -10351,87 +11940,91 @@ $as_echo_n "checking for pthread_setname_np... " >&6; }
#define __USE_GNU
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_setname_np(pthread_self(), "name");
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pthread_setname=linux
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define __USE_GNU
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_set_name_np(pthread_self(), "name");
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pthread_setname=bsd
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define _DARWIN_C_SOURCE
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_setname_np("name");
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pthread_setname=darwin
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pthread_setname" >&5
-$as_echo "$pthread_setname" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pthread_setname" >&5
+printf "%s\n" "$pthread_setname" >&6; }
case $with_threadnames-$pthread_setname in
yes-linux)
-$as_echo "#define ETHR_HAVE_PTHREAD_SETNAME_NP_2 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_SETNAME_NP_2 1" >>confdefs.h
;;
yes-bsd)
-$as_echo "#define ETHR_HAVE_PTHREAD_SET_NAME_NP_2 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_SET_NAME_NP_2 1" >>confdefs.h
;;
yes-darwin)
-$as_echo "#define ETHR_HAVE_PTHREAD_SETNAME_NP_1 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_SETNAME_NP_1 1" >>confdefs.h
;;
*) ;;
esac
pthread_getname=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_getname_np" >&5
-$as_echo_n "checking for pthread_getname_np... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_getname_np" >&5
+printf %s "checking for pthread_getname_np... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define __USE_GNU
#define _DARWIN_C_SOURCE
#include <pthread.h>
int
-main ()
+main (void)
{
char buff[256]; pthread_getname_np(pthread_self(), buff, 256);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pthread_getname=linux
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10439,51 +12032,57 @@ rm -f core conftest.err conftest.$ac_objext \
#define _DARWIN_C_SOURCE
#include <pthread.h>
int
-main ()
+main (void)
{
char buff[256]; pthread_getname_np(pthread_self(), buff);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pthread_getname=ibm
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pthread_getname" >&5
-$as_echo "$pthread_getname" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pthread_getname" >&5
+printf "%s\n" "$pthread_getname" >&6; }
case $pthread_getname in
linux)
-$as_echo "#define ETHR_HAVE_PTHREAD_GETNAME_NP_3 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_GETNAME_NP_3 1" >>confdefs.h
;;
ibm)
-$as_echo "#define ETHR_HAVE_PTHREAD_GETNAME_NP_2 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_PTHREAD_GETNAME_NP_2 1" >>confdefs.h
;;
*) ;;
esac
CFLAGS=$old_CFLAGS
- if test "X$disable_native_ethr_impls" = "Xyes"; then
+ if test "X$disable_native_ethr_impls" = "Xyes"
+then :
+
ethr_have_native_atomics=no
- else
+
+else $as_nop
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+printf %s "checking size of short... " >&6; }
+if test ${ac_cv_sizeof_short+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (short)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -10492,31 +12091,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+printf "%s\n" "$ac_cv_sizeof_short" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
+printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+printf %s "checking size of int... " >&6; }
+if test ${ac_cv_sizeof_int+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (int)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -10525,31 +12124,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+printf "%s\n" "$ac_cv_sizeof_int" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
+printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -10558,31 +12157,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+printf %s "checking size of long long... " >&6; }
+if test ${ac_cv_sizeof_long_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -10591,31 +12190,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of __int128_t" >&5
-$as_echo_n "checking size of __int128_t... " >&6; }
-if ${ac_cv_sizeof___int128_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int128_t))" "ac_cv_sizeof___int128_t" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of __int128_t" >&5
+printf %s "checking size of __int128_t... " >&6; }
+if test ${ac_cv_sizeof___int128_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int128_t))" "ac_cv_sizeof___int128_t" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type___int128_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (__int128_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -10624,14 +12223,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int128_t" >&5
-$as_echo "$ac_cv_sizeof___int128_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int128_t" >&5
+printf "%s\n" "$ac_cv_sizeof___int128_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF___INT128_T $ac_cv_sizeof___int128_t
-_ACEOF
+printf "%s\n" "#define SIZEOF___INT128_T $ac_cv_sizeof___int128_t" >>confdefs.h
@@ -10660,28 +12257,30 @@ _ACEOF
else
gcc_atomic_type128="#error "
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working __sync_synchronize()" >&5
-$as_echo_n "checking for a working __sync_synchronize()... " >&6; }
-if ${ethr_cv___sync_synchronize+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working __sync_synchronize()" >&5
+printf %s "checking for a working __sync_synchronize()... " >&6; }
+if test ${ethr_cv___sync_synchronize+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv___sync_synchronize=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__sync_synchronize();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv___sync_synchronize=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $ethr_cv___sync_synchronize = yes; then
#
@@ -10726,8 +12325,8 @@ EOF
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv___sync_synchronize" >&5
-$as_echo "$ethr_cv___sync_synchronize" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv___sync_synchronize" >&5
+printf "%s\n" "$ethr_cv___sync_synchronize" >&6; }
if test "$ethr_cv___sync_synchronize" = "yes"; then
have_sync_synchronize_value="~0"
@@ -10735,9 +12334,7 @@ $as_echo "$ethr_cv___sync_synchronize" >&6; }
have_sync_synchronize_value="0"
fi
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_synchronize $have_sync_synchronize_value
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_synchronize $have_sync_synchronize_value" >>confdefs.h
@@ -10776,87 +12373,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_add_and_fetch()" >&5
-$as_echo_n "checking for 32-bit __sync_add_and_fetch()... " >&6; }
-if ${ethr_cv_32bit___sync_add_and_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_add_and_fetch()" >&5
+printf %s "checking for 32-bit __sync_add_and_fetch()... " >&6; }
+if test ${ethr_cv_32bit___sync_add_and_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_add_and_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_add_and_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_add_and_fetch" >&5
-$as_echo "$ethr_cv_32bit___sync_add_and_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_add_and_fetch()" >&5
-$as_echo_n "checking for 64-bit __sync_add_and_fetch()... " >&6; }
-if ${ethr_cv_64bit___sync_add_and_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_add_and_fetch" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_add_and_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_add_and_fetch()" >&5
+printf %s "checking for 64-bit __sync_add_and_fetch()... " >&6; }
+if test ${ethr_cv_64bit___sync_add_and_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_add_and_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_add_and_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_add_and_fetch" >&5
-$as_echo "$ethr_cv_64bit___sync_add_and_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_add_and_fetch()" >&5
-$as_echo_n "checking for 128-bit __sync_add_and_fetch()... " >&6; }
-if ${ethr_cv_128bit___sync_add_and_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_add_and_fetch" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_add_and_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_add_and_fetch()" >&5
+printf %s "checking for 128-bit __sync_add_and_fetch()... " >&6; }
+if test ${ethr_cv_128bit___sync_add_and_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_add_and_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_add_and_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_add_and_fetch" >&5
-$as_echo "$ethr_cv_128bit___sync_add_and_fetch" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_add_and_fetch" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_add_and_fetch" >&6; }
case $ethr_cv_128bit___sync_add_and_fetch-$ethr_cv_64bit___sync_add_and_fetch-$ethr_cv_32bit___sync_add_and_fetch in
no-no-no)
@@ -10877,9 +12480,7 @@ $as_echo "$ethr_cv_128bit___sync_add_and_fetch" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_add_and_fetch $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_add_and_fetch $have_atomic_ops" >>confdefs.h
@@ -10918,87 +12519,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_and()" >&5
-$as_echo_n "checking for 32-bit __sync_fetch_and_and()... " >&6; }
-if ${ethr_cv_32bit___sync_fetch_and_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_and()" >&5
+printf %s "checking for 32-bit __sync_fetch_and_and()... " >&6; }
+if test ${ethr_cv_32bit___sync_fetch_and_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_fetch_and_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_fetch_and_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_and" >&5
-$as_echo "$ethr_cv_32bit___sync_fetch_and_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_and()" >&5
-$as_echo_n "checking for 64-bit __sync_fetch_and_and()... " >&6; }
-if ${ethr_cv_64bit___sync_fetch_and_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_and" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_fetch_and_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_and()" >&5
+printf %s "checking for 64-bit __sync_fetch_and_and()... " >&6; }
+if test ${ethr_cv_64bit___sync_fetch_and_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_fetch_and_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_fetch_and_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_and" >&5
-$as_echo "$ethr_cv_64bit___sync_fetch_and_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_and()" >&5
-$as_echo_n "checking for 128-bit __sync_fetch_and_and()... " >&6; }
-if ${ethr_cv_128bit___sync_fetch_and_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_and" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_fetch_and_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_and()" >&5
+printf %s "checking for 128-bit __sync_fetch_and_and()... " >&6; }
+if test ${ethr_cv_128bit___sync_fetch_and_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_fetch_and_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_fetch_and_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_and" >&5
-$as_echo "$ethr_cv_128bit___sync_fetch_and_and" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_and" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_fetch_and_and" >&6; }
case $ethr_cv_128bit___sync_fetch_and_and-$ethr_cv_64bit___sync_fetch_and_and-$ethr_cv_32bit___sync_fetch_and_and in
no-no-no)
@@ -11019,9 +12626,7 @@ $as_echo "$ethr_cv_128bit___sync_fetch_and_and" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_fetch_and_and $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_fetch_and_and $have_atomic_ops" >>confdefs.h
@@ -11060,87 +12665,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_or()" >&5
-$as_echo_n "checking for 32-bit __sync_fetch_and_or()... " >&6; }
-if ${ethr_cv_32bit___sync_fetch_and_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_or()" >&5
+printf %s "checking for 32-bit __sync_fetch_and_or()... " >&6; }
+if test ${ethr_cv_32bit___sync_fetch_and_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_fetch_and_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_fetch_and_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_or" >&5
-$as_echo "$ethr_cv_32bit___sync_fetch_and_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_or()" >&5
-$as_echo_n "checking for 64-bit __sync_fetch_and_or()... " >&6; }
-if ${ethr_cv_64bit___sync_fetch_and_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_or" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_fetch_and_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_or()" >&5
+printf %s "checking for 64-bit __sync_fetch_and_or()... " >&6; }
+if test ${ethr_cv_64bit___sync_fetch_and_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_fetch_and_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_fetch_and_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_or" >&5
-$as_echo "$ethr_cv_64bit___sync_fetch_and_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_or()" >&5
-$as_echo_n "checking for 128-bit __sync_fetch_and_or()... " >&6; }
-if ${ethr_cv_128bit___sync_fetch_and_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_or" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_fetch_and_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_or()" >&5
+printf %s "checking for 128-bit __sync_fetch_and_or()... " >&6; }
+if test ${ethr_cv_128bit___sync_fetch_and_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_fetch_and_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_fetch_and_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_or" >&5
-$as_echo "$ethr_cv_128bit___sync_fetch_and_or" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_or" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_fetch_and_or" >&6; }
case $ethr_cv_128bit___sync_fetch_and_or-$ethr_cv_64bit___sync_fetch_and_or-$ethr_cv_32bit___sync_fetch_and_or in
no-no-no)
@@ -11161,9 +12772,7 @@ $as_echo "$ethr_cv_128bit___sync_fetch_and_or" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_fetch_and_or $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_fetch_and_or $have_atomic_ops" >>confdefs.h
@@ -11202,87 +12811,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_val_compare_and_swap()" >&5
-$as_echo_n "checking for 32-bit __sync_val_compare_and_swap()... " >&6; }
-if ${ethr_cv_32bit___sync_val_compare_and_swap+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_val_compare_and_swap()" >&5
+printf %s "checking for 32-bit __sync_val_compare_and_swap()... " >&6; }
+if test ${ethr_cv_32bit___sync_val_compare_and_swap+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_val_compare_and_swap=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_val_compare_and_swap=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_val_compare_and_swap" >&5
-$as_echo "$ethr_cv_32bit___sync_val_compare_and_swap" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_val_compare_and_swap()" >&5
-$as_echo_n "checking for 64-bit __sync_val_compare_and_swap()... " >&6; }
-if ${ethr_cv_64bit___sync_val_compare_and_swap+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_val_compare_and_swap" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_val_compare_and_swap" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_val_compare_and_swap()" >&5
+printf %s "checking for 64-bit __sync_val_compare_and_swap()... " >&6; }
+if test ${ethr_cv_64bit___sync_val_compare_and_swap+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_val_compare_and_swap=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_val_compare_and_swap=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_val_compare_and_swap" >&5
-$as_echo "$ethr_cv_64bit___sync_val_compare_and_swap" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_val_compare_and_swap()" >&5
-$as_echo_n "checking for 128-bit __sync_val_compare_and_swap()... " >&6; }
-if ${ethr_cv_128bit___sync_val_compare_and_swap+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_val_compare_and_swap" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_val_compare_and_swap" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_val_compare_and_swap()" >&5
+printf %s "checking for 128-bit __sync_val_compare_and_swap()... " >&6; }
+if test ${ethr_cv_128bit___sync_val_compare_and_swap+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_val_compare_and_swap=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_val_compare_and_swap=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_val_compare_and_swap" >&5
-$as_echo "$ethr_cv_128bit___sync_val_compare_and_swap" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_val_compare_and_swap" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_val_compare_and_swap" >&6; }
case $ethr_cv_128bit___sync_val_compare_and_swap-$ethr_cv_64bit___sync_val_compare_and_swap-$ethr_cv_32bit___sync_val_compare_and_swap in
no-no-no)
@@ -11303,9 +12918,7 @@ $as_echo "$ethr_cv_128bit___sync_val_compare_and_swap" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_val_compare_and_swap $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_val_compare_and_swap $have_atomic_ops" >>confdefs.h
@@ -11345,87 +12958,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_store_n()" >&5
-$as_echo_n "checking for 32-bit __atomic_store_n()... " >&6; }
-if ${ethr_cv_32bit___atomic_store_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_store_n()" >&5
+printf %s "checking for 32-bit __atomic_store_n()... " >&6; }
+if test ${ethr_cv_32bit___atomic_store_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_store_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_store_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_store_n" >&5
-$as_echo "$ethr_cv_32bit___atomic_store_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_store_n()" >&5
-$as_echo_n "checking for 64-bit __atomic_store_n()... " >&6; }
-if ${ethr_cv_64bit___atomic_store_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_store_n" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_store_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_store_n()" >&5
+printf %s "checking for 64-bit __atomic_store_n()... " >&6; }
+if test ${ethr_cv_64bit___atomic_store_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_store_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_store_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_store_n" >&5
-$as_echo "$ethr_cv_64bit___atomic_store_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_store_n()" >&5
-$as_echo_n "checking for 128-bit __atomic_store_n()... " >&6; }
-if ${ethr_cv_128bit___atomic_store_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_store_n" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_store_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_store_n()" >&5
+printf %s "checking for 128-bit __atomic_store_n()... " >&6; }
+if test ${ethr_cv_128bit___atomic_store_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_store_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_store_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_store_n" >&5
-$as_echo "$ethr_cv_128bit___atomic_store_n" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_store_n" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_store_n" >&6; }
case $ethr_cv_128bit___atomic_store_n-$ethr_cv_64bit___atomic_store_n-$ethr_cv_32bit___atomic_store_n in
no-no-no)
@@ -11446,9 +13065,7 @@ $as_echo "$ethr_cv_128bit___atomic_store_n" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_store_n $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_store_n $have_atomic_ops" >>confdefs.h
@@ -11487,87 +13104,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_load_n()" >&5
-$as_echo_n "checking for 32-bit __atomic_load_n()... " >&6; }
-if ${ethr_cv_32bit___atomic_load_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_load_n()" >&5
+printf %s "checking for 32-bit __atomic_load_n()... " >&6; }
+if test ${ethr_cv_32bit___atomic_load_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_load_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_load_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_load_n" >&5
-$as_echo "$ethr_cv_32bit___atomic_load_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_load_n()" >&5
-$as_echo_n "checking for 64-bit __atomic_load_n()... " >&6; }
-if ${ethr_cv_64bit___atomic_load_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_load_n" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_load_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_load_n()" >&5
+printf %s "checking for 64-bit __atomic_load_n()... " >&6; }
+if test ${ethr_cv_64bit___atomic_load_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_load_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_load_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_load_n" >&5
-$as_echo "$ethr_cv_64bit___atomic_load_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_load_n()" >&5
-$as_echo_n "checking for 128-bit __atomic_load_n()... " >&6; }
-if ${ethr_cv_128bit___atomic_load_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_load_n" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_load_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_load_n()" >&5
+printf %s "checking for 128-bit __atomic_load_n()... " >&6; }
+if test ${ethr_cv_128bit___atomic_load_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_load_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_load_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_load_n" >&5
-$as_echo "$ethr_cv_128bit___atomic_load_n" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_load_n" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_load_n" >&6; }
case $ethr_cv_128bit___atomic_load_n-$ethr_cv_64bit___atomic_load_n-$ethr_cv_32bit___atomic_load_n in
no-no-no)
@@ -11588,9 +13211,7 @@ $as_echo "$ethr_cv_128bit___atomic_load_n" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_load_n $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_load_n $have_atomic_ops" >>confdefs.h
@@ -11629,87 +13250,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_add_fetch()" >&5
-$as_echo_n "checking for 32-bit __atomic_add_fetch()... " >&6; }
-if ${ethr_cv_32bit___atomic_add_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_add_fetch()" >&5
+printf %s "checking for 32-bit __atomic_add_fetch()... " >&6; }
+if test ${ethr_cv_32bit___atomic_add_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_add_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_add_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_add_fetch" >&5
-$as_echo "$ethr_cv_32bit___atomic_add_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_add_fetch()" >&5
-$as_echo_n "checking for 64-bit __atomic_add_fetch()... " >&6; }
-if ${ethr_cv_64bit___atomic_add_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_add_fetch" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_add_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_add_fetch()" >&5
+printf %s "checking for 64-bit __atomic_add_fetch()... " >&6; }
+if test ${ethr_cv_64bit___atomic_add_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_add_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_add_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_add_fetch" >&5
-$as_echo "$ethr_cv_64bit___atomic_add_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_add_fetch()" >&5
-$as_echo_n "checking for 128-bit __atomic_add_fetch()... " >&6; }
-if ${ethr_cv_128bit___atomic_add_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_add_fetch" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_add_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_add_fetch()" >&5
+printf %s "checking for 128-bit __atomic_add_fetch()... " >&6; }
+if test ${ethr_cv_128bit___atomic_add_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_add_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_add_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_add_fetch" >&5
-$as_echo "$ethr_cv_128bit___atomic_add_fetch" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_add_fetch" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_add_fetch" >&6; }
case $ethr_cv_128bit___atomic_add_fetch-$ethr_cv_64bit___atomic_add_fetch-$ethr_cv_32bit___atomic_add_fetch in
no-no-no)
@@ -11730,9 +13357,7 @@ $as_echo "$ethr_cv_128bit___atomic_add_fetch" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_add_fetch $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_add_fetch $have_atomic_ops" >>confdefs.h
@@ -11771,87 +13396,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_and()" >&5
-$as_echo_n "checking for 32-bit __atomic_fetch_and()... " >&6; }
-if ${ethr_cv_32bit___atomic_fetch_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_and()" >&5
+printf %s "checking for 32-bit __atomic_fetch_and()... " >&6; }
+if test ${ethr_cv_32bit___atomic_fetch_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_fetch_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_fetch_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_and" >&5
-$as_echo "$ethr_cv_32bit___atomic_fetch_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_and()" >&5
-$as_echo_n "checking for 64-bit __atomic_fetch_and()... " >&6; }
-if ${ethr_cv_64bit___atomic_fetch_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_and" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_fetch_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_and()" >&5
+printf %s "checking for 64-bit __atomic_fetch_and()... " >&6; }
+if test ${ethr_cv_64bit___atomic_fetch_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_fetch_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_fetch_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_and" >&5
-$as_echo "$ethr_cv_64bit___atomic_fetch_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_and()" >&5
-$as_echo_n "checking for 128-bit __atomic_fetch_and()... " >&6; }
-if ${ethr_cv_128bit___atomic_fetch_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_and" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_fetch_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_and()" >&5
+printf %s "checking for 128-bit __atomic_fetch_and()... " >&6; }
+if test ${ethr_cv_128bit___atomic_fetch_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_fetch_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_fetch_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_and" >&5
-$as_echo "$ethr_cv_128bit___atomic_fetch_and" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_and" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_fetch_and" >&6; }
case $ethr_cv_128bit___atomic_fetch_and-$ethr_cv_64bit___atomic_fetch_and-$ethr_cv_32bit___atomic_fetch_and in
no-no-no)
@@ -11872,9 +13503,7 @@ $as_echo "$ethr_cv_128bit___atomic_fetch_and" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_fetch_and $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_fetch_and $have_atomic_ops" >>confdefs.h
@@ -11913,87 +13542,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_or()" >&5
-$as_echo_n "checking for 32-bit __atomic_fetch_or()... " >&6; }
-if ${ethr_cv_32bit___atomic_fetch_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_or()" >&5
+printf %s "checking for 32-bit __atomic_fetch_or()... " >&6; }
+if test ${ethr_cv_32bit___atomic_fetch_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_fetch_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_fetch_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_or" >&5
-$as_echo "$ethr_cv_32bit___atomic_fetch_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_or()" >&5
-$as_echo_n "checking for 64-bit __atomic_fetch_or()... " >&6; }
-if ${ethr_cv_64bit___atomic_fetch_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_or" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_fetch_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_or()" >&5
+printf %s "checking for 64-bit __atomic_fetch_or()... " >&6; }
+if test ${ethr_cv_64bit___atomic_fetch_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_fetch_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_fetch_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_or" >&5
-$as_echo "$ethr_cv_64bit___atomic_fetch_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_or()" >&5
-$as_echo_n "checking for 128-bit __atomic_fetch_or()... " >&6; }
-if ${ethr_cv_128bit___atomic_fetch_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_or" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_fetch_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_or()" >&5
+printf %s "checking for 128-bit __atomic_fetch_or()... " >&6; }
+if test ${ethr_cv_128bit___atomic_fetch_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_fetch_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_fetch_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_or" >&5
-$as_echo "$ethr_cv_128bit___atomic_fetch_or" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_or" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_fetch_or" >&6; }
case $ethr_cv_128bit___atomic_fetch_or-$ethr_cv_64bit___atomic_fetch_or-$ethr_cv_32bit___atomic_fetch_or in
no-no-no)
@@ -12014,9 +13649,7 @@ $as_echo "$ethr_cv_128bit___atomic_fetch_or" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_fetch_or $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_fetch_or $have_atomic_ops" >>confdefs.h
@@ -12055,87 +13688,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_compare_exchange_n()" >&5
-$as_echo_n "checking for 32-bit __atomic_compare_exchange_n()... " >&6; }
-if ${ethr_cv_32bit___atomic_compare_exchange_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_compare_exchange_n()" >&5
+printf %s "checking for 32-bit __atomic_compare_exchange_n()... " >&6; }
+if test ${ethr_cv_32bit___atomic_compare_exchange_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_compare_exchange_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_compare_exchange_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_compare_exchange_n" >&5
-$as_echo "$ethr_cv_32bit___atomic_compare_exchange_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_compare_exchange_n()" >&5
-$as_echo_n "checking for 64-bit __atomic_compare_exchange_n()... " >&6; }
-if ${ethr_cv_64bit___atomic_compare_exchange_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_compare_exchange_n" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_compare_exchange_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_compare_exchange_n()" >&5
+printf %s "checking for 64-bit __atomic_compare_exchange_n()... " >&6; }
+if test ${ethr_cv_64bit___atomic_compare_exchange_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_compare_exchange_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_compare_exchange_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_compare_exchange_n" >&5
-$as_echo "$ethr_cv_64bit___atomic_compare_exchange_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_compare_exchange_n()" >&5
-$as_echo_n "checking for 128-bit __atomic_compare_exchange_n()... " >&6; }
-if ${ethr_cv_128bit___atomic_compare_exchange_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_compare_exchange_n" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_compare_exchange_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_compare_exchange_n()" >&5
+printf %s "checking for 128-bit __atomic_compare_exchange_n()... " >&6; }
+if test ${ethr_cv_128bit___atomic_compare_exchange_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_compare_exchange_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_compare_exchange_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_compare_exchange_n" >&5
-$as_echo "$ethr_cv_128bit___atomic_compare_exchange_n" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_compare_exchange_n" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_compare_exchange_n" >&6; }
case $ethr_cv_128bit___atomic_compare_exchange_n-$ethr_cv_64bit___atomic_compare_exchange_n-$ethr_cv_32bit___atomic_compare_exchange_n in
no-no-no)
@@ -12156,9 +13795,7 @@ $as_echo "$ethr_cv_128bit___atomic_compare_exchange_n" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_compare_exchange_n $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_compare_exchange_n $have_atomic_ops" >>confdefs.h
@@ -12166,20 +13803,22 @@ _ACEOF
ethr_arm_dbm_sy_instr_val=0
ethr_arm_dbm_st_instr_val=0
ethr_arm_dbm_ld_instr_val=0
- case "$GCC-$host_cpu" in
- yes-arm*|yes-aarch*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb sy' instruction" >&5
-$as_echo_n "checking for ARM 'dmb sy' instruction... " >&6; }
-if ${ethr_cv_arm_dbm_sy_instr+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ case "$GCC-$host_cpu" in #(
+ yes-arm*|yes-aarch*) :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb sy' instruction" >&5
+printf %s "checking for ARM 'dmb sy' instruction... " >&6; }
+if test ${ethr_cv_arm_dbm_sy_instr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_arm_dbm_sy_instr=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__asm__ __volatile__("dmb sy" : : : "memory");
@@ -12188,32 +13827,34 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_arm_dbm_sy_instr=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_sy_instr" >&5
-$as_echo "$ethr_cv_arm_dbm_sy_instr" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_sy_instr" >&5
+printf "%s\n" "$ethr_cv_arm_dbm_sy_instr" >&6; }
if test $ethr_cv_arm_dbm_sy_instr = yes; then
ethr_arm_dbm_sy_instr_val=1
test $ethr_cv_64bit___atomic_compare_exchange_n = yes &&
ethr_have_gcc_native_atomics=yes
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb st' instruction" >&5
-$as_echo_n "checking for ARM 'dmb st' instruction... " >&6; }
-if ${ethr_cv_arm_dbm_st_instr+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb st' instruction" >&5
+printf %s "checking for ARM 'dmb st' instruction... " >&6; }
+if test ${ethr_cv_arm_dbm_st_instr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_arm_dbm_st_instr=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__asm__ __volatile__("dmb st" : : : "memory");
@@ -12222,30 +13863,32 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_arm_dbm_st_instr=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_st_instr" >&5
-$as_echo "$ethr_cv_arm_dbm_st_instr" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_st_instr" >&5
+printf "%s\n" "$ethr_cv_arm_dbm_st_instr" >&6; }
if test $ethr_cv_arm_dbm_st_instr = yes; then
ethr_arm_dbm_st_instr_val=1
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb ld' instruction" >&5
-$as_echo_n "checking for ARM 'dmb ld' instruction... " >&6; }
-if ${ethr_cv_arm_dbm_ld_instr+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb ld' instruction" >&5
+printf %s "checking for ARM 'dmb ld' instruction... " >&6; }
+if test ${ethr_cv_arm_dbm_ld_instr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_arm_dbm_ld_instr=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__asm__ __volatile__("dmb ld" : : : "memory");
@@ -12254,35 +13897,32 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_arm_dbm_ld_instr=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_ld_instr" >&5
-$as_echo "$ethr_cv_arm_dbm_ld_instr" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_ld_instr" >&5
+printf "%s\n" "$ethr_cv_arm_dbm_ld_instr" >&6; }
if test $ethr_cv_arm_dbm_ld_instr = yes; then
ethr_arm_dbm_ld_instr_val=1
- fi;;
- *)
- ;;
- esac
+ fi
+ ;; #(
+ *) :
+ ;;
+esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC_ASM_ARM_DMB_INSTRUCTION $ethr_arm_dbm_sy_instr_val
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE_GCC_ASM_ARM_DMB_INSTRUCTION $ethr_arm_dbm_sy_instr_val" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC_ASM_ARM_DMB_ST_INSTRUCTION $ethr_arm_dbm_st_instr_val
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE_GCC_ASM_ARM_DMB_ST_INSTRUCTION $ethr_arm_dbm_st_instr_val" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC_ASM_ARM_DMB_LD_INSTRUCTION $ethr_arm_dbm_ld_instr_val
-_ACEOF
+
+printf "%s\n" "#define ETHR_HAVE_GCC_ASM_ARM_DMB_LD_INSTRUCTION $ethr_arm_dbm_ld_instr_val" >>confdefs.h
test $ethr_cv_32bit___sync_val_compare_and_swap = yes &&
ethr_have_gcc_native_atomics=yes
@@ -12302,15 +13942,13 @@ _ACEOF
test $ethr_have_gcc_atomic_builtins = 1 && ethr_native_atomic_implementation=gcc_atomic_sync
fi
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC___ATOMIC_BUILTINS $ethr_have_gcc_atomic_builtins
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE_GCC___ATOMIC_BUILTINS $ethr_have_gcc_atomic_builtins" >>confdefs.h
test $ethr_have_gcc_native_atomics = yes && ethr_have_native_atomics=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a usable libatomic_ops implementation" >&5
-$as_echo_n "checking for a usable libatomic_ops implementation... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a usable libatomic_ops implementation" >&5
+printf %s "checking for a usable libatomic_ops implementation... " >&6; }
case "x$with_libatomic_ops" in
xno | xyes | x)
libatomic_ops_include=
@@ -12328,7 +13966,7 @@ $as_echo_n "checking for a usable libatomic_ops implementation... " >&6; }
/* end confdefs.h. */
#include "atomic_ops.h"
int
-main ()
+main (void)
{
volatile AO_t x;
@@ -12366,35 +14004,40 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_have_native_atomics=yes
ethr_native_atomic_implementation=libatomic_ops
ethr_have_libatomic_ops=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_have_libatomic_ops" >&5
-$as_echo "$ethr_have_libatomic_ops" >&6; }
- if test $ethr_have_libatomic_ops = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_have_libatomic_ops" >&5
+printf "%s\n" "$ethr_have_libatomic_ops" >&6; }
+ if test $ethr_have_libatomic_ops = yes
+then :
+
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of AO_t" >&5
-$as_echo_n "checking size of AO_t... " >&6; }
-if ${ac_cv_sizeof_AO_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of AO_t" >&5
+printf %s "checking size of AO_t... " >&6; }
+if test ${ac_cv_sizeof_AO_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (AO_t))" "ac_cv_sizeof_AO_t" "
#include <stdio.h>
#include \"atomic_ops.h\"
-"; then :
+"
+then :
-else
+else $as_nop
if test "$ac_cv_type_AO_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (AO_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -12403,49 +14046,49 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_AO_t" >&5
-$as_echo "$ac_cv_sizeof_AO_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_AO_t" >&5
+printf "%s\n" "$ac_cv_sizeof_AO_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_AO_T $ac_cv_sizeof_AO_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_AO_T $ac_cv_sizeof_AO_t" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_SIZEOF_AO_T $ac_cv_sizeof_AO_t
-_ACEOF
+printf "%s\n" "#define ETHR_SIZEOF_AO_T $ac_cv_sizeof_AO_t" >>confdefs.h
-$as_echo "#define ETHR_HAVE_LIBATOMIC_OPS 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_LIBATOMIC_OPS 1" >>confdefs.h
if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then
-$as_echo "#define ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS 1" >>confdefs.h
+printf "%s\n" "#define ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS 1" >>confdefs.h
fi
ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include"
- elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then
+
+elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"
+then :
+
as_fn_error $? "No usable libatomic_ops implementation found" "$LINENO" 5
- fi
+
+fi
case "$host_cpu" in
sparc | sun4u | sparc64 | sun4v)
case "$with_sparc_memory_order" in
"TSO")
-$as_echo "#define ETHR_SPARC_TSO 1" >>confdefs.h
+printf "%s\n" "#define ETHR_SPARC_TSO 1" >>confdefs.h
;;
"PSO")
-$as_echo "#define ETHR_SPARC_PSO 1" >>confdefs.h
+printf "%s\n" "#define ETHR_SPARC_PSO 1" >>confdefs.h
;;
"RMO"|"")
-$as_echo "#define ETHR_SPARC_RMO 1" >>confdefs.h
+printf "%s\n" "#define ETHR_SPARC_RMO 1" >>confdefs.h
;;
*)
as_fn_error $? "Unsupported Sparc memory order: $with_sparc_memory_order" "$LINENO" 5;;
@@ -12455,7 +14098,7 @@ $as_echo "#define ETHR_SPARC_RMO 1" >>confdefs.h
i86pc | i*86 | x86_64 | amd64)
if test "$enable_x86_out_of_order" = "yes"; then
-$as_echo "#define ETHR_X86_OUT_OF_ORDER 1" >>confdefs.h
+printf "%s\n" "#define ETHR_X86_OUT_OF_ORDER 1" >>confdefs.h
fi
ethr_native_atomic_implementation=ethread
@@ -12470,31 +14113,30 @@ $as_echo "#define ETHR_X86_OUT_OF_ORDER 1" >>confdefs.h
;;
esac
- fi
+
+fi
test ethr_have_native_atomics = "yes" && ethr_have_native_spinlock=yes
LIBS=$saved_libs
CPPFLAGS=$saved_cppflags
- ;;
- *)
- ;;
+ ;; #(
+ *) :
+ ;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether default stack size should be modified" >&5
-$as_echo_n "checking whether default stack size should be modified... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether default stack size should be modified" >&5
+printf %s "checking whether default stack size should be modified... " >&6; }
if test "x$ethr_modified_default_stack_size" != "x"; then
-cat >>confdefs.h <<_ACEOF
-#define ETHR_MODIFIED_DEFAULT_STACK_SIZE $ethr_modified_default_stack_size
-_ACEOF
+printf "%s\n" "#define ETHR_MODIFIED_DEFAULT_STACK_SIZE $ethr_modified_default_stack_size" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; to $ethr_modified_default_stack_size kilo words" >&5
-$as_echo "yes; to $ethr_modified_default_stack_size kilo words" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes; to $ethr_modified_default_stack_size kilo words" >&5
+printf "%s\n" "yes; to $ethr_modified_default_stack_size kilo words" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ETHR_THR_LIB_BASE" != "x"; then
@@ -12507,17 +14149,19 @@ fi
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -12526,37 +14170,35 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_SIZEOF_PTR $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define ETHR_SIZEOF_PTR $ac_cv_sizeof_void_p" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+printf %s "checking size of int... " >&6; }
+if test ${ac_cv_sizeof_int+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (int)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -12565,36 +14207,34 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+printf "%s\n" "$ac_cv_sizeof_int" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
+printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
+printf "%s\n" "#define ETHR_SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -12603,36 +14243,34 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+printf "%s\n" "#define ETHR_SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+printf %s "checking size of long long... " >&6; }
+if test ${ac_cv_sizeof_long_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -12641,36 +14279,34 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+printf "%s\n" "#define ETHR_SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of __int64" >&5
-$as_echo_n "checking size of __int64... " >&6; }
-if ${ac_cv_sizeof___int64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int64))" "ac_cv_sizeof___int64" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of __int64" >&5
+printf %s "checking size of __int64... " >&6; }
+if test ${ac_cv_sizeof___int64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int64))" "ac_cv_sizeof___int64" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type___int64" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (__int64)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -12679,36 +14315,34 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int64" >&5
-$as_echo "$ac_cv_sizeof___int64" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int64" >&5
+printf "%s\n" "$ac_cv_sizeof___int64" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF___INT64 $ac_cv_sizeof___int64
-_ACEOF
+printf "%s\n" "#define SIZEOF___INT64 $ac_cv_sizeof___int64" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_SIZEOF___INT64 $ac_cv_sizeof___int64
-_ACEOF
+printf "%s\n" "#define ETHR_SIZEOF___INT64 $ac_cv_sizeof___int64" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of __int128_t" >&5
-$as_echo_n "checking size of __int128_t... " >&6; }
-if ${ac_cv_sizeof___int128_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int128_t))" "ac_cv_sizeof___int128_t" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of __int128_t" >&5
+printf %s "checking size of __int128_t... " >&6; }
+if test ${ac_cv_sizeof___int128_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int128_t))" "ac_cv_sizeof___int128_t" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type___int128_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (__int128_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -12717,20 +14351,16 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int128_t" >&5
-$as_echo "$ac_cv_sizeof___int128_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int128_t" >&5
+printf "%s\n" "$ac_cv_sizeof___int128_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF___INT128_T $ac_cv_sizeof___int128_t
-_ACEOF
+printf "%s\n" "#define SIZEOF___INT128_T $ac_cv_sizeof___int128_t" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_SIZEOF___INT128_T $ac_cv_sizeof___int128_t
-_ACEOF
+printf "%s\n" "#define ETHR_SIZEOF___INT128_T $ac_cv_sizeof___int128_t" >>confdefs.h
@@ -12740,11 +14370,12 @@ case X$erl_xcomp_bigendian in
*) as_fn_error $? "Bad erl_xcomp_bigendian value: $erl_xcomp_bigendian" "$LINENO" 5;;
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+printf %s "checking whether byte ordering is bigendian... " >&6; }
+if test ${ac_cv_c_bigendian+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_cv_c_bigendian=unknown
# See if we're dealing with a universal compiler.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12755,7 +14386,8 @@ else
typedef int dummy;
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
# Check for potential -arch flags. It is not universal unless
# there are at least two -arch flags with different values.
@@ -12779,7 +14411,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
fi
done
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test $ac_cv_c_bigendian = unknown; then
# See if sys/param.h defines the BYTE_ORDER macro.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12788,7 +14420,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
#include <sys/param.h>
int
-main ()
+main (void)
{
#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
&& defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
@@ -12800,7 +14432,8 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
# It does; now see whether it defined to BIG_ENDIAN or not.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -12808,7 +14441,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
#include <sys/param.h>
int
-main ()
+main (void)
{
#if BYTE_ORDER != BIG_ENDIAN
not big endian
@@ -12818,14 +14451,15 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_c_bigendian=yes
-else
+else $as_nop
ac_cv_c_bigendian=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
if test $ac_cv_c_bigendian = unknown; then
# See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
@@ -12834,7 +14468,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
#include <limits.h>
int
-main ()
+main (void)
{
#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
bogus endian macros
@@ -12844,14 +14478,15 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
# It does; now see whether it defined to _BIG_ENDIAN or not.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <limits.h>
int
-main ()
+main (void)
{
#ifndef _BIG_ENDIAN
not big endian
@@ -12861,31 +14496,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_c_bigendian=yes
-else
+else $as_nop
ac_cv_c_bigendian=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
if test $ac_cv_c_bigendian = unknown; then
# Compile a test program.
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes
+then :
# Try to guess by grepping values from an object file.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-short int ascii_mm[] =
+unsigned short int ascii_mm[] =
{ 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
+ unsigned short int ascii_ii[] =
{ 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
int use_ascii (int i) {
return ascii_mm[i] + ascii_ii[i];
}
- short int ebcdic_ii[] =
+ unsigned short int ebcdic_ii[] =
{ 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
+ unsigned short int ebcdic_mm[] =
{ 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
int use_ebcdic (int i) {
return ebcdic_mm[i] + ebcdic_ii[i];
@@ -12893,14 +14530,15 @@ short int ascii_mm[] =
extern int foo;
int
-main ()
+main (void)
{
return use_ascii (foo) == use_ebcdic (foo);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
ac_cv_c_bigendian=yes
fi
@@ -12913,13 +14551,13 @@ if ac_fn_c_try_compile "$LINENO"; then :
fi
fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
int
-main ()
+main (void)
{
/* Are we little or big endian? From Harbison&Steele. */
@@ -12935,9 +14573,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
ac_cv_c_bigendian=no
-else
+else $as_nop
ac_cv_c_bigendian=yes
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -12946,17 +14585,17 @@ fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+printf "%s\n" "$ac_cv_c_bigendian" >&6; }
case $ac_cv_c_bigendian in #(
yes)
- $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+ printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h
;; #(
no)
;; #(
universal)
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
;; #(
*)
@@ -12967,7 +14606,7 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
if test "$ac_cv_c_bigendian" = "yes"; then
-$as_echo "#define ETHR_BIGENDIAN 1" >>confdefs.h
+printf "%s\n" "#define ETHR_BIGENDIAN 1" >>confdefs.h
fi
@@ -12977,15 +14616,17 @@ case X$erl_xcomp_double_middle_endian in
*) as_fn_error $? "Bad erl_xcomp_double_middle_endian value: $erl_xcomp_double_middle_endian" "$LINENO" 5;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether double word ordering is middle-endian" >&5
-$as_echo_n "checking whether double word ordering is middle-endian... " >&6; }
-if ${ac_cv_c_double_middle_endian+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether double word ordering is middle-endian" >&5
+printf %s "checking whether double word ordering is middle-endian... " >&6; }
+if test ${ac_cv_c_double_middle_endian+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
# It does not; compile a test program.
-if test "$cross_compiling" = yes; then :
+if test "$cross_compiling" = yes
+then :
ac_cv_c_double_middle=unknown
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
@@ -13054,9 +14695,10 @@ main(void)
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
ac_cv_c_double_middle_endian=no
-else
+else $as_nop
ac_cv_c_double_middle_endian=yes
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -13064,28 +14706,29 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_double_middle_endian" >&5
-$as_echo "$ac_cv_c_double_middle_endian" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_double_middle_endian" >&5
+printf "%s\n" "$ac_cv_c_double_middle_endian" >&6; }
case $ac_cv_c_double_middle_endian in
yes)
-$as_echo "#define DOUBLE_MIDDLE_ENDIAN 1" >>confdefs.h
+printf "%s\n" "#define DOUBLE_MIDDLE_ENDIAN 1" >>confdefs.h
;;
no)
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown double endianness
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown double endianness
presetting ac_cv_c_double_middle_endian=no (or yes) will help" >&5
-$as_echo "$as_me: WARNING: unknown double endianness
+printf "%s\n" "$as_me: WARNING: unknown double endianness
presetting ac_cv_c_double_middle_endian=no (or yes) will help" >&2;} ;;
esac
ETHR_X86_SSE2_ASM=no
-case "$GCC-$ac_cv_sizeof_void_p-$host_cpu" in
- yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc sse2 asm support" >&5
-$as_echo_n "checking for gcc sse2 asm support... " >&6; }
+case "$GCC-$ac_cv_sizeof_void_p-$host_cpu" in #(
+ yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64) :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc sse2 asm support" >&5
+printf %s "checking for gcc sse2 asm support... " >&6; }
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -msse2"
gcc_sse2_asm=no
@@ -13093,7 +14736,7 @@ $as_echo_n "checking for gcc sse2 asm support... " >&6; }
/* end confdefs.h. */
int
-main ()
+main (void)
{
long long x, *y;
@@ -13103,26 +14746,27 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
gcc_sse2_asm=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS="$save_CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_sse2_asm" >&5
-$as_echo "$gcc_sse2_asm" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcc_sse2_asm" >&5
+printf "%s\n" "$gcc_sse2_asm" >&6; }
if test "$gcc_sse2_asm" = "yes"; then
-$as_echo "#define ETHR_GCC_HAVE_SSE2_ASM_SUPPORT 1" >>confdefs.h
+printf "%s\n" "#define ETHR_GCC_HAVE_SSE2_ASM_SUPPORT 1" >>confdefs.h
ETHR_X86_SSE2_ASM=yes
fi
- ;;
- *)
- ;;
+ ;; #(
+ *) :
+ ;;
esac
-case "$GCC-$host_cpu" in
- yes-i86pc | yes-i*86 | yes-x86_64 | yes-amd64)
+case "$GCC-$host_cpu" in #(
+ yes-i86pc | yes-i*86 | yes-x86_64 | yes-amd64) :
if test $ac_cv_sizeof_void_p = 4; then
dw_cmpxchg="cmpxchg8b"
@@ -13149,15 +14793,15 @@ case "$GCC-$host_cpu" in
*) pic_text="";;
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc $pic_text$dw_cmpxchg plain asm support" >&5
-$as_echo_n "checking for gcc $pic_text$dw_cmpxchg plain asm support... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc $pic_text$dw_cmpxchg plain asm support" >&5
+printf %s "checking for gcc $pic_text$dw_cmpxchg plain asm support... " >&6; }
plain_cmpxchg=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
char xchgd;
@@ -13177,13 +14821,14 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
plain_cmpxchg=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plain_cmpxchg" >&5
-$as_echo "$plain_cmpxchg" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $plain_cmpxchg" >&5
+printf "%s\n" "$plain_cmpxchg" >&6; }
if test $pic_cmpxchg = yes; then
gcc_pic_dw_cmpxchg_asm=$plain_cmpxchg
@@ -13204,7 +14849,7 @@ $as_echo "$plain_cmpxchg" >&6; }
/* end confdefs.h. */
int
-main ()
+main (void)
{
#if !defined(__PIC__) || !__PIC__
@@ -13215,13 +14860,14 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
pic_cmpxchg=yes
gcc_cflags_pic=yes
-else
+else $as_nop
pic_cmpxchg=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test $pic_cmpxchg = yes; then
gcc_pic_dw_cmpxchg_asm=$gcc_dw_cmpxchg_asm
@@ -13233,10 +14879,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
done
- if test $gcc_pic_dw_cmpxchg_asm = no && test $ac_cv_sizeof_void_p = 4; then
+ if test $gcc_pic_dw_cmpxchg_asm = no && test $ac_cv_sizeof_void_p = 4
+then :
+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc pic cmpxchg8b asm support with EBX workaround" >&5
-$as_echo_n "checking for gcc pic cmpxchg8b asm support with EBX workaround... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc pic cmpxchg8b asm support with EBX workaround" >&5
+printf %s "checking for gcc pic cmpxchg8b asm support with EBX workaround... " >&6; }
# Check if we can work around it by managing the ebx
# register explicitly in the asm...
@@ -13245,7 +14893,7 @@ $as_echo_n "checking for gcc pic cmpxchg8b asm support with EBX workaround... "
/* end confdefs.h. */
int
-main ()
+main (void)
{
char xchgd;
@@ -13264,19 +14912,22 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
gcc_pic_dw_cmpxchg_asm=yes
gcc_cmpxchg8b_pic_no_clobber_ebx=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcc_pic_dw_cmpxchg_asm" >&5
+printf "%s\n" "$gcc_pic_dw_cmpxchg_asm" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_pic_dw_cmpxchg_asm" >&5
-$as_echo "$gcc_pic_dw_cmpxchg_asm" >&6; }
+ if test $gcc_pic_dw_cmpxchg_asm = no
+then :
- if test $gcc_pic_dw_cmpxchg_asm = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc pic cmpxchg8b asm support with EBX and register shortage workarounds" >&5
-$as_echo_n "checking for gcc pic cmpxchg8b asm support with EBX and register shortage workarounds... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc pic cmpxchg8b asm support with EBX and register shortage workarounds" >&5
+printf %s "checking for gcc pic cmpxchg8b asm support with EBX and register shortage workarounds... " >&6; }
# If no optimization is enabled we sometimes get a
# register shortage. Check if we can work around
# this...
@@ -13285,7 +14936,7 @@ $as_echo_n "checking for gcc pic cmpxchg8b asm support with EBX and register sho
/* end confdefs.h. */
int
-main ()
+main (void)
{
char xchgd;
@@ -13306,46 +14957,49 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
gcc_pic_dw_cmpxchg_asm=yes
gcc_cmpxchg8b_pic_no_clobber_ebx=yes
gcc_cmpxchg8b_pic_no_clobber_ebx_register_shortage=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_pic_dw_cmpxchg_asm" >&5
-$as_echo "$gcc_pic_dw_cmpxchg_asm" >&6; }
- fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcc_pic_dw_cmpxchg_asm" >&5
+printf "%s\n" "$gcc_pic_dw_cmpxchg_asm" >&6; }
+
+fi
if test $gcc_cflags_pic = yes; then
gcc_dw_cmpxchg_asm=$gcc_pic_dw_cmpxchg_asm
fi
- fi
+fi
CFLAGS="$save_CFLAGS"
if test "$gcc_cmpxchg8b_pic_no_clobber_ebx" = "yes"; then
-$as_echo "#define ETHR_CMPXCHG8B_PIC_NO_CLOBBER_EBX 1" >>confdefs.h
+printf "%s\n" "#define ETHR_CMPXCHG8B_PIC_NO_CLOBBER_EBX 1" >>confdefs.h
fi
if test "$gcc_cmpxchg8b_pic_no_clobber_ebx_register_shortage" = "yes"; then
-$as_echo "#define ETHR_CMPXCHG8B_REGISTER_SHORTAGE 1" >>confdefs.h
+printf "%s\n" "#define ETHR_CMPXCHG8B_REGISTER_SHORTAGE 1" >>confdefs.h
fi
if test "$gcc_dw_cmpxchg_asm" = "yes"; then
-$as_echo "#define ETHR_GCC_HAVE_DW_CMPXCHG_ASM_SUPPORT 1" >>confdefs.h
+printf "%s\n" "#define ETHR_GCC_HAVE_DW_CMPXCHG_ASM_SUPPORT 1" >>confdefs.h
- fi;;
- *)
- ;;
+ fi
+ ;; #(
+ *) :
+ ;;
esac
-$as_echo "#define ETHR_HAVE_ETHREAD_DEFINES 1" >>confdefs.h
+printf "%s\n" "#define ETHR_HAVE_ETHREAD_DEFINES 1" >>confdefs.h
@@ -13381,7 +15035,7 @@ EOF
test "X$smp_require_native_atomics" = "Xyes" &&
-$as_echo "#define ETHR_SMP_REQUIRE_NATIVE_IMPLS 1" >>confdefs.h
+printf "%s\n" "#define ETHR_SMP_REQUIRE_NATIVE_IMPLS 1" >>confdefs.h
case "$ethr_have_native_atomics-$smp_require_native_atomics-$ethr_have_native_spinlock" in
@@ -13445,35 +15099,32 @@ EOF
esac
-for ac_func in posix_fadvise closefrom
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "posix_fadvise" "ac_cv_func_posix_fadvise"
+if test "x$ac_cv_func_posix_fadvise" = xyes
+then :
+ printf "%s\n" "#define HAVE_POSIX_FADVISE 1" >>confdefs.h
fi
-done
-
-for ac_header in linux/falloc.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "linux/falloc.h" "ac_cv_header_linux_falloc_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_falloc_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LINUX_FALLOC_H 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "closefrom" "ac_cv_func_closefrom"
+if test "x$ac_cv_func_closefrom" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOSEFROM 1" >>confdefs.h
fi
-done
+ac_fn_c_check_header_compile "$LINENO" "linux/falloc.h" "ac_cv_header_linux_falloc_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_falloc_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LINUX_FALLOC_H 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fallocate() works" >&5
-$as_echo_n "checking whether fallocate() works... " >&6; }
-if ${i_cv_fallocate_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fallocate() works" >&5
+printf %s "checking whether fallocate() works... " >&6; }
+if test ${i_cv_fallocate_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -13486,7 +15137,7 @@ else
#include <linux/falloc.h>
int
-main ()
+main (void)
{
int fd = creat("conftest.temp", 0600);
@@ -13496,34 +15147,37 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
i_cv_fallocate_works=yes
-else
+else $as_nop
i_cv_fallocate_works=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $i_cv_fallocate_works" >&5
-$as_echo "$i_cv_fallocate_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $i_cv_fallocate_works" >&5
+printf "%s\n" "$i_cv_fallocate_works" >&6; }
if test $i_cv_fallocate_works = yes; then
-$as_echo "#define HAVE_FALLOCATE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_FALLOCATE 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_fallocate() works" >&5
-$as_echo_n "checking whether posix_fallocate() works... " >&6; }
-if ${i_cv_posix_fallocate_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether posix_fallocate() works" >&5
+printf %s "checking whether posix_fallocate() works... " >&6; }
+if test ${i_cv_posix_fallocate_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes
+then :
i_cv_posix_fallocate_works=no
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -13550,11 +15204,12 @@ else
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
i_cv_posix_fallocate_works=yes
-else
+else $as_nop
i_cv_posix_fallocate_works=no
@@ -13565,11 +15220,11 @@ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $i_cv_posix_fallocate_works" >&5
-$as_echo "$i_cv_posix_fallocate_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $i_cv_posix_fallocate_works" >&5
+printf "%s\n" "$i_cv_posix_fallocate_works" >&6; }
if test $i_cv_posix_fallocate_works = yes; then
-$as_echo "#define HAVE_POSIX_FALLOCATE /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_POSIX_FALLOCATE /**/" >>confdefs.h
fi
@@ -13592,35 +15247,35 @@ EMU_THR_X_LIBS=$ETHR_X_LIBS
EMU_THR_LIBS=$ETHR_LIBS
EMU_THR_DEFS=$ETHR_DEFS
ENABLE_ALLOC_TYPE_VARS="$ENABLE_ALLOC_TYPE_VARS threads"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lock checking should be enabled" >&5
-$as_echo_n "checking whether lock checking should be enabled... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lock_check" >&5
-$as_echo "$enable_lock_check" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lock checking should be enabled" >&5
+printf %s "checking whether lock checking should be enabled... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lock_check" >&5
+printf "%s\n" "$enable_lock_check" >&6; }
if test "x$enable_lock_check" != "xno"; then
EMU_THR_DEFS="$EMU_THR_DEFS -DERTS_ENABLE_LOCK_CHECK"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lock counters should be enabled" >&5
-$as_echo_n "checking whether lock counters should be enabled... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lock_count" >&5
-$as_echo "$enable_lock_count" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lock counters should be enabled" >&5
+printf %s "checking whether lock counters should be enabled... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lock_count" >&5
+printf "%s\n" "$enable_lock_count" >&6; }
if test "x$enable_lock_count" != "xno"; then
TYPES="$TYPES lcnt"
fi
case $host_os in
linux*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dlopen() needs to be called before first call to dlerror()" >&5
-$as_echo_n "checking whether dlopen() needs to be called before first call to dlerror()... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dlopen() needs to be called before first call to dlerror()" >&5
+printf %s "checking whether dlopen() needs to be called before first call to dlerror()... " >&6; }
if test "x$ETHR_THR_LIB_BASE_TYPE" != "xposix_nptl"; then
-$as_echo "#define ERTS_NEED_DLOPEN_BEFORE_DLERROR 1" >>confdefs.h
+printf "%s\n" "#define ERTS_NEED_DLOPEN_BEFORE_DLERROR 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
;;
*)
@@ -13659,11 +15314,12 @@ fi
ERTS_INTERNAL_X_LIBS=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat" >&5
-$as_echo_n "checking for kstat_open in -lkstat... " >&6; }
-if ${ac_cv_lib_kstat_kstat_open+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat" >&5
+printf %s "checking for kstat_open in -lkstat... " >&6; }
+if test ${ac_cv_lib_kstat_kstat_open+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lkstat $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13672,32 +15328,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char kstat_open ();
int
-main ()
+main (void)
{
return kstat_open ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_kstat_kstat_open=yes
-else
+else $as_nop
ac_cv_lib_kstat_kstat_open=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open" >&5
-$as_echo "$ac_cv_lib_kstat_kstat_open" >&6; }
-if test "x$ac_cv_lib_kstat_kstat_open" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open" >&5
+printf "%s\n" "$ac_cv_lib_kstat_kstat_open" >&6; }
+if test "x$ac_cv_lib_kstat_kstat_open" = xyes
+then :
-$as_echo "#define HAVE_KSTAT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_KSTAT 1" >>confdefs.h
ERTS_INTERNAL_X_LIBS="$ERTS_INTERNAL_X_LIBS -lkstat"
fi
@@ -13716,18 +15371,20 @@ THR_DEFS=$ETHR_DEFS
TERMCAP_LIB=
-if test "x$with_termcap" != "xno" &&
- test "X$host" != "Xwin32"; then
+if test "x$with_termcap" != "xno" && test "X$host" != "Xwin32"
+then :
+
# try these libs
termcap_libs="tinfo ncurses curses termcap termlib"
for termcap_lib in $termcap_libs; do
- as_ac_Lib=`$as_echo "ac_cv_lib_$termcap_lib''_tgetent" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$termcap_lib" >&5
-$as_echo_n "checking for tgetent in -l$termcap_lib... " >&6; }
-if eval \${$as_ac_Lib+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ as_ac_Lib=`printf "%s\n" "ac_cv_lib_$termcap_lib""_tgetent" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$termcap_lib" >&5
+printf %s "checking for tgetent in -l$termcap_lib... " >&6; }
+if eval test \${$as_ac_Lib+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$termcap_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13736,31 +15393,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char tgetent ();
int
-main ()
+main (void)
{
return tgetent ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$as_ac_Lib=yes"
-else
+else $as_nop
eval "$as_ac_Lib=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"
+then :
TERMCAP_LIB="-l$termcap_lib"
fi
@@ -13772,6 +15428,7 @@ fi
if test "x$TERMCAP_LIB" = "x"; then
as_fn_error $? "No curses library functions found" "$LINENO" 5
fi
+
fi
@@ -13779,63 +15436,72 @@ fi
if test "x$TERMCAP_LIB" != "x"; then
-$as_echo "#define HAVE_TERMCAP 1" >>confdefs.h
+printf "%s\n" "#define HAVE_TERMCAP 1" >>confdefs.h
fi
-if test "X$host" != "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcwidth" >&5
-$as_echo_n "checking for wcwidth... " >&6; }
+if test "X$host" != "Xwin32"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wcwidth" >&5
+printf %s "checking for wcwidth... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <wchar.h>
int
-main ()
+main (void)
{
wcwidth(0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_wcwidth=yes
-else
+else $as_nop
have_wcwidth=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $have_wcwidth = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
-$as_echo "#define HAVE_WCWIDTH 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WCWIDTH 1" >>confdefs.h
fi
+
fi
# Check whether --enable-builtin-zlib was given.
-if test "${enable_builtin_zlib+set}" = set; then :
+if test ${enable_builtin_zlib+y}
+then :
enableval=$enable_builtin_zlib; case "$enableval" in
no) enable_builtin_zlib=no ;;
*) enable_builtin_zlib=yes ;;
esac
-else
+else $as_nop
enable_builtin_zlib=no
fi
Z_LIB=
-if test "x$enable_builtin_zlib" = "xyes"; then
+if test "x$enable_builtin_zlib" = "xyes"
+then :
-$as_echo "#define HAVE_ZLIB_INFLATEGETDICTIONARY 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using our own built-in zlib source" >&5
-$as_echo "$as_me: Using our own built-in zlib source" >&6;}
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlib 1.2.5 or higher" >&5
-$as_echo_n "checking for zlib 1.2.5 or higher... " >&6; }
+printf "%s\n" "#define HAVE_ZLIB_INFLATEGETDICTIONARY 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using our own built-in zlib source" >&5
+printf "%s\n" "$as_me: Using our own built-in zlib source" >&6;}
+
+else $as_nop
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zlib 1.2.5 or higher" >&5
+printf %s "checking for zlib 1.2.5 or higher... " >&6; }
zlib_save_LIBS=$LIBS
LIBS="-lz $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13844,7 +15510,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#include "zlib.h"
int
-main ()
+main (void)
{
#if ZLIB_VERNUM >= 0x1250
@@ -13860,30 +15526,34 @@ error
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
Z_LIB="-lz"
-$as_echo "#define HAVE_LIBZ 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
-else
+else $as_nop
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-if test "$Z_LIB" != ""; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflateGetDictionary" >&5
-$as_echo_n "checking for library containing inflateGetDictionary... " >&6; }
-if ${ac_cv_search_inflateGetDictionary+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "$Z_LIB" != ""
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing inflateGetDictionary" >&5
+printf %s "checking for library containing inflateGetDictionary... " >&6; }
+if test ${ac_cv_search_inflateGetDictionary+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -13891,63 +15561,69 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char inflateGetDictionary ();
int
-main ()
+main (void)
{
return inflateGetDictionary ();
;
return 0;
}
_ACEOF
-for ac_lib in '' z; do
+for ac_lib in '' z
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_inflateGetDictionary=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_inflateGetDictionary+:} false; then :
+ if test ${ac_cv_search_inflateGetDictionary+y}
+then :
break
fi
done
-if ${ac_cv_search_inflateGetDictionary+:} false; then :
+if test ${ac_cv_search_inflateGetDictionary+y}
+then :
-else
+else $as_nop
ac_cv_search_inflateGetDictionary=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflateGetDictionary" >&5
-$as_echo "$ac_cv_search_inflateGetDictionary" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflateGetDictionary" >&5
+printf "%s\n" "$ac_cv_search_inflateGetDictionary" >&6; }
ac_res=$ac_cv_search_inflateGetDictionary
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-$as_echo "#define HAVE_ZLIB_INFLATEGETDICTIONARY 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ZLIB_INFLATEGETDICTIONARY 1" >>confdefs.h
fi
+
fi
LIBS=$zlib_save_LIBS
+
fi
+
# Check whether --enable-esock was given.
-if test "${enable_esock+set}" = set; then :
+if test ${enable_esock+y}
+then :
enableval=$enable_esock;
fi
@@ -13962,21 +15638,41 @@ else
fi
fi
-if test "x$USE_ESOCK" = "xyes"; then
- if test "x$USE_ESOCK" = "xyes"; then
- for ac_func in localtime_r strftime getprotoent setprotoent endprotoent
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+if test "x$USE_ESOCK" = "xyes" && test "x$USE_ESOCK" = "xyes"
+then :
+
+ ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r"
+if test "x$ac_cv_func_localtime_r" = xyes
+then :
+ printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
+if test "x$ac_cv_func_strftime" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getprotoent" "ac_cv_func_getprotoent"
+if test "x$ac_cv_func_getprotoent" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETPROTOENT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setprotoent" "ac_cv_func_setprotoent"
+if test "x$ac_cv_func_setprotoent" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETPROTOENT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "endprotoent" "ac_cv_func_endprotoent"
+if test "x$ac_cv_func_endprotoent" = xyes
+then :
+ printf "%s\n" "#define HAVE_ENDPROTOENT 1" >>confdefs.h
+
+fi
+
- fi
fi
@@ -13984,14 +15680,15 @@ fi
# Check whether --enable-esock_use_rcvsndtimeo was given.
-if test "${enable_esock_use_rcvsndtimeo+set}" = set; then :
+if test ${enable_esock_use_rcvsndtimeo+y}
+then :
enableval=$enable_esock_use_rcvsndtimeo;
fi
if test "x$enable_esock_rcvsndtimeo" = "xyes"; then
-$as_echo "#define ESOCK_USE_RCVSNDTIMEO 1" >>confdefs.h
+printf "%s\n" "#define ESOCK_USE_RCVSNDTIMEO 1" >>confdefs.h
fi
@@ -13999,9 +15696,10 @@ fi
# Check whether --with-esock-counter-size was given.
-if test "${with_esock_counter_size+set}" = set; then :
+if test ${with_esock_counter_size+y}
+then :
withval=$with_esock_counter_size;
-else
+else $as_nop
with_esock_counter_size=64
fi
@@ -14009,73 +15707,78 @@ fi
case "$with_esock_counter_size" in
16)
-$as_echo "#define ESOCK_COUNTER_SIZE 16" >>confdefs.h
+printf "%s\n" "#define ESOCK_COUNTER_SIZE 16" >>confdefs.h
;;
24)
-$as_echo "#define ESOCK_COUNTER_SIZE 24" >>confdefs.h
+printf "%s\n" "#define ESOCK_COUNTER_SIZE 24" >>confdefs.h
;;
32)
-$as_echo "#define ESOCK_COUNTER_SIZE 32" >>confdefs.h
+printf "%s\n" "#define ESOCK_COUNTER_SIZE 32" >>confdefs.h
;;
48)
-$as_echo "#define ESOCK_COUNTER_SIZE 48" >>confdefs.h
+printf "%s\n" "#define ESOCK_COUNTER_SIZE 48" >>confdefs.h
;;
64)
-$as_echo "#define ESOCK_COUNTER_SIZE 64" >>confdefs.h
+printf "%s\n" "#define ESOCK_COUNTER_SIZE 64" >>confdefs.h
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid esock counter size ($with_esock_counter_size), using default (64)" >&5
-$as_echo "$as_me: WARNING: Invalid esock counter size ($with_esock_counter_size), using default (64)" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Invalid esock counter size ($with_esock_counter_size), using default (64)" >&5
+printf "%s\n" "$as_me: WARNING: Invalid esock counter size ($with_esock_counter_size), using default (64)" >&2;}
-$as_echo "#define ESOCK_COUNTER_SIZE 64" >>confdefs.h
+printf "%s\n" "#define ESOCK_COUNTER_SIZE 64" >>confdefs.h
;;
esac
ac_fn_c_check_func "$LINENO" "if_nametoindex" "ac_cv_func_if_nametoindex"
-if test "x$ac_cv_func_if_nametoindex" = xyes; then :
+if test "x$ac_cv_func_if_nametoindex" = xyes
+then :
-$as_echo "#define HAVE_IF_NAMETOINDEX 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IF_NAMETOINDEX 1" >>confdefs.h
fi
ac_fn_c_check_func "$LINENO" "if_indextoname" "ac_cv_func_if_indextoname"
-if test "x$ac_cv_func_if_indextoname" = xyes; then :
+if test "x$ac_cv_func_if_indextoname" = xyes
+then :
-$as_echo "#define HAVE_IF_INDEXTONAME 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IF_INDEXTONAME 1" >>confdefs.h
fi
ac_fn_c_check_func "$LINENO" "if_nameindex" "ac_cv_func_if_nameindex"
-if test "x$ac_cv_func_if_nameindex" = xyes; then :
+if test "x$ac_cv_func_if_nameindex" = xyes
+then :
-$as_echo "#define HAVE_IF_NAMEINDEX 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IF_NAMEINDEX 1" >>confdefs.h
fi
ac_fn_c_check_func "$LINENO" "if_freenameindex" "ac_cv_func_if_freenameindex"
-if test "x$ac_cv_func_if_freenameindex" = xyes; then :
+if test "x$ac_cv_func_if_freenameindex" = xyes
+then :
-$as_echo "#define HAVE_IF_FREENAMEINDEX 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IF_FREENAMEINDEX 1" >>confdefs.h
fi
ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
-if test "x$ac_cv_func_gethostname" = xyes; then :
+if test "x$ac_cv_func_gethostname" = xyes
+then :
-$as_echo "#define HAVE_GETHOSTNAME 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GETHOSTNAME 1" >>confdefs.h
fi
@@ -14084,20 +15787,22 @@ fi
# Check whether --enable-esock-socket-registry was given.
-if test "${enable_esock_socket_registry+set}" = set; then :
+if test ${enable_esock_socket_registry+y}
+then :
enableval=$enable_esock_socket_registry;
fi
-if test "x$enable_esock_socket_registry" = "xno"; then :
+if test "x$enable_esock_socket_registry" = "xno"
+then :
-$as_echo "#define ESOCK_USE_SOCKET_REGISTRY 0" >>confdefs.h
+printf "%s\n" "#define ESOCK_USE_SOCKET_REGISTRY 0" >>confdefs.h
-else
+else $as_nop
-$as_echo "#define ESOCK_USE_SOCKET_REGISTRY 1" >>confdefs.h
+printf "%s\n" "#define ESOCK_USE_SOCKET_REGISTRY 1" >>confdefs.h
fi
@@ -14125,18 +15830,22 @@ tk_oldLibs=$LIBS
erl_checkBoth=0
SOCKET_LIBS=""
ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
+if test "x$ac_cv_func_connect" = xyes
+then :
erl_checkSocket=0
-else
+else $as_nop
erl_checkSocket=1
fi
-if test "$erl_checkSocket" = 1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lsocket" >&5
-$as_echo_n "checking for main in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "$erl_checkSocket" = 1
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lsocket" >&5
+printf %s "checking for main in -lsocket... " >&6; }
+if test ${ac_cv_lib_socket_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsocket $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14144,51 +15853,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_socket_main=yes
-else
+else $as_nop
ac_cv_lib_socket_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_main" >&5
-$as_echo "$ac_cv_lib_socket_main" >&6; }
-if test "x$ac_cv_lib_socket_main" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_main" >&5
+printf "%s\n" "$ac_cv_lib_socket_main" >&6; }
+if test "x$ac_cv_lib_socket_main" = xyes
+then :
SOCKET_LIBS="-lsocket"
-else
+else $as_nop
erl_checkBoth=1
fi
+
fi
-if test "$erl_checkBoth" = 1; then
+if test "$erl_checkBoth" = 1
+then :
+
LIBS="$LIBS -lsocket -lnsl"
ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept"
-if test "x$ac_cv_func_accept" = xyes; then :
+if test "x$ac_cv_func_accept" = xyes
+then :
SOCKET_LIBS="-lsocket -lnsl"
fi
+
fi
LIBS="$tk_oldLibs $SOCKET_LIBS"
ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5
-$as_echo_n "checking for main in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "x$ac_cv_func_gethostbyname" = xyes
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5
+printf %s "checking for main in -lnsl... " >&6; }
+if test ${ac_cv_lib_nsl_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lnsl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14196,32 +15914,35 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_nsl_main=yes
-else
+else $as_nop
ac_cv_lib_nsl_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5
-$as_echo "$ac_cv_lib_nsl_main" >&6; }
-if test "x$ac_cv_lib_nsl_main" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5
+printf "%s\n" "$ac_cv_lib_nsl_main" >&6; }
+if test "x$ac_cv_lib_nsl_main" = xyes
+then :
SOCKET_LIBS="$SOCKET_LIBS -lnsl"
fi
fi
ac_fn_c_check_func "$LINENO" "gethostbyname_r" "ac_cv_func_gethostbyname_r"
-if test "x$ac_cv_func_gethostbyname_r" = xyes; then :
+if test "x$ac_cv_func_gethostbyname_r" = xyes
+then :
have_gethostbyname_r=yes
fi
@@ -14231,36 +15952,43 @@ LIBS="$tk_oldLibs $SOCKET_LIBS"
-if test "$have_gethostbyname_r" = yes; then
+
+if test "$have_gethostbyname_r" = yes
+then :
+
# OK, so we have gethostbyname_r() - but do we know how to call it...?
# (if not, HAVE_GETHOSTBYNAME_R will not be defined at all)
- case $host_os in
- solaris2*)
+ case $host_os in #(
+ solaris2*) :
-$as_echo "#define HAVE_GETHOSTBYNAME_R GHBN_R_SOLARIS" >>confdefs.h
- ;;
- aix*|os400*)
+printf "%s\n" "#define HAVE_GETHOSTBYNAME_R GHBN_R_SOLARIS" >>confdefs.h
+
+ ;; #(
+ aix*|os400*) :
+
# AIX version also needs "struct hostent_data" defn
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <netdb.h>
int
-main ()
+main (void)
{
struct hostent_data hd;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-$as_echo "#define HAVE_GETHOSTBYNAME_R GHBN_R_AIX" >>confdefs.h
+printf "%s\n" "#define HAVE_GETHOSTBYNAME_R GHBN_R_AIX" >>confdefs.h
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ;;
- *)
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;; #(
+ *) :
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -14271,19 +15999,21 @@ yes
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "^yes$" >/dev/null 2>&1; then :
+ $EGREP "^yes$" >/dev/null 2>&1
+then :
-$as_echo "#define HAVE_GETHOSTBYNAME_R GHBN_R_GLIBC" >>confdefs.h
+printf "%s\n" "#define HAVE_GETHOSTBYNAME_R GHBN_R_GLIBC" >>confdefs.h
fi
-rm -f conftest*
+rm -rf conftest*
+
+ ;;
+esac
- ;;
- esac
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working posix_openpt implementation" >&5
-$as_echo_n "checking for working posix_openpt implementation... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working posix_openpt implementation" >&5
+printf %s "checking for working posix_openpt implementation... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -14292,7 +16022,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#include <fcntl.h>
int
-main ()
+main (void)
{
int mfd = posix_openpt(O_RDWR);
@@ -14305,128 +16035,134 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
working_posix_openpt=yes
-else
+else $as_nop
working_posix_openpt=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test "X$working_posix_openpt" = "Xyes"; then
-$as_echo "#define HAVE_WORKING_POSIX_OPENPT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WORKING_POSIX_OPENPT 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if netdb.h requires netinet/in.h to be previously included" >&5
-$as_echo_n "checking if netdb.h requires netinet/in.h to be previously included... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if netdb.h requires netinet/in.h to be previously included" >&5
+printf %s "checking if netdb.h requires netinet/in.h to be previously included... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <netdb.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "sockaddr_in" >/dev/null 2>&1; then :
+ $EGREP "sockaddr_in" >/dev/null 2>&1
+then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <netinet/in.h>
#include <netdb.h>
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
need_in_h=yes
-else
+else $as_nop
need_in_h=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
need_in_h=no
fi
-rm -f conftest*
+rm -rf conftest*
if test $need_in_h = yes; then
-$as_echo "#define NETDB_H_NEEDS_IN_H 1" >>confdefs.h
+printf "%s\n" "#define NETDB_H_NEEDS_IN_H 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5
-$as_echo_n "checking for socklen_t... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5
+printf %s "checking for socklen_t... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/socket.h>
int
-main ()
+main (void)
{
socklen_t test;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
have_socklen_t=yes
-else
+else $as_nop
have_socklen_t=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext,
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext,
if test $have_socklen_t = yes; then
-$as_echo "#define HAVE_SOCKLEN_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SOCKLEN_T 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for h_errno declaration in netdb.h" >&5
-$as_echo_n "checking for h_errno declaration in netdb.h... " >&6; }
-if ${ac_cv_decl_h_errno+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for h_errno declaration in netdb.h" >&5
+printf %s "checking for h_errno declaration in netdb.h... " >&6; }
+if test ${ac_cv_decl_h_errno+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <netdb.h>
int
-main ()
+main (void)
{
int err = h_errno;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_decl_h_errno=yes
-else
+else $as_nop
ac_cv_decl_h_errno=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_h_errno" >&5
-$as_echo "$ac_cv_decl_h_errno" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_h_errno" >&5
+printf "%s\n" "$ac_cv_decl_h_errno" >&6; }
if test $ac_cv_decl_h_errno = yes; then
-$as_echo "#define H_ERRNO_DECLARED 1" >>confdefs.h
+printf "%s\n" "#define H_ERRNO_DECLARED 1" >>confdefs.h
fi
@@ -14437,19 +16173,20 @@ CPPFLAGS="$CPPFLAGS $EMU_THR_DEFS"
ac_header_dirent=no
for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
- as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+printf %s "checking for $ac_hdr that defines DIR... " >&6; }
+if eval test \${$as_ac_Header+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <$ac_hdr>
int
-main ()
+main (void)
{
if ((DIR *) 0)
return 0;
@@ -14457,19 +16194,21 @@ return 0;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$as_ac_Header=yes"
-else
+else $as_nop
eval "$as_ac_Header=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$as_ac_Header
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1
_ACEOF
ac_header_dirent=$ac_hdr; break
@@ -14478,11 +16217,12 @@ fi
done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -14490,56 +16230,59 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char opendir ();
int
-main ()
+main (void)
{
return opendir ();
;
return 0;
}
_ACEOF
-for ac_lib in '' dir; do
+for ac_lib in '' dir
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_opendir=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_opendir+:} false; then :
+ if test ${ac_cv_search_opendir+y}
+then :
break
fi
done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
-else
+else $as_nop
ac_cv_search_opendir=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -14547,259 +16290,270 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char opendir ();
int
-main ()
+main (void)
{
return opendir ();
;
return 0;
}
_ACEOF
-for ac_lib in '' x; do
+for ac_lib in '' x
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_opendir=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_opendir+:} false; then :
+ if test ${ac_cv_search_opendir+y}
+then :
break
fi
done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
-else
+else $as_nop
ac_cv_search_opendir=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if test ${ac_cv_header_sys_wait_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
int
-main ()
+main (void)
{
-
+ int s;
+ wait (&s);
+ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_header_sys_wait_h=yes
+else $as_nop
+ ac_cv_header_sys_wait_h=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
+printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
+printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
+fi
+
+
+
+
+ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
-else
- ac_cv_header_stdc=no
fi
-rm -f conftest*
+ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
+if test "x$ac_cv_header_limits_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
+fi
+ac_fn_c_check_header_compile "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default"
+if test "x$ac_cv_header_syslog_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYSLOG_H 1" >>confdefs.h
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
+fi
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
-else
- ac_cv_header_stdc=no
fi
-rm -f conftest*
+ac_fn_c_check_header_compile "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default"
+if test "x$ac_cv_header_ieeefp_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_IEEEFP_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_types_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/stropts.h" "ac_cv_header_sys_stropts_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_stropts_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_STROPTS_H 1" >>confdefs.h
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysctl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SYSCTL_H 1" >>confdefs.h
-else
- ac_cv_header_stdc=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ioctl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
+
fi
+ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_uio_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_UIO_H 1" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mman_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "sys/sockio.h" "ac_cv_header_sys_sockio_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sockio_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKIO_H 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
-$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
-if ${ac_cv_header_sys_wait_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/socketio.h" "ac_cv_header_sys_socketio_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socketio_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKETIO_H 1" >>confdefs.h
-int
-main ()
-{
- int s;
- wait (&s);
- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_sys_wait_h=yes
-else
- ac_cv_header_sys_wait_h=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default"
+if test "x$ac_cv_header_net_errno_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NET_ERRNO_H 1" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
-$as_echo "$ac_cv_header_sys_wait_h" >&6; }
-if test $ac_cv_header_sys_wait_h = yes; then
+ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
+if test "x$ac_cv_header_malloc_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h
-$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "arpa/nameser.h" "ac_cv_header_arpa_nameser_h" "$ac_includes_default"
+if test "x$ac_cv_header_arpa_nameser_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_ARPA_NAMESER_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "libdlpi.h" "ac_cv_header_libdlpi_h" "$ac_includes_default"
+if test "x$ac_cv_header_libdlpi_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBDLPI_H 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
+fi
+ac_fn_c_check_header_compile "$LINENO" "pty.h" "ac_cv_header_pty_h" "$ac_includes_default"
+if test "x$ac_cv_header_pty_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_PTY_H 1" >>confdefs.h
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_time=yes
-else
- ac_cv_header_time=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "util.h" "ac_cv_header_util_h" "$ac_includes_default"
+if test "x$ac_cv_header_util_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UTIL_H 1" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
+ac_fn_c_check_header_compile "$LINENO" "libutil.h" "ac_cv_header_libutil_h" "$ac_includes_default"
+if test "x$ac_cv_header_libutil_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBUTIL_H 1" >>confdefs.h
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "utmp.h" "ac_cv_header_utmp_h" "$ac_includes_default"
+if test "x$ac_cv_header_utmp_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UTMP_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_langinfo_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default"
+if test "x$ac_cv_header_poll_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_POLL_H 1" >>confdefs.h
-for ac_header in fcntl.h limits.h unistd.h syslog.h dlfcn.h ieeefp.h \
- sys/types.h sys/stropts.h sys/sysctl.h \
- sys/ioctl.h sys/time.h sys/uio.h sys/mman.h \
- sys/socket.h sys/sockio.h sys/socketio.h \
- net/errno.h malloc.h arpa/nameser.h libdlpi.h \
- pty.h util.h libutil.h utmp.h langinfo.h poll.h sdkddkver.h \
- elf.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sdkddkver.h" "ac_cv_header_sdkddkver_h" "$ac_includes_default"
+if test "x$ac_cv_header_sdkddkver_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SDKDDKVER_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default"
+if test "x$ac_cv_header_elf_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_ELF_H 1" >>confdefs.h
-done
+fi
ac_fn_c_check_member "$LINENO" "struct ifreq" "ifr_hwaddr" "ac_cv_member_struct_ifreq_ifr_hwaddr" "#ifdef __WIN32__
@@ -14808,11 +16562,10 @@ ac_fn_c_check_member "$LINENO" "struct ifreq" "ifr_hwaddr" "ac_cv_member_struct_
#endif
"
-if test "x$ac_cv_member_struct_ifreq_ifr_hwaddr" = xyes; then :
+if test "x$ac_cv_member_struct_ifreq_ifr_hwaddr" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1" >>confdefs.h
fi
@@ -14824,25 +16577,27 @@ ac_fn_c_check_member "$LINENO" "struct ifreq" "ifr_enaddr" "ac_cv_member_struct_
#endif
"
-if test "x$ac_cv_member_struct_ifreq_ifr_enaddr" = xyes; then :
+if test "x$ac_cv_member_struct_ifreq_ifr_enaddr" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_IFREQ_IFR_ENADDR 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_IFREQ_IFR_ENADDR 1" >>confdefs.h
fi
-if test x"$enable_systemd" != x"no"; then
+if test x"$enable_systemd" != x"no"
+then :
+
systemd_daemon_save_LIBS=$LIBS
LIBS=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sd_listen_fds" >&5
-$as_echo_n "checking for library containing sd_listen_fds... " >&6; }
-if ${ac_cv_search_sd_listen_fds+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sd_listen_fds" >&5
+printf %s "checking for library containing sd_listen_fds... " >&6; }
+if test ${ac_cv_search_sd_listen_fds+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -14850,57 +16605,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char sd_listen_fds ();
int
-main ()
+main (void)
{
return sd_listen_fds ();
;
return 0;
}
_ACEOF
-for ac_lib in '' systemd systemd-daemon; do
+for ac_lib in '' systemd systemd-daemon
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $systemd_daemon_save_LIBS $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_sd_listen_fds=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_sd_listen_fds+:} false; then :
+ if test ${ac_cv_search_sd_listen_fds+y}
+then :
break
fi
done
-if ${ac_cv_search_sd_listen_fds+:} false; then :
+if test ${ac_cv_search_sd_listen_fds+y}
+then :
-else
+else $as_nop
ac_cv_search_sd_listen_fds=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sd_listen_fds" >&5
-$as_echo "$ac_cv_search_sd_listen_fds" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sd_listen_fds" >&5
+printf "%s\n" "$ac_cv_search_sd_listen_fds" >&6; }
ac_res=$ac_cv_search_sd_listen_fds
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
have_sd_listen_fds=yes
-else
+else $as_nop
have_sd_listen_fds=no
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sd_notify" >&5
-$as_echo_n "checking for library containing sd_notify... " >&6; }
-if ${ac_cv_search_sd_notify+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sd_notify" >&5
+printf %s "checking for library containing sd_notify... " >&6; }
+if test ${ac_cv_search_sd_notify+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -14908,90 +16666,92 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char sd_notify ();
int
-main ()
+main (void)
{
return sd_notify ();
;
return 0;
}
_ACEOF
-for ac_lib in '' systemd systemd-daemon; do
+for ac_lib in '' systemd systemd-daemon
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $systemd_daemon_save_LIBS $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_sd_notify=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_sd_notify+:} false; then :
+ if test ${ac_cv_search_sd_notify+y}
+then :
break
fi
done
-if ${ac_cv_search_sd_notify+:} false; then :
+if test ${ac_cv_search_sd_notify+y}
+then :
-else
+else $as_nop
ac_cv_search_sd_notify=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sd_notify" >&5
-$as_echo "$ac_cv_search_sd_notify" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sd_notify" >&5
+printf "%s\n" "$ac_cv_search_sd_notify" >&6; }
ac_res=$ac_cv_search_sd_notify
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
have_sd_notify=yes
-else
+else $as_nop
have_sd_notify=no
fi
-for ac_header in systemd/sd-daemon.h
+ for ac_header in systemd/sd-daemon.h
do :
- ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-daemon.h" "ac_cv_header_systemd_sd_daemon_h" "$ac_includes_default"
-if test "x$ac_cv_header_systemd_sd_daemon_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYSTEMD_SD_DAEMON_H 1
-_ACEOF
+ ac_fn_c_check_header_compile "$LINENO" "systemd/sd-daemon.h" "ac_cv_header_systemd_sd_daemon_h" "$ac_includes_default"
+if test "x$ac_cv_header_systemd_sd_daemon_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYSTEMD_SD_DAEMON_H 1" >>confdefs.h
have_systemd_sd_daemon_h=yes
-else
+else $as_nop
have_systemd_sd_daemon_h=no
fi
done
-
if test x"$have_sd_listen_fds" = x"yes" && \
test x"$have_sd_notify" = x"yes" && \
test x"$have_systemd_sd_daemon_h" = x"yes"; then
-$as_echo "#define HAVE_SYSTEMD_DAEMON 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SYSTEMD_DAEMON 1" >>confdefs.h
SYSTEMD_DAEMON_LIBS=$LIBS
elif test x"$enable_systemd" = x"yes"; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "--enable-systemd was given, but test for systemd failed
See \`config.log' for more details" "$LINENO" 5; }
fi
LIBS=$systemd_daemon_save_LIBS
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlpi_open in -ldlpi" >&5
-$as_echo_n "checking for dlpi_open in -ldlpi... " >&6; }
-if ${ac_cv_lib_dlpi_dlpi_open+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlpi_open in -ldlpi" >&5
+printf %s "checking for dlpi_open in -ldlpi... " >&6; }
+if test ${ac_cv_lib_dlpi_dlpi_open+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldlpi $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15000,39 +16760,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char dlpi_open ();
int
-main ()
+main (void)
{
return dlpi_open ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_dlpi_dlpi_open=yes
-else
+else $as_nop
ac_cv_lib_dlpi_dlpi_open=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dlpi_dlpi_open" >&5
-$as_echo "$ac_cv_lib_dlpi_dlpi_open" >&6; }
-if test "x$ac_cv_lib_dlpi_dlpi_open" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDLPI 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dlpi_dlpi_open" >&5
+printf "%s\n" "$ac_cv_lib_dlpi_dlpi_open" >&6; }
+if test "x$ac_cv_lib_dlpi_dlpi_open" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBDLPI 1" >>confdefs.h
LIBS="-ldlpi $LIBS"
fi
-if test x"$ac_cv_lib_dlpi_dlpi_open" = x"no"; then
+if test x"$ac_cv_lib_dlpi_dlpi_open" = x"no"
+then :
+
unset -v ac_cv_lib_dlpi_dlpi_open
save_ldflags="$LDFLAGS"
try_dlpi_lib=/lib
@@ -15054,13 +16813,14 @@ if test x"$ac_cv_lib_dlpi_dlpi_open" = x"no"; then
fi
LDFLAGS="-L$try_dlpi_lib -R$try_dlpi_lib $LDFLAGS"
unset -v try_dlpi_lib
- { $as_echo "$as_me:${as_lineno-$LINENO}: Extending the search to include /lib" >&5
-$as_echo "$as_me: Extending the search to include /lib" >&6;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlpi_open in -ldlpi" >&5
-$as_echo_n "checking for dlpi_open in -ldlpi... " >&6; }
-if ${ac_cv_lib_dlpi_dlpi_open+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Extending the search to include /lib" >&5
+printf "%s\n" "$as_me: Extending the search to include /lib" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlpi_open in -ldlpi" >&5
+printf %s "checking for dlpi_open in -ldlpi... " >&6; }
+if test ${ac_cv_lib_dlpi_dlpi_open+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldlpi $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15069,33 +16829,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char dlpi_open ();
int
-main ()
+main (void)
{
return dlpi_open ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_dlpi_dlpi_open=yes
-else
+else $as_nop
ac_cv_lib_dlpi_dlpi_open=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dlpi_dlpi_open" >&5
-$as_echo "$ac_cv_lib_dlpi_dlpi_open" >&6; }
-if test "x$ac_cv_lib_dlpi_dlpi_open" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDLPI 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dlpi_dlpi_open" >&5
+printf "%s\n" "$ac_cv_lib_dlpi_dlpi_open" >&6; }
+if test "x$ac_cv_lib_dlpi_dlpi_open" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBDLPI 1" >>confdefs.h
LIBS="-ldlpi $LIBS"
@@ -15105,122 +16862,189 @@ fi
LDFLAGS="$save_ldflags"
fi
unset -v save_ldflags
+
fi
-ac_fn_c_check_header_mongrel "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_resource_h" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_CFLAGS=$CFLAGS
+ ac_cv_c_undeclared_builtin_options='cannot detect'
+ for ac_arg in '' -fno-builtin; do
+ CFLAGS="$ac_save_CFLAGS $ac_arg"
+ # This test program should *not* compile successfully.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-$as_echo "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h
+int
+main (void)
+{
+(void) strchr;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
- ac_fn_c_check_decl "$LINENO" "getrlimit" "ac_cv_have_decl_getrlimit" "#include <sys/resource.h>
-"
-if test "x$ac_cv_have_decl_getrlimit" = xyes; then :
+else $as_nop
+ # This test program should compile successfully.
+ # No library function is consistently available on
+ # freestanding implementations, so test against a dummy
+ # declaration. Include always-available headers on the
+ # off chance that they somehow elicit warnings.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
+
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+ (void) ac_decl;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if test x"$ac_arg" = x
+then :
+ ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+ ac_cv_c_undeclared_builtin_options=$ac_arg
+fi
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+ CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+ case $ac_cv_c_undeclared_builtin_options in #(
+ 'cannot detect') :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+ 'none needed') :
+ ac_c_undeclared_builtin_options='' ;; #(
+ *) :
+ ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
+
+ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_resource_h" = xyes
+then :
+
+printf "%s\n" "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h
+
+ ac_fn_check_decl "$LINENO" "getrlimit" "ac_cv_have_decl_getrlimit" "#include <sys/resource.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_getrlimit" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETRLIMIT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "setrlimit" "ac_cv_have_decl_setrlimit" "#include <sys/resource.h>
-"
-if test "x$ac_cv_have_decl_setrlimit" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_GETRLIMIT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "setrlimit" "ac_cv_have_decl_setrlimit" "#include <sys/resource.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_setrlimit" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SETRLIMIT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "RLIMIT_STACK" "ac_cv_have_decl_RLIMIT_STACK" "#include <sys/resource.h>
-"
-if test "x$ac_cv_have_decl_RLIMIT_STACK" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_SETRLIMIT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "RLIMIT_STACK" "ac_cv_have_decl_RLIMIT_STACK" "#include <sys/resource.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_RLIMIT_STACK" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_RLIMIT_STACK $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_RLIMIT_STACK $ac_have_decl" >>confdefs.h
fi
-
-for ac_func in getrusage
-do :
- ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage"
-if test "x$ac_cv_func_getrusage" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETRUSAGE 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage"
+if test "x$ac_cv_func_getrusage" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETRUSAGE 1" >>confdefs.h
fi
-done
have_kernel_poll=no
-ac_fn_c_check_header_mongrel "$LINENO" "sys/event.h" "ac_cv_header_sys_event_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_event_h" = xyes; then :
+ac_fn_c_check_header_compile "$LINENO" "sys/event.h" "ac_cv_header_sys_event_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_event_h" = xyes
+then :
have_kernel_poll=kqueue
fi
-
-ac_fn_c_check_header_mongrel "$LINENO" "sys/epoll.h" "ac_cv_header_sys_epoll_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_epoll_h" = xyes; then :
+ac_fn_c_check_header_compile "$LINENO" "sys/epoll.h" "ac_cv_header_sys_epoll_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_epoll_h" = xyes
+then :
have_kernel_poll=epoll
fi
-
-ac_fn_c_check_header_mongrel "$LINENO" "sys/devpoll.h" "ac_cv_header_sys_devpoll_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_devpoll_h" = xyes; then :
+ac_fn_c_check_header_compile "$LINENO" "sys/devpoll.h" "ac_cv_header_sys_devpoll_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_devpoll_h" = xyes
+then :
have_kernel_poll=/dev/poll
fi
-
-for ac_header in sys/timerfd.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/timerfd.h" "ac_cv_header_sys_timerfd_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_timerfd_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_TIMERFD_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "sys/timerfd.h" "ac_cv_header_sys_timerfd_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_timerfd_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TIMERFD_H 1" >>confdefs.h
fi
-done
-
-for ac_header in netpacket/packet.h
+ for ac_header in netpacket/packet.h
do :
- ac_fn_c_check_header_mongrel "$LINENO" "netpacket/packet.h" "ac_cv_header_netpacket_packet_h" "$ac_includes_default"
-if test "x$ac_cv_header_netpacket_packet_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_NETPACKET_PACKET_H 1
-_ACEOF
+ ac_fn_c_check_header_compile "$LINENO" "netpacket/packet.h" "ac_cv_header_netpacket_packet_h" "$ac_includes_default"
+if test "x$ac_cv_header_netpacket_packet_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETPACKET_PACKET_H 1" >>confdefs.h
have_netpacket_packet_h=yes
-else
+else $as_nop
have_netpacket_packet_h=no
fi
done
+if test "x$enable_sctp" != "xno"
+then :
-if test "x$enable_sctp" != "xno" ; then
ac_fn_c_check_header_compile "$LINENO" "netinet/sctp.h" "ac_cv_header_netinet_sctp_h" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
"
-if test "x$ac_cv_header_netinet_sctp_h" = xyes; then :
+if test "x$ac_cv_header_netinet_sctp_h" = xyes
+then :
LIBSCTP=libsctp.so.1
-$as_echo "#define HAVE_SCTP_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SCTP_H 1" >>confdefs.h
fi
@@ -15236,13 +17060,17 @@ case "x$enable_sctp" in
fi;;
esac
-if test x"$ac_cv_header_netinet_sctp_h" = x"yes"; then
- if test "x$enable_sctp" = "xlib"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sctp_bindx in -lsctp" >&5
-$as_echo_n "checking for sctp_bindx in -lsctp... " >&6; }
-if ${ac_cv_lib_sctp_sctp_bindx+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test x"$ac_cv_header_netinet_sctp_h" = x"yes"
+then :
+
+ if test "x$enable_sctp" = "xlib"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sctp_bindx in -lsctp" >&5
+printf %s "checking for sctp_bindx in -lsctp... " >&6; }
+if test ${ac_cv_lib_sctp_sctp_bindx+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsctp $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15251,50 +17079,72 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char sctp_bindx ();
int
-main ()
+main (void)
{
return sctp_bindx ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_sctp_sctp_bindx=yes
-else
+else $as_nop
ac_cv_lib_sctp_sctp_bindx=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sctp_sctp_bindx" >&5
-$as_echo "$ac_cv_lib_sctp_sctp_bindx" >&6; }
-if test "x$ac_cv_lib_sctp_sctp_bindx" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSCTP 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sctp_sctp_bindx" >&5
+printf "%s\n" "$ac_cv_lib_sctp_sctp_bindx" >&6; }
+if test "x$ac_cv_lib_sctp_sctp_bindx" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBSCTP 1" >>confdefs.h
LIBS="-lsctp $LIBS"
fi
fi
- for ac_func in sctp_bindx sctp_peeloff sctp_getladdrs sctp_freeladdrs sctp_getpaddrs sctp_freepaddrs
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ ac_fn_c_check_func "$LINENO" "sctp_bindx" "ac_cv_func_sctp_bindx"
+if test "x$ac_cv_func_sctp_bindx" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCTP_BINDX 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sctp_peeloff" "ac_cv_func_sctp_peeloff"
+if test "x$ac_cv_func_sctp_peeloff" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCTP_PEELOFF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sctp_getladdrs" "ac_cv_func_sctp_getladdrs"
+if test "x$ac_cv_func_sctp_getladdrs" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCTP_GETLADDRS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sctp_freeladdrs" "ac_cv_func_sctp_freeladdrs"
+if test "x$ac_cv_func_sctp_freeladdrs" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCTP_FREELADDRS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sctp_getpaddrs" "ac_cv_func_sctp_getpaddrs"
+if test "x$ac_cv_func_sctp_getpaddrs" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCTP_GETPADDRS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sctp_freepaddrs" "ac_cv_func_sctp_freepaddrs"
+if test "x$ac_cv_func_sctp_freepaddrs" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCTP_FREEPADDRS 1" >>confdefs.h
fi
-done
ac_fn_c_check_member "$LINENO" "struct sctp_accoc_value" "assoc_id" "ac_cv_member_struct_sctp_accoc_value_assoc_id" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
@@ -15302,450 +17152,391 @@ done
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_accoc_value_assoc_id" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_accoc_value_assoc_id" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_ACCOC_VALUE_ASSOC_ID 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_ACCOC_VALUE_ASSOC_ID 1" >>confdefs.h
fi
- ac_fn_c_check_decl "$LINENO" "SCTP_UNORDERED" "ac_cv_have_decl_SCTP_UNORDERED" "#if HAVE_SYS_SOCKET_H
+ ac_fn_check_decl "$LINENO" "SCTP_UNORDERED" "ac_cv_have_decl_SCTP_UNORDERED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_UNORDERED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_UNORDERED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_UNORDERED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_ADDR_OVER" "ac_cv_have_decl_SCTP_ADDR_OVER" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_UNORDERED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_ADDR_OVER" "ac_cv_have_decl_SCTP_ADDR_OVER" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_ADDR_OVER" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_ADDR_OVER" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_ADDR_OVER $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_ABORT" "ac_cv_have_decl_SCTP_ABORT" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_ADDR_OVER $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_ABORT" "ac_cv_have_decl_SCTP_ABORT" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_ABORT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_ABORT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_ABORT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_EOF" "ac_cv_have_decl_SCTP_EOF" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_ABORT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_EOF" "ac_cv_have_decl_SCTP_EOF" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_EOF" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_EOF" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_EOF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_SENDALL" "ac_cv_have_decl_SCTP_SENDALL" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_EOF $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_SENDALL" "ac_cv_have_decl_SCTP_SENDALL" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_SENDALL" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_SENDALL" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_SENDALL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_ADDR_CONFIRMED" "ac_cv_have_decl_SCTP_ADDR_CONFIRMED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_SENDALL $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_ADDR_CONFIRMED" "ac_cv_have_decl_SCTP_ADDR_CONFIRMED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_ADDR_CONFIRMED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_ADDR_CONFIRMED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_ADDR_CONFIRMED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_DELAYED_ACK_TIME" "ac_cv_have_decl_SCTP_DELAYED_ACK_TIME" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_ADDR_CONFIRMED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_DELAYED_ACK_TIME" "ac_cv_have_decl_SCTP_DELAYED_ACK_TIME" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_DELAYED_ACK_TIME" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_DELAYED_ACK_TIME" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_DELAYED_ACK_TIME $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_EMPTY" "ac_cv_have_decl_SCTP_EMPTY" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_DELAYED_ACK_TIME $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_EMPTY" "ac_cv_have_decl_SCTP_EMPTY" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_EMPTY" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_EMPTY" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_EMPTY $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_UNCONFIRMED" "ac_cv_have_decl_SCTP_UNCONFIRMED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_EMPTY $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_UNCONFIRMED" "ac_cv_have_decl_SCTP_UNCONFIRMED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_UNCONFIRMED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_UNCONFIRMED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_UNCONFIRMED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_CLOSED" "ac_cv_have_decl_SCTP_CLOSED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_UNCONFIRMED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_CLOSED" "ac_cv_have_decl_SCTP_CLOSED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_CLOSED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_CLOSED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_CLOSED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_IDLE" "ac_cv_have_decl_SCTPS_IDLE" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_CLOSED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_IDLE" "ac_cv_have_decl_SCTPS_IDLE" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_IDLE" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_IDLE" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_IDLE $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_BOUND" "ac_cv_have_decl_SCTP_BOUND" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_IDLE $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_BOUND" "ac_cv_have_decl_SCTP_BOUND" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_BOUND" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_BOUND" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_BOUND $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_BOUND" "ac_cv_have_decl_SCTPS_BOUND" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_BOUND $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_BOUND" "ac_cv_have_decl_SCTPS_BOUND" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_BOUND" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_BOUND" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_BOUND $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_LISTEN" "ac_cv_have_decl_SCTP_LISTEN" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_BOUND $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_LISTEN" "ac_cv_have_decl_SCTP_LISTEN" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_LISTEN" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_LISTEN" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_LISTEN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_LISTEN" "ac_cv_have_decl_SCTPS_LISTEN" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_LISTEN $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_LISTEN" "ac_cv_have_decl_SCTPS_LISTEN" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_LISTEN" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_LISTEN" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_LISTEN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_COOKIE_WAIT" "ac_cv_have_decl_SCTP_COOKIE_WAIT" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_LISTEN $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_COOKIE_WAIT" "ac_cv_have_decl_SCTP_COOKIE_WAIT" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_COOKIE_WAIT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_COOKIE_WAIT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_COOKIE_WAIT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_COOKIE_WAIT" "ac_cv_have_decl_SCTPS_COOKIE_WAIT" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_COOKIE_WAIT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_COOKIE_WAIT" "ac_cv_have_decl_SCTPS_COOKIE_WAIT" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_COOKIE_WAIT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_COOKIE_WAIT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_COOKIE_WAIT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_COOKIE_ECHOED" "ac_cv_have_decl_SCTP_COOKIE_ECHOED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_COOKIE_WAIT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_COOKIE_ECHOED" "ac_cv_have_decl_SCTP_COOKIE_ECHOED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_COOKIE_ECHOED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_COOKIE_ECHOED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_COOKIE_ECHOED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_COOKIE_ECHOED" "ac_cv_have_decl_SCTPS_COOKIE_ECHOED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_COOKIE_ECHOED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_COOKIE_ECHOED" "ac_cv_have_decl_SCTPS_COOKIE_ECHOED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_COOKIE_ECHOED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_COOKIE_ECHOED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_COOKIE_ECHOED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_ESTABLISHED" "ac_cv_have_decl_SCTP_ESTABLISHED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_COOKIE_ECHOED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_ESTABLISHED" "ac_cv_have_decl_SCTP_ESTABLISHED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_ESTABLISHED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_ESTABLISHED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_ESTABLISHED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_ESTABLISHED" "ac_cv_have_decl_SCTPS_ESTABLISHED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_ESTABLISHED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_ESTABLISHED" "ac_cv_have_decl_SCTPS_ESTABLISHED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_ESTABLISHED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_ESTABLISHED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_ESTABLISHED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_SHUTDOWN_PENDING" "ac_cv_have_decl_SCTP_SHUTDOWN_PENDING" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_ESTABLISHED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_SHUTDOWN_PENDING" "ac_cv_have_decl_SCTP_SHUTDOWN_PENDING" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_PENDING" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_PENDING" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_SHUTDOWN_PENDING $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_SHUTDOWN_PENDING" "ac_cv_have_decl_SCTPS_SHUTDOWN_PENDING" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_SHUTDOWN_PENDING $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_SHUTDOWN_PENDING" "ac_cv_have_decl_SCTPS_SHUTDOWN_PENDING" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_PENDING" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_PENDING" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_SHUTDOWN_PENDING $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_SHUTDOWN_SENT" "ac_cv_have_decl_SCTP_SHUTDOWN_SENT" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_SHUTDOWN_PENDING $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_SHUTDOWN_SENT" "ac_cv_have_decl_SCTP_SHUTDOWN_SENT" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_SENT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_SENT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_SHUTDOWN_SENT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_SHUTDOWN_SENT" "ac_cv_have_decl_SCTPS_SHUTDOWN_SENT" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_SHUTDOWN_SENT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_SHUTDOWN_SENT" "ac_cv_have_decl_SCTPS_SHUTDOWN_SENT" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_SENT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_SENT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_SHUTDOWN_SENT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_SHUTDOWN_RECEIVED" "ac_cv_have_decl_SCTP_SHUTDOWN_RECEIVED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_SHUTDOWN_SENT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_SHUTDOWN_RECEIVED" "ac_cv_have_decl_SCTP_SHUTDOWN_RECEIVED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_RECEIVED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_RECEIVED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_SHUTDOWN_RECEIVED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_SHUTDOWN_RECEIVED" "ac_cv_have_decl_SCTPS_SHUTDOWN_RECEIVED" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_SHUTDOWN_RECEIVED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_SHUTDOWN_RECEIVED" "ac_cv_have_decl_SCTPS_SHUTDOWN_RECEIVED" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_RECEIVED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_RECEIVED" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_SHUTDOWN_RECEIVED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTP_SHUTDOWN_ACK_SENT" "ac_cv_have_decl_SCTP_SHUTDOWN_ACK_SENT" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTPS_SHUTDOWN_RECEIVED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTP_SHUTDOWN_ACK_SENT" "ac_cv_have_decl_SCTP_SHUTDOWN_ACK_SENT" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_ACK_SENT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTP_SHUTDOWN_ACK_SENT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTP_SHUTDOWN_ACK_SENT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "SCTPS_SHUTDOWN_ACK_SENT" "ac_cv_have_decl_SCTPS_SHUTDOWN_ACK_SENT" "#if HAVE_SYS_SOCKET_H
+printf "%s\n" "#define HAVE_DECL_SCTP_SHUTDOWN_ACK_SENT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "SCTPS_SHUTDOWN_ACK_SENT" "ac_cv_have_decl_SCTPS_SHUTDOWN_ACK_SENT" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#include <netinet/sctp.h>
-"
-if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_ACK_SENT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SCTPS_SHUTDOWN_ACK_SENT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCTPS_SHUTDOWN_ACK_SENT $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_SCTPS_SHUTDOWN_ACK_SENT $ac_have_decl" >>confdefs.h
ac_fn_c_check_member "$LINENO" "struct sctp_paddrparams" "spp_pathmtu" "ac_cv_member_struct_sctp_paddrparams_spp_pathmtu" "#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
@@ -15753,11 +17544,10 @@ _ACEOF
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_paddrparams_spp_pathmtu" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_paddrparams_spp_pathmtu" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_PATHMTU 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_PATHMTU 1" >>confdefs.h
fi
@@ -15767,11 +17557,10 @@ ac_fn_c_check_member "$LINENO" "struct sctp_paddrparams" "spp_sackdelay" "ac_cv_
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_paddrparams_spp_sackdelay" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_paddrparams_spp_sackdelay" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_SACKDELAY 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_SACKDELAY 1" >>confdefs.h
fi
@@ -15781,11 +17570,10 @@ ac_fn_c_check_member "$LINENO" "struct sctp_paddrparams" "spp_flags" "ac_cv_memb
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_paddrparams_spp_flags" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_paddrparams_spp_flags" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_FLAGS 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_FLAGS 1" >>confdefs.h
fi
@@ -15795,11 +17583,10 @@ ac_fn_c_check_member "$LINENO" "struct sctp_remote_error" "sre_data" "ac_cv_memb
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_remote_error_sre_data" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_remote_error_sre_data" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_REMOTE_ERROR_SRE_DATA 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_REMOTE_ERROR_SRE_DATA 1" >>confdefs.h
fi
@@ -15809,11 +17596,10 @@ ac_fn_c_check_member "$LINENO" "struct sctp_send_failed" "ssf_data" "ac_cv_membe
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_send_failed_ssf_data" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_send_failed_ssf_data" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_SEND_FAILED_SSF_DATA 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_SEND_FAILED_SSF_DATA 1" >>confdefs.h
fi
@@ -15823,11 +17609,10 @@ ac_fn_c_check_member "$LINENO" "struct sctp_event_subscribe" "sctp_authenticatio
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_event_subscribe_sctp_authentication_event" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_event_subscribe_sctp_authentication_event" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE_SCTP_AUTHENTICATION_EVENT 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE_SCTP_AUTHENTICATION_EVENT 1" >>confdefs.h
fi
@@ -15837,46 +17622,39 @@ ac_fn_c_check_member "$LINENO" "struct sctp_event_subscribe" "sctp_sender_dry_ev
#include <netinet/sctp.h>
"
-if test "x$ac_cv_member_struct_sctp_event_subscribe_sctp_sender_dry_event" = xyes; then :
+if test "x$ac_cv_member_struct_sctp_event_subscribe_sctp_sender_dry_event" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE_SCTP_SENDER_DRY_EVENT 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE_SCTP_SENDER_DRY_EVENT 1" >>confdefs.h
fi
+
fi
-for ac_header in sched.h setns.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
+if test "x$ac_cv_header_sched_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCHED_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "setns.h" "ac_cv_header_setns_h" "$ac_includes_default"
+if test "x$ac_cv_header_setns_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETNS_H 1" >>confdefs.h
-done
+fi
-for ac_func in setns
-do :
- ac_fn_c_check_func "$LINENO" "setns" "ac_cv_func_setns"
-if test "x$ac_cv_func_setns" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SETNS 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "setns" "ac_cv_func_setns"
+if test "x$ac_cv_func_setns" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETNS 1" >>confdefs.h
fi
-done
-for ac_header in linux/types.h linux/errqueue.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#ifdef HAVE_SYS_TIME_H
+ac_fn_c_check_header_compile "$LINENO" "linux/types.h" "ac_cv_header_linux_types_h" "#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#ifdef HAVE_LINUX_TYPES_H
@@ -15884,203 +17662,231 @@ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#ifdef HAVE
#endif
"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+if test "x$ac_cv_header_linux_types_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LINUX_TYPES_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "linux/errqueue.h" "ac_cv_header_linux_errqueue_h" "#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#ifdef HAVE_LINUX_TYPES_H
+# include <linux/types.h>
+#endif
-done
+"
+if test "x$ac_cv_header_linux_errqueue_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LINUX_ERRQUEUE_H 1" >>confdefs.h
+
+fi
HAVE_VALGRIND=no
-ac_fn_c_check_header_mongrel "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default"
-if test "x$ac_cv_header_valgrind_valgrind_h" = xyes; then :
+ac_fn_c_check_header_compile "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default"
+if test "x$ac_cv_header_valgrind_valgrind_h" = xyes
+then :
HAVE_VALGRIND=yes
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SO_BSDCOMPAT declaration" >&5
-$as_echo_n "checking for SO_BSDCOMPAT declaration... " >&6; }
-if ${ac_cv_decl_so_bsdcompat+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SO_BSDCOMPAT declaration" >&5
+printf %s "checking for SO_BSDCOMPAT declaration... " >&6; }
+if test ${ac_cv_decl_so_bsdcompat+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/socket.h>
int
-main ()
+main (void)
{
int i = SO_BSDCOMPAT;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_decl_so_bsdcompat=yes
-else
+else $as_nop
ac_cv_decl_so_bsdcompat=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_so_bsdcompat" >&5
-$as_echo "$ac_cv_decl_so_bsdcompat" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_so_bsdcompat" >&5
+printf "%s\n" "$ac_cv_decl_so_bsdcompat" >&6; }
case "${ac_cv_decl_so_bsdcompat}" in
"yes" )
-$as_echo "#define HAVE_SO_BSDCOMPAT /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_SO_BSDCOMPAT /**/" >>confdefs.h
;;
* ) ;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for INADDR_LOOPBACK in netinet/in.h" >&5
-$as_echo_n "checking for INADDR_LOOPBACK in netinet/in.h... " >&6; }
-if ${ac_cv_decl_inaddr_loopback+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for INADDR_LOOPBACK in netinet/in.h" >&5
+printf %s "checking for INADDR_LOOPBACK in netinet/in.h... " >&6; }
+if test ${ac_cv_decl_inaddr_loopback+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <netinet/in.h>
int
-main ()
+main (void)
{
int i = INADDR_LOOPBACK;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_decl_inaddr_loopback=yes
-else
+else $as_nop
ac_cv_decl_inaddr_loopback=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_inaddr_loopback" >&5
-$as_echo "$ac_cv_decl_inaddr_loopback" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_inaddr_loopback" >&5
+printf "%s\n" "$ac_cv_decl_inaddr_loopback" >&6; }
-if test ${ac_cv_decl_inaddr_loopback} = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for INADDR_LOOPBACK in rpc/types.h" >&5
-$as_echo_n "checking for INADDR_LOOPBACK in rpc/types.h... " >&6; }
-if ${ac_cv_decl_inaddr_loopback_rpc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test ${ac_cv_decl_inaddr_loopback} = no
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for INADDR_LOOPBACK in rpc/types.h" >&5
+printf %s "checking for INADDR_LOOPBACK in rpc/types.h... " >&6; }
+if test ${ac_cv_decl_inaddr_loopback_rpc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <rpc/types.h>
int
-main ()
+main (void)
{
int i = INADDR_LOOPBACK;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_decl_inaddr_loopback_rpc=yes
-else
+else $as_nop
ac_cv_decl_inaddr_loopback_rpc=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_inaddr_loopback_rpc" >&5
-$as_echo "$ac_cv_decl_inaddr_loopback_rpc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_inaddr_loopback_rpc" >&5
+printf "%s\n" "$ac_cv_decl_inaddr_loopback_rpc" >&6; }
- case "${ac_cv_decl_inaddr_loopback_rpc}" in
- "yes" )
+ if test "${ac_cv_decl_inaddr_loopback_rpc}" = "yes"
+then :
-$as_echo "#define DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H /**/" >>confdefs.h
- ;;
- * )
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for INADDR_LOOPBACK in winsock2.h" >&5
-$as_echo_n "checking for INADDR_LOOPBACK in winsock2.h... " >&6; }
-if ${ac_cv_decl_inaddr_loopback_winsock2+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+printf "%s\n" "#define DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H /**/" >>confdefs.h
+
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for INADDR_LOOPBACK in winsock2.h" >&5
+printf %s "checking for INADDR_LOOPBACK in winsock2.h... " >&6; }
+if test ${ac_cv_decl_inaddr_loopback_winsock2+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
int
-main ()
+main (void)
{
int i = INADDR_LOOPBACK;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_decl_inaddr_loopback_winsock2=yes
-else
+else $as_nop
ac_cv_decl_inaddr_loopback_winsock2=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_inaddr_loopback_winsock2" >&5
-$as_echo "$ac_cv_decl_inaddr_loopback_winsock2" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_inaddr_loopback_winsock2" >&5
+printf "%s\n" "$ac_cv_decl_inaddr_loopback_winsock2" >&6; }
case "${ac_cv_decl_inaddr_loopback_winsock2}" in
"yes" )
-$as_echo "#define DEF_INADDR_LOOPBACK_IN_WINSOCK2_H /**/" >>confdefs.h
+printf "%s\n" "#define DEF_INADDR_LOOPBACK_IN_WINSOCK2_H /**/" >>confdefs.h
;;
* )
# couldn't find it anywhere
-$as_echo "#define HAVE_NO_INADDR_LOOPBACK /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_NO_INADDR_LOOPBACK /**/" >>confdefs.h
;;
- esac;;
- esac
+ esac
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist declaration in stdio.h or errno.h" >&5
-$as_echo_n "checking for sys_errlist declaration in stdio.h or errno.h... " >&6; }
-if ${ac_cv_decl_sys_errlist+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys_errlist declaration in stdio.h or errno.h" >&5
+printf %s "checking for sys_errlist declaration in stdio.h or errno.h... " >&6; }
+if test ${ac_cv_decl_sys_errlist+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
#include <errno.h>
int
-main ()
+main (void)
{
char *msg = *(sys_errlist + 1);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_decl_sys_errlist=yes
-else
+else $as_nop
ac_cv_decl_sys_errlist=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_sys_errlist" >&5
-$as_echo "$ac_cv_decl_sys_errlist" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_sys_errlist" >&5
+printf "%s\n" "$ac_cv_decl_sys_errlist" >&6; }
if test $ac_cv_decl_sys_errlist = yes; then
-$as_echo "#define SYS_ERRLIST_DECLARED /**/" >>confdefs.h
+printf "%s\n" "#define SYS_ERRLIST_DECLARED /**/" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if windows.h includes winsock2.h" >&5
-$as_echo_n "checking if windows.h includes winsock2.h... " >&6; }
-if ${erts_cv_windows_h_includes_winsock2_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if windows.h includes winsock2.h" >&5
+printf %s "checking if windows.h includes winsock2.h... " >&6; }
+if test ${erts_cv_windows_h_includes_winsock2_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <windows.h>
int
-main ()
+main (void)
{
#ifndef _WINSOCK2API_
#error winsock2.h not included
@@ -16091,34 +17897,36 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erts_cv_windows_h_includes_winsock2_h=yes
-else
+else $as_nop
erts_cv_windows_h_includes_winsock2_h=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_windows_h_includes_winsock2_h" >&5
-$as_echo "$erts_cv_windows_h_includes_winsock2_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_windows_h_includes_winsock2_h" >&5
+printf "%s\n" "$erts_cv_windows_h_includes_winsock2_h" >&6; }
if test $erts_cv_windows_h_includes_winsock2_h = yes; then
-$as_echo "#define WINDOWS_H_INCLUDES_WINSOCK2_H 1" >>confdefs.h
+printf "%s\n" "#define WINDOWS_H_INCLUDES_WINSOCK2_H 1" >>confdefs.h
fi
CPPFLAGS=$saved_cppflags
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __cplusplus
@@ -16131,7 +17939,7 @@ main ()
/* NEC SVR4.0.2 mips cc rejects this. */
struct point {int x, y;};
static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
+ /* IBM XL C 1.02.0.0 rejects this.
It does not let you subtract one const X* pointer from another in
an arm of an if-expression whose if-part is not a constant
expression */
@@ -16159,7 +17967,7 @@ main ()
iptr p = 0;
++p;
}
- { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+ { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
"k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
struct s { int j; const int *ap[3]; } bx;
struct s *b = &bx; b->j = 5;
@@ -16175,100 +17983,94 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_c_const=yes
-else
+else $as_nop
ac_cv_c_const=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
if test $ac_cv_c_const = no; then
-$as_echo "#define const /**/" >>confdefs.h
+printf "%s\n" "#define const /**/" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
-$as_echo_n "checking return type of signal handlers... " >&6; }
-if ${ac_cv_type_signal+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define off_t long int" >>confdefs.h
+
+fi
+
+
+ ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default
+"
+if test "x$ac_cv_type_pid_t" = xyes
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <sys/types.h>
-#include <signal.h>
+
+ #if defined _WIN64 && !defined __CYGWIN__
+ LLP64
+ #endif
int
-main ()
+main (void)
{
-return *(signal (0, 0)) (0) == 1;
+
;
return 0;
}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_type_signal=int
-else
- ac_cv_type_signal=void
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
-$as_echo "$ac_cv_type_signal" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
-
-
-ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = xyes; then :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define off_t long int
_ACEOF
-
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_pid_type='int'
+else $as_nop
+ ac_pid_type='__int64'
fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = xyes; then :
-
-else
+printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
fi
+
ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
+if test "x$ac_cv_type_size_t" = xyes
+then :
-else
+else $as_nop
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
-$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if ${ac_cv_struct_tm+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if test ${ac_cv_struct_tm+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <time.h>
int
-main ()
+main (void)
{
struct tm tm;
int *p = &tm.tm_sec;
@@ -16277,51 +18079,54 @@ struct tm tm;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_struct_tm=time.h
-else
+else $as_nop
ac_cv_struct_tm=sys/time.h
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
-$as_echo "$ac_cv_struct_tm" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+printf "%s\n" "$ac_cv_struct_tm" >&6; }
if test $ac_cv_struct_tm = sys/time.h; then
-$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
+printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct sockaddr has sa_len field" >&5
-$as_echo_n "checking whether struct sockaddr has sa_len field... " >&6; }
-if ${ac_cv_struct_sockaddr_sa_len+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct sockaddr has sa_len field" >&5
+printf %s "checking whether struct sockaddr has sa_len field... " >&6; }
+if test ${ac_cv_struct_sockaddr_sa_len+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/socket.h>
int
-main ()
+main (void)
{
struct sockaddr s; s.sa_len = 10;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_struct_sockaddr_sa_len=yes
-else
+else $as_nop
ac_cv_struct_sockaddr_sa_len=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_sa_len" >&5
-$as_echo "$ac_cv_struct_sockaddr_sa_len" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_sa_len" >&5
+printf "%s\n" "$ac_cv_struct_sockaddr_sa_len" >&6; }
case ${ac_cv_struct_sockaddr_sa_len} in
"no" )
-$as_echo "#define NO_SA_LEN 1" >>confdefs.h
+printf "%s\n" "#define NO_SA_LEN 1" >>confdefs.h
;;
*) ;;
esac
@@ -16331,17 +18136,19 @@ esac
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
-$as_echo_n "checking size of char... " >&6; }
-if ${ac_cv_sizeof_char+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
+printf %s "checking size of char... " >&6; }
+if test ${ac_cv_sizeof_char+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_char" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (char)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16350,31 +18157,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
-$as_echo "$ac_cv_sizeof_char" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
+printf "%s\n" "$ac_cv_sizeof_char" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR $ac_cv_sizeof_char
-_ACEOF
+printf "%s\n" "#define SIZEOF_CHAR $ac_cv_sizeof_char" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+printf %s "checking size of short... " >&6; }
+if test ${ac_cv_sizeof_short+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (short)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16383,31 +18190,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+printf "%s\n" "$ac_cv_sizeof_short" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
+printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+printf %s "checking size of int... " >&6; }
+if test ${ac_cv_sizeof_int+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (int)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16416,31 +18223,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+printf "%s\n" "$ac_cv_sizeof_int" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
+printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16449,31 +18256,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16482,31 +18289,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+printf %s "checking size of long long... " >&6; }
+if test ${ac_cv_sizeof_long_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16515,31 +18322,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
-$as_echo_n "checking size of size_t... " >&6; }
-if ${ac_cv_sizeof_size_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
+printf %s "checking size of size_t... " >&6; }
+if test ${ac_cv_sizeof_size_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_size_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (size_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16548,31 +18355,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
-$as_echo "$ac_cv_sizeof_size_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+printf "%s\n" "$ac_cv_sizeof_size_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
-$as_echo_n "checking size of off_t... " >&6; }
-if ${ac_cv_sizeof_off_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+printf %s "checking size of off_t... " >&6; }
+if test ${ac_cv_sizeof_off_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_off_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (off_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16581,31 +18388,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
-$as_echo "$ac_cv_sizeof_off_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
+printf "%s\n" "$ac_cv_sizeof_off_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_OFF_T $ac_cv_sizeof_off_t" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5
-$as_echo_n "checking size of time_t... " >&6; }
-if ${ac_cv_sizeof_time_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5
+printf %s "checking size of time_t... " >&6; }
+if test ${ac_cv_sizeof_time_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_time_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (time_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16614,31 +18421,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5
-$as_echo "$ac_cv_sizeof_time_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5
+printf "%s\n" "$ac_cv_sizeof_time_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_TIME_T $ac_cv_sizeof_time_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_TIME_T $ac_cv_sizeof_time_t" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of suseconds_t" >&5
-$as_echo_n "checking size of suseconds_t... " >&6; }
-if ${ac_cv_sizeof_suseconds_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (suseconds_t))" "ac_cv_sizeof_suseconds_t" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of suseconds_t" >&5
+printf %s "checking size of suseconds_t... " >&6; }
+if test ${ac_cv_sizeof_suseconds_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (suseconds_t))" "ac_cv_sizeof_suseconds_t" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_suseconds_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (suseconds_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16647,31 +18454,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_suseconds_t" >&5
-$as_echo "$ac_cv_sizeof_suseconds_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_suseconds_t" >&5
+printf "%s\n" "$ac_cv_sizeof_suseconds_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SUSECONDS_T $ac_cv_sizeof_suseconds_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_SUSECONDS_T $ac_cv_sizeof_suseconds_t" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of _Float16" >&5
-$as_echo_n "checking size of _Float16... " >&6; }
-if ${ac_cv_sizeof__Float16+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Float16))" "ac_cv_sizeof__Float16" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of _Float16" >&5
+printf %s "checking size of _Float16... " >&6; }
+if test ${ac_cv_sizeof__Float16+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Float16))" "ac_cv_sizeof__Float16" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type__Float16" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (_Float16)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -16680,14 +18487,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Float16" >&5
-$as_echo "$ac_cv_sizeof__Float16" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Float16" >&5
+printf "%s\n" "$ac_cv_sizeof__Float16" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF__FLOAT16 $ac_cv_sizeof__Float16
-_ACEOF
+printf "%s\n" "#define SIZEOF__FLOAT16 $ac_cv_sizeof__Float16" >>confdefs.h
@@ -16698,8 +18503,8 @@ if test $ac_cv_sizeof_void_p = 8; then
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler 'restrict' support" >&5
-$as_echo_n "checking for C compiler 'restrict' support... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler 'restrict' support" >&5
+printf %s "checking for C compiler 'restrict' support... " >&6; }
restrict_keyword=""
for x in restrict __restrict; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16709,43 +18514,42 @@ int * $x foo(int * $x arg);
{ int * $x var=arg; return var;}
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
restrict_keyword=$x
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test "x$restrict_keyword" != "x"; then
break
fi
done
-cat >>confdefs.h <<_ACEOF
-#define ERTS_RESTRICT $restrict_keyword
-_ACEOF
+printf "%s\n" "#define ERTS_RESTRICT $restrict_keyword" >>confdefs.h
if test "x$restrict_keyword" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_compiler_gnu" = "xyes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should add -fno-tree-copyrename to CFLAGS for computed gotos to work properly" >&5
-$as_echo_n "checking if we should add -fno-tree-copyrename to CFLAGS for computed gotos to work properly... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we should add -fno-tree-copyrename to CFLAGS for computed gotos to work properly" >&5
+printf %s "checking if we should add -fno-tree-copyrename to CFLAGS for computed gotos to work properly... " >&6; }
## tree-copyrename was broken in gcc 4.3 and then removed in gcc 6
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#if (__GNUC__ > 4 && __GNUC__ < 6) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
@@ -16758,27 +18562,29 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
no_tree_copyrename=yes
-else
+else $as_nop
no_tree_copyrename=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test "x$no_tree_copyrename" = "xyes"; then
CFLAGS="$CFLAGS -fno-tree-copyrename"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken gcc-4.3.0 compiler" >&5
-$as_echo_n "checking for broken gcc-4.3.0 compiler... " >&6; }
-if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken gcc-4.3.0 compiler" >&5
+printf %s "checking for broken gcc-4.3.0 compiler... " >&6; }
+if test "$cross_compiling" = yes
+then :
gcc_4_3_0_bug=cross
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -16816,9 +18622,10 @@ int main(void)
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
gcc_4_3_0_bug=no
-else
+else $as_nop
gcc_4_3_0_bug=yes
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -16838,8 +18645,8 @@ case $gcc_4_3_0_bug in
gcc_4_3_0_bug_result="$gcc_4_3_0_bug; could not run test since cross compiling, checked version number ($gcc_dumped_vsn) instead";;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_4_3_0_bug_result" >&5
-$as_echo "$gcc_4_3_0_bug_result" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcc_4_3_0_bug_result" >&5
+printf "%s\n" "$gcc_4_3_0_bug_result" >&6; }
if test $gcc_4_3_0_bug = yes; then
as_fn_error $? "This gcc miscompiles the Erlang runtime system; please use a different version" "$LINENO" 5
fi
@@ -16852,11 +18659,12 @@ case X$erl_xcomp_bigendian in
*) as_fn_error $? "Bad erl_xcomp_bigendian value: $erl_xcomp_bigendian" "$LINENO" 5;;
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+printf %s "checking whether byte ordering is bigendian... " >&6; }
+if test ${ac_cv_c_bigendian+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_cv_c_bigendian=unknown
# See if we're dealing with a universal compiler.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16867,7 +18675,8 @@ else
typedef int dummy;
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
# Check for potential -arch flags. It is not universal unless
# there are at least two -arch flags with different values.
@@ -16891,7 +18700,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
fi
done
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test $ac_cv_c_bigendian = unknown; then
# See if sys/param.h defines the BYTE_ORDER macro.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16900,7 +18709,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
#include <sys/param.h>
int
-main ()
+main (void)
{
#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
&& defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
@@ -16912,7 +18721,8 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
# It does; now see whether it defined to BIG_ENDIAN or not.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -16920,7 +18730,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
#include <sys/param.h>
int
-main ()
+main (void)
{
#if BYTE_ORDER != BIG_ENDIAN
not big endian
@@ -16930,14 +18740,15 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_c_bigendian=yes
-else
+else $as_nop
ac_cv_c_bigendian=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
if test $ac_cv_c_bigendian = unknown; then
# See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
@@ -16946,7 +18757,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
#include <limits.h>
int
-main ()
+main (void)
{
#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
bogus endian macros
@@ -16956,14 +18767,15 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
# It does; now see whether it defined to _BIG_ENDIAN or not.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <limits.h>
int
-main ()
+main (void)
{
#ifndef _BIG_ENDIAN
not big endian
@@ -16973,31 +18785,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_c_bigendian=yes
-else
+else $as_nop
ac_cv_c_bigendian=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
if test $ac_cv_c_bigendian = unknown; then
# Compile a test program.
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes
+then :
# Try to guess by grepping values from an object file.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-short int ascii_mm[] =
+unsigned short int ascii_mm[] =
{ 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
+ unsigned short int ascii_ii[] =
{ 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
int use_ascii (int i) {
return ascii_mm[i] + ascii_ii[i];
}
- short int ebcdic_ii[] =
+ unsigned short int ebcdic_ii[] =
{ 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
+ unsigned short int ebcdic_mm[] =
{ 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
int use_ebcdic (int i) {
return ebcdic_mm[i] + ebcdic_ii[i];
@@ -17005,14 +18819,15 @@ short int ascii_mm[] =
extern int foo;
int
-main ()
+main (void)
{
return use_ascii (foo) == use_ebcdic (foo);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
ac_cv_c_bigendian=yes
fi
@@ -17025,13 +18840,13 @@ if ac_fn_c_try_compile "$LINENO"; then :
fi
fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
int
-main ()
+main (void)
{
/* Are we little or big endian? From Harbison&Steele. */
@@ -17047,9 +18862,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
ac_cv_c_bigendian=no
-else
+else $as_nop
ac_cv_c_bigendian=yes
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -17058,27 +18874,27 @@ fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+printf "%s\n" "$ac_cv_c_bigendian" >&6; }
case $ac_cv_c_bigendian in #(
yes)
-$as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h
-$as_echo "#define ERTS_ENDIANNESS 1" >>confdefs.h
+printf "%s\n" "#define ERTS_ENDIANNESS 1" >>confdefs.h
;; #(
no)
-$as_echo "#define ERTS_ENDIANNESS -1" >>confdefs.h
+printf "%s\n" "#define ERTS_ENDIANNESS -1" >>confdefs.h
;; #(
universal)
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
;; #(
*)
@@ -17086,30 +18902,32 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
case "$erl_xcomp_bigendian" in
yes)
-$as_echo "#define ERTS_ENDIANNESS 1" >>confdefs.h
+printf "%s\n" "#define ERTS_ENDIANNESS 1" >>confdefs.h
;;
no)
-$as_echo "#define ERTS_ENDIANNESS -1" >>confdefs.h
+printf "%s\n" "#define ERTS_ENDIANNESS -1" >>confdefs.h
;;
*)
-$as_echo "#define ERTS_ENDIANNESS 0" >>confdefs.h
+printf "%s\n" "#define ERTS_ENDIANNESS 0" >>confdefs.h
;;
esac
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether double word ordering is middle-endian" >&5
-$as_echo_n "checking whether double word ordering is middle-endian... " >&6; }
-if ${ac_cv_c_double_middle_endian+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether double word ordering is middle-endian" >&5
+printf %s "checking whether double word ordering is middle-endian... " >&6; }
+if test ${ac_cv_c_double_middle_endian+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
# It does not; compile a test program.
-if test "$cross_compiling" = yes; then :
+if test "$cross_compiling" = yes
+then :
ac_cv_c_double_middle=unknown
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
@@ -17178,9 +18996,10 @@ main(void)
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
ac_cv_c_double_middle_endian=no
-else
+else $as_nop
ac_cv_c_double_middle_endian=yes
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -17188,40 +19007,37 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_double_middle_endian" >&5
-$as_echo "$ac_cv_c_double_middle_endian" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_double_middle_endian" >&5
+printf "%s\n" "$ac_cv_c_double_middle_endian" >&6; }
case $ac_cv_c_double_middle_endian in
yes)
-$as_echo "#define DOUBLE_MIDDLE_ENDIAN 1" >>confdefs.h
+printf "%s\n" "#define DOUBLE_MIDDLE_ENDIAN 1" >>confdefs.h
;;
no)
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown double endianness
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown double endianness
presetting ac_cv_c_double_middle_endian=no (or yes) will help" >&5
-$as_echo "$as_me: WARNING: unknown double endianness
+printf "%s\n" "$as_me: WARNING: unknown double endianness
presetting ac_cv_c_double_middle_endian=no (or yes) will help" >&2;} ;;
esac
-for ac_func in fdatasync
-do :
- ac_fn_c_check_func "$LINENO" "fdatasync" "ac_cv_func_fdatasync"
-if test "x$ac_cv_func_fdatasync" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FDATASYNC 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "fdatasync" "ac_cv_func_fdatasync"
+if test "x$ac_cv_func_fdatasync" = xyes
+then :
+ printf "%s\n" "#define HAVE_FDATASYNC 1" >>confdefs.h
fi
-done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fdatasync" >&5
-$as_echo_n "checking for library containing fdatasync... " >&6; }
-if ${ac_cv_search_fdatasync+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing fdatasync" >&5
+printf %s "checking for library containing fdatasync... " >&6; }
+if test ${ac_cv_search_fdatasync+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17229,72 +19045,73 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char fdatasync ();
int
-main ()
+main (void)
{
return fdatasync ();
;
return 0;
}
_ACEOF
-for ac_lib in '' rt; do
+for ac_lib in '' rt
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_fdatasync=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_fdatasync+:} false; then :
+ if test ${ac_cv_search_fdatasync+y}
+then :
break
fi
done
-if ${ac_cv_search_fdatasync+:} false; then :
+if test ${ac_cv_search_fdatasync+y}
+then :
-else
+else $as_nop
ac_cv_search_fdatasync=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fdatasync" >&5
-$as_echo "$ac_cv_search_fdatasync" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fdatasync" >&5
+printf "%s\n" "$ac_cv_search_fdatasync" >&6; }
ac_res=$ac_cv_search_fdatasync
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
-case $host_os in
- linux*|freebsd*|dragonfly*|darwin*)
- for ac_func in sendfile
-do :
- ac_fn_c_check_func "$LINENO" "sendfile" "ac_cv_func_sendfile"
-if test "x$ac_cv_func_sendfile" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SENDFILE 1
-_ACEOF
+case $host_os in #(
+ linux*|freebsd*|dragonfly*|darwin*) :
+
+ ac_fn_c_check_func "$LINENO" "sendfile" "ac_cv_func_sendfile"
+if test "x$ac_cv_func_sendfile" = xyes
+then :
+ printf "%s\n" "#define HAVE_SENDFILE 1" >>confdefs.h
fi
-done
- ;;
- solaris*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sendfilev" >&5
-$as_echo_n "checking for library containing sendfilev... " >&6; }
-if ${ac_cv_search_sendfilev+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ ;; #(
+ solaris*) :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sendfilev" >&5
+printf %s "checking for library containing sendfilev... " >&6; }
+if test ${ac_cv_search_sendfilev+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17302,58 +19119,61 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char sendfilev ();
int
-main ()
+main (void)
{
return sendfilev ();
;
return 0;
}
_ACEOF
-for ac_lib in '' sendfile; do
+for ac_lib in '' sendfile
+do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"; then :
+ if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_search_sendfilev=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext
- if ${ac_cv_search_sendfilev+:} false; then :
+ if test ${ac_cv_search_sendfilev+y}
+then :
break
fi
done
-if ${ac_cv_search_sendfilev+:} false; then :
+if test ${ac_cv_search_sendfilev+y}
+then :
-else
+else $as_nop
ac_cv_search_sendfilev=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sendfilev" >&5
-$as_echo "$ac_cv_search_sendfilev" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sendfilev" >&5
+printf "%s\n" "$ac_cv_search_sendfilev" >&6; }
ac_res=$ac_cv_search_sendfilev
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-$as_echo "#define HAVE_SENDFILEV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SENDFILEV 1" >>confdefs.h
fi
- ;;
- win32)
+ ;; #(
+ win32) :
+
LIBS="$LIBS -lmswsock"
- ;;
- *)
- ;;
+ ;; #(
+ *) :
+ ;;
esac
@@ -17362,33 +19182,21 @@ CPPFLAGS="$CPPFLAGS $EMU_THR_DEFS"
saved_libs=$LIBS
LIBS="$LIBS $EMU_THR_X_LIBS"
-for ac_header in windows.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
-if test "x$ac_cv_header_windows_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_WINDOWS_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
+if test "x$ac_cv_header_windows_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h
fi
-done
-
-for ac_header in winsock2.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
-if test "x$ac_cv_header_winsock2_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_WINSOCK2_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
fi
-done
-
-for ac_header in ws2tcpip.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "
+ac_fn_c_check_header_compile "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
@@ -17397,17 +19205,14 @@ do :
#endif
"
-if test "x$ac_cv_header_ws2tcpip_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_WS2TCPIP_H 1
-_ACEOF
+if test "x$ac_cv_header_ws2tcpip_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h
fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5
-$as_echo_n "checking for getaddrinfo... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5
+printf %s "checking for getaddrinfo... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17428,7 +19233,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#endif
int
-main ()
+main (void)
{
getaddrinfo("","",NULL,NULL);
@@ -17437,18 +19242,19 @@ getaddrinfo("","",NULL,NULL);
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_getaddrinfo=yes
-else
+else $as_nop
have_getaddrinfo=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $have_getaddrinfo = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getaddrinfo accepts enough flags" >&5
-$as_echo_n "checking whether getaddrinfo accepts enough flags... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getaddrinfo accepts enough flags" >&5
+printf %s "checking whether getaddrinfo accepts enough flags... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17469,7 +19275,7 @@ $as_echo_n "checking whether getaddrinfo accepts enough flags... " >&6; }
#endif
int
-main ()
+main (void)
{
struct addrinfo hints, *ai;
@@ -17488,28 +19294,29 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
-else
+else $as_nop
have_getaddrinfo=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_getaddrinfo" >&5
-$as_echo "$have_getaddrinfo" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_getaddrinfo" >&5
+printf "%s\n" "$have_getaddrinfo" >&6; }
case $have_getaddrinfo in
yes)
-$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h
;;
*) ;;
esac
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getnameinfo" >&5
-$as_echo_n "checking for getnameinfo... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getnameinfo" >&5
+printf %s "checking for getnameinfo... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17530,7 +19337,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#endif
int
-main ()
+main (void)
{
getnameinfo(NULL,0,NULL,0,NULL,0,0);
@@ -17539,60 +19346,304 @@ getnameinfo(NULL,0,NULL,0,NULL,0,0);
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_getnameinfo=yes
-else
+else $as_nop
have_getnameinfo=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $have_getnameinfo = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
-$as_echo "#define HAVE_GETNAMEINFO 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GETNAMEINFO 1" >>confdefs.h
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-for ac_func in getipnodebyname getipnodebyaddr gethostbyname2
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "getipnodebyname" "ac_cv_func_getipnodebyname"
+if test "x$ac_cv_func_getipnodebyname" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETIPNODEBYNAME 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "getipnodebyaddr" "ac_cv_func_getipnodebyaddr"
+if test "x$ac_cv_func_getipnodebyaddr" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETIPNODEBYADDR 1" >>confdefs.h
+fi
+ac_fn_c_check_func "$LINENO" "gethostbyname2" "ac_cv_func_gethostbyname2"
+if test "x$ac_cv_func_gethostbyname2" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHOSTBYNAME2 1" >>confdefs.h
+
+fi
-for ac_func in ieee_handler fpsetmask finite isnan isinf res_gethostbyname dlopen \
- pread pwrite memmove strerror strerror_r strncasecmp \
- gethrtime localtime_r gmtime_r mprotect madvise posix_madvise \
- mmap mremap memcpy mallopt sbrk _sbrk __sbrk brk _brk __brk \
- flockfile fstat strlcpy strlcat setsid posix2time time2posix \
- setlocale nl_langinfo poll mlockall ppoll vsyslog
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+
+ac_fn_c_check_func "$LINENO" "ieee_handler" "ac_cv_func_ieee_handler"
+if test "x$ac_cv_func_ieee_handler" = xyes
+then :
+ printf "%s\n" "#define HAVE_IEEE_HANDLER 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "fpsetmask" "ac_cv_func_fpsetmask"
+if test "x$ac_cv_func_fpsetmask" = xyes
+then :
+ printf "%s\n" "#define HAVE_FPSETMASK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "finite" "ac_cv_func_finite"
+if test "x$ac_cv_func_finite" = xyes
+then :
+ printf "%s\n" "#define HAVE_FINITE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "isnan" "ac_cv_func_isnan"
+if test "x$ac_cv_func_isnan" = xyes
+then :
+ printf "%s\n" "#define HAVE_ISNAN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "isinf" "ac_cv_func_isinf"
+if test "x$ac_cv_func_isinf" = xyes
+then :
+ printf "%s\n" "#define HAVE_ISINF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "res_gethostbyname" "ac_cv_func_res_gethostbyname"
+if test "x$ac_cv_func_res_gethostbyname" = xyes
+then :
+ printf "%s\n" "#define HAVE_RES_GETHOSTBYNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes
+then :
+ printf "%s\n" "#define HAVE_DLOPEN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread"
+if test "x$ac_cv_func_pread" = xyes
+then :
+ printf "%s\n" "#define HAVE_PREAD 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite"
+if test "x$ac_cv_func_pwrite" = xyes
+then :
+ printf "%s\n" "#define HAVE_PWRITE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
+if test "x$ac_cv_func_memmove" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
+if test "x$ac_cv_func_strerror_r" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
+if test "x$ac_cv_func_strncasecmp" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r"
+if test "x$ac_cv_func_localtime_r" = xyes
+then :
+ printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
+if test "x$ac_cv_func_gmtime_r" = xyes
+then :
+ printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mprotect" "ac_cv_func_mprotect"
+if test "x$ac_cv_func_mprotect" = xyes
+then :
+ printf "%s\n" "#define HAVE_MPROTECT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "madvise" "ac_cv_func_madvise"
+if test "x$ac_cv_func_madvise" = xyes
+then :
+ printf "%s\n" "#define HAVE_MADVISE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "posix_madvise" "ac_cv_func_posix_madvise"
+if test "x$ac_cv_func_posix_madvise" = xyes
+then :
+ printf "%s\n" "#define HAVE_POSIX_MADVISE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = xyes
+then :
+ printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mremap" "ac_cv_func_mremap"
+if test "x$ac_cv_func_mremap" = xyes
+then :
+ printf "%s\n" "#define HAVE_MREMAP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy"
+if test "x$ac_cv_func_memcpy" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mallopt" "ac_cv_func_mallopt"
+if test "x$ac_cv_func_mallopt" = xyes
+then :
+ printf "%s\n" "#define HAVE_MALLOPT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sbrk" "ac_cv_func_sbrk"
+if test "x$ac_cv_func_sbrk" = xyes
+then :
+ printf "%s\n" "#define HAVE_SBRK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "_sbrk" "ac_cv_func__sbrk"
+if test "x$ac_cv_func__sbrk" = xyes
+then :
+ printf "%s\n" "#define HAVE__SBRK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "__sbrk" "ac_cv_func___sbrk"
+if test "x$ac_cv_func___sbrk" = xyes
+then :
+ printf "%s\n" "#define HAVE___SBRK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "brk" "ac_cv_func_brk"
+if test "x$ac_cv_func_brk" = xyes
+then :
+ printf "%s\n" "#define HAVE_BRK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "_brk" "ac_cv_func__brk"
+if test "x$ac_cv_func__brk" = xyes
+then :
+ printf "%s\n" "#define HAVE__BRK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "__brk" "ac_cv_func___brk"
+if test "x$ac_cv_func___brk" = xyes
+then :
+ printf "%s\n" "#define HAVE___BRK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "flockfile" "ac_cv_func_flockfile"
+if test "x$ac_cv_func_flockfile" = xyes
+then :
+ printf "%s\n" "#define HAVE_FLOCKFILE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "fstat" "ac_cv_func_fstat"
+if test "x$ac_cv_func_fstat" = xyes
+then :
+ printf "%s\n" "#define HAVE_FSTAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy"
+if test "x$ac_cv_func_strlcpy" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat"
+if test "x$ac_cv_func_strlcat" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRLCAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setsid" "ac_cv_func_setsid"
+if test "x$ac_cv_func_setsid" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETSID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "posix2time" "ac_cv_func_posix2time"
+if test "x$ac_cv_func_posix2time" = xyes
+then :
+ printf "%s\n" "#define HAVE_POSIX2TIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "time2posix" "ac_cv_func_time2posix"
+if test "x$ac_cv_func_time2posix" = xyes
+then :
+ printf "%s\n" "#define HAVE_TIME2POSIX 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
+if test "x$ac_cv_func_setlocale" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes
+then :
+ printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll"
+if test "x$ac_cv_func_poll" = xyes
+then :
+ printf "%s\n" "#define HAVE_POLL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mlockall" "ac_cv_func_mlockall"
+if test "x$ac_cv_func_mlockall" = xyes
+then :
+ printf "%s\n" "#define HAVE_MLOCKALL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "ppoll" "ac_cv_func_ppoll"
+if test "x$ac_cv_func_ppoll" = xyes
+then :
+ printf "%s\n" "#define HAVE_PPOLL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "vsyslog" "ac_cv_func_vsyslog"
+if test "x$ac_cv_func_vsyslog" = xyes
+then :
+ printf "%s\n" "#define HAVE_VSYSLOG 1" >>confdefs.h
fi
-done
## We have a special check for inet_pton as AC_CHECK_FUCNS does not work
## on windows 32-bit as there a macro is used to rename the symbol...
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_pton" >&5
-$as_echo_n "checking for inet_pton... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_pton" >&5
+printf %s "checking for inet_pton... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17603,77 +19654,88 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#endif
int
-main ()
+main (void)
{
inet_pton(2,"",(void*)0)
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_inet_pton=yes
-else
+else $as_nop
have_inet_pton=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $have_inet_pton = yes; then
-$as_echo "#define HAVE_INET_PTON 1" >>confdefs.h
+printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for isfinite" >&5
-$as_echo_n "checking for isfinite... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for isfinite" >&5
+printf %s "checking for isfinite... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <math.h>
int
-main ()
+main (void)
{
isfinite(0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_isfinite=yes
-else
+else $as_nop
have_isfinite=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $have_isfinite = yes; then
-$as_echo "#define HAVE_ISFINITE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ISFINITE 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-case X$erl_xcomp_posix_memalign in
- Xno) ;;
- Xyes) have_posix_memalign=yes ;;
- *)
+case X$erl_xcomp_posix_memalign in #(
+ Xno) :
+ ;; #(
+ Xyes) :
+
+ have_posix_memalign=yes
+ ;; #(
+ *) :
+
ac_fn_c_check_func "$LINENO" "posix_memalign" "ac_cv_func_posix_memalign"
-if test "x$ac_cv_func_posix_memalign" = xyes; then :
- if test "$cross_compiling" != yes; then
-if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+if test "x$ac_cv_func_posix_memalign" = xyes
+then :
+ if test "$cross_compiling" != yes
+then :
+
+if test "$cross_compiling" = yes
+then :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17688,7 +19750,8 @@ int main(void) {
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
have_posix_memalign=yes
fi
@@ -17696,95 +19759,98 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- else
+
+else $as_nop
+
have_posix_memalign=yes
- fi
+
fi
-;;
+fi
+
+ ;;
esac
if test "$have_posix_memalign" = "yes"; then
-$as_echo "#define HAVE_POSIX_MEMALIGN 1" >>confdefs.h
+printf "%s\n" "#define HAVE_POSIX_MEMALIGN 1" >>confdefs.h
fi
case $host_os in
darwin10.8.0)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for writev" >&5
-$as_echo_n "checking for writev... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; } ;;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for writev" >&5
+printf %s "checking for writev... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; } ;;
*)
- for ac_func in writev
-do :
- ac_fn_c_check_func "$LINENO" "writev" "ac_cv_func_writev"
-if test "x$ac_cv_func_writev" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_WRITEV 1
-_ACEOF
+ ac_fn_c_check_func "$LINENO" "writev" "ac_cv_func_writev"
+if test "x$ac_cv_func_writev" = xyes
+then :
+ printf "%s\n" "#define HAVE_WRITEV 1" >>confdefs.h
fi
-done
;;
esac
-ac_fn_c_check_decl "$LINENO" "posix2time" "ac_cv_have_decl_posix2time" "#include <time.h>
-"
-if test "x$ac_cv_have_decl_posix2time" = xyes; then :
+ac_fn_check_decl "$LINENO" "posix2time" "ac_cv_have_decl_posix2time" "#include <time.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_posix2time" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_POSIX2TIME $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "time2posix" "ac_cv_have_decl_time2posix" "#include <time.h>
-"
-if test "x$ac_cv_have_decl_time2posix" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_POSIX2TIME $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "time2posix" "ac_cv_have_decl_time2posix" "#include <time.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_time2posix" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TIME2POSIX $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_TIME2POSIX $ac_have_decl" >>confdefs.h
-for ac_func in vprintf
-do :
- ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
-if test "x$ac_cv_func_vprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VPRINTF 1
-_ACEOF
+ac_func=
+for ac_item in $ac_func_c_list
+do
+ if test $ac_func; then
+ ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func
+ if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then
+ echo "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_func=
+ else
+ ac_func=$ac_item
+ fi
+done
-ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = xyes; then :
+if test "x$ac_cv_func_vprintf" = xno
+then :
+ ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = xyes
+then :
-$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_DOPRNT 1" >>confdefs.h
fi
fi
-done
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for conflicting declaration of fread" >&5
-$as_echo_n "checking for conflicting declaration of fread... " >&6; }
-if ${ac_cv_func_decl_fread+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for conflicting declaration of fread" >&5
+printf %s "checking for conflicting declaration of fread... " >&6; }
+if test ${ac_cv_func_decl_fread+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
extern int fread();
char *c = (char *)fread;
@@ -17793,143 +19859,152 @@ char *c = (char *)fread;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "ac_cv_func_decl_fread=no"
-else
+else $as_nop
eval "ac_cv_func_decl_fread=yes"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
if eval "test \"`echo '$ac_cv_func_decl_'fread`\" = yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
-$as_echo "#define HAVE_CONFLICTING_FREAD_DECLARATION 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CONFLICTING_FREAD_DECLARATION 1" >>confdefs.h
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for putc_unlocked" >&5
-$as_echo_n "checking for putc_unlocked... " >&6; }
-if ${erts_cv_putc_unlocked+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for putc_unlocked" >&5
+printf %s "checking for putc_unlocked... " >&6; }
+if test ${erts_cv_putc_unlocked+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
int res = putc_unlocked('x',stdout);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_putc_unlocked=yes
-else
+else $as_nop
erts_cv_putc_unlocked=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_putc_unlocked" >&5
-$as_echo "$erts_cv_putc_unlocked" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_putc_unlocked" >&5
+printf "%s\n" "$erts_cv_putc_unlocked" >&6; }
if test $erts_cv_putc_unlocked = yes; then
-$as_echo "#define HAVE_PUTC_UNLOCKED 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PUTC_UNLOCKED 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fwrite_unlocked" >&5
-$as_echo_n "checking for fwrite_unlocked... " >&6; }
-if ${erts_cv_fwrite_unlocked+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fwrite_unlocked" >&5
+printf %s "checking for fwrite_unlocked... " >&6; }
+if test ${erts_cv_fwrite_unlocked+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
size_t res = fwrite_unlocked(NULL,sizeof(char),0,stdout);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_fwrite_unlocked=yes
-else
+else $as_nop
erts_cv_fwrite_unlocked=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_fwrite_unlocked" >&5
-$as_echo "$erts_cv_fwrite_unlocked" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_fwrite_unlocked" >&5
+printf "%s\n" "$erts_cv_fwrite_unlocked" >&6; }
if test $erts_cv_fwrite_unlocked = yes; then
-$as_echo "#define HAVE_FWRITE_UNLOCKED 1" >>confdefs.h
+printf "%s\n" "#define HAVE_FWRITE_UNLOCKED 1" >>confdefs.h
fi
-for ac_func in openpty
-do :
- ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty"
-if test "x$ac_cv_func_openpty" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_OPENPTY 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty"
+if test "x$ac_cv_func_openpty" = xyes
+then :
+ printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h
fi
-done
-for ac_header in net/if_dl.h ifaddrs.h netpacket/packet.h sys/un.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "net/if_dl.h" "ac_cv_header_net_if_dl_h" "$ac_includes_default"
+if test "x$ac_cv_header_net_if_dl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NET_IF_DL_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "ifaddrs.h" "ac_cv_header_ifaddrs_h" "$ac_includes_default"
+if test "x$ac_cv_header_ifaddrs_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_IFADDRS_H 1" >>confdefs.h
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "netpacket/packet.h" "ac_cv_header_netpacket_packet_h" "$ac_includes_default"
+if test "x$ac_cv_header_netpacket_packet_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETPACKET_PACKET_H 1" >>confdefs.h
-for ac_func in getifaddrs
-do :
- ac_fn_c_check_func "$LINENO" "getifaddrs" "ac_cv_func_getifaddrs"
-if test "x$ac_cv_func_getifaddrs" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETIFADDRS 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/un.h" "ac_cv_header_sys_un_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_un_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_UN_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "getifaddrs" "ac_cv_func_getifaddrs"
+if test "x$ac_cv_func_getifaddrs" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETIFADDRS 1" >>confdefs.h
fi
-done
ac_fn_c_check_member "$LINENO" "struct sockaddr_un" "sun_path" "ac_cv_member_struct_sockaddr_un_sun_path" "#include <sys/un.h>
"
-if test "x$ac_cv_member_struct_sockaddr_un_sun_path" = xyes; then :
+if test "x$ac_cv_member_struct_sockaddr_un_sun_path" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_UN_SUN_PATH 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_UN_SUN_PATH 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether in6addr_any is declared" >&5
-$as_echo_n "checking whether in6addr_any is declared... " >&6; }
-if ${erts_cv_have_in6addr_any+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether in6addr_any is declared" >&5
+printf %s "checking whether in6addr_any is declared... " >&6; }
+if test ${erts_cv_have_in6addr_any+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17939,7 +20014,7 @@ else
#include <stdio.h>
int
-main ()
+main (void)
{
printf("%d", in6addr_any.s6_addr[16]);
@@ -17947,31 +20022,33 @@ printf("%d", in6addr_any.s6_addr[16]);
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_have_in6addr_any=yes
-else
+else $as_nop
erts_cv_have_in6addr_any=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have_in6addr_any" >&5
-$as_echo "$erts_cv_have_in6addr_any" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have_in6addr_any" >&5
+printf "%s\n" "$erts_cv_have_in6addr_any" >&6; }
case "$erts_cv_have_in6addr_any" in
yes)
-$as_echo "#define HAVE_IN6ADDR_ANY 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IN6ADDR_ANY 1" >>confdefs.h
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether in6addr_loopback is declared" >&5
-$as_echo_n "checking whether in6addr_loopback is declared... " >&6; }
-if ${erts_cv_have_in6addr_loopback+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether in6addr_loopback is declared" >&5
+printf %s "checking whether in6addr_loopback is declared... " >&6; }
+if test ${erts_cv_have_in6addr_loopback+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -17981,7 +20058,7 @@ else
#include <stdio.h>
int
-main ()
+main (void)
{
printf("%d", in6addr_loopback.s6_addr[16]);
@@ -17989,81 +20066,76 @@ printf("%d", in6addr_loopback.s6_addr[16]);
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_have_in6addr_loopback=yes
-else
+else $as_nop
erts_cv_have_in6addr_loopback=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have_in6addr_loopback" >&5
-$as_echo "$erts_cv_have_in6addr_loopback" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have_in6addr_loopback" >&5
+printf "%s\n" "$erts_cv_have_in6addr_loopback" >&6; }
case "$erts_cv_have_in6addr_loopback" in
yes)
-$as_echo "#define HAVE_IN6ADDR_LOOPBACK 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IN6ADDR_LOOPBACK 1" >>confdefs.h
esac
-ac_fn_c_check_decl "$LINENO" "IN6ADDR_ANY_INIT" "ac_cv_have_decl_IN6ADDR_ANY_INIT" "
+ac_fn_check_decl "$LINENO" "IN6ADDR_ANY_INIT" "ac_cv_have_decl_IN6ADDR_ANY_INIT" "
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
-"
-if test "x$ac_cv_have_decl_IN6ADDR_ANY_INIT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_IN6ADDR_ANY_INIT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_IN6ADDR_ANY_INIT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "IN6ADDR_LOOPBACK_INIT" "ac_cv_have_decl_IN6ADDR_LOOPBACK_INIT" "
+printf "%s\n" "#define HAVE_DECL_IN6ADDR_ANY_INIT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "IN6ADDR_LOOPBACK_INIT" "ac_cv_have_decl_IN6ADDR_LOOPBACK_INIT" "
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
-"
-if test "x$ac_cv_have_decl_IN6ADDR_LOOPBACK_INIT" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_IN6ADDR_LOOPBACK_INIT" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_IN6ADDR_LOOPBACK_INIT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "IPV6_V6ONLY" "ac_cv_have_decl_IPV6_V6ONLY" "
+printf "%s\n" "#define HAVE_DECL_IN6ADDR_LOOPBACK_INIT $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "IPV6_V6ONLY" "ac_cv_have_decl_IPV6_V6ONLY" "
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
-"
-if test "x$ac_cv_have_decl_IPV6_V6ONLY" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_IPV6_V6ONLY" = xyes
+then :
ac_have_decl=1
-else
+else $as_nop
ac_have_decl=0
fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_IPV6_V6ONLY $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_IPV6_V6ONLY $ac_have_decl" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_getaffinity/sched_setaffinity" >&5
-$as_echo_n "checking for sched_getaffinity/sched_setaffinity... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_getaffinity/sched_setaffinity" >&5
+printf %s "checking for sched_getaffinity/sched_setaffinity... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sched.h>
int
-main ()
+main (void)
{
#ifndef CPU_SETSIZE
@@ -18082,29 +20154,30 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
sched_xetaffinity=yes
-else
+else $as_nop
sched_xetaffinity=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sched_xetaffinity" >&5
-$as_echo "$sched_xetaffinity" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $sched_xetaffinity" >&5
+printf "%s\n" "$sched_xetaffinity" >&6; }
if test $sched_xetaffinity = yes; then
-$as_echo "#define HAVE_SCHED_xETAFFINITY 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SCHED_xETAFFINITY 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pset functionality" >&5
-$as_echo_n "checking for pset functionality... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pset functionality" >&5
+printf %s "checking for pset functionality... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/pset.h>
int
-main ()
+main (void)
{
int res;
@@ -18119,23 +20192,24 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
pset_functionality=yes
-else
+else $as_nop
pset_functionality=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pset_functionality" >&5
-$as_echo "$pset_functionality" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pset_functionality" >&5
+printf "%s\n" "$pset_functionality" >&6; }
if test $pset_functionality = yes; then
-$as_echo "#define HAVE_PSET 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PSET 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for processor_bind functionality" >&5
-$as_echo_n "checking for processor_bind functionality... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for processor_bind functionality" >&5
+printf %s "checking for processor_bind functionality... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -18144,7 +20218,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#include <sys/procset.h>
int
-main ()
+main (void)
{
int res = processor_bind(P_LWPID, P_MYID, PBIND_NONE, NULL);
@@ -18153,23 +20227,24 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
processor_bind_functionality=yes
-else
+else $as_nop
processor_bind_functionality=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $processor_bind_functionality" >&5
-$as_echo "$processor_bind_functionality" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $processor_bind_functionality" >&5
+printf "%s\n" "$processor_bind_functionality" >&6; }
if test $processor_bind_functionality = yes; then
-$as_echo "#define HAVE_PROCESSOR_BIND 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PROCESSOR_BIND 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cpuset_getaffinity/cpuset_setaffinity" >&5
-$as_echo_n "checking for cpuset_getaffinity/cpuset_setaffinity... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cpuset_getaffinity/cpuset_setaffinity" >&5
+printf %s "checking for cpuset_getaffinity/cpuset_setaffinity... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -18177,7 +20252,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#include <sys/cpuset.h>
int
-main ()
+main (void)
{
int res;
@@ -18193,91 +20268,98 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
cpuset_xetaffinity=yes
-else
+else $as_nop
cpuset_xetaffinity=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cpuset_xetaffinity" >&5
-$as_echo "$cpuset_xetaffinity" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cpuset_xetaffinity" >&5
+printf "%s\n" "$cpuset_xetaffinity" >&6; }
if test $cpuset_xetaffinity = yes; then
-$as_echo "#define HAVE_CPUSET_xETAFFINITY 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CPUSET_xETAFFINITY 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for 'end' symbol" >&5
-$as_echo_n "checking for 'end' symbol... " >&6; }
-if ${erts_cv_have_end_symbol+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 'end' symbol" >&5
+printf %s "checking for 'end' symbol... " >&6; }
+if test ${erts_cv_have_end_symbol+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
extern char end; {char *x = &end; *x= 0;}
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_have_end_symbol=yes
-else
+else $as_nop
erts_cv_have_end_symbol=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have_end_symbol" >&5
-$as_echo "$erts_cv_have_end_symbol" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have_end_symbol" >&5
+printf "%s\n" "$erts_cv_have_end_symbol" >&6; }
if test $erts_cv_have_end_symbol = yes; then
-$as_echo "#define HAVE_END_SYMBOL 1" >>confdefs.h
+printf "%s\n" "#define HAVE_END_SYMBOL 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for '_end' symbol" >&5
-$as_echo_n "checking for '_end' symbol... " >&6; }
-if ${erts_cv_have__end_symbol+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for '_end' symbol" >&5
+printf %s "checking for '_end' symbol... " >&6; }
+if test ${erts_cv_have__end_symbol+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
extern char _end; {char *x = &_end; *x= 0;}
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_have__end_symbol=yes
-else
+else $as_nop
erts_cv_have__end_symbol=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have__end_symbol" >&5
-$as_echo "$erts_cv_have__end_symbol" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_have__end_symbol" >&5
+printf "%s\n" "$erts_cv_have__end_symbol" >&6; }
if test $erts_cv_have__end_symbol = yes; then
-$as_echo "#define HAVE__END_SYMBOL 1" >>confdefs.h
+printf "%s\n" "#define HAVE__END_SYMBOL 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __after_morecore_hook can track malloc()s core memory use" >&5
-$as_echo_n "checking if __after_morecore_hook can track malloc()s core memory use... " >&6; }
-if ${erts_cv___after_morecore_hook_can_track_malloc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if __after_morecore_hook can track malloc()s core memory use" >&5
+printf %s "checking if __after_morecore_hook can track malloc()s core memory use... " >&6; }
+if test ${erts_cv___after_morecore_hook_can_track_malloc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
case X$erl_xcomp_after_morecore_hook in
X) erts_cv___after_morecore_hook_can_track_malloc=cross;;
@@ -18286,7 +20368,7 @@ else
esac
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -18413,9 +20495,10 @@ int main(void)
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
erts_cv___after_morecore_hook_can_track_malloc=yes
-else
+else $as_nop
erts_cv___after_morecore_hook_can_track_malloc=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -18423,24 +20506,27 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv___after_morecore_hook_can_track_malloc" >&5
-$as_echo "$erts_cv___after_morecore_hook_can_track_malloc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv___after_morecore_hook_can_track_malloc" >&5
+printf "%s\n" "$erts_cv___after_morecore_hook_can_track_malloc" >&6; }
case $erts_cv___after_morecore_hook_can_track_malloc in
yes)
-$as_echo "#define ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC 1" >>confdefs.h
+printf "%s\n" "#define ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC 1" >>confdefs.h
;;
- cross) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result no guessed because of cross compilation" >&2;};;
+ cross) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result no guessed because of cross compilation" >&2;};;
*) ;;
esac
-if test "x$ac_cv_func_sbrk" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of sbrk()s return value and argument" >&5
-$as_echo_n "checking types of sbrk()s return value and argument... " >&6; }
-if ${erts_cv_sbrk_ret_arg_types+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "x$ac_cv_func_sbrk" = "xyes"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking types of sbrk()s return value and argument" >&5
+printf %s "checking types of sbrk()s return value and argument... " >&6; }
+if test ${erts_cv_sbrk_ret_arg_types+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
erts_cv_sbrk_ret_arg_types=unknown
@@ -18455,17 +20541,18 @@ else
#include <sys/types.h>
#include <unistd.h>
int
-main ()
+main (void)
{
$rtype sbrk($atype incr);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_sbrk_ret_arg_types="$rtype,$atype"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
IFS=","
if test "$erts_cv_sbrk_ret_arg_types" != "unknown"; then
@@ -18475,8 +20562,8 @@ rm -f core conftest.err conftest.$ac_objext \
done
IFS=$save_ifs
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_sbrk_ret_arg_types" >&5
-$as_echo "$erts_cv_sbrk_ret_arg_types" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_sbrk_ret_arg_types" >&5
+printf "%s\n" "$erts_cv_sbrk_ret_arg_types" >&6; }
if test "$erts_cv_sbrk_ret_arg_types" != "unknown"; then
save_ifs="$IFS"; IFS=","
@@ -18485,24 +20572,24 @@ $erts_cv_sbrk_ret_arg_types
EOF
IFS=$save_ifs
-cat >>confdefs.h <<_ACEOF
-#define SBRK_RET_TYPE $ret_type
-_ACEOF
+printf "%s\n" "#define SBRK_RET_TYPE $ret_type" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define SBRK_ARG_TYPE $arg_type
-_ACEOF
+printf "%s\n" "#define SBRK_ARG_TYPE $arg_type" >>confdefs.h
fi
+
fi
-if test $ac_cv_func_brk = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of brk()s return value and argument" >&5
-$as_echo_n "checking types of brk()s return value and argument... " >&6; }
-if ${erts_cv_brk_ret_arg_types+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test $ac_cv_func_brk = yes
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking types of brk()s return value and argument" >&5
+printf %s "checking types of brk()s return value and argument... " >&6; }
+if test ${erts_cv_brk_ret_arg_types+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
erts_cv_brk_ret_arg_types=unknown
@@ -18517,17 +20604,18 @@ else
#include <sys/types.h>
#include <unistd.h>
int
-main ()
+main (void)
{
$rtype brk($atype endds);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erts_cv_brk_ret_arg_types="$rtype,$atype"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
IFS=","
if test "$erts_cv_brk_ret_arg_types" != "unknown"; then
@@ -18537,8 +20625,8 @@ rm -f core conftest.err conftest.$ac_objext \
done
IFS=$save_ifs
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_brk_ret_arg_types" >&5
-$as_echo "$erts_cv_brk_ret_arg_types" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_brk_ret_arg_types" >&5
+printf "%s\n" "$erts_cv_brk_ret_arg_types" >&6; }
if test "$erts_cv_brk_ret_arg_types" != "unknown"; then
save_ifs="$IFS"; IFS=","
@@ -18547,27 +20635,27 @@ $erts_cv_brk_ret_arg_types
EOF
IFS=$save_ifs
-cat >>confdefs.h <<_ACEOF
-#define BRK_RET_TYPE $ret_type
-_ACEOF
+printf "%s\n" "#define BRK_RET_TYPE $ret_type" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define BRK_ARG_TYPE $arg_type
-_ACEOF
+printf "%s\n" "#define BRK_ARG_TYPE $arg_type" >>confdefs.h
fi
fi
-if test $ac_cv_func_sbrk = yes; then
+if test $ac_cv_func_sbrk = yes
+then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sbrk()/brk() wrappers can track malloc()s core memory use" >&5
-$as_echo_n "checking if sbrk()/brk() wrappers can track malloc()s core memory use... " >&6; }
-if ${erts_cv_brk_wrappers_can_track_malloc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if sbrk()/brk() wrappers can track malloc()s core memory use" >&5
+printf %s "checking if sbrk()/brk() wrappers can track malloc()s core memory use... " >&6; }
+if test ${erts_cv_brk_wrappers_can_track_malloc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
case X$erl_xcomp_dlsym_brk_wrappers in
X) erts_cv_brk_wrappers_can_track_malloc=cross;;
@@ -18575,7 +20663,7 @@ else
*) as_fn_error $? "Bad erl_xcomp_dlsym_brk_wrappers value: $erl_xcomp_dlsym_brk_wrappers" "$LINENO" 5;;
esac
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -18745,9 +20833,10 @@ int main(void)
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
erts_cv_brk_wrappers_can_track_malloc=yes
-else
+else $as_nop
erts_cv_brk_wrappers_can_track_malloc=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -18755,18 +20844,19 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erts_cv_brk_wrappers_can_track_malloc" >&5
-$as_echo "$erts_cv_brk_wrappers_can_track_malloc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erts_cv_brk_wrappers_can_track_malloc" >&5
+printf "%s\n" "$erts_cv_brk_wrappers_can_track_malloc" >&6; }
case $erts_cv_brk_wrappers_can_track_malloc in
yes)
-$as_echo "#define ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC 1" >>confdefs.h
+printf "%s\n" "#define ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC 1" >>confdefs.h
;;
cross)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result no guessed because of cross compilation" >&2;};;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result no guessed because of cross compilation" >&2;};;
*) ;;
esac
+
fi
LIBS=$saved_libs
@@ -18775,17 +20865,18 @@ CPPFLAGS=$saved_cppflags
case $ARCH in
x86|amd64)
-$as_echo "#define ERTS_STRUCTURE_ALIGNED_ALLOC 1" >>confdefs.h
+printf "%s\n" "#define ERTS_STRUCTURE_ALIGNED_ALLOC 1" >>confdefs.h
;;
*)
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for IP version 6 support" >&5
-$as_echo_n "checking for IP version 6 support... " >&6; }
-if ${ac_cv_sys_ipv6_support+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IP version 6 support" >&5
+printf %s "checking for IP version 6 support... " >&6; }
+if test ${ac_cv_sys_ipv6_support+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ok_so_far=yes
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -18797,23 +20888,28 @@ else
#include <netinet/in.h>
#endif
int
-main ()
+main (void)
{
struct in6_addr a6; struct sockaddr_in6 s6;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ok_so_far=yes
-else
+else $as_nop
ok_so_far=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+if test $ok_so_far = yes
+then :
-if test $ok_so_far = yes; then
ac_cv_sys_ipv6_support=yes
-else
+
+else $as_nop
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
@@ -18824,19 +20920,21 @@ else
#include <netinet/in.h>
#endif
int
-main ()
+main (void)
{
struct in_addr6 a6; struct sockaddr_in6 s6;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_sys_ipv6_support=in_addr6
-else
+else $as_nop
ac_cv_sys_ipv6_support=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
fi
fi
@@ -18844,34 +20942,36 @@ fi
case ${ac_cv_sys_ipv6_support} in
yes)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
-$as_echo "#define HAVE_IN6 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IN6 1" >>confdefs.h
;;
in_addr6)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (but I am redefining in_addr6 to in6_addr)" >&5
-$as_echo "yes (but I am redefining in_addr6 to in6_addr)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (but I am redefining in_addr6 to in6_addr)" >&5
+printf "%s\n" "yes (but I am redefining in_addr6 to in6_addr)" >&6; }
-$as_echo "#define HAVE_IN6 1" >>confdefs.h
+printf "%s\n" "#define HAVE_IN6 1" >>confdefs.h
-$as_echo "#define HAVE_IN_ADDR6_STRUCT /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_IN_ADDR6_STRUCT /**/" >>confdefs.h
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multicast support" >&5
-$as_echo_n "checking for multicast support... " >&6; }
-if ${ac_cv_sys_multicast_support+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multicast support" >&5
+printf %s "checking for multicast support... " >&6; }
+if test ${ac_cv_sys_multicast_support+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/socket.h>
@@ -18882,19 +20982,20 @@ yes
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "^yes$" >/dev/null 2>&1; then :
+ $EGREP "^yes$" >/dev/null 2>&1
+then :
ac_cv_sys_multicast_support=yes
-else
+else $as_nop
ac_cv_sys_multicast_support=no
fi
-rm -f conftest*
+rm -rf conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_multicast_support" >&5
-$as_echo "$ac_cv_sys_multicast_support" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_multicast_support" >&5
+printf "%s\n" "$ac_cv_sys_multicast_support" >&6; }
if test $ac_cv_sys_multicast_support = yes; then
-$as_echo "#define HAVE_MULTICAST_SUPPORT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MULTICAST_SUPPORT 1" >>confdefs.h
fi
@@ -18902,43 +21003,48 @@ fi
# Check whether --with-clock-resolution was given.
-if test "${with_clock_resolution+set}" = set; then :
+if test ${with_clock_resolution+y}
+then :
withval=$with_clock_resolution;
fi
# Check whether --with-clock-gettime-realtime-id was given.
-if test "${with_clock_gettime_realtime_id+set}" = set; then :
+if test ${with_clock_gettime_realtime_id+y}
+then :
withval=$with_clock_gettime_realtime_id;
fi
# Check whether --with-clock-gettime-monotonic-id was given.
-if test "${with_clock_gettime_monotonic_id+set}" = set; then :
+if test ${with_clock_gettime_monotonic_id+y}
+then :
withval=$with_clock_gettime_monotonic_id;
fi
# Check whether --enable-prefer-elapsed-monotonic-time-during-suspend was given.
-if test "${enable_prefer_elapsed_monotonic_time_during_suspend+set}" = set; then :
+if test ${enable_prefer_elapsed_monotonic_time_during_suspend+y}
+then :
enableval=$enable_prefer_elapsed_monotonic_time_during_suspend; case "$enableval" in
yes) prefer_elapsed_monotonic_time_during_suspend=yes ;;
*) prefer_elapsed_monotonic_time_during_suspend=no ;;
esac
-else
+else $as_nop
prefer_elapsed_monotonic_time_during_suspend=no
fi
# Check whether --enable-gettimeofday-as-os-system-time was given.
-if test "${enable_gettimeofday_as_os_system_time+set}" = set; then :
+if test ${enable_gettimeofday_as_os_system_time+y}
+then :
enableval=$enable_gettimeofday_as_os_system_time; case "$enableval" in
yes) force_gettimeofday_os_system_time=yes ;;
*) force_gettimeofday_os_system_time=no ;;
esac
-else
+else $as_nop
force_gettimeofday_os_system_time=no
fi
@@ -18953,28 +21059,28 @@ case "$with_clock_resolution" in
;;
esac
-if test "$force_gettimeofday_os_system_time" = "yes"; then
+if test "$force_gettimeofday_os_system_time" = "yes"
+then :
+
- for ac_func in gettimeofday
-do :
ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
-if test "x$ac_cv_func_gettimeofday" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETTIMEOFDAY 1
-_ACEOF
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
fi
-done
if test "$ac_cv_func_gettimeofday" = "yes"; then
-$as_echo "#define OS_SYSTEM_TIME_GETTIMEOFDAY 1" >>confdefs.h
+printf "%s\n" "#define OS_SYSTEM_TIME_GETTIMEOFDAY 1" >>confdefs.h
else
as_fn_error $? "No gettimeofday() available" "$LINENO" 5
fi
-else # $force_gettimeofday_os_system_time != yes
+else $as_nop
+
+ # $force_gettimeofday_os_system_time != yes
case "$with_clock_gettime_realtime_id" in
""|no)
@@ -18993,8 +21099,9 @@ case "$with_clock_gettime_realtime_id" in
;;
esac
-case "$with_clock_resolution-$with_clock_gettime_realtime_id" in
- high-no)
+case "$with_clock_resolution-$with_clock_gettime_realtime_id" in #(
+ high-no) :
+
default_resolution_clock_gettime_wall="CLOCK_REALTIME"
low_resolution_clock_gettime_wall="CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST"
@@ -19020,11 +21127,12 @@ case "$with_clock_resolution-$with_clock_gettime_realtime_id" in
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19033,30 +21141,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -19070,11 +21177,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
-if ${erl_cv_clock_gettime_wall_high_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
+if test ${erl_cv_clock_gettime_wall_high_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_wall $default_resolution_clock_gettime_wall $high_resolution_clock_gettime_wall $low_resolution_clock_gettime_wall; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19084,7 +21192,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -19097,46 +21205,56 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_wall_high_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_wall_high_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_wall_high_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_high_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_wall_high_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_high_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_wall_high_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- check_for_clock_getres=
- else
- check_for_clock_getres=clock_getres
- fi
+ if test "$LD_MAY_BE_WEAK" = "no"
+then :
- for ac_func in $check_for_clock_getres clock_get_attributes gettimeofday
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with wall clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_wall+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
+
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
+printf %s "checking for mach clock_get_time() with wall clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_wall+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -19145,7 +21263,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -19160,16 +21278,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_wall=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_wall=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
-$as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_lib=
erl_wall_clock_low_resolution=no
@@ -19201,8 +21320,10 @@ $as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_func=none
;;
esac
-;;
- low-no)
+
+ ;; #(
+ low-no) :
+
default_resolution_clock_gettime_wall="CLOCK_REALTIME"
low_resolution_clock_gettime_wall="CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST"
@@ -19228,11 +21349,12 @@ $as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19241,30 +21363,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -19278,11 +21399,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
-if ${erl_cv_clock_gettime_wall_low_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
+if test ${erl_cv_clock_gettime_wall_low_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_wall $default_resolution_clock_gettime_wall $high_resolution_clock_gettime_wall $low_resolution_clock_gettime_wall; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19292,7 +21414,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -19305,46 +21427,56 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_wall_low_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_wall_low_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_wall_low_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_low_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_wall_low_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_low_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_wall_low_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- check_for_clock_getres=
- else
- check_for_clock_getres=clock_getres
- fi
+ if test "$LD_MAY_BE_WEAK" = "no"
+then :
- for ac_func in $check_for_clock_getres clock_get_attributes gettimeofday
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with wall clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_wall+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
+
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
+printf %s "checking for mach clock_get_time() with wall clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_wall+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -19353,7 +21485,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -19368,16 +21500,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_wall=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_wall=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
-$as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_lib=
erl_wall_clock_low_resolution=no
@@ -19409,8 +21542,10 @@ $as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_func=none
;;
esac
-;;
- default-no)
+
+ ;; #(
+ default-no) :
+
default_resolution_clock_gettime_wall="CLOCK_REALTIME"
low_resolution_clock_gettime_wall="CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST"
@@ -19436,11 +21571,12 @@ $as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19449,30 +21585,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -19486,11 +21621,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
-if ${erl_cv_clock_gettime_wall_default_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
+if test ${erl_cv_clock_gettime_wall_default_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_wall $default_resolution_clock_gettime_wall $high_resolution_clock_gettime_wall $low_resolution_clock_gettime_wall; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19500,7 +21636,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -19513,46 +21649,56 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_wall_default_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_wall_default_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_wall_default_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_default_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_wall_default_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_default_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_wall_default_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- check_for_clock_getres=
- else
- check_for_clock_getres=clock_getres
- fi
+ if test "$LD_MAY_BE_WEAK" = "no"
+then :
- for ac_func in $check_for_clock_getres clock_get_attributes gettimeofday
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with wall clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_wall+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
+
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
+printf %s "checking for mach clock_get_time() with wall clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_wall+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -19561,7 +21707,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -19576,16 +21722,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_wall=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_wall=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
-$as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_lib=
erl_wall_clock_low_resolution=no
@@ -19617,8 +21764,10 @@ $as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_func=none
;;
esac
-;;
- *)
+
+ ;; #(
+ *) :
+
default_resolution_clock_gettime_wall="CLOCK_REALTIME"
low_resolution_clock_gettime_wall="CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST"
@@ -19644,11 +21793,12 @@ $as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19657,30 +21807,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -19694,11 +21843,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
-if ${erl_cv_clock_gettime_wall_custom_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}wall clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}wall clock type... " >&6; }
+if test ${erl_cv_clock_gettime_wall_custom_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_wall $default_resolution_clock_gettime_wall $high_resolution_clock_gettime_wall $low_resolution_clock_gettime_wall; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19708,7 +21858,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -19721,46 +21871,56 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_wall_custom_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_wall_custom_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_wall_custom_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_custom_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_wall_custom_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_wall_custom_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_wall_custom_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- check_for_clock_getres=
- else
- check_for_clock_getres=clock_getres
- fi
+ if test "$LD_MAY_BE_WEAK" = "no"
+then :
- for ac_func in $check_for_clock_getres clock_get_attributes gettimeofday
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with wall clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_wall+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
+
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with wall clock type" >&5
+printf %s "checking for mach clock_get_time() with wall clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_wall+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -19769,7 +21929,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -19784,16 +21944,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_wall=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_wall=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
-$as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_wall" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_lib=
erl_wall_clock_low_resolution=no
@@ -19825,7 +21986,8 @@ $as_echo "$erl_cv_mach_clock_get_time_wall" >&6; }
erl_wall_clock_func=none
;;
esac
-;;
+
+ ;;
esac
case "$erl_wall_clock_func-$erl_wall_clock_id-$with_clock_gettime_realtime_id" in
@@ -19844,17 +22006,17 @@ case $erl_wall_clock_func in
;;
mach_clock_get_time)
-$as_echo "#define OS_SYSTEM_TIME_USING_MACH_CLOCK_GET_TIME 1" >>confdefs.h
+printf "%s\n" "#define OS_SYSTEM_TIME_USING_MACH_CLOCK_GET_TIME 1" >>confdefs.h
;;
clock_gettime)
-$as_echo "#define OS_SYSTEM_TIME_USING_CLOCK_GETTIME 1" >>confdefs.h
+printf "%s\n" "#define OS_SYSTEM_TIME_USING_CLOCK_GETTIME 1" >>confdefs.h
;;
gettimeofday)
-$as_echo "#define OS_SYSTEM_TIME_GETTIMEOFDAY 1" >>confdefs.h
+printf "%s\n" "#define OS_SYSTEM_TIME_GETTIMEOFDAY 1" >>confdefs.h
;;
*)
@@ -19863,17 +22025,14 @@ esac
if test "x$erl_wall_clock_id" != "x"; then
-cat >>confdefs.h <<_ACEOF
-#define WALL_CLOCK_ID_STR "$erl_wall_clock_id"
-_ACEOF
+printf "%s\n" "#define WALL_CLOCK_ID_STR \"$erl_wall_clock_id\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define WALL_CLOCK_ID $erl_wall_clock_id
-_ACEOF
+printf "%s\n" "#define WALL_CLOCK_ID $erl_wall_clock_id" >>confdefs.h
fi
+
fi # $force_gettimeofday_os_system_time != yes
case "$with_clock_gettime_monotonic_id" in
@@ -19893,8 +22052,9 @@ case "$with_clock_gettime_monotonic_id" in
;;
esac
-case "$with_clock_resolution-$with_clock_gettime_monotonic_id" in
- high-no)
+case "$with_clock_resolution-$with_clock_gettime_monotonic_id" in #(
+ high-no) :
+
if test "$prefer_elapsed_monotonic_time_during_suspend" = "yes"; then
default_resolution_clock_gettime_monotonic="CLOCK_HIGHRES CLOCK_BOOTTIME CLOCK_MONOTONIC"
@@ -19926,11 +22086,12 @@ case "$with_clock_resolution-$with_clock_gettime_monotonic_id" in
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19939,30 +22100,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -19976,11 +22136,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
-$as_echo_n "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_raw+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
+printf %s "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_raw+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -19989,7 +22150,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20002,23 +22163,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_raw=yes
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_raw=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_raw" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_raw" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_high_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_high_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_monotonic $default_resolution_clock_gettime_monotonic $high_resolution_clock_gettime_monotonic $low_resolution_clock_gettime_monotonic; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20028,7 +22191,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20041,56 +22204,70 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_high_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_high_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_monotonic_high_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_high_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_high_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_high_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_high_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- for ac_func in clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ if test "$LD_MAY_BE_WEAK" != "no"
+then :
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
- else
- for ac_func in clock_getres clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+
+else $as_nop
+
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
- fi
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with monotonic clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_monotonic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
+printf %s "checking for mach clock_get_time() with monotonic clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_monotonic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -20099,7 +22276,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -20114,16 +22291,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_monotonic=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_monotonic=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
-$as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_monotonic" >&6; }
erl_corrected_monotonic_clock=no
case $erl_cv_clock_gettime_monotonic_high_resolution-$ac_cv_func_gethrtime-$erl_cv_mach_clock_get_time_monotonic-$host_os in
@@ -20185,8 +22363,10 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
;;
esac
-;;
- low-no)
+
+ ;; #(
+ low-no) :
+
if test "$prefer_elapsed_monotonic_time_during_suspend" = "yes"; then
default_resolution_clock_gettime_monotonic="CLOCK_HIGHRES CLOCK_BOOTTIME CLOCK_MONOTONIC"
@@ -20218,11 +22398,12 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20231,30 +22412,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -20268,11 +22448,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
-$as_echo_n "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_raw+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
+printf %s "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_raw+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -20281,7 +22462,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20294,23 +22475,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_raw=yes
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_raw=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_raw" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_raw" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_low_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_low_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_monotonic $default_resolution_clock_gettime_monotonic $high_resolution_clock_gettime_monotonic $low_resolution_clock_gettime_monotonic; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20320,7 +22503,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20333,56 +22516,70 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_low_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_low_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_monotonic_low_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_low_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_low_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_low_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_low_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- for ac_func in clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ if test "$LD_MAY_BE_WEAK" != "no"
+then :
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
- else
- for ac_func in clock_getres clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+
+else $as_nop
+
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
- fi
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with monotonic clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_monotonic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
+printf %s "checking for mach clock_get_time() with monotonic clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_monotonic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -20391,7 +22588,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -20406,16 +22603,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_monotonic=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_monotonic=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
-$as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_monotonic" >&6; }
erl_corrected_monotonic_clock=no
case $erl_cv_clock_gettime_monotonic_low_resolution-$ac_cv_func_gethrtime-$erl_cv_mach_clock_get_time_monotonic-$host_os in
@@ -20477,8 +22675,10 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
;;
esac
-;;
- default-no)
+
+ ;; #(
+ default-no) :
+
if test "$prefer_elapsed_monotonic_time_during_suspend" = "yes"; then
default_resolution_clock_gettime_monotonic="CLOCK_HIGHRES CLOCK_BOOTTIME CLOCK_MONOTONIC"
@@ -20510,11 +22710,12 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20523,30 +22724,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -20560,11 +22760,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
-$as_echo_n "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_raw+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
+printf %s "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_raw+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -20573,7 +22774,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20586,23 +22787,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_raw=yes
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_raw=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_raw" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_raw" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_default_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_default_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_monotonic $default_resolution_clock_gettime_monotonic $high_resolution_clock_gettime_monotonic $low_resolution_clock_gettime_monotonic; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20612,7 +22815,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20625,56 +22828,70 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_default_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_default_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_monotonic_default_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_default_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_default_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_default_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_default_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- for ac_func in clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ if test "$LD_MAY_BE_WEAK" != "no"
+then :
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
- else
- for ac_func in clock_getres clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+
+else $as_nop
+
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
- fi
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with monotonic clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_monotonic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
+printf %s "checking for mach clock_get_time() with monotonic clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_monotonic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -20683,7 +22900,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -20698,16 +22915,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_monotonic=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_monotonic=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
-$as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_monotonic" >&6; }
erl_corrected_monotonic_clock=no
case $erl_cv_clock_gettime_monotonic_default_resolution-$ac_cv_func_gethrtime-$erl_cv_mach_clock_get_time_monotonic-$host_os in
@@ -20769,8 +22987,10 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
;;
esac
-;;
- *)
+
+ ;; #(
+ *) :
+
if test "$prefer_elapsed_monotonic_time_during_suspend" = "yes"; then
default_resolution_clock_gettime_monotonic="CLOCK_HIGHRES CLOCK_BOOTTIME CLOCK_MONOTONIC"
@@ -20802,11 +23022,12 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20815,30 +23036,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -20852,11 +23072,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
-$as_echo_n "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_raw+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
+printf %s "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_raw+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -20865,7 +23086,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20878,23 +23099,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_raw=yes
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_raw=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_raw" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_raw" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_custom_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_custom_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_monotonic $default_resolution_clock_gettime_monotonic $high_resolution_clock_gettime_monotonic $low_resolution_clock_gettime_monotonic; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20904,7 +23127,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -20917,56 +23140,70 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_custom_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_custom_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_monotonic_custom_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_custom_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_custom_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_custom_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_custom_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- for ac_func in clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ if test "$LD_MAY_BE_WEAK" != "no"
+then :
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
- else
- for ac_func in clock_getres clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+
+else $as_nop
+
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
- fi
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with monotonic clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_monotonic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
+printf %s "checking for mach clock_get_time() with monotonic clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_monotonic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -20975,7 +23212,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -20990,16 +23227,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_monotonic=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_monotonic=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
-$as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_monotonic" >&6; }
erl_corrected_monotonic_clock=no
case $erl_cv_clock_gettime_monotonic_custom_resolution-$ac_cv_func_gethrtime-$erl_cv_mach_clock_get_time_monotonic-$host_os in
@@ -21061,7 +23299,8 @@ $as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
;;
esac
-;;
+
+ ;;
esac
case "$erl_monotonic_clock_func-$erl_monotonic_clock_id-$with_clock_gettime_monotonic_id" in
@@ -21077,22 +23316,22 @@ esac
case $erl_monotonic_clock_func in
times)
-$as_echo "#define OS_MONOTONIC_TIME_USING_TIMES 1" >>confdefs.h
+printf "%s\n" "#define OS_MONOTONIC_TIME_USING_TIMES 1" >>confdefs.h
;;
mach_clock_get_time)
-$as_echo "#define OS_MONOTONIC_TIME_USING_MACH_CLOCK_GET_TIME 1" >>confdefs.h
+printf "%s\n" "#define OS_MONOTONIC_TIME_USING_MACH_CLOCK_GET_TIME 1" >>confdefs.h
;;
clock_gettime)
-$as_echo "#define OS_MONOTONIC_TIME_USING_CLOCK_GETTIME 1" >>confdefs.h
+printf "%s\n" "#define OS_MONOTONIC_TIME_USING_CLOCK_GETTIME 1" >>confdefs.h
;;
gethrtime)
-$as_echo "#define OS_MONOTONIC_TIME_USING_GETHRTIME 1" >>confdefs.h
+printf "%s\n" "#define OS_MONOTONIC_TIME_USING_GETHRTIME 1" >>confdefs.h
;;
*)
@@ -21101,13 +23340,13 @@ esac
if test $erl_corrected_monotonic_clock = yes; then
-$as_echo "#define ERTS_HAVE_CORRECTED_OS_MONOTONIC_TIME 1" >>confdefs.h
+printf "%s\n" "#define ERTS_HAVE_CORRECTED_OS_MONOTONIC_TIME 1" >>confdefs.h
fi
if test $erl_monotonic_clock_low_resolution = yes; then
-$as_echo "#define ERTS_HAVE_LOW_RESOLUTION_OS_MONOTONIC_LOW 1" >>confdefs.h
+printf "%s\n" "#define ERTS_HAVE_LOW_RESOLUTION_OS_MONOTONIC_LOW 1" >>confdefs.h
fi
@@ -21120,20 +23359,16 @@ if test "$erl_wall_clock_lib" != ""; then
fi
if test "x$erl_monotonic_clock_id" != "x"; then
-cat >>confdefs.h <<_ACEOF
-#define MONOTONIC_CLOCK_ID_STR "$erl_monotonic_clock_id"
-_ACEOF
+printf "%s\n" "#define MONOTONIC_CLOCK_ID_STR \"$erl_monotonic_clock_id\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define MONOTONIC_CLOCK_ID $erl_monotonic_clock_id
-_ACEOF
+printf "%s\n" "#define MONOTONIC_CLOCK_ID $erl_monotonic_clock_id" >>confdefs.h
fi
if test $erl_cv_clock_gettime_monotonic_raw = yes; then
-$as_echo "#define HAVE_CLOCK_GETTIME_MONOTONIC_RAW 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CLOCK_GETTIME_MONOTONIC_RAW 1" >>confdefs.h
fi
@@ -21168,11 +23403,12 @@ fi
esac
clock_gettime_lib=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21181,30 +23417,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
clock_gettime_lib="-lrt"
fi
@@ -21218,11 +23453,12 @@ fi
trust_test=""
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
-$as_echo_n "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_raw+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)" >&5
+printf %s "checking for clock_gettime(CLOCK_MONOTONIC_RAW, _)... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_raw+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -21231,7 +23467,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -21244,23 +23480,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_raw=yes
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_raw=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_raw" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_raw" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_raw" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
-$as_echo_n "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
-if ${erl_cv_clock_gettime_monotonic_high_resolution+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime() with ${check_msg}monotonic clock type" >&5
+printf %s "checking for clock_gettime() with ${check_msg}monotonic clock type... " >&6; }
+if test ${erl_cv_clock_gettime_monotonic_high_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
for clock_type in $prefer_resolution_clock_gettime_monotonic $default_resolution_clock_gettime_monotonic $high_resolution_clock_gettime_monotonic $low_resolution_clock_gettime_monotonic; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21270,7 +23508,7 @@ else
$trust_test
int
-main ()
+main (void)
{
struct timespec ts;
@@ -21283,56 +23521,70 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
erl_cv_clock_gettime_monotonic_high_resolution=$clock_type
-else
+else $as_nop
erl_cv_clock_gettime_monotonic_high_resolution=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
test $erl_cv_clock_gettime_monotonic_high_resolution = no || break
done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_high_resolution" >&5
-$as_echo "$erl_cv_clock_gettime_monotonic_high_resolution" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_clock_gettime_monotonic_high_resolution" >&5
+printf "%s\n" "$erl_cv_clock_gettime_monotonic_high_resolution" >&6; }
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- for ac_func in clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ if test "$LD_MAY_BE_WEAK" != "no"
+then :
+
+ ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
- else
- for ac_func in clock_getres clock_get_attributes gethrtime
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+
+else $as_nop
+
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "clock_get_attributes" "ac_cv_func_clock_get_attributes"
+if test "x$ac_cv_func_clock_get_attributes" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GET_ATTRIBUTES 1" >>confdefs.h
- fi
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
-$as_echo_n "checking for mach clock_get_time() with monotonic clock type... " >&6; }
-if ${erl_cv_mach_clock_get_time_monotonic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach clock_get_time() with monotonic clock type" >&5
+printf %s "checking for mach clock_get_time() with monotonic clock type... " >&6; }
+if test ${erl_cv_mach_clock_get_time_monotonic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -21341,7 +23593,7 @@ else
#include <mach/mach.h>
int
-main ()
+main (void)
{
kern_return_t res;
@@ -21356,16 +23608,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
erl_cv_mach_clock_get_time_monotonic=yes
-else
+else $as_nop
erl_cv_mach_clock_get_time_monotonic=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
-$as_echo "$erl_cv_mach_clock_get_time_monotonic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_cv_mach_clock_get_time_monotonic" >&5
+printf "%s\n" "$erl_cv_mach_clock_get_time_monotonic" >&6; }
erl_corrected_monotonic_clock=no
case $erl_cv_clock_gettime_monotonic_high_resolution-$ac_cv_func_gethrtime-$erl_cv_mach_clock_get_time_monotonic-$host_os in
@@ -21433,19 +23686,19 @@ case $erl_monotonic_clock_low_resolution-$erl_monotonic_clock_func in
no-mach_clock_get_time)
monotonic_hrtime=yes
-$as_echo "#define SYS_HRTIME_USING_MACH_CLOCK_GET_TIME 1" >>confdefs.h
+printf "%s\n" "#define SYS_HRTIME_USING_MACH_CLOCK_GET_TIME 1" >>confdefs.h
;;
no-clock_gettime)
monotonic_hrtime=yes
-$as_echo "#define SYS_HRTIME_USING_CLOCK_GETTIME 1" >>confdefs.h
+printf "%s\n" "#define SYS_HRTIME_USING_CLOCK_GETTIME 1" >>confdefs.h
;;
no-gethrtime)
monotonic_hrtime=yes
-$as_echo "#define SYS_HRTIME_USING_GETHRTIME 1" >>confdefs.h
+printf "%s\n" "#define SYS_HRTIME_USING_GETHRTIME 1" >>confdefs.h
;;
*)
@@ -21455,28 +23708,25 @@ esac
if test $monotonic_hrtime = yes; then
-$as_echo "#define HAVE_MONOTONIC_ERTS_SYS_HRTIME 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MONOTONIC_ERTS_SYS_HRTIME 1" >>confdefs.h
fi
if test "x$erl_monotonic_clock_id" != "x"; then
-cat >>confdefs.h <<_ACEOF
-#define HRTIME_CLOCK_ID_STR "$erl_monotonic_clock_id"
-_ACEOF
+printf "%s\n" "#define HRTIME_CLOCK_ID_STR \"$erl_monotonic_clock_id\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define HRTIME_CLOCK_ID $erl_monotonic_clock_id
-_ACEOF
+printf "%s\n" "#define HRTIME_CLOCK_ID $erl_monotonic_clock_id" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethrvtime works and how to use it" >&5
-$as_echo_n "checking if gethrvtime works and how to use it... " >&6; }
-if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethrvtime works and how to use it" >&5
+printf %s "checking if gethrvtime works and how to use it... " >&6; }
+if test "$cross_compiling" = yes
+then :
case X$erl_xcomp_gethrvtime_procfs_ioctl in
X)
@@ -21491,7 +23741,7 @@ case X$erl_xcomp_gethrvtime_procfs_ioctl in
as_fn_error $? "Bad erl_xcomp_gethrvtime_procfs_ioctl value: $erl_xcomp_gethrvtime_procfs_ioctl" "$LINENO" 5;;
esac
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -21544,9 +23794,10 @@ int main() {
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
erl_gethrvtime=procfs_ioctl
-else
+else $as_nop
erl_gethrvtime=false
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -21555,32 +23806,35 @@ fi
LIBRT=$xrtlib
-case $erl_gethrvtime in
- procfs_ioctl)
+if test "$erl_gethrvtime" = "procfs_ioctl"
+then :
-$as_echo "#define HAVE_GETHRVTIME_PROCFS_IOCTL 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: uses ioctl to procfs" >&5
-$as_echo "uses ioctl to procfs" >&6; }
- ;;
- *)
+printf "%s\n" "#define HAVE_GETHRVTIME_PROCFS_IOCTL 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: uses ioctl to procfs" >&5
+printf "%s\n" "uses ioctl to procfs" >&6; }
+
+else $as_nop
+
if test $erl_gethrvtime = cross; then
erl_gethrvtime=false
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross" >&5
-$as_echo "cross" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result 'not working' guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result 'not working' guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross" >&5
+printf "%s\n" "cross" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result 'not working' guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result 'not working' guessed because of cross compilation" >&2;}
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not working" >&5
-$as_echo "not working" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not working" >&5
+printf "%s\n" "not working" >&6; }
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if clock_gettime can be used to get thread CPU time" >&5
-$as_echo_n "checking if clock_gettime can be used to get thread CPU time... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if clock_gettime can be used to get thread CPU time" >&5
+printf %s "checking if clock_gettime can be used to get thread CPU time... " >&6; }
save_libs=$LIBS
LIBS="-lrt"
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes
+then :
case X$erl_xcomp_clock_gettime_cpu_time in
X) erl_clock_gettime_cpu_time=cross;;
@@ -21588,7 +23842,7 @@ $as_echo_n "checking if clock_gettime can be used to get thread CPU time... " >&
*) as_fn_error $? "Bad erl_xcomp_clock_gettime_cpu_time value: $erl_xcomp_clock_gettime_cpu_time" "$LINENO" 5;;
esac
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -21616,9 +23870,10 @@ else
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
erl_clock_gettime_cpu_time=yes
-else
+else $as_nop
erl_clock_gettime_cpu_time=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -21626,34 +23881,35 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LIBS=$save_libs
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $erl_clock_gettime_cpu_time" >&5
-$as_echo "$erl_clock_gettime_cpu_time" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $erl_clock_gettime_cpu_time" >&5
+printf "%s\n" "$erl_clock_gettime_cpu_time" >&6; }
case $erl_clock_gettime_cpu_time in
yes)
-$as_echo "#define HAVE_CLOCK_GETTIME_CPU_TIME /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_CLOCK_GETTIME_CPU_TIME /**/" >>confdefs.h
LIBRT=-lrt
;;
cross)
erl_clock_gettime_cpu_time=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result no guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result no guessed because of cross compilation" >&2;}
;;
*)
;;
esac
- ;;
-esac
+
+fi
# Extract the first word of "m4", so it can be a program name with args.
set dummy m4; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_M4+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_M4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$M4"; then
ac_cv_prog_M4="$M4" # Let the user override the test.
else
@@ -21661,11 +23917,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_M4="m4"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -21676,35 +23936,45 @@ fi
fi
M4=$ac_cv_prog_M4
if test -n "$M4"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4" >&5
-$as_echo "$M4" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $M4" >&5
+printf "%s\n" "$M4" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
JIT_ARCH=
-if test ${enable_jit} != no; then
+
+if test ${enable_jit} != no
+then :
+
case "$ARCH" in
amd64)
JIT_ARCH=x86
;;
+ arm64)
+ JIT_ARCH=arm
+ ;;
*)
if test ${enable_jit} = yes; then
- as_fn_error $? "JIT only works on x86 64-bit" "$LINENO" 5
+ as_fn_error $? "JIT only works on x86 64-bit and ARM 64-bit" "$LINENO" 5
else
enable_jit=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: JIT disabled due to lack to support on $ARCH-$OPSYS" >&5
-$as_echo "$as_me: WARNING: JIT disabled due to lack to support on $ARCH-$OPSYS" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: JIT disabled due to lack to support on $ARCH-$OPSYS" >&5
+printf "%s\n" "$as_me: WARNING: JIT disabled due to lack to support on $ARCH-$OPSYS" >&2;}
fi
;;
esac
- if test ${enable_jit} != no; then
- if test "$CXX" != false; then
+ if test ${enable_jit} != no
+then :
+
+ if test "$CXX" != false
+then :
+
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -21713,269 +23983,11 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
old_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS -std=c++17"
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-else
- CXXFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
+main (void)
{
#if __cplusplus < 201703L
#error "Needs C++17 compiler"
@@ -21984,27 +23996,29 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++17 support" >&5
-$as_echo_n "checking for C++17 support... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++17 support" >&5
+printf %s "checking for C++17 support... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
HAVE_CXX17=true
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++17 support" >&5
-$as_echo_n "checking for C++17 support... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++17 support" >&5
+printf %s "checking for C++17 support... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
HAVE_CXX17=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
- fi
+
+fi
if test "$CXX" = false -o "$HAVE_CXX17" = false; then
if test ${enable_jit} = yes; then
as_fn_error $? "JIT needs a C++ compiler with C++17 support" "$LINENO" 5
@@ -22014,39 +24028,48 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
JIT disabled due to lack of compiler with C++17 support
EOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: JIT disable due to lack of C++ compiler with C++17 support" >&5
-$as_echo "$as_me: WARNING: JIT disable due to lack of C++ compiler with C++17 support" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: JIT disable due to lack of C++ compiler with C++17 support" >&5
+printf "%s\n" "$as_me: WARNING: JIT disable due to lack of C++ compiler with C++17 support" >&2;}
fi
fi
- fi
+
+fi
if test ${enable_jit} != no; then
enable_jit=yes
fi
+
fi
-if test ${enable_jit} != no; then
- case $host_os in
- openbsd*)
+if test ${enable_jit} != no
+then :
+
+ case $host_os in #(
+ openbsd*) :
+
# Whenever the kernel is entered (page faults, system calls, etc),
# OpenBSD checks whether the stack pointer is in an area allocated with
# MAP_STACK, so we can't use the native stack for Erlang code.
#
# https://undeadly.org/cgi?action=article;sid=20180310000858
- enable_native_stack=no;;
- win32*)
+ enable_native_stack=no
+ ;; #(
+ win32*) :
+
# Windows never messes with the stack, so it's safe by default.
- enable_native_stack=yes;;
- *)
+ enable_native_stack=yes
+ ;; #(
+ *) :
+
# Use the native stack if we can safely redirect OS signals to a
# different stack.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for safe signal delivery" >&5
-$as_echo_n "checking for safe signal delivery... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for safe signal delivery" >&5
+printf %s "checking for safe signal delivery... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <signal.h>
int
-main ()
+main (void)
{
#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
#define __DARWIN__ 1
@@ -22058,30 +24081,45 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
enable_native_stack=yes
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling native stack in JIT" >&5
-$as_echo "no, disabling native stack in JIT" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, disabling native stack in JIT" >&5
+printf "%s\n" "no, disabling native stack in JIT" >&6; }
enable_native_stack=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext;;
- esac
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+esac
- if test X${enable_native_stack} = Xyes; then
+ case "$JIT_ARCH" in
+ x86)
+ if test X${enable_native_stack} = Xyes; then
-$as_echo "#define NATIVE_ERLANG_STACK /**/" >>confdefs.h
+printf "%s\n" "#define NATIVE_ERLANG_STACK /**/" >>confdefs.h
+
+ fi
+ ;;
+ *)
+ ;;
+ esac
- fi
fi
case $OPSYS in
linux*)
+ if test X${enable_native_stack} = Xyes; then
+
+printf "%s\n" "#define ERLANG_FRAME_POINTERS /**/" >>confdefs.h
+
+ fi
-$as_echo "#define HAVE_LINUX_PERF_SUPPORT 1" >>confdefs.h
+
+printf "%s\n" "#define HAVE_LINUX_PERF_SUPPORT 1" >>confdefs.h
;;
*)
@@ -22089,19 +24127,19 @@ $as_echo "#define HAVE_LINUX_PERF_SUPPORT 1" >>confdefs.h
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to redefine FD_SETSIZE" >&5
-$as_echo_n "checking whether to redefine FD_SETSIZE... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to redefine FD_SETSIZE" >&5
+printf %s "checking whether to redefine FD_SETSIZE... " >&6; }
case $host_os in
bsdi*)
-$as_echo "#define REDEFINE_FD_SETSIZE /**/" >>confdefs.h
+printf "%s\n" "#define REDEFINE_FD_SETSIZE /**/" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
;;
esac
@@ -22126,15 +24164,20 @@ fi
#
# Check for working poll().
#
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working poll()" >&5
-$as_echo_n "checking for working poll()... " >&6; }
-if test "x$ac_cv_header_poll_h" != "xyes" -o "x$ac_cv_func_poll" != "xyes"; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working poll()" >&5
+printf %s "checking for working poll()... " >&6; }
+if test "x$ac_cv_header_poll_h" != "xyes" -o "x$ac_cv_func_poll" != "xyes"
+then :
+
poll_works=no
-else
-if test "$cross_compiling" = yes; then :
+else $as_nop
+
+
+if test "$cross_compiling" = yes
+then :
case X$erl_xcomp_poll in
X) poll_works=cross;;
@@ -22142,7 +24185,7 @@ case X$erl_xcomp_poll in
*) as_fn_error $? "Bad erl_xcomp_poll value: $erl_xcomp_poll" "$LINENO" 5;;
esac
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -22166,9 +24209,10 @@ main()
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
poll_works=yes
-else
+else $as_nop
poll_works=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -22176,6 +24220,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
+
fi
case $poll_works-$host_os in
@@ -22185,30 +24230,30 @@ case $poll_works-$host_os in
# be used by erts).
#
-$as_echo "#define USE_SELECT 1" >>confdefs.h
+printf "%s\n" "#define USE_SELECT 1" >>confdefs.h
if test $poll_works = cross; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross" >&5
-$as_echo "cross" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed based on OS ($host_os) because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result no guessed based on OS ($host_os) because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross" >&5
+printf "%s\n" "cross" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed based on OS ($host_os) because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result no guessed based on OS ($host_os) because of cross compilation" >&2;}
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no; non-existing, broken, or based on select()" >&5
-$as_echo "no; non-existing, broken, or based on select()" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no; non-existing, broken, or based on select()" >&5
+printf "%s\n" "no; non-existing, broken, or based on select()" >&6; }
fi
poll_works=no;;
yes-*|cross-*)
-$as_echo "#define ERTS_USE_POLL 1" >>confdefs.h
+printf "%s\n" "#define ERTS_USE_POLL 1" >>confdefs.h
if test $poll_works = cross; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross" >&5
-$as_echo "cross" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed based on OS ($host_os) because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed based on OS ($host_os) because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross" >&5
+printf "%s\n" "cross" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed based on OS ($host_os) because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed based on OS ($host_os) because of cross compilation" >&2;}
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
fi
poll_works=yes;;
esac
@@ -22219,33 +24264,35 @@ esac
if test $have_kernel_poll = kqueue; then
## Some OS X kernel version seems to have bugs in them with regards to kqueue
## Disable kernel poll on those versions
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host os has known kqueue bugs" >&5
-$as_echo_n "checking whether host os has known kqueue bugs... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether host os has known kqueue bugs" >&5
+printf %s "checking whether host os has known kqueue bugs... " >&6; }
case $host_os in
# Any OS X version < 16 has known problems with using kqueue
# so we don't use it there. See erl_poll.c for details.
darwin[0-9].*|darwin1[0-5].*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, disabling kernel poll" >&5
-$as_echo "yes, disabling kernel poll" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, disabling kernel poll" >&5
+printf "%s\n" "yes, disabling kernel poll" >&6; }
have_kernel_poll=no
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
;;
esac
fi
#
# If epoll() found, check that it is level triggered.
#
-if test $have_kernel_poll = epoll; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether epoll is level triggered" >&5
-$as_echo_n "checking whether epoll is level triggered... " >&6; }
+if test $have_kernel_poll = epoll
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether epoll is level triggered" >&5
+printf %s "checking whether epoll is level triggered... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/epoll.h>
int
-main ()
+main (void)
{
#ifdef EPOLLET
@@ -22262,49 +24309,51 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
level_triggered_epoll=yes
-else
+else $as_nop
level_triggered_epoll=no
have_kernel_poll=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $level_triggered_epoll" >&5
-$as_echo "$level_triggered_epoll" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $level_triggered_epoll" >&5
+printf "%s\n" "$level_triggered_epoll" >&6; }
+
fi
#
# Check if we should enable kernel poll support
#
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel poll support should be enabled" >&5
-$as_echo_n "checking whether kernel poll support should be enabled... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether kernel poll support should be enabled" >&5
+printf %s "checking whether kernel poll support should be enabled... " >&6; }
ERTS_ENABLE_KERNEL_POLL=no
ERTS_BUILD_FALLBACK_POLL=no
case $enable_kernel_poll-$have_kernel_poll in
no-*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no; disabled by user" >&5
-$as_echo "no; disabled by user" >&6; };;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no; disabled by user" >&5
+printf "%s\n" "no; disabled by user" >&6; };;
yes-no)
as_fn_error $? "no; kernel poll support requested but not found" "$LINENO" 5;;
*-no)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; };;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; };;
*)
case $have_kernel_poll in
epoll)
-$as_echo "#define HAVE_SYS_EPOLL_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SYS_EPOLL_H 1" >>confdefs.h
ERTS_BUILD_FALLBACK_POLL=yes
;;
/dev/poll)
-$as_echo "#define HAVE_SYS_DEVPOLL_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SYS_DEVPOLL_H 1" >>confdefs.h
;;
kqueue)
-$as_echo "#define HAVE_SYS_EVENT_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SYS_EVENT_H 1" >>confdefs.h
ERTS_BUILD_FALLBACK_POLL=yes
;;
@@ -22313,16 +24362,17 @@ $as_echo "#define HAVE_SYS_EVENT_H 1" >>confdefs.h
esac
ERTS_ENABLE_KERNEL_POLL=yes
-$as_echo "#define ERTS_ENABLE_KERNEL_POLL 1" >>confdefs.h
+printf "%s\n" "#define ERTS_ENABLE_KERNEL_POLL 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; $have_kernel_poll" >&5
-$as_echo "yes; $have_kernel_poll" >&6; };;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes; $have_kernel_poll" >&5
+printf "%s\n" "yes; $have_kernel_poll" >&6; };;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether putenv() stores a copy of the key-value pair" >&5
-$as_echo_n "checking whether putenv() stores a copy of the key-value pair... " >&6; }
-if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether putenv() stores a copy of the key-value pair" >&5
+printf %s "checking whether putenv() stores a copy of the key-value pair... " >&6; }
+if test "$cross_compiling" = yes
+then :
case X$erl_xcomp_putenv_copy in
X) copying_putenv=cross;;
@@ -22330,7 +24380,7 @@ case X$erl_xcomp_putenv_copy in
*) as_fn_error $? "Bad erl_xcomp_putenv_copy value: $erl_xcomp_putenv_copy" "$LINENO" 5;;
esac
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -22365,9 +24415,10 @@ int main(void) {
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
copying_putenv=yes
-else
+else $as_nop
copying_putenv=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -22375,32 +24426,33 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $copying_putenv" >&5
-$as_echo "$copying_putenv" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $copying_putenv" >&5
+printf "%s\n" "$copying_putenv" >&6; }
case $copying_putenv in
yes)
-$as_echo "#define HAVE_COPYING_PUTENV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_COPYING_PUTENV 1" >>confdefs.h
;;
cross)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result no guessed because of cross compilation" >&2;};;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result no guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result no guessed because of cross compilation" >&2;};;
*) ;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a compiler that handles jumptables" >&5
-$as_echo_n "checking for a compiler that handles jumptables... " >&6; }
-if ${ac_cv_prog_emu_cc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a compiler that handles jumptables" >&5
+printf %s "checking for a compiler that handles jumptables... " >&6; }
+if test ${ac_cv_prog_emu_cc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#if defined(__clang_major__) && __clang_major__ >= 3
@@ -22426,12 +24478,13 @@ lbl2:
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_emu_cc="$CC"
-else
+else $as_nop
ac_cv_prog_emu_cc=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test "$ac_cv_prog_emu_cc" = no; then
for ac_progname in emu_cc.sh gcc-4.2 gcc; do
@@ -22451,7 +24504,9 @@ if test "$ac_cv_prog_emu_cc" = no; then
done
fi
-if test "$ac_cv_prog_emu_cc" != no; then
+if test "$ac_cv_prog_emu_cc" != no
+then :
+
save_CC="$CC"
save_CFLAGS=$CFLAGS
save_CPPFLAGS=$CPPFLAGS
@@ -22462,7 +24517,7 @@ if test "$ac_cv_prog_emu_cc" != no; then
/* end confdefs.h. */
int
-main ()
+main (void)
{
#if defined(__clang_major__) && __clang_major__ >= 3
@@ -22488,23 +24543,25 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_emu_cc="$CC"
-else
+else $as_nop
ac_cv_prog_emu_cc=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CC=$save_CC
CFLAGS=$save_CFLAGS
CPPFLAGS=$save_CPPFLAGS
+
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_emu_cc" >&5
-$as_echo "$ac_cv_prog_emu_cc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_emu_cc" >&5
+printf "%s\n" "$ac_cv_prog_emu_cc" >&6; }
if test "$ac_cv_prog_emu_cc" = no; then
-$as_echo "#define NO_JUMP_TABLE /**/" >>confdefs.h
+printf "%s\n" "#define NO_JUMP_TABLE /**/" >>confdefs.h
EMU_CC="$CC"
else
@@ -22513,16 +24570,18 @@ fi
-case $DYNAMIC_TRACE_FRAMEWORK in
- dtrace|systemtap)
+case $DYNAMIC_TRACE_FRAMEWORK in #(
+ dtrace|systemtap) :
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}dtrace", so it can be a program name with args.
set dummy ${ac_tool_prefix}dtrace; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DTRACE+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DTRACE+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$DTRACE"; then
ac_cv_prog_DTRACE="$DTRACE" # Let the user override the test.
else
@@ -22530,11 +24589,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_DTRACE="${ac_tool_prefix}dtrace"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -22545,11 +24608,11 @@ fi
fi
DTRACE=$ac_cv_prog_DTRACE
if test -n "$DTRACE"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DTRACE" >&5
-$as_echo "$DTRACE" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DTRACE" >&5
+printf "%s\n" "$DTRACE" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -22558,11 +24621,12 @@ if test -z "$ac_cv_prog_DTRACE"; then
ac_ct_DTRACE=$DTRACE
# Extract the first word of "dtrace", so it can be a program name with args.
set dummy dtrace; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DTRACE+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DTRACE+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_DTRACE"; then
ac_cv_prog_ac_ct_DTRACE="$ac_ct_DTRACE" # Let the user override the test.
else
@@ -22570,11 +24634,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DTRACE="dtrace"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -22585,11 +24653,11 @@ fi
fi
ac_ct_DTRACE=$ac_cv_prog_ac_ct_DTRACE
if test -n "$ac_ct_DTRACE"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DTRACE" >&5
-$as_echo "$ac_ct_DTRACE" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DTRACE" >&5
+printf "%s\n" "$ac_ct_DTRACE" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_DTRACE" = x; then
@@ -22597,8 +24665,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
DTRACE=$ac_ct_DTRACE
@@ -22609,13 +24677,18 @@ fi
test "$DTRACE" = "none" && as_fn_error $? "No dtrace utility found." "$LINENO" 5;
enable_lttng_test=no
- enable_dtrace_test=yes;;
- lttng)
+ enable_dtrace_test=yes
+ ;; #(
+ lttng) :
+
enable_lttng_test=yes
- enable_dtrace_test=no;;
- *)
+ enable_dtrace_test=no
+ ;; #(
+ *) :
+
enable_lttng_test=no
- enable_dtrace_test=no;;
+ enable_dtrace_test=no
+ ;;
esac
@@ -22640,43 +24713,43 @@ case $OPSYS in
: # Nothing to do
;;
esac
-if test "$enable_dtrace_test" = "yes" ; then
- if test "$DTRACE" = "dtrace" ; then
- for ac_header in sys/sdt.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/sdt.h" "ac_cv_header_sys_sdt_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_sdt_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_SDT_H 1
-_ACEOF
+if test "$enable_dtrace_test" = "yes"
+then :
-fi
+ if test "$DTRACE" = "dtrace"
+then :
-done
+ ac_fn_c_check_header_compile "$LINENO" "sys/sdt.h" "ac_cv_header_sys_sdt_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sdt_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SDT_H 1" >>confdefs.h
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 1-stage DTrace precompilation" >&5
-$as_echo_n "checking for 1-stage DTrace precompilation... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 1-stage DTrace precompilation" >&5
+printf %s "checking for 1-stage DTrace precompilation... " >&6; }
# The OS X version of dtrace prints a spurious line here.
if ! dtrace -h $DTRACE_CPP -Iemulator/beam -o ./foo-dtrace.h -s emulator/beam/erlang_dtrace.d; then
as_fn_error $? "Could not precompile erlang_dtrace.d: dtrace -h failed" "$LINENO" 5
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 2-stage DTrace precompilation" >&5
-$as_echo_n "checking for 2-stage DTrace precompilation... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 2-stage DTrace precompilation" >&5
+printf %s "checking for 2-stage DTrace precompilation... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include "foo-dtrace.h"
int
-main ()
+main (void)
{
ERLANG_DIST_PORT_BUSY_ENABLED();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
rm -f $DTRACE_2STEP_TEST
dtrace -G $DTRACE_CPP $DTRACE_BITS_FLAG -Iemulator/beam -o $DTRACE_2STEP_TEST -s emulator/beam/erlang_dtrace.d conftest.$OBJEXT 2>&5
if test -f $DTRACE_2STEP_TEST; then
@@ -22684,14 +24757,15 @@ if ac_fn_c_try_compile "$LINENO"; then :
DTRACE_ENABLED_2STEP=yes
fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
rm -f foo-dtrace.h
- if test "x$DTRACE_ENABLED_2STEP" = "xyes"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ if test "x$DTRACE_ENABLED_2STEP" = "xyes"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
DTRACE_ENABLED=yes
@@ -22706,38 +24780,34 @@ fi
LIBS="$LIBS -ldtrace"
;;
esac
- else
+
+else $as_nop
+
as_fn_error $? "Dtrace preprocessing test failed." "$LINENO" 5
- fi
-fi
-if test "$enable_lttng_test" = "yes" ; then
- for ac_header in lttng/tracepoint.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "lttng/tracepoint.h" "ac_cv_header_lttng_tracepoint_h" "$ac_includes_default"
-if test "x$ac_cv_header_lttng_tracepoint_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LTTNG_TRACEPOINT_H 1
-_ACEOF
+fi
fi
-done
+if test "$enable_lttng_test" = "yes"
+then :
- for ac_header in lttng/tracepoint-event.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "lttng/tracepoint-event.h" "ac_cv_header_lttng_tracepoint_event_h" "$ac_includes_default"
-if test "x$ac_cv_header_lttng_tracepoint_event_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LTTNG_TRACEPOINT_EVENT_H 1
-_ACEOF
+ ac_fn_c_check_header_compile "$LINENO" "lttng/tracepoint.h" "ac_cv_header_lttng_tracepoint_h" "$ac_includes_default"
+if test "x$ac_cv_header_lttng_tracepoint_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LTTNG_TRACEPOINT_H 1" >>confdefs.h
fi
-done
+ ac_fn_c_check_header_compile "$LINENO" "lttng/tracepoint-event.h" "ac_cv_header_lttng_tracepoint_event_h" "$ac_includes_default"
+if test "x$ac_cv_header_lttng_tracepoint_event_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LTTNG_TRACEPOINT_EVENT_H 1" >>confdefs.h
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tracepoint_enabled in lttng/tracepoint.h" >&5
-$as_echo_n "checking for tracepoint_enabled in lttng/tracepoint.h... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tracepoint_enabled in lttng/tracepoint.h" >&5
+printf %s "checking for tracepoint_enabled in lttng/tracepoint.h... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <lttng/tracepoint.h>
@@ -22750,20 +24820,21 @@ $as_echo_n "checking for tracepoint_enabled in lttng/tracepoint.h... " >&6; }
#define TRACEPOINT_CREATE_PROBES
#define TRACEPOINT_DEFINE
int
-main ()
+main (void)
{
if(tracepoint_enabled(org_erlang_otp,dummy)) do {} while(0)
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
as_fn_error $? "no (available in lttng-ust v2.7)" "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test "x$ac_cv_header_lttng_tracepoint_h" = "xyes" \
-a "x$ac_cv_header_lttng_tracepoint_event_h" = "xyes"; then
# No straight forward way to test for liblttng-ust when no public symbol exists,
@@ -22772,6 +24843,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
else
as_fn_error $? "No LTTng support found." "$LINENO" 5
fi
+
fi
@@ -22781,11 +24853,12 @@ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat" >&5
-$as_echo_n "checking for kstat_open in -lkstat... " >&6; }
-if ${ac_cv_lib_kstat_kstat_open+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat" >&5
+printf %s "checking for kstat_open in -lkstat... " >&6; }
+if test ${ac_cv_lib_kstat_kstat_open+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lkstat $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -22794,30 +24867,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char kstat_open ();
int
-main ()
+main (void)
{
return kstat_open ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_kstat_kstat_open=yes
-else
+else $as_nop
ac_cv_lib_kstat_kstat_open=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open" >&5
-$as_echo "$ac_cv_lib_kstat_kstat_open" >&6; }
-if test "x$ac_cv_lib_kstat_kstat_open" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open" >&5
+printf "%s\n" "$ac_cv_lib_kstat_kstat_open" >&6; }
+if test "x$ac_cv_lib_kstat_kstat_open" = xyes
+then :
use_cpu_sup=yes
CPU_SUP_LIBS="$CPU_SUP_LIBS -lkstat"
@@ -22825,11 +24897,12 @@ if test "x$ac_cv_lib_kstat_kstat_open" = xyes; then :
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kvm_open in -lkvm" >&5
-$as_echo_n "checking for kvm_open in -lkvm... " >&6; }
-if ${ac_cv_lib_kvm_kvm_open+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kvm_open in -lkvm" >&5
+printf %s "checking for kvm_open in -lkvm... " >&6; }
+if test ${ac_cv_lib_kvm_kvm_open+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lkvm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -22838,30 +24911,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char kvm_open ();
int
-main ()
+main (void)
{
return kvm_open ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_kvm_kvm_open=yes
-else
+else $as_nop
ac_cv_lib_kvm_kvm_open=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kvm_kvm_open" >&5
-$as_echo "$ac_cv_lib_kvm_kvm_open" >&6; }
-if test "x$ac_cv_lib_kvm_kvm_open" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kvm_kvm_open" >&5
+printf "%s\n" "$ac_cv_lib_kvm_kvm_open" >&6; }
+if test "x$ac_cv_lib_kvm_kvm_open" = xyes
+then :
use_cpu_sup=yes
CPU_SUP_LIBS="$CPU_SUP_LIBS -lkvm"
@@ -22888,7 +24960,8 @@ fi
# Check whether --with-javac was given.
-if test "${with_javac+set}" = set; then :
+if test ${with_javac+y}
+then :
withval=$with_javac;
fi
@@ -22921,11 +24994,12 @@ for ac_prog in $check_javac
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_JAVAC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_JAVAC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$JAVAC"; then
ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
else
@@ -22933,11 +25007,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_JAVAC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -22948,23 +25026,26 @@ fi
fi
JAVAC=$ac_cv_prog_JAVAC
if test -n "$JAVAC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
-$as_echo "$JAVAC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+printf "%s\n" "$JAVAC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
test -n "$JAVAC" && break
done
-if test -n "$JAVAC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JDK version 1.6" >&5
-$as_echo_n "checking for JDK version 1.6... " >&6; }
-if ${ac_cv_prog_javac_ver_1_6+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test -n "$JAVAC"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for JDK version 1.6" >&5
+printf %s "checking for JDK version 1.6... " >&6; }
+if test ${ac_cv_prog_javac_ver_1_6+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
java_link='$JAVAC conftest.java 1>&5'
cat > conftest.java <<EOF
@@ -22975,24 +25056,32 @@ EOF
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$java_link\""; } >&5
(eval $java_link) 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s conftest.class; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest.class
+then :
+
rm -rf conftest*
ac_cv_prog_javac_ver_1_6=yes
-else
+
+
+else $as_nop
+
echo "configure: failed program was:" 1>&5
cat conftest.java 1>&5
echo "configure: PATH was $PATH" 1>&5
rm -rf conftest*
ac_cv_prog_javac_ver_1_6=no
+
+
fi
rm -f conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_ver_1_6" >&5
-$as_echo "$ac_cv_prog_javac_ver_1_6" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_ver_1_6" >&5
+printf "%s\n" "$ac_cv_prog_javac_ver_1_6" >&6; }
if test $ac_cv_prog_javac_ver_1_6 = no; then
unset -v JAVAC
fi
+
fi
if test -z "$JAVAC"; then
@@ -23000,8 +25089,8 @@ if test -z "$JAVAC"; then
as_fn_error $? "No java compiler found in PATH (checked for $check_javac)" "$LINENO" 5
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find any usable java compiler, will skip: jinterface" >&5
-$as_echo "$as_me: WARNING: Could not find any usable java compiler, will skip: jinterface" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Could not find any usable java compiler, will skip: jinterface" >&5
+printf "%s\n" "$as_me: WARNING: Could not find any usable java compiler, will skip: jinterface" >&2;}
for a in $need_java ; do
echo "No Java compiler found" > $ERL_TOP/lib/$a/SKIP
@@ -23010,115 +25099,6 @@ fi
fi # end - try to find javac
-
-if test -n "$ac_tool_prefix"; then
- for ac_prog in $CCC c++ g++ CC cxx cc++ cl
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in $CCC c++ g++ CC cxx cc++ cl
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
-
-# Remove SKIP file from previous run
-rm -f $ERL_TOP/lib/orber/SKIP
-
-if test "$CXX" = false; then
- echo "No C++ compiler found" > $ERL_TOP/lib/orber/SKIP
-fi
-
CFLAGS="$CFLAGS $CPPFLAGS"
#
@@ -23145,9 +25125,7 @@ fi
-cat >>confdefs.h <<_ACEOF
-#define ERTS_EMU_CMDLINE_FLAGS "$STATIC_CFLAGS $CFLAGS $DEBUG_CFLAGS $EMU_THR_DEFS $DEFS $WERRORFLAGS $WFLAGS"
-_ACEOF
+printf "%s\n" "#define ERTS_EMU_CMDLINE_FLAGS \"$STATIC_CFLAGS $CFLAGS $DEBUG_CFLAGS $EMU_THR_DEFS $DEFS $WERRORFLAGS $WFLAGS\"" >>confdefs.h
@@ -23173,16 +25151,12 @@ done
-for ac_func in log2
-do :
- ac_fn_c_check_func "$LINENO" "log2" "ac_cv_func_log2"
-if test "x$ac_cv_func_log2" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LOG2 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "log2" "ac_cv_func_log2"
+if test "x$ac_cv_func_log2" = xyes
+then :
+ printf "%s\n" "#define HAVE_LOG2 1" >>confdefs.h
fi
-done
@@ -23192,7 +25166,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
_Pragma("GCC diagnostic push")
_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")
@@ -23202,12 +25176,13 @@ _Pragma("GCC diagnostic push")
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-$as_echo "#define HAVE_GCC_DIAG_IGNORE_WADDRESS_OF_PACKED_MEMBER 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GCC_DIAG_IGNORE_WADDRESS_OF_PACKED_MEMBER 1" >>confdefs.h
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS="$saved_CFLAGS"
@@ -23219,7 +25194,8 @@ fi
# Check whether --enable-sanitizers was given.
-if test "${enable_sanitizers+set}" = set; then :
+if test ${enable_sanitizers+y}
+then :
enableval=$enable_sanitizers;
case "$enableval" in
no) sanitizers= ;;
@@ -23272,8 +25248,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -23303,15 +25279,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -23325,8 +25301,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -23343,7 +25319,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -23361,8 +25337,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -23385,14 +25361,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -23402,46 +25380,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -23450,13 +25428,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -23465,8 +25436,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -23478,30 +25453,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -23514,13 +25469,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -23547,18 +25503,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -23570,12 +25528,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -23606,7 +25565,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -23628,6 +25587,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -23641,6 +25604,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -23682,7 +25651,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -23691,7 +25660,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -23754,7 +25723,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -23812,14 +25781,16 @@ $config_headers
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -23857,15 +25828,15 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
@@ -23873,7 +25844,7 @@ do
--header | --heade | --head | --hea )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
as_fn_append CONFIG_HEADERS " '$ac_optarg'"
ac_need_defaults=false;;
@@ -23882,7 +25853,7 @@ do
as_fn_error $? "ambiguous option: \`$1'
Try \`$0 --help' for more information.";;
--help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -23910,7 +25881,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -23924,7 +25895,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -23963,8 +25934,8 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+ test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -24300,7 +26271,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -24308,17 +26279,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -24335,7 +26306,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -24359,9 +26330,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -24418,8 +26389,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -24462,9 +26433,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -24480,20 +26451,20 @@ which seems to be undefined. Please make sure it is defined" >&2;}
#
if test x"$ac_file" != x-; then
{
- $as_echo "/* $configure_input */" \
+ printf "%s\n" "/* $configure_input */" >&1 \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
} >"$ac_tmp/config.h" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
else
rm -f "$ac_file"
mv "$ac_tmp/config.h" "$ac_file" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
fi
else
- $as_echo "/* $configure_input */" \
+ printf "%s\n" "/* $configure_input */" >&1 \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
|| as_fn_error $? "could not create -" "$LINENO" 5
fi
@@ -24540,7 +26511,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/erts/configure.in b/erts/configure.ac
index d8ad6ff552..5a76948d35 100644
--- a/erts/configure.in
+++ b/erts/configure.ac
@@ -1,4 +1,4 @@
-dnl Process this file with autoconf to produce a configure script. -*-m4-*-
+dnl Process this file with autoconf to produce a configure script. -*-Autoconf-*-
dnl %CopyrightBegin%
dnl
@@ -21,8 +21,11 @@ dnl %CopyrightEnd%
dnl The string "FIXME convbreak" means that there is a break of
dnl autoconf convention that should be cleaned up.
-AC_INIT(vsn.mk)
-AC_PREREQ(2.59)
+AC_INIT
+AC_CONFIG_SRCDIR([emulator/beam/erl_process.c])
+AC_PREREQ([2.71])
+
+m4_include([otp.m4])
LM_PRECIOUS_VARS
@@ -73,24 +76,13 @@ erl_top=${ERL_TOP}
# echo X
# echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-AC_CONFIG_AUX_DIRS($srcdir/autoconf)
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
dnl ----------------------------------------------------------------------
dnl Figure out what system we are running on.
dnl ----------------------------------------------------------------------
-#
-# To configure for free source run ./configure --host=free_source
-#
-dnl
-dnl AC_CANONICAL_HOST does not like free_source as a host specification,
-dnl so we make a little special case.
-dnl
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=$host
-fi
+ERL_CANONICAL_SYSTEM_TYPE
if test "$cross_compiling" = "yes"; then
CROSS_COMPILING=yes
@@ -101,9 +93,9 @@ AC_SUBST(CROSS_COMPILING)
ERL_XCOMP_SYSROOT_INIT
-AC_ISC_POSIX
+AC_SEARCH_LIBS([strerror],[cposix])
-AC_CONFIG_HEADER($host/config.h:config.h.in include/internal/$host/ethread_header_config.h:include/internal/ethread_header_config.h.in include/$host/erl_int_sizes_config.h:include/erl_int_sizes_config.h.in)
+AC_CONFIG_HEADERS([$host/config.h:config.h.in include/internal/$host/ethread_header_config.h:include/internal/ethread_header_config.h.in include/$host/erl_int_sizes_config.h:include/erl_int_sizes_config.h.in])
dnl ----------------------------------------------------------------------
dnl Optional features.
dnl ----------------------------------------------------------------------
@@ -399,16 +391,18 @@ esac
i_noretpoline_attr=""
-if test X"$with_spectre_mitigation" != X"no"; then
+AS_IF([test X"$with_spectre_mitigation" != X"no"],
+ [
CFLAGS="$CFLAGS -mindirect-branch=thunk"
AC_MSG_CHECKING([for spectre mitigation])
AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([],[return 0;])],
+ [AC_LANG_PROGRAM([[]],[[return 0;]])],
[AC_MSG_RESULT([yes])],
[AC_MSG_ERROR([no])])
- if test X"$with_spectre_mitigation" = X"incomplete"; then
+ AS_IF([test X"$with_spectre_mitigation" = X"incomplete"],
+ [
# gcc and clang support this attribute if they're recent enough. Note
# that we must compile with -Werror to check for actual support as they
# warn rather than error out on unsupported attributes.
@@ -419,13 +413,13 @@ if test X"$with_spectre_mitigation" != X"no"; then
AC_MSG_CHECKING([whether spectre mitigation can be disabled on a per-function basis])
AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([$i_noretpoline_attr],[return 0;])],
+ [AC_LANG_PROGRAM([[$i_noretpoline_attr]],[[return 0;]])],
[AC_MSG_RESULT([yes])],
[AC_MSG_ERROR([no])])
CFLAGS="$i_preserve_cflags"
- fi
-fi
+ ])
+ ])
AC_DEFINE_UNQUOTED(ERTS_NO_RETPOLINE, $i_noretpoline_attr,
[Per-function attribute for disabling retpoline. This is
@@ -436,9 +430,95 @@ dnl ----------------------------------------------------------------------
dnl Checks for programs.
dnl ----------------------------------------------------------------------
+AC_LANG([C])
+
AC_PROG_CC
AC_SUBST(GCC)
+AC_PROG_CXX
+AC_SUBST(CXXFLAGS)
+
+AC_PROG_EGREP
+AC_PROG_CPP
+AC_PROG_RANLIB
+AC_PROG_YACC
+LM_PROG_PERL5
+if test "$ac_cv_path_PERL" = false; then
+ AC_MSG_ERROR([Perl version 5 is required to build the emulator!])
+fi
+AC_PROG_LN_S
+AC_CHECK_TOOL([AR], [ar], [false])
+if test "$ac_cv_prog_AR" = false; then
+ AC_MSG_ERROR([No 'ar' command found in PATH])
+fi
+
+
+#
+# Get programs needed for building the documentation
+#
+
+## Delete previous failed configure results
+if test -f doc/CONF_INFO; then
+ rm -f doc/CONF_INFO
+fi
+
+AC_CHECK_PROGS(XSLTPROC, xsltproc)
+if test -z "$XSLTPROC"; then
+ echo "xsltproc" >> doc/CONF_INFO
+ AC_MSG_WARN([No 'xsltproc' command found: the documentation cannot be built])
+fi
+
+AC_CHECK_PROGS(FOP, fop)
+if test -z "$FOP"; then
+ FOP="$ERL_TOP/make/fakefop"
+ echo "fop" >> doc/CONF_INFO
+ AC_MSG_WARN([No 'fop' command found: going to generate placeholder PDF files])
+fi
+
+AC_CHECK_PROGS(XMLLINT, xmllint)
+if test -z "$XMLLINT"; then
+ echo "xmllint" >> doc/CONF_INFO
+ AC_MSG_WARN([No 'xmllint' command found: can't run the xmllint target for the documentation])
+fi
+
+dnl
+dnl We can live with Solaris /usr/ucb/install
+dnl
+case $host in
+ *-*-solaris*|free_source)
+ if test -x /usr/ucb/install; then
+ INSTALL="/usr/ucb/install -c"
+ fi
+ ;;
+ *)
+ ;;
+esac
+AC_PROG_INSTALL
+LM_PROG_INSTALL_DIR
+
+case $host_os in
+ darwin*)
+ dnl Need to preserve modification time on archives;
+ dnl otherwise, ranlib has to be run on archives
+ dnl again after installation.
+ INSTALL_DATA="$INSTALL_DATA -p";;
+ *)
+ ;;
+esac
+
+dnl
+dnl Fix for Tilera install permissions
+dnl
+
+case $build in
+ *tile*)
+ INSTALL_PROGRAM="$INSTALL_PROGRAM -m755"
+ INSTALL_SCRIPT="$INSTALL_SCRIPT -m755"
+ ;;
+ *)
+ ;;
+esac
+
dnl ---------------------------------------------------------------------
dnl Special stuff regarding CFLAGS and details in the environment...
dnl ---------------------------------------------------------------------
@@ -507,14 +587,14 @@ esac
lfs_conf=ok
lfs_source=none
-if test "${LFS_CFLAGS+set}" = "set" || \
- test "${LFS_LDFLAGS+set}" = "set" || \
- test "${LFS_LIBS+set}" = "set"; then
+AS_IF([test "${LFS_CFLAGS+set}" = "set" || test "${LFS_LDFLAGS+set}" = "set" || test "${LFS_LIBS+set}" = "set"],
+ [
lfs_source=user
-else
+ ],
+ [
LM_CHECK_GETCONF
test "$GETCONF" = "false" || lfs_source=getconf
-fi
+ ])
if test "$lfs_source" = "none"; then
AC_MSG_WARN([Do not know how to check for large file support flags; no getconf is available])
@@ -545,7 +625,8 @@ else
fi
fi
-if test "x$GCC" = xyes; then
+AS_IF([test "x$GCC" = xyes],
+ [
# Treat certain GCC warnings as errors
LM_TRY_ENABLE_CFLAG([-Werror=return-type], [WERRORFLAGS])
LM_TRY_ENABLE_CFLAG([-Werror=implicit], [WERRORFLAGS])
@@ -566,7 +647,7 @@ if test "x$GCC" = xyes; then
saved_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Wdeclaration-after-statement"
- AC_TRY_COMPILE([],[;], warn_decl_after_st=true, warn_decl_after_st=false)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[;]])],[warn_decl_after_st=true],[warn_decl_after_st=false])
if test "X$warn_decl_after_st" = "Xtrue"; then
WFLAGS="$WFLAGS -Wdeclaration-after-statement"
fi
@@ -577,17 +658,18 @@ if test "x$GCC" = xyes; then
# Until version 10, gcc has had -fcommon as default, which allows and merges
# such dubious duplicates.
LM_TRY_ENABLE_CFLAG([-fno-common], [CFLAGS])
-else
+ ],
+ [
WFLAGS=""
WERRORFLAGS=${WERRORFLAGS:-""}
-fi
+ ])
AC_MSG_CHECKING([C99 support])
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[
#if __STDC_VERSION__ < 199901L
#error "Not C99"
-#endif])],
+#endif]])],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
CFLAGS="-std=gnu99 $CFLAGS"
@@ -614,57 +696,63 @@ LM_CHECK_RUN_CFLAG([-fprofile-generate -Werror],[PROFILE_GENERATE])
LM_CHECK_RUN_CFLAG([-fprofile-use -Werror],[PROFILE_USE])
LM_CHECK_RUN_CFLAG([-fprofile-use -fprofile-correction -Werror],[PROFILE_CORRECTION])
-if test "X$PROFILE_CORRECTION" = "Xtrue"; then
+AS_IF([test "X$PROFILE_CORRECTION" = "Xtrue"],
+ [
saved_CFLAGS=$CFLAGS
saved_LDFLAGS=$LDFLAGS
CFLAGS="-fprofile-generate $saved_CFLAGS"
LDFLAGS="-fprofile-generate $saved_LDFLAGS"
AC_MSG_CHECKING([whether $CC links with -fprofile-generate])
- AC_LINK_IFELSE([AC_LANG_PROGRAM([],[return 0;])],
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[return 0;]])],
[AC_MSG_RESULT([yes])
PROFILE_GENERATE=true],
[AC_MSG_RESULT([no])
PROFILE_GENERATE=false])
CFLAGS=$saved_CFLAGS
LDFLAGS=$saved_LDFLAGS
-fi
+ ])
## Check if this is clang
LM_CHECK_ENABLE_CFLAG([-fprofile-instr-generate -Werror],[PROFILE_INSTR_GENERATE])
-if test "X$PROFILE_INSTR_GENERATE" = "Xtrue"; then
+AS_IF([test "X$PROFILE_INSTR_GENERATE" = "Xtrue"],
+ [
# It was clang, now we also have to check if we have llvm-profdata and that
# we can link programs with -fprofile-instr-use
saved_CFLAGS=$CFLAGS;
CFLAGS="-fprofile-instr-generate -Werror $saved_CFLAGS"
- AC_RUN_IFELSE([AC_LANG_PROGRAM([],[])],
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
[AC_PATH_PROG([LLVM_PROFDATA], [llvm-profdata],[],[$PATH:/Library/Developer/CommandLineTools/usr/bin])
AC_CHECK_PROGS([XCRUN], [xcrun])
- if test "X$XCRUN" != "X" -a "X$LLVM_PROFDATA" = "X"; then
+ AS_IF([test "X$XCRUN" != "X" -a "X$LLVM_PROFDATA" = "X"],
+ [
AC_MSG_CHECKING([for $XCRUN $LLVM_PROFDATA])
- if $XCRUN $LLVM_PROFDATA --help 2>& AS_MESSAGE_LOG_FD >& AS_MESSAGE_LOG_FD; then
+ AS_IF([$XCRUN $LLVM_PROFDATA --help 2>& AS_MESSAGE_LOG_FD >& AS_MESSAGE_LOG_FD],
+ [
LLVM_PROFDATA="$XCRUN $LLVM_PROFDATA"
AC_MSG_RESULT([yes])
- else
+ ],
+ [
AC_MSG_RESULT([no])
- fi
- fi
+ ])
+ ])
AC_SUBST(LLVM_PROFDATA)
- if test "X$LLVM_PROFDATA" != "X"; then
+ AS_IF([test "X$LLVM_PROFDATA" != "X"],
+ [
CFLAGS="-fprofile-instr-use=default.profdata $saved_CFLAGS";
$LLVM_PROFDATA merge -output=default.profdata *.profraw;
AC_MSG_CHECKING([whether $CC accepts -fprofile-instr-use=default.profdata -Werror])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[return 0;])],
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[return 0;]])],
[AC_MSG_RESULT([yes])
PROFILE_INSTR_USE=true],
[AC_MSG_RESULT([no])
PROFILE_INSTR_USE=false])
rm -f default.profdata
- fi],
+ ])],
[],
[AC_MSG_NOTICE([Disabling PGO when cross-compiling])])
rm -f *.profraw
CFLAGS=$saved_CFLAGS;
-fi
+ ])
AC_ARG_ENABLE(pgo,
AS_HELP_STRING([--enable-pgo],
@@ -839,92 +927,6 @@ else
AC_MSG_RESULT([no])
fi
-
-dnl some tests below will call this if we haven't already - and autoconf
-dnl can't handle those tests being done conditionally at runtime
-AC_PROG_CPP
-
-AC_PROG_RANLIB
-
-AC_PROG_YACC
-LM_PROG_PERL5
-if test "$ac_cv_path_PERL" = false; then
- AC_MSG_ERROR([Perl version 5 is required to build the emulator!])
-fi
-AC_PROG_LN_S
-
-
-AC_CHECK_TOOL([AR], [ar], [false])
-if test "$ac_cv_prog_AR" = false; then
- AC_MSG_ERROR([No 'ar' command found in PATH])
-fi
-
-#
-# Get programs needed for building the documentation
-#
-
-## Delete previous failed configure results
-if test -f doc/CONF_INFO; then
- rm -f doc/CONF_INFO
-fi
-
-AC_CHECK_PROGS(XSLTPROC, xsltproc)
-if test -z "$XSLTPROC"; then
- echo "xsltproc" >> doc/CONF_INFO
- AC_MSG_WARN([No 'xsltproc' command found: the documentation cannot be built])
-fi
-
-AC_CHECK_PROGS(FOP, fop)
-if test -z "$FOP"; then
- FOP="$ERL_TOP/make/fakefop"
- echo "fop" >> doc/CONF_INFO
- AC_MSG_WARN([No 'fop' command found: going to generate placeholder PDF files])
-fi
-
-AC_CHECK_PROGS(XMLLINT, xmllint)
-if test -z "$XMLLINT"; then
- echo "xmllint" >> doc/CONF_INFO
- AC_MSG_WARN([No 'xmllint' command found: can't run the xmllint target for the documentation])
-fi
-
-dnl
-dnl We can live with Solaris /usr/ucb/install
-dnl
-case $host in
- *-*-solaris*|free_source)
- if test -x /usr/ucb/install; then
- INSTALL="/usr/ucb/install -c"
- fi
- ;;
- *)
- ;;
-esac
-AC_PROG_INSTALL
-LM_PROG_INSTALL_DIR
-
-case $host_os in
- darwin*)
- dnl Need to preserve modification time on archives;
- dnl otherwise, ranlib has to be run on archives
- dnl again after installation.
- INSTALL_DATA="$INSTALL_DATA -p";;
- *)
- ;;
-esac
-
-dnl
-dnl Fix for Tilera install permissions
-dnl
-
-case $build in
- *tile*)
- INSTALL_PROGRAM="$INSTALL_PROGRAM -m755"
- INSTALL_SCRIPT="$INSTALL_SCRIPT -m755"
- ;;
- *)
- ;;
-esac
-
dnl ----------------------------------------------------------------------
dnl Misc. things (some of them should go away)
dnl ----------------------------------------------------------------------
@@ -946,7 +948,6 @@ LD_MAY_BE_WEAK=no
AC_SUBST(LD)
dnl Check for cygwin and object/exe files extension
-dnl AC_CYGWIN is deprecated
AC_EXEEXT
AC_OBJEXT
@@ -972,25 +973,32 @@ AC_SUBST(ERLANG_OSTYPE)
# Otherwise we assume that if the linker accepts the flag, it is needed.
AC_MSG_CHECKING(for extra flags needed to export symbols)
DEXPORT=""
-case $host_os in
- aix*|os400*)
+AS_CASE([$host_os],
+ [aix*|os400*],
+ [
DEXPORT=-Wl,-bexpall,-brtl
- ;;
- bsdi*)
+ ],
+ [bsdi*],
+ [
DEXPORT="-rdynamic "
- ;;
- win32)
+ ],
+ [win32],
+ [
DEXPORT=""
- ;;
- *)
+ ],
+ [
+ DEXPORT=
save_ldflags="$LDFLAGS"
LDFLAGS=-Wl,-export-dynamic
- AC_TRY_LINK(,,[DEXPORT=-Wl,-export-dynamic], [
- LDFLAGS=-Wl,-Bexport
- AC_TRY_LINK(,,[DEXPORT=-Wl,-Bexport],)])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[DEXPORT="$LDFLAGS"])
+ AS_IF([test "$DEXPORT" = ""],
+ [
+ LDFLAGS=-Wl,-Bexport
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[DEXPORT="$LDFLAGS"])
+ ])
LDFLAGS="$save_ldflags"
- ;;
-esac
+ ])
+
AC_SUBST(DEXPORT)
case "x$DEXPORT" in
"x")
@@ -1127,18 +1135,17 @@ AC_CHECK_FUNCS([posix_fadvise closefrom])
AC_CHECK_HEADERS([linux/falloc.h])
dnl * Old glibcs have broken fallocate64(). Make sure not to use it.
AC_CACHE_CHECK([whether fallocate() works],i_cv_fallocate_works,[
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/falloc.h>
- ],
- [
+ ]], [[
int fd = creat("conftest.temp", 0600);
fallocate(fd, FALLOC_FL_KEEP_SIZE,(off_t) 1024,(off_t) 1024);
- ], i_cv_fallocate_works=yes, i_cv_fallocate_works=no)
+ ]])],[i_cv_fallocate_works=yes],[i_cv_fallocate_works=no])
])
if test $i_cv_fallocate_works = yes; then
AC_DEFINE(HAVE_FALLOCATE, 1, Define if you have a working fallocate())
@@ -1147,7 +1154,7 @@ fi
dnl * Old glibcs have broken posix_fallocate(). Make sure not to use it.
dnl * It may also be broken in AIX.
AC_CACHE_CHECK([whether posix_fallocate() works],i_cv_posix_fallocate_works,[
- AC_TRY_RUN([
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
#if !defined(__sun) && !defined(__sun__)
#define _XOPEN_SOURCE 600
#endif
@@ -1169,11 +1176,11 @@ AC_CACHE_CHECK([whether posix_fallocate() works],i_cv_posix_fallocate_works,[
unlink("conftest.temp");
return ret;
}
- ], [
+ ]])],[
i_cv_posix_fallocate_works=yes
- ], [
+ ],[
i_cv_posix_fallocate_works=no
- ], [
+ ],[
i_cv_posix_fallocate_works=no
])
])
@@ -1271,8 +1278,8 @@ dnl ----------------------------------------------------------------------
TERMCAP_LIB=
-if test "x$with_termcap" != "xno" &&
- test "X$host" != "Xwin32"; then
+AS_IF([test "x$with_termcap" != "xno" && test "X$host" != "Xwin32"],
+ [
# try these libs
termcap_libs="tinfo ncurses curses termcap termlib"
@@ -1286,7 +1293,7 @@ if test "x$with_termcap" != "xno" &&
if test "x$TERMCAP_LIB" = "x"; then
AC_MSG_ERROR([No curses library functions found])
fi
-fi
+ ])
AC_SUBST(TERMCAP_LIB)
@@ -1295,16 +1302,16 @@ if test "x$TERMCAP_LIB" != "x"; then
AC_DEFINE(HAVE_TERMCAP, 1, [Define if termcap functions exists])
fi
-if test "X$host" != "Xwin32"; then
+AS_IF([test "X$host" != "Xwin32"],
+ [
AC_MSG_CHECKING(for wcwidth)
- AC_TRY_LINK([#include <wchar.h>], [wcwidth(0);],
- have_wcwidth=yes, have_wcwidth=no)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>]], [[wcwidth(0);]])],[have_wcwidth=yes],[have_wcwidth=no])
if test $have_wcwidth = yes; then
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_WCWIDTH, [1],
[Define to 1 if you have a `wcwidth' function.])
fi
-fi
+ ])
dnl -------------
dnl zlib
@@ -1320,11 +1327,13 @@ AC_ARG_ENABLE(builtin-zlib,
Z_LIB=
-if test "x$enable_builtin_zlib" = "xyes"; then
+AS_IF([test "x$enable_builtin_zlib" = "xyes"],
+ [
AC_DEFINE(HAVE_ZLIB_INFLATEGETDICTIONARY, 1,
[Define if your zlib version defines inflateGetDictionary.])
AC_MSG_NOTICE([Using our own built-in zlib source])
-else
+ ],
+ [
AC_MSG_CHECKING(for zlib 1.2.5 or higher)
zlib_save_LIBS=$LIBS
LIBS="-lz $LIBS"
@@ -1349,15 +1358,17 @@ error
AC_MSG_RESULT(no)
])
-if test "$Z_LIB" != ""; then
+AS_IF([test "$Z_LIB" != ""],
+ [
AC_SEARCH_LIBS(inflateGetDictionary, [z],
AC_DEFINE(HAVE_ZLIB_INFLATEGETDICTIONARY, 1,
[Define if your zlib version defines inflateGetDictionary.]))
-fi
+ ])
LIBS=$zlib_save_LIBS
-fi
+ ])
+
AC_SUBST(Z_LIB)
@@ -1380,11 +1391,10 @@ else
fi
fi
-if test "x$USE_ESOCK" = "xyes"; then
- if test "x$USE_ESOCK" = "xyes"; then
+AS_IF([test "x$USE_ESOCK" = "xyes" && test "x$USE_ESOCK" = "xyes"],
+ [
AC_CHECK_FUNCS([localtime_r strftime getprotoent setprotoent endprotoent])
- fi
-fi
+ ])
AC_SUBST(USE_ESOCK)
@@ -1501,14 +1511,16 @@ tk_oldLibs=$LIBS
erl_checkBoth=0
SOCKET_LIBS=""
AC_CHECK_FUNC(connect, erl_checkSocket=0, erl_checkSocket=1)
-if test "$erl_checkSocket" = 1; then
+AS_IF([test "$erl_checkSocket" = 1],
+ [
AC_CHECK_LIB(socket, main, SOCKET_LIBS="-lsocket", erl_checkBoth=1)
-fi
+ ])
-if test "$erl_checkBoth" = 1; then
+AS_IF([test "$erl_checkBoth" = 1],
+ [
LIBS="$LIBS -lsocket -lnsl"
AC_CHECK_FUNC(accept, SOCKET_LIBS="-lsocket -lnsl")
-fi
+ ])
LIBS="$tk_oldLibs $SOCKET_LIBS"
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, main, [SOCKET_LIBS="$SOCKET_LIBS -lnsl"]))
@@ -1523,22 +1535,23 @@ dnl These gethostbyname thingies use old style AC_DEFINE for BC with ancient
dnl autoconf...
dnl
-if test "$have_gethostbyname_r" = yes; then
+AS_IF([test "$have_gethostbyname_r" = yes],
+ [
# OK, so we have gethostbyname_r() - but do we know how to call it...?
# (if not, HAVE_GETHOSTBYNAME_R will not be defined at all)
- case $host_os in
- solaris2*)
+ AS_CASE([$host_os],
+ [solaris2*],
+ [
AC_DEFINE(HAVE_GETHOSTBYNAME_R, GHBN_R_SOLARIS,
[Define to flavour of gethostbyname_r])
- ;;
- aix*|os400*)
+ ],
+ [aix*|os400*],
+ [
# AIX version also needs "struct hostent_data" defn
- AC_TRY_COMPILE([#include <netdb.h>],
- [struct hostent_data hd;],
- AC_DEFINE(HAVE_GETHOSTBYNAME_R, GHBN_R_AIX,
- [Define to flavour of gethostbyname_r]))
- ;;
- *)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]], [[struct hostent_data hd;]])],[AC_DEFINE(HAVE_GETHOSTBYNAME_R, GHBN_R_AIX,
+ Define to flavour of gethostbyname_r)],[])
+ ],
+ [
AC_EGREP_CPP(^yes$,[
#include <stdio.h>
#ifdef __GLIBC__
@@ -1546,23 +1559,21 @@ yes
#endif
], AC_DEFINE(HAVE_GETHOSTBYNAME_R, GHBN_R_GLIBC,
[Define to flavour of gethostbyname_r]))
- ;;
- esac
-fi
+ ])
+ ])
AC_MSG_CHECKING(for working posix_openpt implementation)
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#define _XOPEN_SOURCE 600
#include <stdlib.h>
#include <fcntl.h>
-],
-[
+]], [[
int mfd = posix_openpt(O_RDWR);
ptsname(mfd);
grantpt(mfd);
unlockpt(mfd);
return mfd;
-], working_posix_openpt=yes, working_posix_openpt=no)
+]])],[working_posix_openpt=yes],[working_posix_openpt=no])
if test "X$working_posix_openpt" = "Xyes"; then
AC_DEFINE(HAVE_WORKING_POSIX_OPENPT, [1],
@@ -1580,11 +1591,8 @@ dnl netdb.h version 1.18.
AC_MSG_CHECKING([if netdb.h requires netinet/in.h to be previously included])
AC_EGREP_CPP(sockaddr_in,
[#include <netdb.h>],
- AC_TRY_COMPILE([#include <netinet/in.h>
- #include <netdb.h>],
- [return 0;],
- need_in_h=yes,
- need_in_h=no),
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>
+ #include <netdb.h>]], [[return 0;]])],[need_in_h=yes],[need_in_h=no]),
need_in_h=no)
if test $need_in_h = yes; then
@@ -1598,10 +1606,7 @@ fi
dnl Check for type socklen_t
dnl
AC_MSG_CHECKING([for socklen_t])
-AC_TRY_COMPILE( [#include <sys/socket.h>],
- [socklen_t test;],
- have_socklen_t=yes,
- have_socklen_t=no),
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[socklen_t test;]])],[have_socklen_t=yes],[have_socklen_t=no]),
if test $have_socklen_t = yes; then
AC_DEFINE(HAVE_SOCKLEN_T,[1],[Define if we have socklen_t])
@@ -1616,8 +1621,7 @@ dnl (e.g. function call for thread-safe) a simple 'extern int' may conflict
dnl (we do assume that h_errno exists at all...)
AC_CACHE_CHECK([for h_errno declaration in netdb.h],
ac_cv_decl_h_errno,
-[AC_TRY_COMPILE([#include <netdb.h>], [int err = h_errno;],
- ac_cv_decl_h_errno=yes, ac_cv_decl_h_errno=no)])
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]], [[int err = h_errno;]])],[ac_cv_decl_h_errno=yes],[ac_cv_decl_h_errno=no])])
if test $ac_cv_decl_h_errno = yes; then
AC_DEFINE(H_ERRNO_DECLARED,[1],
[define if h_errno is declared (in some way) in a system header file])
@@ -1633,9 +1637,10 @@ saved_cppflags=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $EMU_THR_DEFS"
AC_HEADER_DIRENT
-AC_HEADER_STDC
+AC_CHECK_INCLUDES_DEFAULT
+
AC_HEADER_SYS_WAIT
-AC_HEADER_TIME
+AC_CHECK_HEADERS_ONCE([sys/time.h])
dnl Interactive UX needs <net/errno.h> for socket related error codes.
dnl Some Linuxes needs <sys/socketio.h> instead of <sys/sockio.h>
@@ -1665,7 +1670,8 @@ AC_CHECK_MEMBERS([struct ifreq.ifr_enaddr], [], [],
dnl ----------------------------------------------------------------------
dnl Check the availability of systemd
dnl ----------------------------------------------------------------------
-if test x"$enable_systemd" != x"no"; then
+AS_IF([test x"$enable_systemd" != x"no"],
+[
systemd_daemon_save_LIBS=$LIBS
LIBS=
@@ -1685,7 +1691,7 @@ elif test x"$enable_systemd" = x"yes"; then
AC_MSG_FAILURE([--enable-systemd was given, but test for systemd failed])
fi
LIBS=$systemd_daemon_save_LIBS
-fi
+])
AC_SUBST(SYSTEMD_DAEMON_LIBS)
@@ -1693,7 +1699,8 @@ dnl ----------------------------------------------------------------------
dnl Check the availability for libdlpi
dnl ----------------------------------------------------------------------
AC_CHECK_LIB(dlpi, dlpi_open)
-if test x"$ac_cv_lib_dlpi_dlpi_open" = x"no"; then
+AS_IF([test x"$ac_cv_lib_dlpi_dlpi_open" = x"no"],
+ [
unset -v ac_cv_lib_dlpi_dlpi_open
dnl Try again now with -L/lib (or ditto 64) as argument to linker since
dnl gcc makes /usr/ccs/bin/ld ignore the crle configured linker default paths
@@ -1729,7 +1736,7 @@ if test x"$ac_cv_lib_dlpi_dlpi_open" = x"no"; then
LDFLAGS="$save_ldflags"
fi
unset -v save_ldflags
-fi
+ ])
AC_CHECK_HEADER(sys/resource.h,
[AC_DEFINE(HAVE_SYS_RESOURCE_H, 1,
@@ -1759,7 +1766,8 @@ AC_CHECK_HEADERS([netpacket/packet.h],
dnl Check for kernel SCTP support
AC_SUBST(LIBSCTP)
-if test "x$enable_sctp" != "xno" ; then
+AS_IF([test "x$enable_sctp" != "xno"],
+ [
AC_CHECK_HEADER(netinet/sctp.h,
[LIBSCTP=libsctp.so.1
AC_DEFINE(HAVE_SCTP_H, [1],
@@ -1769,7 +1777,7 @@ if test "x$enable_sctp" != "xno" ; then
#include <sys/socket.h>
#endif
])
-fi
+ ])
case "x$enable_sctp" in
xno|x)
@@ -1780,7 +1788,8 @@ case "x$enable_sctp" in
fi;;
esac
-if test x"$ac_cv_header_netinet_sctp_h" = x"yes"; then
+AS_IF([test x"$ac_cv_header_netinet_sctp_h" = x"yes"],
+ [
AS_IF([test "x$enable_sctp" = "xlib"],
AC_CHECK_LIB(sctp, sctp_bindx))
AC_CHECK_FUNCS([sctp_bindx sctp_peeloff sctp_getladdrs sctp_freeladdrs sctp_getpaddrs sctp_freepaddrs])
@@ -1821,7 +1830,7 @@ if test x"$ac_cv_header_netinet_sctp_h" = x"yes"; then
#endif
#include <netinet/sctp.h>
])
-fi
+ ])
dnl Check for setns
AC_CHECK_HEADERS(sched.h setns.h)
@@ -1847,15 +1856,12 @@ LM_DECL_SYS_ERRLIST
AC_CACHE_CHECK([if windows.h includes winsock2.h],
erts_cv_windows_h_includes_winsock2_h,
- AC_TRY_COMPILE([#include <windows.h>
- ],
- [#ifndef _WINSOCK2API_
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <windows.h>
+ ]], [[#ifndef _WINSOCK2API_
#error winsock2.h not included
#endif
int i = 1;
- ],
- erts_cv_windows_h_includes_winsock2_h=yes,
- erts_cv_windows_h_includes_winsock2_h=no))
+ ]])],[erts_cv_windows_h_includes_winsock2_h=yes],[erts_cv_windows_h_includes_winsock2_h=no]))
if test $erts_cv_windows_h_includes_winsock2_h = yes; then
AC_DEFINE(WINDOWS_H_INCLUDES_WINSOCK2_H, 1, \
[Define if windows.h includes winsock2.h])
@@ -1869,7 +1875,7 @@ dnl Checks for typedefs, structures, and compiler characteristics.
dnl ----------------------------------------------------------------------
AC_C_CONST
-AC_TYPE_SIGNAL
+
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
@@ -1899,11 +1905,10 @@ AC_SUBST(BITS64)
AC_MSG_CHECKING([for C compiler 'restrict' support])
restrict_keyword=""
for x in restrict __restrict; do
- AC_TRY_COMPILE([int * $x foo(int * $x arg);
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int * $x foo(int * $x arg);
int * $x foo(int * $x arg)
{ int * $x var=arg; return var;}
- ],[],
- [restrict_keyword=$x],[])
+ ]], [[]])],[restrict_keyword=$x],[])
if test "x$restrict_keyword" != "x"; then
break
fi
@@ -1918,15 +1923,13 @@ fi
if test "x$ac_compiler_gnu" = "xyes"; then
AC_MSG_CHECKING([if we should add -fno-tree-copyrename to CFLAGS for computed gotos to work properly])
## tree-copyrename was broken in gcc 4.3 and then removed in gcc 6
-AC_TRY_COMPILE([],[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
#if (__GNUC__ > 4 && __GNUC__ < 6) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
;
#else
#error old and ok
#endif
- ],
- no_tree_copyrename=yes,
- no_tree_copyrename=no)
+ ]])],[no_tree_copyrename=yes],[no_tree_copyrename=no])
if test "x$no_tree_copyrename" = "xyes"; then
CFLAGS="$CFLAGS -fno-tree-copyrename"
@@ -1936,7 +1939,7 @@ else
fi
AC_MSG_CHECKING([for broken gcc-4.3.0 compiler])
-AC_TRY_RUN([
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
/* pr36339.c */
extern void abort (void);
@@ -1969,7 +1972,7 @@ int main(void)
abort ();
return 0;
}
-], gcc_4_3_0_bug=no, gcc_4_3_0_bug=yes, gcc_4_3_0_bug=cross)
+]])],[gcc_4_3_0_bug=no],[gcc_4_3_0_bug=yes],[gcc_4_3_0_bug=cross])
case $gcc_4_3_0_bug in
yes|no)
@@ -2028,21 +2031,21 @@ AC_SEARCH_LIBS(fdatasync, [rt])
dnl sendfile syscall
-case $host_os in
- linux*|freebsd*|dragonfly*|darwin*)
+AS_CASE([$host_os],
+ [linux*|freebsd*|dragonfly*|darwin*],
+ [
AC_CHECK_FUNCS([sendfile])
- ;;
- solaris*)
+ ],
+ [solaris*],
+ [
AC_SEARCH_LIBS(sendfilev, sendfile,
AC_DEFINE([HAVE_SENDFILEV],[1],
[Define to 1 if you have the `sendfilev' function.]))
- ;;
- win32)
+ ],
+ [win32],
+ [
LIBS="$LIBS -lmswsock"
- ;;
- *)
- ;;
-esac
+ ])
dnl ----------------------------------------------------------------------
dnl Checks for library functions.
@@ -2068,7 +2071,7 @@ AC_CHECK_HEADERS(ws2tcpip.h,[],[],[
])
dnl AC_CHECK_FUNC(getaddrinfo, have_getaddrinfo=yes, have_getaddrinfo=no)
AC_MSG_CHECKING(for getaddrinfo)
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_WINSOCK2_H
@@ -2084,14 +2087,13 @@ AC_TRY_LINK([
#include <sys/socket.h>
#include <netdb.h>
#endif
-],
-[
+]], [[
getaddrinfo("","",NULL,NULL);
-],have_getaddrinfo=yes, have_getaddrinfo=no)
+]])],[have_getaddrinfo=yes],[have_getaddrinfo=no])
if test $have_getaddrinfo = yes; then
AC_MSG_RESULT([yes])
AC_MSG_CHECKING([whether getaddrinfo accepts enough flags])
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_WINSOCK2_H
@@ -2107,8 +2109,7 @@ if test $have_getaddrinfo = yes; then
#include <sys/socket.h>
#include <netdb.h>
#endif
-],
-[
+]], [[
struct addrinfo hints, *ai;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_CANONNAME;
@@ -2120,7 +2121,7 @@ if test $have_getaddrinfo = yes; then
} else {
exit(1);
}
-],, have_getaddrinfo=no)
+]])],[],[have_getaddrinfo=no])
AC_MSG_RESULT($have_getaddrinfo)
case $have_getaddrinfo in
yes)
@@ -2132,7 +2133,7 @@ else
AC_MSG_RESULT([no])
fi
AC_MSG_CHECKING(for getnameinfo)
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_WINSOCK2_H
@@ -2148,10 +2149,9 @@ AC_TRY_LINK([
#include <sys/socket.h>
#include <netdb.h>
#endif
-],
-[
+]], [[
getnameinfo(NULL,0,NULL,0,NULL,0,0);
-],have_getnameinfo=yes, have_getnameinfo=no)
+]])],[have_getnameinfo=yes],[have_getnameinfo=no])
if test $have_getnameinfo = yes; then
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETNAMEINFO, [1],
@@ -2173,13 +2173,13 @@ AC_CHECK_FUNCS([ieee_handler fpsetmask finite isnan isinf res_gethostbyname dlop
## We have a special check for inet_pton as AC_CHECK_FUCNS does not work
## on windows 32-bit as there a macro is used to rename the symbol...
AC_MSG_CHECKING([for inet_pton])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#ifdef WIN32
#include <ws2tcpip.h>
#else
#include <arpa/inet.h>
#endif
-],[inet_pton(2,"",(void*)0)], have_inet_pton=yes, have_inet_pton=no)
+]], [[inet_pton(2,"",(void*)0)]])],[have_inet_pton=yes],[have_inet_pton=no])
if test $have_inet_pton = yes; then
AC_DEFINE(HAVE_INET_PTON,[1],
@@ -2190,8 +2190,7 @@ else
fi
AC_MSG_CHECKING([for isfinite])
-AC_TRY_LINK([#include <math.h>],
- [isfinite(0);], have_isfinite=yes, have_isfinite=no)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[isfinite(0);]])],[have_isfinite=yes],[have_isfinite=no])
if test $have_isfinite = yes; then
AC_DEFINE(HAVE_ISFINITE,[1],
@@ -2201,14 +2200,19 @@ else
AC_MSG_RESULT(no)
fi
-case X$erl_xcomp_posix_memalign in
- Xno) ;;
- Xyes) have_posix_memalign=yes ;;
- *)
+AS_CASE([X$erl_xcomp_posix_memalign],
+ [Xno],
+ [],
+ [Xyes],
+ [
+ have_posix_memalign=yes
+ ],
+ [
AC_CHECK_FUNC(
[posix_memalign],
- [if test "$cross_compiling" != yes; then
-AC_TRY_RUN([
+ [AS_IF([test "$cross_compiling" != yes],
+ [
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
int main(void) {
void *ptr = NULL;
@@ -2218,12 +2222,13 @@ int main(void) {
return error;
return 0;
}
-],have_posix_memalign=yes
-)
- else
+]])],[have_posix_memalign=yes
+],[],[])
+ ],
+ [
have_posix_memalign=yes
- fi]);;
-esac
+ ])])
+ ])
if test "$have_posix_memalign" = "yes"; then
AC_DEFINE(HAVE_POSIX_MEMALIGN,[1],
@@ -2252,10 +2257,7 @@ LM_CHECK_FUNC_DECL(fread, [extern int fread();],,
dnl Checking with TRY_LINK since putc_unlocked might be (probably is) a macro
AC_CACHE_CHECK([for putc_unlocked],
erts_cv_putc_unlocked,
- AC_TRY_LINK([#include <stdio.h>],
- [int res = putc_unlocked('x',stdout);],
- erts_cv_putc_unlocked=yes,
- erts_cv_putc_unlocked=no))
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[int res = putc_unlocked('x',stdout);]])],[erts_cv_putc_unlocked=yes],[erts_cv_putc_unlocked=no]))
if test $erts_cv_putc_unlocked = yes; then
AC_DEFINE(HAVE_PUTC_UNLOCKED, 1, [Define if you have putc_unlocked])
fi
@@ -2263,10 +2265,7 @@ fi
dnl Checking with TRY_LINK since fwrite_unlocked might be a macro
AC_CACHE_CHECK([for fwrite_unlocked],
erts_cv_fwrite_unlocked,
- AC_TRY_LINK([#include <stdio.h>],
- [size_t res = fwrite_unlocked(NULL,sizeof(char),0,stdout);],
- erts_cv_fwrite_unlocked=yes,
- erts_cv_fwrite_unlocked=no))
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[size_t res = fwrite_unlocked(NULL,sizeof(char),0,stdout);]])],[erts_cv_fwrite_unlocked=yes],[erts_cv_fwrite_unlocked=no]))
if test $erts_cv_fwrite_unlocked = yes; then
AC_DEFINE(HAVE_FWRITE_UNLOCKED, 1, [Define if you have fwrite_unlocked])
fi
@@ -2348,8 +2347,7 @@ dnl Checks for features/quirks in the system that affects Erlang.
dnl ----------------------------------------------------------------------
AC_MSG_CHECKING([for sched_getaffinity/sched_setaffinity])
-AC_TRY_LINK([#include <sched.h>],
-[
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sched.h>]], [[
#ifndef CPU_SETSIZE
#error no CPU_SETSIZE
#endif
@@ -2361,9 +2359,7 @@ AC_TRY_LINK([#include <sched.h>],
res = sched_getaffinity(0, sizeof(cpu_set_t), &cpuset);
res = CPU_ISSET(1, &cpuset);
CPU_CLR(1, &cpuset);
-],
- sched_xetaffinity=yes,
- sched_xetaffinity=no)
+]])],[sched_xetaffinity=yes],[sched_xetaffinity=no])
AC_MSG_RESULT([$sched_xetaffinity])
if test $sched_xetaffinity = yes; then
AC_DEFINE(HAVE_SCHED_xETAFFINITY, 1, [Define if you have sched_getaffinity/sched_setaffinity])
@@ -2371,8 +2367,7 @@ fi
AC_MSG_CHECKING([for pset functionality])
-AC_TRY_LINK([#include <sys/pset.h>],
-[
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/pset.h>]], [[
int res;
psetid_t id = PS_MYID;
int type = PS_PRIVATE;
@@ -2380,36 +2375,30 @@ AC_TRY_LINK([#include <sys/pset.h>],
processorid_t cpulist[1024];
res = pset_info(id, &type, &numcpus, &cpulist[0]);
-],
- pset_functionality=yes,
- pset_functionality=no)
+]])],[pset_functionality=yes],[pset_functionality=no])
AC_MSG_RESULT([$pset_functionality])
if test $pset_functionality = yes; then
AC_DEFINE(HAVE_PSET, 1, [Define if you have pset functionality])
fi
AC_MSG_CHECKING([for processor_bind functionality])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <sys/types.h>
#include <sys/processor.h>
#include <sys/procset.h>
-],
-[
+]], [[
int res = processor_bind(P_LWPID, P_MYID, PBIND_NONE, NULL);
-],
- processor_bind_functionality=yes,
- processor_bind_functionality=no)
+]])],[processor_bind_functionality=yes],[processor_bind_functionality=no])
AC_MSG_RESULT([$processor_bind_functionality])
if test $processor_bind_functionality = yes; then
AC_DEFINE(HAVE_PROCESSOR_BIND, 1, [Define if you have processor_bind functionality])
fi
AC_MSG_CHECKING([for cpuset_getaffinity/cpuset_setaffinity])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <sys/param.h>
#include <sys/cpuset.h>
-],
-[
+]], [[
int res;
cpuset_t cpuset;
CPU_ZERO(&cpuset);
@@ -2418,9 +2407,7 @@ AC_TRY_LINK([
res = cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(cpuset_t), &cpuset);
res = CPU_ISSET(1, &cpuset);
CPU_CLR(1, &cpuset);
-],
- cpuset_xetaffinity=yes,
- cpuset_xetaffinity=no)
+]])],[cpuset_xetaffinity=yes],[cpuset_xetaffinity=no])
AC_MSG_RESULT([$cpuset_xetaffinity])
if test $cpuset_xetaffinity = yes; then
AC_DEFINE(HAVE_CPUSET_xETAFFINITY, 1, [Define if you have cpuset_getaffinity/cpuset_setaffinity])
@@ -2428,27 +2415,21 @@ fi
AC_CACHE_CHECK([for 'end' symbol],
erts_cv_have_end_symbol,
- [AC_TRY_LINK([],
- [extern char end; {char *x = &end; *x= 0;}],
- erts_cv_have_end_symbol=yes,
- erts_cv_have_end_symbol=no)])
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char end; {char *x = &end; *x= 0;}]])],[erts_cv_have_end_symbol=yes],[erts_cv_have_end_symbol=no])])
if test $erts_cv_have_end_symbol = yes; then
AC_DEFINE(HAVE_END_SYMBOL, 1, [Define if you have the 'end' symbol])
fi
AC_CACHE_CHECK([for '_end' symbol],
erts_cv_have__end_symbol,
- [AC_TRY_LINK([],
- [extern char _end; {char *x = &_end; *x= 0;}],
- erts_cv_have__end_symbol=yes,
- erts_cv_have__end_symbol=no)])
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char _end; {char *x = &_end; *x= 0;}]])],[erts_cv_have__end_symbol=yes],[erts_cv_have__end_symbol=no])])
if test $erts_cv_have__end_symbol = yes; then
AC_DEFINE(HAVE__END_SYMBOL, 1, [Define if you have the '_end' symbol])
fi
AC_CACHE_CHECK([if __after_morecore_hook can track malloc()s core memory use],
erts_cv___after_morecore_hook_can_track_malloc,
- [AC_TRY_RUN([
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
#ifdef HAVE_MALLOC_H
# include <malloc.h>
@@ -2570,17 +2551,14 @@ int main(void)
return 1;
return 0;
}
- ],
- erts_cv___after_morecore_hook_can_track_malloc=yes,
- erts_cv___after_morecore_hook_can_track_malloc=no,
- [
+ ]])],[erts_cv___after_morecore_hook_can_track_malloc=yes],[erts_cv___after_morecore_hook_can_track_malloc=no],[
case X$erl_xcomp_after_morecore_hook in
X) erts_cv___after_morecore_hook_can_track_malloc=cross;;
Xyes|Xno) erts_cv___after_morecore_hook_can_track_malloc=$erl_xcomp_after_morecore_hook;;
*) AC_MSG_ERROR([Bad erl_xcomp_after_morecore_hook value: $erl_xcomp_after_morecore_hook]);;
esac
- ]
- )])
+
+ ])])
case $erts_cv___after_morecore_hook_can_track_malloc in
yes) AC_DEFINE(ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC, 1, \
@@ -2589,7 +2567,8 @@ case $erts_cv___after_morecore_hook_can_track_malloc in
*) ;;
esac
-if test "x$ac_cv_func_sbrk" = "xyes"; then
+AS_IF([test "x$ac_cv_func_sbrk" = "xyes"],
+ [
AC_CACHE_CHECK([types of sbrk()s return value and argument],
erts_cv_sbrk_ret_arg_types,
[
@@ -2601,10 +2580,8 @@ if test "x$ac_cv_func_sbrk" = "xyes"; then
for rtype in $ret_types; do
for atype in $arg_types; do
IFS=$save_ifs
- AC_TRY_LINK([#include <sys/types.h>
- #include <unistd.h>],
- [$rtype sbrk($atype incr);],
- [erts_cv_sbrk_ret_arg_types="$rtype,$atype"])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+ #include <unistd.h>]], [[$rtype sbrk($atype incr);]])],[erts_cv_sbrk_ret_arg_types="$rtype,$atype"],[])
IFS=","
if test "$erts_cv_sbrk_ret_arg_types" != "unknown"; then
break 2
@@ -2624,9 +2601,10 @@ EOF
AC_DEFINE_UNQUOTED(SBRK_ARG_TYPE, $arg_type, \
[Define the sbrk() argument type.])
fi
-fi
+ ])
-if test $ac_cv_func_brk = yes; then
+AS_IF([test $ac_cv_func_brk = yes],
+ [
AC_CACHE_CHECK([types of brk()s return value and argument],
erts_cv_brk_ret_arg_types,
[
@@ -2638,10 +2616,8 @@ if test $ac_cv_func_brk = yes; then
for rtype in $ret_types; do
for atype in $arg_types; do
IFS=$save_ifs
- AC_TRY_LINK([#include <sys/types.h>
- #include <unistd.h>],
- [$rtype brk($atype endds);],
- [erts_cv_brk_ret_arg_types="$rtype,$atype"])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+ #include <unistd.h>]], [[$rtype brk($atype endds);]])],[erts_cv_brk_ret_arg_types="$rtype,$atype"],[])
IFS=","
if test "$erts_cv_brk_ret_arg_types" != "unknown"; then
break 2
@@ -2661,14 +2637,14 @@ EOF
AC_DEFINE_UNQUOTED(BRK_ARG_TYPE, $arg_type, \
[Define the brk() argument type.])
fi
+ ])
-fi
-
-if test $ac_cv_func_sbrk = yes; then
+AS_IF([test $ac_cv_func_sbrk = yes],
+ [
AC_CACHE_CHECK([if sbrk()/brk() wrappers can track malloc()s core memory use],
erts_cv_brk_wrappers_can_track_malloc,
- [AC_TRY_RUN([
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
@@ -2833,10 +2809,7 @@ int main(void)
return 1;
return 0;
}
- ],
- erts_cv_brk_wrappers_can_track_malloc=yes,
- erts_cv_brk_wrappers_can_track_malloc=no,
- [
+ ]])],[erts_cv_brk_wrappers_can_track_malloc=yes],[erts_cv_brk_wrappers_can_track_malloc=no],[
case X$erl_xcomp_dlsym_brk_wrappers in
X) erts_cv_brk_wrappers_can_track_malloc=cross;;
Xyes|Xno) erts_cv_brk_wrappers_can_track_malloc=$erl_xcomp_dlsym_brk_wrappers;;
@@ -2851,7 +2824,7 @@ int main(void)
AC_MSG_WARN([result no guessed because of cross compilation]);;
*) ;;
esac
-fi
+ ])
dnl Restore LIBS
LIBS=$saved_libs
@@ -2873,14 +2846,18 @@ AC_CHECK_PROG(M4, m4, m4)
dnl Test if JIT can be enabled
JIT_ARCH=
-if test ${enable_jit} != no; then
+AS_IF([test ${enable_jit} != no],
+ [
case "$ARCH" in
amd64)
JIT_ARCH=x86
;;
+ arm64)
+ JIT_ARCH=arm
+ ;;
*)
if test ${enable_jit} = yes; then
- AC_MSG_ERROR([JIT only works on x86 64-bit])
+ AC_MSG_ERROR([JIT only works on x86 64-bit and ARM 64-bit])
else
enable_jit=no
AC_MSG_WARN([JIT disabled due to lack to support on $ARCH-$OPSYS])
@@ -2888,16 +2865,18 @@ if test ${enable_jit} != no; then
;;
esac
- if test ${enable_jit} != no; then
- if test "$CXX" != false; then
+ AS_IF([test ${enable_jit} != no],
+ [
+ AS_IF([test "$CXX" != false],
+ [
AC_LANG_PUSH(C++)
old_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS -std=c++17"
AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([],
- [#if __cplusplus < 201703L
+ [AC_LANG_PROGRAM([[]],
+ [[#if __cplusplus < 201703L
#error "Needs C++17 compiler"
- #endif])],
+ #endif]])],
[AC_MSG_CHECKING([for C++17 support])
AC_MSG_RESULT([yes])
HAVE_CXX17=true],
@@ -2905,7 +2884,7 @@ if test ${enable_jit} != no; then
AC_MSG_RESULT([no])
HAVE_CXX17=false])
AC_LANG_POP()
- fi
+ ])
if test "$CXX" = false -o "$HAVE_CXX17" = false; then
if test ${enable_jit} = yes; then
AC_MSG_ERROR([JIT needs a C++ compiler with C++17 support])
@@ -2918,58 +2897,70 @@ EOF
AC_MSG_WARN([JIT disable due to lack of C++ compiler with C++17 support])
fi
fi
- fi
+ ])
if test ${enable_jit} != no; then
enable_jit=yes
fi
-fi
+ ])
dnl Test if we can use the native stack for Erlang code
-if test ${enable_jit} != no; then
- case $host_os in
- openbsd*)
+AS_IF([test ${enable_jit} != no],
+ [
+ AS_CASE([$host_os],
+ [openbsd*],
+ [
# Whenever the kernel is entered (page faults, system calls, etc),
# OpenBSD checks whether the stack pointer is in an area allocated with
# MAP_STACK, so we can't use the native stack for Erlang code.
#
# https://undeadly.org/cgi?action=article;sid=20180310000858
- enable_native_stack=no;;
- win32*)
+ enable_native_stack=no
+ ],
+ [win32*],
+ [
# Windows never messes with the stack, so it's safe by default.
- enable_native_stack=yes;;
- *)
+ enable_native_stack=yes
+ ],
+ [
# Use the native stack if we can safely redirect OS signals to a
# different stack.
AC_MSG_CHECKING([for safe signal delivery])
- AC_TRY_COMPILE(
- [#include <signal.h>],
- [#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <signal.h>]], [[#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
#define __DARWIN__ 1
#endif
#if !(defined(__GLIBC__) || defined(__DARWIN__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__sun__))
#error "Unknown libc. Assume musl, which does not allow safe signals"
- #endif],
- [AC_MSG_RESULT([yes])
- enable_native_stack=yes],
- [AC_MSG_RESULT([no, disabling native stack in JIT])
- enable_native_stack=no]
- );;
- esac
+ #endif]])],[AC_MSG_RESULT([yes])
+ enable_native_stack=yes],[AC_MSG_RESULT([no, disabling native stack in JIT])
+ enable_native_stack=no
+ ])
+ ])
- if test X${enable_native_stack} = Xyes; then
- AC_DEFINE(NATIVE_ERLANG_STACK, [],
- [Define if we can use the native stack for Erlang code])
- fi
-fi
+ case "$JIT_ARCH" in
+ x86)
+ if test X${enable_native_stack} = Xyes; then
+ AC_DEFINE(NATIVE_ERLANG_STACK, [],
+ [Define if we can use the native stack for Erlang code])
+ fi
+ ;;
+ *)
+ ;;
+ esac
+ ])
dnl
dnl Check if the `perf` profiler is supported. At the moment it assumes it
dnl always works on Linux as we're not dependent on it; this is only used to
-dnl to control whether we generate `perf`-compatible memory maps.
+dnl to control whether we accept `perf`-related options.
dnl
case $OPSYS in
linux*)
+ if test X${enable_native_stack} = Xyes; then
+ AC_DEFINE(ERLANG_FRAME_POINTERS, [],
+ [Define if we need frame pointers on the Erlang stack])
+ fi
+
AC_DEFINE(HAVE_LINUX_PERF_SUPPORT, 1,
[Define if the targeted system supports the `perf` profiler])
;;
@@ -3025,13 +3016,15 @@ AC_SUBST(FLAVORS)
# Check for working poll().
#
AC_MSG_CHECKING([for working poll()])
-if test "x$ac_cv_header_poll_h" != "xyes" -o "x$ac_cv_func_poll" != "xyes"; then
+AS_IF([test "x$ac_cv_header_poll_h" != "xyes" -o "x$ac_cv_func_poll" != "xyes"],
+[
poll_works=no
-else
+],
+[
-AC_TRY_RUN([
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <poll.h>
main()
{
@@ -3050,10 +3043,7 @@ main()
exit(0);
#endif
}
-],
-poll_works=yes,
-poll_works=no,
-[
+]])],[poll_works=yes],[poll_works=no],[
case X$erl_xcomp_poll in
X) poll_works=cross;;
Xyes|Xno) poll_works=$erl_xcomp_poll;;
@@ -3061,7 +3051,7 @@ case X$erl_xcomp_poll in
esac
])
-fi
+])
case $poll_works-$host_os in
no-*|cross-darwin*)
@@ -3110,9 +3100,10 @@ fi
#
# If epoll() found, check that it is level triggered.
#
-if test $have_kernel_poll = epoll; then
+AS_IF([test $have_kernel_poll = epoll],
+ [
AC_MSG_CHECKING([whether epoll is level triggered])
- AC_TRY_LINK([#include <sys/epoll.h>],[
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/epoll.h>]], [[
#ifdef EPOLLET
/* Edge triggered option exist, assume level triggered
is default */
@@ -3122,12 +3113,10 @@ if test $have_kernel_poll = epoll; then
triggered only */
#error No EPOLLET
#endif
- ],
- level_triggered_epoll=yes,
- [level_triggered_epoll=no
+ ]])],[level_triggered_epoll=yes],[level_triggered_epoll=no
have_kernel_poll=no])
AC_MSG_RESULT([$level_triggered_epoll])
-fi
+ ])
#
# Check if we should enable kernel poll support
#
@@ -3164,7 +3153,7 @@ esac
AC_SUBST(ERTS_BUILD_FALLBACK_POLL)
AC_MSG_CHECKING([whether putenv() stores a copy of the key-value pair])
-AC_TRY_RUN([
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
int main(void) {
int i;
@@ -3194,10 +3183,7 @@ int main(void) {
return 5;
return 0;
}
-],
-copying_putenv=yes,
-copying_putenv=no,
-[
+]])],[copying_putenv=yes],[copying_putenv=no],[
case X$erl_xcomp_putenv_copy in
X) copying_putenv=cross;;
Xyes|Xno) copying_putenv=$erl_xcomp_putenv_copy;;
@@ -3229,19 +3215,23 @@ LM_FIND_EMU_CC
dnl
dnl DTrace & LTTNG
dnl
-case $DYNAMIC_TRACE_FRAMEWORK in
- dtrace|systemtap)
+AS_CASE([$DYNAMIC_TRACE_FRAMEWORK],
+ [dtrace|systemtap],
+ [
AC_CHECK_TOOL(DTRACE, dtrace, none)
test "$DTRACE" = "none" && AC_MSG_ERROR([No dtrace utility found.]);
enable_lttng_test=no
- enable_dtrace_test=yes;;
- lttng)
+ enable_dtrace_test=yes
+ ],
+ [lttng],
+ [
enable_lttng_test=yes
- enable_dtrace_test=no;;
- *)
+ enable_dtrace_test=no
+ ],
+ [
enable_lttng_test=no
- enable_dtrace_test=no;;
-esac
+ enable_dtrace_test=no
+ ])
AC_SUBST(DTRACE)
@@ -3265,8 +3255,10 @@ case $OPSYS in
: # Nothing to do
;;
esac
-if test "$enable_dtrace_test" = "yes" ; then
- if test "$DTRACE" = "dtrace" ; then
+AS_IF([test "$enable_dtrace_test" = "yes"],
+ [
+ AS_IF([test "$DTRACE" = "dtrace"],
+ [
AC_CHECK_HEADERS(sys/sdt.h)
AC_MSG_CHECKING([for 1-stage DTrace precompilation])
# The OS X version of dtrace prints a spurious line here.
@@ -3276,15 +3268,12 @@ if test "$enable_dtrace_test" = "yes" ; then
AC_MSG_RESULT([yes])
AC_MSG_CHECKING([for 2-stage DTrace precompilation])
- AC_TRY_COMPILE([ #include "foo-dtrace.h" ],
- [ERLANG_DIST_PORT_BUSY_ENABLED();],
- [rm -f $DTRACE_2STEP_TEST
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include "foo-dtrace.h" ]], [[ERLANG_DIST_PORT_BUSY_ENABLED();]])],[rm -f $DTRACE_2STEP_TEST
dtrace -G $DTRACE_CPP $DTRACE_BITS_FLAG -Iemulator/beam -o $DTRACE_2STEP_TEST -s emulator/beam/erlang_dtrace.d conftest.$OBJEXT 2>&AS_MESSAGE_LOG_FD
if test -f $DTRACE_2STEP_TEST; then
rm -f $DTRACE_2STEP_TEST
DTRACE_ENABLED_2STEP=yes
- fi],
- [])
+ fi],[])
rm -f foo-dtrace.h
AS_IF([test "x$DTRACE_ENABLED_2STEP" = "xyes"],
[AC_MSG_RESULT([yes])],
@@ -3302,12 +3291,14 @@ if test "$enable_dtrace_test" = "yes" ; then
LIBS="$LIBS -ldtrace"
;;
esac
- else
+ ],
+ [
AC_MSG_ERROR([Dtrace preprocessing test failed.])
- fi
-fi
+ ])
+ ])
-if test "$enable_lttng_test" = "yes" ; then
+AS_IF([test "$enable_lttng_test" = "yes"],
+ [
AC_CHECK_HEADERS(lttng/tracepoint.h)
AC_CHECK_HEADERS(lttng/tracepoint-event.h)
dnl The macro tracepoint_enabled is not present in older lttng versions
@@ -3315,7 +3306,7 @@ if test "$enable_lttng_test" = "yes" ; then
AC_MSG_CHECKING([for tracepoint_enabled in lttng/tracepoint.h])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
- [#include <lttng/tracepoint.h>
+ [[#include <lttng/tracepoint.h>
#define TRACEPOINT_PROVIDER org_erlang_otp
TRACEPOINT_EVENT(
org_erlang_otp,
@@ -3323,8 +3314,8 @@ if test "$enable_lttng_test" = "yes" ; then
TP_ARGS(int, my_int),
TP_FIELDS(ctf_integer(int, my_int, my_int)))
#define TRACEPOINT_CREATE_PROBES
- #define TRACEPOINT_DEFINE],
- [if(tracepoint_enabled(org_erlang_otp,dummy)) do {} while(0)])],
+ #define TRACEPOINT_DEFINE]],
+ [[if(tracepoint_enabled(org_erlang_otp,dummy)) do {} while(0)]])],
[AC_MSG_RESULT([yes])],
[AC_MSG_ERROR([no (available in lttng-ust v2.7)])])
if test "x$ac_cv_header_lttng_tracepoint_h" = "xyes" \
@@ -3335,7 +3326,7 @@ if test "$enable_lttng_test" = "yes" ; then
else
AC_MSG_ERROR([No LTTng support found.])
fi
-fi
+ ])
#--------------------------------------------------------------------
@@ -3404,7 +3395,8 @@ else
fi
AC_CHECK_PROGS(JAVAC, $check_javac)
-if test -n "$JAVAC"; then
+AS_IF([test -n "$JAVAC"],
+ [
dnl Make sure it's at least JDK 1.6
AC_CACHE_CHECK(for JDK version 1.6,
ac_cv_prog_javac_ver_1_6,
@@ -3413,7 +3405,7 @@ if test -n "$JAVAC"; then
if test $ac_cv_prog_javac_ver_1_6 = no; then
unset -v JAVAC
fi
-fi
+ ])
if test -z "$JAVAC"; then
if test "X$with_javac" != "X"; then
@@ -3429,21 +3421,6 @@ fi
fi # end - try to find javac
-dnl
-dnl Orber has a c++ example, this isn't the right way to check for
-dnl it, but....
-dnl
-AC_SUBST(CXXFLAGS)
-dnl this deliberately does not believe that 'gcc' is a C++ compiler
-AC_CHECK_TOOLS(CXX, [$CCC c++ g++ CC cxx cc++ cl], false)
-
-# Remove SKIP file from previous run
-rm -f $ERL_TOP/lib/orber/SKIP
-
-if test "$CXX" = false; then
- echo "No C++ compiler found" > $ERL_TOP/lib/orber/SKIP
-fi
-
dnl ----------------------------------------------------------------------
dnl Include CPPFLAGS in CFLAGS
dnl ----------------------------------------------------------------------
@@ -3560,13 +3537,11 @@ dnl Check for GCC diagnostic ignored "-Waddress-of-packed-member"
dnl ----------------------------------------------------------------------
saved_CFLAGS="$CFLAGS"
CFLAGS="-Werror $CFLAGS"
-AC_TRY_COMPILE([],
- [_Pragma("GCC diagnostic push")
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[_Pragma("GCC diagnostic push")
_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")
_Pragma("GCC diagnostic pop")
- ],
- AC_DEFINE(HAVE_GCC_DIAG_IGNORE_WADDRESS_OF_PACKED_MEMBER,[1],
- [define if compiler support _Pragma('GCC diagnostic ignored '-Waddress-of-packed-member'')]))
+ ]])],[AC_DEFINE(HAVE_GCC_DIAG_IGNORE_WADDRESS_OF_PACKED_MEMBER,1,
+ define if compiler support _Pragma('GCC diagnostic ignored '-Waddress-of-packed-member''))],[])
CFLAGS="$saved_CFLAGS"
diff --git a/erts/doc/src/erl_dist_protocol.xml b/erts/doc/src/erl_dist_protocol.xml
index 72a2fc17ba..29027f0eeb 100644
--- a/erts/doc/src/erl_dist_protocol.xml
+++ b/erts/doc/src/erl_dist_protocol.xml
@@ -996,9 +996,9 @@ DiB == gen_digest(ChA, ICA)?
</item>
<tag><c>-define(DFLAG_FUN_TAGS,16#10).</c></tag>
<item>
- <p>The node uses separate tag for funs (lambdas) in the distribution
- protocol.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <p>The node uses separate tags for funs (lambdas) in the
+ distribution protocol. This flag is mandatory. If not
+ present, the connection is refused.</p>
</item>
<tag><c>-define(DFLAG_DIST_MONITOR_NAME,16#20).</c></tag>
<item>
@@ -1024,20 +1024,21 @@ DiB == gen_digest(ChA, ICA)?
<tag><c>-define(DFLAG_EXPORT_PTR_TAG,16#200).</c></tag>
<item>
<p>The node understands the <seeguide marker="erl_ext_dist#EXPORT_EXT">
- <c>EXPORT_EXT</c></seeguide> tag.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <c>EXPORT_EXT</c></seeguide> tag.
+ This flag is mandatory. If not present, the connection is refused.
+ </p>
</item>
<tag><c>-define(DFLAG_BIT_BINARIES,16#400).</c></tag>
<item>
<p>The node understands the <seeguide marker="erl_ext_dist#BIT_BINARY_EXT">
- <c>BIT_BINARY_EXT</c></seeguide> tag.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <c>BIT_BINARY_EXT</c></seeguide> tag.
+ This flag is mandatory. If not present, the connection is refused.</p>
</item>
<tag><c>-define(DFLAG_NEW_FLOATS,16#800).</c></tag>
<item>
<p>The node understands the <seeguide marker="erl_ext_dist#NEW_FLOAT_EXT">
- <c>NEW_FLOAT_EXT</c></seeguide> tag.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <c>NEW_FLOAT_EXT</c></seeguide> tag. This flag is
+ mandatory. If not present, the connection is refused.</p>
</item>
<tag><c>-define(DFLAG_UNICODE_IO,16#1000).</c></tag>
<item>
@@ -1114,6 +1115,12 @@ DiB == gen_digest(ChA, ICA)?
<seeguide marker="#old_link_protocol">old link protocol</seeguide>
will be used as a fallback.</p>
</item>
+ <tag><c>-define(DFLAG_MANDATORY_25_DIGEST, (1 bsl 36)).</c></tag>
+ <item>
+ <p>The node supports all capabilities that are mandatory in OTP 25.
+ Introduced in OTP 25.</p>
+ <note><p>This flag will become mandatory in OTP 27.</p></note>
+ </item>
<tag><marker id="DFLAG_SPAWN"/><c>-define(DFLAG_SPAWN, (1 bsl 32)).</c></tag>
<item>
<p>Set if the <seeguide marker="#SPAWN_REQUEST"><c>SPAWN_REQUEST</c></seeguide>,
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index 3b96ed5039..5973c7b8cf 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -2064,7 +2064,14 @@ true</pre>
> <input>float_to_binary(7.12, [{decimals, 4}, compact]).</input>
&lt;&lt;"7.12">>
> <input>float_to_binary(7.12, [{scientific, 3}]).</input>
-&lt;&lt;"7.120e+00">></pre>
+&lt;&lt;"7.120e+00">>
+> <input>float_to_binary(7.12, [short]).</input>
+&lt;&lt;"7.12">>
+> <input>float_to_binary(0.1+0.2, [short]).</input>
+&lt;&lt;"0.30000000000000004">>
+> <input>float_to_binary(0.1+0.2)</input>
+&lt;&lt;"3.00000000000000044409e-01">>
+</pre>
</desc>
</func>
@@ -2099,6 +2106,16 @@ true</pre>
formatted using scientific notation with <c>Decimals</c>
digits of precision.</p>
</item>
+ <item><p>If option <c>short</c> is specified, the float is formatted
+ with the smallest number of digits that still guarantees that
+ <c>F =:= list_to_float(float_to_list(F, [short]))</c>. When the float
+ is inside the range (-2⁵³, 2⁵³), the notation
+ that yields the smallest number of characters is used (scientific
+ notation or normal decimal notation). Floats outside the range
+ (-2⁵³, 2⁵³) are always formatted using
+ scientific notation to avoid confusing results when doing arithmetic
+ operations.</p>
+ </item>
<item><p>If <c>Options</c> is <c>[]</c>, the function behaves as
<seemfa marker="#float_to_list/1">
<c>float_to_list/1</c></seemfa>.</p>
@@ -2112,6 +2129,10 @@ true</pre>
"7.12"
> <input>float_to_list(7.12, [{scientific, 3}]).</input>
"7.120e+00"
+> <input>float_to_list(7.12, [short]).</input>
+"7.12"
+> <input>float_to_list(0.1+0.2, [short]).</input>
+"0.30000000000000004"
> <input>float_to_list(0.1+0.2)</input>
"3.00000000000000044409e-01"
</pre>
diff --git a/erts/doc/src/match_spec.xml b/erts/doc/src/match_spec.xml
index 16fe2c8a40..ca8a1146b3 100644
--- a/erts/doc/src/match_spec.xml
+++ b/erts/doc/src/match_spec.xml
@@ -113,8 +113,9 @@
<c><![CDATA[length]]></c> | <c><![CDATA[map_get]]></c> |
<c><![CDATA[map_size]]></c> | <c><![CDATA[node]]></c> |
<c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> |
- <c><![CDATA[bit_size]]></c> |
+ <c><![CDATA[bit_size]]></c> | <c><![CDATA[byte_size]]></c>
<c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
+ <c><![CDATA[binary_part]]></c> |
<c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> |
<c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
<c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> |
@@ -195,8 +196,9 @@
<c><![CDATA[length]]></c> | <c><![CDATA[map_get]]></c> |
<c><![CDATA[map_size]]></c> | <c><![CDATA[node]]></c> |
<c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> |
- <c><![CDATA[bit_size]]></c> |
+ <c><![CDATA[bit_size]]></c> | <c><![CDATA[byte_size]]></c>
<c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
+ <c><![CDATA[binary_part]]></c> |
<c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> |
<c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
<c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> |
@@ -273,7 +275,8 @@
</item>
<tag><c>abs</c>, <c>element</c>, <c>hd</c>, <c>length</c>,
<c>map_get</c>, <c>map_size</c>, <c>node</c>, <c>round</c>,
- <c>size</c>, <c>bit_size</c>, <c>tl</c>, <c>trunc</c>, <c>'+'</c>,
+ <c>size</c>, <c>bit_size</c>, <c>byte_size</c>, <c>tl</c>,
+ <c>trunc</c>, <c>binary_part</c>, <c>'+'</c>,
<c>'-'</c>, <c>'*'</c>, <c>'div'</c>, <c>'rem'</c>, <c>'band'</c>,
<c>'bor'</c>, <c>'bxor'</c>, <c>'bnot'</c>, <c>'bsl'</c>,
<c>'bsr'</c>, <c>'>'</c>, <c>'>='</c>, <c>'&lt;'</c>, <c>'=&lt;'</c>,
diff --git a/erts/emulator/Makefile b/erts/emulator/Makefile
index 65fdbdb747..33852a87af 100644
--- a/erts/emulator/Makefile
+++ b/erts/emulator/Makefile
@@ -23,3 +23,5 @@
include $(ERL_TOP)/make/run_make.mk
+include $(ERL_TOP)/make/app_targets.mk
+
diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
index c3449c5f73..4a973f8ba2 100644
--- a/erts/emulator/Makefile.in
+++ b/erts/emulator/Makefile.in
@@ -56,7 +56,7 @@ JIT_ENABLED=no
endif
ifeq ($(FLAVOR),jit)
-OMIT_OMIT_FP=no
+OMIT_OMIT_FP=yes
OPCODE_TABLES += \
beam/jit/$(JIT_ARCH)/ops.tab \
beam/jit/$(JIT_ARCH)/predicates.tab \
@@ -371,6 +371,14 @@ endif
EPCRE_LIB = $(ERL_TOP)/erts/emulator/pcre/obj/$(TARGET)/$(TYPE)/$(LIB_PREFIX)epcre$(LIB_SUFFIX)
DEPLIBS += $(EPCRE_LIB)
+DEPLIBS += $(RYU_LIBRARY)
+ifeq ($(TARGET),win32)
+LIBS += -L$(RYU_OBJDIR) -lryu
+else
+# Build on darwin fails if -lryu is used
+LIBS += $(RYU_LIBRARY)
+endif
+
LIBSCTP = @LIBSCTP@
ORG_THR_LIBS=@EMU_THR_LIBS@
@@ -412,7 +420,8 @@ OBJDIR = obj/$(TTF_DIR)
CREATE_DIRS += $(OBJDIR) \
pcre/obj/$(TARGET)/$(TYPE) \
- $(ZLIB_OBJDIR)
+ $(ZLIB_OBJDIR) \
+ $(RYU_OBJDIR)
ifeq ($(FLAVOR),jit)
CREATE_DIRS+=$(OBJDIR)/asmjit/ $(OBJDIR)/asmjit/core $(OBJDIR)/asmjit/$(JIT_ARCH)
@@ -478,6 +487,7 @@ endif
include zlib/zlib.mk
include pcre/pcre.mk
+include ryu/ryu.mk
$(ERTS_LIB):
$(V_at)cd $(ERTS_LIB_DIR) && $(MAKE) $(TYPE)
@@ -490,6 +500,7 @@ clean:
$(RM) -r obj/$(TARGET)
$(RM) -r pcre/obj/$(TARGET) $(PCRE_GENINC)
$(RM) -r zlib/obj/$(TARGET)
+ $(RM) -r ryu/obj/$(TARGET)
$(RM) -r bin/$(TARGET)
cd $(ERTS_LIB_DIR) && $(MAKE) clean
@@ -696,7 +707,7 @@ ASMJIT_H = $(wildcard asmjit/*.h) $(wildcard asmjit/core/*.h) $(wildcard asmjit/
ASMJIT_TTF_H = $(foreach HEADER,$(ASMJIT_H),$(TTF_DIR)/$(HEADER))
ifeq ($(FLAVOR),jit)
-GENERATE+=$(ASMJIT_TTF_H)
+GENERATE+=$(ASMJIT_TTF_H) $(TTF_DIR)/asmjit/asmjit.hpp
endif
# Preloaded code.
@@ -774,6 +785,7 @@ ifndef Z_LIB
COMMON_INCLUDES += -Izlib
endif
COMMON_INCLUDES += -Ipcre
+COMMON_INCLUDES += -Iryu
COMMON_INCLUDES += -I../include -I../include/$(TARGET)
COMMON_INCLUDES += -I../include/internal -I../include/internal/$(TARGET)
@@ -902,18 +914,30 @@ $(OBJDIR)/%.o: nifs/$(ERLANG_OSTYPE)/%.c
# because GCC only allows one precompiled header, and requires it to be
# included before any other directives, including other #includes.
#
-ASMJIT_FLAGS=-DASMJIT_EMBED=1 -DASMJIT_NO_BUILDER=1 -DASMJIT_NO_DEPRECATED=1 -DASMJIT_STATIC=1
+ASMJIT_FLAGS=-DASMJIT_EMBED=1 -DASMJIT_NO_BUILDER=1 -DASMJIT_NO_DEPRECATED=1 -DASMJIT_STATIC=1 -DASMJIT_NO_FOREIGN=1
+
+ifeq ($(JIT_ARCH), arm)
+# Work around a bug in the current beta release causing a linking
+# error.
+ASMJIT_FLAGS+=-DASMJIT_NO_VALIDATION
+endif
+
ASMJIT_PCH_OBJ=$(TTF_DIR)/asmjit/asmjit.hpp.gch
ASMJIT_PCH_SRC=$(TTF_DIR)/asmjit/asmjit.hpp
-$(OBJDIR)/%.o: beam/jit/$(JIT_ARCH)/%.cpp beam/jit/$(JIT_ARCH)/beam_asm.hpp $(ASMJIT_PCH_OBJ)
- $(V_CXX) $(ASMJIT_FLAGS) $(INCLUDES) \
- $(subst -O2, $(GEN_OPT_FLGS), $(CXXFLAGS)) \
+$(OBJDIR)/%.o: beam/jit/%.cpp $(ASMJIT_PCH_OBJ)
+ $(V_CXX) $(ASMJIT_FLAGS) $(INCLUDES) \
+ $(subst -O2, $(GEN_OPT_FLGS), $(CXXFLAGS)) \
+ -include $(ASMJIT_PCH_SRC) -c $< -o $@
+
+$(OBJDIR)/%.o: beam/jit/$(JIT_ARCH)/%.cpp beam/jit/$(JIT_ARCH)/beam_asm.hpp
+ $(V_CXX) $(ASMJIT_FLAGS) $(INCLUDES) \
+ $(subst -O2, $(GEN_OPT_FLGS), $(CXXFLAGS)) \
-include $(ASMJIT_PCH_SRC) -c $< -o $@
$(OBJDIR)/asmjit/%.o: asmjit/%.cpp $(ASMJIT_PCH_OBJ) $(dir $@)
- $(V_CXX) $(ASMJIT_FLAGS) $(INCLUDES) \
- $(subst -O2, $(GEN_OPT_FLGS), $(CXXFLAGS)) \
+ $(V_CXX) $(ASMJIT_FLAGS) $(INCLUDES) \
+ $(subst -O2, $(GEN_OPT_FLGS), $(CXXFLAGS)) \
-include $(ASMJIT_PCH_SRC) -c $< -o $@
## The dependency on erl_bif_info.c is in order to trigger a rebuild when
@@ -992,21 +1016,37 @@ COMMON_OBJS = \
ASMJIT_OBJS = $(patsubst %.cpp,$(OBJDIR)/%.o,$(ASMJIT_CPP))
JIT_OBJS = \
- $(OBJDIR)/asm_load.o \
- $(OBJDIR)/beam_jit_common.o
+ $(OBJDIR)/asm_load.o \
+ $(OBJDIR)/beam_asm_global.o \
+ $(OBJDIR)/beam_asm_module.o \
+ $(OBJDIR)/beam_jit_common.o \
+ $(OBJDIR)/beam_jit_main.o \
+ $(OBJDIR)/beam_jit_perf.o \
+ $(OBJDIR)/process_main.o
ifeq ($(JIT_ARCH), x86)
JIT_OBJS += \
- $(OBJDIR)/beam_asm.o \
- $(OBJDIR)/beam_asm_global.o \
- $(OBJDIR)/beam_asm_module.o \
- $(OBJDIR)/beam_asm_perf.o \
$(OBJDIR)/instr_arith.o \
$(OBJDIR)/instr_bs.o \
$(OBJDIR)/instr_bif.o \
$(OBJDIR)/instr_call.o \
$(OBJDIR)/instr_common.o \
$(OBJDIR)/instr_float.o \
+ $(OBJDIR)/instr_fun.o \
+ $(OBJDIR)/instr_guard_bifs.o \
+ $(OBJDIR)/instr_map.o \
+ $(OBJDIR)/instr_msg.o \
+ $(OBJDIR)/instr_select.o \
+ $(OBJDIR)/instr_trace.o
+else
+JIT_OBJS += \
+ $(OBJDIR)/instr_arith.o \
+ $(OBJDIR)/instr_bs.o \
+ $(OBJDIR)/instr_bif.o \
+ $(OBJDIR)/instr_call.o \
+ $(OBJDIR)/instr_common.o \
+ $(OBJDIR)/instr_float.o \
+ $(OBJDIR)/instr_fun.o \
$(OBJDIR)/instr_guard_bifs.o \
$(OBJDIR)/instr_map.o \
$(OBJDIR)/instr_msg.o \
@@ -1363,6 +1403,8 @@ $(TTF_DIR)/depend.mk: $(TTF_DIR)/GENERATED $(PRELOAD_SRC)
| $(SED_DEPEND) >> $(TTF_DIR)/depend.mk
$(V_at)$(DEP_CC) $(DEP_FLAGS) $(ZLIB_SRC) \
| $(SED_DEPEND_ZLIB) >> $(TTF_DIR)/depend.mk
+ $(V_at)$(DEP_CC) $(DEP_FLAGS) $(RYU_SRC) \
+ | $(SED_DEPEND_ZLIB) >> $(TTF_DIR)/depend.mk
ifeq ($(JIT_ENABLED),yes)
$(V_at)$(DEP_CXX) $(DEP_CXXFLAGS) $(BEAM_CPP_SRC) \
| $(SED_DEPEND) >> $(TTF_DIR)/depend.mk
@@ -1389,11 +1431,11 @@ compdb:
format-check:
clang-format --Werror --dry-run -i beam/jit/*.hpp beam/jit/*.c beam/jit/*.h \
- beam/jit/*/*.cpp beam/jit/*/*.hpp
+ beam/jit/*.cpp beam/jit/*/*.cpp beam/jit/*/*.hpp
format:
clang-format -i beam/jit/*.hpp beam/jit/*.c beam/jit/*.h \
- beam/jit/*/*.cpp beam/jit/*/*.hpp
+ beam/jit/*.cpp beam/jit/*/*.cpp beam/jit/*/*.hpp
ifneq ($(ERTS_SKIP_DEPEND),true)
ifneq ($(MAKECMDGOALS),clean)
diff --git a/erts/emulator/asmjit.version b/erts/emulator/asmjit.version
index 92b9173723..18c2929fef 100644
--- a/erts/emulator/asmjit.version
+++ b/erts/emulator/asmjit.version
@@ -1 +1 @@
-2ab380e0bd242e29f67330a66a3c18da73b3b40a
+91eb437ad8aafc370d11162413e6b70d689347de
diff --git a/erts/emulator/asmjit/a64.h b/erts/emulator/asmjit/a64.h
new file mode 100644
index 0000000000..97573b8d52
--- /dev/null
+++ b/erts/emulator/asmjit/a64.h
@@ -0,0 +1,98 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_A64_H_INCLUDED
+#define ASMJIT_A64_H_INCLUDED
+
+//! \defgroup asmjit_a64 AArch64
+//! \brief AArch64 backend.
+
+//! \addtogroup asmjit_a64
+//!
+//! ### Namespace
+//!
+//! - \ref arm - arm namespace provides base support for both 32-bit and 64-bit ARM.
+//! - \ref a64 - a64 namespace provides support for AArch64 architecture. In addition
+//! it includes \ref arm namespace, so you can only use a single namespace when
+//! targeting AArch64 architecture.
+//!
+//! ### Emitters
+//!
+//! - \ref a64::Assembler - AArch64 assembler (must read, provides examples).
+//! - \ref a64::Builder - AArch64 builder.
+//! - \ref a64::Compiler - AArch64 compiler.
+//! - \ref a64::Emitter - AArch64 emitter (abstract).
+//!
+//! ### Supported Instructions
+//!
+//! - Emitters:
+//! - \ref a64::EmitterExplicitT - Provides all instructions that use explicit
+//! operands, provides also utility functions. The member functions provided
+//! are part of all ARM/AArch64 emitters.
+//!
+//! - Instruction representation:
+//! - \ref a64::Inst::Id - instruction identifiers.
+//! - \ref a64::Inst::Options - instruction options.
+//!
+//! ### Register Operands
+//!
+//! - \ref arm::Reg - Base class for any X86 register.
+//! - \ref arm::Gp - General purpose register:
+//! - \ref arm::GpW - 32-bit register.
+//! - \ref arm::GpX - 64-bit register.
+//! - \ref arm::Vec - Vector (SIMD) register:
+//! - \ref arm::VecB - 8-bit SIMD register.
+//! - \ref arm::VecH - 16-bit SIMD register.
+//! - \ref arm::VecS - 32-bit SIMD register.
+//! - \ref arm::VecD - 64-bit SIMD register.
+//! - \ref arm::VecV - 128-bit SIMD register.
+//!
+//! ### Memory Operands
+//!
+//! - \ref arm::Mem - ARM/AArch64 memory operand that provides support
+//! for all ARM addressing features including BASE, INDEX, Pre/Post increment,
+//! and ARM-specific shift addressing features.
+//!
+//! ### Other
+//!
+//! - \ref arm::Features - ARM/AArch64 CPU features on top of \ref BaseFeatures.
+//! - \ref arm::Shift - Shift operation and value.
+//! - \ref a64::Utils - Utilities that can help during code generation for
+//! ARM target.
+//!
+//! ### Predicates
+//!
+//! - \ref a64::Predicate - namespace that provides AArch64 predicates.
+
+#include "./arm.h"
+#include "./arm/a64assembler.h"
+#include "./arm/a64builder.h"
+#include "./arm/a64compiler.h"
+#include "./arm/a64emitter.h"
+#include "./arm/a64globals.h"
+#include "./arm/a64instdb.h"
+#include "./arm/a64operand.h"
+#include "./arm/a64utils.h"
+
+#endif // ASMJIT_A64_H_INCLUDED
+
diff --git a/erts/emulator/asmjit/arm.h b/erts/emulator/asmjit/arm.h
new file mode 100644
index 0000000000..93d1e39315
--- /dev/null
+++ b/erts/emulator/asmjit/arm.h
@@ -0,0 +1,92 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_H_INCLUDED
+#define ASMJIT_ARM_H_INCLUDED
+
+//! \defgroup asmjit_arm ARM (generic)
+//! \brief ARM & AArch64 generic support.
+
+//! \addtogroup asmjit_arm
+//!
+//! ### Namespace
+//!
+//! - \ref arm - arm namespace provides base support for both 32-bit and 64-bit ARM.
+//! - \ref a64 - a64 namespace provides support for AArch64 architecture. In addition
+//! it includes \ref arm namespace, so you can only use a single namespace when
+//! targeting AArch64 architecture.
+//!
+//! ### Emitters
+//!
+//! - \ref a64::Assembler - AArch64 assembler (must read, provides examples).
+//! - \ref a64::Builder - AArch64 builder.
+//! - \ref a64::Compiler - AArch64 compiler.
+//! - \ref a64::Emitter - AArch64 emitter (abstract).
+//!
+//! ### Supported Instructions
+//!
+//! - Emitters:
+//! - \ref a64::EmitterExplicitT - Provides all instructions that use explicit
+//! operands, provides also utility functions. The member functions provided
+//! are part of all ARM/AArch64 emitters.
+//!
+//! - Instruction representation:
+//! - \ref a64::Inst::Id - instruction identifiers.
+//! - \ref a64::Inst::Options - instruction options.
+//!
+//! ### Register Operands
+//!
+//! - \ref arm::Reg - Base class for any X86 register.
+//! - \ref arm::Gp - General purpose register:
+//! - \ref arm::GpW - 32-bit register.
+//! - \ref arm::GpX - 64-bit register.
+//! - \ref arm::Vec - Vector (SIMD) register:
+//! - \ref arm::VecB - 8-bit SIMD register.
+//! - \ref arm::VecH - 16-bit SIMD register.
+//! - \ref arm::VecS - 32-bit SIMD register.
+//! - \ref arm::VecD - 64-bit SIMD register.
+//! - \ref arm::VecV - 128-bit SIMD register.
+//!
+//! ### Memory Operands
+//!
+//! - \ref arm::Mem - ARM/AArch64 memory operand that provides support
+//! for all ARM addressing features including BASE, INDEX, Pre/Post increment,
+//! and ARM-specific shift addressing features.
+//!
+//! ### Other
+//!
+//! - \ref arm::Features - ARM/AArch64 CPU features on top of \ref BaseFeatures.
+//! - \ref arm::Shift - Shift operation and value.
+//! - \ref a64::Utils - Utilities that can help during code generation for
+//! ARM target.
+//!
+//! ### Predicates
+//!
+//! - \ref a64::Predicate - namespace that provides AArch64 predicates.
+
+#include "./core.h"
+#include "./arm/armfeatures.h"
+#include "./arm/armglobals.h"
+#include "./arm/armoperand.h"
+
+#endif // ASMJIT_ARM_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64assembler.cpp b/erts/emulator/asmjit/arm/a64assembler.cpp
new file mode 100644
index 0000000000..1cd17d89d5
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64assembler.cpp
@@ -0,0 +1,5126 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM)
+
+#include "../core/codewriter_p.h"
+#include "../core/cpuinfo.h"
+#include "../core/emitterutils_p.h"
+#include "../core/formatter.h"
+#include "../core/logger.h"
+#include "../core/misc_p.h"
+#include "../core/support.h"
+#include "../arm/armformatter_p.h"
+#include "../arm/a64assembler.h"
+#include "../arm/a64instdb_p.h"
+#include "../arm/a64utils.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// ============================================================================
+// [asmjit::a64::Bits]
+// ============================================================================
+
+static constexpr inline uint32_t B(uint32_t index) noexcept { return 1u << index; }
+
+static constexpr uint32_t kSP = Gp::kIdSp;
+static constexpr uint32_t kZR = Gp::kIdZr;
+static constexpr uint32_t kWX = InstDB::kWX;
+
+// ============================================================================
+// [asmjit::a64::Assembler - ShiftOpToLdStOptMap]
+// ============================================================================
+
+// Table that maps ShiftOp to OPT part in LD/ST (register) opcode.
+#define VALUE(x) x == Shift::kOpUXTW ? 2u : \
+ x == Shift::kOpLSL ? 3u : \
+ x == Shift::kOpSXTW ? 6u : \
+ x == Shift::kOpSXTX ? 7u : 0xFF
+static const uint8_t armShiftOpToLdStOptMap[] = { ASMJIT_LOOKUP_TABLE_16(VALUE, 0) };
+#undef VALUE
+
+// ============================================================================
+// [asmjit::a64::Assembler - SizeOp]
+// ============================================================================
+
+//! Struct that contains Size (2 bits), Q flag, and S (scalar) flag. These values
+//! are used to encode Q, Size, and Scalar fields in an opcode.
+struct SizeOp {
+ enum : uint8_t {
+ k128BitShift = 0,
+ kScalarShift = 1,
+ kSizeShift = 2,
+
+ kQ = uint8_t(1u << k128BitShift),
+ kS = uint8_t(1u << kScalarShift),
+
+ k00 = uint8_t(0 << kSizeShift),
+ k01 = uint8_t(1 << kSizeShift),
+ k10 = uint8_t(2 << kSizeShift),
+ k11 = uint8_t(3 << kSizeShift),
+
+ k00Q = k00 | kQ,
+ k01Q = k01 | kQ,
+ k10Q = k10 | kQ,
+ k11Q = k11 | kQ,
+
+ k00S = k00 | kS,
+ k01S = k01 | kS,
+ k10S = k10 | kS,
+ k11S = k11 | kS,
+
+ kInvalid = 0xFFu,
+
+ // Masks used by SizeOpMap.
+ kSzQ = (0x3u << kSizeShift) | kQ,
+ kSzS = (0x3u << kSizeShift) | kS,
+ kSzQS = (0x3u << kSizeShift) | kQ | kS
+ };
+
+ uint8_t value;
+
+ inline bool isValid() const noexcept { return value != kInvalid; }
+ inline void makeInvalid() noexcept { value = kInvalid; }
+
+ inline uint32_t q() const noexcept { return (value >> k128BitShift) & 0x1u; }
+ inline uint32_t qs() const noexcept { return ((value >> k128BitShift) | (value >> kScalarShift)) & 0x1u; }
+ inline uint32_t scalar() const noexcept { return (value >> kScalarShift) & 0x1u; }
+ inline uint32_t size() const noexcept { return (value >> kSizeShift) & 0x3u; }
+
+ inline void decrementSize() noexcept {
+ ASMJIT_ASSERT(size() > 0);
+ value = uint8_t(value - (1u << kSizeShift));
+ }
+};
+
+struct SizeOpTable {
+ enum TableId : uint8_t {
+ kTableBin = 0,
+ kTableAny,
+ kCount
+ };
+
+ // 40 elements for each combination.
+ SizeOp array[(Reg::kTypeVecV - Reg::kTypeVecB + 1) * 8];
+};
+
+#define VALUE_BIN(x) { \
+ x == ((uint32_t(Reg::kTypeVecD - Reg::kTypeVecB) << 3) | (Vec::kElementTypeNone)) ? SizeOp::k00 : \
+ x == ((uint32_t(Reg::kTypeVecV - Reg::kTypeVecB) << 3) | (Vec::kElementTypeNone)) ? SizeOp::k00Q : \
+ x == ((uint32_t(Reg::kTypeVecD - Reg::kTypeVecB) << 3) | (Vec::kElementTypeB )) ? SizeOp::k00 : \
+ x == ((uint32_t(Reg::kTypeVecV - Reg::kTypeVecB) << 3) | (Vec::kElementTypeB )) ? SizeOp::k00Q : SizeOp::kInvalid \
+}
+
+#define VALUE_ANY(x) { \
+ x == ((uint32_t(Reg::kTypeVecB - Reg::kTypeVecB) << 3) | (Vec::kElementTypeNone)) ? SizeOp::k00S : \
+ x == ((uint32_t(Reg::kTypeVecH - Reg::kTypeVecB) << 3) | (Vec::kElementTypeNone)) ? SizeOp::k01S : \
+ x == ((uint32_t(Reg::kTypeVecS - Reg::kTypeVecB) << 3) | (Vec::kElementTypeNone)) ? SizeOp::k10S : \
+ x == ((uint32_t(Reg::kTypeVecD - Reg::kTypeVecB) << 3) | (Vec::kElementTypeNone)) ? SizeOp::k11S : \
+ x == ((uint32_t(Reg::kTypeVecD - Reg::kTypeVecB) << 3) | (Vec::kElementTypeB )) ? SizeOp::k00 : \
+ x == ((uint32_t(Reg::kTypeVecV - Reg::kTypeVecB) << 3) | (Vec::kElementTypeB )) ? SizeOp::k00Q : \
+ x == ((uint32_t(Reg::kTypeVecD - Reg::kTypeVecB) << 3) | (Vec::kElementTypeH )) ? SizeOp::k01 : \
+ x == ((uint32_t(Reg::kTypeVecV - Reg::kTypeVecB) << 3) | (Vec::kElementTypeH )) ? SizeOp::k01Q : \
+ x == ((uint32_t(Reg::kTypeVecD - Reg::kTypeVecB) << 3) | (Vec::kElementTypeS )) ? SizeOp::k10 : \
+ x == ((uint32_t(Reg::kTypeVecV - Reg::kTypeVecB) << 3) | (Vec::kElementTypeS )) ? SizeOp::k10Q : \
+ x == ((uint32_t(Reg::kTypeVecD - Reg::kTypeVecB) << 3) | (Vec::kElementTypeD )) ? SizeOp::k11S : \
+ x == ((uint32_t(Reg::kTypeVecV - Reg::kTypeVecB) << 3) | (Vec::kElementTypeD )) ? SizeOp::k11Q : SizeOp::kInvalid \
+}
+
+static const SizeOpTable sizeOpTable[SizeOpTable::kCount] = {
+ {{ ASMJIT_LOOKUP_TABLE_40(VALUE_BIN, 0) }},
+ {{ ASMJIT_LOOKUP_TABLE_40(VALUE_ANY, 0) }}
+};
+
+#undef VALUE_ANY
+#undef VALUE_BIN
+
+struct SizeOpMap {
+ uint8_t tableId;
+ uint8_t sizeOpMask;
+ uint16_t acceptMask;
+};
+
+static const constexpr SizeOpMap sizeOpMap[InstDB::kVO_Count] = {
+ { // kVO_V_B:
+ SizeOpTable::kTableBin, SizeOp::kQ , uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q))
+ },
+
+ { // kVO_V_BH:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q) | B(SizeOp::k01) | B(SizeOp::k01Q))
+ },
+
+ { // kVO_V_BH_4S:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q) | B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k10Q))
+ },
+
+ { // kVO_V_BHS:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q) | B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k10) | B(SizeOp::k10Q))
+ },
+
+ { // kVO_V_BHS_D2:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q) | B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k10) | B(SizeOp::k10Q) | B(SizeOp::k11Q))
+ },
+
+ { // kVO_V_HS:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k10) | B(SizeOp::k10Q))
+ },
+
+ { // kVO_V_S:
+ SizeOpTable::kTableAny, SizeOp::kQ , uint16_t(B(SizeOp::k10) | B(SizeOp::k10Q))
+ },
+
+ { // kVO_V_B8H4:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k01))
+ },
+
+ { // kVO_V_B8H4S2:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k01) | B(SizeOp::k10))
+ },
+
+ { // kVO_V_B8D1:
+ SizeOpTable::kTableAny, SizeOp::kSzQ , uint16_t(B(SizeOp::k00) | B(SizeOp::k11S))
+ },
+
+ { // kVO_V_H4S2:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k01) | B(SizeOp::k10))
+ },
+
+ { // kVO_V_B16:
+ SizeOpTable::kTableBin, SizeOp::kQ , uint16_t(B(SizeOp::k00Q))
+ },
+
+ { // kVO_V_B16H8:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00Q) | B(SizeOp::k01Q))
+ },
+
+ { // kVO_V_B16H8S4:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00Q) | B(SizeOp::k01Q) | B(SizeOp::k10Q))
+ },
+
+ { // kVO_V_B16D2:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00Q) | B(SizeOp::k11Q))
+ },
+
+ { // kVO_V_H8S4:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k01Q) | B(SizeOp::k10Q))
+ },
+
+ { // kVO_V_S4:
+ SizeOpTable::kTableAny, 0 , uint16_t(B(SizeOp::k10Q))
+ },
+
+ { // kVO_V_D2:
+ SizeOpTable::kTableAny, 0 , uint16_t(B(SizeOp::k11Q))
+ },
+
+ { // kVO_SV_BHS:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q) | B(SizeOp::k00S) | B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k01S) | B(SizeOp::k10) | B(SizeOp::k10Q) | B(SizeOp::k10S))
+ },
+
+ { // kVO_SV_B8H4S2:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00S) | B(SizeOp::k01) | B(SizeOp::k01S) | B(SizeOp::k10) | B(SizeOp::k10S))
+ },
+
+ { // kVO_SV_HS:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k01S) | B(SizeOp::k10) | B(SizeOp::k10Q) | B(SizeOp::k10S))
+ },
+
+ { // kVO_V_Any:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q) | B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k10) | B(SizeOp::k10Q) | B(SizeOp::k11S) | B(SizeOp::k11Q))
+ },
+
+ { // kVO_SV_Any:
+ SizeOpTable::kTableAny, SizeOp::kSzQS, uint16_t(B(SizeOp::k00) | B(SizeOp::k00Q) | B(SizeOp::k00S) |
+ B(SizeOp::k01) | B(SizeOp::k01Q) | B(SizeOp::k01S) |
+ B(SizeOp::k10) | B(SizeOp::k10Q) | B(SizeOp::k10S) |
+ B(SizeOp::k11) | B(SizeOp::k11Q) | B(SizeOp::k11S))
+ }
+};
+
+static const Operand_& significantSimdOp(const Operand_& o0, const Operand_& o1, uint32_t instFlags) noexcept {
+ return !(instFlags & InstDB::kInstFlagLong) ? o0 : o1;
+}
+
+static ASMJIT_INLINE SizeOp armElementTypeToSizeOp(uint32_t vecOpType, uint32_t regType, uint32_t elementType) noexcept {
+ // Instruction data or Assembler is wrong if this triggers an assertion failure.
+ ASMJIT_ASSERT(vecOpType < InstDB::kVO_Count);
+ // ElementType uses 3 bits in the operand signature, it should never overflow.
+ ASMJIT_ASSERT(elementType <= 0x7u);
+
+ const SizeOpMap& map = sizeOpMap[vecOpType];
+ const SizeOpTable& table = sizeOpTable[map.tableId];
+
+ size_t index = (Support::min<uint32_t>(regType - Vec::kTypeVecB, Vec::kTypeVecV - Vec::kTypeVecB + 1) << 3) | elementType;
+ SizeOp op = table.array[index];
+ SizeOp modifiedOp { uint8_t(op.value & map.sizeOpMask) };
+
+ if (!Support::bitTest(map.acceptMask, op.value))
+ modifiedOp.makeInvalid();
+
+ return modifiedOp;
+}
+
+// ============================================================================
+// [asmjit::a64::Assembler - Immediate Encoding Utilities (Integral)]
+// ============================================================================
+
+using Utils::LogicalImm;
+
+struct HalfWordImm {
+ uint32_t hw;
+ uint32_t inv;
+ uint32_t imm;
+};
+
+struct LMHImm {
+ uint32_t lm;
+ uint32_t h;
+ uint32_t maxRmId;
+};
+
+static inline uint32_t countZeroHalfWords64(uint64_t imm) noexcept {
+ return uint32_t((imm & 0x000000000000FFFFu) == 0) +
+ uint32_t((imm & 0x00000000FFFF0000u) == 0) +
+ uint32_t((imm & 0x0000FFFF00000000u) == 0) +
+ uint32_t((imm & 0xFFFF000000000000u) == 0) ;
+}
+
+static uint32_t encodeMovSequence32(uint32_t out[2], uint32_t imm, uint32_t rd) noexcept {
+ ASMJIT_ASSERT(rd <= 31);
+
+ uint32_t kMovZ = 0b01010010100000000000000000000000;
+ uint32_t kMovN = 0b00010010100000000000000000000000;
+ uint32_t kMovK = 0b01110010100000000000000000000000;
+
+ if ((imm & 0xFFFF0000u) == 0x00000000u) {
+ out[0] = kMovZ | (0 << 21) | ((imm & 0xFFFFu) << 5) | rd;
+ return 1;
+ }
+
+ if ((imm & 0xFFFF0000u) == 0xFFFF0000u) {
+ out[0] = kMovN | (0 << 21) | ((~imm & 0xFFFFu) << 5) | rd;
+ return 1;
+ }
+
+ if ((imm & 0x0000FFFFu) == 0x00000000u) {
+ out[0] = kMovZ | (1 << 21) | ((imm >> 16) << 5) | rd;
+ return 1;
+ }
+
+ if ((imm & 0x0000FFFFu) == 0x0000FFFFu) {
+ out[0] = kMovN | (1 << 21) | ((~imm >> 16) << 5) | rd;
+ return 1;
+ }
+
+ out[0] = kMovZ | (0 << 21) | ((imm & 0xFFFFu) << 5) | rd;
+ out[1] = kMovK | (1 << 21) | ((imm >> 16) << 5) | rd;
+ return 2;
+}
+
+static uint32_t encodeMovSequence64(uint32_t out[4], uint64_t imm, uint32_t rd) noexcept {
+ ASMJIT_ASSERT(rd <= 31);
+
+ uint32_t kMovZ = 0b11010010100000000000000000000000;
+ uint32_t kMovN = 0b10010010100000000000000000000000;
+ uint32_t kMovK = 0b11110010100000000000000000000000;
+
+ if (imm <= 0xFFFFFFFFu)
+ return encodeMovSequence32(out, uint32_t(imm), rd);
+
+ uint32_t zhw = countZeroHalfWords64( imm);
+ uint32_t ohw = countZeroHalfWords64(~imm);
+
+ if (zhw >= ohw) {
+ uint32_t op = kMovZ;
+ uint32_t count = 0;
+
+ for (uint32_t hwIndex = 0; hwIndex < 4; hwIndex++, imm >>= 16) {
+ uint32_t hwImm = uint32_t(imm & 0xFFFFu);
+ if (hwImm == 0 && hwIndex != 0)
+ continue;
+
+ out[count++] = op | (hwIndex << 21) | (hwImm << 5) | rd;
+ op = kMovK;
+ }
+
+ return count;
+ }
+ else {
+ uint32_t op = kMovN;
+ uint32_t count = 0;
+ uint32_t negMask = 0xFFFFu;
+
+ for (uint32_t hwIndex = 0; hwIndex < 4; hwIndex++, imm >>= 16) {
+ uint32_t hwImm = uint32_t(imm & 0xFFFFu);
+ if (hwImm == 0xFFFFu && hwIndex != 0)
+ continue;
+
+ out[count++] = op | (hwIndex << 21) | ((hwImm ^ negMask) << 5) | rd;
+ op = kMovK;
+ negMask = 0;
+ }
+
+ return count;
+ }
+}
+
+static ASMJIT_INLINE bool encodeLMH(uint32_t sizeField, uint32_t elementIndex, LMHImm* out) noexcept {
+ if (sizeField != 1 && sizeField != 2)
+ return false;
+
+ uint32_t hShift = 3u - sizeField;
+ uint32_t lmShift = sizeField - 1u;
+ uint32_t maxElementIndex = 15u >> sizeField;
+
+ out->h = elementIndex >> hShift;
+ out->lm = (elementIndex << lmShift) & 0x3u;
+ out->maxRmId = (8u << sizeField) - 1;
+
+ return elementIndex <= maxElementIndex;
+}
+
+// [.......A|B.......|.......C|D.......|.......E|F.......|.......G|H.......]
+static ASMJIT_INLINE uint32_t encodeImm64ByteMaskToImm8(uint64_t imm) noexcept {
+ return uint32_t(((imm >> (7 - 0)) & 0b00000011) | // [.......G|H.......]
+ ((imm >> (23 - 2)) & 0b00001100) | // [.......E|F.......]
+ ((imm >> (39 - 4)) & 0b00110000) | // [.......C|D.......]
+ ((imm >> (55 - 6)) & 0b11000000)); // [.......A|B.......]
+}
+
+// ============================================================================
+// [asmjit::a64::Opcode]
+// ============================================================================
+
+//! Helper class to store and manipulate ARM opcode.
+struct Opcode {
+ uint32_t v;
+
+ enum Bits : uint32_t {
+ kN = (1u << 22),
+ kQ = (1u << 30),
+ kX = (1u << 31)
+ };
+
+ // --------------------------------------------------------------------------
+ // [Opcode Builder]
+ // --------------------------------------------------------------------------
+
+ ASMJIT_INLINE uint32_t get() const noexcept { return v; }
+ ASMJIT_INLINE void reset(uint32_t value) noexcept { v = value; }
+
+ ASMJIT_INLINE bool hasQ() const noexcept { return (v & kQ) != 0; }
+ ASMJIT_INLINE bool hasX() const noexcept { return (v & kX) != 0; }
+
+ template<typename T>
+ ASMJIT_INLINE Opcode& addImm(T value, uint32_t bitIndex) noexcept { return operator|=(uint32_t(value) << bitIndex); }
+
+ template<typename T>
+ ASMJIT_INLINE Opcode& xorImm(T value, uint32_t bitIndex) noexcept { return operator^=(uint32_t(value) << bitIndex); }
+
+ template<typename T, typename Condition>
+ ASMJIT_INLINE Opcode& addIf(T value, const Condition& condition) noexcept { return operator|=(condition ? uint32_t(value) : uint32_t(0)); }
+
+ ASMJIT_INLINE Opcode& addLogicalImm(const LogicalImm& logicalImm) noexcept {
+ addImm(logicalImm.n, 22);
+ addImm(logicalImm.r, 16);
+ addImm(logicalImm.s, 10);
+ return *this;
+ }
+
+ ASMJIT_INLINE Opcode& addReg(uint32_t id, uint32_t bitIndex) noexcept { return operator|=((id & 31u) << bitIndex); }
+ ASMJIT_INLINE Opcode& addReg(const Operand_& op, uint32_t bitIndex) noexcept { return addReg(op.id(), bitIndex); }
+
+ ASMJIT_INLINE Opcode& operator=(uint32_t x) noexcept { v = x; return *this; }
+ ASMJIT_INLINE Opcode& operator&=(uint32_t x) noexcept { v &= x; return *this; }
+ ASMJIT_INLINE Opcode& operator|=(uint32_t x) noexcept { v |= x; return *this; }
+ ASMJIT_INLINE Opcode& operator^=(uint32_t x) noexcept { v ^= x; return *this; }
+
+ ASMJIT_INLINE uint32_t operator&(uint32_t x) const noexcept { return v & x; }
+ ASMJIT_INLINE uint32_t operator|(uint32_t x) const noexcept { return v | x; }
+ ASMJIT_INLINE uint32_t operator^(uint32_t x) const noexcept { return v ^ x; }
+};
+
+// ============================================================================
+// [asmjit::a64::Assembler - Signature Utilities]
+// ============================================================================
+
+// TODO: [ARM] Deprecate matchSignature.
+static inline bool matchSignature(const Operand_& o0, const Operand_& o1, uint32_t instFlags) noexcept {
+ if (!(instFlags & (InstDB::kInstFlagLong | InstDB::kInstFlagNarrow)))
+ return o0.signature() == o1.signature();
+
+ // TODO: [ARM] Something smart to validate this.
+ return true;
+}
+
+static inline bool matchSignature(const Operand_& o0, const Operand_& o1, const Operand_& o2, uint32_t instFlags) noexcept {
+ return matchSignature(o0, o1, instFlags) && o1.signature() == o2.signature();
+}
+
+static inline bool matchSignature(const Operand_& o0, const Operand_& o1, const Operand_& o2, const Operand_& o3, uint32_t instFlags) noexcept {
+ return matchSignature(o0, o1, instFlags) && o1.signature() == o2.signature() && o2.signature() == o3.signature();;
+}
+
+// Memory must be either:
+// 1. Absolute address, which will be converted to relative.
+// 2. Relative displacement (Label).
+// 3. Base register + either offset or index.
+static ASMJIT_INLINE bool armCheckMemBaseIndexRel(const Mem& mem) noexcept {
+ // Allowed base types (Nothing, Label, and GpX).
+ constexpr uint32_t kBaseMask = B(0) |
+ B(Operand::kLabelTag) |
+ B(Reg::kTypeGpX);
+
+ // Allowed index types (Nothing, GpW, and GpX).
+ constexpr uint32_t kIndexMask = B(0) |
+ B(Reg::kTypeGpW) |
+ B(Reg::kTypeGpX) ;
+
+ uint32_t baseType = mem.baseType();
+ uint32_t indexType = mem.indexType();
+
+ if (!((1u << baseType) & kBaseMask))
+ return false;
+
+ if (baseType > Operand::kLabelTag) {
+ // Index allows either GpW or GpX.
+ if (!((1u << indexType) & kIndexMask))
+ return false;
+
+ if (indexType == 0)
+ return true;
+ else
+ return !mem.hasOffset();
+ }
+ else {
+ // No index register allowed if this is a PC relative address (literal).
+ return indexType == 0;
+ }
+}
+
+struct EncodeFpOpcodeBits {
+ uint32_t sizeMask;
+ uint32_t mask[3];
+};
+
+static ASMJIT_INLINE bool pickFpOpcode(const Vec& reg, uint32_t sOp, uint32_t sHf, uint32_t vOp, uint32_t vHf, Opcode* opcode, uint32_t* szOut) noexcept {
+ static constexpr uint32_t kQBitIndex = 30;
+
+ static const EncodeFpOpcodeBits szBits[InstDB::kHF_Count] = {
+ { B(2) | B(1) , { 0u , 0u, B(22) } },
+ { B(2) | B(1) | B(0), { 0u , 0u, 0u } },
+ { B(2) | B(1) | B(0), { B(23) | B(22) , 0u, B(22) } },
+ { B(2) | B(1) | B(0), { B(22) | B(20) | B(19) , 0u, B(22) } },
+ { B(2) | B(1) | B(0), { B(22) | B(21) | B(15) | B(14), 0u, B(22) } },
+ { B(2) | B(1) | B(0), { B(23) , 0u, B(22) } }
+ };
+
+ if (!reg.hasElementType()) {
+ // Scalar operation [HSD].
+ uint32_t sz = reg.type() - Reg::kTypeVecH;
+ if (sz > 2u || !Support::bitTest(szBits[sHf].sizeMask, sz))
+ return false;
+
+ opcode->reset(szBits[sHf].mask[sz] ^ sOp);
+ *szOut = sz;
+ return sOp != 0;
+ }
+ else {
+ // Vector operation [HSD].
+ uint32_t q = reg.type() - Reg::kTypeVecD;
+ uint32_t sz = reg.elementType() - Vec::kElementTypeH;
+
+ if (q > 1u || sz > 2u || !Support::bitTest(szBits[vHf].sizeMask, sz))
+ return false;
+
+ opcode->reset(szBits[vHf].mask[sz] ^ (vOp | (q << kQBitIndex)));
+ *szOut = sz;
+ return vOp != 0;
+ }
+}
+
+static ASMJIT_INLINE bool pickFpOpcode(const Vec& reg, uint32_t sOp, uint32_t sHf, uint32_t vOp, uint32_t vHf, Opcode* opcode) noexcept {
+ uint32_t sz;
+ return pickFpOpcode(reg, sOp, sHf, vOp, vHf, opcode, &sz);
+}
+
+// ============================================================================
+// [asmjit::a64::Assembler - Operand Checks]
+// ============================================================================
+
+// Checks whether all operands have the same signature.
+static ASMJIT_INLINE bool checkSignature(const Operand_& o0, const Operand_& o1) noexcept {
+ return o0.signature() == o1.signature();
+}
+
+static ASMJIT_INLINE bool checkSignature(const Operand_& o0, const Operand_& o1, const Operand_& o2) noexcept {
+ return o0.signature() == o1.signature() &&
+ o1.signature() == o2.signature();
+}
+
+static ASMJIT_INLINE bool checkSignature(const Operand_& o0, const Operand_& o1, const Operand_& o2, const Operand_& o3) noexcept {
+ return o0.signature() == o1.signature() &&
+ o1.signature() == o2.signature() &&
+ o2.signature() == o3.signature();
+}
+
+// Checks whether the register is GP register of the allowed types.
+//
+// Allowed is a 2-bit mask, where the first bits allows GpW and the second bit
+// allows GpX. These bits are usually stored within the instruction, but could
+// be also hardcoded in the assembler for instructions where GP types are not
+// selectable.
+static ASMJIT_INLINE bool checkGpType(const Operand_& op, uint32_t allowed) noexcept {
+ uint32_t type = op.as<Reg>().type();
+ return Support::bitTest(allowed << Reg::kTypeGpW, type);
+}
+
+static ASMJIT_INLINE bool checkGpType(const Operand_& op, uint32_t allowed, uint32_t* x) noexcept {
+ // NOTE: We set 'x' to one only when GpW is allowed, otherwise the X is part
+ // of the opcode and we cannot set it. This is why this works without requiring
+ // additional logic.
+ uint32_t type = op.as<Reg>().type();
+ *x = (type - Reg::kTypeGpW) & allowed;
+ return Support::bitTest(allowed << Reg::kTypeGpW, type);
+}
+
+static ASMJIT_INLINE bool checkGpType(const Operand_& o0, const Operand_& o1, uint32_t allowed, uint32_t* x) noexcept {
+ return checkGpType(o0, allowed, x) && checkSignature(o0, o1);
+}
+
+static ASMJIT_INLINE bool checkGpType(const Operand_& o0, const Operand_& o1, const Operand_& o2, uint32_t allowed, uint32_t* x) noexcept {
+ return checkGpType(o0, allowed, x) && checkSignature(o0, o1, o2);
+}
+
+static ASMJIT_INLINE bool checkGpId(const Operand_& op, uint32_t hiId = kZR) noexcept {
+ uint32_t id = op.as<Reg>().id();
+ return id < 31u || id == hiId;
+}
+
+static ASMJIT_INLINE bool checkGpId(const Operand_& o0, const Operand_& o1, uint32_t hiId = kZR) noexcept {
+ uint32_t id0 = o0.as<Reg>().id();
+ uint32_t id1 = o1.as<Reg>().id();
+
+ return (id0 < 31u || id0 == hiId) && (id1 < 31u || id1 == hiId);
+}
+
+static ASMJIT_INLINE bool checkGpId(const Operand_& o0, const Operand_& o1, const Operand_& o2, uint32_t hiId = kZR) noexcept {
+ uint32_t id0 = o0.as<Reg>().id();
+ uint32_t id1 = o1.as<Reg>().id();
+ uint32_t id2 = o2.as<Reg>().id();
+
+ return (id0 < 31u || id0 == hiId) && (id1 < 31u || id1 == hiId) && (id2 < 31u || id2 == hiId);
+}
+
+static ASMJIT_INLINE bool checkVecId(const Operand_& op) noexcept {
+ uint32_t id = op.as<Reg>().id();
+ return id <= 31u;
+}
+
+static ASMJIT_INLINE bool checkVecId(const Operand_& o0, const Operand_& o1) noexcept {
+ uint32_t id0 = o0.as<Reg>().id();
+ uint32_t id1 = o1.as<Reg>().id();
+
+ return (id0 | id1) <= 31u;
+}
+
+static ASMJIT_INLINE bool checkVecId(const Operand_& o0, const Operand_& o1, const Operand_& o2) noexcept {
+ uint32_t id0 = o0.as<Reg>().id();
+ uint32_t id1 = o1.as<Reg>().id();
+ uint32_t id2 = o2.as<Reg>().id();
+
+ return (id0 | id1 | id2) <= 31u;
+}
+
+static ASMJIT_INLINE bool checkVecId(const Operand_& o0, const Operand_& o1, const Operand_& o2, const Operand_& o3) noexcept {
+ uint32_t id0 = o0.as<Reg>().id();
+ uint32_t id1 = o1.as<Reg>().id();
+ uint32_t id2 = o2.as<Reg>().id();
+ uint32_t id3 = o3.as<Reg>().id();
+
+ return (id0 | id1 | id2 | id3) <= 31u;
+}
+
+static ASMJIT_INLINE bool checkMemBase(const Mem& mem) noexcept {
+ return mem.baseType() == Reg::kTypeGpX && mem.baseId() <= 31;
+}
+
+static ASMJIT_INLINE bool checkEven(const Operand_& o0, const Operand_& o1) noexcept {
+ return ((o0.id() | o1.id()) & 1) == 0;
+}
+
+static ASMJIT_INLINE bool checkConsecutive(const Operand_& o0, const Operand_& o1) noexcept {
+ return ((o0.id() + 1u) & 0x1Fu) == o1.id();
+}
+
+static ASMJIT_INLINE bool checkConsecutive(const Operand_& o0, const Operand_& o1, const Operand_& o2) noexcept {
+ return ((o0.id() + 1u) & 0x1Fu) == o1.id() &&
+ ((o0.id() + 2u) & 0x1Fu) == o2.id();
+}
+
+static ASMJIT_INLINE bool checkConsecutive(const Operand_& o0, const Operand_& o1, const Operand_& o2, const Operand_& o3) noexcept {
+ return ((o0.id() + 1u) & 0x1Fu) == o1.id() &&
+ ((o0.id() + 2u) & 0x1Fu) == o2.id() &&
+ ((o0.id() + 3u) & 0x1Fu) == o3.id();
+}
+
+// ============================================================================
+// [asmjit::Assembler - CheckReg]
+// ============================================================================
+
+#define V(type) (type == Reg::kTypeGpW ? Gp::kIdZr : \
+ type == Reg::kTypeGpX ? Gp::kIdZr : \
+ type == Reg::kTypeVecB ? 31u : \
+ type == Reg::kTypeVecH ? 31u : \
+ type == Reg::kTypeVecS ? 31u : \
+ type == Reg::kTypeVecD ? 31u : \
+ type == Reg::kTypeVecV ? 31u : 0)
+static const uint8_t commonHiRegIdOfType[32] = {
+ ASMJIT_LOOKUP_TABLE_32(V, 0)
+};
+#undef V
+
+static inline bool checkValidRegs(const Operand_& o0) noexcept {
+ return ((o0.id() < 31) | (o0.id() == commonHiRegIdOfType[o0.as<Reg>().type()]));
+}
+
+static inline bool checkValidRegs(const Operand_& o0, const Operand_& o1) noexcept {
+ return ((o0.id() < 31) | (o0.id() == commonHiRegIdOfType[o0.as<Reg>().type()])) &
+ ((o1.id() < 31) | (o1.id() == commonHiRegIdOfType[o1.as<Reg>().type()])) ;
+}
+
+static inline bool checkValidRegs(const Operand_& o0, const Operand_& o1, const Operand_& o2) noexcept {
+ return ((o0.id() < 31) | (o0.id() == commonHiRegIdOfType[o0.as<Reg>().type()])) &
+ ((o1.id() < 31) | (o1.id() == commonHiRegIdOfType[o1.as<Reg>().type()])) &
+ ((o2.id() < 31) | (o2.id() == commonHiRegIdOfType[o2.as<Reg>().type()])) ;
+}
+
+static inline bool checkValidRegs(const Operand_& o0, const Operand_& o1, const Operand_& o2, const Operand_& o3) noexcept {
+ return ((o0.id() < 31) | (o0.id() == commonHiRegIdOfType[o0.as<Reg>().type()])) &
+ ((o1.id() < 31) | (o1.id() == commonHiRegIdOfType[o1.as<Reg>().type()])) &
+ ((o2.id() < 31) | (o2.id() == commonHiRegIdOfType[o2.as<Reg>().type()])) &
+ ((o3.id() < 31) | (o3.id() == commonHiRegIdOfType[o3.as<Reg>().type()])) ;
+}
+
+// ============================================================================
+// [asmjit::Assembler - Construction / Destruction]
+// ============================================================================
+
+Assembler::Assembler(CodeHolder* code) noexcept : BaseAssembler() {
+ if (code)
+ code->attach(this);
+}
+
+Assembler::~Assembler() noexcept {}
+
+// ============================================================================
+// [asmjit::Assembler - Emit]
+// ============================================================================
+
+#define ENC_OPS1(OP0) ((Operand::kOp##OP0))
+#define ENC_OPS2(OP0, OP1) ((Operand::kOp##OP0) + ((Operand::kOp##OP1) << 3))
+#define ENC_OPS3(OP0, OP1, OP2) ((Operand::kOp##OP0) + ((Operand::kOp##OP1) << 3) + ((Operand::kOp##OP2) << 6))
+#define ENC_OPS4(OP0, OP1, OP2, OP3) ((Operand::kOp##OP0) + ((Operand::kOp##OP1) << 3) + ((Operand::kOp##OP2) << 6) + ((Operand::kOp##OP3) << 9))
+
+Error Assembler::_emit(uint32_t instId, const Operand_& o0, const Operand_& o1, const Operand_& o2, const Operand_* opExt) {
+ constexpr uint32_t kRequiresSpecialHandling =
+ uint32_t(Inst::kOptionReserved) ; // Logging/Validation/Error.
+
+ Error err;
+ uint32_t options;
+
+ CodeWriter writer(this);
+
+ if (instId >= Inst::_kIdCount)
+ instId = 0;
+
+ const InstDB::InstInfo* instInfo = &InstDB::_instInfoTable[instId];
+ uint32_t encodingIndex = instInfo->_encodingDataIndex;
+
+ Opcode opcode;
+ uint32_t isign4;
+ uint32_t instFlags;
+
+ const Operand_& o3 = opExt[EmitterUtils::kOp3];
+ const Operand_* rmRel = nullptr;
+
+ uint32_t multipleOpData[4];
+ uint32_t multipleOpCount;
+
+ // These are only used when instruction uses a relative displacement.
+ OffsetFormat offsetFormat; // Offset format.
+ uint64_t offsetValue; // Offset value (if known).
+
+ // Combine all instruction options and also check whether the instruction
+ // is valid. All options that require special handling (including invalid
+ // instruction) are handled by the next branch.
+ options = uint32_t(instId == 0);
+ options |= uint32_t((size_t)(_bufferEnd - writer.cursor()) < 4);
+ options |= uint32_t(instOptions() | forcedInstOptions());
+
+ if (ASMJIT_UNLIKELY(options & kRequiresSpecialHandling)) {
+ if (ASMJIT_UNLIKELY(!_code))
+ return reportError(DebugUtils::errored(kErrorNotInitialized));
+
+ // Unknown instruction.
+ if (ASMJIT_UNLIKELY(instId == 0))
+ goto InvalidInstruction;
+
+ // Grow request, happens rarely.
+ err = writer.ensureSpace(this, 4);
+ if (ASMJIT_UNLIKELY(err))
+ goto Failed;
+
+#ifndef ASMJIT_NO_VALIDATION
+ // Strict validation.
+ if (hasValidationOption(kValidationOptionAssembler)) {
+ Operand_ opArray[Globals::kMaxOpCount];
+ EmitterUtils::opArrayFromEmitArgs(opArray, o0, o1, o2, opExt);
+
+ err = InstAPI::validate(arch(), BaseInst(instId, options, _extraReg), opArray, Globals::kMaxOpCount);
+ if (ASMJIT_UNLIKELY(err))
+ goto Failed;
+ }
+#endif
+ }
+
+ // Signature of the first 4 operands.
+ isign4 = o0.opType() + (o1.opType() << 3) + (o2.opType() << 6) + (o3.opType() << 9);
+ instFlags = instInfo->flags();
+
+ switch (instInfo->_encoding) {
+ // ------------------------------------------------------------------------
+ // [Base - Universal]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseOp: {
+ const InstDB::EncodingData::BaseOp& opData = InstDB::EncodingData::baseOp[encodingIndex];
+
+ if (isign4 == 0) {
+ opcode.reset(opData.opcode);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseOpImm: {
+ const InstDB::EncodingData::BaseOpImm& opData = InstDB::EncodingData::baseOpImm[encodingIndex];
+
+ if (isign4 == ENC_OPS1(Imm)) {
+ uint64_t imm = o0.as<Imm>().valueAs<uint64_t>();
+ if (imm >= uint64_t(1u << opData.immBits))
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(imm, opData.immOffset);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseR: {
+ const InstDB::EncodingData::BaseR& opData = InstDB::EncodingData::baseR[encodingIndex];
+
+ if (isign4 == ENC_OPS1(Reg)) {
+ if (!checkGpType(o0, opData.rType))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.rHiId))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode);
+ opcode.addReg(o0, opData.rShift);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRR: {
+ const InstDB::EncodingData::BaseRR& opData = InstDB::EncodingData::baseRR[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ uint32_t x;
+ if (!checkGpType(o0, opData.aType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpType(o1, opData.bType))
+ goto InvalidInstruction;
+
+ if (opData.uniform && !checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.aHiId))
+ goto InvalidPhysId;
+
+ if (!checkGpId(o1, opData.bHiId))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addReg(o1, opData.bShift);
+ opcode.addReg(o0, opData.aShift);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRRR: {
+ const InstDB::EncodingData::BaseRRR& opData = InstDB::EncodingData::baseRRR[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ uint32_t x;
+ if (!checkGpType(o0, opData.aType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpType(o1, opData.bType))
+ goto InvalidInstruction;
+
+ if (!checkGpType(o2, opData.cType))
+ goto InvalidInstruction;
+
+ if (opData.uniform && !checkSignature(o0, o1, o2))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.aHiId))
+ goto InvalidPhysId;
+
+ if (!checkGpId(o1, opData.bHiId))
+ goto InvalidPhysId;
+
+ if (!checkGpId(o2, opData.cHiId))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, 31);
+ opcode.addReg(o2, 16);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRRRR: {
+ const InstDB::EncodingData::BaseRRRR& opData = InstDB::EncodingData::baseRRRR[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Reg)) {
+ uint32_t x;
+ if (!checkGpType(o0, opData.aType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpType(o1, opData.bType))
+ goto InvalidInstruction;
+
+ if (!checkGpType(o2, opData.cType))
+ goto InvalidInstruction;
+
+ if (!checkGpType(o3, opData.dType))
+ goto InvalidInstruction;
+
+ if (opData.uniform && !checkSignature(o0, o1, o2, o3))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.aHiId))
+ goto InvalidPhysId;
+
+ if (!checkGpId(o1, opData.bHiId))
+ goto InvalidPhysId;
+
+ if (!checkGpId(o2, opData.cHiId))
+ goto InvalidPhysId;
+
+ if (!checkGpId(o3, opData.dHiId))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, 31);
+ opcode.addReg(o2, 16);
+ opcode.addReg(o3, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRRII: {
+ const InstDB::EncodingData::BaseRRII& opData = InstDB::EncodingData::baseRRII[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ if (!checkGpType(o0, opData.aType))
+ goto InvalidInstruction;
+
+ if (!checkGpType(o1, opData.bType))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.aHiId))
+ goto InvalidPhysId;
+
+ if (!checkGpId(o1, opData.bHiId))
+ goto InvalidPhysId;
+
+ if (o2.as<Imm>().valueAs<uint64_t>() >= Support::bitMask(opData.aImmSize + opData.aImmDiscardLsb) ||
+ o3.as<Imm>().valueAs<uint64_t>() >= Support::bitMask(opData.bImmSize + opData.bImmDiscardLsb))
+ goto InvalidImmediate;
+
+ uint32_t aImm = o2.as<Imm>().valueAs<uint32_t>() >> opData.aImmDiscardLsb;
+ uint32_t bImm = o3.as<Imm>().valueAs<uint32_t>() >> opData.bImmDiscardLsb;
+
+ if ((aImm << opData.aImmDiscardLsb) != o2.as<Imm>().valueAs<uint32_t>() ||
+ (bImm << opData.bImmDiscardLsb) != o3.as<Imm>().valueAs<uint32_t>())
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(aImm, opData.aImmOffset);
+ opcode.addImm(bImm, opData.bImmOffset);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Mov]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseMov: {
+ // MOV is a pseudo instruction that uses various instructions depending on its signature.
+ uint32_t x = o0.as<Reg>().type() - Reg::kTypeGpW;
+ if (x > 1)
+ goto InvalidInstruction;
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (!o0.as<Reg>().isGp())
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ bool hasSP = o0.as<Gp>().isSP() || o1.as<Gp>().isSP();
+ if (hasSP) {
+ // Cannot be combined with ZR.
+ if (!checkGpId(o0, o1, kSP))
+ goto InvalidPhysId;
+
+ // MOV Rd, Rm -> ADD Rd, Rn, #0.
+ opcode.reset(0b00010001000000000000000000000000);
+ opcode.addImm(x, 31);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+ else {
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ // MOV Rd, Rm -> ORR Rd, <ZR>, Rm.
+ opcode.reset(0b00101010000000000000001111100000);
+ opcode.addImm(x, 31);
+ opcode.addReg(o1, 16);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+ }
+
+ if (isign4 == ENC_OPS2(Reg, Imm)) {
+ if (!o0.as<Reg>().isGp())
+ goto InvalidInstruction;
+
+ uint64_t immValue = o1.as<Imm>().valueAs<uint64_t>();
+ if (!x)
+ immValue &= 0xFFFFFFFFu;
+
+ // Prefer a single MOVN/MOVZ instruction over a logical instruction.
+ multipleOpCount = encodeMovSequence64(multipleOpData, immValue, o0.id() & 31);
+ if (multipleOpCount == 1 && !o0.as<Gp>().isSP()) {
+ opcode.reset(multipleOpData[0]);
+ goto EmitOp;
+ }
+
+ // Logical instructions use 13-bit immediate pattern encoded as N:ImmR:ImmS.
+ LogicalImm logicalImm;
+ if (!o0.as<Gp>().isZR()) {
+ if (Utils::encodeLogicalImm(immValue, x ? 64 : 32, &logicalImm)) {
+ if (!checkGpId(o0, kSP))
+ goto InvalidPhysId;
+
+ opcode.reset(0b00110010000000000000001111100000);
+ opcode.addImm(x, 31);
+ opcode.addLogicalImm(logicalImm);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+ }
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ goto EmitOp_Multiple;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseMovKNZ: {
+ const InstDB::EncodingData::BaseMovKNZ& opData = InstDB::EncodingData::baseMovKNZ[encodingIndex];
+
+ uint32_t x = o0.as<Reg>().type() - Reg::kTypeGpW;
+ if (x > 1)
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+
+ if (isign4 == ENC_OPS2(Reg, Imm)) {
+ uint64_t imm16 = o1.as<Imm>().valueAs<uint64_t>();
+ if (imm16 > 0xFFFFu)
+ goto InvalidImmediate;
+
+ opcode.addImm(imm16, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Imm, Imm)) {
+ uint64_t imm16 = o1.as<Imm>().valueAs<uint64_t>();
+ uint32_t shiftType = o2.as<Imm>().predicate();
+ uint64_t shiftValue = o2.as<Imm>().valueAs<uint64_t>();
+
+ if (imm16 > 0xFFFFu || shiftValue > 48 || shiftType != Shift::kOpLSL)
+ goto InvalidImmediate;
+
+ // Convert shift value to 'hw' field.
+ uint32_t hw = uint32_t(shiftValue) >> 4;
+ if ((hw << 4) != uint32_t(shiftValue))
+ goto InvalidImmediate;
+
+ opcode.addImm(hw, 21);
+ opcode.addImm(imm16, 5);
+ opcode.addReg(o0, 0);
+
+ if (!x && hw > 1u)
+ goto InvalidImmediate;
+
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Adr]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseAdr: {
+ const InstDB::EncodingData::BaseAdr& opData = InstDB::EncodingData::baseAdr[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Label) || isign4 == ENC_OPS2(Reg, Imm)) {
+ if (!o0.as<Reg>().isGpX())
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addReg(o0, 0);
+ offsetFormat.resetToImmValue(opData.offsetType, 4, 5, 21, 0);
+
+ if (instId == Inst::kIdAdrp)
+ offsetFormat._immDiscardLsb = 12;
+
+ rmRel = &o1;
+ goto EmitOp_Rel;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Arithmetic and Logical]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseAddSub: {
+ const InstDB::EncodingData::BaseAddSub& opData = InstDB::EncodingData::baseAddSub[encodingIndex];
+
+ uint32_t x;
+ if (!checkGpType(o0, o1, kWX, &x))
+ goto InvalidInstruction;
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm) || isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ opcode.reset(uint32_t(opData.immediateOp) << 24);
+
+ // ADD | SUB (immediate) - ZR is not allowed.
+ // ADDS|SUBS (immediate) - ZR allowed in Rd, SP allowed in Rn.
+ uint32_t aHiId = opcode.get() & B(29) ? kZR : kSP;
+ uint32_t bHiId = kSP;
+
+ if (!checkGpId(o0, aHiId) || !checkGpId(o1, bHiId))
+ goto InvalidPhysId;
+
+ // ADD|SUB (immediate) use 12-bit immediate optionally shifted by 'LSL #12'.
+ uint64_t imm = o2.as<Imm>().valueAs<uint64_t>();
+ uint32_t shift = 0;
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ if (o3.as<Imm>().predicate() != Shift::kOpLSL)
+ goto InvalidImmediate;
+
+ if (o3.as<Imm>().value() != 0 && o3.as<Imm>().value() != 12)
+ goto InvalidImmediate;
+
+ shift = uint32_t(o3.as<Imm>().value() != 0);
+ }
+
+ // Accept immediate value of '0x00XXX000' by setting 'shift' to 12.
+ if (imm > 0xFFFu) {
+ if (shift || (imm & ~uint64_t(0xFFFu << 12)) != 0)
+ goto InvalidImmediate;
+ shift = 1;
+ imm >>= 12;
+ }
+
+ opcode.addImm(x, 31);
+ opcode.addImm(shift, 22);
+ opcode.addImm(imm, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg) || isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ if (!checkSignature(o1, o2))
+ goto InvalidInstruction;
+
+ uint32_t opSize = x ? 64 : 32;
+ uint32_t sType = 0;
+ uint64_t shift = 0;
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ sType = o3.as<Imm>().predicate();
+ shift = o3.as<Imm>().valueAs<uint64_t>();
+ }
+
+ if (!checkGpId(o2, kZR))
+ goto InvalidPhysId;
+
+ // Shift operation - LSL, LSR, ASR.
+ if (sType <= Shift::kOpASR) {
+ bool hasSP = o0.as<Gp>().isSP() || o1.as<Gp>().isSP();
+ if (!hasSP) {
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ if (shift >= opSize)
+ goto InvalidImmediate;
+
+ opcode.reset(uint32_t(opData.shiftedOp) << 21);
+ opcode.addImm(x, 31);
+ opcode.addImm(sType, 22);
+ opcode.addReg(o2, 16);
+ opcode.addImm(shift, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ // SP register can only be used with LSL or Extend.
+ if (sType != Shift::kOpLSL)
+ goto InvalidImmediate;
+ sType = x ? Shift::kOpUXTX : Shift::kOpUXTW;
+ }
+
+ // Extend operation - UXTB, UXTH, UXTW, UXTX, SXTB, SXTH, SXTW, SXTX.
+ opcode.reset(uint32_t(opData.extendedOp) << 21);
+ sType -= Shift::kOpUXTB;
+
+ if (sType > 7 || shift > 4)
+ goto InvalidImmediate;
+
+ if (!(opcode.get() & B(29))) {
+ // ADD|SUB (extend) - ZR is not allowed.
+ if (!checkGpId(o0, o1, kSP))
+ goto InvalidPhysId;
+ }
+ else {
+ // ADDS|SUBS (extend) - ZR allowed in Rd, SP allowed in Rn.
+ if (!checkGpId(o0, kZR) || !checkGpId(o1, kSP))
+ goto InvalidPhysId;
+ }
+
+ opcode.addImm(x, 31);
+ opcode.addReg(o2, 16);
+ opcode.addImm(sType, 13);
+ opcode.addImm(shift, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseLogical: {
+ const InstDB::EncodingData::BaseLogical& opData = InstDB::EncodingData::baseLogical[encodingIndex];
+
+ uint32_t x;
+ if (!checkGpType(o0, o1, kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ uint32_t opSize = x ? 64 : 32;
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm) && opData.immediateOp != 0) {
+ opcode.reset(uint32_t(opData.immediateOp) << 23);
+
+ // AND|ANDS|ORR|EOR (immediate) uses a LogicalImm format described by N:R:S values.
+ uint64_t immMask = Support::lsbMask<uint64_t>(opSize);
+ uint64_t immValue = o2.as<Imm>().valueAs<uint64_t>();
+
+ if (opData.negateImm)
+ immValue ^= immMask;
+
+ // Logical instructions use 13-bit immediate pattern encoded as N:ImmS:ImmR.
+ LogicalImm logicalImm;
+ if (!Utils::encodeLogicalImm(immValue & immMask, opSize, &logicalImm))
+ goto InvalidImmediate;
+
+ // AND|ORR|EOR (immediate) can have SP on destination, but ANDS (immediate) cannot.
+ uint32_t kOpANDS = 0x3 << 29;
+ bool isANDS = (opcode.get() & kOpANDS) == kOpANDS;
+
+ if (!checkGpId(o0, isANDS ? kZR : kSP) || !checkGpId(o1, kZR))
+ goto InvalidPhysId;
+
+ opcode.addImm(x, 31);
+ opcode.addLogicalImm(logicalImm);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ if (!checkSignature(o1, o2))
+ goto InvalidInstruction;
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (!checkGpId(o0, o1, o2, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(uint32_t(opData.shiftedOp) << 21);
+ opcode.addImm(x, 31);
+ opcode.addReg(o2, 16);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ if (!checkGpId(o0, o1, o2, kZR))
+ goto InvalidPhysId;
+
+ uint32_t shiftType = o3.as<Imm>().predicate();
+ uint64_t opShift = o3.as<Imm>().valueAs<uint64_t>();
+
+ if (shiftType > 0x3 || opShift >= opSize)
+ goto InvalidImmediate;
+
+ opcode.reset(uint32_t(opData.shiftedOp) << 21);
+ opcode.addImm(x, 31);
+ opcode.addImm(shiftType, 22);
+ opcode.addReg(o2, 16);
+ opcode.addImm(opShift, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseCmpCmn: {
+ const InstDB::EncodingData::BaseCmpCmn& opData = InstDB::EncodingData::baseCmpCmn[encodingIndex];
+
+ uint32_t x;
+ if (!checkGpType(o0, kWX, &x))
+ goto InvalidInstruction;
+
+ if (isign4 == ENC_OPS2(Reg, Imm)) {
+ // CMN|CMP (immediate) - ZR is not allowed.
+ if (!checkGpId(o0, kSP))
+ goto InvalidPhysId;
+
+ // CMN|CMP (immediate) use 12-bit immediate optionally shifted by 'LSL #12'.
+ const Imm& imm12 = o1.as<Imm>();
+ uint32_t immShift = 0;
+ uint64_t immValue = imm12.valueAs<uint64_t>();
+
+ if (immValue > 0xFFFu) {
+ if ((immValue & ~uint64_t(0xFFFu << 12)) != 0)
+ goto InvalidImmediate;
+ immShift = 1;
+ immValue >>= 12;
+ }
+
+ opcode.reset(uint32_t(opData.immediateOp) << 24);
+ opcode.addImm(x, 31);
+ opcode.addImm(immShift, 22);
+ opcode.addImm(immValue, 10);
+ opcode.addReg(o0, 5);
+ opcode.addReg(Gp::kIdZr, 0);
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS2(Reg, Reg) || isign4 == ENC_OPS3(Reg, Reg, Imm)) {
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ uint32_t opSize = x ? 64 : 32;
+ uint32_t sType = 0;
+ uint64_t shift = 0;
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm)) {
+ sType = o2.as<Imm>().predicate();
+ shift = o2.as<Imm>().valueAs<uint64_t>();
+ }
+
+ bool hasSP = o0.as<Gp>().isSP() || o1.as<Gp>().isSP();
+
+ // Shift operation - LSL, LSR, ASR.
+ if (sType <= Shift::kOpASR) {
+ if (!hasSP) {
+ if (shift >= opSize)
+ goto InvalidImmediate;
+
+ opcode.reset(uint32_t(opData.shiftedOp) << 21);
+ opcode.addImm(x, 31);
+ opcode.addImm(sType, 22);
+ opcode.addReg(o1, 16);
+ opcode.addImm(shift, 10);
+ opcode.addReg(o0, 5);
+ opcode.addReg(Gp::kIdZr, 0);
+ goto EmitOp;
+ }
+
+ // SP register can only be used with LSL or Extend.
+ if (sType != Shift::kOpLSL)
+ goto InvalidImmediate;
+
+ sType = x ? Shift::kOpUXTX : Shift::kOpUXTW;
+ }
+
+ // Extend operation - UXTB, UXTH, UXTW, UXTX, SXTB, SXTH, SXTW, SXTX.
+ sType -= Shift::kOpUXTB;
+ if (sType > 7 || shift > 4)
+ goto InvalidImmediate;
+
+ opcode.reset(uint32_t(opData.extendedOp) << 21);
+ opcode.addImm(x, 31);
+ opcode.addReg(o1, 16);
+ opcode.addImm(sType, 13);
+ opcode.addImm(shift, 10);
+ opcode.addReg(o0, 5);
+ opcode.addReg(Gp::kIdZr, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseMvnNeg: {
+ const InstDB::EncodingData::BaseMvnNeg& opData = InstDB::EncodingData::baseMvnNeg[encodingIndex];
+
+ uint32_t x;
+ if (!checkGpType(o0, o1, kWX, &x))
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addReg(o1, 16);
+ opcode.addReg(o0, 0);
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm)) {
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ uint32_t opSize = x ? 64 : 32;
+ uint32_t shiftType = o2.as<Imm>().predicate();
+ uint64_t opShift = o2.as<Imm>().valueAs<uint64_t>();
+
+ if (shiftType > Shift::kOpROR || opShift >= opSize)
+ goto InvalidImmediate;
+
+ opcode.addImm(shiftType, 22);
+ opcode.addImm(opShift, 10);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseTst: {
+ const InstDB::EncodingData::BaseTst& opData = InstDB::EncodingData::baseTst[encodingIndex];
+
+ uint32_t x;
+ if (!checkGpType(o0, kWX, &x))
+ goto InvalidInstruction;
+
+ uint32_t opSize = x ? 64 : 32;
+
+ if (isign4 == ENC_OPS2(Reg, Imm) && opData.immediateOp != 0) {
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ // TST (immediate) uses a LogicalImm format described by N:R:S values.
+ uint64_t immMask = Support::lsbMask<uint64_t>(opSize);
+ uint64_t immValue = o1.as<Imm>().valueAs<uint64_t>();
+
+ // Logical instructions use 13-bit immediate pattern encoded as N:ImmS:ImmR.
+ LogicalImm logicalImm;
+ if (!Utils::encodeLogicalImm(immValue & immMask, opSize, &logicalImm))
+ goto InvalidImmediate;
+
+ opcode.reset(uint32_t(opData.immediateOp) << 22);
+ opcode.addLogicalImm(logicalImm);
+ opcode.addImm(x, 31);
+ opcode.addReg(o0, 5);
+ opcode.addReg(Gp::kIdZr, 0);
+ goto EmitOp;
+ }
+
+ opcode.reset(uint32_t(opData.shiftedOp) << 21);
+ opcode.addImm(x, 31);
+ opcode.addReg(o1, 16);
+ opcode.addReg(o0, 5);
+ opcode.addReg(Gp::kIdZr, 0);
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm)) {
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ uint32_t shiftType = o2.as<Imm>().predicate();
+ uint64_t opShift = o2.as<Imm>().valueAs<uint64_t>();
+
+ if (shiftType > 0x3 || opShift >= opSize)
+ goto InvalidImmediate;
+
+ opcode.addImm(shiftType, 22);
+ opcode.addImm(opShift, 10);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Bit Manipulation]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseBfc: {
+ const InstDB::EncodingData::BaseBfc& opData = InstDB::EncodingData::baseBfc[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Imm, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0))
+ goto InvalidPhysId;
+
+ uint64_t lsb = o1.as<Imm>().valueAs<uint64_t>();
+ uint64_t width = o2.as<Imm>().valueAs<uint64_t>();
+ uint32_t opSize = x ? 64 : 32;
+
+ if (lsb >= opSize || width == 0 || width > opSize)
+ goto InvalidImmediate;
+
+ uint32_t lsb32 = Support::neg(uint32_t(lsb)) & (opSize - 1);
+ uint32_t width32 = uint32_t(width) - 1;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 22);
+ opcode.addImm(lsb32, 16);
+ opcode.addImm(width32, 10);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseBfi: {
+ const InstDB::EncodingData::BaseBfi& opData = InstDB::EncodingData::baseBfi[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1))
+ goto InvalidPhysId;
+
+ uint64_t lsb = o2.as<Imm>().valueAs<uint64_t>();
+ uint64_t width = o3.as<Imm>().valueAs<uint64_t>();
+ uint32_t opSize = x ? 64 : 32;
+
+ if (lsb >= opSize || width == 0 || width > opSize)
+ goto InvalidImmediate;
+
+ uint32_t lImm = Support::neg(uint32_t(lsb)) & (opSize - 1);
+ uint32_t wImm = uint32_t(width) - 1;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 22);
+ opcode.addImm(lImm, 16);
+ opcode.addImm(wImm, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseBfm: {
+ const InstDB::EncodingData::BaseBfm& opData = InstDB::EncodingData::baseBfm[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1))
+ goto InvalidPhysId;
+
+ uint64_t immR = o2.as<Imm>().valueAs<uint64_t>();
+ uint64_t immS = o3.as<Imm>().valueAs<uint64_t>();
+ uint32_t opSize = x ? 64 : 32;
+
+ if ((immR | immS) >= opSize)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 22);
+ opcode.addImm(immR, 16);
+ opcode.addImm(immS, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseBfx: {
+ const InstDB::EncodingData::BaseBfx& opData = InstDB::EncodingData::baseBfx[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1))
+ goto InvalidPhysId;
+
+ uint64_t lsb = o2.as<Imm>().valueAs<uint64_t>();
+ uint64_t width = o3.as<Imm>().valueAs<uint64_t>();
+ uint32_t opSize = x ? 64 : 32;
+
+ if (lsb >= opSize || width == 0 || width > opSize)
+ goto InvalidImmediate;
+
+ uint32_t lsb32 = uint32_t(lsb);
+ uint32_t width32 = lsb32 + uint32_t(width) - 1u;
+
+ if (width32 >= opSize)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 22);
+ opcode.addImm(lsb32, 16);
+ opcode.addImm(width32, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseExtend: {
+ const InstDB::EncodingData::BaseExtend& opData = InstDB::EncodingData::baseExtend[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ uint32_t x;
+ if (!checkGpType(o0, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!o1.as<Reg>().isGpW())
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 22);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseExtract: {
+ const InstDB::EncodingData::BaseExtract& opData = InstDB::EncodingData::baseExtract[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1, o2))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, o2))
+ goto InvalidPhysId;
+
+ uint64_t lsb = o3.as<Imm>().valueAs<uint64_t>();
+ uint32_t opSize = x ? 64 : 32;
+
+ if (lsb >= opSize)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 22);
+ opcode.addReg(o2, 16);
+ opcode.addImm(lsb, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRev: {
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ uint32_t x;
+ if (!checkGpType(o0, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1))
+ goto InvalidPhysId;
+
+ opcode.reset(0b01011010110000000000100000000000);
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 10);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseShift: {
+ const InstDB::EncodingData::BaseShift& opData = InstDB::EncodingData::baseShift[encodingIndex];
+
+ uint32_t x;
+ if (!checkGpType(o0, kWX, &x))
+ goto InvalidInstruction;
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (!checkSignature(o0, o1, o2))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, o2, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.registerOp());
+ opcode.addImm(x, 31);
+ opcode.addReg(o2, 16);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm) && opData.immediateOp()) {
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ uint64_t immR = o2.as<Imm>().valueAs<uint64_t>();
+ uint32_t opSize = x ? 64 : 32;
+
+ if (immR >= opSize)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.immediateOp());
+ opcode.addImm(x, 31);
+ opcode.addImm(x, 22);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+
+ if (opcode.get() & B(10)) {
+ // ASR and LSR (immediate) has the same logic.
+ opcode.addImm(x, 15);
+ opcode.addImm(immR, 16);
+ goto EmitOp;
+ }
+
+ if (opData.ror == 0) {
+ // LSL (immediate) is an alias to UBFM
+ uint32_t ubfmImmR = Support::neg(uint32_t(immR)) & (opSize - 1);
+ uint32_t ubfmImmS = opSize - 1 - uint32_t(immR);
+
+ opcode.addImm(ubfmImmR, 16);
+ opcode.addImm(ubfmImmS, 10);
+ goto EmitOp;
+ }
+ else {
+ // ROR (immediate) is an alias to EXTR.
+ opcode.addImm(immR, 10);
+ opcode.addReg(o1, 16);
+ goto EmitOp;
+ }
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Conditionals]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseCCmp: {
+ const InstDB::EncodingData::BaseCCmp& opData = InstDB::EncodingData::baseCCmp[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm) || isign4 == ENC_OPS4(Reg, Imm, Imm, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ uint64_t nzcv = o2.as<Imm>().valueAs<uint64_t>();
+ uint64_t cond = o3.as<Imm>().valueAs<uint64_t>();
+
+ if ((nzcv | cond) > 0xFu)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addImm(cond, 12);
+ opcode.addImm(nzcv, 0);
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ // CCMN|CCMP (register) form.
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o1, kZR))
+ goto InvalidPhysId;
+
+ opcode.addReg(o1, 16);
+ opcode.addReg(o0, 5);
+ goto EmitOp;
+ }
+ else {
+ // CCMN|CCMP (immediate) form.
+ uint64_t imm5 = o1.as<Imm>().valueAs<uint64_t>();
+ if (imm5 > 0x1F)
+ goto InvalidImmediate;
+
+ opcode.addImm(1, 11);
+ opcode.addImm(imm5, 16);
+ opcode.addReg(o0, 5);
+ goto EmitOp;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseCInc: {
+ const InstDB::EncodingData::BaseCInc& opData = InstDB::EncodingData::baseCInc[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, o1, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ uint64_t cond = o2.as<Imm>().valueAs<uint64_t>();
+ if (cond >= 0xEu)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addReg(o1, 16);
+ opcode.addImm(Cond::negate(uint32_t(cond)), 12);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseCSel: {
+ const InstDB::EncodingData::BaseCSel& opData = InstDB::EncodingData::baseCSel[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, o1, o2, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, o2, kZR))
+ goto InvalidPhysId;
+
+ uint64_t cond = o3.as<Imm>().valueAs<uint64_t>();
+ if (cond > 0xFu)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addReg(o2, 16);
+ opcode.addImm(cond, 12);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseCSet: {
+ const InstDB::EncodingData::BaseCSet& opData = InstDB::EncodingData::baseCSet[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, InstDB::kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ uint64_t cond = o1.as<Imm>().valueAs<uint64_t>();
+ if (cond >= 0xEu)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addImm(Cond::negate(uint32_t(cond)), 12);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Special]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseAtDcIcTlbi: {
+ const InstDB::EncodingData::BaseAtDcIcTlbi& opData = InstDB::EncodingData::baseAtDcIcTlbi[encodingIndex];
+
+ if (isign4 == ENC_OPS1(Imm) || isign4 == ENC_OPS2(Imm, Reg)) {
+ if (opData.mandatoryReg && isign4 != ENC_OPS2(Imm, Reg))
+ goto InvalidInstruction;
+
+ if (o0.as<Imm>().valueAs<uint64_t>() > 0x7FFFu)
+ goto InvalidImmediate;
+
+ uint32_t imm = o0.as<Imm>().valueAs<uint32_t>();
+ if ((imm & opData.immVerifyMask) != opData.immVerifyData)
+ goto InvalidImmediate;
+
+ uint32_t rt = 31;
+ if (o1.isReg()) {
+ if (!o1.as<Reg>().isGpX())
+ goto InvalidInstruction;
+
+ if (!checkGpId(o1, kZR))
+ goto InvalidPhysId;
+
+ rt = o1.id() & 31;
+ }
+
+ opcode.reset(0b11010101000010000000000000000000);
+ opcode.addImm(imm, 5);
+ opcode.addReg(rt, 0);
+ goto EmitOp;
+ }
+ break;
+ }
+
+ case InstDB::kEncodingBaseMrs: {
+ if (isign4 == ENC_OPS2(Reg, Imm)) {
+ if (!o0.as<Reg>().isGpX())
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ if (o1.as<Imm>().valueAs<uint64_t>() > 0xFFFFu)
+ goto InvalidImmediate;
+
+ uint32_t imm = o1.as<Imm>().valueAs<uint32_t>();
+ if (!(imm & B(15)))
+ goto InvalidImmediate;
+
+ opcode.reset(0b11010101001100000000000000000000);
+ opcode.addImm(imm, 5);
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseMsr: {
+ if (isign4 == ENC_OPS2(Imm, Reg)) {
+ if (!o1.as<Reg>().isGpX())
+ goto InvalidInstruction;
+
+ if (o0.as<Imm>().valueAs<uint64_t>() > 0xFFFFu)
+ goto InvalidImmediate;
+
+ uint32_t imm = o0.as<Imm>().valueAs<uint32_t>();
+ if (!(imm & B(15)))
+ goto InvalidImmediate;
+
+ if (!checkGpId(o1, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(0b11010101000100000000000000000000);
+ opcode.addImm(imm, 5);
+ opcode.addReg(o1, 0);
+ goto EmitOp;
+ }
+
+ if (isign4 == ENC_OPS2(Imm, Imm)) {
+ if (o0.as<Imm>().valueAs<uint64_t>() > 0x1Fu)
+ goto InvalidImmediate;
+
+ if (o1.as<Imm>().valueAs<uint64_t>() > 0xFu)
+ goto InvalidImmediate;
+
+ uint32_t op = o0.as<Imm>().valueAs<uint32_t>();
+ uint32_t cRm = o1.as<Imm>().valueAs<uint32_t>();
+
+ uint32_t op1 = uint32_t(op) >> 3;
+ uint32_t op2 = uint32_t(op) & 0x7u;
+
+ opcode.reset(0b11010101000000000100000000011111);
+ opcode.addImm(op1, 16);
+ opcode.addImm(cRm, 8);
+ opcode.addImm(op2, 5);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseSys: {
+ if (isign4 == ENC_OPS4(Imm, Imm, Imm, Imm)) {
+ if (o0.as<Imm>().valueAs<uint64_t>() > 0x7u ||
+ o1.as<Imm>().valueAs<uint64_t>() > 0xFu ||
+ o2.as<Imm>().valueAs<uint64_t>() > 0xFu ||
+ o3.as<Imm>().valueAs<uint64_t>() > 0x7u)
+ goto InvalidImmediate;
+
+ uint32_t op1 = o0.as<Imm>().valueAs<uint32_t>();
+ uint32_t cRn = o1.as<Imm>().valueAs<uint32_t>();
+ uint32_t cRm = o2.as<Imm>().valueAs<uint32_t>();
+ uint32_t op2 = o3.as<Imm>().valueAs<uint32_t>();
+ uint32_t rt = 31;
+
+ const Operand_& o4 = opExt[EmitterUtils::kOp4];
+ if (o4.isReg()) {
+ if (!o4.as<Reg>().isGpX())
+ goto InvalidInstruction;
+
+ if (!checkGpId(o4, kZR))
+ goto InvalidPhysId;
+
+ rt = o4.id() & 31;
+ }
+ else if (!o4.isNone()) {
+ goto InvalidInstruction;
+ }
+
+ opcode.reset(0b11010101000010000000000000000000);
+ opcode.addImm(op1, 16);
+ opcode.addImm(cRn, 12);
+ opcode.addImm(cRm, 8);
+ opcode.addImm(op2, 5);
+ opcode.addImm(rt, 0);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Branch]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseBranchReg: {
+ const InstDB::EncodingData::BaseBranchReg& opData = InstDB::EncodingData::baseBranchReg[encodingIndex];
+
+ if (isign4 == ENC_OPS1(Reg)) {
+ if (!o0.as<Reg>().isGpX())
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode);
+ opcode.addReg(o0, 5);
+ goto EmitOp;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseBranchRel: {
+ const InstDB::EncodingData::BaseBranchRel& opData = InstDB::EncodingData::baseBranchRel[encodingIndex];
+
+ if (isign4 == ENC_OPS1(Label) || isign4 == ENC_OPS1(Imm)) {
+ opcode.reset(opData.opcode);
+ rmRel = &o0;
+
+ if (options & Inst::kOptionCondFlagMask) {
+ uint32_t cond = (options >> Inst::kOptionCondCodeShift) & 0xFu;
+ if (cond != Cond::kAL) {
+ opcode |= B(30);
+ opcode.addImm(cond, 0);
+ offsetFormat.resetToImmValue(OffsetFormat::kTypeCommon, 4, 5, 19, 2);
+ goto EmitOp_Rel;
+ }
+ }
+
+ offsetFormat.resetToImmValue(OffsetFormat::kTypeCommon, 4, 0, 26, 2);
+ goto EmitOp_Rel;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseBranchCmp: {
+ const InstDB::EncodingData::BaseBranchCmp& opData = InstDB::EncodingData::baseBranchCmp[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Label) || isign4 == ENC_OPS2(Reg, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode);
+ opcode.addImm(x, 31);
+ opcode.addReg(o0, 0);
+ offsetFormat.resetToImmValue(OffsetFormat::kTypeCommon, 4, 5, 19, 2);
+
+ rmRel = &o1;
+ goto EmitOp_Rel;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseBranchTst: {
+ const InstDB::EncodingData::BaseBranchTst& opData = InstDB::EncodingData::baseBranchTst[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Imm, Label) || isign4 == ENC_OPS3(Reg, Imm, Imm)) {
+ uint32_t x;
+ if (!checkGpType(o0, kWX, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ uint64_t imm = o1.as<Imm>().valueAs<uint64_t>();
+
+ opcode.reset(opData.opcode);
+ if (imm >= 32) {
+ if (!x)
+ goto InvalidImmediate;
+ opcode.addImm(x, 31);
+ imm &= 0x1F;
+ }
+
+ opcode.addReg(o0, 0);
+ opcode.addImm(imm, 19);
+ offsetFormat.resetToImmValue(OffsetFormat::kTypeCommon, 4, 5, 14, 2);
+
+ rmRel = &o2;
+ goto EmitOp_Rel;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Base - Load / Store]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingBaseLdSt: {
+ const InstDB::EncodingData::BaseLdSt& opData = InstDB::EncodingData::baseLdSt[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ const Mem& m = o1.as<Mem>();
+ rmRel = &m;
+
+ uint32_t x;
+ if (!checkGpType(o0, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ // Instructions that work with either word or dword have the unsigned
+ // offset shift set to 2 (word), so we set it to 3 (dword) if this is
+ // X version of the instruction.
+ uint32_t xShiftMask = uint32_t(opData.uOffsetShift == 2);
+ uint32_t immShift = uint32_t(opData.uOffsetShift) + (x & xShiftMask);
+
+ if (!armCheckMemBaseIndexRel(m))
+ goto InvalidAddress;
+
+ int64_t offset = m.offset();
+ if (m.hasBaseReg()) {
+ // [Base {Offset | Index}]
+ if (m.hasIndex()) {
+ uint32_t opt = armShiftOpToLdStOptMap[m.predicate()];
+ if (opt == 0xFF)
+ goto InvalidAddress;
+
+ uint32_t shift = m.shift();
+ uint32_t s = shift != 0;
+
+ if (s && shift != immShift)
+ goto InvalidAddressScale;
+
+ opcode.reset(uint32_t(opData.registerOp) << 21);
+ opcode.xorImm(x, opData.xOffset);
+ opcode.addImm(opt, 13);
+ opcode.addImm(s, 12);
+ opcode |= B(11);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBaseIndex_Rn5_Rm16;
+ }
+
+ // Makes it easier to work with the offset especially on 32-bit arch.
+ if (!Support::isInt32(offset))
+ goto InvalidDisplacement;
+ int32_t offset32 = int32_t(offset);
+
+ if (m.isPreOrPost()) {
+ if (!Support::isInt9(offset32))
+ goto InvalidDisplacement;
+
+ opcode.reset(uint32_t(opData.prePostOp) << 21);
+ opcode.xorImm(x, opData.xOffset);
+ opcode.addImm(offset32 & 0x1FF, 12);
+ opcode.addImm(m.isPreIndex(), 11);
+ opcode |= B(10);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+ else {
+ uint32_t imm12 = uint32_t(offset32) >> immShift;
+
+ // Alternative form of LDUR/STUR and related instructions as described by AArch64 reference manual:
+ //
+ // If this instruction is not encodable with scaled unsigned offset, try unscaled signed offset.
+ if (!Support::isUInt12(imm12) || (imm12 << immShift) != uint32_t(offset32)) {
+ instId = opData.uAltInstId;
+ instInfo = &InstDB::_instInfoTable[instId];
+ encodingIndex = instInfo->_encodingDataIndex;
+ goto Case_BaseLdurStur;
+ }
+
+ opcode.reset(uint32_t(opData.uOffsetOp) << 22);
+ opcode.xorImm(x, opData.xOffset);
+ opcode.addImm(imm12, 10);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+ }
+ else {
+ if (!opData.literalOp)
+ goto InvalidAddress;
+
+ opcode.reset(uint32_t(opData.literalOp) << 24);
+ opcode.xorImm(x, opData.xOffset);
+ opcode.addReg(o0, 0);
+ offsetFormat.resetToImmValue(OffsetFormat::kTypeCommon, 4, 5, 19, 2);
+ goto EmitOp_Rel;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseLdpStp: {
+ const InstDB::EncodingData::BaseLdpStp& opData = InstDB::EncodingData::baseLdpStp[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Mem)) {
+ const Mem& m = o2.as<Mem>();
+ rmRel = &m;
+
+ uint32_t x;
+ if (!checkGpType(o0, o1, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ if (m.baseType() != Reg::kTypeGpX || m.hasIndex())
+ goto InvalidAddress;
+
+ if (m.isOffset64Bit())
+ goto InvalidDisplacement;
+
+ uint32_t offsetShift = opData.offsetShift + x;
+ int32_t offset32 = m.offsetLo32() >> offsetShift;
+
+ // Make sure we didn't lose bits by applying the mandatory offset shift.
+ if (uint32_t(offset32) << offsetShift != uint32_t(m.offsetLo32()))
+ goto InvalidDisplacement;
+
+ // Offset is encoded as 7-bit immediate.
+ if (!Support::isInt7(offset32))
+ goto InvalidDisplacement;
+
+ if (m.isPreOrPost() && offset32 != 0) {
+ if (!opData.prePostOp)
+ goto InvalidAddress;
+
+ opcode.reset(uint32_t(opData.prePostOp) << 22);
+ opcode.addImm(m.isPreIndex(), 24);
+ }
+ else {
+ opcode.reset(uint32_t(opData.offsetOp) << 22);
+ }
+
+ opcode.addImm(x, opData.xOffset);
+ opcode.addImm(offset32 & 0x7F, 15);
+ opcode.addReg(o1, 10);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseStx: {
+ const InstDB::EncodingData::BaseStx& opData = InstDB::EncodingData::baseStx[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Mem)) {
+ const Mem& m = o2.as<Mem>();
+ uint32_t x;
+
+ if (!o0.as<Reg>().isGpW() || !checkGpType(o1, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, opData.xOffset);
+ opcode.addReg(o0, 16);
+ opcode.addReg(o1, 0);
+
+ rmRel = &m;
+ goto EmitOp_MemBaseNoImm_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseLdxp: {
+ const InstDB::EncodingData::BaseLdxp& opData = InstDB::EncodingData::baseLdxp[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Mem)) {
+ const Mem& m = o2.as<Mem>();
+ uint32_t x;
+
+ if (!checkGpType(o0, opData.rType, &x) || !checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, opData.xOffset);
+ opcode.addReg(o1, 10);
+ opcode.addReg(o0, 0);
+
+ rmRel = &m;
+ goto EmitOp_MemBaseNoImm_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseStxp: {
+ const InstDB::EncodingData::BaseStxp& opData = InstDB::EncodingData::baseStxp[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Mem)) {
+ const Mem& m = o3.as<Mem>();
+ uint32_t x;
+
+ if (!o0.as<Reg>().isGpW() || !checkGpType(o1, opData.rType, &x) || !checkSignature(o1, o2))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, o2, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, opData.xOffset);
+ opcode.addReg(o0, 16);
+ opcode.addReg(o2, 10);
+ opcode.addReg(o1, 0);
+
+ rmRel = &m;
+ goto EmitOp_MemBaseNoImm_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRM_NoImm: {
+ const InstDB::EncodingData::BaseRM_NoImm& opData = InstDB::EncodingData::baseRM_NoImm[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ const Mem& m = o1.as<Mem>();
+ rmRel = &m;
+
+ uint32_t x;
+ if (!checkGpType(o0, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.rHiId))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, opData.xOffset);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBaseNoImm_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRM_SImm9: {
+Case_BaseLdurStur:
+ const InstDB::EncodingData::BaseRM_SImm9& opData = InstDB::EncodingData::baseRM_SImm9[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ const Mem& m = o1.as<Mem>();
+ rmRel = &m;
+
+ uint32_t x;
+ if (!checkGpType(o0, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.rHiId))
+ goto InvalidPhysId;
+
+ if (m.hasBaseReg() && !m.hasIndex()) {
+ if (m.isOffset64Bit())
+ goto InvalidDisplacement;
+
+ int32_t offset32 = m.offsetLo32() >> opData.immShift;
+ if (Support::shl(offset32, opData.immShift) != m.offsetLo32())
+ goto InvalidDisplacement;
+
+ if (!Support::isInt9(offset32))
+ goto InvalidDisplacement;
+
+ if (m.isFixedOffset()) {
+ opcode.reset(opData.offsetOp());
+ }
+ else {
+ if (!opData.prePostOp())
+ goto InvalidInstruction;
+
+ opcode.reset(opData.prePostOp());
+ opcode.xorImm(m.isPreIndex(), 11);
+ }
+
+ opcode.xorImm(x, opData.xOffset);
+ opcode.addImm(offset32 & 0x1FF, 12);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+
+ goto InvalidAddress;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseRM_SImm10: {
+ const InstDB::EncodingData::BaseRM_SImm10& opData = InstDB::EncodingData::baseRM_SImm10[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ const Mem& m = o1.as<Mem>();
+ rmRel = &m;
+
+ uint32_t x;
+ if (!checkGpType(o0, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, opData.rHiId))
+ goto InvalidPhysId;
+
+ if (m.hasBaseReg() && !m.hasIndex()) {
+ if (m.isOffset64Bit())
+ goto InvalidDisplacement;
+
+ int32_t offset32 = m.offsetLo32() >> opData.immShift;
+ if (Support::shl(offset32, opData.immShift) != m.offsetLo32())
+ goto InvalidDisplacement;
+
+ if (!Support::isInt10(offset32))
+ goto InvalidDisplacement;
+
+ if (m.isPostIndex())
+ goto InvalidAddress;
+
+ // Offset has 10 bits, sign is stored in the 10th bit.
+ offset32 &= 0x3FF;
+
+ opcode.reset(opData.opcode());
+ opcode.xorImm(m.isPreIndex(), 11);
+ opcode.xorImm(x, opData.xOffset);
+ opcode.addImm(offset32 >> 9, 22);
+ opcode.addImm(offset32, 12);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+
+ goto InvalidAddress;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseAtomicOp: {
+ const InstDB::EncodingData::BaseAtomicOp& opData = InstDB::EncodingData::baseAtomicOp[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Mem)) {
+ const Mem& m = o2.as<Mem>();
+ uint32_t x;
+
+ if (!checkGpType(o0, opData.rType, &x) || !checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, o1, kZR))
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, opData.xOffset);
+ opcode.addReg(o0, 16);
+ opcode.addReg(o1, 0);
+
+ rmRel = &m;
+ goto EmitOp_MemBaseNoImm_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseAtomicSt: {
+ const InstDB::EncodingData::BaseAtomicSt& opData = InstDB::EncodingData::baseAtomicSt[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ const Mem& m = o1.as<Mem>();
+ uint32_t x;
+
+ if (!checkGpType(o0, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkGpId(o0, kZR))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, opData.xOffset);
+ opcode.addReg(o0, 16);
+ opcode.addReg(Gp::kIdZr, 0);
+
+ rmRel = &m;
+ goto EmitOp_MemBaseNoImm_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingBaseAtomicCasp: {
+ const InstDB::EncodingData::BaseAtomicCasp& opData = InstDB::EncodingData::baseAtomicCasp[encodingIndex];
+ const Operand_& o4 = opExt[EmitterUtils::kOp4];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Reg) && o4.isMem()) {
+ const Mem& m = o4.as<Mem>();
+ uint32_t x;
+
+ if (!checkGpType(o0, opData.rType, &x))
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1, o2, o3))
+ goto InvalidInstruction;
+
+ if (!checkEven(o0, o2) || !checkGpId(o0, o2, kZR))
+ goto InvalidPhysId;
+
+ if (!checkConsecutive(o0, o1) || !checkConsecutive(o2, o3))
+ goto InvalidPhysId;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(x, opData.xOffset);
+ opcode.addReg(o0, 16);
+ opcode.addReg(o2, 0);
+
+ rmRel = &m;
+ goto EmitOp_MemBaseNoImm_Rn5;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [FSimd - Instructions]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingFSimdSV: {
+ const InstDB::EncodingData::FSimdSV& opData = InstDB::EncodingData::fSimdSV[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ uint32_t q = o1.as<Reg>().type() - Reg::kTypeVecD;
+ if (q > 1)
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ // This operation is only defined for:
+ // hD, vS.{4|8}h (16-bit)
+ // sD, vS.4s (32-bit)
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ uint32_t elementSz = o1.as<Vec>().elementType() - Vec::kElementTypeH;
+
+ // Size greater than 1 means 64-bit elements, not supported.
+ if ((sz | elementSz) > 1 || sz != elementSz)
+ goto InvalidInstruction;
+
+ // Size 1 (32-bit float) requires at least 4 elements.
+ if (sz && !q)
+ goto InvalidInstruction;
+
+ // Bit flipping according to sz.
+ static const uint32_t szBits[] = { B(29), 0 };
+
+ opcode.reset(opData.opcode << 10);
+ opcode ^= szBits[sz];
+ opcode.addImm(q, 30);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingFSimdVV: {
+ const InstDB::EncodingData::FSimdVV& opData = InstDB::EncodingData::fSimdVV[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.scalarOp(), opData.scalarHf(), opData.vectorOp(), opData.vectorHf(), &opcode))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingFSimdVVV: {
+ const InstDB::EncodingData::FSimdVVV& opData = InstDB::EncodingData::fSimdVVV[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.scalarOp(), opData.scalarHf(), opData.vectorOp(), opData.vectorHf(), &opcode))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingFSimdVVVe: {
+ const InstDB::EncodingData::FSimdVVVe& opData = InstDB::EncodingData::fSimdVVVe[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (!o2.as<Vec>().hasElementIndex()) {
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.scalarOp(), opData.scalarHf(), opData.vectorOp(), opData.vectorHf(), &opcode))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ else {
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ uint32_t q = o1.as<Reg>().isVecQ();
+ uint32_t sz;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.elementScalarOp(), InstDB::kHF_D, opData.elementVectorOp(), InstDB::kHF_D, &opcode, &sz))
+ goto InvalidInstruction;
+
+ if (sz == 0 && o2.as<Reg>().id() > 15)
+ goto InvalidPhysId;
+
+ uint32_t elementIndex = o2.as<Vec>().elementIndex();
+ if (elementIndex > (7u >> sz))
+ goto InvalidElementIndex;
+
+ uint32_t hlm = elementIndex << sz;
+ opcode.addImm(q, 30);
+ opcode.addImm(hlm & 3u, 20);
+ opcode.addImm(hlm >> 2, 11);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingFSimdVVVV: {
+ const InstDB::EncodingData::FSimdVVVV& opData = InstDB::EncodingData::fSimdVVVV[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Reg)) {
+ if (!matchSignature(o0, o1, o2, o3, instFlags))
+ goto InvalidInstruction;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.scalarOp(), opData.scalarHf(), opData.vectorOp(), opData.vectorHf(), &opcode))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rd0_Rn5_Rm16_Ra10;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcadd: {
+ const InstDB::EncodingData::SimdFcadd& opData = InstDB::EncodingData::simdFcadd[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ if (!checkSignature(o0, o1, o2) || o0.as<Vec>().hasElementIndex())
+ goto InvalidInstruction;
+
+ uint32_t q = o0.as<Reg>().type() - Reg::kTypeVecD;
+ if (q > 1)
+ goto InvalidInstruction;
+
+ uint32_t sz = o0.as<Vec>().elementType() - Vec::kElementTypeB;
+ if (sz == 0 || sz > 3)
+ goto InvalidInstruction;
+
+ // 0 <- 90deg.
+ // 1 <- 270deg.
+ uint32_t rot = 0;
+ if (o3.as<Imm>().value() == 270)
+ rot = 1;
+ else if (o3.as<Imm>().value() != 90)
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(q, 30);
+ opcode.addImm(sz, 22);
+ opcode.addImm(rot, 12);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFccmpFccmpe: {
+ const InstDB::EncodingData::SimdFccmpFccmpe& opData = InstDB::EncodingData::simdFccmpFccmpe[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Imm, Imm)) {
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1) || o0.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ if (o2.as<Imm>().valueAs<uint64_t>() > 0xFu)
+ goto InvalidImmediate;
+
+ if (o3.as<Imm>().valueAs<uint64_t>() > 0xFu)
+ goto InvalidImmediate;
+
+ uint32_t type = (sz - 1) & 0x3u;
+ uint32_t nzcv = o2.as<Imm>().valueAs<uint32_t>();
+ uint32_t cond = o3.as<Imm>().valueAs<uint32_t>();
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(type, 22);
+ opcode.addImm(cond, 12);
+ opcode.addImm(nzcv, 0);
+
+ goto EmitOp_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcm: {
+ const InstDB::EncodingData::SimdFcm& opData = InstDB::EncodingData::simdFcm[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg) && opData.hasRegisterOp()) {
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.registerScalarOp(), opData.registerScalarHf(), opData.registerVectorOp(), opData.registerVectorHf(), &opcode))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm) && opData.hasZeroOp()) {
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (o2.as<Imm>().value() != 0 || o2.as<Imm>().predicate() != 0)
+ goto InvalidImmediate;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.zeroScalarOp(), InstDB::kHF_B, opData.zeroVectorOp(), InstDB::kHF_B, &opcode))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcmla: {
+ const InstDB::EncodingData::SimdFcmla& opData = InstDB::EncodingData::simdFcmla[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ uint32_t q = o0.as<Reg>().type() - Reg::kTypeVecD;
+ if (q > 1)
+ goto InvalidInstruction;
+
+ uint32_t sz = o0.as<Vec>().elementType() - Vec::kElementTypeB;
+ if (sz == 0 || sz > 3)
+ goto InvalidInstruction;
+
+ uint32_t rot = 0;
+ switch (o3.as<Imm>().value()) {
+ case 0 : rot = 0; break;
+ case 90 : rot = 1; break;
+ case 180: rot = 2; break;
+ case 270: rot = 3; break;
+ default:
+ goto InvalidImmediate;
+ }
+
+ if (!o2.as<Vec>().hasElementIndex()) {
+ if (!checkSignature(o1, o2))
+ goto InvalidInstruction;
+
+ opcode.reset(opData.regularOp());
+ opcode.addImm(q, 30);
+ opcode.addImm(sz, 22);
+ opcode.addImm(rot, 11);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ else {
+ if (o0.as<Vec>().elementType() != o2.as<Vec>().elementType())
+ goto InvalidInstruction;
+
+ // Only allowed vectors are: 4H, 8H, and 4S.
+ if (!(sz == 1 || (q == 1 && sz == 2)))
+ goto InvalidInstruction;
+
+ // Element index ranges:
+ // 4H - ElementIndex[0..1] (index 2..3 is UNDEFINED).
+ // 8H - ElementIndex[0..3].
+ // 4S - ElementIndex[0..1].
+ uint32_t elementIndex = o2.as<Vec>().elementIndex();
+ uint32_t hlFieldShift = sz == 1 ? 0u : 1u;
+ uint32_t maxElementIndex = q == 1 && sz == 1 ? 3u : 1u;
+
+ if (elementIndex > maxElementIndex)
+ goto InvalidElementIndex;
+
+ uint32_t hl = elementIndex << hlFieldShift;
+
+ opcode.reset(opData.elementOp());
+ opcode.addImm(q, 30);
+ opcode.addImm(sz, 22);
+ opcode.addImm(hl & 1u, 21); // L field.
+ opcode.addImm(hl >> 1, 11); // H field.
+ opcode.addImm(rot, 13);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcmpFcmpe: {
+ const InstDB::EncodingData::SimdFcmpFcmpe& opData = InstDB::EncodingData::simdFcmpFcmpe[encodingIndex];
+
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ uint32_t type = (sz - 1) & 0x3u;
+
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(type, 22);
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rn5_Rm16;
+ }
+
+ if (isign4 == ENC_OPS2(Reg, Imm)) {
+ if (o1.as<Imm>().value() != 0 || o1.as<Imm>().predicate() != 0)
+ goto InvalidInstruction;
+
+ opcode |= B(3);
+ goto EmitOp_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcsel: {
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ if (!checkSignature(o0, o1, o2))
+ goto InvalidInstruction;
+
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ uint32_t type = (sz - 1) & 0x3u;
+
+ if (sz > 2 || o0.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ if (o3.as<Imm>().valueAs<uint64_t>() > 0xFu)
+ goto InvalidImmediate;
+
+ uint32_t cond = o3.as<Imm>().valueAs<uint32_t>();
+
+ opcode.reset(0b00011110001000000000110000000000);
+ opcode.addImm(type, 22);
+ opcode.addImm(cond, 12);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcvt: {
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ uint32_t dstSz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ uint32_t srcSz = o1.as<Reg>().type() - Reg::kTypeVecH;
+
+ if ((dstSz | srcSz) > 3)
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().hasElementType() || o1.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ // Table that provides 'type' and 'opc' according to the dst/src combination.
+ static const uint8_t table[] = {
+ 0xFFu, // H <- H (Invalid).
+ 0x03u, // H <- S (type=00 opc=11).
+ 0x13u, // H <- D (type=01 opc=11).
+ 0xFFu, // H <- Q (Invalid).
+ 0x30u, // S <- H (type=11 opc=00).
+ 0xFFu, // S <- S (Invalid).
+ 0x10u, // S <- D (type=01 opc=00).
+ 0xFFu, // S <- Q (Invalid).
+ 0x31u, // D <- H (type=11 opc=01).
+ 0x01u, // D <- S (type=00 opc=01).
+ 0xFFu, // D <- D (Invalid).
+ 0xFFu, // D <- Q (Invalid).
+ 0xFFu, // Q <- H (Invalid).
+ 0xFFu, // Q <- S (Invalid).
+ 0xFFu, // Q <- D (Invalid).
+ 0xFFu // Q <- Q (Invalid).
+ };
+
+ uint32_t typeOpc = table[(dstSz << 2) | srcSz];
+ opcode.reset(0b0001111000100010010000 << 10);
+ opcode.addImm(typeOpc >> 4, 22);
+ opcode.addImm(typeOpc & 15, 15);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcvtLN: {
+ const InstDB::EncodingData::SimdFcvtLN& opData = InstDB::EncodingData::simdFcvtLN[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ // Scalar form - only FCVTXN.
+ if (o0.as<Vec>().isVecS() && o1.as<Vec>().isVecD()) {
+ if (!opData.hasScalar())
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().hasElementType() || o1.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ opcode.reset(opData.scalarOp());
+ opcode |= B(22); // sz bit must be 1, the only supported combination of FCVTXN.
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ opcode.reset(opData.vectorOp());
+
+ const Vec& rL = (instFlags & InstDB::kInstFlagLong) ? o0.as<Vec>() : o1.as<Vec>();
+ const Vec& rN = (instFlags & InstDB::kInstFlagLong) ? o1.as<Vec>() : o0.as<Vec>();
+
+ uint32_t q = rN.type() - Reg::kTypeVecD;
+ if (opcode.hasQ() != q)
+ goto InvalidInstruction;
+
+ if (rL.isVecS4() && rN.elementType() == Vec::kElementTypeH && !opData.isCvtxn()) {
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (rL.isVecD2() && rN.elementType() == Vec::kElementTypeS) {
+ opcode |= B(22);
+ goto EmitOp_Rd0_Rn5;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFcvtSV: {
+ const InstDB::EncodingData::SimdFcvtSV& opData = InstDB::EncodingData::simdFcvtSV[encodingIndex];
+
+ // So we can support both IntToFloat and FloatToInt conversions.
+ const Operand_& oGp = opData.isFloatToInt() ? o0 : o1;
+ const Operand_& oVec = opData.isFloatToInt() ? o1 : o0;
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (oGp.as<Reg>().isGp() && oVec.as<Reg>().isVec()) {
+ uint32_t x = oGp.as<Reg>().isGpX();
+ uint32_t type = oVec.as<Reg>().type() - Reg::kTypeVecH;
+
+ if (type > 2u)
+ goto InvalidInstruction;
+
+ type = (type - 1u) & 0x3;
+ opcode.reset(opData.generalOp());
+ opcode.addImm(type, 22);
+ opcode.addImm(x, 31);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (o0.as<Reg>().isVec() && o1.as<Reg>().isVec()) {
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!pickFpOpcode(o0.as<Vec>(), opData.scalarIntOp(), InstDB::kHF_B, opData.vectorIntOp(), InstDB::kHF_B, &opcode))
+ goto InvalidInstruction;
+
+ goto EmitOp_Rd0_Rn5;
+ }
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm) && opData.isFixedPoint()) {
+ if (o2.as<Imm>().valueAs<uint64_t>() >= 64)
+ goto InvalidInstruction;
+
+ uint32_t scale = o2.as<Imm>().valueAs<uint32_t>();
+ if (scale == 0)
+ goto InvalidInstruction;
+
+ if (oGp.as<Reg>().isGp() && oVec.as<Reg>().isVec()) {
+ uint32_t x = oGp.as<Reg>().isGpX();
+ uint32_t type = oVec.as<Reg>().type() - Reg::kTypeVecH;
+
+ uint32_t scaleLimit = 32u << x;
+ if (scale > scaleLimit)
+ goto InvalidInstruction;
+
+ type = (type - 1u) & 0x3;
+ opcode.reset(opData.generalOp() ^ B(21));
+ opcode.addImm(type, 22);
+ opcode.addImm(x, 31);
+ opcode.addImm(64u - scale, 10);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (o0.as<Reg>().isVec() && o1.as<Reg>().isVec()) {
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ uint32_t sz;
+ if (!pickFpOpcode(o0.as<Vec>(), opData.scalarFpOp(), InstDB::kHF_0, opData.vectorFpOp(), InstDB::kHF_0, &opcode, &sz))
+ goto InvalidInstruction;
+
+ uint32_t scaleLimit = 16u << sz;
+ if (scale > scaleLimit)
+ goto InvalidInstruction;
+
+ uint32_t imm = Support::neg(scale) & Support::lsbMask<uint32_t>(sz + 4 + 1);
+ opcode.addImm(imm, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFmlal: {
+ const InstDB::EncodingData::SimdFmlal& opData = InstDB::EncodingData::simdFmlal[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ uint32_t q = o0.as<Reg>().type() - Reg::kTypeVecD;
+ uint32_t qIsOptional = opData.optionalQ();
+
+ if (qIsOptional) {
+ // This instruction works with either 64-bit or 128-bit registers,
+ // encoded by Q bit.
+ if (q > 1)
+ goto InvalidInstruction;
+ }
+ else {
+ // This instruction requires 128-bit vector registers.
+ if (q != 1)
+ goto InvalidInstruction;
+
+ // The instruction is ehtier B (bottom) or T (top), which is part of
+ // the opcode, which uses Q bit, so we have to clear it explicitly.
+ q = 0;
+ }
+
+ if (o0.as<Reg>().type() != o1.as<Reg>().type() + qIsOptional ||
+ o0.as<Vec>().elementType() != opData.tA ||
+ o1.as<Vec>().elementType() != opData.tB)
+ goto InvalidInstruction;
+
+ if (!o2.as<Vec>().hasElementIndex()) {
+ if (!checkSignature(o1, o2))
+ goto InvalidInstruction;
+
+ opcode.reset(opData.vectorOp());
+ opcode.addImm(q, 30);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ else {
+ if (o2.as<Vec>().elementType() != opData.tElement)
+ goto InvalidInstruction;
+
+ if (o2.as<Reg>().id() > 15)
+ goto InvalidPhysId;
+
+ uint32_t elementIndex = o2.as<Vec>().elementIndex();
+ if (elementIndex > 7u)
+ goto InvalidElementIndex;
+
+ opcode.reset(opData.elementOp());
+ opcode.addImm(q, 30);
+ opcode.addImm(elementIndex & 3u, 20);
+ opcode.addImm(elementIndex >> 2, 11);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdFmov: {
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ // FMOV Gp <-> Vec opcode:
+ opcode.reset(0b00011110001001100000000000000000);
+
+ if (o0.as<Reg>().isGp() && o1.as<Reg>().isVec()) {
+ // FMOV Wd, Hn (sf=0 type=11 rmode=00 op=110)
+ // FMOV Xd, Hn (sf=1 type=11 rmode=00 op=110)
+ // FMOV Wd, Sn (sf=0 type=00 rmode=00 op=110)
+ // FMOV Xd, Dn (sf=1 type=11 rmode=00 op=110)
+ // FMOV Xd, Vn.d[1] (sf=1 type=10 rmode=01 op=110)
+ uint32_t x = o0.as<Reg>().isGpX();
+ uint32_t sz = o1.as<Reg>().type() - Reg::kTypeVecH;
+
+ uint32_t type = (sz - 1) & 0x3u;
+ uint32_t rModeOp = 0b00110;
+
+ if (o1.as<Vec>().hasElementIndex()) {
+ // Special case.
+ if (!x || !o1.as<Vec>().isVecD2() || o1.as<Vec>().elementIndex() != 1)
+ goto InvalidInstruction;
+ type = 0b10;
+ rModeOp = 0b01110;
+ }
+ else {
+ // Must be scalar.
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ if (o1.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ if (o1.as<Vec>().isVecS() && x)
+ goto InvalidInstruction;
+
+ if (o1.as<Vec>().isVecD() && !x)
+ goto InvalidInstruction;
+ }
+
+ opcode.addImm(x, 31);
+ opcode.addImm(type, 22);
+ opcode.addImm(rModeOp, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (o0.as<Reg>().isVec() && o1.as<Reg>().isGp()) {
+ // FMOV Hd, Wn (sf=0 type=11 rmode=00 op=111)
+ // FMOV Hd, Xn (sf=1 type=11 rmode=00 op=111)
+ // FMOV Sd, Wn (sf=0 type=00 rmode=00 op=111)
+ // FMOV Dd, Xn (sf=1 type=11 rmode=00 op=111)
+ // FMOV Vd.d[1], Xn (sf=1 type=10 rmode=01 op=111)
+ uint32_t x = o1.as<Reg>().isGpX();
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+
+ uint32_t type = (sz - 1) & 0x3u;
+ uint32_t rModeOp = 0b00111;
+
+ if (o0.as<Vec>().hasElementIndex()) {
+ // Special case.
+ if (!x || !o0.as<Vec>().isVecD2() || o0.as<Vec>().elementIndex() != 1)
+ goto InvalidInstruction;
+ type = 0b10;
+ rModeOp = 0b01111;
+ }
+ else {
+ // Must be scalar.
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().isVecS() && x)
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().isVecD() && !x)
+ goto InvalidInstruction;
+ }
+
+ opcode.addImm(x, 31);
+ opcode.addImm(type, 22);
+ opcode.addImm(rModeOp, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (checkSignature(o0, o1)) {
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().hasElementType())
+ goto InvalidInstruction;
+
+ uint32_t type = (sz - 1) & 0x3;
+ opcode.reset(0b00011110001000000100000000000000);
+ opcode.addImm(type, 22);
+ goto EmitOp_Rd0_Rn5;
+ }
+ }
+
+ if (isign4 == ENC_OPS2(Reg, Imm)) {
+ if (o0.as<Reg>().isVec()) {
+ double fpValue;
+ if (o1.as<Imm>().isDouble())
+ fpValue = o1.as<Imm>().valueAs<double>();
+ else if (o1.as<Imm>().isInt32())
+ fpValue = o1.as<Imm>().valueAs<int32_t>();
+ else
+ goto InvalidImmediate;
+
+ if (!Utils::isFP64Imm8(fpValue))
+ goto InvalidImmediate;
+
+ uint32_t imm8 = Utils::encodeFP64ToImm8(fpValue);
+ if (!o0.as<Vec>().hasElementType()) {
+ // FMOV (scalar, immediate).
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ uint32_t type = (sz - 1u) & 0x3u;
+
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ opcode.reset(0b00011110001000000001000000000000);
+ opcode.addImm(type, 22);
+ opcode.addImm(imm8, 13);
+ goto EmitOp_Rd0;
+ }
+ else {
+ uint32_t q = o0.as<Vec>().type() - Reg::kTypeVecD;
+ uint32_t sz = o0.as<Vec>().elementType() - Vec::kElementTypeH;
+
+ if (q > 1 || sz > 2)
+ goto InvalidInstruction;
+
+ static const uint32_t szBits[3] = { B(11), B(0), B(29) };
+ opcode.reset(0b00001111000000001111010000000000);
+ opcode ^= szBits[sz];
+ opcode.addImm(q, 30);
+ opcode.addImm(imm8 >> 5, 16);
+ opcode.addImm(imm8 & 31, 5);
+ goto EmitOp_Rd0;
+ }
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingFSimdPair: {
+ const InstDB::EncodingData::FSimdPair& opData = InstDB::EncodingData::fSimdPair[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ // This operation is only defined for:
+ // hD, vS.2h (16-bit)
+ // sD, vS.2s (32-bit)
+ // dD, vS.2d (64-bit)
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecH;
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ static const uint32_t szSignatures[3] = {
+ VecS::kSignature | (Vec::kSignatureElementH),
+ VecD::kSignature | (Vec::kSignatureElementS),
+ VecV::kSignature | (Vec::kSignatureElementD)
+ };
+
+ if (o1.signature() != szSignatures[sz])
+ goto InvalidInstruction;
+
+ static const uint32_t szBits[] = { B(29), 0, B(22) };
+ opcode.reset(opData.scalarOp());
+ opcode ^= szBits[sz];
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (!checkSignature(o0, o1, o2))
+ goto InvalidInstruction;
+
+ uint32_t q = o0.as<Reg>().type() - Reg::kTypeVecD;
+ if (q > 1)
+ goto InvalidInstruction;
+
+ uint32_t sz = o0.as<Vec>().elementType() - Vec::kElementTypeH;
+ if (sz > 2)
+ goto InvalidInstruction;
+
+ static const uint32_t szBits[3] = { B(22) | B(21) | B(15) | B(14), 0, B(22) };
+ opcode.reset(opData.vectorOp());
+ opcode ^= szBits[sz];
+ opcode.addImm(q, 30);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [ISimd - Instructions]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingISimdSV: {
+ const InstDB::EncodingData::ISimdSV& opData = InstDB::EncodingData::iSimdSV[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ // The first destination operand is scalar, which matches element-type of source vectors.
+ uint32_t L = (instFlags & InstDB::kInstFlagLong) != 0;
+ if (o0.as<Vec>().type() - Reg::kTypeVecB != o1.as<Vec>().elementType() - Vec::kElementTypeB + L)
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, o1.as<Reg>().type(), o1.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(sizeOp.q(), 30);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVV: {
+ const InstDB::EncodingData::ISimdVV& opData = InstDB::EncodingData::iSimdVV[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ const Operand_& sop = significantSimdOp(o0, o1, instFlags);
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, sop.as<Reg>().type(), sop.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVVx: {
+ const InstDB::EncodingData::ISimdVVx& opData = InstDB::EncodingData::iSimdVVx[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (o0.signature() != opData.op0Signature ||
+ o1.signature() != opData.op1Signature)
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVVV: {
+ const InstDB::EncodingData::ISimdVVV& opData = InstDB::EncodingData::iSimdVVV[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ const Operand_& sop = significantSimdOp(o0, o1, instFlags);
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, sop.as<Reg>().type(), sop.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVVVx: {
+ const InstDB::EncodingData::ISimdVVVx& opData = InstDB::EncodingData::iSimdVVVx[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (o0.signature() != opData.op0Signature ||
+ o1.signature() != opData.op1Signature ||
+ o2.signature() != opData.op2Signature)
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdWWV: {
+ // Special case for wide add/sub [s|b][add|sub][w]{2}.
+ const InstDB::EncodingData::ISimdWWV& opData = InstDB::EncodingData::iSimdWWV[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, o2.as<Reg>().type(), o2.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1) || !o0.as<Reg>().isVecV() || o0.as<Vec>().elementType() != o2.as<Vec>().elementType() + 1)
+ goto InvalidInstruction;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVVVe: {
+ const InstDB::EncodingData::ISimdVVVe& opData = InstDB::EncodingData::iSimdVVVe[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ const Operand_& sop = significantSimdOp(o0, o1, instFlags);
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ if (!o2.as<Vec>().hasElementIndex()) {
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.regularVecType, sop.as<Reg>().type(), sop.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ if (!checkSignature(o1, o2))
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.regularOp) << 10);
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ else {
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.elementVecType, sop.as<Reg>().type(), sop.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ uint32_t elementIndex = o2.as<Vec>().elementIndex();
+ LMHImm lmh;
+
+ if (!encodeLMH(sizeOp.size(), elementIndex, &lmh))
+ goto InvalidElementIndex;
+
+ if (o2.as<Reg>().id() > lmh.maxRmId)
+ goto InvalidPhysId;
+
+ opcode.reset(uint32_t(opData.elementOp) << 10);
+ opcode.addImm(sizeOp.q(), 30);
+ opcode.addImm(sizeOp.size(), 22);
+ opcode.addImm(lmh.lm, 20);
+ opcode.addImm(lmh.h, 11);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVVVI: {
+ const InstDB::EncodingData::ISimdVVVI& opData = InstDB::EncodingData::iSimdVVVI[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Imm)) {
+ const Operand_& sop = significantSimdOp(o0, o1, instFlags);
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, sop.as<Reg>().type(), sop.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ uint64_t immValue = o3.as<Imm>().valueAs<uint64_t>();
+ uint32_t immSize = opData.immSize;
+
+ if (opData.imm64HasOneBitLess && !sizeOp.q())
+ immSize--;
+
+ if (immValue >= (1u << immSize))
+ goto InvalidImmediate;
+
+ opcode.reset(opData.opcode());
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ opcode.addImm(immValue, opData.immShift);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVVVV: {
+ const InstDB::EncodingData::ISimdVVVV& opData = InstDB::EncodingData::iSimdVVVV[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Reg)) {
+ const Operand_& sop = significantSimdOp(o0, o1, instFlags);
+ if (!matchSignature(o0, o1, o2, o3, instFlags))
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, sop.as<Reg>().type(), sop.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5_Rm16_Ra10;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingISimdVVVVx: {
+ const InstDB::EncodingData::ISimdVVVVx& opData = InstDB::EncodingData::iSimdVVVVx[encodingIndex];
+
+ if (isign4 == ENC_OPS4(Reg, Reg, Reg, Reg)) {
+ if (o0.signature() != opData.op0Signature ||
+ o1.signature() != opData.op1Signature ||
+ o2.signature() != opData.op2Signature ||
+ o3.signature() != opData.op3Signature)
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ goto EmitOp_Rd0_Rn5_Rm16_Ra10;
+ }
+
+ break;
+ }
+
+
+ case InstDB::kEncodingISimdPair: {
+ const InstDB::EncodingData::ISimdPair& opData = InstDB::EncodingData::iSimdPair[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg) && opData.opcode2) {
+ if (o0.as<Vec>().isVecD1() && o1.as<Vec>().isVecD2()) {
+ opcode.reset(uint32_t(opData.opcode2) << 10);
+ opcode.addImm(0x3, 22); // size.
+ goto EmitOp_Rd0_Rn5;
+ }
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.opType3, o0.as<Reg>().type(), o0.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.opcode3) << 10);
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdBicOrr: {
+ const InstDB::EncodingData::SimdBicOrr& opData = InstDB::EncodingData::simdBicOrr[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(InstDB::kVO_V_B, o0.as<Reg>().type(), o0.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.registerOp) << 10);
+ opcode.addImm(sizeOp.q(), 30);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ if (isign4 == ENC_OPS2(Reg, Imm) || isign4 == ENC_OPS3(Reg, Imm, Imm)) {
+ SizeOp sizeOp = armElementTypeToSizeOp(InstDB::kVO_V_HS, o0.as<Reg>().type(), o0.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ if (o1.as<Imm>().valueAs<uint64_t>() > 0xFFFFFFFFu)
+ goto InvalidImmediate;
+
+ uint32_t imm = o1.as<Imm>().valueAs<uint32_t>();
+ uint32_t shift = 0;
+ uint32_t maxShift = (8u << sizeOp.size()) - 8u;
+
+ if (o2.isImm()) {
+ if (o2.as<Imm>().predicate() != Shift::kOpLSL)
+ goto InvalidImmediate;
+
+ if (imm > 0xFFu || o2.as<Imm>().valueAs<uint64_t>() > maxShift)
+ goto InvalidImmediate;
+
+ shift = o2.as<Imm>().valueAs<uint32_t>();
+ if ((shift & 0x7u) != 0u)
+ goto InvalidImmediate;
+ }
+ else if (imm) {
+ shift = Support::ctz(imm) & 0x7u;
+ imm >>= shift;
+
+ if (imm > 0xFFu || shift > maxShift)
+ goto InvalidImmediate;
+ }
+
+ uint32_t cmode = 0x1u | ((shift / 8u) << 1);
+ if (sizeOp.size() == 1)
+ cmode |= B(3);
+
+ // The immediate value is split into ABC and DEFGH parts.
+ uint32_t abc = (imm >> 5) & 0x7u;
+ uint32_t defgh = imm & 0x1Fu;
+
+ opcode.reset(uint32_t(opData.immediateOp) << 10);
+ opcode.addImm(sizeOp.q(), 30);
+ opcode.addImm(abc, 16);
+ opcode.addImm(cmode, 12);
+ opcode.addImm(defgh, 5);
+ goto EmitOp_Rd0;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdCmp: {
+ const InstDB::EncodingData::SimdCmp& opData = InstDB::EncodingData::simdCmp[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg) && opData.regOp) {
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, o0.as<Reg>().type(), o0.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.regOp) << 10);
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm) && opData.zeroOp) {
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ if (o2.as<Imm>().value() != 0)
+ goto InvalidImmediate;
+
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, o0.as<Reg>().type(), o0.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.zeroOp) << 10);
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdDot: {
+ const InstDB::EncodingData::SimdDot& opData = InstDB::EncodingData::simdDot[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ uint32_t q = o0.as<Reg>().type() - Reg::kTypeVecD;
+ uint32_t size = 2;
+
+ if (q > 1u)
+ goto InvalidInstruction;
+
+ if (!o2.as<Vec>().hasElementIndex()) {
+ if (!opData.vectorOp)
+ goto InvalidInstruction;
+
+ if (o0.as<Reg>().type() != o1.as<Reg>().type() || o1.as<Reg>().type() != o2.as<Reg>().type())
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().elementType() != opData.tA ||
+ o1.as<Vec>().elementType() != opData.tB ||
+ o2.as<Vec>().elementType() != opData.tB)
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.vectorOp) << 10);
+ opcode.addImm(q, 30);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ else {
+ if (!opData.elementOp)
+ goto InvalidInstruction;
+
+ if (o0.as<Reg>().type() != o1.as<Reg>().type() || !o2.as<Reg>().isVecV())
+ goto InvalidInstruction;
+
+ if (o0.as<Vec>().elementType() != opData.tA ||
+ o1.as<Vec>().elementType() != opData.tB ||
+ o2.as<Vec>().elementType() != opData.tElement)
+ goto InvalidInstruction;
+
+ uint32_t elementIndex = o2.as<Vec>().elementIndex();
+ LMHImm lmh;
+
+ if (!encodeLMH(size, elementIndex, &lmh))
+ goto InvalidElementIndex;
+
+ if (o2.as<Reg>().id() > lmh.maxRmId)
+ goto InvalidPhysId;
+
+ opcode.reset(uint32_t(opData.elementOp) << 10);
+ opcode.addImm(q, 30);
+ opcode.addImm(lmh.lm, 20);
+ opcode.addImm(lmh.h, 11);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdDup: SimdDup: {
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ // Truth table of valid encodings of `Q:1|ElementType:3`
+ uint32_t kValidEncodings = B(Vec::kElementTypeB + 0) |
+ B(Vec::kElementTypeH + 0) |
+ B(Vec::kElementTypeS + 0) |
+ B(Vec::kElementTypeB + 8) |
+ B(Vec::kElementTypeH + 8) |
+ B(Vec::kElementTypeS + 8) |
+ B(Vec::kElementTypeD + 8) ;
+
+ uint32_t q = uint32_t(o0.as<Reg>().type() - Reg::kTypeVecD);
+
+ if (o1.as<Reg>().isGp()) {
+ // DUP - Vec (scalar|vector) <- GP register.
+ //
+ // NOTE: This is only scalar for `dup d, x` case, otherwise the value
+ // would be duplicated across all vector elements (1, 2, 4, 8, or 16).
+ uint32_t elementType = o0.as<Vec>().elementType();
+ if (q > 1 || !Support::bitTest(kValidEncodings, (q << 3) | elementType))
+ goto InvalidInstruction;
+
+ uint32_t lsbIndex = elementType - 1u;
+ uint32_t imm5 = 1u << lsbIndex;
+
+ opcode.reset(0b0000111000000000000011 << 10);
+ opcode.addImm(q, 30);
+ opcode.addImm(imm5, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (!o1.as<Reg>().isVec() || !o1.as<Vec>().hasElementIndex())
+ goto InvalidInstruction;
+
+ uint32_t dstIndex = o1.as<Vec>().elementIndex();
+ if (!o0.as<Vec>().hasElementType()) {
+ // DUP - Vec (scalar) <- Vec[N].
+ uint32_t lsbIndex = o0.as<Reg>().type() - Reg::kTypeVecB;
+
+ if (lsbIndex != o1.as<Vec>().elementType() - Vec::kElementTypeB || lsbIndex > 3)
+ goto InvalidInstruction;
+
+ uint32_t imm5 = ((dstIndex << 1) | 1u) << lsbIndex;
+ if (imm5 > 31)
+ goto InvalidElementIndex;
+
+ opcode.reset(0b0101111000000000000001 << 10);
+ opcode.addImm(imm5, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+ else {
+ // DUP - Vec (all) <- Vec[N].
+ uint32_t elementType = o0.as<Vec>().elementType();
+ if (q > 1 || !Support::bitTest(kValidEncodings, (q << 3) | elementType))
+ goto InvalidInstruction;
+
+ uint32_t lsbIndex = elementType - 1u;
+ uint32_t imm5 = ((dstIndex << 1) | 1u) << lsbIndex;
+
+ if (imm5 > 31)
+ goto InvalidElementIndex;
+
+ opcode.reset(0b0000111000000000000001 << 10);
+ opcode.addImm(q, 30);
+ opcode.addImm(imm5, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdIns: SimdIns: {
+ if (isign4 == ENC_OPS2(Reg, Reg) && o0.as<Reg>().isVecV()) {
+ if (!o0.as<Vec>().hasElementIndex())
+ goto InvalidInstruction;
+
+ uint32_t elementType = o0.as<Vec>().elementType();
+ uint32_t dstIndex = o0.as<Vec>().elementIndex();
+ uint32_t lsbIndex = elementType - 1u;
+
+ uint32_t imm5 = ((dstIndex << 1) | 1u) << lsbIndex;
+ if (imm5 > 31)
+ goto InvalidElementIndex;
+
+ if (o1.as<Reg>().isGp()) {
+ // INS - Vec[N] <- GP register.
+ opcode.reset(0b0100111000000000000111 << 10);
+ opcode.addImm(imm5, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+ else if (o1.as<Reg>().isVecV() && o1.as<Vec>().hasElementIndex()) {
+ // INS - Vec[N] <- Vec[M].
+ if (o0.as<Vec>().elementType() != o1.as<Vec>().elementType())
+ goto InvalidInstruction;
+
+ uint32_t srcIndex = o1.as<Vec>().elementIndex();
+ if (o0.as<Reg>().type() != o1.as<Reg>().type())
+ goto InvalidInstruction;
+
+ uint32_t imm4 = srcIndex << lsbIndex;
+ if (imm4 > 15)
+ goto InvalidElementIndex;
+
+ opcode.reset(0b0110111000000000000001 << 10);
+ opcode.addImm(imm5, 16);
+ opcode.addImm(imm4, 11);
+ goto EmitOp_Rd0_Rn5;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdMov: {
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ if (o0.as<Reg>().isVec() && o1.as<Reg>().isVec()) {
+ // INS v.x[index], v.x[index].
+ if (o0.as<Vec>().hasElementIndex() && o1.as<Vec>().hasElementIndex())
+ goto SimdIns;
+
+ // DUP {b|h|s|d}, v.{b|h|s|d}[index].
+ if (o1.as<Vec>().hasElementIndex())
+ goto SimdDup;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ // ORR Vd, Vn, Vm
+ uint32_t q = uint32_t(o0.as<Reg>().type() - Reg::kTypeVecD);
+ if (q > 1)
+ goto InvalidInstruction;
+
+ opcode.reset(0b0000111010100000000111 << 10);
+ opcode.addImm(q, 30);
+ opcode.addReg(o1, 16); // Vn == Vm.
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (o0.as<Reg>().isVec() && o1.as<Reg>().isGp()) {
+ // INS v.x[index], Rn.
+ if (o0.as<Vec>().hasElementIndex())
+ goto SimdIns;
+
+ goto InvalidInstruction;
+ }
+
+ if (o0.as<Reg>().isGp() && o1.as<Reg>().isVec()) {
+ // UMOV Rd, V.{s|d}[index].
+ encodingIndex = 1;
+ goto SimdUmov;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdMoviMvni: {
+ const InstDB::EncodingData::SimdMoviMvni& opData = InstDB::EncodingData::simdMoviMvni[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Imm) || isign4 == ENC_OPS3(Reg, Imm, Imm)) {
+ SizeOp sizeOp = armElementTypeToSizeOp(InstDB::kVO_V_Any, o0.as<Reg>().type(), o0.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ uint64_t imm64 = o1.as<Imm>().valueAs<uint64_t>();
+ uint32_t imm8 = 0;
+ uint32_t cmode = 0;
+ uint32_t inverted = opData.inverted;
+ uint32_t op = 0;
+ uint32_t shift = 0;
+ uint32_t shiftOp = Shift::kOpLSL;
+
+ if (sizeOp.size() == 3u) {
+ // The second immediate should not be present, however, we accept
+ // an immediate value of zero as some user code may still pass it.
+ if (o2.isImm() && o0.as<Imm>().value() != 0)
+ goto InvalidImmediate;
+
+ if (Utils::isByteMaskImm8(imm64)) {
+ imm8 = encodeImm64ByteMaskToImm8(imm64);
+ }
+ else {
+ // Change from D to S and from 64-bit imm to 32-bit imm if this
+ // is not a byte-mask pattern.
+ if ((imm64 >> 32) == (imm64 & 0xFFFFFFFFu)) {
+ imm64 &= 0xFFFFFFFFu;
+ sizeOp.decrementSize();
+ }
+ else {
+ goto InvalidImmediate;
+ }
+ }
+ }
+
+ if (sizeOp.size() < 3u) {
+ if (imm64 > 0xFFFFFFFFu)
+ goto InvalidImmediate;
+ imm8 = uint32_t(imm64);
+
+ if (sizeOp.size() == 2) {
+ if ((imm8 >> 16) == (imm8 & 0xFFFFu)) {
+ imm8 >>= 16;
+ sizeOp.decrementSize();
+ }
+ }
+
+ if (sizeOp.size() == 1) {
+ if (imm8 > 0xFFFFu)
+ goto InvalidImmediate;
+
+ if ((imm8 >> 8) == (imm8 & 0xFFu)) {
+ imm8 >>= 8;
+ sizeOp.decrementSize();
+ }
+ }
+
+ uint32_t maxShift = (8u << sizeOp.size()) - 8u;
+ if (o2.isImm()) {
+ if (imm8 > 0xFFu || o2.as<Imm>().valueAs<uint64_t>() > maxShift)
+ goto InvalidImmediate;
+
+ shift = o2.as<Imm>().valueAs<uint32_t>();
+ shiftOp = o2.as<Imm>().predicate();
+ }
+ else if (imm8) {
+ shift = Support::ctz(imm8) & ~0x7u;
+ imm8 >>= shift;
+
+ if (imm8 > 0xFFu || shift > maxShift)
+ goto InvalidImmediate;
+ }
+
+ if ((shift & 0x7u) != 0u)
+ goto InvalidImmediate;
+ }
+
+ shift /= 8u;
+
+ switch (sizeOp.size()) {
+ case 0:
+ if (shiftOp != Shift::kOpLSL)
+ goto InvalidImmediate;
+
+ if (inverted) {
+ imm8 = ~imm8 & 0xFFu;
+ inverted = 0;
+ }
+
+ cmode = B(3) | B(2) | B(1);
+ break;
+
+ case 1:
+ if (shiftOp != Shift::kOpLSL)
+ goto InvalidImmediate;
+
+ cmode = B(3) | (shift << 1);
+ op = inverted;
+ break;
+
+ case 2:
+ if (shiftOp == Shift::kOpLSL) {
+ cmode = shift << 1;
+ }
+ else if (shiftOp == Shift::kOpMSL) {
+ if (shift == 0 || shift > 2)
+ goto InvalidImmediate;
+ cmode = B(3) | B(2) | (shift - 1u);
+ }
+ else {
+ goto InvalidImmediate;
+ }
+
+ op = inverted;
+ break;
+
+ case 3:
+ if (inverted) {
+ imm8 = ~imm8 & 0xFFu;
+ inverted = 0;
+ }
+
+ op = 1;
+ cmode = B(3) | B(2) | B(1);
+ break;
+ }
+
+ // The immediate value is split into ABC and DEFGH parts.
+ uint32_t abc = (imm8 >> 5) & 0x7u;
+ uint32_t defgh = imm8 & 0x1Fu;
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ opcode.addImm(sizeOp.q(), 30);
+ opcode.addImm(op, 29);
+ opcode.addImm(abc, 16);
+ opcode.addImm(cmode, 12);
+ opcode.addImm(defgh, 5);
+ goto EmitOp_Rd0;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdShift: {
+ const InstDB::EncodingData::SimdShift& opData = InstDB::EncodingData::simdShift[encodingIndex];
+
+ const Operand_& sop = significantSimdOp(o0, o1, instFlags);
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, sop.as<Reg>().type(), sop.as<Vec>().elementType());
+
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm) && opData.immediateOp) {
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ if (o2.as<Imm>().valueAs<uint64_t>() > 63)
+ goto InvalidImmediate;
+
+ uint32_t lsbShift = sizeOp.size() + 3u;
+ uint32_t lsbMask = (1u << lsbShift) - 1u;
+ uint32_t imm = o2.as<Imm>().valueAs<uint32_t>();
+
+ // Some instructions use IMM and some X - IMM, so negate if required.
+ if (opData.invertedImm) {
+ if (imm == 0 || imm > (1u << lsbShift))
+ goto InvalidImmediate;
+ imm = Support::neg(imm) & lsbMask;
+ }
+
+ if (imm > lsbMask)
+ goto InvalidImmediate;
+ imm |= (1u << lsbShift);
+
+ opcode.reset(uint32_t(opData.immediateOp) << 10);
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(imm, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg) && opData.registerOp) {
+ if (!matchSignature(o0, o1, o2, instFlags))
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.registerOp) << 10);
+ opcode.addImm(sizeOp.qs(), 30);
+ opcode.addImm(sizeOp.scalar(), 28);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdShiftES: {
+ const InstDB::EncodingData::SimdShiftES& opData = InstDB::EncodingData::simdShiftES[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Imm)) {
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, o1.as<Reg>().type(), o1.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ // The immediate value must match the element size.
+ uint64_t shift = o2.as<Imm>().valueAs<uint64_t>();
+ uint32_t shiftOp = o2.as<Imm>().predicate();
+
+ if (shift != (8u << sizeOp.size()) || shiftOp != Shift::kOpLSL)
+ goto InvalidImmediate;
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ opcode.addImm(sizeOp.q(), 30);
+ opcode.addImm(sizeOp.size(), 22);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdSm3tt: {
+ const InstDB::EncodingData::SimdSm3tt& opData = InstDB::EncodingData::simdSm3tt[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg)) {
+ if (o0.as<Vec>().isVecS4() && o1.as<Vec>().isVecS4() && o2.as<Vec>().isVecS4() && o2.as<Vec>().hasElementIndex()) {
+ uint32_t imm2 = o2.as<Vec>().elementIndex();
+ if (imm2 > 3)
+ goto InvalidElementIndex;
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ opcode.addImm(imm2, 12);
+ goto EmitOp_Rd0_Rn5_Rm16;
+ }
+ }
+
+ break;
+ }
+
+
+ case InstDB::kEncodingSimdSmovUmov: SimdUmov: {
+ const InstDB::EncodingData::SimdSmovUmov& opData = InstDB::EncodingData::simdSmovUmov[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg) && o0.as<Reg>().isGp() && o1.as<Reg>().isVec()) {
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, o1.as<Reg>().type(), o1.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ if (!o1.as<Vec>().hasElementIndex())
+ goto InvalidInstruction;
+
+ uint32_t x = o0.as<Gp>().isGpX();
+ uint32_t gpMustBeX = uint32_t(sizeOp.size() >= 3u - opData.isSigned);
+
+ if (opData.isSigned) {
+ if (gpMustBeX && !x)
+ goto InvalidInstruction;
+ }
+ else {
+ if (x != gpMustBeX)
+ goto InvalidInstruction;
+ }
+
+ uint32_t elementIndex = o1.as<Vec>().elementIndex();
+ uint32_t maxElementIndex = 15u >> sizeOp.size();
+
+ if (elementIndex > maxElementIndex)
+ goto InvalidElementIndex;
+
+ uint32_t imm5 = (1u | (elementIndex << 1)) << sizeOp.size();
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ opcode.addImm(x, 30);
+ opcode.addImm(imm5, 16);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdSxtlUxtl: {
+ const InstDB::EncodingData::SimdSxtlUxtl& opData = InstDB::EncodingData::simdSxtlUxtl[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Reg)) {
+ SizeOp sizeOp = armElementTypeToSizeOp(opData.vecOpType, o1.as<Reg>().type(), o1.as<Vec>().elementType());
+ if (!sizeOp.isValid())
+ goto InvalidInstruction;
+
+ if (!matchSignature(o0, o1, instFlags))
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ opcode.addImm(sizeOp.q(), 30);
+ opcode.addImm(1u, sizeOp.size() + 19);
+ goto EmitOp_Rd0_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdTblTbx: {
+ const InstDB::EncodingData::SimdTblTbx& opData = InstDB::EncodingData::simdTblTbx[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Reg) || isign4 == ENC_OPS4(Reg, Reg, Reg, Reg)) {
+ // TBL/TBX <Vd>.<Ta>, { <Vn>.16B }, <Vm>.<Ta>
+ // TBL/TBX <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B }, <Vm>.<Ta>
+ // TBL/TBX <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B, <Vn+2>.16B }, <Vm>.<Ta>
+ // TBL/TBX <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B, <Vn+2>.16B, <Vn+3>.16B }, <Vm>.<Ta>
+ opcode.reset(uint32_t(opData.opcode) << 10);
+
+ const Operand_& o4 = opExt[EmitterUtils::kOp4];
+ const Operand_& o5 = opExt[EmitterUtils::kOp5];
+
+ uint32_t q = o0.as<Reg>().type() - Reg::kTypeVecD;
+ if (q > 1 || o0.as<Vec>().hasElementIndex())
+ goto InvalidInstruction;
+
+ if (!o1.as<Vec>().isVecB16() || o1.as<Vec>().hasElementIndex())
+ goto InvalidInstruction;
+
+ uint32_t len = uint32_t(!o3.isNone()) + uint32_t(!o4.isNone()) + uint32_t(!o5.isNone());
+ opcode.addImm(q, 30);
+ opcode.addImm(len, 13);
+
+ switch (len) {
+ case 0:
+ if (!checkSignature(o0, o2))
+ goto InvalidInstruction;
+
+ if (o2.id() > 31)
+ goto InvalidPhysId;
+
+ opcode.addReg(o2, 16);
+ goto EmitOp_Rd0_Rn5;
+
+ case 1:
+ if (!checkSignature(o0, o3))
+ goto InvalidInstruction;
+
+ if (o3.id() > 31)
+ goto InvalidPhysId;
+
+ opcode.addReg(o3, 16);
+ goto EmitOp_Rd0_Rn5;
+
+ case 2:
+ if (!checkSignature(o0, o4))
+ goto InvalidInstruction;
+
+ if (o4.id() > 31)
+ goto InvalidPhysId;
+
+ opcode.addReg(o4, 16);
+ goto EmitOp_Rd0_Rn5;
+
+ case 3:
+ if (!checkSignature(o0, o5))
+ goto InvalidInstruction;
+
+ if (o5.id() > 31)
+ goto InvalidPhysId;
+
+ opcode.addReg(o5, 16);
+ goto EmitOp_Rd0_Rn5;
+
+ default:
+ // Should never happen.
+ goto InvalidInstruction;
+ }
+ }
+
+ break;
+ }
+
+ // ------------------------------------------------------------------------
+ // [Simd - Load / Store]
+ // ------------------------------------------------------------------------
+
+ case InstDB::kEncodingSimdLdSt: {
+ const InstDB::EncodingData::SimdLdSt& opData = InstDB::EncodingData::simdLdSt[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ const Mem& m = o1.as<Mem>();
+ rmRel = &m;
+
+ // Width | SZ | XY | XSZ
+ // -------+----------+-----------+-----
+ // 8-bit | size==00 | opc == 01 | 000
+ // 16-bit | size==01 | opc == 01 | 001
+ // 32-bit | size==10 | opc == 01 | 010
+ // 64-bit | size==11 | opc == 01 | 011
+ // 128-bit| size==00 | opc == 11 | 100
+ uint32_t xsz = o0.as<Reg>().type() - Reg::kTypeVecB;
+ if (xsz > 4u || o0.as<Vec>().hasElementIndex())
+ goto InvalidRegType;
+
+ if (!checkVecId(o0))
+ goto InvalidPhysId;
+
+ if (!armCheckMemBaseIndexRel(m))
+ goto InvalidAddress;
+
+ int64_t offset = m.offset();
+ if (m.hasBaseReg()) {
+ // [Base {Offset | Index}]
+ if (m.hasIndex()) {
+ uint32_t opt = armShiftOpToLdStOptMap[m.predicate()];
+ if (opt == 0xFFu)
+ goto InvalidAddress;
+
+ uint32_t shift = m.shift();
+ uint32_t s = (shift != 0);
+
+ if (s && shift != xsz)
+ goto InvalidAddressScale;
+
+ opcode.reset(uint32_t(opData.registerOp) << 21);
+ opcode.addImm(xsz & 3u, 30);
+ opcode.addImm(xsz >> 2, 23);
+ opcode.addImm(opt, 13);
+ opcode.addImm(s, 12);
+ opcode |= B(11);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBaseIndex_Rn5_Rm16;
+ }
+
+ // Makes it easier to work with the offset especially on 32-bit arch.
+ if (!Support::isInt32(offset))
+ goto InvalidDisplacement;
+ int32_t offset32 = int32_t(offset);
+
+ if (m.isPreOrPost()) {
+ if (!Support::isInt9(offset32))
+ goto InvalidDisplacement;
+
+ opcode.reset(uint32_t(opData.prePostOp) << 21);
+ opcode.addImm(xsz & 3u, 30);
+ opcode.addImm(xsz >> 2, 23);
+ opcode.addImm(offset32 & 0x1FF, 12);
+ opcode.addImm(m.isPreIndex(), 11);
+ opcode |= B(10);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+ else {
+ uint32_t imm12 = uint32_t(offset32) >> xsz;
+
+ // If this instruction is not encodable with scaled unsigned offset, try unscaled signed offset.
+ if (!Support::isUInt12(imm12) || (imm12 << xsz) != uint32_t(offset32)) {
+ instId = opData.uAltInstId;
+ instInfo = &InstDB::_instInfoTable[instId];
+ encodingIndex = instInfo->_encodingDataIndex;
+ goto Case_SimdLdurStur;
+ }
+
+ opcode.reset(uint32_t(opData.uOffsetOp) << 22);
+ opcode.addImm(xsz & 3u, 30);
+ opcode.addImm(xsz >> 2, 23);
+ opcode.addImm(imm12, 10);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+ }
+ else {
+ if (!opData.literalOp)
+ goto InvalidAddress;
+
+ if (xsz < 2u)
+ goto InvalidRegType;
+
+ uint32_t opc = xsz - 2u;
+ opcode.reset(uint32_t(opData.literalOp) << 24);
+ opcode.addImm(opc, 30);
+ opcode.addReg(o0, 0);
+ offsetFormat.resetToImmValue(OffsetFormat::kTypeCommon, 4, 5, 19, 2);
+ goto EmitOp_Rel;
+ }
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdLdpStp: {
+ const InstDB::EncodingData::SimdLdpStp& opData = InstDB::EncodingData::simdLdpStp[encodingIndex];
+
+ if (isign4 == ENC_OPS3(Reg, Reg, Mem)) {
+ const Mem& m = o2.as<Mem>();
+ rmRel = &m;
+
+ uint32_t opc = o0.as<Reg>().type() - Reg::kTypeVecS;
+ if (opc > 2u || o0.as<Vec>().hasElementTypeOrIndex())
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1))
+ goto InvalidInstruction;
+
+ if (!checkVecId(o0, o1))
+ goto InvalidPhysId;
+
+ if (m.baseType() != Reg::kTypeGpX || m.hasIndex())
+ goto InvalidAddress;
+
+ if (m.isOffset64Bit())
+ goto InvalidDisplacement;
+
+ uint32_t offsetShift = 2u + opc;
+ int32_t offset32 = m.offsetLo32() >> offsetShift;
+
+ // Make sure we didn't lose bits by applying the mandatory offset shift.
+ if (Support::shl(offset32, offsetShift) != m.offsetLo32())
+ goto InvalidDisplacement;
+
+ // Offset is encoded as a 7-bit immediate.
+ if (!Support::isInt7(offset32))
+ goto InvalidDisplacement;
+
+ if (m.isPreOrPost() && offset32 != 0) {
+ if (!opData.prePostOp)
+ goto InvalidAddress;
+
+ opcode.reset(uint32_t(opData.prePostOp) << 22);
+ opcode.addImm(m.isPreIndex(), 24);
+ }
+ else {
+ opcode.reset(uint32_t(opData.offsetOp) << 22);
+ }
+
+ opcode.addImm(opc, 30);
+ opcode.addImm(offset32 & 0x7F, 15);
+ opcode.addReg(o1, 10);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdLdurStur: {
+Case_SimdLdurStur:
+ const InstDB::EncodingData::SimdLdurStur& opData = InstDB::EncodingData::simdLdurStur[encodingIndex];
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ const Mem& m = o1.as<Mem>();
+ rmRel = &m;
+
+ uint32_t sz = o0.as<Reg>().type() - Reg::kTypeVecB;
+ if (sz > 4 || o0.as<Vec>().hasElementTypeOrIndex())
+ goto InvalidInstruction;
+
+ if (!checkVecId(o0))
+ goto InvalidPhysId;
+
+ if (!armCheckMemBaseIndexRel(m))
+ goto InvalidAddress;
+
+ if (m.hasBaseReg() && !m.hasIndex() && !m.isPreOrPost()) {
+ if (m.isOffset64Bit())
+ goto InvalidDisplacement;
+
+ int32_t offset32 = m.offsetLo32();
+ if (!Support::isInt9(offset32))
+ goto InvalidDisplacement;
+
+ opcode.reset(uint32_t(opData.opcode) << 10);
+ opcode.addImm(sz & 3u, 30);
+ opcode.addImm(sz >> 2, 23);
+ opcode.addImm(offset32 & 0x1FF, 12);
+ opcode.addReg(o0, 0);
+ goto EmitOp_MemBase_Rn5;
+ }
+
+ goto InvalidAddress;
+ }
+
+ break;
+ }
+
+ case InstDB::kEncodingSimdLdNStN: {
+ const InstDB::EncodingData::SimdLdNStN& opData = InstDB::EncodingData::simdLdNStN[encodingIndex];
+ const Operand_& o4 = opExt[EmitterUtils::kOp4];
+
+ uint32_t n = 1;
+
+ if (isign4 == ENC_OPS2(Reg, Mem)) {
+ if (opData.n != 1)
+ goto InvalidInstruction;
+
+ rmRel = &o1;
+ }
+ else if (isign4 == ENC_OPS3(Reg, Reg, Mem)) {
+ if (opData.n != 1 && opData.n != 2)
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1) || !checkConsecutive(o0, o1))
+ goto InvalidInstruction;
+
+ n = 2;
+ rmRel = &o2;
+ }
+ else if (isign4 == ENC_OPS4(Reg, Reg, Reg, Mem) && o4.isNone()) {
+ if (opData.n != 1 && opData.n != 3)
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1, o2) || !checkConsecutive(o0, o1, o2))
+ goto InvalidInstruction;
+
+ n = 3;
+ rmRel = &o3;
+ }
+ else if (isign4 == ENC_OPS4(Reg, Reg, Reg, Reg) && o4.isMem()) {
+ if (opData.n != 1 && opData.n != 4)
+ goto InvalidInstruction;
+
+ if (!checkSignature(o0, o1, o2, o3) || !checkConsecutive(o0, o1, o2, o3))
+ goto InvalidInstruction;
+
+ n = 4;
+ rmRel = &o4;
+ }
+ else {
+ goto InvalidInstruction;
+ }
+
+ // We will use `v` and `m` from now as those are relevant for encoding.
+ const Vec& v = o0.as<Vec>();
+ const Mem& m = rmRel->as<Mem>();
+
+ uint32_t q = 0;
+ uint32_t rm = 0;
+ uint32_t rn = m.baseId();
+ uint32_t sz = v.elementType() - Vec::kElementTypeB;
+ uint32_t opcSsize = sz;
+ uint32_t offsetPossibility = 0;
+
+ if (sz > 3)
+ goto InvalidInstruction;
+
+ if (m.baseType() != Reg::kTypeGpX)
+ goto InvalidAddress;
+
+ // Rn cannot be ZR, but can be SP.
+ if (rn > 30 && rn != Gp::kIdSp)
+ goto InvalidAddress;
+
+ rn &= 31;
+
+ if (opData.replicate) {
+ if (n != opData.n)
+ goto InvalidInstruction;
+
+ // Replicates to the whole register, element index cannot be used.
+ if (v.hasElementIndex())
+ goto InvalidInstruction;
+
+ q = v.type() - Reg::kTypeVecD;
+ if (q > 1)
+ goto InvalidInstruction;
+
+ opcode.reset(uint32_t(opData.singleOp) << 10);
+ offsetPossibility = (1u << sz) * n;
+ }
+ else if (v.hasElementIndex()) {
+ if (n != opData.n)
+ goto InvalidInstruction;
+
+ // LDx/STx (single structure).
+ static const uint8_t opcSsizeBySzS[] = { 0x0u << 3, 0x2u << 3, 0x4u << 3, (0x4u << 3) | 1u };
+
+ opcode.reset(uint32_t(opData.singleOp) << 10);
+ opcSsize = opcSsizeBySzS[sz];
+ offsetPossibility = (1u << sz) * opData.n;
+
+ uint32_t elementIndex = v.elementIndex();
+ uint32_t maxElementIndex = 15 >> sz;
+
+ if (elementIndex > maxElementIndex)
+ goto InvalidElementIndex;
+
+ elementIndex <<= sz;
+ q = elementIndex >> 3;
+ opcSsize |= elementIndex & 0x7u;
+ }
+ else {
+ // LDx/STx (multiple structures).
+ static const uint8_t opcSsizeByN[] = { 0u, 0x7u << 2, 0xAu << 2, 0x6u << 2, 0x2u << 2 };
+
+ q = v.type() - Reg::kTypeVecD;
+ if (q > 1)
+ goto InvalidInstruction;
+
+ if (opData.n == 1)
+ opcSsize |= opcSsizeByN[n];
+
+ opcode.reset(uint32_t(opData.multipleOp) << 10);
+ offsetPossibility = (8u << q) * n;
+ }
+
+ if (m.hasIndex()) {
+ if (m.hasOffset() || !m.isPostIndex())
+ goto InvalidAddress;
+
+ rm = m.indexId();
+ if (rm > 30)
+ goto InvalidAddress;
+
+ // Bit 23 - PostIndex.
+ opcode |= B(23);
+ }
+ else {
+ if (m.hasOffset()) {
+ if (m.offset() != int32_t(offsetPossibility) || !m.isPostIndex())
+ goto InvalidAddress;
+ rm = 31;
+
+ // Bit 23 - PostIndex.
+ opcode |= B(23);
+ }
+ }
+
+ opcode.addImm(q, 30);
+ opcode.addImm(rm, 16);
+ opcode.addImm(opcSsize, 10);
+ opcode.addImm(rn, 5);
+ goto EmitOp_Rd0;
+ }
+
+ default:
+ break;
+ }
+
+ goto InvalidInstruction;
+
+ // --------------------------------------------------------------------------
+ // [EmitGp - Single]
+ // --------------------------------------------------------------------------
+
+EmitOp_Rd0:
+ if (!checkValidRegs(o0))
+ goto InvalidPhysId;
+
+ opcode.addReg(o0, 0);
+ goto EmitOp;
+
+EmitOp_Rn5:
+ if (!checkValidRegs(o0))
+ goto InvalidPhysId;
+
+ opcode.addReg(o0, 5);
+ goto EmitOp;
+
+EmitOp_Rn5_Rm16:
+ if (!checkValidRegs(o0, o1))
+ goto InvalidPhysId;
+
+ opcode.addReg(o0, 5);
+ opcode.addReg(o1, 16);
+ goto EmitOp;
+
+EmitOp_Rd0_Rn5:
+ if (!checkValidRegs(o0, o1))
+ goto InvalidPhysId;
+
+ opcode.addReg(o0, 0);
+ opcode.addReg(o1, 5);
+ goto EmitOp;
+
+EmitOp_Rd0_Rn5_Rm16_Ra10:
+ if (!checkValidRegs(o0, o1, o2, o3))
+ goto InvalidPhysId;
+
+ opcode.addReg(o0, 0);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o2, 16);
+ opcode.addReg(o3, 10);
+ goto EmitOp;
+
+EmitOp_Rd0_Rn5_Rm16:
+ if (!checkValidRegs(o0, o1, o3))
+ goto InvalidPhysId;
+
+ opcode.addReg(o0, 0);
+ opcode.addReg(o1, 5);
+ opcode.addReg(o2, 16);
+ goto EmitOp;
+
+ // --------------------------------------------------------------------------
+ // [EmitGp - Multiple]
+ // --------------------------------------------------------------------------
+
+EmitOp_Multiple:
+ {
+ err = writer.ensureSpace(this, multipleOpCount * 4u);
+ if (ASMJIT_UNLIKELY(err))
+ goto Failed;
+
+ for (uint32_t i = 0; i < multipleOpCount; i++)
+ writer.emit32uLE(multipleOpData[i]);
+
+ goto EmitDone;
+ }
+
+ // --------------------------------------------------------------------------
+ // [EmitGp - Memory]
+ // --------------------------------------------------------------------------
+
+EmitOp_MemBase_Rn5:
+ if (!checkMemBase(rmRel->as<Mem>()))
+ goto InvalidAddress;
+
+ opcode.addReg(rmRel->as<Mem>().baseId(), 5);
+ goto EmitOp;
+
+EmitOp_MemBaseNoImm_Rn5:
+ if (!checkMemBase(rmRel->as<Mem>()) || rmRel->as<Mem>().hasIndex())
+ goto InvalidAddress;
+
+ if (rmRel->as<Mem>().hasOffset())
+ goto InvalidDisplacement;
+
+ opcode.addReg(rmRel->as<Mem>().baseId(), 5);
+ goto EmitOp;
+
+EmitOp_MemBaseIndex_Rn5_Rm16:
+ if (!rmRel->as<Mem>().hasBaseReg())
+ goto InvalidAddress;
+
+ if (rmRel->as<Mem>().indexId() > 30 && rmRel->as<Mem>().indexId() != Gp::kIdZr)
+ goto InvalidPhysId;
+
+ opcode.addReg(rmRel->as<Mem>().indexId(), 16);
+ opcode.addReg(rmRel->as<Mem>().baseId(), 5);
+ goto EmitOp;
+
+ // --------------------------------------------------------------------------
+ // [EmitOp - PC Relative]
+ // --------------------------------------------------------------------------
+
+EmitOp_Rel:
+ {
+ if (rmRel->isLabel() || rmRel->isMem()) {
+ uint32_t labelId;
+ int64_t labelOffset = 0;
+
+ if (rmRel->isLabel()) {
+ labelId = rmRel->as<Label>().id();
+ }
+ else {
+ labelId = rmRel->as<Mem>().baseId();
+ labelOffset = rmRel->as<Mem>().offset();
+ }
+
+ LabelEntry* label = _code->labelEntry(labelId);
+ if (ASMJIT_UNLIKELY(!label))
+ goto InvalidLabel;
+
+ if (offsetFormat.type() == OffsetFormat::kTypeAArch64_ADRP) {
+ // TODO: [ARM] Always create relocation entry.
+ }
+
+ if (label->isBoundTo(_section)) {
+ // Label bound to the current section.
+ offsetValue = label->offset() - uint64_t(offset()) + uint64_t(labelOffset);
+ goto EmitOp_DispImm;
+ }
+ else {
+ // Record non-bound label.
+ size_t codeOffset = writer.offsetFrom(_bufferData);
+ LabelLink* link = _code->newLabelLink(label, _section->id(), codeOffset, intptr_t(labelOffset), offsetFormat);
+
+ if (ASMJIT_UNLIKELY(!link))
+ goto OutOfMemory;
+
+ goto EmitOp;
+ }
+ }
+ }
+
+ if (rmRel->isImm()) {
+ uint64_t baseAddress = _code->baseAddress();
+ uint64_t targetOffset = rmRel->as<Imm>().valueAs<uint64_t>();
+
+ size_t codeOffset = writer.offsetFrom(_bufferData);
+
+ if (baseAddress == Globals::kNoBaseAddress || _section->id() != 0) {
+ // Create a new RelocEntry as we cannot calculate the offset right now.
+ RelocEntry* re;
+ err = _code->newRelocEntry(&re, RelocEntry::kTypeAbsToRel);
+ if (err)
+ goto Failed;
+
+ re->_sourceSectionId = _section->id();
+ re->_sourceOffset = codeOffset;
+ re->_format = offsetFormat;
+ re->_payload = 0;
+ goto EmitOp;
+ }
+ else {
+ uint64_t pc = baseAddress + codeOffset;
+
+ if (offsetFormat.type() == OffsetFormat::kTypeAArch64_ADRP)
+ pc &= ~uint64_t(4096 - 1);
+
+ offsetValue = targetOffset - pc;
+ goto EmitOp_DispImm;
+ }
+ }
+
+ goto InvalidInstruction;
+
+EmitOp_DispImm:
+ {
+ if ((offsetValue & Support::lsbMask<uint32_t>(offsetFormat.immDiscardLsb())) != 0)
+ goto InvalidDisplacement;
+
+ int64_t dispImm64 = int64_t(offsetValue) >> offsetFormat.immDiscardLsb();
+ if (!Support::isEncodableOffset64(dispImm64, offsetFormat.immBitCount()))
+ goto InvalidDisplacement;
+
+ uint32_t dispImm32 = uint32_t(dispImm64 & Support::lsbMask<uint32_t>(offsetFormat.immBitCount()));
+ switch (offsetFormat.type()) {
+ case OffsetFormat::kTypeCommon: {
+ opcode.addImm(dispImm32, offsetFormat.immBitShift());
+ goto EmitOp;
+ }
+
+ case OffsetFormat::kTypeAArch64_ADR:
+ case OffsetFormat::kTypeAArch64_ADRP: {
+ uint32_t immLo = dispImm32 & 0x3u;
+ uint32_t immHi = dispImm32 >> 2;
+ opcode.addImm(immLo, 29);
+ opcode.addImm(immHi, 5);
+ goto EmitOp;
+ }
+
+ default:
+ goto InvalidDisplacement;
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ // [EmitOp - Opcode]
+ // --------------------------------------------------------------------------
+
+EmitOp:
+ writer.emit32uLE(opcode.get());
+ goto EmitDone;
+
+ // --------------------------------------------------------------------------
+ // [Done]
+ // --------------------------------------------------------------------------
+
+EmitDone:
+ if (ASMJIT_UNLIKELY(options & Inst::kOptionReserved)) {
+#ifndef ASMJIT_NO_LOGGING
+ if (_logger)
+ EmitterUtils::logInstructionEmitted(this, instId, options, o0, o1, o2, opExt, 0, 0, writer.cursor());
+#endif
+ }
+
+ resetExtraReg();
+ resetInstOptions();
+ resetInlineComment();
+
+ writer.done(this);
+ return kErrorOk;
+
+ // --------------------------------------------------------------------------
+ // [Error Handler]
+ // --------------------------------------------------------------------------
+
+#define ERROR_HANDLER(ERR) ERR: err = DebugUtils::errored(kError##ERR); goto Failed;
+ ERROR_HANDLER(OutOfMemory)
+ ERROR_HANDLER(InvalidAddress)
+ ERROR_HANDLER(InvalidAddressScale)
+ ERROR_HANDLER(InvalidDisplacement)
+ ERROR_HANDLER(InvalidElementIndex)
+ ERROR_HANDLER(InvalidLabel)
+ ERROR_HANDLER(InvalidImmediate)
+ ERROR_HANDLER(InvalidInstruction)
+ ERROR_HANDLER(InvalidPhysId)
+ ERROR_HANDLER(InvalidRegType)
+#undef ERROR_HANDLER
+
+Failed:
+#ifndef ASMJIT_NO_LOGGING
+ return EmitterUtils::logInstructionFailed(this, err, instId, options, o0, o1, o2, opExt);
+#else
+ resetExtraReg();
+ resetInstOptions();
+ resetInlineComment();
+ return reportError(err);
+#endif
+}
+
+#undef ENC_OPS1
+#undef ENC_OPS2
+#undef ENC_OPS3
+#undef ENC_OPS4
+
+// ============================================================================
+// [asmjit::Assembler - Align]
+// ============================================================================
+
+Error Assembler::align(uint32_t alignMode, uint32_t alignment) {
+ if (ASMJIT_UNLIKELY(!_code))
+ return reportError(DebugUtils::errored(kErrorNotInitialized));
+
+ if (ASMJIT_UNLIKELY(alignMode >= kAlignCount))
+ return reportError(DebugUtils::errored(kErrorInvalidArgument));
+
+ if (alignment <= 1)
+ return kErrorOk;
+
+ if (ASMJIT_UNLIKELY(alignment > Globals::kMaxAlignment || !Support::isPowerOf2(alignment)))
+ return reportError(DebugUtils::errored(kErrorInvalidArgument));
+
+ uint32_t i = uint32_t(Support::alignUpDiff<size_t>(offset(), alignment));
+
+ if (i == 0)
+ return kErrorOk;
+
+ CodeWriter writer(this);
+ ASMJIT_PROPAGATE(writer.ensureSpace(this, i));
+
+ constexpr uint32_t kNopT16 = 0x0000BF00u; // [10111111|00000000].
+ constexpr uint32_t kNopT32 = 0xF3AF8000u; // [11110011|10101111|10000000|00000000].
+ constexpr uint32_t kNopA32 = 0xE3AF8000u; // [Cond0011|00100000|11110000|00000000].
+ constexpr uint32_t kNopA64 = 0xD503201Fu; // [11010101|00000011|00100000|00011111].
+
+ switch (alignMode) {
+ case kAlignCode: {
+ uint32_t pattern = 0;
+ if (is64Bit()) {
+ pattern = kNopA64;
+ }
+ else if (isInThumbMode()) {
+ if (ASMJIT_UNLIKELY(offset() & 0x1u))
+ return DebugUtils::errored(kErrorInvalidState);
+
+ if (i & 0x2) {
+ writer.emit16uLE(kNopT16);
+ i -= 2;
+ }
+ pattern = kNopT32;
+ }
+ else {
+ pattern = kNopA32;
+ }
+
+ if (ASMJIT_UNLIKELY(offset() & 0x3u))
+ return DebugUtils::errored(kErrorInvalidState);
+
+ while (i >= 4) {
+ writer.emit32uLE(pattern);
+ i -= 4;
+ }
+
+ ASMJIT_ASSERT(i == 0);
+ break;
+ }
+
+ case kAlignData:
+ case kAlignZero:
+ writer.emitZeros(i);
+ break;
+ }
+
+ writer.done(this);
+
+#ifndef ASMJIT_NO_LOGGING
+ if (_logger) {
+ StringTmp<128> sb;
+ sb.appendChars(' ', _logger->indentation(FormatOptions::kIndentationCode));
+ sb.appendFormat("align %u\n", alignment);
+ _logger->log(sb);
+ }
+#endif
+
+ return kErrorOk;
+}
+
+// ============================================================================
+// [asmjit::Assembler - Events]
+// ============================================================================
+
+Error Assembler::onAttach(CodeHolder* code) noexcept {
+ uint32_t arch = code->arch();
+ if (!Environment::isFamilyARM(arch))
+ return DebugUtils::errored(kErrorInvalidArch);
+
+ return Base::onAttach(code);
+}
+
+Error Assembler::onDetach(CodeHolder* code) noexcept {
+ return Base::onDetach(code);
+}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM
diff --git a/erts/emulator/asmjit/arm/a64assembler.h b/erts/emulator/asmjit/arm/a64assembler.h
new file mode 100644
index 0000000000..8d99298806
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64assembler.h
@@ -0,0 +1,94 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64ASSEMBLER_H_INCLUDED
+#define ASMJIT_ARM_A64ASSEMBLER_H_INCLUDED
+
+#include "../core/assembler.h"
+#include "../arm/a64emitter.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \addtogroup asmjit_a64
+//! \{
+
+// ============================================================================
+// [asmjit::a64::Assembler]
+// ============================================================================
+
+//! AArch64 assembler implementation.
+class ASMJIT_VIRTAPI Assembler
+ : public BaseAssembler,
+ public EmitterExplicitT<Assembler> {
+
+public:
+ typedef BaseAssembler Base;
+
+ //! \name Construction / Destruction
+ //! \{
+
+ ASMJIT_API Assembler(CodeHolder* code = nullptr) noexcept;
+ ASMJIT_API virtual ~Assembler() noexcept;
+
+ //! \}
+
+ //! \name Accessors
+ //! \{
+
+ //! Gets whether the current ARM mode is THUMB (alternative to 32-bit ARM encoding).
+ inline bool isInThumbMode() const noexcept { return _environment.isArchThumb(); }
+
+ //! Gets the current code alignment of the current mode (ARM vs THUMB).
+ inline uint32_t codeAlignment() const noexcept { return isInThumbMode() ? 2 : 4; }
+
+ //! \}
+
+ //! \name Emit
+ //! \{
+
+ ASMJIT_API Error _emit(uint32_t instId, const Operand_& o0, const Operand_& o1, const Operand_& o2, const Operand_* opExt) override;
+
+ //! \}
+
+ //! \name Align
+ //! \{
+
+ ASMJIT_API Error align(uint32_t alignMode, uint32_t alignment) override;
+
+ //! \}
+
+ //! \name Events
+ //! \{
+
+ ASMJIT_API Error onAttach(CodeHolder* code) noexcept override;
+ ASMJIT_API Error onDetach(CodeHolder* code) noexcept override;
+
+ //! \}
+};
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_A64ASSEMBLER_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64builder.cpp b/erts/emulator/asmjit/arm/a64builder.cpp
new file mode 100644
index 0000000000..3a21339987
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64builder.cpp
@@ -0,0 +1,68 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM) && !defined(ASMJIT_NO_BUILDER)
+
+#include "../arm/a64assembler.h"
+#include "../arm/a64builder.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// ============================================================================
+// [asmjit::a64::Builder - Construction / Destruction]
+// ============================================================================
+
+Builder::Builder(CodeHolder* code) noexcept : BaseBuilder() {
+ if (code)
+ code->attach(this);
+}
+Builder::~Builder() noexcept {}
+
+// ============================================================================
+// [asmjit::a64::Builder - Finalize]
+// ============================================================================
+
+Error Builder::finalize() {
+ ASMJIT_PROPAGATE(runPasses());
+ Assembler a(_code);
+ a.addEncodingOptions(encodingOptions());
+ a.addValidationOptions(validationOptions());
+ return serializeTo(&a);
+}
+
+// ============================================================================
+// [asmjit::a64::Builder - Events]
+// ============================================================================
+
+Error Builder::onAttach(CodeHolder* code) noexcept {
+ uint32_t arch = code->arch();
+ if (!Environment::isFamilyARM(arch))
+ return DebugUtils::errored(kErrorInvalidArch);
+
+ return Base::onAttach(code);
+}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM && !ASMJIT_NO_BUILDER
diff --git a/erts/emulator/asmjit/arm/a64builder.h b/erts/emulator/asmjit/arm/a64builder.h
new file mode 100644
index 0000000000..ed6740f662
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64builder.h
@@ -0,0 +1,79 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64BUILDER_H_INCLUDED
+#define ASMJIT_ARM_A64BUILDER_H_INCLUDED
+
+#include "../core/api-config.h"
+#ifndef ASMJIT_NO_BUILDER
+
+#include "../core/builder.h"
+#include "../core/datatypes.h"
+#include "../arm/a64emitter.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \addtogroup asmjit_a64
+//! \{
+
+// ============================================================================
+// [asmjit::a64::Builder]
+// ============================================================================
+
+//! AArch64 builder implementation.
+class ASMJIT_VIRTAPI Builder
+ : public BaseBuilder,
+ public EmitterExplicitT<Builder> {
+public:
+ ASMJIT_NONCOPYABLE(Builder)
+ typedef BaseBuilder Base;
+
+ //! \name Construction & Destruction
+ //! \{
+
+ ASMJIT_API explicit Builder(CodeHolder* code = nullptr) noexcept;
+ ASMJIT_API virtual ~Builder() noexcept;
+
+ //! \}
+
+ //! \name Finalize
+ //! \{
+
+ ASMJIT_API Error finalize() override;
+
+ //! \}
+
+ //! \name Events
+ //! \{
+
+ ASMJIT_API Error onAttach(CodeHolder* code) noexcept override;
+
+ //! \}
+};
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_BUILDER
+#endif // ASMJIT_ARM_A64BUILDER_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64compiler.cpp b/erts/emulator/asmjit/arm/a64compiler.cpp
new file mode 100644
index 0000000000..7c0a49afae
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64compiler.cpp
@@ -0,0 +1,77 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM) && !defined(ASMJIT_NO_COMPILER)
+
+#include "../arm/a64assembler.h"
+#include "../arm/a64compiler.h"
+#include "../arm/a64rapass_p.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// ============================================================================
+// [asmjit::a64::Compiler - Construction / Destruction]
+// ============================================================================
+
+Compiler::Compiler(CodeHolder* code) noexcept : BaseCompiler() {
+ if (code)
+ code->attach(this);
+}
+Compiler::~Compiler() noexcept {}
+
+// ============================================================================
+// [asmjit::a64::Compiler - Finalize]
+// ============================================================================
+
+Error Compiler::finalize() {
+ ASMJIT_PROPAGATE(runPasses());
+ Assembler a(_code);
+ a.addEncodingOptions(encodingOptions());
+ a.addValidationOptions(validationOptions());
+ return serializeTo(&a);
+}
+
+// ============================================================================
+// [asmjit::a64::Compiler - Events]
+// ============================================================================
+
+Error Compiler::onAttach(CodeHolder* code) noexcept {
+ uint32_t arch = code->arch();
+ if (!Environment::isFamilyARM(arch))
+ return DebugUtils::errored(kErrorInvalidArch);
+
+ ASMJIT_PROPAGATE(Base::onAttach(code));
+ Error err = addPassT<ARMRAPass>();
+
+ if (ASMJIT_UNLIKELY(err)) {
+ onDetach(code);
+ return err;
+ }
+
+ return kErrorOk;
+}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM && !ASMJIT_NO_COMPILER
diff --git a/erts/emulator/asmjit/arm/a64compiler.h b/erts/emulator/asmjit/arm/a64compiler.h
new file mode 100644
index 0000000000..ee54c2858a
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64compiler.h
@@ -0,0 +1,259 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMCOMPILER_H_INCLUDED
+#define ASMJIT_ARM_ARMCOMPILER_H_INCLUDED
+
+#include "../core/api-config.h"
+#ifndef ASMJIT_NO_COMPILER
+
+#include "../core/compiler.h"
+#include "../core/datatypes.h"
+#include "../core/type.h"
+#include "../arm/a64emitter.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \addtogroup asmjit_a64
+//! \{
+
+// ============================================================================
+// [asmjit::a64::Compiler]
+// ============================================================================
+
+//! AArch64 compiler implementation.
+class ASMJIT_VIRTAPI Compiler
+ : public BaseCompiler,
+ public EmitterExplicitT<Compiler> {
+public:
+ ASMJIT_NONCOPYABLE(Compiler)
+ typedef BaseCompiler Base;
+
+ //! \name Construction & Destruction
+ //! \{
+
+ ASMJIT_API explicit Compiler(CodeHolder* code = nullptr) noexcept;
+ ASMJIT_API virtual ~Compiler() noexcept;
+
+ //! \}
+
+ //! \name Virtual Registers
+ //! \{
+
+ //! \cond INTERNAL
+ template<typename RegT, typename Type>
+ ASMJIT_INLINE RegT _newRegInternal(const Type& type) {
+ RegT reg(Globals::NoInit);
+ _newReg(&reg, type, nullptr);
+ return reg;
+ }
+
+ template<typename RegT, typename Type, typename... Args>
+ ASMJIT_INLINE RegT _newRegInternal(const Type& type, const char* s, Args&&... args) {
+#ifndef ASMJIT_NO_LOGGING
+ RegT reg(Globals::NoInit);
+ if (sizeof...(Args) == 0)
+ _newReg(&reg, type, s);
+ else
+ _newRegFmt(&reg, type, s, std::forward<Args>(args)...);
+ return reg;
+#else
+ DebugUtils::unused(std::forward<Args>(args)...);
+ RegT reg(Globals::NoInit);
+ _newReg(&reg, type, nullptr);
+ return reg;
+#endif
+ }
+ //! \endcond
+
+ template<typename RegT, typename... Args>
+ inline RegT newSimilarReg(const RegT& ref, Args&&... args) {
+ return _newRegInternal<RegT>(ref, std::forward<Args>(args)...);
+ }
+
+ template<typename... Args>
+ inline Reg newReg(uint32_t typeId, Args&&... args) { return _newRegInternal<Reg>(typeId, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Gp newGp(uint32_t typeId, Args&&... args) { return _newRegInternal<Gp>(typeId, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Vec newVec(uint32_t typeId, Args&&... args) { return _newRegInternal<Vec>(typeId, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Gp newInt32(Args&&... args) { return _newRegInternal<Gp>(Type::kIdI32, std::forward<Args>(args)...); }
+ template<typename... Args>
+ inline Gp newUInt32(Args&&... args) { return _newRegInternal<Gp>(Type::kIdU32, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Gp newInt64(Args&&... args) { return _newRegInternal<Gp>(Type::kIdI64, std::forward<Args>(args)...); }
+ template<typename... Args>
+ inline Gp newUInt64(Args&&... args) { return _newRegInternal<Gp>(Type::kIdU64, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Gp newIntPtr(Args&&... args) { return _newRegInternal<Gp>(Type::kIdIntPtr, std::forward<Args>(args)...); }
+ template<typename... Args>
+ inline Gp newUIntPtr(Args&&... args) { return _newRegInternal<Gp>(Type::kIdUIntPtr, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Gp newGpw(Args&&... args) { return _newRegInternal<Gp>(Type::kIdU32, std::forward<Args>(args)...); }
+ template<typename... Args>
+ inline Gp newGpx(Args&&... args) { return _newRegInternal<Gp>(Type::kIdU64, std::forward<Args>(args)...); }
+ template<typename... Args>
+ inline Gp newGpz(Args&&... args) { return _newRegInternal<Gp>(Type::kIdUIntPtr, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Vec newVecS(Args&&... args) { return _newRegInternal<Vec>(Type::kIdF32, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Vec newVecD(Args&&... args) { return _newRegInternal<Vec>(Type::kIdF64, std::forward<Args>(args)...); }
+
+ template<typename... Args>
+ inline Vec newVecQ(Args&&... args) { return _newRegInternal<Vec>(Type::kIdU8x16, std::forward<Args>(args)...); }
+
+ //! \}
+
+ //! \name Stack
+ //! \{
+
+ //! Creates a new memory chunk allocated on the current function's stack.
+ inline Mem newStack(uint32_t size, uint32_t alignment, const char* name = nullptr) {
+ Mem m(Globals::NoInit);
+ _newStack(&m, size, alignment, name);
+ return m;
+ }
+
+ //! \}
+
+ //! \name Constants
+ //! \{
+
+ //! Put data to a constant-pool and get a memory reference to it.
+ inline Mem newConst(uint32_t scope, const void* data, size_t size) {
+ Mem m(Globals::NoInit);
+ _newConst(&m, scope, data, size);
+ return m;
+ }
+
+ //! Put a BYTE `val` to a constant-pool (8 bits).
+ inline Mem newByteConst(uint32_t scope, uint8_t val) noexcept { return newConst(scope, &val, 1); }
+ //! Put a HWORD `val` to a constant-pool (16 bits).
+ inline Mem newHWordConst(uint32_t scope, uint16_t val) noexcept { return newConst(scope, &val, 2); }
+ //! Put a WORD `val` to a constant-pool (32 bits).
+ inline Mem newWordConst(uint32_t scope, uint32_t val) noexcept { return newConst(scope, &val, 4); }
+ //! Put a DWORD `val` to a constant-pool (64 bits).
+ inline Mem newDWordConst(uint32_t scope, uint64_t val) noexcept { return newConst(scope, &val, 8); }
+
+ //! Put a WORD `val` to a constant-pool.
+ inline Mem newInt16Const(uint32_t scope, int16_t val) noexcept { return newConst(scope, &val, 2); }
+ //! Put a WORD `val` to a constant-pool.
+ inline Mem newUInt16Const(uint32_t scope, uint16_t val) noexcept { return newConst(scope, &val, 2); }
+ //! Put a DWORD `val` to a constant-pool.
+ inline Mem newInt32Const(uint32_t scope, int32_t val) noexcept { return newConst(scope, &val, 4); }
+ //! Put a DWORD `val` to a constant-pool.
+ inline Mem newUInt32Const(uint32_t scope, uint32_t val) noexcept { return newConst(scope, &val, 4); }
+ //! Put a QWORD `val` to a constant-pool.
+ inline Mem newInt64Const(uint32_t scope, int64_t val) noexcept { return newConst(scope, &val, 8); }
+ //! Put a QWORD `val` to a constant-pool.
+ inline Mem newUInt64Const(uint32_t scope, uint64_t val) noexcept { return newConst(scope, &val, 8); }
+
+ //! Put a SP-FP `val` to a constant-pool.
+ inline Mem newFloatConst(uint32_t scope, float val) noexcept { return newConst(scope, &val, 4); }
+ //! Put a DP-FP `val` to a constant-pool.
+ inline Mem newDoubleConst(uint32_t scope, double val) noexcept { return newConst(scope, &val, 8); }
+
+ //! \}
+
+ //! \name Instruction Options
+ //! \{
+
+ //! Force the compiler to not follow the conditional or unconditional jump.
+ inline Compiler& unfollow() noexcept { _instOptions |= Inst::kOptionUnfollow; return *this; }
+
+ //! \}
+
+ //! \name Function Call & Ret Intrinsics
+ //! \{
+
+ //! Invoke a function call without `target` type enforcement.
+ inline Error invoke_(InvokeNode** out, const Operand_& target, const FuncSignature& signature) {
+ return _addInvokeNode(out, Inst::kIdBlr, target, signature);
+ }
+
+ //! Invoke a function call of the given `target` and `signature` and store
+ //! the added node to `out`.
+ //!
+ //! Creates a new \ref InvokeNode, initializes all the necessary members to
+ //! match the given function `signature`, adds the node to the compiler, and
+ //! stores its pointer to `out`. The operation is atomic, if anything fails
+ //! nullptr is stored in `out` and error code is returned.
+ inline Error invoke(InvokeNode** out, const Gp& target, const FuncSignature& signature) { return invoke_(out, target, signature); }
+ //! \overload
+ inline Error invoke(InvokeNode** out, const Mem& target, const FuncSignature& signature) { return invoke_(out, target, signature); }
+ //! \overload
+ inline Error invoke(InvokeNode** out, const Label& target, const FuncSignature& signature) { return invoke_(out, target, signature); }
+ //! \overload
+ inline Error invoke(InvokeNode** out, const Imm& target, const FuncSignature& signature) { return invoke_(out, target, signature); }
+ //! \overload
+ inline Error invoke(InvokeNode** out, uint64_t target, const FuncSignature& signature) { return invoke_(out, Imm(int64_t(target)), signature); }
+
+ //! Return.
+ inline FuncRetNode* ret() { return addRet(Operand(), Operand()); }
+ //! \overload
+ inline FuncRetNode* ret(const BaseReg& o0) { return addRet(o0, Operand()); }
+ //! \overload
+ inline FuncRetNode* ret(const BaseReg& o0, const BaseReg& o1) { return addRet(o0, o1); }
+
+ //! \}
+
+ //! \name Jump Tables Support
+ //! \{
+
+ using EmitterExplicitT<Compiler>::br;
+
+ //! Adds a jump to the given `target` with the provided jump `annotation`.
+ inline Error br(const BaseReg& target, JumpAnnotation* annotation) { return emitAnnotatedJump(Inst::kIdBr, target, annotation); }
+
+ //! \}
+
+ //! \name Finalize
+ //! \{
+
+ ASMJIT_API Error finalize() override;
+
+ //! \}
+
+ //! \name Events
+ //! \{
+
+ ASMJIT_API Error onAttach(CodeHolder* code) noexcept override;
+
+ //! \}
+};
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_COMPILER
+#endif // ASMJIT_ARM_ARMCOMPILER_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64emithelper.cpp b/erts/emulator/asmjit/arm/a64emithelper.cpp
new file mode 100644
index 0000000000..957f9265f6
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64emithelper.cpp
@@ -0,0 +1,422 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM)
+
+#include "../core/formatter.h"
+#include "../core/funcargscontext_p.h"
+#include "../core/string.h"
+#include "../core/support.h"
+#include "../core/type.h"
+#include "../arm/a64emithelper_p.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// ============================================================================
+// [asmjit::a64::EmitHelper - Emit Operations]
+// ============================================================================
+
+ASMJIT_FAVOR_SIZE Error EmitHelper::emitRegMove(
+ const Operand_& dst_,
+ const Operand_& src_, uint32_t typeId, const char* comment) {
+
+ Emitter* emitter = _emitter->as<Emitter>();
+
+ // Invalid or abstract TypeIds are not allowed.
+ ASMJIT_ASSERT(Type::isValid(typeId) && !Type::isAbstract(typeId));
+
+ emitter->setInlineComment(comment);
+
+ if (dst_.isReg() && src_.isMem()) {
+ Reg dst(dst_.as<Reg>());
+ Mem src(src_.as<Mem>());
+
+ switch (typeId) {
+ case Type::kIdI8:
+ case Type::kIdU8:
+ return emitter->ldrb(dst.as<Gp>(), src);
+
+ case Type::kIdI16:
+ case Type::kIdU16:
+ return emitter->ldrh(dst.as<Gp>(), src);
+
+ case Type::kIdI32:
+ case Type::kIdU32:
+ return emitter->ldr(dst.as<Gp>().w(), src);
+
+ case Type::kIdI64:
+ case Type::kIdU64:
+ return emitter->ldr(dst.as<Gp>().x(), src);
+
+ default: {
+ if (Type::isVec32(typeId))
+ return emitter->ldr(dst.as<Vec>().s(), src);
+
+ if (Type::isVec64(typeId))
+ return emitter->ldr(dst.as<Vec>().d(), src);
+
+ if (Type::isVec128(typeId))
+ return emitter->ldr(dst.as<Vec>().d(), src);
+
+ break;
+ }
+ }
+ }
+
+ if (dst_.isMem() && src_.isReg()) {
+ Mem dst(dst_.as<Mem>());
+ Reg src(src_.as<Reg>());
+
+ switch (typeId) {
+ case Type::kIdI8:
+ case Type::kIdU8:
+ return emitter->strb(src.as<Gp>(), dst);
+
+ case Type::kIdI16:
+ case Type::kIdU16:
+ return emitter->strh(src.as<Gp>(), dst);
+
+ case Type::kIdI32:
+ case Type::kIdU32:
+ return emitter->str(src.as<Gp>().w(), dst);
+
+ case Type::kIdI64:
+ case Type::kIdU64:
+ return emitter->str(src.as<Gp>().x(), dst);
+
+ default: {
+ if (Type::isVec32(typeId))
+ return emitter->str(src.as<Vec>().s(), dst);
+
+ if (Type::isVec64(typeId))
+ return emitter->str(src.as<Vec>().d(), dst);
+
+ if (Type::isVec128(typeId))
+ return emitter->str(src.as<Vec>().d(), dst);
+
+ break;
+ }
+ }
+ }
+
+ if (dst_.isReg() && src_.isReg()) {
+ Reg dst(dst_.as<Reg>());
+ Reg src(src_.as<Reg>());
+
+ switch (typeId) {
+ case Type::kIdI8:
+ case Type::kIdU8:
+ case Type::kIdI16:
+ case Type::kIdU16:
+ case Type::kIdI32:
+ case Type::kIdU32:
+ case Type::kIdI64:
+ case Type::kIdU64:
+ return emitter->mov(src.as<Gp>().x(), dst.as<Gp>().x());
+
+ default: {
+ if (Type::isVec32(typeId))
+ return emitter->fmov(dst.as<Vec>().s(), src.as<Vec>().s());
+
+ if (Type::isVec64(typeId))
+ return emitter->mov(dst.as<Vec>().b8(), src.as<Vec>().b8());
+
+ if (Type::isVec128(typeId))
+ return emitter->mov(dst.as<Vec>().b16(), src.as<Vec>().b16());
+
+ break;
+ }
+ }
+ }
+
+ emitter->setInlineComment(nullptr);
+ return DebugUtils::errored(kErrorInvalidState);
+}
+
+Error EmitHelper::emitRegSwap(
+ const BaseReg& a,
+ const BaseReg& b, const char* comment) {
+
+ DebugUtils::unused(a, b, comment);
+ return DebugUtils::errored(kErrorInvalidState);
+}
+
+Error EmitHelper::emitArgMove(
+ const BaseReg& dst_, uint32_t dstTypeId,
+ const Operand_& src_, uint32_t srcTypeId, const char* comment) {
+
+ // Deduce optional `dstTypeId`, which may be `Type::kIdVoid` in some cases.
+ if (!dstTypeId) {
+ const ArchTraits& archTraits = ArchTraits::byArch(_emitter->arch());
+ dstTypeId = archTraits.regTypeToTypeId(dst_.type());
+ }
+
+ // Invalid or abstract TypeIds are not allowed.
+ ASMJIT_ASSERT(Type::isValid(dstTypeId) && !Type::isAbstract(dstTypeId));
+ ASMJIT_ASSERT(Type::isValid(srcTypeId) && !Type::isAbstract(srcTypeId));
+
+ Reg dst(dst_.as<Reg>());
+ Operand src(src_);
+
+ uint32_t dstSize = Type::sizeOf(dstTypeId);
+ uint32_t srcSize = Type::sizeOf(srcTypeId);
+
+ // TODO: [ARM] EmitArgMove is unfinished.
+
+ if (Type::isInt(dstTypeId)) {
+ if (Type::isInt(srcTypeId)) {
+ uint32_t x = dstSize == 8;
+ uint32_t instId = Inst::kIdNone;
+
+ switch (srcTypeId) {
+ case Type::kIdI8 : instId = Inst::kIdLdrsb; break;
+ case Type::kIdU8 : instId = Inst::kIdLdrb; break;
+
+ case Type::kIdI16: instId = Inst::kIdLdrsh; break;
+ case Type::kIdU16: instId = Inst::kIdLdrh; break;
+
+ case Type::kIdI32: instId = x ? Inst::kIdLdrsw : Inst::kIdLdr; break;
+ case Type::kIdU32: instId = Inst::kIdLdr; x = 0; break;
+
+ case Type::kIdI64: instId = Inst::kIdLdr; break;
+ case Type::kIdU64: instId = Inst::kIdLdr; break;
+ }
+
+ if (!instId)
+ return DebugUtils::errored(kErrorInvalidState);
+
+ dst.setSignature(x ? GpX::kSignature : GpW::kSignature);
+ _emitter->setInlineComment(comment);
+ return _emitter->emit(instId, dst, src);
+ }
+ }
+
+ return DebugUtils::errored(kErrorInvalidState);
+}
+
+// ============================================================================
+// [asmjit::a64::EmitHelper - Emit Prolog & Epilog]
+// ============================================================================
+
+struct PrologEpilogInfo {
+ struct RegPair {
+ uint8_t ids[2];
+ uint16_t offset;
+ };
+
+ struct GroupData {
+ RegPair pairs[16];
+ uint32_t pairCount;
+ };
+
+ GroupData groups[2];
+ uint32_t sizeTotal;
+
+ Error init(const FuncFrame& frame) noexcept {
+ uint32_t offset = 0;
+
+ for (uint32_t group = 0; group < 2; group++) {
+ GroupData& data = groups[group];
+ uint32_t n = 0;
+ uint32_t pairCount = 0;
+ RegPair* pairs = data.pairs;
+ uint32_t slotSize = frame.saveRestoreRegSize(group);
+
+ uint32_t savedRegs = frame.savedRegs(group);
+ if (group == 0 && frame.hasPreservedFP()) {
+ // Must be at the beginning of the push/pop sequence.
+ ASMJIT_ASSERT(pairCount == 0);
+
+ pairs[0].offset = uint16_t(offset);
+ pairs[0].ids[0] = Gp::kIdFp;
+ pairs[0].ids[1] = Gp::kIdLr;
+ offset += slotSize * 2;
+ pairCount++;
+
+ savedRegs &= ~Support::bitMask(Gp::kIdFp, Gp::kIdLr);
+ }
+
+ Support::BitWordIterator<uint32_t> it(savedRegs);
+ while (it.hasNext()) {
+ pairs[pairCount].ids[n] = uint8_t(it.next());
+
+ if (++n == 2) {
+ pairs[pairCount].offset = uint16_t(offset);
+ offset += slotSize * 2;
+
+ n = 0;
+ pairCount++;
+ }
+ }
+
+ if (n == 1) {
+ pairs[pairCount].ids[1] = uint8_t(BaseReg::kIdBad);
+ pairs[pairCount].offset = uint16_t(offset);
+ offset += slotSize * 2;
+ pairCount++;
+ }
+
+ data.pairCount = pairCount;
+ }
+
+ sizeTotal = offset;
+ return kErrorOk;
+ }
+};
+
+// TODO: [ARM] Emit prolog.
+ASMJIT_FAVOR_SIZE Error EmitHelper::emitProlog(const FuncFrame& frame) {
+ Emitter* emitter = _emitter->as<Emitter>();
+
+ PrologEpilogInfo pei;
+ ASMJIT_PROPAGATE(pei.init(frame));
+
+ static const Reg groupRegs[2] = { x0, d0 };
+ static const uint32_t groupInsts[2][2] = {
+ { Inst::kIdStr , Inst::kIdStp },
+ { Inst::kIdStr_v, Inst::kIdStp_v }
+ };
+
+ uint32_t adjustInitialOffset = pei.sizeTotal;
+
+ for (uint32_t group = 0; group < 2; group++) {
+ const PrologEpilogInfo::GroupData& data = pei.groups[group];
+ uint32_t pairCount = data.pairCount;
+
+ Reg regs[2] = { groupRegs[group], groupRegs[group] };
+ Mem mem = ptr(sp);
+
+ const uint32_t* insts = groupInsts[group];
+
+ for (uint32_t i = 0; i < pairCount; i++) {
+ const PrologEpilogInfo::RegPair& pair = data.pairs[i];
+
+ regs[0].setId(pair.ids[0]);
+ regs[1].setId(pair.ids[1]);
+ mem.setOffsetLo32(pair.offset);
+
+ if (pair.offset == 0 && adjustInitialOffset) {
+ mem.setOffset(-int(adjustInitialOffset));
+ mem.makePreIndex();
+ }
+
+ if (pair.ids[1] == BaseReg::kIdBad)
+ ASMJIT_PROPAGATE(emitter->emit(insts[0], regs[0], mem));
+ else
+ ASMJIT_PROPAGATE(emitter->emit(insts[1], regs[0], regs[1], mem));
+
+ mem.resetToFixedOffset();
+
+ if (i == 0 && frame.hasPreservedFP()) {
+ ASMJIT_PROPAGATE(emitter->mov(x29, sp));
+ }
+ }
+ }
+
+ if (frame.hasStackAdjustment()) {
+ uint32_t adj = frame.stackAdjustment();
+ if (adj <= 0xFFFu) {
+ ASMJIT_PROPAGATE(emitter->sub(sp, sp, adj));
+ }
+ else if (adj <= 0xFFFFFFu) {
+ // TODO: [ARM] Prolog - we must touch the pages otherwise it's undefined.
+ ASMJIT_PROPAGATE(emitter->sub(sp, sp, adj & 0x000FFFu));
+ ASMJIT_PROPAGATE(emitter->sub(sp, sp, adj & 0xFFF000u));
+ }
+ else {
+ return DebugUtils::errored(kErrorInvalidState);
+ }
+ }
+
+ return kErrorOk;
+}
+
+// TODO: [ARM] Emit epilog.
+ASMJIT_FAVOR_SIZE Error EmitHelper::emitEpilog(const FuncFrame& frame) {
+ Emitter* emitter = _emitter->as<Emitter>();
+
+ PrologEpilogInfo pei;
+ ASMJIT_PROPAGATE(pei.init(frame));
+
+ static const Reg groupRegs[2] = { x0, d0 };
+ static const uint32_t groupInsts[2][2] = {
+ { Inst::kIdLdr , Inst::kIdLdp },
+ { Inst::kIdLdr_v, Inst::kIdLdp_v }
+ };
+
+ uint32_t adjustInitialOffset = pei.sizeTotal;
+
+ if (frame.hasStackAdjustment()) {
+ uint32_t adj = frame.stackAdjustment();
+ if (adj <= 0xFFFu) {
+ ASMJIT_PROPAGATE(emitter->add(sp, sp, adj));
+ }
+ else if (adj <= 0xFFFFFFu) {
+ ASMJIT_PROPAGATE(emitter->add(sp, sp, adj & 0x000FFFu));
+ ASMJIT_PROPAGATE(emitter->add(sp, sp, adj & 0xFFF000u));
+ }
+ else {
+ return DebugUtils::errored(kErrorInvalidState);
+ }
+ }
+
+ for (int group = 1; group >= 0; group--) {
+ const PrologEpilogInfo::GroupData& data = pei.groups[group];
+ uint32_t pairCount = data.pairCount;
+
+ Reg regs[2] = { groupRegs[group], groupRegs[group] };
+ Mem mem = ptr(sp);
+
+ const uint32_t* insts = groupInsts[group];
+
+ for (int i = int(pairCount) - 1; i >= 0; i--) {
+ const PrologEpilogInfo::RegPair& pair = data.pairs[i];
+
+ regs[0].setId(pair.ids[0]);
+ regs[1].setId(pair.ids[1]);
+ mem.setOffsetLo32(pair.offset);
+
+ if (pair.offset == 0 && adjustInitialOffset) {
+ mem.setOffset(int(adjustInitialOffset));
+ mem.makePostIndex();
+ }
+
+ if (pair.ids[1] == BaseReg::kIdBad)
+ ASMJIT_PROPAGATE(emitter->emit(insts[0], regs[0], mem));
+ else
+ ASMJIT_PROPAGATE(emitter->emit(insts[1], regs[0], regs[1], mem));
+
+ mem.resetToFixedOffset();
+ }
+ }
+
+ ASMJIT_PROPAGATE(emitter->ret(x30));
+
+ return kErrorOk;
+}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM
diff --git a/erts/emulator/asmjit/arm/a64emithelper_p.h b/erts/emulator/asmjit/arm/a64emithelper_p.h
new file mode 100644
index 0000000000..eb9153467b
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64emithelper_p.h
@@ -0,0 +1,70 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMEMITHELPER_P_H_INCLUDED
+#define ASMJIT_ARM_ARMEMITHELPER_P_H_INCLUDED
+
+#include "../core/api-config.h"
+
+#include "../core/emithelper_p.h"
+#include "../core/func.h"
+#include "../arm/a64emitter.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \cond INTERNAL
+//! \addtogroup asmjit_a64
+//! \{
+
+// ============================================================================
+// [asmjit::a64::EmitHelper]
+// ============================================================================
+
+class EmitHelper : public BaseEmitHelper {
+public:
+ inline explicit EmitHelper(BaseEmitter* emitter = nullptr) noexcept
+ : BaseEmitHelper(emitter) {}
+
+ Error emitRegMove(
+ const Operand_& dst_,
+ const Operand_& src_, uint32_t typeId, const char* comment = nullptr) override;
+
+ Error emitRegSwap(
+ const BaseReg& a,
+ const BaseReg& b, const char* comment = nullptr) override;
+
+ Error emitArgMove(
+ const BaseReg& dst_, uint32_t dstTypeId,
+ const Operand_& src_, uint32_t srcTypeId, const char* comment = nullptr) override;
+
+ Error emitProlog(const FuncFrame& frame);
+ Error emitEpilog(const FuncFrame& frame);
+};
+
+//! \}
+//! \endcond
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_ARMEMITHELPER_P_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64emitter.h b/erts/emulator/asmjit/arm/a64emitter.h
new file mode 100644
index 0000000000..143197db37
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64emitter.h
@@ -0,0 +1,1278 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64EMITTER_H_INCLUDED
+#define ASMJIT_ARM_A64EMITTER_H_INCLUDED
+
+#include "../core/emitter.h"
+#include "../core/support.h"
+#include "../arm/a64instdb.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+#define ASMJIT_INST_0x(NAME, ID) \
+ ASMJIT_INLINE Error NAME() { return _emitter()->_emitI(Inst::kId##ID); }
+
+#define ASMJIT_INST_1x(NAME, ID, T0) \
+ ASMJIT_INLINE Error NAME(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID, o0); }
+
+#define ASMJIT_INST_2x(NAME, ID, T0, T1) \
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID, o0, o1); }
+
+#define ASMJIT_INST_3x(NAME, ID, T0, T1, T2) \
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2); }
+
+#define ASMJIT_INST_4x(NAME, ID, T0, T1, T2, T3) \
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3); }
+
+#define ASMJIT_INST_5x(NAME, ID, T0, T1, T2, T3, T4) \
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4); }
+
+#define ASMJIT_INST_6x(NAME, ID, T0, T1, T2, T3, T4, T5) \
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4, const T5& o5) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4, o5); }
+
+//! \addtogroup asmjit_a64
+//! \{
+
+// ============================================================================
+// [asmjit::a64::EmitterExplicitT]
+// ============================================================================
+
+//! ARM emitter.
+//!
+//! NOTE: This class cannot be instantiated, you can only cast to it and use it
+//! as emitter that emits to either \ref Assembler, \ref Builder, or \ref Compiler
+//! (use withcaution with \ref Compiler as it expects virtual registers to be used).
+template<typename This>
+struct EmitterExplicitT {
+ //! \cond
+
+ // These two are unfortunately reported by the sanitizer. We know what we do,
+ // however, the sanitizer doesn't. I have tried to use reinterpret_cast instead,
+ // but that would generate bad code when compiled by MSC.
+ ASMJIT_ATTRIBUTE_NO_SANITIZE_UNDEF ASMJIT_INLINE This* _emitter() noexcept { return static_cast<This*>(this); }
+ ASMJIT_ATTRIBUTE_NO_SANITIZE_UNDEF ASMJIT_INLINE const This* _emitter() const noexcept { return static_cast<const This*>(this); }
+
+ //! \endcond
+
+ // --------------------------------------------------------------------------
+ // [Options]
+ // --------------------------------------------------------------------------
+
+protected:
+ ASMJIT_INLINE This& _addInstOptions(uint32_t options) noexcept {
+ static_cast<This*>(this)->addInstOptions(options);
+ return *static_cast<This*>(this);
+ }
+
+public:
+ //! \name Condition Flags
+ //! \{
+
+ ASMJIT_INLINE This& cond(uint32_t condCode) noexcept {
+ return _addInstOptions((condCode << Inst::kOptionCondCodeShift) | Inst::kOptionCondFlagMask);
+ }
+
+ ASMJIT_INLINE This& cond_eq() noexcept { return cond(Cond::kEQ); }
+ ASMJIT_INLINE This& cond_ne() noexcept { return cond(Cond::kNE); }
+ ASMJIT_INLINE This& cond_cs() noexcept { return cond(Cond::kCS); }
+ ASMJIT_INLINE This& cond_hs() noexcept { return cond(Cond::kHS); }
+ ASMJIT_INLINE This& cond_cc() noexcept { return cond(Cond::kCC); }
+ ASMJIT_INLINE This& cond_lo() noexcept { return cond(Cond::kLO); }
+ ASMJIT_INLINE This& cond_mi() noexcept { return cond(Cond::kMI); }
+ ASMJIT_INLINE This& cond_pl() noexcept { return cond(Cond::kPL); }
+ ASMJIT_INLINE This& cond_vs() noexcept { return cond(Cond::kVS); }
+ ASMJIT_INLINE This& cond_vc() noexcept { return cond(Cond::kVC); }
+ ASMJIT_INLINE This& cond_hi() noexcept { return cond(Cond::kHI); }
+ ASMJIT_INLINE This& cond_ls() noexcept { return cond(Cond::kLS); }
+ ASMJIT_INLINE This& cond_ge() noexcept { return cond(Cond::kGE); }
+ ASMJIT_INLINE This& cond_lt() noexcept { return cond(Cond::kLT); }
+ ASMJIT_INLINE This& cond_gt() noexcept { return cond(Cond::kGT); }
+ ASMJIT_INLINE This& cond_le() noexcept { return cond(Cond::kLE); }
+ ASMJIT_INLINE This& cond_al() noexcept { return cond(Cond::kAL); }
+ ASMJIT_INLINE This& cond_na() noexcept { return cond(Cond::kNA); }
+
+ ASMJIT_INLINE This& cond_sign() noexcept { return cond(Cond::kSign); }
+ ASMJIT_INLINE This& cond_not_sign() noexcept { return cond(Cond::kNotSign); }
+ ASMJIT_INLINE This& cond_overflow() noexcept { return cond(Cond::kOverflow); }
+ ASMJIT_INLINE This& cond_not_overflow() noexcept { return cond(Cond::kNotOverflow); }
+ ASMJIT_INLINE This& cond_equal() noexcept { return cond(Cond::kEqual); }
+ ASMJIT_INLINE This& cond_not_equal() noexcept { return cond(Cond::kNotEqual); }
+ ASMJIT_INLINE This& cond_zero() noexcept { return cond(Cond::kZero); }
+ ASMJIT_INLINE This& cond_not_zero() noexcept { return cond(Cond::kNotZero); }
+ ASMJIT_INLINE This& cond_positive() noexcept { return cond(Cond::kPositive); }
+ ASMJIT_INLINE This& cond_negative() noexcept { return cond(Cond::kNegative); }
+ ASMJIT_INLINE This& cond_signed_le() noexcept { return cond(Cond::kSignedLT); }
+ ASMJIT_INLINE This& cond_signed_lt() noexcept { return cond(Cond::kSignedLE); }
+ ASMJIT_INLINE This& cond_signed_gt() noexcept { return cond(Cond::kSignedGT); }
+ ASMJIT_INLINE This& cond_signed_ge() noexcept { return cond(Cond::kSignedGE); }
+ ASMJIT_INLINE This& cond_unsigned_le() noexcept { return cond(Cond::kUnsignedLT); }
+ ASMJIT_INLINE This& cond_unsigned_lt() noexcept { return cond(Cond::kUnsignedLE); }
+ ASMJIT_INLINE This& cond_unsigned_gt() noexcept { return cond(Cond::kUnsignedGT); }
+ ASMJIT_INLINE This& cond_unsigned_ge() noexcept { return cond(Cond::kUnsignedGE); }
+
+
+ //! \}
+
+ //! \name General Purpose Instructions
+ //! \{
+
+ ASMJIT_INST_3x(adc, Adc, Gp, Gp, Gp)
+ ASMJIT_INST_3x(adcs, Adcs, Gp, Gp, Gp)
+
+ ASMJIT_INST_3x(add, Add, Gp, Gp, Gp)
+ ASMJIT_INST_4x(add, Add, Gp, Gp, Gp, Imm)
+ ASMJIT_INST_3x(add, Add, Gp, Gp, Imm)
+ ASMJIT_INST_4x(add, Add, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_3x(adds, Adds, Gp, Gp, Gp)
+ ASMJIT_INST_3x(adds, Adds, Gp, Gp, Imm)
+ ASMJIT_INST_4x(adds, Adds, Gp, Gp, Gp, Imm)
+ ASMJIT_INST_4x(adds, Adds, Gp, Gp, Imm, Imm)
+
+ ASMJIT_INST_2x(adr, Adr, Gp, Imm)
+ ASMJIT_INST_2x(adr, Adr, Gp, Label)
+ ASMJIT_INST_2x(adrp, Adrp, Gp, Imm)
+ ASMJIT_INST_2x(adrp, Adrp, Gp, Label)
+
+ ASMJIT_INST_3x(and_, And, Gp, Gp, Imm)
+ ASMJIT_INST_3x(and_, And, Gp, Gp, Gp)
+ ASMJIT_INST_4x(and_, And, Gp, Gp, Gp, Imm)
+ ASMJIT_INST_3x(ands, Ands, Gp, Gp, Imm)
+ ASMJIT_INST_3x(ands, Ands, Gp, Gp, Gp)
+ ASMJIT_INST_4x(ands, Ands, Gp, Gp, Gp, Imm)
+
+ ASMJIT_INST_3x(asr, Asr, Gp, Gp, Imm)
+ ASMJIT_INST_3x(asr, Asr, Gp, Gp, Gp)
+ ASMJIT_INST_3x(asrv, Asrv, Gp, Gp, Gp)
+
+ ASMJIT_INST_2x(at, At, Imm, Gp)
+
+ ASMJIT_INST_3x(bfc, Bfc, Gp, Imm, Imm)
+ ASMJIT_INST_4x(bfi, Bfi, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_4x(bfm, Bfm, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_4x(bfxil, Bfxil, Gp, Gp, Imm, Imm)
+
+ ASMJIT_INST_3x(bic, Bic, Gp, Gp, Gp);
+ ASMJIT_INST_4x(bic, Bic, Gp, Gp, Gp, Imm);
+ ASMJIT_INST_3x(bics, Bics, Gp, Gp, Gp);
+ ASMJIT_INST_4x(bics, Bics, Gp, Gp, Gp, Imm);
+
+ ASMJIT_INST_1x(brk, Brk, Imm)
+
+ ASMJIT_INST_4x(ccmn, Ccmn, Gp, Gp, Imm, Imm);
+ ASMJIT_INST_4x(ccmn, Ccmn, Gp, Imm, Imm, Imm);
+ ASMJIT_INST_4x(ccmp, Ccmp, Gp, Gp, Imm, Imm);
+ ASMJIT_INST_4x(ccmp, Ccmp, Gp, Imm, Imm, Imm);
+
+ ASMJIT_INST_3x(cinc, Cinc, Gp, Gp, Imm);
+ ASMJIT_INST_3x(cinv, Cinv, Gp, Gp, Imm);
+
+ ASMJIT_INST_1x(clrex, Clrex, Imm)
+
+ ASMJIT_INST_2x(cls, Cls, Gp, Gp)
+ ASMJIT_INST_2x(clz, Clz, Gp, Gp)
+
+ ASMJIT_INST_2x(cmn, Cmn, Gp, Gp)
+ ASMJIT_INST_3x(cmn, Cmn, Gp, Gp, Imm)
+ ASMJIT_INST_2x(cmn, Cmn, Gp, Imm)
+ ASMJIT_INST_3x(cmn, Cmn, Gp, Imm, Imm)
+ ASMJIT_INST_2x(cmp, Cmp, Gp, Gp)
+ ASMJIT_INST_3x(cmp, Cmp, Gp, Gp, Imm)
+ ASMJIT_INST_2x(cmp, Cmp, Gp, Imm)
+ ASMJIT_INST_3x(cmp, Cmp, Gp, Imm, Imm)
+
+ ASMJIT_INST_3x(cneg, Cneg, Gp, Gp, Imm);
+
+ ASMJIT_INST_4x(csel, Csel, Gp, Gp, Gp, Imm);
+ ASMJIT_INST_2x(cset, Cset, Gp, Imm);
+ ASMJIT_INST_2x(csetm, Csetm, Gp, Imm);
+
+ ASMJIT_INST_4x(csinc, Csinc, Gp, Gp, Gp, Imm);
+ ASMJIT_INST_4x(csinv, Csinv, Gp, Gp, Gp, Imm);
+ ASMJIT_INST_4x(csneg, Csneg, Gp, Gp, Gp, Imm);
+
+ ASMJIT_INST_2x(dc, Dc, Imm, Gp)
+ ASMJIT_INST_1x(dmb, Dmb, Imm)
+ ASMJIT_INST_1x(dsb, Dsb, Imm)
+ ASMJIT_INST_0x(drps, Drps)
+
+ ASMJIT_INST_3x(eon, Eon, Gp, Gp, Gp)
+ ASMJIT_INST_4x(eon, Eon, Gp, Gp, Gp, Imm)
+
+ ASMJIT_INST_3x(eor, Eor, Gp, Gp, Imm)
+ ASMJIT_INST_3x(eor, Eor, Gp, Gp, Gp)
+ ASMJIT_INST_4x(eor, Eor, Gp, Gp, Gp, Imm)
+
+ ASMJIT_INST_0x(eret, Eret)
+ ASMJIT_INST_0x(esb, Esb)
+
+ ASMJIT_INST_4x(extr, Extr, Gp, Gp, Gp, Imm)
+
+ ASMJIT_INST_1x(hlt, Hlt, Imm)
+ ASMJIT_INST_1x(hvc, Hvc, Imm)
+ ASMJIT_INST_2x(ic, Ic, Imm, Gp)
+ ASMJIT_INST_1x(isb, Isb, Imm)
+
+ ASMJIT_INST_3x(lsl, Lsl, Gp, Gp, Imm)
+ ASMJIT_INST_3x(lsl, Lsl, Gp, Gp, Gp)
+ ASMJIT_INST_3x(lslv, Lslv, Gp, Gp, Gp)
+
+ ASMJIT_INST_3x(lsr, Lsr, Gp, Gp, Imm)
+ ASMJIT_INST_3x(lsr, Lsr, Gp, Gp, Gp)
+ ASMJIT_INST_3x(lsrv, Lsrv, Gp, Gp, Gp)
+
+ ASMJIT_INST_4x(madd, Madd, Gp, Gp, Gp, Gp)
+ ASMJIT_INST_3x(mneg, Mneg, Gp, Gp, Gp)
+
+ ASMJIT_INST_2x(mov, Mov, Gp, Gp)
+ ASMJIT_INST_2x(mov, Mov, Gp, Imm)
+ ASMJIT_INST_2x(movk, Movk, Gp, Imm)
+ ASMJIT_INST_3x(movk, Movk, Gp, Imm, Imm)
+ ASMJIT_INST_2x(movn, Movn, Gp, Imm)
+ ASMJIT_INST_3x(movn, Movn, Gp, Imm, Imm)
+ ASMJIT_INST_2x(movz, Movz, Gp, Imm)
+ ASMJIT_INST_3x(movz, Movz, Gp, Imm, Imm)
+
+ ASMJIT_INST_2x(mrs, Mrs, Gp, Imm)
+ ASMJIT_INST_2x(msr, Msr, Imm, Gp)
+ ASMJIT_INST_2x(msr, Msr, Imm, Imm)
+
+ ASMJIT_INST_4x(msub, Msub, Gp, Gp, Gp, Gp)
+ ASMJIT_INST_3x(mul, Mul, Gp, Gp, Gp)
+
+ ASMJIT_INST_2x(mvn, Mvn, Gp, Gp)
+ ASMJIT_INST_3x(mvn, Mvn, Gp, Gp, Imm)
+
+ ASMJIT_INST_2x(neg, Neg, Gp, Gp)
+ ASMJIT_INST_3x(neg, Neg, Gp, Gp, Imm)
+ ASMJIT_INST_2x(negs, Negs, Gp, Gp)
+ ASMJIT_INST_3x(negs, Negs, Gp, Gp, Imm)
+
+ ASMJIT_INST_2x(ngc, Ngc, Gp, Gp)
+ ASMJIT_INST_2x(ngcs, Ngcs, Gp, Gp)
+
+ ASMJIT_INST_3x(orn, Orn, Gp, Gp, Gp)
+ ASMJIT_INST_4x(orn, Orn, Gp, Gp, Gp, Imm)
+
+ ASMJIT_INST_3x(orr, Orr, Gp, Gp, Imm)
+ ASMJIT_INST_3x(orr, Orr, Gp, Gp, Gp)
+ ASMJIT_INST_4x(orr, Orr, Gp, Gp, Gp, Imm)
+
+ ASMJIT_INST_2x(rbit, Rbit, Gp, Gp)
+ ASMJIT_INST_1x(ret, Ret, Gp)
+
+ ASMJIT_INST_2x(rev, Rev, Gp, Gp)
+ ASMJIT_INST_2x(rev16, Rev16, Gp, Gp)
+ ASMJIT_INST_2x(rev32, Rev32, Gp, Gp)
+ ASMJIT_INST_2x(rev64, Rev64, Gp, Gp)
+
+ ASMJIT_INST_3x(ror, Ror, Gp, Gp, Imm)
+ ASMJIT_INST_3x(ror, Ror, Gp, Gp, Gp)
+ ASMJIT_INST_3x(rorv, Rorv, Gp, Gp, Gp)
+
+ ASMJIT_INST_3x(sbc, Sbc, Gp, Gp, Gp)
+ ASMJIT_INST_3x(sbcs, Sbcs, Gp, Gp, Gp)
+
+ ASMJIT_INST_4x(sbfiz, Sbfiz, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_4x(sbfm, Sbfm, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_4x(sbfx, Sbfx, Gp, Gp, Imm, Imm)
+
+ ASMJIT_INST_3x(sdiv, Sdiv, Gp, Gp, Gp)
+
+ ASMJIT_INST_4x(smaddl, Smaddl, Gp, Gp, Gp, Gp)
+ ASMJIT_INST_1x(smc, Smc, Imm)
+ ASMJIT_INST_3x(smnegl, Smnegl, Gp, Gp, Gp)
+ ASMJIT_INST_4x(smsubl, Smsubl, Gp, Gp, Gp, Gp)
+ ASMJIT_INST_3x(smulh, Smulh, Gp, Gp, Gp)
+ ASMJIT_INST_3x(smull, Smull, Gp, Gp, Gp)
+
+ ASMJIT_INST_3x(sub, Sub, Gp, Gp, Gp)
+ ASMJIT_INST_4x(sub, Sub, Gp, Gp, Gp, Imm)
+ ASMJIT_INST_3x(sub, Sub, Gp, Gp, Imm)
+ ASMJIT_INST_4x(sub, Sub, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_3x(subs, Subs, Gp, Gp, Gp)
+ ASMJIT_INST_4x(subs, Subs, Gp, Gp, Gp, Imm)
+ ASMJIT_INST_3x(subs, Subs, Gp, Gp, Imm)
+ ASMJIT_INST_4x(subs, Subs, Gp, Gp, Imm, Imm)
+
+ ASMJIT_INST_1x(svc, Svc, Imm)
+
+ ASMJIT_INST_2x(sxtb, Sxtb, Gp, Gp)
+ ASMJIT_INST_2x(sxth, Sxth, Gp, Gp)
+ ASMJIT_INST_2x(sxtw, Sxtw, Gp, Gp)
+
+ ASMJIT_INST_4x(sys, Sys, Imm, Imm, Imm, Imm)
+ ASMJIT_INST_5x(sys, Sys, Imm, Imm, Imm, Imm, Gp)
+
+ ASMJIT_INST_2x(tlbi, Tlbi, Imm, Gp)
+ ASMJIT_INST_2x(tst, Tst, Gp, Imm)
+ ASMJIT_INST_2x(tst, Tst, Gp, Gp)
+ ASMJIT_INST_3x(tst, Tst, Gp, Gp, Imm)
+
+ ASMJIT_INST_3x(udiv, Udiv, Gp, Gp, Gp)
+
+ ASMJIT_INST_4x(ubfiz, Ubfiz, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_4x(ubfm, Ubfm, Gp, Gp, Imm, Imm)
+ ASMJIT_INST_4x(ubfx, Ubfx, Gp, Gp, Imm, Imm)
+
+ ASMJIT_INST_4x(umaddl, Umaddl, Gp, Gp, Gp, Gp)
+ ASMJIT_INST_3x(umnegl, Umnegl, Gp, Gp, Gp)
+ ASMJIT_INST_4x(umsubl, Umsubl, Gp, Gp, Gp, Gp)
+ ASMJIT_INST_3x(umull, Umull, Gp, Gp, Gp)
+ ASMJIT_INST_3x(umulh, Umulh, Gp, Gp, Gp)
+
+ ASMJIT_INST_2x(uxtb, Uxtb, Gp, Gp)
+ ASMJIT_INST_2x(uxth, Uxth, Gp, Gp)
+
+ ASMJIT_INST_0x(csdb, Csdb)
+ ASMJIT_INST_1x(dcps1, Dcps1, Imm)
+ ASMJIT_INST_1x(dcps2, Dcps2, Imm)
+ ASMJIT_INST_1x(dcps3, Dcps3, Imm)
+ ASMJIT_INST_0x(dgh, Dgh)
+ ASMJIT_INST_0x(pssbb, Pssbb)
+ ASMJIT_INST_0x(ssbb, Ssbb)
+ ASMJIT_INST_1x(udf, Udf, Imm)
+ ASMJIT_INST_1x(setf8, Setf8, Gp)
+ ASMJIT_INST_1x(setf16, Setf16, Gp)
+
+ //! \}
+
+ //! \name ARMv8.4 Instructions
+ //! \{
+
+ ASMJIT_INST_0x(cfinv, Cfinv)
+
+ //! \}
+
+ //! \name ARMv8.5 Instructions
+ //! \{
+
+ ASMJIT_INST_0x(axflag, Axflag)
+ ASMJIT_INST_0x(xaflag, Xaflag)
+
+ //! \}
+
+ //! \name Branch Instructions
+ //! \{
+
+ ASMJIT_INST_1x(b, B, Imm)
+ ASMJIT_INST_1x(b, B, Label)
+ ASMJIT_INST_1x(bl, Bl, Imm)
+ ASMJIT_INST_1x(bl, Bl, Label)
+ ASMJIT_INST_1x(blr, Blr, Gp)
+ ASMJIT_INST_1x(br, Br, Gp)
+ ASMJIT_INST_2x(cbz, Cbz, Gp, Imm)
+ ASMJIT_INST_2x(cbz, Cbz, Gp, Label)
+ ASMJIT_INST_2x(cbnz, Cbnz, Gp, Imm)
+ ASMJIT_INST_2x(cbnz, Cbnz, Gp, Label)
+ ASMJIT_INST_3x(tbnz, Tbnz, Gp, Imm, Imm)
+ ASMJIT_INST_3x(tbnz, Tbnz, Gp, Imm, Label)
+ ASMJIT_INST_3x(tbz, Tbz, Gp, Imm, Imm)
+ ASMJIT_INST_3x(tbz, Tbz, Gp, Imm, Label)
+
+ //! \}
+
+ //! \name Load & Store Instructions
+ //! \{
+
+ ASMJIT_INST_3x(cas, Cas, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casa, Casa, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casab, Casab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casah, Casah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casal, Casal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casalb, Casalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casalh, Casalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casb, Casb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(cash, Cash, Gp, Gp, Mem)
+ ASMJIT_INST_3x(casl, Casl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(caslb, Caslb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(caslh, Caslh, Gp, Gp, Mem)
+
+ ASMJIT_INST_5x(casp, Casp, Gp, Gp, Gp, Gp, Mem)
+ ASMJIT_INST_5x(caspa, Caspa, Gp, Gp, Gp, Gp, Mem)
+ ASMJIT_INST_5x(caspal, Caspal, Gp, Gp, Gp, Gp, Mem)
+ ASMJIT_INST_5x(caspl, Caspl, Gp, Gp, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(ldadd, Ldadd, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldadda, Ldadda, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddab, Ldaddab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddah, Ldaddah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddal, Ldaddal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddalb, Ldaddalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddalh, Ldaddalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddb, Ldaddb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddh, Ldaddh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddl, Ldaddl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddlb, Ldaddlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaddlh, Ldaddlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_2x(ldar, Ldar, Gp, Mem)
+ ASMJIT_INST_2x(ldarb, Ldarb, Gp, Mem)
+ ASMJIT_INST_2x(ldarh, Ldarh, Gp, Mem)
+
+ ASMJIT_INST_2x(ldaxr, Ldaxr, Gp, Mem)
+ ASMJIT_INST_2x(ldaxrb, Ldaxrb, Gp, Mem)
+ ASMJIT_INST_2x(ldaxrh, Ldaxrh, Gp, Mem)
+
+ ASMJIT_INST_3x(ldclr, Ldclr, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclra, Ldclra, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclrab, Ldclrab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclrah, Ldclrah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclral, Ldclral, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclralb, Ldclralb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclralh, Ldclralh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclrb, Ldclrb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclrh, Ldclrh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclrl, Ldclrl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclrlb, Ldclrlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldclrlh, Ldclrlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(ldeor, Ldeor, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeora, Ldeora, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeorab, Ldeorab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeorah, Ldeorah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeoral, Ldeoral, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeoralb, Ldeoralb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeoralh, Ldeoralh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeorb, Ldeorb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeorh, Ldeorh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeorl, Ldeorl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeorlb, Ldeorlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldeorlh, Ldeorlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_2x(ldlar, Ldlar, Gp, Mem)
+ ASMJIT_INST_2x(ldlarb, Ldlarb, Gp, Mem)
+ ASMJIT_INST_2x(ldlarh, Ldlarh, Gp, Mem)
+
+ ASMJIT_INST_3x(ldnp, Ldnp, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(ldp, Ldp, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldpsw, Ldpsw, Gp, Gp, Mem)
+
+ ASMJIT_INST_2x(ldr, Ldr, Gp, Mem)
+ ASMJIT_INST_2x(ldrb, Ldrb, Gp, Mem)
+ ASMJIT_INST_2x(ldrh, Ldrh, Gp, Mem)
+ ASMJIT_INST_2x(ldrsb, Ldrsb, Gp, Mem)
+ ASMJIT_INST_2x(ldrsh, Ldrsh, Gp, Mem)
+ ASMJIT_INST_2x(ldrsw, Ldrsw, Gp, Mem)
+
+ ASMJIT_INST_3x(ldset, Ldset, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldseta, Ldseta, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetab, Ldsetab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetah, Ldsetah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetal, Ldsetal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetalb, Ldsetalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetalh, Ldsetalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetb, Ldsetb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldseth, Ldseth, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetl, Ldsetl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetlb, Ldsetlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsetlh, Ldsetlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(ldsmax, Ldsmax, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxa, Ldsmaxa, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxab, Ldsmaxab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxah, Ldsmaxah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxal, Ldsmaxal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxalb, Ldsmaxalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxalh, Ldsmaxalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxb, Ldsmaxb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxh, Ldsmaxh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxl, Ldsmaxl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxlb, Ldsmaxlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmaxlh, Ldsmaxlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(ldsmin, Ldsmin, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsmina, Ldsmina, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminab, Ldsminab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminah, Ldsminah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminal, Ldsminal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminalb, Ldsminalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminalh, Ldsminalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminb, Ldsminb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminh, Ldsminh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminl, Ldsminl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminlb, Ldsminlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldsminlh, Ldsminlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_2x(ldtr, Ldtr, Gp, Mem)
+ ASMJIT_INST_2x(ldtrb, Ldtrb, Gp, Mem)
+ ASMJIT_INST_2x(ldtrh, Ldtrh, Gp, Mem)
+ ASMJIT_INST_2x(ldtrsb, Ldtrsb, Gp, Mem)
+ ASMJIT_INST_2x(ldtrsh, Ldtrsh, Gp, Mem)
+ ASMJIT_INST_2x(ldtrsw, Ldtrsw, Gp, Mem)
+
+ ASMJIT_INST_3x(ldumax, Ldumax, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxa, Ldumaxa, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxab, Ldumaxab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxah, Ldumaxah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxal, Ldumaxal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxalb, Ldumaxalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxalh, Ldumaxalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxb, Ldumaxb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxh, Ldumaxh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxl, Ldumaxl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxlb, Ldumaxlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumaxlh, Ldumaxlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(ldumin, Ldumin, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldumina, Ldumina, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminab, Lduminab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminah, Lduminah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminal, Lduminal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminalb, Lduminalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminalh, Lduminalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminb, Lduminb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminh, Lduminh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminl, Lduminl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminlb, Lduminlb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(lduminlh, Lduminlh, Gp, Gp, Mem)
+
+ ASMJIT_INST_2x(ldur, Ldur, Gp, Mem)
+ ASMJIT_INST_2x(ldurb, Ldurb, Gp, Mem)
+ ASMJIT_INST_2x(ldurh, Ldurh, Gp, Mem)
+ ASMJIT_INST_2x(ldursb, Ldursb, Gp, Mem)
+ ASMJIT_INST_2x(ldursh, Ldursh, Gp, Mem)
+ ASMJIT_INST_2x(ldursw, Ldursw, Gp, Mem)
+
+ ASMJIT_INST_3x(ldxp, Ldxp, Gp, Gp, Mem)
+ ASMJIT_INST_3x(ldaxp, Ldaxp, Gp, Gp, Mem)
+
+ ASMJIT_INST_2x(ldxr, Ldxr, Gp, Mem)
+ ASMJIT_INST_2x(ldxrb, Ldxrb, Gp, Mem)
+ ASMJIT_INST_2x(ldxrh, Ldxrh, Gp, Mem)
+
+ ASMJIT_INST_2x(stadd, Stadd, Gp, Mem)
+ ASMJIT_INST_2x(staddb, Staddb, Gp, Mem)
+ ASMJIT_INST_2x(staddh, Staddh, Gp, Mem)
+ ASMJIT_INST_2x(staddl, Staddl, Gp, Mem)
+ ASMJIT_INST_2x(staddlb, Staddlb, Gp, Mem)
+ ASMJIT_INST_2x(staddlh, Staddlh, Gp, Mem)
+
+ ASMJIT_INST_2x(stclr, Stclr, Gp, Mem)
+ ASMJIT_INST_2x(stclrb, Stclrb, Gp, Mem)
+ ASMJIT_INST_2x(stclrh, Stclrh, Gp, Mem)
+ ASMJIT_INST_2x(stclrl, Stclrl, Gp, Mem)
+ ASMJIT_INST_2x(stclrlb, Stclrlb, Gp, Mem)
+ ASMJIT_INST_2x(stclrlh, Stclrlh, Gp, Mem)
+
+ ASMJIT_INST_2x(steor, Steor, Gp, Mem)
+ ASMJIT_INST_2x(steorb, Steorb, Gp, Mem)
+ ASMJIT_INST_2x(steorh, Steorh, Gp, Mem)
+ ASMJIT_INST_2x(steorl, Steorl, Gp, Mem)
+ ASMJIT_INST_2x(steorlb, Steorlb, Gp, Mem)
+ ASMJIT_INST_2x(steorlh, Steorlh, Gp, Mem)
+
+ ASMJIT_INST_2x(stllr, Stllr, Gp, Mem)
+ ASMJIT_INST_2x(stllrb, Stllrb, Gp, Mem)
+ ASMJIT_INST_2x(stllrh, Stllrh, Gp, Mem)
+
+ ASMJIT_INST_2x(stlr, Stllr, Gp, Mem)
+ ASMJIT_INST_2x(stlrb, Stllrb, Gp, Mem)
+ ASMJIT_INST_2x(stlrh, Stllrh, Gp, Mem)
+
+ ASMJIT_INST_3x(stlxr, Stlxr, Gp, Gp, Mem)
+ ASMJIT_INST_3x(stlxrb, Stlxrb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(stlxrh, Stlxrh, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(stnp, Stnp, Gp, Gp, Mem)
+ ASMJIT_INST_3x(stp, Stp, Gp, Gp, Mem)
+
+ ASMJIT_INST_2x(str, Str, Gp, Mem)
+ ASMJIT_INST_2x(strb, Strb, Gp, Mem)
+ ASMJIT_INST_2x(strh, Strh, Gp, Mem)
+
+ ASMJIT_INST_2x(stset, Stset, Gp, Mem)
+ ASMJIT_INST_2x(stsetb, Stsetb, Gp, Mem)
+ ASMJIT_INST_2x(stseth, Stseth, Gp, Mem)
+ ASMJIT_INST_2x(stsetl, Stsetl, Gp, Mem)
+ ASMJIT_INST_2x(stsetlb, Stsetlb, Gp, Mem)
+ ASMJIT_INST_2x(stsetlh, Stsetlh, Gp, Mem)
+
+ ASMJIT_INST_2x(stsmax, Stsmax, Gp, Mem)
+ ASMJIT_INST_2x(stsmaxb, Stsmaxb, Gp, Mem)
+ ASMJIT_INST_2x(stsmaxh, Stsmaxh, Gp, Mem)
+ ASMJIT_INST_2x(stsmaxl, Stsmaxl, Gp, Mem)
+ ASMJIT_INST_2x(stsmaxlb, Stsmaxlb, Gp, Mem)
+ ASMJIT_INST_2x(stsmaxlh, Stsmaxlh, Gp, Mem)
+
+ ASMJIT_INST_2x(stsmin, Stsmin, Gp, Mem)
+ ASMJIT_INST_2x(stsminb, Stsminb, Gp, Mem)
+ ASMJIT_INST_2x(stsminh, Stsminh, Gp, Mem)
+ ASMJIT_INST_2x(stsminl, Stsminl, Gp, Mem)
+ ASMJIT_INST_2x(stsminlb, Stsminlb, Gp, Mem)
+ ASMJIT_INST_2x(stsminlh, Stsminlh, Gp, Mem)
+
+ ASMJIT_INST_2x(sttr, Sttr, Gp, Mem)
+ ASMJIT_INST_2x(sttrb, Sttrb, Gp, Mem)
+ ASMJIT_INST_2x(sttrh, Sttrh, Gp, Mem)
+
+ ASMJIT_INST_2x(stumax, Stumax, Gp, Mem)
+ ASMJIT_INST_2x(stumaxb, Stumaxb, Gp, Mem)
+ ASMJIT_INST_2x(stumaxh, Stumaxh, Gp, Mem)
+ ASMJIT_INST_2x(stumaxl, Stumaxl, Gp, Mem)
+ ASMJIT_INST_2x(stumaxlb, Stumaxlb, Gp, Mem)
+ ASMJIT_INST_2x(stumaxlh, Stumaxlh, Gp, Mem)
+
+ ASMJIT_INST_2x(stumin, Stumin, Gp, Mem)
+ ASMJIT_INST_2x(stuminb, Stuminb, Gp, Mem)
+ ASMJIT_INST_2x(stuminh, Stuminh, Gp, Mem)
+ ASMJIT_INST_2x(stuminl, Stuminl, Gp, Mem)
+ ASMJIT_INST_2x(stuminlb, Stuminlb, Gp, Mem)
+ ASMJIT_INST_2x(stuminlh, Stuminlh, Gp, Mem)
+
+ ASMJIT_INST_2x(stur, Stur, Gp, Mem)
+ ASMJIT_INST_2x(sturb, Sturb, Gp, Mem)
+ ASMJIT_INST_2x(sturh, Sturh, Gp, Mem)
+
+ ASMJIT_INST_4x(stxp, Stxp, Gp, Gp, Gp, Mem)
+ ASMJIT_INST_4x(stlxp, Stlxp, Gp, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(stxr, Stxr, Gp, Gp, Mem)
+ ASMJIT_INST_3x(stxrb, Stxrb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(stxrh, Stxrh, Gp, Gp, Mem)
+
+ ASMJIT_INST_3x(swp, Swp, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpa, Swpa, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpab, Swpab, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpah, Swpah, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpal, Swpal, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpalb, Swpalb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpalh, Swpalh, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpb, Swpb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swph, Swph, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swpl, Swpl, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swplb, Swplb, Gp, Gp, Mem)
+ ASMJIT_INST_3x(swplh, Swplh, Gp, Gp, Mem)
+ //! \}
+
+ //! \name CRC Instructions (ARMv8.1-A, optional in ARMv8.0-A)
+ //! \{
+
+ ASMJIT_INST_3x(crc32b, Crc32b, Gp, Gp, Gp);
+ ASMJIT_INST_3x(crc32h, Crc32h, Gp, Gp, Gp);
+ ASMJIT_INST_3x(crc32w, Crc32w, Gp, Gp, Gp);
+ ASMJIT_INST_3x(crc32x, Crc32x, Gp, Gp, Gp);
+
+ ASMJIT_INST_3x(crc32cb, Crc32cb, Gp, Gp, Gp);
+ ASMJIT_INST_3x(crc32ch, Crc32ch, Gp, Gp, Gp);
+ ASMJIT_INST_3x(crc32cw, Crc32cw, Gp, Gp, Gp);
+ ASMJIT_INST_3x(crc32cx, Crc32cx, Gp, Gp, Gp);
+
+ //! \}
+
+ //! \name MTE Instructions
+ //! \{
+
+ ASMJIT_INST_2x(autda, Autda, Gp, Gp);
+ ASMJIT_INST_2x(autdb, Autdb, Gp, Gp);
+ ASMJIT_INST_1x(autdza, Autdza, Gp);
+ ASMJIT_INST_1x(autdzb, Autdzb, Gp);
+ ASMJIT_INST_2x(autia, Autia, Gp, Gp);
+ ASMJIT_INST_0x(autia1716, Autia1716);
+ ASMJIT_INST_0x(autiasp, Autiasp);
+ ASMJIT_INST_0x(autiaz, Autiaz);
+ ASMJIT_INST_2x(autib, Autib, Gp, Gp);
+ ASMJIT_INST_0x(autib1716, Autib1716);
+ ASMJIT_INST_0x(autibsp, Autibsp);
+ ASMJIT_INST_0x(autibz, Autibz);
+ ASMJIT_INST_1x(autiza, Autiza, Gp);
+ ASMJIT_INST_1x(autizb, Autizb, Gp);
+
+ ASMJIT_INST_3x(gmi, Gmi, Gp, Gp, Gp);
+
+ ASMJIT_INST_2x(cmpp, Cmpp, Gp, Gp);
+ ASMJIT_INST_4x(addg, Addg, Gp, Gp, Imm, Imm);
+
+ ASMJIT_INST_2x(ldg, Ldg, Gp, Mem)
+ ASMJIT_INST_2x(ldgm, Ldgm, Gp, Mem)
+ ASMJIT_INST_2x(ldraa, Ldraa, Gp, Mem)
+ ASMJIT_INST_2x(ldrab, Ldrab, Gp, Mem)
+
+ ASMJIT_INST_2x(pacda, Pacda, Gp, Gp);
+ ASMJIT_INST_2x(pacdb, Pacdb, Gp, Gp);
+ ASMJIT_INST_1x(pacdza, Pacdza, Gp);
+ ASMJIT_INST_1x(pacdzb, Pacdzb, Gp);
+ ASMJIT_INST_3x(pacga, Pacga, Gp, Gp, Gp);
+
+ ASMJIT_INST_3x(subp, Subp, Gp, Gp, Gp);
+ ASMJIT_INST_3x(subps, Subps, Gp, Gp, Gp);
+ ASMJIT_INST_4x(subg, Subg, Gp, Gp, Imm, Imm);
+
+ ASMJIT_INST_2x(st2g, St2g, Gp, Mem)
+ ASMJIT_INST_2x(stg, Stg, Gp, Mem)
+ ASMJIT_INST_3x(stgp, Stgp, Gp, Gp, Mem)
+ ASMJIT_INST_2x(stgm, Stgm, Gp, Mem)
+ ASMJIT_INST_2x(stzg, Stzg, Gp, Mem)
+ ASMJIT_INST_2x(stz2g, Stz2g, Gp, Mem)
+ ASMJIT_INST_2x(stzgm, Stzgm, Gp, Mem)
+
+ ASMJIT_INST_1x(xpacd, Xpacd, Gp);
+ ASMJIT_INST_1x(xpaci, Xpaci, Gp);
+ ASMJIT_INST_0x(xpaclri, Xpaclri);
+
+ //! \}
+
+ //! \name Hint Instructions
+ //! \{
+
+ ASMJIT_INST_1x(hint, Hint, Imm)
+ ASMJIT_INST_0x(nop, Nop)
+ ASMJIT_INST_0x(sev, Sev)
+ ASMJIT_INST_0x(sevl, Sevl)
+ ASMJIT_INST_0x(wfe, Wfe)
+ ASMJIT_INST_0x(wfi, Wfi)
+ ASMJIT_INST_0x(yield, Yield)
+
+ //! \}
+
+ //! \name SIMD & FP Instructions
+ //! \{
+
+ ASMJIT_INST_2x(abs, Abs_v, Vec, Vec);
+ ASMJIT_INST_3x(add, Add_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(addhn, Addhn_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(addhn2, Addhn2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(addp, Addp_v, Vec, Vec);
+ ASMJIT_INST_3x(addp, Addp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(addv, Addv_v, Vec, Vec);
+ ASMJIT_INST_3x(and_, And_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(bic, Bic_v, Vec, Imm);
+ ASMJIT_INST_3x(bic, Bic_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(bic, Bic_v, Vec, Imm, Imm);
+ ASMJIT_INST_3x(bif, Bif_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(bit, Bit_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(bsl, Bsl_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(cls, Cls_v, Vec, Vec);
+ ASMJIT_INST_2x(clz, Clz_v, Vec, Vec);
+ ASMJIT_INST_3x(cmeq, Cmeq_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(cmeq, Cmeq_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(cmge, Cmge_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(cmge, Cmge_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(cmgt, Cmgt_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(cmgt, Cmgt_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(cmhi, Cmhi_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(cmhs, Cmhs_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(cmle, Cmle_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(cmlt, Cmlt_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(cmtst, Cmtst_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(cnt, Cnt_v, Vec, Vec);
+ ASMJIT_INST_2x(dup, Dup_v, Vec, Gp);
+ ASMJIT_INST_2x(dup, Dup_v, Vec, Vec);
+ ASMJIT_INST_3x(eor, Eor_v, Vec, Vec, Vec);
+ ASMJIT_INST_4x(ext, Ext_v, Vec, Vec, Vec, Imm);
+ ASMJIT_INST_3x(fabd, Fabd_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fabs, Fabs_v, Vec, Vec);
+ ASMJIT_INST_3x(facge, Facge_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(facgt, Facgt_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fadd, Fadd_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(faddp, Faddp_v, Vec, Vec);
+ ASMJIT_INST_3x(faddp, Faddp_v, Vec, Vec, Vec);
+ ASMJIT_INST_4x(fccmp, Fccmp_v, Vec, Vec, Imm, Imm);
+ ASMJIT_INST_4x(fccmpe, Fccmpe_v, Vec, Vec, Imm, Imm);
+ ASMJIT_INST_3x(fcmeq, Fcmeq_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fcmeq, Fcmeq_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(fcmge, Fcmge_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fcmge, Fcmge_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(fcmgt, Fcmgt_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fcmgt, Fcmgt_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(fcmle, Fcmle_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(fcmlt, Fcmlt_v, Vec, Vec, Imm);
+ ASMJIT_INST_2x(fcmp, Fcmp_v, Vec, Vec);
+ ASMJIT_INST_2x(fcmp, Fcmp_v, Vec, Imm);
+ ASMJIT_INST_2x(fcmpe, Fcmpe_v, Vec, Vec);
+ ASMJIT_INST_2x(fcmpe, Fcmpe_v, Vec, Imm);
+ ASMJIT_INST_4x(fcsel, Fcsel_v, Vec, Vec, Vec, Imm);
+ ASMJIT_INST_2x(fcvt, Fcvt_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtas, Fcvtas_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtas, Fcvtas_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtau, Fcvtau_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtau, Fcvtau_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtl, Fcvtl_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtl2, Fcvtl2_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtms, Fcvtms_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtms, Fcvtms_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtmu, Fcvtmu_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtmu, Fcvtmu_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtn, Fcvtn_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtn2, Fcvtn2_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtns, Fcvtns_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtns, Fcvtns_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtnu, Fcvtnu_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtnu, Fcvtnu_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtps, Fcvtps_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtps, Fcvtps_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtpu, Fcvtpu_v, Gp, Vec);
+ ASMJIT_INST_2x(fcvtpu, Fcvtpu_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtxn, Fcvtxn_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtxn2, Fcvtxn2_v, Vec, Vec);
+ ASMJIT_INST_2x(fcvtzs, Fcvtzs_v, Gp, Vec);
+ ASMJIT_INST_3x(fcvtzs, Fcvtzs_v, Gp, Vec, Imm);
+ ASMJIT_INST_2x(fcvtzs, Fcvtzs_v, Vec, Vec);
+ ASMJIT_INST_3x(fcvtzs, Fcvtzs_v, Vec, Vec, Imm);
+ ASMJIT_INST_2x(fcvtzu, Fcvtzu_v, Gp, Vec);
+ ASMJIT_INST_3x(fcvtzu, Fcvtzu_v, Gp, Vec, Imm);
+ ASMJIT_INST_2x(fcvtzu, Fcvtzu_v, Vec, Vec);
+ ASMJIT_INST_3x(fcvtzu, Fcvtzu_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(fdiv, Fdiv_v, Vec, Vec, Vec);
+ ASMJIT_INST_4x(fmadd, Fmadd_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmax, Fmax_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmaxnm, Fmaxnm_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmaxnmp, Fmaxnmp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fmaxnmp, Fmaxnmp_v, Vec, Vec);
+ ASMJIT_INST_2x(fmaxnmv, Fmaxnmv_v, Vec, Vec);
+ ASMJIT_INST_3x(fmaxp, Fmaxp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fmaxp, Fmaxp_v, Vec, Vec);
+ ASMJIT_INST_2x(fmaxv, Fmaxv_v, Vec, Vec);
+ ASMJIT_INST_3x(fmin, Fmin_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fminnm, Fminnm_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fminnmv, Fminnmv_v, Vec, Vec);
+ ASMJIT_INST_3x(fminnmp, Fminnmp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fminnmp, Fminnmp_v, Vec, Vec);
+ ASMJIT_INST_2x(fminp, Fminp_v, Vec, Vec);
+ ASMJIT_INST_3x(fminp, Fminp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fminv, Fminv_v, Vec, Vec);
+ ASMJIT_INST_3x(fmla, Fmla_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmls, Fmls_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fmov, Fmov_v, Gp, Vec);
+ ASMJIT_INST_2x(fmov, Fmov_v, Vec, Gp);
+ ASMJIT_INST_2x(fmov, Fmov_v, Vec, Vec);
+ ASMJIT_INST_2x(fmov, Fmov_v, Vec, Imm);
+ ASMJIT_INST_4x(fmsub, Fmsub_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmul, Fmul_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmulx, Fmulx_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fneg, Fneg_v, Vec, Vec);
+ ASMJIT_INST_4x(fnmadd, Fnmadd_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_4x(fnmsub, Fnmsub_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fnmul, Fnmul_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(frecpe, Frecpe_v, Vec, Vec);
+ ASMJIT_INST_3x(frecps, Frecps_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(frecpx, Frecpx_v, Vec, Vec);
+ ASMJIT_INST_2x(frint32x, Frint32x_v, Vec, Vec);
+ ASMJIT_INST_2x(frint32z, Frint32z_v, Vec, Vec);
+ ASMJIT_INST_2x(frint64x, Frint64x_v, Vec, Vec);
+ ASMJIT_INST_2x(frint64z, Frint64z_v, Vec, Vec);
+ ASMJIT_INST_2x(frinta, Frinta_v, Vec, Vec);
+ ASMJIT_INST_2x(frinti, Frinti_v, Vec, Vec);
+ ASMJIT_INST_2x(frintm, Frintm_v, Vec, Vec);
+ ASMJIT_INST_2x(frintn, Frintn_v, Vec, Vec);
+ ASMJIT_INST_2x(frintp, Frintp_v, Vec, Vec);
+ ASMJIT_INST_2x(frintx, Frintx_v, Vec, Vec);
+ ASMJIT_INST_2x(frintz, Frintz_v, Vec, Vec);
+ ASMJIT_INST_2x(frsqrte, Frsqrte_v, Vec, Vec);
+ ASMJIT_INST_3x(frsqrts, Frsqrts_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(fsqrt, Fsqrt_v, Vec, Vec);
+ ASMJIT_INST_3x(fsub, Fsub_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(ins, Ins_v, Vec, Gp);
+ ASMJIT_INST_2x(ins, Ins_v, Vec, Vec);
+ ASMJIT_INST_2x(ld1, Ld1_v, Vec, Mem);
+ ASMJIT_INST_3x(ld1, Ld1_v, Vec, Vec, Mem);
+ ASMJIT_INST_4x(ld1, Ld1_v, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_5x(ld1, Ld1_v, Vec, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_2x(ld1r, Ld1r_v, Vec, Mem);
+ ASMJIT_INST_3x(ld2, Ld2_v, Vec, Vec, Mem);
+ ASMJIT_INST_3x(ld2r, Ld2r_v, Vec, Vec, Mem);
+ ASMJIT_INST_4x(ld3, Ld3_v, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_4x(ld3r, Ld3r_v, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_5x(ld4, Ld4_v, Vec, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_5x(ld4r, Ld4r_v, Vec, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_3x(ldnp, Ldnp_v, Vec, Vec, Mem);
+ ASMJIT_INST_3x(ldp, Ldp_v, Vec, Vec, Mem);
+ ASMJIT_INST_2x(ldr, Ldr_v, Vec, Mem);
+ ASMJIT_INST_2x(ldur, Ldur_v, Vec, Mem);
+ ASMJIT_INST_3x(mla, Mla_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(mls, Mls_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(mov, Mov_v, Vec, Vec);
+ ASMJIT_INST_2x(mov, Mov_v, Gp, Vec);
+ ASMJIT_INST_2x(mov, Mov_v, Vec, Gp);
+ ASMJIT_INST_2x(movi, Movi_v, Vec, Imm);
+ ASMJIT_INST_3x(movi, Movi_v, Vec, Imm, Imm);
+ ASMJIT_INST_3x(mul, Mul_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(mvn, Mvn_v, Vec, Vec);
+ ASMJIT_INST_2x(mvni, Mvni_v, Vec, Imm);
+ ASMJIT_INST_3x(mvni, Mvni_v, Vec, Imm, Imm);
+ ASMJIT_INST_2x(neg, Neg_v, Vec, Vec);
+ ASMJIT_INST_2x(not_, Not_v, Vec, Vec);
+ ASMJIT_INST_3x(orn, Orn_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(orr, Orr_v, Vec, Imm);
+ ASMJIT_INST_3x(orr, Orr_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(orr, Orr_v, Vec, Imm, Imm);
+ ASMJIT_INST_3x(pmul, Pmul_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(pmull, Pmull_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(pmull2, Pmull2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(raddhn, Raddhn_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(raddhn2, Raddhn2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(rbit, Rbit_v, Vec, Vec);
+ ASMJIT_INST_2x(rev16, Rev16_v, Vec, Vec);
+ ASMJIT_INST_2x(rev32, Rev32_v, Vec, Vec);
+ ASMJIT_INST_2x(rev64, Rev64_v, Vec, Vec);
+ ASMJIT_INST_3x(rshrn, Rshrn_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(rshrn2, Rshrn2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(rsubhn, Rsubhn_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(rsubhn2, Rsubhn2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(saba, Saba_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sabal, Sabal_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sabal2, Sabal2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sabd, Sabd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sabdl, Sabdl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sabdl2, Sabdl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sadalp, Sadalp_v, Vec, Vec);
+ ASMJIT_INST_3x(saddl, Saddl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(saddl2, Saddl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(saddlp, Saddlp_v, Vec, Vec);
+ ASMJIT_INST_2x(saddlv, Saddlv_v, Vec, Vec);
+ ASMJIT_INST_3x(saddw, Saddw_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(saddw2, Saddw2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(scvtf, Scvtf_v, Vec, Gp);
+ ASMJIT_INST_3x(scvtf, Scvtf_v, Vec, Gp, Imm);
+ ASMJIT_INST_2x(scvtf, Scvtf_v, Vec, Vec);
+ ASMJIT_INST_3x(scvtf, Scvtf_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(shadd, Shadd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(shl, Shl_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(shll, Shll_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(shll2, Shll2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(shrn, Shrn_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(shrn2, Shrn2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(shsub, Shsub_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sli, Sli_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(smax, Smax_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(smaxp, Smaxp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(smaxv, Smaxv_v, Vec, Vec);
+ ASMJIT_INST_3x(smin, Smin_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sminp, Sminp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sminv, Sminv_v, Vec, Vec);
+ ASMJIT_INST_3x(smlal, Smlal_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(smlal2, Smlal2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(smlsl, Smlsl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(smlsl2, Smlsl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(smov, Smov_v, Gp, Vec);
+ ASMJIT_INST_3x(smull, Smull_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(smull2, Smull2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sqabs, Sqabs_v, Vec, Vec);
+ ASMJIT_INST_3x(sqadd, Sqadd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqdmlal, Sqdmlal_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqdmlal2, Sqdmlal2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqdmlsl, Sqdmlsl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqdmlsl2, Sqdmlsl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqdmulh, Sqdmulh_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqdmull, Sqdmull_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqdmull2, Sqdmull2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sqneg, Sqneg_v, Vec, Vec);
+ ASMJIT_INST_3x(sqrdmulh, Sqrdmulh_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqrshl, Sqrshl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqrshrn, Sqrshrn_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqrshrn2, Sqrshrn2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqrshrun, Sqrshrun_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqrshrun2, Sqrshrun2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqshl, Sqshl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqshl, Sqshl_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqshlu, Sqshlu_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqshrn, Sqshrn_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqshrn2, Sqshrn2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqshrun, Sqshrun_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqshrun2, Sqshrun2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sqsub, Sqsub_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sqxtn, Sqxtn_v, Vec, Vec);
+ ASMJIT_INST_2x(sqxtn2, Sqxtn2_v, Vec, Vec);
+ ASMJIT_INST_2x(sqxtun, Sqxtun_v, Vec, Vec);
+ ASMJIT_INST_2x(sqxtun2, Sqxtun2_v, Vec, Vec);
+ ASMJIT_INST_3x(srhadd, Srhadd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sri, Sri_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(srshl, Srshl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(srshr, Srshr_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(srsra, Srsra_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sshl, Sshl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sshll, Sshll_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sshll2, Sshll2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(sshr, Sshr_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(ssra, Ssra_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(ssubl, Ssubl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(ssubl2, Ssubl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(ssubw, Ssubw_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(ssubw2, Ssubw2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(st1, St1_v, Vec, Mem);
+ ASMJIT_INST_3x(st1, St1_v, Vec, Vec, Mem);
+ ASMJIT_INST_4x(st1, St1_v, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_5x(st1, St1_v, Vec, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_3x(st2, St2_v, Vec, Vec, Mem);
+ ASMJIT_INST_4x(st3, St3_v, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_5x(st4, St4_v, Vec, Vec, Vec, Vec, Mem);
+ ASMJIT_INST_3x(stnp, Stnp_v, Vec, Vec, Mem);
+ ASMJIT_INST_3x(stp, Stp_v, Vec, Vec, Mem);
+ ASMJIT_INST_2x(str, Str_v, Vec, Mem);
+ ASMJIT_INST_2x(stur, Stur_v, Vec, Mem);
+ ASMJIT_INST_3x(sub, Sub_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(subhn, Subhn_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(subhn2, Subhn2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(suqadd, Suqadd_v, Vec, Vec);
+ ASMJIT_INST_2x(sxtl, Sxtl_v, Vec, Vec);
+ ASMJIT_INST_2x(sxtl2, Sxtl2_v, Vec, Vec);
+ ASMJIT_INST_3x(tbl, Tbl_v, Vec, Vec, Vec);
+ ASMJIT_INST_4x(tbl, Tbl_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_5x(tbl, Tbl_v, Vec, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_6x(tbl, Tbl_v, Vec, Vec, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_3x(tbx, Tbx_v, Vec, Vec, Vec);
+ ASMJIT_INST_4x(tbx, Tbx_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_5x(tbx, Tbx_v, Vec, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_6x(tbx, Tbx_v, Vec, Vec, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_3x(trn1, Trn1_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(trn2, Trn2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uaba, Uaba_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uabal, Uabal_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uabal2, Uabal2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uabd, Uabd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uabdl, Uabdl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uabdl2, Uabdl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(uadalp, Uadalp_v, Vec, Vec);
+ ASMJIT_INST_3x(uaddl, Uaddl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uaddl2, Uaddl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(uaddlp, Uaddlp_v, Vec, Vec);
+ ASMJIT_INST_2x(uaddlv, Uaddlv_v, Vec, Vec);
+ ASMJIT_INST_3x(uaddw, Uaddw_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uaddw2, Uaddw2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(ucvtf, Ucvtf_v, Vec, Gp);
+ ASMJIT_INST_3x(ucvtf, Ucvtf_v, Vec, Gp, Imm);
+ ASMJIT_INST_2x(ucvtf, Ucvtf_v, Vec, Vec);
+ ASMJIT_INST_3x(ucvtf, Ucvtf_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(uhadd, Uhadd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uhsub, Uhsub_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(umax, Umax_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(umaxp, Umaxp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(umaxv, Umaxv_v, Vec, Vec);
+ ASMJIT_INST_3x(umin, Umin_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uminp, Uminp_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(uminv, Uminv_v, Vec, Vec);
+ ASMJIT_INST_3x(umlal, Umlal_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(umlal2, Umlal2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(umlsl, Umlsl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(umlsl2, Umlsl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(umov, Umov_v, Gp, Vec);
+ ASMJIT_INST_3x(umull, Umull_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(umull2, Umull2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uqadd, Uqadd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uqrshl, Uqrshl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uqrshl, Uqrshl_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(uqrshrn, Uqrshrn_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(uqrshrn2, Uqrshrn2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(uqshl, Uqshl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uqshl, Uqshl_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(uqshrn, Uqshrn_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(uqshrn2, Uqshrn2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(uqsub, Uqsub_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(uqxtn, Uqxtn_v, Vec, Vec);
+ ASMJIT_INST_2x(uqxtn2, Uqxtn2_v, Vec, Vec);
+ ASMJIT_INST_2x(urecpe, Urecpe_v, Vec, Vec);
+ ASMJIT_INST_3x(urhadd, Urhadd_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(urshl, Urshl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(urshr, Urshr_v, Vec, Vec, Imm);
+ ASMJIT_INST_2x(ursqrte, Ursqrte_v, Vec, Vec);
+ ASMJIT_INST_3x(ursra, Ursra_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(ushl, Ushl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(ushll, Ushll_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(ushll2, Ushll2_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(ushr, Ushr_v, Vec, Vec, Imm);
+ ASMJIT_INST_2x(usqadd, Usqadd_v, Vec, Vec);
+ ASMJIT_INST_3x(usra, Usra_v, Vec, Vec, Imm);
+ ASMJIT_INST_3x(usubl, Usubl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(usubl2, Usubl2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(usubw, Usubw_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(usubw2, Usubw2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(uxtl, Uxtl_v, Vec, Vec);
+ ASMJIT_INST_2x(uxtl2, Uxtl2_v, Vec, Vec);
+ ASMJIT_INST_3x(uzp1, Uzp1_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(uzp2, Uzp2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(xtn, Xtn_v, Vec, Vec);
+ ASMJIT_INST_2x(xtn2, Xtn2_v, Vec, Vec);
+ ASMJIT_INST_3x(zip1, Zip1_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(zip2, Zip2_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name AES Instructions
+ //! \{
+
+ ASMJIT_INST_2x(aesd, Aesd_v, Vec, Vec);
+ ASMJIT_INST_2x(aese, Aese_v, Vec, Vec);
+ ASMJIT_INST_2x(aesimc, Aesimc_v, Vec, Vec);
+ ASMJIT_INST_2x(aesmc, Aesmc_v, Vec, Vec);
+
+ //! \}
+
+ //! \name SHA1 Instructions
+ //! \{
+
+ ASMJIT_INST_3x(sha1c, Sha1c_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sha1h, Sha1h_v, Vec, Vec);
+ ASMJIT_INST_3x(sha1m, Sha1m_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sha1p, Sha1p_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sha1su0, Sha1su0_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sha1su1, Sha1su1_v, Vec, Vec);
+
+ //! \}
+
+ //! \name SHA2 Instructions
+ //! \{
+
+ ASMJIT_INST_3x(sha256h, Sha256h_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sha256h2, Sha256h2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sha256su0, Sha256su0_v, Vec, Vec);
+ ASMJIT_INST_3x(sha256su1, Sha256su1_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name RDMA Instructions (ARMv8.1-A)
+ //! \{
+
+ ASMJIT_INST_3x(sqrdmlah, Sqrdmlah_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sqrdmlsh, Sqrdmlsh_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name FCMA Instruction (ARMv8.3-A)
+ //! \{
+
+ ASMJIT_INST_4x(fcadd, Fcadd_v, Vec, Vec, Vec, Imm);
+ ASMJIT_INST_4x(fcmla, Fcmla_v, Vec, Vec, Vec, Imm);
+
+ //! \}
+
+ //! \name FJCVTZS Instruction (ARMv8.3-A)
+ //! \{
+
+ ASMJIT_INST_2x(fjcvtzs, Fjcvtzs_v, Gp, Vec);
+
+ //! \}
+
+ //! \name FP16FML Instructions (ARMv8.4-A, optional in ARMv8.2-A)
+ //! \{
+
+ ASMJIT_INST_3x(fmlal, Fmlal_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmlal2, Fmlal2_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmlsl, Fmlsl_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(fmlsl2, Fmlsl2_v, Vec, Vec, Vec);
+
+
+ //! \}
+
+ //! \name SHA3 Instructions (ARMv8.4-A, optional in ARMv8.2-A)
+ //! \{
+
+ ASMJIT_INST_4x(bcax, Bcax_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_4x(eor3, Eor3_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_3x(rax1, Rax1_v, Vec, Vec, Vec);
+ ASMJIT_INST_4x(xar, Xar_v, Vec, Vec, Vec, Imm);
+
+ //! \}
+
+ //! \name SHA512 Instructions (ARMv8.4-A)
+ //! \{
+
+ ASMJIT_INST_3x(sha512h, Sha512h_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sha512h2, Sha512h2_v, Vec, Vec, Vec);
+ ASMJIT_INST_2x(sha512su0, Sha512su0_v, Vec, Vec);
+ ASMJIT_INST_3x(sha512su1, Sha512su1_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name SM3 Instructions (ARMv8.4-A)
+ //! \{
+
+ ASMJIT_INST_3x(sm3partw1, Sm3partw1_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sm3partw2, Sm3partw2_v, Vec, Vec, Vec);
+ ASMJIT_INST_4x(sm3ss1, Sm3ss1_v, Vec, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sm3tt1a, Sm3tt1a_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sm3tt1b, Sm3tt1b_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sm3tt2a, Sm3tt2a_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sm3tt2b, Sm3tt2b_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name SM4 Instructions (ARMv8.4-A)
+ //! \{
+
+ ASMJIT_INST_2x(sm4e, Sm4e_v, Vec, Vec);
+ ASMJIT_INST_3x(sm4ekey, Sm4ekey_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name DOTPROD Instructions (ARMv8.4-A, optional in ARMv8.2-A)
+ //! \{
+
+ ASMJIT_INST_3x(sdot, Sdot_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(udot, Udot_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name BF16 Instructions (ARMv8.6-A)
+ //! \{
+
+ ASMJIT_INST_2x(bfcvt, Bfcvt_v, Vec, Vec);
+ ASMJIT_INST_2x(bfcvtn, Bfcvtn_v, Vec, Vec);
+ ASMJIT_INST_2x(bfcvtn2, Bfcvtn2_v, Vec, Vec);
+ ASMJIT_INST_3x(bfmlalb, Bfmlalb_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(bfmlalt, Bfmlalt_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(bfmmla, Bfmmla_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(bfdot, Bfdot_v, Vec, Vec, Vec);
+
+ //! \}
+
+ //! \name I8MM Instructions (ARMv8.6-A)
+ //! \{
+
+ ASMJIT_INST_3x(smmla, Smmla_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(sudot, Sudot_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(ummla, Ummla_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(usdot, Usdot_v, Vec, Vec, Vec);
+ ASMJIT_INST_3x(usmmla, Usmmla_v, Vec, Vec, Vec);
+
+ //! \}
+};
+
+// ============================================================================
+// [asmjit::a64::Emitter]
+// ============================================================================
+
+//! Emitter (ARM).
+//!
+//! \note This class cannot be instantiated, you can only cast to it and use
+//! it as emitter that emits to either `arm::Assembler`, `arm::Builder`, or
+//! `arm::Compiler` (use with caution with `arm::Compiler` as it requires virtual
+//! registers).
+class Emitter : public BaseEmitter, public EmitterExplicitT<Emitter> {
+ ASMJIT_NONCONSTRUCTIBLE(Emitter)
+};
+
+//! \}
+
+#undef ASMJIT_INST_0x
+#undef ASMJIT_INST_1x
+#undef ASMJIT_INST_2x
+#undef ASMJIT_INST_3x
+#undef ASMJIT_INST_4x
+#undef ASMJIT_INST_5x
+#undef ASMJIT_INST_6x
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_A64EMITTER_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64globals.h b/erts/emulator/asmjit/arm/a64globals.h
new file mode 100644
index 0000000000..32970eaa2a
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64globals.h
@@ -0,0 +1,1932 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64GLOBALS_H_INCLUDED
+#define ASMJIT_ARM_A64GLOBALS_H_INCLUDED
+
+#include "../arm/armglobals.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// a64 uses everything from arm namespace and adds into it.
+using namespace arm;
+
+//! \addtogroup asmjit_a64
+//! \{
+
+// ============================================================================
+// [asmjit::a64::Inst]
+// ============================================================================
+
+//! AArch64 instruction.
+//!
+//! \note Only used to hold ARM-specific enumerations and static functions.
+struct Inst : public BaseInst {
+ //! Instruction id.
+ enum Id : uint32_t {
+ // ${InstId:Begin}
+ kIdNone = 0,
+ kIdAdc,
+ kIdAdcs,
+ kIdAdd,
+ kIdAddg,
+ kIdAdds,
+ kIdAdr,
+ kIdAdrp,
+ kIdAnd,
+ kIdAnds,
+ kIdAsr,
+ kIdAsrv,
+ kIdAt,
+ kIdAutda,
+ kIdAutdza,
+ kIdAutdb,
+ kIdAutdzb,
+ kIdAutia,
+ kIdAutia1716,
+ kIdAutiasp,
+ kIdAutiaz,
+ kIdAutib,
+ kIdAutib1716,
+ kIdAutibsp,
+ kIdAutibz,
+ kIdAutiza,
+ kIdAutizb,
+ kIdAxflag,
+ kIdB,
+ kIdBfc,
+ kIdBfi,
+ kIdBfm,
+ kIdBfxil,
+ kIdBic,
+ kIdBics,
+ kIdBl,
+ kIdBlr,
+ kIdBr,
+ kIdBrk,
+ kIdCas,
+ kIdCasa,
+ kIdCasab,
+ kIdCasah,
+ kIdCasal,
+ kIdCasalb,
+ kIdCasalh,
+ kIdCasb,
+ kIdCash,
+ kIdCasl,
+ kIdCaslb,
+ kIdCaslh,
+ kIdCasp,
+ kIdCaspa,
+ kIdCaspal,
+ kIdCaspl,
+ kIdCbnz,
+ kIdCbz,
+ kIdCcmn,
+ kIdCcmp,
+ kIdCfinv,
+ kIdCinc,
+ kIdCinv,
+ kIdClrex,
+ kIdCls,
+ kIdClz,
+ kIdCmn,
+ kIdCmp,
+ kIdCmpp,
+ kIdCneg,
+ kIdCrc32b,
+ kIdCrc32cb,
+ kIdCrc32ch,
+ kIdCrc32cw,
+ kIdCrc32cx,
+ kIdCrc32h,
+ kIdCrc32w,
+ kIdCrc32x,
+ kIdCsdb,
+ kIdCsel,
+ kIdCset,
+ kIdCsetm,
+ kIdCsinc,
+ kIdCsinv,
+ kIdCsneg,
+ kIdDc,
+ kIdDcps1,
+ kIdDcps2,
+ kIdDcps3,
+ kIdDgh,
+ kIdDmb,
+ kIdDrps,
+ kIdDsb,
+ kIdEon,
+ kIdEor,
+ kIdEsb,
+ kIdExtr,
+ kIdEret,
+ kIdGmi,
+ kIdHint,
+ kIdHlt,
+ kIdHvc,
+ kIdIc,
+ kIdIsb,
+ kIdLdadd,
+ kIdLdadda,
+ kIdLdaddab,
+ kIdLdaddah,
+ kIdLdaddal,
+ kIdLdaddalb,
+ kIdLdaddalh,
+ kIdLdaddb,
+ kIdLdaddh,
+ kIdLdaddl,
+ kIdLdaddlb,
+ kIdLdaddlh,
+ kIdLdar,
+ kIdLdarb,
+ kIdLdarh,
+ kIdLdaxp,
+ kIdLdaxr,
+ kIdLdaxrb,
+ kIdLdaxrh,
+ kIdLdclr,
+ kIdLdclra,
+ kIdLdclrab,
+ kIdLdclrah,
+ kIdLdclral,
+ kIdLdclralb,
+ kIdLdclralh,
+ kIdLdclrb,
+ kIdLdclrh,
+ kIdLdclrl,
+ kIdLdclrlb,
+ kIdLdclrlh,
+ kIdLdeor,
+ kIdLdeora,
+ kIdLdeorab,
+ kIdLdeorah,
+ kIdLdeoral,
+ kIdLdeoralb,
+ kIdLdeoralh,
+ kIdLdeorb,
+ kIdLdeorh,
+ kIdLdeorl,
+ kIdLdeorlb,
+ kIdLdeorlh,
+ kIdLdg,
+ kIdLdgm,
+ kIdLdlar,
+ kIdLdlarb,
+ kIdLdlarh,
+ kIdLdnp,
+ kIdLdp,
+ kIdLdpsw,
+ kIdLdr,
+ kIdLdraa,
+ kIdLdrab,
+ kIdLdrb,
+ kIdLdrh,
+ kIdLdrsb,
+ kIdLdrsh,
+ kIdLdrsw,
+ kIdLdset,
+ kIdLdseta,
+ kIdLdsetab,
+ kIdLdsetah,
+ kIdLdsetal,
+ kIdLdsetalb,
+ kIdLdsetalh,
+ kIdLdsetb,
+ kIdLdseth,
+ kIdLdsetl,
+ kIdLdsetlb,
+ kIdLdsetlh,
+ kIdLdsmax,
+ kIdLdsmaxa,
+ kIdLdsmaxab,
+ kIdLdsmaxah,
+ kIdLdsmaxal,
+ kIdLdsmaxalb,
+ kIdLdsmaxalh,
+ kIdLdsmaxb,
+ kIdLdsmaxh,
+ kIdLdsmaxl,
+ kIdLdsmaxlb,
+ kIdLdsmaxlh,
+ kIdLdsmin,
+ kIdLdsmina,
+ kIdLdsminab,
+ kIdLdsminah,
+ kIdLdsminal,
+ kIdLdsminalb,
+ kIdLdsminalh,
+ kIdLdsminb,
+ kIdLdsminh,
+ kIdLdsminl,
+ kIdLdsminlb,
+ kIdLdsminlh,
+ kIdLdtr,
+ kIdLdtrb,
+ kIdLdtrh,
+ kIdLdtrsb,
+ kIdLdtrsh,
+ kIdLdtrsw,
+ kIdLdumax,
+ kIdLdumaxa,
+ kIdLdumaxab,
+ kIdLdumaxah,
+ kIdLdumaxal,
+ kIdLdumaxalb,
+ kIdLdumaxalh,
+ kIdLdumaxb,
+ kIdLdumaxh,
+ kIdLdumaxl,
+ kIdLdumaxlb,
+ kIdLdumaxlh,
+ kIdLdumin,
+ kIdLdumina,
+ kIdLduminab,
+ kIdLduminah,
+ kIdLduminal,
+ kIdLduminalb,
+ kIdLduminalh,
+ kIdLduminb,
+ kIdLduminh,
+ kIdLduminl,
+ kIdLduminlb,
+ kIdLduminlh,
+ kIdLdur,
+ kIdLdurb,
+ kIdLdurh,
+ kIdLdursb,
+ kIdLdursh,
+ kIdLdursw,
+ kIdLdxp,
+ kIdLdxr,
+ kIdLdxrb,
+ kIdLdxrh,
+ kIdLsl,
+ kIdLslv,
+ kIdLsr,
+ kIdLsrv,
+ kIdMadd,
+ kIdMneg,
+ kIdMov,
+ kIdMovk,
+ kIdMovn,
+ kIdMovz,
+ kIdMrs,
+ kIdMsr,
+ kIdMsub,
+ kIdMul,
+ kIdMvn,
+ kIdNeg,
+ kIdNegs,
+ kIdNgc,
+ kIdNgcs,
+ kIdNop,
+ kIdOrn,
+ kIdOrr,
+ kIdPacda,
+ kIdPacdb,
+ kIdPacdza,
+ kIdPacdzb,
+ kIdPacga,
+ kIdPssbb,
+ kIdRbit,
+ kIdRet,
+ kIdRev,
+ kIdRev16,
+ kIdRev32,
+ kIdRev64,
+ kIdRor,
+ kIdRorv,
+ kIdSbc,
+ kIdSbcs,
+ kIdSbfiz,
+ kIdSbfm,
+ kIdSbfx,
+ kIdSdiv,
+ kIdSetf8,
+ kIdSetf16,
+ kIdSev,
+ kIdSevl,
+ kIdSmaddl,
+ kIdSmc,
+ kIdSmnegl,
+ kIdSmsubl,
+ kIdSmulh,
+ kIdSmull,
+ kIdSsbb,
+ kIdSt2g,
+ kIdStadd,
+ kIdStaddl,
+ kIdStaddb,
+ kIdStaddlb,
+ kIdStaddh,
+ kIdStaddlh,
+ kIdStclr,
+ kIdStclrl,
+ kIdStclrb,
+ kIdStclrlb,
+ kIdStclrh,
+ kIdStclrlh,
+ kIdSteor,
+ kIdSteorl,
+ kIdSteorb,
+ kIdSteorlb,
+ kIdSteorh,
+ kIdSteorlh,
+ kIdStg,
+ kIdStgm,
+ kIdStgp,
+ kIdStllr,
+ kIdStllrb,
+ kIdStllrh,
+ kIdStlr,
+ kIdStlrb,
+ kIdStlrh,
+ kIdStlxp,
+ kIdStlxr,
+ kIdStlxrb,
+ kIdStlxrh,
+ kIdStnp,
+ kIdStp,
+ kIdStr,
+ kIdStrb,
+ kIdStrh,
+ kIdStset,
+ kIdStsetl,
+ kIdStsetb,
+ kIdStsetlb,
+ kIdStseth,
+ kIdStsetlh,
+ kIdStsmax,
+ kIdStsmaxl,
+ kIdStsmaxb,
+ kIdStsmaxlb,
+ kIdStsmaxh,
+ kIdStsmaxlh,
+ kIdStsmin,
+ kIdStsminl,
+ kIdStsminb,
+ kIdStsminlb,
+ kIdStsminh,
+ kIdStsminlh,
+ kIdSttr,
+ kIdSttrb,
+ kIdSttrh,
+ kIdStumax,
+ kIdStumaxl,
+ kIdStumaxb,
+ kIdStumaxlb,
+ kIdStumaxh,
+ kIdStumaxlh,
+ kIdStumin,
+ kIdStuminl,
+ kIdStuminb,
+ kIdStuminlb,
+ kIdStuminh,
+ kIdStuminlh,
+ kIdStur,
+ kIdSturb,
+ kIdSturh,
+ kIdStxp,
+ kIdStxr,
+ kIdStxrb,
+ kIdStxrh,
+ kIdStz2g,
+ kIdStzg,
+ kIdStzgm,
+ kIdSub,
+ kIdSubg,
+ kIdSubp,
+ kIdSubps,
+ kIdSubs,
+ kIdSvc,
+ kIdSwp,
+ kIdSwpa,
+ kIdSwpab,
+ kIdSwpah,
+ kIdSwpal,
+ kIdSwpalb,
+ kIdSwpalh,
+ kIdSwpb,
+ kIdSwph,
+ kIdSwpl,
+ kIdSwplb,
+ kIdSwplh,
+ kIdSxtb,
+ kIdSxth,
+ kIdSxtw,
+ kIdSys,
+ kIdTlbi,
+ kIdTst,
+ kIdTbnz,
+ kIdTbz,
+ kIdUbfiz,
+ kIdUbfm,
+ kIdUbfx,
+ kIdUdf,
+ kIdUdiv,
+ kIdUmaddl,
+ kIdUmnegl,
+ kIdUmull,
+ kIdUmulh,
+ kIdUmsubl,
+ kIdUxtb,
+ kIdUxth,
+ kIdWfe,
+ kIdWfi,
+ kIdXaflag,
+ kIdXpacd,
+ kIdXpaci,
+ kIdXpaclri,
+ kIdYield,
+ kIdAbs_v,
+ kIdAdd_v,
+ kIdAddhn_v,
+ kIdAddhn2_v,
+ kIdAddp_v,
+ kIdAddv_v,
+ kIdAesd_v,
+ kIdAese_v,
+ kIdAesimc_v,
+ kIdAesmc_v,
+ kIdAnd_v,
+ kIdBcax_v,
+ kIdBfcvt_v,
+ kIdBfcvtn_v,
+ kIdBfcvtn2_v,
+ kIdBfdot_v,
+ kIdBfmlalb_v,
+ kIdBfmlalt_v,
+ kIdBfmmla_v,
+ kIdBic_v,
+ kIdBif_v,
+ kIdBit_v,
+ kIdBsl_v,
+ kIdCls_v,
+ kIdClz_v,
+ kIdCmeq_v,
+ kIdCmge_v,
+ kIdCmgt_v,
+ kIdCmhi_v,
+ kIdCmhs_v,
+ kIdCmle_v,
+ kIdCmlt_v,
+ kIdCmtst_v,
+ kIdCnt_v,
+ kIdDup_v,
+ kIdEor_v,
+ kIdEor3_v,
+ kIdExt_v,
+ kIdFabd_v,
+ kIdFabs_v,
+ kIdFacge_v,
+ kIdFacgt_v,
+ kIdFadd_v,
+ kIdFaddp_v,
+ kIdFcadd_v,
+ kIdFccmp_v,
+ kIdFccmpe_v,
+ kIdFcmeq_v,
+ kIdFcmge_v,
+ kIdFcmgt_v,
+ kIdFcmla_v,
+ kIdFcmle_v,
+ kIdFcmlt_v,
+ kIdFcmp_v,
+ kIdFcmpe_v,
+ kIdFcsel_v,
+ kIdFcvt_v,
+ kIdFcvtas_v,
+ kIdFcvtau_v,
+ kIdFcvtl_v,
+ kIdFcvtl2_v,
+ kIdFcvtms_v,
+ kIdFcvtmu_v,
+ kIdFcvtn_v,
+ kIdFcvtn2_v,
+ kIdFcvtns_v,
+ kIdFcvtnu_v,
+ kIdFcvtps_v,
+ kIdFcvtpu_v,
+ kIdFcvtxn_v,
+ kIdFcvtxn2_v,
+ kIdFcvtzs_v,
+ kIdFcvtzu_v,
+ kIdFdiv_v,
+ kIdFjcvtzs_v,
+ kIdFmadd_v,
+ kIdFmax_v,
+ kIdFmaxnm_v,
+ kIdFmaxnmp_v,
+ kIdFmaxnmv_v,
+ kIdFmaxp_v,
+ kIdFmaxv_v,
+ kIdFmin_v,
+ kIdFminnm_v,
+ kIdFminnmp_v,
+ kIdFminnmv_v,
+ kIdFminp_v,
+ kIdFminv_v,
+ kIdFmla_v,
+ kIdFmlal_v,
+ kIdFmlal2_v,
+ kIdFmls_v,
+ kIdFmlsl_v,
+ kIdFmlsl2_v,
+ kIdFmov_v,
+ kIdFmsub_v,
+ kIdFmul_v,
+ kIdFmulx_v,
+ kIdFneg_v,
+ kIdFnmadd_v,
+ kIdFnmsub_v,
+ kIdFnmul_v,
+ kIdFrecpe_v,
+ kIdFrecps_v,
+ kIdFrecpx_v,
+ kIdFrint32x_v,
+ kIdFrint32z_v,
+ kIdFrint64x_v,
+ kIdFrint64z_v,
+ kIdFrinta_v,
+ kIdFrinti_v,
+ kIdFrintm_v,
+ kIdFrintn_v,
+ kIdFrintp_v,
+ kIdFrintx_v,
+ kIdFrintz_v,
+ kIdFrsqrte_v,
+ kIdFrsqrts_v,
+ kIdFsqrt_v,
+ kIdFsub_v,
+ kIdIns_v,
+ kIdLd1_v,
+ kIdLd1r_v,
+ kIdLd2_v,
+ kIdLd2r_v,
+ kIdLd3_v,
+ kIdLd3r_v,
+ kIdLd4_v,
+ kIdLd4r_v,
+ kIdLdnp_v,
+ kIdLdp_v,
+ kIdLdr_v,
+ kIdLdur_v,
+ kIdMla_v,
+ kIdMls_v,
+ kIdMov_v,
+ kIdMovi_v,
+ kIdMul_v,
+ kIdMvn_v,
+ kIdMvni_v,
+ kIdNeg_v,
+ kIdNot_v,
+ kIdOrn_v,
+ kIdOrr_v,
+ kIdPmul_v,
+ kIdPmull_v,
+ kIdPmull2_v,
+ kIdRaddhn_v,
+ kIdRaddhn2_v,
+ kIdRax1_v,
+ kIdRbit_v,
+ kIdRev16_v,
+ kIdRev32_v,
+ kIdRev64_v,
+ kIdRshrn_v,
+ kIdRshrn2_v,
+ kIdRsubhn_v,
+ kIdRsubhn2_v,
+ kIdSaba_v,
+ kIdSabal_v,
+ kIdSabal2_v,
+ kIdSabd_v,
+ kIdSabdl_v,
+ kIdSabdl2_v,
+ kIdSadalp_v,
+ kIdSaddl_v,
+ kIdSaddl2_v,
+ kIdSaddlp_v,
+ kIdSaddlv_v,
+ kIdSaddw_v,
+ kIdSaddw2_v,
+ kIdScvtf_v,
+ kIdSdot_v,
+ kIdSha1c_v,
+ kIdSha1h_v,
+ kIdSha1m_v,
+ kIdSha1p_v,
+ kIdSha1su0_v,
+ kIdSha1su1_v,
+ kIdSha256h_v,
+ kIdSha256h2_v,
+ kIdSha256su0_v,
+ kIdSha256su1_v,
+ kIdSha512h_v,
+ kIdSha512h2_v,
+ kIdSha512su0_v,
+ kIdSha512su1_v,
+ kIdShadd_v,
+ kIdShl_v,
+ kIdShll_v,
+ kIdShll2_v,
+ kIdShrn_v,
+ kIdShrn2_v,
+ kIdShsub_v,
+ kIdSli_v,
+ kIdSm3partw1_v,
+ kIdSm3partw2_v,
+ kIdSm3ss1_v,
+ kIdSm3tt1a_v,
+ kIdSm3tt1b_v,
+ kIdSm3tt2a_v,
+ kIdSm3tt2b_v,
+ kIdSm4e_v,
+ kIdSm4ekey_v,
+ kIdSmax_v,
+ kIdSmaxp_v,
+ kIdSmaxv_v,
+ kIdSmin_v,
+ kIdSminp_v,
+ kIdSminv_v,
+ kIdSmlal_v,
+ kIdSmlal2_v,
+ kIdSmlsl_v,
+ kIdSmlsl2_v,
+ kIdSmmla_v,
+ kIdSmov_v,
+ kIdSmull_v,
+ kIdSmull2_v,
+ kIdSqabs_v,
+ kIdSqadd_v,
+ kIdSqdmlal_v,
+ kIdSqdmlal2_v,
+ kIdSqdmlsl_v,
+ kIdSqdmlsl2_v,
+ kIdSqdmulh_v,
+ kIdSqdmull_v,
+ kIdSqdmull2_v,
+ kIdSqneg_v,
+ kIdSqrdmlah_v,
+ kIdSqrdmlsh_v,
+ kIdSqrdmulh_v,
+ kIdSqrshl_v,
+ kIdSqrshrn_v,
+ kIdSqrshrn2_v,
+ kIdSqrshrun_v,
+ kIdSqrshrun2_v,
+ kIdSqshl_v,
+ kIdSqshlu_v,
+ kIdSqshrn_v,
+ kIdSqshrn2_v,
+ kIdSqshrun_v,
+ kIdSqshrun2_v,
+ kIdSqsub_v,
+ kIdSqxtn_v,
+ kIdSqxtn2_v,
+ kIdSqxtun_v,
+ kIdSqxtun2_v,
+ kIdSrhadd_v,
+ kIdSri_v,
+ kIdSrshl_v,
+ kIdSrshr_v,
+ kIdSrsra_v,
+ kIdSshl_v,
+ kIdSshll_v,
+ kIdSshll2_v,
+ kIdSshr_v,
+ kIdSsra_v,
+ kIdSsubl_v,
+ kIdSsubl2_v,
+ kIdSsubw_v,
+ kIdSsubw2_v,
+ kIdSt1_v,
+ kIdSt2_v,
+ kIdSt3_v,
+ kIdSt4_v,
+ kIdStnp_v,
+ kIdStp_v,
+ kIdStr_v,
+ kIdStur_v,
+ kIdSub_v,
+ kIdSubhn_v,
+ kIdSubhn2_v,
+ kIdSudot_v,
+ kIdSuqadd_v,
+ kIdSxtl_v,
+ kIdSxtl2_v,
+ kIdTbl_v,
+ kIdTbx_v,
+ kIdTrn1_v,
+ kIdTrn2_v,
+ kIdUaba_v,
+ kIdUabal_v,
+ kIdUabal2_v,
+ kIdUabd_v,
+ kIdUabdl_v,
+ kIdUabdl2_v,
+ kIdUadalp_v,
+ kIdUaddl_v,
+ kIdUaddl2_v,
+ kIdUaddlp_v,
+ kIdUaddlv_v,
+ kIdUaddw_v,
+ kIdUaddw2_v,
+ kIdUcvtf_v,
+ kIdUdot_v,
+ kIdUhadd_v,
+ kIdUhsub_v,
+ kIdUmax_v,
+ kIdUmaxp_v,
+ kIdUmaxv_v,
+ kIdUmin_v,
+ kIdUminp_v,
+ kIdUminv_v,
+ kIdUmlal_v,
+ kIdUmlal2_v,
+ kIdUmlsl_v,
+ kIdUmlsl2_v,
+ kIdUmmla_v,
+ kIdUmov_v,
+ kIdUmull_v,
+ kIdUmull2_v,
+ kIdUqadd_v,
+ kIdUqrshl_v,
+ kIdUqrshrn_v,
+ kIdUqrshrn2_v,
+ kIdUqshl_v,
+ kIdUqshrn_v,
+ kIdUqshrn2_v,
+ kIdUqsub_v,
+ kIdUqxtn_v,
+ kIdUqxtn2_v,
+ kIdUrecpe_v,
+ kIdUrhadd_v,
+ kIdUrshl_v,
+ kIdUrshr_v,
+ kIdUrsqrte_v,
+ kIdUrsra_v,
+ kIdUsdot_v,
+ kIdUshl_v,
+ kIdUshll_v,
+ kIdUshll2_v,
+ kIdUshr_v,
+ kIdUsmmla_v,
+ kIdUsqadd_v,
+ kIdUsra_v,
+ kIdUsubl_v,
+ kIdUsubl2_v,
+ kIdUsubw_v,
+ kIdUsubw2_v,
+ kIdUxtl_v,
+ kIdUxtl2_v,
+ kIdUzp1_v,
+ kIdUzp2_v,
+ kIdXar_v,
+ kIdXtn_v,
+ kIdXtn2_v,
+ kIdZip1_v,
+ kIdZip2_v,
+ _kIdCount
+ // ${InstId:End}
+ };
+
+ //! Instruction options
+ enum Options : uint32_t {
+ //! Condition code flag shift
+ kOptionCondFlagShift = 27,
+ //! Condition code flag shift
+ kOptionCondFlagMask = 1u << kOptionCondFlagShift,
+
+ //! Condition code value shift.
+ kOptionCondCodeShift = 28u,
+ //! Condition code value mask.
+ kOptionCondCodeMask = 0xFu << kOptionCondCodeShift
+ };
+
+ // --------------------------------------------------------------------------
+ // [Statics]
+ // --------------------------------------------------------------------------
+
+ //! Tests whether the `instId` is defined (counts also Inst::kIdNone, which must be zero).
+ static inline bool isDefinedId(uint32_t instId) noexcept { return instId < _kIdCount; }
+};
+
+// ============================================================================
+// [asmjit::a64::Predicate]
+// ============================================================================
+
+namespace Predicate {
+
+//! Address translate options (AT).
+namespace AT {
+ static inline constexpr uint32_t encode(uint32_t op1, uint32_t cRn, uint32_t cRm, uint32_t op2) noexcept {
+ return (op1 << 11) | (cRn << 7) | (cRm << 3) | (op2 << 0);
+ }
+
+ enum Value : uint32_t {
+ kS1E1R = encode(0b000, 0b0111, 0b1000, 0b000),
+ kS1E2R = encode(0b100, 0b0111, 0b1000, 0b000),
+ kS1E3R = encode(0b110, 0b0111, 0b1000, 0b000),
+ kS1E1W = encode(0b000, 0b0111, 0b1000, 0b001),
+ kS1E2W = encode(0b100, 0b0111, 0b1000, 0b001),
+ kS1E3W = encode(0b110, 0b0111, 0b1000, 0b001),
+ kS1E0R = encode(0b000, 0b0111, 0b1000, 0b010),
+ kS1E0W = encode(0b000, 0b0111, 0b1000, 0b011),
+ kS12E1R = encode(0b100, 0b0111, 0b1000, 0b100),
+ kS12E1W = encode(0b100, 0b0111, 0b1000, 0b101),
+ kS12E0R = encode(0b100, 0b0111, 0b1000, 0b110),
+ kS12E0W = encode(0b100, 0b0111, 0b1000, 0b111),
+ kS1E1RP = encode(0b000, 0b0111, 0b1001, 0b000),
+ kS1E1WP = encode(0b000, 0b0111, 0b1001, 0b001)
+ };
+}
+
+//! Data barrier options (DMB/DSB).
+namespace DB {
+ //! Data barrier immediate values.
+ enum Value : uint32_t {
+ //! Waits only for loads to complete, and only applies to the outer shareable domain.
+ kOSHLD = 0x01u,
+ //! Waits only for stores to complete, and only applies to the outer shareable domain.
+ kOSHST = 0x02u,
+ //! Only applies to the outer shareable domain.
+ kOSH = 0x03u,
+
+ //! Waits only for loads to complete and only applies out to the point of unification.
+ kNSHLD = 0x05u,
+ //! Waits only for stores to complete and only applies out to the point of unification.
+ kNSHST = 0x06u,
+ //! Only applies out to the point of unification.
+ kNSH = 0x07u,
+
+ //! Waits only for loads to complete, and only applies to the inner shareable domain.
+ kISHLD = 0x09u,
+ //! Waits only for stores to complete, and only applies to the inner shareable domain.
+ kISHST = 0x0Au,
+ //! Only applies to the inner shareable domain.
+ kISH = 0x0Bu,
+
+ //! Waits only for loads to complete.
+ kLD = 0x0Du,
+ //! Waits only for stores to complete.
+ kST = 0x0Eu,
+ //! Full system memory barrier operation.
+ kSY = 0x0Fu
+ };
+}
+
+//! Data cache maintenance options.
+namespace DC {
+ static inline constexpr uint32_t encode(uint32_t op1, uint32_t cRn, uint32_t cRm, uint32_t op2) noexcept {
+ return (op1 << 11) | (cRn << 7) | (cRm << 3) | (op2 << 0);
+ }
+
+ //! Data cache maintenance immediate values.
+ enum Value : uint32_t {
+ kZVA = encode(0b011, 0b0111, 0b0100, 0b001),
+ kIVAC = encode(0b000, 0b0111, 0b0110, 0b001),
+ kISW = encode(0b000, 0b0111, 0b0110, 0b010),
+ kCVAC = encode(0b011, 0b0111, 0b1010, 0b001),
+ kCSW = encode(0b000, 0b0111, 0b1010, 0b010),
+ kCVAU = encode(0b011, 0b0111, 0b1011, 0b001),
+ kCIVAC = encode(0b011, 0b0111, 0b1110, 0b001),
+ kCISW = encode(0b000, 0b0111, 0b1110, 0b010),
+ kCVAP = encode(0b011, 0b0111, 0b1100, 0b001),
+ kCVADP = encode(0b011, 0b0111, 0b1101, 0b001),
+ kIGVAC = encode(0b000, 0b0111, 0b0110, 0b011),
+ kIGSW = encode(0b000, 0b0111, 0b0110, 0b100),
+ kCGSW = encode(0b000, 0b0111, 0b1010, 0b100),
+ kCIGSW = encode(0b000, 0b0111, 0b1110, 0b100),
+ kCGVAC = encode(0b011, 0b0111, 0b1010, 0b011),
+ kCGVAP = encode(0b011, 0b0111, 0b1100, 0b011),
+ kCGVADP = encode(0b011, 0b0111, 0b1101, 0b011),
+ kCIGVAC = encode(0b011, 0b0111, 0b1110, 0b011),
+ kGVA = encode(0b011, 0b0111, 0b0100, 0b011),
+ kIGDVAC = encode(0b000, 0b0111, 0b0110, 0b101),
+ kIGDSW = encode(0b000, 0b0111, 0b0110, 0b110),
+ kCGDSW = encode(0b000, 0b0111, 0b1010, 0b110),
+ kCIGDSW = encode(0b000, 0b0111, 0b1110, 0b110),
+ kCGDVAC = encode(0b011, 0b0111, 0b1010, 0b101),
+ kCGDVAP = encode(0b011, 0b0111, 0b1100, 0b101),
+ kCGDVADP = encode(0b011, 0b0111, 0b1101, 0b101),
+ kCIGDVAC = encode(0b011, 0b0111, 0b1110, 0b101),
+ kGZVA = encode(0b011, 0b0111, 0b0100, 0b100)
+ };
+}
+
+//! Instruction cache maintenance options.
+namespace IC {
+ static inline constexpr uint32_t encode(uint32_t op1, uint32_t cRn, uint32_t cRm, uint32_t op2) noexcept {
+ return (op1 << 11) | (cRn << 7) | (cRm << 3) | (op2 << 0);
+ }
+
+ //! Instruction cache maintenance immediate values.
+ enum Value : uint32_t {
+ kIALLUIS = encode(0b000, 0b0111, 0b0001, 0b000),
+ kIALLU = encode(0b000, 0b0111, 0b0101, 0b000),
+ kIVAU = encode(0b011, 0b0111, 0b0101, 0b001)
+ };
+}
+
+//! Instruction-fetch barrier options.
+namespace ISB {
+ //! Instruction-fetch barrier immediate values.
+ enum Value : uint32_t {
+ kSY = 0xF
+ };
+}
+
+//! Prefetch options.
+namespace PRFOp {
+ //! Prefetch immediate values.
+ enum Value : uint32_t {
+ kPLDL1KEEP = 0x00,
+ kPLDL1STRM = 0x01,
+ kPLDL2KEEP = 0x02,
+ kPLDL2STRM = 0x03,
+ kPLDL3KEEP = 0x04,
+ kPLDL3STRM = 0x05,
+ kPLIL1KEEP = 0x08,
+ kPLIL1STRM = 0x09,
+ kPLIL2KEEP = 0x0A,
+ kPLIL2STRM = 0x0B,
+ kPLIL3KEEP = 0x0C,
+ kPLIL3STRM = 0x0D,
+ kPSTL1KEEP = 0x10,
+ kPSTL1STRM = 0x11,
+ kPSTL2KEEP = 0x12,
+ kPSTL2STRM = 0x13,
+ kPSTL3KEEP = 0x14,
+ kPSTL3STRM = 0x15
+ };
+}
+
+//! PSB instruction options.
+namespace PSB {
+ //! PSB immediate values.
+ enum Value : uint32_t {
+ kCSYNC = 0x11u
+ };
+}
+
+namespace TLBI {
+ static inline constexpr uint32_t encode(uint32_t op1, uint32_t cRn, uint32_t cRm, uint32_t op2) noexcept {
+ return (op1 << 11) | (cRn << 7) | (cRm << 3) | (op2 << 0);
+ }
+
+ enum Value : uint32_t {
+ kIPAS2E1IS = encode(0b100, 0b1000, 0b0000, 0b001),
+ kIPAS2LE1IS = encode(0b100, 0b1000, 0b0000, 0b101),
+ kVMALLE1IS = encode(0b000, 0b1000, 0b0011, 0b000),
+ kALLE2IS = encode(0b100, 0b1000, 0b0011, 0b000),
+ kALLE3IS = encode(0b110, 0b1000, 0b0011, 0b000),
+ kVAE1IS = encode(0b000, 0b1000, 0b0011, 0b001),
+ kVAE2IS = encode(0b100, 0b1000, 0b0011, 0b001),
+ kVAE3IS = encode(0b110, 0b1000, 0b0011, 0b001),
+ kASIDE1IS = encode(0b000, 0b1000, 0b0011, 0b010),
+ kVAAE1IS = encode(0b000, 0b1000, 0b0011, 0b011),
+ kALLE1IS = encode(0b100, 0b1000, 0b0011, 0b100),
+ kVALE1IS = encode(0b000, 0b1000, 0b0011, 0b101),
+ kVALE2IS = encode(0b100, 0b1000, 0b0011, 0b101),
+ kVALE3IS = encode(0b110, 0b1000, 0b0011, 0b101),
+ kVMALLS12E1IS = encode(0b100, 0b1000, 0b0011, 0b110),
+ kVAALE1IS = encode(0b000, 0b1000, 0b0011, 0b111),
+ kIPAS2E1 = encode(0b100, 0b1000, 0b0100, 0b001),
+ kIPAS2LE1 = encode(0b100, 0b1000, 0b0100, 0b101),
+ kVMALLE1 = encode(0b000, 0b1000, 0b0111, 0b000),
+ kALLE2 = encode(0b100, 0b1000, 0b0111, 0b000),
+ kALLE3 = encode(0b110, 0b1000, 0b0111, 0b000),
+ kVAE1 = encode(0b000, 0b1000, 0b0111, 0b001),
+ kVAE2 = encode(0b100, 0b1000, 0b0111, 0b001),
+ kVAE3 = encode(0b110, 0b1000, 0b0111, 0b001),
+ kASIDE1 = encode(0b000, 0b1000, 0b0111, 0b010),
+ kVAAE1 = encode(0b000, 0b1000, 0b0111, 0b011),
+ kALLE1 = encode(0b100, 0b1000, 0b0111, 0b100),
+ kVALE1 = encode(0b000, 0b1000, 0b0111, 0b101),
+ kVALE2 = encode(0b100, 0b1000, 0b0111, 0b101),
+ kVALE3 = encode(0b110, 0b1000, 0b0111, 0b101),
+ kVMALLS12E1 = encode(0b100, 0b1000, 0b0111, 0b110),
+ kVAALE1 = encode(0b000, 0b1000, 0b0111, 0b111),
+
+ kVMALLE1OS = encode(0b000, 0b1000, 0b0001, 0b000),
+ kVAE1OS = encode(0b000, 0b1000, 0b0001, 0b001),
+ kASIDE1OS = encode(0b000, 0b1000, 0b0001, 0b010),
+ kVAAE1OS = encode(0b000, 0b1000, 0b0001, 0b011),
+ kVALE1OS = encode(0b000, 0b1000, 0b0001, 0b101),
+ kVAALE1OS = encode(0b000, 0b1000, 0b0001, 0b111),
+ kIPAS2E1OS = encode(0b100, 0b1000, 0b0100, 0b000),
+ kIPAS2LE1OS = encode(0b100, 0b1000, 0b0100, 0b100),
+ kVAE2OS = encode(0b100, 0b1000, 0b0001, 0b001),
+ kVALE2OS = encode(0b100, 0b1000, 0b0001, 0b101),
+ kVMALLS12E1OS = encode(0b100, 0b1000, 0b0001, 0b110),
+ kVAE3OS = encode(0b110, 0b1000, 0b0001, 0b001),
+ kVALE3OS = encode(0b110, 0b1000, 0b0001, 0b101),
+ kALLE2OS = encode(0b100, 0b1000, 0b0001, 0b000),
+ kALLE1OS = encode(0b100, 0b1000, 0b0001, 0b100),
+ kALLE3OS = encode(0b110, 0b1000, 0b0001, 0b000),
+
+ kRVAE1 = encode(0b000, 0b1000, 0b0110, 0b001),
+ kRVAAE1 = encode(0b000, 0b1000, 0b0110, 0b011),
+ kRVALE1 = encode(0b000, 0b1000, 0b0110, 0b101),
+ kRVAALE1 = encode(0b000, 0b1000, 0b0110, 0b111),
+ kRVAE1IS = encode(0b000, 0b1000, 0b0010, 0b001),
+ kRVAAE1IS = encode(0b000, 0b1000, 0b0010, 0b011),
+ kRVALE1IS = encode(0b000, 0b1000, 0b0010, 0b101),
+ kRVAALE1IS = encode(0b000, 0b1000, 0b0010, 0b111),
+ kRVAE1OS = encode(0b000, 0b1000, 0b0101, 0b001),
+ kRVAAE1OS = encode(0b000, 0b1000, 0b0101, 0b011),
+ kRVALE1OS = encode(0b000, 0b1000, 0b0101, 0b101),
+ kRVAALE1OS = encode(0b000, 0b1000, 0b0101, 0b111),
+ kRIPAS2E1IS = encode(0b100, 0b1000, 0b0000, 0b010),
+ kRIPAS2LE1IS = encode(0b100, 0b1000, 0b0000, 0b110),
+ kRIPAS2E1 = encode(0b100, 0b1000, 0b0100, 0b010),
+ kRIPAS2LE1 = encode(0b100, 0b1000, 0b0100, 0b110),
+ kRIPAS2E1OS = encode(0b100, 0b1000, 0b0100, 0b011),
+ kRIPAS2LE1OS = encode(0b100, 0b1000, 0b0100, 0b111),
+ kRVAE2 = encode(0b100, 0b1000, 0b0110, 0b001),
+ kRVALE2 = encode(0b100, 0b1000, 0b0110, 0b101),
+ kRVAE2IS = encode(0b100, 0b1000, 0b0010, 0b001),
+ kRVALE2IS = encode(0b100, 0b1000, 0b0010, 0b101),
+ kRVAE2OS = encode(0b100, 0b1000, 0b0101, 0b001),
+ kRVALE2OS = encode(0b100, 0b1000, 0b0101, 0b101),
+ kRVAE3 = encode(0b110, 0b1000, 0b0110, 0b001),
+ kRVALE3 = encode(0b110, 0b1000, 0b0110, 0b101),
+ kRVAE3IS = encode(0b110, 0b1000, 0b0010, 0b001),
+ kRVALE3IS = encode(0b110, 0b1000, 0b0010, 0b101),
+ kRVAE3OS = encode(0b110, 0b1000, 0b0101, 0b001),
+ kRVALE3OS = encode(0b110, 0b1000, 0b0101, 0b101),
+ };
+}
+
+//! Trace synchronization barrier options.
+namespace TSB {
+ //! Trace synchronization immediate values.
+ enum Value : uint32_t {
+ kCSYNC = 0
+ };
+}
+
+//! Processor state access through MSR.
+namespace PState {
+ //! Encodes a pstate from `op0` and `op1`.
+ static inline constexpr uint32_t encode(uint32_t op0, uint32_t op1) noexcept {
+ return (op0 << 3) | (op1 << 0);
+ }
+
+ //! Processor state access immediates.
+ enum Value : uint32_t {
+ kSPSel = encode(0b000, 0b101),
+ kDAIFSet = encode(0b011, 0b110),
+ kDAIFClr = encode(0b011, 0b111),
+ kPAN = encode(0b000, 0b100),
+ kUAO = encode(0b000, 0b011),
+ kDIT = encode(0b011, 0b010),
+ kSSBS = encode(0b011, 0b001),
+ kTCO = encode(0b011, 0b100)
+ };
+};
+
+//! System register identifiers and utilities (MSR/MRS).
+namespace SysReg {
+ //! System register fields.
+ struct Fields {
+ uint8_t op0;
+ uint8_t op1;
+ uint8_t cRn;
+ uint8_t cRm;
+ uint8_t op2;
+ };
+
+ //! Encodes a system register from `op0`, `op1`, `cRn`, `cRm`, and `op2` fields.
+ static inline constexpr uint32_t encode(uint32_t op0, uint32_t op1, uint32_t cRn, uint32_t cRm, uint32_t op2) noexcept {
+ return (op0 << 14) | (op1 << 11) | (cRn << 7) | (cRm << 3) | (op2 << 0);
+ }
+
+ //! Encodes a system register from `fields`.
+ static inline constexpr uint32_t encode(const Fields& fields) noexcept {
+ return encode(fields.op0, fields.op1, fields.cRn, fields.cRm, fields.op2);
+ }
+
+ //! Decodes a system register to \ref Fields.
+ static inline constexpr Fields decode(uint32_t id) noexcept {
+ return Fields {
+ uint8_t((id >> 14) & 0x3u),
+ uint8_t((id >> 11) & 0x7u),
+ uint8_t((id >> 7) & 0xFu),
+ uint8_t((id >> 3) & 0xFu),
+ uint8_t((id >> 0) & 0x7u)
+ };
+ }
+
+ //! System register identifiers.
+ enum Id : uint32_t {
+ kACTLR_EL1 = encode(0b11, 0b000, 0b0001, 0b0000, 0b001), // RW
+ kACTLR_EL2 = encode(0b11, 0b100, 0b0001, 0b0000, 0b001), // RW
+ kACTLR_EL3 = encode(0b11, 0b110, 0b0001, 0b0000, 0b001), // RW
+ kAFSR0_EL1 = encode(0b11, 0b000, 0b0101, 0b0001, 0b000), // RW
+ kAFSR0_EL12 = encode(0b11, 0b101, 0b0101, 0b0001, 0b000), // RW
+ kAFSR0_EL2 = encode(0b11, 0b100, 0b0101, 0b0001, 0b000), // RW
+ kAFSR0_EL3 = encode(0b11, 0b110, 0b0101, 0b0001, 0b000), // RW
+ kAFSR1_EL1 = encode(0b11, 0b000, 0b0101, 0b0001, 0b001), // RW
+ kAFSR1_EL12 = encode(0b11, 0b101, 0b0101, 0b0001, 0b001), // RW
+ kAFSR1_EL2 = encode(0b11, 0b100, 0b0101, 0b0001, 0b001), // RW
+ kAFSR1_EL3 = encode(0b11, 0b110, 0b0101, 0b0001, 0b001), // RW
+ kAIDR_EL1 = encode(0b11, 0b001, 0b0000, 0b0000, 0b111), // RO
+ kAMAIR_EL1 = encode(0b11, 0b000, 0b1010, 0b0011, 0b000), // RW
+ kAMAIR_EL12 = encode(0b11, 0b101, 0b1010, 0b0011, 0b000), // RW
+ kAMAIR_EL2 = encode(0b11, 0b100, 0b1010, 0b0011, 0b000), // RW
+ kAMAIR_EL3 = encode(0b11, 0b110, 0b1010, 0b0011, 0b000), // RW
+ kAMCFGR_EL0 = encode(0b11, 0b011, 0b1101, 0b0010, 0b001), // RO
+ kAMCGCR_EL0 = encode(0b11, 0b011, 0b1101, 0b0010, 0b010), // RO
+ kAMCNTENCLR0_EL0 = encode(0b11, 0b011, 0b1101, 0b0010, 0b100), // RW
+ kAMCNTENCLR1_EL0 = encode(0b11, 0b011, 0b1101, 0b0011, 0b000), // RW
+ kAMCNTENSET0_EL0 = encode(0b11, 0b011, 0b1101, 0b0010, 0b101), // RW
+ kAMCNTENSET1_EL0 = encode(0b11, 0b011, 0b1101, 0b0011, 0b001), // RW
+ kAMCR_EL0 = encode(0b11, 0b011, 0b1101, 0b0010, 0b000), // RW
+ kAMEVCNTR00_EL0 = encode(0b11, 0b011, 0b1101, 0b0100, 0b000), // RW
+ kAMEVCNTR01_EL0 = encode(0b11, 0b011, 0b1101, 0b0100, 0b001), // RW
+ kAMEVCNTR02_EL0 = encode(0b11, 0b011, 0b1101, 0b0100, 0b010), // RW
+ kAMEVCNTR03_EL0 = encode(0b11, 0b011, 0b1101, 0b0100, 0b011), // RW
+ kAMEVCNTR10_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b000), // RW
+ kAMEVCNTR110_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b010), // RW
+ kAMEVCNTR111_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b011), // RW
+ kAMEVCNTR112_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b100), // RW
+ kAMEVCNTR113_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b101), // RW
+ kAMEVCNTR114_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b110), // RW
+ kAMEVCNTR115_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b111), // RW
+ kAMEVCNTR11_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b001), // RW
+ kAMEVCNTR12_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b010), // RW
+ kAMEVCNTR13_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b011), // RW
+ kAMEVCNTR14_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b100), // RW
+ kAMEVCNTR15_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b101), // RW
+ kAMEVCNTR16_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b110), // RW
+ kAMEVCNTR17_EL0 = encode(0b11, 0b011, 0b1101, 0b1100, 0b111), // RW
+ kAMEVCNTR18_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b000), // RW
+ kAMEVCNTR19_EL0 = encode(0b11, 0b011, 0b1101, 0b1101, 0b001), // RW
+ kAMEVTYPER00_EL0 = encode(0b11, 0b011, 0b1101, 0b0110, 0b000), // RO
+ kAMEVTYPER01_EL0 = encode(0b11, 0b011, 0b1101, 0b0110, 0b001), // RO
+ kAMEVTYPER02_EL0 = encode(0b11, 0b011, 0b1101, 0b0110, 0b010), // RO
+ kAMEVTYPER03_EL0 = encode(0b11, 0b011, 0b1101, 0b0110, 0b011), // RO
+ kAMEVTYPER10_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b000), // RW
+ kAMEVTYPER110_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b010), // RW
+ kAMEVTYPER111_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b011), // RW
+ kAMEVTYPER112_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b100), // RW
+ kAMEVTYPER113_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b101), // RW
+ kAMEVTYPER114_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b110), // RW
+ kAMEVTYPER115_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b111), // RW
+ kAMEVTYPER11_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b001), // RW
+ kAMEVTYPER12_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b010), // RW
+ kAMEVTYPER13_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b011), // RW
+ kAMEVTYPER14_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b100), // RW
+ kAMEVTYPER15_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b101), // RW
+ kAMEVTYPER16_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b110), // RW
+ kAMEVTYPER17_EL0 = encode(0b11, 0b011, 0b1101, 0b1110, 0b111), // RW
+ kAMEVTYPER18_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b000), // RW
+ kAMEVTYPER19_EL0 = encode(0b11, 0b011, 0b1101, 0b1111, 0b001), // RW
+ kAMUSERENR_EL0 = encode(0b11, 0b011, 0b1101, 0b0010, 0b011), // RW
+ kAPDAKeyHi_EL1 = encode(0b11, 0b000, 0b0010, 0b0010, 0b001), // RW
+ kAPDAKeyLo_EL1 = encode(0b11, 0b000, 0b0010, 0b0010, 0b000), // RW
+ kAPDBKeyHi_EL1 = encode(0b11, 0b000, 0b0010, 0b0010, 0b011), // RW
+ kAPDBKeyLo_EL1 = encode(0b11, 0b000, 0b0010, 0b0010, 0b010), // RW
+ kAPGAKeyHi_EL1 = encode(0b11, 0b000, 0b0010, 0b0011, 0b001), // RW
+ kAPGAKeyLo_EL1 = encode(0b11, 0b000, 0b0010, 0b0011, 0b000), // RW
+ kAPIAKeyHi_EL1 = encode(0b11, 0b000, 0b0010, 0b0001, 0b001), // RW
+ kAPIAKeyLo_EL1 = encode(0b11, 0b000, 0b0010, 0b0001, 0b000), // RW
+ kAPIBKeyHi_EL1 = encode(0b11, 0b000, 0b0010, 0b0001, 0b011), // RW
+ kAPIBKeyLo_EL1 = encode(0b11, 0b000, 0b0010, 0b0001, 0b010), // RW
+ kCCSIDR2_EL1 = encode(0b11, 0b001, 0b0000, 0b0000, 0b010), // RO
+ kCCSIDR_EL1 = encode(0b11, 0b001, 0b0000, 0b0000, 0b000), // RO
+ kCLIDR_EL1 = encode(0b11, 0b001, 0b0000, 0b0000, 0b001), // RO
+ kCNTFRQ_EL0 = encode(0b11, 0b011, 0b1110, 0b0000, 0b000), // RW
+ kCNTHCTL_EL2 = encode(0b11, 0b100, 0b1110, 0b0001, 0b000), // RW
+ kCNTHPS_CTL_EL2 = encode(0b11, 0b100, 0b1110, 0b0101, 0b001), // RW
+ kCNTHPS_CVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0101, 0b010), // RW
+ kCNTHPS_TVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0101, 0b000), // RW
+ kCNTHP_CTL_EL2 = encode(0b11, 0b100, 0b1110, 0b0010, 0b001), // RW
+ kCNTHP_CVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0010, 0b010), // RW
+ kCNTHP_TVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0010, 0b000), // RW
+ kCNTHVS_CTL_EL2 = encode(0b11, 0b100, 0b1110, 0b0100, 0b001), // RW
+ kCNTHVS_CVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0100, 0b010), // RW
+ kCNTHVS_TVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0100, 0b000), // RW
+ kCNTHV_CTL_EL2 = encode(0b11, 0b100, 0b1110, 0b0011, 0b001), // RW
+ kCNTHV_CVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0011, 0b010), // RW
+ kCNTHV_TVAL_EL2 = encode(0b11, 0b100, 0b1110, 0b0011, 0b000), // RW
+ kCNTISCALE_EL2 = encode(0b11, 0b100, 0b1110, 0b0000, 0b101), // RW
+ kCNTKCTL_EL1 = encode(0b11, 0b000, 0b1110, 0b0001, 0b000), // RW
+ kCNTKCTL_EL12 = encode(0b11, 0b101, 0b1110, 0b0001, 0b000), // RW
+ kCNTPCTSS_EL0 = encode(0b11, 0b011, 0b1110, 0b0000, 0b101), // RW
+ kCNTPCT_EL0 = encode(0b11, 0b011, 0b1110, 0b0000, 0b001), // RO
+ kCNTPOFF_EL2 = encode(0b11, 0b100, 0b1110, 0b0000, 0b110), // RW
+ kCNTPS_CTL_EL1 = encode(0b11, 0b111, 0b1110, 0b0010, 0b001), // RW
+ kCNTPS_CVAL_EL1 = encode(0b11, 0b111, 0b1110, 0b0010, 0b010), // RW
+ kCNTPS_TVAL_EL1 = encode(0b11, 0b111, 0b1110, 0b0010, 0b000), // RW
+ kCNTP_CTL_EL0 = encode(0b11, 0b011, 0b1110, 0b0010, 0b001), // RW
+ kCNTP_CTL_EL02 = encode(0b11, 0b101, 0b1110, 0b0010, 0b001), // RW
+ kCNTP_CVAL_EL0 = encode(0b11, 0b011, 0b1110, 0b0010, 0b010), // RW
+ kCNTP_CVAL_EL02 = encode(0b11, 0b101, 0b1110, 0b0010, 0b010), // RW
+ kCNTP_TVAL_EL0 = encode(0b11, 0b011, 0b1110, 0b0010, 0b000), // RW
+ kCNTP_TVAL_EL02 = encode(0b11, 0b101, 0b1110, 0b0010, 0b000), // RW
+ kCNTSCALE_EL2 = encode(0b11, 0b100, 0b1110, 0b0000, 0b100), // RW
+ kCNTVCTSS_EL0 = encode(0b11, 0b011, 0b1110, 0b0000, 0b110), // RW
+ kCNTVCT_EL0 = encode(0b11, 0b011, 0b1110, 0b0000, 0b010), // RO
+ kCNTVFRQ_EL2 = encode(0b11, 0b100, 0b1110, 0b0000, 0b111), // RW
+ kCNTVOFF_EL2 = encode(0b11, 0b100, 0b1110, 0b0000, 0b011), // RW
+ kCNTV_CTL_EL0 = encode(0b11, 0b011, 0b1110, 0b0011, 0b001), // RW
+ kCNTV_CTL_EL02 = encode(0b11, 0b101, 0b1110, 0b0011, 0b001), // RW
+ kCNTV_CVAL_EL0 = encode(0b11, 0b011, 0b1110, 0b0011, 0b010), // RW
+ kCNTV_CVAL_EL02 = encode(0b11, 0b101, 0b1110, 0b0011, 0b010), // RW
+ kCNTV_TVAL_EL0 = encode(0b11, 0b011, 0b1110, 0b0011, 0b000), // RW
+ kCNTV_TVAL_EL02 = encode(0b11, 0b101, 0b1110, 0b0011, 0b000), // RW
+ kCONTEXTIDR_EL1 = encode(0b11, 0b000, 0b1101, 0b0000, 0b001), // RW
+ kCONTEXTIDR_EL12 = encode(0b11, 0b101, 0b1101, 0b0000, 0b001), // RW
+ kCONTEXTIDR_EL2 = encode(0b11, 0b100, 0b1101, 0b0000, 0b001), // RW
+ kCPACR_EL1 = encode(0b11, 0b000, 0b0001, 0b0000, 0b010), // RW
+ kCPACR_EL12 = encode(0b11, 0b101, 0b0001, 0b0000, 0b010), // RW
+ kCPM_IOACC_CTL_EL3 = encode(0b11, 0b111, 0b1111, 0b0010, 0b000), // RW
+ kCPTR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b010), // RW
+ kCPTR_EL3 = encode(0b11, 0b110, 0b0001, 0b0001, 0b010), // RW
+ kCSSELR_EL1 = encode(0b11, 0b010, 0b0000, 0b0000, 0b000), // RW
+ kCTR_EL0 = encode(0b11, 0b011, 0b0000, 0b0000, 0b001), // RO
+ kCurrentEL = encode(0b11, 0b000, 0b0100, 0b0010, 0b010), // RO
+ kDACR32_EL2 = encode(0b11, 0b100, 0b0011, 0b0000, 0b000), // RW
+ kDAIF = encode(0b11, 0b011, 0b0100, 0b0010, 0b001), // RW
+ kDBGAUTHSTATUS_EL1 = encode(0b10, 0b000, 0b0111, 0b1110, 0b110), // RO
+ kDBGBCR0_EL1 = encode(0b10, 0b000, 0b0000, 0b0000, 0b101), // RW
+ kDBGBCR10_EL1 = encode(0b10, 0b000, 0b0000, 0b1010, 0b101), // RW
+ kDBGBCR11_EL1 = encode(0b10, 0b000, 0b0000, 0b1011, 0b101), // RW
+ kDBGBCR12_EL1 = encode(0b10, 0b000, 0b0000, 0b1100, 0b101), // RW
+ kDBGBCR13_EL1 = encode(0b10, 0b000, 0b0000, 0b1101, 0b101), // RW
+ kDBGBCR14_EL1 = encode(0b10, 0b000, 0b0000, 0b1110, 0b101), // RW
+ kDBGBCR15_EL1 = encode(0b10, 0b000, 0b0000, 0b1111, 0b101), // RW
+ kDBGBCR1_EL1 = encode(0b10, 0b000, 0b0000, 0b0001, 0b101), // RW
+ kDBGBCR2_EL1 = encode(0b10, 0b000, 0b0000, 0b0010, 0b101), // RW
+ kDBGBCR3_EL1 = encode(0b10, 0b000, 0b0000, 0b0011, 0b101), // RW
+ kDBGBCR4_EL1 = encode(0b10, 0b000, 0b0000, 0b0100, 0b101), // RW
+ kDBGBCR5_EL1 = encode(0b10, 0b000, 0b0000, 0b0101, 0b101), // RW
+ kDBGBCR6_EL1 = encode(0b10, 0b000, 0b0000, 0b0110, 0b101), // RW
+ kDBGBCR7_EL1 = encode(0b10, 0b000, 0b0000, 0b0111, 0b101), // RW
+ kDBGBCR8_EL1 = encode(0b10, 0b000, 0b0000, 0b1000, 0b101), // RW
+ kDBGBCR9_EL1 = encode(0b10, 0b000, 0b0000, 0b1001, 0b101), // RW
+ kDBGBVR0_EL1 = encode(0b10, 0b000, 0b0000, 0b0000, 0b100), // RW
+ kDBGBVR10_EL1 = encode(0b10, 0b000, 0b0000, 0b1010, 0b100), // RW
+ kDBGBVR11_EL1 = encode(0b10, 0b000, 0b0000, 0b1011, 0b100), // RW
+ kDBGBVR12_EL1 = encode(0b10, 0b000, 0b0000, 0b1100, 0b100), // RW
+ kDBGBVR13_EL1 = encode(0b10, 0b000, 0b0000, 0b1101, 0b100), // RW
+ kDBGBVR14_EL1 = encode(0b10, 0b000, 0b0000, 0b1110, 0b100), // RW
+ kDBGBVR15_EL1 = encode(0b10, 0b000, 0b0000, 0b1111, 0b100), // RW
+ kDBGBVR1_EL1 = encode(0b10, 0b000, 0b0000, 0b0001, 0b100), // RW
+ kDBGBVR2_EL1 = encode(0b10, 0b000, 0b0000, 0b0010, 0b100), // RW
+ kDBGBVR3_EL1 = encode(0b10, 0b000, 0b0000, 0b0011, 0b100), // RW
+ kDBGBVR4_EL1 = encode(0b10, 0b000, 0b0000, 0b0100, 0b100), // RW
+ kDBGBVR5_EL1 = encode(0b10, 0b000, 0b0000, 0b0101, 0b100), // RW
+ kDBGBVR6_EL1 = encode(0b10, 0b000, 0b0000, 0b0110, 0b100), // RW
+ kDBGBVR7_EL1 = encode(0b10, 0b000, 0b0000, 0b0111, 0b100), // RW
+ kDBGBVR8_EL1 = encode(0b10, 0b000, 0b0000, 0b1000, 0b100), // RW
+ kDBGBVR9_EL1 = encode(0b10, 0b000, 0b0000, 0b1001, 0b100), // RW
+ kDBGCLAIMCLR_EL1 = encode(0b10, 0b000, 0b0111, 0b1001, 0b110), // RW
+ kDBGCLAIMSET_EL1 = encode(0b10, 0b000, 0b0111, 0b1000, 0b110), // RW
+ kDBGDTRRX_EL0 = encode(0b10, 0b011, 0b0000, 0b0101, 0b000), // RO
+ kDBGDTRTX_EL0 = encode(0b10, 0b011, 0b0000, 0b0101, 0b000), // WO
+ kDBGDTR_EL0 = encode(0b10, 0b011, 0b0000, 0b0100, 0b000), // RW
+ kDBGPRCR_EL1 = encode(0b10, 0b000, 0b0001, 0b0100, 0b100), // RW
+ kDBGVCR32_EL2 = encode(0b10, 0b100, 0b0000, 0b0111, 0b000), // RW
+ kDBGWCR0_EL1 = encode(0b10, 0b000, 0b0000, 0b0000, 0b111), // RW
+ kDBGWCR10_EL1 = encode(0b10, 0b000, 0b0000, 0b1010, 0b111), // RW
+ kDBGWCR11_EL1 = encode(0b10, 0b000, 0b0000, 0b1011, 0b111), // RW
+ kDBGWCR12_EL1 = encode(0b10, 0b000, 0b0000, 0b1100, 0b111), // RW
+ kDBGWCR13_EL1 = encode(0b10, 0b000, 0b0000, 0b1101, 0b111), // RW
+ kDBGWCR14_EL1 = encode(0b10, 0b000, 0b0000, 0b1110, 0b111), // RW
+ kDBGWCR15_EL1 = encode(0b10, 0b000, 0b0000, 0b1111, 0b111), // RW
+ kDBGWCR1_EL1 = encode(0b10, 0b000, 0b0000, 0b0001, 0b111), // RW
+ kDBGWCR2_EL1 = encode(0b10, 0b000, 0b0000, 0b0010, 0b111), // RW
+ kDBGWCR3_EL1 = encode(0b10, 0b000, 0b0000, 0b0011, 0b111), // RW
+ kDBGWCR4_EL1 = encode(0b10, 0b000, 0b0000, 0b0100, 0b111), // RW
+ kDBGWCR5_EL1 = encode(0b10, 0b000, 0b0000, 0b0101, 0b111), // RW
+ kDBGWCR6_EL1 = encode(0b10, 0b000, 0b0000, 0b0110, 0b111), // RW
+ kDBGWCR7_EL1 = encode(0b10, 0b000, 0b0000, 0b0111, 0b111), // RW
+ kDBGWCR8_EL1 = encode(0b10, 0b000, 0b0000, 0b1000, 0b111), // RW
+ kDBGWCR9_EL1 = encode(0b10, 0b000, 0b0000, 0b1001, 0b111), // RW
+ kDBGWVR0_EL1 = encode(0b10, 0b000, 0b0000, 0b0000, 0b110), // RW
+ kDBGWVR10_EL1 = encode(0b10, 0b000, 0b0000, 0b1010, 0b110), // RW
+ kDBGWVR11_EL1 = encode(0b10, 0b000, 0b0000, 0b1011, 0b110), // RW
+ kDBGWVR12_EL1 = encode(0b10, 0b000, 0b0000, 0b1100, 0b110), // RW
+ kDBGWVR13_EL1 = encode(0b10, 0b000, 0b0000, 0b1101, 0b110), // RW
+ kDBGWVR14_EL1 = encode(0b10, 0b000, 0b0000, 0b1110, 0b110), // RW
+ kDBGWVR15_EL1 = encode(0b10, 0b000, 0b0000, 0b1111, 0b110), // RW
+ kDBGWVR1_EL1 = encode(0b10, 0b000, 0b0000, 0b0001, 0b110), // RW
+ kDBGWVR2_EL1 = encode(0b10, 0b000, 0b0000, 0b0010, 0b110), // RW
+ kDBGWVR3_EL1 = encode(0b10, 0b000, 0b0000, 0b0011, 0b110), // RW
+ kDBGWVR4_EL1 = encode(0b10, 0b000, 0b0000, 0b0100, 0b110), // RW
+ kDBGWVR5_EL1 = encode(0b10, 0b000, 0b0000, 0b0101, 0b110), // RW
+ kDBGWVR6_EL1 = encode(0b10, 0b000, 0b0000, 0b0110, 0b110), // RW
+ kDBGWVR7_EL1 = encode(0b10, 0b000, 0b0000, 0b0111, 0b110), // RW
+ kDBGWVR8_EL1 = encode(0b10, 0b000, 0b0000, 0b1000, 0b110), // RW
+ kDBGWVR9_EL1 = encode(0b10, 0b000, 0b0000, 0b1001, 0b110), // RW
+ kDCZID_EL0 = encode(0b11, 0b011, 0b0000, 0b0000, 0b111), // RO
+ kDISR_EL1 = encode(0b11, 0b000, 0b1100, 0b0001, 0b001), // RW
+ kDIT = encode(0b11, 0b011, 0b0100, 0b0010, 0b101), // RW
+ kDLR_EL0 = encode(0b11, 0b011, 0b0100, 0b0101, 0b001), // RW
+ kDSPSR_EL0 = encode(0b11, 0b011, 0b0100, 0b0101, 0b000), // RW
+ kELR_EL1 = encode(0b11, 0b000, 0b0100, 0b0000, 0b001), // RW
+ kELR_EL12 = encode(0b11, 0b101, 0b0100, 0b0000, 0b001), // RW
+ kELR_EL2 = encode(0b11, 0b100, 0b0100, 0b0000, 0b001), // RW
+ kELR_EL3 = encode(0b11, 0b110, 0b0100, 0b0000, 0b001), // RW
+ kERRIDR_EL1 = encode(0b11, 0b000, 0b0101, 0b0011, 0b000), // RO
+ kERRSELR_EL1 = encode(0b11, 0b000, 0b0101, 0b0011, 0b001), // RW
+ kERXADDR_EL1 = encode(0b11, 0b000, 0b0101, 0b0100, 0b011), // RW
+ kERXCTLR_EL1 = encode(0b11, 0b000, 0b0101, 0b0100, 0b001), // RW
+ kERXFR_EL1 = encode(0b11, 0b000, 0b0101, 0b0100, 0b000), // RO
+ kERXMISC0_EL1 = encode(0b11, 0b000, 0b0101, 0b0101, 0b000), // RW
+ kERXMISC1_EL1 = encode(0b11, 0b000, 0b0101, 0b0101, 0b001), // RW
+ kERXMISC2_EL1 = encode(0b11, 0b000, 0b0101, 0b0101, 0b010), // RW
+ kERXMISC3_EL1 = encode(0b11, 0b000, 0b0101, 0b0101, 0b011), // RW
+ kERXPFGCDN_EL1 = encode(0b11, 0b000, 0b0101, 0b0100, 0b110), // RW
+ kERXPFGCTL_EL1 = encode(0b11, 0b000, 0b0101, 0b0100, 0b101), // RW
+ kERXPFGF_EL1 = encode(0b11, 0b000, 0b0101, 0b0100, 0b100), // RO
+ kERXSTATUS_EL1 = encode(0b11, 0b000, 0b0101, 0b0100, 0b010), // RW
+ kESR_EL1 = encode(0b11, 0b000, 0b0101, 0b0010, 0b000), // RW
+ kESR_EL12 = encode(0b11, 0b101, 0b0101, 0b0010, 0b000), // RW
+ kESR_EL2 = encode(0b11, 0b100, 0b0101, 0b0010, 0b000), // RW
+ kESR_EL3 = encode(0b11, 0b110, 0b0101, 0b0010, 0b000), // RW
+ kFAR_EL1 = encode(0b11, 0b000, 0b0110, 0b0000, 0b000), // RW
+ kFAR_EL12 = encode(0b11, 0b101, 0b0110, 0b0000, 0b000), // RW
+ kFAR_EL2 = encode(0b11, 0b100, 0b0110, 0b0000, 0b000), // RW
+ kFAR_EL3 = encode(0b11, 0b110, 0b0110, 0b0000, 0b000), // RW
+ kFPCR = encode(0b11, 0b011, 0b0100, 0b0100, 0b000), // RW
+ kFPEXC32_EL2 = encode(0b11, 0b100, 0b0101, 0b0011, 0b000), // RW
+ kFPSR = encode(0b11, 0b011, 0b0100, 0b0100, 0b001), // RW
+ kGCR_EL1 = encode(0b11, 0b000, 0b0001, 0b0000, 0b110), // RW
+ kGMID_EL1 = encode(0b11, 0b001, 0b0000, 0b0000, 0b100), // RO
+ kHACR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b111), // RW
+ kHCR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b000), // RW
+ kHDFGRTR_EL2 = encode(0b11, 0b100, 0b0011, 0b0001, 0b100), // RW
+ kHDFGWTR_EL2 = encode(0b11, 0b100, 0b0011, 0b0001, 0b101), // RW
+ kHFGITR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b110), // RW
+ kHFGRTR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b100), // RW
+ kHFGWTR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b101), // RW
+ kHPFAR_EL2 = encode(0b11, 0b100, 0b0110, 0b0000, 0b100), // RW
+ kHSTR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b011), // RW
+ kICC_AP0R0_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b100), // RW
+ kICC_AP0R1_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b101), // RW
+ kICC_AP0R2_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b110), // RW
+ kICC_AP0R3_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b111), // RW
+ kICC_AP1R0_EL1 = encode(0b11, 0b000, 0b1100, 0b1001, 0b000), // RW
+ kICC_AP1R1_EL1 = encode(0b11, 0b000, 0b1100, 0b1001, 0b001), // RW
+ kICC_AP1R2_EL1 = encode(0b11, 0b000, 0b1100, 0b1001, 0b010), // RW
+ kICC_AP1R3_EL1 = encode(0b11, 0b000, 0b1100, 0b1001, 0b011), // RW
+ kICC_ASGI1R_EL1 = encode(0b11, 0b000, 0b1100, 0b1011, 0b110), // WO
+ kICC_BPR0_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b011), // RW
+ kICC_BPR1_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b011), // RW
+ kICC_CTLR_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b100), // RW
+ kICC_CTLR_EL3 = encode(0b11, 0b110, 0b1100, 0b1100, 0b100), // RW
+ kICC_DIR_EL1 = encode(0b11, 0b000, 0b1100, 0b1011, 0b001), // WO
+ kICC_EOIR0_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b001), // WO
+ kICC_EOIR1_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b001), // WO
+ kICC_HPPIR0_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b010), // RO
+ kICC_HPPIR1_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b010), // RO
+ kICC_IAR0_EL1 = encode(0b11, 0b000, 0b1100, 0b1000, 0b000), // RO
+ kICC_IAR1_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b000), // RO
+ kICC_IGRPEN0_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b110), // RW
+ kICC_IGRPEN1_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b111), // RW
+ kICC_IGRPEN1_EL3 = encode(0b11, 0b110, 0b1100, 0b1100, 0b111), // RW
+ kICC_PMR_EL1 = encode(0b11, 0b000, 0b0100, 0b0110, 0b000), // RW
+ kICC_RPR_EL1 = encode(0b11, 0b000, 0b1100, 0b1011, 0b011), // RO
+ kICC_SGI0R_EL1 = encode(0b11, 0b000, 0b1100, 0b1011, 0b111), // WO
+ kICC_SGI1R_EL1 = encode(0b11, 0b000, 0b1100, 0b1011, 0b101), // WO
+ kICC_SRE_EL1 = encode(0b11, 0b000, 0b1100, 0b1100, 0b101), // RW
+ kICC_SRE_EL2 = encode(0b11, 0b100, 0b1100, 0b1001, 0b101), // RW
+ kICC_SRE_EL3 = encode(0b11, 0b110, 0b1100, 0b1100, 0b101), // RW
+ kICH_AP0R0_EL2 = encode(0b11, 0b100, 0b1100, 0b1000, 0b000), // RW
+ kICH_AP0R1_EL2 = encode(0b11, 0b100, 0b1100, 0b1000, 0b001), // RW
+ kICH_AP0R2_EL2 = encode(0b11, 0b100, 0b1100, 0b1000, 0b010), // RW
+ kICH_AP0R3_EL2 = encode(0b11, 0b100, 0b1100, 0b1000, 0b011), // RW
+ kICH_AP1R0_EL2 = encode(0b11, 0b100, 0b1100, 0b1001, 0b000), // RW
+ kICH_AP1R1_EL2 = encode(0b11, 0b100, 0b1100, 0b1001, 0b001), // RW
+ kICH_AP1R2_EL2 = encode(0b11, 0b100, 0b1100, 0b1001, 0b010), // RW
+ kICH_AP1R3_EL2 = encode(0b11, 0b100, 0b1100, 0b1001, 0b011), // RW
+ kICH_EISR_EL2 = encode(0b11, 0b100, 0b1100, 0b1011, 0b011), // RO
+ kICH_ELRSR_EL2 = encode(0b11, 0b100, 0b1100, 0b1011, 0b101), // RO
+ kICH_HCR_EL2 = encode(0b11, 0b100, 0b1100, 0b1011, 0b000), // RW
+ kICH_LR0_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b000), // RW
+ kICH_LR10_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b010), // RW
+ kICH_LR11_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b011), // RW
+ kICH_LR12_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b100), // RW
+ kICH_LR13_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b101), // RW
+ kICH_LR14_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b110), // RW
+ kICH_LR15_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b111), // RW
+ kICH_LR1_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b001), // RW
+ kICH_LR2_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b010), // RW
+ kICH_LR3_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b011), // RW
+ kICH_LR4_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b100), // RW
+ kICH_LR5_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b101), // RW
+ kICH_LR6_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b110), // RW
+ kICH_LR7_EL2 = encode(0b11, 0b100, 0b1100, 0b1100, 0b111), // RW
+ kICH_LR8_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b000), // RW
+ kICH_LR9_EL2 = encode(0b11, 0b100, 0b1100, 0b1101, 0b001), // RW
+ kICH_MISR_EL2 = encode(0b11, 0b100, 0b1100, 0b1011, 0b010), // RO
+ kICH_VMCR_EL2 = encode(0b11, 0b100, 0b1100, 0b1011, 0b111), // RW
+ kICH_VTR_EL2 = encode(0b11, 0b100, 0b1100, 0b1011, 0b001), // RO
+ kID_AA64AFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0101, 0b100), // RO
+ kID_AA64AFR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0101, 0b101), // RO
+ kID_AA64DFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0101, 0b000), // RO
+ kID_AA64DFR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0101, 0b001), // RO
+ kID_AA64ISAR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0110, 0b000), // RO
+ kID_AA64ISAR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0110, 0b001), // RO
+ kID_AA64MMFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0111, 0b000), // RO
+ kID_AA64MMFR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0111, 0b001), // RO
+ kID_AA64MMFR2_EL1 = encode(0b11, 0b000, 0b0000, 0b0111, 0b010), // RO
+ kID_AA64PFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0100, 0b000), // RO
+ kID_AA64PFR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0100, 0b001), // RO
+ kID_AA64ZFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0100, 0b100), // RO
+ kID_AFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b011), // RO
+ kID_DFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b010), // RO
+ kID_ISAR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b000), // RO
+ kID_ISAR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b001), // RO
+ kID_ISAR2_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b010), // RO
+ kID_ISAR3_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b011), // RO
+ kID_ISAR4_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b100), // RO
+ kID_ISAR5_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b101), // RO
+ kID_ISAR6_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b111), // RO
+ kID_MMFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b100), // RO
+ kID_MMFR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b101), // RO
+ kID_MMFR2_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b110), // RO
+ kID_MMFR3_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b111), // RO
+ kID_MMFR4_EL1 = encode(0b11, 0b000, 0b0000, 0b0010, 0b110), // RO
+ kID_MMFR5_EL1 = encode(0b11, 0b000, 0b0000, 0b0011, 0b110), // RO
+ kID_PFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b000), // RO
+ kID_PFR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0001, 0b001), // RO
+ kID_PFR2_EL1 = encode(0b11, 0b000, 0b0000, 0b0011, 0b100), // RO
+ kIFSR32_EL2 = encode(0b11, 0b100, 0b0101, 0b0000, 0b001), // RW
+ kISR_EL1 = encode(0b11, 0b000, 0b1100, 0b0001, 0b000), // RO
+ kLORC_EL1 = encode(0b11, 0b000, 0b1010, 0b0100, 0b011), // RW
+ kLOREA_EL1 = encode(0b11, 0b000, 0b1010, 0b0100, 0b001), // RW
+ kLORID_EL1 = encode(0b11, 0b000, 0b1010, 0b0100, 0b111), // RO
+ kLORN_EL1 = encode(0b11, 0b000, 0b1010, 0b0100, 0b010), // RW
+ kLORSA_EL1 = encode(0b11, 0b000, 0b1010, 0b0100, 0b000), // RW
+ kMAIR_EL1 = encode(0b11, 0b000, 0b1010, 0b0010, 0b000), // RW
+ kMAIR_EL12 = encode(0b11, 0b101, 0b1010, 0b0010, 0b000), // RW
+ kMAIR_EL2 = encode(0b11, 0b100, 0b1010, 0b0010, 0b000), // RW
+ kMAIR_EL3 = encode(0b11, 0b110, 0b1010, 0b0010, 0b000), // RW
+ kMDCCINT_EL1 = encode(0b10, 0b000, 0b0000, 0b0010, 0b000), // RW
+ kMDCCSR_EL0 = encode(0b10, 0b011, 0b0000, 0b0001, 0b000), // RO
+ kMDCR_EL2 = encode(0b11, 0b100, 0b0001, 0b0001, 0b001), // RW
+ kMDCR_EL3 = encode(0b11, 0b110, 0b0001, 0b0011, 0b001), // RW
+ kMDRAR_EL1 = encode(0b10, 0b000, 0b0001, 0b0000, 0b000), // RO
+ kMDSCR_EL1 = encode(0b10, 0b000, 0b0000, 0b0010, 0b010), // RW
+ kMIDR_EL1 = encode(0b11, 0b000, 0b0000, 0b0000, 0b000), // RO
+ kMPAM0_EL1 = encode(0b11, 0b000, 0b1010, 0b0101, 0b001), // RW
+ kMPAM1_EL1 = encode(0b11, 0b000, 0b1010, 0b0101, 0b000), // RW
+ kMPAM1_EL12 = encode(0b11, 0b101, 0b1010, 0b0101, 0b000), // RW
+ kMPAM2_EL2 = encode(0b11, 0b100, 0b1010, 0b0101, 0b000), // RW
+ kMPAM3_EL3 = encode(0b11, 0b110, 0b1010, 0b0101, 0b000), // RW
+ kMPAMHCR_EL2 = encode(0b11, 0b100, 0b1010, 0b0100, 0b000), // RW
+ kMPAMIDR_EL1 = encode(0b11, 0b000, 0b1010, 0b0100, 0b100), // RO
+ kMPAMVPM0_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b000), // RW
+ kMPAMVPM1_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b001), // RW
+ kMPAMVPM2_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b010), // RW
+ kMPAMVPM3_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b011), // RW
+ kMPAMVPM4_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b100), // RW
+ kMPAMVPM5_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b101), // RW
+ kMPAMVPM6_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b110), // RW
+ kMPAMVPM7_EL2 = encode(0b11, 0b100, 0b1010, 0b0110, 0b111), // RW
+ kMPAMVPMV_EL2 = encode(0b11, 0b100, 0b1010, 0b0100, 0b001), // RW
+ kMPIDR_EL1 = encode(0b11, 0b000, 0b0000, 0b0000, 0b101), // RO
+ kMVFR0_EL1 = encode(0b11, 0b000, 0b0000, 0b0011, 0b000), // RO
+ kMVFR1_EL1 = encode(0b11, 0b000, 0b0000, 0b0011, 0b001), // RO
+ kMVFR2_EL1 = encode(0b11, 0b000, 0b0000, 0b0011, 0b010), // RO
+ kNZCV = encode(0b11, 0b011, 0b0100, 0b0010, 0b000), // RW
+ kOSDLR_EL1 = encode(0b10, 0b000, 0b0001, 0b0011, 0b100), // RW
+ kOSDTRRX_EL1 = encode(0b10, 0b000, 0b0000, 0b0000, 0b010), // RW
+ kOSDTRTX_EL1 = encode(0b10, 0b000, 0b0000, 0b0011, 0b010), // RW
+ kOSECCR_EL1 = encode(0b10, 0b000, 0b0000, 0b0110, 0b010), // RW
+ kOSLAR_EL1 = encode(0b10, 0b000, 0b0001, 0b0000, 0b100), // WO
+ kOSLSR_EL1 = encode(0b10, 0b000, 0b0001, 0b0001, 0b100), // RO
+ kPAN = encode(0b11, 0b000, 0b0100, 0b0010, 0b011), // RW
+ kPAR_EL1 = encode(0b11, 0b000, 0b0111, 0b0100, 0b000), // RW
+ kPMBIDR_EL1 = encode(0b11, 0b000, 0b1001, 0b1010, 0b111), // RO
+ kPMBLIMITR_EL1 = encode(0b11, 0b000, 0b1001, 0b1010, 0b000), // RW
+ kPMBPTR_EL1 = encode(0b11, 0b000, 0b1001, 0b1010, 0b001), // RW
+ kPMBSR_EL1 = encode(0b11, 0b000, 0b1001, 0b1010, 0b011), // RW
+ kPMCCFILTR_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b111), // RW
+ kPMCCNTR_EL0 = encode(0b11, 0b011, 0b1001, 0b1101, 0b000), // RW
+ kPMCEID0_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b110), // RO
+ kPMCEID1_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b111), // RO
+ kPMCNTENCLR_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b010), // RW
+ kPMCNTENSET_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b001), // RW
+ kPMCR_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b000), // RW
+ kPMEVCNTR0_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b000), // RW
+ kPMEVCNTR10_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b010), // RW
+ kPMEVCNTR11_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b011), // RW
+ kPMEVCNTR12_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b100), // RW
+ kPMEVCNTR13_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b101), // RW
+ kPMEVCNTR14_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b110), // RW
+ kPMEVCNTR15_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b111), // RW
+ kPMEVCNTR16_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b000), // RW
+ kPMEVCNTR17_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b001), // RW
+ kPMEVCNTR18_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b010), // RW
+ kPMEVCNTR19_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b011), // RW
+ kPMEVCNTR1_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b001), // RW
+ kPMEVCNTR20_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b100), // RW
+ kPMEVCNTR21_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b101), // RW
+ kPMEVCNTR22_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b110), // RW
+ kPMEVCNTR23_EL0 = encode(0b11, 0b011, 0b1110, 0b1010, 0b111), // RW
+ kPMEVCNTR24_EL0 = encode(0b11, 0b011, 0b1110, 0b1011, 0b000), // RW
+ kPMEVCNTR25_EL0 = encode(0b11, 0b011, 0b1110, 0b1011, 0b001), // RW
+ kPMEVCNTR26_EL0 = encode(0b11, 0b011, 0b1110, 0b1011, 0b010), // RW
+ kPMEVCNTR27_EL0 = encode(0b11, 0b011, 0b1110, 0b1011, 0b011), // RW
+ kPMEVCNTR28_EL0 = encode(0b11, 0b011, 0b1110, 0b1011, 0b100), // RW
+ kPMEVCNTR29_EL0 = encode(0b11, 0b011, 0b1110, 0b1011, 0b101), // RW
+ kPMEVCNTR2_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b010), // RW
+ kPMEVCNTR30_EL0 = encode(0b11, 0b011, 0b1110, 0b1011, 0b110), // RW
+ kPMEVCNTR3_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b011), // RW
+ kPMEVCNTR4_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b100), // RW
+ kPMEVCNTR5_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b101), // RW
+ kPMEVCNTR6_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b110), // RW
+ kPMEVCNTR7_EL0 = encode(0b11, 0b011, 0b1110, 0b1000, 0b111), // RW
+ kPMEVCNTR8_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b000), // RW
+ kPMEVCNTR9_EL0 = encode(0b11, 0b011, 0b1110, 0b1001, 0b001), // RW
+ kPMEVTYPER0_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b000), // RW
+ kPMEVTYPER10_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b010), // RW
+ kPMEVTYPER11_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b011), // RW
+ kPMEVTYPER12_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b100), // RW
+ kPMEVTYPER13_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b101), // RW
+ kPMEVTYPER14_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b110), // RW
+ kPMEVTYPER15_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b111), // RW
+ kPMEVTYPER16_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b000), // RW
+ kPMEVTYPER17_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b001), // RW
+ kPMEVTYPER18_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b010), // RW
+ kPMEVTYPER19_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b011), // RW
+ kPMEVTYPER1_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b001), // RW
+ kPMEVTYPER20_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b100), // RW
+ kPMEVTYPER21_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b101), // RW
+ kPMEVTYPER22_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b110), // RW
+ kPMEVTYPER23_EL0 = encode(0b11, 0b011, 0b1110, 0b1110, 0b111), // RW
+ kPMEVTYPER24_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b000), // RW
+ kPMEVTYPER25_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b001), // RW
+ kPMEVTYPER26_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b010), // RW
+ kPMEVTYPER27_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b011), // RW
+ kPMEVTYPER28_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b100), // RW
+ kPMEVTYPER29_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b101), // RW
+ kPMEVTYPER2_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b010), // RW
+ kPMEVTYPER30_EL0 = encode(0b11, 0b011, 0b1110, 0b1111, 0b110), // RW
+ kPMEVTYPER3_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b011), // RW
+ kPMEVTYPER4_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b100), // RW
+ kPMEVTYPER5_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b101), // RW
+ kPMEVTYPER6_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b110), // RW
+ kPMEVTYPER7_EL0 = encode(0b11, 0b011, 0b1110, 0b1100, 0b111), // RW
+ kPMEVTYPER8_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b000), // RW
+ kPMEVTYPER9_EL0 = encode(0b11, 0b011, 0b1110, 0b1101, 0b001), // RW
+ kPMINTENCLR_EL1 = encode(0b11, 0b000, 0b1001, 0b1110, 0b010), // RW
+ kPMINTENSET_EL1 = encode(0b11, 0b000, 0b1001, 0b1110, 0b001), // RW
+ kPMMIR_EL1 = encode(0b11, 0b000, 0b1001, 0b1110, 0b110), // RW
+ kPMOVSCLR_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b011), // RW
+ kPMOVSSET_EL0 = encode(0b11, 0b011, 0b1001, 0b1110, 0b011), // RW
+ kPMSCR_EL1 = encode(0b11, 0b000, 0b1001, 0b1001, 0b000), // RW
+ kPMSCR_EL12 = encode(0b11, 0b101, 0b1001, 0b1001, 0b000), // RW
+ kPMSCR_EL2 = encode(0b11, 0b100, 0b1001, 0b1001, 0b000), // RW
+ kPMSELR_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b101), // RW
+ kPMSEVFR_EL1 = encode(0b11, 0b000, 0b1001, 0b1001, 0b101), // RW
+ kPMSFCR_EL1 = encode(0b11, 0b000, 0b1001, 0b1001, 0b100), // RW
+ kPMSICR_EL1 = encode(0b11, 0b000, 0b1001, 0b1001, 0b010), // RW
+ kPMSIDR_EL1 = encode(0b11, 0b000, 0b1001, 0b1001, 0b111), // RO
+ kPMSIRR_EL1 = encode(0b11, 0b000, 0b1001, 0b1001, 0b011), // RW
+ kPMSLATFR_EL1 = encode(0b11, 0b000, 0b1001, 0b1001, 0b110), // RW
+ kPMSWINC_EL0 = encode(0b11, 0b011, 0b1001, 0b1100, 0b100), // WO
+ kPMUSERENR_EL0 = encode(0b11, 0b011, 0b1001, 0b1110, 0b000), // RW
+ kPMXEVCNTR_EL0 = encode(0b11, 0b011, 0b1001, 0b1101, 0b010), // RW
+ kPMXEVTYPER_EL0 = encode(0b11, 0b011, 0b1001, 0b1101, 0b001), // RW
+ kREVIDR_EL1 = encode(0b11, 0b000, 0b0000, 0b0000, 0b110), // RO
+ kRGSR_EL1 = encode(0b11, 0b000, 0b0001, 0b0000, 0b101), // RW
+ kRMR_EL1 = encode(0b11, 0b000, 0b1100, 0b0000, 0b010), // RW
+ kRMR_EL2 = encode(0b11, 0b100, 0b1100, 0b0000, 0b010), // RW
+ kRMR_EL3 = encode(0b11, 0b110, 0b1100, 0b0000, 0b010), // RW
+ kRNDR = encode(0b11, 0b011, 0b0010, 0b0100, 0b000), // RO
+ kRNDRRS = encode(0b11, 0b011, 0b0010, 0b0100, 0b001), // RO
+ kRVBAR_EL1 = encode(0b11, 0b000, 0b1100, 0b0000, 0b001), // RO
+ kRVBAR_EL2 = encode(0b11, 0b100, 0b1100, 0b0000, 0b001), // RO
+ kRVBAR_EL3 = encode(0b11, 0b110, 0b1100, 0b0000, 0b001), // RO
+ kSCR_EL3 = encode(0b11, 0b110, 0b0001, 0b0001, 0b000), // RW
+ kSCTLR_EL1 = encode(0b11, 0b000, 0b0001, 0b0000, 0b000), // RW
+ kSCTLR_EL12 = encode(0b11, 0b101, 0b0001, 0b0000, 0b000), // RW
+ kSCTLR_EL2 = encode(0b11, 0b100, 0b0001, 0b0000, 0b000), // RW
+ kSCTLR_EL3 = encode(0b11, 0b110, 0b0001, 0b0000, 0b000), // RW
+ kSCXTNUM_EL0 = encode(0b11, 0b011, 0b1101, 0b0000, 0b111), // RW
+ kSCXTNUM_EL1 = encode(0b11, 0b000, 0b1101, 0b0000, 0b111), // RW
+ kSCXTNUM_EL12 = encode(0b11, 0b101, 0b1101, 0b0000, 0b111), // RW
+ kSCXTNUM_EL2 = encode(0b11, 0b100, 0b1101, 0b0000, 0b111), // RW
+ kSCXTNUM_EL3 = encode(0b11, 0b110, 0b1101, 0b0000, 0b111), // RW
+ kSDER32_EL2 = encode(0b11, 0b100, 0b0001, 0b0011, 0b001), // RW
+ kSDER32_EL3 = encode(0b11, 0b110, 0b0001, 0b0001, 0b001), // RW
+ kSPSR_EL1 = encode(0b11, 0b000, 0b0100, 0b0000, 0b000), // RW
+ kSPSR_EL12 = encode(0b11, 0b101, 0b0100, 0b0000, 0b000), // RW
+ kSPSR_EL2 = encode(0b11, 0b100, 0b0100, 0b0000, 0b000), // RW
+ kSPSR_EL3 = encode(0b11, 0b110, 0b0100, 0b0000, 0b000), // RW
+ kSPSR_abt = encode(0b11, 0b100, 0b0100, 0b0011, 0b001), // RW
+ kSPSR_fiq = encode(0b11, 0b100, 0b0100, 0b0011, 0b011), // RW
+ kSPSR_irq = encode(0b11, 0b100, 0b0100, 0b0011, 0b000), // RW
+ kSPSR_und = encode(0b11, 0b100, 0b0100, 0b0011, 0b010), // RW
+ kSPSel = encode(0b11, 0b000, 0b0100, 0b0010, 0b000), // RW
+ kSP_EL0 = encode(0b11, 0b000, 0b0100, 0b0001, 0b000), // RW
+ kSP_EL1 = encode(0b11, 0b100, 0b0100, 0b0001, 0b000), // RW
+ kSP_EL2 = encode(0b11, 0b110, 0b0100, 0b0001, 0b000), // RW
+ kSSBS = encode(0b11, 0b011, 0b0100, 0b0010, 0b110), // RW
+ kTCO = encode(0b11, 0b011, 0b0100, 0b0010, 0b111), // RW
+ kTCR_EL1 = encode(0b11, 0b000, 0b0010, 0b0000, 0b010), // RW
+ kTCR_EL12 = encode(0b11, 0b101, 0b0010, 0b0000, 0b010), // RW
+ kTCR_EL2 = encode(0b11, 0b100, 0b0010, 0b0000, 0b010), // RW
+ kTCR_EL3 = encode(0b11, 0b110, 0b0010, 0b0000, 0b010), // RW
+ kTEECR32_EL1 = encode(0b10, 0b010, 0b0000, 0b0000, 0b000), // RW
+ kTEEHBR32_EL1 = encode(0b10, 0b010, 0b0001, 0b0000, 0b000), // RW
+ kTFSRE0_EL1 = encode(0b11, 0b000, 0b0101, 0b0110, 0b001), // RW
+ kTFSR_EL1 = encode(0b11, 0b000, 0b0101, 0b0110, 0b000), // RW
+ kTFSR_EL12 = encode(0b11, 0b101, 0b0101, 0b0110, 0b000), // RW
+ kTFSR_EL2 = encode(0b11, 0b100, 0b0101, 0b0110, 0b000), // RW
+ kTFSR_EL3 = encode(0b11, 0b110, 0b0101, 0b0110, 0b000), // RW
+ kTPIDRRO_EL0 = encode(0b11, 0b011, 0b1101, 0b0000, 0b011), // RW
+ kTPIDR_EL0 = encode(0b11, 0b011, 0b1101, 0b0000, 0b010), // RW
+ kTPIDR_EL1 = encode(0b11, 0b000, 0b1101, 0b0000, 0b100), // RW
+ kTPIDR_EL2 = encode(0b11, 0b100, 0b1101, 0b0000, 0b010), // RW
+ kTPIDR_EL3 = encode(0b11, 0b110, 0b1101, 0b0000, 0b010), // RW
+ kTRBBASER_EL1 = encode(0b11, 0b000, 0b1001, 0b1011, 0b010), // RW
+ kTRBIDR_EL1 = encode(0b11, 0b000, 0b1001, 0b1011, 0b111), // RO
+ kTRBLIMITR_EL1 = encode(0b11, 0b000, 0b1001, 0b1011, 0b000), // RW
+ kTRBMAR_EL1 = encode(0b11, 0b000, 0b1001, 0b1011, 0b100), // RW
+ kTRBPTR_EL1 = encode(0b11, 0b000, 0b1001, 0b1011, 0b001), // RW
+ kTRBSR_EL1 = encode(0b11, 0b000, 0b1001, 0b1011, 0b011), // RW
+ kTRBTRG_EL1 = encode(0b11, 0b000, 0b1001, 0b1011, 0b110), // RW
+ kTRCACATR0 = encode(0b10, 0b001, 0b0010, 0b0000, 0b010), // RW
+ kTRCACATR1 = encode(0b10, 0b001, 0b0010, 0b0010, 0b010), // RW
+ kTRCACATR10 = encode(0b10, 0b001, 0b0010, 0b0100, 0b011), // RW
+ kTRCACATR11 = encode(0b10, 0b001, 0b0010, 0b0110, 0b011), // RW
+ kTRCACATR12 = encode(0b10, 0b001, 0b0010, 0b1000, 0b011), // RW
+ kTRCACATR13 = encode(0b10, 0b001, 0b0010, 0b1010, 0b011), // RW
+ kTRCACATR14 = encode(0b10, 0b001, 0b0010, 0b1100, 0b011), // RW
+ kTRCACATR15 = encode(0b10, 0b001, 0b0010, 0b1110, 0b011), // RW
+ kTRCACATR2 = encode(0b10, 0b001, 0b0010, 0b0100, 0b010), // RW
+ kTRCACATR3 = encode(0b10, 0b001, 0b0010, 0b0110, 0b010), // RW
+ kTRCACATR4 = encode(0b10, 0b001, 0b0010, 0b1000, 0b010), // RW
+ kTRCACATR5 = encode(0b10, 0b001, 0b0010, 0b1010, 0b010), // RW
+ kTRCACATR6 = encode(0b10, 0b001, 0b0010, 0b1100, 0b010), // RW
+ kTRCACATR7 = encode(0b10, 0b001, 0b0010, 0b1110, 0b010), // RW
+ kTRCACATR8 = encode(0b10, 0b001, 0b0010, 0b0000, 0b011), // RW
+ kTRCACATR9 = encode(0b10, 0b001, 0b0010, 0b0010, 0b011), // RW
+ kTRCACVR0 = encode(0b10, 0b001, 0b0010, 0b0000, 0b000), // RW
+ kTRCACVR1 = encode(0b10, 0b001, 0b0010, 0b0010, 0b000), // RW
+ kTRCACVR10 = encode(0b10, 0b001, 0b0010, 0b0100, 0b001), // RW
+ kTRCACVR11 = encode(0b10, 0b001, 0b0010, 0b0110, 0b001), // RW
+ kTRCACVR12 = encode(0b10, 0b001, 0b0010, 0b1000, 0b001), // RW
+ kTRCACVR13 = encode(0b10, 0b001, 0b0010, 0b1010, 0b001), // RW
+ kTRCACVR14 = encode(0b10, 0b001, 0b0010, 0b1100, 0b001), // RW
+ kTRCACVR15 = encode(0b10, 0b001, 0b0010, 0b1110, 0b001), // RW
+ kTRCACVR2 = encode(0b10, 0b001, 0b0010, 0b0100, 0b000), // RW
+ kTRCACVR3 = encode(0b10, 0b001, 0b0010, 0b0110, 0b000), // RW
+ kTRCACVR4 = encode(0b10, 0b001, 0b0010, 0b1000, 0b000), // RW
+ kTRCACVR5 = encode(0b10, 0b001, 0b0010, 0b1010, 0b000), // RW
+ kTRCACVR6 = encode(0b10, 0b001, 0b0010, 0b1100, 0b000), // RW
+ kTRCACVR7 = encode(0b10, 0b001, 0b0010, 0b1110, 0b000), // RW
+ kTRCACVR8 = encode(0b10, 0b001, 0b0010, 0b0000, 0b001), // RW
+ kTRCACVR9 = encode(0b10, 0b001, 0b0010, 0b0010, 0b001), // RW
+ kTRCAUTHSTATUS = encode(0b10, 0b001, 0b0111, 0b1110, 0b110), // RO
+ kTRCAUXCTLR = encode(0b10, 0b001, 0b0000, 0b0110, 0b000), // RW
+ kTRCBBCTLR = encode(0b10, 0b001, 0b0000, 0b1111, 0b000), // RW
+ kTRCCCCTLR = encode(0b10, 0b001, 0b0000, 0b1110, 0b000), // RW
+ kTRCCIDCCTLR0 = encode(0b10, 0b001, 0b0011, 0b0000, 0b010), // RW
+ kTRCCIDCCTLR1 = encode(0b10, 0b001, 0b0011, 0b0001, 0b010), // RW
+ kTRCCIDCVR0 = encode(0b10, 0b001, 0b0011, 0b0000, 0b000), // RW
+ kTRCCIDCVR1 = encode(0b10, 0b001, 0b0011, 0b0010, 0b000), // RW
+ kTRCCIDCVR2 = encode(0b10, 0b001, 0b0011, 0b0100, 0b000), // RW
+ kTRCCIDCVR3 = encode(0b10, 0b001, 0b0011, 0b0110, 0b000), // RW
+ kTRCCIDCVR4 = encode(0b10, 0b001, 0b0011, 0b1000, 0b000), // RW
+ kTRCCIDCVR5 = encode(0b10, 0b001, 0b0011, 0b1010, 0b000), // RW
+ kTRCCIDCVR6 = encode(0b10, 0b001, 0b0011, 0b1100, 0b000), // RW
+ kTRCCIDCVR7 = encode(0b10, 0b001, 0b0011, 0b1110, 0b000), // RW
+ kTRCCIDR0 = encode(0b10, 0b001, 0b0111, 0b1100, 0b111), // RO
+ kTRCCIDR1 = encode(0b10, 0b001, 0b0111, 0b1101, 0b111), // RO
+ kTRCCIDR2 = encode(0b10, 0b001, 0b0111, 0b1110, 0b111), // RO
+ kTRCCIDR3 = encode(0b10, 0b001, 0b0111, 0b1111, 0b111), // RO
+ kTRCCLAIMCLR = encode(0b10, 0b001, 0b0111, 0b1001, 0b110), // RW
+ kTRCCLAIMSET = encode(0b10, 0b001, 0b0111, 0b1000, 0b110), // RW
+ kTRCCNTCTLR0 = encode(0b10, 0b001, 0b0000, 0b0100, 0b101), // RW
+ kTRCCNTCTLR1 = encode(0b10, 0b001, 0b0000, 0b0101, 0b101), // RW
+ kTRCCNTCTLR2 = encode(0b10, 0b001, 0b0000, 0b0110, 0b101), // RW
+ kTRCCNTCTLR3 = encode(0b10, 0b001, 0b0000, 0b0111, 0b101), // RW
+ kTRCCNTRLDVR0 = encode(0b10, 0b001, 0b0000, 0b0000, 0b101), // RW
+ kTRCCNTRLDVR1 = encode(0b10, 0b001, 0b0000, 0b0001, 0b101), // RW
+ kTRCCNTRLDVR2 = encode(0b10, 0b001, 0b0000, 0b0010, 0b101), // RW
+ kTRCCNTRLDVR3 = encode(0b10, 0b001, 0b0000, 0b0011, 0b101), // RW
+ kTRCCNTVR0 = encode(0b10, 0b001, 0b0000, 0b1000, 0b101), // RW
+ kTRCCNTVR1 = encode(0b10, 0b001, 0b0000, 0b1001, 0b101), // RW
+ kTRCCNTVR2 = encode(0b10, 0b001, 0b0000, 0b1010, 0b101), // RW
+ kTRCCNTVR3 = encode(0b10, 0b001, 0b0000, 0b1011, 0b101), // RW
+ kTRCCONFIGR = encode(0b10, 0b001, 0b0000, 0b0100, 0b000), // RW
+ kTRCDEVAFF0 = encode(0b10, 0b001, 0b0111, 0b1010, 0b110), // RO
+ kTRCDEVAFF1 = encode(0b10, 0b001, 0b0111, 0b1011, 0b110), // RO
+ kTRCDEVARCH = encode(0b10, 0b001, 0b0111, 0b1111, 0b110), // RO
+ kTRCDEVID = encode(0b10, 0b001, 0b0111, 0b0010, 0b111), // RO
+ kTRCDEVTYPE = encode(0b10, 0b001, 0b0111, 0b0011, 0b111), // RO
+ kTRCDVCMR0 = encode(0b10, 0b001, 0b0010, 0b0000, 0b110), // RW
+ kTRCDVCMR1 = encode(0b10, 0b001, 0b0010, 0b0100, 0b110), // RW
+ kTRCDVCMR2 = encode(0b10, 0b001, 0b0010, 0b1000, 0b110), // RW
+ kTRCDVCMR3 = encode(0b10, 0b001, 0b0010, 0b1100, 0b110), // RW
+ kTRCDVCMR4 = encode(0b10, 0b001, 0b0010, 0b0000, 0b111), // RW
+ kTRCDVCMR5 = encode(0b10, 0b001, 0b0010, 0b0100, 0b111), // RW
+ kTRCDVCMR6 = encode(0b10, 0b001, 0b0010, 0b1000, 0b111), // RW
+ kTRCDVCMR7 = encode(0b10, 0b001, 0b0010, 0b1100, 0b111), // RW
+ kTRCDVCVR0 = encode(0b10, 0b001, 0b0010, 0b0000, 0b100), // RW
+ kTRCDVCVR1 = encode(0b10, 0b001, 0b0010, 0b0100, 0b100), // RW
+ kTRCDVCVR2 = encode(0b10, 0b001, 0b0010, 0b1000, 0b100), // RW
+ kTRCDVCVR3 = encode(0b10, 0b001, 0b0010, 0b1100, 0b100), // RW
+ kTRCDVCVR4 = encode(0b10, 0b001, 0b0010, 0b0000, 0b101), // RW
+ kTRCDVCVR5 = encode(0b10, 0b001, 0b0010, 0b0100, 0b101), // RW
+ kTRCDVCVR6 = encode(0b10, 0b001, 0b0010, 0b1000, 0b101), // RW
+ kTRCDVCVR7 = encode(0b10, 0b001, 0b0010, 0b1100, 0b101), // RW
+ kTRCEVENTCTL0R = encode(0b10, 0b001, 0b0000, 0b1000, 0b000), // RW
+ kTRCEVENTCTL1R = encode(0b10, 0b001, 0b0000, 0b1001, 0b000), // RW
+ kTRCEXTINSELR = encode(0b10, 0b001, 0b0000, 0b1000, 0b100), // RW
+ kTRCEXTINSELR0 = encode(0b10, 0b001, 0b0000, 0b1000, 0b100), // RW
+ kTRCEXTINSELR1 = encode(0b10, 0b001, 0b0000, 0b1001, 0b100), // RW
+ kTRCEXTINSELR2 = encode(0b10, 0b001, 0b0000, 0b1010, 0b100), // RW
+ kTRCEXTINSELR3 = encode(0b10, 0b001, 0b0000, 0b1011, 0b100), // RW
+ kTRCIDR0 = encode(0b10, 0b001, 0b0000, 0b1000, 0b111), // RO
+ kTRCIDR1 = encode(0b10, 0b001, 0b0000, 0b1001, 0b111), // RO
+ kTRCIDR10 = encode(0b10, 0b001, 0b0000, 0b0010, 0b110), // RO
+ kTRCIDR11 = encode(0b10, 0b001, 0b0000, 0b0011, 0b110), // RO
+ kTRCIDR12 = encode(0b10, 0b001, 0b0000, 0b0100, 0b110), // RO
+ kTRCIDR13 = encode(0b10, 0b001, 0b0000, 0b0101, 0b110), // RO
+ kTRCIDR2 = encode(0b10, 0b001, 0b0000, 0b1010, 0b111), // RO
+ kTRCIDR3 = encode(0b10, 0b001, 0b0000, 0b1011, 0b111), // RO
+ kTRCIDR4 = encode(0b10, 0b001, 0b0000, 0b1100, 0b111), // RO
+ kTRCIDR5 = encode(0b10, 0b001, 0b0000, 0b1101, 0b111), // RO
+ kTRCIDR6 = encode(0b10, 0b001, 0b0000, 0b1110, 0b111), // RO
+ kTRCIDR7 = encode(0b10, 0b001, 0b0000, 0b1111, 0b111), // RO
+ kTRCIDR8 = encode(0b10, 0b001, 0b0000, 0b0000, 0b110), // RO
+ kTRCIDR9 = encode(0b10, 0b001, 0b0000, 0b0001, 0b110), // RO
+ kTRCIMSPEC0 = encode(0b10, 0b001, 0b0000, 0b0000, 0b111), // RW
+ kTRCIMSPEC1 = encode(0b10, 0b001, 0b0000, 0b0001, 0b111), // RW
+ kTRCIMSPEC2 = encode(0b10, 0b001, 0b0000, 0b0010, 0b111), // RW
+ kTRCIMSPEC3 = encode(0b10, 0b001, 0b0000, 0b0011, 0b111), // RW
+ kTRCIMSPEC4 = encode(0b10, 0b001, 0b0000, 0b0100, 0b111), // RW
+ kTRCIMSPEC5 = encode(0b10, 0b001, 0b0000, 0b0101, 0b111), // RW
+ kTRCIMSPEC6 = encode(0b10, 0b001, 0b0000, 0b0110, 0b111), // RW
+ kTRCIMSPEC7 = encode(0b10, 0b001, 0b0000, 0b0111, 0b111), // RW
+ kTRCITCTRL = encode(0b10, 0b001, 0b0111, 0b0000, 0b100), // RW
+ kTRCLAR = encode(0b10, 0b001, 0b0111, 0b1100, 0b110), // WO
+ kTRCLSR = encode(0b10, 0b001, 0b0111, 0b1101, 0b110), // RO
+ kTRCOSLAR = encode(0b10, 0b001, 0b0001, 0b0000, 0b100), // WO
+ kTRCOSLSR = encode(0b10, 0b001, 0b0001, 0b0001, 0b100), // RO
+ kTRCPDCR = encode(0b10, 0b001, 0b0001, 0b0100, 0b100), // RW
+ kTRCPDSR = encode(0b10, 0b001, 0b0001, 0b0101, 0b100), // RO
+ kTRCPIDR0 = encode(0b10, 0b001, 0b0111, 0b1000, 0b111), // RO
+ kTRCPIDR1 = encode(0b10, 0b001, 0b0111, 0b1001, 0b111), // RO
+ kTRCPIDR2 = encode(0b10, 0b001, 0b0111, 0b1010, 0b111), // RO
+ kTRCPIDR3 = encode(0b10, 0b001, 0b0111, 0b1011, 0b111), // RO
+ kTRCPIDR4 = encode(0b10, 0b001, 0b0111, 0b0100, 0b111), // RO
+ kTRCPIDR5 = encode(0b10, 0b001, 0b0111, 0b0101, 0b111), // RO
+ kTRCPIDR6 = encode(0b10, 0b001, 0b0111, 0b0110, 0b111), // RO
+ kTRCPIDR7 = encode(0b10, 0b001, 0b0111, 0b0111, 0b111), // RO
+ kTRCPRGCTLR = encode(0b10, 0b001, 0b0000, 0b0001, 0b000), // RW
+ kTRCPROCSELR = encode(0b10, 0b001, 0b0000, 0b0010, 0b000), // RW
+ kTRCQCTLR = encode(0b10, 0b001, 0b0000, 0b0001, 0b001), // RW
+ kTRCRSCTLR10 = encode(0b10, 0b001, 0b0001, 0b1010, 0b000), // RW
+ kTRCRSCTLR11 = encode(0b10, 0b001, 0b0001, 0b1011, 0b000), // RW
+ kTRCRSCTLR12 = encode(0b10, 0b001, 0b0001, 0b1100, 0b000), // RW
+ kTRCRSCTLR13 = encode(0b10, 0b001, 0b0001, 0b1101, 0b000), // RW
+ kTRCRSCTLR14 = encode(0b10, 0b001, 0b0001, 0b1110, 0b000), // RW
+ kTRCRSCTLR15 = encode(0b10, 0b001, 0b0001, 0b1111, 0b000), // RW
+ kTRCRSCTLR16 = encode(0b10, 0b001, 0b0001, 0b0000, 0b001), // RW
+ kTRCRSCTLR17 = encode(0b10, 0b001, 0b0001, 0b0001, 0b001), // RW
+ kTRCRSCTLR18 = encode(0b10, 0b001, 0b0001, 0b0010, 0b001), // RW
+ kTRCRSCTLR19 = encode(0b10, 0b001, 0b0001, 0b0011, 0b001), // RW
+ kTRCRSCTLR2 = encode(0b10, 0b001, 0b0001, 0b0010, 0b000), // RW
+ kTRCRSCTLR20 = encode(0b10, 0b001, 0b0001, 0b0100, 0b001), // RW
+ kTRCRSCTLR21 = encode(0b10, 0b001, 0b0001, 0b0101, 0b001), // RW
+ kTRCRSCTLR22 = encode(0b10, 0b001, 0b0001, 0b0110, 0b001), // RW
+ kTRCRSCTLR23 = encode(0b10, 0b001, 0b0001, 0b0111, 0b001), // RW
+ kTRCRSCTLR24 = encode(0b10, 0b001, 0b0001, 0b1000, 0b001), // RW
+ kTRCRSCTLR25 = encode(0b10, 0b001, 0b0001, 0b1001, 0b001), // RW
+ kTRCRSCTLR26 = encode(0b10, 0b001, 0b0001, 0b1010, 0b001), // RW
+ kTRCRSCTLR27 = encode(0b10, 0b001, 0b0001, 0b1011, 0b001), // RW
+ kTRCRSCTLR28 = encode(0b10, 0b001, 0b0001, 0b1100, 0b001), // RW
+ kTRCRSCTLR29 = encode(0b10, 0b001, 0b0001, 0b1101, 0b001), // RW
+ kTRCRSCTLR3 = encode(0b10, 0b001, 0b0001, 0b0011, 0b000), // RW
+ kTRCRSCTLR30 = encode(0b10, 0b001, 0b0001, 0b1110, 0b001), // RW
+ kTRCRSCTLR31 = encode(0b10, 0b001, 0b0001, 0b1111, 0b001), // RW
+ kTRCRSCTLR4 = encode(0b10, 0b001, 0b0001, 0b0100, 0b000), // RW
+ kTRCRSCTLR5 = encode(0b10, 0b001, 0b0001, 0b0101, 0b000), // RW
+ kTRCRSCTLR6 = encode(0b10, 0b001, 0b0001, 0b0110, 0b000), // RW
+ kTRCRSCTLR7 = encode(0b10, 0b001, 0b0001, 0b0111, 0b000), // RW
+ kTRCRSCTLR8 = encode(0b10, 0b001, 0b0001, 0b1000, 0b000), // RW
+ kTRCRSCTLR9 = encode(0b10, 0b001, 0b0001, 0b1001, 0b000), // RW
+ kTRCRSR = encode(0b10, 0b001, 0b0000, 0b1010, 0b000), // RW
+ kTRCSEQEVR0 = encode(0b10, 0b001, 0b0000, 0b0000, 0b100), // RW
+ kTRCSEQEVR1 = encode(0b10, 0b001, 0b0000, 0b0001, 0b100), // RW
+ kTRCSEQEVR2 = encode(0b10, 0b001, 0b0000, 0b0010, 0b100), // RW
+ kTRCSEQRSTEVR = encode(0b10, 0b001, 0b0000, 0b0110, 0b100), // RW
+ kTRCSEQSTR = encode(0b10, 0b001, 0b0000, 0b0111, 0b100), // RW
+ kTRCSSCCR0 = encode(0b10, 0b001, 0b0001, 0b0000, 0b010), // RW
+ kTRCSSCCR1 = encode(0b10, 0b001, 0b0001, 0b0001, 0b010), // RW
+ kTRCSSCCR2 = encode(0b10, 0b001, 0b0001, 0b0010, 0b010), // RW
+ kTRCSSCCR3 = encode(0b10, 0b001, 0b0001, 0b0011, 0b010), // RW
+ kTRCSSCCR4 = encode(0b10, 0b001, 0b0001, 0b0100, 0b010), // RW
+ kTRCSSCCR5 = encode(0b10, 0b001, 0b0001, 0b0101, 0b010), // RW
+ kTRCSSCCR6 = encode(0b10, 0b001, 0b0001, 0b0110, 0b010), // RW
+ kTRCSSCCR7 = encode(0b10, 0b001, 0b0001, 0b0111, 0b010), // RW
+ kTRCSSCSR0 = encode(0b10, 0b001, 0b0001, 0b1000, 0b010), // RW
+ kTRCSSCSR1 = encode(0b10, 0b001, 0b0001, 0b1001, 0b010), // RW
+ kTRCSSCSR2 = encode(0b10, 0b001, 0b0001, 0b1010, 0b010), // RW
+ kTRCSSCSR3 = encode(0b10, 0b001, 0b0001, 0b1011, 0b010), // RW
+ kTRCSSCSR4 = encode(0b10, 0b001, 0b0001, 0b1100, 0b010), // RW
+ kTRCSSCSR5 = encode(0b10, 0b001, 0b0001, 0b1101, 0b010), // RW
+ kTRCSSCSR6 = encode(0b10, 0b001, 0b0001, 0b1110, 0b010), // RW
+ kTRCSSCSR7 = encode(0b10, 0b001, 0b0001, 0b1111, 0b010), // RW
+ kTRCSSPCICR0 = encode(0b10, 0b001, 0b0001, 0b0000, 0b011), // RW
+ kTRCSSPCICR1 = encode(0b10, 0b001, 0b0001, 0b0001, 0b011), // RW
+ kTRCSSPCICR2 = encode(0b10, 0b001, 0b0001, 0b0010, 0b011), // RW
+ kTRCSSPCICR3 = encode(0b10, 0b001, 0b0001, 0b0011, 0b011), // RW
+ kTRCSSPCICR4 = encode(0b10, 0b001, 0b0001, 0b0100, 0b011), // RW
+ kTRCSSPCICR5 = encode(0b10, 0b001, 0b0001, 0b0101, 0b011), // RW
+ kTRCSSPCICR6 = encode(0b10, 0b001, 0b0001, 0b0110, 0b011), // RW
+ kTRCSSPCICR7 = encode(0b10, 0b001, 0b0001, 0b0111, 0b011), // RW
+ kTRCSTALLCTLR = encode(0b10, 0b001, 0b0000, 0b1011, 0b000), // RW
+ kTRCSTATR = encode(0b10, 0b001, 0b0000, 0b0011, 0b000), // RO
+ kTRCSYNCPR = encode(0b10, 0b001, 0b0000, 0b1101, 0b000), // RW
+ kTRCTRACEIDR = encode(0b10, 0b001, 0b0000, 0b0000, 0b001), // RW
+ kTRCTSCTLR = encode(0b10, 0b001, 0b0000, 0b1100, 0b000), // RW
+ kTRCVDARCCTLR = encode(0b10, 0b001, 0b0000, 0b1010, 0b010), // RW
+ kTRCVDCTLR = encode(0b10, 0b001, 0b0000, 0b1000, 0b010), // RW
+ kTRCVDSACCTLR = encode(0b10, 0b001, 0b0000, 0b1001, 0b010), // RW
+ kTRCVICTLR = encode(0b10, 0b001, 0b0000, 0b0000, 0b010), // RW
+ kTRCVIIECTLR = encode(0b10, 0b001, 0b0000, 0b0001, 0b010), // RW
+ kTRCVIPCSSCTLR = encode(0b10, 0b001, 0b0000, 0b0011, 0b010), // RW
+ kTRCVISSCTLR = encode(0b10, 0b001, 0b0000, 0b0010, 0b010), // RW
+ kTRCVMIDCCTLR0 = encode(0b10, 0b001, 0b0011, 0b0010, 0b010), // RW
+ kTRCVMIDCCTLR1 = encode(0b10, 0b001, 0b0011, 0b0011, 0b010), // RW
+ kTRCVMIDCVR0 = encode(0b10, 0b001, 0b0011, 0b0000, 0b001), // RW
+ kTRCVMIDCVR1 = encode(0b10, 0b001, 0b0011, 0b0010, 0b001), // RW
+ kTRCVMIDCVR2 = encode(0b10, 0b001, 0b0011, 0b0100, 0b001), // RW
+ kTRCVMIDCVR3 = encode(0b10, 0b001, 0b0011, 0b0110, 0b001), // RW
+ kTRCVMIDCVR4 = encode(0b10, 0b001, 0b0011, 0b1000, 0b001), // RW
+ kTRCVMIDCVR5 = encode(0b10, 0b001, 0b0011, 0b1010, 0b001), // RW
+ kTRCVMIDCVR6 = encode(0b10, 0b001, 0b0011, 0b1100, 0b001), // RW
+ kTRCVMIDCVR7 = encode(0b10, 0b001, 0b0011, 0b1110, 0b001), // RW
+ kTRFCR_EL1 = encode(0b11, 0b000, 0b0001, 0b0010, 0b001), // RW
+ kTRFCR_EL12 = encode(0b11, 0b101, 0b0001, 0b0010, 0b001), // RW
+ kTRFCR_EL2 = encode(0b11, 0b100, 0b0001, 0b0010, 0b001), // RW
+ kTTBR0_EL1 = encode(0b11, 0b000, 0b0010, 0b0000, 0b000), // RW
+ kTTBR0_EL12 = encode(0b11, 0b101, 0b0010, 0b0000, 0b000), // RW
+ kTTBR0_EL2 = encode(0b11, 0b100, 0b0010, 0b0000, 0b000), // RW
+ kTTBR0_EL3 = encode(0b11, 0b110, 0b0010, 0b0000, 0b000), // RW
+ kTTBR1_EL1 = encode(0b11, 0b000, 0b0010, 0b0000, 0b001), // RW
+ kTTBR1_EL12 = encode(0b11, 0b101, 0b0010, 0b0000, 0b001), // RW
+ kTTBR1_EL2 = encode(0b11, 0b100, 0b0010, 0b0000, 0b001), // RW
+ kUAO = encode(0b11, 0b000, 0b0100, 0b0010, 0b100), // RW
+ kVBAR_EL1 = encode(0b11, 0b000, 0b1100, 0b0000, 0b000), // RW
+ kVBAR_EL12 = encode(0b11, 0b101, 0b1100, 0b0000, 0b000), // RW
+ kVBAR_EL2 = encode(0b11, 0b100, 0b1100, 0b0000, 0b000), // RW
+ kVBAR_EL3 = encode(0b11, 0b110, 0b1100, 0b0000, 0b000), // RW
+ kVDISR_EL2 = encode(0b11, 0b100, 0b1100, 0b0001, 0b001), // RW
+ kVMPIDR_EL2 = encode(0b11, 0b100, 0b0000, 0b0000, 0b101), // RW
+ kVNCR_EL2 = encode(0b11, 0b100, 0b0010, 0b0010, 0b000), // RW
+ kVPIDR_EL2 = encode(0b11, 0b100, 0b0000, 0b0000, 0b000), // RW
+ kVSESR_EL2 = encode(0b11, 0b100, 0b0101, 0b0010, 0b011), // RW
+ kVSTCR_EL2 = encode(0b11, 0b100, 0b0010, 0b0110, 0b010), // RW
+ kVSTTBR_EL2 = encode(0b11, 0b100, 0b0010, 0b0110, 0b000), // RW
+ kVTCR_EL2 = encode(0b11, 0b100, 0b0010, 0b0001, 0b010), // RW
+ kVTTBR_EL2 = encode(0b11, 0b100, 0b0010, 0b0001, 0b000), // RW
+ kZCR_EL1 = encode(0b11, 0b000, 0b0001, 0b0010, 0b000), // RW
+ kZCR_EL12 = encode(0b11, 0b101, 0b0001, 0b0010, 0b000), // RW
+ kZCR_EL2 = encode(0b11, 0b100, 0b0001, 0b0010, 0b000), // RW
+ kZCR_EL3 = encode(0b11, 0b110, 0b0001, 0b0010, 0b000) // RW
+ };
+};
+
+} // {Predicate}
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_A64GLOBALS_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64instapi.cpp b/erts/emulator/asmjit/arm/a64instapi.cpp
new file mode 100644
index 0000000000..05872fd653
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64instapi.cpp
@@ -0,0 +1,254 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM)
+
+#include "../core/cpuinfo.h"
+#include "../core/misc_p.h"
+#include "../core/support.h"
+#include "../arm/armfeatures.h"
+#include "../arm/a64instapi_p.h"
+#include "../arm/a64instdb_p.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// ============================================================================
+// [asmjit::a64::InstInternal - Text]
+// ============================================================================
+
+#ifndef ASMJIT_NO_TEXT
+Error InstInternal::instIdToString(uint32_t arch, uint32_t instId, String& output) noexcept {
+ DebugUtils::unused(arch);
+
+ if (ASMJIT_UNLIKELY(!Inst::isDefinedId(instId)))
+ return DebugUtils::errored(kErrorInvalidInstruction);
+
+ const InstDB::InstInfo& info = InstDB::infoById(instId);
+ return output.append(InstDB::_nameData + info._nameDataIndex);
+}
+
+uint32_t InstInternal::stringToInstId(uint32_t arch, const char* s, size_t len) noexcept {
+ DebugUtils::unused(arch);
+
+ if (ASMJIT_UNLIKELY(!s))
+ return Inst::kIdNone;
+
+ if (len == SIZE_MAX)
+ len = strlen(s);
+
+ if (ASMJIT_UNLIKELY(len == 0 || len > InstDB::kMaxNameSize))
+ return Inst::kIdNone;
+
+ uint32_t prefix = uint32_t(s[0]) - 'a';
+ if (ASMJIT_UNLIKELY(prefix > 'z' - 'a'))
+ return Inst::kIdNone;
+
+ uint32_t index = InstDB::instNameIndex[prefix].start;
+ if (ASMJIT_UNLIKELY(!index))
+ return Inst::kIdNone;
+
+ const char* nameData = InstDB::_nameData;
+ const InstDB::InstInfo* table = InstDB::_instInfoTable;
+
+ const InstDB::InstInfo* base = table + index;
+ const InstDB::InstInfo* end = table + InstDB::instNameIndex[prefix].end;
+
+ for (size_t lim = (size_t)(end - base); lim != 0; lim >>= 1) {
+ const InstDB::InstInfo* cur = base + (lim >> 1);
+ int result = Support::cmpInstName(nameData + cur[0]._nameDataIndex, s, len);
+
+ if (result < 0) {
+ base = cur + 1;
+ lim--;
+ continue;
+ }
+
+ if (result > 0)
+ continue;
+
+ return uint32_t((size_t)(cur - table));
+ }
+
+ return Inst::kIdNone;
+}
+#endif // !ASMJIT_NO_TEXT
+
+// ============================================================================
+// [asmjit::a64::InstInternal - Validate]
+// ============================================================================
+
+#ifndef ASMJIT_NO_VALIDATION
+ASMJIT_FAVOR_SIZE Error InstInternal::validate(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, uint32_t validationFlags) noexcept {
+ // TODO:
+ DebugUtils::unused(arch, inst, operands, opCount, validationFlags);
+ return kErrorOk;
+}
+#endif // !ASMJIT_NO_VALIDATION
+
+// ============================================================================
+// [asmjit::a64::InstInternal - QueryRWInfo]
+// ============================================================================
+
+#ifndef ASMJIT_NO_INTROSPECTION
+struct InstRWInfoData {
+ uint8_t rwx[Globals::kMaxOpCount];
+};
+
+static const InstRWInfoData instRWInfoData[] = {
+ #define R OpRWInfo::kRead
+ #define W OpRWInfo::kWrite
+ #define X OpRWInfo::kRW
+
+ {{ R, R, R, R, R, R }}, // kRWI_R
+ {{ R, W, R, R, R, R }}, // kRWI_RW
+ {{ R, X, R, R, R, R }}, // kRWI_RX
+ {{ R, R, W, R, R, R }}, // kRWI_RRW
+ {{ R, W, X, R, R, R }}, // kRWI_RWX
+ {{ W, R, R, R, R, R }}, // kRWI_W
+ {{ W, R, W, R, R, R }}, // kRWI_WRW
+ {{ W, R, X, R, R, R }}, // kRWI_WRX
+ {{ W, R, R, W, R, R }}, // kRWI_WRRW
+ {{ W, R, R, X, R, R }}, // kRWI_WRRX
+ {{ W, W, R, R, R, R }}, // kRWI_WW
+ {{ X, R, R, R, R, R }}, // kRWI_X
+ {{ X, R, X, R, R, R }}, // kRWI_XRX
+ {{ X, X, R, R, X, R }}, // kRWI_XXRRX
+
+ {{ W, R, R, R, R, R }}, // kRWI_LDn
+ {{ R, W, R, R, R, R }}, // kRWI_STn
+ {{ R, R, R, R, R, R }} // kRWI_TODO
+
+ #undef R
+ #undef W
+ #undef X
+};
+
+static const uint8_t elementTypeSize[8] = { 0, 1, 2, 4, 8, 4, 4, 0 };
+
+Error InstInternal::queryRWInfo(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, InstRWInfo* out) noexcept {
+ // Only called when `arch` matches X86 family.
+ ASMJIT_ASSERT(Environment::isFamilyARM(arch));
+
+ // Get the instruction data.
+ uint32_t instId = inst.id();
+ if (ASMJIT_UNLIKELY(!Inst::isDefinedId(instId)))
+ return DebugUtils::errored(kErrorInvalidInstruction);
+
+ out->_instFlags = 0;
+ out->_opCount = uint8_t(opCount);
+ out->_rmFeature = 0;
+ out->_extraReg.reset();
+ out->_readFlags = 0; // TODO: [ARM] Read PSTATUS.
+ out->_writeFlags = 0; // TODO: [ARM] Write PSTATUS
+
+ const InstDB::InstInfo& instInfo = InstDB::_instInfoTable[instId];
+ const InstRWInfoData& rwInfo = instRWInfoData[instInfo.rwInfoIndex()];
+
+ constexpr uint32_t R = OpRWInfo::kRead;
+ constexpr uint32_t W = OpRWInfo::kWrite;
+ constexpr uint32_t X = OpRWInfo::kRW;
+
+ uint32_t i;
+
+ for (i = 0; i < opCount; i++) {
+ OpRWInfo& op = out->_operands[i];
+ const Operand_& srcOp = operands[i];
+
+ if (!srcOp.isRegOrMem()) {
+ op.reset();
+ continue;
+ }
+
+ uint32_t rwFlags = rwInfo.rwx[i];
+
+ op._opFlags = rwFlags & ~(OpRWInfo::kZExt);
+ op._physId = BaseReg::kIdBad;
+ op._rmSize = 0;
+ op._resetReserved();
+
+ uint64_t rByteMask = op.isRead() ? 0xFFFFFFFFFFFFFFFFu : 0x0000000000000000u;
+ uint64_t wByteMask = op.isWrite() ? 0xFFFFFFFFFFFFFFFFu : 0x0000000000000000u;
+
+ op._readByteMask = rByteMask;
+ op._writeByteMask = wByteMask;
+ op._extendByteMask = 0;
+
+ if (srcOp.isReg()) {
+ if (srcOp.as<Vec>().hasElementIndex()) {
+ // Only part of the vector is accessed if element index [] is used.
+ uint32_t elementType = srcOp.as<Vec>().elementType();
+ uint32_t elementIndex = srcOp.as<Vec>().elementIndex();
+
+ uint32_t elementSize = elementTypeSize[elementType];
+ uint64_t accessMask = uint64_t(Support::lsbMask<uint32_t>(elementSize)) << (elementIndex * elementSize);
+ op._readByteMask &= accessMask;
+ op._writeByteMask &= accessMask;
+ }
+
+ // TODO: [ARM] RW info is not finished.
+ }
+ else {
+ const Mem& memOp = srcOp.as<Mem>();
+
+ if (memOp.hasBase()) {
+ op.addOpFlags(OpRWInfo::kMemBaseRead);
+ }
+
+ if (memOp.hasIndex()) {
+ op.addOpFlags(OpRWInfo::kMemIndexRead);
+ op.addOpFlags(memOp.isPreOrPost() ? OpRWInfo::kMemIndexWrite : 0u);
+ }
+ }
+ }
+
+ return kErrorOk;
+}
+#endif // !ASMJIT_NO_INTROSPECTION
+
+// ============================================================================
+// [asmjit::a64::InstInternal - QueryFeatures]
+// ============================================================================
+
+#ifndef ASMJIT_NO_INTROSPECTION
+Error InstInternal::queryFeatures(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, BaseFeatures* out) noexcept {
+ // TODO: [ARM] QueryFeatures not implemented yet.
+ DebugUtils::unused(arch, inst, operands, opCount, out);
+ return kErrorOk;
+}
+#endif // !ASMJIT_NO_INTROSPECTION
+
+// ============================================================================
+// [asmjit::a64::InstInternal - Unit]
+// ============================================================================
+
+#if defined(ASMJIT_TEST)
+UNIT(arm_inst_api_text) {
+ // TODO:
+}
+#endif
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM
diff --git a/erts/emulator/asmjit/arm/a64instapi_p.h b/erts/emulator/asmjit/arm/a64instapi_p.h
new file mode 100644
index 0000000000..2e6b4987e6
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64instapi_p.h
@@ -0,0 +1,59 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64INSTAPI_P_H_INCLUDED
+#define ASMJIT_ARM_A64INSTAPI_P_H_INCLUDED
+
+#include "../core/inst.h"
+#include "../core/operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \cond INTERNAL
+//! \addtogroup asmjit_a64
+//! \{
+
+namespace InstInternal {
+
+#ifndef ASMJIT_NO_TEXT
+Error instIdToString(uint32_t arch, uint32_t instId, String& output) noexcept;
+uint32_t stringToInstId(uint32_t arch, const char* s, size_t len) noexcept;
+#endif // !ASMJIT_NO_TEXT
+
+#ifndef ASMJIT_NO_VALIDATION
+Error validate(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, uint32_t validationFlags) noexcept;
+#endif // !ASMJIT_NO_VALIDATION
+
+#ifndef ASMJIT_NO_INTROSPECTION
+Error queryRWInfo(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, InstRWInfo* out) noexcept;
+Error queryFeatures(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, BaseFeatures* out) noexcept;
+#endif // !ASMJIT_NO_INTROSPECTION
+
+} // {InstInternal}
+
+//! \}
+//! \endcond
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_A64INSTAPI_P_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64instdb.cpp b/erts/emulator/asmjit/arm/a64instdb.cpp
new file mode 100644
index 0000000000..9a43324a9e
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64instdb.cpp
@@ -0,0 +1,1977 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM)
+
+#include "../core/codeholder.h"
+#include "../core/support.h"
+#include "../arm/a64instdb_p.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+namespace InstDB {
+
+// ============================================================================
+// [asmjit::a64::InstDB - InstInfoTable]
+// ============================================================================
+
+// Don't store `_nameDataIndex` if instruction names are disabled. Since some
+// APIs can use `_nameDataIndex` it's much safer if it's zero if it's not used.
+#if defined(ASMJIT_NO_TEXT)
+ #define NAME_DATA_INDEX(x) 0
+#else
+ #define NAME_DATA_INDEX(x) x
+#endif
+
+// Defines an ARM/AArch64 instruction.
+#define INST(id, opcodeEncoding, opcodeData, rwInfoIndex, flags, opcodeDataIndex, nameDataIndex) { \
+ uint32_t(kEncoding##opcodeEncoding), \
+ uint32_t(opcodeDataIndex), \
+ 0, \
+ uint32_t(NAME_DATA_INDEX(nameDataIndex)), \
+ uint16_t(rwInfoIndex), \
+ uint16_t(flags) \
+}
+
+#define F(flag) kInstFlag##flag
+
+// TODO: [ARM] Missing Instructions:
+/*
+BLRAA, BLRAAZ, BLRAB, BLRABZ: Branch with Link to Register, with pointer authentication.
+BRAA, BRAAZ, BRAB, BRABZ: Branch to Register, with pointer authentication.
+
+CFP: Control Flow Prediction Restriction by Context: an alias of SYS.
+CPP: Cache Prefetch Prediction Restriction by Context: an alias of SYS.
+DVP: Data Value Prediction Restriction by Context: an alias of SYS.
+PSB CSYNC: Profiling Synchronization Barrier.
+
+ERETAA, ERETAB: Exception Return, with pointer authentication.
+LDAPxxx
+PACIA, PACIA1716, PACIASP, PACIAZ, PACIZA: Pointer Authentication Code for Instruction address, using key A.
+PACIB, PACIB1716, PACIBSP, PACIBZ, PACIZB: Pointer Authentication Code for Instruction address, using key B.
+PRFM (immediate): Prefetch Memory (immediate).
+PRFM (literal): Prefetch Memory (literal).
+PRFM (register): Prefetch Memory (register).
+PRFUM: Prefetch Memory (unscaled offset).
+RETAA, RETAB: Return from subroutine, with pointer authentication.
+RMIF: Rotate, Mask Insert Flags.
+SYSL
+IRG: Insert Random Tag.
+INST_(Irg , BaseRRR , (0b1001101011000000000100, kX , kSP, kX , kSP, kX , kZR, true) , kRWI_W , 0 , 0 , 1 ), // #1
+*/
+const InstInfo _instInfoTable[] = {
+ // +------------------+---------------------+--------------------------------------------------------------------------------------+-----------+---------------------------+----+-----+
+ // | Instruction Id | Encoding | Opcode Data | RW Info | Instruction Flags |DatX|NameX|
+ // +------------------+---------------------+--------------------------------------------------------------------------------------+-----------+---------------------------+----+-----+
+ // ${InstInfo:Begin}
+ INST(None , None , (_) , 0 , 0 , 0 , 0 ), // #0
+ INST(Adc , BaseRRR , (0b0001101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 0 , 1 ), // #1
+ INST(Adcs , BaseRRR , (0b0011101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 1 , 5 ), // #2
+ INST(Add , BaseAddSub , (0b0001011000, 0b0001011001, 0b0010001) , kRWI_W , 0 , 0 , 978 ), // #3
+ INST(Addg , BaseRRII , (0b1001000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10) , kRWI_W , 0 , 0 , 10 ), // #4
+ INST(Adds , BaseAddSub , (0b0101011000, 0b0101011001, 0b0110001) , kRWI_W , 0 , 1 , 15 ), // #5
+ INST(Adr , BaseAdr , (0b0001000000000000000000, OffsetFormat::kTypeAArch64_ADR) , kRWI_W , 0 , 0 , 25 ), // #6
+ INST(Adrp , BaseAdr , (0b1001000000000000000000, OffsetFormat::kTypeAArch64_ADRP) , kRWI_W , 0 , 1 , 29 ), // #7
+ INST(And , BaseLogical , (0b0001010000, 0b00100100, 0) , kRWI_W , 0 , 0 , 57 ), // #8
+ INST(Ands , BaseLogical , (0b1101010000, 0b11100100, 0) , kRWI_W , 0 , 1 , 61 ), // #9
+ INST(Asr , BaseShift , (0b0001101011000000001010, 0b0001001100000000011111, 0) , kRWI_W , 0 , 0 , 66 ), // #10
+ INST(Asrv , BaseShift , (0b0001101011000000001010, 0b0000000000000000000000, 0) , kRWI_W , 0 , 1 , 70 ), // #11
+ INST(At , BaseAtDcIcTlbi , (0b00011111110000, 0b00001111000000, true) , kRWI_RX , 0 , 0 , 75 ), // #12
+ INST(Autda , BaseRR , (0b11011010110000010001100000000000, kX, kZR, 0, kX, kSP, 5, true) , kRWI_X , 0 , 0 , 78 ), // #13
+ INST(Autdza , BaseR , (0b11011010110000010011101111100000, kX, kZR, 0) , kRWI_X , 0 , 0 , 90 ), // #14
+ INST(Autdb , BaseRR , (0b11011010110000010001110000000000, kX, kZR, 0, kX, kSP, 5, true) , kRWI_X , 0 , 1 , 84 ), // #15
+ INST(Autdzb , BaseR , (0b11011010110000010011111111100000, kX, kZR, 0) , kRWI_X , 0 , 1 , 97 ), // #16
+ INST(Autia , BaseRR , (0b11011010110000010001000000000000, kX, kZR, 0, kX, kSP, 5, true) , kRWI_X , 0 , 2 , 104 ), // #17
+ INST(Autia1716 , BaseOp , (0b11010101000000110010000110011111) , 0 , 0 , 0 , 110 ), // #18
+ INST(Autiasp , BaseOp , (0b11010101000000110010001110111111) , 0 , 0 , 1 , 120 ), // #19
+ INST(Autiaz , BaseOp , (0b11010101000000110010001110011111) , 0 , 0 , 2 , 128 ), // #20
+ INST(Autib , BaseRR , (0b11011010110000010001010000000000, kX, kZR, 0, kX, kSP, 5, true) , kRWI_X , 0 , 3 , 135 ), // #21
+ INST(Autib1716 , BaseOp , (0b11010101000000110010000111011111) , 0 , 0 , 3 , 141 ), // #22
+ INST(Autibsp , BaseOp , (0b11010101000000110010001111111111) , 0 , 0 , 4 , 151 ), // #23
+ INST(Autibz , BaseOp , (0b11010101000000110010001111011111) , 0 , 0 , 5 , 159 ), // #24
+ INST(Autiza , BaseR , (0b11011010110000010011001111100000, kX, kZR, 0) , kRWI_X , 0 , 2 , 166 ), // #25
+ INST(Autizb , BaseR , (0b11011010110000010011011111100000, kX, kZR, 0) , kRWI_X , 0 , 3 , 173 ), // #26
+ INST(Axflag , BaseOp , (0b11010101000000000100000001011111) , 0 , 0 , 6 , 180 ), // #27
+ INST(B , BaseBranchRel , (0b00010100000000000000000000000000) , 0 , F(Cond) , 0 , 1738), // #28
+ INST(Bfc , BaseBfc , (0b00110011000000000000001111100000) , kRWI_X , 0 , 0 , 192 ), // #29
+ INST(Bfi , BaseBfi , (0b00110011000000000000000000000000) , kRWI_X , 0 , 0 , 223 ), // #30
+ INST(Bfm , BaseBfm , (0b00110011000000000000000000000000) , kRWI_X , 0 , 0 , 2514), // #31
+ INST(Bfxil , BaseBfx , (0b00110011000000000000000000000000) , kRWI_X , 0 , 0 , 250 ), // #32
+ INST(Bic , BaseLogical , (0b0001010001, 0b00000000, 0) , kRWI_W , 0 , 2 , 256 ), // #33
+ INST(Bics , BaseLogical , (0b1101010001, 0b00000000, 0) , kRWI_W , 0 , 3 , 260 ), // #34
+ INST(Bl , BaseBranchRel , (0b10010100000000000000000000000000) , 0 , 0 , 1 , 2831), // #35
+ INST(Blr , BaseBranchReg , (0b11010110001111110000000000000000) , kRWI_R , 0 , 0 , 269 ), // #36
+ INST(Br , BaseBranchReg , (0b11010110000111110000000000000000) , kRWI_R , 0 , 1 , 273 ), // #37
+ INST(Brk , BaseOpImm , (0b11010100001000000000000000000000, 16, 5) , 0 , 0 , 0 , 276 ), // #38
+ INST(Cas , BaseAtomicOp , (0b1000100010100000011111, kWX, 30, 0) , kRWI_XRX , 0 , 0 , 284 ), // #39
+ INST(Casa , BaseAtomicOp , (0b1000100011100000011111, kWX, 30, 1) , kRWI_XRX , 0 , 1 , 288 ), // #40
+ INST(Casab , BaseAtomicOp , (0b0000100011100000011111, kW , 0 , 1) , kRWI_XRX , 0 , 2 , 293 ), // #41
+ INST(Casah , BaseAtomicOp , (0b0100100011100000011111, kW , 0 , 1) , kRWI_XRX , 0 , 3 , 299 ), // #42
+ INST(Casal , BaseAtomicOp , (0b1000100011100000111111, kWX, 30, 1) , kRWI_XRX , 0 , 4 , 305 ), // #43
+ INST(Casalb , BaseAtomicOp , (0b0000100011100000111111, kW , 0 , 1) , kRWI_XRX , 0 , 5 , 311 ), // #44
+ INST(Casalh , BaseAtomicOp , (0b0100100011100000111111, kW , 0 , 1) , kRWI_XRX , 0 , 6 , 318 ), // #45
+ INST(Casb , BaseAtomicOp , (0b0000100010100000011111, kW , 0 , 0) , kRWI_XRX , 0 , 7 , 325 ), // #46
+ INST(Cash , BaseAtomicOp , (0b0100100010100000011111, kW , 0 , 0) , kRWI_XRX , 0 , 8 , 330 ), // #47
+ INST(Casl , BaseAtomicOp , (0b1000100010100000111111, kWX, 30, 0) , kRWI_XRX , 0 , 9 , 335 ), // #48
+ INST(Caslb , BaseAtomicOp , (0b0000100010100000111111, kW , 0 , 0) , kRWI_XRX , 0 , 10 , 340 ), // #49
+ INST(Caslh , BaseAtomicOp , (0b0100100010100000111111, kW , 0 , 0) , kRWI_XRX , 0 , 11 , 346 ), // #50
+ INST(Casp , BaseAtomicCasp , (0b0000100000100000011111, kWX, 30) , kRWI_XXRRX, 0 , 0 , 352 ), // #51
+ INST(Caspa , BaseAtomicCasp , (0b0000100001100000011111, kWX, 30) , kRWI_XXRRX, 0 , 1 , 357 ), // #52
+ INST(Caspal , BaseAtomicCasp , (0b0000100001100000111111, kWX, 30) , kRWI_XXRRX, 0 , 2 , 363 ), // #53
+ INST(Caspl , BaseAtomicCasp , (0b0000100000100000111111, kWX, 30) , kRWI_XXRRX, 0 , 3 , 370 ), // #54
+ INST(Cbnz , BaseBranchCmp , (0b00110101000000000000000000000000) , kRWI_R , 0 , 0 , 376 ), // #55
+ INST(Cbz , BaseBranchCmp , (0b00110100000000000000000000000000) , kRWI_R , 0 , 1 , 381 ), // #56
+ INST(Ccmn , BaseCCmp , (0b00111010010000000000000000000000) , kRWI_R , 0 , 0 , 385 ), // #57
+ INST(Ccmp , BaseCCmp , (0b01111010010000000000000000000000) , kRWI_R , 0 , 1 , 650 ), // #58
+ INST(Cfinv , BaseOp , (0b11010101000000000100000000011111) , 0 , 0 , 7 , 390 ), // #59
+ INST(Cinc , BaseCInc , (0b00011010100000000000010000000000) , kRWI_W , 0 , 0 , 396 ), // #60
+ INST(Cinv , BaseCInc , (0b01011010100000000000000000000000) , kRWI_W , 0 , 1 , 401 ), // #61
+ INST(Clrex , BaseOpImm , (0b11010101000000110011000001011111, 4, 8) , 0 , 0 , 1 , 406 ), // #62
+ INST(Cls , BaseRR , (0b01011010110000000001010000000000, kWX, kZR, 0, kWX, kZR, 5, true) , kRWI_W , 0 , 4 , 412 ), // #63
+ INST(Clz , BaseRR , (0b01011010110000000001000000000000, kWX, kZR, 0, kWX, kZR, 5, true) , kRWI_W , 0 , 5 , 416 ), // #64
+ INST(Cmn , BaseCmpCmn , (0b0101011000, 0b0101011001, 0b0110001) , kRWI_R , 0 , 0 , 386 ), // #65
+ INST(Cmp , BaseCmpCmn , (0b1101011000, 0b1101011001, 0b1110001) , kRWI_R , 0 , 1 , 651 ), // #66
+ INST(Cmpp , BaseRR , (0b10111010110000000000000000011111, kX, kSP, 5, kX, kSP, 16, true) , kRWI_R , 0 , 6 , 430 ), // #67
+ INST(Cneg , BaseCInc , (0b01011010100000000000010000000000) , kRWI_W , 0 , 2 , 441 ), // #68
+ INST(Crc32b , BaseRRR , (0b0001101011000000010000, kW, kZR, kW, kZR, kW, kZR, false) , kRWI_W , 0 , 2 , 450 ), // #69
+ INST(Crc32cb , BaseRRR , (0b0001101011000000010100, kW, kZR, kW, kZR, kW, kZR, false) , kRWI_W , 0 , 3 , 457 ), // #70
+ INST(Crc32ch , BaseRRR , (0b0001101011000000010101, kW, kZR, kW, kZR, kW, kZR, false) , kRWI_W , 0 , 4 , 465 ), // #71
+ INST(Crc32cw , BaseRRR , (0b0001101011000000010110, kW, kZR, kW, kZR, kW, kZR, false) , kRWI_W , 0 , 5 , 473 ), // #72
+ INST(Crc32cx , BaseRRR , (0b1001101011000000010111, kW, kZR, kW, kZR, kX, kZR, false) , kRWI_W , 0 , 6 , 481 ), // #73
+ INST(Crc32h , BaseRRR , (0b0001101011000000010001, kW, kZR, kW, kZR, kW, kZR, false) , kRWI_W , 0 , 7 , 489 ), // #74
+ INST(Crc32w , BaseRRR , (0b0001101011000000010010, kW, kZR, kW, kZR, kW, kZR, false) , kRWI_W , 0 , 8 , 496 ), // #75
+ INST(Crc32x , BaseRRR , (0b1001101011000000010011, kW, kZR, kW, kZR, kX, kZR, false) , kRWI_W , 0 , 9 , 503 ), // #76
+ INST(Csdb , BaseOp , (0b11010101000000110010001010011111) , 0 , 0 , 8 , 510 ), // #77
+ INST(Csel , BaseCSel , (0b00011010100000000000000000000000) , kRWI_W , 0 , 0 , 710 ), // #78
+ INST(Cset , BaseCSet , (0b00011010100111110000011111100000) , kRWI_W , 0 , 0 , 515 ), // #79
+ INST(Csetm , BaseCSet , (0b01011010100111110000001111100000) , kRWI_W , 0 , 1 , 520 ), // #80
+ INST(Csinc , BaseCSel , (0b00011010100000000000010000000000) , kRWI_W , 0 , 1 , 526 ), // #81
+ INST(Csinv , BaseCSel , (0b01011010100000000000000000000000) , kRWI_W , 0 , 2 , 532 ), // #82
+ INST(Csneg , BaseCSel , (0b01011010100000000000010000000000) , kRWI_W , 0 , 3 , 538 ), // #83
+ INST(Dc , BaseAtDcIcTlbi , (0b00011110000000, 0b00001110000000, true) , kRWI_RX , 0 , 1 , 2 ), // #84
+ INST(Dcps1 , BaseOpImm , (0b11010100101000000000000000000001, 16, 5) , 0 , 0 , 2 , 544 ), // #85
+ INST(Dcps2 , BaseOpImm , (0b11010100101000000000000000000010, 16, 5) , 0 , 0 , 3 , 550 ), // #86
+ INST(Dcps3 , BaseOpImm , (0b11010100101000000000000000000011, 16, 5) , 0 , 0 , 4 , 556 ), // #87
+ INST(Dgh , BaseOp , (0b11010101000000110010000011011111) , 0 , 0 , 9 , 562 ), // #88
+ INST(Dmb , BaseOpImm , (0b11010101000000110011000010111111, 4, 8) , 0 , 0 , 5 , 566 ), // #89
+ INST(Drps , BaseOp , (0b11010110101111110000001111100000) , 0 , 0 , 10 , 570 ), // #90
+ INST(Dsb , BaseOpImm , (0b11010101000000110011000010011111, 4, 8) , 0 , 0 , 6 , 575 ), // #91
+ INST(Eon , BaseLogical , (0b1001010001, 0b10100100, 1) , kRWI_W , 0 , 4 , 583 ), // #92
+ INST(Eor , BaseLogical , (0b1001010000, 0b10100100, 0) , kRWI_W , 0 , 5 , 1418), // #93
+ INST(Esb , BaseOp , (0b11010101000000110010001000011111) , 0 , 0 , 11 , 597 ), // #94
+ INST(Extr , BaseExtract , (0b00010011100000000000000000000000) , kRWI_W , 0 , 0 , 605 ), // #95
+ INST(Eret , BaseOp , (0b11010110100111110000001111100000) , 0 , 0 , 12 , 592 ), // #96
+ INST(Gmi , BaseRRR , (0b1001101011000000000101, kX , kZR, kX , kSP, kX , kZR, true) , kRWI_W , 0 , 10 , 1128), // #97
+ INST(Hint , BaseOpImm , (0b11010101000000110010000000011111, 7, 5) , 0 , 0 , 7 , 1132), // #98
+ INST(Hlt , BaseOpImm , (0b11010100010000000000000000000000, 16, 5) , 0 , 0 , 8 , 1137), // #99
+ INST(Hvc , BaseOpImm , (0b11010100000000000000000000000010, 16, 5) , 0 , 0 , 9 , 1141), // #100
+ INST(Ic , BaseAtDcIcTlbi , (0b00011110000000, 0b00001110000000, false) , kRWI_RX , 0 , 2 , 257 ), // #101
+ INST(Isb , BaseOpImm , (0b11010101000000110011000011011111, 4, 8) , 0 , 0 , 10 , 1149), // #102
+ INST(Ldadd , BaseAtomicOp , (0b1011100000100000000000, kWX, 30, 0) , kRWI_WRX , 0 , 12 , 1189), // #103
+ INST(Ldadda , BaseAtomicOp , (0b1011100010100000000000, kWX, 30, 1) , kRWI_WRX , 0 , 13 , 1195), // #104
+ INST(Ldaddab , BaseAtomicOp , (0b0011100010100000000000, kW , 0 , 1) , kRWI_WRX , 0 , 14 , 1202), // #105
+ INST(Ldaddah , BaseAtomicOp , (0b0111100010100000000000, kW , 0 , 1) , kRWI_WRX , 0 , 15 , 1210), // #106
+ INST(Ldaddal , BaseAtomicOp , (0b1011100011100000000000, kWX, 30, 1) , kRWI_WRX , 0 , 16 , 1218), // #107
+ INST(Ldaddalb , BaseAtomicOp , (0b0011100011100000000000, kW , 0 , 1) , kRWI_WRX , 0 , 17 , 1226), // #108
+ INST(Ldaddalh , BaseAtomicOp , (0b0111100011100000000000, kW , 0 , 1) , kRWI_WRX , 0 , 18 , 1235), // #109
+ INST(Ldaddb , BaseAtomicOp , (0b0011100000100000000000, kW , 0 , 0) , kRWI_WRX , 0 , 19 , 1244), // #110
+ INST(Ldaddh , BaseAtomicOp , (0b0111100000100000000000, kW , 0 , 0) , kRWI_WRX , 0 , 20 , 1251), // #111
+ INST(Ldaddl , BaseAtomicOp , (0b1011100001100000000000, kWX, 30, 0) , kRWI_WRX , 0 , 21 , 1258), // #112
+ INST(Ldaddlb , BaseAtomicOp , (0b0011100001100000000000, kW , 0 , 0) , kRWI_WRX , 0 , 22 , 1265), // #113
+ INST(Ldaddlh , BaseAtomicOp , (0b0111100001100000000000, kW , 0 , 0) , kRWI_WRX , 0 , 23 , 1273), // #114
+ INST(Ldar , BaseRM_NoImm , (0b1000100011011111111111, kWX, kZR, 30) , kRWI_W , 0 , 0 , 1281), // #115
+ INST(Ldarb , BaseRM_NoImm , (0b0000100011011111111111, kW , kZR, 0 ) , kRWI_W , 0 , 1 , 1286), // #116
+ INST(Ldarh , BaseRM_NoImm , (0b0100100011011111111111, kW , kZR, 0 ) , kRWI_W , 0 , 2 , 1292), // #117
+ INST(Ldaxp , BaseLdxp , (0b1000100001111111100000, kWX, 30) , kRWI_WW , 0 , 0 , 1298), // #118
+ INST(Ldaxr , BaseRM_NoImm , (0b1000100001011111111111, kWX, kZR, 30) , kRWI_W , 0 , 3 , 1304), // #119
+ INST(Ldaxrb , BaseRM_NoImm , (0b0000100001011111111111, kW , kZR, 0 ) , kRWI_W , 0 , 4 , 1310), // #120
+ INST(Ldaxrh , BaseRM_NoImm , (0b0100100001011111111111, kW , kZR, 0 ) , kRWI_W , 0 , 5 , 1317), // #121
+ INST(Ldclr , BaseAtomicOp , (0b1011100000100000000100, kWX, 30, 0) , kRWI_WRX , 0 , 24 , 1324), // #122
+ INST(Ldclra , BaseAtomicOp , (0b1011100010100000000100, kWX, 30, 1) , kRWI_WRX , 0 , 25 , 1330), // #123
+ INST(Ldclrab , BaseAtomicOp , (0b0011100010100000000100, kW , 0 , 1) , kRWI_WRX , 0 , 26 , 1337), // #124
+ INST(Ldclrah , BaseAtomicOp , (0b0111100010100000000100, kW , 0 , 1) , kRWI_WRX , 0 , 27 , 1345), // #125
+ INST(Ldclral , BaseAtomicOp , (0b1011100011100000000100, kWX, 30, 1) , kRWI_WRX , 0 , 28 , 1353), // #126
+ INST(Ldclralb , BaseAtomicOp , (0b0011100011100000000100, kW , 0 , 1) , kRWI_WRX , 0 , 29 , 1361), // #127
+ INST(Ldclralh , BaseAtomicOp , (0b0111100011100000000100, kW , 0 , 1) , kRWI_WRX , 0 , 30 , 1370), // #128
+ INST(Ldclrb , BaseAtomicOp , (0b0011100000100000000100, kW , 0 , 0) , kRWI_WRX , 0 , 31 , 1379), // #129
+ INST(Ldclrh , BaseAtomicOp , (0b0111100000100000000100, kW , 0 , 0) , kRWI_WRX , 0 , 32 , 1386), // #130
+ INST(Ldclrl , BaseAtomicOp , (0b1011100001100000000100, kWX, 30, 0) , kRWI_WRX , 0 , 33 , 1393), // #131
+ INST(Ldclrlb , BaseAtomicOp , (0b0011100001100000000100, kW , 0 , 0) , kRWI_WRX , 0 , 34 , 1400), // #132
+ INST(Ldclrlh , BaseAtomicOp , (0b0111100001100000000100, kW , 0 , 0) , kRWI_WRX , 0 , 35 , 1408), // #133
+ INST(Ldeor , BaseAtomicOp , (0b1011100000100000001000, kWX, 30, 0) , kRWI_WRX , 0 , 36 , 1416), // #134
+ INST(Ldeora , BaseAtomicOp , (0b1011100010100000001000, kWX, 30, 1) , kRWI_WRX , 0 , 37 , 1422), // #135
+ INST(Ldeorab , BaseAtomicOp , (0b0011100010100000001000, kW , 0 , 1) , kRWI_WRX , 0 , 38 , 1429), // #136
+ INST(Ldeorah , BaseAtomicOp , (0b0111100010100000001000, kW , 0 , 1) , kRWI_WRX , 0 , 39 , 1437), // #137
+ INST(Ldeoral , BaseAtomicOp , (0b1011100011100000001000, kWX, 30, 1) , kRWI_WRX , 0 , 40 , 1445), // #138
+ INST(Ldeoralb , BaseAtomicOp , (0b0011100011100000001000, kW , 0 , 1) , kRWI_WRX , 0 , 41 , 1453), // #139
+ INST(Ldeoralh , BaseAtomicOp , (0b0111100011100000001000, kW , 0 , 1) , kRWI_WRX , 0 , 42 , 1462), // #140
+ INST(Ldeorb , BaseAtomicOp , (0b0011100000100000001000, kW , 0 , 0) , kRWI_WRX , 0 , 43 , 1471), // #141
+ INST(Ldeorh , BaseAtomicOp , (0b0111100000100000001000, kW , 0 , 0) , kRWI_WRX , 0 , 44 , 1478), // #142
+ INST(Ldeorl , BaseAtomicOp , (0b1011100001100000001000, kWX, 30, 0) , kRWI_WRX , 0 , 45 , 1485), // #143
+ INST(Ldeorlb , BaseAtomicOp , (0b0011100001100000001000, kW , 0 , 0) , kRWI_WRX , 0 , 46 , 1492), // #144
+ INST(Ldeorlh , BaseAtomicOp , (0b0111100001100000001000, kW , 0 , 0) , kRWI_WRX , 0 , 47 , 1500), // #145
+ INST(Ldg , BaseRM_SImm9 , (0b1101100101100000000000, 0b0000000000000000000000, kX , kZR, 0, 4) , kRWI_W , 0 , 0 , 1508), // #146
+ INST(Ldgm , BaseRM_NoImm , (0b1101100111100000000000, kX , kZR, 0 ) , kRWI_W , 0 , 6 , 1512), // #147
+ INST(Ldlar , BaseRM_NoImm , (0b1000100011011111011111, kWX, kZR, 30) , kRWI_W , 0 , 7 , 1517), // #148
+ INST(Ldlarb , BaseRM_NoImm , (0b0000100011011111011111, kW , kZR, 0 ) , kRWI_W , 0 , 8 , 1523), // #149
+ INST(Ldlarh , BaseRM_NoImm , (0b0100100011011111011111, kW , kZR, 0 ) , kRWI_W , 0 , 9 , 1530), // #150
+ INST(Ldnp , BaseLdpStp , (0b0010100001, 0 , kWX, 31, 2) , kRWI_WW , 0 , 0 , 1537), // #151
+ INST(Ldp , BaseLdpStp , (0b0010100101, 0b0010100011, kWX, 31, 2) , kRWI_W , 0 , 1 , 1542), // #152
+ INST(Ldpsw , BaseLdpStp , (0b0110100101, 0b0110100011, kX , 0 , 2) , kRWI_WW , 0 , 2 , 1546), // #153
+ INST(Ldr , BaseLdSt , (0b1011100101, 0b10111000010, 0b10111000011, 0b00011000, kWX, 30, 2, Inst::kIdLdur) , kRWI_W , 0 , 0 , 1552), // #154
+ INST(Ldraa , BaseRM_SImm10 , (0b1111100000100000000001, kX , kZR, 0, 3) , kRWI_W , 0 , 0 , 1556), // #155
+ INST(Ldrab , BaseRM_SImm10 , (0b1111100010100000000001, kX , kZR, 0, 3) , kRWI_W , 0 , 1 , 1562), // #156
+ INST(Ldrb , BaseLdSt , (0b0011100101, 0b00111000010, 0b00111000011, 0 , kW , 0 , 0, Inst::kIdLdurb) , kRWI_W , 0 , 1 , 1568), // #157
+ INST(Ldrh , BaseLdSt , (0b0111100101, 0b01111000010, 0b01111000011, 0 , kW , 0 , 1, Inst::kIdLdurh) , kRWI_W , 0 , 2 , 1573), // #158
+ INST(Ldrsb , BaseLdSt , (0b0011100111, 0b00111000100, 0b00111000101, 0 , kWX, 22, 0, Inst::kIdLdursb) , kRWI_W , 0 , 3 , 1578), // #159
+ INST(Ldrsh , BaseLdSt , (0b0111100110, 0b01111000100, 0b01111000101, 0 , kWX, 22, 1, Inst::kIdLdursh) , kRWI_W , 0 , 4 , 1584), // #160
+ INST(Ldrsw , BaseLdSt , (0b1011100110, 0b10111000100, 0b10111000101, 0b10011000, kX , 0 , 2, Inst::kIdLdursw) , kRWI_W , 0 , 5 , 1590), // #161
+ INST(Ldset , BaseAtomicOp , (0b1011100000100000001100, kWX, 30, 0) , kRWI_WRX , 0 , 48 , 1596), // #162
+ INST(Ldseta , BaseAtomicOp , (0b1011100010100000001100, kWX, 30, 1) , kRWI_WRX , 0 , 49 , 1602), // #163
+ INST(Ldsetab , BaseAtomicOp , (0b0011100010100000001100, kW , 0 , 1) , kRWI_WRX , 0 , 50 , 1609), // #164
+ INST(Ldsetah , BaseAtomicOp , (0b0111100010100000001100, kW , 0 , 1) , kRWI_WRX , 0 , 51 , 1617), // #165
+ INST(Ldsetal , BaseAtomicOp , (0b1011100011100000001100, kWX, 30, 1) , kRWI_WRX , 0 , 52 , 1625), // #166
+ INST(Ldsetalb , BaseAtomicOp , (0b0011100011100000001100, kW , 0 , 1) , kRWI_WRX , 0 , 53 , 1633), // #167
+ INST(Ldsetalh , BaseAtomicOp , (0b0111100011100000001100, kW , 0 , 1) , kRWI_WRX , 0 , 54 , 1642), // #168
+ INST(Ldsetb , BaseAtomicOp , (0b0011100000100000001100, kW , 0 , 0) , kRWI_WRX , 0 , 55 , 1651), // #169
+ INST(Ldseth , BaseAtomicOp , (0b0111100000100000001100, kW , 0 , 0) , kRWI_WRX , 0 , 56 , 1658), // #170
+ INST(Ldsetl , BaseAtomicOp , (0b1011100001100000001100, kWX, 30, 0) , kRWI_WRX , 0 , 57 , 1665), // #171
+ INST(Ldsetlb , BaseAtomicOp , (0b0011100001100000001100, kW , 0 , 0) , kRWI_WRX , 0 , 58 , 1672), // #172
+ INST(Ldsetlh , BaseAtomicOp , (0b0111100001100000001100, kW , 0 , 0) , kRWI_WRX , 0 , 59 , 1680), // #173
+ INST(Ldsmax , BaseAtomicOp , (0b1011100000100000010000, kWX, 30, 0) , kRWI_WRX , 0 , 60 , 1688), // #174
+ INST(Ldsmaxa , BaseAtomicOp , (0b1011100010100000010000, kWX, 30, 1) , kRWI_WRX , 0 , 61 , 1695), // #175
+ INST(Ldsmaxab , BaseAtomicOp , (0b0011100010100000010000, kW , 0 , 1) , kRWI_WRX , 0 , 62 , 1703), // #176
+ INST(Ldsmaxah , BaseAtomicOp , (0b0111100010100000010000, kW , 0 , 1) , kRWI_WRX , 0 , 63 , 1712), // #177
+ INST(Ldsmaxal , BaseAtomicOp , (0b1011100011100000010000, kWX, 30, 1) , kRWI_WRX , 0 , 64 , 1721), // #178
+ INST(Ldsmaxalb , BaseAtomicOp , (0b0011100011100000010000, kW , 0 , 1) , kRWI_WRX , 0 , 65 , 1730), // #179
+ INST(Ldsmaxalh , BaseAtomicOp , (0b0111100011100000010000, kW , 0 , 1) , kRWI_WRX , 0 , 66 , 1740), // #180
+ INST(Ldsmaxb , BaseAtomicOp , (0b0011100000100000010000, kW , 0 , 0) , kRWI_WRX , 0 , 67 , 1750), // #181
+ INST(Ldsmaxh , BaseAtomicOp , (0b0111100000100000010000, kW , 0 , 0) , kRWI_WRX , 0 , 68 , 1758), // #182
+ INST(Ldsmaxl , BaseAtomicOp , (0b1011100001100000010000, kWX, 30, 0) , kRWI_WRX , 0 , 69 , 1766), // #183
+ INST(Ldsmaxlb , BaseAtomicOp , (0b0011100001100000010000, kW , 0 , 0) , kRWI_WRX , 0 , 70 , 1774), // #184
+ INST(Ldsmaxlh , BaseAtomicOp , (0b0111100001100000010000, kW , 0 , 0) , kRWI_WRX , 0 , 71 , 1783), // #185
+ INST(Ldsmin , BaseAtomicOp , (0b1011100000100000010100, kWX, 30, 0) , kRWI_WRX , 0 , 72 , 1792), // #186
+ INST(Ldsmina , BaseAtomicOp , (0b1011100010100000010100, kWX, 30, 1) , kRWI_WRX , 0 , 73 , 1799), // #187
+ INST(Ldsminab , BaseAtomicOp , (0b0011100010100000010100, kW , 0 , 1) , kRWI_WRX , 0 , 74 , 1807), // #188
+ INST(Ldsminah , BaseAtomicOp , (0b0111100010100000010100, kW , 0 , 1) , kRWI_WRX , 0 , 75 , 1816), // #189
+ INST(Ldsminal , BaseAtomicOp , (0b1011100011100000010100, kWX, 30, 1) , kRWI_WRX , 0 , 76 , 1825), // #190
+ INST(Ldsminalb , BaseAtomicOp , (0b0011100011100000010100, kW , 0 , 1) , kRWI_WRX , 0 , 77 , 1834), // #191
+ INST(Ldsminalh , BaseAtomicOp , (0b0111100011100000010100, kW , 0 , 1) , kRWI_WRX , 0 , 78 , 1844), // #192
+ INST(Ldsminb , BaseAtomicOp , (0b0011100000100000010100, kW , 0 , 0) , kRWI_WRX , 0 , 79 , 1854), // #193
+ INST(Ldsminh , BaseAtomicOp , (0b0111100000100000010100, kW , 0 , 0) , kRWI_WRX , 0 , 80 , 1862), // #194
+ INST(Ldsminl , BaseAtomicOp , (0b1011100001100000010100, kWX, 30, 0) , kRWI_WRX , 0 , 81 , 1870), // #195
+ INST(Ldsminlb , BaseAtomicOp , (0b0011100001100000010100, kW , 0 , 0) , kRWI_WRX , 0 , 82 , 1878), // #196
+ INST(Ldsminlh , BaseAtomicOp , (0b0111100001100000010100, kW , 0 , 0) , kRWI_WRX , 0 , 83 , 1887), // #197
+ INST(Ldtr , BaseRM_SImm9 , (0b1011100001000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0) , kRWI_W , 0 , 1 , 1896), // #198
+ INST(Ldtrb , BaseRM_SImm9 , (0b0011100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_W , 0 , 2 , 1901), // #199
+ INST(Ldtrh , BaseRM_SImm9 , (0b0111100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_W , 0 , 3 , 1907), // #200
+ INST(Ldtrsb , BaseRM_SImm9 , (0b0011100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0) , kRWI_W , 0 , 4 , 1913), // #201
+ INST(Ldtrsh , BaseRM_SImm9 , (0b0111100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0) , kRWI_W , 0 , 5 , 1920), // #202
+ INST(Ldtrsw , BaseRM_SImm9 , (0b1011100010000000000010, 0b0000000000000000000000, kX , kZR, 0 , 0) , kRWI_W , 0 , 6 , 1927), // #203
+ INST(Ldumax , BaseAtomicOp , (0b1011100000100000011000, kWX, 30, 0) , kRWI_WRX , 0 , 84 , 1934), // #204
+ INST(Ldumaxa , BaseAtomicOp , (0b1011100010100000011000, kWX, 30, 1) , kRWI_WRX , 0 , 85 , 1941), // #205
+ INST(Ldumaxab , BaseAtomicOp , (0b0011100010100000011000, kW , 0 , 1) , kRWI_WRX , 0 , 86 , 1949), // #206
+ INST(Ldumaxah , BaseAtomicOp , (0b0111100010100000011000, kW , 0 , 1) , kRWI_WRX , 0 , 87 , 1958), // #207
+ INST(Ldumaxal , BaseAtomicOp , (0b1011100011100000011000, kWX, 30, 1) , kRWI_WRX , 0 , 88 , 1967), // #208
+ INST(Ldumaxalb , BaseAtomicOp , (0b0011100011100000011000, kW , 0 , 1) , kRWI_WRX , 0 , 89 , 1976), // #209
+ INST(Ldumaxalh , BaseAtomicOp , (0b0111100011100000011000, kW , 0 , 1) , kRWI_WRX , 0 , 90 , 1986), // #210
+ INST(Ldumaxb , BaseAtomicOp , (0b0011100000100000011000, kW , 0 , 0) , kRWI_WRX , 0 , 91 , 1996), // #211
+ INST(Ldumaxh , BaseAtomicOp , (0b0111100000100000011000, kW , 0 , 0) , kRWI_WRX , 0 , 92 , 2004), // #212
+ INST(Ldumaxl , BaseAtomicOp , (0b1011100001100000011000, kWX, 30, 0) , kRWI_WRX , 0 , 93 , 2012), // #213
+ INST(Ldumaxlb , BaseAtomicOp , (0b0011100001100000011000, kW , 0 , 0) , kRWI_WRX , 0 , 94 , 2020), // #214
+ INST(Ldumaxlh , BaseAtomicOp , (0b0111100001100000011000, kW , 0 , 0) , kRWI_WRX , 0 , 95 , 2029), // #215
+ INST(Ldumin , BaseAtomicOp , (0b1011100000100000011100, kWX, 30, 0) , kRWI_WRX , 0 , 96 , 2038), // #216
+ INST(Ldumina , BaseAtomicOp , (0b1011100010100000011100, kWX, 30, 1) , kRWI_WRX , 0 , 97 , 2045), // #217
+ INST(Lduminab , BaseAtomicOp , (0b0011100010100000011100, kW , 0 , 1) , kRWI_WRX , 0 , 98 , 2053), // #218
+ INST(Lduminah , BaseAtomicOp , (0b0111100010100000011100, kW , 0 , 1) , kRWI_WRX , 0 , 99 , 2062), // #219
+ INST(Lduminal , BaseAtomicOp , (0b1011100011100000011100, kWX, 30, 1) , kRWI_WRX , 0 , 100, 2071), // #220
+ INST(Lduminalb , BaseAtomicOp , (0b0011100011100000011100, kW , 0 , 1) , kRWI_WRX , 0 , 101, 2080), // #221
+ INST(Lduminalh , BaseAtomicOp , (0b0111100011100000011100, kW , 0 , 1) , kRWI_WRX , 0 , 102, 2090), // #222
+ INST(Lduminb , BaseAtomicOp , (0b0011100000100000011100, kW , 0 , 0) , kRWI_WRX , 0 , 103, 2100), // #223
+ INST(Lduminh , BaseAtomicOp , (0b0111100000100000011100, kW , 0 , 0) , kRWI_WRX , 0 , 104, 2108), // #224
+ INST(Lduminl , BaseAtomicOp , (0b1011100001100000011100, kWX, 30, 0) , kRWI_WRX , 0 , 105, 2116), // #225
+ INST(Lduminlb , BaseAtomicOp , (0b0011100001100000011100, kW , 0 , 0) , kRWI_WRX , 0 , 106, 2124), // #226
+ INST(Lduminlh , BaseAtomicOp , (0b0111100001100000011100, kW , 0 , 0) , kRWI_WRX , 0 , 107, 2133), // #227
+ INST(Ldur , BaseRM_SImm9 , (0b1011100001000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0) , kRWI_W , 0 , 7 , 2142), // #228
+ INST(Ldurb , BaseRM_SImm9 , (0b0011100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_W , 0 , 8 , 2147), // #229
+ INST(Ldurh , BaseRM_SImm9 , (0b0111100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_W , 0 , 9 , 2153), // #230
+ INST(Ldursb , BaseRM_SImm9 , (0b0011100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0) , kRWI_W , 0 , 10 , 2159), // #231
+ INST(Ldursh , BaseRM_SImm9 , (0b0111100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0) , kRWI_W , 0 , 11 , 2166), // #232
+ INST(Ldursw , BaseRM_SImm9 , (0b1011100010000000000000, 0b0000000000000000000000, kWX, kZR, 0 , 0) , kRWI_W , 0 , 12 , 2173), // #233
+ INST(Ldxp , BaseLdxp , (0b1000100001111111000000, kWX, 30) , kRWI_WW , 0 , 1 , 2180), // #234
+ INST(Ldxr , BaseRM_NoImm , (0b1000100001011111011111, kWX, kZR, 30) , kRWI_W , 0 , 10 , 2185), // #235
+ INST(Ldxrb , BaseRM_NoImm , (0b0000100001011111011111, kW , kZR, 0 ) , kRWI_W , 0 , 11 , 2190), // #236
+ INST(Ldxrh , BaseRM_NoImm , (0b0100100001011111011111, kW , kZR, 0 ) , kRWI_W , 0 , 12 , 2196), // #237
+ INST(Lsl , BaseShift , (0b0001101011000000001000, 0b0101001100000000000000, 0) , kRWI_W , 0 , 2 , 2880), // #238
+ INST(Lslv , BaseShift , (0b0001101011000000001000, 0b0000000000000000000000, 0) , kRWI_W , 0 , 3 , 2202), // #239
+ INST(Lsr , BaseShift , (0b0001101011000000001001, 0b0101001100000000011111, 0) , kRWI_W , 0 , 4 , 2207), // #240
+ INST(Lsrv , BaseShift , (0b0001101011000000001001, 0b0000000000000000000000, 0) , kRWI_W , 0 , 5 , 2211), // #241
+ INST(Madd , BaseRRRR , (0b0001101100000000000000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 0 , 977 ), // #242
+ INST(Mneg , BaseRRR , (0b0001101100000000111111, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 11 , 2216), // #243
+ INST(Mov , BaseMov , (_) , kRWI_W , 0 , 0 , 949 ), // #244
+ INST(Movk , BaseMovKNZ , (0b01110010100000000000000000000000) , kRWI_X , 0 , 0 , 2226), // #245
+ INST(Movn , BaseMovKNZ , (0b00010010100000000000000000000000) , kRWI_W , 0 , 1 , 2231), // #246
+ INST(Movz , BaseMovKNZ , (0b01010010100000000000000000000000) , kRWI_W , 0 , 2 , 2236), // #247
+ INST(Mrs , BaseMrs , (_) , kRWI_W , 0 , 0 , 2241), // #248
+ INST(Msr , BaseMsr , (_) , kRWI_W , 0 , 0 , 2245), // #249
+ INST(Msub , BaseRRRR , (0b0001101100000000100000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 1 , 984 ), // #250
+ INST(Mul , BaseRRR , (0b0001101100000000011111, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 12 , 991 ), // #251
+ INST(Mvn , BaseMvnNeg , (0b00101010001000000000001111100000) , kRWI_W , 0 , 0 , 2249), // #252
+ INST(Neg , BaseMvnNeg , (0b01001011000000000000001111100000) , kRWI_W , 0 , 1 , 540 ), // #253
+ INST(Negs , BaseMvnNeg , (0b01101011000000000000001111100000) , kRWI_W , 0 , 2 , 2258), // #254
+ INST(Ngc , BaseRR , (0b01011010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true) , kRWI_W , 0 , 7 , 2263), // #255
+ INST(Ngcs , BaseRR , (0b01111010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true) , kRWI_W , 0 , 8 , 2267), // #256
+ INST(Nop , BaseOp , (0b11010101000000110010000000011111) , 0 , 0 , 13 , 2272), // #257
+ INST(Orn , BaseLogical , (0b0101010001, 0b01100100, 1) , kRWI_W , 0 , 6 , 2280), // #258
+ INST(Orr , BaseLogical , (0b0101010000, 0b01100100, 0) , kRWI_W , 0 , 7 , 2284), // #259
+ INST(Pacda , BaseRR , (0b11011010110000010000100000000000, kX, kZR, 0, kX, kSP, 5, true) , kRWI_X , 0 , 9 , 2288), // #260
+ INST(Pacdb , BaseRR , (0b11011010110000010000110000000000, kX, kZR, 0, kX, kSP, 5, true) , kRWI_X , 0 , 10 , 2294), // #261
+ INST(Pacdza , BaseR , (0b11011010110000010010101111100000, kX, kZR, 0) , kRWI_X , 0 , 4 , 2300), // #262
+ INST(Pacdzb , BaseR , (0b11011010110000010010111111100000, kX, kZR, 0) , kRWI_X , 0 , 5 , 2307), // #263
+ INST(Pacga , BaseRRR , (0b1001101011000000001100, kX, kZR, kX, kZR, kX, kSP, false) , kRWI_W , 0 , 13 , 2314), // #264
+ INST(Pssbb , BaseOp , (0b11010101000000110011010010011111) , 0 , 0 , 14 , 2338), // #265
+ INST(Rbit , BaseRR , (0b01011010110000000000000000000000, kWX, kZR, 0, kWX, kZR, 5, true) , kRWI_W , 0 , 11 , 2364), // #266
+ INST(Ret , BaseBranchReg , (0b11010110010111110000000000000000) , kRWI_R , 0 , 2 , 593 ), // #267
+ INST(Rev , BaseRev , (_) , kRWI_W , 0 , 0 , 2369), // #268
+ INST(Rev16 , BaseRR , (0b01011010110000000000010000000000, kWX, kZR, 0, kWX, kZR, 5, true) , kRWI_W , 0 , 12 , 2373), // #269
+ INST(Rev32 , BaseRR , (0b11011010110000000000100000000000, kWX, kZR, 0, kWX, kZR, 5, true) , kRWI_W , 0 , 13 , 2379), // #270
+ INST(Rev64 , BaseRR , (0b11011010110000000000110000000000, kWX, kZR, 0, kWX, kZR, 5, true) , kRWI_W , 0 , 14 , 2385), // #271
+ INST(Ror , BaseShift , (0b0001101011000000001011, 0b0001001110000000000000, 1) , kRWI_W , 0 , 6 , 2391), // #272
+ INST(Rorv , BaseShift , (0b0001101011000000001011, 0b0000000000000000000000, 1) , kRWI_W , 0 , 7 , 2395), // #273
+ INST(Sbc , BaseRRR , (0b0101101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 14 , 2498), // #274
+ INST(Sbcs , BaseRRR , (0b0111101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 15 , 2502), // #275
+ INST(Sbfiz , BaseBfi , (0b00010011000000000000000000000000) , kRWI_W , 0 , 1 , 2507), // #276
+ INST(Sbfm , BaseBfm , (0b00010011000000000000000000000000) , kRWI_W , 0 , 1 , 2513), // #277
+ INST(Sbfx , BaseBfx , (0b00010011000000000000000000000000) , kRWI_W , 0 , 1 , 2518), // #278
+ INST(Sdiv , BaseRRR , (0b0001101011000000000011, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 16 , 2529), // #279
+ INST(Setf8 , BaseR , (0b00111010000000000000100000001101, kW, kZR, 5) , 0 , 0 , 6 , 2541), // #280
+ INST(Setf16 , BaseR , (0b00111010000000000100100000001101, kW, kZR, 5) , 0 , 0 , 7 , 2534), // #281
+ INST(Sev , BaseOp , (0b11010101000000110010000010011111) , 0 , 0 , 15 , 2547), // #282
+ INST(Sevl , BaseOp , (0b11010101000000110010000010111111) , 0 , 0 , 16 , 2551), // #283
+ INST(Smaddl , BaseRRRR , (0b1001101100100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false) , kRWI_W , 0 , 2 , 2758), // #284
+ INST(Smc , BaseOpImm , (0b11010100000000000000000000000011, 16, 5) , 0 , 0 , 11 , 53 ), // #285
+ INST(Smnegl , BaseRRR , (0b1001101100100000111111, kX , kZR, kW , kZR, kW , kZR, false) , kRWI_W , 0 , 17 , 2815), // #286
+ INST(Smsubl , BaseRRRR , (0b1001101100100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false) , kRWI_W , 0 , 3 , 2827), // #287
+ INST(Smulh , BaseRRR , (0b1001101101000000011111, kX , kZR, kX , kZR, kX , kZR, true) , kRWI_W , 0 , 18 , 2834), // #288
+ INST(Smull , BaseRRR , (0b1001101100100000011111, kX , kZR, kW , kZR, kW , kZR, false) , kRWI_W , 0 , 19 , 2840), // #289
+ INST(Ssbb , BaseOp , (0b11010101000000110011000010011111) , 0 , 0 , 17 , 2339), // #290
+ INST(St2g , BaseRM_SImm9 , (0b1101100110100000000010, 0b1101100110100000000001, kX, kSP, 0, 4) , kRWI_RW , 0 , 13 , 3164), // #291
+ INST(Stadd , BaseAtomicSt , (0b1011100000100000000000, kWX, 30) , kRWI_RX , 0 , 0 , 3177), // #292
+ INST(Staddl , BaseAtomicSt , (0b1011100001100000000000, kWX, 30) , kRWI_RX , 0 , 1 , 3197), // #293
+ INST(Staddb , BaseAtomicSt , (0b0011100000100000000000, kW , 0 ) , kRWI_RX , 0 , 2 , 3183), // #294
+ INST(Staddlb , BaseAtomicSt , (0b0011100001100000000000, kW , 0 ) , kRWI_RX , 0 , 3 , 3204), // #295
+ INST(Staddh , BaseAtomicSt , (0b0111100000100000000000, kW , 0 ) , kRWI_RX , 0 , 4 , 3190), // #296
+ INST(Staddlh , BaseAtomicSt , (0b0111100001100000000000, kW , 0 ) , kRWI_RX , 0 , 5 , 3212), // #297
+ INST(Stclr , BaseAtomicSt , (0b1011100000100000000100, kWX, 30) , kRWI_RX , 0 , 6 , 3220), // #298
+ INST(Stclrl , BaseAtomicSt , (0b1011100001100000000100, kWX, 30) , kRWI_RX , 0 , 7 , 3240), // #299
+ INST(Stclrb , BaseAtomicSt , (0b0011100000100000000100, kW , 0 ) , kRWI_RX , 0 , 8 , 3226), // #300
+ INST(Stclrlb , BaseAtomicSt , (0b0011100001100000000100, kW , 0 ) , kRWI_RX , 0 , 9 , 3247), // #301
+ INST(Stclrh , BaseAtomicSt , (0b0111100000100000000100, kW , 0 ) , kRWI_RX , 0 , 10 , 3233), // #302
+ INST(Stclrlh , BaseAtomicSt , (0b0111100001100000000100, kW , 0 ) , kRWI_RX , 0 , 11 , 3255), // #303
+ INST(Steor , BaseAtomicSt , (0b1011100000100000001000, kWX, 30) , kRWI_RX , 0 , 12 , 3263), // #304
+ INST(Steorl , BaseAtomicSt , (0b1011100001100000001000, kWX, 30) , kRWI_RX , 0 , 13 , 3283), // #305
+ INST(Steorb , BaseAtomicSt , (0b0011100000100000001000, kW , 0 ) , kRWI_RX , 0 , 14 , 3269), // #306
+ INST(Steorlb , BaseAtomicSt , (0b0011100001100000001000, kW , 0 ) , kRWI_RX , 0 , 15 , 3290), // #307
+ INST(Steorh , BaseAtomicSt , (0b0111100000100000001000, kW , 0 ) , kRWI_RX , 0 , 16 , 3276), // #308
+ INST(Steorlh , BaseAtomicSt , (0b0111100001100000001000, kW , 0 ) , kRWI_RX , 0 , 17 , 3298), // #309
+ INST(Stg , BaseRM_SImm9 , (0b1101100100100000000010, 0b1101100100100000000001, kX, kSP, 0, 4) , kRWI_RW , 0 , 14 , 3306), // #310
+ INST(Stgm , BaseRM_NoImm , (0b1101100110100000000000, kX , kZR, 0 ) , kRWI_RW , 0 , 13 , 3310), // #311
+ INST(Stgp , BaseLdpStp , (0b0110100100, 0b0110100010, kX, 0, 4) , kRWI_RRW , 0 , 3 , 3315), // #312
+ INST(Stllr , BaseRM_NoImm , (0b1000100010011111011111, kWX, kZR, 30) , kRWI_RW , 0 , 14 , 3320), // #313
+ INST(Stllrb , BaseRM_NoImm , (0b0000100010011111011111, kW , kZR, 0 ) , kRWI_RW , 0 , 15 , 3326), // #314
+ INST(Stllrh , BaseRM_NoImm , (0b0100100010011111011111, kW , kZR, 0 ) , kRWI_RW , 0 , 16 , 3333), // #315
+ INST(Stlr , BaseRM_NoImm , (0b1000100010011111111111, kWX, kZR, 30) , kRWI_RW , 0 , 17 , 3340), // #316
+ INST(Stlrb , BaseRM_NoImm , (0b0000100010011111111111, kW , kZR, 0 ) , kRWI_RW , 0 , 18 , 3345), // #317
+ INST(Stlrh , BaseRM_NoImm , (0b0100100010011111111111, kW , kZR, 0 ) , kRWI_RW , 0 , 19 , 3351), // #318
+ INST(Stlxp , BaseStxp , (0b1000100000100000100000, kWX, 30) , kRWI_WRRX , 0 , 0 , 3357), // #319
+ INST(Stlxr , BaseAtomicOp , (0b1000100000000000111111, kWX, 30, 1) , kRWI_WRX , 0 , 108, 3363), // #320
+ INST(Stlxrb , BaseAtomicOp , (0b0000100000000000111111, kW , 0 , 1) , kRWI_WRX , 0 , 109, 3369), // #321
+ INST(Stlxrh , BaseAtomicOp , (0b0100100000000000111111, kW , 0 , 1) , kRWI_WRX , 0 , 110, 3376), // #322
+ INST(Stnp , BaseLdpStp , (0b0010100000, 0 , kWX, 31, 2) , kRWI_RRW , 0 , 4 , 3383), // #323
+ INST(Stp , BaseLdpStp , (0b0010100100, 0b0010100010, kWX, 31, 2) , kRWI_RRW , 0 , 5 , 3388), // #324
+ INST(Str , BaseLdSt , (0b1011100100, 0b10111000000, 0b10111000001, 0 , kWX, 30, 2, Inst::kIdStur) , kRWI_RW , 0 , 6 , 3392), // #325
+ INST(Strb , BaseLdSt , (0b0011100100, 0b00111000000, 0b00111000001, 0 , kW , 30, 0, Inst::kIdSturb) , kRWI_RW , 0 , 7 , 3396), // #326
+ INST(Strh , BaseLdSt , (0b0111100100, 0b01111000000, 0b01111000001, 0 , kWX, 30, 1, Inst::kIdSturh) , kRWI_RW , 0 , 8 , 3401), // #327
+ INST(Stset , BaseAtomicSt , (0b1011100000100000001100, kWX, 30) , kRWI_RX , 0 , 18 , 3406), // #328
+ INST(Stsetl , BaseAtomicSt , (0b1011100001100000001100, kWX, 30) , kRWI_RX , 0 , 19 , 3426), // #329
+ INST(Stsetb , BaseAtomicSt , (0b0011100000100000001100, kW , 0 ) , kRWI_RX , 0 , 20 , 3412), // #330
+ INST(Stsetlb , BaseAtomicSt , (0b0011100001100000001100, kW , 0 ) , kRWI_RX , 0 , 21 , 3433), // #331
+ INST(Stseth , BaseAtomicSt , (0b0111100000100000001100, kW , 0 ) , kRWI_RX , 0 , 22 , 3419), // #332
+ INST(Stsetlh , BaseAtomicSt , (0b0111100001100000001100, kW , 0 ) , kRWI_RX , 0 , 23 , 3441), // #333
+ INST(Stsmax , BaseAtomicSt , (0b1011100000100000010000, kWX, 30) , kRWI_RX , 0 , 24 , 3449), // #334
+ INST(Stsmaxl , BaseAtomicSt , (0b1011100001100000010000, kWX, 30) , kRWI_RX , 0 , 25 , 3472), // #335
+ INST(Stsmaxb , BaseAtomicSt , (0b0011100000100000010000, kW , 0 ) , kRWI_RX , 0 , 26 , 3456), // #336
+ INST(Stsmaxlb , BaseAtomicSt , (0b0011100001100000010000, kW , 0 ) , kRWI_RX , 0 , 27 , 3480), // #337
+ INST(Stsmaxh , BaseAtomicSt , (0b0111100000100000010000, kW , 0 ) , kRWI_RX , 0 , 28 , 3464), // #338
+ INST(Stsmaxlh , BaseAtomicSt , (0b0111100001100000010000, kW , 0 ) , kRWI_RX , 0 , 29 , 3489), // #339
+ INST(Stsmin , BaseAtomicSt , (0b1011100000100000010100, kWX, 30) , kRWI_RX , 0 , 30 , 3498), // #340
+ INST(Stsminl , BaseAtomicSt , (0b1011100001100000010100, kWX, 30) , kRWI_RX , 0 , 31 , 3521), // #341
+ INST(Stsminb , BaseAtomicSt , (0b0011100000100000010100, kW , 0 ) , kRWI_RX , 0 , 32 , 3505), // #342
+ INST(Stsminlb , BaseAtomicSt , (0b0011100001100000010100, kW , 0 ) , kRWI_RX , 0 , 33 , 3529), // #343
+ INST(Stsminh , BaseAtomicSt , (0b0111100000100000010100, kW , 0 ) , kRWI_RX , 0 , 34 , 3513), // #344
+ INST(Stsminlh , BaseAtomicSt , (0b0111100001100000010100, kW , 0 ) , kRWI_RX , 0 , 35 , 3538), // #345
+ INST(Sttr , BaseRM_SImm9 , (0b1011100000000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0) , kRWI_RW , 0 , 15 , 3547), // #346
+ INST(Sttrb , BaseRM_SImm9 , (0b0011100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_RW , 0 , 16 , 3552), // #347
+ INST(Sttrh , BaseRM_SImm9 , (0b0111100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_RW , 0 , 17 , 3558), // #348
+ INST(Stumax , BaseAtomicSt , (0b1011100000100000011000, kWX, 30) , kRWI_RX , 0 , 36 , 3564), // #349
+ INST(Stumaxl , BaseAtomicSt , (0b1011100001100000011000, kWX, 30) , kRWI_RX , 0 , 37 , 3587), // #350
+ INST(Stumaxb , BaseAtomicSt , (0b0011100000100000011000, kW , 0 ) , kRWI_RX , 0 , 38 , 3571), // #351
+ INST(Stumaxlb , BaseAtomicSt , (0b0011100001100000011000, kW , 0 ) , kRWI_RX , 0 , 39 , 3595), // #352
+ INST(Stumaxh , BaseAtomicSt , (0b0111100000100000011000, kW , 0 ) , kRWI_RX , 0 , 40 , 3579), // #353
+ INST(Stumaxlh , BaseAtomicSt , (0b0111100001100000011000, kW , 0 ) , kRWI_RX , 0 , 41 , 3604), // #354
+ INST(Stumin , BaseAtomicSt , (0b1011100000100000011100, kWX, 30) , kRWI_RX , 0 , 42 , 3613), // #355
+ INST(Stuminl , BaseAtomicSt , (0b1011100001100000011100, kWX, 30) , kRWI_RX , 0 , 43 , 3636), // #356
+ INST(Stuminb , BaseAtomicSt , (0b0011100000100000011100, kW , 0 ) , kRWI_RX , 0 , 44 , 3620), // #357
+ INST(Stuminlb , BaseAtomicSt , (0b0011100001100000011100, kW , 0 ) , kRWI_RX , 0 , 45 , 3644), // #358
+ INST(Stuminh , BaseAtomicSt , (0b0111100000100000011100, kW , 0 ) , kRWI_RX , 0 , 46 , 3628), // #359
+ INST(Stuminlh , BaseAtomicSt , (0b0111100001100000011100, kW , 0 ) , kRWI_RX , 0 , 47 , 3653), // #360
+ INST(Stur , BaseRM_SImm9 , (0b1011100000000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0) , kRWI_RW , 0 , 18 , 3662), // #361
+ INST(Sturb , BaseRM_SImm9 , (0b0011100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_RW , 0 , 19 , 3667), // #362
+ INST(Sturh , BaseRM_SImm9 , (0b0111100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_RW , 0 , 20 , 3673), // #363
+ INST(Stxp , BaseStxp , (0b1000100000100000000000, kWX, 30) , kRWI_WRRW , 0 , 1 , 3679), // #364
+ INST(Stxr , BaseStx , (0b1000100000000000011111, kWX, 30) , kRWI_WRW , 0 , 0 , 3684), // #365
+ INST(Stxrb , BaseStx , (0b0000100000000000011111, kW , 0 ) , kRWI_WRW , 0 , 1 , 3689), // #366
+ INST(Stxrh , BaseStx , (0b0100100000000000011111, kW , 0 ) , kRWI_WRW , 0 , 2 , 3695), // #367
+ INST(Stz2g , BaseRM_SImm9 , (0b1101100111100000000010, 0b1101100111100000000001, kX , kSP, 0, 4) , kRWI_RW , 0 , 21 , 3701), // #368
+ INST(Stzg , BaseRM_SImm9 , (0b1101100101100000000010, 0b1101100101100000000001, kX , kSP, 0, 4) , kRWI_RW , 0 , 22 , 3707), // #369
+ INST(Stzgm , BaseRM_NoImm , (0b1101100100100000000000, kX , kZR, 0) , kRWI_RW , 0 , 20 , 3712), // #370
+ INST(Sub , BaseAddSub , (0b1001011000, 0b1001011001, 0b1010001) , kRWI_X , 0 , 2 , 985 ), // #371
+ INST(Subg , BaseRRII , (0b1101000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10) , kRWI_W , 0 , 1 , 3718), // #372
+ INST(Subp , BaseRRR , (0b1001101011000000000000, kX, kZR, kX, kSP, kX, kSP, false) , kRWI_W , 0 , 20 , 3723), // #373
+ INST(Subps , BaseRRR , (0b1011101011000000000000, kX, kZR, kX, kSP, kX, kSP, false) , kRWI_W , 0 , 21 , 3728), // #374
+ INST(Subs , BaseAddSub , (0b1101011000, 0b1101011001, 0b1110001) , kRWI_X , 0 , 3 , 3734), // #375
+ INST(Svc , BaseOpImm , (0b11010100000000000000000000000001, 16, 5) , 0 , 0 , 12 , 3752), // #376
+ INST(Swp , BaseAtomicOp , (0b1011100000100000100000, kWX, 30, 1) , kRWI_RWX , 0 , 111, 3756), // #377
+ INST(Swpa , BaseAtomicOp , (0b1011100010100000100000, kWX, 30, 1) , kRWI_RWX , 0 , 112, 3760), // #378
+ INST(Swpab , BaseAtomicOp , (0b0011100010100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 113, 3765), // #379
+ INST(Swpah , BaseAtomicOp , (0b0111100010100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 114, 3771), // #380
+ INST(Swpal , BaseAtomicOp , (0b1011100011100000100000, kWX, 30, 1) , kRWI_RWX , 0 , 115, 3777), // #381
+ INST(Swpalb , BaseAtomicOp , (0b0011100011100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 116, 3783), // #382
+ INST(Swpalh , BaseAtomicOp , (0b0111100011100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 117, 3790), // #383
+ INST(Swpb , BaseAtomicOp , (0b0011100000100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 118, 3797), // #384
+ INST(Swph , BaseAtomicOp , (0b0111100000100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 119, 3802), // #385
+ INST(Swpl , BaseAtomicOp , (0b1011100001100000100000, kWX, 30, 1) , kRWI_RWX , 0 , 120, 3807), // #386
+ INST(Swplb , BaseAtomicOp , (0b0011100001100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 121, 3812), // #387
+ INST(Swplh , BaseAtomicOp , (0b0111100001100000100000, kW , 0 , 1) , kRWI_RWX , 0 , 122, 3818), // #388
+ INST(Sxtb , BaseExtend , (0b0001001100000000000111, kWX, 0) , kRWI_W , 0 , 0 , 3824), // #389
+ INST(Sxth , BaseExtend , (0b0001001100000000001111, kWX, 0) , kRWI_W , 0 , 1 , 3829), // #390
+ INST(Sxtw , BaseExtend , (0b1001001101000000011111, kX , 0) , kRWI_W , 0 , 2 , 3845), // #391
+ INST(Sys , BaseSys , (_) , kRWI_W , 0 , 0 , 3850), // #392
+ INST(Tlbi , BaseAtDcIcTlbi , (0b00011110000000, 0b00010000000000, false) , kRWI_RX , 0 , 3 , 3871), // #393
+ INST(Tst , BaseTst , (0b1101010000, 0b111001000) , kRWI_R , 0 , 0 , 437 ), // #394
+ INST(Tbnz , BaseBranchTst , (0b00110111000000000000000000000000) , kRWI_R , 0 , 0 , 3858), // #395
+ INST(Tbz , BaseBranchTst , (0b00110110000000000000000000000000) , kRWI_R , 0 , 1 , 3867), // #396
+ INST(Ubfiz , BaseBfi , (0b01010011000000000000000000000000) , kRWI_W , 0 , 2 , 3969), // #397
+ INST(Ubfm , BaseBfm , (0b01010011000000000000000000000000) , kRWI_W , 0 , 2 , 3975), // #398
+ INST(Ubfx , BaseBfx , (0b01010011000000000000000000000000) , kRWI_W , 0 , 2 , 3980), // #399
+ INST(Udf , BaseOpImm , (0b00000000000000000000000000000000, 16, 0) , 0 , 0 , 13 , 3991), // #400
+ INST(Udiv , BaseRRR , (0b0001101011000000000010, kWX, kZR, kWX, kZR, kWX, kZR, true) , kRWI_W , 0 , 22 , 3995), // #401
+ INST(Umaddl , BaseRRRR , (0b1001101110100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false) , kRWI_W , 0 , 4 , 4012), // #402
+ INST(Umnegl , BaseRRR , (0b1001101110100000111111, kX , kZR, kW , kZR, kW , kZR, false) , kRWI_W , 0 , 23 , 4075), // #403
+ INST(Umull , BaseRRR , (0b1001101110100000011111, kX , kZR, kW , kZR, kW , kZR, false) , kRWI_W , 0 , 24 , 4100), // #404
+ INST(Umulh , BaseRRR , (0b1001101111000000011111, kX , kZR, kX , kZR, kX , kZR, false) , kRWI_W , 0 , 25 , 4094), // #405
+ INST(Umsubl , BaseRRRR , (0b1001101110100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false) , kRWI_W , 0 , 5 , 4087), // #406
+ INST(Uxtb , BaseExtend , (0b0101001100000000000111, kW, 1) , kRWI_W , 0 , 3 , 4291), // #407
+ INST(Uxth , BaseExtend , (0b0101001100000000001111, kW, 1) , kRWI_W , 0 , 4 , 4296), // #408
+ INST(Wfe , BaseOp , (0b11010101000000110010000001011111) , 0 , 0 , 18 , 4322), // #409
+ INST(Wfi , BaseOp , (0b11010101000000110010000001111111) , 0 , 0 , 19 , 4326), // #410
+ INST(Xaflag , BaseOp , (0b11010101000000000100000000111111) , 0 , 0 , 20 , 4330), // #411
+ INST(Xpacd , BaseR , (0b11011010110000010100011111100000, kX, kZR, 0) , kRWI_X , 0 , 8 , 4341), // #412
+ INST(Xpaci , BaseR , (0b11011010110000010100001111100000, kX, kZR, 0) , kRWI_X , 0 , 9 , 4347), // #413
+ INST(Xpaclri , BaseOp , (0b11010101000000110010000011111111) , kRWI_X , 0 , 21 , 4353), // #414
+ INST(Yield , BaseOp , (0b11010101000000110010000000111111) , 0 , 0 , 22 , 4361), // #415
+ INST(Abs_v , ISimdVV , (0b0000111000100000101110, kVO_V_Any) , kRWI_W , 0 , 0 , 2855), // #416
+ INST(Add_v , ISimdVVV , (0b0000111000100000100001, kVO_V_Any) , kRWI_W , 0 , 0 , 978 ), // #417
+ INST(Addhn_v , ISimdVVV , (0b0000111000100000010000, kVO_V_B8H4S2) , kRWI_W , F(Narrow) , 1 , 2345), // #418
+ INST(Addhn2_v , ISimdVVV , (0b0100111000100000010000, kVO_V_B16H8S4) , kRWI_W , F(Narrow) , 2 , 2352), // #419
+ INST(Addp_v , ISimdPair , (0b0101111000110001101110, 0b0000111000100000101111, kVO_V_Any) , kRWI_W , F(Pair) , 0 , 638 ), // #420
+ INST(Addv_v , ISimdSV , (0b0000111000110001101110, kVO_V_BH_4S) , kRWI_W , 0 , 0 , 20 ), // #421
+ INST(Aesd_v , ISimdVVx , (0b0100111000101000010110, kOp_V16B, kOp_V16B) , kRWI_X , 0 , 0 , 34 ), // #422
+ INST(Aese_v , ISimdVVx , (0b0100111000101000010010, kOp_V16B, kOp_V16B) , kRWI_X , 0 , 1 , 39 ), // #423
+ INST(Aesimc_v , ISimdVVx , (0b0100111000101000011110, kOp_V16B, kOp_V16B) , kRWI_W , 0 , 2 , 44 ), // #424
+ INST(Aesmc_v , ISimdVVx , (0b0100111000101000011010, kOp_V16B, kOp_V16B) , kRWI_W , 0 , 3 , 51 ), // #425
+ INST(And_v , ISimdVVV , (0b0000111000100000000111, kVO_V_B) , kRWI_W , 0 , 3 , 57 ), // #426
+ INST(Bcax_v , ISimdVVVV , (0b1100111000100000000000, kVO_V_B16) , kRWI_W , 0 , 0 , 187 ), // #427
+ INST(Bfcvt_v , ISimdVVx , (0b0001111001100011010000, kOp_H, kOp_S) , kRWI_W , 0 , 4 , 196 ), // #428
+ INST(Bfcvtn_v , ISimdVVx , (0b0000111010100001011010, kOp_V4H, kOp_V4S) , kRWI_W , F(Narrow) , 5 , 202 ), // #429
+ INST(Bfcvtn2_v , ISimdVVx , (0b0100111010100001011010, kOp_V8H, kOp_V4S) , kRWI_W , F(Narrow) , 6 , 209 ), // #430
+ INST(Bfdot_v , SimdDot , (0b0010111001000000111111, 0b0000111101000000111100, kET_S, kET_H, kET_2H) , kRWI_X , 0 , 0 , 217 ), // #431
+ INST(Bfmlalb_v , SimdFmlal , (0b0010111011000000111111, 0b0000111111000000111100, 0, kET_S, kET_H, kET_H) , kRWI_X , F(VH0_15) , 0 , 227 ), // #432
+ INST(Bfmlalt_v , SimdFmlal , (0b0110111011000000111111, 0b0100111111000000111100, 0, kET_S, kET_H, kET_H) , kRWI_X , F(VH0_15) , 1 , 235 ), // #433
+ INST(Bfmmla_v , ISimdVVVx , (0b0110111001000000111011, kOp_V4S, kOp_V8H, kOp_V8H) , kRWI_X , F(Long) , 0 , 243 ), // #434
+ INST(Bic_v , SimdBicOrr , (0b0000111001100000000111, 0b0010111100000000000001) , kRWI_W , 0 , 0 , 256 ), // #435
+ INST(Bif_v , ISimdVVV , (0b0010111011100000000111, kVO_V_B) , kRWI_X , 0 , 4 , 265 ), // #436
+ INST(Bit_v , ISimdVVV , (0b0010111010100000000111, kVO_V_B) , kRWI_X , 0 , 5 , 2365), // #437
+ INST(Bsl_v , ISimdVVV , (0b0010111001100000000111, kVO_V_B) , kRWI_X , 0 , 6 , 280 ), // #438
+ INST(Cls_v , ISimdVV , (0b0000111000100000010010, kVO_V_BHS) , kRWI_W , 0 , 1 , 412 ), // #439
+ INST(Clz_v , ISimdVV , (0b0010111000100000010010, kVO_V_BHS) , kRWI_W , 0 , 2 , 416 ), // #440
+ INST(Cmeq_v , SimdCmp , (0b0010111000100000100011, 0b0000111000100000100110, kVO_V_Any) , kRWI_W , 0 , 0 , 663 ), // #441
+ INST(Cmge_v , SimdCmp , (0b0000111000100000001111, 0b0010111000100000100010, kVO_V_Any) , kRWI_W , 0 , 1 , 669 ), // #442
+ INST(Cmgt_v , SimdCmp , (0b0000111000100000001101, 0b0000111000100000100010, kVO_V_Any) , kRWI_W , 0 , 2 , 675 ), // #443
+ INST(Cmhi_v , SimdCmp , (0b0010111000100000001101, 0b0000000000000000000000, kVO_V_Any) , kRWI_W , 0 , 3 , 420 ), // #444
+ INST(Cmhs_v , SimdCmp , (0b0010111000100000001111, 0b0000000000000000000000, kVO_V_Any) , kRWI_W , 0 , 4 , 425 ), // #445
+ INST(Cmle_v , SimdCmp , (0b0000000000000000000000, 0b0010111000100000100110, kVO_V_Any) , kRWI_W , 0 , 5 , 687 ), // #446
+ INST(Cmlt_v , SimdCmp , (0b0000000000000000000000, 0b0000111000100000101010, kVO_V_Any) , kRWI_W , 0 , 6 , 693 ), // #447
+ INST(Cmtst_v , ISimdVVV , (0b0000111000100000100011, kVO_V_Any) , kRWI_W , 0 , 7 , 435 ), // #448
+ INST(Cnt_v , ISimdVV , (0b0000111000100000010110, kVO_V_B) , kRWI_W , 0 , 3 , 446 ), // #449
+ INST(Dup_v , SimdDup , (_) , kRWI_W , 0 , 0 , 579 ), // #450
+ INST(Eor_v , ISimdVVV , (0b0010111000100000000111, kVO_V_B) , kRWI_W , 0 , 8 , 1418), // #451
+ INST(Eor3_v , ISimdVVVV , (0b1100111000000000000000, kVO_V_B16) , kRWI_W , 0 , 1 , 587 ), // #452
+ INST(Ext_v , ISimdVVVI , (0b0010111000000000000000, kVO_V_B, 4, 11, 1) , kRWI_W , 0 , 0 , 601 ), // #453
+ INST(Fabd_v , FSimdVVV , (0b0111111010100000110101, kHF_C, 0b0010111010100000110101, kHF_C) , kRWI_W , 0 , 0 , 610 ), // #454
+ INST(Fabs_v , FSimdVV , (0b0001111000100000110000, kHF_A, 0b0000111010100000111110, kHF_B) , kRWI_W , 0 , 0 , 615 ), // #455
+ INST(Facge_v , FSimdVVV , (0b0111111000100000111011, kHF_C, 0b0010111000100000111011, kHF_C) , kRWI_W , 0 , 1 , 620 ), // #456
+ INST(Facgt_v , FSimdVVV , (0b0111111010100000111011, kHF_C, 0b0010111010100000111011, kHF_C) , kRWI_W , 0 , 2 , 626 ), // #457
+ INST(Fadd_v , FSimdVVV , (0b0001111000100000001010, kHF_A, 0b0000111000100000110101, kHF_C) , kRWI_W , 0 , 3 , 632 ), // #458
+ INST(Faddp_v , FSimdPair , (0b0111111000110000110110, 0b0010111000100000110101) , kRWI_W , 0 , 0 , 637 ), // #459
+ INST(Fcadd_v , SimdFcadd , (0b0010111000000000111001) , kRWI_W , 0 , 0 , 643 ), // #460
+ INST(Fccmp_v , SimdFccmpFccmpe , (0b00011110001000000000010000000000) , kRWI_R , 0 , 0 , 649 ), // #461
+ INST(Fccmpe_v , SimdFccmpFccmpe , (0b00011110001000000000010000010000) , kRWI_R , 0 , 1 , 655 ), // #462
+ INST(Fcmeq_v , SimdFcm , (0b0000111000100000111001, kHF_C, 0b0000111010100000110110) , kRWI_W , 0 , 0 , 662 ), // #463
+ INST(Fcmge_v , SimdFcm , (0b0010111000100000111001, kHF_C, 0b0010111010100000110010) , kRWI_W , 0 , 1 , 668 ), // #464
+ INST(Fcmgt_v , SimdFcm , (0b0010111010100000111001, kHF_C, 0b0000111010100000110010) , kRWI_W , 0 , 2 , 674 ), // #465
+ INST(Fcmla_v , SimdFcmla , (0b0010111000000000110001, 0b0010111100000000000100) , kRWI_X , 0 , 0 , 680 ), // #466
+ INST(Fcmle_v , SimdFcm , (0b0000000000000000000000, kHF_C, 0b0010111010100000110110) , kRWI_W , 0 , 3 , 686 ), // #467
+ INST(Fcmlt_v , SimdFcm , (0b0000000000000000000000, kHF_C, 0b0000111010100000111010) , kRWI_W , 0 , 4 , 692 ), // #468
+ INST(Fcmp_v , SimdFcmpFcmpe , (0b00011110001000000010000000000000) , kRWI_R , 0 , 0 , 698 ), // #469
+ INST(Fcmpe_v , SimdFcmpFcmpe , (0b00011110001000000010000000010000) , kRWI_R , 0 , 1 , 703 ), // #470
+ INST(Fcsel_v , SimdFcsel , (_) , kRWI_W , 0 , 0 , 709 ), // #471
+ INST(Fcvt_v , SimdFcvt , (_) , kRWI_W , 0 , 0 , 197 ), // #472
+ INST(Fcvtas_v , SimdFcvtSV , (0b0000111000100001110010, 0b0000000000000000000000, 0b0001111000100100000000, 1) , kRWI_W , 0 , 0 , 715 ), // #473
+ INST(Fcvtau_v , SimdFcvtSV , (0b0010111000100001110010, 0b0000000000000000000000, 0b0001111000100101000000, 1) , kRWI_W , 0 , 1 , 722 ), // #474
+ INST(Fcvtl_v , SimdFcvtLN , (0b0000111000100001011110, 0, 0) , kRWI_W , F(Long) , 0 , 729 ), // #475
+ INST(Fcvtl2_v , SimdFcvtLN , (0b0100111000100001011110, 0, 0) , kRWI_W , F(Long) , 1 , 735 ), // #476
+ INST(Fcvtms_v , SimdFcvtSV , (0b0000111000100001101110, 0b0000000000000000000000, 0b0001111000110000000000, 1) , kRWI_W , 0 , 2 , 742 ), // #477
+ INST(Fcvtmu_v , SimdFcvtSV , (0b0010111000100001101110, 0b0000000000000000000000, 0b0001111000110001000000, 1) , kRWI_W , 0 , 3 , 749 ), // #478
+ INST(Fcvtn_v , SimdFcvtLN , (0b0000111000100001011010, 0, 0) , kRWI_W , F(Narrow) , 2 , 203 ), // #479
+ INST(Fcvtn2_v , SimdFcvtLN , (0b0100111000100001011010, 0, 0) , kRWI_X , F(Narrow) , 3 , 210 ), // #480
+ INST(Fcvtns_v , SimdFcvtSV , (0b0000111000100001101010, 0b0000000000000000000000, 0b0001111000100000000000, 1) , kRWI_W , 0 , 4 , 756 ), // #481
+ INST(Fcvtnu_v , SimdFcvtSV , (0b0010111000100001101010, 0b0000000000000000000000, 0b0001111000100001000000, 1) , kRWI_W , 0 , 5 , 763 ), // #482
+ INST(Fcvtps_v , SimdFcvtSV , (0b0000111010100001101010, 0b0000000000000000000000, 0b0001111000101000000000, 1) , kRWI_W , 0 , 6 , 770 ), // #483
+ INST(Fcvtpu_v , SimdFcvtSV , (0b0010111010100001101010, 0b0000000000000000000000, 0b0001111000101001000000, 1) , kRWI_W , 0 , 7 , 777 ), // #484
+ INST(Fcvtxn_v , SimdFcvtLN , (0b0010111000100001011010, 1, 1) , kRWI_W , F(Narrow) , 4 , 784 ), // #485
+ INST(Fcvtxn2_v , SimdFcvtLN , (0b0110111000100001011010, 1, 0) , kRWI_X , F(Narrow) , 5 , 791 ), // #486
+ INST(Fcvtzs_v , SimdFcvtSV , (0b0000111010100001101110, 0b0000111100000000111111, 0b0001111000111000000000, 1) , kRWI_W , 0 , 8 , 799 ), // #487
+ INST(Fcvtzu_v , SimdFcvtSV , (0b0010111010100001101110, 0b0010111100000000111111, 0b0001111000111001000000, 1) , kRWI_W , 0 , 9 , 806 ), // #488
+ INST(Fdiv_v , FSimdVVV , (0b0001111000100000000110, kHF_A, 0b0010111000100000111111, kHF_C) , kRWI_W , 0 , 4 , 813 ), // #489
+ INST(Fjcvtzs_v , ISimdVVx , (0b0001111001111110000000, kOp_GpW, kOp_D) , kRWI_W , 0 , 7 , 818 ), // #490
+ INST(Fmadd_v , FSimdVVVV , (0b0001111100000000000000, kHF_A, 0b0000000000000000000000, kHF_N) , kRWI_W , 0 , 0 , 826 ), // #491
+ INST(Fmax_v , FSimdVVV , (0b0001111000100000010010, kHF_A, 0b0000111000100000111101, kHF_C) , kRWI_W , 0 , 5 , 832 ), // #492
+ INST(Fmaxnm_v , FSimdVVV , (0b0001111000100000011010, kHF_A, 0b0000111000100000110001, kHF_C) , kRWI_W , 0 , 6 , 837 ), // #493
+ INST(Fmaxnmp_v , FSimdPair , (0b0111111000110000110010, 0b0010111000100000110001) , kRWI_W , 0 , 1 , 844 ), // #494
+ INST(Fmaxnmv_v , FSimdSV , (0b0010111000110000110010) , kRWI_W , 0 , 0 , 852 ), // #495
+ INST(Fmaxp_v , FSimdPair , (0b0111111000110000111110, 0b0010111000100000111101) , kRWI_W , 0 , 2 , 860 ), // #496
+ INST(Fmaxv_v , FSimdSV , (0b0010111000110000111110) , kRWI_W , 0 , 1 , 866 ), // #497
+ INST(Fmin_v , FSimdVVV , (0b0001111000100000010110, kHF_A, 0b0000111010100000111101, kHF_C) , kRWI_W , 0 , 7 , 872 ), // #498
+ INST(Fminnm_v , FSimdVVV , (0b0001111000100000011110, kHF_A, 0b0000111010100000110001, kHF_C) , kRWI_W , 0 , 8 , 877 ), // #499
+ INST(Fminnmp_v , FSimdPair , (0b0111111010110000110010, 0b0010111010100000110001) , kRWI_W , 0 , 3 , 884 ), // #500
+ INST(Fminnmv_v , FSimdSV , (0b0010111010110000110010) , kRWI_W , 0 , 2 , 892 ), // #501
+ INST(Fminp_v , FSimdPair , (0b0111111010110000111110, 0b0010111010100000111101) , kRWI_W , 0 , 4 , 900 ), // #502
+ INST(Fminv_v , FSimdSV , (0b0010111010110000111110) , kRWI_W , 0 , 3 , 906 ), // #503
+ INST(Fmla_v , FSimdVVVe , (0b0000000000000000000000, kHF_N, 0b0000111000100000110011, 0b0000111110000000000100) , kRWI_X , F(VH0_15) , 0 , 912 ), // #504
+ INST(Fmlal_v , SimdFmlal , (0b0000111000100000111011, 0b0000111110000000000000, 1, kET_S, kET_H, kET_H) , kRWI_X , F(VH0_15) , 2 , 917 ), // #505
+ INST(Fmlal2_v , SimdFmlal , (0b0010111000100000110011, 0b0010111110000000100000, 1, kET_S, kET_H, kET_H) , kRWI_X , F(VH0_15) , 3 , 923 ), // #506
+ INST(Fmls_v , FSimdVVVe , (0b0000000000000000000000, kHF_N, 0b0000111010100000110011, 0b0000111110000000010100) , kRWI_X , F(VH0_15) , 1 , 930 ), // #507
+ INST(Fmlsl_v , SimdFmlal , (0b0000111010100000111011, 0b0000111110000000010000, 1, kET_S, kET_H, kET_H) , kRWI_X , F(VH0_15) , 4 , 935 ), // #508
+ INST(Fmlsl2_v , SimdFmlal , (0b0010111010100000110011, 0b0010111110000000110000, 1, kET_S, kET_H, kET_H) , kRWI_X , F(VH0_15) , 5 , 941 ), // #509
+ INST(Fmov_v , SimdFmov , (_) , kRWI_W , 0 , 0 , 948 ), // #510
+ INST(Fmsub_v , FSimdVVVV , (0b0001111100000000100000, kHF_A, 0b0000000000000000000000, kHF_N) , kRWI_W , 0 , 1 , 953 ), // #511
+ INST(Fmul_v , FSimdVVVe , (0b0001111000100000000010, kHF_A, 0b0010111000100000110111, 0b0000111110000000100100) , kRWI_W , F(VH0_15) , 2 , 959 ), // #512
+ INST(Fmulx_v , FSimdVVVe , (0b0101111000100000110111, kHF_C, 0b0000111000100000110111, 0b0010111110000000100100) , kRWI_W , F(VH0_15) , 3 , 964 ), // #513
+ INST(Fneg_v , FSimdVV , (0b0001111000100001010000, kHF_A, 0b0010111010100000111110, kHF_B) , kRWI_W , 0 , 1 , 970 ), // #514
+ INST(Fnmadd_v , FSimdVVVV , (0b0001111100100000000000, kHF_A, 0b0000000000000000000000, kHF_N) , kRWI_W , 0 , 2 , 975 ), // #515
+ INST(Fnmsub_v , FSimdVVVV , (0b0001111100100000100000, kHF_A, 0b0000000000000000000000, kHF_N) , kRWI_W , 0 , 3 , 982 ), // #516
+ INST(Fnmul_v , FSimdVVV , (0b0001111000100000100010, kHF_A, 0b0000000000000000000000, kHF_N) , kRWI_W , 0 , 9 , 989 ), // #517
+ INST(Frecpe_v , FSimdVV , (0b0101111010100001110110, kHF_B, 0b0000111010100001110110, kHF_B) , kRWI_W , 0 , 2 , 995 ), // #518
+ INST(Frecps_v , FSimdVVV , (0b0101111000100000111111, kHF_C, 0b0000111000100000111111, kHF_C) , kRWI_W , 0 , 10 , 1002), // #519
+ INST(Frecpx_v , FSimdVV , (0b0101111010100001111110, kHF_B, 0b0000000000000000000000, kHF_N) , kRWI_W , 0 , 3 , 1009), // #520
+ INST(Frint32x_v , FSimdVV , (0b0001111000101000110000, kHF_N, 0b0010111000100001111010, kHF_N) , kRWI_W , 0 , 4 , 1016), // #521
+ INST(Frint32z_v , FSimdVV , (0b0001111000101000010000, kHF_N, 0b0000111000100001111010, kHF_N) , kRWI_W , 0 , 5 , 1025), // #522
+ INST(Frint64x_v , FSimdVV , (0b0001111000101001110000, kHF_N, 0b0010111000100001111110, kHF_N) , kRWI_W , 0 , 6 , 1034), // #523
+ INST(Frint64z_v , FSimdVV , (0b0001111000101001010000, kHF_N, 0b0000111000100001111110, kHF_N) , kRWI_W , 0 , 7 , 1043), // #524
+ INST(Frinta_v , FSimdVV , (0b0001111000100110010000, kHF_A, 0b0010111000100001100010, kHF_B) , kRWI_W , 0 , 8 , 1052), // #525
+ INST(Frinti_v , FSimdVV , (0b0001111000100111110000, kHF_A, 0b0010111010100001100110, kHF_B) , kRWI_W , 0 , 9 , 1059), // #526
+ INST(Frintm_v , FSimdVV , (0b0001111000100101010000, kHF_A, 0b0000111000100001100110, kHF_B) , kRWI_W , 0 , 10 , 1066), // #527
+ INST(Frintn_v , FSimdVV , (0b0001111000100100010000, kHF_A, 0b0000111000100001100010, kHF_B) , kRWI_W , 0 , 11 , 1073), // #528
+ INST(Frintp_v , FSimdVV , (0b0001111000100100110000, kHF_A, 0b0000111010100001100010, kHF_B) , kRWI_W , 0 , 12 , 1080), // #529
+ INST(Frintx_v , FSimdVV , (0b0001111000100111010000, kHF_A, 0b0010111000100001100110, kHF_B) , kRWI_W , 0 , 13 , 1087), // #530
+ INST(Frintz_v , FSimdVV , (0b0001111000100101110000, kHF_A, 0b0000111010100001100110, kHF_B) , kRWI_W , 0 , 14 , 1094), // #531
+ INST(Frsqrte_v , FSimdVV , (0b0111111010100001110110, kHF_B, 0b0010111010100001110110, kHF_B) , kRWI_W , 0 , 15 , 1101), // #532
+ INST(Frsqrts_v , FSimdVVV , (0b0101111010100000111111, kHF_C, 0b0000111010100000111111, kHF_C) , kRWI_W , 0 , 11 , 1109), // #533
+ INST(Fsqrt_v , FSimdVV , (0b0001111000100001110000, kHF_A, 0b0010111010100001111110, kHF_B) , kRWI_W , 0 , 16 , 1117), // #534
+ INST(Fsub_v , FSimdVVV , (0b0001111000100000001110, kHF_A, 0b0000111010100000110101, kHF_C) , kRWI_W , 0 , 12 , 1123), // #535
+ INST(Ins_v , SimdIns , (_) , kRWI_X , 0 , 0 , 1145), // #536
+ INST(Ld1_v , SimdLdNStN , (0b0000110101000000000000, 0b0000110001000000001000, 1, 0) , kRWI_LDn , 0 , 0 , 1153), // #537
+ INST(Ld1r_v , SimdLdNStN , (0b0000110101000000110000, 0b0000000000000000000000, 1, 1) , kRWI_LDn , 0 , 1 , 1157), // #538
+ INST(Ld2_v , SimdLdNStN , (0b0000110101100000000000, 0b0000110001000000100000, 2, 0) , kRWI_LDn , 0 , 2 , 1162), // #539
+ INST(Ld2r_v , SimdLdNStN , (0b0000110101100000110000, 0b0000000000000000000000, 2, 1) , kRWI_LDn , 0 , 3 , 1166), // #540
+ INST(Ld3_v , SimdLdNStN , (0b0000110101000000001000, 0b0000110001000000010000, 3, 0) , kRWI_LDn , 0 , 4 , 1171), // #541
+ INST(Ld3r_v , SimdLdNStN , (0b0000110101000000111000, 0b0000000000000000000000, 3, 1) , kRWI_LDn , 0 , 5 , 1175), // #542
+ INST(Ld4_v , SimdLdNStN , (0b0000110101100000001000, 0b0000110001000000000000, 4, 0) , kRWI_LDn , 0 , 6 , 1180), // #543
+ INST(Ld4r_v , SimdLdNStN , (0b0000110101100000111000, 0b0000000000000000000000, 4, 1) , kRWI_LDn , 0 , 7 , 1184), // #544
+ INST(Ldnp_v , SimdLdpStp , (0b0010110001, 0b0000000000) , kRWI_WW , 0 , 0 , 1537), // #545
+ INST(Ldp_v , SimdLdpStp , (0b0010110101, 0b0010110011) , kRWI_WW , 0 , 1 , 1542), // #546
+ INST(Ldr_v , SimdLdSt , (0b0011110101, 0b00111100010, 0b00111100011, 0b00011100, Inst::kIdLdur_v) , kRWI_W , 0 , 0 , 1552), // #547
+ INST(Ldur_v , SimdLdurStur , (0b0011110001000000000000) , kRWI_W , 0 , 0 , 2142), // #548
+ INST(Mla_v , ISimdVVVe , (0b0000111000100000100101, kVO_V_BHS, 0b0010111100000000000000, kVO_V_HS) , kRWI_X , F(VH0_15) , 0 , 246 ), // #549
+ INST(Mls_v , ISimdVVVe , (0b0010111000100000100101, kVO_V_BHS, 0b0010111100000000010000, kVO_V_HS) , kRWI_X , F(VH0_15) , 1 , 931 ), // #550
+ INST(Mov_v , SimdMov , (_) , kRWI_W , 0 , 0 , 949 ), // #551
+ INST(Movi_v , SimdMoviMvni , (0b0000111100000000000001, 0) , kRWI_W , 0 , 0 , 2221), // #552
+ INST(Mul_v , ISimdVVVe , (0b0000111000100000100111, kVO_V_BHS, 0b0000111100000000100000, kVO_V_HS) , kRWI_W , F(VH0_15) , 2 , 991 ), // #553
+ INST(Mvn_v , ISimdVV , (0b0010111000100000010110, kVO_V_B) , kRWI_W , 0 , 4 , 2249), // #554
+ INST(Mvni_v , SimdMoviMvni , (0b0000111100000000000001, 1) , kRWI_W , 0 , 1 , 2253), // #555
+ INST(Neg_v , ISimdVV , (0b0010111000100000101110, kVO_V_Any) , kRWI_W , 0 , 5 , 540 ), // #556
+ INST(Not_v , ISimdVV , (0b0010111000100000010110, kVO_V_B) , kRWI_W , 0 , 6 , 2276), // #557
+ INST(Orn_v , ISimdVVV , (0b0000111011100000000111, kVO_V_B) , kRWI_W , 0 , 9 , 2280), // #558
+ INST(Orr_v , SimdBicOrr , (0b0000111010100000000111, 0b0000111100000000000001) , kRWI_W , 0 , 1 , 2284), // #559
+ INST(Pmul_v , ISimdVVV , (0b0010111000100000100111, kVO_V_B) , kRWI_W , 0 , 10 , 2320), // #560
+ INST(Pmull_v , ISimdVVV , (0b0000111000100000111000, kVO_V_B8D1) , kRWI_W , F(Long) , 11 , 2325), // #561
+ INST(Pmull2_v , ISimdVVV , (0b0100111000100000111000, kVO_V_B16D2) , kRWI_W , F(Long) , 12 , 2331), // #562
+ INST(Raddhn_v , ISimdVVV , (0b0010111000100000010000, kVO_V_B8H4S2) , kRWI_W , F(Narrow) , 13 , 2344), // #563
+ INST(Raddhn2_v , ISimdVVV , (0b0110111000100000010000, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 14 , 2351), // #564
+ INST(Rax1_v , ISimdVVV , (0b1100111001100000100011, kVO_V_D2) , kRWI_W , 0 , 15 , 2359), // #565
+ INST(Rbit_v , ISimdVV , (0b0010111001100000010110, kVO_V_B) , kRWI_W , 0 , 7 , 2364), // #566
+ INST(Rev16_v , ISimdVV , (0b0000111000100000000110, kVO_V_B) , kRWI_W , 0 , 8 , 2373), // #567
+ INST(Rev32_v , ISimdVV , (0b0010111000100000000010, kVO_V_BH) , kRWI_W , 0 , 9 , 2379), // #568
+ INST(Rev64_v , ISimdVV , (0b0000111000100000000010, kVO_V_BHS) , kRWI_W , 0 , 10 , 2385), // #569
+ INST(Rshrn_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000100011, 1, kVO_V_B8H4S2) , kRWI_W , F(Narrow) , 0 , 2960), // #570
+ INST(Rshrn2_v , SimdShift , (0b0000000000000000000000, 0b0100111100000000100011, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 1 , 2968), // #571
+ INST(Rsubhn_v , ISimdVVV , (0b0010111000100000011000, kVO_V_B8H4S2) , kRWI_W , F(Narrow) , 16 , 2400), // #572
+ INST(Rsubhn2_v , ISimdVVV , (0b0110111000100000011000, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 17 , 2407), // #573
+ INST(Saba_v , ISimdVVV , (0b0000111000100000011111, kVO_V_BHS) , kRWI_X , 0 , 18 , 2415), // #574
+ INST(Sabal_v , ISimdVVV , (0b0000111000100000010100, kVO_V_B8H4S2) , kRWI_X , F(Long) , 19 , 2420), // #575
+ INST(Sabal2_v , ISimdVVV , (0b0100111000100000010100, kVO_V_B16H8S4) , kRWI_X , F(Long) , 20 , 2426), // #576
+ INST(Sabd_v , ISimdVVV , (0b0000111000100000011101, kVO_V_BHS) , kRWI_W , 0 , 21 , 2433), // #577
+ INST(Sabdl_v , ISimdVVV , (0b0000111000100000011100, kVO_V_B8H4S2) , kRWI_W , F(Long) , 22 , 2438), // #578
+ INST(Sabdl2_v , ISimdVVV , (0b0100111000100000011100, kVO_V_B16H8S4) , kRWI_W , F(Long) , 23 , 2444), // #579
+ INST(Sadalp_v , ISimdVV , (0b0000111000100000011010, kVO_V_BHS) , kRWI_X , F(Long) | F(Pair) , 11 , 2451), // #580
+ INST(Saddl_v , ISimdVVV , (0b0000111000100000000000, kVO_V_B8H4S2) , kRWI_W , F(Long) , 24 , 2458), // #581
+ INST(Saddl2_v , ISimdVVV , (0b0100111000100000000000, kVO_V_B16H8S4) , kRWI_W , F(Long) , 25 , 2464), // #582
+ INST(Saddlp_v , ISimdVV , (0b0000111000100000001010, kVO_V_BHS) , kRWI_W , F(Long) | F(Pair) , 12 , 2471), // #583
+ INST(Saddlv_v , ISimdSV , (0b0000111000110000001110, kVO_V_BH_4S) , kRWI_W , F(Long) , 1 , 2478), // #584
+ INST(Saddw_v , ISimdWWV , (0b0000111000100000000100, kVO_V_B8H4S2) , kRWI_W , 0 , 0 , 2485), // #585
+ INST(Saddw2_v , ISimdWWV , (0b0000111000100000000100, kVO_V_B16H8S4) , kRWI_W , 0 , 1 , 2491), // #586
+ INST(Scvtf_v , SimdFcvtSV , (0b0000111000100001110110, 0b0000111100000000111001, 0b0001111000100010000000, 0) , kRWI_W , 0 , 10 , 2523), // #587
+ INST(Sdot_v , SimdDot , (0b0000111010000000100101, 0b0000111110000000111000, kET_S, kET_B, kET_4B) , kRWI_X , 0 , 1 , 4218), // #588
+ INST(Sha1c_v , ISimdVVVx , (0b0101111000000000000000, kOp_Q, kOp_S, kOp_V4S) , kRWI_X , 0 , 1 , 2556), // #589
+ INST(Sha1h_v , ISimdVVx , (0b0101111000101000000010, kOp_S, kOp_S) , kRWI_W , 0 , 8 , 2562), // #590
+ INST(Sha1m_v , ISimdVVVx , (0b0101111000000000001000, kOp_Q, kOp_S, kOp_V4S) , kRWI_X , 0 , 2 , 2568), // #591
+ INST(Sha1p_v , ISimdVVVx , (0b0101111000000000000100, kOp_Q, kOp_S, kOp_V4S) , kRWI_X , 0 , 3 , 2574), // #592
+ INST(Sha1su0_v , ISimdVVVx , (0b0101111000000000001100, kOp_V4S, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 4 , 2580), // #593
+ INST(Sha1su1_v , ISimdVVx , (0b0101111000101000000110, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 9 , 2588), // #594
+ INST(Sha256h_v , ISimdVVVx , (0b0101111000000000010000, kOp_Q, kOp_Q, kOp_V4S) , kRWI_X , 0 , 5 , 2596), // #595
+ INST(Sha256h2_v , ISimdVVVx , (0b0101111000000000010100, kOp_Q, kOp_Q, kOp_V4S) , kRWI_X , 0 , 6 , 2604), // #596
+ INST(Sha256su0_v , ISimdVVx , (0b0101111000101000001010, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 10 , 2613), // #597
+ INST(Sha256su1_v , ISimdVVVx , (0b0101111000000000011000, kOp_V4S, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 7 , 2623), // #598
+ INST(Sha512h_v , ISimdVVVx , (0b1100111001100000100000, kOp_Q, kOp_Q, kOp_V2D) , kRWI_X , 0 , 8 , 2633), // #599
+ INST(Sha512h2_v , ISimdVVVx , (0b1100111001100000100001, kOp_Q, kOp_Q, kOp_V2D) , kRWI_X , 0 , 9 , 2641), // #600
+ INST(Sha512su0_v , ISimdVVx , (0b1100111011000000100000, kOp_V2D, kOp_V2D) , kRWI_X , 0 , 11 , 2650), // #601
+ INST(Sha512su1_v , ISimdVVVx , (0b1100111001100000100010, kOp_V2D, kOp_V2D, kOp_V2D) , kRWI_X , 0 , 10 , 2660), // #602
+ INST(Shadd_v , ISimdVVV , (0b0000111000100000000001, kVO_V_BHS) , kRWI_W , 0 , 26 , 2670), // #603
+ INST(Shl_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000010101, 0, kVO_V_Any) , kRWI_W , 0 , 2 , 2954), // #604
+ INST(Shll_v , SimdShiftES , (0b0010111000100001001110, kVO_V_B8H4S2) , kRWI_W , F(Long) , 0 , 3108), // #605
+ INST(Shll2_v , SimdShiftES , (0b0110111000100001001110, kVO_V_B16H8S4) , kRWI_W , F(Long) , 1 , 3114), // #606
+ INST(Shrn_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000100001, 1, kVO_V_B8H4S2) , kRWI_W , F(Narrow) , 3 , 2961), // #607
+ INST(Shrn2_v , SimdShift , (0b0000000000000000000000, 0b0100111100000000100001, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 4 , 2969), // #608
+ INST(Shsub_v , ISimdVVV , (0b0000111000100000001001, kVO_V_BHS) , kRWI_W , 0 , 27 , 2676), // #609
+ INST(Sli_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000010101, 0, kVO_V_Any) , kRWI_X , 0 , 5 , 2682), // #610
+ INST(Sm3partw1_v , ISimdVVVx , (0b1100111001100000110000, kOp_V4S, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 11 , 2686), // #611
+ INST(Sm3partw2_v , ISimdVVVx , (0b1100111001100000110001, kOp_V4S, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 12 , 2696), // #612
+ INST(Sm3ss1_v , ISimdVVVVx , (0b1100111001000000000000, kOp_V4S, kOp_V4S, kOp_V4S, kOp_V4S) , kRWI_W , 0 , 0 , 2706), // #613
+ INST(Sm3tt1a_v , SimdSm3tt , (0b1100111001000000100000) , kRWI_X , 0 , 0 , 2713), // #614
+ INST(Sm3tt1b_v , SimdSm3tt , (0b1100111001000000100001) , kRWI_X , 0 , 1 , 2721), // #615
+ INST(Sm3tt2a_v , SimdSm3tt , (0b1100111001000000100010) , kRWI_X , 0 , 2 , 2729), // #616
+ INST(Sm3tt2b_v , SimdSm3tt , (0b1100111001000000100011) , kRWI_X , 0 , 3 , 2737), // #617
+ INST(Sm4e_v , ISimdVVx , (0b1100111011000000100001, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 12 , 2745), // #618
+ INST(Sm4ekey_v , ISimdVVVx , (0b1100111001100000110010, kOp_V4S, kOp_V4S, kOp_V4S) , kRWI_X , 0 , 13 , 2750), // #619
+ INST(Smax_v , ISimdVVV , (0b0000111000100000011001, kVO_V_BHS) , kRWI_W , 0 , 28 , 1690), // #620
+ INST(Smaxp_v , ISimdVVV , (0b0000111000100000101001, kVO_V_BHS) , kRWI_W , 0 , 29 , 2765), // #621
+ INST(Smaxv_v , ISimdSV , (0b0000111000110000101010, kVO_V_BH_4S) , kRWI_W , 0 , 2 , 2771), // #622
+ INST(Smin_v , ISimdVVV , (0b0000111000100000011011, kVO_V_BHS) , kRWI_W , 0 , 30 , 1794), // #623
+ INST(Sminp_v , ISimdVVV , (0b0000111000100000101011, kVO_V_BHS) , kRWI_W , 0 , 31 , 2777), // #624
+ INST(Sminv_v , ISimdSV , (0b0000111000110001101010, kVO_V_BH_4S) , kRWI_W , 0 , 3 , 2783), // #625
+ INST(Smlal_v , ISimdVVVe , (0b0000111000100000100000, kVO_V_B8H4S2, 0b0000111100000000001000, kVO_V_H4S2) , kRWI_X , F(Long) | F(VH0_15) , 3 , 2789), // #626
+ INST(Smlal2_v , ISimdVVVe , (0b0100111000100000100000, kVO_V_B16H8S4, 0b0100111100000000001000, kVO_V_H8S4) , kRWI_X , F(Long) | F(VH0_15) , 4 , 2795), // #627
+ INST(Smlsl_v , ISimdVVVe , (0b0000111000100000101000, kVO_V_B8H4S2, 0b0000111100000000011000, kVO_V_H4S2) , kRWI_X , F(Long) | F(VH0_15) , 5 , 2802), // #628
+ INST(Smlsl2_v , ISimdVVVe , (0b0100111000100000101000, kVO_V_B16H8S4, 0b0100111100000000011000, kVO_V_H8S4) , kRWI_X , F(Long) | F(VH0_15) , 6 , 2808), // #629
+ INST(Smmla_v , ISimdVVVx , (0b0100111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B) , kRWI_X , 0 , 14 , 4247), // #630
+ INST(Smov_v , SimdSmovUmov , (0b0000111000000000001011, kVO_V_BHS, 1) , kRWI_W , 0 , 0 , 2822), // #631
+ INST(Smull_v , ISimdVVVe , (0b0000111000100000110000, kVO_V_B8H4S2, 0b0000111100000000101000, kVO_V_H4S2) , kRWI_W , F(Long) | F(VH0_15) , 7 , 2840), // #632
+ INST(Smull2_v , ISimdVVVe , (0b0100111000100000110000, kVO_V_B16H8S4, 0b0100111100000000101000, kVO_V_H8S4) , kRWI_W , F(Long) | F(VH0_15) , 8 , 2846), // #633
+ INST(Sqabs_v , ISimdVV , (0b0000111000100000011110, kVO_SV_Any) , kRWI_W , 0 , 13 , 2853), // #634
+ INST(Sqadd_v , ISimdVVV , (0b0000111000100000000011, kVO_SV_Any) , kRWI_W , 0 , 32 , 4254), // #635
+ INST(Sqdmlal_v , ISimdVVVe , (0b0000111000100000100100, kVO_SV_BHS, 0b0000111100000000001100, kVO_V_H4S2) , kRWI_X , F(Long) | F(VH0_15) , 9 , 2859), // #636
+ INST(Sqdmlal2_v , ISimdVVVe , (0b0100111000100000100100, kVO_V_B16H8S4, 0b0100111100000000001100, kVO_V_H8S4) , kRWI_X , F(Long) | F(VH0_15) , 10 , 2867), // #637
+ INST(Sqdmlsl_v , ISimdVVVe , (0b0000111000100000101100, kVO_SV_BHS, 0b0000111100000000011100, kVO_V_H4S2) , kRWI_X , F(Long) | F(VH0_15) , 11 , 2876), // #638
+ INST(Sqdmlsl2_v , ISimdVVVe , (0b0100111000100000101100, kVO_V_B16H8S4, 0b0100111100000000011100, kVO_V_H8S4) , kRWI_X , F(Long) | F(VH0_15) , 12 , 2884), // #639
+ INST(Sqdmulh_v , ISimdVVVe , (0b0000111000100000101101, kVO_SV_HS, 0b0000111100000000110000, kVO_SV_HS) , kRWI_W , F(VH0_15) , 13 , 2893), // #640
+ INST(Sqdmull_v , ISimdVVVe , (0b0000111000100000110100, kVO_SV_BHS, 0b0000111100000000101100, kVO_V_H4S2) , kRWI_W , F(Long) | F(VH0_15) , 14 , 2901), // #641
+ INST(Sqdmull2_v , ISimdVVVe , (0b0100111000100000110100, kVO_V_B16H8S4, 0b0100111100000000101100, kVO_V_H8S4) , kRWI_W , F(Long) | F(VH0_15) , 15 , 2909), // #642
+ INST(Sqneg_v , ISimdVV , (0b0010111000100000011110, kVO_SV_Any) , kRWI_W , 0 , 14 , 2918), // #643
+ INST(Sqrdmlah_v , ISimdVVVe , (0b0010111000000000100001, kVO_SV_HS, 0b0010111100000000110100, kVO_SV_HS) , kRWI_X , F(VH0_15) , 16 , 2924), // #644
+ INST(Sqrdmlsh_v , ISimdVVVe , (0b0010111000000000100011, kVO_SV_HS, 0b0010111100000000111100, kVO_SV_HS) , kRWI_X , F(VH0_15) , 17 , 2933), // #645
+ INST(Sqrdmulh_v , ISimdVVVe , (0b0010111000100000101101, kVO_SV_HS, 0b0000111100000000110100, kVO_SV_HS) , kRWI_W , F(VH0_15) , 18 , 2942), // #646
+ INST(Sqrshl_v , SimdShift , (0b0000111000100000010111, 0b0000000000000000000000, 1, kVO_SV_Any) , kRWI_W , 0 , 6 , 2951), // #647
+ INST(Sqrshrn_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000100111, 1, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 7 , 2958), // #648
+ INST(Sqrshrn2_v , SimdShift , (0b0000000000000000000000, 0b0100111100000000100111, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 8 , 2966), // #649
+ INST(Sqrshrun_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000100011, 1, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 9 , 2975), // #650
+ INST(Sqrshrun2_v , SimdShift , (0b0000000000000000000000, 0b0110111100000000100011, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 10 , 2984), // #651
+ INST(Sqshl_v , SimdShift , (0b0000111000100000010011, 0b0000111100000000011101, 0, kVO_SV_Any) , kRWI_W , 0 , 11 , 2994), // #652
+ INST(Sqshlu_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000011001, 0, kVO_SV_Any) , kRWI_W , 0 , 12 , 3000), // #653
+ INST(Sqshrn_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000100101, 1, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 13 , 3007), // #654
+ INST(Sqshrn2_v , SimdShift , (0b0000000000000000000000, 0b0100111100000000100101, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 14 , 3014), // #655
+ INST(Sqshrun_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000100001, 1, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 15 , 3022), // #656
+ INST(Sqshrun2_v , SimdShift , (0b0000000000000000000000, 0b0110111100000000100001, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 16 , 3030), // #657
+ INST(Sqsub_v , ISimdVVV , (0b0000111000100000001011, kVO_SV_Any) , kRWI_W , 0 , 33 , 3039), // #658
+ INST(Sqxtn_v , ISimdVV , (0b0000111000100001010010, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 15 , 3045), // #659
+ INST(Sqxtn2_v , ISimdVV , (0b0100111000100001010010, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 16 , 3051), // #660
+ INST(Sqxtun_v , ISimdVV , (0b0010111000100001001010, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 17 , 3058), // #661
+ INST(Sqxtun2_v , ISimdVV , (0b0110111000100001001010, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 18 , 3065), // #662
+ INST(Srhadd_v , ISimdVVV , (0b0000111000100000000101, kVO_V_BHS) , kRWI_W , 0 , 34 , 3073), // #663
+ INST(Sri_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000010001, 1, kVO_V_Any) , kRWI_W , 0 , 17 , 3080), // #664
+ INST(Srshl_v , SimdShift , (0b0000111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any) , kRWI_W , 0 , 18 , 3084), // #665
+ INST(Srshr_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000001001, 1, kVO_V_Any) , kRWI_W , 0 , 19 , 3090), // #666
+ INST(Srsra_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000001101, 1, kVO_V_Any) , kRWI_X , 0 , 20 , 3096), // #667
+ INST(Sshl_v , SimdShift , (0b0000111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any) , kRWI_W , 0 , 21 , 3102), // #668
+ INST(Sshll_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000101001, 0, kVO_V_B8H4S2) , kRWI_W , F(Long) , 22 , 3107), // #669
+ INST(Sshll2_v , SimdShift , (0b0000000000000000000000, 0b0100111100000000101001, 0, kVO_V_B16H8S4) , kRWI_W , F(Long) , 23 , 3113), // #670
+ INST(Sshr_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000000001, 1, kVO_V_Any) , kRWI_W , 0 , 24 , 3120), // #671
+ INST(Ssra_v , SimdShift , (0b0000000000000000000000, 0b0000111100000000000101, 1, kVO_V_Any) , kRWI_X , 0 , 25 , 3125), // #672
+ INST(Ssubl_v , ISimdVVV , (0b0000111000100000001000, kVO_V_B8H4S2) , kRWI_W , F(Long) , 35 , 3130), // #673
+ INST(Ssubl2_v , ISimdVVV , (0b0100111000100000001000, kVO_V_B16H8S4) , kRWI_W , F(Long) , 36 , 3136), // #674
+ INST(Ssubw_v , ISimdWWV , (0b0000111000100000001100, kVO_V_B8H4S2) , kRWI_W , 0 , 2 , 3143), // #675
+ INST(Ssubw2_v , ISimdWWV , (0b0000111000100000001100, kVO_V_B16H8S4) , kRWI_X , 0 , 3 , 3149), // #676
+ INST(St1_v , SimdLdNStN , (0b0000110100000000000000, 0b0000110000000000001000, 1, 0) , kRWI_STn , 0 , 8 , 3156), // #677
+ INST(St2_v , SimdLdNStN , (0b0000110100100000000000, 0b0000110000000000100000, 2, 0) , kRWI_STn , 0 , 9 , 3160), // #678
+ INST(St3_v , SimdLdNStN , (0b0000110100000000001000, 0b0000110000000000010000, 3, 0) , kRWI_STn , 0 , 10 , 3169), // #679
+ INST(St4_v , SimdLdNStN , (0b0000110100100000001000, 0b0000110000000000000000, 4, 0) , kRWI_STn , 0 , 11 , 3173), // #680
+ INST(Stnp_v , SimdLdpStp , (0b0010110000, 0b0000000000) , kRWI_RRW , 0 , 2 , 3383), // #681
+ INST(Stp_v , SimdLdpStp , (0b0010110100, 0b0010110010) , kRWI_RRW , 0 , 3 , 3388), // #682
+ INST(Str_v , SimdLdSt , (0b0011110100, 0b00111100000, 0b00111100001, 0b00000000, Inst::kIdStur_v) , kRWI_RW , 0 , 1 , 3392), // #683
+ INST(Stur_v , SimdLdurStur , (0b0011110000000000000000) , kRWI_RW , 0 , 1 , 3662), // #684
+ INST(Sub_v , ISimdVVV , (0b0010111000100000100001, kVO_V_Any) , kRWI_W , 0 , 37 , 985 ), // #685
+ INST(Subhn_v , ISimdVVV , (0b0000111000100000011000, kVO_V_B8H4S2) , kRWI_W , F(Narrow) , 38 , 2401), // #686
+ INST(Subhn2_v , ISimdVVV , (0b0000111000100000011000, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 39 , 2408), // #687
+ INST(Sudot_v , SimdDot , (0b0000000000000000000000, 0b0000111100000000111100, kET_S, kET_B, kET_4B) , kRWI_X , 0 , 2 , 3739), // #688
+ INST(Suqadd_v , ISimdVV , (0b0000111000100000001110, kVO_SV_Any) , kRWI_X , 0 , 19 , 3745), // #689
+ INST(Sxtl_v , SimdSxtlUxtl , (0b0000111100000000101001, kVO_V_B8H4S2) , kRWI_W , F(Long) , 0 , 3834), // #690
+ INST(Sxtl2_v , SimdSxtlUxtl , (0b0100111100000000101001, kVO_V_B16H8S4) , kRWI_W , F(Long) , 1 , 3839), // #691
+ INST(Tbl_v , SimdTblTbx , (0b0000111000000000000000) , kRWI_W , 0 , 0 , 3854), // #692
+ INST(Tbx_v , SimdTblTbx , (0b0000111000000000000100) , kRWI_W , 0 , 1 , 3863), // #693
+ INST(Trn1_v , ISimdVVV , (0b0000111000000000001010, kVO_V_BHS_D2) , kRWI_W , 0 , 40 , 3876), // #694
+ INST(Trn2_v , ISimdVVV , (0b0000111000000000011010, kVO_V_BHS_D2) , kRWI_W , 0 , 41 , 3881), // #695
+ INST(Uaba_v , ISimdVVV , (0b0010111000100000011111, kVO_V_BHS) , kRWI_X , 0 , 42 , 3886), // #696
+ INST(Uabal_v , ISimdVVV , (0b0010111000100000010100, kVO_V_B8H4S2) , kRWI_X , F(Long) , 43 , 3891), // #697
+ INST(Uabal2_v , ISimdVVV , (0b0110111000100000010100, kVO_V_B16H8S4) , kRWI_X , F(Long) , 44 , 3897), // #698
+ INST(Uabd_v , ISimdVVV , (0b0010111000100000011101, kVO_V_BHS) , kRWI_W , 0 , 45 , 3904), // #699
+ INST(Uabdl_v , ISimdVVV , (0b0010111000100000011100, kVO_V_B8H4S2) , kRWI_W , F(Long) , 46 , 3909), // #700
+ INST(Uabdl2_v , ISimdVVV , (0b0110111000100000011100, kVO_V_B16H8S4) , kRWI_W , F(Long) , 47 , 3915), // #701
+ INST(Uadalp_v , ISimdVV , (0b0010111000100000011010, kVO_V_BHS) , kRWI_X , F(Long) | F(Pair) , 20 , 3922), // #702
+ INST(Uaddl_v , ISimdVVV , (0b0010111000100000000000, kVO_V_B8H4S2) , kRWI_W , F(Long) , 48 , 3929), // #703
+ INST(Uaddl2_v , ISimdVVV , (0b0110111000100000000000, kVO_V_B16H8S4) , kRWI_W , F(Long) , 49 , 3935), // #704
+ INST(Uaddlp_v , ISimdVV , (0b0010111000100000001010, kVO_V_BHS) , kRWI_W , F(Long) | F(Pair) , 21 , 3942), // #705
+ INST(Uaddlv_v , ISimdSV , (0b0010111000110000001110, kVO_V_BH_4S) , kRWI_W , F(Long) , 4 , 3949), // #706
+ INST(Uaddw_v , ISimdWWV , (0b0010111000100000000100, kVO_V_B8H4S2) , kRWI_W , 0 , 4 , 3956), // #707
+ INST(Uaddw2_v , ISimdWWV , (0b0010111000100000000100, kVO_V_B16H8S4) , kRWI_W , 0 , 5 , 3962), // #708
+ INST(Ucvtf_v , SimdFcvtSV , (0b0010111000100001110110, 0b0010111100000000111001, 0b0001111000100011000000, 0) , kRWI_W , 0 , 11 , 3985), // #709
+ INST(Udot_v , SimdDot , (0b0010111010000000100101, 0b0010111110000000111000, kET_S, kET_B, kET_4B) , kRWI_X , 0 , 3 , 3740), // #710
+ INST(Uhadd_v , ISimdVVV , (0b0010111000100000000001, kVO_V_BHS) , kRWI_W , 0 , 50 , 4000), // #711
+ INST(Uhsub_v , ISimdVVV , (0b0010111000100000001001, kVO_V_BHS) , kRWI_W , 0 , 51 , 4006), // #712
+ INST(Umax_v , ISimdVVV , (0b0010111000100000011001, kVO_V_BHS) , kRWI_W , 0 , 52 , 1936), // #713
+ INST(Umaxp_v , ISimdVVV , (0b0010111000100000101001, kVO_V_BHS) , kRWI_W , 0 , 53 , 4019), // #714
+ INST(Umaxv_v , ISimdSV , (0b0010111000110000101010, kVO_V_BH_4S) , kRWI_W , 0 , 5 , 4025), // #715
+ INST(Umin_v , ISimdVVV , (0b0010111000100000011011, kVO_V_BHS) , kRWI_W , 0 , 54 , 2040), // #716
+ INST(Uminp_v , ISimdVVV , (0b0010111000100000101011, kVO_V_BHS) , kRWI_W , 0 , 55 , 4031), // #717
+ INST(Uminv_v , ISimdSV , (0b0010111000110001101010, kVO_V_BH_4S) , kRWI_W , 0 , 6 , 4037), // #718
+ INST(Umlal_v , ISimdVVVe , (0b0010111000100000100000, kVO_V_B8H4S2, 0b0010111100000000001000, kVO_V_H4S2) , kRWI_X , F(Long) | F(VH0_15) , 19 , 4043), // #719
+ INST(Umlal2_v , ISimdVVVe , (0b0110111000100000100000, kVO_V_B16H8S4, 0b0010111100000000001000, kVO_V_H8S4) , kRWI_X , F(Long) | F(VH0_15) , 20 , 4049), // #720
+ INST(Umlsl_v , ISimdVVVe , (0b0010111000100000101000, kVO_V_B8H4S2, 0b0010111100000000011000, kVO_V_H4S2) , kRWI_X , F(Long) | F(VH0_15) , 21 , 4056), // #721
+ INST(Umlsl2_v , ISimdVVVe , (0b0110111000100000101000, kVO_V_B16H8S4, 0b0110111100000000011000, kVO_V_H8S4) , kRWI_X , F(Long) | F(VH0_15) , 22 , 4062), // #722
+ INST(Ummla_v , ISimdVVVx , (0b0110111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B) , kRWI_X , 0 , 15 , 4069), // #723
+ INST(Umov_v , SimdSmovUmov , (0b0000111000000000001111, kVO_V_Any, 0) , kRWI_W , 0 , 1 , 4082), // #724
+ INST(Umull_v , ISimdVVVe , (0b0010111000100000110000, kVO_V_B8H4S2, 0b0010111100000000101000, kVO_V_H4S2) , kRWI_W , F(Long) | F(VH0_15) , 23 , 4100), // #725
+ INST(Umull2_v , ISimdVVVe , (0b0110111000100000110000, kVO_V_B16H8S4, 0b0110111100000000101000, kVO_V_H8S4) , kRWI_W , F(Long) | F(VH0_15) , 24 , 4106), // #726
+ INST(Uqadd_v , ISimdVVV , (0b0010111000100000000011, kVO_SV_Any) , kRWI_W , 0 , 56 , 3746), // #727
+ INST(Uqrshl_v , SimdShift , (0b0010111000100000010111, 0b0000000000000000000000, 0, kVO_SV_Any) , kRWI_W , 0 , 26 , 4113), // #728
+ INST(Uqrshrn_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000100111, 1, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 27 , 4120), // #729
+ INST(Uqrshrn2_v , SimdShift , (0b0000000000000000000000, 0b0110111100000000100111, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 28 , 4128), // #730
+ INST(Uqshl_v , SimdShift , (0b0010111000100000010011, 0b0010111100000000011101, 0, kVO_SV_Any) , kRWI_W , 0 , 29 , 4137), // #731
+ INST(Uqshrn_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000100101, 1, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 30 , 4143), // #732
+ INST(Uqshrn2_v , SimdShift , (0b0000000000000000000000, 0b0110111100000000100101, 1, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 31 , 4150), // #733
+ INST(Uqsub_v , ISimdVVV , (0b0010111000100000001011, kVO_SV_Any) , kRWI_W , 0 , 57 , 4158), // #734
+ INST(Uqxtn_v , ISimdVV , (0b0010111000100001010010, kVO_SV_B8H4S2) , kRWI_W , F(Narrow) , 22 , 4164), // #735
+ INST(Uqxtn2_v , ISimdVV , (0b0110111000100001010010, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 23 , 4170), // #736
+ INST(Urecpe_v , ISimdVV , (0b0000111010100001110010, kVO_V_S) , kRWI_W , 0 , 24 , 4177), // #737
+ INST(Urhadd_v , ISimdVVV , (0b0010111000100000000101, kVO_V_BHS) , kRWI_W , 0 , 58 , 4184), // #738
+ INST(Urshl_v , SimdShift , (0b0010111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any) , kRWI_W , 0 , 32 , 4191), // #739
+ INST(Urshr_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000001001, 1, kVO_V_Any) , kRWI_W , 0 , 33 , 4197), // #740
+ INST(Ursqrte_v , ISimdVV , (0b0010111010100001110010, kVO_V_S) , kRWI_W , 0 , 25 , 4203), // #741
+ INST(Ursra_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000001101, 1, kVO_V_Any) , kRWI_X , 0 , 34 , 4211), // #742
+ INST(Usdot_v , SimdDot , (0b0000111010000000100111, 0b0000111110000000111100, kET_S, kET_B, kET_4B) , kRWI_X , 0 , 4 , 4217), // #743
+ INST(Ushl_v , SimdShift , (0b0010111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any) , kRWI_W , 0 , 35 , 4223), // #744
+ INST(Ushll_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000101001, 0, kVO_V_B8H4S2) , kRWI_W , F(Long) , 36 , 4228), // #745
+ INST(Ushll2_v , SimdShift , (0b0000000000000000000000, 0b0110111100000000101001, 0, kVO_V_B16H8S4) , kRWI_W , F(Long) , 37 , 4234), // #746
+ INST(Ushr_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000000001, 1, kVO_V_Any) , kRWI_W , 0 , 38 , 4241), // #747
+ INST(Usmmla_v , ISimdVVVx , (0b0100111010000000101011, kOp_V4S, kOp_V16B, kOp_V16B) , kRWI_X , 0 , 16 , 4246), // #748
+ INST(Usqadd_v , ISimdVV , (0b0010111000100000001110, kVO_SV_Any) , kRWI_X , 0 , 26 , 4253), // #749
+ INST(Usra_v , SimdShift , (0b0000000000000000000000, 0b0010111100000000000101, 1, kVO_V_Any) , kRWI_X , 0 , 39 , 4260), // #750
+ INST(Usubl_v , ISimdVVV , (0b0010111000100000001000, kVO_V_B8H4S2) , kRWI_W , F(Long) , 59 , 4265), // #751
+ INST(Usubl2_v , ISimdVVV , (0b0110111000100000001000, kVO_V_B16H8S4) , kRWI_W , F(Long) , 60 , 4271), // #752
+ INST(Usubw_v , ISimdWWV , (0b0010111000100000001100, kVO_V_B8H4S2) , kRWI_W , 0 , 6 , 4278), // #753
+ INST(Usubw2_v , ISimdWWV , (0b0010111000100000001100, kVO_V_B16H8S4) , kRWI_W , 0 , 7 , 4284), // #754
+ INST(Uxtl_v , SimdSxtlUxtl , (0b0010111100000000101001, kVO_V_B8H4S2) , kRWI_W , F(Long) , 2 , 4301), // #755
+ INST(Uxtl2_v , SimdSxtlUxtl , (0b0110111100000000101001, kVO_V_B16H8S4) , kRWI_W , F(Long) , 3 , 4306), // #756
+ INST(Uzp1_v , ISimdVVV , (0b0000111000000000000110, kVO_V_BHS_D2) , kRWI_W , 0 , 61 , 4312), // #757
+ INST(Uzp2_v , ISimdVVV , (0b0000111000000000010110, kVO_V_BHS_D2) , kRWI_W , 0 , 62 , 4317), // #758
+ INST(Xar_v , ISimdVVVI , (0b1100111001100000100011, kVO_V_D2, 6, 10, 0) , kRWI_W , 0 , 1 , 4337), // #759
+ INST(Xtn_v , ISimdVV , (0b0000111000100001001010, kVO_V_B8H4S2) , kRWI_W , F(Narrow) , 27 , 3047), // #760
+ INST(Xtn2_v , ISimdVV , (0b0100111000100001001010, kVO_V_B16H8S4) , kRWI_X , F(Narrow) , 28 , 3053), // #761
+ INST(Zip1_v , ISimdVVV , (0b0000111000000000001110, kVO_V_BHS_D2) , kRWI_W , 0 , 63 , 4367), // #762
+ INST(Zip2_v , ISimdVVV , (0b0000111000000000011110, kVO_V_BHS_D2) , kRWI_W , 0 , 64 , 4372) // #763
+ // ${InstInfo:End}
+};
+
+#undef F
+#undef INST
+#undef NAME_DATA_INDEX
+
+namespace EncodingData {
+
+// ${EncodingData:Begin}
+// ------------------- Automatically generated, do not edit -------------------
+const BaseAddSub baseAddSub[4] = {
+ { 0b0001011000, 0b0001011001, 0b0010001 }, // add
+ { 0b0101011000, 0b0101011001, 0b0110001 }, // adds
+ { 0b1001011000, 0b1001011001, 0b1010001 }, // sub
+ { 0b1101011000, 0b1101011001, 0b1110001 } // subs
+};
+
+const BaseAdr baseAdr[2] = {
+ { 0b0001000000000000000000, OffsetFormat::kTypeAArch64_ADR }, // adr
+ { 0b1001000000000000000000, OffsetFormat::kTypeAArch64_ADRP } // adrp
+};
+
+const BaseAtDcIcTlbi baseAtDcIcTlbi[4] = {
+ { 0b00011111110000, 0b00001111000000, true }, // at
+ { 0b00011110000000, 0b00001110000000, true }, // dc
+ { 0b00011110000000, 0b00001110000000, false }, // ic
+ { 0b00011110000000, 0b00010000000000, false } // tlbi
+};
+
+const BaseAtomicCasp baseAtomicCasp[4] = {
+ { 0b0000100000100000011111, kWX, 30 }, // casp
+ { 0b0000100001100000011111, kWX, 30 }, // caspa
+ { 0b0000100001100000111111, kWX, 30 }, // caspal
+ { 0b0000100000100000111111, kWX, 30 } // caspl
+};
+
+const BaseAtomicOp baseAtomicOp[123] = {
+ { 0b1000100010100000011111, kWX, 30, 0 }, // cas
+ { 0b1000100011100000011111, kWX, 30, 1 }, // casa
+ { 0b0000100011100000011111, kW , 0 , 1 }, // casab
+ { 0b0100100011100000011111, kW , 0 , 1 }, // casah
+ { 0b1000100011100000111111, kWX, 30, 1 }, // casal
+ { 0b0000100011100000111111, kW , 0 , 1 }, // casalb
+ { 0b0100100011100000111111, kW , 0 , 1 }, // casalh
+ { 0b0000100010100000011111, kW , 0 , 0 }, // casb
+ { 0b0100100010100000011111, kW , 0 , 0 }, // cash
+ { 0b1000100010100000111111, kWX, 30, 0 }, // casl
+ { 0b0000100010100000111111, kW , 0 , 0 }, // caslb
+ { 0b0100100010100000111111, kW , 0 , 0 }, // caslh
+ { 0b1011100000100000000000, kWX, 30, 0 }, // ldadd
+ { 0b1011100010100000000000, kWX, 30, 1 }, // ldadda
+ { 0b0011100010100000000000, kW , 0 , 1 }, // ldaddab
+ { 0b0111100010100000000000, kW , 0 , 1 }, // ldaddah
+ { 0b1011100011100000000000, kWX, 30, 1 }, // ldaddal
+ { 0b0011100011100000000000, kW , 0 , 1 }, // ldaddalb
+ { 0b0111100011100000000000, kW , 0 , 1 }, // ldaddalh
+ { 0b0011100000100000000000, kW , 0 , 0 }, // ldaddb
+ { 0b0111100000100000000000, kW , 0 , 0 }, // ldaddh
+ { 0b1011100001100000000000, kWX, 30, 0 }, // ldaddl
+ { 0b0011100001100000000000, kW , 0 , 0 }, // ldaddlb
+ { 0b0111100001100000000000, kW , 0 , 0 }, // ldaddlh
+ { 0b1011100000100000000100, kWX, 30, 0 }, // ldclr
+ { 0b1011100010100000000100, kWX, 30, 1 }, // ldclra
+ { 0b0011100010100000000100, kW , 0 , 1 }, // ldclrab
+ { 0b0111100010100000000100, kW , 0 , 1 }, // ldclrah
+ { 0b1011100011100000000100, kWX, 30, 1 }, // ldclral
+ { 0b0011100011100000000100, kW , 0 , 1 }, // ldclralb
+ { 0b0111100011100000000100, kW , 0 , 1 }, // ldclralh
+ { 0b0011100000100000000100, kW , 0 , 0 }, // ldclrb
+ { 0b0111100000100000000100, kW , 0 , 0 }, // ldclrh
+ { 0b1011100001100000000100, kWX, 30, 0 }, // ldclrl
+ { 0b0011100001100000000100, kW , 0 , 0 }, // ldclrlb
+ { 0b0111100001100000000100, kW , 0 , 0 }, // ldclrlh
+ { 0b1011100000100000001000, kWX, 30, 0 }, // ldeor
+ { 0b1011100010100000001000, kWX, 30, 1 }, // ldeora
+ { 0b0011100010100000001000, kW , 0 , 1 }, // ldeorab
+ { 0b0111100010100000001000, kW , 0 , 1 }, // ldeorah
+ { 0b1011100011100000001000, kWX, 30, 1 }, // ldeoral
+ { 0b0011100011100000001000, kW , 0 , 1 }, // ldeoralb
+ { 0b0111100011100000001000, kW , 0 , 1 }, // ldeoralh
+ { 0b0011100000100000001000, kW , 0 , 0 }, // ldeorb
+ { 0b0111100000100000001000, kW , 0 , 0 }, // ldeorh
+ { 0b1011100001100000001000, kWX, 30, 0 }, // ldeorl
+ { 0b0011100001100000001000, kW , 0 , 0 }, // ldeorlb
+ { 0b0111100001100000001000, kW , 0 , 0 }, // ldeorlh
+ { 0b1011100000100000001100, kWX, 30, 0 }, // ldset
+ { 0b1011100010100000001100, kWX, 30, 1 }, // ldseta
+ { 0b0011100010100000001100, kW , 0 , 1 }, // ldsetab
+ { 0b0111100010100000001100, kW , 0 , 1 }, // ldsetah
+ { 0b1011100011100000001100, kWX, 30, 1 }, // ldsetal
+ { 0b0011100011100000001100, kW , 0 , 1 }, // ldsetalb
+ { 0b0111100011100000001100, kW , 0 , 1 }, // ldsetalh
+ { 0b0011100000100000001100, kW , 0 , 0 }, // ldsetb
+ { 0b0111100000100000001100, kW , 0 , 0 }, // ldseth
+ { 0b1011100001100000001100, kWX, 30, 0 }, // ldsetl
+ { 0b0011100001100000001100, kW , 0 , 0 }, // ldsetlb
+ { 0b0111100001100000001100, kW , 0 , 0 }, // ldsetlh
+ { 0b1011100000100000010000, kWX, 30, 0 }, // ldsmax
+ { 0b1011100010100000010000, kWX, 30, 1 }, // ldsmaxa
+ { 0b0011100010100000010000, kW , 0 , 1 }, // ldsmaxab
+ { 0b0111100010100000010000, kW , 0 , 1 }, // ldsmaxah
+ { 0b1011100011100000010000, kWX, 30, 1 }, // ldsmaxal
+ { 0b0011100011100000010000, kW , 0 , 1 }, // ldsmaxalb
+ { 0b0111100011100000010000, kW , 0 , 1 }, // ldsmaxalh
+ { 0b0011100000100000010000, kW , 0 , 0 }, // ldsmaxb
+ { 0b0111100000100000010000, kW , 0 , 0 }, // ldsmaxh
+ { 0b1011100001100000010000, kWX, 30, 0 }, // ldsmaxl
+ { 0b0011100001100000010000, kW , 0 , 0 }, // ldsmaxlb
+ { 0b0111100001100000010000, kW , 0 , 0 }, // ldsmaxlh
+ { 0b1011100000100000010100, kWX, 30, 0 }, // ldsmin
+ { 0b1011100010100000010100, kWX, 30, 1 }, // ldsmina
+ { 0b0011100010100000010100, kW , 0 , 1 }, // ldsminab
+ { 0b0111100010100000010100, kW , 0 , 1 }, // ldsminah
+ { 0b1011100011100000010100, kWX, 30, 1 }, // ldsminal
+ { 0b0011100011100000010100, kW , 0 , 1 }, // ldsminalb
+ { 0b0111100011100000010100, kW , 0 , 1 }, // ldsminalh
+ { 0b0011100000100000010100, kW , 0 , 0 }, // ldsminb
+ { 0b0111100000100000010100, kW , 0 , 0 }, // ldsminh
+ { 0b1011100001100000010100, kWX, 30, 0 }, // ldsminl
+ { 0b0011100001100000010100, kW , 0 , 0 }, // ldsminlb
+ { 0b0111100001100000010100, kW , 0 , 0 }, // ldsminlh
+ { 0b1011100000100000011000, kWX, 30, 0 }, // ldumax
+ { 0b1011100010100000011000, kWX, 30, 1 }, // ldumaxa
+ { 0b0011100010100000011000, kW , 0 , 1 }, // ldumaxab
+ { 0b0111100010100000011000, kW , 0 , 1 }, // ldumaxah
+ { 0b1011100011100000011000, kWX, 30, 1 }, // ldumaxal
+ { 0b0011100011100000011000, kW , 0 , 1 }, // ldumaxalb
+ { 0b0111100011100000011000, kW , 0 , 1 }, // ldumaxalh
+ { 0b0011100000100000011000, kW , 0 , 0 }, // ldumaxb
+ { 0b0111100000100000011000, kW , 0 , 0 }, // ldumaxh
+ { 0b1011100001100000011000, kWX, 30, 0 }, // ldumaxl
+ { 0b0011100001100000011000, kW , 0 , 0 }, // ldumaxlb
+ { 0b0111100001100000011000, kW , 0 , 0 }, // ldumaxlh
+ { 0b1011100000100000011100, kWX, 30, 0 }, // ldumin
+ { 0b1011100010100000011100, kWX, 30, 1 }, // ldumina
+ { 0b0011100010100000011100, kW , 0 , 1 }, // lduminab
+ { 0b0111100010100000011100, kW , 0 , 1 }, // lduminah
+ { 0b1011100011100000011100, kWX, 30, 1 }, // lduminal
+ { 0b0011100011100000011100, kW , 0 , 1 }, // lduminalb
+ { 0b0111100011100000011100, kW , 0 , 1 }, // lduminalh
+ { 0b0011100000100000011100, kW , 0 , 0 }, // lduminb
+ { 0b0111100000100000011100, kW , 0 , 0 }, // lduminh
+ { 0b1011100001100000011100, kWX, 30, 0 }, // lduminl
+ { 0b0011100001100000011100, kW , 0 , 0 }, // lduminlb
+ { 0b0111100001100000011100, kW , 0 , 0 }, // lduminlh
+ { 0b1000100000000000111111, kWX, 30, 1 }, // stlxr
+ { 0b0000100000000000111111, kW , 0 , 1 }, // stlxrb
+ { 0b0100100000000000111111, kW , 0 , 1 }, // stlxrh
+ { 0b1011100000100000100000, kWX, 30, 1 }, // swp
+ { 0b1011100010100000100000, kWX, 30, 1 }, // swpa
+ { 0b0011100010100000100000, kW , 0 , 1 }, // swpab
+ { 0b0111100010100000100000, kW , 0 , 1 }, // swpah
+ { 0b1011100011100000100000, kWX, 30, 1 }, // swpal
+ { 0b0011100011100000100000, kW , 0 , 1 }, // swpalb
+ { 0b0111100011100000100000, kW , 0 , 1 }, // swpalh
+ { 0b0011100000100000100000, kW , 0 , 1 }, // swpb
+ { 0b0111100000100000100000, kW , 0 , 1 }, // swph
+ { 0b1011100001100000100000, kWX, 30, 1 }, // swpl
+ { 0b0011100001100000100000, kW , 0 , 1 }, // swplb
+ { 0b0111100001100000100000, kW , 0 , 1 } // swplh
+};
+
+const BaseAtomicSt baseAtomicSt[48] = {
+ { 0b1011100000100000000000, kWX, 30 }, // stadd
+ { 0b1011100001100000000000, kWX, 30 }, // staddl
+ { 0b0011100000100000000000, kW , 0 }, // staddb
+ { 0b0011100001100000000000, kW , 0 }, // staddlb
+ { 0b0111100000100000000000, kW , 0 }, // staddh
+ { 0b0111100001100000000000, kW , 0 }, // staddlh
+ { 0b1011100000100000000100, kWX, 30 }, // stclr
+ { 0b1011100001100000000100, kWX, 30 }, // stclrl
+ { 0b0011100000100000000100, kW , 0 }, // stclrb
+ { 0b0011100001100000000100, kW , 0 }, // stclrlb
+ { 0b0111100000100000000100, kW , 0 }, // stclrh
+ { 0b0111100001100000000100, kW , 0 }, // stclrlh
+ { 0b1011100000100000001000, kWX, 30 }, // steor
+ { 0b1011100001100000001000, kWX, 30 }, // steorl
+ { 0b0011100000100000001000, kW , 0 }, // steorb
+ { 0b0011100001100000001000, kW , 0 }, // steorlb
+ { 0b0111100000100000001000, kW , 0 }, // steorh
+ { 0b0111100001100000001000, kW , 0 }, // steorlh
+ { 0b1011100000100000001100, kWX, 30 }, // stset
+ { 0b1011100001100000001100, kWX, 30 }, // stsetl
+ { 0b0011100000100000001100, kW , 0 }, // stsetb
+ { 0b0011100001100000001100, kW , 0 }, // stsetlb
+ { 0b0111100000100000001100, kW , 0 }, // stseth
+ { 0b0111100001100000001100, kW , 0 }, // stsetlh
+ { 0b1011100000100000010000, kWX, 30 }, // stsmax
+ { 0b1011100001100000010000, kWX, 30 }, // stsmaxl
+ { 0b0011100000100000010000, kW , 0 }, // stsmaxb
+ { 0b0011100001100000010000, kW , 0 }, // stsmaxlb
+ { 0b0111100000100000010000, kW , 0 }, // stsmaxh
+ { 0b0111100001100000010000, kW , 0 }, // stsmaxlh
+ { 0b1011100000100000010100, kWX, 30 }, // stsmin
+ { 0b1011100001100000010100, kWX, 30 }, // stsminl
+ { 0b0011100000100000010100, kW , 0 }, // stsminb
+ { 0b0011100001100000010100, kW , 0 }, // stsminlb
+ { 0b0111100000100000010100, kW , 0 }, // stsminh
+ { 0b0111100001100000010100, kW , 0 }, // stsminlh
+ { 0b1011100000100000011000, kWX, 30 }, // stumax
+ { 0b1011100001100000011000, kWX, 30 }, // stumaxl
+ { 0b0011100000100000011000, kW , 0 }, // stumaxb
+ { 0b0011100001100000011000, kW , 0 }, // stumaxlb
+ { 0b0111100000100000011000, kW , 0 }, // stumaxh
+ { 0b0111100001100000011000, kW , 0 }, // stumaxlh
+ { 0b1011100000100000011100, kWX, 30 }, // stumin
+ { 0b1011100001100000011100, kWX, 30 }, // stuminl
+ { 0b0011100000100000011100, kW , 0 }, // stuminb
+ { 0b0011100001100000011100, kW , 0 }, // stuminlb
+ { 0b0111100000100000011100, kW , 0 }, // stuminh
+ { 0b0111100001100000011100, kW , 0 } // stuminlh
+};
+
+const BaseBfc baseBfc[1] = {
+ { 0b00110011000000000000001111100000 } // bfc
+};
+
+const BaseBfi baseBfi[3] = {
+ { 0b00110011000000000000000000000000 }, // bfi
+ { 0b00010011000000000000000000000000 }, // sbfiz
+ { 0b01010011000000000000000000000000 } // ubfiz
+};
+
+const BaseBfm baseBfm[3] = {
+ { 0b00110011000000000000000000000000 }, // bfm
+ { 0b00010011000000000000000000000000 }, // sbfm
+ { 0b01010011000000000000000000000000 } // ubfm
+};
+
+const BaseBfx baseBfx[3] = {
+ { 0b00110011000000000000000000000000 }, // bfxil
+ { 0b00010011000000000000000000000000 }, // sbfx
+ { 0b01010011000000000000000000000000 } // ubfx
+};
+
+const BaseBranchCmp baseBranchCmp[2] = {
+ { 0b00110101000000000000000000000000 }, // cbnz
+ { 0b00110100000000000000000000000000 } // cbz
+};
+
+const BaseBranchReg baseBranchReg[3] = {
+ { 0b11010110001111110000000000000000 }, // blr
+ { 0b11010110000111110000000000000000 }, // br
+ { 0b11010110010111110000000000000000 } // ret
+};
+
+const BaseBranchRel baseBranchRel[2] = {
+ { 0b00010100000000000000000000000000 }, // b
+ { 0b10010100000000000000000000000000 } // bl
+};
+
+const BaseBranchTst baseBranchTst[2] = {
+ { 0b00110111000000000000000000000000 }, // tbnz
+ { 0b00110110000000000000000000000000 } // tbz
+};
+
+const BaseCCmp baseCCmp[2] = {
+ { 0b00111010010000000000000000000000 }, // ccmn
+ { 0b01111010010000000000000000000000 } // ccmp
+};
+
+const BaseCInc baseCInc[3] = {
+ { 0b00011010100000000000010000000000 }, // cinc
+ { 0b01011010100000000000000000000000 }, // cinv
+ { 0b01011010100000000000010000000000 } // cneg
+};
+
+const BaseCSel baseCSel[4] = {
+ { 0b00011010100000000000000000000000 }, // csel
+ { 0b00011010100000000000010000000000 }, // csinc
+ { 0b01011010100000000000000000000000 }, // csinv
+ { 0b01011010100000000000010000000000 } // csneg
+};
+
+const BaseCSet baseCSet[2] = {
+ { 0b00011010100111110000011111100000 }, // cset
+ { 0b01011010100111110000001111100000 } // csetm
+};
+
+const BaseCmpCmn baseCmpCmn[2] = {
+ { 0b0101011000, 0b0101011001, 0b0110001 }, // cmn
+ { 0b1101011000, 0b1101011001, 0b1110001 } // cmp
+};
+
+const BaseExtend baseExtend[5] = {
+ { 0b0001001100000000000111, kWX, 0 }, // sxtb
+ { 0b0001001100000000001111, kWX, 0 }, // sxth
+ { 0b1001001101000000011111, kX , 0 }, // sxtw
+ { 0b0101001100000000000111, kW, 1 }, // uxtb
+ { 0b0101001100000000001111, kW, 1 } // uxth
+};
+
+const BaseExtract baseExtract[1] = {
+ { 0b00010011100000000000000000000000 } // extr
+};
+
+const BaseLdSt baseLdSt[9] = {
+ { 0b1011100101, 0b10111000010, 0b10111000011, 0b00011000, kWX, 30, 2, Inst::kIdLdur }, // ldr
+ { 0b0011100101, 0b00111000010, 0b00111000011, 0 , kW , 0 , 0, Inst::kIdLdurb }, // ldrb
+ { 0b0111100101, 0b01111000010, 0b01111000011, 0 , kW , 0 , 1, Inst::kIdLdurh }, // ldrh
+ { 0b0011100111, 0b00111000100, 0b00111000101, 0 , kWX, 22, 0, Inst::kIdLdursb }, // ldrsb
+ { 0b0111100110, 0b01111000100, 0b01111000101, 0 , kWX, 22, 1, Inst::kIdLdursh }, // ldrsh
+ { 0b1011100110, 0b10111000100, 0b10111000101, 0b10011000, kX , 0 , 2, Inst::kIdLdursw }, // ldrsw
+ { 0b1011100100, 0b10111000000, 0b10111000001, 0 , kWX, 30, 2, Inst::kIdStur }, // str
+ { 0b0011100100, 0b00111000000, 0b00111000001, 0 , kW , 30, 0, Inst::kIdSturb }, // strb
+ { 0b0111100100, 0b01111000000, 0b01111000001, 0 , kWX, 30, 1, Inst::kIdSturh } // strh
+};
+
+const BaseLdpStp baseLdpStp[6] = {
+ { 0b0010100001, 0 , kWX, 31, 2 }, // ldnp
+ { 0b0010100101, 0b0010100011, kWX, 31, 2 }, // ldp
+ { 0b0110100101, 0b0110100011, kX , 0 , 2 }, // ldpsw
+ { 0b0110100100, 0b0110100010, kX, 0, 4 }, // stgp
+ { 0b0010100000, 0 , kWX, 31, 2 }, // stnp
+ { 0b0010100100, 0b0010100010, kWX, 31, 2 } // stp
+};
+
+const BaseLdxp baseLdxp[2] = {
+ { 0b1000100001111111100000, kWX, 30 }, // ldaxp
+ { 0b1000100001111111000000, kWX, 30 } // ldxp
+};
+
+const BaseLogical baseLogical[8] = {
+ { 0b0001010000, 0b00100100, 0 }, // and
+ { 0b1101010000, 0b11100100, 0 }, // ands
+ { 0b0001010001, 0b00000000, 0 }, // bic
+ { 0b1101010001, 0b00000000, 0 }, // bics
+ { 0b1001010001, 0b10100100, 1 }, // eon
+ { 0b1001010000, 0b10100100, 0 }, // eor
+ { 0b0101010001, 0b01100100, 1 }, // orn
+ { 0b0101010000, 0b01100100, 0 } // orr
+};
+
+const BaseMovKNZ baseMovKNZ[3] = {
+ { 0b01110010100000000000000000000000 }, // movk
+ { 0b00010010100000000000000000000000 }, // movn
+ { 0b01010010100000000000000000000000 } // movz
+};
+
+const BaseMvnNeg baseMvnNeg[3] = {
+ { 0b00101010001000000000001111100000 }, // mvn
+ { 0b01001011000000000000001111100000 }, // neg
+ { 0b01101011000000000000001111100000 } // negs
+};
+
+const BaseOp baseOp[23] = {
+ { 0b11010101000000110010000110011111 }, // autia1716
+ { 0b11010101000000110010001110111111 }, // autiasp
+ { 0b11010101000000110010001110011111 }, // autiaz
+ { 0b11010101000000110010000111011111 }, // autib1716
+ { 0b11010101000000110010001111111111 }, // autibsp
+ { 0b11010101000000110010001111011111 }, // autibz
+ { 0b11010101000000000100000001011111 }, // axflag
+ { 0b11010101000000000100000000011111 }, // cfinv
+ { 0b11010101000000110010001010011111 }, // csdb
+ { 0b11010101000000110010000011011111 }, // dgh
+ { 0b11010110101111110000001111100000 }, // drps
+ { 0b11010101000000110010001000011111 }, // esb
+ { 0b11010110100111110000001111100000 }, // eret
+ { 0b11010101000000110010000000011111 }, // nop
+ { 0b11010101000000110011010010011111 }, // pssbb
+ { 0b11010101000000110010000010011111 }, // sev
+ { 0b11010101000000110010000010111111 }, // sevl
+ { 0b11010101000000110011000010011111 }, // ssbb
+ { 0b11010101000000110010000001011111 }, // wfe
+ { 0b11010101000000110010000001111111 }, // wfi
+ { 0b11010101000000000100000000111111 }, // xaflag
+ { 0b11010101000000110010000011111111 }, // xpaclri
+ { 0b11010101000000110010000000111111 } // yield
+};
+
+const BaseOpImm baseOpImm[14] = {
+ { 0b11010100001000000000000000000000, 16, 5 }, // brk
+ { 0b11010101000000110011000001011111, 4, 8 }, // clrex
+ { 0b11010100101000000000000000000001, 16, 5 }, // dcps1
+ { 0b11010100101000000000000000000010, 16, 5 }, // dcps2
+ { 0b11010100101000000000000000000011, 16, 5 }, // dcps3
+ { 0b11010101000000110011000010111111, 4, 8 }, // dmb
+ { 0b11010101000000110011000010011111, 4, 8 }, // dsb
+ { 0b11010101000000110010000000011111, 7, 5 }, // hint
+ { 0b11010100010000000000000000000000, 16, 5 }, // hlt
+ { 0b11010100000000000000000000000010, 16, 5 }, // hvc
+ { 0b11010101000000110011000011011111, 4, 8 }, // isb
+ { 0b11010100000000000000000000000011, 16, 5 }, // smc
+ { 0b11010100000000000000000000000001, 16, 5 }, // svc
+ { 0b00000000000000000000000000000000, 16, 0 } // udf
+};
+
+const BaseR baseR[10] = {
+ { 0b11011010110000010011101111100000, kX, kZR, 0 }, // autdza
+ { 0b11011010110000010011111111100000, kX, kZR, 0 }, // autdzb
+ { 0b11011010110000010011001111100000, kX, kZR, 0 }, // autiza
+ { 0b11011010110000010011011111100000, kX, kZR, 0 }, // autizb
+ { 0b11011010110000010010101111100000, kX, kZR, 0 }, // pacdza
+ { 0b11011010110000010010111111100000, kX, kZR, 0 }, // pacdzb
+ { 0b00111010000000000000100000001101, kW, kZR, 5 }, // setf8
+ { 0b00111010000000000100100000001101, kW, kZR, 5 }, // setf16
+ { 0b11011010110000010100011111100000, kX, kZR, 0 }, // xpacd
+ { 0b11011010110000010100001111100000, kX, kZR, 0 } // xpaci
+};
+
+const BaseRM_NoImm baseRM_NoImm[21] = {
+ { 0b1000100011011111111111, kWX, kZR, 30 }, // ldar
+ { 0b0000100011011111111111, kW , kZR, 0 }, // ldarb
+ { 0b0100100011011111111111, kW , kZR, 0 }, // ldarh
+ { 0b1000100001011111111111, kWX, kZR, 30 }, // ldaxr
+ { 0b0000100001011111111111, kW , kZR, 0 }, // ldaxrb
+ { 0b0100100001011111111111, kW , kZR, 0 }, // ldaxrh
+ { 0b1101100111100000000000, kX , kZR, 0 }, // ldgm
+ { 0b1000100011011111011111, kWX, kZR, 30 }, // ldlar
+ { 0b0000100011011111011111, kW , kZR, 0 }, // ldlarb
+ { 0b0100100011011111011111, kW , kZR, 0 }, // ldlarh
+ { 0b1000100001011111011111, kWX, kZR, 30 }, // ldxr
+ { 0b0000100001011111011111, kW , kZR, 0 }, // ldxrb
+ { 0b0100100001011111011111, kW , kZR, 0 }, // ldxrh
+ { 0b1101100110100000000000, kX , kZR, 0 }, // stgm
+ { 0b1000100010011111011111, kWX, kZR, 30 }, // stllr
+ { 0b0000100010011111011111, kW , kZR, 0 }, // stllrb
+ { 0b0100100010011111011111, kW , kZR, 0 }, // stllrh
+ { 0b1000100010011111111111, kWX, kZR, 30 }, // stlr
+ { 0b0000100010011111111111, kW , kZR, 0 }, // stlrb
+ { 0b0100100010011111111111, kW , kZR, 0 }, // stlrh
+ { 0b1101100100100000000000, kX , kZR, 0 } // stzgm
+};
+
+const BaseRM_SImm10 baseRM_SImm10[2] = {
+ { 0b1111100000100000000001, kX , kZR, 0, 3 }, // ldraa
+ { 0b1111100010100000000001, kX , kZR, 0, 3 } // ldrab
+};
+
+const BaseRM_SImm9 baseRM_SImm9[23] = {
+ { 0b1101100101100000000000, 0b0000000000000000000000, kX , kZR, 0, 4 }, // ldg
+ { 0b1011100001000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // ldtr
+ { 0b0011100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldtrb
+ { 0b0111100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldtrh
+ { 0b0011100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldtrsb
+ { 0b0111100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldtrsh
+ { 0b1011100010000000000010, 0b0000000000000000000000, kX , kZR, 0 , 0 }, // ldtrsw
+ { 0b1011100001000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // ldur
+ { 0b0011100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldurb
+ { 0b0111100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldurh
+ { 0b0011100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldursb
+ { 0b0111100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldursh
+ { 0b1011100010000000000000, 0b0000000000000000000000, kWX, kZR, 0 , 0 }, // ldursw
+ { 0b1101100110100000000010, 0b1101100110100000000001, kX, kSP, 0, 4 }, // st2g
+ { 0b1101100100100000000010, 0b1101100100100000000001, kX, kSP, 0, 4 }, // stg
+ { 0b1011100000000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // sttr
+ { 0b0011100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sttrb
+ { 0b0111100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sttrh
+ { 0b1011100000000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // stur
+ { 0b0011100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sturb
+ { 0b0111100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sturh
+ { 0b1101100111100000000010, 0b1101100111100000000001, kX , kSP, 0, 4 }, // stz2g
+ { 0b1101100101100000000010, 0b1101100101100000000001, kX , kSP, 0, 4 } // stzg
+};
+
+const BaseRR baseRR[15] = {
+ { 0b11011010110000010001100000000000, kX, kZR, 0, kX, kSP, 5, true }, // autda
+ { 0b11011010110000010001110000000000, kX, kZR, 0, kX, kSP, 5, true }, // autdb
+ { 0b11011010110000010001000000000000, kX, kZR, 0, kX, kSP, 5, true }, // autia
+ { 0b11011010110000010001010000000000, kX, kZR, 0, kX, kSP, 5, true }, // autib
+ { 0b01011010110000000001010000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // cls
+ { 0b01011010110000000001000000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // clz
+ { 0b10111010110000000000000000011111, kX, kSP, 5, kX, kSP, 16, true }, // cmpp
+ { 0b01011010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true }, // ngc
+ { 0b01111010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true }, // ngcs
+ { 0b11011010110000010000100000000000, kX, kZR, 0, kX, kSP, 5, true }, // pacda
+ { 0b11011010110000010000110000000000, kX, kZR, 0, kX, kSP, 5, true }, // pacdb
+ { 0b01011010110000000000000000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // rbit
+ { 0b01011010110000000000010000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // rev16
+ { 0b11011010110000000000100000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // rev32
+ { 0b11011010110000000000110000000000, kWX, kZR, 0, kWX, kZR, 5, true } // rev64
+};
+
+const BaseRRII baseRRII[2] = {
+ { 0b1001000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10 }, // addg
+ { 0b1101000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10 } // subg
+};
+
+const BaseRRR baseRRR[26] = {
+ { 0b0001101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // adc
+ { 0b0011101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // adcs
+ { 0b0001101011000000010000, kW, kZR, kW, kZR, kW, kZR, false }, // crc32b
+ { 0b0001101011000000010100, kW, kZR, kW, kZR, kW, kZR, false }, // crc32cb
+ { 0b0001101011000000010101, kW, kZR, kW, kZR, kW, kZR, false }, // crc32ch
+ { 0b0001101011000000010110, kW, kZR, kW, kZR, kW, kZR, false }, // crc32cw
+ { 0b1001101011000000010111, kW, kZR, kW, kZR, kX, kZR, false }, // crc32cx
+ { 0b0001101011000000010001, kW, kZR, kW, kZR, kW, kZR, false }, // crc32h
+ { 0b0001101011000000010010, kW, kZR, kW, kZR, kW, kZR, false }, // crc32w
+ { 0b1001101011000000010011, kW, kZR, kW, kZR, kX, kZR, false }, // crc32x
+ { 0b1001101011000000000101, kX , kZR, kX , kSP, kX , kZR, true }, // gmi
+ { 0b0001101100000000111111, kWX, kZR, kWX, kZR, kWX, kZR, true }, // mneg
+ { 0b0001101100000000011111, kWX, kZR, kWX, kZR, kWX, kZR, true }, // mul
+ { 0b1001101011000000001100, kX, kZR, kX, kZR, kX, kSP, false }, // pacga
+ { 0b0101101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // sbc
+ { 0b0111101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // sbcs
+ { 0b0001101011000000000011, kWX, kZR, kWX, kZR, kWX, kZR, true }, // sdiv
+ { 0b1001101100100000111111, kX , kZR, kW , kZR, kW , kZR, false }, // smnegl
+ { 0b1001101101000000011111, kX , kZR, kX , kZR, kX , kZR, true }, // smulh
+ { 0b1001101100100000011111, kX , kZR, kW , kZR, kW , kZR, false }, // smull
+ { 0b1001101011000000000000, kX, kZR, kX, kSP, kX, kSP, false }, // subp
+ { 0b1011101011000000000000, kX, kZR, kX, kSP, kX, kSP, false }, // subps
+ { 0b0001101011000000000010, kWX, kZR, kWX, kZR, kWX, kZR, true }, // udiv
+ { 0b1001101110100000111111, kX , kZR, kW , kZR, kW , kZR, false }, // umnegl
+ { 0b1001101110100000011111, kX , kZR, kW , kZR, kW , kZR, false }, // umull
+ { 0b1001101111000000011111, kX , kZR, kX , kZR, kX , kZR, false } // umulh
+};
+
+const BaseRRRR baseRRRR[6] = {
+ { 0b0001101100000000000000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true }, // madd
+ { 0b0001101100000000100000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true }, // msub
+ { 0b1001101100100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false }, // smaddl
+ { 0b1001101100100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false }, // smsubl
+ { 0b1001101110100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false }, // umaddl
+ { 0b1001101110100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false } // umsubl
+};
+
+const BaseShift baseShift[8] = {
+ { 0b0001101011000000001010, 0b0001001100000000011111, 0 }, // asr
+ { 0b0001101011000000001010, 0b0000000000000000000000, 0 }, // asrv
+ { 0b0001101011000000001000, 0b0101001100000000000000, 0 }, // lsl
+ { 0b0001101011000000001000, 0b0000000000000000000000, 0 }, // lslv
+ { 0b0001101011000000001001, 0b0101001100000000011111, 0 }, // lsr
+ { 0b0001101011000000001001, 0b0000000000000000000000, 0 }, // lsrv
+ { 0b0001101011000000001011, 0b0001001110000000000000, 1 }, // ror
+ { 0b0001101011000000001011, 0b0000000000000000000000, 1 } // rorv
+};
+
+const BaseStx baseStx[3] = {
+ { 0b1000100000000000011111, kWX, 30 }, // stxr
+ { 0b0000100000000000011111, kW , 0 }, // stxrb
+ { 0b0100100000000000011111, kW , 0 } // stxrh
+};
+
+const BaseStxp baseStxp[2] = {
+ { 0b1000100000100000100000, kWX, 30 }, // stlxp
+ { 0b1000100000100000000000, kWX, 30 } // stxp
+};
+
+const BaseTst baseTst[1] = {
+ { 0b1101010000, 0b111001000 } // tst
+};
+
+const FSimdPair fSimdPair[5] = {
+ { 0b0111111000110000110110, 0b0010111000100000110101 }, // faddp_v
+ { 0b0111111000110000110010, 0b0010111000100000110001 }, // fmaxnmp_v
+ { 0b0111111000110000111110, 0b0010111000100000111101 }, // fmaxp_v
+ { 0b0111111010110000110010, 0b0010111010100000110001 }, // fminnmp_v
+ { 0b0111111010110000111110, 0b0010111010100000111101 } // fminp_v
+};
+
+const FSimdSV fSimdSV[4] = {
+ { 0b0010111000110000110010 }, // fmaxnmv_v
+ { 0b0010111000110000111110 }, // fmaxv_v
+ { 0b0010111010110000110010 }, // fminnmv_v
+ { 0b0010111010110000111110 } // fminv_v
+};
+
+const FSimdVV fSimdVV[17] = {
+ { 0b0001111000100000110000, kHF_A, 0b0000111010100000111110, kHF_B }, // fabs_v
+ { 0b0001111000100001010000, kHF_A, 0b0010111010100000111110, kHF_B }, // fneg_v
+ { 0b0101111010100001110110, kHF_B, 0b0000111010100001110110, kHF_B }, // frecpe_v
+ { 0b0101111010100001111110, kHF_B, 0b0000000000000000000000, kHF_N }, // frecpx_v
+ { 0b0001111000101000110000, kHF_N, 0b0010111000100001111010, kHF_N }, // frint32x_v
+ { 0b0001111000101000010000, kHF_N, 0b0000111000100001111010, kHF_N }, // frint32z_v
+ { 0b0001111000101001110000, kHF_N, 0b0010111000100001111110, kHF_N }, // frint64x_v
+ { 0b0001111000101001010000, kHF_N, 0b0000111000100001111110, kHF_N }, // frint64z_v
+ { 0b0001111000100110010000, kHF_A, 0b0010111000100001100010, kHF_B }, // frinta_v
+ { 0b0001111000100111110000, kHF_A, 0b0010111010100001100110, kHF_B }, // frinti_v
+ { 0b0001111000100101010000, kHF_A, 0b0000111000100001100110, kHF_B }, // frintm_v
+ { 0b0001111000100100010000, kHF_A, 0b0000111000100001100010, kHF_B }, // frintn_v
+ { 0b0001111000100100110000, kHF_A, 0b0000111010100001100010, kHF_B }, // frintp_v
+ { 0b0001111000100111010000, kHF_A, 0b0010111000100001100110, kHF_B }, // frintx_v
+ { 0b0001111000100101110000, kHF_A, 0b0000111010100001100110, kHF_B }, // frintz_v
+ { 0b0111111010100001110110, kHF_B, 0b0010111010100001110110, kHF_B }, // frsqrte_v
+ { 0b0001111000100001110000, kHF_A, 0b0010111010100001111110, kHF_B } // fsqrt_v
+};
+
+const FSimdVVV fSimdVVV[13] = {
+ { 0b0111111010100000110101, kHF_C, 0b0010111010100000110101, kHF_C }, // fabd_v
+ { 0b0111111000100000111011, kHF_C, 0b0010111000100000111011, kHF_C }, // facge_v
+ { 0b0111111010100000111011, kHF_C, 0b0010111010100000111011, kHF_C }, // facgt_v
+ { 0b0001111000100000001010, kHF_A, 0b0000111000100000110101, kHF_C }, // fadd_v
+ { 0b0001111000100000000110, kHF_A, 0b0010111000100000111111, kHF_C }, // fdiv_v
+ { 0b0001111000100000010010, kHF_A, 0b0000111000100000111101, kHF_C }, // fmax_v
+ { 0b0001111000100000011010, kHF_A, 0b0000111000100000110001, kHF_C }, // fmaxnm_v
+ { 0b0001111000100000010110, kHF_A, 0b0000111010100000111101, kHF_C }, // fmin_v
+ { 0b0001111000100000011110, kHF_A, 0b0000111010100000110001, kHF_C }, // fminnm_v
+ { 0b0001111000100000100010, kHF_A, 0b0000000000000000000000, kHF_N }, // fnmul_v
+ { 0b0101111000100000111111, kHF_C, 0b0000111000100000111111, kHF_C }, // frecps_v
+ { 0b0101111010100000111111, kHF_C, 0b0000111010100000111111, kHF_C }, // frsqrts_v
+ { 0b0001111000100000001110, kHF_A, 0b0000111010100000110101, kHF_C } // fsub_v
+};
+
+const FSimdVVVV fSimdVVVV[4] = {
+ { 0b0001111100000000000000, kHF_A, 0b0000000000000000000000, kHF_N }, // fmadd_v
+ { 0b0001111100000000100000, kHF_A, 0b0000000000000000000000, kHF_N }, // fmsub_v
+ { 0b0001111100100000000000, kHF_A, 0b0000000000000000000000, kHF_N }, // fnmadd_v
+ { 0b0001111100100000100000, kHF_A, 0b0000000000000000000000, kHF_N } // fnmsub_v
+};
+
+const FSimdVVVe fSimdVVVe[4] = {
+ { 0b0000000000000000000000, kHF_N, 0b0000111000100000110011, 0b0000111110000000000100 }, // fmla_v
+ { 0b0000000000000000000000, kHF_N, 0b0000111010100000110011, 0b0000111110000000010100 }, // fmls_v
+ { 0b0001111000100000000010, kHF_A, 0b0010111000100000110111, 0b0000111110000000100100 }, // fmul_v
+ { 0b0101111000100000110111, kHF_C, 0b0000111000100000110111, 0b0010111110000000100100 } // fmulx_v
+};
+
+const ISimdPair iSimdPair[1] = {
+ { 0b0101111000110001101110, 0b0000111000100000101111, kVO_V_Any } // addp_v
+};
+
+const ISimdSV iSimdSV[7] = {
+ { 0b0000111000110001101110, kVO_V_BH_4S }, // addv_v
+ { 0b0000111000110000001110, kVO_V_BH_4S }, // saddlv_v
+ { 0b0000111000110000101010, kVO_V_BH_4S }, // smaxv_v
+ { 0b0000111000110001101010, kVO_V_BH_4S }, // sminv_v
+ { 0b0010111000110000001110, kVO_V_BH_4S }, // uaddlv_v
+ { 0b0010111000110000101010, kVO_V_BH_4S }, // umaxv_v
+ { 0b0010111000110001101010, kVO_V_BH_4S } // uminv_v
+};
+
+const ISimdVV iSimdVV[29] = {
+ { 0b0000111000100000101110, kVO_V_Any }, // abs_v
+ { 0b0000111000100000010010, kVO_V_BHS }, // cls_v
+ { 0b0010111000100000010010, kVO_V_BHS }, // clz_v
+ { 0b0000111000100000010110, kVO_V_B }, // cnt_v
+ { 0b0010111000100000010110, kVO_V_B }, // mvn_v
+ { 0b0010111000100000101110, kVO_V_Any }, // neg_v
+ { 0b0010111000100000010110, kVO_V_B }, // not_v
+ { 0b0010111001100000010110, kVO_V_B }, // rbit_v
+ { 0b0000111000100000000110, kVO_V_B }, // rev16_v
+ { 0b0010111000100000000010, kVO_V_BH }, // rev32_v
+ { 0b0000111000100000000010, kVO_V_BHS }, // rev64_v
+ { 0b0000111000100000011010, kVO_V_BHS }, // sadalp_v
+ { 0b0000111000100000001010, kVO_V_BHS }, // saddlp_v
+ { 0b0000111000100000011110, kVO_SV_Any }, // sqabs_v
+ { 0b0010111000100000011110, kVO_SV_Any }, // sqneg_v
+ { 0b0000111000100001010010, kVO_SV_B8H4S2 }, // sqxtn_v
+ { 0b0100111000100001010010, kVO_V_B16H8S4 }, // sqxtn2_v
+ { 0b0010111000100001001010, kVO_SV_B8H4S2 }, // sqxtun_v
+ { 0b0110111000100001001010, kVO_V_B16H8S4 }, // sqxtun2_v
+ { 0b0000111000100000001110, kVO_SV_Any }, // suqadd_v
+ { 0b0010111000100000011010, kVO_V_BHS }, // uadalp_v
+ { 0b0010111000100000001010, kVO_V_BHS }, // uaddlp_v
+ { 0b0010111000100001010010, kVO_SV_B8H4S2 }, // uqxtn_v
+ { 0b0110111000100001010010, kVO_V_B16H8S4 }, // uqxtn2_v
+ { 0b0000111010100001110010, kVO_V_S }, // urecpe_v
+ { 0b0010111010100001110010, kVO_V_S }, // ursqrte_v
+ { 0b0010111000100000001110, kVO_SV_Any }, // usqadd_v
+ { 0b0000111000100001001010, kVO_V_B8H4S2 }, // xtn_v
+ { 0b0100111000100001001010, kVO_V_B16H8S4 } // xtn2_v
+};
+
+const ISimdVVV iSimdVVV[65] = {
+ { 0b0000111000100000100001, kVO_V_Any }, // add_v
+ { 0b0000111000100000010000, kVO_V_B8H4S2 }, // addhn_v
+ { 0b0100111000100000010000, kVO_V_B16H8S4 }, // addhn2_v
+ { 0b0000111000100000000111, kVO_V_B }, // and_v
+ { 0b0010111011100000000111, kVO_V_B }, // bif_v
+ { 0b0010111010100000000111, kVO_V_B }, // bit_v
+ { 0b0010111001100000000111, kVO_V_B }, // bsl_v
+ { 0b0000111000100000100011, kVO_V_Any }, // cmtst_v
+ { 0b0010111000100000000111, kVO_V_B }, // eor_v
+ { 0b0000111011100000000111, kVO_V_B }, // orn_v
+ { 0b0010111000100000100111, kVO_V_B }, // pmul_v
+ { 0b0000111000100000111000, kVO_V_B8D1 }, // pmull_v
+ { 0b0100111000100000111000, kVO_V_B16D2 }, // pmull2_v
+ { 0b0010111000100000010000, kVO_V_B8H4S2 }, // raddhn_v
+ { 0b0110111000100000010000, kVO_V_B16H8S4 }, // raddhn2_v
+ { 0b1100111001100000100011, kVO_V_D2 }, // rax1_v
+ { 0b0010111000100000011000, kVO_V_B8H4S2 }, // rsubhn_v
+ { 0b0110111000100000011000, kVO_V_B16H8S4 }, // rsubhn2_v
+ { 0b0000111000100000011111, kVO_V_BHS }, // saba_v
+ { 0b0000111000100000010100, kVO_V_B8H4S2 }, // sabal_v
+ { 0b0100111000100000010100, kVO_V_B16H8S4 }, // sabal2_v
+ { 0b0000111000100000011101, kVO_V_BHS }, // sabd_v
+ { 0b0000111000100000011100, kVO_V_B8H4S2 }, // sabdl_v
+ { 0b0100111000100000011100, kVO_V_B16H8S4 }, // sabdl2_v
+ { 0b0000111000100000000000, kVO_V_B8H4S2 }, // saddl_v
+ { 0b0100111000100000000000, kVO_V_B16H8S4 }, // saddl2_v
+ { 0b0000111000100000000001, kVO_V_BHS }, // shadd_v
+ { 0b0000111000100000001001, kVO_V_BHS }, // shsub_v
+ { 0b0000111000100000011001, kVO_V_BHS }, // smax_v
+ { 0b0000111000100000101001, kVO_V_BHS }, // smaxp_v
+ { 0b0000111000100000011011, kVO_V_BHS }, // smin_v
+ { 0b0000111000100000101011, kVO_V_BHS }, // sminp_v
+ { 0b0000111000100000000011, kVO_SV_Any }, // sqadd_v
+ { 0b0000111000100000001011, kVO_SV_Any }, // sqsub_v
+ { 0b0000111000100000000101, kVO_V_BHS }, // srhadd_v
+ { 0b0000111000100000001000, kVO_V_B8H4S2 }, // ssubl_v
+ { 0b0100111000100000001000, kVO_V_B16H8S4 }, // ssubl2_v
+ { 0b0010111000100000100001, kVO_V_Any }, // sub_v
+ { 0b0000111000100000011000, kVO_V_B8H4S2 }, // subhn_v
+ { 0b0000111000100000011000, kVO_V_B16H8S4 }, // subhn2_v
+ { 0b0000111000000000001010, kVO_V_BHS_D2 }, // trn1_v
+ { 0b0000111000000000011010, kVO_V_BHS_D2 }, // trn2_v
+ { 0b0010111000100000011111, kVO_V_BHS }, // uaba_v
+ { 0b0010111000100000010100, kVO_V_B8H4S2 }, // uabal_v
+ { 0b0110111000100000010100, kVO_V_B16H8S4 }, // uabal2_v
+ { 0b0010111000100000011101, kVO_V_BHS }, // uabd_v
+ { 0b0010111000100000011100, kVO_V_B8H4S2 }, // uabdl_v
+ { 0b0110111000100000011100, kVO_V_B16H8S4 }, // uabdl2_v
+ { 0b0010111000100000000000, kVO_V_B8H4S2 }, // uaddl_v
+ { 0b0110111000100000000000, kVO_V_B16H8S4 }, // uaddl2_v
+ { 0b0010111000100000000001, kVO_V_BHS }, // uhadd_v
+ { 0b0010111000100000001001, kVO_V_BHS }, // uhsub_v
+ { 0b0010111000100000011001, kVO_V_BHS }, // umax_v
+ { 0b0010111000100000101001, kVO_V_BHS }, // umaxp_v
+ { 0b0010111000100000011011, kVO_V_BHS }, // umin_v
+ { 0b0010111000100000101011, kVO_V_BHS }, // uminp_v
+ { 0b0010111000100000000011, kVO_SV_Any }, // uqadd_v
+ { 0b0010111000100000001011, kVO_SV_Any }, // uqsub_v
+ { 0b0010111000100000000101, kVO_V_BHS }, // urhadd_v
+ { 0b0010111000100000001000, kVO_V_B8H4S2 }, // usubl_v
+ { 0b0110111000100000001000, kVO_V_B16H8S4 }, // usubl2_v
+ { 0b0000111000000000000110, kVO_V_BHS_D2 }, // uzp1_v
+ { 0b0000111000000000010110, kVO_V_BHS_D2 }, // uzp2_v
+ { 0b0000111000000000001110, kVO_V_BHS_D2 }, // zip1_v
+ { 0b0000111000000000011110, kVO_V_BHS_D2 } // zip2_v
+};
+
+const ISimdVVVI iSimdVVVI[2] = {
+ { 0b0010111000000000000000, kVO_V_B, 4, 11, 1 }, // ext_v
+ { 0b1100111001100000100011, kVO_V_D2, 6, 10, 0 } // xar_v
+};
+
+const ISimdVVVV iSimdVVVV[2] = {
+ { 0b1100111000100000000000, kVO_V_B16 }, // bcax_v
+ { 0b1100111000000000000000, kVO_V_B16 } // eor3_v
+};
+
+const ISimdVVVVx iSimdVVVVx[1] = {
+ { 0b1100111001000000000000, kOp_V4S, kOp_V4S, kOp_V4S, kOp_V4S } // sm3ss1_v
+};
+
+const ISimdVVVe iSimdVVVe[25] = {
+ { 0b0000111000100000100101, kVO_V_BHS, 0b0010111100000000000000, kVO_V_HS }, // mla_v
+ { 0b0010111000100000100101, kVO_V_BHS, 0b0010111100000000010000, kVO_V_HS }, // mls_v
+ { 0b0000111000100000100111, kVO_V_BHS, 0b0000111100000000100000, kVO_V_HS }, // mul_v
+ { 0b0000111000100000100000, kVO_V_B8H4S2, 0b0000111100000000001000, kVO_V_H4S2 }, // smlal_v
+ { 0b0100111000100000100000, kVO_V_B16H8S4, 0b0100111100000000001000, kVO_V_H8S4 }, // smlal2_v
+ { 0b0000111000100000101000, kVO_V_B8H4S2, 0b0000111100000000011000, kVO_V_H4S2 }, // smlsl_v
+ { 0b0100111000100000101000, kVO_V_B16H8S4, 0b0100111100000000011000, kVO_V_H8S4 }, // smlsl2_v
+ { 0b0000111000100000110000, kVO_V_B8H4S2, 0b0000111100000000101000, kVO_V_H4S2 }, // smull_v
+ { 0b0100111000100000110000, kVO_V_B16H8S4, 0b0100111100000000101000, kVO_V_H8S4 }, // smull2_v
+ { 0b0000111000100000100100, kVO_SV_BHS, 0b0000111100000000001100, kVO_V_H4S2 }, // sqdmlal_v
+ { 0b0100111000100000100100, kVO_V_B16H8S4, 0b0100111100000000001100, kVO_V_H8S4 }, // sqdmlal2_v
+ { 0b0000111000100000101100, kVO_SV_BHS, 0b0000111100000000011100, kVO_V_H4S2 }, // sqdmlsl_v
+ { 0b0100111000100000101100, kVO_V_B16H8S4, 0b0100111100000000011100, kVO_V_H8S4 }, // sqdmlsl2_v
+ { 0b0000111000100000101101, kVO_SV_HS, 0b0000111100000000110000, kVO_SV_HS }, // sqdmulh_v
+ { 0b0000111000100000110100, kVO_SV_BHS, 0b0000111100000000101100, kVO_V_H4S2 }, // sqdmull_v
+ { 0b0100111000100000110100, kVO_V_B16H8S4, 0b0100111100000000101100, kVO_V_H8S4 }, // sqdmull2_v
+ { 0b0010111000000000100001, kVO_SV_HS, 0b0010111100000000110100, kVO_SV_HS }, // sqrdmlah_v
+ { 0b0010111000000000100011, kVO_SV_HS, 0b0010111100000000111100, kVO_SV_HS }, // sqrdmlsh_v
+ { 0b0010111000100000101101, kVO_SV_HS, 0b0000111100000000110100, kVO_SV_HS }, // sqrdmulh_v
+ { 0b0010111000100000100000, kVO_V_B8H4S2, 0b0010111100000000001000, kVO_V_H4S2 }, // umlal_v
+ { 0b0110111000100000100000, kVO_V_B16H8S4, 0b0010111100000000001000, kVO_V_H8S4 }, // umlal2_v
+ { 0b0010111000100000101000, kVO_V_B8H4S2, 0b0010111100000000011000, kVO_V_H4S2 }, // umlsl_v
+ { 0b0110111000100000101000, kVO_V_B16H8S4, 0b0110111100000000011000, kVO_V_H8S4 }, // umlsl2_v
+ { 0b0010111000100000110000, kVO_V_B8H4S2, 0b0010111100000000101000, kVO_V_H4S2 }, // umull_v
+ { 0b0110111000100000110000, kVO_V_B16H8S4, 0b0110111100000000101000, kVO_V_H8S4 } // umull2_v
+};
+
+const ISimdVVVx iSimdVVVx[17] = {
+ { 0b0110111001000000111011, kOp_V4S, kOp_V8H, kOp_V8H }, // bfmmla_v
+ { 0b0101111000000000000000, kOp_Q, kOp_S, kOp_V4S }, // sha1c_v
+ { 0b0101111000000000001000, kOp_Q, kOp_S, kOp_V4S }, // sha1m_v
+ { 0b0101111000000000000100, kOp_Q, kOp_S, kOp_V4S }, // sha1p_v
+ { 0b0101111000000000001100, kOp_V4S, kOp_V4S, kOp_V4S }, // sha1su0_v
+ { 0b0101111000000000010000, kOp_Q, kOp_Q, kOp_V4S }, // sha256h_v
+ { 0b0101111000000000010100, kOp_Q, kOp_Q, kOp_V4S }, // sha256h2_v
+ { 0b0101111000000000011000, kOp_V4S, kOp_V4S, kOp_V4S }, // sha256su1_v
+ { 0b1100111001100000100000, kOp_Q, kOp_Q, kOp_V2D }, // sha512h_v
+ { 0b1100111001100000100001, kOp_Q, kOp_Q, kOp_V2D }, // sha512h2_v
+ { 0b1100111001100000100010, kOp_V2D, kOp_V2D, kOp_V2D }, // sha512su1_v
+ { 0b1100111001100000110000, kOp_V4S, kOp_V4S, kOp_V4S }, // sm3partw1_v
+ { 0b1100111001100000110001, kOp_V4S, kOp_V4S, kOp_V4S }, // sm3partw2_v
+ { 0b1100111001100000110010, kOp_V4S, kOp_V4S, kOp_V4S }, // sm4ekey_v
+ { 0b0100111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B }, // smmla_v
+ { 0b0110111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B }, // ummla_v
+ { 0b0100111010000000101011, kOp_V4S, kOp_V16B, kOp_V16B } // usmmla_v
+};
+
+const ISimdVVx iSimdVVx[13] = {
+ { 0b0100111000101000010110, kOp_V16B, kOp_V16B }, // aesd_v
+ { 0b0100111000101000010010, kOp_V16B, kOp_V16B }, // aese_v
+ { 0b0100111000101000011110, kOp_V16B, kOp_V16B }, // aesimc_v
+ { 0b0100111000101000011010, kOp_V16B, kOp_V16B }, // aesmc_v
+ { 0b0001111001100011010000, kOp_H, kOp_S }, // bfcvt_v
+ { 0b0000111010100001011010, kOp_V4H, kOp_V4S }, // bfcvtn_v
+ { 0b0100111010100001011010, kOp_V8H, kOp_V4S }, // bfcvtn2_v
+ { 0b0001111001111110000000, kOp_GpW, kOp_D }, // fjcvtzs_v
+ { 0b0101111000101000000010, kOp_S, kOp_S }, // sha1h_v
+ { 0b0101111000101000000110, kOp_V4S, kOp_V4S }, // sha1su1_v
+ { 0b0101111000101000001010, kOp_V4S, kOp_V4S }, // sha256su0_v
+ { 0b1100111011000000100000, kOp_V2D, kOp_V2D }, // sha512su0_v
+ { 0b1100111011000000100001, kOp_V4S, kOp_V4S } // sm4e_v
+};
+
+const ISimdWWV iSimdWWV[8] = {
+ { 0b0000111000100000000100, kVO_V_B8H4S2 }, // saddw_v
+ { 0b0000111000100000000100, kVO_V_B16H8S4 }, // saddw2_v
+ { 0b0000111000100000001100, kVO_V_B8H4S2 }, // ssubw_v
+ { 0b0000111000100000001100, kVO_V_B16H8S4 }, // ssubw2_v
+ { 0b0010111000100000000100, kVO_V_B8H4S2 }, // uaddw_v
+ { 0b0010111000100000000100, kVO_V_B16H8S4 }, // uaddw2_v
+ { 0b0010111000100000001100, kVO_V_B8H4S2 }, // usubw_v
+ { 0b0010111000100000001100, kVO_V_B16H8S4 } // usubw2_v
+};
+
+const SimdBicOrr simdBicOrr[2] = {
+ { 0b0000111001100000000111, 0b0010111100000000000001 }, // bic_v
+ { 0b0000111010100000000111, 0b0000111100000000000001 } // orr_v
+};
+
+const SimdCmp simdCmp[7] = {
+ { 0b0010111000100000100011, 0b0000111000100000100110, kVO_V_Any }, // cmeq_v
+ { 0b0000111000100000001111, 0b0010111000100000100010, kVO_V_Any }, // cmge_v
+ { 0b0000111000100000001101, 0b0000111000100000100010, kVO_V_Any }, // cmgt_v
+ { 0b0010111000100000001101, 0b0000000000000000000000, kVO_V_Any }, // cmhi_v
+ { 0b0010111000100000001111, 0b0000000000000000000000, kVO_V_Any }, // cmhs_v
+ { 0b0000000000000000000000, 0b0010111000100000100110, kVO_V_Any }, // cmle_v
+ { 0b0000000000000000000000, 0b0000111000100000101010, kVO_V_Any } // cmlt_v
+};
+
+const SimdDot simdDot[5] = {
+ { 0b0010111001000000111111, 0b0000111101000000111100, kET_S, kET_H, kET_2H }, // bfdot_v
+ { 0b0000111010000000100101, 0b0000111110000000111000, kET_S, kET_B, kET_4B }, // sdot_v
+ { 0b0000000000000000000000, 0b0000111100000000111100, kET_S, kET_B, kET_4B }, // sudot_v
+ { 0b0010111010000000100101, 0b0010111110000000111000, kET_S, kET_B, kET_4B }, // udot_v
+ { 0b0000111010000000100111, 0b0000111110000000111100, kET_S, kET_B, kET_4B } // usdot_v
+};
+
+const SimdFcadd simdFcadd[1] = {
+ { 0b0010111000000000111001 } // fcadd_v
+};
+
+const SimdFccmpFccmpe simdFccmpFccmpe[2] = {
+ { 0b00011110001000000000010000000000 }, // fccmp_v
+ { 0b00011110001000000000010000010000 } // fccmpe_v
+};
+
+const SimdFcm simdFcm[5] = {
+ { 0b0000111000100000111001, kHF_C, 0b0000111010100000110110 }, // fcmeq_v
+ { 0b0010111000100000111001, kHF_C, 0b0010111010100000110010 }, // fcmge_v
+ { 0b0010111010100000111001, kHF_C, 0b0000111010100000110010 }, // fcmgt_v
+ { 0b0000000000000000000000, kHF_C, 0b0010111010100000110110 }, // fcmle_v
+ { 0b0000000000000000000000, kHF_C, 0b0000111010100000111010 } // fcmlt_v
+};
+
+const SimdFcmla simdFcmla[1] = {
+ { 0b0010111000000000110001, 0b0010111100000000000100 } // fcmla_v
+};
+
+const SimdFcmpFcmpe simdFcmpFcmpe[2] = {
+ { 0b00011110001000000010000000000000 }, // fcmp_v
+ { 0b00011110001000000010000000010000 } // fcmpe_v
+};
+
+const SimdFcvtLN simdFcvtLN[6] = {
+ { 0b0000111000100001011110, 0, 0 }, // fcvtl_v
+ { 0b0100111000100001011110, 0, 0 }, // fcvtl2_v
+ { 0b0000111000100001011010, 0, 0 }, // fcvtn_v
+ { 0b0100111000100001011010, 0, 0 }, // fcvtn2_v
+ { 0b0010111000100001011010, 1, 1 }, // fcvtxn_v
+ { 0b0110111000100001011010, 1, 0 } // fcvtxn2_v
+};
+
+const SimdFcvtSV simdFcvtSV[12] = {
+ { 0b0000111000100001110010, 0b0000000000000000000000, 0b0001111000100100000000, 1 }, // fcvtas_v
+ { 0b0010111000100001110010, 0b0000000000000000000000, 0b0001111000100101000000, 1 }, // fcvtau_v
+ { 0b0000111000100001101110, 0b0000000000000000000000, 0b0001111000110000000000, 1 }, // fcvtms_v
+ { 0b0010111000100001101110, 0b0000000000000000000000, 0b0001111000110001000000, 1 }, // fcvtmu_v
+ { 0b0000111000100001101010, 0b0000000000000000000000, 0b0001111000100000000000, 1 }, // fcvtns_v
+ { 0b0010111000100001101010, 0b0000000000000000000000, 0b0001111000100001000000, 1 }, // fcvtnu_v
+ { 0b0000111010100001101010, 0b0000000000000000000000, 0b0001111000101000000000, 1 }, // fcvtps_v
+ { 0b0010111010100001101010, 0b0000000000000000000000, 0b0001111000101001000000, 1 }, // fcvtpu_v
+ { 0b0000111010100001101110, 0b0000111100000000111111, 0b0001111000111000000000, 1 }, // fcvtzs_v
+ { 0b0010111010100001101110, 0b0010111100000000111111, 0b0001111000111001000000, 1 }, // fcvtzu_v
+ { 0b0000111000100001110110, 0b0000111100000000111001, 0b0001111000100010000000, 0 }, // scvtf_v
+ { 0b0010111000100001110110, 0b0010111100000000111001, 0b0001111000100011000000, 0 } // ucvtf_v
+};
+
+const SimdFmlal simdFmlal[6] = {
+ { 0b0010111011000000111111, 0b0000111111000000111100, 0, kET_S, kET_H, kET_H }, // bfmlalb_v
+ { 0b0110111011000000111111, 0b0100111111000000111100, 0, kET_S, kET_H, kET_H }, // bfmlalt_v
+ { 0b0000111000100000111011, 0b0000111110000000000000, 1, kET_S, kET_H, kET_H }, // fmlal_v
+ { 0b0010111000100000110011, 0b0010111110000000100000, 1, kET_S, kET_H, kET_H }, // fmlal2_v
+ { 0b0000111010100000111011, 0b0000111110000000010000, 1, kET_S, kET_H, kET_H }, // fmlsl_v
+ { 0b0010111010100000110011, 0b0010111110000000110000, 1, kET_S, kET_H, kET_H } // fmlsl2_v
+};
+
+const SimdLdNStN simdLdNStN[12] = {
+ { 0b0000110101000000000000, 0b0000110001000000001000, 1, 0 }, // ld1_v
+ { 0b0000110101000000110000, 0b0000000000000000000000, 1, 1 }, // ld1r_v
+ { 0b0000110101100000000000, 0b0000110001000000100000, 2, 0 }, // ld2_v
+ { 0b0000110101100000110000, 0b0000000000000000000000, 2, 1 }, // ld2r_v
+ { 0b0000110101000000001000, 0b0000110001000000010000, 3, 0 }, // ld3_v
+ { 0b0000110101000000111000, 0b0000000000000000000000, 3, 1 }, // ld3r_v
+ { 0b0000110101100000001000, 0b0000110001000000000000, 4, 0 }, // ld4_v
+ { 0b0000110101100000111000, 0b0000000000000000000000, 4, 1 }, // ld4r_v
+ { 0b0000110100000000000000, 0b0000110000000000001000, 1, 0 }, // st1_v
+ { 0b0000110100100000000000, 0b0000110000000000100000, 2, 0 }, // st2_v
+ { 0b0000110100000000001000, 0b0000110000000000010000, 3, 0 }, // st3_v
+ { 0b0000110100100000001000, 0b0000110000000000000000, 4, 0 } // st4_v
+};
+
+const SimdLdSt simdLdSt[2] = {
+ { 0b0011110101, 0b00111100010, 0b00111100011, 0b00011100, Inst::kIdLdur_v }, // ldr_v
+ { 0b0011110100, 0b00111100000, 0b00111100001, 0b00000000, Inst::kIdStur_v } // str_v
+};
+
+const SimdLdpStp simdLdpStp[4] = {
+ { 0b0010110001, 0b0000000000 }, // ldnp_v
+ { 0b0010110101, 0b0010110011 }, // ldp_v
+ { 0b0010110000, 0b0000000000 }, // stnp_v
+ { 0b0010110100, 0b0010110010 } // stp_v
+};
+
+const SimdLdurStur simdLdurStur[2] = {
+ { 0b0011110001000000000000 }, // ldur_v
+ { 0b0011110000000000000000 } // stur_v
+};
+
+const SimdMoviMvni simdMoviMvni[2] = {
+ { 0b0000111100000000000001, 0 }, // movi_v
+ { 0b0000111100000000000001, 1 } // mvni_v
+};
+
+const SimdShift simdShift[40] = {
+ { 0b0000000000000000000000, 0b0000111100000000100011, 1, kVO_V_B8H4S2 }, // rshrn_v
+ { 0b0000000000000000000000, 0b0100111100000000100011, 1, kVO_V_B16H8S4 }, // rshrn2_v
+ { 0b0000000000000000000000, 0b0000111100000000010101, 0, kVO_V_Any }, // shl_v
+ { 0b0000000000000000000000, 0b0000111100000000100001, 1, kVO_V_B8H4S2 }, // shrn_v
+ { 0b0000000000000000000000, 0b0100111100000000100001, 1, kVO_V_B16H8S4 }, // shrn2_v
+ { 0b0000000000000000000000, 0b0010111100000000010101, 0, kVO_V_Any }, // sli_v
+ { 0b0000111000100000010111, 0b0000000000000000000000, 1, kVO_SV_Any }, // sqrshl_v
+ { 0b0000000000000000000000, 0b0000111100000000100111, 1, kVO_SV_B8H4S2 }, // sqrshrn_v
+ { 0b0000000000000000000000, 0b0100111100000000100111, 1, kVO_V_B16H8S4 }, // sqrshrn2_v
+ { 0b0000000000000000000000, 0b0010111100000000100011, 1, kVO_SV_B8H4S2 }, // sqrshrun_v
+ { 0b0000000000000000000000, 0b0110111100000000100011, 1, kVO_V_B16H8S4 }, // sqrshrun2_v
+ { 0b0000111000100000010011, 0b0000111100000000011101, 0, kVO_SV_Any }, // sqshl_v
+ { 0b0000000000000000000000, 0b0010111100000000011001, 0, kVO_SV_Any }, // sqshlu_v
+ { 0b0000000000000000000000, 0b0000111100000000100101, 1, kVO_SV_B8H4S2 }, // sqshrn_v
+ { 0b0000000000000000000000, 0b0100111100000000100101, 1, kVO_V_B16H8S4 }, // sqshrn2_v
+ { 0b0000000000000000000000, 0b0010111100000000100001, 1, kVO_SV_B8H4S2 }, // sqshrun_v
+ { 0b0000000000000000000000, 0b0110111100000000100001, 1, kVO_V_B16H8S4 }, // sqshrun2_v
+ { 0b0000000000000000000000, 0b0010111100000000010001, 1, kVO_V_Any }, // sri_v
+ { 0b0000111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any }, // srshl_v
+ { 0b0000000000000000000000, 0b0000111100000000001001, 1, kVO_V_Any }, // srshr_v
+ { 0b0000000000000000000000, 0b0000111100000000001101, 1, kVO_V_Any }, // srsra_v
+ { 0b0000111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any }, // sshl_v
+ { 0b0000000000000000000000, 0b0000111100000000101001, 0, kVO_V_B8H4S2 }, // sshll_v
+ { 0b0000000000000000000000, 0b0100111100000000101001, 0, kVO_V_B16H8S4 }, // sshll2_v
+ { 0b0000000000000000000000, 0b0000111100000000000001, 1, kVO_V_Any }, // sshr_v
+ { 0b0000000000000000000000, 0b0000111100000000000101, 1, kVO_V_Any }, // ssra_v
+ { 0b0010111000100000010111, 0b0000000000000000000000, 0, kVO_SV_Any }, // uqrshl_v
+ { 0b0000000000000000000000, 0b0010111100000000100111, 1, kVO_SV_B8H4S2 }, // uqrshrn_v
+ { 0b0000000000000000000000, 0b0110111100000000100111, 1, kVO_V_B16H8S4 }, // uqrshrn2_v
+ { 0b0010111000100000010011, 0b0010111100000000011101, 0, kVO_SV_Any }, // uqshl_v
+ { 0b0000000000000000000000, 0b0010111100000000100101, 1, kVO_SV_B8H4S2 }, // uqshrn_v
+ { 0b0000000000000000000000, 0b0110111100000000100101, 1, kVO_V_B16H8S4 }, // uqshrn2_v
+ { 0b0010111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any }, // urshl_v
+ { 0b0000000000000000000000, 0b0010111100000000001001, 1, kVO_V_Any }, // urshr_v
+ { 0b0000000000000000000000, 0b0010111100000000001101, 1, kVO_V_Any }, // ursra_v
+ { 0b0010111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any }, // ushl_v
+ { 0b0000000000000000000000, 0b0010111100000000101001, 0, kVO_V_B8H4S2 }, // ushll_v
+ { 0b0000000000000000000000, 0b0110111100000000101001, 0, kVO_V_B16H8S4 }, // ushll2_v
+ { 0b0000000000000000000000, 0b0010111100000000000001, 1, kVO_V_Any }, // ushr_v
+ { 0b0000000000000000000000, 0b0010111100000000000101, 1, kVO_V_Any } // usra_v
+};
+
+const SimdShiftES simdShiftES[2] = {
+ { 0b0010111000100001001110, kVO_V_B8H4S2 }, // shll_v
+ { 0b0110111000100001001110, kVO_V_B16H8S4 } // shll2_v
+};
+
+const SimdSm3tt simdSm3tt[4] = {
+ { 0b1100111001000000100000 }, // sm3tt1a_v
+ { 0b1100111001000000100001 }, // sm3tt1b_v
+ { 0b1100111001000000100010 }, // sm3tt2a_v
+ { 0b1100111001000000100011 } // sm3tt2b_v
+};
+
+const SimdSmovUmov simdSmovUmov[2] = {
+ { 0b0000111000000000001011, kVO_V_BHS, 1 }, // smov_v
+ { 0b0000111000000000001111, kVO_V_Any, 0 } // umov_v
+};
+
+const SimdSxtlUxtl simdSxtlUxtl[4] = {
+ { 0b0000111100000000101001, kVO_V_B8H4S2 }, // sxtl_v
+ { 0b0100111100000000101001, kVO_V_B16H8S4 }, // sxtl2_v
+ { 0b0010111100000000101001, kVO_V_B8H4S2 }, // uxtl_v
+ { 0b0110111100000000101001, kVO_V_B16H8S4 } // uxtl2_v
+};
+
+const SimdTblTbx simdTblTbx[2] = {
+ { 0b0000111000000000000000 }, // tbl_v
+ { 0b0000111000000000000100 } // tbx_v
+};
+// ----------------------------------------------------------------------------
+// ${EncodingData:End}
+
+} // {EncodingData}
+} // {InstDB}
+
+/*
+// ${CommonData:Begin}
+// ------------------- Automatically generated, do not edit -------------------
+const InstDB::CommonInfo InstDB::commonData[] = {
+ { 0} // #0 [ref=440x]
+};
+// ----------------------------------------------------------------------------
+// ${CommonData:End}
+*/
+
+// ============================================================================
+// [asmjit::ArmUtil - Id <-> Name]
+// ============================================================================
+
+#ifndef ASMJIT_DISABLE_TEXT
+// ${NameData:Begin}
+// ------------------- Automatically generated, do not edit -------------------
+const char InstDB::_nameData[] =
+ "\0" "adc\0" "adcs\0" "addg\0" "adds\0" "addv\0" "adr\0" "adrp\0" "aesd\0" "aese\0" "aesimc\0" "aesmc\0" "and\0"
+ "ands\0" "asr\0" "asrv\0" "at\0" "autda\0" "autdb\0" "autdza\0" "autdzb\0" "autia\0" "autia1716\0" "autiasp\0"
+ "autiaz\0" "autib\0" "autib1716\0" "autibsp\0" "autibz\0" "autiza\0" "autizb\0" "axflag\0" "bcax\0" "bfc\0" "bfcvt\0"
+ "bfcvtn\0" "bfcvtn2\0" "bfdot\0" "bfi\0" "bfmlalb\0" "bfmlalt\0" "bfmmla\0" "bfxil\0" "bic\0" "bics\0" "bif\0"
+ "blr\0" "br\0" "brk\0" "bsl\0" "cas\0" "casa\0" "casab\0" "casah\0" "casal\0" "casalb\0" "casalh\0" "casb\0" "cash\0"
+ "casl\0" "caslb\0" "caslh\0" "casp\0" "caspa\0" "caspal\0" "caspl\0" "cbnz\0" "cbz\0" "ccmn\0" "cfinv\0" "cinc\0"
+ "cinv\0" "clrex\0" "cls\0" "clz\0" "cmhi\0" "cmhs\0" "cmpp\0" "cmtst\0" "cneg\0" "cnt\0" "crc32b\0" "crc32cb\0"
+ "crc32ch\0" "crc32cw\0" "crc32cx\0" "crc32h\0" "crc32w\0" "crc32x\0" "csdb\0" "cset\0" "csetm\0" "csinc\0" "csinv\0"
+ "csneg\0" "dcps1\0" "dcps2\0" "dcps3\0" "dgh\0" "dmb\0" "drps\0" "dsb\0" "dup\0" "eon\0" "eor3\0" "eret\0" "esb\0"
+ "ext\0" "extr\0" "fabd\0" "fabs\0" "facge\0" "facgt\0" "fadd\0" "faddp\0" "fcadd\0" "fccmp\0" "fccmpe\0" "fcmeq\0"
+ "fcmge\0" "fcmgt\0" "fcmla\0" "fcmle\0" "fcmlt\0" "fcmp\0" "fcmpe\0" "fcsel\0" "fcvtas\0" "fcvtau\0" "fcvtl\0"
+ "fcvtl2\0" "fcvtms\0" "fcvtmu\0" "fcvtns\0" "fcvtnu\0" "fcvtps\0" "fcvtpu\0" "fcvtxn\0" "fcvtxn2\0" "fcvtzs\0"
+ "fcvtzu\0" "fdiv\0" "fjcvtzs\0" "fmadd\0" "fmax\0" "fmaxnm\0" "fmaxnmp\0" "fmaxnmv\0" "fmaxp\0" "fmaxv\0" "fmin\0"
+ "fminnm\0" "fminnmp\0" "fminnmv\0" "fminp\0" "fminv\0" "fmla\0" "fmlal\0" "fmlal2\0" "fmls\0" "fmlsl\0" "fmlsl2\0"
+ "fmov\0" "fmsub\0" "fmul\0" "fmulx\0" "fneg\0" "fnmadd\0" "fnmsub\0" "fnmul\0" "frecpe\0" "frecps\0" "frecpx\0"
+ "frint32x\0" "frint32z\0" "frint64x\0" "frint64z\0" "frinta\0" "frinti\0" "frintm\0" "frintn\0" "frintp\0" "frintx\0"
+ "frintz\0" "frsqrte\0" "frsqrts\0" "fsqrt\0" "fsub\0" "gmi\0" "hint\0" "hlt\0" "hvc\0" "ins\0" "isb\0" "ld1\0"
+ "ld1r\0" "ld2\0" "ld2r\0" "ld3\0" "ld3r\0" "ld4\0" "ld4r\0" "ldadd\0" "ldadda\0" "ldaddab\0" "ldaddah\0" "ldaddal\0"
+ "ldaddalb\0" "ldaddalh\0" "ldaddb\0" "ldaddh\0" "ldaddl\0" "ldaddlb\0" "ldaddlh\0" "ldar\0" "ldarb\0" "ldarh\0"
+ "ldaxp\0" "ldaxr\0" "ldaxrb\0" "ldaxrh\0" "ldclr\0" "ldclra\0" "ldclrab\0" "ldclrah\0" "ldclral\0" "ldclralb\0"
+ "ldclralh\0" "ldclrb\0" "ldclrh\0" "ldclrl\0" "ldclrlb\0" "ldclrlh\0" "ldeor\0" "ldeora\0" "ldeorab\0" "ldeorah\0"
+ "ldeoral\0" "ldeoralb\0" "ldeoralh\0" "ldeorb\0" "ldeorh\0" "ldeorl\0" "ldeorlb\0" "ldeorlh\0" "ldg\0" "ldgm\0"
+ "ldlar\0" "ldlarb\0" "ldlarh\0" "ldnp\0" "ldp\0" "ldpsw\0" "ldr\0" "ldraa\0" "ldrab\0" "ldrb\0" "ldrh\0" "ldrsb\0"
+ "ldrsh\0" "ldrsw\0" "ldset\0" "ldseta\0" "ldsetab\0" "ldsetah\0" "ldsetal\0" "ldsetalb\0" "ldsetalh\0" "ldsetb\0"
+ "ldseth\0" "ldsetl\0" "ldsetlb\0" "ldsetlh\0" "ldsmax\0" "ldsmaxa\0" "ldsmaxab\0" "ldsmaxah\0" "ldsmaxal\0"
+ "ldsmaxalb\0" "ldsmaxalh\0" "ldsmaxb\0" "ldsmaxh\0" "ldsmaxl\0" "ldsmaxlb\0" "ldsmaxlh\0" "ldsmin\0" "ldsmina\0"
+ "ldsminab\0" "ldsminah\0" "ldsminal\0" "ldsminalb\0" "ldsminalh\0" "ldsminb\0" "ldsminh\0" "ldsminl\0" "ldsminlb\0"
+ "ldsminlh\0" "ldtr\0" "ldtrb\0" "ldtrh\0" "ldtrsb\0" "ldtrsh\0" "ldtrsw\0" "ldumax\0" "ldumaxa\0" "ldumaxab\0"
+ "ldumaxah\0" "ldumaxal\0" "ldumaxalb\0" "ldumaxalh\0" "ldumaxb\0" "ldumaxh\0" "ldumaxl\0" "ldumaxlb\0" "ldumaxlh\0"
+ "ldumin\0" "ldumina\0" "lduminab\0" "lduminah\0" "lduminal\0" "lduminalb\0" "lduminalh\0" "lduminb\0" "lduminh\0"
+ "lduminl\0" "lduminlb\0" "lduminlh\0" "ldur\0" "ldurb\0" "ldurh\0" "ldursb\0" "ldursh\0" "ldursw\0" "ldxp\0" "ldxr\0"
+ "ldxrb\0" "ldxrh\0" "lslv\0" "lsr\0" "lsrv\0" "mneg\0" "movi\0" "movk\0" "movn\0" "movz\0" "mrs\0" "msr\0" "mvn\0"
+ "mvni\0" "negs\0" "ngc\0" "ngcs\0" "nop\0" "not\0" "orn\0" "orr\0" "pacda\0" "pacdb\0" "pacdza\0" "pacdzb\0"
+ "pacga\0" "pmul\0" "pmull\0" "pmull2\0" "pssbb\0" "raddhn\0" "raddhn2\0" "rax1\0" "rbit\0" "rev\0" "rev16\0"
+ "rev32\0" "rev64\0" "ror\0" "rorv\0" "rsubhn\0" "rsubhn2\0" "saba\0" "sabal\0" "sabal2\0" "sabd\0" "sabdl\0"
+ "sabdl2\0" "sadalp\0" "saddl\0" "saddl2\0" "saddlp\0" "saddlv\0" "saddw\0" "saddw2\0" "sbc\0" "sbcs\0" "sbfiz\0"
+ "sbfm\0" "sbfx\0" "scvtf\0" "sdiv\0" "setf16\0" "setf8\0" "sev\0" "sevl\0" "sha1c\0" "sha1h\0" "sha1m\0" "sha1p\0"
+ "sha1su0\0" "sha1su1\0" "sha256h\0" "sha256h2\0" "sha256su0\0" "sha256su1\0" "sha512h\0" "sha512h2\0" "sha512su0\0"
+ "sha512su1\0" "shadd\0" "shsub\0" "sli\0" "sm3partw1\0" "sm3partw2\0" "sm3ss1\0" "sm3tt1a\0" "sm3tt1b\0" "sm3tt2a\0"
+ "sm3tt2b\0" "sm4e\0" "sm4ekey\0" "smaddl\0" "smaxp\0" "smaxv\0" "sminp\0" "sminv\0" "smlal\0" "smlal2\0" "smlsl\0"
+ "smlsl2\0" "smnegl\0" "smov\0" "smsubl\0" "smulh\0" "smull\0" "smull2\0" "sqabs\0" "sqdmlal\0" "sqdmlal2\0"
+ "sqdmlsl\0" "sqdmlsl2\0" "sqdmulh\0" "sqdmull\0" "sqdmull2\0" "sqneg\0" "sqrdmlah\0" "sqrdmlsh\0" "sqrdmulh\0"
+ "sqrshl\0" "sqrshrn\0" "sqrshrn2\0" "sqrshrun\0" "sqrshrun2\0" "sqshl\0" "sqshlu\0" "sqshrn\0" "sqshrn2\0"
+ "sqshrun\0" "sqshrun2\0" "sqsub\0" "sqxtn\0" "sqxtn2\0" "sqxtun\0" "sqxtun2\0" "srhadd\0" "sri\0" "srshl\0" "srshr\0"
+ "srsra\0" "sshl\0" "sshll\0" "sshll2\0" "sshr\0" "ssra\0" "ssubl\0" "ssubl2\0" "ssubw\0" "ssubw2\0" "st1\0" "st2\0"
+ "st2g\0" "st3\0" "st4\0" "stadd\0" "staddb\0" "staddh\0" "staddl\0" "staddlb\0" "staddlh\0" "stclr\0" "stclrb\0"
+ "stclrh\0" "stclrl\0" "stclrlb\0" "stclrlh\0" "steor\0" "steorb\0" "steorh\0" "steorl\0" "steorlb\0" "steorlh\0"
+ "stg\0" "stgm\0" "stgp\0" "stllr\0" "stllrb\0" "stllrh\0" "stlr\0" "stlrb\0" "stlrh\0" "stlxp\0" "stlxr\0" "stlxrb\0"
+ "stlxrh\0" "stnp\0" "stp\0" "str\0" "strb\0" "strh\0" "stset\0" "stsetb\0" "stseth\0" "stsetl\0" "stsetlb\0"
+ "stsetlh\0" "stsmax\0" "stsmaxb\0" "stsmaxh\0" "stsmaxl\0" "stsmaxlb\0" "stsmaxlh\0" "stsmin\0" "stsminb\0"
+ "stsminh\0" "stsminl\0" "stsminlb\0" "stsminlh\0" "sttr\0" "sttrb\0" "sttrh\0" "stumax\0" "stumaxb\0" "stumaxh\0"
+ "stumaxl\0" "stumaxlb\0" "stumaxlh\0" "stumin\0" "stuminb\0" "stuminh\0" "stuminl\0" "stuminlb\0" "stuminlh\0"
+ "stur\0" "sturb\0" "sturh\0" "stxp\0" "stxr\0" "stxrb\0" "stxrh\0" "stz2g\0" "stzg\0" "stzgm\0" "subg\0" "subp\0"
+ "subps\0" "subs\0" "sudot\0" "suqadd\0" "svc\0" "swp\0" "swpa\0" "swpab\0" "swpah\0" "swpal\0" "swpalb\0" "swpalh\0"
+ "swpb\0" "swph\0" "swpl\0" "swplb\0" "swplh\0" "sxtb\0" "sxth\0" "sxtl\0" "sxtl2\0" "sxtw\0" "sys\0" "tbl\0" "tbnz\0"
+ "tbx\0" "tbz\0" "tlbi\0" "trn1\0" "trn2\0" "uaba\0" "uabal\0" "uabal2\0" "uabd\0" "uabdl\0" "uabdl2\0" "uadalp\0"
+ "uaddl\0" "uaddl2\0" "uaddlp\0" "uaddlv\0" "uaddw\0" "uaddw2\0" "ubfiz\0" "ubfm\0" "ubfx\0" "ucvtf\0" "udf\0"
+ "udiv\0" "uhadd\0" "uhsub\0" "umaddl\0" "umaxp\0" "umaxv\0" "uminp\0" "uminv\0" "umlal\0" "umlal2\0" "umlsl\0"
+ "umlsl2\0" "ummla\0" "umnegl\0" "umov\0" "umsubl\0" "umulh\0" "umull\0" "umull2\0" "uqrshl\0" "uqrshrn\0"
+ "uqrshrn2\0" "uqshl\0" "uqshrn\0" "uqshrn2\0" "uqsub\0" "uqxtn\0" "uqxtn2\0" "urecpe\0" "urhadd\0" "urshl\0"
+ "urshr\0" "ursqrte\0" "ursra\0" "usdot\0" "ushl\0" "ushll\0" "ushll2\0" "ushr\0" "usmmla\0" "usqadd\0" "usra\0"
+ "usubl\0" "usubl2\0" "usubw\0" "usubw2\0" "uxtb\0" "uxth\0" "uxtl\0" "uxtl2\0" "uzp1\0" "uzp2\0" "wfe\0" "wfi\0"
+ "xaflag\0" "xar\0" "xpacd\0" "xpaci\0" "xpaclri\0" "yield\0" "zip1\0" "zip2";
+
+const InstDB::InstNameIndex InstDB::instNameIndex[26] = {
+ { Inst::kIdAdc , Inst::kIdAnd_v + 1 },
+ { Inst::kIdB , Inst::kIdBsl_v + 1 },
+ { Inst::kIdCas , Inst::kIdCnt_v + 1 },
+ { Inst::kIdDc , Inst::kIdDup_v + 1 },
+ { Inst::kIdEon , Inst::kIdExt_v + 1 },
+ { Inst::kIdFabd_v , Inst::kIdFsub_v + 1 },
+ { Inst::kIdGmi , Inst::kIdGmi + 1 },
+ { Inst::kIdHint , Inst::kIdHvc + 1 },
+ { Inst::kIdIc , Inst::kIdIns_v + 1 },
+ { Inst::kIdNone , Inst::kIdNone + 1 },
+ { Inst::kIdNone , Inst::kIdNone + 1 },
+ { Inst::kIdLdadd , Inst::kIdLdur_v + 1 },
+ { Inst::kIdMadd , Inst::kIdMvni_v + 1 },
+ { Inst::kIdNeg , Inst::kIdNot_v + 1 },
+ { Inst::kIdOrn , Inst::kIdOrr_v + 1 },
+ { Inst::kIdPacda , Inst::kIdPmull2_v + 1 },
+ { Inst::kIdNone , Inst::kIdNone + 1 },
+ { Inst::kIdRbit , Inst::kIdRsubhn2_v + 1 },
+ { Inst::kIdSbc , Inst::kIdSxtl2_v + 1 },
+ { Inst::kIdTlbi , Inst::kIdTrn2_v + 1 },
+ { Inst::kIdUbfiz , Inst::kIdUzp2_v + 1 },
+ { Inst::kIdNone , Inst::kIdNone + 1 },
+ { Inst::kIdWfe , Inst::kIdWfi + 1 },
+ { Inst::kIdXaflag , Inst::kIdXtn2_v + 1 },
+ { Inst::kIdYield , Inst::kIdYield + 1 },
+ { Inst::kIdZip1_v , Inst::kIdZip2_v + 1 }
+};
+// ----------------------------------------------------------------------------
+// ${NameData:End}
+#endif
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM
diff --git a/erts/emulator/asmjit/arm/a64instdb.h b/erts/emulator/asmjit/arm/a64instdb.h
new file mode 100644
index 0000000000..eed7ed8a67
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64instdb.h
@@ -0,0 +1,96 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64INSTDB_H_INCLUDED
+#define ASMJIT_ARM_A64INSTDB_H_INCLUDED
+
+#include "../arm/a64globals.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \addtogroup asmjit_a64
+//! \{
+
+//! Instruction database (ARM/THUMB/AArch64).
+namespace InstDB {
+
+// ============================================================================
+// [asmjit::a64::InstDB::InstFlags]
+// ============================================================================
+
+//! Instruction flags.
+enum InstFlags : uint32_t {
+ //! The instruction provides conditional execution.
+ kInstFlagCond = 0x00000001u,
+ //! SIMD instruction that processes elements in pairs.
+ kInstFlagPair = 0x00000002u,
+ //! SIMD instruction that does widening (Long).
+ kInstFlagLong = 0x00000004u,
+ //! SIMD instruction that does narrowing (Narrow).
+ kInstFlagNarrow = 0x00000008u,
+ //! SIMD element access of half-words can only be used with v0..15.
+ kInstFlagVH0_15 = 0x00000010u
+};
+
+// ============================================================================
+// [asmjit::a64::InstDB::InstInfo]
+// ============================================================================
+
+//! Instruction information (ARM/THUMB/AArch64).
+struct InstInfo {
+ //! Instruction encoding type.
+ uint32_t _encoding : 8;
+ //! Index to data specific to each encoding type.
+ uint32_t _encodingDataIndex : 8;
+ uint32_t _reserved : 2;
+ //! Index to \ref _nameData.
+ uint32_t _nameDataIndex : 14;
+
+ uint16_t _rwInfoIndex;
+ uint16_t _flags;
+
+ //! \name Accessors
+ //! \{
+
+ inline uint32_t rwInfoIndex() const noexcept { return _rwInfoIndex; }
+ inline uint32_t flags() const noexcept { return _flags; }
+
+ inline bool hasFlag(uint32_t flag) const { return (_flags & flag) != 0; }
+
+ //! \}
+};
+
+ASMJIT_VARAPI const InstInfo _instInfoTable[];
+
+static inline const InstInfo& infoById(uint32_t instId) noexcept {
+ ASMJIT_ASSERT(Inst::isDefinedId(instId));
+ return _instInfoTable[instId];
+}
+
+} // {InstDB}
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_A64INSTDB_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64instdb_p.h b/erts/emulator/asmjit/arm/a64instdb_p.h
new file mode 100644
index 0000000000..c3841b978f
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64instdb_p.h
@@ -0,0 +1,903 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64INSTDB_H_P_INCLUDED
+#define ASMJIT_ARM_A64INSTDB_H_P_INCLUDED
+
+#include "../arm/a64instdb.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \cond INTERNAL
+//! \addtogroup asmjit_a64
+//! \{
+
+namespace InstDB {
+
+// ============================================================================
+// [asmjit::a64::InstDB - Constants Used by Instructions]
+// ============================================================================
+
+// GP register types supported by base instructions.
+static constexpr uint32_t kW = 0x1;
+static constexpr uint32_t kX = 0x2;
+static constexpr uint32_t kWX = 0x3;
+
+// GP high register IDs supported by the instruction.
+static constexpr uint32_t kZR = Gp::kIdZr;
+static constexpr uint32_t kSP = Gp::kIdSp;
+
+// ============================================================================
+// [asmjit::a64::InstDB - RWInfo]
+// ============================================================================
+
+enum RWInfoType : uint32_t {
+ kRWI_R,
+ kRWI_RW,
+ kRWI_RX,
+ kRWI_RRW,
+ kRWI_RWX,
+ kRWI_W,
+ kRWI_WRW,
+ kRWI_WRX,
+ kRWI_WRRW,
+ kRWI_WRRX,
+ kRWI_WW,
+ kRWI_X,
+ kRWI_XRX,
+ kRWI_XXRRX,
+
+ kRWI_LDn,
+ kRWI_STn,
+
+ kRWI_SpecialStart = kRWI_LDn
+};
+
+// ============================================================================
+// [asmjit::a64::InstDB - ElementType]
+// ============================================================================
+
+enum ElementType : uint8_t {
+ kET_None = Vec::kElementTypeNone,
+ kET_B = Vec::kElementTypeB,
+ kET_H = Vec::kElementTypeH,
+ kET_S = Vec::kElementTypeS,
+ kET_D = Vec::kElementTypeD,
+ kET_2H = Vec::kElementTypeH2,
+ kET_4B = Vec::kElementTypeB4
+};
+// ============================================================================
+// [asmjit::a64::InstDB - GpType]
+// ============================================================================
+
+enum GpType : uint8_t {
+ kGp_W,
+ kGp_X,
+ kGp_X_SP
+};
+
+// ============================================================================
+// [asmjit::a64::InstDB - OPSig]
+// ============================================================================
+
+enum kOpSignature : uint32_t {
+ kOp_GpW = GpW::kSignature,
+ kOp_GpX = GpX::kSignature,
+
+ kOp_B = VecB::kSignature,
+ kOp_H = VecH::kSignature,
+ kOp_S = VecS::kSignature,
+ kOp_D = VecD::kSignature,
+ kOp_Q = VecV::kSignature,
+
+ kOp_V8B = VecD::kSignature | Vec::kSignatureElementB,
+ kOp_V4H = VecD::kSignature | Vec::kSignatureElementH,
+ kOp_V2S = VecD::kSignature | Vec::kSignatureElementS,
+
+ kOp_V16B = VecV::kSignature | Vec::kSignatureElementB,
+ kOp_V8H = VecV::kSignature | Vec::kSignatureElementH,
+ kOp_V4S = VecV::kSignature | Vec::kSignatureElementS,
+ kOp_V2D = VecV::kSignature | Vec::kSignatureElementD
+};
+
+// ============================================================================
+// [asmjit::a64::InstDB - HFConv]
+// ============================================================================
+
+enum kHFConv : uint32_t {
+ //! FP16 version of the instruction is not available.
+ kHF_N,
+
+ //! Doesn't do any change to the opcode.
+ kHF_0,
+
+ kHF_A,
+ kHF_B,
+ kHF_C,
+ kHF_D,
+
+ kHF_Count
+};
+
+// ============================================================================
+// [asmjit::a64::InstDB - VOType]
+// ============================================================================
+
+//! Vector operand type combinations used by FP&SIMD instructions.
+enum VOType : uint32_t {
+ kVO_V_B,
+ kVO_V_BH,
+ kVO_V_BH_4S,
+ kVO_V_BHS,
+ kVO_V_BHS_D2,
+ kVO_V_HS,
+ kVO_V_S,
+
+ kVO_V_B8H4,
+ kVO_V_B8H4S2,
+ kVO_V_B8D1,
+ kVO_V_H4S2,
+
+ kVO_V_B16,
+ kVO_V_B16H8,
+ kVO_V_B16H8S4,
+ kVO_V_B16D2,
+ kVO_V_H8S4,
+ kVO_V_S4,
+ kVO_V_D2,
+
+ kVO_SV_BHS,
+ kVO_SV_B8H4S2,
+ kVO_SV_HS,
+ kVO_V_Any,
+ kVO_SV_Any,
+
+ kVO_Count
+};
+
+// ============================================================================
+// [asmjit::a64::InstDB - EncodingId]
+// ============================================================================
+
+// ${EncodingId:Begin}
+// ------------------- Automatically generated, do not edit -------------------
+enum EncodingId : uint32_t {
+ kEncodingNone = 0,
+ kEncodingBaseAddSub,
+ kEncodingBaseAdr,
+ kEncodingBaseAtDcIcTlbi,
+ kEncodingBaseAtomicCasp,
+ kEncodingBaseAtomicOp,
+ kEncodingBaseAtomicSt,
+ kEncodingBaseBfc,
+ kEncodingBaseBfi,
+ kEncodingBaseBfm,
+ kEncodingBaseBfx,
+ kEncodingBaseBranchCmp,
+ kEncodingBaseBranchReg,
+ kEncodingBaseBranchRel,
+ kEncodingBaseBranchTst,
+ kEncodingBaseCCmp,
+ kEncodingBaseCInc,
+ kEncodingBaseCSel,
+ kEncodingBaseCSet,
+ kEncodingBaseCmpCmn,
+ kEncodingBaseExtend,
+ kEncodingBaseExtract,
+ kEncodingBaseLdSt,
+ kEncodingBaseLdpStp,
+ kEncodingBaseLdxp,
+ kEncodingBaseLogical,
+ kEncodingBaseMov,
+ kEncodingBaseMovKNZ,
+ kEncodingBaseMrs,
+ kEncodingBaseMsr,
+ kEncodingBaseMvnNeg,
+ kEncodingBaseOp,
+ kEncodingBaseOpImm,
+ kEncodingBaseR,
+ kEncodingBaseRM_NoImm,
+ kEncodingBaseRM_SImm10,
+ kEncodingBaseRM_SImm9,
+ kEncodingBaseRR,
+ kEncodingBaseRRII,
+ kEncodingBaseRRR,
+ kEncodingBaseRRRR,
+ kEncodingBaseRev,
+ kEncodingBaseShift,
+ kEncodingBaseStx,
+ kEncodingBaseStxp,
+ kEncodingBaseSys,
+ kEncodingBaseTst,
+ kEncodingFSimdPair,
+ kEncodingFSimdSV,
+ kEncodingFSimdVV,
+ kEncodingFSimdVVV,
+ kEncodingFSimdVVVV,
+ kEncodingFSimdVVVe,
+ kEncodingISimdPair,
+ kEncodingISimdSV,
+ kEncodingISimdVV,
+ kEncodingISimdVVV,
+ kEncodingISimdVVVI,
+ kEncodingISimdVVVV,
+ kEncodingISimdVVVVx,
+ kEncodingISimdVVVe,
+ kEncodingISimdVVVx,
+ kEncodingISimdVVx,
+ kEncodingISimdWWV,
+ kEncodingSimdBicOrr,
+ kEncodingSimdCmp,
+ kEncodingSimdDot,
+ kEncodingSimdDup,
+ kEncodingSimdFcadd,
+ kEncodingSimdFccmpFccmpe,
+ kEncodingSimdFcm,
+ kEncodingSimdFcmla,
+ kEncodingSimdFcmpFcmpe,
+ kEncodingSimdFcsel,
+ kEncodingSimdFcvt,
+ kEncodingSimdFcvtLN,
+ kEncodingSimdFcvtSV,
+ kEncodingSimdFmlal,
+ kEncodingSimdFmov,
+ kEncodingSimdIns,
+ kEncodingSimdLdNStN,
+ kEncodingSimdLdSt,
+ kEncodingSimdLdpStp,
+ kEncodingSimdLdurStur,
+ kEncodingSimdMov,
+ kEncodingSimdMoviMvni,
+ kEncodingSimdShift,
+ kEncodingSimdShiftES,
+ kEncodingSimdSm3tt,
+ kEncodingSimdSmovUmov,
+ kEncodingSimdSxtlUxtl,
+ kEncodingSimdTblTbx
+};
+// ----------------------------------------------------------------------------
+// ${EncodingId:End}
+
+// ============================================================================
+// [asmjit::a64::InstDB::EncodingData]
+// ============================================================================
+
+namespace EncodingData {
+
+#define M_OPCODE(field, bits) \
+ uint32_t _##field : bits; \
+ inline constexpr uint32_t field() const noexcept { return uint32_t(_##field) << (32 - bits); }
+
+struct BaseOp {
+ uint32_t opcode;
+};
+
+struct BaseOpImm {
+ uint32_t opcode;
+ uint16_t immBits;
+ uint16_t immOffset;
+};
+
+struct BaseR {
+ uint32_t opcode;
+ uint32_t rType : 8;
+ uint32_t rHiId : 8;
+ uint32_t rShift : 8;
+};
+
+struct BaseRR {
+ uint32_t opcode;
+ uint32_t aType : 2;
+ uint32_t aHiId : 6;
+ uint32_t aShift : 5;
+ uint32_t bType : 2;
+ uint32_t bHiId : 6;
+ uint32_t bShift : 5;
+ uint32_t uniform : 1;
+};
+
+struct BaseRRR {
+ M_OPCODE(opcode, 22)
+ uint32_t aType : 2;
+ uint32_t aHiId : 6;
+ uint32_t bType : 2;
+ uint32_t bHiId : 6;
+ uint32_t cType : 2;
+ uint32_t cHiId : 6;
+ uint32_t uniform : 1;
+};
+
+struct BaseRRRR {
+ M_OPCODE(opcode, 22)
+ uint32_t aType : 2;
+ uint32_t aHiId : 6;
+ uint32_t bType : 2;
+ uint32_t bHiId : 6;
+ uint32_t cType : 2;
+ uint32_t cHiId : 6;
+ uint32_t dType : 2;
+ uint32_t dHiId : 6;
+ uint32_t uniform : 1;
+};
+
+struct BaseRRII {
+ M_OPCODE(opcode, 22)
+ uint32_t aType : 2;
+ uint32_t aHiId : 6;
+ uint32_t bType : 2;
+ uint32_t bHiId : 6;
+ uint32_t aImmSize : 6;
+ uint32_t aImmDiscardLsb : 5;
+ uint32_t aImmOffset : 5;
+ uint32_t bImmSize : 6;
+ uint32_t bImmDiscardLsb : 5;
+ uint32_t bImmOffset : 5;
+};
+
+struct BaseAtDcIcTlbi {
+ uint32_t immVerifyMask : 14;
+ uint32_t immVerifyData : 14;
+ uint32_t mandatoryReg : 1;
+};
+
+struct BaseAdcSbc {
+ uint32_t opcode;
+};
+
+struct BaseAddSub {
+ uint32_t shiftedOp : 10; // sf|.......|Sh|.|Rm| Imm:6 |Rn|Rd|
+ uint32_t extendedOp : 10; // sf|.......|..|.|Rm|Opt|Imm3|Rn|Rd|
+ uint32_t immediateOp: 10; // sf|.......|Sh| Imm:12 |Rn|Rd|
+};
+
+struct BaseAdr {
+ M_OPCODE(opcode, 22)
+ uint32_t offsetType : 10;
+};
+
+struct BaseBfm {
+ uint32_t opcode; // sf|........|N|ImmR:6|ImmS:6|Rn|Rd|
+};
+
+struct BaseCmpCmn {
+ uint32_t shiftedOp : 10; // sf|.......|Sh|.|Rm| Imm:6 |Rn|11111|
+ uint32_t extendedOp : 10; // sf|.......|..|.|Rm|Opt|Imm3|Rn|11111|
+ uint32_t immediateOp: 10; // sf|.......|Sh| Imm:12 |Rn|11111|
+};
+
+struct BaseExtend {
+ M_OPCODE(opcode, 22) // sf|........|N|......|......|Rn|Rd|
+ uint32_t rType : 2;
+ uint32_t u : 1;
+};
+
+struct BaseLogical {
+ uint32_t shiftedOp : 10; // sf|.......|Sh|.|Rm| Imm:6 |Rn|Rd|
+ uint32_t immediateOp: 10; // sf|........|N|ImmR:6|ImmS:6|Rn|Rd|
+ uint32_t negateImm : 1 ; // True if this is an operation that must negate IMM.
+};
+
+struct BaseMvnNeg {
+ uint32_t opcode;
+};
+
+struct BaseShift {
+ M_OPCODE(registerOp, 22)
+ M_OPCODE(immediateOp, 22)
+ uint32_t ror : 2;
+};
+
+struct BaseTst {
+ uint32_t shiftedOp : 10; // sf|.......|Sh|.|Rm| Imm:6 |Rn|11111|
+ uint32_t immediateOp: 10; // sf|........|N|ImmR:6|ImmS:6|Rn|11111|
+};
+
+struct BaseRM_NoImm {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t rHiId : 6;
+ uint32_t xOffset : 5;
+};
+
+struct BaseRM_SImm9 {
+ M_OPCODE(offsetOp, 22)
+ M_OPCODE(prePostOp, 22)
+ uint32_t rType : 2;
+ uint32_t rHiId : 6;
+ uint32_t xOffset : 5;
+ uint32_t immShift : 4;
+};
+
+struct BaseRM_SImm10 {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t rHiId : 6;
+ uint32_t xOffset : 5;
+ uint32_t immShift : 4;
+};
+
+struct BaseLdSt {
+ uint32_t uOffsetOp : 10;
+ uint32_t prePostOp : 11;
+ uint32_t registerOp : 11;
+ uint32_t literalOp : 8;
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+ uint32_t uOffsetShift : 3;
+ uint32_t uAltInstId : 14;
+};
+
+struct BaseLdpStp {
+ uint32_t offsetOp : 10;
+ uint32_t prePostOp : 10;
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+ uint32_t offsetShift : 3;
+};
+
+struct BaseStx {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+};
+
+struct BaseLdxp {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+};
+
+struct BaseStxp {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+};
+
+struct BaseAtomicOp {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+ uint32_t zr : 1;
+};
+
+struct BaseAtomicSt {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+};
+
+struct BaseAtomicCasp {
+ M_OPCODE(opcode, 22)
+ uint32_t rType : 2;
+ uint32_t xOffset : 5;
+};
+
+typedef BaseOp BaseBranchReg;
+typedef BaseOp BaseBranchRel;
+typedef BaseOp BaseBranchCmp;
+typedef BaseOp BaseBranchTst;
+typedef BaseOp BaseExtract;
+typedef BaseOp BaseBfc;
+typedef BaseOp BaseBfi;
+typedef BaseOp BaseBfx;
+typedef BaseOp BaseCCmp;
+typedef BaseOp BaseCInc;
+typedef BaseOp BaseCSet;
+typedef BaseOp BaseCSel;
+typedef BaseOp BaseMovKNZ;
+typedef BaseOp BaseMull;
+
+struct FSimdGeneric {
+ uint32_t _scalarOp : 28;
+ uint32_t _scalarHf : 4;
+ uint32_t _vectorOp : 28;
+ uint32_t _vectorHf : 4;
+
+ constexpr uint32_t scalarOp() const noexcept { return uint32_t(_scalarOp) << 10; }
+ constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
+ constexpr uint32_t scalarHf() const noexcept { return uint32_t(_scalarHf); }
+ constexpr uint32_t vectorHf() const noexcept { return uint32_t(_vectorHf); }
+};
+
+typedef FSimdGeneric FSimdVV;
+typedef FSimdGeneric FSimdVVV;
+typedef FSimdGeneric FSimdVVVV;
+
+struct FSimdSV {
+ uint32_t opcode;
+};
+
+struct FSimdVVVe {
+ uint32_t _scalarOp : 28;
+ uint32_t _scalarHf : 4;
+ uint32_t _vectorOp;
+ uint32_t _elementOp;
+
+ constexpr uint32_t scalarOp() const noexcept { return uint32_t(_scalarOp) << 10; }
+ constexpr uint32_t scalarHf() const noexcept { return uint32_t(_scalarHf); };
+ constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
+ constexpr uint32_t vectorHf() const noexcept { return kHF_C; }
+ constexpr uint32_t elementScalarOp() const noexcept { return (uint32_t(_elementOp) << 10) | (0x5u << 28); }
+ constexpr uint32_t elementVectorOp() const noexcept { return (uint32_t(_elementOp) << 10); }
+};
+
+struct SimdFcadd {
+ uint32_t _opcode;
+
+ constexpr uint32_t opcode() const noexcept { return _opcode << 10; }
+};
+
+struct SimdFcmla {
+ uint32_t _regularOp;
+ uint32_t _elementOp;
+
+ constexpr uint32_t regularOp() const noexcept { return uint32_t(_regularOp) << 10; }
+ constexpr uint32_t elementOp() const noexcept { return (uint32_t(_elementOp) << 10); }
+};
+
+struct SimdFccmpFccmpe {
+ uint32_t _opcode;
+ constexpr uint32_t opcode() const noexcept { return _opcode; }
+};
+
+struct SimdFcm {
+ uint32_t _registerOp : 28;
+ uint32_t _registerHf : 4;
+
+ uint32_t _zeroOp : 28;
+
+ constexpr bool hasRegisterOp() const noexcept { return _registerOp != 0; }
+ constexpr bool hasZeroOp() const noexcept { return _zeroOp != 0; }
+
+ constexpr uint32_t registerScalarOp() const noexcept { return (uint32_t(_registerOp) << 10) | (0x5u << 28); }
+ constexpr uint32_t registerVectorOp() const noexcept { return uint32_t(_registerOp) << 10; }
+ constexpr uint32_t registerScalarHf() const noexcept { return uint32_t(_registerHf); }
+ constexpr uint32_t registerVectorHf() const noexcept { return uint32_t(_registerHf); }
+
+ constexpr uint32_t zeroScalarOp() const noexcept { return (uint32_t(_zeroOp) << 10) | (0x5u << 28); }
+ constexpr uint32_t zeroVectorOp() const noexcept { return (uint32_t(_zeroOp) << 10); }
+};
+
+struct SimdFcmpFcmpe {
+ uint32_t _opcode;
+ constexpr uint32_t opcode() const noexcept { return _opcode; }
+};
+
+struct SimdFcvtLN {
+ uint32_t _opcode : 22;
+ uint32_t _isCvtxn : 1;
+ uint32_t _hasScalar : 1;
+
+ constexpr uint32_t scalarOp() const noexcept { return (uint32_t(_opcode) << 10) | (0x5u << 28); }
+ constexpr uint32_t vectorOp() const noexcept { return (uint32_t(_opcode) << 10); }
+
+ constexpr uint32_t isCvtxn() const noexcept { return _isCvtxn; }
+ constexpr uint32_t hasScalar() const noexcept { return _hasScalar; }
+};
+
+struct SimdFcvtSV {
+ uint32_t _vectorIntOp;
+ uint32_t _vectorFpOp;
+ uint32_t _generalOp : 31;
+ uint32_t _isFloatToInt : 1;
+
+ constexpr uint32_t scalarIntOp() const noexcept { return (uint32_t(_vectorIntOp) << 10) | (0x5u << 28); }
+ constexpr uint32_t vectorIntOp() const noexcept { return uint32_t(_vectorIntOp) << 10; }
+ constexpr uint32_t scalarFpOp() const noexcept { return (uint32_t(_vectorFpOp) << 10) | (0x5u << 28); }
+ constexpr uint32_t vectorFpOp() const noexcept { return uint32_t(_vectorFpOp) << 10; }
+ constexpr uint32_t generalOp() const noexcept { return (uint32_t(_generalOp) << 10); }
+
+ constexpr uint32_t isFloatToInt() const noexcept { return _isFloatToInt; }
+ constexpr uint32_t isFixedPoint() const noexcept { return _vectorFpOp != 0; }
+};
+
+struct SimdFmlal {
+ uint32_t _vectorOp;
+ uint32_t _elementOp;
+ uint8_t _optionalQ;
+ uint8_t tA;
+ uint8_t tB;
+ uint8_t tElement;
+
+ constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
+ constexpr uint32_t elementOp() const noexcept { return uint32_t(_elementOp) << 10; }
+ constexpr uint32_t optionalQ() const noexcept { return _optionalQ; }
+};
+
+struct FSimdPair {
+ uint32_t _scalarOp;
+ uint32_t _vectorOp;
+
+ constexpr uint32_t scalarOp() const noexcept { return uint32_t(_scalarOp) << 10; }
+ constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
+};
+
+struct ISimdVV {
+ M_OPCODE(opcode, 22)
+ uint32_t vecOpType : 6;
+};
+
+struct ISimdVVx {
+ M_OPCODE(opcode, 22)
+ uint32_t op0Signature;
+ uint32_t op1Signature;
+};
+
+struct ISimdSV {
+ M_OPCODE(opcode, 22)
+ uint32_t vecOpType : 6;
+};
+
+struct ISimdVVV {
+ M_OPCODE(opcode, 22)
+ uint32_t vecOpType : 6;
+};
+
+struct ISimdVVVx {
+ M_OPCODE(opcode, 22)
+ uint32_t op0Signature;
+ uint32_t op1Signature;
+ uint32_t op2Signature;
+};
+
+struct ISimdWWV {
+ M_OPCODE(opcode, 22)
+ uint32_t vecOpType : 6;
+};
+
+struct ISimdVVVe {
+ uint32_t regularOp : 26; // 22 bits used.
+ uint32_t regularVecType : 6;
+ uint32_t elementOp : 26; // 22 bits used.
+ uint32_t elementVecType : 6;
+};
+
+struct ISimdVVVI {
+ M_OPCODE(opcode, 22)
+ uint32_t vecOpType : 6;
+ uint32_t immSize : 4;
+ uint32_t immShift : 4;
+ uint32_t imm64HasOneBitLess : 1;
+};
+
+struct ISimdVVVV {
+ uint32_t opcode : 22;
+ uint32_t vecOpType : 6;
+};
+
+struct ISimdVVVVx {
+ uint32_t opcode;
+ uint32_t op0Signature;
+ uint32_t op1Signature;
+ uint32_t op2Signature;
+ uint32_t op3Signature;
+};
+
+struct SimdBicOrr {
+ uint32_t registerOp; // 22 bits used.
+ uint32_t immediateOp; // 22 bits used.
+};
+
+struct SimdCmp {
+ uint32_t regOp;
+ uint32_t zeroOp : 22;
+ uint32_t vecOpType : 6;
+};
+
+struct SimdDot {
+ uint32_t vectorOp; // 22 bits used.
+ uint32_t elementOp; // 22 bits used.
+ uint8_t tA; // Element-type of the first operand.
+ uint8_t tB; // Element-type of the second and third operands.
+ uint8_t tElement; // Element-type of the element index[] operand.
+};
+
+struct SimdMoviMvni {
+ uint32_t opcode : 31;
+ uint32_t inverted : 1;
+};
+
+struct SimdLdSt {
+ uint32_t uOffsetOp : 10;
+ uint32_t prePostOp : 11;
+ uint32_t registerOp : 11;
+ uint32_t literalOp : 8;
+ uint32_t uAltInstId : 16;
+};
+
+struct SimdLdNStN {
+ uint32_t singleOp;
+ uint32_t multipleOp : 22;
+ uint32_t n : 3;
+ uint32_t replicate : 1;
+};
+
+struct SimdLdpStp {
+ uint32_t offsetOp : 10;
+ uint32_t prePostOp : 10;
+};
+
+struct SimdLdurStur {
+ uint32_t opcode;
+};
+
+struct ISimdPair {
+ uint32_t opcode2; // 22 bits used.
+ uint32_t opcode3 : 26; // 22 bits used.
+ uint32_t opType3 : 6;
+};
+
+struct SimdShift {
+ uint32_t registerOp; // 22 bits used.
+ uint32_t immediateOp : 22; // 22 bits used.
+ uint32_t invertedImm : 1;
+ uint32_t vecOpType : 6;
+};
+
+struct SimdShiftES {
+ uint32_t opcode : 22;
+ uint32_t vecOpType : 6;
+};
+
+struct SimdSm3tt {
+ uint32_t opcode;
+};
+
+struct SimdSmovUmov {
+ uint32_t opcode : 22;
+ uint32_t vecOpType : 6;
+ uint32_t isSigned : 1;
+};
+
+struct SimdSxtlUxtl {
+ uint32_t opcode : 22;
+ uint32_t vecOpType : 6;
+};
+
+struct SimdTblTbx {
+ uint32_t opcode;
+};
+
+#undef M_OPCODE
+
+// ${EncodingDataForward:Begin}
+// ------------------- Automatically generated, do not edit -------------------
+extern const BaseAddSub baseAddSub[4];
+extern const BaseAdr baseAdr[2];
+extern const BaseAtDcIcTlbi baseAtDcIcTlbi[4];
+extern const BaseAtomicCasp baseAtomicCasp[4];
+extern const BaseAtomicOp baseAtomicOp[123];
+extern const BaseAtomicSt baseAtomicSt[48];
+extern const BaseBfc baseBfc[1];
+extern const BaseBfi baseBfi[3];
+extern const BaseBfm baseBfm[3];
+extern const BaseBfx baseBfx[3];
+extern const BaseBranchCmp baseBranchCmp[2];
+extern const BaseBranchReg baseBranchReg[3];
+extern const BaseBranchRel baseBranchRel[2];
+extern const BaseBranchTst baseBranchTst[2];
+extern const BaseCCmp baseCCmp[2];
+extern const BaseCInc baseCInc[3];
+extern const BaseCSel baseCSel[4];
+extern const BaseCSet baseCSet[2];
+extern const BaseCmpCmn baseCmpCmn[2];
+extern const BaseExtend baseExtend[5];
+extern const BaseExtract baseExtract[1];
+extern const BaseLdSt baseLdSt[9];
+extern const BaseLdpStp baseLdpStp[6];
+extern const BaseLdxp baseLdxp[2];
+extern const BaseLogical baseLogical[8];
+extern const BaseMovKNZ baseMovKNZ[3];
+extern const BaseMvnNeg baseMvnNeg[3];
+extern const BaseOp baseOp[23];
+extern const BaseOpImm baseOpImm[14];
+extern const BaseR baseR[10];
+extern const BaseRM_NoImm baseRM_NoImm[21];
+extern const BaseRM_SImm10 baseRM_SImm10[2];
+extern const BaseRM_SImm9 baseRM_SImm9[23];
+extern const BaseRR baseRR[15];
+extern const BaseRRII baseRRII[2];
+extern const BaseRRR baseRRR[26];
+extern const BaseRRRR baseRRRR[6];
+extern const BaseShift baseShift[8];
+extern const BaseStx baseStx[3];
+extern const BaseStxp baseStxp[2];
+extern const BaseTst baseTst[1];
+extern const FSimdPair fSimdPair[5];
+extern const FSimdSV fSimdSV[4];
+extern const FSimdVV fSimdVV[17];
+extern const FSimdVVV fSimdVVV[13];
+extern const FSimdVVVV fSimdVVVV[4];
+extern const FSimdVVVe fSimdVVVe[4];
+extern const ISimdPair iSimdPair[1];
+extern const ISimdSV iSimdSV[7];
+extern const ISimdVV iSimdVV[29];
+extern const ISimdVVV iSimdVVV[65];
+extern const ISimdVVVI iSimdVVVI[2];
+extern const ISimdVVVV iSimdVVVV[2];
+extern const ISimdVVVVx iSimdVVVVx[1];
+extern const ISimdVVVe iSimdVVVe[25];
+extern const ISimdVVVx iSimdVVVx[17];
+extern const ISimdVVx iSimdVVx[13];
+extern const ISimdWWV iSimdWWV[8];
+extern const SimdBicOrr simdBicOrr[2];
+extern const SimdCmp simdCmp[7];
+extern const SimdDot simdDot[5];
+extern const SimdFcadd simdFcadd[1];
+extern const SimdFccmpFccmpe simdFccmpFccmpe[2];
+extern const SimdFcm simdFcm[5];
+extern const SimdFcmla simdFcmla[1];
+extern const SimdFcmpFcmpe simdFcmpFcmpe[2];
+extern const SimdFcvtLN simdFcvtLN[6];
+extern const SimdFcvtSV simdFcvtSV[12];
+extern const SimdFmlal simdFmlal[6];
+extern const SimdLdNStN simdLdNStN[12];
+extern const SimdLdSt simdLdSt[2];
+extern const SimdLdpStp simdLdpStp[4];
+extern const SimdLdurStur simdLdurStur[2];
+extern const SimdMoviMvni simdMoviMvni[2];
+extern const SimdShift simdShift[40];
+extern const SimdShiftES simdShiftES[2];
+extern const SimdSm3tt simdSm3tt[4];
+extern const SimdSmovUmov simdSmovUmov[2];
+extern const SimdSxtlUxtl simdSxtlUxtl[4];
+extern const SimdTblTbx simdTblTbx[2];
+// ----------------------------------------------------------------------------
+// ${EncodingDataForward:End}
+
+} // {EncodingData}
+
+// ============================================================================
+// [asmjit::a64::InstDB - InstNameIndex]
+// ============================================================================
+
+// ${NameLimits:Begin}
+// ------------------- Automatically generated, do not edit -------------------
+enum : uint32_t { kMaxNameSize = 9 };
+// ----------------------------------------------------------------------------
+// ${NameLimits:End}
+
+struct InstNameIndex {
+ uint16_t start;
+ uint16_t end;
+};
+
+// ============================================================================
+// [asmjit::a64::InstDB - Tables]
+// ============================================================================
+
+#ifndef ASMJIT_NO_TEXT
+extern const char _nameData[];
+extern const InstNameIndex instNameIndex[26];
+#endif // !ASMJIT_NO_TEXT
+
+} // {InstDB}
+
+//! \}
+//! \endcond
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_A64_ARMINSTDB_H_P_INCLUDED
+
diff --git a/erts/emulator/asmjit/arm/a64operand.cpp b/erts/emulator/asmjit/arm/a64operand.cpp
new file mode 100644
index 0000000000..3f2f02b9e7
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64operand.cpp
@@ -0,0 +1,77 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM)
+
+#include "../core/misc_p.h"
+#include "../arm/a64operand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// ============================================================================
+// [asmjit::ArmOperand - Unit]
+// ============================================================================
+
+#if defined(ASMJIT_TEST)
+UNIT(a64_operand) {
+ INFO("Checking if a64::reg(...) matches built-in IDs");
+ EXPECT(w(5) == w5);
+ EXPECT(x(5) == x5);
+
+ INFO("Checking Gp register properties");
+ EXPECT(Gp().isReg() == true);
+ EXPECT(w0.isReg() == true);
+ EXPECT(x0.isReg() == true);
+ EXPECT(w0.id() == 0);
+ EXPECT(x0.id() == 0);
+ EXPECT(wzr.id() == Gp::kIdZr);
+ EXPECT(xzr.id() == Gp::kIdZr);
+ EXPECT(wsp.id() == Gp::kIdSp);
+ EXPECT(sp.id() == Gp::kIdSp);
+ EXPECT(w0.size() == 4);
+ EXPECT(x0.size() == 8);
+ EXPECT(w0.type() == Reg::kTypeGpW);
+ EXPECT(x0.type() == Reg::kTypeGpX);
+ EXPECT(w0.group() == Reg::kGroupGp);
+ EXPECT(x0.group() == Reg::kGroupGp);
+
+ INFO("Checking Vec register properties");
+ Vec vd = v15.d(1);
+ EXPECT(vd.isVecD2());
+ EXPECT(vd.elementType() == Vec::kElementTypeD);
+ EXPECT(vd.hasElementIndex());
+ EXPECT(vd.elementIndex() == 1);
+
+ Vec vs = v15.s(3);
+ EXPECT(vs.id() == 15);
+ EXPECT(vs.isVecS4());
+ EXPECT(vs.elementType() == Vec::kElementTypeS);
+ EXPECT(vs.hasElementIndex());
+ EXPECT(vs.elementIndex() == 3);
+}
+#endif
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM
diff --git a/erts/emulator/asmjit/arm/a64operand.h b/erts/emulator/asmjit/arm/a64operand.h
new file mode 100644
index 0000000000..f10d48df08
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64operand.h
@@ -0,0 +1,329 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64OPERAND_H_INCLUDED
+#define ASMJIT_ARM_A64OPERAND_H_INCLUDED
+
+#include "../arm/armoperand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \addtogroup asmjit_a64
+//! \{
+
+using arm::Reg;
+using arm::Mem;
+using arm::Gp;
+using arm::GpW;
+using arm::GpX;
+using arm::Vec;
+using arm::VecB;
+using arm::VecH;
+using arm::VecS;
+using arm::VecD;
+using arm::VecV;
+
+#ifndef _DOXYGEN
+namespace regs {
+#endif
+
+using namespace ::asmjit::arm::regs;
+
+static constexpr GpW w0 = GpW(0);
+static constexpr GpW w1 = GpW(1);
+static constexpr GpW w2 = GpW(2);
+static constexpr GpW w3 = GpW(3);
+static constexpr GpW w4 = GpW(4);
+static constexpr GpW w5 = GpW(5);
+static constexpr GpW w6 = GpW(6);
+static constexpr GpW w7 = GpW(7);
+static constexpr GpW w8 = GpW(8);
+static constexpr GpW w9 = GpW(9);
+static constexpr GpW w10 = GpW(10);
+static constexpr GpW w11 = GpW(11);
+static constexpr GpW w12 = GpW(12);
+static constexpr GpW w13 = GpW(13);
+static constexpr GpW w14 = GpW(14);
+static constexpr GpW w15 = GpW(15);
+static constexpr GpW w16 = GpW(16);
+static constexpr GpW w17 = GpW(17);
+static constexpr GpW w18 = GpW(18);
+static constexpr GpW w19 = GpW(19);
+static constexpr GpW w20 = GpW(20);
+static constexpr GpW w21 = GpW(21);
+static constexpr GpW w22 = GpW(22);
+static constexpr GpW w23 = GpW(23);
+static constexpr GpW w24 = GpW(24);
+static constexpr GpW w25 = GpW(25);
+static constexpr GpW w26 = GpW(26);
+static constexpr GpW w27 = GpW(27);
+static constexpr GpW w28 = GpW(28);
+static constexpr GpW w29 = GpW(29);
+static constexpr GpW w30 = GpW(30);
+static constexpr GpW wzr = GpW(Gp::kIdZr);
+static constexpr GpW wsp = GpW(Gp::kIdSp);
+
+static constexpr GpX x0 = GpX(0);
+static constexpr GpX x1 = GpX(1);
+static constexpr GpX x2 = GpX(2);
+static constexpr GpX x3 = GpX(3);
+static constexpr GpX x4 = GpX(4);
+static constexpr GpX x5 = GpX(5);
+static constexpr GpX x6 = GpX(6);
+static constexpr GpX x7 = GpX(7);
+static constexpr GpX x8 = GpX(8);
+static constexpr GpX x9 = GpX(9);
+static constexpr GpX x10 = GpX(10);
+static constexpr GpX x11 = GpX(11);
+static constexpr GpX x12 = GpX(12);
+static constexpr GpX x13 = GpX(13);
+static constexpr GpX x14 = GpX(14);
+static constexpr GpX x15 = GpX(15);
+static constexpr GpX x16 = GpX(16);
+static constexpr GpX x17 = GpX(17);
+static constexpr GpX x18 = GpX(18);
+static constexpr GpX x19 = GpX(19);
+static constexpr GpX x20 = GpX(20);
+static constexpr GpX x21 = GpX(21);
+static constexpr GpX x22 = GpX(22);
+static constexpr GpX x23 = GpX(23);
+static constexpr GpX x24 = GpX(24);
+static constexpr GpX x25 = GpX(25);
+static constexpr GpX x26 = GpX(26);
+static constexpr GpX x27 = GpX(27);
+static constexpr GpX x28 = GpX(28);
+static constexpr GpX x29 = GpX(29);
+static constexpr GpX x30 = GpX(30);
+static constexpr GpX xzr = GpX(Gp::kIdZr);
+static constexpr GpX sp = GpX(Gp::kIdSp);
+
+static constexpr VecB b0 = VecB(0);
+static constexpr VecB b1 = VecB(1);
+static constexpr VecB b2 = VecB(2);
+static constexpr VecB b3 = VecB(3);
+static constexpr VecB b4 = VecB(4);
+static constexpr VecB b5 = VecB(5);
+static constexpr VecB b6 = VecB(6);
+static constexpr VecB b7 = VecB(7);
+static constexpr VecB b8 = VecB(8);
+static constexpr VecB b9 = VecB(9);
+static constexpr VecB b10 = VecB(10);
+static constexpr VecB b11 = VecB(11);
+static constexpr VecB b12 = VecB(12);
+static constexpr VecB b13 = VecB(13);
+static constexpr VecB b14 = VecB(14);
+static constexpr VecB b15 = VecB(15);
+static constexpr VecB b16 = VecB(16);
+static constexpr VecB b17 = VecB(17);
+static constexpr VecB b18 = VecB(18);
+static constexpr VecB b19 = VecB(19);
+static constexpr VecB b20 = VecB(20);
+static constexpr VecB b21 = VecB(21);
+static constexpr VecB b22 = VecB(22);
+static constexpr VecB b23 = VecB(23);
+static constexpr VecB b24 = VecB(24);
+static constexpr VecB b25 = VecB(25);
+static constexpr VecB b26 = VecB(26);
+static constexpr VecB b27 = VecB(27);
+static constexpr VecB b28 = VecB(28);
+static constexpr VecB b29 = VecB(29);
+static constexpr VecB b30 = VecB(30);
+static constexpr VecB b31 = VecB(31);
+
+static constexpr VecH h0 = VecH(0);
+static constexpr VecH h1 = VecH(1);
+static constexpr VecH h2 = VecH(2);
+static constexpr VecH h3 = VecH(3);
+static constexpr VecH h4 = VecH(4);
+static constexpr VecH h5 = VecH(5);
+static constexpr VecH h6 = VecH(6);
+static constexpr VecH h7 = VecH(7);
+static constexpr VecH h8 = VecH(8);
+static constexpr VecH h9 = VecH(9);
+static constexpr VecH h10 = VecH(10);
+static constexpr VecH h11 = VecH(11);
+static constexpr VecH h12 = VecH(12);
+static constexpr VecH h13 = VecH(13);
+static constexpr VecH h14 = VecH(14);
+static constexpr VecH h15 = VecH(15);
+static constexpr VecH h16 = VecH(16);
+static constexpr VecH h17 = VecH(17);
+static constexpr VecH h18 = VecH(18);
+static constexpr VecH h19 = VecH(19);
+static constexpr VecH h20 = VecH(20);
+static constexpr VecH h21 = VecH(21);
+static constexpr VecH h22 = VecH(22);
+static constexpr VecH h23 = VecH(23);
+static constexpr VecH h24 = VecH(24);
+static constexpr VecH h25 = VecH(25);
+static constexpr VecH h26 = VecH(26);
+static constexpr VecH h27 = VecH(27);
+static constexpr VecH h28 = VecH(28);
+static constexpr VecH h29 = VecH(29);
+static constexpr VecH h30 = VecH(30);
+static constexpr VecH h31 = VecH(31);
+
+static constexpr VecS s0 = VecS(0);
+static constexpr VecS s1 = VecS(1);
+static constexpr VecS s2 = VecS(2);
+static constexpr VecS s3 = VecS(3);
+static constexpr VecS s4 = VecS(4);
+static constexpr VecS s5 = VecS(5);
+static constexpr VecS s6 = VecS(6);
+static constexpr VecS s7 = VecS(7);
+static constexpr VecS s8 = VecS(8);
+static constexpr VecS s9 = VecS(9);
+static constexpr VecS s10 = VecS(10);
+static constexpr VecS s11 = VecS(11);
+static constexpr VecS s12 = VecS(12);
+static constexpr VecS s13 = VecS(13);
+static constexpr VecS s14 = VecS(14);
+static constexpr VecS s15 = VecS(15);
+static constexpr VecS s16 = VecS(16);
+static constexpr VecS s17 = VecS(17);
+static constexpr VecS s18 = VecS(18);
+static constexpr VecS s19 = VecS(19);
+static constexpr VecS s20 = VecS(20);
+static constexpr VecS s21 = VecS(21);
+static constexpr VecS s22 = VecS(22);
+static constexpr VecS s23 = VecS(23);
+static constexpr VecS s24 = VecS(24);
+static constexpr VecS s25 = VecS(25);
+static constexpr VecS s26 = VecS(26);
+static constexpr VecS s27 = VecS(27);
+static constexpr VecS s28 = VecS(28);
+static constexpr VecS s29 = VecS(29);
+static constexpr VecS s30 = VecS(30);
+static constexpr VecS s31 = VecS(31);
+
+static constexpr VecD d0 = VecD(0);
+static constexpr VecD d1 = VecD(1);
+static constexpr VecD d2 = VecD(2);
+static constexpr VecD d3 = VecD(3);
+static constexpr VecD d4 = VecD(4);
+static constexpr VecD d5 = VecD(5);
+static constexpr VecD d6 = VecD(6);
+static constexpr VecD d7 = VecD(7);
+static constexpr VecD d8 = VecD(8);
+static constexpr VecD d9 = VecD(9);
+static constexpr VecD d10 = VecD(10);
+static constexpr VecD d11 = VecD(11);
+static constexpr VecD d12 = VecD(12);
+static constexpr VecD d13 = VecD(13);
+static constexpr VecD d14 = VecD(14);
+static constexpr VecD d15 = VecD(15);
+static constexpr VecD d16 = VecD(16);
+static constexpr VecD d17 = VecD(17);
+static constexpr VecD d18 = VecD(18);
+static constexpr VecD d19 = VecD(19);
+static constexpr VecD d20 = VecD(20);
+static constexpr VecD d21 = VecD(21);
+static constexpr VecD d22 = VecD(22);
+static constexpr VecD d23 = VecD(23);
+static constexpr VecD d24 = VecD(24);
+static constexpr VecD d25 = VecD(25);
+static constexpr VecD d26 = VecD(26);
+static constexpr VecD d27 = VecD(27);
+static constexpr VecD d28 = VecD(28);
+static constexpr VecD d29 = VecD(29);
+static constexpr VecD d30 = VecD(30);
+static constexpr VecD d31 = VecD(31);
+
+static constexpr VecV q0 = VecV(0);
+static constexpr VecV q1 = VecV(1);
+static constexpr VecV q2 = VecV(2);
+static constexpr VecV q3 = VecV(3);
+static constexpr VecV q4 = VecV(4);
+static constexpr VecV q5 = VecV(5);
+static constexpr VecV q6 = VecV(6);
+static constexpr VecV q7 = VecV(7);
+static constexpr VecV q8 = VecV(8);
+static constexpr VecV q9 = VecV(9);
+static constexpr VecV q10 = VecV(10);
+static constexpr VecV q11 = VecV(11);
+static constexpr VecV q12 = VecV(12);
+static constexpr VecV q13 = VecV(13);
+static constexpr VecV q14 = VecV(14);
+static constexpr VecV q15 = VecV(15);
+static constexpr VecV q16 = VecV(16);
+static constexpr VecV q17 = VecV(17);
+static constexpr VecV q18 = VecV(18);
+static constexpr VecV q19 = VecV(19);
+static constexpr VecV q20 = VecV(20);
+static constexpr VecV q21 = VecV(21);
+static constexpr VecV q22 = VecV(22);
+static constexpr VecV q23 = VecV(23);
+static constexpr VecV q24 = VecV(24);
+static constexpr VecV q25 = VecV(25);
+static constexpr VecV q26 = VecV(26);
+static constexpr VecV q27 = VecV(27);
+static constexpr VecV q28 = VecV(28);
+static constexpr VecV q29 = VecV(29);
+static constexpr VecV q30 = VecV(30);
+static constexpr VecV q31 = VecV(31);
+
+static constexpr VecV v0 = VecV(0);
+static constexpr VecV v1 = VecV(1);
+static constexpr VecV v2 = VecV(2);
+static constexpr VecV v3 = VecV(3);
+static constexpr VecV v4 = VecV(4);
+static constexpr VecV v5 = VecV(5);
+static constexpr VecV v6 = VecV(6);
+static constexpr VecV v7 = VecV(7);
+static constexpr VecV v8 = VecV(8);
+static constexpr VecV v9 = VecV(9);
+static constexpr VecV v10 = VecV(10);
+static constexpr VecV v11 = VecV(11);
+static constexpr VecV v12 = VecV(12);
+static constexpr VecV v13 = VecV(13);
+static constexpr VecV v14 = VecV(14);
+static constexpr VecV v15 = VecV(15);
+static constexpr VecV v16 = VecV(16);
+static constexpr VecV v17 = VecV(17);
+static constexpr VecV v18 = VecV(18);
+static constexpr VecV v19 = VecV(19);
+static constexpr VecV v20 = VecV(20);
+static constexpr VecV v21 = VecV(21);
+static constexpr VecV v22 = VecV(22);
+static constexpr VecV v23 = VecV(23);
+static constexpr VecV v24 = VecV(24);
+static constexpr VecV v25 = VecV(25);
+static constexpr VecV v26 = VecV(26);
+static constexpr VecV v27 = VecV(27);
+static constexpr VecV v28 = VecV(28);
+static constexpr VecV v29 = VecV(29);
+static constexpr VecV v30 = VecV(30);
+static constexpr VecV v31 = VecV(31);
+
+#ifndef _DOXYGEN
+} // {regs}
+
+// Make `arm::regs` accessible through `arm` namespace as well.
+using namespace regs;
+#endif
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_A64OPERAND_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64rapass.cpp b/erts/emulator/asmjit/arm/a64rapass.cpp
new file mode 100644
index 0000000000..f3d3a1236a
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64rapass.cpp
@@ -0,0 +1,787 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM) && !defined(ASMJIT_NO_COMPILER)
+
+#include "../core/cpuinfo.h"
+#include "../core/support.h"
+#include "../core/type.h"
+#include "../arm/a64assembler.h"
+#include "../arm/a64compiler.h"
+#include "../arm/a64emithelper_p.h"
+#include "../arm/a64instapi_p.h"
+#include "../arm/a64instdb_p.h"
+#include "../arm/a64rapass_p.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+// ============================================================================
+// [asmjit::a64::ARMRAPass - Helpers]
+// ============================================================================
+
+// TODO: [ARM] These should be shared with all backends.
+
+static ASMJIT_INLINE uint64_t raImmMaskFromSize(uint32_t size) noexcept {
+ ASMJIT_ASSERT(size > 0 && size < 256);
+ static const uint64_t masks[] = {
+ 0x00000000000000FFu, // 1
+ 0x000000000000FFFFu, // 2
+ 0x00000000FFFFFFFFu, // 4
+ 0xFFFFFFFFFFFFFFFFu, // 8
+ 0x0000000000000000u, // 16
+ 0x0000000000000000u, // 32
+ 0x0000000000000000u, // 64
+ 0x0000000000000000u, // 128
+ 0x0000000000000000u // 256
+ };
+ return masks[Support::ctz(size)];
+}
+
+static ASMJIT_INLINE uint32_t raUseOutFlagsFromRWFlags(uint32_t rwFlags) noexcept {
+ static const uint32_t map[] = {
+ 0,
+ RATiedReg::kRead | RATiedReg::kUse, // kRead
+ RATiedReg::kWrite | RATiedReg::kOut, // kWrite
+ RATiedReg::kRW | RATiedReg::kUse, // kRW
+ };
+
+ return map[rwFlags & OpRWInfo::kRW];
+}
+
+static ASMJIT_INLINE uint32_t raRegRwFlags(uint32_t flags) noexcept {
+ return raUseOutFlagsFromRWFlags(flags);
+}
+
+static ASMJIT_INLINE uint32_t raMemBaseRwFlags(uint32_t flags) noexcept {
+ constexpr uint32_t shift = Support::constCtz(OpRWInfo::kMemBaseRW);
+ return raUseOutFlagsFromRWFlags((flags >> shift) & OpRWInfo::kRW);
+}
+
+static ASMJIT_INLINE uint32_t raMemIndexRwFlags(uint32_t flags) noexcept {
+ constexpr uint32_t shift = Support::constCtz(OpRWInfo::kMemIndexRW);
+ return raUseOutFlagsFromRWFlags((flags >> shift) & OpRWInfo::kRW);
+}
+// ============================================================================
+// [asmjit::a64::RACFGBuilder]
+// ============================================================================
+
+class RACFGBuilder : public RACFGBuilderT<RACFGBuilder> {
+public:
+ uint32_t _arch;
+
+ inline RACFGBuilder(ARMRAPass* pass) noexcept
+ : RACFGBuilderT<RACFGBuilder>(pass),
+ _arch(pass->cc()->arch()) {}
+
+ inline Compiler* cc() const noexcept { return static_cast<Compiler*>(_cc); }
+
+ Error onInst(InstNode* inst, uint32_t& controlType, RAInstBuilder& ib) noexcept;
+
+ Error onBeforeInvoke(InvokeNode* invokeNode) noexcept;
+ Error onInvoke(InvokeNode* invokeNode, RAInstBuilder& ib) noexcept;
+
+ Error moveImmToRegArg(InvokeNode* invokeNode, const FuncValue& arg, const Imm& imm_, BaseReg* out) noexcept;
+ Error moveImmToStackArg(InvokeNode* invokeNode, const FuncValue& arg, const Imm& imm_) noexcept;
+ Error moveRegToStackArg(InvokeNode* invokeNode, const FuncValue& arg, const BaseReg& reg) noexcept;
+
+ Error onBeforeRet(FuncRetNode* funcRet) noexcept;
+ Error onRet(FuncRetNode* funcRet, RAInstBuilder& ib) noexcept;
+};
+
+// ============================================================================
+// [asmjit::a64::RACFGBuilder - OnInst]
+// ============================================================================
+
+// TODO: [ARM] This is just a workaround...
+static uint32_t getControlType(uint32_t instId, uint32_t options) noexcept {
+ switch (instId) {
+ case Inst::kIdB:
+ case Inst::kIdBr:
+ if (options & Inst::kOptionCondFlagMask)
+ return BaseInst::kControlBranch;
+ else
+ return BaseInst::kControlJump;
+ case Inst::kIdBl:
+ case Inst::kIdBlr:
+ return BaseInst::kControlCall;
+ case Inst::kIdCbz:
+ case Inst::kIdCbnz:
+ case Inst::kIdTbz:
+ case Inst::kIdTbnz:
+ return BaseInst::kControlBranch;
+ case Inst::kIdRet:
+ return BaseInst::kControlReturn;
+ default:
+ return BaseInst::kControlNone;
+ }
+}
+
+Error RACFGBuilder::onInst(InstNode* inst, uint32_t& controlType, RAInstBuilder& ib) noexcept {
+ InstRWInfo rwInfo;
+
+ uint32_t instId = inst->id();
+ if (Inst::isDefinedId(instId)) {
+ uint32_t opCount = inst->opCount();
+ const Operand* opArray = inst->operands();
+ ASMJIT_PROPAGATE(InstInternal::queryRWInfo(_arch, inst->baseInst(), opArray, opCount, &rwInfo));
+
+ const InstDB::InstInfo& instInfo = InstDB::infoById(instId);
+ uint32_t singleRegOps = 0;
+
+ if (opCount) {
+ for (uint32_t i = 0; i < opCount; i++) {
+ const Operand& op = opArray[i];
+ const OpRWInfo& opRwInfo = rwInfo.operand(i);
+
+ if (op.isReg()) {
+ // Register Operand
+ // ----------------
+ const Reg& reg = op.as<Reg>();
+
+ uint32_t flags = raRegRwFlags(opRwInfo.opFlags());
+ uint32_t vIndex = Operand::virtIdToIndex(reg.id());
+
+ if (vIndex < Operand::kVirtIdCount) {
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(vIndex, &workReg));
+
+ // Use RW instead of Write in case that not the whole register is
+ // overwritten. This is important for liveness as we cannot kill a
+ // register that will be used.
+ if ((flags & RATiedReg::kRW) == RATiedReg::kWrite) {
+ if (workReg->regByteMask() & ~(opRwInfo.writeByteMask() | opRwInfo.extendByteMask())) {
+ // Not write-only operation.
+ flags = (flags & ~RATiedReg::kOut) | (RATiedReg::kRead | RATiedReg::kUse);
+ }
+ }
+
+ uint32_t group = workReg->group();
+ uint32_t allocable = _pass->_availableRegs[group];
+
+ uint32_t useId = BaseReg::kIdBad;
+ uint32_t outId = BaseReg::kIdBad;
+
+ uint32_t useRewriteMask = 0;
+ uint32_t outRewriteMask = 0;
+
+ if (flags & RATiedReg::kUse) {
+ useRewriteMask = Support::bitMask(inst->getRewriteIndex(&reg._baseId));
+ if (opRwInfo.opFlags() & OpRWInfo::kRegPhysId) {
+ useId = opRwInfo.physId();
+ flags |= RATiedReg::kUseFixed;
+ }
+ }
+ else {
+ outRewriteMask = Support::bitMask(inst->getRewriteIndex(&reg._baseId));
+ if (opRwInfo.opFlags() & OpRWInfo::kRegPhysId) {
+ outId = opRwInfo.physId();
+ flags |= RATiedReg::kOutFixed;
+ }
+ }
+
+ // Special cases regarding element access.
+ if (reg.as<Vec>().hasElementIndex()) {
+ // Only the first 0..15 registers can be used if the register uses
+ // element accessor that accesses half-words (h[0..7] elements).
+ if (instInfo.hasFlag(InstDB::kInstFlagVH0_15) && reg.as<Vec>().elementType() == Vec::kElementTypeH) {
+ allocable &= 0xF;
+ }
+ }
+
+ ASMJIT_PROPAGATE(ib.add(workReg, flags, allocable, useId, useRewriteMask, outId, outRewriteMask, opRwInfo.rmSize()));
+ if (singleRegOps == i)
+ singleRegOps++;
+ }
+ }
+ else if (op.isMem()) {
+ // Memory Operand
+ // --------------
+ const Mem& mem = op.as<Mem>();
+ ib.addForbiddenFlags(RATiedReg::kUseRM | RATiedReg::kOutRM);
+
+ if (mem.isRegHome()) {
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(Operand::virtIdToIndex(mem.baseId()), &workReg));
+ _pass->getOrCreateStackSlot(workReg);
+ }
+ else if (mem.hasBaseReg()) {
+ uint32_t vIndex = Operand::virtIdToIndex(mem.baseId());
+ if (vIndex < Operand::kVirtIdCount) {
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(vIndex, &workReg));
+
+ uint32_t flags = raMemBaseRwFlags(opRwInfo.opFlags());
+ uint32_t group = workReg->group();
+ uint32_t allocable = _pass->_availableRegs[group];
+
+ uint32_t useId = BaseReg::kIdBad;
+ uint32_t outId = BaseReg::kIdBad;
+
+ uint32_t useRewriteMask = 0;
+ uint32_t outRewriteMask = 0;
+
+ if (flags & RATiedReg::kUse)
+ useRewriteMask = Support::bitMask(inst->getRewriteIndex(&mem._baseId));
+ else
+ outRewriteMask = Support::bitMask(inst->getRewriteIndex(&mem._baseId));
+
+ ASMJIT_PROPAGATE(ib.add(workReg, flags, allocable, useId, useRewriteMask, outId, outRewriteMask));
+ }
+ }
+
+ if (mem.hasIndexReg()) {
+ uint32_t vIndex = Operand::virtIdToIndex(mem.indexId());
+ if (vIndex < Operand::kVirtIdCount) {
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(vIndex, &workReg));
+
+ uint32_t flags = raMemIndexRwFlags(opRwInfo.opFlags());
+ uint32_t group = workReg->group();
+ uint32_t allocable = _pass->_availableRegs[group];
+
+ // Index registers have never fixed id on X86/x64.
+ const uint32_t useId = BaseReg::kIdBad;
+ const uint32_t outId = BaseReg::kIdBad;
+
+ uint32_t useRewriteMask = 0;
+ uint32_t outRewriteMask = 0;
+
+ if (flags & RATiedReg::kUse)
+ useRewriteMask = Support::bitMask(inst->getRewriteIndex(&mem._data[Operand::kDataMemIndexId]));
+ else
+ outRewriteMask = Support::bitMask(inst->getRewriteIndex(&mem._data[Operand::kDataMemIndexId]));
+
+ ASMJIT_PROPAGATE(ib.add(workReg, RATiedReg::kUse | RATiedReg::kRead, allocable, useId, useRewriteMask, outId, outRewriteMask));
+ }
+ }
+ }
+ }
+ }
+
+ // controlType = instInfo.controlType();
+ controlType = getControlType(instId, inst->instOptions());
+ }
+
+ return kErrorOk;
+}
+
+// ============================================================================
+// [asmjit::a64::RACFGBuilder - OnInvoke]
+// ============================================================================
+
+Error RACFGBuilder::onBeforeInvoke(InvokeNode* invokeNode) noexcept {
+ const FuncDetail& fd = invokeNode->detail();
+ uint32_t argCount = invokeNode->argCount();
+
+ cc()->_setCursor(invokeNode->prev());
+
+ for (uint32_t argIndex = 0; argIndex < argCount; argIndex++) {
+ const FuncValuePack& argPack = fd.argPack(argIndex);
+ for (uint32_t valueIndex = 0; valueIndex < Globals::kMaxValuePack; valueIndex++) {
+ if (!argPack[valueIndex])
+ break;
+
+ const FuncValue& arg = argPack[valueIndex];
+ const Operand& op = invokeNode->arg(argIndex, valueIndex);
+
+ if (op.isNone())
+ continue;
+
+ if (op.isReg()) {
+ const Reg& reg = op.as<Reg>();
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(Operand::virtIdToIndex(reg.id()), &workReg));
+
+ if (arg.isReg()) {
+ uint32_t regGroup = workReg->group();
+ uint32_t argGroup = Reg::groupOf(arg.regType());
+
+ if (regGroup != argGroup) {
+ // TODO: [ARM] Conversion is not supported.
+ return DebugUtils::errored(kErrorInvalidAssignment);
+ }
+ }
+ else {
+ ASMJIT_PROPAGATE(moveRegToStackArg(invokeNode, arg, reg));
+ }
+ }
+ else if (op.isImm()) {
+ if (arg.isReg()) {
+ BaseReg reg;
+ ASMJIT_PROPAGATE(moveImmToRegArg(invokeNode, arg, op.as<Imm>(), &reg));
+ invokeNode->_args[argIndex][valueIndex] = reg;
+ }
+ else {
+ ASMJIT_PROPAGATE(moveImmToStackArg(invokeNode, arg, op.as<Imm>()));
+ }
+ }
+ }
+ }
+
+ cc()->_setCursor(invokeNode);
+
+ if (fd.hasRet()) {
+ for (uint32_t valueIndex = 0; valueIndex < Globals::kMaxValuePack; valueIndex++) {
+ const FuncValue& ret = fd.ret(valueIndex);
+ if (!ret)
+ break;
+
+ const Operand& op = invokeNode->ret(valueIndex);
+ if (op.isReg()) {
+ const Reg& reg = op.as<Reg>();
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(Operand::virtIdToIndex(reg.id()), &workReg));
+
+ if (ret.isReg()) {
+ uint32_t regGroup = workReg->group();
+ uint32_t retGroup = Reg::groupOf(ret.regType());
+
+ if (regGroup != retGroup) {
+ // TODO: [ARM] Conversion is not supported.
+ return DebugUtils::errored(kErrorInvalidAssignment);
+ }
+ }
+ }
+ }
+ }
+
+ // This block has function call(s).
+ _curBlock->addFlags(RABlock::kFlagHasFuncCalls);
+ _pass->func()->frame().addAttributes(FuncFrame::kAttrHasFuncCalls);
+ _pass->func()->frame().updateCallStackSize(fd.argStackSize());
+
+ return kErrorOk;
+}
+
+Error RACFGBuilder::onInvoke(InvokeNode* invokeNode, RAInstBuilder& ib) noexcept {
+ uint32_t argCount = invokeNode->argCount();
+ const FuncDetail& fd = invokeNode->detail();
+
+ for (uint32_t argIndex = 0; argIndex < argCount; argIndex++) {
+ const FuncValuePack& argPack = fd.argPack(argIndex);
+ for (uint32_t valueIndex = 0; valueIndex < Globals::kMaxValuePack; valueIndex++) {
+ if (!argPack[valueIndex])
+ continue;
+
+ const FuncValue& arg = argPack[valueIndex];
+ const Operand& op = invokeNode->arg(argIndex, valueIndex);
+
+ if (op.isNone())
+ continue;
+
+ if (op.isReg()) {
+ const Reg& reg = op.as<Reg>();
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(Operand::virtIdToIndex(reg.id()), &workReg));
+
+ if (arg.isIndirect()) {
+ uint32_t regGroup = workReg->group();
+ if (regGroup != BaseReg::kGroupGp)
+ return DebugUtils::errored(kErrorInvalidState);
+ ASMJIT_PROPAGATE(ib.addCallArg(workReg, arg.regId()));
+ }
+ else if (arg.isReg()) {
+ uint32_t regGroup = workReg->group();
+ uint32_t argGroup = Reg::groupOf(arg.regType());
+
+ if (regGroup == argGroup) {
+ ASMJIT_PROPAGATE(ib.addCallArg(workReg, arg.regId()));
+ }
+ }
+ }
+ }
+ }
+
+ for (uint32_t retIndex = 0; retIndex < Globals::kMaxValuePack; retIndex++) {
+ const FuncValue& ret = fd.ret(retIndex);
+ if (!ret)
+ break;
+
+ const Operand& op = invokeNode->ret(retIndex);
+ if (op.isReg()) {
+ const Reg& reg = op.as<Reg>();
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(Operand::virtIdToIndex(reg.id()), &workReg));
+
+ if (ret.isReg()) {
+ uint32_t regGroup = workReg->group();
+ uint32_t retGroup = Reg::groupOf(ret.regType());
+
+ if (regGroup == retGroup) {
+ ASMJIT_PROPAGATE(ib.addCallRet(workReg, ret.regId()));
+ }
+ }
+ else {
+ return DebugUtils::errored(kErrorInvalidAssignment);
+ }
+ }
+ }
+
+ // Setup clobbered registers.
+ ib._clobbered[0] = Support::lsbMask<uint32_t>(_pass->_physRegCount[0]) & ~fd.preservedRegs(0);
+ ib._clobbered[1] = Support::lsbMask<uint32_t>(_pass->_physRegCount[1]) & ~fd.preservedRegs(1);
+ ib._clobbered[2] = Support::lsbMask<uint32_t>(_pass->_physRegCount[2]) & ~fd.preservedRegs(2);
+ ib._clobbered[3] = Support::lsbMask<uint32_t>(_pass->_physRegCount[3]) & ~fd.preservedRegs(3);
+
+ return kErrorOk;
+}
+
+// ============================================================================
+// [asmjit::a64::RACFGBuilder - MoveImmToRegArg]
+// ============================================================================
+
+Error RACFGBuilder::moveImmToRegArg(InvokeNode* invokeNode, const FuncValue& arg, const Imm& imm_, BaseReg* out) noexcept {
+ DebugUtils::unused(invokeNode);
+ ASMJIT_ASSERT(arg.isReg());
+
+ Imm imm(imm_);
+ uint32_t rTypeId = Type::kIdVoid;
+
+ switch (arg.typeId()) {
+ case Type::kIdI8 : rTypeId = Type::kIdU64; imm.signExtend8Bits(); break;
+ case Type::kIdU8 : rTypeId = Type::kIdU64; imm.zeroExtend8Bits(); break;
+ case Type::kIdI16: rTypeId = Type::kIdU64; imm.signExtend16Bits(); break;
+ case Type::kIdU16: rTypeId = Type::kIdU64; imm.zeroExtend16Bits(); break;
+ case Type::kIdI32: rTypeId = Type::kIdU64; imm.signExtend32Bits(); break;
+ case Type::kIdU32: rTypeId = Type::kIdU64; imm.zeroExtend32Bits(); break;
+ case Type::kIdI64: rTypeId = Type::kIdU64; break;
+ case Type::kIdU64: rTypeId = Type::kIdU64; break;
+
+ default:
+ return DebugUtils::errored(kErrorInvalidAssignment);
+ }
+
+ ASMJIT_PROPAGATE(cc()->_newReg(out, rTypeId, nullptr));
+ cc()->virtRegById(out->id())->setWeight(BaseRAPass::kCallArgWeight);
+ return cc()->mov(out->as<Gp>(), imm);
+}
+
+// ============================================================================
+// [asmjit::a64::RACFGBuilder - MoveImmToStackArg]
+// ============================================================================
+
+Error RACFGBuilder::moveImmToStackArg(InvokeNode* invokeNode, const FuncValue& arg, const Imm& imm_) noexcept {
+ BaseReg reg;
+
+ ASMJIT_PROPAGATE(moveImmToRegArg(invokeNode, arg, imm_, &reg));
+ ASMJIT_PROPAGATE(moveRegToStackArg(invokeNode, arg, reg));
+
+ return kErrorOk;
+}
+
+// ============================================================================
+// [asmjit::a64::RACFGBuilder - MoveRegToStackArg]
+// ============================================================================
+
+Error RACFGBuilder::moveRegToStackArg(InvokeNode* invokeNode, const FuncValue& arg, const BaseReg& reg) noexcept {
+ Mem stackPtr = ptr(_pass->_sp.as<Gp>(), arg.stackOffset());
+
+ if (reg.isGp())
+ return cc()->str(reg.as<Gp>(), stackPtr);
+
+ if (reg.isVec())
+ return cc()->str(reg.as<Vec>(), stackPtr);
+
+ return DebugUtils::errored(kErrorInvalidState);
+}
+
+// ============================================================================
+// [asmjit::a64::RACFGBuilder - OnReg]
+// ============================================================================
+
+Error RACFGBuilder::onBeforeRet(FuncRetNode* funcRet) noexcept {
+ DebugUtils::unused(funcRet);
+ return kErrorOk;
+}
+
+Error RACFGBuilder::onRet(FuncRetNode* funcRet, RAInstBuilder& ib) noexcept {
+ const FuncDetail& funcDetail = _pass->func()->detail();
+ const Operand* opArray = funcRet->operands();
+ uint32_t opCount = funcRet->opCount();
+
+ for (uint32_t i = 0; i < opCount; i++) {
+ const Operand& op = opArray[i];
+ if (op.isNone()) continue;
+
+ const FuncValue& ret = funcDetail.ret(i);
+ if (ASMJIT_UNLIKELY(!ret.isReg()))
+ return DebugUtils::errored(kErrorInvalidAssignment);
+
+ if (op.isReg()) {
+ // Register return value.
+ const Reg& reg = op.as<Reg>();
+ uint32_t vIndex = Operand::virtIdToIndex(reg.id());
+
+ if (vIndex < Operand::kVirtIdCount) {
+ RAWorkReg* workReg;
+ ASMJIT_PROPAGATE(_pass->virtIndexAsWorkReg(vIndex, &workReg));
+
+ uint32_t group = workReg->group();
+ uint32_t allocable = _pass->_availableRegs[group];
+ ASMJIT_PROPAGATE(ib.add(workReg, RATiedReg::kUse | RATiedReg::kRead, allocable, ret.regId(), 0, BaseReg::kIdBad, 0));
+ }
+ }
+ else {
+ return DebugUtils::errored(kErrorInvalidAssignment);
+ }
+ }
+
+ return kErrorOk;
+}
+
+// ============================================================================
+// [asmjit::a64::ARMRAPass - Construction / Destruction]
+// ============================================================================
+
+ARMRAPass::ARMRAPass() noexcept
+ : BaseRAPass() { _iEmitHelper = &_emitHelper; }
+ARMRAPass::~ARMRAPass() noexcept {}
+
+// ============================================================================
+// [asmjit::a64::ARMRAPass - OnInit / OnDone]
+// ============================================================================
+
+void ARMRAPass::onInit() noexcept {
+ uint32_t arch = cc()->arch();
+
+ _emitHelper._emitter = _cb;
+
+ _archTraits = &ArchTraits::byArch(arch);
+ _physRegCount.set(Reg::kGroupGp , 32);
+ _physRegCount.set(Reg::kGroupVec , 32);
+ _physRegCount.set(Reg::kGroupOther0, 0);
+ _physRegCount.set(Reg::kGroupOther1, 0);
+ _buildPhysIndex();
+
+ _availableRegCount = _physRegCount;
+ _availableRegs[Reg::kGroupGp ] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupGp));
+ _availableRegs[Reg::kGroupVec ] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupVec));
+ _availableRegs[Reg::kGroupOther0] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupOther0));
+ _availableRegs[Reg::kGroupOther1] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupOther1));
+
+ _scratchRegIndexes[0] = uint8_t(27);
+ _scratchRegIndexes[1] = uint8_t(28);
+
+ // The architecture specific setup makes implicitly all registers available. So
+ // make unavailable all registers that are special and cannot be used in general.
+ bool hasFP = _func->frame().hasPreservedFP();
+
+ if (hasFP)
+ makeUnavailable(Reg::kGroupGp, Gp::kIdFp);
+
+ makeUnavailable(Reg::kGroupGp, Gp::kIdSp);
+ makeUnavailable(Reg::kGroupGp, Gp::kIdOs); // OS-specific use, usually TLS.
+
+ _sp = sp;
+ _fp = x29;
+}
+
+void ARMRAPass::onDone() noexcept {}
+
+// ============================================================================
+// [asmjit::a64::ARMRAPass - BuildCFG]
+// ============================================================================
+
+Error ARMRAPass::buildCFG() noexcept {
+ return RACFGBuilder(this).run();
+}
+
+// ============================================================================
+// [asmjit::a64::ARMRAPass - Rewrite]
+// ============================================================================
+
+ASMJIT_FAVOR_SPEED Error ARMRAPass::_rewrite(BaseNode* first, BaseNode* stop) noexcept {
+ uint32_t virtCount = cc()->_vRegArray.size();
+
+ BaseNode* node = first;
+ while (node != stop) {
+ BaseNode* next = node->next();
+ if (node->isInst()) {
+ InstNode* inst = node->as<InstNode>();
+ RAInst* raInst = node->passData<RAInst>();
+
+ Operand* operands = inst->operands();
+ uint32_t opCount = inst->opCount();
+
+ uint32_t i;
+
+ // Rewrite virtual registers into physical registers.
+ if (raInst) {
+ // If the instruction contains pass data (raInst) then it was a subject
+ // for register allocation and must be rewritten to use physical regs.
+ RATiedReg* tiedRegs = raInst->tiedRegs();
+ uint32_t tiedCount = raInst->tiedCount();
+
+ for (i = 0; i < tiedCount; i++) {
+ RATiedReg* tiedReg = &tiedRegs[i];
+
+ Support::BitWordIterator<uint32_t> useIt(tiedReg->useRewriteMask());
+ uint32_t useId = tiedReg->useId();
+ while (useIt.hasNext())
+ inst->rewriteIdAtIndex(useIt.next(), useId);
+
+ Support::BitWordIterator<uint32_t> outIt(tiedReg->outRewriteMask());
+ uint32_t outId = tiedReg->outId();
+ while (outIt.hasNext())
+ inst->rewriteIdAtIndex(outIt.next(), outId);
+ }
+
+ // This data is allocated by Zone passed to `runOnFunction()`, which
+ // will be reset after the RA pass finishes. So reset this data to
+ // prevent having a dead pointer after the RA pass is complete.
+ node->resetPassData();
+
+ if (ASMJIT_UNLIKELY(node->type() != BaseNode::kNodeInst)) {
+ // FuncRet terminates the flow, it must either be removed if the exit
+ // label is next to it (optimization) or patched to an architecture
+ // dependent jump instruction that jumps to the function's exit before
+ // the epilog.
+ if (node->type() == BaseNode::kNodeFuncRet) {
+ RABlock* block = raInst->block();
+ if (!isNextTo(node, _func->exitNode())) {
+ cc()->_setCursor(node->prev());
+ ASMJIT_PROPAGATE(emitJump(_func->exitNode()->label()));
+ }
+
+ BaseNode* prev = node->prev();
+ cc()->removeNode(node);
+ block->setLast(prev);
+ }
+ }
+ }
+
+ // Rewrite stack slot addresses.
+ for (i = 0; i < opCount; i++) {
+ Operand& op = operands[i];
+ if (op.isMem()) {
+ BaseMem& mem = op.as<BaseMem>();
+ if (mem.isRegHome()) {
+ uint32_t virtIndex = Operand::virtIdToIndex(mem.baseId());
+ if (ASMJIT_UNLIKELY(virtIndex >= virtCount))
+ return DebugUtils::errored(kErrorInvalidVirtId);
+
+ VirtReg* virtReg = cc()->virtRegByIndex(virtIndex);
+ RAWorkReg* workReg = virtReg->workReg();
+ ASMJIT_ASSERT(workReg != nullptr);
+
+ RAStackSlot* slot = workReg->stackSlot();
+ int32_t offset = slot->offset();
+
+ mem._setBase(_sp.type(), slot->baseRegId());
+ mem.clearRegHome();
+ mem.addOffsetLo32(offset);
+ }
+ }
+ }
+ }
+
+ node = next;
+ }
+
+ return kErrorOk;
+}
+
+// ============================================================================
+// [asmjit::a64::ARMRAPass - Prolog / Epilog]
+// ============================================================================
+
+Error ARMRAPass::updateStackFrame() noexcept {
+ if (_func->frame().hasFuncCalls())
+ _func->frame().addDirtyRegs(Reg::kGroupGp, Support::bitMask(Gp::kIdLr));
+
+ return BaseRAPass::updateStackFrame();
+}
+
+// ============================================================================
+// [asmjit::a64::ARMRAPass - OnEmit]
+// ============================================================================
+
+Error ARMRAPass::emitMove(uint32_t workId, uint32_t dstPhysId, uint32_t srcPhysId) noexcept {
+ RAWorkReg* wReg = workRegById(workId);
+ BaseReg dst = BaseReg::fromSignatureAndId(wReg->info().signature(), dstPhysId);
+ BaseReg src = BaseReg::fromSignatureAndId(wReg->info().signature(), srcPhysId);
+
+ const char* comment = nullptr;
+
+#ifndef ASMJIT_NO_LOGGING
+ if (_loggerFlags & FormatOptions::kFlagAnnotations) {
+ _tmpString.assignFormat("<MOVE> %s", workRegById(workId)->name());
+ comment = _tmpString.data();
+ }
+#endif
+
+ return _emitHelper.emitRegMove(dst, src, wReg->typeId(), comment);
+}
+
+Error ARMRAPass::emitSwap(uint32_t aWorkId, uint32_t aPhysId, uint32_t bWorkId, uint32_t bPhysId) noexcept {
+ DebugUtils::unused(aWorkId, aPhysId, bWorkId, bPhysId);
+ return DebugUtils::errored(kErrorInvalidState);
+}
+
+Error ARMRAPass::emitLoad(uint32_t workId, uint32_t dstPhysId) noexcept {
+ RAWorkReg* wReg = workRegById(workId);
+ BaseReg dstReg = BaseReg::fromSignatureAndId(wReg->info().signature(), dstPhysId);
+ BaseMem srcMem = BaseMem(workRegAsMem(wReg));
+
+ const char* comment = nullptr;
+
+#ifndef ASMJIT_NO_LOGGING
+ if (_loggerFlags & FormatOptions::kFlagAnnotations) {
+ _tmpString.assignFormat("<LOAD> %s", workRegById(workId)->name());
+ comment = _tmpString.data();
+ }
+#endif
+
+ return _emitHelper.emitRegMove(dstReg, srcMem, wReg->typeId(), comment);
+}
+
+Error ARMRAPass::emitSave(uint32_t workId, uint32_t srcPhysId) noexcept {
+ RAWorkReg* wReg = workRegById(workId);
+ BaseMem dstMem = BaseMem(workRegAsMem(wReg));
+ BaseReg srcReg = BaseReg::fromSignatureAndId(wReg->info().signature(), srcPhysId);
+
+ const char* comment = nullptr;
+
+#ifndef ASMJIT_NO_LOGGING
+ if (_loggerFlags & FormatOptions::kFlagAnnotations) {
+ _tmpString.assignFormat("<SAVE> %s", workRegById(workId)->name());
+ comment = _tmpString.data();
+ }
+#endif
+
+ return _emitHelper.emitRegMove(dstMem, srcReg, wReg->typeId(), comment);
+}
+
+Error ARMRAPass::emitJump(const Label& label) noexcept {
+ return cc()->b(label);
+}
+
+Error ARMRAPass::emitPreCall(InvokeNode* invokeNode) noexcept {
+ DebugUtils::unused(invokeNode);
+ return kErrorOk;
+}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM && !ASMJIT_NO_COMPILER
diff --git a/erts/emulator/asmjit/arm/a64rapass_p.h b/erts/emulator/asmjit/arm/a64rapass_p.h
new file mode 100644
index 0000000000..56b85bebf7
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64rapass_p.h
@@ -0,0 +1,120 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64RAPASS_P_H_INCLUDED
+#define ASMJIT_ARM_A64RAPASS_P_H_INCLUDED
+
+#include "../core/api-config.h"
+#ifndef ASMJIT_NO_COMPILER
+
+#include "../core/compiler.h"
+#include "../core/rabuilders_p.h"
+#include "../core/rapass_p.h"
+#include "../arm/a64assembler.h"
+#include "../arm/a64compiler.h"
+#include "../arm/a64emithelper_p.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \cond INTERNAL
+//! \addtogroup asmjit_a64
+//! \{
+
+// ============================================================================
+// [asmjit::ARMRAPass]
+// ============================================================================
+
+//! ARM register allocation pass.
+//!
+//! Takes care of generating function prologs and epilogs, and also performs
+//! register allocation.
+class ARMRAPass : public BaseRAPass {
+public:
+ ASMJIT_NONCOPYABLE(ARMRAPass)
+ typedef BaseRAPass Base;
+
+ EmitHelper _emitHelper;
+
+ // --------------------------------------------------------------------------
+ // [Construction / Destruction]
+ // --------------------------------------------------------------------------
+
+ ARMRAPass() noexcept;
+ virtual ~ARMRAPass() noexcept;
+
+ // --------------------------------------------------------------------------
+ // [Accessors]
+ // --------------------------------------------------------------------------
+
+ //! Returns the compiler casted to `arm::Compiler`.
+ inline Compiler* cc() const noexcept { return static_cast<Compiler*>(_cb); }
+
+ //! Returns emit helper.
+ inline EmitHelper* emitHelper() noexcept { return &_emitHelper; }
+
+ // --------------------------------------------------------------------------
+ // [OnInit / OnDone]
+ // --------------------------------------------------------------------------
+
+ void onInit() noexcept override;
+ void onDone() noexcept override;
+
+ // --------------------------------------------------------------------------
+ // [CFG]
+ // --------------------------------------------------------------------------
+
+ Error buildCFG() noexcept override;
+
+ // --------------------------------------------------------------------------
+ // [Rewrite]
+ // --------------------------------------------------------------------------
+
+ Error _rewrite(BaseNode* first, BaseNode* stop) noexcept override;
+
+ // --------------------------------------------------------------------------
+ // [Prolog / Epilog]
+ // --------------------------------------------------------------------------
+
+ Error updateStackFrame() noexcept override;
+
+ // --------------------------------------------------------------------------
+ // [Emit]
+ // --------------------------------------------------------------------------
+
+ Error emitMove(uint32_t workId, uint32_t dstPhysId, uint32_t srcPhysId) noexcept override;
+ Error emitSwap(uint32_t aWorkId, uint32_t aPhysId, uint32_t bWorkId, uint32_t bPhysId) noexcept override;
+
+ Error emitLoad(uint32_t workId, uint32_t dstPhysId) noexcept override;
+ Error emitSave(uint32_t workId, uint32_t srcPhysId) noexcept override;
+
+ Error emitJump(const Label& label) noexcept override;
+ Error emitPreCall(InvokeNode* invokeNode) noexcept override;
+};
+
+//! \}
+//! \endcond
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_COMPILER
+#endif // ASMJIT_ARM_A64RAPASS_P_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/a64utils.h b/erts/emulator/asmjit/arm/a64utils.h
new file mode 100644
index 0000000000..2fff713e0a
--- /dev/null
+++ b/erts/emulator/asmjit/arm/a64utils.h
@@ -0,0 +1,218 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_A64UTILS_H_INCLUDED
+#define ASMJIT_ARM_A64UTILS_H_INCLUDED
+
+#include "../arm/a64globals.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(a64)
+
+//! \addtogroup asmjit_a64
+//! \{
+
+//! Public utilities and helpers for targeting AArch64 architecture.
+namespace Utils {
+
+// ============================================================================
+// [asmjit::a64::Utils - Logical Immediate]
+// ============================================================================
+
+//! Decomposed fields of a logical immediate value (AArch64).
+struct LogicalImm {
+ uint32_t n;
+ uint32_t s;
+ uint32_t r;
+};
+
+//! Encodes the given `imm` value of the given `width` to a logical immediate
+//! value represented as N, S, and R fields and writes these fields to `out`.
+//!
+//! Encoding Table:
+//!
+//! ```
+//! +---+--------+--------+------+
+//! | N | ImmS | ImmR | Size |
+//! +---+--------+--------+------+
+//! | 1 | ssssss | rrrrrr | 64 |
+//! | 0 | 0sssss | .rrrrr | 32 |
+//! | 0 | 10ssss | ..rrrr | 16 |
+//! | 0 | 110sss | ...rrr | 8 |
+//! | 0 | 1110ss | ....rr | 4 |
+//! | 0 | 11110s | .....r | 2 |
+//! +---+--------+--------+------+
+//! ```
+ASMJIT_MAYBE_UNUSED
+static bool encodeLogicalImm(uint64_t imm, uint32_t width, a64::Utils::LogicalImm* out) noexcept {
+ // Determine the element width, which must be 2, 4, 8, 16, 32, or 64 bits.
+ do {
+ width /= 2;
+ uint64_t mask = (uint64_t(1) << width) - 1u;
+ if ((imm & mask) != ((imm >> width) & mask)) {
+ width *= 2;
+ break;
+ }
+ } while (width > 2);
+
+ // Patterns of all zeros and all ones are not encodable.
+ uint64_t lsbMask = Support::lsbMask<uint64_t>(width);
+ imm &= lsbMask;
+
+ if (imm == 0 || imm == lsbMask)
+ return false;
+
+ // Inspect the pattern and get the most important bit indexes.
+ //
+ // oIndex <-+ +-> zIndex
+ // | |
+ // |..zeros..|oCount|zCount|..ones..|
+ // |000000000|111111|000000|11111111|
+
+ uint32_t zIndex = Support::ctz(~imm);
+ uint64_t zImm = imm ^ ((uint64_t(1) << zIndex) - 1);
+ uint32_t zCount = (zImm ? Support::ctz(zImm) : width) - zIndex;
+
+ uint32_t oIndex = zIndex + zCount;
+ uint64_t oImm = ~(zImm ^ Support::lsbMask<uint64_t>(oIndex));
+ uint32_t oCount = (oImm ? Support::ctz(oImm) : width) - (oIndex);
+
+ // Verify whether the bit-pattern is encodable.
+ uint64_t mustBeZero = oImm ^ ~Support::lsbMask<uint64_t>(oIndex + oCount);
+ if (mustBeZero != 0 || (zIndex > 0 && width - (oIndex + oCount) != 0))
+ return false;
+
+ out->n = width == 64;
+ out->s = (oCount + zIndex - 1) | (Support::neg(width * 2) & 0x3F);
+ out->r = width - oIndex;
+ return true;
+}
+
+//! Returns true if the given `imm` value is encodable as a logical immediate.
+//! The `width` argument describes the width of the operation, and must be
+//! either 32 or 64.
+//!
+//! This function can be used to test whether an immediate value can be used
+//! with AND, ANDS, EON, EOR, ORN, and ORR instruction.
+ASMJIT_MAYBE_UNUSED
+static bool isLogicalImm(uint64_t imm, uint32_t width) noexcept {
+ LogicalImm dummy;
+ return encodeLogicalImm(imm, width, &dummy);
+}
+
+// ============================================================================
+// [asmjit::a64::Utils - ByteMask Immediates]
+// ============================================================================
+
+//! Returns true if the given `imm` value is a byte mask. Byte mask has each
+//! byte part of the value set to either 0x00 or 0xFF. Some ARM instructions
+//! accept immediates that form a byte-mask and this function can be used to
+//! verify that the immediate is encodable before using the value.
+template<typename T>
+static ASMJIT_INLINE bool isByteMaskImm8(const T& imm) noexcept {
+ constexpr T kMask = T(0x0101010101010101 & Support::allOnes<T>());
+ return imm == (imm & kMask) * T(255);
+}
+
+// ============================================================================
+// [asmjit::a64::Utils - Floating Point Immediates]
+// ============================================================================
+
+//! \cond
+//! A generic implementation that checjs whether a floating point value can
+//! be converted to ARM Imm8.
+template<typename T, uint32_t kNumBBits, uint32_t kNumCDEFGHBits, uint32_t kNumZeroBits>
+static ASMJIT_INLINE bool isFPImm8Generic(T val) noexcept {
+ constexpr uint32_t kAllBsMask = Support::lsbMask<uint32_t>(kNumBBits);
+ constexpr uint32_t kB0Pattern = Support::bitMask(kNumBBits - 1);
+ constexpr uint32_t kB1Pattern = kAllBsMask ^ kB0Pattern;
+
+ T immZ = val & Support::lsbMask<T>(kNumZeroBits);
+ uint32_t immB = uint32_t(val >> (kNumZeroBits + kNumCDEFGHBits)) & kAllBsMask;
+
+ // ImmZ must be all zeros and ImmB must either be B0 or B1 pattern.
+ return immZ == 0 && (immB == kB0Pattern || immB == kB1Pattern);
+}
+//! \endcond
+
+//! Returns true if the given half precision floating point `val` can be
+//! encoded as ARM IMM8 value, which represents a limited set of floating
+//! point immediate values, which can be used with FMOV instruction.
+//!
+//! The floating point must have bits distributed in the following way:
+//!
+//! ```
+//! [aBbbcdef|gh000000]
+//! ```
+static ASMJIT_INLINE bool isFP16Imm8(uint32_t val) noexcept { return isFPImm8Generic<uint32_t, 3, 6, 6>(val); }
+
+//! Returns true if the given single precision floating point `val` can be
+//! encoded as ARM IMM8 value, which represents a limited set of floating
+//! point immediate values, which can be used with FMOV instruction.
+//!
+//! The floating point must have bits distributed in the following way:
+//!
+//! ```
+//! [aBbbbbbc|defgh000|00000000|00000000]
+//! ```
+static ASMJIT_INLINE bool isFP32Imm8(uint32_t val) noexcept { return isFPImm8Generic<uint32_t, 6, 6, 19>(val); }
+//! \overload
+static ASMJIT_INLINE bool isFP32Imm8(float val) noexcept { return isFP32Imm8(Support::bitCast<uint32_t>(val)); }
+
+//! Returns true if the given double precision floating point `val` can be
+//! encoded as ARM IMM8 value, which represents a limited set of floating
+//! point immediate values, which can be used with FMOV instruction.
+//!
+//! The floating point must have bits distributed in the following way:
+//!
+//! ```
+//! [aBbbbbbb|bbcdefgh|00000000|00000000|00000000|00000000|00000000|00000000]
+//! ```
+static ASMJIT_INLINE bool isFP64Imm8(uint64_t val) noexcept { return isFPImm8Generic<uint64_t, 9, 6, 48>(val); }
+//! \overload
+static ASMJIT_INLINE bool isFP64Imm8(double val) noexcept { return isFP64Imm8(Support::bitCast<uint64_t>(val)); }
+
+//! \cond
+template<typename T, uint32_t kNumBBits, uint32_t kNumCDEFGHBits, uint32_t kNumZeroBits>
+static ASMJIT_INLINE uint32_t encodeFPToImm8Generic(T val) noexcept {
+ uint32_t bits = uint32_t(val >> kNumZeroBits);
+ return ((bits >> (kNumBBits + kNumCDEFGHBits - 7)) & 0x80u) | (bits & 0x7F);
+}
+//! \endcond
+
+//! Encodes a double precision floating point value into IMM8 format.
+//!
+//! \note This function expects that `isFP64Imm8(val) == true` so it doesn't
+//! perform any checks of the value and just rearranges some bits into Imm8
+//! order.
+static ASMJIT_INLINE uint32_t encodeFP64ToImm8(uint64_t val) noexcept { return encodeFPToImm8Generic<uint64_t, 9, 6, 48>(val); }
+//! \overload
+static ASMJIT_INLINE uint32_t encodeFP64ToImm8(double val) noexcept { return encodeFP64ToImm8(Support::bitCast<uint64_t>(val)); }
+
+} // {Utils}
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_A64UTILS_H_INCLUDED
+
diff --git a/erts/emulator/asmjit/arm/armarchtraits_p.h b/erts/emulator/asmjit/arm/armarchtraits_p.h
new file mode 100644
index 0000000000..756a621034
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armarchtraits_p.h
@@ -0,0 +1,92 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMARCHTRAITS_P_H_INCLUDED
+#define ASMJIT_ARM_ARMARCHTRAITS_P_H_INCLUDED
+
+#include "../core/archtraits.h"
+#include "../core/misc_p.h"
+#include "../core/type.h"
+#include "../arm/armoperand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+//! \cond INTERNAL
+//! \addtogroup asmjit_arm
+//! \{
+
+// ============================================================================
+// [asmjit::arm::a64ArchTraits
+// ============================================================================
+
+static const constexpr ArchTraits a64ArchTraits = {
+ Gp::kIdSp, // SP.
+ Gp::kIdFp, // FP.
+ Gp::kIdLr, // LR.
+ 0xFF, // PC.
+ { 0, 0, 0 }, // Reserved.
+ 16, // HW stack alignment (AArch64 requires stack aligned to 64 bytes).
+ 4095, // Min stack offset - we consider the worst - byte addressing.
+ 65520, // Max stack offset - we consider the best - VecQ addressing.
+
+ // ISA features [Gp, Vec, Other0, Other1].
+ {
+ ArchTraits::kIsaFeaturePushPop,
+ ArchTraits::kIsaFeaturePushPop,
+ 0,
+ 0
+ },
+
+ // RegInfo.
+ #define V(type) { arm::RegTraits<type>::kSignature }
+ { ASMJIT_LOOKUP_TABLE_32(V, 0) },
+ #undef V
+
+ // RegTypeToTypeId.
+ #define V(type) arm::RegTraits<type>::kTypeId
+ { ASMJIT_LOOKUP_TABLE_32(V, 0) },
+ #undef V
+
+ // TypeIdToRegType.
+ #define V(index) (index + Type::_kIdBaseStart == Type::kIdI8 ? Reg::kTypeGpW : \
+ index + Type::_kIdBaseStart == Type::kIdU8 ? Reg::kTypeGpW : \
+ index + Type::_kIdBaseStart == Type::kIdI16 ? Reg::kTypeGpW : \
+ index + Type::_kIdBaseStart == Type::kIdU16 ? Reg::kTypeGpW : \
+ index + Type::_kIdBaseStart == Type::kIdI32 ? Reg::kTypeGpW : \
+ index + Type::_kIdBaseStart == Type::kIdU32 ? Reg::kTypeGpW : \
+ index + Type::_kIdBaseStart == Type::kIdI64 ? Reg::kTypeGpX : \
+ index + Type::_kIdBaseStart == Type::kIdU64 ? Reg::kTypeGpX : \
+ index + Type::_kIdBaseStart == Type::kIdIntPtr ? Reg::kTypeGpX : \
+ index + Type::_kIdBaseStart == Type::kIdUIntPtr ? Reg::kTypeGpX : \
+ index + Type::_kIdBaseStart == Type::kIdF32 ? Reg::kTypeVecS : \
+ index + Type::_kIdBaseStart == Type::kIdF64 ? Reg::kTypeVecD : Reg::kTypeNone)
+ { ASMJIT_LOOKUP_TABLE_32(V, 0) }
+ #undef V
+};
+
+//! \}
+//! \endcond
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_ARMARCHTRAITS_P_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/armfeatures.cpp b/erts/emulator/asmjit/arm/armfeatures.cpp
new file mode 100644
index 0000000000..ab61a72f9b
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armfeatures.cpp
@@ -0,0 +1,474 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM) && ASMJIT_ARCH_ARM
+
+#include "../core/cpuinfo.h"
+#include "../core/support.h"
+#include "../arm/armfeatures.h"
+
+// Required by `getauxval()` on Linux.
+#if defined(__linux__)
+ #include <sys/auxv.h>
+#endif
+
+#if defined(__APPLE__)
+ #include <mach/machine.h>
+ #include <sys/errno.h>
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+#endif
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+// ============================================================================
+// [asmjit::arm::Features - Detect - Base]
+// ============================================================================
+
+static inline void populateBaseFeatures(CpuInfo& cpu) noexcept {
+ cpu.reset();
+#if ASMJIT_ARCH_ARM == 32
+ cpu._arch = Environment::kArchARM;
+#else
+ cpu._arch = Environment::kArchAArch64;
+
+ // AArch64 is based on ARMv8 and later.
+ cpu.addFeature(Features::kARMv6);
+ cpu.addFeature(Features::kARMv7);
+ cpu.addFeature(Features::kARMv8);
+
+ // AArch64 comes with these features by default.
+ cpu.addFeature(Features::kVFPv2);
+ cpu.addFeature(Features::kVFPv3);
+ cpu.addFeature(Features::kVFPv4);
+ cpu.addFeature(Features::kASIMD);
+ cpu.addFeature(Features::kIDIVA);
+#endif
+}
+
+static void populateBaseFeaturesByVersion(CpuInfo& cpu) noexcept {
+ Features& features = cpu._features.as<Features>();
+
+ // Some information can be found here:
+ // https://developer.arm.com/architectures/learn-the-architecture/understanding-the-armv8-x-extensions/single-page
+ // https://en.wikipedia.org/wiki/AArch64
+
+ if (features.hasARMv8_6()) {
+ features.add(Features::kARMv8_5);
+ }
+
+ if (features.hasARMv8_5()) {
+ features.add(Features::kARMv8_4);
+ }
+
+ if (features.hasARMv8_4()) {
+ features.add(Features::kARMv8_3,
+ Features::kDOTPROD,
+ Features::kSHA3,
+ Features::kSHA512,
+ Features::kSM3,
+ Features::kSM4);
+ }
+
+ if (features.hasARMv8_3()) {
+ features.add(Features::kARMv8_2,
+ Features::kFCMA,
+ Features::kFJCVTZS);
+ }
+
+ if (features.hasARMv8_2()) {
+ features.add(Features::kARMv8_1);
+ }
+
+ if (features.hasARMv8_1()) {
+ features.add(Features::kARMv8,
+ Features::kATOMICS,
+ Features::kCRC32,
+ Features::kRDMA);
+ }
+
+ if (features.hasARMv8()) {
+ features.add(Features::kARMv7,
+ Features::kVFPv2,
+ Features::kVFPv3,
+ Features::kVFPv4,
+ Features::kVFP_D32,
+ Features::kASIMD,
+ Features::kIDIVA);
+ }
+}
+
+// ============================================================================
+// [asmjit::arm::Features - Detect - Windows]
+// ============================================================================
+
+#if defined(_WIN32)
+struct WinPFPMapping {
+ uint8_t featureId;
+ uint8_t pfpFeatureId;
+};
+
+static void detectPFPFeatures(CpuInfo& cpu, const WinPFPMapping* mapping, size_t size) noexcept {
+ for (size_t i = 0; i < size; i++)
+ if (::IsProcessorFeaturePresent(mapping[i].pfpFeatureId))
+ cpu.addFeature(mapping[i].featureId);
+}
+
+//! Detect ARM CPU features on Windows.
+//!
+//! The detection is based on `IsProcessorFeaturePresent()` API call.
+ASMJIT_FAVOR_SIZE void detectCpu(CpuInfo& cpu) noexcept {
+ populateBaseFeatures(cpu);
+
+ Features& features = cpu._features.as<Features>();
+
+ // Win32 for ARM requires ARMv7 with DSP extensions, VFPv3, and uses THUMBv2 by default.
+#if ASMJIT_ARCH_ARM == 32
+ features.add(Features::kARMv6);
+ features.add(Features::kARMv7);
+ features.add(Features::kEDSP);
+ features.add(Features::kVFPv2);
+ features.add(Features::kVFPv3);
+ features.add(Features::kTHUMB);
+ features.add(Features::kTHUMBv2);
+#endif
+
+ // Windows for ARM requires ASIMD.
+ features.add(Features::kASIMD);
+
+ // Detect additional CPU features by calling `IsProcessorFeaturePresent()`.
+ static const WinPFPMapping mapping[] = {
+#if ASMJIT_ARCH_ARM == 32
+ { Features::kVFP_D32 , 18 }, // PF_ARM_VFP_32_REGISTERS_AVAILABLE
+ { Features::kIDIVT , 24 }, // PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE
+ { Features::kVFPv4 , 27 }, // PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE
+ { Features::kARMv8 , 29 }, // PF_ARM_V8_INSTRUCTIONS_AVAILABLE
+#endif
+ { Features::kAES , 30 }, // PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE
+ { Features::kCRC32 , 31 }, // PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE
+ { Features::kATOMICS , 34 } // PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE
+
+ };
+ detectPFPFeatures(cpu, mapping, ASMJIT_ARRAY_SIZE(mapping));
+
+ // Windows provides several instructions under a single flag, so expand:
+ if (features.hasAES()) {
+ features.add(Features::kSHA1, Features::kSHA2);
+ }
+
+ populateBaseFeaturesByVersion();
+}
+#endif
+
+// ============================================================================
+// [asmjit::arm::Features - Detect - Linux]
+// ============================================================================
+
+#if defined(__linux__)
+struct LinuxHWCapMapping {
+ uint8_t featureId;
+ uint8_t hwCapBit;
+};
+
+static void detectHWCaps(CpuInfo& cpu, unsigned long type, const LinuxHWCapMapping* mapping, size_t size) noexcept {
+ unsigned long mask = getauxval(type);
+ for (size_t i = 0; i < size; i++)
+ if (Support::bitTest(mask, mapping[i].hwCapBit))
+ cpu.addFeature(mapping[i].featureId);
+}
+
+#if ASMJIT_ARCH_ARM == 32
+// `AT_HWCAP` provides ARMv7 (and less) related flags.
+static const LinuxHWCapMapping hwCapMapping[] = {
+ { Features::kVFPv2 , 6 }, // HWCAP_VFP
+ { Features::kEDSP , 7 }, // HWCAP_EDSP
+ { Features::kASIMD , 12 }, // HWCAP_NEON
+ { Features::kVFPv3 , 13 }, // HWCAP_VFPv3
+ { Features::kVFPv4 , 16 }, // HWCAP_VFPv4
+ { Features::kIDIVA , 17 }, // HWCAP_IDIVA
+ { Features::kIDIVT , 18 }, // HWCAP_IDIVT
+ { Features::kVFP_D32 , 19 } // HWCAP_VFPD32
+};
+
+// `AT_HWCAP2` provides ARMv8+ related flags.
+static const LinuxHWCapMapping hwCap2Mapping[] = {
+ { Features::kAES , 0 }, // HWCAP2_AES
+ { Features::kPMULL , 1 }, // HWCAP2_PMULL
+ { Features::kSHA1 , 2 }, // HWCAP2_SHA1
+ { Features::kSHA2 , 3 }, // HWCAP2_SHA2
+ { Features::kCRC32 , 4 } // HWCAP2_CRC32
+};
+
+static inline void detectCpuARM(CpuInfo& cpu) noexcept {
+ Features& features = cpu._features.as<Features>();
+
+ detectHWCaps(cpu, AT_HWCAP, hwCapMapping, ASMJIT_ARRAY_SIZE(hwCapMapping));
+ detectHWCaps(cpu, AT_HWCAP2, hwCap2Mapping, ASMJIT_ARRAY_SIZE(hwCap2Mapping));
+
+ // VFPv3 implies VFPv2.
+ if (features.hasVFPv3())
+ features.add(Features::kVFPv2);
+
+ // VFPv2 implies ARMv6.
+ if (features.hasVFPv2())
+ features.add(Features::kARMv6);
+
+ // VFPv3|ASIMD implies ARMv7.
+ if (features.hasVFPv3() || features.hasASIMD())
+ features.add(Features::kARMv7);
+
+ if (features.hasAES() || features.hasCRC32() || features.hasPMULL() || features.hasSHA1() || features.hasSHA2())
+ features.add(Features::kARMv8);
+}
+#endif
+
+#if ASMJIT_ARCH_ARM == 64
+// `AT_HWCAP` provides ARMv8+ related flags.
+static const LinuxHWCapMapping hwCapMapping[] = {
+ /*
+ { Features::k , 0 }, // HWCAP_FP
+ */
+ { Features::kASIMD , 1 }, // HWCAP_ASIMD
+ /*
+ { Features::k , 2 }, // HWCAP_EVTSTRM
+ */
+ { Features::kAES , 3 }, // HWCAP_AES
+ { Features::kPMULL , 4 }, // HWCAP_PMULL
+ { Features::kSHA1 , 5 }, // HWCAP_SHA1
+ { Features::kSHA2 , 6 }, // HWCAP_SHA2
+ { Features::kCRC32 , 7 }, // HWCAP_CRC32
+ { Features::kATOMICS , 8 }, // HWCAP_ATOMICS
+ { Features::kFP16CONV , 9 }, // HWCAP_FPHP
+ { Features::kFP16FULL , 10 }, // HWCAP_ASIMDHP
+ { Features::kCPUID , 11 }, // HWCAP_CPUID
+ { Features::kRDMA , 12 }, // HWCAP_ASIMDRDM
+ { Features::kFJCVTZS , 13 }, // HWCAP_JSCVT
+ { Features::kFCMA , 14 }, // HWCAP_FCMA
+ /*
+ { Features::k , 15 }, // HWCAP_LRCPC
+ { Features::k , 16 }, // HWCAP_DCPOP
+ */
+ { Features::kSHA3 , 17 }, // HWCAP_SHA3
+ { Features::kSM3 , 18 }, // HWCAP_SM3
+ { Features::kSM4 , 19 }, // HWCAP_SM4
+ { Features::kDOTPROD , 20 }, // HWCAP_ASIMDDP
+ { Features::kSHA512 , 21 }, // HWCAP_SHA512
+ { Features::kSVE , 22 }, // HWCAP_SVE
+ { Features::kFP16FML , 23 }, // HWCAP_ASIMDFHM
+ /*
+ { Features::k , 24 }, // HWCAP_DIT
+ { Features::k , 25 }, // HWCAP_USCAT
+ { Features::k , 26 }, // HWCAP_ILRCPC
+ */
+ { Features::kFLAGM , 27 }, // HWCAP_FLAGM
+ { Features::kSSBS , 28 }, // HWCAP_SSBS
+ { Features::kSB , 29 } // HWCAP_SB
+ /*
+ { Features::k , 30 }, // HWCAP_PACA
+ { Features::k , 31 } // HWCAP_PACG
+ */
+};
+
+// `AT_HWCAP2` provides ARMv8+ related flags.
+static const LinuxHWCapMapping hwCapMapping2[] = {
+ /*
+ { Features::k , 0 }, // HWCAP2_DCPODP
+ */
+ { Features::kSVE2 , 1 }, // HWCAP2_SVE2
+ { Features::kSVE2_AES , 2 }, // HWCAP2_SVEAES
+ { Features::kSVE_PMULL , 3 }, // HWCAP2_SVEPMULL
+ { Features::kSVE2_BITPERM, 4 }, // HWCAP2_SVEBITPERM
+ { Features::kSVE2_SHA3 , 5 }, // HWCAP2_SVESHA3
+ { Features::kSVE2_SM4 , 6 }, // HWCAP2_SVESM4
+ { Features::kFLAGM2 , 7 }, // HWCAP2_FLAGM2
+ { Features::kFRINT , 8 }, // HWCAP2_FRINT
+ { Features::kSVE_I8MM , 9 }, // HWCAP2_SVEI8MM
+ { Features::kSVE_F32MM , 10 }, // HWCAP2_SVEF32MM
+ { Features::kSVE_F64MM , 11 }, // HWCAP2_SVEF64MM
+ { Features::kSVE_BF16 , 12 }, // HWCAP2_SVEBF16
+ { Features::kI8MM , 13 }, // HWCAP2_I8MM
+ { Features::kFLAGM2 , 14 }, // HWCAP2_BF16
+ { Features::kDGH , 15 } // HWCAP2_DGH
+ /*
+ { Features::k , 16 }, // HWCAP2_RNG
+ { Features::k , 17 }, // HWCAP2_BTI
+ */
+};
+
+static inline void detectCpuAArch64(CpuInfo& cpu) noexcept {
+ detectHWCaps(cpu, AT_HWCAP, hwCapMapping, ASMJIT_ARRAY_SIZE(hwCapMapping));
+ detectHWCaps(cpu, AT_HWCAP, hwCapMapping2, ASMJIT_ARRAY_SIZE(hwCapMapping2));
+}
+#endif
+
+//! Detect ARM CPU features on Linux.
+//!
+//! The detection is based on `getauxval()`.
+ASMJIT_FAVOR_SIZE void detectCpu(CpuInfo& cpu) noexcept {
+ populateBaseFeatures(cpu);
+
+#if ASMJIT_ARCH_ARM == 32
+ detectCpuARM(cpu);
+#else
+ detectCpuAArch64(cpu);
+#endif
+}
+#endif // __linux__
+
+#if defined(__APPLE__)
+
+ASMJIT_FAVOR_SIZE void detectCpu(CpuInfo& cpu) noexcept {
+
+ // use sysctlbyname() to obtain CPU family; match on it as there is no good way to detect individual features
+ uint32_t cpuFamily = 0;
+ size_t l = sizeof(cpuFamily);
+ int res;
+ if ((res = sysctlbyname("hw.cpufamily", &cpuFamily, &l, NULL, 0)) != 0) {
+ fprintf(stderr, "Error with sysctlbyname %d\n", errno);
+ exit(1);
+ }
+ populateBaseFeatures(cpu);
+
+ // TODO: so far, only A13/A14/M1 is reasonably complete.
+ switch(cpuFamily) {
+#if ASMJIT_ARCH_ARM == 32
+ case CPUFAMILY_ARM_SWIFT:
+ default:
+ cpu.addFeature(Features::kARMv6);
+ cpu.addFeature(Features::kARMv7);
+
+ cpu.addFeature(Features::kVFPv2);
+ cpu.addFeature(Features::kVFPv3);
+ cpu.addFeature(Features::kVFPv4); //FeatureVFP4
+
+ cpu.addFeature(Features::kASIMD); //FeatureNEONForFP
+
+ // FeatureHasRetAddrStack,
+
+ // FeatureUseWideStrideVFP,
+ // FeatureMP,
+ // FeatureHWDivThumb,
+ // FeatureHWDivARM,
+ // FeatureAvoidPartialCPSR,
+ // FeatureAvoidMOVsShOp,
+ // FeatureHasSlowFPVMLx,
+ // FeatureHasSlowFPVFMx,
+ // FeatureHasVMLxHazards,
+ // FeatureProfUnpredicate,
+ // FeaturePrefISHSTBarrier,
+ // FeatureSlowOddRegister,
+ // FeatureSlowLoadDSubreg,
+ // FeatureSlowVGETLNi32,
+ // FeatureSlowVDUP32,
+ // FeatureUseMISched,
+ // FeatureNoPostRASched
+ break;
+
+/*
+ // AArch64 is based on ARMv8 and later.
+ cpu.addFeature(Features::kARMv6);
+ cpu.addFeature(Features::kARMv7);
+ cpu.addFeature(Features::kARMv8);
+
+ // AArch64 comes with these features by default.
+ cpu.addFeature(Features::kVFPv2);
+ cpu.addFeature(Features::kVFPv3);
+ cpu.addFeature(Features::kVFPv4);
+ cpu.addFeature(Features::kASIMD);
+ cpu.addFeature(Features::kIDIVA);
+*/
+
+#elif ASMJIT_ARCH_ARM == 64
+ case CPUFAMILY_ARM_FIRESTORM_ICESTORM: // A14 or M1
+ case CPUFAMILY_ARM_LIGHTNING_THUNDER: // A13
+ cpu.addFeature(Features::kARMv8_4); // HasV8_4aOps
+ cpu.addFeature(Features::kFP16FML); // FeatureFP16FML
+ cpu.addFeature(Features::kFP16FULL); // FeatureFullFP16
+ cpu.addFeature(Features::kSHA3); // FeatureSHA3
+ break;
+ // Linux: midr=0x410f0000, revidr=0
+ // Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
+ // atomics fphp asimdhp cpuid asimdrdm jscvt
+ // fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm
+ // dit uscat ilrcpc flagm ssbs
+ // sb paca pacg dcpodp flagm2 frint
+
+ case CPUFAMILY_ARM_VORTEX_TEMPEST: // A12
+ cpu.addFeature(Features::kFP16FULL); // FeatureFullFP16
+ cpu.addFeature(Features::kARMv8_3); // HasV8_3aOps
+ break;
+
+ case CPUFAMILY_ARM_MONSOON_MISTRAL: // A11
+ cpu.addFeature(Features::kFP16FULL); // FeatureFullFP16
+ cpu.addFeature(Features::kARMv8_2); // HasV8_2aOps
+ break;
+
+ case CPUFAMILY_ARM_HURRICANE: // A10
+ cpu.addFeature(Features::kCRC32); // FeatureCRC
+ cpu.addFeature(Features::kRDMA); // FeatureRDM
+ // FeaturePAN
+ // FeatureLOR
+ // FeatureVH
+ break;
+
+ case CPUFAMILY_ARM_TWISTER: // A9
+ case CPUFAMILY_ARM_TYPHOON: // A8
+ case CPUFAMILY_ARM_CYCLONE: // A7
+ default:
+ // FeatureAlternateSExtLoadCVTF32Pattern
+ // FeatureArithmeticBccFusion
+ // FeatureArithmeticCbzFusion
+ // FeatureCrypto
+ cpu.addFeature(Features::kSHA1);
+ cpu.addFeature(Features::kSHA2);
+ cpu.addFeature(Features::kAES);
+ // FeatureDisableLatencySchedHeuristic
+ // FeatureFPARMv8 - included in AArch64
+ // FeatureFuseAES
+ // FeatureFuseCryptoEOR
+ // FeatureNEON
+ // FeaturePerfMon
+ // FeatureZCRegMove
+ // FeatureZCZeroing
+ // FeatureZCZeroingFPWorkaround -- CYCLONE ONLY
+ break;
+
+#endif
+ }
+ populateBaseFeaturesByVersion(cpu);
+}
+
+#endif // __APPLE__
+
+// ============================================================================
+// [asmjit::arm::Features - Detect - Unknown]
+// ============================================================================
+
+#if !defined(_WIN32) && !defined(__linux__) && !defined(__APPLE__)
+ #error "[asmjit] arm::detectCpu() - Unsupported OS."
+#endif
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM && ASMJIT_ARCH_ARM
diff --git a/erts/emulator/asmjit/arm/armfeatures.h b/erts/emulator/asmjit/arm/armfeatures.h
new file mode 100644
index 0000000000..d06c7e031a
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armfeatures.h
@@ -0,0 +1,206 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMFEATURES_H_INCLUDED
+#define ASMJIT_ARM_ARMFEATURES_H_INCLUDED
+
+#include "../core/features.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+//! \addtogroup asmjit_arm
+//! \{
+
+// ============================================================================
+// [asmjit::arm::Features]
+// ============================================================================
+
+//! CPU features (ARM).
+class Features : public BaseFeatures {
+public:
+ //! CPU feature IDs (ARM).
+ enum Id : uint32_t {
+ // @EnumValuesBegin{"enum": "arm::Features::Id"}@
+
+ kNone = 0, //!< No feature (never set, used internally).
+
+ kTHUMB, //!< THUMB v1 ISA available.
+ kTHUMBv2, //!< THUMB v2 ISA available.
+
+ kARMv6, //!< ARMv6 ISA available.
+ kARMv7, //!< ARMv7 ISA available.
+ kARMv8, //!< ARMv8 ISA available.
+ kARMv8_1, //!< ARMv8.1 ISA available.
+ kARMv8_2, //!< ARMv8.2 ISA available.
+ kARMv8_3, //!< ARMv8.3 ISA available.
+ kARMv8_4, //!< ARMv8.4 ISA available.
+ kARMv8_5, //!< ARMv8.5 ISA available.
+ kARMv8_6, //!< ARMv8.6 ISA available.
+
+ kVFPv2, //!< CPU has VFPv2 instruction set.
+ kVFPv3, //!< CPU has VFPv3 instruction set.
+ kVFPv4, //!< CPU has VFPv4 instruction set.
+ kVFP_D32, //!< CPU has 32 VFP-D (64-bit) registers.
+
+ kAES, //!< CPU has AES instructions (AArch64 only).
+ kASIMD, //!< CPU has Advanced SIMD (NEON on ARM/THUMB).
+ kATOMICS, //!< CPU has 64-bit atomics (AArch64 only).
+ kBF16, //!< CPU has BF16 instructions (AArch64 only).
+ kCPUID, //!< CPU has CPUID register (ID_AA64ZFR0_EL1).
+ kCRC32, //!< CPU has CRC32 instructions.
+ kDGH, //!< CPU has DGH instruction (AArch64 only).
+ kDOTPROD, //!< CPU has DOTPROD instructions (SDOT/UDOT).
+ kEDSP, //!< CPU has EDSP extensions (ARM/THUMB only).
+ kFCMA, //!< CPU has FCMA instructions (FCADD/FCMLA).
+ kFJCVTZS, //!< CPU has FJCVTZS instruction (AArch64 only).
+ kFLAGM, //!< CPU has FLAGM instructions (AArch64 only).
+ kFLAGM2, //!< CPU has FLAGM2 instructions (AArch64 only).
+ kFP16CONV, //!< CPU has FP16 (half-float) conversion instructions.
+ kFP16FML, //!< CPU has FMLAL{2}/FMLSL{2} instructions.
+ kFP16FULL, //!< CPU has full support for FP16 instructions.
+ kFRINT, //!< CPU has FRINT[32|64][X|Z] instructions (AArch64 only).
+ kI8MM, //!< CPU has I8MM instructions (AArch64 only).
+ kIDIVA, //!< CPU has hardware SDIV and UDIV (ARM mode).
+ kIDIVT, //!< CPU has hardware SDIV and UDIV (THUMB mode).
+ kMTE, //!< CPU has MTE instructions (AArch64 only).
+ kRDMA, //!< CPU has RDMA instructions (AArch64 only).
+ kPMULL, //!< CPU has PMULL instructions (AArch64 only).
+ kSB, //!< CPU has SB (speculative barrier) instruction (AArch64 only).
+ kSHA1, //!< CPU has SHA1 instructions.
+ kSHA2, //!< CPU has SHA2 instructions.
+ kSHA3, //!< CPU has SHA3 instructions.
+ kSHA512, //!< CPU has SHA512 instructions.
+ kSM3, //!< CPU has SM3 instructions.
+ kSM4, //!< CPU has SM4 instructions.
+ kSSBS, //!< CPU has SSBS instructions.
+ kSVE, //!< CPU has SVE instructions (AArch64 only).
+ kSVE_BF16, //!< CPU has SVE-BF16 instructions.
+ kSVE_F32MM, //!< CPU has SVE-F32MM instructions.
+ kSVE_F64MM, //!< CPU has SVE-F64MM instructions.
+ kSVE_I8MM, //!< CPU has SVE-I8MM instructions.
+ kSVE_PMULL, //!< CPU has SVE-PMULL instructions.
+ kSVE2, //!< CPU has SVE2 instructions (AArch64 only).
+ kSVE2_AES, //!< CPU has SVE2-AES instructions.
+ kSVE2_BITPERM, //!< CPU has SVE2-BITPERM instructions.
+ kSVE2_SHA3, //!< CPU has SVE2-SHA3 instructions.
+ kSVE2_SM4, //!< CPU has SVE2-SM4 instructions.
+
+ // @EnumValuesEnd@
+
+ kCount //!< Count of ARM CPU features.
+ };
+
+ //! \name Construction / Destruction
+ //! \{
+
+ inline Features() noexcept
+ : BaseFeatures() {}
+
+ inline Features(const Features& other) noexcept
+ : BaseFeatures(other) {}
+
+ //! \}
+
+ //! \name Overloaded Operators
+ //! \{
+
+ inline Features& operator=(const Features& other) noexcept = default;
+
+ //! \}
+
+ //! \name Accessors
+ //! \{
+
+ #define ASMJIT_ARM_FEATURE(FEATURE) \
+ inline bool has##FEATURE() const noexcept { return has(k##FEATURE); }
+
+ ASMJIT_ARM_FEATURE(THUMB)
+ ASMJIT_ARM_FEATURE(THUMBv2)
+
+ ASMJIT_ARM_FEATURE(ARMv6)
+ ASMJIT_ARM_FEATURE(ARMv7)
+ ASMJIT_ARM_FEATURE(ARMv8)
+ ASMJIT_ARM_FEATURE(ARMv8_1)
+ ASMJIT_ARM_FEATURE(ARMv8_2)
+ ASMJIT_ARM_FEATURE(ARMv8_3)
+ ASMJIT_ARM_FEATURE(ARMv8_4)
+ ASMJIT_ARM_FEATURE(ARMv8_5)
+ ASMJIT_ARM_FEATURE(ARMv8_6)
+
+ ASMJIT_ARM_FEATURE(VFPv2)
+ ASMJIT_ARM_FEATURE(VFPv3)
+ ASMJIT_ARM_FEATURE(VFPv4)
+ ASMJIT_ARM_FEATURE(VFP_D32)
+
+ ASMJIT_ARM_FEATURE(AES)
+ ASMJIT_ARM_FEATURE(ASIMD)
+ ASMJIT_ARM_FEATURE(ATOMICS)
+ ASMJIT_ARM_FEATURE(BF16)
+ ASMJIT_ARM_FEATURE(CPUID)
+ ASMJIT_ARM_FEATURE(CRC32)
+ ASMJIT_ARM_FEATURE(DOTPROD)
+ ASMJIT_ARM_FEATURE(EDSP)
+ ASMJIT_ARM_FEATURE(FCMA)
+ ASMJIT_ARM_FEATURE(FLAGM)
+ ASMJIT_ARM_FEATURE(FLAGM2)
+ ASMJIT_ARM_FEATURE(FP16CONV)
+ ASMJIT_ARM_FEATURE(FP16FML)
+ ASMJIT_ARM_FEATURE(FP16FULL)
+ ASMJIT_ARM_FEATURE(FRINT)
+ ASMJIT_ARM_FEATURE(IDIVA)
+ ASMJIT_ARM_FEATURE(IDIVT)
+ ASMJIT_ARM_FEATURE(MTE)
+ ASMJIT_ARM_FEATURE(FJCVTZS)
+ ASMJIT_ARM_FEATURE(I8MM)
+ ASMJIT_ARM_FEATURE(PMULL)
+ ASMJIT_ARM_FEATURE(RDMA)
+ ASMJIT_ARM_FEATURE(SB)
+ ASMJIT_ARM_FEATURE(SHA1)
+ ASMJIT_ARM_FEATURE(SHA2)
+ ASMJIT_ARM_FEATURE(SHA3)
+ ASMJIT_ARM_FEATURE(SHA512)
+ ASMJIT_ARM_FEATURE(SM3)
+ ASMJIT_ARM_FEATURE(SM4)
+ ASMJIT_ARM_FEATURE(SSBS)
+ ASMJIT_ARM_FEATURE(SVE)
+ ASMJIT_ARM_FEATURE(SVE_BF16)
+ ASMJIT_ARM_FEATURE(SVE_F32MM)
+ ASMJIT_ARM_FEATURE(SVE_F64MM)
+ ASMJIT_ARM_FEATURE(SVE_I8MM)
+ ASMJIT_ARM_FEATURE(SVE_PMULL)
+ ASMJIT_ARM_FEATURE(SVE2)
+ ASMJIT_ARM_FEATURE(SVE2_AES)
+ ASMJIT_ARM_FEATURE(SVE2_BITPERM)
+ ASMJIT_ARM_FEATURE(SVE2_SHA3)
+ ASMJIT_ARM_FEATURE(SVE2_SM4)
+
+ #undef ASMJIT_ARM_FEATURE
+
+ //! \}
+};
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_ARMFEATURES_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/armformatter.cpp b/erts/emulator/asmjit/arm/armformatter.cpp
new file mode 100644
index 0000000000..280371c12f
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armformatter.cpp
@@ -0,0 +1,428 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#ifndef ASMJIT_NO_LOGGING
+
+#include "../core/misc_p.h"
+#include "../core/support.h"
+#include "../arm/armfeatures.h"
+#include "../arm/armformatter_p.h"
+#include "../arm/armoperand.h"
+#include "../arm/a64instdb_p.h"
+
+#ifndef ASMJIT_NO_COMPILER
+ #include "../core/compiler.h"
+#endif
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+// ============================================================================
+// [asmjit::arm::FormatterInternal - Format Feature]
+// ============================================================================
+
+Error FormatterInternal::formatFeature(String& sb, uint32_t featureId) noexcept {
+ // @EnumStringBegin{"enum": "arm::Features::Id", "output": "sFeature", "strip": "k"}@
+ static const char sFeatureString[] =
+ "None\0"
+ "THUMB\0"
+ "THUMBv2\0"
+ "ARMv6\0"
+ "ARMv7\0"
+ "ARMv8\0"
+ "ARMv8_1\0"
+ "ARMv8_2\0"
+ "ARMv8_3\0"
+ "ARMv8_4\0"
+ "ARMv8_5\0"
+ "ARMv8_6\0"
+ "VFPv2\0"
+ "VFPv3\0"
+ "VFPv4\0"
+ "VFP_D32\0"
+ "AES\0"
+ "ASIMD\0"
+ "ATOMICS\0"
+ "BF16\0"
+ "CPUID\0"
+ "CRC32\0"
+ "DGH\0"
+ "DOTPROD\0"
+ "EDSP\0"
+ "FCMA\0"
+ "FJCVTZS\0"
+ "FLAGM\0"
+ "FLAGM2\0"
+ "FP16CONV\0"
+ "FP16FML\0"
+ "FP16FULL\0"
+ "FRINT\0"
+ "I8MM\0"
+ "IDIVA\0"
+ "IDIVT\0"
+ "MTE\0"
+ "RDMA\0"
+ "PMULL\0"
+ "SB\0"
+ "SHA1\0"
+ "SHA2\0"
+ "SHA3\0"
+ "SHA512\0"
+ "SM3\0"
+ "SM4\0"
+ "SSBS\0"
+ "SVE\0"
+ "SVE_BF16\0"
+ "SVE_F32MM\0"
+ "SVE_F64MM\0"
+ "SVE_I8MM\0"
+ "SVE_PMULL\0"
+ "SVE2\0"
+ "SVE2_AES\0"
+ "SVE2_BITPERM\0"
+ "SVE2_SHA3\0"
+ "SVE2_SM4\0"
+ "<Unknown>\0";
+
+ static const uint16_t sFeatureIndex[] = {
+ 0, 5, 11, 19, 25, 31, 37, 45, 53, 61, 69, 77, 85, 91, 97, 103, 111, 115,
+ 121, 129, 134, 140, 146, 150, 158, 163, 168, 176, 182, 189, 198, 206, 215,
+ 221, 226, 232, 238, 242, 247, 253, 256, 261, 266, 271, 278, 282, 286, 291,
+ 295, 304, 314, 324, 333, 343, 348, 357, 370, 380, 389
+ };
+ // @EnumStringEnd@
+
+ return sb.append(sFeatureString + sFeatureIndex[Support::min<uint32_t>(featureId, arm::Features::kCount)]);
+}
+
+// ============================================================================
+// [asmjit::arm::FormatterInternal - Format Constants]
+// ============================================================================
+
+ASMJIT_FAVOR_SIZE Error FormatterInternal::formatCondCode(String& sb, uint32_t condCode) noexcept {
+ static const char condCodeData[] =
+ "eq\0" "ne\0" "cs\0" "cc\0" "mi\0" "pl\0" "vs\0" "vc\0"
+ "hi\0" "ls\0" "ge\0" "lt\0" "gt\0" "le\0" "al\0" "na\0"
+ "<Unknown>";
+ return sb.append(condCodeData + Support::min<uint32_t>(condCode, 16u) * 3);
+}
+
+ASMJIT_FAVOR_SIZE Error FormatterInternal::formatShiftOp(String& sb, uint32_t shiftOp) noexcept {
+ const char* str = "<Unknown>";
+ switch (shiftOp) {
+ case Shift::kOpLSL: str = "lsl"; break;
+ case Shift::kOpLSR: str = "lsr"; break;
+ case Shift::kOpASR: str = "asr"; break;
+ case Shift::kOpROR: str = "ror"; break;
+ case Shift::kOpRRX: str = "rrx"; break;
+ case Shift::kOpUXTB: str = "uxtb"; break;
+ case Shift::kOpUXTH: str = "uxth"; break;
+ case Shift::kOpUXTW: str = "uxtw"; break;
+ case Shift::kOpUXTX: str = "uxtx"; break;
+ case Shift::kOpSXTB: str = "sxtb"; break;
+ case Shift::kOpSXTH: str = "sxth"; break;
+ case Shift::kOpSXTW: str = "sxtw"; break;
+ case Shift::kOpSXTX: str = "sxtx"; break;
+ }
+ return sb.append(str);
+}
+
+// ============================================================================
+// [asmjit::arm::FormatterInternal - Format Register]
+// ============================================================================
+
+ASMJIT_FAVOR_SIZE Error FormatterInternal::formatRegister(
+ String& sb, uint32_t flags,
+ const BaseEmitter* emitter,
+ uint32_t arch,
+ uint32_t rType,
+ uint32_t rId,
+ uint32_t elementType,
+ uint32_t elementIndex) noexcept {
+
+ static const char bhsdq[] = "bhsdq";
+
+ bool virtRegFormatted = false;
+
+#ifndef ASMJIT_NO_COMPILER
+ if (Operand::isVirtId(rId)) {
+ if (emitter && emitter->emitterType() == BaseEmitter::kTypeCompiler) {
+ const BaseCompiler* cc = static_cast<const BaseCompiler*>(emitter);
+ if (cc->isVirtIdValid(rId)) {
+ VirtReg* vReg = cc->virtRegById(rId);
+ ASMJIT_ASSERT(vReg != nullptr);
+
+ const char* name = vReg->name();
+ if (name && name[0] != '\0')
+ ASMJIT_PROPAGATE(sb.append(name));
+ else
+ ASMJIT_PROPAGATE(sb.appendFormat("%%%u", unsigned(Operand::virtIdToIndex(rId))));
+
+ virtRegFormatted = true;
+ }
+ }
+ }
+#else
+ DebugUtils::unused(emitter, flags);
+#endif
+
+ if (!virtRegFormatted) {
+ char letter = '\0';
+ switch (rType) {
+ case Reg::kTypeGpW:
+ if (rId == Gp::kIdZr)
+ return sb.append("wzr");
+ if (rId == Gp::kIdSp)
+ return sb.append("wsp");
+
+ letter = 'w';
+ break;
+
+ case Reg::kTypeGpX:
+ if (rId == Gp::kIdZr)
+ return sb.append("xzr");
+ if (rId == Gp::kIdSp)
+ return sb.append("sp");
+
+ letter = 'x';
+ break;
+
+ case Reg::kTypeVecB:
+ case Reg::kTypeVecH:
+ case Reg::kTypeVecS:
+ case Reg::kTypeVecD:
+ case Reg::kTypeVecV:
+ letter = bhsdq[rType - Reg::kTypeVecB];
+ if (elementType)
+ letter = 'v';
+ break;
+
+ default:
+ ASMJIT_PROPAGATE(sb.appendFormat("<Reg-%u>?$u", rType, rId));
+ break;
+ }
+
+ if (letter)
+ ASMJIT_PROPAGATE(sb.appendFormat("%c%u", letter, rId));
+ }
+
+ if (elementType) {
+ char elementLetter = '\0';
+ uint32_t elementCount = 0;
+
+ switch (elementType) {
+ case Vec::kElementTypeB:
+ elementLetter = 'b';
+ elementCount = 16;
+ break;
+
+ case Vec::kElementTypeH:
+ elementLetter = 'h';
+ elementCount = 8;
+ break;
+
+ case Vec::kElementTypeS:
+ elementLetter = 's';
+ elementCount = 4;
+ break;
+
+ case Vec::kElementTypeD:
+ elementLetter = 'd';
+ elementCount = 2;
+ break;
+
+ default:
+ return sb.append(".<Unknown>");
+ }
+
+ if (elementLetter) {
+ if (elementIndex == 0xFFFFFFFFu) {
+ if (rType == Reg::kTypeVecD)
+ elementCount /= 2u;
+ ASMJIT_PROPAGATE(sb.appendFormat(".%u%c", elementCount, elementLetter));
+ }
+ else {
+ ASMJIT_PROPAGATE(sb.appendFormat(".%c[%u]", elementLetter, elementIndex));
+ }
+ }
+ }
+
+ return kErrorOk;
+}
+
+// ============================================================================
+// [asmjit::arm::FormatterInternal - Format Operand]
+// ============================================================================
+
+ASMJIT_FAVOR_SIZE Error FormatterInternal::formatOperand(
+ String& sb,
+ uint32_t flags,
+ const BaseEmitter* emitter,
+ uint32_t arch,
+ const Operand_& op) noexcept {
+
+ if (op.isReg()) {
+ const BaseReg& reg = op.as<BaseReg>();
+
+ uint32_t elementType = op.as<Vec>().elementType();
+ uint32_t elementIndex = op.as<Vec>().elementIndex();
+
+ if (!op.as<Vec>().hasElementIndex())
+ elementIndex = 0xFFFFFFFFu;
+
+ return formatRegister(sb, flags, emitter, arch, reg.type(), reg.id(), elementType, elementIndex);
+ }
+
+ if (op.isMem()) {
+ const Mem& m = op.as<Mem>();
+ ASMJIT_PROPAGATE(sb.append('['));
+
+ if (m.hasBase()) {
+ if (m.hasBaseLabel()) {
+ ASMJIT_PROPAGATE(Formatter::formatLabel(sb, flags, emitter, m.baseId()));
+ }
+ else {
+ uint32_t modifiedFlags = flags;
+ if (m.isRegHome()) {
+ ASMJIT_PROPAGATE(sb.append('&'));
+ modifiedFlags &= ~FormatOptions::kFlagRegCasts;
+ }
+ ASMJIT_PROPAGATE(formatRegister(sb, modifiedFlags, emitter, arch, m.baseType(), m.baseId()));
+ }
+ }
+ else {
+ // ARM really requires base.
+ if (m.hasIndex() || m.hasOffset()) {
+ ASMJIT_PROPAGATE(sb.append("<None>"));
+ }
+ }
+
+ // The post index makes it look like there was another operand, but it's
+ // still the part of AsmJit's `arm::Mem` operand so it's consistent with
+ // other architectures.
+ if (m.isPostIndex())
+ ASMJIT_PROPAGATE(sb.append(']'));
+
+ if (m.hasIndex()) {
+ ASMJIT_PROPAGATE(sb.append(", "));
+ ASMJIT_PROPAGATE(formatRegister(sb, flags, emitter, arch, m.indexType(), m.indexId()));
+ }
+
+ if (m.hasOffset()) {
+ ASMJIT_PROPAGATE(sb.append(", "));
+
+ int64_t off = int64_t(m.offset());
+ uint32_t base = 10;
+
+ if ((flags & FormatOptions::kFlagHexOffsets) != 0 && uint64_t(off) > 9)
+ base = 16;
+
+ if (base == 10) {
+ ASMJIT_PROPAGATE(sb.appendInt(off, base));
+ }
+ else {
+ ASMJIT_PROPAGATE(sb.append("0x"));
+ ASMJIT_PROPAGATE(sb.appendUInt(uint64_t(off), base));
+ }
+ }
+
+ if (m.hasShift()) {
+ ASMJIT_PROPAGATE(sb.append(' '));
+ if (!m.isPreOrPost())
+ ASMJIT_PROPAGATE(formatShiftOp(sb, m.predicate()));
+ ASMJIT_PROPAGATE(sb.appendFormat(" %u", m.shift()));
+ }
+
+ if (!m.isPostIndex())
+ ASMJIT_PROPAGATE(sb.append(']'));
+
+ if (m.isPreIndex())
+ ASMJIT_PROPAGATE(sb.append('!'));
+
+ return kErrorOk;
+ }
+
+ if (op.isImm()) {
+ const Imm& i = op.as<Imm>();
+ int64_t val = i.value();
+
+ if ((flags & FormatOptions::kFlagHexImms) != 0 && uint64_t(val) > 9) {
+ ASMJIT_PROPAGATE(sb.append("0x"));
+ return sb.appendUInt(uint64_t(val), 16);
+ }
+ else {
+ return sb.appendInt(val, 10);
+ }
+ }
+
+ if (op.isLabel()) {
+ return Formatter::formatLabel(sb, flags, emitter, op.id());
+ }
+
+ return sb.append("<None>");
+}
+
+// ============================================================================
+// [asmjit::arm::FormatterInternal - Format Instruction]
+// ============================================================================
+
+ASMJIT_FAVOR_SIZE Error FormatterInternal::formatInstruction(
+ String& sb,
+ uint32_t flags,
+ const BaseEmitter* emitter,
+ uint32_t arch,
+ const BaseInst& inst, const Operand_* operands, size_t opCount) noexcept {
+
+ uint32_t instId = inst.id();
+
+ if (Environment::isArchAArch64(arch)) {
+ // Format instruction options and instruction mnemonic.
+ if (instId < a64::Inst::_kIdCount)
+ ASMJIT_PROPAGATE(InstAPI::instIdToString(arch, instId, sb));
+ else
+ ASMJIT_PROPAGATE(sb.appendFormat("[InstId=#%u]", unsigned(instId)));
+
+ if (inst.hasOption(a64::Inst::kOptionCondFlagMask)) {
+ ASMJIT_PROPAGATE(sb.append('.'));
+ ASMJIT_PROPAGATE(formatCondCode(sb, inst.options() >> a64::Inst::kOptionCondCodeShift));
+ }
+ }
+ else {
+ // TODO: [ARM] 32-bit ARM support.
+ }
+
+ for (uint32_t i = 0; i < opCount; i++) {
+ const Operand_& op = operands[i];
+ if (op.isNone())
+ break;
+
+ ASMJIT_PROPAGATE(sb.append(i == 0 ? " " : ", "));
+ ASMJIT_PROPAGATE(formatOperand(sb, flags, emitter, arch, op));
+ }
+
+ return kErrorOk;
+}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_LOGGING
diff --git a/erts/emulator/asmjit/arm/armformatter_p.h b/erts/emulator/asmjit/arm/armformatter_p.h
new file mode 100644
index 0000000000..664a352acd
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armformatter_p.h
@@ -0,0 +1,90 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMFORMATTER_P_H_INCLUDED
+#define ASMJIT_ARM_ARMFORMATTER_P_H_INCLUDED
+
+#include "../core/api-config.h"
+#ifndef ASMJIT_NO_LOGGING
+
+#include "../core/formatter.h"
+#include "../core/string.h"
+#include "../arm/armglobals.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+//! \cond INTERNAL
+//! \addtogroup asmjit_arm
+//! \{
+
+// ============================================================================
+// [asmjit::arm::FormatterInternal]
+// ============================================================================
+
+namespace FormatterInternal {
+
+Error formatFeature(
+ String& sb,
+ uint32_t featureId) noexcept;
+
+Error formatCondCode(
+ String& sb,
+ uint32_t condCode) noexcept;
+
+Error formatShiftOp(
+ String& sb,
+ uint32_t shiftOp) noexcept;
+
+Error formatRegister(
+ String& sb,
+ uint32_t flags,
+ const BaseEmitter* emitter,
+ uint32_t arch,
+ uint32_t regType,
+ uint32_t regId,
+ uint32_t elementType = 0,
+ uint32_t elementIndex = 0xFFFFFFFFu) noexcept;
+
+Error formatOperand(
+ String& sb,
+ uint32_t flags,
+ const BaseEmitter* emitter,
+ uint32_t arch,
+ const Operand_& op) noexcept;
+
+Error formatInstruction(
+ String& sb,
+ uint32_t flags,
+ const BaseEmitter* emitter,
+ uint32_t arch,
+ const BaseInst& inst, const Operand_* operands, size_t opCount) noexcept;
+
+} // {FormatterInternal}
+
+//! \}
+//! \endcond
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_LOGGING
+#endif // ASMJIT_ARM_ARMFORMATTER_P_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/armfunc.cpp b/erts/emulator/asmjit/arm/armfunc.cpp
new file mode 100644
index 0000000000..1f2d7cedae
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armfunc.cpp
@@ -0,0 +1,220 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#include "../core/api-build_p.h"
+#if !defined(ASMJIT_NO_ARM)
+
+#include "../arm/armfunc_p.h"
+#include "../arm/armoperand.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+// ============================================================================
+// [asmjit::arm::FuncInternal]
+// ============================================================================
+
+namespace FuncInternal {
+
+static inline bool shouldThreatAsCDecl(uint32_t ccId) noexcept {
+ return ccId == CallConv::kIdCDecl ||
+ ccId == CallConv::kIdStdCall ||
+ ccId == CallConv::kIdFastCall ||
+ ccId == CallConv::kIdVectorCall ||
+ ccId == CallConv::kIdThisCall ||
+ ccId == CallConv::kIdRegParm1 ||
+ ccId == CallConv::kIdRegParm2 ||
+ ccId == CallConv::kIdRegParm3;
+}
+
+static uint32_t regTypeFromFpOrVecTypeId(uint32_t typeId) noexcept {
+ if (typeId == Type::kIdF32)
+ return Reg::kTypeVecS;
+ else if (typeId == Type::kIdF64)
+ return Reg::kTypeVecD;
+ else if (Type::isVec32(typeId))
+ return Reg::kTypeVecS;
+ else if (Type::isVec64(typeId))
+ return Reg::kTypeVecD;
+ else if (Type::isVec128(typeId))
+ return Reg::kTypeVecV;
+ else
+ return 0;
+}
+
+ASMJIT_FAVOR_SIZE Error initCallConv(CallConv& cc, uint32_t ccId, const Environment& environment) noexcept {
+ cc.setArch(environment.arch());
+
+ if (environment.is32Bit()) {
+ // TODO: [ARM] 32-bit ARM not supported yet.
+ return DebugUtils::errored(kErrorInvalidState);
+ }
+ else {
+ cc.setSaveRestoreRegSize(Reg::kGroupGp, 8);
+ cc.setSaveRestoreRegSize(Reg::kGroupVec, 8);
+ cc.setSaveRestoreAlignment(Reg::kGroupGp, 16);
+ cc.setSaveRestoreAlignment(Reg::kGroupVec, 16);
+ cc.setSaveRestoreAlignment(Reg::kGroupOther0, 1);
+ cc.setSaveRestoreAlignment(Reg::kGroupOther1, 1);
+
+ cc.setPassedOrder(Reg::kGroupGp, 0, 1, 2, 3, 4, 5, 6, 7);
+ cc.setPassedOrder(Reg::kGroupVec, 0, 1, 2, 3, 4, 5, 6, 7);
+ cc.setNaturalStackAlignment(16);
+
+ if (shouldThreatAsCDecl(ccId)) {
+ // ARM doesn't have that many calling conventions as we can find in X86 world, treat most conventions as __cdecl.
+ cc.setId(CallConv::kIdCDecl);
+ cc.setPreservedRegs(Reg::kGroupGp, Support::bitMask(Gp::kIdOs, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30));
+ cc.setPreservedRegs(Reg::kGroupVec, Support::bitMask(8, 9, 10, 11, 12, 13, 14, 15));
+ }
+ else {
+ cc.setId(ccId);
+ cc.setSaveRestoreRegSize(Reg::kGroupVec, 16);
+ cc.setPreservedRegs(Reg::kGroupGp, Support::bitMask(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30));
+ cc.setPreservedRegs(Reg::kGroupVec, Support::bitMask(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31));
+ }
+
+ return kErrorOk;
+ }
+}
+
+ASMJIT_FAVOR_SIZE Error initFuncDetail(FuncDetail& func, const FuncSignature& signature, uint32_t registerSize) noexcept {
+ const CallConv& cc = func.callConv();
+ uint32_t stackOffset = 0;
+
+ uint32_t i;
+ uint32_t argCount = func.argCount();
+
+ if (func.hasRet()) {
+ for (uint32_t valueIndex = 0; valueIndex < Globals::kMaxValuePack; valueIndex++) {
+ uint32_t typeId = func._rets[valueIndex].typeId();
+
+ // Terminate at the first void type (end of the pack).
+ if (!typeId)
+ break;
+
+ switch (typeId) {
+ case Type::kIdI8:
+ case Type::kIdI16:
+ case Type::kIdI32: {
+ func._rets[valueIndex].initReg(Reg::kTypeGpW, valueIndex, Type::kIdI32);
+ break;
+ }
+
+ case Type::kIdU8:
+ case Type::kIdU16:
+ case Type::kIdU32: {
+ func._rets[valueIndex].initReg(Reg::kTypeGpW, valueIndex, Type::kIdU32);
+ break;
+ }
+
+ case Type::kIdI64:
+ case Type::kIdU64: {
+ func._rets[valueIndex].initReg(Reg::kTypeGpX, valueIndex, typeId);
+ break;
+ }
+
+ default: {
+ uint32_t regType = regTypeFromFpOrVecTypeId(typeId);
+ if (!regType)
+ return DebugUtils::errored(kErrorInvalidRegType);
+
+ func._rets[valueIndex].initReg(regType, valueIndex, typeId);
+ break;
+ }
+ }
+ }
+ }
+
+ switch (cc.strategy()) {
+ case CallConv::kStrategyDefault: {
+ uint32_t gpzPos = 0;
+ uint32_t vecPos = 0;
+
+ for (i = 0; i < argCount; i++) {
+ FuncValue& arg = func._args[i][0];
+ uint32_t typeId = arg.typeId();
+
+ if (Type::isInt(typeId)) {
+ uint32_t regId = BaseReg::kIdBad;
+
+ if (gpzPos < CallConv::kMaxRegArgsPerGroup)
+ regId = cc._passedOrder[Reg::kGroupGp].id[gpzPos];
+
+ if (regId != BaseReg::kIdBad) {
+ uint32_t regType = (typeId <= Type::kIdU32) ? Reg::kTypeGpW : Reg::kTypeGpX;
+ arg.assignRegData(regType, regId);
+ func.addUsedRegs(Reg::kGroupGp, Support::bitMask(regId));
+ gpzPos++;
+ }
+ else {
+#if defined(__APPLE__)
+ uint32_t size = Type::sizeOf(typeId);
+#else
+ uint32_t size = Support::max<uint32_t>(Type::sizeOf(typeId), registerSize);
+#endif
+ arg.assignStackOffset(int32_t(stackOffset));
+ stackOffset += size;
+ }
+ continue;
+ }
+
+ if (Type::isFloat(typeId) || Type::isVec(typeId)) {
+ uint32_t regId = BaseReg::kIdBad;
+
+ if (vecPos < CallConv::kMaxRegArgsPerGroup)
+ regId = cc._passedOrder[Reg::kGroupVec].id[vecPos];
+
+ if (regId != BaseReg::kIdBad) {
+ uint32_t regType = regTypeFromFpOrVecTypeId(typeId);
+ if (!regType)
+ return DebugUtils::errored(kErrorInvalidRegType);
+
+ arg.initTypeId(typeId);
+ arg.assignRegData(regType, regId);
+ func.addUsedRegs(Reg::kGroupVec, Support::bitMask(regId));
+ vecPos++;
+ }
+ else {
+ uint32_t size = Type::sizeOf(typeId);
+ arg.assignStackOffset(int32_t(stackOffset));
+ stackOffset += size;
+ }
+ continue;
+ }
+ }
+ break;
+ }
+
+ default:
+ return DebugUtils::errored(kErrorInvalidState);
+ }
+
+ func._argStackSize = stackOffset;
+ return kErrorOk;
+}
+
+} // {FuncInternal}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // !ASMJIT_NO_ARM
diff --git a/erts/emulator/asmjit/arm/armfunc_p.h b/erts/emulator/asmjit/arm/armfunc_p.h
new file mode 100644
index 0000000000..c8e589a02a
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armfunc_p.h
@@ -0,0 +1,55 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMFUNC_P_H_INCLUDED
+#define ASMJIT_ARM_ARMFUNC_P_H_INCLUDED
+
+#include "../core/func.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+//! \cond INTERNAL
+//! \addtogroup asmjit_arm
+//! \{
+
+// ============================================================================
+// [asmjit::arm::FuncInternal]
+// ============================================================================
+
+//! ARM-specific function API (calling conventions and other utilities).
+namespace FuncInternal {
+
+//! Initialize `CallConv` structure (ARM specific).
+Error initCallConv(CallConv& cc, uint32_t ccId, const Environment& environment) noexcept;
+
+//! Initialize `FuncDetail` (ARM specific).
+Error initFuncDetail(FuncDetail& func, const FuncSignature& signature, uint32_t registerSize) noexcept;
+
+} // {FuncInternal}
+
+//! \}
+//! \endcond
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_ARMFUNC_P_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/armglobals.h b/erts/emulator/asmjit/arm/armglobals.h
new file mode 100644
index 0000000000..bbe09cb830
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armglobals.h
@@ -0,0 +1,98 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMGLOBALS_H_INCLUDED
+#define ASMJIT_ARM_ARMGLOBALS_H_INCLUDED
+
+#include "../core/archcommons.h"
+#include "../core/inst.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+//! \addtogroup asmjit_arm
+//! \{
+
+// ============================================================================
+// [asmjit::arm::Cond]
+// ============================================================================
+
+//! Condition code (ARM|AArch64).
+namespace Cond {
+ enum Value : uint32_t {
+ kEQ = 0x00u, //!< Z==1 (any_sign ==)
+ kNE = 0x01u, //!< Z==0 (any_sign !=)
+ kCS = 0x02u, //!< C==1 (unsigned >=)
+ kHS = 0x02u, //!< C==1 (unsigned >=)
+ kCC = 0x03u, //!< C==0 (unsigned < )
+ kLO = 0x03u, //!< C==0 (unsigned < )
+ kMI = 0x04u, //!< N==1 (is negative)
+ kPL = 0x05u, //!< N==0 (is positive or zero)
+ kVS = 0x06u, //!< V==1 (is overflow)
+ kVC = 0x07u, //!< V==0 (no overflow)
+ kHI = 0x08u, //!< C==1 & Z==0 (unsigned > )
+ kLS = 0x09u, //!< C==0 | Z==1 (unsigned <=)
+ kGE = 0x0Au, //!< N==V (signed >=)
+ kLT = 0x0Bu, //!< N!=V (signed < )
+ kGT = 0x0Cu, //!< Z==0 & N==V (signed > )
+ kLE = 0x0Du, //!< Z==1 | N!=V (signed <=)
+ kAL = 0x0Eu, //!< (no condition code) (always)
+ kNA = 0x0Fu, //!< (not available) (special)
+ kCount = 0x10u,
+
+ kSign = kMI, //!< Sign.
+ kNotSign = kPL, //!< Not sign.
+
+ kOverflow = kVS, //!< Signed overflow.
+ kNotOverflow = kVC, //!< Not signed overflow.
+
+ kEqual = kEQ, //!< Equal `a == b`.
+ kNotEqual = kNE, //!< Not Equal `a != b`.
+
+ kZero = kEQ, //!< Zero (alias to equal).
+ kNotZero = kNE, //!< Not Zero (alias to Not Equal).
+
+ kNegative = kMI, //!< Negative.
+ kPositive = kPL, //!< Positive or zero.
+
+ kSignedLT = kLT, //!< Signed `a < b`.
+ kSignedLE = kLE, //!< Signed `a <= b`.
+ kSignedGT = kGT, //!< Signed `a > b`.
+ kSignedGE = kGE, //!< Signed `a >= b`.
+
+ kUnsignedLT = kLO, //!< Unsigned `a < b`.
+ kUnsignedLE = kLS, //!< Unsigned `a <= b`.
+ kUnsignedGT = kHI, //!< Unsigned `a > b`.
+ kUnsignedGE = kHS, //!< Unsigned `a >= b`.
+
+ kAlways = kAL //!< No condition code (always).
+ };
+
+ //! Negates a condition code.
+ static constexpr uint32_t negate(uint32_t cond) noexcept { return cond ^ 1u; }
+}
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+#endif // ASMJIT_ARM_ARMGLOBALS_H_INCLUDED
diff --git a/erts/emulator/asmjit/arm/armoperand.h b/erts/emulator/asmjit/arm/armoperand.h
new file mode 100644
index 0000000000..532e9eb6ee
--- /dev/null
+++ b/erts/emulator/asmjit/arm/armoperand.h
@@ -0,0 +1,648 @@
+// AsmJit - Machine code generation for C++
+//
+// * Official AsmJit Home Page: https://asmjit.com
+// * Official Github Repository: https://github.com/asmjit/asmjit
+//
+// Copyright (c) 2008-2020 The AsmJit Authors
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+#ifndef ASMJIT_ARM_ARMOPERAND_H_INCLUDED
+#define ASMJIT_ARM_ARMOPERAND_H_INCLUDED
+
+#include "../core/archtraits.h"
+#include "../core/operand.h"
+#include "../core/type.h"
+#include "../arm/armglobals.h"
+
+ASMJIT_BEGIN_SUB_NAMESPACE(arm)
+
+//! \addtogroup asmjit_arm
+//! \{
+
+// ============================================================================
+// [Forward Declarations]
+// ============================================================================
+
+class Reg;
+class Mem;
+
+class Gp;
+class GpW;
+class GpX;
+
+class Vec;
+class VecB;
+class VecH;
+class VecS;
+class VecD;
+class VecV;
+
+// ============================================================================
+// [asmjit::arm::RegTraits]
+// ============================================================================
+
+//! Register traits (ARM/AArch64).
+//!
+//! Register traits contains information about a particular register type. It's
+//! used by asmjit to setup register information on-the-fly and to populate
+//! tables that contain register information (this way it's possible to change
+//! register types and groups without having to reorder these tables).
+template<uint32_t REG_TYPE>
+struct RegTraits : public BaseRegTraits {};
+
+//! \cond
+// <--------------------+-----+----------------------+---------------------+---+---+----------------+
+// | Reg | Reg-Type | Reg-Group |Sz |Cnt| TypeId |
+// <--------------------+-----+----------------------+---------------------+---+---+----------------+
+ASMJIT_DEFINE_REG_TRAITS(GpW , BaseReg::kTypeGp32 , BaseReg::kGroupGp , 4 , 32, Type::kIdI32 );
+ASMJIT_DEFINE_REG_TRAITS(GpX , BaseReg::kTypeGp64 , BaseReg::kGroupGp , 8 , 32, Type::kIdI64 );
+ASMJIT_DEFINE_REG_TRAITS(VecB , BaseReg::kTypeVec8 , BaseReg::kGroupVec , 1 , 32, Type::kIdVoid );
+ASMJIT_DEFINE_REG_TRAITS(VecH , BaseReg::kTypeVec16 , BaseReg::kGroupVec , 2 , 32, Type::kIdVoid );
+ASMJIT_DEFINE_REG_TRAITS(VecS , BaseReg::kTypeVec32 , BaseReg::kGroupVec , 4 , 32, Type::kIdI32x1 );
+ASMJIT_DEFINE_REG_TRAITS(VecD , BaseReg::kTypeVec64 , BaseReg::kGroupVec , 8 , 32, Type::kIdI32x2 );
+ASMJIT_DEFINE_REG_TRAITS(VecV , BaseReg::kTypeVec128 , BaseReg::kGroupVec , 16, 32, Type::kIdI32x4 );
+//! \endcond
+
+// ============================================================================
+// [asmjit::arm::Reg]
+// ============================================================================
+
+//! Register (ARM).
+class Reg : public BaseReg {
+public:
+ ASMJIT_DEFINE_ABSTRACT_REG(Reg, BaseReg)
+
+ //! Register type.
+ enum RegType : uint32_t {
+ //! No register type or invalid register.
+ kTypeNone = BaseReg::kTypeNone,
+ //! 32-bit general purpose register (R or W).
+ kTypeGpW = BaseReg::kTypeGp32,
+ //! 64-bit general purpose register (X).
+ kTypeGpX = BaseReg::kTypeGp64,
+ //! 8-bit view of VFP/ASIMD register (B).
+ kTypeVecB = BaseReg::kTypeVec8,
+ //! 16-bit view of VFP/ASIMD register (H).
+ kTypeVecH = BaseReg::kTypeVec16,
+ //! 32-bit view of VFP/ASIMD register (S).
+ kTypeVecS = BaseReg::kTypeVec32,
+ //! 64-bit view of VFP/ASIMD register (D).
+ kTypeVecD = BaseReg::kTypeVec64,
+ //! 128-bit view of VFP/ASIMD register (Q|V).
+ kTypeVecV = BaseReg::kTypeVec128,
+ //! Program pointer (PC) (AArch64).
+ kTypePC = BaseReg::kTypeIP,
+ //! Count of register types.
+ kTypeCount
+ };
+
+ //! Register group.
+ enum RegGroup : uint32_t {
+ //! General purpose register group.
+ kGroupGp = BaseReg::kGroupGp,
+ //! Vector (VFP/ASIMD) register group.
+ kGroupVec = BaseReg::kGroupVec,
+ //! Count of all ARM register groups.
+ kGroupCount
+ };
+
+ //! Gets whether the register is a `R|W` register (32-bit).
+ constexpr bool isGpW() const noexcept { return hasBaseSignature(RegTraits<kTypeGpW>::kSignature); }
+ //! Gets whether the register is an `X` register (64-bit).
+ constexpr bool isGpX() const noexcept { return hasBaseSignature(RegTraits<kTypeGpX>::kSignature); }
+ //! Gets whether the register is a VEC-B register (8-bit).
+ constexpr bool isVecB() const noexcept { return hasBaseSignature(RegTraits<kTypeVecB>::kSignature); }
+ //! Gets whether the register is a VEC-H register (16-bit).
+ constexpr bool isVecH() const noexcept { return hasBaseSignature(RegTraits<kTypeVecH>::kSignature); }
+ //! Gets whether the register is a VEC-S register (32-bit).
+ constexpr bool isVecS() const noexcept { return hasBaseSignature(RegTraits<kTypeVecS>::kSignature); }
+ //! Gets whether the register is a VEC-D register (64-bit).
+ constexpr bool isVecD() const noexcept { return hasBaseSignature(RegTraits<kTypeVecD>::kSignature); }
+ //! Gets whether the register is a VEC-Q register (128-bit).
+ constexpr bool isVecQ() const noexcept { return hasBaseSignature(RegTraits<kTypeVecV>::kSignature); }
+
+ //! Gets whether the register is either VEC-D (64-bit) or VEC-Q (128-bit).
+ constexpr bool isVecDOrQ() const noexcept { return type() - Reg::kTypeVecD <= 1u; }
+
+ //! Gets whether the register is a VEC-V register (128-bit).
+ constexpr bool isVecV() const noexcept { return hasBaseSignature(RegTraits<kTypeVecV>::kSignature); }
+
+ template<uint32_t REG_TYPE>
+ inline void setRegT(uint32_t id) noexcept {
+ setSignature(RegTraits<REG_TYPE>::kSignature);
+ setId(id);
+ }
+
+ inline void setTypeAndId(uint32_t rType, uint32_t id) noexcept {
+ ASMJIT_ASSERT(rType < kTypeCount);
+ setSignature(signatureOf(rType));
+ setId(id);
+ }
+
+ static inline uint32_t groupOf(uint32_t rType) noexcept { return _archTraits[Environment::kArchAArch64].regTypeToGroup(rType); }
+ static inline uint32_t typeIdOf(uint32_t rType) noexcept { return _archTraits[Environment::kArchAArch64].regTypeToTypeId(rType); }
+ static inline uint32_t signatureOf(uint32_t rType) noexcept { return _archTraits[Environment::kArchAArch64].regTypeToSignature(rType); }
+
+ template<uint32_t REG_TYPE>
+ static inline uint32_t groupOfT() noexcept { return RegTraits<REG_TYPE>::kGroup; }
+
+ template<uint32_t REG_TYPE>
+ static inline uint32_t typeIdOfT() noexcept { return RegTraits<REG_TYPE>::kTypeId; }
+
+ template<uint32_t REG_TYPE>
+ static inline uint32_t signatureOfT() noexcept { return RegTraits<REG_TYPE>::kSignature; }
+
+ static inline bool isGpW(const Operand_& op) noexcept { return op.as<Reg>().isGpW(); }
+ static inline bool isGpX(const Operand_& op) noexcept { return op.as<Reg>().isGpX(); }
+ static inline bool isVecB(const Operand_& op) noexcept { return op.as<Reg>().isVecB(); }
+ static inline bool isVecH(const Operand_& op) noexcept { return op.as<Reg>().isVecH(); }
+ static inline bool isVecS(const Operand_& op) noexcept { return op.as<Reg>().isVecS(); }
+ static inline bool isVecD(const Operand_& op) noexcept { return op.as<Reg>().isVecD(); }
+ static inline bool isVecQ(const Operand_& op) noexcept { return op.as<Reg>().isVecQ(); }
+ static inline bool isVecV(const Operand_& op) noexcept { return op.as<Reg>().isVecV(); }
+
+ static inline bool isGpW(const Operand_& op, uint32_t id) noexcept { return isGpW(op) & (op.id() == id); }
+ static inline bool isGpX(const Operand_& op, uint32_t id) noexcept { return isGpX(op) & (op.id() == id); }
+ static inline bool isVecB(const Operand_& op, uint32_t id) noexcept { return isVecB(op) & (op.id() == id); }
+ static inline bool isVecH(const Operand_& op, uint32_t id) noexcept { return isVecH(op) & (op.id() == id); }
+ static inline bool isVecS(const Operand_& op, uint32_t id) noexcept { return isVecS(op) & (op.id() == id); }
+ static inline bool isVecD(const Operand_& op, uint32_t id) noexcept { return isVecD(op) & (op.id() == id); }
+ static inline bool isVecQ(const Operand_& op, uint32_t id) noexcept { return isVecQ(op) & (op.id() == id); }
+ static inline bool isVecV(const Operand_& op, uint32_t id) noexcept { return isVecV(op) & (op.id() == id); }
+};
+
+//! General purpose register (ARM).
+class Gp : public Reg {
+public:
+ ASMJIT_DEFINE_ABSTRACT_REG(Gp, Reg)
+
+ //! Special register id.
+ enum Id : uint32_t {
+ //! Register that depends on OS, could be used as TLS offset.
+ kIdOs = 18,
+ //! Frame pointer.
+ kIdFp = 29,
+ //! Link register.
+ kIdLr = 30,
+ //! Stack register id.
+ kIdSp = 31,
+ //! Zero register id.
+ //!
+ //! Although zero register has the same id as stack register we treat it
+ //! special. The reason is that we may still want to map stack register
+ //! to a virtual register in some case, but we would never need to do that
+ //! mapping with zero register.
+ kIdZr = 63
+ };
+
+ constexpr bool isZR() const noexcept { return id() == kIdZr; }
+ constexpr bool isSP() const noexcept { return id() == kIdSp; }
+
+ //! Cast this register to a 32-bit R|W.
+ inline GpW w() const noexcept;
+ //! Cast this register to a 64-bit X.
+ inline GpX x() const noexcept;
+};
+
+//! Vector register (ARM).
+class Vec : public Reg {
+public:
+ ASMJIT_DEFINE_ABSTRACT_REG(Vec, Reg)
+
+ //! Additional signature bits used by arm::Vec.
+ enum AdditionalBits : uint32_t {
+ // Register element type (3 bits).
+ // |........|........|.XXX....|........|
+ kSignatureRegElementTypeShift = 12,
+ kSignatureRegElementTypeMask = 0x07 << kSignatureRegElementTypeShift,
+
+ // Register has element index (1 bit).
+ // |........|........|X.......|........|
+ kSignatureRegElementFlagShift = 15,
+ kSignatureRegElementFlagMask = 0x01 << kSignatureRegElementFlagShift,
+
+ // Register element index (4 bits).
+ // |........|....XXXX|........|........|
+ kSignatureRegElementIndexShift = 16,
+ kSignatureRegElementIndexMask = 0x0F << kSignatureRegElementIndexShift
+ };
+
+ //! Element type.
+ enum ElementType : uint32_t {
+ //! No element type specified.
+ kElementTypeNone = 0,
+ //! Byte elements (B8 or B16).
+ kElementTypeB,
+ //! Halfword elements (H4 or H8).
+ kElementTypeH,
+ //! Singleword elements (S2 or S4).
+ kElementTypeS,
+ //! Doubleword elements (D2).
+ kElementTypeD,
+ //! Byte elements groped by 4 bytes (B4).
+ //!
+ //! \note This element-type is only used by few instructions.
+ kElementTypeB4,
+ //! Halfword elements groped by 2 halfwords (H2).
+ //!
+ //! \note This element-type is only used by few instructions.
+ kElementTypeH2,
+
+ //! Count of element types.
+ kElementTypeCount
+ };
+
+ //! \cond
+ //! Shortcuts.
+ enum SignatureReg : uint32_t {
+ kSignatureElementB = kElementTypeB << kSignatureRegElementTypeShift,
+ kSignatureElementH = kElementTypeH << kSignatureRegElementTypeShift,
+ kSignatureElementS = kElementTypeS << kSignatureRegElementTypeShift,
+ kSignatureElementD = kElementTypeD << kSignatureRegElementTypeShift,
+ kSignatureElementB4 = kElementTypeB4 << kSignatureRegElementTypeShift,
+ kSignatureElementH2 = kElementTypeH2 << kSignatureRegElementTypeShift
+ };
+ //! \endcond
+
+ //! Returns whether the register has associated an element type.
+ constexpr bool hasElementType() const noexcept { return elementType() != 0; }
+ //! Returns whether the register has element index (it's an element index access).
+ constexpr bool hasElementIndex() const noexcept { return (_signature & kSignatureRegElementFlagMask) != 0; }
+ //! Returns whether the reggister has element type or element index (or both).
+ constexpr bool hasElementTypeOrIndex() const noexcept { return (_signature & (kSignatureRegElementFlagMask | kSignatureRegElementTypeMask)) != 0; }
+
+ //! Returns element type of the register.
+ constexpr uint32_t elementType() const noexcept { return _getSignaturePart<kSignatureRegElementTypeMask>(); }
+ //! Sets element type of the register to `elementType`.
+ inline void setElementType(uint32_t elementType) noexcept { _setSignaturePart<kSignatureRegElementTypeMask>(elementType); }
+ //! Resets element type to none.
+ inline void resetElementType() noexcept { _setSignaturePart<kSignatureRegElementTypeMask>(0); }
+
+ //! Returns element index of the register.
+ constexpr uint32_t elementIndex() const noexcept { return _getSignaturePart<kSignatureRegElementIndexMask>(); }
+ //! Sets element index of the register to `elementType`.
+ inline void setElementIndex(uint32_t elementIndex) noexcept {
+ _signature |= kSignatureRegElementFlagMask;
+ _setSignaturePart<kSignatureRegElementIndexMask>(elementIndex);
+ }
+ //! Resets element index of the register.
+ inline void resetElementIndex() noexcept {
+ _signature &= ~(kSignatureRegElementFlagMask | kSignatureRegElementIndexMask);
+ }
+
+ constexpr bool isVecB8() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecD>::kSignature | kSignatureElementB); }
+ constexpr bool isVecH4() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecD>::kSignature | kSignatureElementH); }
+ constexpr bool isVecS2() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecD>::kSignature | kSignatureElementS); }
+ constexpr bool isVecD1() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecD>::kSignature); }
+
+ constexpr bool isVecB16() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecV>::kSignature | kSignatureElementB); }
+ constexpr bool isVecH8() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecV>::kSignature | kSignatureElementH); }
+ constexpr bool isVecS4() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecV>::kSignature | kSignatureElementS); }
+ constexpr bool isVecD2() const noexcept { return _hasSignaturePart<kBaseSignature | kSignatureRegElementTypeMask>(RegTraits<kTypeVecV>::kSignature | kSignatureElementD); }
+
+ //! Creates a cloned register with element access.
+ inline Vec at(uint32_t elementIndex) const noexcept {
+ return fromSignatureAndId(
+ (signature() & ~kSignatureRegElementIndexMask) | (elementIndex << kSignatureRegElementIndexShift) | kSignatureRegElementFlagMask,
+ id());
+ }
+
+ //! Cast this register to an 8-bit B register (scalar).
+ inline VecB b() const noexcept;
+ //! Cast this register to a 16-bit H register (scalar).
+ inline VecH h() const noexcept;
+ //! Cast this register to a 32-bit S register (scalar).
+ inline VecS s() const noexcept;
+ //! Cast this register to a 64-bit D register (scalar).
+ inline VecD d() const noexcept;
+ //! Cast this register to a 128-bit Q register (scalar).
+ inline VecV q() const noexcept;
+ //! Cast this register to a 128-bit V register.
+ inline VecV v() const noexcept;
+
+ //! Cast this register to a 128-bit V.B[elementIndex] register.
+ inline VecV b(uint32_t elementIndex) const noexcept;
+ //! Cast this register to a 128-bit V.H[elementIndex] register.
+ inline VecV h(uint32_t elementIndex) const noexcept;
+ //! Cast this register to a 128-bit V.S[elementIndex] register.
+ inline VecV s(uint32_t elementIndex) const noexcept;
+ //! Cast this register to a 128-bit V.D[elementIndex] register.
+ inline VecV d(uint32_t elementIndex) const noexcept;
+ //! Cast this register to a 128-bit V.B4[elementIndex] register.
+ inline VecV h2(uint32_t elementIndex) const noexcept;
+ //! Cast this register to a 128-bit V.B4[elementIndex] register.
+ inline VecV b4(uint32_t elementIndex) const noexcept;
+
+ //! Cast this register to V.8B.
+ inline VecD b8() const noexcept;
+ //! Cast this register to V.16B.
+ inline VecV b16() const noexcept;
+ //! Cast this register to V.2H.
+ inline VecS h2() const noexcept;
+ //! Cast this register to V.4H.
+ inline VecD h4() const noexcept;
+ //! Cast this register to V.8H.
+ inline VecV h8() const noexcept;
+ //! Cast this register to V.2S.
+ inline VecD s2() const noexcept;
+ //! Cast this register to V.4S.
+ inline VecV s4() const noexcept;
+ //! Cast this register to V.2D.
+ inline VecV d2() const noexcept;
+
+ static constexpr uint32_t _makeElementAccessSignature(uint32_t elementType, uint32_t elementIndex) noexcept {
+ return uint32_t(RegTraits<kTypeVecV>::kSignature) |
+ uint32_t(kSignatureRegElementFlagMask) |
+ uint32_t(elementType << kSignatureRegElementTypeShift) |
+ uint32_t(elementIndex << kSignatureRegElementIndexShift) ;
+ }
+};
+
+//! 32-bit GPW (AArch64) and/or GPR (ARM/AArch32) register.
+class GpW : public Gp { ASMJIT_DEFINE_FINAL_REG(GpW, Gp, RegTraits<kTypeGpW>) };
+//! 64-bit GPX (AArch64) register.
+class GpX : public Gp { ASMJIT_DEFINE_FINAL_REG(GpX, Gp, RegTraits<kTypeGpX>) };
+
+//! 8-bit view (S) of VFP/SIMD register.
+class VecB : public Vec { ASMJIT_DEFINE_FINAL_REG(VecB, Vec, RegTraits<kTypeVecB>) };
+//! 16-bit view (S) of VFP/SIMD register.
+class VecH : public Vec { ASMJIT_DEFINE_FINAL_REG(VecH, Vec, RegTraits<kTypeVecH>) };
+//! 32-bit view (S) of VFP/SIMD register.
+class VecS : public Vec { ASMJIT_DEFINE_FINAL_REG(VecS, Vec, RegTraits<kTypeVecS>) };
+//! 64-bit view (D) of VFP/SIMD register.
+class VecD : public Vec { ASMJIT_DEFINE_FINAL_REG(VecD, Vec, RegTraits<kTypeVecD>) };
+//! 128-bit vector register (Q or V).
+class VecV : public Vec { ASMJIT_DEFINE_FINAL_REG(VecV, Vec, RegTraits<kTypeVecV>) };
+
+inline GpW Gp::w() const noexcept { return GpW(id()); }
+inline GpX Gp::x() const noexcept { return GpX(id()); }
+
+inline VecB Vec::b() const noexcept { return VecB(id()); }
+inline VecH Vec::h() const noexcept { return VecH(id()); }
+inline VecS Vec::s() const noexcept { return VecS(id()); }
+inline VecD Vec::d() const noexcept { return VecD(id()); }
+inline VecV Vec::q() const noexcept { return VecV(id()); }
+inline VecV Vec::v() const noexcept { return VecV(id()); }
+
+inline VecV Vec::b(uint32_t elementIndex) const noexcept { return VecV::fromSignatureAndId(_makeElementAccessSignature(kElementTypeB, elementIndex), id()); }
+inline VecV Vec::h(uint32_t elementIndex) const noexcept { return VecV::fromSignatureAndId(_makeElementAccessSignature(kElementTypeH, elementIndex), id()); }
+inline VecV Vec::s(uint32_t elementIndex) const noexcept { return VecV::fromSignatureAndId(_makeElementAccessSignature(kElementTypeS, elementIndex), id()); }
+inline VecV Vec::d(uint32_t elementIndex) const noexcept { return VecV::fromSignatureAndId(_makeElementAccessSignature(kElementTypeD, elementIndex), id()); }
+inline VecV Vec::h2(uint32_t elementIndex) const noexcept { return VecV::fromSignatureAndId(_makeElementAccessSignature(kElementTypeH2, elementIndex), id()); }
+inline VecV Vec::b4(uint32_t elementIndex) const noexcept { return VecV::fromSignatureAndId(_makeElementAccessSignature(kElementTypeB4, elementIndex), id()); }
+
+inline VecD Vec::b8() const noexcept { return VecD::fromSignatureAndId(VecD::kSignature | kSignatureElementB, id()); }
+inline VecS Vec::h2() const noexcept { return VecS::fromSignatureAndId(VecS::kSignature | kSignatureElementH, id()); }
+inline VecD Vec::h4() const noexcept { return VecD::fromSignatureAndId(VecD::kSignature | kSignatureElementH, id()); }
+inline VecD Vec::s2() const noexcept { return VecD::fromSignatureAndId(VecD::kSignature | kSignatureElementS, id()); }
+inline VecV Vec::b16() const noexcept { return VecV::fromSignatureAndId(VecV::kSignature | kSignatureElementB, id()); }
+inline VecV Vec::h8() const noexcept { return VecV::fromSignatureAndId(VecV::kSignature | kSignatureElementH, id()); }
+inline VecV Vec::s4() const noexcept { return VecV::fromSignatureAndId(VecV::kSignature | kSignatureElementS, id()); }
+inline VecV Vec::d2() const noexcept { return VecV::fromSignatureAndId(VecV::kSignature | kSignatureElementD, id()); }
+
+#ifndef _DOXYGEN
+namespace regs {
+#endif
+
+//! Creates a 32-bit W register operand (ARM/AArch64).
+static constexpr GpW w(uint32_t id) noexcept { return GpW(id); }
+//! Creates a 64-bit X register operand (AArch64).
+static constexpr GpX x(uint32_t id) noexcept { return GpX(id); }
+//! Creates a 32-bit S register operand (ARM/AArch64).
+static constexpr VecS s(uint32_t id) noexcept { return VecS(id); }
+//! Creates a 64-bit D register operand (ARM/AArch64).
+static constexpr VecD d(uint32_t id) noexcept { return VecD(id); }
+//! Creates a 1282-bit V register operand (ARM/AArch64).
+static constexpr VecV v(uint32_t id) noexcept { return VecV(id); }
+
+#ifndef _DOXYGEN
+} // {regs}
+
+// Make `arm::regs` accessible through `arm` namespace as well.
+using namespace regs;
+#endif
+
+// ============================================================================
+// [asmjit::arm::Mem]
+// ============================================================================
+
+//! Memory operand (ARM).
+class Mem : public BaseMem {
+public:
+ //! \cond INTERNAL
+ //! Additional bits of operand's signature used by `arm::Mem`.
+ enum AdditionalBits : uint32_t {
+ // Index shift value (5 bits).
+ // |........|.....XXX|XX......|........|
+ kSignatureMemShiftValueShift = 14,
+ kSignatureMemShiftValueMask = 0x1Fu << kSignatureMemShiftValueShift,
+
+ // Shift operation type (4 bits).
+ // |........|XXXX....|........|........|
+ kSignatureMemPredicateShift = 20,
+ kSignatureMemPredicateMask = 0x0Fu << kSignatureMemPredicateShift
+ };
+ //! \endcond
+
+ //! Memory offset mode.
+ //!
+ //! Additional constants that can be used with the `predicate`.
+ enum OffsetMode : uint32_t {
+ //! Pre-index "[BASE, #Offset {, <shift>}]!" with write-back.
+ kOffsetPreIndex = 0xE,
+ //! Post-index "[BASE], #Offset {, <shift>}" with write-back.
+ kOffsetPostIndex = 0xF
+ };
+
+ // --------------------------------------------------------------------------
+ // [Construction / Destruction]
+ // --------------------------------------------------------------------------
+
+ //! Construct a default `Mem` operand, that points to [0].
+ constexpr Mem() noexcept : BaseMem() {}
+ constexpr Mem(const Mem& other) noexcept : BaseMem(other) {}
+
+ constexpr explicit Mem(const Label& base, int32_t off = 0, uint32_t flags = 0) noexcept
+ : BaseMem(Decomposed { Label::kLabelTag, base.id(), 0, 0, off, 0, flags }) {}
+
+ constexpr explicit Mem(const BaseReg& base, int32_t off = 0, uint32_t flags = 0) noexcept
+ : BaseMem(Decomposed { base.type(), base.id(), 0, 0, off, 0, flags }) {}
+
+ constexpr Mem(const BaseReg& base, const BaseReg& index) noexcept
+ : BaseMem(Decomposed { base.type(), base.id(), index.type(), index.id(), 0, 0, 0 }) {}
+
+ constexpr Mem(const BaseReg& base, const BaseReg& index, const Shift& shift, uint32_t flags = 0) noexcept
+ : BaseMem(Decomposed { base.type(), base.id(), index.type(), index.id(), 0, 0, flags | (shift.op() << kSignatureMemPredicateShift) | (shift.value() << kSignatureMemShiftValueShift) }) {}
+
+ constexpr Mem(uint64_t base, uint32_t flags = 0) noexcept
+ : BaseMem(Decomposed { 0, uint32_t(base >> 32), 0, 0, int32_t(uint32_t(base & 0xFFFFFFFFu)), 0, flags }) {}
+
+ constexpr Mem(Globals::Init_, uint32_t u0, uint32_t u1, uint32_t u2, uint32_t u3) noexcept
+ : BaseMem(Globals::Init, u0, u1, u2, u3) {}
+
+ inline explicit Mem(Globals::NoInit_) noexcept : BaseMem(Globals::NoInit) {}
+
+ // --------------------------------------------------------------------------
+ // [Arm Specific]
+ // --------------------------------------------------------------------------
+
+ //! Clones the memory operand.
+ constexpr Mem clone() const noexcept { return Mem(*this); }
+ //! Gets new memory operand adjusted by `off`.
+ inline Mem cloneAdjusted(int64_t off) const noexcept {
+ Mem result(*this);
+ result.addOffset(off);
+ return result;
+ }
+
+ using BaseMem::setIndex;
+
+ inline void setIndex(const BaseReg& index, uint32_t shift) noexcept {
+ setIndex(index);
+ setShift(shift);
+ }
+
+ //! Gets whether the memory operand has shift (aka scale) constant.
+ constexpr bool hasShift() const noexcept { return _hasSignaturePart<kSignatureMemShiftValueMask>(); }
+ //! Gets the memory operand's shift (aka scale) constant.
+ constexpr uint32_t shift() const noexcept { return _getSignaturePart<kSignatureMemShiftValueMask>(); }
+ //! Sets the memory operand's shift (aka scale) constant.
+ inline void setShift(uint32_t shift) noexcept { _setSignaturePart<kSignatureMemShiftValueMask>(shift); }
+ //! Resets the memory operand's shift (aka scale) constant to zero.
+ inline void resetShift() noexcept { _setSignaturePart<kSignatureMemShiftValueMask>(0); }
+
+ //! Gets memory predicate (shift mode or offset mode), see \ref Predicate::ShiftOp and \ref OffsetMode.
+ constexpr uint32_t predicate() const noexcept { return _getSignaturePart<kSignatureMemPredicateMask>(); }
+ //! Sets memory predicate to `predicate`, see `Mem::ShiftOp`.
+ inline void setPredicate(uint32_t predicate) noexcept { _setSignaturePart<kSignatureMemPredicateMask>(predicate); }
+ //! Resets shift mode to LSL (default).
+ inline void resetPredicate() noexcept { _setSignaturePart<kSignatureMemPredicateMask>(0); }
+
+ constexpr bool isFixedOffset() const noexcept { return predicate() < kOffsetPreIndex; }
+ constexpr bool isPreOrPost() const noexcept { return predicate() >= kOffsetPreIndex; }
+ constexpr bool isPreIndex() const noexcept { return predicate() == kOffsetPreIndex; }
+ constexpr bool isPostIndex() const noexcept { return predicate() == kOffsetPostIndex; }
+
+ inline void resetToFixedOffset() noexcept { resetPredicate(); }
+ inline void makePreIndex() noexcept { setPredicate(kOffsetPreIndex); }
+ inline void makePostIndex() noexcept { setPredicate(kOffsetPostIndex); }
+
+ inline Mem pre() const noexcept {
+ Mem result(*this);
+ result.setPredicate(kOffsetPreIndex);
+ return result;
+ }
+
+ inline Mem pre(int64_t off) const noexcept {
+ Mem result(*this);
+ result.setPredicate(kOffsetPreIndex);
+ result.addOffset(off);
+ return result;
+ }
+
+ inline Mem post() const noexcept {
+ Mem result(*this);
+ result.setPredicate(kOffsetPreIndex);
+ return result;
+ }
+
+ inline Mem post(int64_t off) const noexcept {
+ Mem result(*this);
+ result.setPredicate(kOffsetPostIndex);
+ result.addOffset(off);
+ return result;
+ }
+
+ // --------------------------------------------------------------------------
+ // [Operator Overload]
+ // --------------------------------------------------------------------------
+
+ inline Mem& operator=(const Mem& other) noexcept = default;
+};
+
+//! Creates `[base.reg, offset]` memory operand (offset mode).
+static constexpr Mem ptr(const Gp& base, int32_t offset = 0) noexcept {
+ return Mem(base, offset);
+}
+
+//! Creates `[base.reg, offset]!` memory operand (pre-index mode).
+static constexpr Mem ptr_pre(const Gp& base, int32_t offset = 0) noexcept {
+ return Mem(base, offset, Mem::kOffsetPreIndex << Mem::kSignatureMemPredicateShift);
+}
+
+//! Creates `[base.reg], offset` memory operand (post-index mode).
+static constexpr Mem ptr_post(const Gp& base, int32_t offset = 0) noexcept {
+ return Mem(base, offset, Mem::kOffsetPostIndex << Mem::kSignatureMemPredicateShift);
+}
+
+//! Creates `[base.reg, index]` memory operand.
+static constexpr Mem ptr(const Gp& base, const Gp& index) noexcept {
+ return Mem(base, index);
+}
+
+//! Creates `[base.reg], index` memory operand (post-index mode).
+static constexpr Mem ptr_post(const Gp& base, const Gp& index) noexcept {
+ return Mem(base, index, Shift(Shift::kOpLSL, 0), Mem::kOffsetPostIndex << Mem::kSignatureMemPredicateShift);
+}
+
+//! Creates `[base.reg, index, SHIFT_OP #shift]` memory operand.
+static constexpr Mem ptr(const Gp& base, const Gp& index, const Shift& shift) noexcept {
+ return Mem(base, index, shift);
+}
+
+//! Creates `[base + offset]` memory operand.
+static constexpr Mem ptr(const Label& base, int32_t offset = 0) noexcept {
+ return Mem(base, offset);
+}
+
+// TODO: [ARM] PC + offset address.
+#if 0
+//! Creates `[PC + offset]` (relative) memory operand.
+static constexpr Mem ptr(const PC& pc, int32_t offset = 0) noexcept {
+ return Mem(pc, offset);
+}
+#endif
+
+//! Creates `[base]` absolute memory operand.
+//!
+//! \note The concept of absolute memory operands doesn't exist on ARM, the ISA
+//! only provides PC relative addressing. Absolute memory operands can only be
+//! used if it's known that the PC relative offset is encodable and that it
+//! would be within the limits. Absolute address is also often output from
+//! disassemblers, so AsmJit support it so it can assemble it back.
+static constexpr Mem ptr(uint64_t base) noexcept { return Mem(base); }
+
+//! \}
+
+ASMJIT_END_SUB_NAMESPACE
+
+// ============================================================================
+// [asmjit::Type::IdOfT<arm::Reg>]
+// ============================================================================
+
+//! \cond INTERNAL
+ASMJIT_BEGIN_NAMESPACE
+ASMJIT_DEFINE_TYPE_ID(arm::GpW, kIdI32);
+ASMJIT_DEFINE_TYPE_ID(arm::GpX, kIdI64);
+ASMJIT_DEFINE_TYPE_ID(arm::VecS, kIdF32x1);
+ASMJIT_DEFINE_TYPE_ID(arm::VecD, kIdF64x1);
+ASMJIT_DEFINE_TYPE_ID(arm::VecV, kIdI32x4);
+ASMJIT_END_NAMESPACE
+//! \endcond
+
+#endif // ASMJIT_ARM_ARMOPERAND_H_INCLUDED
diff --git a/erts/emulator/asmjit/asmjit.h b/erts/emulator/asmjit/asmjit.h
index 400426c40a..5f93fe4dd0 100644
--- a/erts/emulator/asmjit/asmjit.h
+++ b/erts/emulator/asmjit/asmjit.h
@@ -26,12 +26,8 @@
#include "./core.h"
-#ifdef ASMJIT_BUILD_X86
+#ifndef ASMJIT_NO_X86
#include "./x86.h"
#endif
-#ifdef ASMJIT_BUILD_ARM
- #include "./arm.h"
-#endif
-
#endif // ASMJIT_ASMJIT_H_INCLUDED
diff --git a/erts/emulator/asmjit/core.h b/erts/emulator/asmjit/core.h
index 52540abe4e..28f56136de 100644
--- a/erts/emulator/asmjit/core.h
+++ b/erts/emulator/asmjit/core.h
@@ -237,9 +237,9 @@ namespace asmjit {
//! backends in the future. By default AsmJit builds only the host backend, which
//! is autodetected at compile-time, but this can be overridden.
//!
-//! - \ref ASMJIT_BUILD_X86 - Always build X86 backend (X86 and X86_64).
-//! - \ref ASMJIT_BUILD_ARM - Always build ARM backend (ARM and AArch64).
-//! - \ref ASMJIT_BUILD_HOST - Always build the host backend.
+//! - \ref ASMJIT_NO_X86 - Disable X86/X64 backends.
+//! - \ref ASMJIT_NO_FOREIGN - Disables the support for foreign architectures.
+//! If defined, it would internally set \ref ASMJIT_BUILD_HOST to true.
//!
//! ### Features Selection
//!
@@ -252,9 +252,6 @@ namespace asmjit {
//! attempt to use such API. This includes deprecated classes, namespaces,
//! enumerations, and functions.
//!
-//! - \ref ASMJIT_NO_FOREIGN - Disables the support for foreign architectures.
-//! If defined, it would internally set \ref ASMJIT_BUILD_HOST to true.
-//!
//! - \ref ASMJIT_NO_BUILDER - Disables \ref asmjit_builder functionality
//! completely. This implies \ref ASMJIT_NO_COMPILER as \ref asmjit_compiler
//! cannot be used without \ref asmjit_builder.
diff --git a/erts/emulator/asmjit/core/api-config.h b/erts/emulator/asmjit/core/api-config.h
index aab3473770..43680b17e6 100644
--- a/erts/emulator/asmjit/core/api-config.h
+++ b/erts/emulator/asmjit/core/api-config.h
@@ -65,18 +65,18 @@ namespace asmjit {
//! \note Can be defined explicitly to bypass autodetection.
#define ASMJIT_BUILD_RELEASE
-//! Defined to build X86/X64 backend.
-#define ASMJIT_BUILD_X86
+//! Disables X86/X64 backends.
+#define ASMJIT_NO_X86
-//! Defined to build host backend autodetected at compile-time.
-#define ASMJIT_BUILD_HOST
+//! Disables AArch64 backend.
+#define ASMJIT_NO_ARM
-//! Disables deprecated API at compile time.
-#define ASMJIT_NO_DEPRECATED
-
-//! Disable non-host architectures entirely.
+//! Disables non-host backends entirely (useful for JIT compilers to minimize the library size).
#define ASMJIT_NO_FOREIGN
+//! Disables deprecated API at compile time (deprecated API won't be available).
+#define ASMJIT_NO_DEPRECATED
+
//! Disables \ref asmjit_builder functionality completely.
#define ASMJIT_NO_BUILDER
@@ -99,6 +99,13 @@ namespace asmjit {
#define ASMJIT_NO_INTROSPECTION
// Avoid doxygen preprocessor using feature-selection definitions.
+#undef ASMJIT_BUILD_EMBNED
+#undef ASMJIT_BUILD_STATIC
+#undef ASMJIT_BUILD_DEBUG
+#undef ASMJIT_BUILD_RELEASE
+#undef ASMJIT_NO_X86
+#undef ASMJIT_NO_FOREIGN
+// (keep ASMJIT_NO_DEPRECATED defined, we don't document deprecated APIs).
#undef ASMJIT_NO_BUILDER
#undef ASMJIT_NO_COMPILER
#undef ASMJIT_NO_JIT
@@ -112,13 +119,6 @@ namespace asmjit {
} // {asmjit}
#endif // _DOXYGEN
-// Enable all features at IDE level, so it's properly highlighted and indexed.
-#ifdef __INTELLISENSE__
- #ifndef ASMJIT_BUILD_X86
- #define ASMJIT_BUILD_X86
- #endif
-#endif
-
// ============================================================================
// [asmjit::Dependencies]
// ============================================================================
@@ -153,12 +153,12 @@ namespace asmjit {
// Prevent compile-time errors caused by misconfiguration.
#if defined(ASMJIT_NO_TEXT) && !defined(ASMJIT_NO_LOGGING)
- #pragma "ASMJIT_NO_TEXT can only be defined when ASMJIT_NO_LOGGING is defined."
+ #pragma message("'ASMJIT_NO_TEXT' can only be defined when 'ASMJIT_NO_LOGGING' is defined.")
#undef ASMJIT_NO_TEXT
#endif
#if defined(ASMJIT_NO_INTROSPECTION) && !defined(ASMJIT_NO_COMPILER)
- #pragma message("ASMJIT_NO_INTROSPECTION can only be defined when ASMJIT_NO_COMPILER is defined")
+ #pragma message("'ASMJIT_NO_INTROSPECTION' can only be defined when 'ASMJIT_NO_COMPILER' is defined")
#undef ASMJIT_NO_INTROSPECTION
#endif
@@ -243,24 +243,17 @@ namespace asmjit {
#endif
// ============================================================================
-// [asmjit::Build - Globals - Build Architectures Definitions]
+// [asmjit::Build - Globals - Backends]
// ============================================================================
-#if !defined(ASMJIT_NO_FOREIGN)
- // If 'ASMJIT_NO_FOREIGN' is not defined then all architectures will be built.
- #if !defined(ASMJIT_BUILD_X86)
- #define ASMJIT_BUILD_X86
+#if defined(ASMJIT_NO_FOREIGN)
+ #if !ASMJIT_ARCH_X86 && !defined(ASMJIT_NO_X86)
+ #define ASMJIT_NO_X86
#endif
-#else
- // Detect architectures to build if building only for the host architecture.
- #if ASMJIT_ARCH_X86 && !defined(ASMJIT_BUILD_X86)
- #define ASMJIT_BUILD_X86
- #endif
-#endif
-// Define 'ASMJIT_BUILD_HOST' if we know that host architecture will be built.
-#if !defined(ASMJIT_BUILD_HOST) && ASMJIT_ARCH_X86 && defined(ASMJIT_BUILD_X86)
- #define ASMJIT_BUILD_HOST
+ #if !ASMJIT_ARCH_ARM && !defined(ASMJIT_NO_ARM)
+ #define ASMJIT_NO_ARM
+ #endif
#endif
// ============================================================================
@@ -415,6 +408,17 @@ namespace asmjit {
#define ASMJIT_MAY_ALIAS
#endif
+//! \def ASMJIT_MAYBE_UNUSED
+//!
+//! Expands to `[[maybe_unused]]` if supported or a compiler attribute instead.
+#if __cplusplus >= 201703L
+ #define ASMJIT_MAYBE_UNUSED [[maybe_unused]]
+#elif defined(__GNUC__)
+ #define ASMJIT_MAYBE_UNUSED __attribute__((unused))
+#else
+ #define ASMJIT_MAYBE_UNUSED
+#endif
+
//! \def ASMJIT_LIKELY(...)
//!
//! Condition is likely to be taken (mostly error handling and edge cases).
diff --git a/erts/emulator/asmjit/core/archtraits.cpp b/erts/emulator/asmjit/core/archtraits.cpp
index f069354eaa..de52703918 100644
--- a/erts/emulator/asmjit/core/archtraits.cpp
+++ b/erts/emulator/asmjit/core/archtraits.cpp
@@ -25,11 +25,11 @@
#include "../core/archtraits.h"
#include "../core/misc_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../x86/x86archtraits_p.h"
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
#include "../arm/armarchtraits_p.h"
#endif
@@ -59,7 +59,7 @@ ASMJIT_VARAPI const ArchTraits _archTraits[Environment::kArchCount] = {
noArchTraits,
// X86/X86 architectures.
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
x86::x86ArchTraits,
x86::x64ArchTraits,
#else
@@ -75,7 +75,7 @@ ASMJIT_VARAPI const ArchTraits _archTraits[Environment::kArchCount] = {
noArchTraits,
// AArch64 architecture.
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
arm::a64ArchTraits,
#else
noArchTraits,
diff --git a/erts/emulator/asmjit/core/codeholder.h b/erts/emulator/asmjit/core/codeholder.h
index 06bf3f9b02..aee35a5250 100644
--- a/erts/emulator/asmjit/core/codeholder.h
+++ b/erts/emulator/asmjit/core/codeholder.h
@@ -693,7 +693,7 @@ public:
//! Emitters can be only attached to initialized `CodeHolder` instances.
inline bool isInitialized() const noexcept { return _environment.isInitialized(); }
- //! Initializes CodeHolder to hold code described by code `info`.
+ //! Initializes CodeHolder to hold code described by the given `environment` and `baseAddress`.
ASMJIT_API Error init(const Environment& environment, uint64_t baseAddress = Globals::kNoBaseAddress) noexcept;
//! Detaches all code-generators attached and resets the `CodeHolder`.
ASMJIT_API void reset(uint32_t resetPolicy = Globals::kResetSoft) noexcept;
diff --git a/erts/emulator/asmjit/core/compiler.cpp b/erts/emulator/asmjit/core/compiler.cpp
index 38809869a0..4d7baab305 100644
--- a/erts/emulator/asmjit/core/compiler.cpp
+++ b/erts/emulator/asmjit/core/compiler.cpp
@@ -219,7 +219,7 @@ Error BaseCompiler::_newInvokeNode(InvokeNode** out, uint32_t instId, const Oper
if (argCount) {
node->_args = static_cast<InvokeNode::OperandPack*>(_allocator.alloc(argCount * sizeof(InvokeNode::OperandPack)));
if (!node->_args)
- reportError(DebugUtils::errored(kErrorOutOfMemory));
+ return reportError(DebugUtils::errored(kErrorOutOfMemory));
memset(node->_args, 0, argCount * sizeof(InvokeNode::OperandPack));
}
diff --git a/erts/emulator/asmjit/core/cpuinfo.cpp b/erts/emulator/asmjit/core/cpuinfo.cpp
index edc7d17222..2e663d8e88 100644
--- a/erts/emulator/asmjit/core/cpuinfo.cpp
+++ b/erts/emulator/asmjit/core/cpuinfo.cpp
@@ -57,11 +57,11 @@ static inline uint32_t detectHWThreadCount() noexcept {
// [asmjit::CpuInfo - Detect - CPU Features]
// ============================================================================
-#if defined(ASMJIT_BUILD_X86) && ASMJIT_ARCH_X86
+#if !defined(ASMJIT_NO_X86) && ASMJIT_ARCH_X86
namespace x86 { void detectCpu(CpuInfo& cpu) noexcept; }
#endif
-#if defined(ASMJIT_BUILD_ARM) && ASMJIT_ARCH_ARM
+#if !defined(ASMJIT_NO_ARM) && ASMJIT_ARCH_ARM
namespace arm { void detectCpu(CpuInfo& cpu) noexcept; }
#endif
@@ -78,11 +78,11 @@ const CpuInfo& CpuInfo::host() noexcept {
if (!cpuInfoInitialized) {
CpuInfo cpuInfoLocal;
-#if defined(ASMJIT_BUILD_X86) && ASMJIT_ARCH_X86
+#if !defined(ASMJIT_NO_X86) && ASMJIT_ARCH_X86
x86::detectCpu(cpuInfoLocal);
#endif
-#if defined(ASMJIT_BUILD_ARM) && ASMJIT_ARCH_ARM
+#if !defined(ASMJIT_NO_ARM) && ASMJIT_ARCH_ARM
arm::detectCpu(cpuInfoLocal);
#endif
diff --git a/erts/emulator/asmjit/core/emitter.cpp b/erts/emulator/asmjit/core/emitter.cpp
index f6841400ad..6d303dd013 100644
--- a/erts/emulator/asmjit/core/emitter.cpp
+++ b/erts/emulator/asmjit/core/emitter.cpp
@@ -27,15 +27,15 @@
#include "../core/logger.h"
#include "../core/support.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../x86/x86emithelper_p.h"
#include "../x86/x86instdb_p.h"
-#endif // ASMJIT_BUILD_X86
+#endif // !ASMJIT_NO_X86
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
#include "../arm/a64emithelper_p.h"
#include "../arm/a64instdb.h"
-#endif // ASMJIT_BUILD_ARM
+#endif // !ASMJIT_NO_ARM
ASMJIT_BEGIN_NAMESPACE
@@ -255,14 +255,14 @@ ASMJIT_FAVOR_SIZE Error BaseEmitter::emitProlog(const FuncFrame& frame) {
if (ASMJIT_UNLIKELY(!_code))
return DebugUtils::errored(kErrorNotInitialized);
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (environment().isFamilyX86()) {
- x86::EmitHelper emitHelper(this, frame.isAvxEnabled());
+ x86::EmitHelper emitHelper(this, frame.isAvxEnabled(), frame.isAvx512Enabled());
return emitHelper.emitProlog(frame);
}
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (environment().isArchAArch64()) {
a64::EmitHelper emitHelper(this);
return emitHelper.emitProlog(frame);
@@ -276,14 +276,14 @@ ASMJIT_FAVOR_SIZE Error BaseEmitter::emitEpilog(const FuncFrame& frame) {
if (ASMJIT_UNLIKELY(!_code))
return DebugUtils::errored(kErrorNotInitialized);
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (environment().isFamilyX86()) {
- x86::EmitHelper emitHelper(this, frame.isAvxEnabled());
+ x86::EmitHelper emitHelper(this, frame.isAvxEnabled(), frame.isAvx512Enabled());
return emitHelper.emitEpilog(frame);
}
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (environment().isArchAArch64()) {
a64::EmitHelper emitHelper(this);
return emitHelper.emitEpilog(frame);
@@ -297,14 +297,14 @@ ASMJIT_FAVOR_SIZE Error BaseEmitter::emitArgsAssignment(const FuncFrame& frame,
if (ASMJIT_UNLIKELY(!_code))
return DebugUtils::errored(kErrorNotInitialized);
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (environment().isFamilyX86()) {
- x86::EmitHelper emitHelper(this, frame.isAvxEnabled());
+ x86::EmitHelper emitHelper(this, frame.isAvxEnabled(), frame.isAvx512Enabled());
return emitHelper.emitArgsAssignment(frame, args);
}
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (environment().isArchAArch64()) {
a64::EmitHelper emitHelper(this);
return emitHelper.emitArgsAssignment(frame, args);
diff --git a/erts/emulator/asmjit/core/formatter.cpp b/erts/emulator/asmjit/core/formatter.cpp
index 89c3228a7e..a1e386b0f5 100644
--- a/erts/emulator/asmjit/core/formatter.cpp
+++ b/erts/emulator/asmjit/core/formatter.cpp
@@ -33,11 +33,11 @@
#include "../core/support.h"
#include "../core/type.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../x86/x86formatter_p.h"
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
#include "../arm/armformatter_p.h"
#endif
@@ -101,12 +101,12 @@ Error formatFeature(
uint32_t arch,
uint32_t featureId) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::FormatterInternal::formatFeature(sb, featureId);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isFamilyARM(arch))
return arm::FormatterInternal::formatFeature(sb, featureId);
#endif
@@ -155,12 +155,12 @@ Error formatRegister(
uint32_t regType,
uint32_t regId) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::FormatterInternal::formatRegister(sb, formatFlags, emitter, arch, regType, regId);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isFamilyARM(arch))
return arm::FormatterInternal::formatRegister(sb, formatFlags, emitter, arch, regType, regId);
#endif
@@ -175,12 +175,12 @@ Error formatOperand(
uint32_t arch,
const Operand_& op) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::FormatterInternal::formatOperand(sb, formatFlags, emitter, arch, op);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isFamilyARM(arch))
return arm::FormatterInternal::formatOperand(sb, formatFlags, emitter, arch, op);
#endif
@@ -195,12 +195,12 @@ Error formatInstruction(
uint32_t arch,
const BaseInst& inst, const Operand_* operands, size_t opCount) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::FormatterInternal::formatInstruction(sb, formatFlags, emitter, arch, inst, operands, opCount);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isFamilyARM(arch))
return arm::FormatterInternal::formatInstruction(sb, formatFlags, emitter, arch, inst, operands, opCount);
#endif
diff --git a/erts/emulator/asmjit/core/func.cpp b/erts/emulator/asmjit/core/func.cpp
index bb131a0124..fce715d4a0 100644
--- a/erts/emulator/asmjit/core/func.cpp
+++ b/erts/emulator/asmjit/core/func.cpp
@@ -28,11 +28,11 @@
#include "../core/type.h"
#include "../core/funcargscontext_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../x86/x86func_p.h"
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
#include "../arm/armfunc_p.h"
#endif
@@ -45,12 +45,12 @@ ASMJIT_BEGIN_NAMESPACE
ASMJIT_FAVOR_SIZE Error CallConv::init(uint32_t ccId, const Environment& environment) noexcept {
reset();
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (environment.isFamilyX86())
return x86::FuncInternal::initCallConv(*this, ccId, environment);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (environment.isFamilyARM())
return arm::FuncInternal::initCallConv(*this, ccId, environment);
#endif
@@ -87,12 +87,12 @@ ASMJIT_FAVOR_SIZE Error FuncDetail::init(const FuncSignature& signature, const E
if (ret != Type::kIdVoid)
_rets[0].initTypeId(Type::deabstract(ret, deabstractDelta));
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (environment.isFamilyX86())
return x86::FuncInternal::initFuncDetail(*this, signature, registerSize);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (environment.isFamilyARM())
return arm::FuncInternal::initFuncDetail(*this, signature, registerSize);
#endif
diff --git a/erts/emulator/asmjit/core/func.h b/erts/emulator/asmjit/core/func.h
index 6cfd044e4e..9f63096237 100644
--- a/erts/emulator/asmjit/core/func.h
+++ b/erts/emulator/asmjit/core/func.h
@@ -881,6 +881,14 @@ public:
//! prolog and epilog. Function frame calculation is based on `CallConv` and
//! other function attributes.
//!
+//! SSE vs AVX vs AVX-512
+//! ---------------------
+//!
+//! Function frame provides a way to tell prolog/epilog inserter to use AVX
+//! instructions instead of SSE. Use `setAvxEnabled()` and `setAvx512Enabled()`
+//! to enable AVX and/or AVX-512, respectively. Enabling AVX-512 is mostly for
+//! Compiler as it would use 32 SIMD registers instead of 16 when enabled.
+//!
//! Function Frame Structure
//! ------------------------
//!
@@ -922,13 +930,23 @@ public:
//! Function calls other functions (is not leaf).
kAttrHasFuncCalls = 0x00000020u,
- //! Use AVX instead of SSE for all operations (X86).
+ //! Function uses AVX (X86).
+ //!
+ //! This flag instructs prolog and epilog emitter to use AVX instead of SSE for manipulating
+ //! XMM registers.
kAttrX86AvxEnabled = 0x00010000u,
- //! Emit VZEROUPPER instruction in epilog (X86).
- kAttrX86AvxCleanup = 0x00020000u,
- //! Emit EMMS instruction in epilog (X86).
+ //! Function uses AVX-512 (X86).
+ //!
+ //! This flag instructs Compiler register allocator to use additional 16 registers introduced
+ //! by AVX-512.
+ kAttrX86Avx512Enabled = 0x00020000u,
+
+ //! This flag instructs epilog writer to emit EMMS instruction before RET (X86).
kAttrX86MmxCleanup = 0x00040000u,
+ //! This flag instructs epilog writer to emit VZEROUPPER instruction before RET (X86).
+ kAttrX86AvxCleanup = 0x00080000u,
+
//! Function has aligned save/restore of vector registers.
kAttrAlignedVecSR = 0x40000000u,
//! FuncFrame is finalized and can be used by PEI.
@@ -1054,27 +1072,34 @@ public:
//! Sets `kFlagHasCalls` to false.
inline void resetFuncCalls() noexcept { clearAttributes(kAttrHasFuncCalls); }
- //! Tests whether the function contains AVX cleanup - 'vzeroupper' instruction in epilog.
- inline bool hasAvxCleanup() const noexcept { return hasAttribute(kAttrX86AvxCleanup); }
- //! Enables AVX cleanup.
- inline void setAvxCleanup() noexcept { addAttributes(kAttrX86AvxCleanup); }
- //! Disables AVX cleanup.
- inline void resetAvxCleanup() noexcept { clearAttributes(kAttrX86AvxCleanup); }
-
- //! Tests whether the function contains AVX cleanup - 'vzeroupper' instruction in epilog.
+ //! Tests whether the function has AVX enabled.
inline bool isAvxEnabled() const noexcept { return hasAttribute(kAttrX86AvxEnabled); }
- //! Enables AVX cleanup.
+ //! Enables AVX use.
inline void setAvxEnabled() noexcept { addAttributes(kAttrX86AvxEnabled); }
- //! Disables AVX cleanup.
+ //! Disables AVX use.
inline void resetAvxEnabled() noexcept { clearAttributes(kAttrX86AvxEnabled); }
- //! Tests whether the function contains MMX cleanup - 'emms' instruction in epilog.
+ //! Tests whether the function has AVX-512 enabled.
+ inline bool isAvx512Enabled() const noexcept { return hasAttribute(kAttrX86Avx512Enabled); }
+ //! Enables AVX-512 use.
+ inline void setAvx512Enabled() noexcept { addAttributes(kAttrX86Avx512Enabled); }
+ //! Disables AVX-512 use.
+ inline void resetAvx512Enabled() noexcept { clearAttributes(kAttrX86Avx512Enabled); }
+
+ //! Tests whether the function has MMX cleanup - 'emms' instruction in epilog.
inline bool hasMmxCleanup() const noexcept { return hasAttribute(kAttrX86MmxCleanup); }
//! Enables MMX cleanup.
inline void setMmxCleanup() noexcept { addAttributes(kAttrX86MmxCleanup); }
//! Disables MMX cleanup.
inline void resetMmxCleanup() noexcept { clearAttributes(kAttrX86MmxCleanup); }
+ //! Tests whether the function has AVX cleanup - 'vzeroupper' instruction in epilog.
+ inline bool hasAvxCleanup() const noexcept { return hasAttribute(kAttrX86AvxCleanup); }
+ //! Enables AVX cleanup.
+ inline void setAvxCleanup() noexcept { addAttributes(kAttrX86AvxCleanup); }
+ //! Disables AVX cleanup.
+ inline void resetAvxCleanup() noexcept { clearAttributes(kAttrX86AvxCleanup); }
+
//! Tests whether the function uses call stack.
inline bool hasCallStack() const noexcept { return _callStackSize != 0; }
//! Tests whether the function uses local stack.
diff --git a/erts/emulator/asmjit/core/inst.cpp b/erts/emulator/asmjit/core/inst.cpp
index a79fe837af..c906465f05 100644
--- a/erts/emulator/asmjit/core/inst.cpp
+++ b/erts/emulator/asmjit/core/inst.cpp
@@ -22,16 +22,14 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#ifdef ASMJIT_BUILD_X86
-
#include "../core/archtraits.h"
#include "../core/inst.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../x86/x86instapi_p.h"
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
#include "../arm/a64instapi_p.h"
#endif
@@ -43,12 +41,12 @@ ASMJIT_BEGIN_NAMESPACE
#ifndef ASMJIT_NO_TEXT
Error InstAPI::instIdToString(uint32_t arch, uint32_t instId, String& output) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::InstInternal::instIdToString(arch, instId, output);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isArchAArch64(arch))
return a64::InstInternal::instIdToString(arch, instId, output);
#endif
@@ -57,12 +55,12 @@ Error InstAPI::instIdToString(uint32_t arch, uint32_t instId, String& output) no
}
uint32_t InstAPI::stringToInstId(uint32_t arch, const char* s, size_t len) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::InstInternal::stringToInstId(arch, s, len);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isArchAArch64(arch))
return a64::InstInternal::stringToInstId(arch, s, len);
#endif
@@ -77,12 +75,12 @@ uint32_t InstAPI::stringToInstId(uint32_t arch, const char* s, size_t len) noexc
#ifndef ASMJIT_NO_VALIDATION
Error InstAPI::validate(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, uint32_t validationFlags) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::InstInternal::validate(arch, inst, operands, opCount, validationFlags);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isArchAArch64(arch))
return a64::InstInternal::validate(arch, inst, operands, opCount, validationFlags);
#endif
@@ -100,12 +98,12 @@ Error InstAPI::queryRWInfo(uint32_t arch, const BaseInst& inst, const Operand_*
if (ASMJIT_UNLIKELY(opCount > Globals::kMaxOpCount))
return DebugUtils::errored(kErrorInvalidArgument);
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::InstInternal::queryRWInfo(arch, inst, operands, opCount, out);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isArchAArch64(arch))
return a64::InstInternal::queryRWInfo(arch, inst, operands, opCount, out);
#endif
@@ -120,12 +118,12 @@ Error InstAPI::queryRWInfo(uint32_t arch, const BaseInst& inst, const Operand_*
#ifndef ASMJIT_NO_INTROSPECTION
Error InstAPI::queryFeatures(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount, BaseFeatures* out) noexcept {
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
if (Environment::isFamilyX86(arch))
return x86::InstInternal::queryFeatures(arch, inst, operands, opCount, out);
#endif
-#ifdef ASMJIT_BUILD_ARM
+#if !defined(ASMJIT_NO_ARM)
if (Environment::isArchAArch64(arch))
return a64::InstInternal::queryFeatures(arch, inst, operands, opCount, out);
#endif
@@ -135,5 +133,3 @@ Error InstAPI::queryFeatures(uint32_t arch, const BaseInst& inst, const Operand_
#endif // !ASMJIT_NO_INTROSPECTION
ASMJIT_END_NAMESPACE
-
-#endif // ASMJIT_BUILD_X86
diff --git a/erts/emulator/asmjit/core/jitallocator.cpp b/erts/emulator/asmjit/core/jitallocator.cpp
index 848ff45008..75aaa7bbab 100644
--- a/erts/emulator/asmjit/core/jitallocator.cpp
+++ b/erts/emulator/asmjit/core/jitallocator.cpp
@@ -163,6 +163,27 @@ class JitAllocatorPool {
public:
ASMJIT_NONCOPYABLE(JitAllocatorPool)
+ //! Double linked list of blocks.
+ ZoneList<JitAllocatorBlock> blocks;
+ //! Where to start looking first.
+ JitAllocatorBlock* cursor;
+
+ //! Count of blocks.
+ uint32_t blockCount;
+ //! Allocation granularity.
+ uint16_t granularity;
+ //! Log2(granularity).
+ uint8_t granularityLog2;
+ //! Count of empty blocks (either 0 or 1 as we won't keep more blocks empty).
+ uint8_t emptyBlockCount;
+
+ //! Number of bits reserved across all blocks.
+ size_t totalAreaSize;
+ //! Number of bits used across all blocks.
+ size_t totalAreaUsed;
+ //! Overhead of all blocks (in bytes).
+ size_t totalOverheadBytes;
+
inline JitAllocatorPool(uint32_t granularity) noexcept
: blocks(),
cursor(nullptr),
@@ -190,27 +211,6 @@ public:
using namespace Support;
return alignUp<size_t>(areaSize, kBitWordSizeInBits) / kBitWordSizeInBits;
}
-
- //! Double linked list of blocks.
- ZoneList<JitAllocatorBlock> blocks;
- //! Where to start looking first.
- JitAllocatorBlock* cursor;
-
- //! Count of blocks.
- uint32_t blockCount;
- //! Allocation granularity.
- uint16_t granularity;
- //! Log2(granularity).
- uint8_t granularityLog2;
- //! Count of empty blocks (either 0 or 1 as we won't keep more blocks empty).
- uint8_t emptyBlockCount;
-
- //! Number of bits reserved across all blocks.
- size_t totalAreaSize;
- //! Number of bits used across all blocks.
- size_t totalAreaUsed;
- //! Overhead of all blocks (in bytes).
- size_t totalOverheadBytes;
};
// ============================================================================
@@ -280,7 +280,7 @@ public:
inline JitAllocatorPool* pool() const noexcept { return _pool; }
- inline uint8_t* roPtr() const noexcept { return static_cast<uint8_t*>(_mapping.ro); }
+ inline uint8_t* rxPtr() const noexcept { return static_cast<uint8_t*>(_mapping.rx); }
inline uint8_t* rwPtr() const noexcept { return static_cast<uint8_t*>(_mapping.rw); }
inline bool hasFlag(uint32_t f) const noexcept { return (_flags & f) != 0; }
@@ -376,12 +376,12 @@ public:
}
// RBTree default CMP uses '<' and '>' operators.
- inline bool operator<(const JitAllocatorBlock& other) const noexcept { return roPtr() < other.roPtr(); }
- inline bool operator>(const JitAllocatorBlock& other) const noexcept { return roPtr() > other.roPtr(); }
+ inline bool operator<(const JitAllocatorBlock& other) const noexcept { return rxPtr() < other.rxPtr(); }
+ inline bool operator>(const JitAllocatorBlock& other) const noexcept { return rxPtr() > other.rxPtr(); }
// Special implementation for querying blocks by `key`, which must be in `[BlockPtr, BlockPtr + BlockSize)` range.
- inline bool operator<(const uint8_t* key) const noexcept { return roPtr() + _blockSize <= key; }
- inline bool operator>(const uint8_t* key) const noexcept { return roPtr() > key; }
+ inline bool operator<(const uint8_t* key) const noexcept { return rxPtr() + _blockSize <= key; }
+ inline bool operator>(const uint8_t* key) const noexcept { return rxPtr() > key; }
};
// ============================================================================
@@ -390,16 +390,12 @@ public:
class JitAllocatorPrivateImpl : public JitAllocator::Impl {
public:
- inline JitAllocatorPrivateImpl(JitAllocatorPool* pools, size_t poolCount) noexcept
- : JitAllocator::Impl {},
- pools(pools),
- poolCount(poolCount) {}
- inline ~JitAllocatorPrivateImpl() noexcept {}
-
//! Lock for thread safety.
mutable Lock lock;
//! System page size (also a minimum block size).
uint32_t pageSize;
+ //! Number of active allocations.
+ size_t allocationCount;
//! Blocks from all pools in RBTree.
ZoneTree<JitAllocatorBlock> tree;
@@ -407,6 +403,14 @@ public:
JitAllocatorPool* pools;
//! Number of allocator pools.
size_t poolCount;
+
+ inline JitAllocatorPrivateImpl(JitAllocatorPool* pools, size_t poolCount) noexcept
+ : JitAllocator::Impl {},
+ pageSize(0),
+ allocationCount(0),
+ pools(pools),
+ poolCount(poolCount) {}
+ inline ~JitAllocatorPrivateImpl() noexcept {}
};
static const JitAllocator::Impl JitAllocatorImpl_none {};
@@ -534,25 +538,29 @@ static JitAllocatorBlock* JitAllocatorImpl_newBlock(JitAllocatorPrivateImpl* imp
uint32_t blockFlags = 0;
if (bitWords != nullptr) {
if (impl->options & JitAllocator::kOptionUseDualMapping) {
- err = VirtMem::allocDualMapping(&virtMem, blockSize, VirtMem::kAccessReadWrite | VirtMem::kAccessExecute);
+ err = VirtMem::allocDualMapping(&virtMem, blockSize, VirtMem::kAccessRWX);
blockFlags |= JitAllocatorBlock::kFlagDualMapped;
}
else {
- err = VirtMem::alloc(&virtMem.ro, blockSize, VirtMem::kAccessReadWrite | VirtMem::kAccessExecute);
- virtMem.rw = virtMem.ro;
+ err = VirtMem::alloc(&virtMem.rx, blockSize, VirtMem::kAccessRWX);
+ virtMem.rw = virtMem.rx;
}
}
// Out of memory.
if (ASMJIT_UNLIKELY(!block || !bitWords || err != kErrorOk)) {
- if (bitWords) ::free(bitWords);
- if (block) ::free(block);
+ if (bitWords)
+ ::free(bitWords);
+ if (block)
+ ::free(block);
return nullptr;
}
// Fill the memory if the secure mode is enabled.
- if (impl->options & JitAllocator::kOptionFillUnusedMemory)
+ if (impl->options & JitAllocator::kOptionFillUnusedMemory) {
+ VirtMem::ProtectJitReadWriteScope scope(virtMem.rw, blockSize);
JitAllocatorImpl_fillPattern(virtMem.rw, impl->fillPattern, blockSize);
+ }
memset(bitWords, 0, size_t(numBitWords) * 2 * sizeof(BitWord));
return new(block) JitAllocatorBlock(pool, virtMem, blockSize, blockFlags, bitWords, bitWords + numBitWords, areaSize);
@@ -564,7 +572,7 @@ static void JitAllocatorImpl_deleteBlock(JitAllocatorPrivateImpl* impl, JitAlloc
if (block->hasFlag(JitAllocatorBlock::kFlagDualMapped))
VirtMem::releaseDualMapping(&block->_mapping, block->blockSize());
else
- VirtMem::release(block->roPtr(), block->blockSize());
+ VirtMem::release(block->rxPtr(), block->blockSize());
::free(block->_usedBitVector);
::free(block);
@@ -603,26 +611,31 @@ static void JitAllocatorImpl_removeBlock(JitAllocatorPrivateImpl* impl, JitAlloc
}
static void JitAllocatorImpl_wipeOutBlock(JitAllocatorPrivateImpl* impl, JitAllocatorBlock* block) noexcept {
- JitAllocatorPool* pool = block->pool();
-
if (block->hasFlag(JitAllocatorBlock::kFlagEmpty))
return;
+ JitAllocatorPool* pool = block->pool();
uint32_t areaSize = block->areaSize();
uint32_t granularity = pool->granularity;
size_t numBitWords = pool->bitWordCountFromAreaSize(areaSize);
+ VirtMem::protectJitMemory(VirtMem::kProtectJitReadWrite);
if (impl->options & JitAllocator::kOptionFillUnusedMemory) {
uint8_t* rwPtr = block->rwPtr();
- for (size_t i = 0; i < numBitWords; i++) {
- Support::BitWordIterator<Support::BitWord> it(block->_usedBitVector[i]);
- while (it.hasNext()) {
- size_t index = it.next();
- JitAllocatorImpl_fillPattern(rwPtr + index * granularity , impl->fillPattern, granularity);
- }
- rwPtr += Support::bitSizeOf<Support::BitWord>() * granularity;
+ BitVectorRangeIterator<Support::BitWord, 0> it(block->_usedBitVector, pool->bitWordCountFromAreaSize(block->areaSize()));
+
+ size_t rangeStart;
+ size_t rangeEnd;
+
+ while (it.nextRange(&rangeStart, &rangeEnd)) {
+ uint8_t* spanPtr = rwPtr + rangeStart * granularity;
+ size_t spanSize = (rangeEnd - rangeStart) * granularity;
+
+ JitAllocatorImpl_fillPattern(spanPtr, impl->fillPattern, spanSize);
+ VirtMem::flushInstructionCache(spanPtr, spanSize);
}
}
+ VirtMem::protectJitMemory(VirtMem::kProtectJitReadExecute);
memset(block->_usedBitVector, 0, size_t(numBitWords) * sizeof(Support::BitWord));
memset(block->_stopBitVector, 0, size_t(numBitWords) * sizeof(Support::BitWord));
@@ -713,6 +726,8 @@ JitAllocator::Statistics JitAllocator::statistics() const noexcept {
statistics._usedSize += size_t(pool.totalAreaUsed) * pool.granularity;
statistics._overheadSize += size_t(pool.totalOverheadBytes);
}
+
+ statistics._allocationCount = impl->allocationCount;
}
return statistics;
@@ -722,14 +737,14 @@ JitAllocator::Statistics JitAllocator::statistics() const noexcept {
// [asmjit::JitAllocator - Alloc / Release]
// ============================================================================
-Error JitAllocator::alloc(void** roPtrOut, void** rwPtrOut, size_t size) noexcept {
+Error JitAllocator::alloc(void** rxPtrOut, void** rwPtrOut, size_t size) noexcept {
if (ASMJIT_UNLIKELY(_impl == &JitAllocatorImpl_none))
return DebugUtils::errored(kErrorNotInitialized);
JitAllocatorPrivateImpl* impl = static_cast<JitAllocatorPrivateImpl*>(_impl);
constexpr uint32_t kNoIndex = std::numeric_limits<uint32_t>::max();
- *roPtrOut = nullptr;
+ *rxPtrOut = nullptr;
*rwPtrOut = nullptr;
// Align to the minimum granularity by default.
@@ -815,45 +830,52 @@ Error JitAllocator::alloc(void** roPtrOut, void** rwPtrOut, size_t size) noexcep
}
// Update statistics.
+ impl->allocationCount++;
block->markAllocatedArea(areaIndex, areaIndex + areaSize);
// Return a pointer to the allocated memory.
size_t offset = pool->byteSizeFromAreaSize(areaIndex);
ASMJIT_ASSERT(offset <= block->blockSize() - size);
- *roPtrOut = block->roPtr() + offset;
+ *rxPtrOut = block->rxPtr() + offset;
*rwPtrOut = block->rwPtr() + offset;
return kErrorOk;
}
-Error JitAllocator::release(void* roPtr) noexcept {
+Error JitAllocator::release(void* rxPtr) noexcept {
if (ASMJIT_UNLIKELY(_impl == &JitAllocatorImpl_none))
return DebugUtils::errored(kErrorNotInitialized);
- if (ASMJIT_UNLIKELY(!roPtr))
+ if (ASMJIT_UNLIKELY(!rxPtr))
return DebugUtils::errored(kErrorInvalidArgument);
JitAllocatorPrivateImpl* impl = static_cast<JitAllocatorPrivateImpl*>(_impl);
LockGuard guard(impl->lock);
- JitAllocatorBlock* block = impl->tree.get(static_cast<uint8_t*>(roPtr));
+ JitAllocatorBlock* block = impl->tree.get(static_cast<uint8_t*>(rxPtr));
if (ASMJIT_UNLIKELY(!block))
return DebugUtils::errored(kErrorInvalidState);
// Offset relative to the start of the block.
JitAllocatorPool* pool = block->pool();
- size_t offset = (size_t)((uint8_t*)roPtr - block->roPtr());
+ size_t offset = (size_t)((uint8_t*)rxPtr - block->rxPtr());
// The first bit representing the allocated area and its size.
uint32_t areaIndex = uint32_t(offset >> pool->granularityLog2);
uint32_t areaEnd = uint32_t(Support::bitVectorIndexOf(block->_stopBitVector, areaIndex, true)) + 1;
uint32_t areaSize = areaEnd - areaIndex;
+ impl->allocationCount--;
block->markReleasedArea(areaIndex, areaEnd);
// Fill the released memory if the secure mode is enabled.
- if (impl->options & kOptionFillUnusedMemory)
- JitAllocatorImpl_fillPattern(block->rwPtr() + areaIndex * pool->granularity, impl->fillPattern, areaSize * pool->granularity);
+ if (impl->options & kOptionFillUnusedMemory) {
+ uint8_t* spanPtr = block->rwPtr() + areaIndex * pool->granularity;
+ size_t spanSize = areaSize * pool->granularity;
+
+ VirtMem::ProtectJitReadWriteScope scope(spanPtr, spanSize);
+ JitAllocatorImpl_fillPattern(spanPtr, impl->fillPattern, spanSize);
+ }
// Release the whole block if it became empty.
if (block->areaUsed() == 0) {
@@ -869,26 +891,26 @@ Error JitAllocator::release(void* roPtr) noexcept {
return kErrorOk;
}
-Error JitAllocator::shrink(void* roPtr, size_t newSize) noexcept {
+Error JitAllocator::shrink(void* rxPtr, size_t newSize) noexcept {
if (ASMJIT_UNLIKELY(_impl == &JitAllocatorImpl_none))
return DebugUtils::errored(kErrorNotInitialized);
- if (ASMJIT_UNLIKELY(!roPtr))
+ if (ASMJIT_UNLIKELY(!rxPtr))
return DebugUtils::errored(kErrorInvalidArgument);
if (ASMJIT_UNLIKELY(newSize == 0))
- return release(roPtr);
+ return release(rxPtr);
JitAllocatorPrivateImpl* impl = static_cast<JitAllocatorPrivateImpl*>(_impl);
LockGuard guard(impl->lock);
- JitAllocatorBlock* block = impl->tree.get(static_cast<uint8_t*>(roPtr));
+ JitAllocatorBlock* block = impl->tree.get(static_cast<uint8_t*>(rxPtr));
if (ASMJIT_UNLIKELY(!block))
return DebugUtils::errored(kErrorInvalidArgument);
// Offset relative to the start of the block.
JitAllocatorPool* pool = block->pool();
- size_t offset = (size_t)((uint8_t*)roPtr - block->roPtr());
+ size_t offset = (size_t)((uint8_t*)rxPtr - block->rxPtr());
// The first bit representing the allocated area and its size.
uint32_t areaStart = uint32_t(offset >> pool->granularityLog2);
@@ -905,8 +927,13 @@ Error JitAllocator::shrink(void* roPtr, size_t newSize) noexcept {
block->markShrunkArea(areaStart + areaShrunkSize, areaEnd);
// Fill released memory if the secure mode is enabled.
- if (impl->options & kOptionFillUnusedMemory)
- JitAllocatorImpl_fillPattern(block->rwPtr() + (areaStart + areaShrunkSize) * pool->granularity, fillPattern(), areaDiff * pool->granularity);
+ if (impl->options & kOptionFillUnusedMemory) {
+ uint8_t* spanPtr = block->rwPtr() + (areaStart + areaShrunkSize) * pool->granularity;
+ size_t spanSize = areaDiff * pool->granularity;
+
+ VirtMem::ProtectJitReadWriteScope scope(spanPtr, spanSize);
+ JitAllocatorImpl_fillPattern(spanPtr, fillPattern(), spanSize);
+ }
}
return kErrorOk;
@@ -1034,14 +1061,14 @@ public:
}
void* alloc(size_t size) noexcept {
- void* roPtr;
+ void* rxPtr;
void* rwPtr;
- Error err = _allocator.alloc(&roPtr, &rwPtr, size);
+ Error err = _allocator.alloc(&rxPtr, &rwPtr, size);
EXPECT(err == kErrorOk, "JitAllocator failed to allocate %zu bytes\n", size);
- _insert(roPtr, size);
- return roPtr;
+ _insert(rxPtr, size);
+ return rxPtr;
}
void release(void* p) noexcept {
@@ -1099,7 +1126,7 @@ static void BitVectorRangeIterator_testRandom(Random& rnd, size_t count) noexcep
}
for (size_t j = 0; j < kPatternSize; j++) {
- EXPECT(in[j] == out[j], "Invalid pattern detected at [%zu] (%llX != %llX", j, (unsigned long long)in[j], (unsigned long long)out[j]);
+ EXPECT(in[j] == out[j], "Invalid pattern detected at [%zu] (%llX != %llX)", j, (unsigned long long)in[j], (unsigned long long)out[j]);
}
}
}
diff --git a/erts/emulator/asmjit/core/jitallocator.h b/erts/emulator/asmjit/core/jitallocator.h
index c9eea2a3a1..0b340df4ab 100644
--- a/erts/emulator/asmjit/core/jitallocator.h
+++ b/erts/emulator/asmjit/core/jitallocator.h
@@ -63,20 +63,7 @@ class JitAllocator {
public:
ASMJIT_NONCOPYABLE(JitAllocator)
- struct Impl {
- //! Allocator options, see \ref JitAllocator::Options.
- uint32_t options;
- //! Base block size (0 if the allocator is not initialized).
- uint32_t blockSize;
- //! Base granularity (0 if the allocator is not initialized).
- uint32_t granularity;
- //! A pattern that is used to fill unused memory if secure mode is enabled.
- uint32_t fillPattern;
- };
-
- //! Allocator implementation (private).
- Impl* _impl;
-
+ //! Jit allocator options.
enum Options : uint32_t {
//! Enables the use of an anonymous memory-mapped memory that is mapped into
//! two buffers having a different pointer. The first buffer has read and
@@ -116,6 +103,20 @@ public:
kOptionCustomFillPattern = 0x10000000u
};
+ struct Impl {
+ //! Allocator options, see \ref JitAllocator::Options.
+ uint32_t options;
+ //! Base block size (0 if the allocator is not initialized).
+ uint32_t blockSize;
+ //! Base granularity (0 if the allocator is not initialized).
+ uint32_t granularity;
+ //! A pattern that is used to fill unused memory if secure mode is enabled.
+ uint32_t fillPattern;
+ };
+
+ //! Allocator implementation (private).
+ Impl* _impl;
+
//! \name Construction & Destruction
//! \{
@@ -199,20 +200,34 @@ public:
//! \name Alloc & Release
//! \{
- //! Allocate `size` bytes of virtual memory.
+ //! Allocates `size` bytes of virtual memory.
+ //!
+ //! When the function is successful it stores two pointers in `rxPtrOut` and `rwPtrOut`.
+ //! The pointers will be different only if `kOptionUseDualMapping` was used to setup the
+ //! allocator (in that case the `rxPtrOut` would point to a Read+Execute region and
+ //! `rwPtrOut` would point to a Read+Write region of the same memory-mapped block.
//!
//! \remarks This function is thread-safe.
- ASMJIT_API Error alloc(void** roPtrOut, void** rwPtrOut, size_t size) noexcept;
+ ASMJIT_API Error alloc(void** rxPtrOut, void** rwPtrOut, size_t size) noexcept;
- //! Release a memory returned by `alloc()`.
+ //! Releases a memory returned by `alloc()`.
//!
//! \remarks This function is thread-safe.
- ASMJIT_API Error release(void* roPtr) noexcept;
+ ASMJIT_API Error release(void* rxPtr) noexcept;
- //! Free extra memory allocated with `p` by restricting it to `newSize` size.
+ //! Frees extra memory allocated with `p` by restricting it to `newSize` size.
//!
//! \remarks This function is thread-safe.
- ASMJIT_API Error shrink(void* roPtr, size_t newSize) noexcept;
+ ASMJIT_API Error shrink(void* rxPtr, size_t newSize) noexcept;
+
+ //! Queries information about an allocated memory block that contains the given `rxPtr`.
+ //!
+ //! The function returns `kErrorOk` when `rxPtr` is matched and fills `rxPtrOut`, `rwPtrOut`, and `sizeOut` output
+ //! arguments. The returned `rxPtrOut` and `rwPtrOut` pointers point to the beginning of the block, and `sizeOut`
+ //! describes the total amount of bytes this allocation uses - the `sizeOut` will always be aligned to the allocation
+ //! granularity, so for example if an allocation was 1 byte and the size granularity is 64, the returned `sizeOut`
+ //! will be 64 bytes, because that's what the allocator sees.
+ ASMJIT_API Error query(void* rxPtr, void** rxPtrOut, void** rwPtrOut, size_t* sizeOut) const noexcept;
//! \}
@@ -223,6 +238,8 @@ public:
struct Statistics {
//! Number of blocks `JitAllocator` maintains.
size_t _blockCount;
+ //! Number of active allocations.
+ size_t _allocationCount;
//! How many bytes are currently used / allocated.
size_t _usedSize;
//! How many bytes are currently reserved by the allocator.
@@ -240,6 +257,9 @@ public:
//! Returns count of blocks managed by `JitAllocator` at the moment.
inline size_t blockCount() const noexcept { return _blockCount; }
+ //! Returns the number of active allocations.
+ inline size_t allocationCount() const noexcept { return _allocationCount; }
+
//! Returns how many bytes are currently used.
inline size_t usedSize() const noexcept { return _usedSize; }
//! Returns the number of bytes unused by the allocator at the moment.
diff --git a/erts/emulator/asmjit/core/jitruntime.cpp b/erts/emulator/asmjit/core/jitruntime.cpp
index a2b46d7b5f..ae0cc799af 100644
--- a/erts/emulator/asmjit/core/jitruntime.cpp
+++ b/erts/emulator/asmjit/core/jitruntime.cpp
@@ -30,28 +30,6 @@
ASMJIT_BEGIN_NAMESPACE
// ============================================================================
-// [asmjit::JitRuntime - Utilities]
-// ============================================================================
-
-// Only useful on non-x86 architectures.
-static inline void JitRuntime_flushInstructionCache(const void* p, size_t size) noexcept {
-#if ASMJIT_ARCH_X86
- DebugUtils::unused(p, size);
-#else
-# if defined(_WIN32)
- // Windows has a built-in support in `kernel32.dll`.
- ::FlushInstructionCache(::GetCurrentProcess(), p, size);
-# elif defined(__GNUC__)
- char* start = static_cast<char*>(const_cast<void*>(p));
- char* end = start + size;
- __builtin___clear_cache(start, end);
-# else
- DebugUtils::unused(p, size);
-# endif
-#endif
-}
-
-// ============================================================================
// [asmjit::JitRuntime - Construction / Destruction]
// ============================================================================
@@ -77,41 +55,42 @@ Error JitRuntime::_add(void** dst, CodeHolder* code) noexcept {
if (ASMJIT_UNLIKELY(estimatedCodeSize == 0))
return DebugUtils::errored(kErrorNoCodeGenerated);
- uint8_t* ro;
+ uint8_t* rx;
uint8_t* rw;
- ASMJIT_PROPAGATE(_allocator.alloc((void**)&ro, (void**)&rw, estimatedCodeSize));
+ ASMJIT_PROPAGATE(_allocator.alloc((void**)&rx, (void**)&rw, estimatedCodeSize));
// Relocate the code.
- Error err = code->relocateToBase(uintptr_t((void*)ro));
+ Error err = code->relocateToBase(uintptr_t((void*)rx));
if (ASMJIT_UNLIKELY(err)) {
- _allocator.release(ro);
+ _allocator.release(rx);
return err;
}
// Recalculate the final code size and shrink the memory we allocated for it
// in case that some relocations didn't require records in an address table.
size_t codeSize = code->codeSize();
+ if (codeSize < estimatedCodeSize)
+ _allocator.shrink(rx, codeSize);
- for (Section* section : code->_sections) {
- size_t offset = size_t(section->offset());
- size_t bufferSize = size_t(section->bufferSize());
- size_t virtualSize = size_t(section->virtualSize());
+ {
+ VirtMem::ProtectJitReadWriteScope rwScope(rx, codeSize);
- ASMJIT_ASSERT(offset + bufferSize <= codeSize);
- memcpy(rw + offset, section->data(), bufferSize);
+ for (Section* section : code->_sections) {
+ size_t offset = size_t(section->offset());
+ size_t bufferSize = size_t(section->bufferSize());
+ size_t virtualSize = size_t(section->virtualSize());
- if (virtualSize > bufferSize) {
- ASMJIT_ASSERT(offset + virtualSize <= codeSize);
- memset(rw + offset + bufferSize, 0, virtualSize - bufferSize);
+ ASMJIT_ASSERT(offset + bufferSize <= codeSize);
+ memcpy(rw + offset, section->data(), bufferSize);
+
+ if (virtualSize > bufferSize) {
+ ASMJIT_ASSERT(offset + virtualSize <= codeSize);
+ memset(rw + offset + bufferSize, 0, virtualSize - bufferSize);
+ }
}
}
- if (codeSize < estimatedCodeSize)
- _allocator.shrink(ro, codeSize);
-
- flush(ro, codeSize);
- *dst = ro;
-
+ *dst = rx;
return kErrorOk;
}
@@ -119,10 +98,6 @@ Error JitRuntime::_release(void* p) noexcept {
return _allocator.release(p);
}
-void JitRuntime::flush(const void* p, size_t size) noexcept {
- JitRuntime_flushInstructionCache(p, size);
-}
-
ASMJIT_END_NAMESPACE
#endif
diff --git a/erts/emulator/asmjit/core/jitruntime.h b/erts/emulator/asmjit/core/jitruntime.h
index 91880e688c..49e1fa3b76 100644
--- a/erts/emulator/asmjit/core/jitruntime.h
+++ b/erts/emulator/asmjit/core/jitruntime.h
@@ -102,19 +102,6 @@ public:
//! Type-unsafe version of `release()`.
ASMJIT_API virtual Error _release(void* p) noexcept;
- //! Flushes an instruction cache.
- //!
- //! This member function is called after the code has been copied to the
- //! destination buffer. It is only useful for JIT code generation as it
- //! causes a flush of the processor's cache.
- //!
- //! Flushing is basically a NOP under X86, but is needed by architectures
- //! that do not have a transparent instruction cache like ARM.
- //!
- //! This function can also be overridden to improve compatibility with tools
- //! such as Valgrind, however, it's not an official part of AsmJit.
- ASMJIT_API virtual void flush(const void* p, size_t size) noexcept;
-
//! \}
};
diff --git a/erts/emulator/asmjit/core/ralocal.cpp b/erts/emulator/asmjit/core/ralocal.cpp
index 35f6560b50..5e06d5b8a6 100644
--- a/erts/emulator/asmjit/core/ralocal.cpp
+++ b/erts/emulator/asmjit/core/ralocal.cpp
@@ -801,7 +801,7 @@ Error RALocalAllocator::allocInst(InstNode* node) noexcept {
uint32_t physId = tiedReg->outId();
if (physId == RAAssignment::kPhysNone) {
- uint32_t allocableRegs = _availableRegs[group] & ~(outRegs | avoidRegs);
+ uint32_t allocableRegs = tiedReg->_allocableRegs & ~(outRegs | avoidRegs);
if (!(allocableRegs & ~liveRegs)) {
// There are no more registers, decide which one to spill.
diff --git a/erts/emulator/asmjit/core/rapass.cpp b/erts/emulator/asmjit/core/rapass.cpp
index 270027a574..5e55584aeb 100644
--- a/erts/emulator/asmjit/core/rapass.cpp
+++ b/erts/emulator/asmjit/core/rapass.cpp
@@ -1737,94 +1737,6 @@ Error BaseRAPass::rewrite() noexcept {
return _rewrite(_func, _stop);
}
-ASMJIT_FAVOR_SPEED Error BaseRAPass::_rewrite(BaseNode* first, BaseNode* stop) noexcept {
- uint32_t virtCount = cc()->_vRegArray.size();
-
- BaseNode* node = first;
- while (node != stop) {
- BaseNode* next = node->next();
- if (node->isInst()) {
- InstNode* inst = node->as<InstNode>();
- RAInst* raInst = node->passData<RAInst>();
-
- Operand* operands = inst->operands();
- uint32_t opCount = inst->opCount();
- uint32_t i;
-
- // Rewrite virtual registers into physical registers.
- if (ASMJIT_LIKELY(raInst)) {
- // If the instruction contains pass data (raInst) then it was a subject
- // for register allocation and must be rewritten to use physical regs.
- RATiedReg* tiedRegs = raInst->tiedRegs();
- uint32_t tiedCount = raInst->tiedCount();
-
- for (i = 0; i < tiedCount; i++) {
- RATiedReg* tiedReg = &tiedRegs[i];
-
- Support::BitWordIterator<uint32_t> useIt(tiedReg->useRewriteMask());
- uint32_t useId = tiedReg->useId();
- while (useIt.hasNext()) inst->rewriteIdAtIndex(useIt.next(), useId);
-
- Support::BitWordIterator<uint32_t> outIt(tiedReg->outRewriteMask());
- uint32_t outId = tiedReg->outId();
- while (outIt.hasNext()) inst->rewriteIdAtIndex(outIt.next(), outId);
- }
-
- // This data is allocated by Zone passed to `runOnFunction()`, which
- // will be reset after the RA pass finishes. So reset this data to
- // prevent having a dead pointer after RA pass is complete.
- node->resetPassData();
-
- if (ASMJIT_UNLIKELY(node->type() != BaseNode::kNodeInst)) {
- // FuncRet terminates the flow, it must either be removed if the exit
- // label is next to it (optimization) or patched to an architecture
- // dependent jump instruction that jumps to the function's exit before
- // the epilog.
- if (node->type() == BaseNode::kNodeFuncRet) {
- RABlock* block = raInst->block();
- if (!isNextTo(node, _func->exitNode())) {
- cc()->_setCursor(node->prev());
- ASMJIT_PROPAGATE(emitJump(_func->exitNode()->label()));
- }
-
- BaseNode* prev = node->prev();
- cc()->removeNode(node);
- block->setLast(prev);
- }
- }
- }
-
- // Rewrite stack slot addresses.
- for (i = 0; i < opCount; i++) {
- Operand& op = operands[i];
- if (op.isMem()) {
- BaseMem& mem = op.as<BaseMem>();
- if (mem.isRegHome()) {
- uint32_t virtIndex = Operand::virtIdToIndex(mem.baseId());
- if (ASMJIT_UNLIKELY(virtIndex >= virtCount))
- return DebugUtils::errored(kErrorInvalidVirtId);
-
- VirtReg* virtReg = cc()->virtRegByIndex(virtIndex);
- RAWorkReg* workReg = virtReg->workReg();
- ASMJIT_ASSERT(workReg != nullptr);
-
- RAStackSlot* slot = workReg->stackSlot();
- int32_t offset = slot->offset();
-
- mem._setBase(_sp.type(), slot->baseRegId());
- mem.clearRegHome();
- mem.addOffsetLo32(offset);
- }
- }
- }
- }
-
- node = next;
- }
-
- return kErrorOk;
-}
-
// ============================================================================
// [asmjit::BaseRAPass - Logging]
// ============================================================================
diff --git a/erts/emulator/asmjit/core/rapass_p.h b/erts/emulator/asmjit/core/rapass_p.h
index d2fe50519e..034ec07cae 100644
--- a/erts/emulator/asmjit/core/rapass_p.h
+++ b/erts/emulator/asmjit/core/rapass_p.h
@@ -305,7 +305,7 @@ public:
RATiedReg _tiedRegs[1];
enum Flags : uint32_t {
- kFlagIsTerminator = 0x00000001u
+ kFlagIsTransformable = 0x80000000u
};
//! \name Construction & Destruction
@@ -338,8 +338,8 @@ public:
//! Clears instruction `flags` from this RAInst.
inline void clearFlags(uint32_t flags) noexcept { _flags &= ~flags; }
- //! Returns whether the RAInst represents an instruction that terminates this basic block.
- inline bool isTerminator() const noexcept { return hasFlag(kFlagIsTerminator); }
+ //! Tests whether this instruction can be transformed to another instruction if necessary.
+ inline bool isTransformable() const noexcept { return hasFlag(kFlagIsTransformable); }
//! Returns the associated block with this RAInst.
inline RABlock* block() const noexcept { return _block; }
@@ -1125,7 +1125,7 @@ public:
//! \{
Error rewrite() noexcept;
- Error _rewrite(BaseNode* first, BaseNode* stop) noexcept;
+ virtual Error _rewrite(BaseNode* first, BaseNode* stop) noexcept = 0;
//! \}
diff --git a/erts/emulator/asmjit/core/support.h b/erts/emulator/asmjit/core/support.h
index f98ffaa08c..a2ee7addbe 100644
--- a/erts/emulator/asmjit/core/support.h
+++ b/erts/emulator/asmjit/core/support.h
@@ -200,6 +200,12 @@ static constexpr X sar(const X& x, const Y& y) noexcept {
return X(S(x) >> y);
}
+template<typename X, typename Y>
+static constexpr X ror(const X& x, const Y& y) noexcept {
+ typedef typename std::make_unsigned<X>::type U;
+ return X((U(x) >> y) | (U(x) << (bitSizeOf<U>() - y)));
+}
+
//! Returns `x | (x >> y)` - helper used by some bit manipulation helpers.
template<typename X, typename Y>
static constexpr X or_shr(const X& x, const Y& y) noexcept { return X(x | shr(x, y)); }
@@ -211,7 +217,33 @@ static constexpr T blsi(T x) noexcept {
return T(U(x) & neg(U(x)));
}
-//! Generate a trailing bit-mask that has `n` least significant (trailing) bits set.
+//! Tests whether the given value `x` has `n`th bit set.
+template<typename T, typename IndexT>
+static constexpr bool bitTest(T x, IndexT n) noexcept {
+ typedef typename std::make_unsigned<T>::type U;
+ return (U(x) & (U(1) << n)) != 0;
+}
+
+// Tests whether the given `value` is a consecutive mask of bits that starts at
+// the least significant bit.
+template<typename T>
+static constexpr inline bool isLsbMask(const T& value) {
+ typedef typename std::make_unsigned<T>::type U;
+ return value && ((U(value) + 1u) & U(value)) == 0;
+}
+
+// Tests whether the given value contains at least one bit or whether it's a
+// bit-mask of consecutive bits.
+//
+// This function is similar to \ref isLsbMask(), but the mask doesn't have to
+// start at a least significant bit.
+template<typename T>
+static constexpr inline bool isConsecutiveMask(const T& value) {
+ typedef typename std::make_unsigned<T>::type U;
+ return value && isLsbMask((U(value) - 1u) | U(value));
+}
+
+//! Generates a trailing bit-mask that has `n` least significant (trailing) bits set.
template<typename T, typename CountT>
static constexpr T lsbMask(const CountT& n) noexcept {
typedef typename std::make_unsigned<T>::type U;
@@ -222,11 +254,15 @@ static constexpr T lsbMask(const CountT& n) noexcept {
: n ? T(shr(allOnes<T>(), bitSizeOf<T>() - size_t(n))) : T(0);
}
-//! Tests whether the given value `x` has `n`th bit set.
-template<typename T, typename IndexT>
-static constexpr bool bitTest(T x, IndexT n) noexcept {
+//! Generats a leading bit-mask that has `n` most significant (leading) bits set.
+template<typename T, typename CountT>
+static constexpr T msbMask(const CountT& n) noexcept {
typedef typename std::make_unsigned<T>::type U;
- return (U(x) & (U(1) << n)) != 0;
+ return (sizeof(U) < sizeof(uintptr_t))
+ // Prevent undefined behavior by using a larger type than T.
+ ? T(allOnes<uintptr_t>() >> (bitSizeOf<uintptr_t>() - n))
+ // Prevent undefined behavior by performing `n & (nBits - 1)` so it's always within the range.
+ : T(sar(U(n != 0) << (bitSizeOf<U>() - 1), n ? uint32_t(n - 1) : uint32_t(0)));
}
//! Returns a bit-mask that has `x` bit set.
diff --git a/erts/emulator/asmjit/core/virtmem.cpp b/erts/emulator/asmjit/core/virtmem.cpp
index a1b0f950bf..ba02fa7a78 100644
--- a/erts/emulator/asmjit/core/virtmem.cpp
+++ b/erts/emulator/asmjit/core/virtmem.cpp
@@ -44,9 +44,12 @@
// Apple recently introduced MAP_JIT flag, which we want to use.
#if defined(__APPLE__)
+ #include <pthread.h>
#include <TargetConditionals.h>
#if TARGET_OS_OSX
#include <sys/utsname.h>
+ // We also need this for sys_icache_invalidate().
+ #include <libkern/OSCacheControl.h>
#endif
// Older SDK doesn't define `MAP_JIT`.
#ifndef MAP_JIT
@@ -54,7 +57,7 @@
#endif
#endif
- // BSD/OSX: `MAP_ANONYMOUS` is not defined, `MAP_ANON` is.
+ // BSD/MAC: `MAP_ANONYMOUS` is not defined, `MAP_ANON` is.
#if !defined(MAP_ANONYMOUS)
#define MAP_ANONYMOUS MAP_ANON
#endif
@@ -68,6 +71,10 @@
#define ASMJIT_VM_SHM_DETECT 1
#endif
+#if defined(__APPLE__) && ASMJIT_ARCH_ARM >= 64
+ #define ASMJIT_HAS_PTHREAD_JIT_WRITE_PROTECT_NP
+#endif
+
ASMJIT_BEGIN_NAMESPACE
// ============================================================================
@@ -75,15 +82,16 @@ ASMJIT_BEGIN_NAMESPACE
// ============================================================================
static const uint32_t VirtMem_dualMappingFilter[2] = {
- VirtMem::kAccessWrite,
- VirtMem::kAccessExecute
+ VirtMem::kAccessWrite | VirtMem::kMMapMaxAccessWrite,
+ VirtMem::kAccessExecute | VirtMem::kMMapMaxAccessExecute
};
// ============================================================================
-// [asmjit::VirtMem - Virtual Memory [Windows]]
+// [asmjit::VirtMem - Virtual Memory Management [Windows]]
// ============================================================================
#if defined(_WIN32)
+
struct ScopedHandle {
inline ScopedHandle() noexcept
: value(nullptr) {}
@@ -104,14 +112,14 @@ static void VirtMem_getInfo(VirtMem::Info& vmInfo) noexcept {
vmInfo.pageGranularity = systemInfo.dwAllocationGranularity;
}
-// Windows specific implementation that uses `VirtualAlloc` and `VirtualFree`.
-static DWORD VirtMem_accessToWinProtectFlags(uint32_t flags) noexcept {
+// Returns windows-specific protectFlags from \ref VirtMem::Flags.
+static DWORD VirtMem_winProtectFlagsFromFlags(uint32_t flags) noexcept {
DWORD protectFlags;
// READ|WRITE|EXECUTE.
if (flags & VirtMem::kAccessExecute)
protectFlags = (flags & VirtMem::kAccessWrite) ? PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ;
- else if (flags & VirtMem::kAccessReadWrite)
+ else if (flags & VirtMem::kAccessRW)
protectFlags = (flags & VirtMem::kAccessWrite) ? PAGE_READWRITE : PAGE_READONLY;
else
protectFlags = PAGE_NOACCESS;
@@ -120,19 +128,23 @@ static DWORD VirtMem_accessToWinProtectFlags(uint32_t flags) noexcept {
return protectFlags;
}
-static DWORD VirtMem_accessToWinDesiredAccess(uint32_t flags) noexcept {
+static DWORD VirtMem_winDesiredAccessFromFlags(uint32_t flags) noexcept {
DWORD access = (flags & VirtMem::kAccessWrite) ? FILE_MAP_WRITE : FILE_MAP_READ;
if (flags & VirtMem::kAccessExecute)
access |= FILE_MAP_EXECUTE;
return access;
}
+static uint32_t VirtMem_hardenedRuntimeFlags() noexcept {
+ return 0;
+}
+
Error VirtMem::alloc(void** p, size_t size, uint32_t flags) noexcept {
*p = nullptr;
if (size == 0)
return DebugUtils::errored(kErrorInvalidArgument);
- DWORD protectFlags = VirtMem_accessToWinProtectFlags(flags);
+ DWORD protectFlags = VirtMem_winProtectFlagsFromFlags(flags);
void* result = ::VirtualAlloc(nullptr, size, MEM_COMMIT | MEM_RESERVE, protectFlags);
if (!result)
@@ -150,7 +162,7 @@ Error VirtMem::release(void* p, size_t size) noexcept {
}
Error VirtMem::protect(void* p, size_t size, uint32_t flags) noexcept {
- DWORD protectFlags = VirtMem_accessToWinProtectFlags(flags);
+ DWORD protectFlags = VirtMem_winProtectFlagsFromFlags(flags);
DWORD oldFlags;
if (::VirtualProtect(p, size, protectFlags, &oldFlags))
@@ -159,8 +171,12 @@ Error VirtMem::protect(void* p, size_t size, uint32_t flags) noexcept {
return DebugUtils::errored(kErrorInvalidArgument);
}
+// ============================================================================
+// [asmjit::VirtMem - Dual Mapping [Windows]]
+// ============================================================================
+
Error VirtMem::allocDualMapping(DualMapping* dm, size_t size, uint32_t flags) noexcept {
- dm->ro = nullptr;
+ dm->rx = nullptr;
dm->rw = nullptr;
if (size == 0)
@@ -180,7 +196,8 @@ Error VirtMem::allocDualMapping(DualMapping* dm, size_t size, uint32_t flags) no
void* ptr[2];
for (uint32_t i = 0; i < 2; i++) {
- DWORD desiredAccess = VirtMem_accessToWinDesiredAccess(flags & ~VirtMem_dualMappingFilter[i]);
+ uint32_t accessFlags = flags & ~VirtMem_dualMappingFilter[i];
+ DWORD desiredAccess = VirtMem_winDesiredAccessFromFlags(accessFlags);
ptr[i] = ::MapViewOfFile(handle.value, desiredAccess, 0, 0, size);
if (ptr[i] == nullptr) {
@@ -190,7 +207,7 @@ Error VirtMem::allocDualMapping(DualMapping* dm, size_t size, uint32_t flags) no
}
}
- dm->ro = ptr[0];
+ dm->rx = ptr[0];
dm->rw = ptr[1];
return kErrorOk;
}
@@ -199,71 +216,27 @@ Error VirtMem::releaseDualMapping(DualMapping* dm, size_t size) noexcept {
DebugUtils::unused(size);
bool failed = false;
- if (!::UnmapViewOfFile(dm->ro))
+ if (!::UnmapViewOfFile(dm->rx))
failed = true;
- if (dm->ro != dm->rw && !UnmapViewOfFile(dm->rw))
+ if (dm->rx != dm->rw && !UnmapViewOfFile(dm->rw))
failed = true;
if (failed)
return DebugUtils::errored(kErrorInvalidArgument);
- dm->ro = nullptr;
+ dm->rx = nullptr;
dm->rw = nullptr;
return kErrorOk;
}
+
#endif
// ============================================================================
-// [asmjit::VirtMem - Virtual Memory [Posix]]
+// [asmjit::VirtMem - Virtual Memory Management [Posix]]
// ============================================================================
#if !defined(_WIN32)
-class AnonymousMemory {
-public:
- enum FileType : uint32_t {
- kFileTypeNone,
- kFileTypeTmp,
- kFileTypeShm
- };
-
- int fd;
- FileType fileType;
- StringTmp<128> tmpName;
-
- AnonymousMemory() noexcept
- : fd(-1),
- fileType(kFileTypeNone),
- tmpName() {}
-
- ~AnonymousMemory() noexcept {
- unlinkFile();
- closeFile();
- }
-
- int closeFile() noexcept {
- if (fd >= 0) {
- int result = close(fd);
- fd = -1;
- return result;
- }
- else {
- return 0;
- }
- }
-
- int unlinkFile() noexcept {
- FileType type = fileType;
- fileType = kFileTypeNone;
-
- if (type == kFileTypeTmp)
- return unlink(tmpName.data());
- else if (type == kFileTypeShm)
- return shm_unlink(tmpName.data());
- else
- return 0;
- }
-};
static void VirtMem_getInfo(VirtMem::Info& vmInfo) noexcept {
uint32_t pageSize = uint32_t(::getpagesize());
@@ -272,29 +245,15 @@ static void VirtMem_getInfo(VirtMem::Info& vmInfo) noexcept {
vmInfo.pageGranularity = Support::max<uint32_t>(pageSize, 65536);
}
-// Some operating systems don't allow /dev/shm to be executable. On Linux this
-// happens when /dev/shm is mounted with 'noexec', which is enforced by systemd.
-// Other operating systems like OSX also restrict executable permissions regarding
-// /dev/shm, so we use a runtime detection before trying to allocate the requested
-// memory by the user. Sometimes we don't need the detection as we know it would
-// always result in 'kShmStrategyTmpDir'.
-enum ShmStrategy : uint32_t {
- kShmStrategyUnknown = 0,
- kShmStrategyDevShm = 1,
- kShmStrategyTmpDir = 2
-};
-
-// Posix specific implementation that uses `mmap()` and `munmap()`.
-static int VirtMem_accessToPosixProtection(uint32_t flags) noexcept {
- int protection = 0;
- if (flags & VirtMem::kAccessRead ) protection |= PROT_READ;
- if (flags & VirtMem::kAccessWrite ) protection |= PROT_READ | PROT_WRITE;
- if (flags & VirtMem::kAccessExecute) protection |= PROT_READ | PROT_EXEC;
- return protection;
+#if !defined(SHM_ANON)
+static const char* VirtMem_getTmpDir() noexcept {
+ const char* tmpDir = getenv("TMPDIR");
+ return tmpDir ? tmpDir : "/tmp";
}
+#endif
// Translates libc errors specific to VirtualMemory mapping to `asmjit::Error`.
-static Error VirtMem_makeErrorFromErrno(int e) noexcept {
+static Error VirtMem_asmjitErrorFromErrno(int e) noexcept {
switch (e) {
case EACCES:
case EAGAIN:
@@ -316,11 +275,158 @@ static Error VirtMem_makeErrorFromErrno(int e) noexcept {
}
}
+// Some operating systems don't allow /dev/shm to be executable. On Linux this
+// happens when /dev/shm is mounted with 'noexec', which is enforced by systemd.
+// Other operating systems like MacOS also restrict executable permissions regarding
+// /dev/shm, so we use a runtime detection before attempting to allocate executable
+// memory. Sometimes we don't need the detection as we know it would always result
+// in `kShmStrategyTmpDir`.
+enum ShmStrategy : uint32_t {
+ kShmStrategyUnknown = 0,
+ kShmStrategyDevShm = 1,
+ kShmStrategyTmpDir = 2
+};
+
+class AnonymousMemory {
+public:
+ enum FileType : uint32_t {
+ kFileTypeNone,
+ kFileTypeShm,
+ kFileTypeTmp
+ };
+
+ int _fd;
+ FileType _fileType;
+ StringTmp<128> _tmpName;
+
+ ASMJIT_INLINE AnonymousMemory() noexcept
+ : _fd(-1),
+ _fileType(kFileTypeNone),
+ _tmpName() {}
+
+ ASMJIT_INLINE ~AnonymousMemory() noexcept {
+ unlink();
+ close();
+ }
+
+ ASMJIT_INLINE int fd() const noexcept { return _fd; }
+
+ Error open(bool preferTmpOverDevShm) noexcept {
+#if defined(__linux__) && defined(__NR_memfd_create)
+ // Linux specific 'memfd_create' - if the syscall returns `ENOSYS` it means
+ // it's not available and we will never call it again (would be pointless).
+
+ // Zero initialized, if ever changed to '1' that would mean the syscall is not
+ // available and we must use `shm_open()` and `shm_unlink()`.
+ static volatile uint32_t memfd_create_not_supported;
+
+ if (!memfd_create_not_supported) {
+ _fd = (int)syscall(__NR_memfd_create, "vmem", 0);
+ if (ASMJIT_LIKELY(_fd >= 0))
+ return kErrorOk;
+
+ int e = errno;
+ if (e == ENOSYS)
+ memfd_create_not_supported = 1;
+ else
+ return DebugUtils::errored(VirtMem_asmjitErrorFromErrno(e));
+ }
+#endif
+
+#if defined(SHM_ANON)
+ // Originally FreeBSD extension, apparently works in other BSDs too.
+ DebugUtils::unused(preferTmpOverDevShm);
+ _fd = ::shm_open(SHM_ANON, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+
+ if (ASMJIT_LIKELY(_fd >= 0))
+ return kErrorOk;
+ else
+ return DebugUtils::errored(VirtMem_asmjitErrorFromErrno(errno));
+#else
+ // POSIX API. We have to generate somehow a unique name. This is nothing
+ // cryptographic, just using a bit from the stack address to always have
+ // a different base for different threads (as threads have their own stack)
+ // and retries for avoiding collisions. We use `shm_open()` with flags that
+ // require creation of the file so we never open an existing shared memory.
+ static std::atomic<uint32_t> internalCounter;
+ const char* kShmFormat = "/shm-id-%016llX";
+
+ uint32_t kRetryCount = 100;
+ uint64_t bits = ((uintptr_t)(void*)this) & 0x55555555u;
+
+ for (uint32_t i = 0; i < kRetryCount; i++) {
+ bits -= uint64_t(OSUtils::getTickCount()) * 773703683;
+ bits = ((bits >> 14) ^ (bits << 6)) + uint64_t(++internalCounter) * 10619863;
+
+ if (!ASMJIT_VM_SHM_DETECT || preferTmpOverDevShm) {
+ _tmpName.assign(VirtMem_getTmpDir());
+ _tmpName.appendFormat(kShmFormat, (unsigned long long)bits);
+ _fd = ::open(_tmpName.data(), O_RDWR | O_CREAT | O_EXCL, 0);
+ if (ASMJIT_LIKELY(_fd >= 0)) {
+ _fileType = kFileTypeTmp;
+ return kErrorOk;
+ }
+ }
+ else {
+ _tmpName.assignFormat(kShmFormat, (unsigned long long)bits);
+ _fd = ::shm_open(_tmpName.data(), O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+ if (ASMJIT_LIKELY(_fd >= 0)) {
+ _fileType = kFileTypeShm;
+ return kErrorOk;
+ }
+ }
+
+ int e = errno;
+ if (e != EEXIST)
+ return DebugUtils::errored(VirtMem_asmjitErrorFromErrno(e));
+ }
+
+ return DebugUtils::errored(kErrorFailedToOpenAnonymousMemory);
+#endif
+ }
+
+ void unlink() noexcept {
+ FileType type = _fileType;
+ _fileType = kFileTypeNone;
+
+ if (type == kFileTypeShm)
+ ::shm_unlink(_tmpName.data());
+ else if (type == kFileTypeTmp)
+ ::unlink(_tmpName.data());
+ }
+
+ void close() noexcept {
+ if (_fd >= 0) {
+ ::close(_fd);
+ _fd = -1;
+ }
+ }
+
+ Error allocate(size_t size) noexcept {
+ // TODO: Improve this by using `posix_fallocate()` when available.
+ if (ftruncate(_fd, off_t(size)) != 0)
+ return DebugUtils::errored(VirtMem_asmjitErrorFromErrno(errno));
+
+ return kErrorOk;
+ }
+};
+
+// Returns `mmap()` protection flags from \ref VirtMem::Flags.
+static int VirtMem_mmProtFromFlags(uint32_t flags) noexcept {
+ int protection = 0;
+ if (flags & VirtMem::kAccessRead) protection |= PROT_READ;
+ if (flags & VirtMem::kAccessWrite) protection |= PROT_READ | PROT_WRITE;
+ if (flags & VirtMem::kAccessExecute) protection |= PROT_READ | PROT_EXEC;
+ return protection;
+}
+
#if defined(__APPLE__)
-// Detects whether the current process is hardened, which means that pages that
-// have WRITE and EXECUTABLE flags cannot be allocated without MAP_JIT flag.
-static ASMJIT_INLINE bool VirtMem_isHardened() noexcept {
- static volatile uint32_t globalHardenedFlag;
+static ASMJIT_INLINE bool VirtMem_hasHardenedRuntimeMacOS() noexcept {
+#if TARGET_OS_OSX && ASMJIT_ARCH_ARM >= 64
+ // MacOS on AArch64 has always hardened runtime enabled.
+ return true;
+#else
+ static std::atomic<uint32_t> globalHardenedFlag;
enum HardenedFlag : uint32_t {
kHardenedFlagUnknown = 0,
@@ -328,37 +434,40 @@ static ASMJIT_INLINE bool VirtMem_isHardened() noexcept {
kHardenedFlagEnabled = 2
};
- uint32_t flag = globalHardenedFlag;
+ uint32_t flag = globalHardenedFlag.load();
if (flag == kHardenedFlagUnknown) {
- VirtMem::Info memInfo;
- VirtMem_getInfo(memInfo);
+ size_t pageSize = ::getpagesize();
- void* ptr = mmap(nullptr, memInfo.pageSize, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ void* ptr = mmap(nullptr, pageSize, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (ptr == MAP_FAILED) {
flag = kHardenedFlagEnabled;
}
else {
flag = kHardenedFlagDisabled;
- munmap(ptr, memInfo.pageSize);
+ munmap(ptr, pageSize);
}
- globalHardenedFlag = flag;
+ globalHardenedFlag.store(flag);
}
return flag == kHardenedFlagEnabled;
+#endif
}
-// MAP_JIT flag required to run unsigned JIT code is only supported by kernel
-// version 10.14+ (Mojave) and IOS.
-static ASMJIT_INLINE bool VirtMem_hasMapJitSupport() noexcept {
-#if TARGET_OS_OSX
- static volatile int globalVersion;
+static ASMJIT_INLINE bool VirtMem_hasMapJitSupportMacOS() noexcept {
+#if TARGET_OS_OSX && ASMJIT_ARCH_ARM >= 64
+ // MacOS for 64-bit AArch architecture always uses hardened runtime. Some documentation can be found here:
+ // - https://developer.apple.com/documentation/apple_silicon/porting_just-in-time_compilers_to_apple_silicon
+ return true;
+#elif TARGET_OS_OSX
+ // MAP_JIT flag required to run unsigned JIT code is only supported by kernel version 10.14+ (Mojave) and IOS.
+ static std::atomic<uint32_t> globalVersion;
- int ver = globalVersion;
+ int ver = globalVersion.load();
if (!ver) {
- struct utsname osname;
+ struct utsname osname {};
uname(&osname);
ver = atoi(osname.release);
- globalVersion = ver;
+ globalVersion.store(ver);
}
return ver >= 18;
#else
@@ -366,103 +475,57 @@ static ASMJIT_INLINE bool VirtMem_hasMapJitSupport() noexcept {
return true;
#endif
}
+#endif // __APPLE__
-static ASMJIT_INLINE int VirtMem_appleSpecificMMapFlags(uint32_t flags) noexcept {
+// Detects whether the current process is hardened, which means that pages that
+// have WRITE and EXECUTABLE flags cannot be normally allocated. On MacOS such
+// allocation requires MAP_JIT flag.
+static ASMJIT_INLINE bool VirtMem_hasHardenedRuntime() noexcept {
+#if defined(__APPLE__)
+ return VirtMem_hasHardenedRuntimeMacOS();
+#else
+ return false;
+#endif
+}
+
+// Detects whether MAP_JIT is available.
+static ASMJIT_INLINE bool VirtMem_hasMapJitSupport() noexcept {
+#if defined(__APPLE__)
+ return VirtMem_hasMapJitSupportMacOS();
+#else
+ return false;
+#endif
+}
+
+// Returns either MAP_JIT or 0 based on `flags` and the host operating system.
+static ASMJIT_INLINE int VirtMem_mmMapJitFromFlags(uint32_t flags) noexcept {
+#if defined(__APPLE__)
// Always use MAP_JIT flag if user asked for it (could be used for testing
// on non-hardened processes) and detect whether it must be used when the
// process is actually hardened (in that case it doesn't make sense to rely
// on user `flags`).
- bool useMapJit = ((flags & VirtMem::kMMapEnableMapJit) != 0) || VirtMem_isHardened();
+ bool useMapJit = (flags & VirtMem::kMMapEnableMapJit) != 0 || VirtMem_hasHardenedRuntime();
if (useMapJit)
return VirtMem_hasMapJitSupport() ? int(MAP_JIT) : 0;
else
return 0;
-}
#else
-static ASMJIT_INLINE int VirtMem_appleSpecificMMapFlags(uint32_t flags) noexcept {
DebugUtils::unused(flags);
return 0;
-}
#endif
-
-#if !defined(SHM_ANON)
-static const char* VirtMem_getTmpDir() noexcept {
- const char* tmpDir = getenv("TMPDIR");
- return tmpDir ? tmpDir : "/tmp";
}
-#endif
-
-static Error VirtMem_openAnonymousMemory(AnonymousMemory* anonMem, bool preferTmpOverDevShm) noexcept {
-#if defined(SYS_memfd_create)
- // Linux specific 'memfd_create' - if the syscall returns `ENOSYS` it means
- // it's not available and we will never call it again (would be pointless).
-
- // Zero initialized, if ever changed to '1' that would mean the syscall is not
- // available and we must use `shm_open()` and `shm_unlink()`.
- static volatile uint32_t memfd_create_not_supported;
-
- if (!memfd_create_not_supported) {
- anonMem->fd = (int)syscall(SYS_memfd_create, "vmem", 0);
- if (ASMJIT_LIKELY(anonMem->fd >= 0))
- return kErrorOk;
-
- int e = errno;
- if (e == ENOSYS)
- memfd_create_not_supported = 1;
- else
- return DebugUtils::errored(VirtMem_makeErrorFromErrno(e));
- }
-#endif
-
-#if defined(SHM_ANON)
- // Originally FreeBSD extension, apparently works in other BSDs too.
- DebugUtils::unused(preferTmpOverDevShm);
- anonMem->fd = shm_open(SHM_ANON, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
- if (ASMJIT_LIKELY(anonMem->fd >= 0))
- return kErrorOk;
+// Returns BSD-specific `PROT_MAX()` flags.
+static ASMJIT_INLINE int VirtMem_mmMaxProtFromFlags(uint32_t flags) noexcept {
+#if defined(PROT_MAX)
+ static constexpr uint32_t kMaxProtShift = Support::constCtz(VirtMem::kMMapMaxAccessRead);
+ if (flags & (VirtMem::kMMapMaxAccessReadWrite | VirtMem::kMMapMaxAccessExecute))
+ return PROT_MAX(VirtMem_mmProtFromFlags(flags >> kMaxProtShift));
else
- return DebugUtils::errored(VirtMem_makeErrorFromErrno(errno));
+ return 0;
#else
- // POSIX API. We have to generate somehow a unique name. This is nothing
- // cryptographic, just using a bit from the stack address to always have
- // a different base for different threads (as threads have their own stack)
- // and retries for avoiding collisions. We use `shm_open()` with flags that
- // require creation of the file so we never open an existing shared memory.
- static std::atomic<uint32_t> internalCounter;
- const char* kShmFormat = "/shm-id-%016llX";
-
- uint32_t kRetryCount = 100;
- uint64_t bits = ((uintptr_t)(void*)anonMem) & 0x55555555u;
-
- for (uint32_t i = 0; i < kRetryCount; i++) {
- bits -= uint64_t(OSUtils::getTickCount()) * 773703683;
- bits = ((bits >> 14) ^ (bits << 6)) + uint64_t(++internalCounter) * 10619863;
-
- if (!ASMJIT_VM_SHM_DETECT || preferTmpOverDevShm) {
- anonMem->tmpName.assign(VirtMem_getTmpDir());
- anonMem->tmpName.appendFormat(kShmFormat, (unsigned long long)bits);
- anonMem->fd = open(anonMem->tmpName.data(), O_RDWR | O_CREAT | O_EXCL, 0);
- if (ASMJIT_LIKELY(anonMem->fd >= 0)) {
- anonMem->fileType = AnonymousMemory::kFileTypeTmp;
- return kErrorOk;
- }
- }
- else {
- anonMem->tmpName.assignFormat(kShmFormat, (unsigned long long)bits);
- anonMem->fd = shm_open(anonMem->tmpName.data(), O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
- if (ASMJIT_LIKELY(anonMem->fd >= 0)) {
- anonMem->fileType = AnonymousMemory::kFileTypeShm;
- return kErrorOk;
- }
- }
-
- int e = errno;
- if (e != EEXIST)
- return DebugUtils::errored(VirtMem_makeErrorFromErrno(e));
- }
-
- return DebugUtils::errored(kErrorFailedToOpenAnonymousMemory);
+ DebugUtils::unused(flags);
+ return 0;
#endif
}
@@ -471,18 +534,17 @@ static Error VirtMem_detectShmStrategy(uint32_t* strategyOut) noexcept {
AnonymousMemory anonMem;
VirtMem::Info vmInfo = VirtMem::info();
- ASMJIT_PROPAGATE(VirtMem_openAnonymousMemory(&anonMem, false));
- if (ftruncate(anonMem.fd, off_t(vmInfo.pageSize)) != 0)
- return DebugUtils::errored(VirtMem_makeErrorFromErrno(errno));
+ ASMJIT_PROPAGATE(anonMem.open(false));
+ ASMJIT_PROPAGATE(anonMem.allocate(vmInfo.pageSize));
- void* ptr = mmap(nullptr, vmInfo.pageSize, PROT_READ | PROT_EXEC, MAP_SHARED, anonMem.fd, 0);
+ void* ptr = mmap(nullptr, vmInfo.pageSize, PROT_READ | PROT_EXEC, MAP_SHARED, anonMem.fd(), 0);
if (ptr == MAP_FAILED) {
int e = errno;
if (e == EINVAL) {
*strategyOut = kShmStrategyTmpDir;
return kErrorOk;
}
- return DebugUtils::errored(VirtMem_makeErrorFromErrno(e));
+ return DebugUtils::errored(VirtMem_asmjitErrorFromErrno(e));
}
else {
munmap(ptr, vmInfo.pageSize);
@@ -492,38 +554,47 @@ static Error VirtMem_detectShmStrategy(uint32_t* strategyOut) noexcept {
}
#endif
-#if ASMJIT_VM_SHM_DETECT
static Error VirtMem_getShmStrategy(uint32_t* strategyOut) noexcept {
+#if ASMJIT_VM_SHM_DETECT
// Initially don't assume anything. It has to be tested whether
// '/dev/shm' was mounted with 'noexec' flag or not.
- static volatile uint32_t globalShmStrategy = kShmStrategyUnknown;
+ static std::atomic<uint32_t> globalShmStrategy;
- uint32_t strategy = globalShmStrategy;
+ uint32_t strategy = globalShmStrategy.load();
if (strategy == kShmStrategyUnknown) {
ASMJIT_PROPAGATE(VirtMem_detectShmStrategy(&strategy));
- globalShmStrategy = strategy;
+ globalShmStrategy.store(strategy);
}
*strategyOut = strategy;
return kErrorOk;
-}
#else
-static Error VirtMem_getShmStrategy(uint32_t* strategyOut) noexcept {
*strategyOut = kShmStrategyTmpDir;
return kErrorOk;
-}
#endif
+}
-Error VirtMem::alloc(void** p, size_t size, uint32_t flags) noexcept {
- *p = nullptr;
+static uint32_t VirtMem_hardenedRuntimeFlags() noexcept {
+ uint32_t flags = 0;
+
+ if (VirtMem_hasHardenedRuntime())
+ flags |= VirtMem::kHardenedRuntimeEnabled;
+
+ if (VirtMem_hasMapJitSupport())
+ flags |= VirtMem::kHardenedRuntimeMapJit;
+
+ return flags;
+}
+Error VirtMem::alloc(void** p, size_t size, uint32_t memoryFlags) noexcept {
+ *p = nullptr;
if (size == 0)
return DebugUtils::errored(kErrorInvalidArgument);
- int protection = VirtMem_accessToPosixProtection(flags);
- int mmFlags = MAP_PRIVATE | MAP_ANONYMOUS | VirtMem_appleSpecificMMapFlags(flags);
- void* ptr = mmap(nullptr, size, protection, mmFlags, -1, 0);
+ int protection = VirtMem_mmProtFromFlags(memoryFlags) | VirtMem_mmMaxProtFromFlags(memoryFlags);
+ int mmFlags = MAP_PRIVATE | MAP_ANONYMOUS | VirtMem_mmMapJitFromFlags(memoryFlags);
+ void* ptr = mmap(nullptr, size, protection, mmFlags, -1, 0);
if (ptr == MAP_FAILED)
return DebugUtils::errored(kErrorOutOfMemory);
@@ -539,22 +610,26 @@ Error VirtMem::release(void* p, size_t size) noexcept {
}
-Error VirtMem::protect(void* p, size_t size, uint32_t flags) noexcept {
- int protection = VirtMem_accessToPosixProtection(flags);
+Error VirtMem::protect(void* p, size_t size, uint32_t memoryFlags) noexcept {
+ int protection = VirtMem_mmProtFromFlags(memoryFlags);
if (mprotect(p, size, protection) == 0)
return kErrorOk;
return DebugUtils::errored(kErrorInvalidArgument);
}
-Error VirtMem::allocDualMapping(DualMapping* dm, size_t size, uint32_t flags) noexcept {
- dm->ro = nullptr;
+// ============================================================================
+// [asmjit::VirtMem - Dual Mapping [Posix]]
+// ============================================================================
+
+Error VirtMem::allocDualMapping(DualMapping* dm, size_t size, uint32_t memoryFlags) noexcept {
+ dm->rx = nullptr;
dm->rw = nullptr;
if (off_t(size) <= 0)
return DebugUtils::errored(size == 0 ? kErrorInvalidArgument : kErrorTooLarge);
- bool preferTmpOverDevShm = (flags & kMappingPreferTmp) != 0;
+ bool preferTmpOverDevShm = (memoryFlags & kMappingPreferTmp) != 0;
if (!preferTmpOverDevShm) {
uint32_t strategy;
ASMJIT_PROPAGATE(VirtMem_getShmStrategy(&strategy));
@@ -562,48 +637,73 @@ Error VirtMem::allocDualMapping(DualMapping* dm, size_t size, uint32_t flags) no
}
AnonymousMemory anonMem;
- ASMJIT_PROPAGATE(VirtMem_openAnonymousMemory(&anonMem, preferTmpOverDevShm));
- if (ftruncate(anonMem.fd, off_t(size)) != 0)
- return DebugUtils::errored(VirtMem_makeErrorFromErrno(errno));
+ ASMJIT_PROPAGATE(anonMem.open(preferTmpOverDevShm));
+ ASMJIT_PROPAGATE(anonMem.allocate(size));
void* ptr[2];
for (uint32_t i = 0; i < 2; i++) {
- ptr[i] = mmap(nullptr, size, VirtMem_accessToPosixProtection(flags & ~VirtMem_dualMappingFilter[i]), MAP_SHARED, anonMem.fd, 0);
+ uint32_t accessFlags = memoryFlags & ~VirtMem_dualMappingFilter[i];
+ int protection = VirtMem_mmProtFromFlags(accessFlags) | VirtMem_mmMaxProtFromFlags(accessFlags);
+
+ ptr[i] = mmap(nullptr, size, protection, MAP_SHARED, anonMem.fd(), 0);
if (ptr[i] == MAP_FAILED) {
- // Get the error now before `munmap` has a chance to clobber it.
+ // Get the error now before `munmap()` has a chance to clobber it.
int e = errno;
if (i == 1)
munmap(ptr[0], size);
- return DebugUtils::errored(VirtMem_makeErrorFromErrno(e));
+ return DebugUtils::errored(VirtMem_asmjitErrorFromErrno(e));
}
}
- dm->ro = ptr[0];
+ dm->rx = ptr[0];
dm->rw = ptr[1];
return kErrorOk;
}
Error VirtMem::releaseDualMapping(DualMapping* dm, size_t size) noexcept {
- Error err = release(dm->ro, size);
- if (dm->ro != dm->rw)
+ Error err = release(dm->rx, size);
+ if (dm->rx != dm->rw)
err |= release(dm->rw, size);
if (err)
return DebugUtils::errored(kErrorInvalidArgument);
- dm->ro = nullptr;
+ dm->rx = nullptr;
dm->rw = nullptr;
return kErrorOk;
}
#endif
// ============================================================================
-// [asmjit::VirtMem - Virtual Memory [Memory Info]]
+// [asmjit::VirtMem - Instruction Cache]
+// ============================================================================
+
+void VirtMem::flushInstructionCache(void* p, size_t size) noexcept {
+#if ASMJIT_ARCH_X86
+ // X86 architecture doesn't require to do anything to flush instruction cache.
+ DebugUtils::unused(p, size);
+#elif defined(__APPLE__)
+ sys_icache_invalidate(p, size);
+#elif defined(_WIN32)
+ // Windows has a built-in support in `kernel32.dll`.
+ FlushInstructionCache(GetCurrentProcess(), p, size);
+#elif defined(__GNUC__)
+ char* start = static_cast<char*>(p);
+ char* end = start + size;
+ __builtin___clear_cache(start, end);
+#else
+ #pragma message("asmjit::VirtMem::flushInstructionCache() doesn't have implementation for the target OS and compiler")
+ DebugUtils::unused(p, size);
+#endif
+}
+
+// ============================================================================
+// [asmjit::VirtMem - Page Info]
// ============================================================================
VirtMem::Info VirtMem::info() noexcept {
- static VirtMem::Info vmInfo;
static std::atomic<uint32_t> vmInfoInitialized;
+ static VirtMem::Info vmInfo;
if (!vmInfoInitialized.load()) {
VirtMem::Info localMemInfo;
@@ -616,6 +716,26 @@ VirtMem::Info VirtMem::info() noexcept {
return vmInfo;
}
+// ============================================================================
+// [asmjit::VirtMem - Hardened Runtime Info]
+// ============================================================================
+
+VirtMem::HardenedRuntimeInfo VirtMem::hardenedRuntimeInfo() noexcept {
+ return VirtMem::HardenedRuntimeInfo { VirtMem_hardenedRuntimeFlags() };
+}
+
+// ============================================================================
+// [asmjit::VirtMem - JIT Memory Protection]
+// ============================================================================
+
+void VirtMem::protectJitMemory(VirtMem::ProtectJitAccess access) noexcept {
+#if defined(ASMJIT_HAS_PTHREAD_JIT_WRITE_PROTECT_NP)
+ pthread_jit_write_protect_np(static_cast<uint32_t>(access));
+#else
+ DebugUtils::unused(access);
+#endif
+}
+
ASMJIT_END_NAMESPACE
#endif
diff --git a/erts/emulator/asmjit/core/virtmem.h b/erts/emulator/asmjit/core/virtmem.h
index 8d3ee01ee5..b116d166ce 100644
--- a/erts/emulator/asmjit/core/virtmem.h
+++ b/erts/emulator/asmjit/core/virtmem.h
@@ -34,34 +34,56 @@ ASMJIT_BEGIN_NAMESPACE
//! \addtogroup asmjit_virtual_memory
//! \{
-// ============================================================================
-// [asmjit::VirtMem]
-// ============================================================================
-
//! Virtual memory management.
namespace VirtMem {
+// ============================================================================
+// [asmjit::VirtMem - Virtual Memory Management]
+// ============================================================================
+
//! Virtual memory and memory mapping flags.
-enum Flags : uint32_t {
+enum MemoryFlags : uint32_t {
//! No access flags.
kAccessNone = 0x00000000u,
//! Memory is readable.
kAccessRead = 0x00000001u,
- //! Memory is writable (implies read access).
+ //! Memory is writable.
kAccessWrite = 0x00000002u,
- //! Memory is executable (implies read access).
+ //! Memory is executable.
kAccessExecute = 0x00000004u,
- //! A combination of `kAccessRead | kAccessWrite`
- kAccessReadWrite = 0x00000003u,
+ //! A combination of \ref kAccessRead and \ref kAccessWrite.
+ kAccessReadWrite = kAccessRead | kAccessWrite,
+ //! A combination of \ref kAccessRead, \ref kAccessWrite.
+ kAccessRW = kAccessRead | kAccessWrite,
+ //! A combination of \ref kAccessRead and \ref kAccessExecute.
+ kAccessRX = kAccessRead | kAccessExecute,
+ //! A combination of \ref kAccessRead, \ref kAccessWrite, and \ref kAccessExecute.
+ kAccessRWX = kAccessRead | kAccessWrite | kAccessExecute,
- //! Use a `MAP_JIT` flag available on Apple platforms (OSX Mojave+), which
- //! allows JIT code to be executed in OSX bundles. This flag is not turned
+ //! Use a `MAP_JIT` flag available on Apple platforms (introduced by Mojave),
+ //! which allows JIT code to be executed in MAC bundles. This flag is not turned
//! on by default, because when a process uses `fork()` the child process
//! has no access to the pages mapped with `MAP_JIT`, which could break code
//! that doesn't expect this behavior.
kMMapEnableMapJit = 0x00000010u,
+ //! Pass `PROT_MAX(PROT_READ)` to mmap() on platforms that support `PROT_MAX`.
+ kMMapMaxAccessRead = 0x00000020u,
+ //! Pass `PROT_MAX(PROT_WRITE)` to mmap() on platforms that support `PROT_MAX`.
+ kMMapMaxAccessWrite = 0x00000040u,
+ //! Pass `PROT_MAX(PROT_EXEC)` to mmap() on platforms that support `PROT_MAX`.
+ kMMapMaxAccessExecute = 0x00000080u,
+
+ //! A combination of \ref kMMapMaxAccessRead and \ref kMMapMaxAccessWrite.
+ kMMapMaxAccessReadWrite = kMMapMaxAccessRead | kMMapMaxAccessWrite,
+ //! A combination of \ref kMMapMaxAccessRead and \ref kMMapMaxAccessWrite.
+ kMMapMaxAccessRW = kMMapMaxAccessRead | kMMapMaxAccessWrite,
+ //! A combination of \ref kMMapMaxAccessRead and \ref kMMapMaxAccessExecute.
+ kMMapMaxAccessRX = kMMapMaxAccessRead | kMMapMaxAccessExecute,
+ //! A combination of \ref kMMapMaxAccessRead, \ref kMMapMaxAccessWrite, \ref kMMapMaxAccessExecute.
+ kMMapMaxAccessRWX = kMMapMaxAccessRead | kMMapMaxAccessWrite | kMMapMaxAccessExecute,
+
//! Not an access flag, only used by `allocDualMapping()` to override the
//! default allocation strategy to always use a 'tmp' directory instead of
//! "/dev/shm" (on POSIX platforms). Please note that this flag will be
@@ -72,47 +94,42 @@ enum Flags : uint32_t {
kMappingPreferTmp = 0x80000000u
};
-//! Virtual memory information.
-struct Info {
- //! Virtual memory page size.
- uint32_t pageSize;
- //! Virtual memory page granularity.
- uint32_t pageGranularity;
-};
-
-//! Dual memory mapping used to map an anonymous memory into two memory regions
-//! where one region is read-only, but executable, and the second region is
-//! read+write, but not executable. Please see \ref VirtMem::allocDualMapping()
-//! for more details.
-struct DualMapping {
- //! Pointer to data with 'Read' or 'Read+Execute' access.
- void* ro;
- //! Pointer to data with 'Read-Write' access, but never 'Write+Execute'.
- void* rw;
-};
-
-//! Returns virtual memory information, see `VirtMem::Info` for more details.
-ASMJIT_API Info info() noexcept;
-
-//! Allocates virtual memory by either using `VirtualAlloc()` (Windows)
-//! or `mmap()` (POSIX).
+//! Allocates virtual memory by either using `mmap()` (POSIX) or `VirtualAlloc()` (Windows).
//!
-//! \note `size` should be aligned to a page size, use \ref VirtMem::info()
+//! \note `size` should be aligned to page size, use \ref VirtMem::info()
//! to obtain it. Invalid size will not be corrected by the implementation
//! and the allocation would not succeed in such case.
-ASMJIT_API Error alloc(void** p, size_t size, uint32_t flags) noexcept;
+ASMJIT_API Error alloc(void** p, size_t size, uint32_t memoryFlags) noexcept;
-//! Releases virtual memory previously allocated by \ref VirtMem::alloc() or
-//! \ref VirtMem::allocDualMapping().
+//! Releases virtual memory previously allocated by \ref VirtMem::alloc().
//!
//! \note The size must be the same as used by \ref VirtMem::alloc(). If the
//! size is not the same value the call will fail on any POSIX system, but
-//! pass on Windows, because of the difference of the implementation.
+//! pass on Windows, because it's implemented differently.
ASMJIT_API Error release(void* p, size_t size) noexcept;
-//! A cross-platform wrapper around `mprotect()` (POSIX) and `VirtualProtect`
-//! (Windows).
-ASMJIT_API Error protect(void* p, size_t size, uint32_t flags) noexcept;
+//! A cross-platform wrapper around `mprotect()` (POSIX) and `VirtualProtect` (Windows).
+ASMJIT_API Error protect(void* p, size_t size, uint32_t memoryFlags) noexcept;
+
+// ============================================================================
+// [asmjit::VirtMem - Dual Mapping]
+// ============================================================================
+
+//! Dual memory mapping used to map an anonymous memory into two memory regions
+//! where one region is read-only, but executable, and the second region is
+//! read+write, but not executable. Please see \ref VirtMem::allocDualMapping()
+//! for more details.
+struct DualMapping {
+ union {
+ //! Pointer to data having 'Read+Execute' access.
+ void* rx;
+ //! \cond
+ void* ro;
+ //! \endcond
+ };
+ //! Pointer to data having 'Read-Write' access.
+ void* rw;
+};
//! Allocates virtual memory and creates two views of it where the first view
//! has no write access. This is an addition to the API that should be used
@@ -127,14 +144,131 @@ ASMJIT_API Error protect(void* p, size_t size, uint32_t flags) noexcept;
//! Windows.
//!
//! \remarks Both pointers in `dm` would be set to `nullptr` if the function fails.
-ASMJIT_API Error allocDualMapping(DualMapping* dm, size_t size, uint32_t flags) noexcept;
+ASMJIT_API Error allocDualMapping(DualMapping* dm, size_t size, uint32_t memoryFlags) noexcept;
-//! Releases the virtual memory mapping previously allocated by
-//! \ref VirtMem::allocDualMapping().
+//! Releases virtual memory mapping previously allocated by \ref VirtMem::allocDualMapping().
//!
//! \remarks Both pointers in `dm` would be set to `nullptr` if the function succeeds.
ASMJIT_API Error releaseDualMapping(DualMapping* dm, size_t size) noexcept;
+// ============================================================================
+// [asmjit::VirtMem - Instruction Cache]
+// ============================================================================
+
+//! Flushes instruction cache in the given region.
+//!
+//! Only useful on non-x86 architectures, however, it's a good practice to call
+//! it on any platform to make your code more portable.
+ASMJIT_API void flushInstructionCache(void* p, size_t size) noexcept;
+
+// ============================================================================
+// [asmjit::VirtMem - Page Info]
+// ============================================================================
+
+//! Virtual memory information.
+struct Info {
+ //! Virtual memory page size.
+ uint32_t pageSize;
+ //! Virtual memory page granularity.
+ uint32_t pageGranularity;
+};
+
+//! Returns virtual memory information, see `VirtMem::Info` for more details.
+ASMJIT_API Info info() noexcept;
+
+// ============================================================================
+// [asmjit::VirtMem - Hardened Runtime Info]
+// ============================================================================
+
+//! Hardened runtime flags.
+enum HardenedRuntimeFlags : uint32_t {
+ //! Hardened runtime is enabled - it's not possible to have "Write & Execute"
+ //! memory protection. The runtime enforces W^X (either write or execute).
+ //!
+ //! \note If the runtime is hardened it means that an operating system specific
+ //! protection is used. For example on MacOS platform it's possible to allocate
+ //! memory with MAP_JIT flag and then use `pthread_jit_write_protect_np()` to
+ //! temporarily swap access permissions for the current thread. Dual mapping is
+ //! also a possibility on X86/X64 architecture.
+ kHardenedRuntimeEnabled = 0x00000001u,
+
+ //! Read+Write+Execute can only be allocated with MAP_JIT flag (Apple specific).
+ kHardenedRuntimeMapJit = 0x00000002u
+};
+
+//! Hardened runtime information.
+struct HardenedRuntimeInfo {
+ //! Hardened runtime flags, see \ref HardenedRuntimeFlags.
+ uint32_t flags;
+};
+
+//! Returns runtime features provided by the OS.
+ASMJIT_API HardenedRuntimeInfo hardenedRuntimeInfo() noexcept;
+
+// ============================================================================
+// [asmjit::VirtMem - JIT Memory Protection]
+// ============================================================================
+
+//! Values that can be used with `protectJitMemory()` function.
+enum ProtectJitAccess : uint32_t {
+ //! Protect JIT memory with Read+Write permissions.
+ kProtectJitReadWrite = 0,
+ //! Protect JIT memory with Read+Execute permissions.
+ kProtectJitReadExecute = 1
+};
+
+//! Protects access of memory mapped with MAP_JIT flag for the current thread.
+//!
+//! \note This feature is only available on Apple hardware (AArch64) at the
+//! moment and and uses a non-portable `pthread_jit_write_protect_np()` call
+//! when available.
+//!
+//! This function must be called before and after a memory mapped with MAP_JIT
+//! flag is modified. Example:
+//!
+//! ```
+//! void* codePtr = ...;
+//! size_t codeSize = ...;
+//!
+//! VirtMem::protectJitMemory(VirtMem::kProtectJitReadWrite);
+//! memcpy(codePtr, source, codeSize);
+//! VirtMem::protectJitMemory(VirtMem::kProtectJitReadExecute);
+//! VirtMem::flushInstructionCache(codePtr, codeSize);
+//! ```
+//!
+//! See \ref ProtectJitReadWriteScope, which makes it simpler than the code above.
+ASMJIT_API void protectJitMemory(ProtectJitAccess access) noexcept;
+
+// ============================================================================
+// [asmjit::VirtMem - ProtectJitReadWriteScope]
+// ============================================================================
+
+//! JIT protection scope that prepares the given memory block to be written to
+//! in the current thread.
+//!
+//! It calls `VirtMem::protectJitMemory(kProtectJitReadWrite)` upon construction
+//! and `VirtMem::protectJitMemory(kProtectJitReadExecute) combined with
+//! `flushInstructionCache()` upon destruction. The purpose of this class is to
+//! make writing to JIT memory easier.
+class ProtectJitReadWriteScope {
+public:
+ void* _rxPtr;
+ size_t _size;
+
+ //! Makes the given memory block RW protected.
+ inline ProtectJitReadWriteScope(void* rxPtr, size_t size) noexcept
+ : _rxPtr(rxPtr),
+ _size(size) {
+ protectJitMemory(kProtectJitReadWrite);
+ }
+
+ //! Makes the memory block RX protected again and flushes instruction cache.
+ inline ~ProtectJitReadWriteScope() noexcept {
+ protectJitMemory(kProtectJitReadExecute);
+ flushInstructionCache(_rxPtr, _size);
+ }
+};
+
} // VirtMem
//! \}
diff --git a/erts/emulator/asmjit/x86/x86assembler.cpp b/erts/emulator/asmjit/x86/x86assembler.cpp
index 99b01b04f4..a568dab1bf 100644
--- a/erts/emulator/asmjit/x86/x86assembler.cpp
+++ b/erts/emulator/asmjit/x86/x86assembler.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../core/assembler.h"
#include "../core/codewriter_p.h"
@@ -5144,4 +5144,4 @@ Error Assembler::onDetach(CodeHolder* code) noexcept {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86
+#endif // !ASMJIT_NO_X86
diff --git a/erts/emulator/asmjit/x86/x86builder.cpp b/erts/emulator/asmjit/x86/x86builder.cpp
index 2227fa2c3a..b6b4ea35e2 100644
--- a/erts/emulator/asmjit/x86/x86builder.cpp
+++ b/erts/emulator/asmjit/x86/x86builder.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#if defined(ASMJIT_BUILD_X86) && !defined(ASMJIT_NO_BUILDER)
+#if !defined(ASMJIT_NO_X86) && !defined(ASMJIT_NO_BUILDER)
#include "../x86/x86assembler.h"
#include "../x86/x86builder.h"
@@ -65,4 +65,4 @@ Error Builder::onAttach(CodeHolder* code) noexcept {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86 && !ASMJIT_NO_BUILDER
+#endif // !ASMJIT_NO_X86 && !ASMJIT_NO_BUILDER
diff --git a/erts/emulator/asmjit/x86/x86compiler.cpp b/erts/emulator/asmjit/x86/x86compiler.cpp
index 566437fc66..92ed645f80 100644
--- a/erts/emulator/asmjit/x86/x86compiler.cpp
+++ b/erts/emulator/asmjit/x86/x86compiler.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#if defined(ASMJIT_BUILD_X86) && !defined(ASMJIT_NO_COMPILER)
+#if !defined(ASMJIT_NO_X86) && !defined(ASMJIT_NO_COMPILER)
#include "../x86/x86assembler.h"
#include "../x86/x86compiler.h"
@@ -74,4 +74,4 @@ Error Compiler::onAttach(CodeHolder* code) noexcept {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86 && !ASMJIT_NO_COMPILER
+#endif // !ASMJIT_NO_X86 && !ASMJIT_NO_COMPILER
diff --git a/erts/emulator/asmjit/x86/x86compiler.h b/erts/emulator/asmjit/x86/x86compiler.h
index 4c64b3b6e4..1dad575912 100644
--- a/erts/emulator/asmjit/x86/x86compiler.h
+++ b/erts/emulator/asmjit/x86/x86compiler.h
@@ -170,6 +170,65 @@ ASMJIT_BEGIN_SUB_NAMESPACE(x86)
//! }
//! ```
//!
+//! ### AVX and AVX-512
+//!
+//! AVX and AVX-512 code generation must be explicitly enabled via \ref FuncFrame
+//! to work properly. If it's not setup correctly then Prolog & Epilog would use
+//! SSE instead of AVX instructions to work with SIMD registers. In addition, Compiler
+//! requires explicitly enable AVX-512 via \ref FuncFrame in order to use all 32 SIMD
+//! registers.
+//!
+//! ```
+//! #include <asmjit/x86.h>
+//! #include <stdio.h>
+//!
+//! using namespace asmjit;
+//!
+//! // Signature of the generated function.
+//! typedef void (*Func)(void*);
+//!
+//! int main() {
+//! JitRuntime rt; // Runtime specialized for JIT code execution.
+//! CodeHolder code; // Holds code and relocation information.
+//!
+//! code.init(rt.environment()); // Initialize code to match the JIT environment.
+//! x86::Compiler cc(&code); // Create and attach x86::Compiler to code.
+//!
+//! cc.addFunc(FuncSignatureT<void, void*>());
+//!
+//! // Use the following to enable AVX and/or AVX-512.
+//! cc.func()->frame().setAvxEnabled();
+//! cc.func()->frame().setAvx512Enabled();
+//!
+//! // Do something with the input pointer.
+//! x86::Gp addr = cc.newIntPtr("addr");
+//! x86::Zmm vreg = cc.newZmm("vreg");
+//!
+//! cc.setArg(0, addr);
+//!
+//! cc.vmovdqu32(vreg, x86::ptr(addr));
+//! cc.vpaddq(vreg, vreg, vreg);
+//! cc.vmovdqu32(x86::ptr(addr), vreg);
+//!
+//! cc.endFunc(); // End of the function body.
+//! cc.finalize(); // Translate and assemble the whole 'cc' content.
+//! // ----> x86::Compiler is no longer needed from here and can be destroyed <----
+//!
+//! Func fn;
+//! Error err = rt.add(&fn, &code); // Add the generated code to the runtime.
+//! if (err) return 1; // Handle a possible error returned by AsmJit.
+//! // ----> CodeHolder is no longer needed from here and can be destroyed <----
+//!
+//! // Execute the generated code and print some output.
+//! uint64_t data[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
+//! fn(data);
+//! printf("%llu\n", (unsigned long long)data[0]);
+//!
+//! rt.release(fn); // Explicitly remove the function from the runtime.
+//! return 0;
+//! }
+//! ```
+//!
//! ### Recursive Functions
//!
//! It's possible to create more functions by using the same \ref x86::Compiler
diff --git a/erts/emulator/asmjit/x86/x86emithelper.cpp b/erts/emulator/asmjit/x86/x86emithelper.cpp
index 1b21402ca4..e6290ea846 100644
--- a/erts/emulator/asmjit/x86/x86emithelper.cpp
+++ b/erts/emulator/asmjit/x86/x86emithelper.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../core/formatter.h"
#include "../core/funcargscontext_p.h"
@@ -148,12 +148,10 @@ ASMJIT_FAVOR_SIZE Error EmitHelper::emitRegMove(
instId = _avxEnabled ? Inst::kIdVmovaps : Inst::kIdMovaps;
else if (elementTypeId == Type::kIdF64)
instId = _avxEnabled ? Inst::kIdVmovapd : Inst::kIdMovapd;
- else if (typeId <= Type::_kIdVec256End)
+ else if (!_avx512Enabled)
instId = _avxEnabled ? Inst::kIdVmovdqa : Inst::kIdMovdqa;
- else if (elementTypeId <= Type::kIdU32)
- instId = Inst::kIdVmovdqa32;
else
- instId = Inst::kIdVmovdqa64;
+ instId = Inst::kIdVmovdqa32;
break;
}
}
@@ -600,4 +598,4 @@ ASMJIT_FAVOR_SIZE Error EmitHelper::emitEpilog(const FuncFrame& frame) {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86
+#endif // !ASMJIT_NO_X86
diff --git a/erts/emulator/asmjit/x86/x86emithelper_p.h b/erts/emulator/asmjit/x86/x86emithelper_p.h
index 0fb8abc981..dd3b0c9c6d 100644
--- a/erts/emulator/asmjit/x86/x86emithelper_p.h
+++ b/erts/emulator/asmjit/x86/x86emithelper_p.h
@@ -49,10 +49,12 @@ static ASMJIT_INLINE uint32_t vecTypeIdToRegType(uint32_t typeId) noexcept {
class EmitHelper : public BaseEmitHelper {
public:
bool _avxEnabled;
+ bool _avx512Enabled;
- inline explicit EmitHelper(BaseEmitter* emitter = nullptr, bool avxEnabled = false) noexcept
+ inline explicit EmitHelper(BaseEmitter* emitter = nullptr, bool avxEnabled = false, bool avx512Enabled = false) noexcept
: BaseEmitHelper(emitter),
- _avxEnabled(avxEnabled) {}
+ _avxEnabled(avxEnabled || avx512Enabled),
+ _avx512Enabled(avx512Enabled) {}
Error emitRegMove(
const Operand_& dst_,
diff --git a/erts/emulator/asmjit/x86/x86emitter.h b/erts/emulator/asmjit/x86/x86emitter.h
index 24f2fb6241..9d3e5d22b5 100644
--- a/erts/emulator/asmjit/x86/x86emitter.h
+++ b/erts/emulator/asmjit/x86/x86emitter.h
@@ -32,91 +32,91 @@
ASMJIT_BEGIN_SUB_NAMESPACE(x86)
#define ASMJIT_INST_0x(NAME, ID) \
- inline Error NAME() { return _emitter()->_emitI(Inst::kId##ID); }
+ ASMJIT_INLINE Error NAME() { return _emitter()->_emitI(Inst::kId##ID); }
#define ASMJIT_INST_1x(NAME, ID, T0) \
- inline Error NAME(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID, o0); }
+ ASMJIT_INLINE Error NAME(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID, o0); }
#define ASMJIT_INST_1c(NAME, ID, CONV, T0) \
- inline Error NAME(uint32_t cc, const T0& o0) { return _emitter()->_emitI(CONV(cc), o0); } \
- inline Error NAME##a(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##a, o0); } \
- inline Error NAME##ae(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ae, o0); } \
- inline Error NAME##b(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##b, o0); } \
- inline Error NAME##be(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##be, o0); } \
- inline Error NAME##c(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##c, o0); } \
- inline Error NAME##e(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##e, o0); } \
- inline Error NAME##g(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##g, o0); } \
- inline Error NAME##ge(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ge, o0); } \
- inline Error NAME##l(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##l, o0); } \
- inline Error NAME##le(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##le, o0); } \
- inline Error NAME##na(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##na, o0); } \
- inline Error NAME##nae(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nae, o0); } \
- inline Error NAME##nb(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nb, o0); } \
- inline Error NAME##nbe(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nbe, o0); } \
- inline Error NAME##nc(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nc, o0); } \
- inline Error NAME##ne(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ne, o0); } \
- inline Error NAME##ng(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ng, o0); } \
- inline Error NAME##nge(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nge, o0); } \
- inline Error NAME##nl(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nl, o0); } \
- inline Error NAME##nle(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nle, o0); } \
- inline Error NAME##no(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##no, o0); } \
- inline Error NAME##np(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##np, o0); } \
- inline Error NAME##ns(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ns, o0); } \
- inline Error NAME##nz(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nz, o0); } \
- inline Error NAME##o(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##o, o0); } \
- inline Error NAME##p(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##p, o0); } \
- inline Error NAME##pe(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##pe, o0); } \
- inline Error NAME##po(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##po, o0); } \
- inline Error NAME##s(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##s, o0); } \
- inline Error NAME##z(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##z, o0); }
+ ASMJIT_INLINE Error NAME(uint32_t cc, const T0& o0) { return _emitter()->_emitI(CONV(cc), o0); } \
+ ASMJIT_INLINE Error NAME##a(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##a, o0); } \
+ ASMJIT_INLINE Error NAME##ae(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ae, o0); } \
+ ASMJIT_INLINE Error NAME##b(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##b, o0); } \
+ ASMJIT_INLINE Error NAME##be(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##be, o0); } \
+ ASMJIT_INLINE Error NAME##c(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##c, o0); } \
+ ASMJIT_INLINE Error NAME##e(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##e, o0); } \
+ ASMJIT_INLINE Error NAME##g(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##g, o0); } \
+ ASMJIT_INLINE Error NAME##ge(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ge, o0); } \
+ ASMJIT_INLINE Error NAME##l(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##l, o0); } \
+ ASMJIT_INLINE Error NAME##le(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##le, o0); } \
+ ASMJIT_INLINE Error NAME##na(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##na, o0); } \
+ ASMJIT_INLINE Error NAME##nae(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nae, o0); } \
+ ASMJIT_INLINE Error NAME##nb(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nb, o0); } \
+ ASMJIT_INLINE Error NAME##nbe(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nbe, o0); } \
+ ASMJIT_INLINE Error NAME##nc(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nc, o0); } \
+ ASMJIT_INLINE Error NAME##ne(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ne, o0); } \
+ ASMJIT_INLINE Error NAME##ng(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ng, o0); } \
+ ASMJIT_INLINE Error NAME##nge(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nge, o0); } \
+ ASMJIT_INLINE Error NAME##nl(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nl, o0); } \
+ ASMJIT_INLINE Error NAME##nle(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nle, o0); } \
+ ASMJIT_INLINE Error NAME##no(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##no, o0); } \
+ ASMJIT_INLINE Error NAME##np(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##np, o0); } \
+ ASMJIT_INLINE Error NAME##ns(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##ns, o0); } \
+ ASMJIT_INLINE Error NAME##nz(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##nz, o0); } \
+ ASMJIT_INLINE Error NAME##o(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##o, o0); } \
+ ASMJIT_INLINE Error NAME##p(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##p, o0); } \
+ ASMJIT_INLINE Error NAME##pe(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##pe, o0); } \
+ ASMJIT_INLINE Error NAME##po(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##po, o0); } \
+ ASMJIT_INLINE Error NAME##s(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##s, o0); } \
+ ASMJIT_INLINE Error NAME##z(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID##z, o0); }
#define ASMJIT_INST_2x(NAME, ID, T0, T1) \
- inline Error NAME(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID, o0, o1); }
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID, o0, o1); }
#define ASMJIT_INST_2c(NAME, ID, CONV, T0, T1) \
- inline Error NAME(uint32_t cc, const T0& o0, const T1& o1) { return _emitter()->_emitI(CONV(cc), o0, o1); } \
- inline Error NAME##a(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##a, o0, o1); } \
- inline Error NAME##ae(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ae, o0, o1); } \
- inline Error NAME##b(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##b, o0, o1); } \
- inline Error NAME##be(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##be, o0, o1); } \
- inline Error NAME##c(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##c, o0, o1); } \
- inline Error NAME##e(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##e, o0, o1); } \
- inline Error NAME##g(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##g, o0, o1); } \
- inline Error NAME##ge(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ge, o0, o1); } \
- inline Error NAME##l(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##l, o0, o1); } \
- inline Error NAME##le(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##le, o0, o1); } \
- inline Error NAME##na(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##na, o0, o1); } \
- inline Error NAME##nae(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nae, o0, o1); } \
- inline Error NAME##nb(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nb, o0, o1); } \
- inline Error NAME##nbe(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nbe, o0, o1); } \
- inline Error NAME##nc(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nc, o0, o1); } \
- inline Error NAME##ne(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ne, o0, o1); } \
- inline Error NAME##ng(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ng, o0, o1); } \
- inline Error NAME##nge(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nge, o0, o1); } \
- inline Error NAME##nl(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nl, o0, o1); } \
- inline Error NAME##nle(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nle, o0, o1); } \
- inline Error NAME##no(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##no, o0, o1); } \
- inline Error NAME##np(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##np, o0, o1); } \
- inline Error NAME##ns(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ns, o0, o1); } \
- inline Error NAME##nz(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nz, o0, o1); } \
- inline Error NAME##o(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##o, o0, o1); } \
- inline Error NAME##p(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##p, o0, o1); } \
- inline Error NAME##pe(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##pe, o0, o1); } \
- inline Error NAME##po(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##po, o0, o1); } \
- inline Error NAME##s(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##s, o0, o1); } \
- inline Error NAME##z(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##z, o0, o1); }
+ ASMJIT_INLINE Error NAME(uint32_t cc, const T0& o0, const T1& o1) { return _emitter()->_emitI(CONV(cc), o0, o1); } \
+ ASMJIT_INLINE Error NAME##a(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##a, o0, o1); } \
+ ASMJIT_INLINE Error NAME##ae(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ae, o0, o1); } \
+ ASMJIT_INLINE Error NAME##b(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##b, o0, o1); } \
+ ASMJIT_INLINE Error NAME##be(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##be, o0, o1); } \
+ ASMJIT_INLINE Error NAME##c(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##c, o0, o1); } \
+ ASMJIT_INLINE Error NAME##e(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##e, o0, o1); } \
+ ASMJIT_INLINE Error NAME##g(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##g, o0, o1); } \
+ ASMJIT_INLINE Error NAME##ge(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ge, o0, o1); } \
+ ASMJIT_INLINE Error NAME##l(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##l, o0, o1); } \
+ ASMJIT_INLINE Error NAME##le(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##le, o0, o1); } \
+ ASMJIT_INLINE Error NAME##na(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##na, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nae(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nae, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nb(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nb, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nbe(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nbe, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nc(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nc, o0, o1); } \
+ ASMJIT_INLINE Error NAME##ne(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ne, o0, o1); } \
+ ASMJIT_INLINE Error NAME##ng(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ng, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nge(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nge, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nl(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nl, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nle(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nle, o0, o1); } \
+ ASMJIT_INLINE Error NAME##no(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##no, o0, o1); } \
+ ASMJIT_INLINE Error NAME##np(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##np, o0, o1); } \
+ ASMJIT_INLINE Error NAME##ns(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##ns, o0, o1); } \
+ ASMJIT_INLINE Error NAME##nz(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##nz, o0, o1); } \
+ ASMJIT_INLINE Error NAME##o(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##o, o0, o1); } \
+ ASMJIT_INLINE Error NAME##p(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##p, o0, o1); } \
+ ASMJIT_INLINE Error NAME##pe(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##pe, o0, o1); } \
+ ASMJIT_INLINE Error NAME##po(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##po, o0, o1); } \
+ ASMJIT_INLINE Error NAME##s(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##s, o0, o1); } \
+ ASMJIT_INLINE Error NAME##z(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID##z, o0, o1); }
#define ASMJIT_INST_3x(NAME, ID, T0, T1, T2) \
- inline Error NAME(const T0& o0, const T1& o1, const T2& o2) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2); }
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2); }
#define ASMJIT_INST_4x(NAME, ID, T0, T1, T2, T3) \
- inline Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3); }
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3); }
#define ASMJIT_INST_5x(NAME, ID, T0, T1, T2, T3, T4) \
- inline Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4); }
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4); }
#define ASMJIT_INST_6x(NAME, ID, T0, T1, T2, T3, T4, T5) \
- inline Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4, const T5& o5) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4, o5); }
+ ASMJIT_INLINE Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4, const T5& o5) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4, o5); }
//! \addtogroup asmjit_x86
//! \{
diff --git a/erts/emulator/asmjit/x86/x86features.cpp b/erts/emulator/asmjit/x86/x86features.cpp
index 2a55c94b71..e04aebdc22 100644
--- a/erts/emulator/asmjit/x86/x86features.cpp
+++ b/erts/emulator/asmjit/x86/x86features.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#if defined(ASMJIT_BUILD_X86) && ASMJIT_ARCH_X86
+#if !defined(ASMJIT_NO_X86) && ASMJIT_ARCH_X86
#include "../core/cpuinfo.h"
#include "../core/support.h"
@@ -449,4 +449,4 @@ ASMJIT_FAVOR_SIZE void detectCpu(CpuInfo& cpu) noexcept {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86 && ASMJIT_ARCH_X86
+#endif // !ASMJIT_NO_X86 && ASMJIT_ARCH_X86
diff --git a/erts/emulator/asmjit/x86/x86func.cpp b/erts/emulator/asmjit/x86/x86func.cpp
index ef5c4d9d29..8f2f077cea 100644
--- a/erts/emulator/asmjit/x86/x86func.cpp
+++ b/erts/emulator/asmjit/x86/x86func.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../x86/x86func_p.h"
#include "../x86/x86emithelper_p.h"
@@ -528,4 +528,4 @@ ASMJIT_FAVOR_SIZE Error initFuncDetail(FuncDetail& func, const FuncSignature& si
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86
+#endif // !ASMJIT_NO_X86
diff --git a/erts/emulator/asmjit/x86/x86instapi.cpp b/erts/emulator/asmjit/x86/x86instapi.cpp
index 423154f7c4..664cfae796 100644
--- a/erts/emulator/asmjit/x86/x86instapi.cpp
+++ b/erts/emulator/asmjit/x86/x86instapi.cpp
@@ -40,7 +40,7 @@
// ----------------------------------------------------------------------------
#include "../core/api-build_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../core/cpuinfo.h"
#include "../core/misc_p.h"
@@ -1519,6 +1519,7 @@ Error InstInternal::queryFeatures(uint32_t arch, const BaseInst& inst, const Ope
// The instruction doesn't use XMM register(s), thus it's MMX/MMX2 only.
out->remove(Features::kSSE);
out->remove(Features::kSSE2);
+ out->remove(Features::kSSE4_1);
}
else {
out->remove(Features::kMMX);
@@ -1532,9 +1533,6 @@ Error InstInternal::queryFeatures(uint32_t arch, const BaseInst& inst, const Ope
// can extract directly to memory. This instruction is, of course, not
// compatible with MMX/SSE2 and would #UD if SSE4.1 is not supported.
if (instId == Inst::kIdPextrw) {
- ASMJIT_ASSERT(out->has(Features::kSSE2));
- ASMJIT_ASSERT(out->has(Features::kSSE4_1));
-
if (opCount >= 1 && operands[0].isMem())
out->remove(Features::kSSE2);
else
@@ -1607,11 +1605,15 @@ Error InstInternal::queryFeatures(uint32_t arch, const BaseInst& inst, const Ope
mustUseEvex = opCount >= 2 && x86::Reg::isGp(operands[1]);
break;
- // Special case: VPERMPD only supports YMM predicate in AVX mode, immediate
- // precicate is only supported by AVX512-F and newer.
+ // Special case: VPERMPD - AVX2 vs AVX512-F case.
case Inst::kIdVpermpd:
mustUseEvex = opCount >= 3 && !operands[2].isImm();
break;
+
+ // Special case: VPERMQ - AVX2 vs AVX512-F case.
+ case Inst::kIdVpermq:
+ mustUseEvex = opCount >= 3 && (operands[1].isMem() || !operands[2].isImm());
+ break;
}
if (!(usesAvx512 | mustUseEvex | regAnalysis.highVecUsed))
@@ -1668,4 +1670,4 @@ UNIT(x86_inst_api_text) {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86
+#endif // !ASMJIT_NO_X86
diff --git a/erts/emulator/asmjit/x86/x86instdb.cpp b/erts/emulator/asmjit/x86/x86instdb.cpp
index 4391f3b7a9..563b5d2b71 100644
--- a/erts/emulator/asmjit/x86/x86instdb.cpp
+++ b/erts/emulator/asmjit/x86/x86instdb.cpp
@@ -40,7 +40,7 @@
// ----------------------------------------------------------------------------
#include "../core/api-build_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../core/cpuinfo.h"
#include "../core/misc_p.h"
@@ -461,45 +461,45 @@ const InstDB::InstInfo InstDB::_instInfoTable[] = {
INST(Kunpckbw , VexRvm , V(660F00,4B,_,1,0,_,_,_ ), 0 , 66 , 0 , 1713 , 88 , 68 ), // #364
INST(Kunpckdq , VexRvm , V(000F00,4B,_,1,1,_,_,_ ), 0 , 68 , 0 , 1722 , 88 , 67 ), // #365
INST(Kunpckwd , VexRvm , V(000F00,4B,_,1,0,_,_,_ ), 0 , 69 , 0 , 1731 , 88 , 67 ), // #366
- INST(Kxnorb , VexRvm , V(660F00,46,_,1,0,_,_,_ ), 0 , 66 , 0 , 1740 , 88 , 66 ), // #367
- INST(Kxnord , VexRvm , V(660F00,46,_,1,1,_,_,_ ), 0 , 67 , 0 , 1747 , 88 , 67 ), // #368
- INST(Kxnorq , VexRvm , V(000F00,46,_,1,1,_,_,_ ), 0 , 68 , 0 , 1754 , 88 , 67 ), // #369
- INST(Kxnorw , VexRvm , V(000F00,46,_,1,0,_,_,_ ), 0 , 69 , 0 , 1761 , 88 , 68 ), // #370
- INST(Kxorb , VexRvm , V(660F00,47,_,1,0,_,_,_ ), 0 , 66 , 0 , 1768 , 88 , 66 ), // #371
- INST(Kxord , VexRvm , V(660F00,47,_,1,1,_,_,_ ), 0 , 67 , 0 , 1774 , 88 , 67 ), // #372
- INST(Kxorq , VexRvm , V(000F00,47,_,1,1,_,_,_ ), 0 , 68 , 0 , 1780 , 88 , 67 ), // #373
- INST(Kxorw , VexRvm , V(000F00,47,_,1,0,_,_,_ ), 0 , 69 , 0 , 1786 , 88 , 68 ), // #374
- INST(Lahf , X86Op , O(000000,9F,_,_,_,_,_,_ ), 0 , 0 , 0 , 1792 , 95 , 72 ), // #375
- INST(Lar , X86Rm , O(000F00,02,_,_,_,_,_,_ ), 0 , 4 , 0 , 1797 , 96 , 10 ), // #376
- INST(Lcall , X86LcallLjmp , O(000000,FF,3,_,_,_,_,_ ), O(000000,9A,_,_,_,_,_,_ ), 76 , 40 , 1801 , 97 , 1 ), // #377
- INST(Lddqu , ExtRm , O(F20F00,F0,_,_,_,_,_,_ ), 0 , 5 , 0 , 6083 , 98 , 6 ), // #378
- INST(Ldmxcsr , X86M_Only , O(000F00,AE,2,_,_,_,_,_ ), 0 , 77 , 0 , 6090 , 99 , 5 ), // #379
- INST(Lds , X86Rm , O(000000,C5,_,_,_,_,_,_ ), 0 , 0 , 0 , 1807 , 100, 0 ), // #380
- INST(Ldtilecfg , AmxCfg , V(000F38,49,_,0,0,_,_,_ ), 0 , 10 , 0 , 1811 , 101, 73 ), // #381
- INST(Lea , X86Lea , O(000000,8D,_,_,x,_,_,_ ), 0 , 0 , 0 , 1821 , 102, 0 ), // #382
+ INST(Kxnorb , VexRvm , V(660F00,46,_,1,0,_,_,_ ), 0 , 66 , 0 , 1740 , 95 , 66 ), // #367
+ INST(Kxnord , VexRvm , V(660F00,46,_,1,1,_,_,_ ), 0 , 67 , 0 , 1747 , 95 , 67 ), // #368
+ INST(Kxnorq , VexRvm , V(000F00,46,_,1,1,_,_,_ ), 0 , 68 , 0 , 1754 , 95 , 67 ), // #369
+ INST(Kxnorw , VexRvm , V(000F00,46,_,1,0,_,_,_ ), 0 , 69 , 0 , 1761 , 95 , 68 ), // #370
+ INST(Kxorb , VexRvm , V(660F00,47,_,1,0,_,_,_ ), 0 , 66 , 0 , 1768 , 95 , 66 ), // #371
+ INST(Kxord , VexRvm , V(660F00,47,_,1,1,_,_,_ ), 0 , 67 , 0 , 1774 , 95 , 67 ), // #372
+ INST(Kxorq , VexRvm , V(000F00,47,_,1,1,_,_,_ ), 0 , 68 , 0 , 1780 , 95 , 67 ), // #373
+ INST(Kxorw , VexRvm , V(000F00,47,_,1,0,_,_,_ ), 0 , 69 , 0 , 1786 , 95 , 68 ), // #374
+ INST(Lahf , X86Op , O(000000,9F,_,_,_,_,_,_ ), 0 , 0 , 0 , 1792 , 96 , 72 ), // #375
+ INST(Lar , X86Rm , O(000F00,02,_,_,_,_,_,_ ), 0 , 4 , 0 , 1797 , 97 , 10 ), // #376
+ INST(Lcall , X86LcallLjmp , O(000000,FF,3,_,_,_,_,_ ), O(000000,9A,_,_,_,_,_,_ ), 76 , 40 , 1801 , 98 , 1 ), // #377
+ INST(Lddqu , ExtRm , O(F20F00,F0,_,_,_,_,_,_ ), 0 , 5 , 0 , 6083 , 99 , 6 ), // #378
+ INST(Ldmxcsr , X86M_Only , O(000F00,AE,2,_,_,_,_,_ ), 0 , 77 , 0 , 6090 , 100, 5 ), // #379
+ INST(Lds , X86Rm , O(000000,C5,_,_,_,_,_,_ ), 0 , 0 , 0 , 1807 , 101, 0 ), // #380
+ INST(Ldtilecfg , AmxCfg , V(000F38,49,_,0,0,_,_,_ ), 0 , 10 , 0 , 1811 , 102, 73 ), // #381
+ INST(Lea , X86Lea , O(000000,8D,_,_,x,_,_,_ ), 0 , 0 , 0 , 1821 , 103, 0 ), // #382
INST(Leave , X86Op , O(000000,C9,_,_,_,_,_,_ ), 0 , 0 , 0 , 1825 , 30 , 0 ), // #383
- INST(Les , X86Rm , O(000000,C4,_,_,_,_,_,_ ), 0 , 0 , 0 , 1831 , 100, 0 ), // #384
+ INST(Les , X86Rm , O(000000,C4,_,_,_,_,_,_ ), 0 , 0 , 0 , 1831 , 101, 0 ), // #384
INST(Lfence , X86Fence , O(000F00,AE,5,_,_,_,_,_ ), 0 , 78 , 0 , 1835 , 30 , 4 ), // #385
- INST(Lfs , X86Rm , O(000F00,B4,_,_,_,_,_,_ ), 0 , 4 , 0 , 1842 , 103, 0 ), // #386
+ INST(Lfs , X86Rm , O(000F00,B4,_,_,_,_,_,_ ), 0 , 4 , 0 , 1842 , 104, 0 ), // #386
INST(Lgdt , X86M_Only , O(000F00,01,2,_,_,_,_,_ ), 0 , 77 , 0 , 1846 , 31 , 0 ), // #387
- INST(Lgs , X86Rm , O(000F00,B5,_,_,_,_,_,_ ), 0 , 4 , 0 , 1851 , 103, 0 ), // #388
+ INST(Lgs , X86Rm , O(000F00,B5,_,_,_,_,_,_ ), 0 , 4 , 0 , 1851 , 104, 0 ), // #388
INST(Lidt , X86M_Only , O(000F00,01,3,_,_,_,_,_ ), 0 , 79 , 0 , 1855 , 31 , 0 ), // #389
- INST(Ljmp , X86LcallLjmp , O(000000,FF,5,_,_,_,_,_ ), O(000000,EA,_,_,_,_,_,_ ), 63 , 41 , 1860 , 104, 0 ), // #390
- INST(Lldt , X86M_NoSize , O(000F00,00,2,_,_,_,_,_ ), 0 , 77 , 0 , 1865 , 105, 0 ), // #391
- INST(Llwpcb , VexR_Wx , V(XOP_M9,12,0,0,x,_,_,_ ), 0 , 80 , 0 , 1870 , 106, 74 ), // #392
- INST(Lmsw , X86M_NoSize , O(000F00,01,6,_,_,_,_,_ ), 0 , 81 , 0 , 1877 , 105, 0 ), // #393
- INST(Lods , X86StrRm , O(000000,AC,_,_,_,_,_,_ ), 0 , 0 , 0 , 1882 , 107, 75 ), // #394
- INST(Loop , X86JecxzLoop , 0 , O(000000,E2,_,_,_,_,_,_ ), 0 , 42 , 1887 , 108, 0 ), // #395
- INST(Loope , X86JecxzLoop , 0 , O(000000,E1,_,_,_,_,_,_ ), 0 , 43 , 1892 , 108, 61 ), // #396
- INST(Loopne , X86JecxzLoop , 0 , O(000000,E0,_,_,_,_,_,_ ), 0 , 44 , 1898 , 108, 61 ), // #397
- INST(Lsl , X86Rm , O(000F00,03,_,_,_,_,_,_ ), 0 , 4 , 0 , 1905 , 109, 10 ), // #398
- INST(Lss , X86Rm , O(000F00,B2,_,_,_,_,_,_ ), 0 , 4 , 0 , 6581 , 103, 0 ), // #399
- INST(Ltr , X86M_NoSize , O(000F00,00,3,_,_,_,_,_ ), 0 , 79 , 0 , 1909 , 105, 0 ), // #400
- INST(Lwpins , VexVmi4_Wx , V(XOP_MA,12,0,0,x,_,_,_ ), 0 , 82 , 0 , 1913 , 110, 74 ), // #401
- INST(Lwpval , VexVmi4_Wx , V(XOP_MA,12,1,0,x,_,_,_ ), 0 , 83 , 0 , 1920 , 110, 74 ), // #402
+ INST(Ljmp , X86LcallLjmp , O(000000,FF,5,_,_,_,_,_ ), O(000000,EA,_,_,_,_,_,_ ), 63 , 41 , 1860 , 105, 0 ), // #390
+ INST(Lldt , X86M_NoSize , O(000F00,00,2,_,_,_,_,_ ), 0 , 77 , 0 , 1865 , 106, 0 ), // #391
+ INST(Llwpcb , VexR_Wx , V(XOP_M9,12,0,0,x,_,_,_ ), 0 , 80 , 0 , 1870 , 107, 74 ), // #392
+ INST(Lmsw , X86M_NoSize , O(000F00,01,6,_,_,_,_,_ ), 0 , 81 , 0 , 1877 , 106, 0 ), // #393
+ INST(Lods , X86StrRm , O(000000,AC,_,_,_,_,_,_ ), 0 , 0 , 0 , 1882 , 108, 75 ), // #394
+ INST(Loop , X86JecxzLoop , 0 , O(000000,E2,_,_,_,_,_,_ ), 0 , 42 , 1887 , 109, 0 ), // #395
+ INST(Loope , X86JecxzLoop , 0 , O(000000,E1,_,_,_,_,_,_ ), 0 , 43 , 1892 , 109, 61 ), // #396
+ INST(Loopne , X86JecxzLoop , 0 , O(000000,E0,_,_,_,_,_,_ ), 0 , 44 , 1898 , 109, 61 ), // #397
+ INST(Lsl , X86Rm , O(000F00,03,_,_,_,_,_,_ ), 0 , 4 , 0 , 1905 , 110, 10 ), // #398
+ INST(Lss , X86Rm , O(000F00,B2,_,_,_,_,_,_ ), 0 , 4 , 0 , 6581 , 104, 0 ), // #399
+ INST(Ltr , X86M_NoSize , O(000F00,00,3,_,_,_,_,_ ), 0 , 79 , 0 , 1909 , 106, 0 ), // #400
+ INST(Lwpins , VexVmi4_Wx , V(XOP_MA,12,0,0,x,_,_,_ ), 0 , 82 , 0 , 1913 , 111, 74 ), // #401
+ INST(Lwpval , VexVmi4_Wx , V(XOP_MA,12,1,0,x,_,_,_ ), 0 , 83 , 0 , 1920 , 111, 74 ), // #402
INST(Lzcnt , X86Rm_Raw66H , O(F30F00,BD,_,_,x,_,_,_ ), 0 , 6 , 0 , 1927 , 22 , 76 ), // #403
- INST(Maskmovdqu , ExtRm_ZDI , O(660F00,F7,_,_,_,_,_,_ ), 0 , 3 , 0 , 6099 , 111, 4 ), // #404
- INST(Maskmovq , ExtRm_ZDI , O(000F00,F7,_,_,_,_,_,_ ), 0 , 4 , 0 , 8138 , 112, 77 ), // #405
+ INST(Maskmovdqu , ExtRm_ZDI , O(660F00,F7,_,_,_,_,_,_ ), 0 , 3 , 0 , 6099 , 112, 4 ), // #404
+ INST(Maskmovq , ExtRm_ZDI , O(000F00,F7,_,_,_,_,_,_ ), 0 , 4 , 0 , 8138 , 113, 77 ), // #405
INST(Maxpd , ExtRm , O(660F00,5F,_,_,_,_,_,_ ), 0 , 3 , 0 , 6133 , 5 , 4 ), // #406
INST(Maxps , ExtRm , O(000F00,5F,_,_,_,_,_,_ ), 0 , 4 , 0 , 6140 , 5 , 5 ), // #407
INST(Maxsd , ExtRm , O(F20F00,5F,_,_,_,_,_,_ ), 0 , 5 , 0 , 8157 , 6 , 4 ), // #408
@@ -510,186 +510,186 @@ const InstDB::InstInfo InstDB::_instInfoTable[] = {
INST(Minps , ExtRm , O(000F00,5D,_,_,_,_,_,_ ), 0 , 4 , 0 , 6190 , 5 , 5 ), // #413
INST(Minsd , ExtRm , O(F20F00,5D,_,_,_,_,_,_ ), 0 , 5 , 0 , 8221 , 6 , 4 ), // #414
INST(Minss , ExtRm , O(F30F00,5D,_,_,_,_,_,_ ), 0 , 6 , 0 , 6204 , 7 , 5 ), // #415
- INST(Monitor , X86Op , O(000F01,C8,_,_,_,_,_,_ ), 0 , 21 , 0 , 3232 , 113, 79 ), // #416
- INST(Monitorx , X86Op , O(000F01,FA,_,_,_,_,_,_ ), 0 , 21 , 0 , 1948 , 113, 80 ), // #417
- INST(Mov , X86Mov , 0 , 0 , 0 , 0 , 138 , 114, 0 ), // #418
- INST(Movabs , X86Movabs , 0 , 0 , 0 , 0 , 1957 , 115, 0 ), // #419
- INST(Movapd , ExtMov , O(660F00,28,_,_,_,_,_,_ ), O(660F00,29,_,_,_,_,_,_ ), 3 , 45 , 6235 , 116, 4 ), // #420
- INST(Movaps , ExtMov , O(000F00,28,_,_,_,_,_,_ ), O(000F00,29,_,_,_,_,_,_ ), 4 , 46 , 6243 , 116, 5 ), // #421
- INST(Movbe , ExtMovbe , O(000F38,F0,_,_,x,_,_,_ ), O(000F38,F1,_,_,x,_,_,_ ), 84 , 47 , 656 , 117, 81 ), // #422
- INST(Movd , ExtMovd , O(000F00,6E,_,_,_,_,_,_ ), O(000F00,7E,_,_,_,_,_,_ ), 4 , 48 , 8131 , 118, 82 ), // #423
+ INST(Monitor , X86Op , O(000F01,C8,_,_,_,_,_,_ ), 0 , 21 , 0 , 3232 , 114, 79 ), // #416
+ INST(Monitorx , X86Op , O(000F01,FA,_,_,_,_,_,_ ), 0 , 21 , 0 , 1948 , 114, 80 ), // #417
+ INST(Mov , X86Mov , 0 , 0 , 0 , 0 , 138 , 115, 0 ), // #418
+ INST(Movabs , X86Movabs , 0 , 0 , 0 , 0 , 1957 , 116, 0 ), // #419
+ INST(Movapd , ExtMov , O(660F00,28,_,_,_,_,_,_ ), O(660F00,29,_,_,_,_,_,_ ), 3 , 45 , 6235 , 117, 4 ), // #420
+ INST(Movaps , ExtMov , O(000F00,28,_,_,_,_,_,_ ), O(000F00,29,_,_,_,_,_,_ ), 4 , 46 , 6243 , 117, 5 ), // #421
+ INST(Movbe , ExtMovbe , O(000F38,F0,_,_,x,_,_,_ ), O(000F38,F1,_,_,x,_,_,_ ), 84 , 47 , 656 , 118, 81 ), // #422
+ INST(Movd , ExtMovd , O(000F00,6E,_,_,_,_,_,_ ), O(000F00,7E,_,_,_,_,_,_ ), 4 , 48 , 8131 , 119, 82 ), // #423
INST(Movddup , ExtMov , O(F20F00,12,_,_,_,_,_,_ ), 0 , 5 , 0 , 6257 , 6 , 6 ), // #424
- INST(Movdir64b , X86EnqcmdMovdir64b , O(660F38,F8,_,_,_,_,_,_ ), 0 , 2 , 0 , 1964 , 119, 83 ), // #425
- INST(Movdiri , X86MovntiMovdiri , O(000F38,F9,_,_,_,_,_,_ ), 0 , 84 , 0 , 1974 , 120, 84 ), // #426
- INST(Movdq2q , ExtMov , O(F20F00,D6,_,_,_,_,_,_ ), 0 , 5 , 0 , 1982 , 121, 4 ), // #427
- INST(Movdqa , ExtMov , O(660F00,6F,_,_,_,_,_,_ ), O(660F00,7F,_,_,_,_,_,_ ), 3 , 49 , 6266 , 116, 4 ), // #428
- INST(Movdqu , ExtMov , O(F30F00,6F,_,_,_,_,_,_ ), O(F30F00,7F,_,_,_,_,_,_ ), 6 , 50 , 6103 , 116, 4 ), // #429
- INST(Movhlps , ExtMov , O(000F00,12,_,_,_,_,_,_ ), 0 , 4 , 0 , 6341 , 122, 5 ), // #430
- INST(Movhpd , ExtMov , O(660F00,16,_,_,_,_,_,_ ), O(660F00,17,_,_,_,_,_,_ ), 3 , 51 , 6350 , 123, 4 ), // #431
- INST(Movhps , ExtMov , O(000F00,16,_,_,_,_,_,_ ), O(000F00,17,_,_,_,_,_,_ ), 4 , 52 , 6358 , 123, 5 ), // #432
- INST(Movlhps , ExtMov , O(000F00,16,_,_,_,_,_,_ ), 0 , 4 , 0 , 6366 , 122, 5 ), // #433
- INST(Movlpd , ExtMov , O(660F00,12,_,_,_,_,_,_ ), O(660F00,13,_,_,_,_,_,_ ), 3 , 53 , 6375 , 123, 4 ), // #434
- INST(Movlps , ExtMov , O(000F00,12,_,_,_,_,_,_ ), O(000F00,13,_,_,_,_,_,_ ), 4 , 54 , 6383 , 123, 5 ), // #435
- INST(Movmskpd , ExtMov , O(660F00,50,_,_,_,_,_,_ ), 0 , 3 , 0 , 6391 , 124, 4 ), // #436
- INST(Movmskps , ExtMov , O(000F00,50,_,_,_,_,_,_ ), 0 , 4 , 0 , 6401 , 124, 5 ), // #437
- INST(Movntdq , ExtMov , 0 , O(660F00,E7,_,_,_,_,_,_ ), 0 , 55 , 6411 , 125, 4 ), // #438
- INST(Movntdqa , ExtMov , O(660F38,2A,_,_,_,_,_,_ ), 0 , 2 , 0 , 6420 , 98 , 12 ), // #439
- INST(Movnti , X86MovntiMovdiri , O(000F00,C3,_,_,x,_,_,_ ), 0 , 4 , 0 , 1990 , 120, 4 ), // #440
- INST(Movntpd , ExtMov , 0 , O(660F00,2B,_,_,_,_,_,_ ), 0 , 56 , 6430 , 125, 4 ), // #441
- INST(Movntps , ExtMov , 0 , O(000F00,2B,_,_,_,_,_,_ ), 0 , 57 , 6439 , 125, 5 ), // #442
- INST(Movntq , ExtMov , 0 , O(000F00,E7,_,_,_,_,_,_ ), 0 , 58 , 1997 , 126, 77 ), // #443
- INST(Movntsd , ExtMov , 0 , O(F20F00,2B,_,_,_,_,_,_ ), 0 , 59 , 2004 , 127, 49 ), // #444
- INST(Movntss , ExtMov , 0 , O(F30F00,2B,_,_,_,_,_,_ ), 0 , 60 , 2012 , 128, 49 ), // #445
- INST(Movq , ExtMovq , O(000F00,6E,_,_,x,_,_,_ ), O(000F00,7E,_,_,x,_,_,_ ), 4 , 61 , 8142 , 129, 82 ), // #446
- INST(Movq2dq , ExtRm , O(F30F00,D6,_,_,_,_,_,_ ), 0 , 6 , 0 , 2020 , 130, 4 ), // #447
- INST(Movs , X86StrMm , O(000000,A4,_,_,_,_,_,_ ), 0 , 0 , 0 , 439 , 131, 75 ), // #448
- INST(Movsd , ExtMov , O(F20F00,10,_,_,_,_,_,_ ), O(F20F00,11,_,_,_,_,_,_ ), 5 , 62 , 6454 , 132, 4 ), // #449
+ INST(Movdir64b , X86EnqcmdMovdir64b , O(660F38,F8,_,_,_,_,_,_ ), 0 , 2 , 0 , 1964 , 120, 83 ), // #425
+ INST(Movdiri , X86MovntiMovdiri , O(000F38,F9,_,_,_,_,_,_ ), 0 , 84 , 0 , 1974 , 121, 84 ), // #426
+ INST(Movdq2q , ExtMov , O(F20F00,D6,_,_,_,_,_,_ ), 0 , 5 , 0 , 1982 , 122, 4 ), // #427
+ INST(Movdqa , ExtMov , O(660F00,6F,_,_,_,_,_,_ ), O(660F00,7F,_,_,_,_,_,_ ), 3 , 49 , 6266 , 117, 4 ), // #428
+ INST(Movdqu , ExtMov , O(F30F00,6F,_,_,_,_,_,_ ), O(F30F00,7F,_,_,_,_,_,_ ), 6 , 50 , 6103 , 117, 4 ), // #429
+ INST(Movhlps , ExtMov , O(000F00,12,_,_,_,_,_,_ ), 0 , 4 , 0 , 6341 , 123, 5 ), // #430
+ INST(Movhpd , ExtMov , O(660F00,16,_,_,_,_,_,_ ), O(660F00,17,_,_,_,_,_,_ ), 3 , 51 , 6350 , 124, 4 ), // #431
+ INST(Movhps , ExtMov , O(000F00,16,_,_,_,_,_,_ ), O(000F00,17,_,_,_,_,_,_ ), 4 , 52 , 6358 , 124, 5 ), // #432
+ INST(Movlhps , ExtMov , O(000F00,16,_,_,_,_,_,_ ), 0 , 4 , 0 , 6366 , 123, 5 ), // #433
+ INST(Movlpd , ExtMov , O(660F00,12,_,_,_,_,_,_ ), O(660F00,13,_,_,_,_,_,_ ), 3 , 53 , 6375 , 124, 4 ), // #434
+ INST(Movlps , ExtMov , O(000F00,12,_,_,_,_,_,_ ), O(000F00,13,_,_,_,_,_,_ ), 4 , 54 , 6383 , 124, 5 ), // #435
+ INST(Movmskpd , ExtMov , O(660F00,50,_,_,_,_,_,_ ), 0 , 3 , 0 , 6391 , 125, 4 ), // #436
+ INST(Movmskps , ExtMov , O(000F00,50,_,_,_,_,_,_ ), 0 , 4 , 0 , 6401 , 125, 5 ), // #437
+ INST(Movntdq , ExtMov , 0 , O(660F00,E7,_,_,_,_,_,_ ), 0 , 55 , 6411 , 126, 4 ), // #438
+ INST(Movntdqa , ExtMov , O(660F38,2A,_,_,_,_,_,_ ), 0 , 2 , 0 , 6420 , 99 , 12 ), // #439
+ INST(Movnti , X86MovntiMovdiri , O(000F00,C3,_,_,x,_,_,_ ), 0 , 4 , 0 , 1990 , 121, 4 ), // #440
+ INST(Movntpd , ExtMov , 0 , O(660F00,2B,_,_,_,_,_,_ ), 0 , 56 , 6430 , 126, 4 ), // #441
+ INST(Movntps , ExtMov , 0 , O(000F00,2B,_,_,_,_,_,_ ), 0 , 57 , 6439 , 126, 5 ), // #442
+ INST(Movntq , ExtMov , 0 , O(000F00,E7,_,_,_,_,_,_ ), 0 , 58 , 1997 , 127, 77 ), // #443
+ INST(Movntsd , ExtMov , 0 , O(F20F00,2B,_,_,_,_,_,_ ), 0 , 59 , 2004 , 128, 49 ), // #444
+ INST(Movntss , ExtMov , 0 , O(F30F00,2B,_,_,_,_,_,_ ), 0 , 60 , 2012 , 129, 49 ), // #445
+ INST(Movq , ExtMovq , O(000F00,6E,_,_,x,_,_,_ ), O(000F00,7E,_,_,x,_,_,_ ), 4 , 61 , 8142 , 130, 82 ), // #446
+ INST(Movq2dq , ExtRm , O(F30F00,D6,_,_,_,_,_,_ ), 0 , 6 , 0 , 2020 , 131, 4 ), // #447
+ INST(Movs , X86StrMm , O(000000,A4,_,_,_,_,_,_ ), 0 , 0 , 0 , 439 , 132, 75 ), // #448
+ INST(Movsd , ExtMov , O(F20F00,10,_,_,_,_,_,_ ), O(F20F00,11,_,_,_,_,_,_ ), 5 , 62 , 6454 , 133, 4 ), // #449
INST(Movshdup , ExtRm , O(F30F00,16,_,_,_,_,_,_ ), 0 , 6 , 0 , 6461 , 5 , 6 ), // #450
INST(Movsldup , ExtRm , O(F30F00,12,_,_,_,_,_,_ ), 0 , 6 , 0 , 6471 , 5 , 6 ), // #451
- INST(Movss , ExtMov , O(F30F00,10,_,_,_,_,_,_ ), O(F30F00,11,_,_,_,_,_,_ ), 6 , 63 , 6481 , 133, 5 ), // #452
- INST(Movsx , X86MovsxMovzx , O(000F00,BE,_,_,x,_,_,_ ), 0 , 4 , 0 , 2028 , 134, 0 ), // #453
- INST(Movsxd , X86Rm , O(000000,63,_,_,x,_,_,_ ), 0 , 0 , 0 , 2034 , 135, 0 ), // #454
- INST(Movupd , ExtMov , O(660F00,10,_,_,_,_,_,_ ), O(660F00,11,_,_,_,_,_,_ ), 3 , 64 , 6488 , 116, 4 ), // #455
- INST(Movups , ExtMov , O(000F00,10,_,_,_,_,_,_ ), O(000F00,11,_,_,_,_,_,_ ), 4 , 65 , 6496 , 116, 5 ), // #456
- INST(Movzx , X86MovsxMovzx , O(000F00,B6,_,_,x,_,_,_ ), 0 , 4 , 0 , 2041 , 134, 0 ), // #457
+ INST(Movss , ExtMov , O(F30F00,10,_,_,_,_,_,_ ), O(F30F00,11,_,_,_,_,_,_ ), 6 , 63 , 6481 , 134, 5 ), // #452
+ INST(Movsx , X86MovsxMovzx , O(000F00,BE,_,_,x,_,_,_ ), 0 , 4 , 0 , 2028 , 135, 0 ), // #453
+ INST(Movsxd , X86Rm , O(000000,63,_,_,x,_,_,_ ), 0 , 0 , 0 , 2034 , 136, 0 ), // #454
+ INST(Movupd , ExtMov , O(660F00,10,_,_,_,_,_,_ ), O(660F00,11,_,_,_,_,_,_ ), 3 , 64 , 6488 , 117, 4 ), // #455
+ INST(Movups , ExtMov , O(000F00,10,_,_,_,_,_,_ ), O(000F00,11,_,_,_,_,_,_ ), 4 , 65 , 6496 , 117, 5 ), // #456
+ INST(Movzx , X86MovsxMovzx , O(000F00,B6,_,_,x,_,_,_ ), 0 , 4 , 0 , 2041 , 135, 0 ), // #457
INST(Mpsadbw , ExtRmi , O(660F3A,42,_,_,_,_,_,_ ), 0 , 8 , 0 , 6504 , 8 , 12 ), // #458
INST(Mul , X86M_GPB_MulDiv , O(000000,F6,4,_,x,_,_,_ ), 0 , 9 , 0 , 828 , 54 , 1 ), // #459
INST(Mulpd , ExtRm , O(660F00,59,_,_,_,_,_,_ ), 0 , 3 , 0 , 6558 , 5 , 4 ), // #460
INST(Mulps , ExtRm , O(000F00,59,_,_,_,_,_,_ ), 0 , 4 , 0 , 6565 , 5 , 5 ), // #461
INST(Mulsd , ExtRm , O(F20F00,59,_,_,_,_,_,_ ), 0 , 5 , 0 , 6572 , 6 , 4 ), // #462
INST(Mulss , ExtRm , O(F30F00,59,_,_,_,_,_,_ ), 0 , 6 , 0 , 6579 , 7 , 5 ), // #463
- INST(Mulx , VexRvm_ZDX_Wx , V(F20F38,F6,_,0,x,_,_,_ ), 0 , 85 , 0 , 2047 , 136, 85 ), // #464
- INST(Mwait , X86Op , O(000F01,C9,_,_,_,_,_,_ ), 0 , 21 , 0 , 3241 , 137, 79 ), // #465
- INST(Mwaitx , X86Op , O(000F01,FB,_,_,_,_,_,_ ), 0 , 21 , 0 , 2052 , 138, 80 ), // #466
- INST(Neg , X86M_GPB , O(000000,F6,3,_,x,_,_,_ ), 0 , 76 , 0 , 2059 , 139, 1 ), // #467
- INST(Nop , X86M_Nop , O(000000,90,_,_,_,_,_,_ ), 0 , 0 , 0 , 959 , 140, 0 ), // #468
- INST(Not , X86M_GPB , O(000000,F6,2,_,x,_,_,_ ), 0 , 1 , 0 , 2063 , 139, 0 ), // #469
- INST(Or , X86Arith , O(000000,08,1,_,x,_,_,_ ), 0 , 31 , 0 , 3237 , 141, 1 ), // #470
+ INST(Mulx , VexRvm_ZDX_Wx , V(F20F38,F6,_,0,x,_,_,_ ), 0 , 85 , 0 , 2047 , 137, 85 ), // #464
+ INST(Mwait , X86Op , O(000F01,C9,_,_,_,_,_,_ ), 0 , 21 , 0 , 3241 , 138, 79 ), // #465
+ INST(Mwaitx , X86Op , O(000F01,FB,_,_,_,_,_,_ ), 0 , 21 , 0 , 2052 , 139, 80 ), // #466
+ INST(Neg , X86M_GPB , O(000000,F6,3,_,x,_,_,_ ), 0 , 76 , 0 , 2059 , 140, 1 ), // #467
+ INST(Nop , X86M_Nop , O(000000,90,_,_,_,_,_,_ ), 0 , 0 , 0 , 959 , 141, 0 ), // #468
+ INST(Not , X86M_GPB , O(000000,F6,2,_,x,_,_,_ ), 0 , 1 , 0 , 2063 , 140, 0 ), // #469
+ INST(Or , X86Arith , O(000000,08,1,_,x,_,_,_ ), 0 , 31 , 0 , 3237 , 142, 1 ), // #470
INST(Orpd , ExtRm , O(660F00,56,_,_,_,_,_,_ ), 0 , 3 , 0 , 10348, 11 , 4 ), // #471
INST(Orps , ExtRm , O(000F00,56,_,_,_,_,_,_ ), 0 , 4 , 0 , 10355, 11 , 5 ), // #472
- INST(Out , X86Out , O(000000,EE,_,_,_,_,_,_ ), O(000000,E6,_,_,_,_,_,_ ), 0 , 66 , 2067 , 142, 0 ), // #473
- INST(Outs , X86Outs , O(000000,6E,_,_,_,_,_,_ ), 0 , 0 , 0 , 2071 , 143, 0 ), // #474
- INST(Pabsb , ExtRm_P , O(000F38,1C,_,_,_,_,_,_ ), 0 , 84 , 0 , 6661 , 144, 86 ), // #475
- INST(Pabsd , ExtRm_P , O(000F38,1E,_,_,_,_,_,_ ), 0 , 84 , 0 , 6668 , 144, 86 ), // #476
- INST(Pabsw , ExtRm_P , O(000F38,1D,_,_,_,_,_,_ ), 0 , 84 , 0 , 6682 , 144, 86 ), // #477
- INST(Packssdw , ExtRm_P , O(000F00,6B,_,_,_,_,_,_ ), 0 , 4 , 0 , 6689 , 144, 82 ), // #478
- INST(Packsswb , ExtRm_P , O(000F00,63,_,_,_,_,_,_ ), 0 , 4 , 0 , 6699 , 144, 82 ), // #479
+ INST(Out , X86Out , O(000000,EE,_,_,_,_,_,_ ), O(000000,E6,_,_,_,_,_,_ ), 0 , 66 , 2067 , 143, 0 ), // #473
+ INST(Outs , X86Outs , O(000000,6E,_,_,_,_,_,_ ), 0 , 0 , 0 , 2071 , 144, 0 ), // #474
+ INST(Pabsb , ExtRm_P , O(000F38,1C,_,_,_,_,_,_ ), 0 , 84 , 0 , 6661 , 145, 86 ), // #475
+ INST(Pabsd , ExtRm_P , O(000F38,1E,_,_,_,_,_,_ ), 0 , 84 , 0 , 6668 , 145, 86 ), // #476
+ INST(Pabsw , ExtRm_P , O(000F38,1D,_,_,_,_,_,_ ), 0 , 84 , 0 , 6682 , 145, 86 ), // #477
+ INST(Packssdw , ExtRm_P , O(000F00,6B,_,_,_,_,_,_ ), 0 , 4 , 0 , 6689 , 145, 82 ), // #478
+ INST(Packsswb , ExtRm_P , O(000F00,63,_,_,_,_,_,_ ), 0 , 4 , 0 , 6699 , 145, 82 ), // #479
INST(Packusdw , ExtRm , O(660F38,2B,_,_,_,_,_,_ ), 0 , 2 , 0 , 6709 , 5 , 12 ), // #480
- INST(Packuswb , ExtRm_P , O(000F00,67,_,_,_,_,_,_ ), 0 , 4 , 0 , 6719 , 144, 82 ), // #481
- INST(Paddb , ExtRm_P , O(000F00,FC,_,_,_,_,_,_ ), 0 , 4 , 0 , 6729 , 144, 82 ), // #482
- INST(Paddd , ExtRm_P , O(000F00,FE,_,_,_,_,_,_ ), 0 , 4 , 0 , 6736 , 144, 82 ), // #483
- INST(Paddq , ExtRm_P , O(000F00,D4,_,_,_,_,_,_ ), 0 , 4 , 0 , 6743 , 144, 4 ), // #484
- INST(Paddsb , ExtRm_P , O(000F00,EC,_,_,_,_,_,_ ), 0 , 4 , 0 , 6750 , 144, 82 ), // #485
- INST(Paddsw , ExtRm_P , O(000F00,ED,_,_,_,_,_,_ ), 0 , 4 , 0 , 6758 , 144, 82 ), // #486
- INST(Paddusb , ExtRm_P , O(000F00,DC,_,_,_,_,_,_ ), 0 , 4 , 0 , 6766 , 144, 82 ), // #487
- INST(Paddusw , ExtRm_P , O(000F00,DD,_,_,_,_,_,_ ), 0 , 4 , 0 , 6775 , 144, 82 ), // #488
- INST(Paddw , ExtRm_P , O(000F00,FD,_,_,_,_,_,_ ), 0 , 4 , 0 , 6784 , 144, 82 ), // #489
- INST(Palignr , ExtRmi_P , O(000F3A,0F,_,_,_,_,_,_ ), 0 , 86 , 0 , 6791 , 145, 6 ), // #490
- INST(Pand , ExtRm_P , O(000F00,DB,_,_,_,_,_,_ ), 0 , 4 , 0 , 6800 , 146, 82 ), // #491
- INST(Pandn , ExtRm_P , O(000F00,DF,_,_,_,_,_,_ ), 0 , 4 , 0 , 6813 , 147, 82 ), // #492
+ INST(Packuswb , ExtRm_P , O(000F00,67,_,_,_,_,_,_ ), 0 , 4 , 0 , 6719 , 145, 82 ), // #481
+ INST(Paddb , ExtRm_P , O(000F00,FC,_,_,_,_,_,_ ), 0 , 4 , 0 , 6729 , 145, 82 ), // #482
+ INST(Paddd , ExtRm_P , O(000F00,FE,_,_,_,_,_,_ ), 0 , 4 , 0 , 6736 , 145, 82 ), // #483
+ INST(Paddq , ExtRm_P , O(000F00,D4,_,_,_,_,_,_ ), 0 , 4 , 0 , 6743 , 145, 4 ), // #484
+ INST(Paddsb , ExtRm_P , O(000F00,EC,_,_,_,_,_,_ ), 0 , 4 , 0 , 6750 , 145, 82 ), // #485
+ INST(Paddsw , ExtRm_P , O(000F00,ED,_,_,_,_,_,_ ), 0 , 4 , 0 , 6758 , 145, 82 ), // #486
+ INST(Paddusb , ExtRm_P , O(000F00,DC,_,_,_,_,_,_ ), 0 , 4 , 0 , 6766 , 145, 82 ), // #487
+ INST(Paddusw , ExtRm_P , O(000F00,DD,_,_,_,_,_,_ ), 0 , 4 , 0 , 6775 , 145, 82 ), // #488
+ INST(Paddw , ExtRm_P , O(000F00,FD,_,_,_,_,_,_ ), 0 , 4 , 0 , 6784 , 145, 82 ), // #489
+ INST(Palignr , ExtRmi_P , O(000F3A,0F,_,_,_,_,_,_ ), 0 , 86 , 0 , 6791 , 146, 6 ), // #490
+ INST(Pand , ExtRm_P , O(000F00,DB,_,_,_,_,_,_ ), 0 , 4 , 0 , 6800 , 147, 82 ), // #491
+ INST(Pandn , ExtRm_P , O(000F00,DF,_,_,_,_,_,_ ), 0 , 4 , 0 , 6813 , 148, 82 ), // #492
INST(Pause , X86Op , O(F30000,90,_,_,_,_,_,_ ), 0 , 87 , 0 , 3195 , 30 , 0 ), // #493
- INST(Pavgb , ExtRm_P , O(000F00,E0,_,_,_,_,_,_ ), 0 , 4 , 0 , 6843 , 144, 87 ), // #494
- INST(Pavgusb , Ext3dNow , O(000F0F,BF,_,_,_,_,_,_ ), 0 , 88 , 0 , 2076 , 148, 51 ), // #495
- INST(Pavgw , ExtRm_P , O(000F00,E3,_,_,_,_,_,_ ), 0 , 4 , 0 , 6850 , 144, 87 ), // #496
+ INST(Pavgb , ExtRm_P , O(000F00,E0,_,_,_,_,_,_ ), 0 , 4 , 0 , 6843 , 145, 87 ), // #494
+ INST(Pavgusb , Ext3dNow , O(000F0F,BF,_,_,_,_,_,_ ), 0 , 88 , 0 , 2076 , 149, 51 ), // #495
+ INST(Pavgw , ExtRm_P , O(000F00,E3,_,_,_,_,_,_ ), 0 , 4 , 0 , 6850 , 145, 87 ), // #496
INST(Pblendvb , ExtRm_XMM0 , O(660F38,10,_,_,_,_,_,_ ), 0 , 2 , 0 , 6906 , 15 , 12 ), // #497
INST(Pblendw , ExtRmi , O(660F3A,0E,_,_,_,_,_,_ ), 0 , 8 , 0 , 6916 , 8 , 12 ), // #498
INST(Pclmulqdq , ExtRmi , O(660F3A,44,_,_,_,_,_,_ ), 0 , 8 , 0 , 7009 , 8 , 88 ), // #499
- INST(Pcmpeqb , ExtRm_P , O(000F00,74,_,_,_,_,_,_ ), 0 , 4 , 0 , 7041 , 147, 82 ), // #500
- INST(Pcmpeqd , ExtRm_P , O(000F00,76,_,_,_,_,_,_ ), 0 , 4 , 0 , 7050 , 147, 82 ), // #501
- INST(Pcmpeqq , ExtRm , O(660F38,29,_,_,_,_,_,_ ), 0 , 2 , 0 , 7059 , 149, 12 ), // #502
- INST(Pcmpeqw , ExtRm_P , O(000F00,75,_,_,_,_,_,_ ), 0 , 4 , 0 , 7068 , 147, 82 ), // #503
- INST(Pcmpestri , ExtRmi , O(660F3A,61,_,_,_,_,_,_ ), 0 , 8 , 0 , 7077 , 150, 89 ), // #504
- INST(Pcmpestrm , ExtRmi , O(660F3A,60,_,_,_,_,_,_ ), 0 , 8 , 0 , 7088 , 151, 89 ), // #505
- INST(Pcmpgtb , ExtRm_P , O(000F00,64,_,_,_,_,_,_ ), 0 , 4 , 0 , 7099 , 147, 82 ), // #506
- INST(Pcmpgtd , ExtRm_P , O(000F00,66,_,_,_,_,_,_ ), 0 , 4 , 0 , 7108 , 147, 82 ), // #507
- INST(Pcmpgtq , ExtRm , O(660F38,37,_,_,_,_,_,_ ), 0 , 2 , 0 , 7117 , 149, 44 ), // #508
- INST(Pcmpgtw , ExtRm_P , O(000F00,65,_,_,_,_,_,_ ), 0 , 4 , 0 , 7126 , 147, 82 ), // #509
- INST(Pcmpistri , ExtRmi , O(660F3A,63,_,_,_,_,_,_ ), 0 , 8 , 0 , 7135 , 152, 89 ), // #510
- INST(Pcmpistrm , ExtRmi , O(660F3A,62,_,_,_,_,_,_ ), 0 , 8 , 0 , 7146 , 153, 89 ), // #511
+ INST(Pcmpeqb , ExtRm_P , O(000F00,74,_,_,_,_,_,_ ), 0 , 4 , 0 , 7041 , 148, 82 ), // #500
+ INST(Pcmpeqd , ExtRm_P , O(000F00,76,_,_,_,_,_,_ ), 0 , 4 , 0 , 7050 , 148, 82 ), // #501
+ INST(Pcmpeqq , ExtRm , O(660F38,29,_,_,_,_,_,_ ), 0 , 2 , 0 , 7059 , 150, 12 ), // #502
+ INST(Pcmpeqw , ExtRm_P , O(000F00,75,_,_,_,_,_,_ ), 0 , 4 , 0 , 7068 , 148, 82 ), // #503
+ INST(Pcmpestri , ExtRmi , O(660F3A,61,_,_,_,_,_,_ ), 0 , 8 , 0 , 7077 , 151, 89 ), // #504
+ INST(Pcmpestrm , ExtRmi , O(660F3A,60,_,_,_,_,_,_ ), 0 , 8 , 0 , 7088 , 152, 89 ), // #505
+ INST(Pcmpgtb , ExtRm_P , O(000F00,64,_,_,_,_,_,_ ), 0 , 4 , 0 , 7099 , 148, 82 ), // #506
+ INST(Pcmpgtd , ExtRm_P , O(000F00,66,_,_,_,_,_,_ ), 0 , 4 , 0 , 7108 , 148, 82 ), // #507
+ INST(Pcmpgtq , ExtRm , O(660F38,37,_,_,_,_,_,_ ), 0 , 2 , 0 , 7117 , 150, 44 ), // #508
+ INST(Pcmpgtw , ExtRm_P , O(000F00,65,_,_,_,_,_,_ ), 0 , 4 , 0 , 7126 , 148, 82 ), // #509
+ INST(Pcmpistri , ExtRmi , O(660F3A,63,_,_,_,_,_,_ ), 0 , 8 , 0 , 7135 , 153, 89 ), // #510
+ INST(Pcmpistrm , ExtRmi , O(660F3A,62,_,_,_,_,_,_ ), 0 , 8 , 0 , 7146 , 154, 89 ), // #511
INST(Pconfig , X86Op , O(000F01,C5,_,_,_,_,_,_ ), 0 , 21 , 0 , 2084 , 30 , 90 ), // #512
INST(Pdep , VexRvm_Wx , V(F20F38,F5,_,0,x,_,_,_ ), 0 , 85 , 0 , 2092 , 10 , 85 ), // #513
INST(Pext , VexRvm_Wx , V(F30F38,F5,_,0,x,_,_,_ ), 0 , 89 , 0 , 2097 , 10 , 85 ), // #514
- INST(Pextrb , ExtExtract , O(000F3A,14,_,_,_,_,_,_ ), 0 , 86 , 0 , 7633 , 154, 12 ), // #515
+ INST(Pextrb , ExtExtract , O(000F3A,14,_,_,_,_,_,_ ), 0 , 86 , 0 , 7633 , 155, 12 ), // #515
INST(Pextrd , ExtExtract , O(000F3A,16,_,_,_,_,_,_ ), 0 , 86 , 0 , 7641 , 58 , 12 ), // #516
- INST(Pextrq , ExtExtract , O(000F3A,16,_,_,1,_,_,_ ), 0 , 90 , 0 , 7649 , 155, 12 ), // #517
- INST(Pextrw , ExtPextrw , O(000F00,C5,_,_,_,_,_,_ ), O(000F3A,15,_,_,_,_,_,_ ), 4 , 67 , 7657 , 156, 91 ), // #518
- INST(Pf2id , Ext3dNow , O(000F0F,1D,_,_,_,_,_,_ ), 0 , 88 , 0 , 2102 , 148, 51 ), // #519
- INST(Pf2iw , Ext3dNow , O(000F0F,1C,_,_,_,_,_,_ ), 0 , 88 , 0 , 2108 , 148, 92 ), // #520
- INST(Pfacc , Ext3dNow , O(000F0F,AE,_,_,_,_,_,_ ), 0 , 88 , 0 , 2114 , 148, 51 ), // #521
- INST(Pfadd , Ext3dNow , O(000F0F,9E,_,_,_,_,_,_ ), 0 , 88 , 0 , 2120 , 148, 51 ), // #522
- INST(Pfcmpeq , Ext3dNow , O(000F0F,B0,_,_,_,_,_,_ ), 0 , 88 , 0 , 2126 , 148, 51 ), // #523
- INST(Pfcmpge , Ext3dNow , O(000F0F,90,_,_,_,_,_,_ ), 0 , 88 , 0 , 2134 , 148, 51 ), // #524
- INST(Pfcmpgt , Ext3dNow , O(000F0F,A0,_,_,_,_,_,_ ), 0 , 88 , 0 , 2142 , 148, 51 ), // #525
- INST(Pfmax , Ext3dNow , O(000F0F,A4,_,_,_,_,_,_ ), 0 , 88 , 0 , 2150 , 148, 51 ), // #526
- INST(Pfmin , Ext3dNow , O(000F0F,94,_,_,_,_,_,_ ), 0 , 88 , 0 , 2156 , 148, 51 ), // #527
- INST(Pfmul , Ext3dNow , O(000F0F,B4,_,_,_,_,_,_ ), 0 , 88 , 0 , 2162 , 148, 51 ), // #528
- INST(Pfnacc , Ext3dNow , O(000F0F,8A,_,_,_,_,_,_ ), 0 , 88 , 0 , 2168 , 148, 92 ), // #529
- INST(Pfpnacc , Ext3dNow , O(000F0F,8E,_,_,_,_,_,_ ), 0 , 88 , 0 , 2175 , 148, 92 ), // #530
- INST(Pfrcp , Ext3dNow , O(000F0F,96,_,_,_,_,_,_ ), 0 , 88 , 0 , 2183 , 148, 51 ), // #531
- INST(Pfrcpit1 , Ext3dNow , O(000F0F,A6,_,_,_,_,_,_ ), 0 , 88 , 0 , 2189 , 148, 51 ), // #532
- INST(Pfrcpit2 , Ext3dNow , O(000F0F,B6,_,_,_,_,_,_ ), 0 , 88 , 0 , 2198 , 148, 51 ), // #533
- INST(Pfrcpv , Ext3dNow , O(000F0F,86,_,_,_,_,_,_ ), 0 , 88 , 0 , 2207 , 148, 93 ), // #534
- INST(Pfrsqit1 , Ext3dNow , O(000F0F,A7,_,_,_,_,_,_ ), 0 , 88 , 0 , 2214 , 148, 51 ), // #535
- INST(Pfrsqrt , Ext3dNow , O(000F0F,97,_,_,_,_,_,_ ), 0 , 88 , 0 , 2223 , 148, 51 ), // #536
- INST(Pfrsqrtv , Ext3dNow , O(000F0F,87,_,_,_,_,_,_ ), 0 , 88 , 0 , 2231 , 148, 93 ), // #537
- INST(Pfsub , Ext3dNow , O(000F0F,9A,_,_,_,_,_,_ ), 0 , 88 , 0 , 2240 , 148, 51 ), // #538
- INST(Pfsubr , Ext3dNow , O(000F0F,AA,_,_,_,_,_,_ ), 0 , 88 , 0 , 2246 , 148, 51 ), // #539
- INST(Phaddd , ExtRm_P , O(000F38,02,_,_,_,_,_,_ ), 0 , 84 , 0 , 7736 , 144, 86 ), // #540
- INST(Phaddsw , ExtRm_P , O(000F38,03,_,_,_,_,_,_ ), 0 , 84 , 0 , 7753 , 144, 86 ), // #541
- INST(Phaddw , ExtRm_P , O(000F38,01,_,_,_,_,_,_ ), 0 , 84 , 0 , 7822 , 144, 86 ), // #542
+ INST(Pextrq , ExtExtract , O(000F3A,16,_,_,1,_,_,_ ), 0 , 90 , 0 , 7649 , 156, 12 ), // #517
+ INST(Pextrw , ExtPextrw , O(000F00,C5,_,_,_,_,_,_ ), O(000F3A,15,_,_,_,_,_,_ ), 4 , 67 , 7657 , 157, 91 ), // #518
+ INST(Pf2id , Ext3dNow , O(000F0F,1D,_,_,_,_,_,_ ), 0 , 88 , 0 , 2102 , 149, 51 ), // #519
+ INST(Pf2iw , Ext3dNow , O(000F0F,1C,_,_,_,_,_,_ ), 0 , 88 , 0 , 2108 , 149, 92 ), // #520
+ INST(Pfacc , Ext3dNow , O(000F0F,AE,_,_,_,_,_,_ ), 0 , 88 , 0 , 2114 , 149, 51 ), // #521
+ INST(Pfadd , Ext3dNow , O(000F0F,9E,_,_,_,_,_,_ ), 0 , 88 , 0 , 2120 , 149, 51 ), // #522
+ INST(Pfcmpeq , Ext3dNow , O(000F0F,B0,_,_,_,_,_,_ ), 0 , 88 , 0 , 2126 , 149, 51 ), // #523
+ INST(Pfcmpge , Ext3dNow , O(000F0F,90,_,_,_,_,_,_ ), 0 , 88 , 0 , 2134 , 149, 51 ), // #524
+ INST(Pfcmpgt , Ext3dNow , O(000F0F,A0,_,_,_,_,_,_ ), 0 , 88 , 0 , 2142 , 149, 51 ), // #525
+ INST(Pfmax , Ext3dNow , O(000F0F,A4,_,_,_,_,_,_ ), 0 , 88 , 0 , 2150 , 149, 51 ), // #526
+ INST(Pfmin , Ext3dNow , O(000F0F,94,_,_,_,_,_,_ ), 0 , 88 , 0 , 2156 , 149, 51 ), // #527
+ INST(Pfmul , Ext3dNow , O(000F0F,B4,_,_,_,_,_,_ ), 0 , 88 , 0 , 2162 , 149, 51 ), // #528
+ INST(Pfnacc , Ext3dNow , O(000F0F,8A,_,_,_,_,_,_ ), 0 , 88 , 0 , 2168 , 149, 92 ), // #529
+ INST(Pfpnacc , Ext3dNow , O(000F0F,8E,_,_,_,_,_,_ ), 0 , 88 , 0 , 2175 , 149, 92 ), // #530
+ INST(Pfrcp , Ext3dNow , O(000F0F,96,_,_,_,_,_,_ ), 0 , 88 , 0 , 2183 , 149, 51 ), // #531
+ INST(Pfrcpit1 , Ext3dNow , O(000F0F,A6,_,_,_,_,_,_ ), 0 , 88 , 0 , 2189 , 149, 51 ), // #532
+ INST(Pfrcpit2 , Ext3dNow , O(000F0F,B6,_,_,_,_,_,_ ), 0 , 88 , 0 , 2198 , 149, 51 ), // #533
+ INST(Pfrcpv , Ext3dNow , O(000F0F,86,_,_,_,_,_,_ ), 0 , 88 , 0 , 2207 , 149, 93 ), // #534
+ INST(Pfrsqit1 , Ext3dNow , O(000F0F,A7,_,_,_,_,_,_ ), 0 , 88 , 0 , 2214 , 149, 51 ), // #535
+ INST(Pfrsqrt , Ext3dNow , O(000F0F,97,_,_,_,_,_,_ ), 0 , 88 , 0 , 2223 , 149, 51 ), // #536
+ INST(Pfrsqrtv , Ext3dNow , O(000F0F,87,_,_,_,_,_,_ ), 0 , 88 , 0 , 2231 , 149, 93 ), // #537
+ INST(Pfsub , Ext3dNow , O(000F0F,9A,_,_,_,_,_,_ ), 0 , 88 , 0 , 2240 , 149, 51 ), // #538
+ INST(Pfsubr , Ext3dNow , O(000F0F,AA,_,_,_,_,_,_ ), 0 , 88 , 0 , 2246 , 149, 51 ), // #539
+ INST(Phaddd , ExtRm_P , O(000F38,02,_,_,_,_,_,_ ), 0 , 84 , 0 , 7736 , 145, 86 ), // #540
+ INST(Phaddsw , ExtRm_P , O(000F38,03,_,_,_,_,_,_ ), 0 , 84 , 0 , 7753 , 145, 86 ), // #541
+ INST(Phaddw , ExtRm_P , O(000F38,01,_,_,_,_,_,_ ), 0 , 84 , 0 , 7822 , 145, 86 ), // #542
INST(Phminposuw , ExtRm , O(660F38,41,_,_,_,_,_,_ ), 0 , 2 , 0 , 7848 , 5 , 12 ), // #543
- INST(Phsubd , ExtRm_P , O(000F38,06,_,_,_,_,_,_ ), 0 , 84 , 0 , 7869 , 144, 86 ), // #544
- INST(Phsubsw , ExtRm_P , O(000F38,07,_,_,_,_,_,_ ), 0 , 84 , 0 , 7886 , 144, 86 ), // #545
- INST(Phsubw , ExtRm_P , O(000F38,05,_,_,_,_,_,_ ), 0 , 84 , 0 , 7895 , 144, 86 ), // #546
- INST(Pi2fd , Ext3dNow , O(000F0F,0D,_,_,_,_,_,_ ), 0 , 88 , 0 , 2253 , 148, 51 ), // #547
- INST(Pi2fw , Ext3dNow , O(000F0F,0C,_,_,_,_,_,_ ), 0 , 88 , 0 , 2259 , 148, 92 ), // #548
- INST(Pinsrb , ExtRmi , O(660F3A,20,_,_,_,_,_,_ ), 0 , 8 , 0 , 7912 , 157, 12 ), // #549
- INST(Pinsrd , ExtRmi , O(660F3A,22,_,_,_,_,_,_ ), 0 , 8 , 0 , 7920 , 158, 12 ), // #550
- INST(Pinsrq , ExtRmi , O(660F3A,22,_,_,1,_,_,_ ), 0 , 91 , 0 , 7928 , 159, 12 ), // #551
- INST(Pinsrw , ExtRmi_P , O(000F00,C4,_,_,_,_,_,_ ), 0 , 4 , 0 , 7936 , 160, 87 ), // #552
- INST(Pmaddubsw , ExtRm_P , O(000F38,04,_,_,_,_,_,_ ), 0 , 84 , 0 , 8106 , 144, 86 ), // #553
- INST(Pmaddwd , ExtRm_P , O(000F00,F5,_,_,_,_,_,_ ), 0 , 4 , 0 , 8117 , 144, 82 ), // #554
+ INST(Phsubd , ExtRm_P , O(000F38,06,_,_,_,_,_,_ ), 0 , 84 , 0 , 7869 , 145, 86 ), // #544
+ INST(Phsubsw , ExtRm_P , O(000F38,07,_,_,_,_,_,_ ), 0 , 84 , 0 , 7886 , 145, 86 ), // #545
+ INST(Phsubw , ExtRm_P , O(000F38,05,_,_,_,_,_,_ ), 0 , 84 , 0 , 7895 , 145, 86 ), // #546
+ INST(Pi2fd , Ext3dNow , O(000F0F,0D,_,_,_,_,_,_ ), 0 , 88 , 0 , 2253 , 149, 51 ), // #547
+ INST(Pi2fw , Ext3dNow , O(000F0F,0C,_,_,_,_,_,_ ), 0 , 88 , 0 , 2259 , 149, 92 ), // #548
+ INST(Pinsrb , ExtRmi , O(660F3A,20,_,_,_,_,_,_ ), 0 , 8 , 0 , 7912 , 158, 12 ), // #549
+ INST(Pinsrd , ExtRmi , O(660F3A,22,_,_,_,_,_,_ ), 0 , 8 , 0 , 7920 , 159, 12 ), // #550
+ INST(Pinsrq , ExtRmi , O(660F3A,22,_,_,1,_,_,_ ), 0 , 91 , 0 , 7928 , 160, 12 ), // #551
+ INST(Pinsrw , ExtRmi_P , O(000F00,C4,_,_,_,_,_,_ ), 0 , 4 , 0 , 7936 , 161, 87 ), // #552
+ INST(Pmaddubsw , ExtRm_P , O(000F38,04,_,_,_,_,_,_ ), 0 , 84 , 0 , 8106 , 145, 86 ), // #553
+ INST(Pmaddwd , ExtRm_P , O(000F00,F5,_,_,_,_,_,_ ), 0 , 4 , 0 , 8117 , 145, 82 ), // #554
INST(Pmaxsb , ExtRm , O(660F38,3C,_,_,_,_,_,_ ), 0 , 2 , 0 , 8148 , 11 , 12 ), // #555
INST(Pmaxsd , ExtRm , O(660F38,3D,_,_,_,_,_,_ ), 0 , 2 , 0 , 8156 , 11 , 12 ), // #556
- INST(Pmaxsw , ExtRm_P , O(000F00,EE,_,_,_,_,_,_ ), 0 , 4 , 0 , 8172 , 146, 87 ), // #557
- INST(Pmaxub , ExtRm_P , O(000F00,DE,_,_,_,_,_,_ ), 0 , 4 , 0 , 8180 , 146, 87 ), // #558
+ INST(Pmaxsw , ExtRm_P , O(000F00,EE,_,_,_,_,_,_ ), 0 , 4 , 0 , 8172 , 147, 87 ), // #557
+ INST(Pmaxub , ExtRm_P , O(000F00,DE,_,_,_,_,_,_ ), 0 , 4 , 0 , 8180 , 147, 87 ), // #558
INST(Pmaxud , ExtRm , O(660F38,3F,_,_,_,_,_,_ ), 0 , 2 , 0 , 8188 , 11 , 12 ), // #559
INST(Pmaxuw , ExtRm , O(660F38,3E,_,_,_,_,_,_ ), 0 , 2 , 0 , 8204 , 11 , 12 ), // #560
INST(Pminsb , ExtRm , O(660F38,38,_,_,_,_,_,_ ), 0 , 2 , 0 , 8212 , 11 , 12 ), // #561
INST(Pminsd , ExtRm , O(660F38,39,_,_,_,_,_,_ ), 0 , 2 , 0 , 8220 , 11 , 12 ), // #562
- INST(Pminsw , ExtRm_P , O(000F00,EA,_,_,_,_,_,_ ), 0 , 4 , 0 , 8236 , 146, 87 ), // #563
- INST(Pminub , ExtRm_P , O(000F00,DA,_,_,_,_,_,_ ), 0 , 4 , 0 , 8244 , 146, 87 ), // #564
+ INST(Pminsw , ExtRm_P , O(000F00,EA,_,_,_,_,_,_ ), 0 , 4 , 0 , 8236 , 147, 87 ), // #563
+ INST(Pminub , ExtRm_P , O(000F00,DA,_,_,_,_,_,_ ), 0 , 4 , 0 , 8244 , 147, 87 ), // #564
INST(Pminud , ExtRm , O(660F38,3B,_,_,_,_,_,_ ), 0 , 2 , 0 , 8252 , 11 , 12 ), // #565
INST(Pminuw , ExtRm , O(660F38,3A,_,_,_,_,_,_ ), 0 , 2 , 0 , 8268 , 11 , 12 ), // #566
- INST(Pmovmskb , ExtRm_P , O(000F00,D7,_,_,_,_,_,_ ), 0 , 4 , 0 , 8346 , 161, 87 ), // #567
+ INST(Pmovmskb , ExtRm_P , O(000F00,D7,_,_,_,_,_,_ ), 0 , 4 , 0 , 8346 , 162, 87 ), // #567
INST(Pmovsxbd , ExtRm , O(660F38,21,_,_,_,_,_,_ ), 0 , 2 , 0 , 8443 , 7 , 12 ), // #568
- INST(Pmovsxbq , ExtRm , O(660F38,22,_,_,_,_,_,_ ), 0 , 2 , 0 , 8453 , 162, 12 ), // #569
+ INST(Pmovsxbq , ExtRm , O(660F38,22,_,_,_,_,_,_ ), 0 , 2 , 0 , 8453 , 163, 12 ), // #569
INST(Pmovsxbw , ExtRm , O(660F38,20,_,_,_,_,_,_ ), 0 , 2 , 0 , 8463 , 6 , 12 ), // #570
INST(Pmovsxdq , ExtRm , O(660F38,25,_,_,_,_,_,_ ), 0 , 2 , 0 , 8473 , 6 , 12 ), // #571
INST(Pmovsxwd , ExtRm , O(660F38,23,_,_,_,_,_,_ ), 0 , 2 , 0 , 8483 , 6 , 12 ), // #572
INST(Pmovsxwq , ExtRm , O(660F38,24,_,_,_,_,_,_ ), 0 , 2 , 0 , 8493 , 7 , 12 ), // #573
INST(Pmovzxbd , ExtRm , O(660F38,31,_,_,_,_,_,_ ), 0 , 2 , 0 , 8580 , 7 , 12 ), // #574
- INST(Pmovzxbq , ExtRm , O(660F38,32,_,_,_,_,_,_ ), 0 , 2 , 0 , 8590 , 162, 12 ), // #575
+ INST(Pmovzxbq , ExtRm , O(660F38,32,_,_,_,_,_,_ ), 0 , 2 , 0 , 8590 , 163, 12 ), // #575
INST(Pmovzxbw , ExtRm , O(660F38,30,_,_,_,_,_,_ ), 0 , 2 , 0 , 8600 , 6 , 12 ), // #576
INST(Pmovzxdq , ExtRm , O(660F38,35,_,_,_,_,_,_ ), 0 , 2 , 0 , 8610 , 6 , 12 ), // #577
INST(Pmovzxwd , ExtRm , O(660F38,33,_,_,_,_,_,_ ), 0 , 2 , 0 , 8620 , 6 , 12 ), // #578
INST(Pmovzxwq , ExtRm , O(660F38,34,_,_,_,_,_,_ ), 0 , 2 , 0 , 8630 , 7 , 12 ), // #579
INST(Pmuldq , ExtRm , O(660F38,28,_,_,_,_,_,_ ), 0 , 2 , 0 , 8640 , 5 , 12 ), // #580
- INST(Pmulhrsw , ExtRm_P , O(000F38,0B,_,_,_,_,_,_ ), 0 , 84 , 0 , 8648 , 144, 86 ), // #581
- INST(Pmulhrw , Ext3dNow , O(000F0F,B7,_,_,_,_,_,_ ), 0 , 88 , 0 , 2265 , 148, 51 ), // #582
- INST(Pmulhuw , ExtRm_P , O(000F00,E4,_,_,_,_,_,_ ), 0 , 4 , 0 , 8658 , 144, 87 ), // #583
- INST(Pmulhw , ExtRm_P , O(000F00,E5,_,_,_,_,_,_ ), 0 , 4 , 0 , 8667 , 144, 82 ), // #584
+ INST(Pmulhrsw , ExtRm_P , O(000F38,0B,_,_,_,_,_,_ ), 0 , 84 , 0 , 8648 , 145, 86 ), // #581
+ INST(Pmulhrw , Ext3dNow , O(000F0F,B7,_,_,_,_,_,_ ), 0 , 88 , 0 , 2265 , 149, 51 ), // #582
+ INST(Pmulhuw , ExtRm_P , O(000F00,E4,_,_,_,_,_,_ ), 0 , 4 , 0 , 8658 , 145, 87 ), // #583
+ INST(Pmulhw , ExtRm_P , O(000F00,E5,_,_,_,_,_,_ ), 0 , 4 , 0 , 8667 , 145, 82 ), // #584
INST(Pmulld , ExtRm , O(660F38,40,_,_,_,_,_,_ ), 0 , 2 , 0 , 8675 , 5 , 12 ), // #585
- INST(Pmullw , ExtRm_P , O(000F00,D5,_,_,_,_,_,_ ), 0 , 4 , 0 , 8691 , 144, 82 ), // #586
- INST(Pmuludq , ExtRm_P , O(000F00,F4,_,_,_,_,_,_ ), 0 , 4 , 0 , 8714 , 144, 4 ), // #587
- INST(Pop , X86Pop , O(000000,8F,0,_,_,_,_,_ ), O(000000,58,_,_,_,_,_,_ ), 0 , 68 , 2273 , 163, 0 ), // #588
+ INST(Pmullw , ExtRm_P , O(000F00,D5,_,_,_,_,_,_ ), 0 , 4 , 0 , 8691 , 145, 82 ), // #586
+ INST(Pmuludq , ExtRm_P , O(000F00,F4,_,_,_,_,_,_ ), 0 , 4 , 0 , 8714 , 145, 4 ), // #587
+ INST(Pop , X86Pop , O(000000,8F,0,_,_,_,_,_ ), O(000000,58,_,_,_,_,_,_ ), 0 , 68 , 2273 , 164, 0 ), // #588
INST(Popa , X86Op , O(660000,61,_,_,_,_,_,_ ), 0 , 19 , 0 , 2277 , 80 , 0 ), // #589
INST(Popad , X86Op , O(000000,61,_,_,_,_,_,_ ), 0 , 0 , 0 , 2282 , 80 , 0 ), // #590
INST(Popcnt , X86Rm_Raw66H , O(F30F00,B8,_,_,x,_,_,_ ), 0 , 6 , 0 , 2288 , 22 , 94 ), // #591
INST(Popf , X86Op , O(660000,9D,_,_,_,_,_,_ ), 0 , 19 , 0 , 2295 , 30 , 95 ), // #592
INST(Popfd , X86Op , O(000000,9D,_,_,_,_,_,_ ), 0 , 0 , 0 , 2300 , 80 , 95 ), // #593
INST(Popfq , X86Op , O(000000,9D,_,_,_,_,_,_ ), 0 , 0 , 0 , 2306 , 33 , 95 ), // #594
- INST(Por , ExtRm_P , O(000F00,EB,_,_,_,_,_,_ ), 0 , 4 , 0 , 8759 , 146, 82 ), // #595
+ INST(Por , ExtRm_P , O(000F00,EB,_,_,_,_,_,_ ), 0 , 4 , 0 , 8759 , 147, 82 ), // #595
INST(Prefetch , X86M_Only , O(000F00,0D,0,_,_,_,_,_ ), 0 , 4 , 0 , 2312 , 31 , 51 ), // #596
INST(Prefetchnta , X86M_Only , O(000F00,18,0,_,_,_,_,_ ), 0 , 4 , 0 , 2321 , 31 , 77 ), // #597
INST(Prefetcht0 , X86M_Only , O(000F00,18,1,_,_,_,_,_ ), 0 , 29 , 0 , 2333 , 31 , 77 ), // #598
@@ -697,77 +697,77 @@ const InstDB::InstInfo InstDB::_instInfoTable[] = {
INST(Prefetcht2 , X86M_Only , O(000F00,18,3,_,_,_,_,_ ), 0 , 79 , 0 , 2355 , 31 , 77 ), // #600
INST(Prefetchw , X86M_Only , O(000F00,0D,1,_,_,_,_,_ ), 0 , 29 , 0 , 2366 , 31 , 96 ), // #601
INST(Prefetchwt1 , X86M_Only , O(000F00,0D,2,_,_,_,_,_ ), 0 , 77 , 0 , 2376 , 31 , 97 ), // #602
- INST(Psadbw , ExtRm_P , O(000F00,F6,_,_,_,_,_,_ ), 0 , 4 , 0 , 4272 , 144, 87 ), // #603
- INST(Pshufb , ExtRm_P , O(000F38,00,_,_,_,_,_,_ ), 0 , 84 , 0 , 9085 , 144, 86 ), // #604
+ INST(Psadbw , ExtRm_P , O(000F00,F6,_,_,_,_,_,_ ), 0 , 4 , 0 , 4272 , 145, 87 ), // #603
+ INST(Pshufb , ExtRm_P , O(000F38,00,_,_,_,_,_,_ ), 0 , 84 , 0 , 9085 , 145, 86 ), // #604
INST(Pshufd , ExtRmi , O(660F00,70,_,_,_,_,_,_ ), 0 , 3 , 0 , 9106 , 8 , 4 ), // #605
INST(Pshufhw , ExtRmi , O(F30F00,70,_,_,_,_,_,_ ), 0 , 6 , 0 , 9114 , 8 , 4 ), // #606
INST(Pshuflw , ExtRmi , O(F20F00,70,_,_,_,_,_,_ ), 0 , 5 , 0 , 9123 , 8 , 4 ), // #607
- INST(Pshufw , ExtRmi_P , O(000F00,70,_,_,_,_,_,_ ), 0 , 4 , 0 , 2388 , 164, 77 ), // #608
- INST(Psignb , ExtRm_P , O(000F38,08,_,_,_,_,_,_ ), 0 , 84 , 0 , 9132 , 144, 86 ), // #609
- INST(Psignd , ExtRm_P , O(000F38,0A,_,_,_,_,_,_ ), 0 , 84 , 0 , 9140 , 144, 86 ), // #610
- INST(Psignw , ExtRm_P , O(000F38,09,_,_,_,_,_,_ ), 0 , 84 , 0 , 9148 , 144, 86 ), // #611
- INST(Pslld , ExtRmRi_P , O(000F00,F2,_,_,_,_,_,_ ), O(000F00,72,6,_,_,_,_,_ ), 4 , 69 , 9156 , 165, 82 ), // #612
- INST(Pslldq , ExtRmRi , 0 , O(660F00,73,7,_,_,_,_,_ ), 0 , 70 , 9163 , 166, 4 ), // #613
- INST(Psllq , ExtRmRi_P , O(000F00,F3,_,_,_,_,_,_ ), O(000F00,73,6,_,_,_,_,_ ), 4 , 71 , 9171 , 165, 82 ), // #614
- INST(Psllw , ExtRmRi_P , O(000F00,F1,_,_,_,_,_,_ ), O(000F00,71,6,_,_,_,_,_ ), 4 , 72 , 9202 , 165, 82 ), // #615
+ INST(Pshufw , ExtRmi_P , O(000F00,70,_,_,_,_,_,_ ), 0 , 4 , 0 , 2388 , 165, 77 ), // #608
+ INST(Psignb , ExtRm_P , O(000F38,08,_,_,_,_,_,_ ), 0 , 84 , 0 , 9132 , 145, 86 ), // #609
+ INST(Psignd , ExtRm_P , O(000F38,0A,_,_,_,_,_,_ ), 0 , 84 , 0 , 9140 , 145, 86 ), // #610
+ INST(Psignw , ExtRm_P , O(000F38,09,_,_,_,_,_,_ ), 0 , 84 , 0 , 9148 , 145, 86 ), // #611
+ INST(Pslld , ExtRmRi_P , O(000F00,F2,_,_,_,_,_,_ ), O(000F00,72,6,_,_,_,_,_ ), 4 , 69 , 9156 , 166, 82 ), // #612
+ INST(Pslldq , ExtRmRi , 0 , O(660F00,73,7,_,_,_,_,_ ), 0 , 70 , 9163 , 167, 4 ), // #613
+ INST(Psllq , ExtRmRi_P , O(000F00,F3,_,_,_,_,_,_ ), O(000F00,73,6,_,_,_,_,_ ), 4 , 71 , 9171 , 166, 82 ), // #614
+ INST(Psllw , ExtRmRi_P , O(000F00,F1,_,_,_,_,_,_ ), O(000F00,71,6,_,_,_,_,_ ), 4 , 72 , 9202 , 166, 82 ), // #615
INST(Psmash , X86Op , O(F30F01,FF,_,_,_,_,_,_ ), 0 , 25 , 0 , 2395 , 33 , 98 ), // #616
- INST(Psrad , ExtRmRi_P , O(000F00,E2,_,_,_,_,_,_ ), O(000F00,72,4,_,_,_,_,_ ), 4 , 73 , 9209 , 165, 82 ), // #617
- INST(Psraw , ExtRmRi_P , O(000F00,E1,_,_,_,_,_,_ ), O(000F00,71,4,_,_,_,_,_ ), 4 , 74 , 9247 , 165, 82 ), // #618
- INST(Psrld , ExtRmRi_P , O(000F00,D2,_,_,_,_,_,_ ), O(000F00,72,2,_,_,_,_,_ ), 4 , 75 , 9254 , 165, 82 ), // #619
- INST(Psrldq , ExtRmRi , 0 , O(660F00,73,3,_,_,_,_,_ ), 0 , 76 , 9261 , 166, 4 ), // #620
- INST(Psrlq , ExtRmRi_P , O(000F00,D3,_,_,_,_,_,_ ), O(000F00,73,2,_,_,_,_,_ ), 4 , 77 , 9269 , 165, 82 ), // #621
- INST(Psrlw , ExtRmRi_P , O(000F00,D1,_,_,_,_,_,_ ), O(000F00,71,2,_,_,_,_,_ ), 4 , 78 , 9300 , 165, 82 ), // #622
- INST(Psubb , ExtRm_P , O(000F00,F8,_,_,_,_,_,_ ), 0 , 4 , 0 , 9307 , 147, 82 ), // #623
- INST(Psubd , ExtRm_P , O(000F00,FA,_,_,_,_,_,_ ), 0 , 4 , 0 , 9314 , 147, 82 ), // #624
- INST(Psubq , ExtRm_P , O(000F00,FB,_,_,_,_,_,_ ), 0 , 4 , 0 , 9321 , 147, 4 ), // #625
- INST(Psubsb , ExtRm_P , O(000F00,E8,_,_,_,_,_,_ ), 0 , 4 , 0 , 9328 , 147, 82 ), // #626
- INST(Psubsw , ExtRm_P , O(000F00,E9,_,_,_,_,_,_ ), 0 , 4 , 0 , 9336 , 147, 82 ), // #627
- INST(Psubusb , ExtRm_P , O(000F00,D8,_,_,_,_,_,_ ), 0 , 4 , 0 , 9344 , 147, 82 ), // #628
- INST(Psubusw , ExtRm_P , O(000F00,D9,_,_,_,_,_,_ ), 0 , 4 , 0 , 9353 , 147, 82 ), // #629
- INST(Psubw , ExtRm_P , O(000F00,F9,_,_,_,_,_,_ ), 0 , 4 , 0 , 9362 , 147, 82 ), // #630
- INST(Pswapd , Ext3dNow , O(000F0F,BB,_,_,_,_,_,_ ), 0 , 88 , 0 , 2402 , 148, 92 ), // #631
+ INST(Psrad , ExtRmRi_P , O(000F00,E2,_,_,_,_,_,_ ), O(000F00,72,4,_,_,_,_,_ ), 4 , 73 , 9209 , 166, 82 ), // #617
+ INST(Psraw , ExtRmRi_P , O(000F00,E1,_,_,_,_,_,_ ), O(000F00,71,4,_,_,_,_,_ ), 4 , 74 , 9247 , 166, 82 ), // #618
+ INST(Psrld , ExtRmRi_P , O(000F00,D2,_,_,_,_,_,_ ), O(000F00,72,2,_,_,_,_,_ ), 4 , 75 , 9254 , 166, 82 ), // #619
+ INST(Psrldq , ExtRmRi , 0 , O(660F00,73,3,_,_,_,_,_ ), 0 , 76 , 9261 , 167, 4 ), // #620
+ INST(Psrlq , ExtRmRi_P , O(000F00,D3,_,_,_,_,_,_ ), O(000F00,73,2,_,_,_,_,_ ), 4 , 77 , 9269 , 166, 82 ), // #621
+ INST(Psrlw , ExtRmRi_P , O(000F00,D1,_,_,_,_,_,_ ), O(000F00,71,2,_,_,_,_,_ ), 4 , 78 , 9300 , 166, 82 ), // #622
+ INST(Psubb , ExtRm_P , O(000F00,F8,_,_,_,_,_,_ ), 0 , 4 , 0 , 9307 , 148, 82 ), // #623
+ INST(Psubd , ExtRm_P , O(000F00,FA,_,_,_,_,_,_ ), 0 , 4 , 0 , 9314 , 148, 82 ), // #624
+ INST(Psubq , ExtRm_P , O(000F00,FB,_,_,_,_,_,_ ), 0 , 4 , 0 , 9321 , 148, 4 ), // #625
+ INST(Psubsb , ExtRm_P , O(000F00,E8,_,_,_,_,_,_ ), 0 , 4 , 0 , 9328 , 148, 82 ), // #626
+ INST(Psubsw , ExtRm_P , O(000F00,E9,_,_,_,_,_,_ ), 0 , 4 , 0 , 9336 , 148, 82 ), // #627
+ INST(Psubusb , ExtRm_P , O(000F00,D8,_,_,_,_,_,_ ), 0 , 4 , 0 , 9344 , 148, 82 ), // #628
+ INST(Psubusw , ExtRm_P , O(000F00,D9,_,_,_,_,_,_ ), 0 , 4 , 0 , 9353 , 148, 82 ), // #629
+ INST(Psubw , ExtRm_P , O(000F00,F9,_,_,_,_,_,_ ), 0 , 4 , 0 , 9362 , 148, 82 ), // #630
+ INST(Pswapd , Ext3dNow , O(000F0F,BB,_,_,_,_,_,_ ), 0 , 88 , 0 , 2402 , 149, 92 ), // #631
INST(Ptest , ExtRm , O(660F38,17,_,_,_,_,_,_ ), 0 , 2 , 0 , 9391 , 5 , 99 ), // #632
- INST(Ptwrite , X86M , O(F30F00,AE,4,_,_,_,_,_ ), 0 , 92 , 0 , 2409 , 167, 100), // #633
- INST(Punpckhbw , ExtRm_P , O(000F00,68,_,_,_,_,_,_ ), 0 , 4 , 0 , 9474 , 144, 82 ), // #634
- INST(Punpckhdq , ExtRm_P , O(000F00,6A,_,_,_,_,_,_ ), 0 , 4 , 0 , 9485 , 144, 82 ), // #635
+ INST(Ptwrite , X86M , O(F30F00,AE,4,_,_,_,_,_ ), 0 , 92 , 0 , 2409 , 168, 100), // #633
+ INST(Punpckhbw , ExtRm_P , O(000F00,68,_,_,_,_,_,_ ), 0 , 4 , 0 , 9474 , 145, 82 ), // #634
+ INST(Punpckhdq , ExtRm_P , O(000F00,6A,_,_,_,_,_,_ ), 0 , 4 , 0 , 9485 , 145, 82 ), // #635
INST(Punpckhqdq , ExtRm , O(660F00,6D,_,_,_,_,_,_ ), 0 , 3 , 0 , 9496 , 5 , 4 ), // #636
- INST(Punpckhwd , ExtRm_P , O(000F00,69,_,_,_,_,_,_ ), 0 , 4 , 0 , 9508 , 144, 82 ), // #637
- INST(Punpcklbw , ExtRm_P , O(000F00,60,_,_,_,_,_,_ ), 0 , 4 , 0 , 9519 , 168, 82 ), // #638
- INST(Punpckldq , ExtRm_P , O(000F00,62,_,_,_,_,_,_ ), 0 , 4 , 0 , 9530 , 168, 82 ), // #639
+ INST(Punpckhwd , ExtRm_P , O(000F00,69,_,_,_,_,_,_ ), 0 , 4 , 0 , 9508 , 145, 82 ), // #637
+ INST(Punpcklbw , ExtRm_P , O(000F00,60,_,_,_,_,_,_ ), 0 , 4 , 0 , 9519 , 169, 82 ), // #638
+ INST(Punpckldq , ExtRm_P , O(000F00,62,_,_,_,_,_,_ ), 0 , 4 , 0 , 9530 , 169, 82 ), // #639
INST(Punpcklqdq , ExtRm , O(660F00,6C,_,_,_,_,_,_ ), 0 , 3 , 0 , 9541 , 5 , 4 ), // #640
- INST(Punpcklwd , ExtRm_P , O(000F00,61,_,_,_,_,_,_ ), 0 , 4 , 0 , 9553 , 168, 82 ), // #641
- INST(Push , X86Push , O(000000,FF,6,_,_,_,_,_ ), O(000000,50,_,_,_,_,_,_ ), 32 , 79 , 2417 , 169, 0 ), // #642
+ INST(Punpcklwd , ExtRm_P , O(000F00,61,_,_,_,_,_,_ ), 0 , 4 , 0 , 9553 , 169, 82 ), // #641
+ INST(Push , X86Push , O(000000,FF,6,_,_,_,_,_ ), O(000000,50,_,_,_,_,_,_ ), 32 , 79 , 2417 , 170, 0 ), // #642
INST(Pusha , X86Op , O(660000,60,_,_,_,_,_,_ ), 0 , 19 , 0 , 2422 , 80 , 0 ), // #643
INST(Pushad , X86Op , O(000000,60,_,_,_,_,_,_ ), 0 , 0 , 0 , 2428 , 80 , 0 ), // #644
INST(Pushf , X86Op , O(660000,9C,_,_,_,_,_,_ ), 0 , 19 , 0 , 2435 , 30 , 101), // #645
INST(Pushfd , X86Op , O(000000,9C,_,_,_,_,_,_ ), 0 , 0 , 0 , 2441 , 80 , 101), // #646
INST(Pushfq , X86Op , O(000000,9C,_,_,_,_,_,_ ), 0 , 0 , 0 , 2448 , 33 , 101), // #647
INST(Pvalidate , X86Op , O(F20F01,FF,_,_,_,_,_,_ ), 0 , 93 , 0 , 2455 , 30 , 102), // #648
- INST(Pxor , ExtRm_P , O(000F00,EF,_,_,_,_,_,_ ), 0 , 4 , 0 , 9564 , 147, 82 ), // #649
- INST(Rcl , X86Rot , O(000000,D0,2,_,x,_,_,_ ), 0 , 1 , 0 , 2465 , 170, 103), // #650
+ INST(Pxor , ExtRm_P , O(000F00,EF,_,_,_,_,_,_ ), 0 , 4 , 0 , 9564 , 148, 82 ), // #649
+ INST(Rcl , X86Rot , O(000000,D0,2,_,x,_,_,_ ), 0 , 1 , 0 , 2465 , 171, 103), // #650
INST(Rcpps , ExtRm , O(000F00,53,_,_,_,_,_,_ ), 0 , 4 , 0 , 9692 , 5 , 5 ), // #651
INST(Rcpss , ExtRm , O(F30F00,53,_,_,_,_,_,_ ), 0 , 6 , 0 , 9699 , 7 , 5 ), // #652
- INST(Rcr , X86Rot , O(000000,D0,3,_,x,_,_,_ ), 0 , 76 , 0 , 2469 , 170, 103), // #653
- INST(Rdfsbase , X86M , O(F30F00,AE,0,_,x,_,_,_ ), 0 , 6 , 0 , 2473 , 171, 104), // #654
- INST(Rdgsbase , X86M , O(F30F00,AE,1,_,x,_,_,_ ), 0 , 94 , 0 , 2482 , 171, 104), // #655
- INST(Rdmsr , X86Op , O(000F00,32,_,_,_,_,_,_ ), 0 , 4 , 0 , 2491 , 172, 105), // #656
- INST(Rdpid , X86R_Native , O(F30F00,C7,7,_,_,_,_,_ ), 0 , 95 , 0 , 2497 , 173, 106), // #657
- INST(Rdpkru , X86Op , O(000F01,EE,_,_,_,_,_,_ ), 0 , 21 , 0 , 2503 , 172, 107), // #658
- INST(Rdpmc , X86Op , O(000F00,33,_,_,_,_,_,_ ), 0 , 4 , 0 , 2510 , 172, 0 ), // #659
- INST(Rdpru , X86Op , O(000F01,FD,_,_,_,_,_,_ ), 0 , 21 , 0 , 2516 , 172, 108), // #660
+ INST(Rcr , X86Rot , O(000000,D0,3,_,x,_,_,_ ), 0 , 76 , 0 , 2469 , 171, 103), // #653
+ INST(Rdfsbase , X86M , O(F30F00,AE,0,_,x,_,_,_ ), 0 , 6 , 0 , 2473 , 172, 104), // #654
+ INST(Rdgsbase , X86M , O(F30F00,AE,1,_,x,_,_,_ ), 0 , 94 , 0 , 2482 , 172, 104), // #655
+ INST(Rdmsr , X86Op , O(000F00,32,_,_,_,_,_,_ ), 0 , 4 , 0 , 2491 , 173, 105), // #656
+ INST(Rdpid , X86R_Native , O(F30F00,C7,7,_,_,_,_,_ ), 0 , 95 , 0 , 2497 , 174, 106), // #657
+ INST(Rdpkru , X86Op , O(000F01,EE,_,_,_,_,_,_ ), 0 , 21 , 0 , 2503 , 173, 107), // #658
+ INST(Rdpmc , X86Op , O(000F00,33,_,_,_,_,_,_ ), 0 , 4 , 0 , 2510 , 173, 0 ), // #659
+ INST(Rdpru , X86Op , O(000F01,FD,_,_,_,_,_,_ ), 0 , 21 , 0 , 2516 , 173, 108), // #660
INST(Rdrand , X86M , O(000F00,C7,6,_,x,_,_,_ ), 0 , 81 , 0 , 2522 , 23 , 109), // #661
INST(Rdseed , X86M , O(000F00,C7,7,_,x,_,_,_ ), 0 , 22 , 0 , 2529 , 23 , 110), // #662
INST(Rdsspd , X86M , O(F30F00,1E,1,_,_,_,_,_ ), 0 , 94 , 0 , 2536 , 75 , 56 ), // #663
INST(Rdsspq , X86M , O(F30F00,1E,1,_,_,_,_,_ ), 0 , 94 , 0 , 2543 , 76 , 56 ), // #664
INST(Rdtsc , X86Op , O(000F00,31,_,_,_,_,_,_ ), 0 , 4 , 0 , 2550 , 28 , 111), // #665
- INST(Rdtscp , X86Op , O(000F01,F9,_,_,_,_,_,_ ), 0 , 21 , 0 , 2556 , 172, 112), // #666
- INST(Ret , X86Ret , O(000000,C2,_,_,_,_,_,_ ), 0 , 0 , 0 , 3072 , 174, 0 ), // #667
- INST(Retf , X86Ret , O(000000,CA,_,_,x,_,_,_ ), 0 , 0 , 0 , 2563 , 175, 0 ), // #668
+ INST(Rdtscp , X86Op , O(000F01,F9,_,_,_,_,_,_ ), 0 , 21 , 0 , 2556 , 173, 112), // #666
+ INST(Ret , X86Ret , O(000000,C2,_,_,_,_,_,_ ), 0 , 0 , 0 , 3072 , 175, 0 ), // #667
+ INST(Retf , X86Ret , O(000000,CA,_,_,x,_,_,_ ), 0 , 0 , 0 , 2563 , 176, 0 ), // #668
INST(Rmpadjust , X86Op , O(F30F01,FE,_,_,_,_,_,_ ), 0 , 25 , 0 , 2568 , 33 , 98 ), // #669
INST(Rmpupdate , X86Op , O(F20F01,FE,_,_,_,_,_,_ ), 0 , 93 , 0 , 2578 , 33 , 98 ), // #670
- INST(Rol , X86Rot , O(000000,D0,0,_,x,_,_,_ ), 0 , 0 , 0 , 2588 , 170, 113), // #671
- INST(Ror , X86Rot , O(000000,D0,1,_,x,_,_,_ ), 0 , 31 , 0 , 2592 , 170, 113), // #672
- INST(Rorx , VexRmi_Wx , V(F20F3A,F0,_,0,x,_,_,_ ), 0 , 96 , 0 , 2596 , 176, 85 ), // #673
+ INST(Rol , X86Rot , O(000000,D0,0,_,x,_,_,_ ), 0 , 0 , 0 , 2588 , 171, 113), // #671
+ INST(Ror , X86Rot , O(000000,D0,1,_,x,_,_,_ ), 0 , 31 , 0 , 2592 , 171, 113), // #672
+ INST(Rorx , VexRmi_Wx , V(F20F3A,F0,_,0,x,_,_,_ ), 0 , 96 , 0 , 2596 , 177, 85 ), // #673
INST(Roundpd , ExtRmi , O(660F3A,09,_,_,_,_,_,_ ), 0 , 8 , 0 , 9794 , 8 , 12 ), // #674
INST(Roundps , ExtRmi , O(660F3A,08,_,_,_,_,_,_ ), 0 , 8 , 0 , 9803 , 8 , 12 ), // #675
INST(Roundsd , ExtRmi , O(660F3A,0B,_,_,_,_,_,_ ), 0 , 8 , 0 , 9812 , 37 , 12 ), // #676
@@ -776,46 +776,46 @@ const InstDB::InstInfo InstDB::_instInfoTable[] = {
INST(Rsqrtps , ExtRm , O(000F00,52,_,_,_,_,_,_ ), 0 , 4 , 0 , 9918 , 5 , 5 ), // #679
INST(Rsqrtss , ExtRm , O(F30F00,52,_,_,_,_,_,_ ), 0 , 6 , 0 , 9927 , 7 , 5 ), // #680
INST(Rstorssp , X86M_Only , O(F30F00,01,5,_,_,_,_,_ ), 0 , 64 , 0 , 2605 , 32 , 24 ), // #681
- INST(Sahf , X86Op , O(000000,9E,_,_,_,_,_,_ ), 0 , 0 , 0 , 2614 , 95 , 114), // #682
- INST(Sal , X86Rot , O(000000,D0,4,_,x,_,_,_ ), 0 , 9 , 0 , 2619 , 170, 1 ), // #683
- INST(Sar , X86Rot , O(000000,D0,7,_,x,_,_,_ ), 0 , 27 , 0 , 2623 , 170, 1 ), // #684
+ INST(Sahf , X86Op , O(000000,9E,_,_,_,_,_,_ ), 0 , 0 , 0 , 2614 , 96 , 114), // #682
+ INST(Sal , X86Rot , O(000000,D0,4,_,x,_,_,_ ), 0 , 9 , 0 , 2619 , 171, 1 ), // #683
+ INST(Sar , X86Rot , O(000000,D0,7,_,x,_,_,_ ), 0 , 27 , 0 , 2623 , 171, 1 ), // #684
INST(Sarx , VexRmv_Wx , V(F30F38,F7,_,0,x,_,_,_ ), 0 , 89 , 0 , 2627 , 13 , 85 ), // #685
INST(Saveprevssp , X86Op , O(F30F01,EA,_,_,_,_,_,_ ), 0 , 25 , 0 , 2632 , 30 , 24 ), // #686
- INST(Sbb , X86Arith , O(000000,18,3,_,x,_,_,_ ), 0 , 76 , 0 , 2644 , 177, 2 ), // #687
- INST(Scas , X86StrRm , O(000000,AE,_,_,_,_,_,_ ), 0 , 0 , 0 , 2648 , 178, 37 ), // #688
+ INST(Sbb , X86Arith , O(000000,18,3,_,x,_,_,_ ), 0 , 76 , 0 , 2644 , 178, 2 ), // #687
+ INST(Scas , X86StrRm , O(000000,AE,_,_,_,_,_,_ ), 0 , 0 , 0 , 2648 , 179, 37 ), // #688
INST(Senduipi , X86M_NoSize , O(F30F00,C7,6,_,_,_,_,_ ), 0 , 24 , 0 , 2653 , 76 , 25 ), // #689
INST(Serialize , X86Op , O(000F01,E8,_,_,_,_,_,_ ), 0 , 21 , 0 , 2662 , 30 , 115), // #690
- INST(Seta , X86Set , O(000F00,97,_,_,_,_,_,_ ), 0 , 4 , 0 , 2672 , 179, 59 ), // #691
- INST(Setae , X86Set , O(000F00,93,_,_,_,_,_,_ ), 0 , 4 , 0 , 2677 , 179, 60 ), // #692
- INST(Setb , X86Set , O(000F00,92,_,_,_,_,_,_ ), 0 , 4 , 0 , 2683 , 179, 60 ), // #693
- INST(Setbe , X86Set , O(000F00,96,_,_,_,_,_,_ ), 0 , 4 , 0 , 2688 , 179, 59 ), // #694
- INST(Setc , X86Set , O(000F00,92,_,_,_,_,_,_ ), 0 , 4 , 0 , 2694 , 179, 60 ), // #695
- INST(Sete , X86Set , O(000F00,94,_,_,_,_,_,_ ), 0 , 4 , 0 , 2699 , 179, 61 ), // #696
- INST(Setg , X86Set , O(000F00,9F,_,_,_,_,_,_ ), 0 , 4 , 0 , 2704 , 179, 62 ), // #697
- INST(Setge , X86Set , O(000F00,9D,_,_,_,_,_,_ ), 0 , 4 , 0 , 2709 , 179, 63 ), // #698
- INST(Setl , X86Set , O(000F00,9C,_,_,_,_,_,_ ), 0 , 4 , 0 , 2715 , 179, 63 ), // #699
- INST(Setle , X86Set , O(000F00,9E,_,_,_,_,_,_ ), 0 , 4 , 0 , 2720 , 179, 62 ), // #700
- INST(Setna , X86Set , O(000F00,96,_,_,_,_,_,_ ), 0 , 4 , 0 , 2726 , 179, 59 ), // #701
- INST(Setnae , X86Set , O(000F00,92,_,_,_,_,_,_ ), 0 , 4 , 0 , 2732 , 179, 60 ), // #702
- INST(Setnb , X86Set , O(000F00,93,_,_,_,_,_,_ ), 0 , 4 , 0 , 2739 , 179, 60 ), // #703
- INST(Setnbe , X86Set , O(000F00,97,_,_,_,_,_,_ ), 0 , 4 , 0 , 2745 , 179, 59 ), // #704
- INST(Setnc , X86Set , O(000F00,93,_,_,_,_,_,_ ), 0 , 4 , 0 , 2752 , 179, 60 ), // #705
- INST(Setne , X86Set , O(000F00,95,_,_,_,_,_,_ ), 0 , 4 , 0 , 2758 , 179, 61 ), // #706
- INST(Setng , X86Set , O(000F00,9E,_,_,_,_,_,_ ), 0 , 4 , 0 , 2764 , 179, 62 ), // #707
- INST(Setnge , X86Set , O(000F00,9C,_,_,_,_,_,_ ), 0 , 4 , 0 , 2770 , 179, 63 ), // #708
- INST(Setnl , X86Set , O(000F00,9D,_,_,_,_,_,_ ), 0 , 4 , 0 , 2777 , 179, 63 ), // #709
- INST(Setnle , X86Set , O(000F00,9F,_,_,_,_,_,_ ), 0 , 4 , 0 , 2783 , 179, 62 ), // #710
- INST(Setno , X86Set , O(000F00,91,_,_,_,_,_,_ ), 0 , 4 , 0 , 2790 , 179, 57 ), // #711
- INST(Setnp , X86Set , O(000F00,9B,_,_,_,_,_,_ ), 0 , 4 , 0 , 2796 , 179, 64 ), // #712
- INST(Setns , X86Set , O(000F00,99,_,_,_,_,_,_ ), 0 , 4 , 0 , 2802 , 179, 65 ), // #713
- INST(Setnz , X86Set , O(000F00,95,_,_,_,_,_,_ ), 0 , 4 , 0 , 2808 , 179, 61 ), // #714
- INST(Seto , X86Set , O(000F00,90,_,_,_,_,_,_ ), 0 , 4 , 0 , 2814 , 179, 57 ), // #715
- INST(Setp , X86Set , O(000F00,9A,_,_,_,_,_,_ ), 0 , 4 , 0 , 2819 , 179, 64 ), // #716
- INST(Setpe , X86Set , O(000F00,9A,_,_,_,_,_,_ ), 0 , 4 , 0 , 2824 , 179, 64 ), // #717
- INST(Setpo , X86Set , O(000F00,9B,_,_,_,_,_,_ ), 0 , 4 , 0 , 2830 , 179, 64 ), // #718
- INST(Sets , X86Set , O(000F00,98,_,_,_,_,_,_ ), 0 , 4 , 0 , 2836 , 179, 65 ), // #719
+ INST(Seta , X86Set , O(000F00,97,_,_,_,_,_,_ ), 0 , 4 , 0 , 2672 , 180, 59 ), // #691
+ INST(Setae , X86Set , O(000F00,93,_,_,_,_,_,_ ), 0 , 4 , 0 , 2677 , 180, 60 ), // #692
+ INST(Setb , X86Set , O(000F00,92,_,_,_,_,_,_ ), 0 , 4 , 0 , 2683 , 180, 60 ), // #693
+ INST(Setbe , X86Set , O(000F00,96,_,_,_,_,_,_ ), 0 , 4 , 0 , 2688 , 180, 59 ), // #694
+ INST(Setc , X86Set , O(000F00,92,_,_,_,_,_,_ ), 0 , 4 , 0 , 2694 , 180, 60 ), // #695
+ INST(Sete , X86Set , O(000F00,94,_,_,_,_,_,_ ), 0 , 4 , 0 , 2699 , 180, 61 ), // #696
+ INST(Setg , X86Set , O(000F00,9F,_,_,_,_,_,_ ), 0 , 4 , 0 , 2704 , 180, 62 ), // #697
+ INST(Setge , X86Set , O(000F00,9D,_,_,_,_,_,_ ), 0 , 4 , 0 , 2709 , 180, 63 ), // #698
+ INST(Setl , X86Set , O(000F00,9C,_,_,_,_,_,_ ), 0 , 4 , 0 , 2715 , 180, 63 ), // #699
+ INST(Setle , X86Set , O(000F00,9E,_,_,_,_,_,_ ), 0 , 4 , 0 , 2720 , 180, 62 ), // #700
+ INST(Setna , X86Set , O(000F00,96,_,_,_,_,_,_ ), 0 , 4 , 0 , 2726 , 180, 59 ), // #701
+ INST(Setnae , X86Set , O(000F00,92,_,_,_,_,_,_ ), 0 , 4 , 0 , 2732 , 180, 60 ), // #702
+ INST(Setnb , X86Set , O(000F00,93,_,_,_,_,_,_ ), 0 , 4 , 0 , 2739 , 180, 60 ), // #703
+ INST(Setnbe , X86Set , O(000F00,97,_,_,_,_,_,_ ), 0 , 4 , 0 , 2745 , 180, 59 ), // #704
+ INST(Setnc , X86Set , O(000F00,93,_,_,_,_,_,_ ), 0 , 4 , 0 , 2752 , 180, 60 ), // #705
+ INST(Setne , X86Set , O(000F00,95,_,_,_,_,_,_ ), 0 , 4 , 0 , 2758 , 180, 61 ), // #706
+ INST(Setng , X86Set , O(000F00,9E,_,_,_,_,_,_ ), 0 , 4 , 0 , 2764 , 180, 62 ), // #707
+ INST(Setnge , X86Set , O(000F00,9C,_,_,_,_,_,_ ), 0 , 4 , 0 , 2770 , 180, 63 ), // #708
+ INST(Setnl , X86Set , O(000F00,9D,_,_,_,_,_,_ ), 0 , 4 , 0 , 2777 , 180, 63 ), // #709
+ INST(Setnle , X86Set , O(000F00,9F,_,_,_,_,_,_ ), 0 , 4 , 0 , 2783 , 180, 62 ), // #710
+ INST(Setno , X86Set , O(000F00,91,_,_,_,_,_,_ ), 0 , 4 , 0 , 2790 , 180, 57 ), // #711
+ INST(Setnp , X86Set , O(000F00,9B,_,_,_,_,_,_ ), 0 , 4 , 0 , 2796 , 180, 64 ), // #712
+ INST(Setns , X86Set , O(000F00,99,_,_,_,_,_,_ ), 0 , 4 , 0 , 2802 , 180, 65 ), // #713
+ INST(Setnz , X86Set , O(000F00,95,_,_,_,_,_,_ ), 0 , 4 , 0 , 2808 , 180, 61 ), // #714
+ INST(Seto , X86Set , O(000F00,90,_,_,_,_,_,_ ), 0 , 4 , 0 , 2814 , 180, 57 ), // #715
+ INST(Setp , X86Set , O(000F00,9A,_,_,_,_,_,_ ), 0 , 4 , 0 , 2819 , 180, 64 ), // #716
+ INST(Setpe , X86Set , O(000F00,9A,_,_,_,_,_,_ ), 0 , 4 , 0 , 2824 , 180, 64 ), // #717
+ INST(Setpo , X86Set , O(000F00,9B,_,_,_,_,_,_ ), 0 , 4 , 0 , 2830 , 180, 64 ), // #718
+ INST(Sets , X86Set , O(000F00,98,_,_,_,_,_,_ ), 0 , 4 , 0 , 2836 , 180, 65 ), // #719
INST(Setssbsy , X86Op , O(F30F01,E8,_,_,_,_,_,_ ), 0 , 25 , 0 , 2841 , 30 , 56 ), // #720
- INST(Setz , X86Set , O(000F00,94,_,_,_,_,_,_ ), 0 , 4 , 0 , 2850 , 179, 61 ), // #721
+ INST(Setz , X86Set , O(000F00,94,_,_,_,_,_,_ ), 0 , 4 , 0 , 2850 , 180, 61 ), // #721
INST(Sfence , X86Fence , O(000F00,AE,7,_,_,_,_,_ ), 0 , 22 , 0 , 2855 , 30 , 77 ), // #722
INST(Sgdt , X86M_Only , O(000F00,01,0,_,_,_,_,_ ), 0 , 4 , 0 , 2862 , 31 , 0 ), // #723
INST(Sha1msg1 , ExtRm , O(000F38,C9,_,_,_,_,_,_ ), 0 , 84 , 0 , 2867 , 5 , 116), // #724
@@ -825,19 +825,19 @@ const InstDB::InstInfo InstDB::_instInfoTable[] = {
INST(Sha256msg1 , ExtRm , O(000F38,CC,_,_,_,_,_,_ ), 0 , 84 , 0 , 2905 , 5 , 116), // #728
INST(Sha256msg2 , ExtRm , O(000F38,CD,_,_,_,_,_,_ ), 0 , 84 , 0 , 2916 , 5 , 116), // #729
INST(Sha256rnds2 , ExtRm_XMM0 , O(000F38,CB,_,_,_,_,_,_ ), 0 , 84 , 0 , 2927 , 15 , 116), // #730
- INST(Shl , X86Rot , O(000000,D0,4,_,x,_,_,_ ), 0 , 9 , 0 , 2939 , 170, 1 ), // #731
- INST(Shld , X86ShldShrd , O(000F00,A4,_,_,x,_,_,_ ), 0 , 4 , 0 , 8963 , 180, 1 ), // #732
+ INST(Shl , X86Rot , O(000000,D0,4,_,x,_,_,_ ), 0 , 9 , 0 , 2939 , 171, 1 ), // #731
+ INST(Shld , X86ShldShrd , O(000F00,A4,_,_,x,_,_,_ ), 0 , 4 , 0 , 8963 , 181, 1 ), // #732
INST(Shlx , VexRmv_Wx , V(660F38,F7,_,0,x,_,_,_ ), 0 , 97 , 0 , 2943 , 13 , 85 ), // #733
- INST(Shr , X86Rot , O(000000,D0,5,_,x,_,_,_ ), 0 , 63 , 0 , 2948 , 170, 1 ), // #734
- INST(Shrd , X86ShldShrd , O(000F00,AC,_,_,x,_,_,_ ), 0 , 4 , 0 , 2952 , 180, 1 ), // #735
+ INST(Shr , X86Rot , O(000000,D0,5,_,x,_,_,_ ), 0 , 63 , 0 , 2948 , 171, 1 ), // #734
+ INST(Shrd , X86ShldShrd , O(000F00,AC,_,_,x,_,_,_ ), 0 , 4 , 0 , 2952 , 181, 1 ), // #735
INST(Shrx , VexRmv_Wx , V(F20F38,F7,_,0,x,_,_,_ ), 0 , 85 , 0 , 2957 , 13 , 85 ), // #736
INST(Shufpd , ExtRmi , O(660F00,C6,_,_,_,_,_,_ ), 0 , 3 , 0 , 10188, 8 , 4 ), // #737
INST(Shufps , ExtRmi , O(000F00,C6,_,_,_,_,_,_ ), 0 , 4 , 0 , 10196, 8 , 5 ), // #738
INST(Sidt , X86M_Only , O(000F00,01,1,_,_,_,_,_ ), 0 , 29 , 0 , 2962 , 31 , 0 ), // #739
INST(Skinit , X86Op_xAX , O(000F01,DE,_,_,_,_,_,_ ), 0 , 21 , 0 , 2967 , 52 , 117), // #740
- INST(Sldt , X86M_NoMemSize , O(000F00,00,0,_,_,_,_,_ ), 0 , 4 , 0 , 2974 , 181, 0 ), // #741
- INST(Slwpcb , VexR_Wx , V(XOP_M9,12,1,0,x,_,_,_ ), 0 , 11 , 0 , 2979 , 106, 74 ), // #742
- INST(Smsw , X86M_NoMemSize , O(000F00,01,4,_,_,_,_,_ ), 0 , 98 , 0 , 2986 , 181, 0 ), // #743
+ INST(Sldt , X86M_NoMemSize , O(000F00,00,0,_,_,_,_,_ ), 0 , 4 , 0 , 2974 , 182, 0 ), // #741
+ INST(Slwpcb , VexR_Wx , V(XOP_M9,12,1,0,x,_,_,_ ), 0 , 11 , 0 , 2979 , 107, 74 ), // #742
+ INST(Smsw , X86M_NoMemSize , O(000F00,01,4,_,_,_,_,_ ), 0 , 98 , 0 , 2986 , 182, 0 ), // #743
INST(Sqrtpd , ExtRm , O(660F00,51,_,_,_,_,_,_ ), 0 , 3 , 0 , 10204, 5 , 4 ), // #744
INST(Sqrtps , ExtRm , O(000F00,51,_,_,_,_,_,_ ), 0 , 4 , 0 , 9919 , 5 , 5 ), // #745
INST(Sqrtsd , ExtRm , O(F20F00,51,_,_,_,_,_,_ ), 0 , 5 , 0 , 10220, 6 , 4 ), // #746
@@ -847,12 +847,12 @@ const InstDB::InstInfo InstDB::_instInfoTable[] = {
INST(Std , X86Op , O(000000,FD,_,_,_,_,_,_ ), 0 , 0 , 0 , 6946 , 30 , 18 ), // #750
INST(Stgi , X86Op , O(000F01,DC,_,_,_,_,_,_ ), 0 , 21 , 0 , 3000 , 30 , 117), // #751
INST(Sti , X86Op , O(000000,FB,_,_,_,_,_,_ ), 0 , 0 , 0 , 3005 , 30 , 23 ), // #752
- INST(Stmxcsr , X86M_Only , O(000F00,AE,3,_,_,_,_,_ ), 0 , 79 , 0 , 10236, 99 , 5 ), // #753
- INST(Stos , X86StrMr , O(000000,AA,_,_,_,_,_,_ ), 0 , 0 , 0 , 3009 , 182, 75 ), // #754
- INST(Str , X86M_NoMemSize , O(000F00,00,1,_,_,_,_,_ ), 0 , 29 , 0 , 3014 , 181, 0 ), // #755
- INST(Sttilecfg , AmxCfg , V(660F38,49,_,0,0,_,_,_ ), 0 , 97 , 0 , 3018 , 101, 73 ), // #756
+ INST(Stmxcsr , X86M_Only , O(000F00,AE,3,_,_,_,_,_ ), 0 , 79 , 0 , 10236, 100, 5 ), // #753
+ INST(Stos , X86StrMr , O(000000,AA,_,_,_,_,_,_ ), 0 , 0 , 0 , 3009 , 183, 75 ), // #754
+ INST(Str , X86M_NoMemSize , O(000F00,00,1,_,_,_,_,_ ), 0 , 29 , 0 , 3014 , 182, 0 ), // #755
+ INST(Sttilecfg , AmxCfg , V(660F38,49,_,0,0,_,_,_ ), 0 , 97 , 0 , 3018 , 102, 73 ), // #756
INST(Stui , X86Op , O(F30F01,EF,_,_,_,_,_,_ ), 0 , 25 , 0 , 3135 , 33 , 25 ), // #757
- INST(Sub , X86Arith , O(000000,28,5,_,x,_,_,_ ), 0 , 63 , 0 , 866 , 177, 1 ), // #758
+ INST(Sub , X86Arith , O(000000,28,5,_,x,_,_,_ ), 0 , 63 , 0 , 866 , 178, 1 ), // #758
INST(Subpd , ExtRm , O(660F00,5C,_,_,_,_,_,_ ), 0 , 3 , 0 , 4848 , 5 , 4 ), // #759
INST(Subps , ExtRm , O(000F00,5C,_,_,_,_,_,_ ), 0 , 4 , 0 , 4860 , 5 , 5 ), // #760
INST(Subsd , ExtRm , O(F20F00,5C,_,_,_,_,_,_ ), 0 , 5 , 0 , 5536 , 6 , 4 ), // #761
@@ -865,790 +865,790 @@ const InstDB::InstInfo InstDB::_instInfoTable[] = {
INST(Sysret , X86Op , O(000F00,07,_,_,_,_,_,_ ), 0 , 4 , 0 , 3069 , 33 , 0 ), // #768
INST(Sysretq , X86Op , O(000F00,07,_,_,1,_,_,_ ), 0 , 61 , 0 , 3076 , 33 , 0 ), // #769
INST(T1mskc , VexVm_Wx , V(XOP_M9,01,7,0,x,_,_,_ ), 0 , 99 , 0 , 3084 , 14 , 11 ), // #770
- INST(Tdpbf16ps , AmxRmv , V(F30F38,5C,_,0,0,_,_,_ ), 0 , 89 , 0 , 3091 , 183, 118), // #771
- INST(Tdpbssd , AmxRmv , V(F20F38,5E,_,0,0,_,_,_ ), 0 , 85 , 0 , 3101 , 183, 119), // #772
- INST(Tdpbsud , AmxRmv , V(F30F38,5E,_,0,0,_,_,_ ), 0 , 89 , 0 , 3109 , 183, 119), // #773
- INST(Tdpbusd , AmxRmv , V(660F38,5E,_,0,0,_,_,_ ), 0 , 97 , 0 , 3117 , 183, 119), // #774
- INST(Tdpbuud , AmxRmv , V(000F38,5E,_,0,0,_,_,_ ), 0 , 10 , 0 , 3125 , 183, 119), // #775
- INST(Test , X86Test , O(000000,84,_,_,x,_,_,_ ), O(000000,F6,_,_,x,_,_,_ ), 0 , 80 , 9392 , 184, 1 ), // #776
+ INST(Tdpbf16ps , AmxRmv , V(F30F38,5C,_,0,0,_,_,_ ), 0 , 89 , 0 , 3091 , 184, 118), // #771
+ INST(Tdpbssd , AmxRmv , V(F20F38,5E,_,0,0,_,_,_ ), 0 , 85 , 0 , 3101 , 184, 119), // #772
+ INST(Tdpbsud , AmxRmv , V(F30F38,5E,_,0,0,_,_,_ ), 0 , 89 , 0 , 3109 , 184, 119), // #773
+ INST(Tdpbusd , AmxRmv , V(660F38,5E,_,0,0,_,_,_ ), 0 , 97 , 0 , 3117 , 184, 119), // #774
+ INST(Tdpbuud , AmxRmv , V(000F38,5E,_,0,0,_,_,_ ), 0 , 10 , 0 , 3125 , 184, 119), // #775
+ INST(Test , X86Test , O(000000,84,_,_,x,_,_,_ ), O(000000,F6,_,_,x,_,_,_ ), 0 , 80 , 9392 , 185, 1 ), // #776
INST(Testui , X86Op , O(F30F01,ED,_,_,_,_,_,_ ), 0 , 25 , 0 , 3133 , 33 , 120), // #777
- INST(Tileloadd , AmxRm , V(F20F38,4B,_,0,0,_,_,_ ), 0 , 85 , 0 , 3140 , 185, 73 ), // #778
- INST(Tileloaddt1 , AmxRm , V(660F38,4B,_,0,0,_,_,_ ), 0 , 97 , 0 , 3150 , 185, 73 ), // #779
- INST(Tilerelease , VexOpMod , V(000F38,49,0,0,0,_,_,_ ), 0 , 10 , 0 , 3162 , 186, 73 ), // #780
- INST(Tilestored , AmxMr , V(F30F38,4B,_,0,0,_,_,_ ), 0 , 89 , 0 , 3174 , 187, 73 ), // #781
- INST(Tilezero , AmxR , V(F20F38,49,_,0,0,_,_,_ ), 0 , 85 , 0 , 3185 , 188, 73 ), // #782
- INST(Tpause , X86R32_EDX_EAX , O(660F00,AE,6,_,_,_,_,_ ), 0 , 26 , 0 , 3194 , 189, 121), // #783
+ INST(Tileloadd , AmxRm , V(F20F38,4B,_,0,0,_,_,_ ), 0 , 85 , 0 , 3140 , 186, 73 ), // #778
+ INST(Tileloaddt1 , AmxRm , V(660F38,4B,_,0,0,_,_,_ ), 0 , 97 , 0 , 3150 , 186, 73 ), // #779
+ INST(Tilerelease , VexOpMod , V(000F38,49,0,0,0,_,_,_ ), 0 , 10 , 0 , 3162 , 187, 73 ), // #780
+ INST(Tilestored , AmxMr , V(F30F38,4B,_,0,0,_,_,_ ), 0 , 89 , 0 , 3174 , 188, 73 ), // #781
+ INST(Tilezero , AmxR , V(F20F38,49,_,0,0,_,_,_ ), 0 , 85 , 0 , 3185 , 189, 73 ), // #782
+ INST(Tpause , X86R32_EDX_EAX , O(660F00,AE,6,_,_,_,_,_ ), 0 , 26 , 0 , 3194 , 190, 121), // #783
INST(Tzcnt , X86Rm_Raw66H , O(F30F00,BC,_,_,x,_,_,_ ), 0 , 6 , 0 , 3201 , 22 , 9 ), // #784
INST(Tzmsk , VexVm_Wx , V(XOP_M9,01,4,0,x,_,_,_ ), 0 , 100, 0 , 3207 , 14 , 11 ), // #785
INST(Ucomisd , ExtRm , O(660F00,2E,_,_,_,_,_,_ ), 0 , 3 , 0 , 10289, 6 , 41 ), // #786
INST(Ucomiss , ExtRm , O(000F00,2E,_,_,_,_,_,_ ), 0 , 4 , 0 , 10298, 7 , 42 ), // #787
- INST(Ud0 , X86Rm , O(000F00,FF,_,_,_,_,_,_ ), 0 , 4 , 0 , 3213 , 190, 0 ), // #788
- INST(Ud1 , X86Rm , O(000F00,B9,_,_,_,_,_,_ ), 0 , 4 , 0 , 3217 , 190, 0 ), // #789
+ INST(Ud0 , X86Rm , O(000F00,FF,_,_,_,_,_,_ ), 0 , 4 , 0 , 3213 , 191, 0 ), // #788
+ INST(Ud1 , X86Rm , O(000F00,B9,_,_,_,_,_,_ ), 0 , 4 , 0 , 3217 , 191, 0 ), // #789
INST(Ud2 , X86Op , O(000F00,0B,_,_,_,_,_,_ ), 0 , 4 , 0 , 3221 , 30 , 0 ), // #790
INST(Uiret , X86Op , O(F30F01,EC,_,_,_,_,_,_ ), 0 , 25 , 0 , 3225 , 33 , 25 ), // #791
- INST(Umonitor , X86R_FromM , O(F30F00,AE,6,_,_,_,_,_ ), 0 , 24 , 0 , 3231 , 191, 122), // #792
- INST(Umwait , X86R32_EDX_EAX , O(F20F00,AE,6,_,_,_,_,_ ), 0 , 101, 0 , 3240 , 189, 121), // #793
+ INST(Umonitor , X86R_FromM , O(F30F00,AE,6,_,_,_,_,_ ), 0 , 24 , 0 , 3231 , 192, 122), // #792
+ INST(Umwait , X86R32_EDX_EAX , O(F20F00,AE,6,_,_,_,_,_ ), 0 , 101, 0 , 3240 , 190, 121), // #793
INST(Unpckhpd , ExtRm , O(660F00,15,_,_,_,_,_,_ ), 0 , 3 , 0 , 10307, 5 , 4 ), // #794
INST(Unpckhps , ExtRm , O(000F00,15,_,_,_,_,_,_ ), 0 , 4 , 0 , 10317, 5 , 5 ), // #795
INST(Unpcklpd , ExtRm , O(660F00,14,_,_,_,_,_,_ ), 0 , 3 , 0 , 10327, 5 , 4 ), // #796
INST(Unpcklps , ExtRm , O(000F00,14,_,_,_,_,_,_ ), 0 , 4 , 0 , 10337, 5 , 5 ), // #797
- INST(V4fmaddps , VexRm_T1_4X , E(F20F38,9A,_,2,_,0,4,T4X), 0 , 102, 0 , 3247 , 192, 123), // #798
- INST(V4fmaddss , VexRm_T1_4X , E(F20F38,9B,_,0,_,0,4,T4X), 0 , 103, 0 , 3257 , 193, 123), // #799
- INST(V4fnmaddps , VexRm_T1_4X , E(F20F38,AA,_,2,_,0,4,T4X), 0 , 102, 0 , 3267 , 192, 123), // #800
- INST(V4fnmaddss , VexRm_T1_4X , E(F20F38,AB,_,0,_,0,4,T4X), 0 , 103, 0 , 3278 , 193, 123), // #801
- INST(Vaddpd , VexRvm_Lx , V(660F00,58,_,x,I,1,4,FV ), 0 , 104, 0 , 3289 , 194, 124), // #802
- INST(Vaddps , VexRvm_Lx , V(000F00,58,_,x,I,0,4,FV ), 0 , 105, 0 , 3296 , 195, 124), // #803
- INST(Vaddsd , VexRvm , V(F20F00,58,_,I,I,1,3,T1S), 0 , 106, 0 , 3303 , 196, 125), // #804
- INST(Vaddss , VexRvm , V(F30F00,58,_,I,I,0,2,T1S), 0 , 107, 0 , 3310 , 197, 125), // #805
- INST(Vaddsubpd , VexRvm_Lx , V(660F00,D0,_,x,I,_,_,_ ), 0 , 70 , 0 , 3317 , 198, 126), // #806
- INST(Vaddsubps , VexRvm_Lx , V(F20F00,D0,_,x,I,_,_,_ ), 0 , 108, 0 , 3327 , 198, 126), // #807
- INST(Vaesdec , VexRvm_Lx , V(660F38,DE,_,x,I,_,4,FVM), 0 , 109, 0 , 3337 , 199, 127), // #808
- INST(Vaesdeclast , VexRvm_Lx , V(660F38,DF,_,x,I,_,4,FVM), 0 , 109, 0 , 3345 , 199, 127), // #809
- INST(Vaesenc , VexRvm_Lx , V(660F38,DC,_,x,I,_,4,FVM), 0 , 109, 0 , 3357 , 199, 127), // #810
- INST(Vaesenclast , VexRvm_Lx , V(660F38,DD,_,x,I,_,4,FVM), 0 , 109, 0 , 3365 , 199, 127), // #811
- INST(Vaesimc , VexRm , V(660F38,DB,_,0,I,_,_,_ ), 0 , 97 , 0 , 3377 , 200, 128), // #812
- INST(Vaeskeygenassist , VexRmi , V(660F3A,DF,_,0,I,_,_,_ ), 0 , 74 , 0 , 3385 , 201, 128), // #813
- INST(Valignd , VexRvmi_Lx , E(660F3A,03,_,x,_,0,4,FV ), 0 , 110, 0 , 3402 , 202, 129), // #814
- INST(Valignq , VexRvmi_Lx , E(660F3A,03,_,x,_,1,4,FV ), 0 , 111, 0 , 3410 , 203, 129), // #815
- INST(Vandnpd , VexRvm_Lx , V(660F00,55,_,x,I,1,4,FV ), 0 , 104, 0 , 3418 , 204, 130), // #816
- INST(Vandnps , VexRvm_Lx , V(000F00,55,_,x,I,0,4,FV ), 0 , 105, 0 , 3426 , 205, 130), // #817
- INST(Vandpd , VexRvm_Lx , V(660F00,54,_,x,I,1,4,FV ), 0 , 104, 0 , 3434 , 206, 130), // #818
- INST(Vandps , VexRvm_Lx , V(000F00,54,_,x,I,0,4,FV ), 0 , 105, 0 , 3441 , 207, 130), // #819
- INST(Vblendmpd , VexRvm_Lx , E(660F38,65,_,x,_,1,4,FV ), 0 , 112, 0 , 3448 , 208, 129), // #820
- INST(Vblendmps , VexRvm_Lx , E(660F38,65,_,x,_,0,4,FV ), 0 , 113, 0 , 3458 , 209, 129), // #821
- INST(Vblendpd , VexRvmi_Lx , V(660F3A,0D,_,x,I,_,_,_ ), 0 , 74 , 0 , 3468 , 210, 126), // #822
- INST(Vblendps , VexRvmi_Lx , V(660F3A,0C,_,x,I,_,_,_ ), 0 , 74 , 0 , 3477 , 210, 126), // #823
- INST(Vblendvpd , VexRvmr_Lx , V(660F3A,4B,_,x,0,_,_,_ ), 0 , 74 , 0 , 3486 , 211, 126), // #824
- INST(Vblendvps , VexRvmr_Lx , V(660F3A,4A,_,x,0,_,_,_ ), 0 , 74 , 0 , 3496 , 211, 126), // #825
- INST(Vbroadcastf128 , VexRm , V(660F38,1A,_,1,0,_,_,_ ), 0 , 114, 0 , 3506 , 212, 126), // #826
- INST(Vbroadcastf32x2 , VexRm_Lx , E(660F38,19,_,x,_,0,3,T2 ), 0 , 115, 0 , 3521 , 213, 131), // #827
- INST(Vbroadcastf32x4 , VexRm_Lx , E(660F38,1A,_,x,_,0,4,T4 ), 0 , 116, 0 , 3537 , 214, 68 ), // #828
- INST(Vbroadcastf32x8 , VexRm , E(660F38,1B,_,2,_,0,5,T8 ), 0 , 117, 0 , 3553 , 215, 66 ), // #829
- INST(Vbroadcastf64x2 , VexRm_Lx , E(660F38,1A,_,x,_,1,4,T2 ), 0 , 118, 0 , 3569 , 214, 131), // #830
- INST(Vbroadcastf64x4 , VexRm , E(660F38,1B,_,2,_,1,5,T4 ), 0 , 119, 0 , 3585 , 215, 68 ), // #831
- INST(Vbroadcasti128 , VexRm , V(660F38,5A,_,1,0,_,_,_ ), 0 , 114, 0 , 3601 , 212, 132), // #832
- INST(Vbroadcasti32x2 , VexRm_Lx , E(660F38,59,_,x,_,0,3,T2 ), 0 , 115, 0 , 3616 , 216, 131), // #833
- INST(Vbroadcasti32x4 , VexRm_Lx , E(660F38,5A,_,x,_,0,4,T4 ), 0 , 116, 0 , 3632 , 214, 129), // #834
- INST(Vbroadcasti32x8 , VexRm , E(660F38,5B,_,2,_,0,5,T8 ), 0 , 117, 0 , 3648 , 215, 66 ), // #835
- INST(Vbroadcasti64x2 , VexRm_Lx , E(660F38,5A,_,x,_,1,4,T2 ), 0 , 118, 0 , 3664 , 214, 131), // #836
- INST(Vbroadcasti64x4 , VexRm , E(660F38,5B,_,2,_,1,5,T4 ), 0 , 119, 0 , 3680 , 215, 68 ), // #837
- INST(Vbroadcastsd , VexRm_Lx , V(660F38,19,_,x,0,1,3,T1S), 0 , 120, 0 , 3696 , 217, 133), // #838
- INST(Vbroadcastss , VexRm_Lx , V(660F38,18,_,x,0,0,2,T1S), 0 , 121, 0 , 3709 , 218, 133), // #839
- INST(Vcmppd , VexRvmi_Lx_KEvex , V(660F00,C2,_,x,I,1,4,FV ), 0 , 104, 0 , 3722 , 219, 124), // #840
- INST(Vcmpps , VexRvmi_Lx_KEvex , V(000F00,C2,_,x,I,0,4,FV ), 0 , 105, 0 , 3729 , 220, 124), // #841
- INST(Vcmpsd , VexRvmi_KEvex , V(F20F00,C2,_,I,I,1,3,T1S), 0 , 106, 0 , 3736 , 221, 125), // #842
- INST(Vcmpss , VexRvmi_KEvex , V(F30F00,C2,_,I,I,0,2,T1S), 0 , 107, 0 , 3743 , 222, 125), // #843
- INST(Vcomisd , VexRm , V(660F00,2F,_,I,I,1,3,T1S), 0 , 122, 0 , 3750 , 223, 134), // #844
- INST(Vcomiss , VexRm , V(000F00,2F,_,I,I,0,2,T1S), 0 , 123, 0 , 3758 , 224, 134), // #845
- INST(Vcompresspd , VexMr_Lx , E(660F38,8A,_,x,_,1,3,T1S), 0 , 124, 0 , 3766 , 225, 129), // #846
- INST(Vcompressps , VexMr_Lx , E(660F38,8A,_,x,_,0,2,T1S), 0 , 125, 0 , 3778 , 225, 129), // #847
- INST(Vcvtdq2pd , VexRm_Lx , V(F30F00,E6,_,x,I,0,3,HV ), 0 , 126, 0 , 3790 , 226, 124), // #848
- INST(Vcvtdq2ps , VexRm_Lx , V(000F00,5B,_,x,I,0,4,FV ), 0 , 105, 0 , 3800 , 227, 124), // #849
- INST(Vcvtne2ps2bf16 , VexRvm_Lx , E(F20F38,72,_,_,_,0,4,FV ), 0 , 127, 0 , 3810 , 209, 135), // #850
- INST(Vcvtneps2bf16 , VexRm_Lx_Narrow , E(F30F38,72,_,_,_,0,4,FV ), 0 , 128, 0 , 3825 , 228, 135), // #851
- INST(Vcvtpd2dq , VexRm_Lx_Narrow , V(F20F00,E6,_,x,I,1,4,FV ), 0 , 129, 0 , 3839 , 229, 124), // #852
- INST(Vcvtpd2ps , VexRm_Lx_Narrow , V(660F00,5A,_,x,I,1,4,FV ), 0 , 104, 0 , 3849 , 229, 124), // #853
- INST(Vcvtpd2qq , VexRm_Lx , E(660F00,7B,_,x,_,1,4,FV ), 0 , 130, 0 , 3859 , 230, 131), // #854
- INST(Vcvtpd2udq , VexRm_Lx_Narrow , E(000F00,79,_,x,_,1,4,FV ), 0 , 131, 0 , 3869 , 231, 129), // #855
- INST(Vcvtpd2uqq , VexRm_Lx , E(660F00,79,_,x,_,1,4,FV ), 0 , 130, 0 , 3880 , 230, 131), // #856
- INST(Vcvtph2ps , VexRm_Lx , V(660F38,13,_,x,0,0,3,HVM), 0 , 132, 0 , 3891 , 232, 136), // #857
- INST(Vcvtps2dq , VexRm_Lx , V(660F00,5B,_,x,I,0,4,FV ), 0 , 133, 0 , 3901 , 227, 124), // #858
- INST(Vcvtps2pd , VexRm_Lx , V(000F00,5A,_,x,I,0,3,HV ), 0 , 134, 0 , 3911 , 233, 124), // #859
- INST(Vcvtps2ph , VexMri_Lx , V(660F3A,1D,_,x,0,0,3,HVM), 0 , 135, 0 , 3921 , 234, 136), // #860
- INST(Vcvtps2qq , VexRm_Lx , E(660F00,7B,_,x,_,0,3,HV ), 0 , 136, 0 , 3931 , 235, 131), // #861
- INST(Vcvtps2udq , VexRm_Lx , E(000F00,79,_,x,_,0,4,FV ), 0 , 137, 0 , 3941 , 236, 129), // #862
- INST(Vcvtps2uqq , VexRm_Lx , E(660F00,79,_,x,_,0,3,HV ), 0 , 136, 0 , 3952 , 235, 131), // #863
- INST(Vcvtqq2pd , VexRm_Lx , E(F30F00,E6,_,x,_,1,4,FV ), 0 , 138, 0 , 3963 , 230, 131), // #864
- INST(Vcvtqq2ps , VexRm_Lx_Narrow , E(000F00,5B,_,x,_,1,4,FV ), 0 , 131, 0 , 3973 , 231, 131), // #865
- INST(Vcvtsd2si , VexRm_Wx , V(F20F00,2D,_,I,x,x,3,T1F), 0 , 139, 0 , 3983 , 237, 125), // #866
- INST(Vcvtsd2ss , VexRvm , V(F20F00,5A,_,I,I,1,3,T1S), 0 , 106, 0 , 3993 , 196, 125), // #867
- INST(Vcvtsd2usi , VexRm_Wx , E(F20F00,79,_,I,_,x,3,T1F), 0 , 140, 0 , 4003 , 238, 68 ), // #868
- INST(Vcvtsi2sd , VexRvm_Wx , V(F20F00,2A,_,I,x,x,2,T1W), 0 , 141, 0 , 4014 , 239, 125), // #869
- INST(Vcvtsi2ss , VexRvm_Wx , V(F30F00,2A,_,I,x,x,2,T1W), 0 , 142, 0 , 4024 , 239, 125), // #870
- INST(Vcvtss2sd , VexRvm , V(F30F00,5A,_,I,I,0,2,T1S), 0 , 107, 0 , 4034 , 240, 125), // #871
- INST(Vcvtss2si , VexRm_Wx , V(F30F00,2D,_,I,x,x,2,T1F), 0 , 143, 0 , 4044 , 241, 125), // #872
- INST(Vcvtss2usi , VexRm_Wx , E(F30F00,79,_,I,_,x,2,T1F), 0 , 144, 0 , 4054 , 242, 68 ), // #873
- INST(Vcvttpd2dq , VexRm_Lx_Narrow , V(660F00,E6,_,x,I,1,4,FV ), 0 , 104, 0 , 4065 , 243, 124), // #874
- INST(Vcvttpd2qq , VexRm_Lx , E(660F00,7A,_,x,_,1,4,FV ), 0 , 130, 0 , 4076 , 244, 129), // #875
- INST(Vcvttpd2udq , VexRm_Lx_Narrow , E(000F00,78,_,x,_,1,4,FV ), 0 , 131, 0 , 4087 , 245, 129), // #876
- INST(Vcvttpd2uqq , VexRm_Lx , E(660F00,78,_,x,_,1,4,FV ), 0 , 130, 0 , 4099 , 244, 131), // #877
- INST(Vcvttps2dq , VexRm_Lx , V(F30F00,5B,_,x,I,0,4,FV ), 0 , 145, 0 , 4111 , 246, 124), // #878
- INST(Vcvttps2qq , VexRm_Lx , E(660F00,7A,_,x,_,0,3,HV ), 0 , 136, 0 , 4122 , 247, 131), // #879
- INST(Vcvttps2udq , VexRm_Lx , E(000F00,78,_,x,_,0,4,FV ), 0 , 137, 0 , 4133 , 248, 129), // #880
- INST(Vcvttps2uqq , VexRm_Lx , E(660F00,78,_,x,_,0,3,HV ), 0 , 136, 0 , 4145 , 247, 131), // #881
- INST(Vcvttsd2si , VexRm_Wx , V(F20F00,2C,_,I,x,x,3,T1F), 0 , 139, 0 , 4157 , 249, 125), // #882
- INST(Vcvttsd2usi , VexRm_Wx , E(F20F00,78,_,I,_,x,3,T1F), 0 , 140, 0 , 4168 , 250, 68 ), // #883
- INST(Vcvttss2si , VexRm_Wx , V(F30F00,2C,_,I,x,x,2,T1F), 0 , 143, 0 , 4180 , 251, 125), // #884
- INST(Vcvttss2usi , VexRm_Wx , E(F30F00,78,_,I,_,x,2,T1F), 0 , 144, 0 , 4191 , 252, 68 ), // #885
- INST(Vcvtudq2pd , VexRm_Lx , E(F30F00,7A,_,x,_,0,3,HV ), 0 , 146, 0 , 4203 , 253, 129), // #886
- INST(Vcvtudq2ps , VexRm_Lx , E(F20F00,7A,_,x,_,0,4,FV ), 0 , 147, 0 , 4214 , 236, 129), // #887
- INST(Vcvtuqq2pd , VexRm_Lx , E(F30F00,7A,_,x,_,1,4,FV ), 0 , 138, 0 , 4225 , 230, 131), // #888
- INST(Vcvtuqq2ps , VexRm_Lx_Narrow , E(F20F00,7A,_,x,_,1,4,FV ), 0 , 148, 0 , 4236 , 231, 131), // #889
- INST(Vcvtusi2sd , VexRvm_Wx , E(F20F00,7B,_,I,_,x,2,T1W), 0 , 149, 0 , 4247 , 254, 68 ), // #890
- INST(Vcvtusi2ss , VexRvm_Wx , E(F30F00,7B,_,I,_,x,2,T1W), 0 , 150, 0 , 4258 , 254, 68 ), // #891
- INST(Vdbpsadbw , VexRvmi_Lx , E(660F3A,42,_,x,_,0,4,FVM), 0 , 151, 0 , 4269 , 255, 137), // #892
- INST(Vdivpd , VexRvm_Lx , V(660F00,5E,_,x,I,1,4,FV ), 0 , 104, 0 , 4279 , 194, 124), // #893
- INST(Vdivps , VexRvm_Lx , V(000F00,5E,_,x,I,0,4,FV ), 0 , 105, 0 , 4286 , 195, 124), // #894
- INST(Vdivsd , VexRvm , V(F20F00,5E,_,I,I,1,3,T1S), 0 , 106, 0 , 4293 , 196, 125), // #895
- INST(Vdivss , VexRvm , V(F30F00,5E,_,I,I,0,2,T1S), 0 , 107, 0 , 4300 , 197, 125), // #896
- INST(Vdpbf16ps , VexRvm_Lx , E(F30F38,52,_,_,_,0,4,FV ), 0 , 128, 0 , 4307 , 209, 135), // #897
- INST(Vdppd , VexRvmi_Lx , V(660F3A,41,_,x,I,_,_,_ ), 0 , 74 , 0 , 4317 , 256, 126), // #898
- INST(Vdpps , VexRvmi_Lx , V(660F3A,40,_,x,I,_,_,_ ), 0 , 74 , 0 , 4323 , 210, 126), // #899
- INST(Verr , X86M_NoSize , O(000F00,00,4,_,_,_,_,_ ), 0 , 98 , 0 , 4329 , 105, 10 ), // #900
- INST(Verw , X86M_NoSize , O(000F00,00,5,_,_,_,_,_ ), 0 , 78 , 0 , 4334 , 105, 10 ), // #901
- INST(Vexp2pd , VexRm , E(660F38,C8,_,2,_,1,4,FV ), 0 , 152, 0 , 4339 , 257, 138), // #902
- INST(Vexp2ps , VexRm , E(660F38,C8,_,2,_,0,4,FV ), 0 , 153, 0 , 4347 , 258, 138), // #903
- INST(Vexpandpd , VexRm_Lx , E(660F38,88,_,x,_,1,3,T1S), 0 , 124, 0 , 4355 , 259, 129), // #904
- INST(Vexpandps , VexRm_Lx , E(660F38,88,_,x,_,0,2,T1S), 0 , 125, 0 , 4365 , 259, 129), // #905
- INST(Vextractf128 , VexMri , V(660F3A,19,_,1,0,_,_,_ ), 0 , 154, 0 , 4375 , 260, 126), // #906
- INST(Vextractf32x4 , VexMri_Lx , E(660F3A,19,_,x,_,0,4,T4 ), 0 , 155, 0 , 4388 , 261, 129), // #907
- INST(Vextractf32x8 , VexMri , E(660F3A,1B,_,2,_,0,5,T8 ), 0 , 156, 0 , 4402 , 262, 66 ), // #908
- INST(Vextractf64x2 , VexMri_Lx , E(660F3A,19,_,x,_,1,4,T2 ), 0 , 157, 0 , 4416 , 261, 131), // #909
- INST(Vextractf64x4 , VexMri , E(660F3A,1B,_,2,_,1,5,T4 ), 0 , 158, 0 , 4430 , 262, 68 ), // #910
- INST(Vextracti128 , VexMri , V(660F3A,39,_,1,0,_,_,_ ), 0 , 154, 0 , 4444 , 260, 132), // #911
- INST(Vextracti32x4 , VexMri_Lx , E(660F3A,39,_,x,_,0,4,T4 ), 0 , 155, 0 , 4457 , 261, 129), // #912
- INST(Vextracti32x8 , VexMri , E(660F3A,3B,_,2,_,0,5,T8 ), 0 , 156, 0 , 4471 , 262, 66 ), // #913
- INST(Vextracti64x2 , VexMri_Lx , E(660F3A,39,_,x,_,1,4,T2 ), 0 , 157, 0 , 4485 , 261, 131), // #914
- INST(Vextracti64x4 , VexMri , E(660F3A,3B,_,2,_,1,5,T4 ), 0 , 158, 0 , 4499 , 262, 68 ), // #915
- INST(Vextractps , VexMri , V(660F3A,17,_,0,I,I,2,T1S), 0 , 159, 0 , 4513 , 263, 125), // #916
- INST(Vfixupimmpd , VexRvmi_Lx , E(660F3A,54,_,x,_,1,4,FV ), 0 , 111, 0 , 4524 , 264, 129), // #917
- INST(Vfixupimmps , VexRvmi_Lx , E(660F3A,54,_,x,_,0,4,FV ), 0 , 110, 0 , 4536 , 265, 129), // #918
- INST(Vfixupimmsd , VexRvmi , E(660F3A,55,_,I,_,1,3,T1S), 0 , 160, 0 , 4548 , 266, 68 ), // #919
- INST(Vfixupimmss , VexRvmi , E(660F3A,55,_,I,_,0,2,T1S), 0 , 161, 0 , 4560 , 267, 68 ), // #920
- INST(Vfmadd132pd , VexRvm_Lx , V(660F38,98,_,x,1,1,4,FV ), 0 , 162, 0 , 4572 , 194, 139), // #921
- INST(Vfmadd132ps , VexRvm_Lx , V(660F38,98,_,x,0,0,4,FV ), 0 , 163, 0 , 4584 , 195, 139), // #922
- INST(Vfmadd132sd , VexRvm , V(660F38,99,_,I,1,1,3,T1S), 0 , 164, 0 , 4596 , 196, 140), // #923
- INST(Vfmadd132ss , VexRvm , V(660F38,99,_,I,0,0,2,T1S), 0 , 121, 0 , 4608 , 197, 140), // #924
- INST(Vfmadd213pd , VexRvm_Lx , V(660F38,A8,_,x,1,1,4,FV ), 0 , 162, 0 , 4620 , 194, 139), // #925
- INST(Vfmadd213ps , VexRvm_Lx , V(660F38,A8,_,x,0,0,4,FV ), 0 , 163, 0 , 4632 , 195, 139), // #926
- INST(Vfmadd213sd , VexRvm , V(660F38,A9,_,I,1,1,3,T1S), 0 , 164, 0 , 4644 , 196, 140), // #927
- INST(Vfmadd213ss , VexRvm , V(660F38,A9,_,I,0,0,2,T1S), 0 , 121, 0 , 4656 , 197, 140), // #928
- INST(Vfmadd231pd , VexRvm_Lx , V(660F38,B8,_,x,1,1,4,FV ), 0 , 162, 0 , 4668 , 194, 139), // #929
- INST(Vfmadd231ps , VexRvm_Lx , V(660F38,B8,_,x,0,0,4,FV ), 0 , 163, 0 , 4680 , 195, 139), // #930
- INST(Vfmadd231sd , VexRvm , V(660F38,B9,_,I,1,1,3,T1S), 0 , 164, 0 , 4692 , 196, 140), // #931
- INST(Vfmadd231ss , VexRvm , V(660F38,B9,_,I,0,0,2,T1S), 0 , 121, 0 , 4704 , 197, 140), // #932
- INST(Vfmaddpd , Fma4_Lx , V(660F3A,69,_,x,x,_,_,_ ), 0 , 74 , 0 , 4716 , 268, 141), // #933
- INST(Vfmaddps , Fma4_Lx , V(660F3A,68,_,x,x,_,_,_ ), 0 , 74 , 0 , 4725 , 268, 141), // #934
- INST(Vfmaddsd , Fma4 , V(660F3A,6B,_,0,x,_,_,_ ), 0 , 74 , 0 , 4734 , 269, 141), // #935
- INST(Vfmaddss , Fma4 , V(660F3A,6A,_,0,x,_,_,_ ), 0 , 74 , 0 , 4743 , 270, 141), // #936
- INST(Vfmaddsub132pd , VexRvm_Lx , V(660F38,96,_,x,1,1,4,FV ), 0 , 162, 0 , 4752 , 194, 139), // #937
- INST(Vfmaddsub132ps , VexRvm_Lx , V(660F38,96,_,x,0,0,4,FV ), 0 , 163, 0 , 4767 , 195, 139), // #938
- INST(Vfmaddsub213pd , VexRvm_Lx , V(660F38,A6,_,x,1,1,4,FV ), 0 , 162, 0 , 4782 , 194, 139), // #939
- INST(Vfmaddsub213ps , VexRvm_Lx , V(660F38,A6,_,x,0,0,4,FV ), 0 , 163, 0 , 4797 , 195, 139), // #940
- INST(Vfmaddsub231pd , VexRvm_Lx , V(660F38,B6,_,x,1,1,4,FV ), 0 , 162, 0 , 4812 , 194, 139), // #941
- INST(Vfmaddsub231ps , VexRvm_Lx , V(660F38,B6,_,x,0,0,4,FV ), 0 , 163, 0 , 4827 , 195, 139), // #942
- INST(Vfmaddsubpd , Fma4_Lx , V(660F3A,5D,_,x,x,_,_,_ ), 0 , 74 , 0 , 4842 , 268, 141), // #943
- INST(Vfmaddsubps , Fma4_Lx , V(660F3A,5C,_,x,x,_,_,_ ), 0 , 74 , 0 , 4854 , 268, 141), // #944
- INST(Vfmsub132pd , VexRvm_Lx , V(660F38,9A,_,x,1,1,4,FV ), 0 , 162, 0 , 4866 , 194, 139), // #945
- INST(Vfmsub132ps , VexRvm_Lx , V(660F38,9A,_,x,0,0,4,FV ), 0 , 163, 0 , 4878 , 195, 139), // #946
- INST(Vfmsub132sd , VexRvm , V(660F38,9B,_,I,1,1,3,T1S), 0 , 164, 0 , 4890 , 196, 140), // #947
- INST(Vfmsub132ss , VexRvm , V(660F38,9B,_,I,0,0,2,T1S), 0 , 121, 0 , 4902 , 197, 140), // #948
- INST(Vfmsub213pd , VexRvm_Lx , V(660F38,AA,_,x,1,1,4,FV ), 0 , 162, 0 , 4914 , 194, 139), // #949
- INST(Vfmsub213ps , VexRvm_Lx , V(660F38,AA,_,x,0,0,4,FV ), 0 , 163, 0 , 4926 , 195, 139), // #950
- INST(Vfmsub213sd , VexRvm , V(660F38,AB,_,I,1,1,3,T1S), 0 , 164, 0 , 4938 , 196, 140), // #951
- INST(Vfmsub213ss , VexRvm , V(660F38,AB,_,I,0,0,2,T1S), 0 , 121, 0 , 4950 , 197, 140), // #952
- INST(Vfmsub231pd , VexRvm_Lx , V(660F38,BA,_,x,1,1,4,FV ), 0 , 162, 0 , 4962 , 194, 139), // #953
- INST(Vfmsub231ps , VexRvm_Lx , V(660F38,BA,_,x,0,0,4,FV ), 0 , 163, 0 , 4974 , 195, 139), // #954
- INST(Vfmsub231sd , VexRvm , V(660F38,BB,_,I,1,1,3,T1S), 0 , 164, 0 , 4986 , 196, 140), // #955
- INST(Vfmsub231ss , VexRvm , V(660F38,BB,_,I,0,0,2,T1S), 0 , 121, 0 , 4998 , 197, 140), // #956
- INST(Vfmsubadd132pd , VexRvm_Lx , V(660F38,97,_,x,1,1,4,FV ), 0 , 162, 0 , 5010 , 194, 139), // #957
- INST(Vfmsubadd132ps , VexRvm_Lx , V(660F38,97,_,x,0,0,4,FV ), 0 , 163, 0 , 5025 , 195, 139), // #958
- INST(Vfmsubadd213pd , VexRvm_Lx , V(660F38,A7,_,x,1,1,4,FV ), 0 , 162, 0 , 5040 , 194, 139), // #959
- INST(Vfmsubadd213ps , VexRvm_Lx , V(660F38,A7,_,x,0,0,4,FV ), 0 , 163, 0 , 5055 , 195, 139), // #960
- INST(Vfmsubadd231pd , VexRvm_Lx , V(660F38,B7,_,x,1,1,4,FV ), 0 , 162, 0 , 5070 , 194, 139), // #961
- INST(Vfmsubadd231ps , VexRvm_Lx , V(660F38,B7,_,x,0,0,4,FV ), 0 , 163, 0 , 5085 , 195, 139), // #962
- INST(Vfmsubaddpd , Fma4_Lx , V(660F3A,5F,_,x,x,_,_,_ ), 0 , 74 , 0 , 5100 , 268, 141), // #963
- INST(Vfmsubaddps , Fma4_Lx , V(660F3A,5E,_,x,x,_,_,_ ), 0 , 74 , 0 , 5112 , 268, 141), // #964
- INST(Vfmsubpd , Fma4_Lx , V(660F3A,6D,_,x,x,_,_,_ ), 0 , 74 , 0 , 5124 , 268, 141), // #965
- INST(Vfmsubps , Fma4_Lx , V(660F3A,6C,_,x,x,_,_,_ ), 0 , 74 , 0 , 5133 , 268, 141), // #966
- INST(Vfmsubsd , Fma4 , V(660F3A,6F,_,0,x,_,_,_ ), 0 , 74 , 0 , 5142 , 269, 141), // #967
- INST(Vfmsubss , Fma4 , V(660F3A,6E,_,0,x,_,_,_ ), 0 , 74 , 0 , 5151 , 270, 141), // #968
- INST(Vfnmadd132pd , VexRvm_Lx , V(660F38,9C,_,x,1,1,4,FV ), 0 , 162, 0 , 5160 , 194, 139), // #969
- INST(Vfnmadd132ps , VexRvm_Lx , V(660F38,9C,_,x,0,0,4,FV ), 0 , 163, 0 , 5173 , 195, 139), // #970
- INST(Vfnmadd132sd , VexRvm , V(660F38,9D,_,I,1,1,3,T1S), 0 , 164, 0 , 5186 , 196, 140), // #971
- INST(Vfnmadd132ss , VexRvm , V(660F38,9D,_,I,0,0,2,T1S), 0 , 121, 0 , 5199 , 197, 140), // #972
- INST(Vfnmadd213pd , VexRvm_Lx , V(660F38,AC,_,x,1,1,4,FV ), 0 , 162, 0 , 5212 , 194, 139), // #973
- INST(Vfnmadd213ps , VexRvm_Lx , V(660F38,AC,_,x,0,0,4,FV ), 0 , 163, 0 , 5225 , 195, 139), // #974
- INST(Vfnmadd213sd , VexRvm , V(660F38,AD,_,I,1,1,3,T1S), 0 , 164, 0 , 5238 , 196, 140), // #975
- INST(Vfnmadd213ss , VexRvm , V(660F38,AD,_,I,0,0,2,T1S), 0 , 121, 0 , 5251 , 197, 140), // #976
- INST(Vfnmadd231pd , VexRvm_Lx , V(660F38,BC,_,x,1,1,4,FV ), 0 , 162, 0 , 5264 , 194, 139), // #977
- INST(Vfnmadd231ps , VexRvm_Lx , V(660F38,BC,_,x,0,0,4,FV ), 0 , 163, 0 , 5277 , 195, 139), // #978
- INST(Vfnmadd231sd , VexRvm , V(660F38,BD,_,I,1,1,3,T1S), 0 , 164, 0 , 5290 , 196, 140), // #979
- INST(Vfnmadd231ss , VexRvm , V(660F38,BD,_,I,0,0,2,T1S), 0 , 121, 0 , 5303 , 197, 140), // #980
- INST(Vfnmaddpd , Fma4_Lx , V(660F3A,79,_,x,x,_,_,_ ), 0 , 74 , 0 , 5316 , 268, 141), // #981
- INST(Vfnmaddps , Fma4_Lx , V(660F3A,78,_,x,x,_,_,_ ), 0 , 74 , 0 , 5326 , 268, 141), // #982
- INST(Vfnmaddsd , Fma4 , V(660F3A,7B,_,0,x,_,_,_ ), 0 , 74 , 0 , 5336 , 269, 141), // #983
- INST(Vfnmaddss , Fma4 , V(660F3A,7A,_,0,x,_,_,_ ), 0 , 74 , 0 , 5346 , 270, 141), // #984
- INST(Vfnmsub132pd , VexRvm_Lx , V(660F38,9E,_,x,1,1,4,FV ), 0 , 162, 0 , 5356 , 194, 139), // #985
- INST(Vfnmsub132ps , VexRvm_Lx , V(660F38,9E,_,x,0,0,4,FV ), 0 , 163, 0 , 5369 , 195, 139), // #986
- INST(Vfnmsub132sd , VexRvm , V(660F38,9F,_,I,1,1,3,T1S), 0 , 164, 0 , 5382 , 196, 140), // #987
- INST(Vfnmsub132ss , VexRvm , V(660F38,9F,_,I,0,0,2,T1S), 0 , 121, 0 , 5395 , 197, 140), // #988
- INST(Vfnmsub213pd , VexRvm_Lx , V(660F38,AE,_,x,1,1,4,FV ), 0 , 162, 0 , 5408 , 194, 139), // #989
- INST(Vfnmsub213ps , VexRvm_Lx , V(660F38,AE,_,x,0,0,4,FV ), 0 , 163, 0 , 5421 , 195, 139), // #990
- INST(Vfnmsub213sd , VexRvm , V(660F38,AF,_,I,1,1,3,T1S), 0 , 164, 0 , 5434 , 196, 140), // #991
- INST(Vfnmsub213ss , VexRvm , V(660F38,AF,_,I,0,0,2,T1S), 0 , 121, 0 , 5447 , 197, 140), // #992
- INST(Vfnmsub231pd , VexRvm_Lx , V(660F38,BE,_,x,1,1,4,FV ), 0 , 162, 0 , 5460 , 194, 139), // #993
- INST(Vfnmsub231ps , VexRvm_Lx , V(660F38,BE,_,x,0,0,4,FV ), 0 , 163, 0 , 5473 , 195, 139), // #994
- INST(Vfnmsub231sd , VexRvm , V(660F38,BF,_,I,1,1,3,T1S), 0 , 164, 0 , 5486 , 196, 140), // #995
- INST(Vfnmsub231ss , VexRvm , V(660F38,BF,_,I,0,0,2,T1S), 0 , 121, 0 , 5499 , 197, 140), // #996
- INST(Vfnmsubpd , Fma4_Lx , V(660F3A,7D,_,x,x,_,_,_ ), 0 , 74 , 0 , 5512 , 268, 141), // #997
- INST(Vfnmsubps , Fma4_Lx , V(660F3A,7C,_,x,x,_,_,_ ), 0 , 74 , 0 , 5522 , 268, 141), // #998
- INST(Vfnmsubsd , Fma4 , V(660F3A,7F,_,0,x,_,_,_ ), 0 , 74 , 0 , 5532 , 269, 141), // #999
- INST(Vfnmsubss , Fma4 , V(660F3A,7E,_,0,x,_,_,_ ), 0 , 74 , 0 , 5542 , 270, 141), // #1000
- INST(Vfpclasspd , VexRmi_Lx , E(660F3A,66,_,x,_,1,4,FV ), 0 , 111, 0 , 5552 , 271, 131), // #1001
- INST(Vfpclassps , VexRmi_Lx , E(660F3A,66,_,x,_,0,4,FV ), 0 , 110, 0 , 5563 , 272, 131), // #1002
- INST(Vfpclasssd , VexRmi_Lx , E(660F3A,67,_,I,_,1,3,T1S), 0 , 160, 0 , 5574 , 273, 66 ), // #1003
- INST(Vfpclassss , VexRmi_Lx , E(660F3A,67,_,I,_,0,2,T1S), 0 , 161, 0 , 5585 , 274, 66 ), // #1004
- INST(Vfrczpd , VexRm_Lx , V(XOP_M9,81,_,x,0,_,_,_ ), 0 , 80 , 0 , 5596 , 275, 142), // #1005
- INST(Vfrczps , VexRm_Lx , V(XOP_M9,80,_,x,0,_,_,_ ), 0 , 80 , 0 , 5604 , 275, 142), // #1006
- INST(Vfrczsd , VexRm , V(XOP_M9,83,_,0,0,_,_,_ ), 0 , 80 , 0 , 5612 , 276, 142), // #1007
- INST(Vfrczss , VexRm , V(XOP_M9,82,_,0,0,_,_,_ ), 0 , 80 , 0 , 5620 , 277, 142), // #1008
- INST(Vgatherdpd , VexRmvRm_VM , V(660F38,92,_,x,1,_,_,_ ), E(660F38,92,_,x,_,1,3,T1S), 165, 81 , 5628 , 278, 143), // #1009
- INST(Vgatherdps , VexRmvRm_VM , V(660F38,92,_,x,0,_,_,_ ), E(660F38,92,_,x,_,0,2,T1S), 97 , 82 , 5639 , 279, 143), // #1010
- INST(Vgatherpf0dpd , VexM_VM , E(660F38,C6,1,2,_,1,3,T1S), 0 , 166, 0 , 5650 , 280, 144), // #1011
- INST(Vgatherpf0dps , VexM_VM , E(660F38,C6,1,2,_,0,2,T1S), 0 , 167, 0 , 5664 , 281, 144), // #1012
- INST(Vgatherpf0qpd , VexM_VM , E(660F38,C7,1,2,_,1,3,T1S), 0 , 166, 0 , 5678 , 282, 144), // #1013
- INST(Vgatherpf0qps , VexM_VM , E(660F38,C7,1,2,_,0,2,T1S), 0 , 167, 0 , 5692 , 282, 144), // #1014
- INST(Vgatherpf1dpd , VexM_VM , E(660F38,C6,2,2,_,1,3,T1S), 0 , 168, 0 , 5706 , 280, 144), // #1015
- INST(Vgatherpf1dps , VexM_VM , E(660F38,C6,2,2,_,0,2,T1S), 0 , 169, 0 , 5720 , 281, 144), // #1016
- INST(Vgatherpf1qpd , VexM_VM , E(660F38,C7,2,2,_,1,3,T1S), 0 , 168, 0 , 5734 , 282, 144), // #1017
- INST(Vgatherpf1qps , VexM_VM , E(660F38,C7,2,2,_,0,2,T1S), 0 , 169, 0 , 5748 , 282, 144), // #1018
- INST(Vgatherqpd , VexRmvRm_VM , V(660F38,93,_,x,1,_,_,_ ), E(660F38,93,_,x,_,1,3,T1S), 165, 83 , 5762 , 283, 143), // #1019
- INST(Vgatherqps , VexRmvRm_VM , V(660F38,93,_,x,0,_,_,_ ), E(660F38,93,_,x,_,0,2,T1S), 97 , 84 , 5773 , 284, 143), // #1020
- INST(Vgetexppd , VexRm_Lx , E(660F38,42,_,x,_,1,4,FV ), 0 , 112, 0 , 5784 , 244, 129), // #1021
- INST(Vgetexpps , VexRm_Lx , E(660F38,42,_,x,_,0,4,FV ), 0 , 113, 0 , 5794 , 248, 129), // #1022
- INST(Vgetexpsd , VexRvm , E(660F38,43,_,I,_,1,3,T1S), 0 , 124, 0 , 5804 , 285, 68 ), // #1023
- INST(Vgetexpss , VexRvm , E(660F38,43,_,I,_,0,2,T1S), 0 , 125, 0 , 5814 , 286, 68 ), // #1024
- INST(Vgetmantpd , VexRmi_Lx , E(660F3A,26,_,x,_,1,4,FV ), 0 , 111, 0 , 5824 , 287, 129), // #1025
- INST(Vgetmantps , VexRmi_Lx , E(660F3A,26,_,x,_,0,4,FV ), 0 , 110, 0 , 5835 , 288, 129), // #1026
- INST(Vgetmantsd , VexRvmi , E(660F3A,27,_,I,_,1,3,T1S), 0 , 160, 0 , 5846 , 266, 68 ), // #1027
- INST(Vgetmantss , VexRvmi , E(660F3A,27,_,I,_,0,2,T1S), 0 , 161, 0 , 5857 , 267, 68 ), // #1028
- INST(Vgf2p8affineinvqb, VexRvmi_Lx , V(660F3A,CF,_,x,1,1,4,FV ), 0 , 170, 0 , 5868 , 289, 145), // #1029
- INST(Vgf2p8affineqb , VexRvmi_Lx , V(660F3A,CE,_,x,1,1,4,FV ), 0 , 170, 0 , 5886 , 289, 145), // #1030
- INST(Vgf2p8mulb , VexRvm_Lx , V(660F38,CF,_,x,0,0,4,FV ), 0 , 163, 0 , 5901 , 290, 145), // #1031
- INST(Vhaddpd , VexRvm_Lx , V(660F00,7C,_,x,I,_,_,_ ), 0 , 70 , 0 , 5912 , 198, 126), // #1032
- INST(Vhaddps , VexRvm_Lx , V(F20F00,7C,_,x,I,_,_,_ ), 0 , 108, 0 , 5920 , 198, 126), // #1033
- INST(Vhsubpd , VexRvm_Lx , V(660F00,7D,_,x,I,_,_,_ ), 0 , 70 , 0 , 5928 , 198, 126), // #1034
- INST(Vhsubps , VexRvm_Lx , V(F20F00,7D,_,x,I,_,_,_ ), 0 , 108, 0 , 5936 , 198, 126), // #1035
- INST(Vinsertf128 , VexRvmi , V(660F3A,18,_,1,0,_,_,_ ), 0 , 154, 0 , 5944 , 291, 126), // #1036
- INST(Vinsertf32x4 , VexRvmi_Lx , E(660F3A,18,_,x,_,0,4,T4 ), 0 , 155, 0 , 5956 , 292, 129), // #1037
- INST(Vinsertf32x8 , VexRvmi , E(660F3A,1A,_,2,_,0,5,T8 ), 0 , 156, 0 , 5969 , 293, 66 ), // #1038
- INST(Vinsertf64x2 , VexRvmi_Lx , E(660F3A,18,_,x,_,1,4,T2 ), 0 , 157, 0 , 5982 , 292, 131), // #1039
- INST(Vinsertf64x4 , VexRvmi , E(660F3A,1A,_,2,_,1,5,T4 ), 0 , 158, 0 , 5995 , 293, 68 ), // #1040
- INST(Vinserti128 , VexRvmi , V(660F3A,38,_,1,0,_,_,_ ), 0 , 154, 0 , 6008 , 291, 132), // #1041
- INST(Vinserti32x4 , VexRvmi_Lx , E(660F3A,38,_,x,_,0,4,T4 ), 0 , 155, 0 , 6020 , 292, 129), // #1042
- INST(Vinserti32x8 , VexRvmi , E(660F3A,3A,_,2,_,0,5,T8 ), 0 , 156, 0 , 6033 , 293, 66 ), // #1043
- INST(Vinserti64x2 , VexRvmi_Lx , E(660F3A,38,_,x,_,1,4,T2 ), 0 , 157, 0 , 6046 , 292, 131), // #1044
- INST(Vinserti64x4 , VexRvmi , E(660F3A,3A,_,2,_,1,5,T4 ), 0 , 158, 0 , 6059 , 293, 68 ), // #1045
- INST(Vinsertps , VexRvmi , V(660F3A,21,_,0,I,0,2,T1S), 0 , 159, 0 , 6072 , 294, 125), // #1046
- INST(Vlddqu , VexRm_Lx , V(F20F00,F0,_,x,I,_,_,_ ), 0 , 108, 0 , 6082 , 295, 126), // #1047
- INST(Vldmxcsr , VexM , V(000F00,AE,2,0,I,_,_,_ ), 0 , 171, 0 , 6089 , 296, 126), // #1048
- INST(Vmaskmovdqu , VexRm_ZDI , V(660F00,F7,_,0,I,_,_,_ ), 0 , 70 , 0 , 6098 , 297, 126), // #1049
- INST(Vmaskmovpd , VexRvmMvr_Lx , V(660F38,2D,_,x,0,_,_,_ ), V(660F38,2F,_,x,0,_,_,_ ), 97 , 85 , 6110 , 298, 126), // #1050
- INST(Vmaskmovps , VexRvmMvr_Lx , V(660F38,2C,_,x,0,_,_,_ ), V(660F38,2E,_,x,0,_,_,_ ), 97 , 86 , 6121 , 298, 126), // #1051
- INST(Vmaxpd , VexRvm_Lx , V(660F00,5F,_,x,I,1,4,FV ), 0 , 104, 0 , 6132 , 299, 124), // #1052
- INST(Vmaxps , VexRvm_Lx , V(000F00,5F,_,x,I,0,4,FV ), 0 , 105, 0 , 6139 , 300, 124), // #1053
- INST(Vmaxsd , VexRvm , V(F20F00,5F,_,I,I,1,3,T1S), 0 , 106, 0 , 6146 , 301, 124), // #1054
- INST(Vmaxss , VexRvm , V(F30F00,5F,_,I,I,0,2,T1S), 0 , 107, 0 , 6153 , 240, 124), // #1055
+ INST(V4fmaddps , VexRm_T1_4X , E(F20F38,9A,_,2,_,0,4,T4X), 0 , 102, 0 , 3247 , 193, 123), // #798
+ INST(V4fmaddss , VexRm_T1_4X , E(F20F38,9B,_,0,_,0,4,T4X), 0 , 103, 0 , 3257 , 194, 123), // #799
+ INST(V4fnmaddps , VexRm_T1_4X , E(F20F38,AA,_,2,_,0,4,T4X), 0 , 102, 0 , 3267 , 193, 123), // #800
+ INST(V4fnmaddss , VexRm_T1_4X , E(F20F38,AB,_,0,_,0,4,T4X), 0 , 103, 0 , 3278 , 194, 123), // #801
+ INST(Vaddpd , VexRvm_Lx , V(660F00,58,_,x,I,1,4,FV ), 0 , 104, 0 , 3289 , 195, 124), // #802
+ INST(Vaddps , VexRvm_Lx , V(000F00,58,_,x,I,0,4,FV ), 0 , 105, 0 , 3296 , 196, 124), // #803
+ INST(Vaddsd , VexRvm , V(F20F00,58,_,I,I,1,3,T1S), 0 , 106, 0 , 3303 , 197, 125), // #804
+ INST(Vaddss , VexRvm , V(F30F00,58,_,I,I,0,2,T1S), 0 , 107, 0 , 3310 , 198, 125), // #805
+ INST(Vaddsubpd , VexRvm_Lx , V(660F00,D0,_,x,I,_,_,_ ), 0 , 70 , 0 , 3317 , 199, 126), // #806
+ INST(Vaddsubps , VexRvm_Lx , V(F20F00,D0,_,x,I,_,_,_ ), 0 , 108, 0 , 3327 , 199, 126), // #807
+ INST(Vaesdec , VexRvm_Lx , V(660F38,DE,_,x,I,_,4,FVM), 0 , 109, 0 , 3337 , 200, 127), // #808
+ INST(Vaesdeclast , VexRvm_Lx , V(660F38,DF,_,x,I,_,4,FVM), 0 , 109, 0 , 3345 , 200, 127), // #809
+ INST(Vaesenc , VexRvm_Lx , V(660F38,DC,_,x,I,_,4,FVM), 0 , 109, 0 , 3357 , 200, 127), // #810
+ INST(Vaesenclast , VexRvm_Lx , V(660F38,DD,_,x,I,_,4,FVM), 0 , 109, 0 , 3365 , 200, 127), // #811
+ INST(Vaesimc , VexRm , V(660F38,DB,_,0,I,_,_,_ ), 0 , 97 , 0 , 3377 , 201, 128), // #812
+ INST(Vaeskeygenassist , VexRmi , V(660F3A,DF,_,0,I,_,_,_ ), 0 , 74 , 0 , 3385 , 202, 128), // #813
+ INST(Valignd , VexRvmi_Lx , E(660F3A,03,_,x,_,0,4,FV ), 0 , 110, 0 , 3402 , 203, 129), // #814
+ INST(Valignq , VexRvmi_Lx , E(660F3A,03,_,x,_,1,4,FV ), 0 , 111, 0 , 3410 , 204, 129), // #815
+ INST(Vandnpd , VexRvm_Lx , V(660F00,55,_,x,I,1,4,FV ), 0 , 104, 0 , 3418 , 205, 130), // #816
+ INST(Vandnps , VexRvm_Lx , V(000F00,55,_,x,I,0,4,FV ), 0 , 105, 0 , 3426 , 206, 130), // #817
+ INST(Vandpd , VexRvm_Lx , V(660F00,54,_,x,I,1,4,FV ), 0 , 104, 0 , 3434 , 207, 130), // #818
+ INST(Vandps , VexRvm_Lx , V(000F00,54,_,x,I,0,4,FV ), 0 , 105, 0 , 3441 , 208, 130), // #819
+ INST(Vblendmpd , VexRvm_Lx , E(660F38,65,_,x,_,1,4,FV ), 0 , 112, 0 , 3448 , 209, 129), // #820
+ INST(Vblendmps , VexRvm_Lx , E(660F38,65,_,x,_,0,4,FV ), 0 , 113, 0 , 3458 , 210, 129), // #821
+ INST(Vblendpd , VexRvmi_Lx , V(660F3A,0D,_,x,I,_,_,_ ), 0 , 74 , 0 , 3468 , 211, 126), // #822
+ INST(Vblendps , VexRvmi_Lx , V(660F3A,0C,_,x,I,_,_,_ ), 0 , 74 , 0 , 3477 , 211, 126), // #823
+ INST(Vblendvpd , VexRvmr_Lx , V(660F3A,4B,_,x,0,_,_,_ ), 0 , 74 , 0 , 3486 , 212, 126), // #824
+ INST(Vblendvps , VexRvmr_Lx , V(660F3A,4A,_,x,0,_,_,_ ), 0 , 74 , 0 , 3496 , 212, 126), // #825
+ INST(Vbroadcastf128 , VexRm , V(660F38,1A,_,1,0,_,_,_ ), 0 , 114, 0 , 3506 , 213, 126), // #826
+ INST(Vbroadcastf32x2 , VexRm_Lx , E(660F38,19,_,x,_,0,3,T2 ), 0 , 115, 0 , 3521 , 214, 131), // #827
+ INST(Vbroadcastf32x4 , VexRm_Lx , E(660F38,1A,_,x,_,0,4,T4 ), 0 , 116, 0 , 3537 , 215, 68 ), // #828
+ INST(Vbroadcastf32x8 , VexRm , E(660F38,1B,_,2,_,0,5,T8 ), 0 , 117, 0 , 3553 , 216, 66 ), // #829
+ INST(Vbroadcastf64x2 , VexRm_Lx , E(660F38,1A,_,x,_,1,4,T2 ), 0 , 118, 0 , 3569 , 215, 131), // #830
+ INST(Vbroadcastf64x4 , VexRm , E(660F38,1B,_,2,_,1,5,T4 ), 0 , 119, 0 , 3585 , 216, 68 ), // #831
+ INST(Vbroadcasti128 , VexRm , V(660F38,5A,_,1,0,_,_,_ ), 0 , 114, 0 , 3601 , 213, 132), // #832
+ INST(Vbroadcasti32x2 , VexRm_Lx , E(660F38,59,_,x,_,0,3,T2 ), 0 , 115, 0 , 3616 , 217, 131), // #833
+ INST(Vbroadcasti32x4 , VexRm_Lx , E(660F38,5A,_,x,_,0,4,T4 ), 0 , 116, 0 , 3632 , 215, 129), // #834
+ INST(Vbroadcasti32x8 , VexRm , E(660F38,5B,_,2,_,0,5,T8 ), 0 , 117, 0 , 3648 , 216, 66 ), // #835
+ INST(Vbroadcasti64x2 , VexRm_Lx , E(660F38,5A,_,x,_,1,4,T2 ), 0 , 118, 0 , 3664 , 215, 131), // #836
+ INST(Vbroadcasti64x4 , VexRm , E(660F38,5B,_,2,_,1,5,T4 ), 0 , 119, 0 , 3680 , 216, 68 ), // #837
+ INST(Vbroadcastsd , VexRm_Lx , V(660F38,19,_,x,0,1,3,T1S), 0 , 120, 0 , 3696 , 218, 133), // #838
+ INST(Vbroadcastss , VexRm_Lx , V(660F38,18,_,x,0,0,2,T1S), 0 , 121, 0 , 3709 , 219, 133), // #839
+ INST(Vcmppd , VexRvmi_Lx_KEvex , V(660F00,C2,_,x,I,1,4,FV ), 0 , 104, 0 , 3722 , 220, 124), // #840
+ INST(Vcmpps , VexRvmi_Lx_KEvex , V(000F00,C2,_,x,I,0,4,FV ), 0 , 105, 0 , 3729 , 221, 124), // #841
+ INST(Vcmpsd , VexRvmi_KEvex , V(F20F00,C2,_,I,I,1,3,T1S), 0 , 106, 0 , 3736 , 222, 125), // #842
+ INST(Vcmpss , VexRvmi_KEvex , V(F30F00,C2,_,I,I,0,2,T1S), 0 , 107, 0 , 3743 , 223, 125), // #843
+ INST(Vcomisd , VexRm , V(660F00,2F,_,I,I,1,3,T1S), 0 , 122, 0 , 3750 , 224, 134), // #844
+ INST(Vcomiss , VexRm , V(000F00,2F,_,I,I,0,2,T1S), 0 , 123, 0 , 3758 , 225, 134), // #845
+ INST(Vcompresspd , VexMr_Lx , E(660F38,8A,_,x,_,1,3,T1S), 0 , 124, 0 , 3766 , 226, 129), // #846
+ INST(Vcompressps , VexMr_Lx , E(660F38,8A,_,x,_,0,2,T1S), 0 , 125, 0 , 3778 , 226, 129), // #847
+ INST(Vcvtdq2pd , VexRm_Lx , V(F30F00,E6,_,x,I,0,3,HV ), 0 , 126, 0 , 3790 , 227, 124), // #848
+ INST(Vcvtdq2ps , VexRm_Lx , V(000F00,5B,_,x,I,0,4,FV ), 0 , 105, 0 , 3800 , 228, 124), // #849
+ INST(Vcvtne2ps2bf16 , VexRvm_Lx , E(F20F38,72,_,_,_,0,4,FV ), 0 , 127, 0 , 3810 , 210, 135), // #850
+ INST(Vcvtneps2bf16 , VexRm_Lx_Narrow , E(F30F38,72,_,_,_,0,4,FV ), 0 , 128, 0 , 3825 , 229, 135), // #851
+ INST(Vcvtpd2dq , VexRm_Lx_Narrow , V(F20F00,E6,_,x,I,1,4,FV ), 0 , 129, 0 , 3839 , 230, 124), // #852
+ INST(Vcvtpd2ps , VexRm_Lx_Narrow , V(660F00,5A,_,x,I,1,4,FV ), 0 , 104, 0 , 3849 , 230, 124), // #853
+ INST(Vcvtpd2qq , VexRm_Lx , E(660F00,7B,_,x,_,1,4,FV ), 0 , 130, 0 , 3859 , 231, 131), // #854
+ INST(Vcvtpd2udq , VexRm_Lx_Narrow , E(000F00,79,_,x,_,1,4,FV ), 0 , 131, 0 , 3869 , 232, 129), // #855
+ INST(Vcvtpd2uqq , VexRm_Lx , E(660F00,79,_,x,_,1,4,FV ), 0 , 130, 0 , 3880 , 231, 131), // #856
+ INST(Vcvtph2ps , VexRm_Lx , V(660F38,13,_,x,0,0,3,HVM), 0 , 132, 0 , 3891 , 233, 136), // #857
+ INST(Vcvtps2dq , VexRm_Lx , V(660F00,5B,_,x,I,0,4,FV ), 0 , 133, 0 , 3901 , 228, 124), // #858
+ INST(Vcvtps2pd , VexRm_Lx , V(000F00,5A,_,x,I,0,3,HV ), 0 , 134, 0 , 3911 , 234, 124), // #859
+ INST(Vcvtps2ph , VexMri_Lx , V(660F3A,1D,_,x,0,0,3,HVM), 0 , 135, 0 , 3921 , 235, 136), // #860
+ INST(Vcvtps2qq , VexRm_Lx , E(660F00,7B,_,x,_,0,3,HV ), 0 , 136, 0 , 3931 , 236, 131), // #861
+ INST(Vcvtps2udq , VexRm_Lx , E(000F00,79,_,x,_,0,4,FV ), 0 , 137, 0 , 3941 , 237, 129), // #862
+ INST(Vcvtps2uqq , VexRm_Lx , E(660F00,79,_,x,_,0,3,HV ), 0 , 136, 0 , 3952 , 236, 131), // #863
+ INST(Vcvtqq2pd , VexRm_Lx , E(F30F00,E6,_,x,_,1,4,FV ), 0 , 138, 0 , 3963 , 231, 131), // #864
+ INST(Vcvtqq2ps , VexRm_Lx_Narrow , E(000F00,5B,_,x,_,1,4,FV ), 0 , 131, 0 , 3973 , 232, 131), // #865
+ INST(Vcvtsd2si , VexRm_Wx , V(F20F00,2D,_,I,x,x,3,T1F), 0 , 139, 0 , 3983 , 238, 125), // #866
+ INST(Vcvtsd2ss , VexRvm , V(F20F00,5A,_,I,I,1,3,T1S), 0 , 106, 0 , 3993 , 197, 125), // #867
+ INST(Vcvtsd2usi , VexRm_Wx , E(F20F00,79,_,I,_,x,3,T1F), 0 , 140, 0 , 4003 , 239, 68 ), // #868
+ INST(Vcvtsi2sd , VexRvm_Wx , V(F20F00,2A,_,I,x,x,2,T1W), 0 , 141, 0 , 4014 , 240, 125), // #869
+ INST(Vcvtsi2ss , VexRvm_Wx , V(F30F00,2A,_,I,x,x,2,T1W), 0 , 142, 0 , 4024 , 240, 125), // #870
+ INST(Vcvtss2sd , VexRvm , V(F30F00,5A,_,I,I,0,2,T1S), 0 , 107, 0 , 4034 , 241, 125), // #871
+ INST(Vcvtss2si , VexRm_Wx , V(F30F00,2D,_,I,x,x,2,T1F), 0 , 143, 0 , 4044 , 242, 125), // #872
+ INST(Vcvtss2usi , VexRm_Wx , E(F30F00,79,_,I,_,x,2,T1F), 0 , 144, 0 , 4054 , 243, 68 ), // #873
+ INST(Vcvttpd2dq , VexRm_Lx_Narrow , V(660F00,E6,_,x,I,1,4,FV ), 0 , 104, 0 , 4065 , 244, 124), // #874
+ INST(Vcvttpd2qq , VexRm_Lx , E(660F00,7A,_,x,_,1,4,FV ), 0 , 130, 0 , 4076 , 245, 129), // #875
+ INST(Vcvttpd2udq , VexRm_Lx_Narrow , E(000F00,78,_,x,_,1,4,FV ), 0 , 131, 0 , 4087 , 246, 129), // #876
+ INST(Vcvttpd2uqq , VexRm_Lx , E(660F00,78,_,x,_,1,4,FV ), 0 , 130, 0 , 4099 , 245, 131), // #877
+ INST(Vcvttps2dq , VexRm_Lx , V(F30F00,5B,_,x,I,0,4,FV ), 0 , 145, 0 , 4111 , 247, 124), // #878
+ INST(Vcvttps2qq , VexRm_Lx , E(660F00,7A,_,x,_,0,3,HV ), 0 , 136, 0 , 4122 , 248, 131), // #879
+ INST(Vcvttps2udq , VexRm_Lx , E(000F00,78,_,x,_,0,4,FV ), 0 , 137, 0 , 4133 , 249, 129), // #880
+ INST(Vcvttps2uqq , VexRm_Lx , E(660F00,78,_,x,_,0,3,HV ), 0 , 136, 0 , 4145 , 248, 131), // #881
+ INST(Vcvttsd2si , VexRm_Wx , V(F20F00,2C,_,I,x,x,3,T1F), 0 , 139, 0 , 4157 , 250, 125), // #882
+ INST(Vcvttsd2usi , VexRm_Wx , E(F20F00,78,_,I,_,x,3,T1F), 0 , 140, 0 , 4168 , 251, 68 ), // #883
+ INST(Vcvttss2si , VexRm_Wx , V(F30F00,2C,_,I,x,x,2,T1F), 0 , 143, 0 , 4180 , 252, 125), // #884
+ INST(Vcvttss2usi , VexRm_Wx , E(F30F00,78,_,I,_,x,2,T1F), 0 , 144, 0 , 4191 , 253, 68 ), // #885
+ INST(Vcvtudq2pd , VexRm_Lx , E(F30F00,7A,_,x,_,0,3,HV ), 0 , 146, 0 , 4203 , 254, 129), // #886
+ INST(Vcvtudq2ps , VexRm_Lx , E(F20F00,7A,_,x,_,0,4,FV ), 0 , 147, 0 , 4214 , 237, 129), // #887
+ INST(Vcvtuqq2pd , VexRm_Lx , E(F30F00,7A,_,x,_,1,4,FV ), 0 , 138, 0 , 4225 , 231, 131), // #888
+ INST(Vcvtuqq2ps , VexRm_Lx_Narrow , E(F20F00,7A,_,x,_,1,4,FV ), 0 , 148, 0 , 4236 , 232, 131), // #889
+ INST(Vcvtusi2sd , VexRvm_Wx , E(F20F00,7B,_,I,_,x,2,T1W), 0 , 149, 0 , 4247 , 255, 68 ), // #890
+ INST(Vcvtusi2ss , VexRvm_Wx , E(F30F00,7B,_,I,_,x,2,T1W), 0 , 150, 0 , 4258 , 255, 68 ), // #891
+ INST(Vdbpsadbw , VexRvmi_Lx , E(660F3A,42,_,x,_,0,4,FVM), 0 , 151, 0 , 4269 , 256, 137), // #892
+ INST(Vdivpd , VexRvm_Lx , V(660F00,5E,_,x,I,1,4,FV ), 0 , 104, 0 , 4279 , 195, 124), // #893
+ INST(Vdivps , VexRvm_Lx , V(000F00,5E,_,x,I,0,4,FV ), 0 , 105, 0 , 4286 , 196, 124), // #894
+ INST(Vdivsd , VexRvm , V(F20F00,5E,_,I,I,1,3,T1S), 0 , 106, 0 , 4293 , 197, 125), // #895
+ INST(Vdivss , VexRvm , V(F30F00,5E,_,I,I,0,2,T1S), 0 , 107, 0 , 4300 , 198, 125), // #896
+ INST(Vdpbf16ps , VexRvm_Lx , E(F30F38,52,_,_,_,0,4,FV ), 0 , 128, 0 , 4307 , 210, 135), // #897
+ INST(Vdppd , VexRvmi_Lx , V(660F3A,41,_,x,I,_,_,_ ), 0 , 74 , 0 , 4317 , 257, 126), // #898
+ INST(Vdpps , VexRvmi_Lx , V(660F3A,40,_,x,I,_,_,_ ), 0 , 74 , 0 , 4323 , 211, 126), // #899
+ INST(Verr , X86M_NoSize , O(000F00,00,4,_,_,_,_,_ ), 0 , 98 , 0 , 4329 , 106, 10 ), // #900
+ INST(Verw , X86M_NoSize , O(000F00,00,5,_,_,_,_,_ ), 0 , 78 , 0 , 4334 , 106, 10 ), // #901
+ INST(Vexp2pd , VexRm , E(660F38,C8,_,2,_,1,4,FV ), 0 , 152, 0 , 4339 , 258, 138), // #902
+ INST(Vexp2ps , VexRm , E(660F38,C8,_,2,_,0,4,FV ), 0 , 153, 0 , 4347 , 259, 138), // #903
+ INST(Vexpandpd , VexRm_Lx , E(660F38,88,_,x,_,1,3,T1S), 0 , 124, 0 , 4355 , 260, 129), // #904
+ INST(Vexpandps , VexRm_Lx , E(660F38,88,_,x,_,0,2,T1S), 0 , 125, 0 , 4365 , 260, 129), // #905
+ INST(Vextractf128 , VexMri , V(660F3A,19,_,1,0,_,_,_ ), 0 , 154, 0 , 4375 , 261, 126), // #906
+ INST(Vextractf32x4 , VexMri_Lx , E(660F3A,19,_,x,_,0,4,T4 ), 0 , 155, 0 , 4388 , 262, 129), // #907
+ INST(Vextractf32x8 , VexMri , E(660F3A,1B,_,2,_,0,5,T8 ), 0 , 156, 0 , 4402 , 263, 66 ), // #908
+ INST(Vextractf64x2 , VexMri_Lx , E(660F3A,19,_,x,_,1,4,T2 ), 0 , 157, 0 , 4416 , 262, 131), // #909
+ INST(Vextractf64x4 , VexMri , E(660F3A,1B,_,2,_,1,5,T4 ), 0 , 158, 0 , 4430 , 263, 68 ), // #910
+ INST(Vextracti128 , VexMri , V(660F3A,39,_,1,0,_,_,_ ), 0 , 154, 0 , 4444 , 261, 132), // #911
+ INST(Vextracti32x4 , VexMri_Lx , E(660F3A,39,_,x,_,0,4,T4 ), 0 , 155, 0 , 4457 , 262, 129), // #912
+ INST(Vextracti32x8 , VexMri , E(660F3A,3B,_,2,_,0,5,T8 ), 0 , 156, 0 , 4471 , 263, 66 ), // #913
+ INST(Vextracti64x2 , VexMri_Lx , E(660F3A,39,_,x,_,1,4,T2 ), 0 , 157, 0 , 4485 , 262, 131), // #914
+ INST(Vextracti64x4 , VexMri , E(660F3A,3B,_,2,_,1,5,T4 ), 0 , 158, 0 , 4499 , 263, 68 ), // #915
+ INST(Vextractps , VexMri , V(660F3A,17,_,0,I,I,2,T1S), 0 , 159, 0 , 4513 , 264, 125), // #916
+ INST(Vfixupimmpd , VexRvmi_Lx , E(660F3A,54,_,x,_,1,4,FV ), 0 , 111, 0 , 4524 , 265, 129), // #917
+ INST(Vfixupimmps , VexRvmi_Lx , E(660F3A,54,_,x,_,0,4,FV ), 0 , 110, 0 , 4536 , 266, 129), // #918
+ INST(Vfixupimmsd , VexRvmi , E(660F3A,55,_,I,_,1,3,T1S), 0 , 160, 0 , 4548 , 267, 68 ), // #919
+ INST(Vfixupimmss , VexRvmi , E(660F3A,55,_,I,_,0,2,T1S), 0 , 161, 0 , 4560 , 268, 68 ), // #920
+ INST(Vfmadd132pd , VexRvm_Lx , V(660F38,98,_,x,1,1,4,FV ), 0 , 162, 0 , 4572 , 195, 139), // #921
+ INST(Vfmadd132ps , VexRvm_Lx , V(660F38,98,_,x,0,0,4,FV ), 0 , 163, 0 , 4584 , 196, 139), // #922
+ INST(Vfmadd132sd , VexRvm , V(660F38,99,_,I,1,1,3,T1S), 0 , 164, 0 , 4596 , 197, 140), // #923
+ INST(Vfmadd132ss , VexRvm , V(660F38,99,_,I,0,0,2,T1S), 0 , 121, 0 , 4608 , 198, 140), // #924
+ INST(Vfmadd213pd , VexRvm_Lx , V(660F38,A8,_,x,1,1,4,FV ), 0 , 162, 0 , 4620 , 195, 139), // #925
+ INST(Vfmadd213ps , VexRvm_Lx , V(660F38,A8,_,x,0,0,4,FV ), 0 , 163, 0 , 4632 , 196, 139), // #926
+ INST(Vfmadd213sd , VexRvm , V(660F38,A9,_,I,1,1,3,T1S), 0 , 164, 0 , 4644 , 197, 140), // #927
+ INST(Vfmadd213ss , VexRvm , V(660F38,A9,_,I,0,0,2,T1S), 0 , 121, 0 , 4656 , 198, 140), // #928
+ INST(Vfmadd231pd , VexRvm_Lx , V(660F38,B8,_,x,1,1,4,FV ), 0 , 162, 0 , 4668 , 195, 139), // #929
+ INST(Vfmadd231ps , VexRvm_Lx , V(660F38,B8,_,x,0,0,4,FV ), 0 , 163, 0 , 4680 , 196, 139), // #930
+ INST(Vfmadd231sd , VexRvm , V(660F38,B9,_,I,1,1,3,T1S), 0 , 164, 0 , 4692 , 197, 140), // #931
+ INST(Vfmadd231ss , VexRvm , V(660F38,B9,_,I,0,0,2,T1S), 0 , 121, 0 , 4704 , 198, 140), // #932
+ INST(Vfmaddpd , Fma4_Lx , V(660F3A,69,_,x,x,_,_,_ ), 0 , 74 , 0 , 4716 , 269, 141), // #933
+ INST(Vfmaddps , Fma4_Lx , V(660F3A,68,_,x,x,_,_,_ ), 0 , 74 , 0 , 4725 , 269, 141), // #934
+ INST(Vfmaddsd , Fma4 , V(660F3A,6B,_,0,x,_,_,_ ), 0 , 74 , 0 , 4734 , 270, 141), // #935
+ INST(Vfmaddss , Fma4 , V(660F3A,6A,_,0,x,_,_,_ ), 0 , 74 , 0 , 4743 , 271, 141), // #936
+ INST(Vfmaddsub132pd , VexRvm_Lx , V(660F38,96,_,x,1,1,4,FV ), 0 , 162, 0 , 4752 , 195, 139), // #937
+ INST(Vfmaddsub132ps , VexRvm_Lx , V(660F38,96,_,x,0,0,4,FV ), 0 , 163, 0 , 4767 , 196, 139), // #938
+ INST(Vfmaddsub213pd , VexRvm_Lx , V(660F38,A6,_,x,1,1,4,FV ), 0 , 162, 0 , 4782 , 195, 139), // #939
+ INST(Vfmaddsub213ps , VexRvm_Lx , V(660F38,A6,_,x,0,0,4,FV ), 0 , 163, 0 , 4797 , 196, 139), // #940
+ INST(Vfmaddsub231pd , VexRvm_Lx , V(660F38,B6,_,x,1,1,4,FV ), 0 , 162, 0 , 4812 , 195, 139), // #941
+ INST(Vfmaddsub231ps , VexRvm_Lx , V(660F38,B6,_,x,0,0,4,FV ), 0 , 163, 0 , 4827 , 196, 139), // #942
+ INST(Vfmaddsubpd , Fma4_Lx , V(660F3A,5D,_,x,x,_,_,_ ), 0 , 74 , 0 , 4842 , 269, 141), // #943
+ INST(Vfmaddsubps , Fma4_Lx , V(660F3A,5C,_,x,x,_,_,_ ), 0 , 74 , 0 , 4854 , 269, 141), // #944
+ INST(Vfmsub132pd , VexRvm_Lx , V(660F38,9A,_,x,1,1,4,FV ), 0 , 162, 0 , 4866 , 195, 139), // #945
+ INST(Vfmsub132ps , VexRvm_Lx , V(660F38,9A,_,x,0,0,4,FV ), 0 , 163, 0 , 4878 , 196, 139), // #946
+ INST(Vfmsub132sd , VexRvm , V(660F38,9B,_,I,1,1,3,T1S), 0 , 164, 0 , 4890 , 197, 140), // #947
+ INST(Vfmsub132ss , VexRvm , V(660F38,9B,_,I,0,0,2,T1S), 0 , 121, 0 , 4902 , 198, 140), // #948
+ INST(Vfmsub213pd , VexRvm_Lx , V(660F38,AA,_,x,1,1,4,FV ), 0 , 162, 0 , 4914 , 195, 139), // #949
+ INST(Vfmsub213ps , VexRvm_Lx , V(660F38,AA,_,x,0,0,4,FV ), 0 , 163, 0 , 4926 , 196, 139), // #950
+ INST(Vfmsub213sd , VexRvm , V(660F38,AB,_,I,1,1,3,T1S), 0 , 164, 0 , 4938 , 197, 140), // #951
+ INST(Vfmsub213ss , VexRvm , V(660F38,AB,_,I,0,0,2,T1S), 0 , 121, 0 , 4950 , 198, 140), // #952
+ INST(Vfmsub231pd , VexRvm_Lx , V(660F38,BA,_,x,1,1,4,FV ), 0 , 162, 0 , 4962 , 195, 139), // #953
+ INST(Vfmsub231ps , VexRvm_Lx , V(660F38,BA,_,x,0,0,4,FV ), 0 , 163, 0 , 4974 , 196, 139), // #954
+ INST(Vfmsub231sd , VexRvm , V(660F38,BB,_,I,1,1,3,T1S), 0 , 164, 0 , 4986 , 197, 140), // #955
+ INST(Vfmsub231ss , VexRvm , V(660F38,BB,_,I,0,0,2,T1S), 0 , 121, 0 , 4998 , 198, 140), // #956
+ INST(Vfmsubadd132pd , VexRvm_Lx , V(660F38,97,_,x,1,1,4,FV ), 0 , 162, 0 , 5010 , 195, 139), // #957
+ INST(Vfmsubadd132ps , VexRvm_Lx , V(660F38,97,_,x,0,0,4,FV ), 0 , 163, 0 , 5025 , 196, 139), // #958
+ INST(Vfmsubadd213pd , VexRvm_Lx , V(660F38,A7,_,x,1,1,4,FV ), 0 , 162, 0 , 5040 , 195, 139), // #959
+ INST(Vfmsubadd213ps , VexRvm_Lx , V(660F38,A7,_,x,0,0,4,FV ), 0 , 163, 0 , 5055 , 196, 139), // #960
+ INST(Vfmsubadd231pd , VexRvm_Lx , V(660F38,B7,_,x,1,1,4,FV ), 0 , 162, 0 , 5070 , 195, 139), // #961
+ INST(Vfmsubadd231ps , VexRvm_Lx , V(660F38,B7,_,x,0,0,4,FV ), 0 , 163, 0 , 5085 , 196, 139), // #962
+ INST(Vfmsubaddpd , Fma4_Lx , V(660F3A,5F,_,x,x,_,_,_ ), 0 , 74 , 0 , 5100 , 269, 141), // #963
+ INST(Vfmsubaddps , Fma4_Lx , V(660F3A,5E,_,x,x,_,_,_ ), 0 , 74 , 0 , 5112 , 269, 141), // #964
+ INST(Vfmsubpd , Fma4_Lx , V(660F3A,6D,_,x,x,_,_,_ ), 0 , 74 , 0 , 5124 , 269, 141), // #965
+ INST(Vfmsubps , Fma4_Lx , V(660F3A,6C,_,x,x,_,_,_ ), 0 , 74 , 0 , 5133 , 269, 141), // #966
+ INST(Vfmsubsd , Fma4 , V(660F3A,6F,_,0,x,_,_,_ ), 0 , 74 , 0 , 5142 , 270, 141), // #967
+ INST(Vfmsubss , Fma4 , V(660F3A,6E,_,0,x,_,_,_ ), 0 , 74 , 0 , 5151 , 271, 141), // #968
+ INST(Vfnmadd132pd , VexRvm_Lx , V(660F38,9C,_,x,1,1,4,FV ), 0 , 162, 0 , 5160 , 195, 139), // #969
+ INST(Vfnmadd132ps , VexRvm_Lx , V(660F38,9C,_,x,0,0,4,FV ), 0 , 163, 0 , 5173 , 196, 139), // #970
+ INST(Vfnmadd132sd , VexRvm , V(660F38,9D,_,I,1,1,3,T1S), 0 , 164, 0 , 5186 , 197, 140), // #971
+ INST(Vfnmadd132ss , VexRvm , V(660F38,9D,_,I,0,0,2,T1S), 0 , 121, 0 , 5199 , 198, 140), // #972
+ INST(Vfnmadd213pd , VexRvm_Lx , V(660F38,AC,_,x,1,1,4,FV ), 0 , 162, 0 , 5212 , 195, 139), // #973
+ INST(Vfnmadd213ps , VexRvm_Lx , V(660F38,AC,_,x,0,0,4,FV ), 0 , 163, 0 , 5225 , 196, 139), // #974
+ INST(Vfnmadd213sd , VexRvm , V(660F38,AD,_,I,1,1,3,T1S), 0 , 164, 0 , 5238 , 197, 140), // #975
+ INST(Vfnmadd213ss , VexRvm , V(660F38,AD,_,I,0,0,2,T1S), 0 , 121, 0 , 5251 , 198, 140), // #976
+ INST(Vfnmadd231pd , VexRvm_Lx , V(660F38,BC,_,x,1,1,4,FV ), 0 , 162, 0 , 5264 , 195, 139), // #977
+ INST(Vfnmadd231ps , VexRvm_Lx , V(660F38,BC,_,x,0,0,4,FV ), 0 , 163, 0 , 5277 , 196, 139), // #978
+ INST(Vfnmadd231sd , VexRvm , V(660F38,BD,_,I,1,1,3,T1S), 0 , 164, 0 , 5290 , 197, 140), // #979
+ INST(Vfnmadd231ss , VexRvm , V(660F38,BD,_,I,0,0,2,T1S), 0 , 121, 0 , 5303 , 198, 140), // #980
+ INST(Vfnmaddpd , Fma4_Lx , V(660F3A,79,_,x,x,_,_,_ ), 0 , 74 , 0 , 5316 , 269, 141), // #981
+ INST(Vfnmaddps , Fma4_Lx , V(660F3A,78,_,x,x,_,_,_ ), 0 , 74 , 0 , 5326 , 269, 141), // #982
+ INST(Vfnmaddsd , Fma4 , V(660F3A,7B,_,0,x,_,_,_ ), 0 , 74 , 0 , 5336 , 270, 141), // #983
+ INST(Vfnmaddss , Fma4 , V(660F3A,7A,_,0,x,_,_,_ ), 0 , 74 , 0 , 5346 , 271, 141), // #984
+ INST(Vfnmsub132pd , VexRvm_Lx , V(660F38,9E,_,x,1,1,4,FV ), 0 , 162, 0 , 5356 , 195, 139), // #985
+ INST(Vfnmsub132ps , VexRvm_Lx , V(660F38,9E,_,x,0,0,4,FV ), 0 , 163, 0 , 5369 , 196, 139), // #986
+ INST(Vfnmsub132sd , VexRvm , V(660F38,9F,_,I,1,1,3,T1S), 0 , 164, 0 , 5382 , 197, 140), // #987
+ INST(Vfnmsub132ss , VexRvm , V(660F38,9F,_,I,0,0,2,T1S), 0 , 121, 0 , 5395 , 198, 140), // #988
+ INST(Vfnmsub213pd , VexRvm_Lx , V(660F38,AE,_,x,1,1,4,FV ), 0 , 162, 0 , 5408 , 195, 139), // #989
+ INST(Vfnmsub213ps , VexRvm_Lx , V(660F38,AE,_,x,0,0,4,FV ), 0 , 163, 0 , 5421 , 196, 139), // #990
+ INST(Vfnmsub213sd , VexRvm , V(660F38,AF,_,I,1,1,3,T1S), 0 , 164, 0 , 5434 , 197, 140), // #991
+ INST(Vfnmsub213ss , VexRvm , V(660F38,AF,_,I,0,0,2,T1S), 0 , 121, 0 , 5447 , 198, 140), // #992
+ INST(Vfnmsub231pd , VexRvm_Lx , V(660F38,BE,_,x,1,1,4,FV ), 0 , 162, 0 , 5460 , 195, 139), // #993
+ INST(Vfnmsub231ps , VexRvm_Lx , V(660F38,BE,_,x,0,0,4,FV ), 0 , 163, 0 , 5473 , 196, 139), // #994
+ INST(Vfnmsub231sd , VexRvm , V(660F38,BF,_,I,1,1,3,T1S), 0 , 164, 0 , 5486 , 197, 140), // #995
+ INST(Vfnmsub231ss , VexRvm , V(660F38,BF,_,I,0,0,2,T1S), 0 , 121, 0 , 5499 , 198, 140), // #996
+ INST(Vfnmsubpd , Fma4_Lx , V(660F3A,7D,_,x,x,_,_,_ ), 0 , 74 , 0 , 5512 , 269, 141), // #997
+ INST(Vfnmsubps , Fma4_Lx , V(660F3A,7C,_,x,x,_,_,_ ), 0 , 74 , 0 , 5522 , 269, 141), // #998
+ INST(Vfnmsubsd , Fma4 , V(660F3A,7F,_,0,x,_,_,_ ), 0 , 74 , 0 , 5532 , 270, 141), // #999
+ INST(Vfnmsubss , Fma4 , V(660F3A,7E,_,0,x,_,_,_ ), 0 , 74 , 0 , 5542 , 271, 141), // #1000
+ INST(Vfpclasspd , VexRmi_Lx , E(660F3A,66,_,x,_,1,4,FV ), 0 , 111, 0 , 5552 , 272, 131), // #1001
+ INST(Vfpclassps , VexRmi_Lx , E(660F3A,66,_,x,_,0,4,FV ), 0 , 110, 0 , 5563 , 273, 131), // #1002
+ INST(Vfpclasssd , VexRmi_Lx , E(660F3A,67,_,I,_,1,3,T1S), 0 , 160, 0 , 5574 , 274, 66 ), // #1003
+ INST(Vfpclassss , VexRmi_Lx , E(660F3A,67,_,I,_,0,2,T1S), 0 , 161, 0 , 5585 , 275, 66 ), // #1004
+ INST(Vfrczpd , VexRm_Lx , V(XOP_M9,81,_,x,0,_,_,_ ), 0 , 80 , 0 , 5596 , 276, 142), // #1005
+ INST(Vfrczps , VexRm_Lx , V(XOP_M9,80,_,x,0,_,_,_ ), 0 , 80 , 0 , 5604 , 276, 142), // #1006
+ INST(Vfrczsd , VexRm , V(XOP_M9,83,_,0,0,_,_,_ ), 0 , 80 , 0 , 5612 , 277, 142), // #1007
+ INST(Vfrczss , VexRm , V(XOP_M9,82,_,0,0,_,_,_ ), 0 , 80 , 0 , 5620 , 278, 142), // #1008
+ INST(Vgatherdpd , VexRmvRm_VM , V(660F38,92,_,x,1,_,_,_ ), E(660F38,92,_,x,_,1,3,T1S), 165, 81 , 5628 , 279, 143), // #1009
+ INST(Vgatherdps , VexRmvRm_VM , V(660F38,92,_,x,0,_,_,_ ), E(660F38,92,_,x,_,0,2,T1S), 97 , 82 , 5639 , 280, 143), // #1010
+ INST(Vgatherpf0dpd , VexM_VM , E(660F38,C6,1,2,_,1,3,T1S), 0 , 166, 0 , 5650 , 281, 144), // #1011
+ INST(Vgatherpf0dps , VexM_VM , E(660F38,C6,1,2,_,0,2,T1S), 0 , 167, 0 , 5664 , 282, 144), // #1012
+ INST(Vgatherpf0qpd , VexM_VM , E(660F38,C7,1,2,_,1,3,T1S), 0 , 166, 0 , 5678 , 283, 144), // #1013
+ INST(Vgatherpf0qps , VexM_VM , E(660F38,C7,1,2,_,0,2,T1S), 0 , 167, 0 , 5692 , 283, 144), // #1014
+ INST(Vgatherpf1dpd , VexM_VM , E(660F38,C6,2,2,_,1,3,T1S), 0 , 168, 0 , 5706 , 281, 144), // #1015
+ INST(Vgatherpf1dps , VexM_VM , E(660F38,C6,2,2,_,0,2,T1S), 0 , 169, 0 , 5720 , 282, 144), // #1016
+ INST(Vgatherpf1qpd , VexM_VM , E(660F38,C7,2,2,_,1,3,T1S), 0 , 168, 0 , 5734 , 283, 144), // #1017
+ INST(Vgatherpf1qps , VexM_VM , E(660F38,C7,2,2,_,0,2,T1S), 0 , 169, 0 , 5748 , 283, 144), // #1018
+ INST(Vgatherqpd , VexRmvRm_VM , V(660F38,93,_,x,1,_,_,_ ), E(660F38,93,_,x,_,1,3,T1S), 165, 83 , 5762 , 284, 143), // #1019
+ INST(Vgatherqps , VexRmvRm_VM , V(660F38,93,_,x,0,_,_,_ ), E(660F38,93,_,x,_,0,2,T1S), 97 , 84 , 5773 , 285, 143), // #1020
+ INST(Vgetexppd , VexRm_Lx , E(660F38,42,_,x,_,1,4,FV ), 0 , 112, 0 , 5784 , 245, 129), // #1021
+ INST(Vgetexpps , VexRm_Lx , E(660F38,42,_,x,_,0,4,FV ), 0 , 113, 0 , 5794 , 249, 129), // #1022
+ INST(Vgetexpsd , VexRvm , E(660F38,43,_,I,_,1,3,T1S), 0 , 124, 0 , 5804 , 286, 68 ), // #1023
+ INST(Vgetexpss , VexRvm , E(660F38,43,_,I,_,0,2,T1S), 0 , 125, 0 , 5814 , 287, 68 ), // #1024
+ INST(Vgetmantpd , VexRmi_Lx , E(660F3A,26,_,x,_,1,4,FV ), 0 , 111, 0 , 5824 , 288, 129), // #1025
+ INST(Vgetmantps , VexRmi_Lx , E(660F3A,26,_,x,_,0,4,FV ), 0 , 110, 0 , 5835 , 289, 129), // #1026
+ INST(Vgetmantsd , VexRvmi , E(660F3A,27,_,I,_,1,3,T1S), 0 , 160, 0 , 5846 , 267, 68 ), // #1027
+ INST(Vgetmantss , VexRvmi , E(660F3A,27,_,I,_,0,2,T1S), 0 , 161, 0 , 5857 , 268, 68 ), // #1028
+ INST(Vgf2p8affineinvqb, VexRvmi_Lx , V(660F3A,CF,_,x,1,1,4,FV ), 0 , 170, 0 , 5868 , 290, 145), // #1029
+ INST(Vgf2p8affineqb , VexRvmi_Lx , V(660F3A,CE,_,x,1,1,4,FV ), 0 , 170, 0 , 5886 , 290, 145), // #1030
+ INST(Vgf2p8mulb , VexRvm_Lx , V(660F38,CF,_,x,0,0,4,FV ), 0 , 163, 0 , 5901 , 291, 145), // #1031
+ INST(Vhaddpd , VexRvm_Lx , V(660F00,7C,_,x,I,_,_,_ ), 0 , 70 , 0 , 5912 , 199, 126), // #1032
+ INST(Vhaddps , VexRvm_Lx , V(F20F00,7C,_,x,I,_,_,_ ), 0 , 108, 0 , 5920 , 199, 126), // #1033
+ INST(Vhsubpd , VexRvm_Lx , V(660F00,7D,_,x,I,_,_,_ ), 0 , 70 , 0 , 5928 , 199, 126), // #1034
+ INST(Vhsubps , VexRvm_Lx , V(F20F00,7D,_,x,I,_,_,_ ), 0 , 108, 0 , 5936 , 199, 126), // #1035
+ INST(Vinsertf128 , VexRvmi , V(660F3A,18,_,1,0,_,_,_ ), 0 , 154, 0 , 5944 , 292, 126), // #1036
+ INST(Vinsertf32x4 , VexRvmi_Lx , E(660F3A,18,_,x,_,0,4,T4 ), 0 , 155, 0 , 5956 , 293, 129), // #1037
+ INST(Vinsertf32x8 , VexRvmi , E(660F3A,1A,_,2,_,0,5,T8 ), 0 , 156, 0 , 5969 , 294, 66 ), // #1038
+ INST(Vinsertf64x2 , VexRvmi_Lx , E(660F3A,18,_,x,_,1,4,T2 ), 0 , 157, 0 , 5982 , 293, 131), // #1039
+ INST(Vinsertf64x4 , VexRvmi , E(660F3A,1A,_,2,_,1,5,T4 ), 0 , 158, 0 , 5995 , 294, 68 ), // #1040
+ INST(Vinserti128 , VexRvmi , V(660F3A,38,_,1,0,_,_,_ ), 0 , 154, 0 , 6008 , 292, 132), // #1041
+ INST(Vinserti32x4 , VexRvmi_Lx , E(660F3A,38,_,x,_,0,4,T4 ), 0 , 155, 0 , 6020 , 293, 129), // #1042
+ INST(Vinserti32x8 , VexRvmi , E(660F3A,3A,_,2,_,0,5,T8 ), 0 , 156, 0 , 6033 , 294, 66 ), // #1043
+ INST(Vinserti64x2 , VexRvmi_Lx , E(660F3A,38,_,x,_,1,4,T2 ), 0 , 157, 0 , 6046 , 293, 131), // #1044
+ INST(Vinserti64x4 , VexRvmi , E(660F3A,3A,_,2,_,1,5,T4 ), 0 , 158, 0 , 6059 , 294, 68 ), // #1045
+ INST(Vinsertps , VexRvmi , V(660F3A,21,_,0,I,0,2,T1S), 0 , 159, 0 , 6072 , 295, 125), // #1046
+ INST(Vlddqu , VexRm_Lx , V(F20F00,F0,_,x,I,_,_,_ ), 0 , 108, 0 , 6082 , 296, 126), // #1047
+ INST(Vldmxcsr , VexM , V(000F00,AE,2,0,I,_,_,_ ), 0 , 171, 0 , 6089 , 297, 126), // #1048
+ INST(Vmaskmovdqu , VexRm_ZDI , V(660F00,F7,_,0,I,_,_,_ ), 0 , 70 , 0 , 6098 , 298, 126), // #1049
+ INST(Vmaskmovpd , VexRvmMvr_Lx , V(660F38,2D,_,x,0,_,_,_ ), V(660F38,2F,_,x,0,_,_,_ ), 97 , 85 , 6110 , 299, 126), // #1050
+ INST(Vmaskmovps , VexRvmMvr_Lx , V(660F38,2C,_,x,0,_,_,_ ), V(660F38,2E,_,x,0,_,_,_ ), 97 , 86 , 6121 , 299, 126), // #1051
+ INST(Vmaxpd , VexRvm_Lx , V(660F00,5F,_,x,I,1,4,FV ), 0 , 104, 0 , 6132 , 300, 124), // #1052
+ INST(Vmaxps , VexRvm_Lx , V(000F00,5F,_,x,I,0,4,FV ), 0 , 105, 0 , 6139 , 301, 124), // #1053
+ INST(Vmaxsd , VexRvm , V(F20F00,5F,_,I,I,1,3,T1S), 0 , 106, 0 , 6146 , 302, 124), // #1054
+ INST(Vmaxss , VexRvm , V(F30F00,5F,_,I,I,0,2,T1S), 0 , 107, 0 , 6153 , 241, 124), // #1055
INST(Vmcall , X86Op , O(000F01,C1,_,_,_,_,_,_ ), 0 , 21 , 0 , 6160 , 30 , 58 ), // #1056
INST(Vmclear , X86M_Only , O(660F00,C7,6,_,_,_,_,_ ), 0 , 26 , 0 , 6167 , 32 , 58 ), // #1057
INST(Vmfunc , X86Op , O(000F01,D4,_,_,_,_,_,_ ), 0 , 21 , 0 , 6175 , 30 , 58 ), // #1058
- INST(Vminpd , VexRvm_Lx , V(660F00,5D,_,x,I,1,4,FV ), 0 , 104, 0 , 6182 , 299, 124), // #1059
- INST(Vminps , VexRvm_Lx , V(000F00,5D,_,x,I,0,4,FV ), 0 , 105, 0 , 6189 , 300, 124), // #1060
- INST(Vminsd , VexRvm , V(F20F00,5D,_,I,I,1,3,T1S), 0 , 106, 0 , 6196 , 301, 124), // #1061
- INST(Vminss , VexRvm , V(F30F00,5D,_,I,I,0,2,T1S), 0 , 107, 0 , 6203 , 240, 124), // #1062
+ INST(Vminpd , VexRvm_Lx , V(660F00,5D,_,x,I,1,4,FV ), 0 , 104, 0 , 6182 , 300, 124), // #1059
+ INST(Vminps , VexRvm_Lx , V(000F00,5D,_,x,I,0,4,FV ), 0 , 105, 0 , 6189 , 301, 124), // #1060
+ INST(Vminsd , VexRvm , V(F20F00,5D,_,I,I,1,3,T1S), 0 , 106, 0 , 6196 , 302, 124), // #1061
+ INST(Vminss , VexRvm , V(F30F00,5D,_,I,I,0,2,T1S), 0 , 107, 0 , 6203 , 241, 124), // #1062
INST(Vmlaunch , X86Op , O(000F01,C2,_,_,_,_,_,_ ), 0 , 21 , 0 , 6210 , 30 , 58 ), // #1063
- INST(Vmload , X86Op_xAX , O(000F01,DA,_,_,_,_,_,_ ), 0 , 21 , 0 , 6219 , 302, 22 ), // #1064
+ INST(Vmload , X86Op_xAX , O(000F01,DA,_,_,_,_,_,_ ), 0 , 21 , 0 , 6219 , 303, 22 ), // #1064
INST(Vmmcall , X86Op , O(000F01,D9,_,_,_,_,_,_ ), 0 , 21 , 0 , 6226 , 30 , 22 ), // #1065
- INST(Vmovapd , VexRmMr_Lx , V(660F00,28,_,x,I,1,4,FVM), V(660F00,29,_,x,I,1,4,FVM), 172, 87 , 6234 , 303, 124), // #1066
- INST(Vmovaps , VexRmMr_Lx , V(000F00,28,_,x,I,0,4,FVM), V(000F00,29,_,x,I,0,4,FVM), 173, 88 , 6242 , 303, 124), // #1067
- INST(Vmovd , VexMovdMovq , V(660F00,6E,_,0,0,0,2,T1S), V(660F00,7E,_,0,0,0,2,T1S), 174, 89 , 6250 , 304, 125), // #1068
- INST(Vmovddup , VexRm_Lx , V(F20F00,12,_,x,I,1,3,DUP), 0 , 175, 0 , 6256 , 305, 124), // #1069
- INST(Vmovdqa , VexRmMr_Lx , V(660F00,6F,_,x,I,_,_,_ ), V(660F00,7F,_,x,I,_,_,_ ), 70 , 90 , 6265 , 306, 126), // #1070
- INST(Vmovdqa32 , VexRmMr_Lx , E(660F00,6F,_,x,_,0,4,FVM), E(660F00,7F,_,x,_,0,4,FVM), 176, 91 , 6273 , 307, 129), // #1071
- INST(Vmovdqa64 , VexRmMr_Lx , E(660F00,6F,_,x,_,1,4,FVM), E(660F00,7F,_,x,_,1,4,FVM), 177, 92 , 6283 , 307, 129), // #1072
- INST(Vmovdqu , VexRmMr_Lx , V(F30F00,6F,_,x,I,_,_,_ ), V(F30F00,7F,_,x,I,_,_,_ ), 178, 93 , 6293 , 306, 126), // #1073
- INST(Vmovdqu16 , VexRmMr_Lx , E(F20F00,6F,_,x,_,1,4,FVM), E(F20F00,7F,_,x,_,1,4,FVM), 179, 94 , 6301 , 307, 137), // #1074
- INST(Vmovdqu32 , VexRmMr_Lx , E(F30F00,6F,_,x,_,0,4,FVM), E(F30F00,7F,_,x,_,0,4,FVM), 180, 95 , 6311 , 307, 129), // #1075
- INST(Vmovdqu64 , VexRmMr_Lx , E(F30F00,6F,_,x,_,1,4,FVM), E(F30F00,7F,_,x,_,1,4,FVM), 181, 96 , 6321 , 307, 129), // #1076
- INST(Vmovdqu8 , VexRmMr_Lx , E(F20F00,6F,_,x,_,0,4,FVM), E(F20F00,7F,_,x,_,0,4,FVM), 182, 97 , 6331 , 307, 137), // #1077
- INST(Vmovhlps , VexRvm , V(000F00,12,_,0,I,0,_,_ ), 0 , 73 , 0 , 6340 , 308, 125), // #1078
- INST(Vmovhpd , VexRvmMr , V(660F00,16,_,0,I,1,3,T1S), V(660F00,17,_,0,I,1,3,T1S), 122, 98 , 6349 , 309, 125), // #1079
- INST(Vmovhps , VexRvmMr , V(000F00,16,_,0,I,0,3,T2 ), V(000F00,17,_,0,I,0,3,T2 ), 183, 99 , 6357 , 309, 125), // #1080
- INST(Vmovlhps , VexRvm , V(000F00,16,_,0,I,0,_,_ ), 0 , 73 , 0 , 6365 , 308, 125), // #1081
- INST(Vmovlpd , VexRvmMr , V(660F00,12,_,0,I,1,3,T1S), V(660F00,13,_,0,I,1,3,T1S), 122, 100, 6374 , 309, 125), // #1082
- INST(Vmovlps , VexRvmMr , V(000F00,12,_,0,I,0,3,T2 ), V(000F00,13,_,0,I,0,3,T2 ), 183, 101, 6382 , 309, 125), // #1083
- INST(Vmovmskpd , VexRm_Lx , V(660F00,50,_,x,I,_,_,_ ), 0 , 70 , 0 , 6390 , 310, 126), // #1084
- INST(Vmovmskps , VexRm_Lx , V(000F00,50,_,x,I,_,_,_ ), 0 , 73 , 0 , 6400 , 310, 126), // #1085
- INST(Vmovntdq , VexMr_Lx , V(660F00,E7,_,x,I,0,4,FVM), 0 , 184, 0 , 6410 , 311, 124), // #1086
- INST(Vmovntdqa , VexRm_Lx , V(660F38,2A,_,x,I,0,4,FVM), 0 , 109, 0 , 6419 , 312, 133), // #1087
- INST(Vmovntpd , VexMr_Lx , V(660F00,2B,_,x,I,1,4,FVM), 0 , 172, 0 , 6429 , 311, 124), // #1088
- INST(Vmovntps , VexMr_Lx , V(000F00,2B,_,x,I,0,4,FVM), 0 , 173, 0 , 6438 , 311, 124), // #1089
- INST(Vmovq , VexMovdMovq , V(660F00,6E,_,0,I,1,3,T1S), V(660F00,7E,_,0,I,1,3,T1S), 122, 102, 6447 , 313, 125), // #1090
- INST(Vmovsd , VexMovssMovsd , V(F20F00,10,_,I,I,1,3,T1S), V(F20F00,11,_,I,I,1,3,T1S), 106, 103, 6453 , 314, 125), // #1091
- INST(Vmovshdup , VexRm_Lx , V(F30F00,16,_,x,I,0,4,FVM), 0 , 185, 0 , 6460 , 315, 124), // #1092
- INST(Vmovsldup , VexRm_Lx , V(F30F00,12,_,x,I,0,4,FVM), 0 , 185, 0 , 6470 , 315, 124), // #1093
- INST(Vmovss , VexMovssMovsd , V(F30F00,10,_,I,I,0,2,T1S), V(F30F00,11,_,I,I,0,2,T1S), 107, 104, 6480 , 316, 125), // #1094
- INST(Vmovupd , VexRmMr_Lx , V(660F00,10,_,x,I,1,4,FVM), V(660F00,11,_,x,I,1,4,FVM), 172, 105, 6487 , 303, 124), // #1095
- INST(Vmovups , VexRmMr_Lx , V(000F00,10,_,x,I,0,4,FVM), V(000F00,11,_,x,I,0,4,FVM), 173, 106, 6495 , 303, 124), // #1096
- INST(Vmpsadbw , VexRvmi_Lx , V(660F3A,42,_,x,I,_,_,_ ), 0 , 74 , 0 , 6503 , 210, 146), // #1097
+ INST(Vmovapd , VexRmMr_Lx , V(660F00,28,_,x,I,1,4,FVM), V(660F00,29,_,x,I,1,4,FVM), 172, 87 , 6234 , 304, 124), // #1066
+ INST(Vmovaps , VexRmMr_Lx , V(000F00,28,_,x,I,0,4,FVM), V(000F00,29,_,x,I,0,4,FVM), 173, 88 , 6242 , 304, 124), // #1067
+ INST(Vmovd , VexMovdMovq , V(660F00,6E,_,0,0,0,2,T1S), V(660F00,7E,_,0,0,0,2,T1S), 174, 89 , 6250 , 305, 125), // #1068
+ INST(Vmovddup , VexRm_Lx , V(F20F00,12,_,x,I,1,3,DUP), 0 , 175, 0 , 6256 , 306, 124), // #1069
+ INST(Vmovdqa , VexRmMr_Lx , V(660F00,6F,_,x,I,_,_,_ ), V(660F00,7F,_,x,I,_,_,_ ), 70 , 90 , 6265 , 307, 126), // #1070
+ INST(Vmovdqa32 , VexRmMr_Lx , E(660F00,6F,_,x,_,0,4,FVM), E(660F00,7F,_,x,_,0,4,FVM), 176, 91 , 6273 , 308, 129), // #1071
+ INST(Vmovdqa64 , VexRmMr_Lx , E(660F00,6F,_,x,_,1,4,FVM), E(660F00,7F,_,x,_,1,4,FVM), 177, 92 , 6283 , 308, 129), // #1072
+ INST(Vmovdqu , VexRmMr_Lx , V(F30F00,6F,_,x,I,_,_,_ ), V(F30F00,7F,_,x,I,_,_,_ ), 178, 93 , 6293 , 307, 126), // #1073
+ INST(Vmovdqu16 , VexRmMr_Lx , E(F20F00,6F,_,x,_,1,4,FVM), E(F20F00,7F,_,x,_,1,4,FVM), 179, 94 , 6301 , 308, 137), // #1074
+ INST(Vmovdqu32 , VexRmMr_Lx , E(F30F00,6F,_,x,_,0,4,FVM), E(F30F00,7F,_,x,_,0,4,FVM), 180, 95 , 6311 , 308, 129), // #1075
+ INST(Vmovdqu64 , VexRmMr_Lx , E(F30F00,6F,_,x,_,1,4,FVM), E(F30F00,7F,_,x,_,1,4,FVM), 181, 96 , 6321 , 308, 129), // #1076
+ INST(Vmovdqu8 , VexRmMr_Lx , E(F20F00,6F,_,x,_,0,4,FVM), E(F20F00,7F,_,x,_,0,4,FVM), 182, 97 , 6331 , 308, 137), // #1077
+ INST(Vmovhlps , VexRvm , V(000F00,12,_,0,I,0,_,_ ), 0 , 73 , 0 , 6340 , 309, 125), // #1078
+ INST(Vmovhpd , VexRvmMr , V(660F00,16,_,0,I,1,3,T1S), V(660F00,17,_,0,I,1,3,T1S), 122, 98 , 6349 , 310, 125), // #1079
+ INST(Vmovhps , VexRvmMr , V(000F00,16,_,0,I,0,3,T2 ), V(000F00,17,_,0,I,0,3,T2 ), 183, 99 , 6357 , 310, 125), // #1080
+ INST(Vmovlhps , VexRvm , V(000F00,16,_,0,I,0,_,_ ), 0 , 73 , 0 , 6365 , 309, 125), // #1081
+ INST(Vmovlpd , VexRvmMr , V(660F00,12,_,0,I,1,3,T1S), V(660F00,13,_,0,I,1,3,T1S), 122, 100, 6374 , 310, 125), // #1082
+ INST(Vmovlps , VexRvmMr , V(000F00,12,_,0,I,0,3,T2 ), V(000F00,13,_,0,I,0,3,T2 ), 183, 101, 6382 , 310, 125), // #1083
+ INST(Vmovmskpd , VexRm_Lx , V(660F00,50,_,x,I,_,_,_ ), 0 , 70 , 0 , 6390 , 311, 126), // #1084
+ INST(Vmovmskps , VexRm_Lx , V(000F00,50,_,x,I,_,_,_ ), 0 , 73 , 0 , 6400 , 311, 126), // #1085
+ INST(Vmovntdq , VexMr_Lx , V(660F00,E7,_,x,I,0,4,FVM), 0 , 184, 0 , 6410 , 312, 124), // #1086
+ INST(Vmovntdqa , VexRm_Lx , V(660F38,2A,_,x,I,0,4,FVM), 0 , 109, 0 , 6419 , 313, 133), // #1087
+ INST(Vmovntpd , VexMr_Lx , V(660F00,2B,_,x,I,1,4,FVM), 0 , 172, 0 , 6429 , 312, 124), // #1088
+ INST(Vmovntps , VexMr_Lx , V(000F00,2B,_,x,I,0,4,FVM), 0 , 173, 0 , 6438 , 312, 124), // #1089
+ INST(Vmovq , VexMovdMovq , V(660F00,6E,_,0,I,1,3,T1S), V(660F00,7E,_,0,I,1,3,T1S), 122, 102, 6447 , 314, 125), // #1090
+ INST(Vmovsd , VexMovssMovsd , V(F20F00,10,_,I,I,1,3,T1S), V(F20F00,11,_,I,I,1,3,T1S), 106, 103, 6453 , 315, 125), // #1091
+ INST(Vmovshdup , VexRm_Lx , V(F30F00,16,_,x,I,0,4,FVM), 0 , 185, 0 , 6460 , 316, 124), // #1092
+ INST(Vmovsldup , VexRm_Lx , V(F30F00,12,_,x,I,0,4,FVM), 0 , 185, 0 , 6470 , 316, 124), // #1093
+ INST(Vmovss , VexMovssMovsd , V(F30F00,10,_,I,I,0,2,T1S), V(F30F00,11,_,I,I,0,2,T1S), 107, 104, 6480 , 317, 125), // #1094
+ INST(Vmovupd , VexRmMr_Lx , V(660F00,10,_,x,I,1,4,FVM), V(660F00,11,_,x,I,1,4,FVM), 172, 105, 6487 , 304, 124), // #1095
+ INST(Vmovups , VexRmMr_Lx , V(000F00,10,_,x,I,0,4,FVM), V(000F00,11,_,x,I,0,4,FVM), 173, 106, 6495 , 304, 124), // #1096
+ INST(Vmpsadbw , VexRvmi_Lx , V(660F3A,42,_,x,I,_,_,_ ), 0 , 74 , 0 , 6503 , 211, 146), // #1097
INST(Vmptrld , X86M_Only , O(000F00,C7,6,_,_,_,_,_ ), 0 , 81 , 0 , 6512 , 32 , 58 ), // #1098
INST(Vmptrst , X86M_Only , O(000F00,C7,7,_,_,_,_,_ ), 0 , 22 , 0 , 6520 , 32 , 58 ), // #1099
- INST(Vmread , X86Mr_NoSize , O(000F00,78,_,_,_,_,_,_ ), 0 , 4 , 0 , 6528 , 317, 58 ), // #1100
+ INST(Vmread , X86Mr_NoSize , O(000F00,78,_,_,_,_,_,_ ), 0 , 4 , 0 , 6528 , 318, 58 ), // #1100
INST(Vmresume , X86Op , O(000F01,C3,_,_,_,_,_,_ ), 0 , 21 , 0 , 6535 , 30 , 58 ), // #1101
- INST(Vmrun , X86Op_xAX , O(000F01,D8,_,_,_,_,_,_ ), 0 , 21 , 0 , 6544 , 302, 22 ), // #1102
- INST(Vmsave , X86Op_xAX , O(000F01,DB,_,_,_,_,_,_ ), 0 , 21 , 0 , 6550 , 302, 22 ), // #1103
- INST(Vmulpd , VexRvm_Lx , V(660F00,59,_,x,I,1,4,FV ), 0 , 104, 0 , 6557 , 194, 124), // #1104
- INST(Vmulps , VexRvm_Lx , V(000F00,59,_,x,I,0,4,FV ), 0 , 105, 0 , 6564 , 195, 124), // #1105
- INST(Vmulsd , VexRvm_Lx , V(F20F00,59,_,I,I,1,3,T1S), 0 , 106, 0 , 6571 , 196, 125), // #1106
- INST(Vmulss , VexRvm_Lx , V(F30F00,59,_,I,I,0,2,T1S), 0 , 107, 0 , 6578 , 197, 125), // #1107
- INST(Vmwrite , X86Rm_NoSize , O(000F00,79,_,_,_,_,_,_ ), 0 , 4 , 0 , 6585 , 318, 58 ), // #1108
+ INST(Vmrun , X86Op_xAX , O(000F01,D8,_,_,_,_,_,_ ), 0 , 21 , 0 , 6544 , 303, 22 ), // #1102
+ INST(Vmsave , X86Op_xAX , O(000F01,DB,_,_,_,_,_,_ ), 0 , 21 , 0 , 6550 , 303, 22 ), // #1103
+ INST(Vmulpd , VexRvm_Lx , V(660F00,59,_,x,I,1,4,FV ), 0 , 104, 0 , 6557 , 195, 124), // #1104
+ INST(Vmulps , VexRvm_Lx , V(000F00,59,_,x,I,0,4,FV ), 0 , 105, 0 , 6564 , 196, 124), // #1105
+ INST(Vmulsd , VexRvm_Lx , V(F20F00,59,_,I,I,1,3,T1S), 0 , 106, 0 , 6571 , 197, 125), // #1106
+ INST(Vmulss , VexRvm_Lx , V(F30F00,59,_,I,I,0,2,T1S), 0 , 107, 0 , 6578 , 198, 125), // #1107
+ INST(Vmwrite , X86Rm_NoSize , O(000F00,79,_,_,_,_,_,_ ), 0 , 4 , 0 , 6585 , 319, 58 ), // #1108
INST(Vmxon , X86M_Only , O(F30F00,C7,6,_,_,_,_,_ ), 0 , 24 , 0 , 6593 , 32 , 58 ), // #1109
- INST(Vorpd , VexRvm_Lx , V(660F00,56,_,x,I,1,4,FV ), 0 , 104, 0 , 6599 , 206, 130), // #1110
- INST(Vorps , VexRvm_Lx , V(000F00,56,_,x,I,0,4,FV ), 0 , 105, 0 , 6605 , 207, 130), // #1111
- INST(Vp2intersectd , VexRvm_Lx_2xK , E(F20F38,68,_,_,_,0,4,FV ), 0 , 127, 0 , 6611 , 319, 147), // #1112
- INST(Vp2intersectq , VexRvm_Lx_2xK , E(F20F38,68,_,_,_,1,4,FV ), 0 , 186, 0 , 6625 , 320, 147), // #1113
- INST(Vp4dpwssd , VexRm_T1_4X , E(F20F38,52,_,2,_,0,4,T4X), 0 , 102, 0 , 6639 , 192, 148), // #1114
- INST(Vp4dpwssds , VexRm_T1_4X , E(F20F38,53,_,2,_,0,4,T4X), 0 , 102, 0 , 6649 , 192, 148), // #1115
- INST(Vpabsb , VexRm_Lx , V(660F38,1C,_,x,I,_,4,FVM), 0 , 109, 0 , 6660 , 315, 149), // #1116
- INST(Vpabsd , VexRm_Lx , V(660F38,1E,_,x,I,0,4,FV ), 0 , 163, 0 , 6667 , 315, 133), // #1117
- INST(Vpabsq , VexRm_Lx , E(660F38,1F,_,x,_,1,4,FV ), 0 , 112, 0 , 6674 , 259, 129), // #1118
- INST(Vpabsw , VexRm_Lx , V(660F38,1D,_,x,I,_,4,FVM), 0 , 109, 0 , 6681 , 315, 149), // #1119
- INST(Vpackssdw , VexRvm_Lx , V(660F00,6B,_,x,I,0,4,FV ), 0 , 133, 0 , 6688 , 205, 149), // #1120
- INST(Vpacksswb , VexRvm_Lx , V(660F00,63,_,x,I,I,4,FVM), 0 , 184, 0 , 6698 , 290, 149), // #1121
- INST(Vpackusdw , VexRvm_Lx , V(660F38,2B,_,x,I,0,4,FV ), 0 , 163, 0 , 6708 , 205, 149), // #1122
- INST(Vpackuswb , VexRvm_Lx , V(660F00,67,_,x,I,I,4,FVM), 0 , 184, 0 , 6718 , 290, 149), // #1123
- INST(Vpaddb , VexRvm_Lx , V(660F00,FC,_,x,I,I,4,FVM), 0 , 184, 0 , 6728 , 290, 149), // #1124
- INST(Vpaddd , VexRvm_Lx , V(660F00,FE,_,x,I,0,4,FV ), 0 , 133, 0 , 6735 , 205, 133), // #1125
- INST(Vpaddq , VexRvm_Lx , V(660F00,D4,_,x,I,1,4,FV ), 0 , 104, 0 , 6742 , 204, 133), // #1126
- INST(Vpaddsb , VexRvm_Lx , V(660F00,EC,_,x,I,I,4,FVM), 0 , 184, 0 , 6749 , 290, 149), // #1127
- INST(Vpaddsw , VexRvm_Lx , V(660F00,ED,_,x,I,I,4,FVM), 0 , 184, 0 , 6757 , 290, 149), // #1128
- INST(Vpaddusb , VexRvm_Lx , V(660F00,DC,_,x,I,I,4,FVM), 0 , 184, 0 , 6765 , 290, 149), // #1129
- INST(Vpaddusw , VexRvm_Lx , V(660F00,DD,_,x,I,I,4,FVM), 0 , 184, 0 , 6774 , 290, 149), // #1130
- INST(Vpaddw , VexRvm_Lx , V(660F00,FD,_,x,I,I,4,FVM), 0 , 184, 0 , 6783 , 290, 149), // #1131
- INST(Vpalignr , VexRvmi_Lx , V(660F3A,0F,_,x,I,I,4,FVM), 0 , 187, 0 , 6790 , 289, 149), // #1132
- INST(Vpand , VexRvm_Lx , V(660F00,DB,_,x,I,_,_,_ ), 0 , 70 , 0 , 6799 , 321, 146), // #1133
- INST(Vpandd , VexRvm_Lx , E(660F00,DB,_,x,_,0,4,FV ), 0 , 188, 0 , 6805 , 322, 129), // #1134
- INST(Vpandn , VexRvm_Lx , V(660F00,DF,_,x,I,_,_,_ ), 0 , 70 , 0 , 6812 , 323, 146), // #1135
- INST(Vpandnd , VexRvm_Lx , E(660F00,DF,_,x,_,0,4,FV ), 0 , 188, 0 , 6819 , 324, 129), // #1136
- INST(Vpandnq , VexRvm_Lx , E(660F00,DF,_,x,_,1,4,FV ), 0 , 130, 0 , 6827 , 325, 129), // #1137
- INST(Vpandq , VexRvm_Lx , E(660F00,DB,_,x,_,1,4,FV ), 0 , 130, 0 , 6835 , 326, 129), // #1138
- INST(Vpavgb , VexRvm_Lx , V(660F00,E0,_,x,I,I,4,FVM), 0 , 184, 0 , 6842 , 290, 149), // #1139
- INST(Vpavgw , VexRvm_Lx , V(660F00,E3,_,x,I,I,4,FVM), 0 , 184, 0 , 6849 , 290, 149), // #1140
- INST(Vpblendd , VexRvmi_Lx , V(660F3A,02,_,x,0,_,_,_ ), 0 , 74 , 0 , 6856 , 210, 132), // #1141
- INST(Vpblendmb , VexRvm_Lx , E(660F38,66,_,x,_,0,4,FVM), 0 , 189, 0 , 6865 , 327, 137), // #1142
- INST(Vpblendmd , VexRvm_Lx , E(660F38,64,_,x,_,0,4,FV ), 0 , 113, 0 , 6875 , 209, 129), // #1143
- INST(Vpblendmq , VexRvm_Lx , E(660F38,64,_,x,_,1,4,FV ), 0 , 112, 0 , 6885 , 208, 129), // #1144
- INST(Vpblendmw , VexRvm_Lx , E(660F38,66,_,x,_,1,4,FVM), 0 , 190, 0 , 6895 , 327, 137), // #1145
- INST(Vpblendvb , VexRvmr_Lx , V(660F3A,4C,_,x,0,_,_,_ ), 0 , 74 , 0 , 6905 , 211, 146), // #1146
- INST(Vpblendw , VexRvmi_Lx , V(660F3A,0E,_,x,I,_,_,_ ), 0 , 74 , 0 , 6915 , 210, 146), // #1147
- INST(Vpbroadcastb , VexRm_Lx_Bcst , V(660F38,78,_,x,0,0,0,T1S), E(660F38,7A,_,x,0,0,0,T1S), 191, 107, 6924 , 328, 150), // #1148
- INST(Vpbroadcastd , VexRm_Lx_Bcst , V(660F38,58,_,x,0,0,2,T1S), E(660F38,7C,_,x,0,0,0,T1S), 121, 108, 6937 , 329, 143), // #1149
- INST(Vpbroadcastmb2q , VexRm_Lx , E(F30F38,2A,_,x,_,1,_,_ ), 0 , 192, 0 , 6950 , 330, 151), // #1150
- INST(Vpbroadcastmw2d , VexRm_Lx , E(F30F38,3A,_,x,_,0,_,_ ), 0 , 193, 0 , 6966 , 330, 151), // #1151
- INST(Vpbroadcastq , VexRm_Lx_Bcst , V(660F38,59,_,x,0,1,3,T1S), E(660F38,7C,_,x,0,1,0,T1S), 120, 109, 6982 , 331, 143), // #1152
- INST(Vpbroadcastw , VexRm_Lx_Bcst , V(660F38,79,_,x,0,0,1,T1S), E(660F38,7B,_,x,0,0,0,T1S), 194, 110, 6995 , 332, 150), // #1153
- INST(Vpclmulqdq , VexRvmi_Lx , V(660F3A,44,_,x,I,_,4,FVM), 0 , 187, 0 , 7008 , 333, 152), // #1154
- INST(Vpcmov , VexRvrmRvmr_Lx , V(XOP_M8,A2,_,x,x,_,_,_ ), 0 , 195, 0 , 7019 , 268, 142), // #1155
- INST(Vpcmpb , VexRvmi_Lx , E(660F3A,3F,_,x,_,0,4,FVM), 0 , 151, 0 , 7026 , 334, 137), // #1156
- INST(Vpcmpd , VexRvmi_Lx , E(660F3A,1F,_,x,_,0,4,FV ), 0 , 110, 0 , 7033 , 335, 129), // #1157
- INST(Vpcmpeqb , VexRvm_Lx_KEvex , V(660F00,74,_,x,I,I,4,FV ), 0 , 133, 0 , 7040 , 336, 149), // #1158
- INST(Vpcmpeqd , VexRvm_Lx_KEvex , V(660F00,76,_,x,I,0,4,FVM), 0 , 184, 0 , 7049 , 337, 133), // #1159
- INST(Vpcmpeqq , VexRvm_Lx_KEvex , V(660F38,29,_,x,I,1,4,FVM), 0 , 196, 0 , 7058 , 338, 133), // #1160
- INST(Vpcmpeqw , VexRvm_Lx_KEvex , V(660F00,75,_,x,I,I,4,FV ), 0 , 133, 0 , 7067 , 336, 149), // #1161
- INST(Vpcmpestri , VexRmi , V(660F3A,61,_,0,I,_,_,_ ), 0 , 74 , 0 , 7076 , 339, 153), // #1162
- INST(Vpcmpestrm , VexRmi , V(660F3A,60,_,0,I,_,_,_ ), 0 , 74 , 0 , 7087 , 340, 153), // #1163
- INST(Vpcmpgtb , VexRvm_Lx_KEvex , V(660F00,64,_,x,I,I,4,FV ), 0 , 133, 0 , 7098 , 336, 149), // #1164
- INST(Vpcmpgtd , VexRvm_Lx_KEvex , V(660F00,66,_,x,I,0,4,FVM), 0 , 184, 0 , 7107 , 337, 133), // #1165
- INST(Vpcmpgtq , VexRvm_Lx_KEvex , V(660F38,37,_,x,I,1,4,FVM), 0 , 196, 0 , 7116 , 338, 133), // #1166
- INST(Vpcmpgtw , VexRvm_Lx_KEvex , V(660F00,65,_,x,I,I,4,FV ), 0 , 133, 0 , 7125 , 336, 149), // #1167
- INST(Vpcmpistri , VexRmi , V(660F3A,63,_,0,I,_,_,_ ), 0 , 74 , 0 , 7134 , 341, 153), // #1168
- INST(Vpcmpistrm , VexRmi , V(660F3A,62,_,0,I,_,_,_ ), 0 , 74 , 0 , 7145 , 342, 153), // #1169
- INST(Vpcmpq , VexRvmi_Lx , E(660F3A,1F,_,x,_,1,4,FV ), 0 , 111, 0 , 7156 , 343, 129), // #1170
- INST(Vpcmpub , VexRvmi_Lx , E(660F3A,3E,_,x,_,0,4,FVM), 0 , 151, 0 , 7163 , 334, 137), // #1171
- INST(Vpcmpud , VexRvmi_Lx , E(660F3A,1E,_,x,_,0,4,FV ), 0 , 110, 0 , 7171 , 335, 129), // #1172
- INST(Vpcmpuq , VexRvmi_Lx , E(660F3A,1E,_,x,_,1,4,FV ), 0 , 111, 0 , 7179 , 343, 129), // #1173
- INST(Vpcmpuw , VexRvmi_Lx , E(660F3A,3E,_,x,_,1,4,FVM), 0 , 197, 0 , 7187 , 343, 137), // #1174
- INST(Vpcmpw , VexRvmi_Lx , E(660F3A,3F,_,x,_,1,4,FVM), 0 , 197, 0 , 7195 , 343, 137), // #1175
- INST(Vpcomb , VexRvmi , V(XOP_M8,CC,_,0,0,_,_,_ ), 0 , 195, 0 , 7202 , 256, 142), // #1176
- INST(Vpcomd , VexRvmi , V(XOP_M8,CE,_,0,0,_,_,_ ), 0 , 195, 0 , 7209 , 256, 142), // #1177
- INST(Vpcompressb , VexMr_Lx , E(660F38,63,_,x,_,0,0,T1S), 0 , 198, 0 , 7216 , 225, 154), // #1178
- INST(Vpcompressd , VexMr_Lx , E(660F38,8B,_,x,_,0,2,T1S), 0 , 125, 0 , 7228 , 225, 129), // #1179
- INST(Vpcompressq , VexMr_Lx , E(660F38,8B,_,x,_,1,3,T1S), 0 , 124, 0 , 7240 , 225, 129), // #1180
- INST(Vpcompressw , VexMr_Lx , E(660F38,63,_,x,_,1,1,T1S), 0 , 199, 0 , 7252 , 225, 154), // #1181
- INST(Vpcomq , VexRvmi , V(XOP_M8,CF,_,0,0,_,_,_ ), 0 , 195, 0 , 7264 , 256, 142), // #1182
- INST(Vpcomub , VexRvmi , V(XOP_M8,EC,_,0,0,_,_,_ ), 0 , 195, 0 , 7271 , 256, 142), // #1183
- INST(Vpcomud , VexRvmi , V(XOP_M8,EE,_,0,0,_,_,_ ), 0 , 195, 0 , 7279 , 256, 142), // #1184
- INST(Vpcomuq , VexRvmi , V(XOP_M8,EF,_,0,0,_,_,_ ), 0 , 195, 0 , 7287 , 256, 142), // #1185
- INST(Vpcomuw , VexRvmi , V(XOP_M8,ED,_,0,0,_,_,_ ), 0 , 195, 0 , 7295 , 256, 142), // #1186
- INST(Vpcomw , VexRvmi , V(XOP_M8,CD,_,0,0,_,_,_ ), 0 , 195, 0 , 7303 , 256, 142), // #1187
- INST(Vpconflictd , VexRm_Lx , E(660F38,C4,_,x,_,0,4,FV ), 0 , 113, 0 , 7310 , 344, 151), // #1188
- INST(Vpconflictq , VexRm_Lx , E(660F38,C4,_,x,_,1,4,FV ), 0 , 112, 0 , 7322 , 344, 151), // #1189
- INST(Vpdpbusd , VexRvm_Lx , V(660F38,50,_,x,_,0,4,FV ), 0 , 163, 0 , 7334 , 345, 155), // #1190
- INST(Vpdpbusds , VexRvm_Lx , V(660F38,51,_,x,_,0,4,FV ), 0 , 163, 0 , 7343 , 345, 155), // #1191
- INST(Vpdpwssd , VexRvm_Lx , V(660F38,52,_,x,_,0,4,FV ), 0 , 163, 0 , 7353 , 345, 155), // #1192
- INST(Vpdpwssds , VexRvm_Lx , V(660F38,53,_,x,_,0,4,FV ), 0 , 163, 0 , 7362 , 345, 155), // #1193
- INST(Vperm2f128 , VexRvmi , V(660F3A,06,_,1,0,_,_,_ ), 0 , 154, 0 , 7372 , 346, 126), // #1194
- INST(Vperm2i128 , VexRvmi , V(660F3A,46,_,1,0,_,_,_ ), 0 , 154, 0 , 7383 , 346, 132), // #1195
- INST(Vpermb , VexRvm_Lx , E(660F38,8D,_,x,_,0,4,FVM), 0 , 189, 0 , 7394 , 327, 156), // #1196
- INST(Vpermd , VexRvm_Lx , V(660F38,36,_,x,0,0,4,FV ), 0 , 163, 0 , 7401 , 347, 143), // #1197
- INST(Vpermi2b , VexRvm_Lx , E(660F38,75,_,x,_,0,4,FVM), 0 , 189, 0 , 7408 , 327, 156), // #1198
- INST(Vpermi2d , VexRvm_Lx , E(660F38,76,_,x,_,0,4,FV ), 0 , 113, 0 , 7417 , 209, 129), // #1199
- INST(Vpermi2pd , VexRvm_Lx , E(660F38,77,_,x,_,1,4,FV ), 0 , 112, 0 , 7426 , 208, 129), // #1200
- INST(Vpermi2ps , VexRvm_Lx , E(660F38,77,_,x,_,0,4,FV ), 0 , 113, 0 , 7436 , 209, 129), // #1201
- INST(Vpermi2q , VexRvm_Lx , E(660F38,76,_,x,_,1,4,FV ), 0 , 112, 0 , 7446 , 208, 129), // #1202
- INST(Vpermi2w , VexRvm_Lx , E(660F38,75,_,x,_,1,4,FVM), 0 , 190, 0 , 7455 , 327, 137), // #1203
- INST(Vpermil2pd , VexRvrmiRvmri_Lx , V(660F3A,49,_,x,x,_,_,_ ), 0 , 74 , 0 , 7464 , 348, 142), // #1204
- INST(Vpermil2ps , VexRvrmiRvmri_Lx , V(660F3A,48,_,x,x,_,_,_ ), 0 , 74 , 0 , 7475 , 348, 142), // #1205
- INST(Vpermilpd , VexRvmRmi_Lx , V(660F38,0D,_,x,0,1,4,FV ), V(660F3A,05,_,x,0,1,4,FV ), 200, 111, 7486 , 349, 124), // #1206
- INST(Vpermilps , VexRvmRmi_Lx , V(660F38,0C,_,x,0,0,4,FV ), V(660F3A,04,_,x,0,0,4,FV ), 163, 112, 7496 , 349, 124), // #1207
- INST(Vpermpd , VexRvmRmi_Lx , E(660F38,16,_,x,1,1,4,FV ), V(660F3A,01,_,x,1,1,4,FV ), 201, 113, 7506 , 350, 143), // #1208
- INST(Vpermps , VexRvm_Lx , V(660F38,16,_,x,0,0,4,FV ), 0 , 163, 0 , 7514 , 347, 143), // #1209
- INST(Vpermq , VexRvmRmi_Lx , E(660F38,36,_,x,_,1,4,FV ), V(660F3A,00,_,x,1,1,4,FV ), 112, 114, 7522 , 350, 143), // #1210
- INST(Vpermt2b , VexRvm_Lx , E(660F38,7D,_,x,_,0,4,FVM), 0 , 189, 0 , 7529 , 327, 156), // #1211
- INST(Vpermt2d , VexRvm_Lx , E(660F38,7E,_,x,_,0,4,FV ), 0 , 113, 0 , 7538 , 209, 129), // #1212
- INST(Vpermt2pd , VexRvm_Lx , E(660F38,7F,_,x,_,1,4,FV ), 0 , 112, 0 , 7547 , 208, 129), // #1213
- INST(Vpermt2ps , VexRvm_Lx , E(660F38,7F,_,x,_,0,4,FV ), 0 , 113, 0 , 7557 , 209, 129), // #1214
- INST(Vpermt2q , VexRvm_Lx , E(660F38,7E,_,x,_,1,4,FV ), 0 , 112, 0 , 7567 , 208, 129), // #1215
- INST(Vpermt2w , VexRvm_Lx , E(660F38,7D,_,x,_,1,4,FVM), 0 , 190, 0 , 7576 , 327, 137), // #1216
- INST(Vpermw , VexRvm_Lx , E(660F38,8D,_,x,_,1,4,FVM), 0 , 190, 0 , 7585 , 327, 137), // #1217
- INST(Vpexpandb , VexRm_Lx , E(660F38,62,_,x,_,0,0,T1S), 0 , 198, 0 , 7592 , 259, 154), // #1218
- INST(Vpexpandd , VexRm_Lx , E(660F38,89,_,x,_,0,2,T1S), 0 , 125, 0 , 7602 , 259, 129), // #1219
- INST(Vpexpandq , VexRm_Lx , E(660F38,89,_,x,_,1,3,T1S), 0 , 124, 0 , 7612 , 259, 129), // #1220
- INST(Vpexpandw , VexRm_Lx , E(660F38,62,_,x,_,1,1,T1S), 0 , 199, 0 , 7622 , 259, 154), // #1221
- INST(Vpextrb , VexMri , V(660F3A,14,_,0,0,I,0,T1S), 0 , 202, 0 , 7632 , 351, 157), // #1222
- INST(Vpextrd , VexMri , V(660F3A,16,_,0,0,0,2,T1S), 0 , 159, 0 , 7640 , 263, 158), // #1223
- INST(Vpextrq , VexMri , V(660F3A,16,_,0,1,1,3,T1S), 0 , 203, 0 , 7648 , 352, 158), // #1224
- INST(Vpextrw , VexMri_Vpextrw , V(660F3A,15,_,0,0,I,1,T1S), 0 , 204, 0 , 7656 , 353, 157), // #1225
- INST(Vpgatherdd , VexRmvRm_VM , V(660F38,90,_,x,0,_,_,_ ), E(660F38,90,_,x,_,0,2,T1S), 97 , 115, 7664 , 279, 143), // #1226
- INST(Vpgatherdq , VexRmvRm_VM , V(660F38,90,_,x,1,_,_,_ ), E(660F38,90,_,x,_,1,3,T1S), 165, 116, 7675 , 278, 143), // #1227
- INST(Vpgatherqd , VexRmvRm_VM , V(660F38,91,_,x,0,_,_,_ ), E(660F38,91,_,x,_,0,2,T1S), 97 , 117, 7686 , 284, 143), // #1228
- INST(Vpgatherqq , VexRmvRm_VM , V(660F38,91,_,x,1,_,_,_ ), E(660F38,91,_,x,_,1,3,T1S), 165, 118, 7697 , 283, 143), // #1229
- INST(Vphaddbd , VexRm , V(XOP_M9,C2,_,0,0,_,_,_ ), 0 , 80 , 0 , 7708 , 200, 142), // #1230
- INST(Vphaddbq , VexRm , V(XOP_M9,C3,_,0,0,_,_,_ ), 0 , 80 , 0 , 7717 , 200, 142), // #1231
- INST(Vphaddbw , VexRm , V(XOP_M9,C1,_,0,0,_,_,_ ), 0 , 80 , 0 , 7726 , 200, 142), // #1232
- INST(Vphaddd , VexRvm_Lx , V(660F38,02,_,x,I,_,_,_ ), 0 , 97 , 0 , 7735 , 198, 146), // #1233
- INST(Vphadddq , VexRm , V(XOP_M9,CB,_,0,0,_,_,_ ), 0 , 80 , 0 , 7743 , 200, 142), // #1234
- INST(Vphaddsw , VexRvm_Lx , V(660F38,03,_,x,I,_,_,_ ), 0 , 97 , 0 , 7752 , 198, 146), // #1235
- INST(Vphaddubd , VexRm , V(XOP_M9,D2,_,0,0,_,_,_ ), 0 , 80 , 0 , 7761 , 200, 142), // #1236
- INST(Vphaddubq , VexRm , V(XOP_M9,D3,_,0,0,_,_,_ ), 0 , 80 , 0 , 7771 , 200, 142), // #1237
- INST(Vphaddubw , VexRm , V(XOP_M9,D1,_,0,0,_,_,_ ), 0 , 80 , 0 , 7781 , 200, 142), // #1238
- INST(Vphaddudq , VexRm , V(XOP_M9,DB,_,0,0,_,_,_ ), 0 , 80 , 0 , 7791 , 200, 142), // #1239
- INST(Vphadduwd , VexRm , V(XOP_M9,D6,_,0,0,_,_,_ ), 0 , 80 , 0 , 7801 , 200, 142), // #1240
- INST(Vphadduwq , VexRm , V(XOP_M9,D7,_,0,0,_,_,_ ), 0 , 80 , 0 , 7811 , 200, 142), // #1241
- INST(Vphaddw , VexRvm_Lx , V(660F38,01,_,x,I,_,_,_ ), 0 , 97 , 0 , 7821 , 198, 146), // #1242
- INST(Vphaddwd , VexRm , V(XOP_M9,C6,_,0,0,_,_,_ ), 0 , 80 , 0 , 7829 , 200, 142), // #1243
- INST(Vphaddwq , VexRm , V(XOP_M9,C7,_,0,0,_,_,_ ), 0 , 80 , 0 , 7838 , 200, 142), // #1244
- INST(Vphminposuw , VexRm , V(660F38,41,_,0,I,_,_,_ ), 0 , 97 , 0 , 7847 , 200, 126), // #1245
- INST(Vphsubbw , VexRm , V(XOP_M9,E1,_,0,0,_,_,_ ), 0 , 80 , 0 , 7859 , 200, 142), // #1246
- INST(Vphsubd , VexRvm_Lx , V(660F38,06,_,x,I,_,_,_ ), 0 , 97 , 0 , 7868 , 198, 146), // #1247
- INST(Vphsubdq , VexRm , V(XOP_M9,E3,_,0,0,_,_,_ ), 0 , 80 , 0 , 7876 , 200, 142), // #1248
- INST(Vphsubsw , VexRvm_Lx , V(660F38,07,_,x,I,_,_,_ ), 0 , 97 , 0 , 7885 , 198, 146), // #1249
- INST(Vphsubw , VexRvm_Lx , V(660F38,05,_,x,I,_,_,_ ), 0 , 97 , 0 , 7894 , 198, 146), // #1250
- INST(Vphsubwd , VexRm , V(XOP_M9,E2,_,0,0,_,_,_ ), 0 , 80 , 0 , 7902 , 200, 142), // #1251
- INST(Vpinsrb , VexRvmi , V(660F3A,20,_,0,0,I,0,T1S), 0 , 202, 0 , 7911 , 354, 157), // #1252
- INST(Vpinsrd , VexRvmi , V(660F3A,22,_,0,0,0,2,T1S), 0 , 159, 0 , 7919 , 355, 158), // #1253
- INST(Vpinsrq , VexRvmi , V(660F3A,22,_,0,1,1,3,T1S), 0 , 203, 0 , 7927 , 356, 158), // #1254
- INST(Vpinsrw , VexRvmi , V(660F00,C4,_,0,0,I,1,T1S), 0 , 205, 0 , 7935 , 357, 157), // #1255
- INST(Vplzcntd , VexRm_Lx , E(660F38,44,_,x,_,0,4,FV ), 0 , 113, 0 , 7943 , 344, 151), // #1256
- INST(Vplzcntq , VexRm_Lx , E(660F38,44,_,x,_,1,4,FV ), 0 , 112, 0 , 7952 , 358, 151), // #1257
- INST(Vpmacsdd , VexRvmr , V(XOP_M8,9E,_,0,0,_,_,_ ), 0 , 195, 0 , 7961 , 359, 142), // #1258
- INST(Vpmacsdqh , VexRvmr , V(XOP_M8,9F,_,0,0,_,_,_ ), 0 , 195, 0 , 7970 , 359, 142), // #1259
- INST(Vpmacsdql , VexRvmr , V(XOP_M8,97,_,0,0,_,_,_ ), 0 , 195, 0 , 7980 , 359, 142), // #1260
- INST(Vpmacssdd , VexRvmr , V(XOP_M8,8E,_,0,0,_,_,_ ), 0 , 195, 0 , 7990 , 359, 142), // #1261
- INST(Vpmacssdqh , VexRvmr , V(XOP_M8,8F,_,0,0,_,_,_ ), 0 , 195, 0 , 8000 , 359, 142), // #1262
- INST(Vpmacssdql , VexRvmr , V(XOP_M8,87,_,0,0,_,_,_ ), 0 , 195, 0 , 8011 , 359, 142), // #1263
- INST(Vpmacsswd , VexRvmr , V(XOP_M8,86,_,0,0,_,_,_ ), 0 , 195, 0 , 8022 , 359, 142), // #1264
- INST(Vpmacssww , VexRvmr , V(XOP_M8,85,_,0,0,_,_,_ ), 0 , 195, 0 , 8032 , 359, 142), // #1265
- INST(Vpmacswd , VexRvmr , V(XOP_M8,96,_,0,0,_,_,_ ), 0 , 195, 0 , 8042 , 359, 142), // #1266
- INST(Vpmacsww , VexRvmr , V(XOP_M8,95,_,0,0,_,_,_ ), 0 , 195, 0 , 8051 , 359, 142), // #1267
- INST(Vpmadcsswd , VexRvmr , V(XOP_M8,A6,_,0,0,_,_,_ ), 0 , 195, 0 , 8060 , 359, 142), // #1268
- INST(Vpmadcswd , VexRvmr , V(XOP_M8,B6,_,0,0,_,_,_ ), 0 , 195, 0 , 8071 , 359, 142), // #1269
- INST(Vpmadd52huq , VexRvm_Lx , E(660F38,B5,_,x,_,1,4,FV ), 0 , 112, 0 , 8081 , 208, 159), // #1270
- INST(Vpmadd52luq , VexRvm_Lx , E(660F38,B4,_,x,_,1,4,FV ), 0 , 112, 0 , 8093 , 208, 159), // #1271
- INST(Vpmaddubsw , VexRvm_Lx , V(660F38,04,_,x,I,I,4,FVM), 0 , 109, 0 , 8105 , 290, 149), // #1272
- INST(Vpmaddwd , VexRvm_Lx , V(660F00,F5,_,x,I,I,4,FVM), 0 , 184, 0 , 8116 , 290, 149), // #1273
- INST(Vpmaskmovd , VexRvmMvr_Lx , V(660F38,8C,_,x,0,_,_,_ ), V(660F38,8E,_,x,0,_,_,_ ), 97 , 119, 8125 , 298, 132), // #1274
- INST(Vpmaskmovq , VexRvmMvr_Lx , V(660F38,8C,_,x,1,_,_,_ ), V(660F38,8E,_,x,1,_,_,_ ), 165, 120, 8136 , 298, 132), // #1275
- INST(Vpmaxsb , VexRvm_Lx , V(660F38,3C,_,x,I,I,4,FVM), 0 , 109, 0 , 8147 , 360, 149), // #1276
- INST(Vpmaxsd , VexRvm_Lx , V(660F38,3D,_,x,I,0,4,FV ), 0 , 163, 0 , 8155 , 207, 133), // #1277
- INST(Vpmaxsq , VexRvm_Lx , E(660F38,3D,_,x,_,1,4,FV ), 0 , 112, 0 , 8163 , 208, 129), // #1278
- INST(Vpmaxsw , VexRvm_Lx , V(660F00,EE,_,x,I,I,4,FVM), 0 , 184, 0 , 8171 , 360, 149), // #1279
- INST(Vpmaxub , VexRvm_Lx , V(660F00,DE,_,x,I,I,4,FVM), 0 , 184, 0 , 8179 , 360, 149), // #1280
- INST(Vpmaxud , VexRvm_Lx , V(660F38,3F,_,x,I,0,4,FV ), 0 , 163, 0 , 8187 , 207, 133), // #1281
- INST(Vpmaxuq , VexRvm_Lx , E(660F38,3F,_,x,_,1,4,FV ), 0 , 112, 0 , 8195 , 208, 129), // #1282
- INST(Vpmaxuw , VexRvm_Lx , V(660F38,3E,_,x,I,I,4,FVM), 0 , 109, 0 , 8203 , 360, 149), // #1283
- INST(Vpminsb , VexRvm_Lx , V(660F38,38,_,x,I,I,4,FVM), 0 , 109, 0 , 8211 , 360, 149), // #1284
- INST(Vpminsd , VexRvm_Lx , V(660F38,39,_,x,I,0,4,FV ), 0 , 163, 0 , 8219 , 207, 133), // #1285
- INST(Vpminsq , VexRvm_Lx , E(660F38,39,_,x,_,1,4,FV ), 0 , 112, 0 , 8227 , 208, 129), // #1286
- INST(Vpminsw , VexRvm_Lx , V(660F00,EA,_,x,I,I,4,FVM), 0 , 184, 0 , 8235 , 360, 149), // #1287
- INST(Vpminub , VexRvm_Lx , V(660F00,DA,_,x,I,_,4,FVM), 0 , 184, 0 , 8243 , 360, 149), // #1288
- INST(Vpminud , VexRvm_Lx , V(660F38,3B,_,x,I,0,4,FV ), 0 , 163, 0 , 8251 , 207, 133), // #1289
- INST(Vpminuq , VexRvm_Lx , E(660F38,3B,_,x,_,1,4,FV ), 0 , 112, 0 , 8259 , 208, 129), // #1290
- INST(Vpminuw , VexRvm_Lx , V(660F38,3A,_,x,I,_,4,FVM), 0 , 109, 0 , 8267 , 360, 149), // #1291
- INST(Vpmovb2m , VexRm_Lx , E(F30F38,29,_,x,_,0,_,_ ), 0 , 193, 0 , 8275 , 361, 137), // #1292
- INST(Vpmovd2m , VexRm_Lx , E(F30F38,39,_,x,_,0,_,_ ), 0 , 193, 0 , 8284 , 361, 131), // #1293
- INST(Vpmovdb , VexMr_Lx , E(F30F38,31,_,x,_,0,2,QVM), 0 , 206, 0 , 8293 , 362, 129), // #1294
- INST(Vpmovdw , VexMr_Lx , E(F30F38,33,_,x,_,0,3,HVM), 0 , 207, 0 , 8301 , 363, 129), // #1295
- INST(Vpmovm2b , VexRm_Lx , E(F30F38,28,_,x,_,0,_,_ ), 0 , 193, 0 , 8309 , 330, 137), // #1296
- INST(Vpmovm2d , VexRm_Lx , E(F30F38,38,_,x,_,0,_,_ ), 0 , 193, 0 , 8318 , 330, 131), // #1297
- INST(Vpmovm2q , VexRm_Lx , E(F30F38,38,_,x,_,1,_,_ ), 0 , 192, 0 , 8327 , 330, 131), // #1298
- INST(Vpmovm2w , VexRm_Lx , E(F30F38,28,_,x,_,1,_,_ ), 0 , 192, 0 , 8336 , 330, 137), // #1299
- INST(Vpmovmskb , VexRm_Lx , V(660F00,D7,_,x,I,_,_,_ ), 0 , 70 , 0 , 8345 , 310, 146), // #1300
- INST(Vpmovq2m , VexRm_Lx , E(F30F38,39,_,x,_,1,_,_ ), 0 , 192, 0 , 8355 , 361, 131), // #1301
- INST(Vpmovqb , VexMr_Lx , E(F30F38,32,_,x,_,0,1,OVM), 0 , 208, 0 , 8364 , 364, 129), // #1302
- INST(Vpmovqd , VexMr_Lx , E(F30F38,35,_,x,_,0,3,HVM), 0 , 207, 0 , 8372 , 363, 129), // #1303
- INST(Vpmovqw , VexMr_Lx , E(F30F38,34,_,x,_,0,2,QVM), 0 , 206, 0 , 8380 , 362, 129), // #1304
- INST(Vpmovsdb , VexMr_Lx , E(F30F38,21,_,x,_,0,2,QVM), 0 , 206, 0 , 8388 , 362, 129), // #1305
- INST(Vpmovsdw , VexMr_Lx , E(F30F38,23,_,x,_,0,3,HVM), 0 , 207, 0 , 8397 , 363, 129), // #1306
- INST(Vpmovsqb , VexMr_Lx , E(F30F38,22,_,x,_,0,1,OVM), 0 , 208, 0 , 8406 , 364, 129), // #1307
- INST(Vpmovsqd , VexMr_Lx , E(F30F38,25,_,x,_,0,3,HVM), 0 , 207, 0 , 8415 , 363, 129), // #1308
- INST(Vpmovsqw , VexMr_Lx , E(F30F38,24,_,x,_,0,2,QVM), 0 , 206, 0 , 8424 , 362, 129), // #1309
- INST(Vpmovswb , VexMr_Lx , E(F30F38,20,_,x,_,0,3,HVM), 0 , 207, 0 , 8433 , 363, 137), // #1310
- INST(Vpmovsxbd , VexRm_Lx , V(660F38,21,_,x,I,I,2,QVM), 0 , 209, 0 , 8442 , 365, 133), // #1311
- INST(Vpmovsxbq , VexRm_Lx , V(660F38,22,_,x,I,I,1,OVM), 0 , 210, 0 , 8452 , 366, 133), // #1312
- INST(Vpmovsxbw , VexRm_Lx , V(660F38,20,_,x,I,I,3,HVM), 0 , 132, 0 , 8462 , 367, 149), // #1313
- INST(Vpmovsxdq , VexRm_Lx , V(660F38,25,_,x,I,0,3,HVM), 0 , 132, 0 , 8472 , 367, 133), // #1314
- INST(Vpmovsxwd , VexRm_Lx , V(660F38,23,_,x,I,I,3,HVM), 0 , 132, 0 , 8482 , 367, 133), // #1315
- INST(Vpmovsxwq , VexRm_Lx , V(660F38,24,_,x,I,I,2,QVM), 0 , 209, 0 , 8492 , 365, 133), // #1316
- INST(Vpmovusdb , VexMr_Lx , E(F30F38,11,_,x,_,0,2,QVM), 0 , 206, 0 , 8502 , 362, 129), // #1317
- INST(Vpmovusdw , VexMr_Lx , E(F30F38,13,_,x,_,0,3,HVM), 0 , 207, 0 , 8512 , 363, 129), // #1318
- INST(Vpmovusqb , VexMr_Lx , E(F30F38,12,_,x,_,0,1,OVM), 0 , 208, 0 , 8522 , 364, 129), // #1319
- INST(Vpmovusqd , VexMr_Lx , E(F30F38,15,_,x,_,0,3,HVM), 0 , 207, 0 , 8532 , 363, 129), // #1320
- INST(Vpmovusqw , VexMr_Lx , E(F30F38,14,_,x,_,0,2,QVM), 0 , 206, 0 , 8542 , 362, 129), // #1321
- INST(Vpmovuswb , VexMr_Lx , E(F30F38,10,_,x,_,0,3,HVM), 0 , 207, 0 , 8552 , 363, 137), // #1322
- INST(Vpmovw2m , VexRm_Lx , E(F30F38,29,_,x,_,1,_,_ ), 0 , 192, 0 , 8562 , 361, 137), // #1323
- INST(Vpmovwb , VexMr_Lx , E(F30F38,30,_,x,_,0,3,HVM), 0 , 207, 0 , 8571 , 363, 137), // #1324
- INST(Vpmovzxbd , VexRm_Lx , V(660F38,31,_,x,I,I,2,QVM), 0 , 209, 0 , 8579 , 365, 133), // #1325
- INST(Vpmovzxbq , VexRm_Lx , V(660F38,32,_,x,I,I,1,OVM), 0 , 210, 0 , 8589 , 366, 133), // #1326
- INST(Vpmovzxbw , VexRm_Lx , V(660F38,30,_,x,I,I,3,HVM), 0 , 132, 0 , 8599 , 367, 149), // #1327
- INST(Vpmovzxdq , VexRm_Lx , V(660F38,35,_,x,I,0,3,HVM), 0 , 132, 0 , 8609 , 367, 133), // #1328
- INST(Vpmovzxwd , VexRm_Lx , V(660F38,33,_,x,I,I,3,HVM), 0 , 132, 0 , 8619 , 367, 133), // #1329
- INST(Vpmovzxwq , VexRm_Lx , V(660F38,34,_,x,I,I,2,QVM), 0 , 209, 0 , 8629 , 365, 133), // #1330
- INST(Vpmuldq , VexRvm_Lx , V(660F38,28,_,x,I,1,4,FV ), 0 , 200, 0 , 8639 , 204, 133), // #1331
- INST(Vpmulhrsw , VexRvm_Lx , V(660F38,0B,_,x,I,I,4,FVM), 0 , 109, 0 , 8647 , 290, 149), // #1332
- INST(Vpmulhuw , VexRvm_Lx , V(660F00,E4,_,x,I,I,4,FVM), 0 , 184, 0 , 8657 , 290, 149), // #1333
- INST(Vpmulhw , VexRvm_Lx , V(660F00,E5,_,x,I,I,4,FVM), 0 , 184, 0 , 8666 , 290, 149), // #1334
- INST(Vpmulld , VexRvm_Lx , V(660F38,40,_,x,I,0,4,FV ), 0 , 163, 0 , 8674 , 205, 133), // #1335
- INST(Vpmullq , VexRvm_Lx , E(660F38,40,_,x,_,1,4,FV ), 0 , 112, 0 , 8682 , 208, 131), // #1336
- INST(Vpmullw , VexRvm_Lx , V(660F00,D5,_,x,I,I,4,FVM), 0 , 184, 0 , 8690 , 290, 149), // #1337
- INST(Vpmultishiftqb , VexRvm_Lx , E(660F38,83,_,x,_,1,4,FV ), 0 , 112, 0 , 8698 , 208, 156), // #1338
- INST(Vpmuludq , VexRvm_Lx , V(660F00,F4,_,x,I,1,4,FV ), 0 , 104, 0 , 8713 , 204, 133), // #1339
- INST(Vpopcntb , VexRm_Lx , E(660F38,54,_,x,_,0,4,FV ), 0 , 113, 0 , 8722 , 259, 160), // #1340
- INST(Vpopcntd , VexRm_Lx , E(660F38,55,_,x,_,0,4,FVM), 0 , 189, 0 , 8731 , 344, 161), // #1341
- INST(Vpopcntq , VexRm_Lx , E(660F38,55,_,x,_,1,4,FVM), 0 , 190, 0 , 8740 , 358, 161), // #1342
- INST(Vpopcntw , VexRm_Lx , E(660F38,54,_,x,_,1,4,FV ), 0 , 112, 0 , 8749 , 259, 160), // #1343
- INST(Vpor , VexRvm_Lx , V(660F00,EB,_,x,I,_,_,_ ), 0 , 70 , 0 , 8758 , 321, 146), // #1344
- INST(Vpord , VexRvm_Lx , E(660F00,EB,_,x,_,0,4,FV ), 0 , 188, 0 , 8763 , 322, 129), // #1345
- INST(Vporq , VexRvm_Lx , E(660F00,EB,_,x,_,1,4,FV ), 0 , 130, 0 , 8769 , 326, 129), // #1346
- INST(Vpperm , VexRvrmRvmr , V(XOP_M8,A3,_,0,x,_,_,_ ), 0 , 195, 0 , 8775 , 368, 142), // #1347
- INST(Vprold , VexVmi_Lx , E(660F00,72,1,x,_,0,4,FV ), 0 , 211, 0 , 8782 , 369, 129), // #1348
- INST(Vprolq , VexVmi_Lx , E(660F00,72,1,x,_,1,4,FV ), 0 , 212, 0 , 8789 , 370, 129), // #1349
- INST(Vprolvd , VexRvm_Lx , E(660F38,15,_,x,_,0,4,FV ), 0 , 113, 0 , 8796 , 209, 129), // #1350
- INST(Vprolvq , VexRvm_Lx , E(660F38,15,_,x,_,1,4,FV ), 0 , 112, 0 , 8804 , 208, 129), // #1351
- INST(Vprord , VexVmi_Lx , E(660F00,72,0,x,_,0,4,FV ), 0 , 188, 0 , 8812 , 369, 129), // #1352
- INST(Vprorq , VexVmi_Lx , E(660F00,72,0,x,_,1,4,FV ), 0 , 130, 0 , 8819 , 370, 129), // #1353
- INST(Vprorvd , VexRvm_Lx , E(660F38,14,_,x,_,0,4,FV ), 0 , 113, 0 , 8826 , 209, 129), // #1354
- INST(Vprorvq , VexRvm_Lx , E(660F38,14,_,x,_,1,4,FV ), 0 , 112, 0 , 8834 , 208, 129), // #1355
- INST(Vprotb , VexRvmRmvRmi , V(XOP_M9,90,_,0,x,_,_,_ ), V(XOP_M8,C0,_,0,x,_,_,_ ), 80 , 121, 8842 , 371, 142), // #1356
- INST(Vprotd , VexRvmRmvRmi , V(XOP_M9,92,_,0,x,_,_,_ ), V(XOP_M8,C2,_,0,x,_,_,_ ), 80 , 122, 8849 , 371, 142), // #1357
- INST(Vprotq , VexRvmRmvRmi , V(XOP_M9,93,_,0,x,_,_,_ ), V(XOP_M8,C3,_,0,x,_,_,_ ), 80 , 123, 8856 , 371, 142), // #1358
- INST(Vprotw , VexRvmRmvRmi , V(XOP_M9,91,_,0,x,_,_,_ ), V(XOP_M8,C1,_,0,x,_,_,_ ), 80 , 124, 8863 , 371, 142), // #1359
- INST(Vpsadbw , VexRvm_Lx , V(660F00,F6,_,x,I,I,4,FVM), 0 , 184, 0 , 8870 , 199, 149), // #1360
- INST(Vpscatterdd , VexMr_VM , E(660F38,A0,_,x,_,0,2,T1S), 0 , 125, 0 , 8878 , 372, 129), // #1361
- INST(Vpscatterdq , VexMr_VM , E(660F38,A0,_,x,_,1,3,T1S), 0 , 124, 0 , 8890 , 373, 129), // #1362
- INST(Vpscatterqd , VexMr_VM , E(660F38,A1,_,x,_,0,2,T1S), 0 , 125, 0 , 8902 , 374, 129), // #1363
- INST(Vpscatterqq , VexMr_VM , E(660F38,A1,_,x,_,1,3,T1S), 0 , 124, 0 , 8914 , 375, 129), // #1364
- INST(Vpshab , VexRvmRmv , V(XOP_M9,98,_,0,x,_,_,_ ), 0 , 80 , 0 , 8926 , 376, 142), // #1365
- INST(Vpshad , VexRvmRmv , V(XOP_M9,9A,_,0,x,_,_,_ ), 0 , 80 , 0 , 8933 , 376, 142), // #1366
- INST(Vpshaq , VexRvmRmv , V(XOP_M9,9B,_,0,x,_,_,_ ), 0 , 80 , 0 , 8940 , 376, 142), // #1367
- INST(Vpshaw , VexRvmRmv , V(XOP_M9,99,_,0,x,_,_,_ ), 0 , 80 , 0 , 8947 , 376, 142), // #1368
- INST(Vpshlb , VexRvmRmv , V(XOP_M9,94,_,0,x,_,_,_ ), 0 , 80 , 0 , 8954 , 376, 142), // #1369
- INST(Vpshld , VexRvmRmv , V(XOP_M9,96,_,0,x,_,_,_ ), 0 , 80 , 0 , 8961 , 376, 142), // #1370
- INST(Vpshldd , VexRvmi_Lx , E(660F3A,71,_,x,_,0,4,FV ), 0 , 110, 0 , 8968 , 202, 154), // #1371
- INST(Vpshldq , VexRvmi_Lx , E(660F3A,71,_,x,_,1,4,FV ), 0 , 111, 0 , 8976 , 203, 154), // #1372
- INST(Vpshldvd , VexRvm_Lx , E(660F38,71,_,x,_,0,4,FV ), 0 , 113, 0 , 8984 , 209, 154), // #1373
- INST(Vpshldvq , VexRvm_Lx , E(660F38,71,_,x,_,1,4,FV ), 0 , 112, 0 , 8993 , 208, 154), // #1374
- INST(Vpshldvw , VexRvm_Lx , E(660F38,70,_,x,_,1,4,FVM), 0 , 190, 0 , 9002 , 327, 154), // #1375
- INST(Vpshldw , VexRvmi_Lx , E(660F3A,70,_,x,_,1,4,FVM), 0 , 197, 0 , 9011 , 255, 154), // #1376
- INST(Vpshlq , VexRvmRmv , V(XOP_M9,97,_,0,x,_,_,_ ), 0 , 80 , 0 , 9019 , 376, 142), // #1377
- INST(Vpshlw , VexRvmRmv , V(XOP_M9,95,_,0,x,_,_,_ ), 0 , 80 , 0 , 9026 , 376, 142), // #1378
- INST(Vpshrdd , VexRvmi_Lx , E(660F3A,73,_,x,_,0,4,FV ), 0 , 110, 0 , 9033 , 202, 154), // #1379
- INST(Vpshrdq , VexRvmi_Lx , E(660F3A,73,_,x,_,1,4,FV ), 0 , 111, 0 , 9041 , 203, 154), // #1380
- INST(Vpshrdvd , VexRvm_Lx , E(660F38,73,_,x,_,0,4,FV ), 0 , 113, 0 , 9049 , 209, 154), // #1381
- INST(Vpshrdvq , VexRvm_Lx , E(660F38,73,_,x,_,1,4,FV ), 0 , 112, 0 , 9058 , 208, 154), // #1382
- INST(Vpshrdvw , VexRvm_Lx , E(660F38,72,_,x,_,1,4,FVM), 0 , 190, 0 , 9067 , 327, 154), // #1383
- INST(Vpshrdw , VexRvmi_Lx , E(660F3A,72,_,x,_,1,4,FVM), 0 , 197, 0 , 9076 , 255, 154), // #1384
- INST(Vpshufb , VexRvm_Lx , V(660F38,00,_,x,I,I,4,FVM), 0 , 109, 0 , 9084 , 290, 149), // #1385
- INST(Vpshufbitqmb , VexRvm_Lx , E(660F38,8F,_,x,0,0,4,FVM), 0 , 189, 0 , 9092 , 377, 160), // #1386
- INST(Vpshufd , VexRmi_Lx , V(660F00,70,_,x,I,0,4,FV ), 0 , 133, 0 , 9105 , 378, 133), // #1387
- INST(Vpshufhw , VexRmi_Lx , V(F30F00,70,_,x,I,I,4,FVM), 0 , 185, 0 , 9113 , 379, 149), // #1388
- INST(Vpshuflw , VexRmi_Lx , V(F20F00,70,_,x,I,I,4,FVM), 0 , 213, 0 , 9122 , 379, 149), // #1389
- INST(Vpsignb , VexRvm_Lx , V(660F38,08,_,x,I,_,_,_ ), 0 , 97 , 0 , 9131 , 198, 146), // #1390
- INST(Vpsignd , VexRvm_Lx , V(660F38,0A,_,x,I,_,_,_ ), 0 , 97 , 0 , 9139 , 198, 146), // #1391
- INST(Vpsignw , VexRvm_Lx , V(660F38,09,_,x,I,_,_,_ ), 0 , 97 , 0 , 9147 , 198, 146), // #1392
- INST(Vpslld , VexRvmVmi_Lx_MEvex , V(660F00,F2,_,x,I,0,4,128), V(660F00,72,6,x,I,0,4,FV ), 214, 125, 9155 , 380, 133), // #1393
- INST(Vpslldq , VexVmi_Lx_MEvex , V(660F00,73,7,x,I,I,4,FVM), 0 , 215, 0 , 9162 , 381, 149), // #1394
- INST(Vpsllq , VexRvmVmi_Lx_MEvex , V(660F00,F3,_,x,I,1,4,128), V(660F00,73,6,x,I,1,4,FV ), 216, 126, 9170 , 382, 133), // #1395
- INST(Vpsllvd , VexRvm_Lx , V(660F38,47,_,x,0,0,4,FV ), 0 , 163, 0 , 9177 , 205, 143), // #1396
- INST(Vpsllvq , VexRvm_Lx , V(660F38,47,_,x,1,1,4,FV ), 0 , 162, 0 , 9185 , 204, 143), // #1397
- INST(Vpsllvw , VexRvm_Lx , E(660F38,12,_,x,_,1,4,FVM), 0 , 190, 0 , 9193 , 327, 137), // #1398
- INST(Vpsllw , VexRvmVmi_Lx_MEvex , V(660F00,F1,_,x,I,I,4,128), V(660F00,71,6,x,I,I,4,FVM), 214, 127, 9201 , 383, 149), // #1399
- INST(Vpsrad , VexRvmVmi_Lx_MEvex , V(660F00,E2,_,x,I,0,4,128), V(660F00,72,4,x,I,0,4,FV ), 214, 128, 9208 , 380, 133), // #1400
- INST(Vpsraq , VexRvmVmi_Lx_MEvex , E(660F00,E2,_,x,_,1,4,128), E(660F00,72,4,x,_,1,4,FV ), 217, 129, 9215 , 384, 129), // #1401
- INST(Vpsravd , VexRvm_Lx , V(660F38,46,_,x,0,0,4,FV ), 0 , 163, 0 , 9222 , 205, 143), // #1402
- INST(Vpsravq , VexRvm_Lx , E(660F38,46,_,x,_,1,4,FV ), 0 , 112, 0 , 9230 , 208, 129), // #1403
- INST(Vpsravw , VexRvm_Lx , E(660F38,11,_,x,_,1,4,FVM), 0 , 190, 0 , 9238 , 327, 137), // #1404
- INST(Vpsraw , VexRvmVmi_Lx_MEvex , V(660F00,E1,_,x,I,I,4,128), V(660F00,71,4,x,I,I,4,FVM), 214, 130, 9246 , 383, 149), // #1405
- INST(Vpsrld , VexRvmVmi_Lx_MEvex , V(660F00,D2,_,x,I,0,4,128), V(660F00,72,2,x,I,0,4,FV ), 214, 131, 9253 , 380, 133), // #1406
- INST(Vpsrldq , VexVmi_Lx_MEvex , V(660F00,73,3,x,I,I,4,FVM), 0 , 218, 0 , 9260 , 381, 149), // #1407
- INST(Vpsrlq , VexRvmVmi_Lx_MEvex , V(660F00,D3,_,x,I,1,4,128), V(660F00,73,2,x,I,1,4,FV ), 216, 132, 9268 , 382, 133), // #1408
- INST(Vpsrlvd , VexRvm_Lx , V(660F38,45,_,x,0,0,4,FV ), 0 , 163, 0 , 9275 , 205, 143), // #1409
- INST(Vpsrlvq , VexRvm_Lx , V(660F38,45,_,x,1,1,4,FV ), 0 , 162, 0 , 9283 , 204, 143), // #1410
- INST(Vpsrlvw , VexRvm_Lx , E(660F38,10,_,x,_,1,4,FVM), 0 , 190, 0 , 9291 , 327, 137), // #1411
- INST(Vpsrlw , VexRvmVmi_Lx_MEvex , V(660F00,D1,_,x,I,I,4,128), V(660F00,71,2,x,I,I,4,FVM), 214, 133, 9299 , 383, 149), // #1412
- INST(Vpsubb , VexRvm_Lx , V(660F00,F8,_,x,I,I,4,FVM), 0 , 184, 0 , 9306 , 385, 149), // #1413
- INST(Vpsubd , VexRvm_Lx , V(660F00,FA,_,x,I,0,4,FV ), 0 , 133, 0 , 9313 , 386, 133), // #1414
- INST(Vpsubq , VexRvm_Lx , V(660F00,FB,_,x,I,1,4,FV ), 0 , 104, 0 , 9320 , 387, 133), // #1415
- INST(Vpsubsb , VexRvm_Lx , V(660F00,E8,_,x,I,I,4,FVM), 0 , 184, 0 , 9327 , 385, 149), // #1416
- INST(Vpsubsw , VexRvm_Lx , V(660F00,E9,_,x,I,I,4,FVM), 0 , 184, 0 , 9335 , 385, 149), // #1417
- INST(Vpsubusb , VexRvm_Lx , V(660F00,D8,_,x,I,I,4,FVM), 0 , 184, 0 , 9343 , 385, 149), // #1418
- INST(Vpsubusw , VexRvm_Lx , V(660F00,D9,_,x,I,I,4,FVM), 0 , 184, 0 , 9352 , 385, 149), // #1419
- INST(Vpsubw , VexRvm_Lx , V(660F00,F9,_,x,I,I,4,FVM), 0 , 184, 0 , 9361 , 385, 149), // #1420
- INST(Vpternlogd , VexRvmi_Lx , E(660F3A,25,_,x,_,0,4,FV ), 0 , 110, 0 , 9368 , 202, 129), // #1421
- INST(Vpternlogq , VexRvmi_Lx , E(660F3A,25,_,x,_,1,4,FV ), 0 , 111, 0 , 9379 , 203, 129), // #1422
- INST(Vptest , VexRm_Lx , V(660F38,17,_,x,I,_,_,_ ), 0 , 97 , 0 , 9390 , 275, 153), // #1423
- INST(Vptestmb , VexRvm_Lx , E(660F38,26,_,x,_,0,4,FVM), 0 , 189, 0 , 9397 , 377, 137), // #1424
- INST(Vptestmd , VexRvm_Lx , E(660F38,27,_,x,_,0,4,FV ), 0 , 113, 0 , 9406 , 388, 129), // #1425
- INST(Vptestmq , VexRvm_Lx , E(660F38,27,_,x,_,1,4,FV ), 0 , 112, 0 , 9415 , 389, 129), // #1426
- INST(Vptestmw , VexRvm_Lx , E(660F38,26,_,x,_,1,4,FVM), 0 , 190, 0 , 9424 , 377, 137), // #1427
- INST(Vptestnmb , VexRvm_Lx , E(F30F38,26,_,x,_,0,4,FVM), 0 , 219, 0 , 9433 , 377, 137), // #1428
- INST(Vptestnmd , VexRvm_Lx , E(F30F38,27,_,x,_,0,4,FV ), 0 , 128, 0 , 9443 , 388, 129), // #1429
- INST(Vptestnmq , VexRvm_Lx , E(F30F38,27,_,x,_,1,4,FV ), 0 , 220, 0 , 9453 , 389, 129), // #1430
- INST(Vptestnmw , VexRvm_Lx , E(F30F38,26,_,x,_,1,4,FVM), 0 , 221, 0 , 9463 , 377, 137), // #1431
- INST(Vpunpckhbw , VexRvm_Lx , V(660F00,68,_,x,I,I,4,FVM), 0 , 184, 0 , 9473 , 290, 149), // #1432
- INST(Vpunpckhdq , VexRvm_Lx , V(660F00,6A,_,x,I,0,4,FV ), 0 , 133, 0 , 9484 , 205, 133), // #1433
- INST(Vpunpckhqdq , VexRvm_Lx , V(660F00,6D,_,x,I,1,4,FV ), 0 , 104, 0 , 9495 , 204, 133), // #1434
- INST(Vpunpckhwd , VexRvm_Lx , V(660F00,69,_,x,I,I,4,FVM), 0 , 184, 0 , 9507 , 290, 149), // #1435
- INST(Vpunpcklbw , VexRvm_Lx , V(660F00,60,_,x,I,I,4,FVM), 0 , 184, 0 , 9518 , 290, 149), // #1436
- INST(Vpunpckldq , VexRvm_Lx , V(660F00,62,_,x,I,0,4,FV ), 0 , 133, 0 , 9529 , 205, 133), // #1437
- INST(Vpunpcklqdq , VexRvm_Lx , V(660F00,6C,_,x,I,1,4,FV ), 0 , 104, 0 , 9540 , 204, 133), // #1438
- INST(Vpunpcklwd , VexRvm_Lx , V(660F00,61,_,x,I,I,4,FVM), 0 , 184, 0 , 9552 , 290, 149), // #1439
- INST(Vpxor , VexRvm_Lx , V(660F00,EF,_,x,I,_,_,_ ), 0 , 70 , 0 , 9563 , 323, 146), // #1440
- INST(Vpxord , VexRvm_Lx , E(660F00,EF,_,x,_,0,4,FV ), 0 , 188, 0 , 9569 , 324, 129), // #1441
- INST(Vpxorq , VexRvm_Lx , E(660F00,EF,_,x,_,1,4,FV ), 0 , 130, 0 , 9576 , 325, 129), // #1442
- INST(Vrangepd , VexRvmi_Lx , E(660F3A,50,_,x,_,1,4,FV ), 0 , 111, 0 , 9583 , 264, 131), // #1443
- INST(Vrangeps , VexRvmi_Lx , E(660F3A,50,_,x,_,0,4,FV ), 0 , 110, 0 , 9592 , 265, 131), // #1444
- INST(Vrangesd , VexRvmi , E(660F3A,51,_,I,_,1,3,T1S), 0 , 160, 0 , 9601 , 266, 66 ), // #1445
- INST(Vrangess , VexRvmi , E(660F3A,51,_,I,_,0,2,T1S), 0 , 161, 0 , 9610 , 267, 66 ), // #1446
- INST(Vrcp14pd , VexRm_Lx , E(660F38,4C,_,x,_,1,4,FV ), 0 , 112, 0 , 9619 , 358, 129), // #1447
- INST(Vrcp14ps , VexRm_Lx , E(660F38,4C,_,x,_,0,4,FV ), 0 , 113, 0 , 9628 , 344, 129), // #1448
- INST(Vrcp14sd , VexRvm , E(660F38,4D,_,I,_,1,3,T1S), 0 , 124, 0 , 9637 , 390, 68 ), // #1449
- INST(Vrcp14ss , VexRvm , E(660F38,4D,_,I,_,0,2,T1S), 0 , 125, 0 , 9646 , 391, 68 ), // #1450
- INST(Vrcp28pd , VexRm , E(660F38,CA,_,2,_,1,4,FV ), 0 , 152, 0 , 9655 , 257, 138), // #1451
- INST(Vrcp28ps , VexRm , E(660F38,CA,_,2,_,0,4,FV ), 0 , 153, 0 , 9664 , 258, 138), // #1452
- INST(Vrcp28sd , VexRvm , E(660F38,CB,_,I,_,1,3,T1S), 0 , 124, 0 , 9673 , 285, 138), // #1453
- INST(Vrcp28ss , VexRvm , E(660F38,CB,_,I,_,0,2,T1S), 0 , 125, 0 , 9682 , 286, 138), // #1454
- INST(Vrcpps , VexRm_Lx , V(000F00,53,_,x,I,_,_,_ ), 0 , 73 , 0 , 9691 , 275, 126), // #1455
- INST(Vrcpss , VexRvm , V(F30F00,53,_,I,I,_,_,_ ), 0 , 178, 0 , 9698 , 392, 126), // #1456
- INST(Vreducepd , VexRmi_Lx , E(660F3A,56,_,x,_,1,4,FV ), 0 , 111, 0 , 9705 , 370, 131), // #1457
- INST(Vreduceps , VexRmi_Lx , E(660F3A,56,_,x,_,0,4,FV ), 0 , 110, 0 , 9715 , 369, 131), // #1458
- INST(Vreducesd , VexRvmi , E(660F3A,57,_,I,_,1,3,T1S), 0 , 160, 0 , 9725 , 393, 66 ), // #1459
- INST(Vreducess , VexRvmi , E(660F3A,57,_,I,_,0,2,T1S), 0 , 161, 0 , 9735 , 394, 66 ), // #1460
- INST(Vrndscalepd , VexRmi_Lx , E(660F3A,09,_,x,_,1,4,FV ), 0 , 111, 0 , 9745 , 287, 129), // #1461
- INST(Vrndscaleps , VexRmi_Lx , E(660F3A,08,_,x,_,0,4,FV ), 0 , 110, 0 , 9757 , 288, 129), // #1462
- INST(Vrndscalesd , VexRvmi , E(660F3A,0B,_,I,_,1,3,T1S), 0 , 160, 0 , 9769 , 266, 68 ), // #1463
- INST(Vrndscaless , VexRvmi , E(660F3A,0A,_,I,_,0,2,T1S), 0 , 161, 0 , 9781 , 267, 68 ), // #1464
- INST(Vroundpd , VexRmi_Lx , V(660F3A,09,_,x,I,_,_,_ ), 0 , 74 , 0 , 9793 , 395, 126), // #1465
- INST(Vroundps , VexRmi_Lx , V(660F3A,08,_,x,I,_,_,_ ), 0 , 74 , 0 , 9802 , 395, 126), // #1466
- INST(Vroundsd , VexRvmi , V(660F3A,0B,_,I,I,_,_,_ ), 0 , 74 , 0 , 9811 , 396, 126), // #1467
- INST(Vroundss , VexRvmi , V(660F3A,0A,_,I,I,_,_,_ ), 0 , 74 , 0 , 9820 , 397, 126), // #1468
- INST(Vrsqrt14pd , VexRm_Lx , E(660F38,4E,_,x,_,1,4,FV ), 0 , 112, 0 , 9829 , 358, 129), // #1469
- INST(Vrsqrt14ps , VexRm_Lx , E(660F38,4E,_,x,_,0,4,FV ), 0 , 113, 0 , 9840 , 344, 129), // #1470
- INST(Vrsqrt14sd , VexRvm , E(660F38,4F,_,I,_,1,3,T1S), 0 , 124, 0 , 9851 , 390, 68 ), // #1471
- INST(Vrsqrt14ss , VexRvm , E(660F38,4F,_,I,_,0,2,T1S), 0 , 125, 0 , 9862 , 391, 68 ), // #1472
- INST(Vrsqrt28pd , VexRm , E(660F38,CC,_,2,_,1,4,FV ), 0 , 152, 0 , 9873 , 257, 138), // #1473
- INST(Vrsqrt28ps , VexRm , E(660F38,CC,_,2,_,0,4,FV ), 0 , 153, 0 , 9884 , 258, 138), // #1474
- INST(Vrsqrt28sd , VexRvm , E(660F38,CD,_,I,_,1,3,T1S), 0 , 124, 0 , 9895 , 285, 138), // #1475
- INST(Vrsqrt28ss , VexRvm , E(660F38,CD,_,I,_,0,2,T1S), 0 , 125, 0 , 9906 , 286, 138), // #1476
- INST(Vrsqrtps , VexRm_Lx , V(000F00,52,_,x,I,_,_,_ ), 0 , 73 , 0 , 9917 , 275, 126), // #1477
- INST(Vrsqrtss , VexRvm , V(F30F00,52,_,I,I,_,_,_ ), 0 , 178, 0 , 9926 , 392, 126), // #1478
- INST(Vscalefpd , VexRvm_Lx , E(660F38,2C,_,x,_,1,4,FV ), 0 , 112, 0 , 9935 , 398, 129), // #1479
- INST(Vscalefps , VexRvm_Lx , E(660F38,2C,_,x,_,0,4,FV ), 0 , 113, 0 , 9945 , 399, 129), // #1480
- INST(Vscalefsd , VexRvm , E(660F38,2D,_,I,_,1,3,T1S), 0 , 124, 0 , 9955 , 400, 68 ), // #1481
- INST(Vscalefss , VexRvm , E(660F38,2D,_,I,_,0,2,T1S), 0 , 125, 0 , 9965 , 401, 68 ), // #1482
- INST(Vscatterdpd , VexMr_VM , E(660F38,A2,_,x,_,1,3,T1S), 0 , 124, 0 , 9975 , 373, 129), // #1483
- INST(Vscatterdps , VexMr_VM , E(660F38,A2,_,x,_,0,2,T1S), 0 , 125, 0 , 9987 , 372, 129), // #1484
- INST(Vscatterpf0dpd , VexM_VM , E(660F38,C6,5,2,_,1,3,T1S), 0 , 222, 0 , 9999 , 280, 144), // #1485
- INST(Vscatterpf0dps , VexM_VM , E(660F38,C6,5,2,_,0,2,T1S), 0 , 223, 0 , 10014, 281, 144), // #1486
- INST(Vscatterpf0qpd , VexM_VM , E(660F38,C7,5,2,_,1,3,T1S), 0 , 222, 0 , 10029, 282, 144), // #1487
- INST(Vscatterpf0qps , VexM_VM , E(660F38,C7,5,2,_,0,2,T1S), 0 , 223, 0 , 10044, 282, 144), // #1488
- INST(Vscatterpf1dpd , VexM_VM , E(660F38,C6,6,2,_,1,3,T1S), 0 , 224, 0 , 10059, 280, 144), // #1489
- INST(Vscatterpf1dps , VexM_VM , E(660F38,C6,6,2,_,0,2,T1S), 0 , 225, 0 , 10074, 281, 144), // #1490
- INST(Vscatterpf1qpd , VexM_VM , E(660F38,C7,6,2,_,1,3,T1S), 0 , 224, 0 , 10089, 282, 144), // #1491
- INST(Vscatterpf1qps , VexM_VM , E(660F38,C7,6,2,_,0,2,T1S), 0 , 225, 0 , 10104, 282, 144), // #1492
- INST(Vscatterqpd , VexMr_VM , E(660F38,A3,_,x,_,1,3,T1S), 0 , 124, 0 , 10119, 375, 129), // #1493
- INST(Vscatterqps , VexMr_VM , E(660F38,A3,_,x,_,0,2,T1S), 0 , 125, 0 , 10131, 374, 129), // #1494
- INST(Vshuff32x4 , VexRvmi_Lx , E(660F3A,23,_,x,_,0,4,FV ), 0 , 110, 0 , 10143, 402, 129), // #1495
- INST(Vshuff64x2 , VexRvmi_Lx , E(660F3A,23,_,x,_,1,4,FV ), 0 , 111, 0 , 10154, 403, 129), // #1496
- INST(Vshufi32x4 , VexRvmi_Lx , E(660F3A,43,_,x,_,0,4,FV ), 0 , 110, 0 , 10165, 402, 129), // #1497
- INST(Vshufi64x2 , VexRvmi_Lx , E(660F3A,43,_,x,_,1,4,FV ), 0 , 111, 0 , 10176, 403, 129), // #1498
- INST(Vshufpd , VexRvmi_Lx , V(660F00,C6,_,x,I,1,4,FV ), 0 , 104, 0 , 10187, 404, 124), // #1499
- INST(Vshufps , VexRvmi_Lx , V(000F00,C6,_,x,I,0,4,FV ), 0 , 105, 0 , 10195, 405, 124), // #1500
- INST(Vsqrtpd , VexRm_Lx , V(660F00,51,_,x,I,1,4,FV ), 0 , 104, 0 , 10203, 406, 124), // #1501
- INST(Vsqrtps , VexRm_Lx , V(000F00,51,_,x,I,0,4,FV ), 0 , 105, 0 , 10211, 227, 124), // #1502
- INST(Vsqrtsd , VexRvm , V(F20F00,51,_,I,I,1,3,T1S), 0 , 106, 0 , 10219, 196, 125), // #1503
- INST(Vsqrtss , VexRvm , V(F30F00,51,_,I,I,0,2,T1S), 0 , 107, 0 , 10227, 197, 125), // #1504
- INST(Vstmxcsr , VexM , V(000F00,AE,3,0,I,_,_,_ ), 0 , 226, 0 , 10235, 296, 126), // #1505
- INST(Vsubpd , VexRvm_Lx , V(660F00,5C,_,x,I,1,4,FV ), 0 , 104, 0 , 10244, 194, 124), // #1506
- INST(Vsubps , VexRvm_Lx , V(000F00,5C,_,x,I,0,4,FV ), 0 , 105, 0 , 10251, 195, 124), // #1507
- INST(Vsubsd , VexRvm , V(F20F00,5C,_,I,I,1,3,T1S), 0 , 106, 0 , 10258, 196, 125), // #1508
- INST(Vsubss , VexRvm , V(F30F00,5C,_,I,I,0,2,T1S), 0 , 107, 0 , 10265, 197, 125), // #1509
- INST(Vtestpd , VexRm_Lx , V(660F38,0F,_,x,0,_,_,_ ), 0 , 97 , 0 , 10272, 275, 153), // #1510
- INST(Vtestps , VexRm_Lx , V(660F38,0E,_,x,0,_,_,_ ), 0 , 97 , 0 , 10280, 275, 153), // #1511
- INST(Vucomisd , VexRm , V(660F00,2E,_,I,I,1,3,T1S), 0 , 122, 0 , 10288, 223, 134), // #1512
- INST(Vucomiss , VexRm , V(000F00,2E,_,I,I,0,2,T1S), 0 , 123, 0 , 10297, 224, 134), // #1513
- INST(Vunpckhpd , VexRvm_Lx , V(660F00,15,_,x,I,1,4,FV ), 0 , 104, 0 , 10306, 204, 124), // #1514
- INST(Vunpckhps , VexRvm_Lx , V(000F00,15,_,x,I,0,4,FV ), 0 , 105, 0 , 10316, 205, 124), // #1515
- INST(Vunpcklpd , VexRvm_Lx , V(660F00,14,_,x,I,1,4,FV ), 0 , 104, 0 , 10326, 204, 124), // #1516
- INST(Vunpcklps , VexRvm_Lx , V(000F00,14,_,x,I,0,4,FV ), 0 , 105, 0 , 10336, 205, 124), // #1517
- INST(Vxorpd , VexRvm_Lx , V(660F00,57,_,x,I,1,4,FV ), 0 , 104, 0 , 10346, 387, 130), // #1518
- INST(Vxorps , VexRvm_Lx , V(000F00,57,_,x,I,0,4,FV ), 0 , 105, 0 , 10353, 386, 130), // #1519
- INST(Vzeroall , VexOp , V(000F00,77,_,1,I,_,_,_ ), 0 , 69 , 0 , 10360, 407, 126), // #1520
- INST(Vzeroupper , VexOp , V(000F00,77,_,0,I,_,_,_ ), 0 , 73 , 0 , 10369, 407, 126), // #1521
+ INST(Vorpd , VexRvm_Lx , V(660F00,56,_,x,I,1,4,FV ), 0 , 104, 0 , 6599 , 207, 130), // #1110
+ INST(Vorps , VexRvm_Lx , V(000F00,56,_,x,I,0,4,FV ), 0 , 105, 0 , 6605 , 208, 130), // #1111
+ INST(Vp2intersectd , VexRvm_Lx_2xK , E(F20F38,68,_,_,_,0,4,FV ), 0 , 127, 0 , 6611 , 320, 147), // #1112
+ INST(Vp2intersectq , VexRvm_Lx_2xK , E(F20F38,68,_,_,_,1,4,FV ), 0 , 186, 0 , 6625 , 321, 147), // #1113
+ INST(Vp4dpwssd , VexRm_T1_4X , E(F20F38,52,_,2,_,0,4,T4X), 0 , 102, 0 , 6639 , 193, 148), // #1114
+ INST(Vp4dpwssds , VexRm_T1_4X , E(F20F38,53,_,2,_,0,4,T4X), 0 , 102, 0 , 6649 , 193, 148), // #1115
+ INST(Vpabsb , VexRm_Lx , V(660F38,1C,_,x,I,_,4,FVM), 0 , 109, 0 , 6660 , 316, 149), // #1116
+ INST(Vpabsd , VexRm_Lx , V(660F38,1E,_,x,I,0,4,FV ), 0 , 163, 0 , 6667 , 316, 133), // #1117
+ INST(Vpabsq , VexRm_Lx , E(660F38,1F,_,x,_,1,4,FV ), 0 , 112, 0 , 6674 , 260, 129), // #1118
+ INST(Vpabsw , VexRm_Lx , V(660F38,1D,_,x,I,_,4,FVM), 0 , 109, 0 , 6681 , 316, 149), // #1119
+ INST(Vpackssdw , VexRvm_Lx , V(660F00,6B,_,x,I,0,4,FV ), 0 , 133, 0 , 6688 , 206, 149), // #1120
+ INST(Vpacksswb , VexRvm_Lx , V(660F00,63,_,x,I,I,4,FVM), 0 , 184, 0 , 6698 , 291, 149), // #1121
+ INST(Vpackusdw , VexRvm_Lx , V(660F38,2B,_,x,I,0,4,FV ), 0 , 163, 0 , 6708 , 206, 149), // #1122
+ INST(Vpackuswb , VexRvm_Lx , V(660F00,67,_,x,I,I,4,FVM), 0 , 184, 0 , 6718 , 291, 149), // #1123
+ INST(Vpaddb , VexRvm_Lx , V(660F00,FC,_,x,I,I,4,FVM), 0 , 184, 0 , 6728 , 291, 149), // #1124
+ INST(Vpaddd , VexRvm_Lx , V(660F00,FE,_,x,I,0,4,FV ), 0 , 133, 0 , 6735 , 206, 133), // #1125
+ INST(Vpaddq , VexRvm_Lx , V(660F00,D4,_,x,I,1,4,FV ), 0 , 104, 0 , 6742 , 205, 133), // #1126
+ INST(Vpaddsb , VexRvm_Lx , V(660F00,EC,_,x,I,I,4,FVM), 0 , 184, 0 , 6749 , 291, 149), // #1127
+ INST(Vpaddsw , VexRvm_Lx , V(660F00,ED,_,x,I,I,4,FVM), 0 , 184, 0 , 6757 , 291, 149), // #1128
+ INST(Vpaddusb , VexRvm_Lx , V(660F00,DC,_,x,I,I,4,FVM), 0 , 184, 0 , 6765 , 291, 149), // #1129
+ INST(Vpaddusw , VexRvm_Lx , V(660F00,DD,_,x,I,I,4,FVM), 0 , 184, 0 , 6774 , 291, 149), // #1130
+ INST(Vpaddw , VexRvm_Lx , V(660F00,FD,_,x,I,I,4,FVM), 0 , 184, 0 , 6783 , 291, 149), // #1131
+ INST(Vpalignr , VexRvmi_Lx , V(660F3A,0F,_,x,I,I,4,FVM), 0 , 187, 0 , 6790 , 290, 149), // #1132
+ INST(Vpand , VexRvm_Lx , V(660F00,DB,_,x,I,_,_,_ ), 0 , 70 , 0 , 6799 , 322, 146), // #1133
+ INST(Vpandd , VexRvm_Lx , E(660F00,DB,_,x,_,0,4,FV ), 0 , 188, 0 , 6805 , 323, 129), // #1134
+ INST(Vpandn , VexRvm_Lx , V(660F00,DF,_,x,I,_,_,_ ), 0 , 70 , 0 , 6812 , 324, 146), // #1135
+ INST(Vpandnd , VexRvm_Lx , E(660F00,DF,_,x,_,0,4,FV ), 0 , 188, 0 , 6819 , 325, 129), // #1136
+ INST(Vpandnq , VexRvm_Lx , E(660F00,DF,_,x,_,1,4,FV ), 0 , 130, 0 , 6827 , 326, 129), // #1137
+ INST(Vpandq , VexRvm_Lx , E(660F00,DB,_,x,_,1,4,FV ), 0 , 130, 0 , 6835 , 327, 129), // #1138
+ INST(Vpavgb , VexRvm_Lx , V(660F00,E0,_,x,I,I,4,FVM), 0 , 184, 0 , 6842 , 291, 149), // #1139
+ INST(Vpavgw , VexRvm_Lx , V(660F00,E3,_,x,I,I,4,FVM), 0 , 184, 0 , 6849 , 291, 149), // #1140
+ INST(Vpblendd , VexRvmi_Lx , V(660F3A,02,_,x,0,_,_,_ ), 0 , 74 , 0 , 6856 , 211, 132), // #1141
+ INST(Vpblendmb , VexRvm_Lx , E(660F38,66,_,x,_,0,4,FVM), 0 , 189, 0 , 6865 , 328, 137), // #1142
+ INST(Vpblendmd , VexRvm_Lx , E(660F38,64,_,x,_,0,4,FV ), 0 , 113, 0 , 6875 , 210, 129), // #1143
+ INST(Vpblendmq , VexRvm_Lx , E(660F38,64,_,x,_,1,4,FV ), 0 , 112, 0 , 6885 , 209, 129), // #1144
+ INST(Vpblendmw , VexRvm_Lx , E(660F38,66,_,x,_,1,4,FVM), 0 , 190, 0 , 6895 , 328, 137), // #1145
+ INST(Vpblendvb , VexRvmr_Lx , V(660F3A,4C,_,x,0,_,_,_ ), 0 , 74 , 0 , 6905 , 212, 146), // #1146
+ INST(Vpblendw , VexRvmi_Lx , V(660F3A,0E,_,x,I,_,_,_ ), 0 , 74 , 0 , 6915 , 211, 146), // #1147
+ INST(Vpbroadcastb , VexRm_Lx_Bcst , V(660F38,78,_,x,0,0,0,T1S), E(660F38,7A,_,x,0,0,0,T1S), 191, 107, 6924 , 329, 150), // #1148
+ INST(Vpbroadcastd , VexRm_Lx_Bcst , V(660F38,58,_,x,0,0,2,T1S), E(660F38,7C,_,x,0,0,0,T1S), 121, 108, 6937 , 330, 143), // #1149
+ INST(Vpbroadcastmb2q , VexRm_Lx , E(F30F38,2A,_,x,_,1,_,_ ), 0 , 192, 0 , 6950 , 331, 151), // #1150
+ INST(Vpbroadcastmw2d , VexRm_Lx , E(F30F38,3A,_,x,_,0,_,_ ), 0 , 193, 0 , 6966 , 331, 151), // #1151
+ INST(Vpbroadcastq , VexRm_Lx_Bcst , V(660F38,59,_,x,0,1,3,T1S), E(660F38,7C,_,x,0,1,0,T1S), 120, 109, 6982 , 332, 143), // #1152
+ INST(Vpbroadcastw , VexRm_Lx_Bcst , V(660F38,79,_,x,0,0,1,T1S), E(660F38,7B,_,x,0,0,0,T1S), 194, 110, 6995 , 333, 150), // #1153
+ INST(Vpclmulqdq , VexRvmi_Lx , V(660F3A,44,_,x,I,_,4,FVM), 0 , 187, 0 , 7008 , 334, 152), // #1154
+ INST(Vpcmov , VexRvrmRvmr_Lx , V(XOP_M8,A2,_,x,x,_,_,_ ), 0 , 195, 0 , 7019 , 269, 142), // #1155
+ INST(Vpcmpb , VexRvmi_Lx , E(660F3A,3F,_,x,_,0,4,FVM), 0 , 151, 0 , 7026 , 335, 137), // #1156
+ INST(Vpcmpd , VexRvmi_Lx , E(660F3A,1F,_,x,_,0,4,FV ), 0 , 110, 0 , 7033 , 336, 129), // #1157
+ INST(Vpcmpeqb , VexRvm_Lx_KEvex , V(660F00,74,_,x,I,I,4,FV ), 0 , 133, 0 , 7040 , 337, 149), // #1158
+ INST(Vpcmpeqd , VexRvm_Lx_KEvex , V(660F00,76,_,x,I,0,4,FVM), 0 , 184, 0 , 7049 , 338, 133), // #1159
+ INST(Vpcmpeqq , VexRvm_Lx_KEvex , V(660F38,29,_,x,I,1,4,FVM), 0 , 196, 0 , 7058 , 339, 133), // #1160
+ INST(Vpcmpeqw , VexRvm_Lx_KEvex , V(660F00,75,_,x,I,I,4,FV ), 0 , 133, 0 , 7067 , 337, 149), // #1161
+ INST(Vpcmpestri , VexRmi , V(660F3A,61,_,0,I,_,_,_ ), 0 , 74 , 0 , 7076 , 340, 153), // #1162
+ INST(Vpcmpestrm , VexRmi , V(660F3A,60,_,0,I,_,_,_ ), 0 , 74 , 0 , 7087 , 341, 153), // #1163
+ INST(Vpcmpgtb , VexRvm_Lx_KEvex , V(660F00,64,_,x,I,I,4,FV ), 0 , 133, 0 , 7098 , 337, 149), // #1164
+ INST(Vpcmpgtd , VexRvm_Lx_KEvex , V(660F00,66,_,x,I,0,4,FVM), 0 , 184, 0 , 7107 , 338, 133), // #1165
+ INST(Vpcmpgtq , VexRvm_Lx_KEvex , V(660F38,37,_,x,I,1,4,FVM), 0 , 196, 0 , 7116 , 339, 133), // #1166
+ INST(Vpcmpgtw , VexRvm_Lx_KEvex , V(660F00,65,_,x,I,I,4,FV ), 0 , 133, 0 , 7125 , 337, 149), // #1167
+ INST(Vpcmpistri , VexRmi , V(660F3A,63,_,0,I,_,_,_ ), 0 , 74 , 0 , 7134 , 342, 153), // #1168
+ INST(Vpcmpistrm , VexRmi , V(660F3A,62,_,0,I,_,_,_ ), 0 , 74 , 0 , 7145 , 343, 153), // #1169
+ INST(Vpcmpq , VexRvmi_Lx , E(660F3A,1F,_,x,_,1,4,FV ), 0 , 111, 0 , 7156 , 344, 129), // #1170
+ INST(Vpcmpub , VexRvmi_Lx , E(660F3A,3E,_,x,_,0,4,FVM), 0 , 151, 0 , 7163 , 335, 137), // #1171
+ INST(Vpcmpud , VexRvmi_Lx , E(660F3A,1E,_,x,_,0,4,FV ), 0 , 110, 0 , 7171 , 336, 129), // #1172
+ INST(Vpcmpuq , VexRvmi_Lx , E(660F3A,1E,_,x,_,1,4,FV ), 0 , 111, 0 , 7179 , 344, 129), // #1173
+ INST(Vpcmpuw , VexRvmi_Lx , E(660F3A,3E,_,x,_,1,4,FVM), 0 , 197, 0 , 7187 , 344, 137), // #1174
+ INST(Vpcmpw , VexRvmi_Lx , E(660F3A,3F,_,x,_,1,4,FVM), 0 , 197, 0 , 7195 , 344, 137), // #1175
+ INST(Vpcomb , VexRvmi , V(XOP_M8,CC,_,0,0,_,_,_ ), 0 , 195, 0 , 7202 , 257, 142), // #1176
+ INST(Vpcomd , VexRvmi , V(XOP_M8,CE,_,0,0,_,_,_ ), 0 , 195, 0 , 7209 , 257, 142), // #1177
+ INST(Vpcompressb , VexMr_Lx , E(660F38,63,_,x,_,0,0,T1S), 0 , 198, 0 , 7216 , 226, 154), // #1178
+ INST(Vpcompressd , VexMr_Lx , E(660F38,8B,_,x,_,0,2,T1S), 0 , 125, 0 , 7228 , 226, 129), // #1179
+ INST(Vpcompressq , VexMr_Lx , E(660F38,8B,_,x,_,1,3,T1S), 0 , 124, 0 , 7240 , 226, 129), // #1180
+ INST(Vpcompressw , VexMr_Lx , E(660F38,63,_,x,_,1,1,T1S), 0 , 199, 0 , 7252 , 226, 154), // #1181
+ INST(Vpcomq , VexRvmi , V(XOP_M8,CF,_,0,0,_,_,_ ), 0 , 195, 0 , 7264 , 257, 142), // #1182
+ INST(Vpcomub , VexRvmi , V(XOP_M8,EC,_,0,0,_,_,_ ), 0 , 195, 0 , 7271 , 257, 142), // #1183
+ INST(Vpcomud , VexRvmi , V(XOP_M8,EE,_,0,0,_,_,_ ), 0 , 195, 0 , 7279 , 257, 142), // #1184
+ INST(Vpcomuq , VexRvmi , V(XOP_M8,EF,_,0,0,_,_,_ ), 0 , 195, 0 , 7287 , 257, 142), // #1185
+ INST(Vpcomuw , VexRvmi , V(XOP_M8,ED,_,0,0,_,_,_ ), 0 , 195, 0 , 7295 , 257, 142), // #1186
+ INST(Vpcomw , VexRvmi , V(XOP_M8,CD,_,0,0,_,_,_ ), 0 , 195, 0 , 7303 , 257, 142), // #1187
+ INST(Vpconflictd , VexRm_Lx , E(660F38,C4,_,x,_,0,4,FV ), 0 , 113, 0 , 7310 , 345, 151), // #1188
+ INST(Vpconflictq , VexRm_Lx , E(660F38,C4,_,x,_,1,4,FV ), 0 , 112, 0 , 7322 , 345, 151), // #1189
+ INST(Vpdpbusd , VexRvm_Lx , V(660F38,50,_,x,_,0,4,FV ), 0 , 163, 0 , 7334 , 346, 155), // #1190
+ INST(Vpdpbusds , VexRvm_Lx , V(660F38,51,_,x,_,0,4,FV ), 0 , 163, 0 , 7343 , 346, 155), // #1191
+ INST(Vpdpwssd , VexRvm_Lx , V(660F38,52,_,x,_,0,4,FV ), 0 , 163, 0 , 7353 , 346, 155), // #1192
+ INST(Vpdpwssds , VexRvm_Lx , V(660F38,53,_,x,_,0,4,FV ), 0 , 163, 0 , 7362 , 346, 155), // #1193
+ INST(Vperm2f128 , VexRvmi , V(660F3A,06,_,1,0,_,_,_ ), 0 , 154, 0 , 7372 , 347, 126), // #1194
+ INST(Vperm2i128 , VexRvmi , V(660F3A,46,_,1,0,_,_,_ ), 0 , 154, 0 , 7383 , 347, 132), // #1195
+ INST(Vpermb , VexRvm_Lx , E(660F38,8D,_,x,_,0,4,FVM), 0 , 189, 0 , 7394 , 328, 156), // #1196
+ INST(Vpermd , VexRvm_Lx , V(660F38,36,_,x,0,0,4,FV ), 0 , 163, 0 , 7401 , 348, 143), // #1197
+ INST(Vpermi2b , VexRvm_Lx , E(660F38,75,_,x,_,0,4,FVM), 0 , 189, 0 , 7408 , 328, 156), // #1198
+ INST(Vpermi2d , VexRvm_Lx , E(660F38,76,_,x,_,0,4,FV ), 0 , 113, 0 , 7417 , 210, 129), // #1199
+ INST(Vpermi2pd , VexRvm_Lx , E(660F38,77,_,x,_,1,4,FV ), 0 , 112, 0 , 7426 , 209, 129), // #1200
+ INST(Vpermi2ps , VexRvm_Lx , E(660F38,77,_,x,_,0,4,FV ), 0 , 113, 0 , 7436 , 210, 129), // #1201
+ INST(Vpermi2q , VexRvm_Lx , E(660F38,76,_,x,_,1,4,FV ), 0 , 112, 0 , 7446 , 209, 129), // #1202
+ INST(Vpermi2w , VexRvm_Lx , E(660F38,75,_,x,_,1,4,FVM), 0 , 190, 0 , 7455 , 328, 137), // #1203
+ INST(Vpermil2pd , VexRvrmiRvmri_Lx , V(660F3A,49,_,x,x,_,_,_ ), 0 , 74 , 0 , 7464 , 349, 142), // #1204
+ INST(Vpermil2ps , VexRvrmiRvmri_Lx , V(660F3A,48,_,x,x,_,_,_ ), 0 , 74 , 0 , 7475 , 349, 142), // #1205
+ INST(Vpermilpd , VexRvmRmi_Lx , V(660F38,0D,_,x,0,1,4,FV ), V(660F3A,05,_,x,0,1,4,FV ), 200, 111, 7486 , 350, 124), // #1206
+ INST(Vpermilps , VexRvmRmi_Lx , V(660F38,0C,_,x,0,0,4,FV ), V(660F3A,04,_,x,0,0,4,FV ), 163, 112, 7496 , 350, 124), // #1207
+ INST(Vpermpd , VexRvmRmi_Lx , E(660F38,16,_,x,1,1,4,FV ), V(660F3A,01,_,x,1,1,4,FV ), 201, 113, 7506 , 351, 143), // #1208
+ INST(Vpermps , VexRvm_Lx , V(660F38,16,_,x,0,0,4,FV ), 0 , 163, 0 , 7514 , 348, 143), // #1209
+ INST(Vpermq , VexRvmRmi_Lx , E(660F38,36,_,x,_,1,4,FV ), V(660F3A,00,_,x,1,1,4,FV ), 112, 114, 7522 , 351, 143), // #1210
+ INST(Vpermt2b , VexRvm_Lx , E(660F38,7D,_,x,_,0,4,FVM), 0 , 189, 0 , 7529 , 328, 156), // #1211
+ INST(Vpermt2d , VexRvm_Lx , E(660F38,7E,_,x,_,0,4,FV ), 0 , 113, 0 , 7538 , 210, 129), // #1212
+ INST(Vpermt2pd , VexRvm_Lx , E(660F38,7F,_,x,_,1,4,FV ), 0 , 112, 0 , 7547 , 209, 129), // #1213
+ INST(Vpermt2ps , VexRvm_Lx , E(660F38,7F,_,x,_,0,4,FV ), 0 , 113, 0 , 7557 , 210, 129), // #1214
+ INST(Vpermt2q , VexRvm_Lx , E(660F38,7E,_,x,_,1,4,FV ), 0 , 112, 0 , 7567 , 209, 129), // #1215
+ INST(Vpermt2w , VexRvm_Lx , E(660F38,7D,_,x,_,1,4,FVM), 0 , 190, 0 , 7576 , 328, 137), // #1216
+ INST(Vpermw , VexRvm_Lx , E(660F38,8D,_,x,_,1,4,FVM), 0 , 190, 0 , 7585 , 328, 137), // #1217
+ INST(Vpexpandb , VexRm_Lx , E(660F38,62,_,x,_,0,0,T1S), 0 , 198, 0 , 7592 , 260, 154), // #1218
+ INST(Vpexpandd , VexRm_Lx , E(660F38,89,_,x,_,0,2,T1S), 0 , 125, 0 , 7602 , 260, 129), // #1219
+ INST(Vpexpandq , VexRm_Lx , E(660F38,89,_,x,_,1,3,T1S), 0 , 124, 0 , 7612 , 260, 129), // #1220
+ INST(Vpexpandw , VexRm_Lx , E(660F38,62,_,x,_,1,1,T1S), 0 , 199, 0 , 7622 , 260, 154), // #1221
+ INST(Vpextrb , VexMri , V(660F3A,14,_,0,0,I,0,T1S), 0 , 202, 0 , 7632 , 352, 157), // #1222
+ INST(Vpextrd , VexMri , V(660F3A,16,_,0,0,0,2,T1S), 0 , 159, 0 , 7640 , 264, 158), // #1223
+ INST(Vpextrq , VexMri , V(660F3A,16,_,0,1,1,3,T1S), 0 , 203, 0 , 7648 , 353, 158), // #1224
+ INST(Vpextrw , VexMri_Vpextrw , V(660F3A,15,_,0,0,I,1,T1S), 0 , 204, 0 , 7656 , 354, 157), // #1225
+ INST(Vpgatherdd , VexRmvRm_VM , V(660F38,90,_,x,0,_,_,_ ), E(660F38,90,_,x,_,0,2,T1S), 97 , 115, 7664 , 280, 143), // #1226
+ INST(Vpgatherdq , VexRmvRm_VM , V(660F38,90,_,x,1,_,_,_ ), E(660F38,90,_,x,_,1,3,T1S), 165, 116, 7675 , 279, 143), // #1227
+ INST(Vpgatherqd , VexRmvRm_VM , V(660F38,91,_,x,0,_,_,_ ), E(660F38,91,_,x,_,0,2,T1S), 97 , 117, 7686 , 285, 143), // #1228
+ INST(Vpgatherqq , VexRmvRm_VM , V(660F38,91,_,x,1,_,_,_ ), E(660F38,91,_,x,_,1,3,T1S), 165, 118, 7697 , 284, 143), // #1229
+ INST(Vphaddbd , VexRm , V(XOP_M9,C2,_,0,0,_,_,_ ), 0 , 80 , 0 , 7708 , 201, 142), // #1230
+ INST(Vphaddbq , VexRm , V(XOP_M9,C3,_,0,0,_,_,_ ), 0 , 80 , 0 , 7717 , 201, 142), // #1231
+ INST(Vphaddbw , VexRm , V(XOP_M9,C1,_,0,0,_,_,_ ), 0 , 80 , 0 , 7726 , 201, 142), // #1232
+ INST(Vphaddd , VexRvm_Lx , V(660F38,02,_,x,I,_,_,_ ), 0 , 97 , 0 , 7735 , 199, 146), // #1233
+ INST(Vphadddq , VexRm , V(XOP_M9,CB,_,0,0,_,_,_ ), 0 , 80 , 0 , 7743 , 201, 142), // #1234
+ INST(Vphaddsw , VexRvm_Lx , V(660F38,03,_,x,I,_,_,_ ), 0 , 97 , 0 , 7752 , 199, 146), // #1235
+ INST(Vphaddubd , VexRm , V(XOP_M9,D2,_,0,0,_,_,_ ), 0 , 80 , 0 , 7761 , 201, 142), // #1236
+ INST(Vphaddubq , VexRm , V(XOP_M9,D3,_,0,0,_,_,_ ), 0 , 80 , 0 , 7771 , 201, 142), // #1237
+ INST(Vphaddubw , VexRm , V(XOP_M9,D1,_,0,0,_,_,_ ), 0 , 80 , 0 , 7781 , 201, 142), // #1238
+ INST(Vphaddudq , VexRm , V(XOP_M9,DB,_,0,0,_,_,_ ), 0 , 80 , 0 , 7791 , 201, 142), // #1239
+ INST(Vphadduwd , VexRm , V(XOP_M9,D6,_,0,0,_,_,_ ), 0 , 80 , 0 , 7801 , 201, 142), // #1240
+ INST(Vphadduwq , VexRm , V(XOP_M9,D7,_,0,0,_,_,_ ), 0 , 80 , 0 , 7811 , 201, 142), // #1241
+ INST(Vphaddw , VexRvm_Lx , V(660F38,01,_,x,I,_,_,_ ), 0 , 97 , 0 , 7821 , 199, 146), // #1242
+ INST(Vphaddwd , VexRm , V(XOP_M9,C6,_,0,0,_,_,_ ), 0 , 80 , 0 , 7829 , 201, 142), // #1243
+ INST(Vphaddwq , VexRm , V(XOP_M9,C7,_,0,0,_,_,_ ), 0 , 80 , 0 , 7838 , 201, 142), // #1244
+ INST(Vphminposuw , VexRm , V(660F38,41,_,0,I,_,_,_ ), 0 , 97 , 0 , 7847 , 201, 126), // #1245
+ INST(Vphsubbw , VexRm , V(XOP_M9,E1,_,0,0,_,_,_ ), 0 , 80 , 0 , 7859 , 201, 142), // #1246
+ INST(Vphsubd , VexRvm_Lx , V(660F38,06,_,x,I,_,_,_ ), 0 , 97 , 0 , 7868 , 199, 146), // #1247
+ INST(Vphsubdq , VexRm , V(XOP_M9,E3,_,0,0,_,_,_ ), 0 , 80 , 0 , 7876 , 201, 142), // #1248
+ INST(Vphsubsw , VexRvm_Lx , V(660F38,07,_,x,I,_,_,_ ), 0 , 97 , 0 , 7885 , 199, 146), // #1249
+ INST(Vphsubw , VexRvm_Lx , V(660F38,05,_,x,I,_,_,_ ), 0 , 97 , 0 , 7894 , 199, 146), // #1250
+ INST(Vphsubwd , VexRm , V(XOP_M9,E2,_,0,0,_,_,_ ), 0 , 80 , 0 , 7902 , 201, 142), // #1251
+ INST(Vpinsrb , VexRvmi , V(660F3A,20,_,0,0,I,0,T1S), 0 , 202, 0 , 7911 , 355, 157), // #1252
+ INST(Vpinsrd , VexRvmi , V(660F3A,22,_,0,0,0,2,T1S), 0 , 159, 0 , 7919 , 356, 158), // #1253
+ INST(Vpinsrq , VexRvmi , V(660F3A,22,_,0,1,1,3,T1S), 0 , 203, 0 , 7927 , 357, 158), // #1254
+ INST(Vpinsrw , VexRvmi , V(660F00,C4,_,0,0,I,1,T1S), 0 , 205, 0 , 7935 , 358, 157), // #1255
+ INST(Vplzcntd , VexRm_Lx , E(660F38,44,_,x,_,0,4,FV ), 0 , 113, 0 , 7943 , 345, 151), // #1256
+ INST(Vplzcntq , VexRm_Lx , E(660F38,44,_,x,_,1,4,FV ), 0 , 112, 0 , 7952 , 359, 151), // #1257
+ INST(Vpmacsdd , VexRvmr , V(XOP_M8,9E,_,0,0,_,_,_ ), 0 , 195, 0 , 7961 , 360, 142), // #1258
+ INST(Vpmacsdqh , VexRvmr , V(XOP_M8,9F,_,0,0,_,_,_ ), 0 , 195, 0 , 7970 , 360, 142), // #1259
+ INST(Vpmacsdql , VexRvmr , V(XOP_M8,97,_,0,0,_,_,_ ), 0 , 195, 0 , 7980 , 360, 142), // #1260
+ INST(Vpmacssdd , VexRvmr , V(XOP_M8,8E,_,0,0,_,_,_ ), 0 , 195, 0 , 7990 , 360, 142), // #1261
+ INST(Vpmacssdqh , VexRvmr , V(XOP_M8,8F,_,0,0,_,_,_ ), 0 , 195, 0 , 8000 , 360, 142), // #1262
+ INST(Vpmacssdql , VexRvmr , V(XOP_M8,87,_,0,0,_,_,_ ), 0 , 195, 0 , 8011 , 360, 142), // #1263
+ INST(Vpmacsswd , VexRvmr , V(XOP_M8,86,_,0,0,_,_,_ ), 0 , 195, 0 , 8022 , 360, 142), // #1264
+ INST(Vpmacssww , VexRvmr , V(XOP_M8,85,_,0,0,_,_,_ ), 0 , 195, 0 , 8032 , 360, 142), // #1265
+ INST(Vpmacswd , VexRvmr , V(XOP_M8,96,_,0,0,_,_,_ ), 0 , 195, 0 , 8042 , 360, 142), // #1266
+ INST(Vpmacsww , VexRvmr , V(XOP_M8,95,_,0,0,_,_,_ ), 0 , 195, 0 , 8051 , 360, 142), // #1267
+ INST(Vpmadcsswd , VexRvmr , V(XOP_M8,A6,_,0,0,_,_,_ ), 0 , 195, 0 , 8060 , 360, 142), // #1268
+ INST(Vpmadcswd , VexRvmr , V(XOP_M8,B6,_,0,0,_,_,_ ), 0 , 195, 0 , 8071 , 360, 142), // #1269
+ INST(Vpmadd52huq , VexRvm_Lx , E(660F38,B5,_,x,_,1,4,FV ), 0 , 112, 0 , 8081 , 209, 159), // #1270
+ INST(Vpmadd52luq , VexRvm_Lx , E(660F38,B4,_,x,_,1,4,FV ), 0 , 112, 0 , 8093 , 209, 159), // #1271
+ INST(Vpmaddubsw , VexRvm_Lx , V(660F38,04,_,x,I,I,4,FVM), 0 , 109, 0 , 8105 , 291, 149), // #1272
+ INST(Vpmaddwd , VexRvm_Lx , V(660F00,F5,_,x,I,I,4,FVM), 0 , 184, 0 , 8116 , 291, 149), // #1273
+ INST(Vpmaskmovd , VexRvmMvr_Lx , V(660F38,8C,_,x,0,_,_,_ ), V(660F38,8E,_,x,0,_,_,_ ), 97 , 119, 8125 , 299, 132), // #1274
+ INST(Vpmaskmovq , VexRvmMvr_Lx , V(660F38,8C,_,x,1,_,_,_ ), V(660F38,8E,_,x,1,_,_,_ ), 165, 120, 8136 , 299, 132), // #1275
+ INST(Vpmaxsb , VexRvm_Lx , V(660F38,3C,_,x,I,I,4,FVM), 0 , 109, 0 , 8147 , 361, 149), // #1276
+ INST(Vpmaxsd , VexRvm_Lx , V(660F38,3D,_,x,I,0,4,FV ), 0 , 163, 0 , 8155 , 208, 133), // #1277
+ INST(Vpmaxsq , VexRvm_Lx , E(660F38,3D,_,x,_,1,4,FV ), 0 , 112, 0 , 8163 , 209, 129), // #1278
+ INST(Vpmaxsw , VexRvm_Lx , V(660F00,EE,_,x,I,I,4,FVM), 0 , 184, 0 , 8171 , 361, 149), // #1279
+ INST(Vpmaxub , VexRvm_Lx , V(660F00,DE,_,x,I,I,4,FVM), 0 , 184, 0 , 8179 , 361, 149), // #1280
+ INST(Vpmaxud , VexRvm_Lx , V(660F38,3F,_,x,I,0,4,FV ), 0 , 163, 0 , 8187 , 208, 133), // #1281
+ INST(Vpmaxuq , VexRvm_Lx , E(660F38,3F,_,x,_,1,4,FV ), 0 , 112, 0 , 8195 , 209, 129), // #1282
+ INST(Vpmaxuw , VexRvm_Lx , V(660F38,3E,_,x,I,I,4,FVM), 0 , 109, 0 , 8203 , 361, 149), // #1283
+ INST(Vpminsb , VexRvm_Lx , V(660F38,38,_,x,I,I,4,FVM), 0 , 109, 0 , 8211 , 361, 149), // #1284
+ INST(Vpminsd , VexRvm_Lx , V(660F38,39,_,x,I,0,4,FV ), 0 , 163, 0 , 8219 , 208, 133), // #1285
+ INST(Vpminsq , VexRvm_Lx , E(660F38,39,_,x,_,1,4,FV ), 0 , 112, 0 , 8227 , 209, 129), // #1286
+ INST(Vpminsw , VexRvm_Lx , V(660F00,EA,_,x,I,I,4,FVM), 0 , 184, 0 , 8235 , 361, 149), // #1287
+ INST(Vpminub , VexRvm_Lx , V(660F00,DA,_,x,I,_,4,FVM), 0 , 184, 0 , 8243 , 361, 149), // #1288
+ INST(Vpminud , VexRvm_Lx , V(660F38,3B,_,x,I,0,4,FV ), 0 , 163, 0 , 8251 , 208, 133), // #1289
+ INST(Vpminuq , VexRvm_Lx , E(660F38,3B,_,x,_,1,4,FV ), 0 , 112, 0 , 8259 , 209, 129), // #1290
+ INST(Vpminuw , VexRvm_Lx , V(660F38,3A,_,x,I,_,4,FVM), 0 , 109, 0 , 8267 , 361, 149), // #1291
+ INST(Vpmovb2m , VexRm_Lx , E(F30F38,29,_,x,_,0,_,_ ), 0 , 193, 0 , 8275 , 362, 137), // #1292
+ INST(Vpmovd2m , VexRm_Lx , E(F30F38,39,_,x,_,0,_,_ ), 0 , 193, 0 , 8284 , 362, 131), // #1293
+ INST(Vpmovdb , VexMr_Lx , E(F30F38,31,_,x,_,0,2,QVM), 0 , 206, 0 , 8293 , 363, 129), // #1294
+ INST(Vpmovdw , VexMr_Lx , E(F30F38,33,_,x,_,0,3,HVM), 0 , 207, 0 , 8301 , 364, 129), // #1295
+ INST(Vpmovm2b , VexRm_Lx , E(F30F38,28,_,x,_,0,_,_ ), 0 , 193, 0 , 8309 , 331, 137), // #1296
+ INST(Vpmovm2d , VexRm_Lx , E(F30F38,38,_,x,_,0,_,_ ), 0 , 193, 0 , 8318 , 331, 131), // #1297
+ INST(Vpmovm2q , VexRm_Lx , E(F30F38,38,_,x,_,1,_,_ ), 0 , 192, 0 , 8327 , 331, 131), // #1298
+ INST(Vpmovm2w , VexRm_Lx , E(F30F38,28,_,x,_,1,_,_ ), 0 , 192, 0 , 8336 , 331, 137), // #1299
+ INST(Vpmovmskb , VexRm_Lx , V(660F00,D7,_,x,I,_,_,_ ), 0 , 70 , 0 , 8345 , 311, 146), // #1300
+ INST(Vpmovq2m , VexRm_Lx , E(F30F38,39,_,x,_,1,_,_ ), 0 , 192, 0 , 8355 , 362, 131), // #1301
+ INST(Vpmovqb , VexMr_Lx , E(F30F38,32,_,x,_,0,1,OVM), 0 , 208, 0 , 8364 , 365, 129), // #1302
+ INST(Vpmovqd , VexMr_Lx , E(F30F38,35,_,x,_,0,3,HVM), 0 , 207, 0 , 8372 , 364, 129), // #1303
+ INST(Vpmovqw , VexMr_Lx , E(F30F38,34,_,x,_,0,2,QVM), 0 , 206, 0 , 8380 , 363, 129), // #1304
+ INST(Vpmovsdb , VexMr_Lx , E(F30F38,21,_,x,_,0,2,QVM), 0 , 206, 0 , 8388 , 363, 129), // #1305
+ INST(Vpmovsdw , VexMr_Lx , E(F30F38,23,_,x,_,0,3,HVM), 0 , 207, 0 , 8397 , 364, 129), // #1306
+ INST(Vpmovsqb , VexMr_Lx , E(F30F38,22,_,x,_,0,1,OVM), 0 , 208, 0 , 8406 , 365, 129), // #1307
+ INST(Vpmovsqd , VexMr_Lx , E(F30F38,25,_,x,_,0,3,HVM), 0 , 207, 0 , 8415 , 364, 129), // #1308
+ INST(Vpmovsqw , VexMr_Lx , E(F30F38,24,_,x,_,0,2,QVM), 0 , 206, 0 , 8424 , 363, 129), // #1309
+ INST(Vpmovswb , VexMr_Lx , E(F30F38,20,_,x,_,0,3,HVM), 0 , 207, 0 , 8433 , 364, 137), // #1310
+ INST(Vpmovsxbd , VexRm_Lx , V(660F38,21,_,x,I,I,2,QVM), 0 , 209, 0 , 8442 , 366, 133), // #1311
+ INST(Vpmovsxbq , VexRm_Lx , V(660F38,22,_,x,I,I,1,OVM), 0 , 210, 0 , 8452 , 367, 133), // #1312
+ INST(Vpmovsxbw , VexRm_Lx , V(660F38,20,_,x,I,I,3,HVM), 0 , 132, 0 , 8462 , 368, 149), // #1313
+ INST(Vpmovsxdq , VexRm_Lx , V(660F38,25,_,x,I,0,3,HVM), 0 , 132, 0 , 8472 , 368, 133), // #1314
+ INST(Vpmovsxwd , VexRm_Lx , V(660F38,23,_,x,I,I,3,HVM), 0 , 132, 0 , 8482 , 368, 133), // #1315
+ INST(Vpmovsxwq , VexRm_Lx , V(660F38,24,_,x,I,I,2,QVM), 0 , 209, 0 , 8492 , 366, 133), // #1316
+ INST(Vpmovusdb , VexMr_Lx , E(F30F38,11,_,x,_,0,2,QVM), 0 , 206, 0 , 8502 , 363, 129), // #1317
+ INST(Vpmovusdw , VexMr_Lx , E(F30F38,13,_,x,_,0,3,HVM), 0 , 207, 0 , 8512 , 364, 129), // #1318
+ INST(Vpmovusqb , VexMr_Lx , E(F30F38,12,_,x,_,0,1,OVM), 0 , 208, 0 , 8522 , 365, 129), // #1319
+ INST(Vpmovusqd , VexMr_Lx , E(F30F38,15,_,x,_,0,3,HVM), 0 , 207, 0 , 8532 , 364, 129), // #1320
+ INST(Vpmovusqw , VexMr_Lx , E(F30F38,14,_,x,_,0,2,QVM), 0 , 206, 0 , 8542 , 363, 129), // #1321
+ INST(Vpmovuswb , VexMr_Lx , E(F30F38,10,_,x,_,0,3,HVM), 0 , 207, 0 , 8552 , 364, 137), // #1322
+ INST(Vpmovw2m , VexRm_Lx , E(F30F38,29,_,x,_,1,_,_ ), 0 , 192, 0 , 8562 , 362, 137), // #1323
+ INST(Vpmovwb , VexMr_Lx , E(F30F38,30,_,x,_,0,3,HVM), 0 , 207, 0 , 8571 , 364, 137), // #1324
+ INST(Vpmovzxbd , VexRm_Lx , V(660F38,31,_,x,I,I,2,QVM), 0 , 209, 0 , 8579 , 366, 133), // #1325
+ INST(Vpmovzxbq , VexRm_Lx , V(660F38,32,_,x,I,I,1,OVM), 0 , 210, 0 , 8589 , 367, 133), // #1326
+ INST(Vpmovzxbw , VexRm_Lx , V(660F38,30,_,x,I,I,3,HVM), 0 , 132, 0 , 8599 , 368, 149), // #1327
+ INST(Vpmovzxdq , VexRm_Lx , V(660F38,35,_,x,I,0,3,HVM), 0 , 132, 0 , 8609 , 368, 133), // #1328
+ INST(Vpmovzxwd , VexRm_Lx , V(660F38,33,_,x,I,I,3,HVM), 0 , 132, 0 , 8619 , 368, 133), // #1329
+ INST(Vpmovzxwq , VexRm_Lx , V(660F38,34,_,x,I,I,2,QVM), 0 , 209, 0 , 8629 , 366, 133), // #1330
+ INST(Vpmuldq , VexRvm_Lx , V(660F38,28,_,x,I,1,4,FV ), 0 , 200, 0 , 8639 , 205, 133), // #1331
+ INST(Vpmulhrsw , VexRvm_Lx , V(660F38,0B,_,x,I,I,4,FVM), 0 , 109, 0 , 8647 , 291, 149), // #1332
+ INST(Vpmulhuw , VexRvm_Lx , V(660F00,E4,_,x,I,I,4,FVM), 0 , 184, 0 , 8657 , 291, 149), // #1333
+ INST(Vpmulhw , VexRvm_Lx , V(660F00,E5,_,x,I,I,4,FVM), 0 , 184, 0 , 8666 , 291, 149), // #1334
+ INST(Vpmulld , VexRvm_Lx , V(660F38,40,_,x,I,0,4,FV ), 0 , 163, 0 , 8674 , 206, 133), // #1335
+ INST(Vpmullq , VexRvm_Lx , E(660F38,40,_,x,_,1,4,FV ), 0 , 112, 0 , 8682 , 209, 131), // #1336
+ INST(Vpmullw , VexRvm_Lx , V(660F00,D5,_,x,I,I,4,FVM), 0 , 184, 0 , 8690 , 291, 149), // #1337
+ INST(Vpmultishiftqb , VexRvm_Lx , E(660F38,83,_,x,_,1,4,FV ), 0 , 112, 0 , 8698 , 209, 156), // #1338
+ INST(Vpmuludq , VexRvm_Lx , V(660F00,F4,_,x,I,1,4,FV ), 0 , 104, 0 , 8713 , 205, 133), // #1339
+ INST(Vpopcntb , VexRm_Lx , E(660F38,54,_,x,_,0,4,FV ), 0 , 113, 0 , 8722 , 260, 160), // #1340
+ INST(Vpopcntd , VexRm_Lx , E(660F38,55,_,x,_,0,4,FVM), 0 , 189, 0 , 8731 , 345, 161), // #1341
+ INST(Vpopcntq , VexRm_Lx , E(660F38,55,_,x,_,1,4,FVM), 0 , 190, 0 , 8740 , 359, 161), // #1342
+ INST(Vpopcntw , VexRm_Lx , E(660F38,54,_,x,_,1,4,FV ), 0 , 112, 0 , 8749 , 260, 160), // #1343
+ INST(Vpor , VexRvm_Lx , V(660F00,EB,_,x,I,_,_,_ ), 0 , 70 , 0 , 8758 , 322, 146), // #1344
+ INST(Vpord , VexRvm_Lx , E(660F00,EB,_,x,_,0,4,FV ), 0 , 188, 0 , 8763 , 323, 129), // #1345
+ INST(Vporq , VexRvm_Lx , E(660F00,EB,_,x,_,1,4,FV ), 0 , 130, 0 , 8769 , 327, 129), // #1346
+ INST(Vpperm , VexRvrmRvmr , V(XOP_M8,A3,_,0,x,_,_,_ ), 0 , 195, 0 , 8775 , 369, 142), // #1347
+ INST(Vprold , VexVmi_Lx , E(660F00,72,1,x,_,0,4,FV ), 0 , 211, 0 , 8782 , 370, 129), // #1348
+ INST(Vprolq , VexVmi_Lx , E(660F00,72,1,x,_,1,4,FV ), 0 , 212, 0 , 8789 , 371, 129), // #1349
+ INST(Vprolvd , VexRvm_Lx , E(660F38,15,_,x,_,0,4,FV ), 0 , 113, 0 , 8796 , 210, 129), // #1350
+ INST(Vprolvq , VexRvm_Lx , E(660F38,15,_,x,_,1,4,FV ), 0 , 112, 0 , 8804 , 209, 129), // #1351
+ INST(Vprord , VexVmi_Lx , E(660F00,72,0,x,_,0,4,FV ), 0 , 188, 0 , 8812 , 370, 129), // #1352
+ INST(Vprorq , VexVmi_Lx , E(660F00,72,0,x,_,1,4,FV ), 0 , 130, 0 , 8819 , 371, 129), // #1353
+ INST(Vprorvd , VexRvm_Lx , E(660F38,14,_,x,_,0,4,FV ), 0 , 113, 0 , 8826 , 210, 129), // #1354
+ INST(Vprorvq , VexRvm_Lx , E(660F38,14,_,x,_,1,4,FV ), 0 , 112, 0 , 8834 , 209, 129), // #1355
+ INST(Vprotb , VexRvmRmvRmi , V(XOP_M9,90,_,0,x,_,_,_ ), V(XOP_M8,C0,_,0,x,_,_,_ ), 80 , 121, 8842 , 372, 142), // #1356
+ INST(Vprotd , VexRvmRmvRmi , V(XOP_M9,92,_,0,x,_,_,_ ), V(XOP_M8,C2,_,0,x,_,_,_ ), 80 , 122, 8849 , 372, 142), // #1357
+ INST(Vprotq , VexRvmRmvRmi , V(XOP_M9,93,_,0,x,_,_,_ ), V(XOP_M8,C3,_,0,x,_,_,_ ), 80 , 123, 8856 , 372, 142), // #1358
+ INST(Vprotw , VexRvmRmvRmi , V(XOP_M9,91,_,0,x,_,_,_ ), V(XOP_M8,C1,_,0,x,_,_,_ ), 80 , 124, 8863 , 372, 142), // #1359
+ INST(Vpsadbw , VexRvm_Lx , V(660F00,F6,_,x,I,I,4,FVM), 0 , 184, 0 , 8870 , 200, 149), // #1360
+ INST(Vpscatterdd , VexMr_VM , E(660F38,A0,_,x,_,0,2,T1S), 0 , 125, 0 , 8878 , 373, 129), // #1361
+ INST(Vpscatterdq , VexMr_VM , E(660F38,A0,_,x,_,1,3,T1S), 0 , 124, 0 , 8890 , 374, 129), // #1362
+ INST(Vpscatterqd , VexMr_VM , E(660F38,A1,_,x,_,0,2,T1S), 0 , 125, 0 , 8902 , 375, 129), // #1363
+ INST(Vpscatterqq , VexMr_VM , E(660F38,A1,_,x,_,1,3,T1S), 0 , 124, 0 , 8914 , 376, 129), // #1364
+ INST(Vpshab , VexRvmRmv , V(XOP_M9,98,_,0,x,_,_,_ ), 0 , 80 , 0 , 8926 , 377, 142), // #1365
+ INST(Vpshad , VexRvmRmv , V(XOP_M9,9A,_,0,x,_,_,_ ), 0 , 80 , 0 , 8933 , 377, 142), // #1366
+ INST(Vpshaq , VexRvmRmv , V(XOP_M9,9B,_,0,x,_,_,_ ), 0 , 80 , 0 , 8940 , 377, 142), // #1367
+ INST(Vpshaw , VexRvmRmv , V(XOP_M9,99,_,0,x,_,_,_ ), 0 , 80 , 0 , 8947 , 377, 142), // #1368
+ INST(Vpshlb , VexRvmRmv , V(XOP_M9,94,_,0,x,_,_,_ ), 0 , 80 , 0 , 8954 , 377, 142), // #1369
+ INST(Vpshld , VexRvmRmv , V(XOP_M9,96,_,0,x,_,_,_ ), 0 , 80 , 0 , 8961 , 377, 142), // #1370
+ INST(Vpshldd , VexRvmi_Lx , E(660F3A,71,_,x,_,0,4,FV ), 0 , 110, 0 , 8968 , 203, 154), // #1371
+ INST(Vpshldq , VexRvmi_Lx , E(660F3A,71,_,x,_,1,4,FV ), 0 , 111, 0 , 8976 , 204, 154), // #1372
+ INST(Vpshldvd , VexRvm_Lx , E(660F38,71,_,x,_,0,4,FV ), 0 , 113, 0 , 8984 , 210, 154), // #1373
+ INST(Vpshldvq , VexRvm_Lx , E(660F38,71,_,x,_,1,4,FV ), 0 , 112, 0 , 8993 , 209, 154), // #1374
+ INST(Vpshldvw , VexRvm_Lx , E(660F38,70,_,x,_,1,4,FVM), 0 , 190, 0 , 9002 , 328, 154), // #1375
+ INST(Vpshldw , VexRvmi_Lx , E(660F3A,70,_,x,_,1,4,FVM), 0 , 197, 0 , 9011 , 256, 154), // #1376
+ INST(Vpshlq , VexRvmRmv , V(XOP_M9,97,_,0,x,_,_,_ ), 0 , 80 , 0 , 9019 , 377, 142), // #1377
+ INST(Vpshlw , VexRvmRmv , V(XOP_M9,95,_,0,x,_,_,_ ), 0 , 80 , 0 , 9026 , 377, 142), // #1378
+ INST(Vpshrdd , VexRvmi_Lx , E(660F3A,73,_,x,_,0,4,FV ), 0 , 110, 0 , 9033 , 203, 154), // #1379
+ INST(Vpshrdq , VexRvmi_Lx , E(660F3A,73,_,x,_,1,4,FV ), 0 , 111, 0 , 9041 , 204, 154), // #1380
+ INST(Vpshrdvd , VexRvm_Lx , E(660F38,73,_,x,_,0,4,FV ), 0 , 113, 0 , 9049 , 210, 154), // #1381
+ INST(Vpshrdvq , VexRvm_Lx , E(660F38,73,_,x,_,1,4,FV ), 0 , 112, 0 , 9058 , 209, 154), // #1382
+ INST(Vpshrdvw , VexRvm_Lx , E(660F38,72,_,x,_,1,4,FVM), 0 , 190, 0 , 9067 , 328, 154), // #1383
+ INST(Vpshrdw , VexRvmi_Lx , E(660F3A,72,_,x,_,1,4,FVM), 0 , 197, 0 , 9076 , 256, 154), // #1384
+ INST(Vpshufb , VexRvm_Lx , V(660F38,00,_,x,I,I,4,FVM), 0 , 109, 0 , 9084 , 291, 149), // #1385
+ INST(Vpshufbitqmb , VexRvm_Lx , E(660F38,8F,_,x,0,0,4,FVM), 0 , 189, 0 , 9092 , 378, 160), // #1386
+ INST(Vpshufd , VexRmi_Lx , V(660F00,70,_,x,I,0,4,FV ), 0 , 133, 0 , 9105 , 379, 133), // #1387
+ INST(Vpshufhw , VexRmi_Lx , V(F30F00,70,_,x,I,I,4,FVM), 0 , 185, 0 , 9113 , 380, 149), // #1388
+ INST(Vpshuflw , VexRmi_Lx , V(F20F00,70,_,x,I,I,4,FVM), 0 , 213, 0 , 9122 , 380, 149), // #1389
+ INST(Vpsignb , VexRvm_Lx , V(660F38,08,_,x,I,_,_,_ ), 0 , 97 , 0 , 9131 , 199, 146), // #1390
+ INST(Vpsignd , VexRvm_Lx , V(660F38,0A,_,x,I,_,_,_ ), 0 , 97 , 0 , 9139 , 199, 146), // #1391
+ INST(Vpsignw , VexRvm_Lx , V(660F38,09,_,x,I,_,_,_ ), 0 , 97 , 0 , 9147 , 199, 146), // #1392
+ INST(Vpslld , VexRvmVmi_Lx_MEvex , V(660F00,F2,_,x,I,0,4,128), V(660F00,72,6,x,I,0,4,FV ), 214, 125, 9155 , 381, 133), // #1393
+ INST(Vpslldq , VexVmi_Lx_MEvex , V(660F00,73,7,x,I,I,4,FVM), 0 , 215, 0 , 9162 , 382, 149), // #1394
+ INST(Vpsllq , VexRvmVmi_Lx_MEvex , V(660F00,F3,_,x,I,1,4,128), V(660F00,73,6,x,I,1,4,FV ), 216, 126, 9170 , 383, 133), // #1395
+ INST(Vpsllvd , VexRvm_Lx , V(660F38,47,_,x,0,0,4,FV ), 0 , 163, 0 , 9177 , 206, 143), // #1396
+ INST(Vpsllvq , VexRvm_Lx , V(660F38,47,_,x,1,1,4,FV ), 0 , 162, 0 , 9185 , 205, 143), // #1397
+ INST(Vpsllvw , VexRvm_Lx , E(660F38,12,_,x,_,1,4,FVM), 0 , 190, 0 , 9193 , 328, 137), // #1398
+ INST(Vpsllw , VexRvmVmi_Lx_MEvex , V(660F00,F1,_,x,I,I,4,128), V(660F00,71,6,x,I,I,4,FVM), 214, 127, 9201 , 384, 149), // #1399
+ INST(Vpsrad , VexRvmVmi_Lx_MEvex , V(660F00,E2,_,x,I,0,4,128), V(660F00,72,4,x,I,0,4,FV ), 214, 128, 9208 , 381, 133), // #1400
+ INST(Vpsraq , VexRvmVmi_Lx_MEvex , E(660F00,E2,_,x,_,1,4,128), E(660F00,72,4,x,_,1,4,FV ), 217, 129, 9215 , 385, 129), // #1401
+ INST(Vpsravd , VexRvm_Lx , V(660F38,46,_,x,0,0,4,FV ), 0 , 163, 0 , 9222 , 206, 143), // #1402
+ INST(Vpsravq , VexRvm_Lx , E(660F38,46,_,x,_,1,4,FV ), 0 , 112, 0 , 9230 , 209, 129), // #1403
+ INST(Vpsravw , VexRvm_Lx , E(660F38,11,_,x,_,1,4,FVM), 0 , 190, 0 , 9238 , 328, 137), // #1404
+ INST(Vpsraw , VexRvmVmi_Lx_MEvex , V(660F00,E1,_,x,I,I,4,128), V(660F00,71,4,x,I,I,4,FVM), 214, 130, 9246 , 384, 149), // #1405
+ INST(Vpsrld , VexRvmVmi_Lx_MEvex , V(660F00,D2,_,x,I,0,4,128), V(660F00,72,2,x,I,0,4,FV ), 214, 131, 9253 , 381, 133), // #1406
+ INST(Vpsrldq , VexVmi_Lx_MEvex , V(660F00,73,3,x,I,I,4,FVM), 0 , 218, 0 , 9260 , 382, 149), // #1407
+ INST(Vpsrlq , VexRvmVmi_Lx_MEvex , V(660F00,D3,_,x,I,1,4,128), V(660F00,73,2,x,I,1,4,FV ), 216, 132, 9268 , 383, 133), // #1408
+ INST(Vpsrlvd , VexRvm_Lx , V(660F38,45,_,x,0,0,4,FV ), 0 , 163, 0 , 9275 , 206, 143), // #1409
+ INST(Vpsrlvq , VexRvm_Lx , V(660F38,45,_,x,1,1,4,FV ), 0 , 162, 0 , 9283 , 205, 143), // #1410
+ INST(Vpsrlvw , VexRvm_Lx , E(660F38,10,_,x,_,1,4,FVM), 0 , 190, 0 , 9291 , 328, 137), // #1411
+ INST(Vpsrlw , VexRvmVmi_Lx_MEvex , V(660F00,D1,_,x,I,I,4,128), V(660F00,71,2,x,I,I,4,FVM), 214, 133, 9299 , 384, 149), // #1412
+ INST(Vpsubb , VexRvm_Lx , V(660F00,F8,_,x,I,I,4,FVM), 0 , 184, 0 , 9306 , 386, 149), // #1413
+ INST(Vpsubd , VexRvm_Lx , V(660F00,FA,_,x,I,0,4,FV ), 0 , 133, 0 , 9313 , 387, 133), // #1414
+ INST(Vpsubq , VexRvm_Lx , V(660F00,FB,_,x,I,1,4,FV ), 0 , 104, 0 , 9320 , 388, 133), // #1415
+ INST(Vpsubsb , VexRvm_Lx , V(660F00,E8,_,x,I,I,4,FVM), 0 , 184, 0 , 9327 , 386, 149), // #1416
+ INST(Vpsubsw , VexRvm_Lx , V(660F00,E9,_,x,I,I,4,FVM), 0 , 184, 0 , 9335 , 386, 149), // #1417
+ INST(Vpsubusb , VexRvm_Lx , V(660F00,D8,_,x,I,I,4,FVM), 0 , 184, 0 , 9343 , 386, 149), // #1418
+ INST(Vpsubusw , VexRvm_Lx , V(660F00,D9,_,x,I,I,4,FVM), 0 , 184, 0 , 9352 , 386, 149), // #1419
+ INST(Vpsubw , VexRvm_Lx , V(660F00,F9,_,x,I,I,4,FVM), 0 , 184, 0 , 9361 , 386, 149), // #1420
+ INST(Vpternlogd , VexRvmi_Lx , E(660F3A,25,_,x,_,0,4,FV ), 0 , 110, 0 , 9368 , 203, 129), // #1421
+ INST(Vpternlogq , VexRvmi_Lx , E(660F3A,25,_,x,_,1,4,FV ), 0 , 111, 0 , 9379 , 204, 129), // #1422
+ INST(Vptest , VexRm_Lx , V(660F38,17,_,x,I,_,_,_ ), 0 , 97 , 0 , 9390 , 276, 153), // #1423
+ INST(Vptestmb , VexRvm_Lx , E(660F38,26,_,x,_,0,4,FVM), 0 , 189, 0 , 9397 , 378, 137), // #1424
+ INST(Vptestmd , VexRvm_Lx , E(660F38,27,_,x,_,0,4,FV ), 0 , 113, 0 , 9406 , 389, 129), // #1425
+ INST(Vptestmq , VexRvm_Lx , E(660F38,27,_,x,_,1,4,FV ), 0 , 112, 0 , 9415 , 390, 129), // #1426
+ INST(Vptestmw , VexRvm_Lx , E(660F38,26,_,x,_,1,4,FVM), 0 , 190, 0 , 9424 , 378, 137), // #1427
+ INST(Vptestnmb , VexRvm_Lx , E(F30F38,26,_,x,_,0,4,FVM), 0 , 219, 0 , 9433 , 378, 137), // #1428
+ INST(Vptestnmd , VexRvm_Lx , E(F30F38,27,_,x,_,0,4,FV ), 0 , 128, 0 , 9443 , 389, 129), // #1429
+ INST(Vptestnmq , VexRvm_Lx , E(F30F38,27,_,x,_,1,4,FV ), 0 , 220, 0 , 9453 , 390, 129), // #1430
+ INST(Vptestnmw , VexRvm_Lx , E(F30F38,26,_,x,_,1,4,FVM), 0 , 221, 0 , 9463 , 378, 137), // #1431
+ INST(Vpunpckhbw , VexRvm_Lx , V(660F00,68,_,x,I,I,4,FVM), 0 , 184, 0 , 9473 , 291, 149), // #1432
+ INST(Vpunpckhdq , VexRvm_Lx , V(660F00,6A,_,x,I,0,4,FV ), 0 , 133, 0 , 9484 , 206, 133), // #1433
+ INST(Vpunpckhqdq , VexRvm_Lx , V(660F00,6D,_,x,I,1,4,FV ), 0 , 104, 0 , 9495 , 205, 133), // #1434
+ INST(Vpunpckhwd , VexRvm_Lx , V(660F00,69,_,x,I,I,4,FVM), 0 , 184, 0 , 9507 , 291, 149), // #1435
+ INST(Vpunpcklbw , VexRvm_Lx , V(660F00,60,_,x,I,I,4,FVM), 0 , 184, 0 , 9518 , 291, 149), // #1436
+ INST(Vpunpckldq , VexRvm_Lx , V(660F00,62,_,x,I,0,4,FV ), 0 , 133, 0 , 9529 , 206, 133), // #1437
+ INST(Vpunpcklqdq , VexRvm_Lx , V(660F00,6C,_,x,I,1,4,FV ), 0 , 104, 0 , 9540 , 205, 133), // #1438
+ INST(Vpunpcklwd , VexRvm_Lx , V(660F00,61,_,x,I,I,4,FVM), 0 , 184, 0 , 9552 , 291, 149), // #1439
+ INST(Vpxor , VexRvm_Lx , V(660F00,EF,_,x,I,_,_,_ ), 0 , 70 , 0 , 9563 , 324, 146), // #1440
+ INST(Vpxord , VexRvm_Lx , E(660F00,EF,_,x,_,0,4,FV ), 0 , 188, 0 , 9569 , 325, 129), // #1441
+ INST(Vpxorq , VexRvm_Lx , E(660F00,EF,_,x,_,1,4,FV ), 0 , 130, 0 , 9576 , 326, 129), // #1442
+ INST(Vrangepd , VexRvmi_Lx , E(660F3A,50,_,x,_,1,4,FV ), 0 , 111, 0 , 9583 , 265, 131), // #1443
+ INST(Vrangeps , VexRvmi_Lx , E(660F3A,50,_,x,_,0,4,FV ), 0 , 110, 0 , 9592 , 266, 131), // #1444
+ INST(Vrangesd , VexRvmi , E(660F3A,51,_,I,_,1,3,T1S), 0 , 160, 0 , 9601 , 267, 66 ), // #1445
+ INST(Vrangess , VexRvmi , E(660F3A,51,_,I,_,0,2,T1S), 0 , 161, 0 , 9610 , 268, 66 ), // #1446
+ INST(Vrcp14pd , VexRm_Lx , E(660F38,4C,_,x,_,1,4,FV ), 0 , 112, 0 , 9619 , 359, 129), // #1447
+ INST(Vrcp14ps , VexRm_Lx , E(660F38,4C,_,x,_,0,4,FV ), 0 , 113, 0 , 9628 , 345, 129), // #1448
+ INST(Vrcp14sd , VexRvm , E(660F38,4D,_,I,_,1,3,T1S), 0 , 124, 0 , 9637 , 391, 68 ), // #1449
+ INST(Vrcp14ss , VexRvm , E(660F38,4D,_,I,_,0,2,T1S), 0 , 125, 0 , 9646 , 392, 68 ), // #1450
+ INST(Vrcp28pd , VexRm , E(660F38,CA,_,2,_,1,4,FV ), 0 , 152, 0 , 9655 , 258, 138), // #1451
+ INST(Vrcp28ps , VexRm , E(660F38,CA,_,2,_,0,4,FV ), 0 , 153, 0 , 9664 , 259, 138), // #1452
+ INST(Vrcp28sd , VexRvm , E(660F38,CB,_,I,_,1,3,T1S), 0 , 124, 0 , 9673 , 286, 138), // #1453
+ INST(Vrcp28ss , VexRvm , E(660F38,CB,_,I,_,0,2,T1S), 0 , 125, 0 , 9682 , 287, 138), // #1454
+ INST(Vrcpps , VexRm_Lx , V(000F00,53,_,x,I,_,_,_ ), 0 , 73 , 0 , 9691 , 276, 126), // #1455
+ INST(Vrcpss , VexRvm , V(F30F00,53,_,I,I,_,_,_ ), 0 , 178, 0 , 9698 , 393, 126), // #1456
+ INST(Vreducepd , VexRmi_Lx , E(660F3A,56,_,x,_,1,4,FV ), 0 , 111, 0 , 9705 , 371, 131), // #1457
+ INST(Vreduceps , VexRmi_Lx , E(660F3A,56,_,x,_,0,4,FV ), 0 , 110, 0 , 9715 , 370, 131), // #1458
+ INST(Vreducesd , VexRvmi , E(660F3A,57,_,I,_,1,3,T1S), 0 , 160, 0 , 9725 , 394, 66 ), // #1459
+ INST(Vreducess , VexRvmi , E(660F3A,57,_,I,_,0,2,T1S), 0 , 161, 0 , 9735 , 395, 66 ), // #1460
+ INST(Vrndscalepd , VexRmi_Lx , E(660F3A,09,_,x,_,1,4,FV ), 0 , 111, 0 , 9745 , 288, 129), // #1461
+ INST(Vrndscaleps , VexRmi_Lx , E(660F3A,08,_,x,_,0,4,FV ), 0 , 110, 0 , 9757 , 289, 129), // #1462
+ INST(Vrndscalesd , VexRvmi , E(660F3A,0B,_,I,_,1,3,T1S), 0 , 160, 0 , 9769 , 267, 68 ), // #1463
+ INST(Vrndscaless , VexRvmi , E(660F3A,0A,_,I,_,0,2,T1S), 0 , 161, 0 , 9781 , 268, 68 ), // #1464
+ INST(Vroundpd , VexRmi_Lx , V(660F3A,09,_,x,I,_,_,_ ), 0 , 74 , 0 , 9793 , 396, 126), // #1465
+ INST(Vroundps , VexRmi_Lx , V(660F3A,08,_,x,I,_,_,_ ), 0 , 74 , 0 , 9802 , 396, 126), // #1466
+ INST(Vroundsd , VexRvmi , V(660F3A,0B,_,I,I,_,_,_ ), 0 , 74 , 0 , 9811 , 397, 126), // #1467
+ INST(Vroundss , VexRvmi , V(660F3A,0A,_,I,I,_,_,_ ), 0 , 74 , 0 , 9820 , 398, 126), // #1468
+ INST(Vrsqrt14pd , VexRm_Lx , E(660F38,4E,_,x,_,1,4,FV ), 0 , 112, 0 , 9829 , 359, 129), // #1469
+ INST(Vrsqrt14ps , VexRm_Lx , E(660F38,4E,_,x,_,0,4,FV ), 0 , 113, 0 , 9840 , 345, 129), // #1470
+ INST(Vrsqrt14sd , VexRvm , E(660F38,4F,_,I,_,1,3,T1S), 0 , 124, 0 , 9851 , 391, 68 ), // #1471
+ INST(Vrsqrt14ss , VexRvm , E(660F38,4F,_,I,_,0,2,T1S), 0 , 125, 0 , 9862 , 392, 68 ), // #1472
+ INST(Vrsqrt28pd , VexRm , E(660F38,CC,_,2,_,1,4,FV ), 0 , 152, 0 , 9873 , 258, 138), // #1473
+ INST(Vrsqrt28ps , VexRm , E(660F38,CC,_,2,_,0,4,FV ), 0 , 153, 0 , 9884 , 259, 138), // #1474
+ INST(Vrsqrt28sd , VexRvm , E(660F38,CD,_,I,_,1,3,T1S), 0 , 124, 0 , 9895 , 286, 138), // #1475
+ INST(Vrsqrt28ss , VexRvm , E(660F38,CD,_,I,_,0,2,T1S), 0 , 125, 0 , 9906 , 287, 138), // #1476
+ INST(Vrsqrtps , VexRm_Lx , V(000F00,52,_,x,I,_,_,_ ), 0 , 73 , 0 , 9917 , 276, 126), // #1477
+ INST(Vrsqrtss , VexRvm , V(F30F00,52,_,I,I,_,_,_ ), 0 , 178, 0 , 9926 , 393, 126), // #1478
+ INST(Vscalefpd , VexRvm_Lx , E(660F38,2C,_,x,_,1,4,FV ), 0 , 112, 0 , 9935 , 399, 129), // #1479
+ INST(Vscalefps , VexRvm_Lx , E(660F38,2C,_,x,_,0,4,FV ), 0 , 113, 0 , 9945 , 400, 129), // #1480
+ INST(Vscalefsd , VexRvm , E(660F38,2D,_,I,_,1,3,T1S), 0 , 124, 0 , 9955 , 401, 68 ), // #1481
+ INST(Vscalefss , VexRvm , E(660F38,2D,_,I,_,0,2,T1S), 0 , 125, 0 , 9965 , 402, 68 ), // #1482
+ INST(Vscatterdpd , VexMr_VM , E(660F38,A2,_,x,_,1,3,T1S), 0 , 124, 0 , 9975 , 374, 129), // #1483
+ INST(Vscatterdps , VexMr_VM , E(660F38,A2,_,x,_,0,2,T1S), 0 , 125, 0 , 9987 , 373, 129), // #1484
+ INST(Vscatterpf0dpd , VexM_VM , E(660F38,C6,5,2,_,1,3,T1S), 0 , 222, 0 , 9999 , 281, 144), // #1485
+ INST(Vscatterpf0dps , VexM_VM , E(660F38,C6,5,2,_,0,2,T1S), 0 , 223, 0 , 10014, 282, 144), // #1486
+ INST(Vscatterpf0qpd , VexM_VM , E(660F38,C7,5,2,_,1,3,T1S), 0 , 222, 0 , 10029, 283, 144), // #1487
+ INST(Vscatterpf0qps , VexM_VM , E(660F38,C7,5,2,_,0,2,T1S), 0 , 223, 0 , 10044, 283, 144), // #1488
+ INST(Vscatterpf1dpd , VexM_VM , E(660F38,C6,6,2,_,1,3,T1S), 0 , 224, 0 , 10059, 281, 144), // #1489
+ INST(Vscatterpf1dps , VexM_VM , E(660F38,C6,6,2,_,0,2,T1S), 0 , 225, 0 , 10074, 282, 144), // #1490
+ INST(Vscatterpf1qpd , VexM_VM , E(660F38,C7,6,2,_,1,3,T1S), 0 , 224, 0 , 10089, 283, 144), // #1491
+ INST(Vscatterpf1qps , VexM_VM , E(660F38,C7,6,2,_,0,2,T1S), 0 , 225, 0 , 10104, 283, 144), // #1492
+ INST(Vscatterqpd , VexMr_VM , E(660F38,A3,_,x,_,1,3,T1S), 0 , 124, 0 , 10119, 376, 129), // #1493
+ INST(Vscatterqps , VexMr_VM , E(660F38,A3,_,x,_,0,2,T1S), 0 , 125, 0 , 10131, 375, 129), // #1494
+ INST(Vshuff32x4 , VexRvmi_Lx , E(660F3A,23,_,x,_,0,4,FV ), 0 , 110, 0 , 10143, 403, 129), // #1495
+ INST(Vshuff64x2 , VexRvmi_Lx , E(660F3A,23,_,x,_,1,4,FV ), 0 , 111, 0 , 10154, 404, 129), // #1496
+ INST(Vshufi32x4 , VexRvmi_Lx , E(660F3A,43,_,x,_,0,4,FV ), 0 , 110, 0 , 10165, 403, 129), // #1497
+ INST(Vshufi64x2 , VexRvmi_Lx , E(660F3A,43,_,x,_,1,4,FV ), 0 , 111, 0 , 10176, 404, 129), // #1498
+ INST(Vshufpd , VexRvmi_Lx , V(660F00,C6,_,x,I,1,4,FV ), 0 , 104, 0 , 10187, 405, 124), // #1499
+ INST(Vshufps , VexRvmi_Lx , V(000F00,C6,_,x,I,0,4,FV ), 0 , 105, 0 , 10195, 406, 124), // #1500
+ INST(Vsqrtpd , VexRm_Lx , V(660F00,51,_,x,I,1,4,FV ), 0 , 104, 0 , 10203, 407, 124), // #1501
+ INST(Vsqrtps , VexRm_Lx , V(000F00,51,_,x,I,0,4,FV ), 0 , 105, 0 , 10211, 228, 124), // #1502
+ INST(Vsqrtsd , VexRvm , V(F20F00,51,_,I,I,1,3,T1S), 0 , 106, 0 , 10219, 197, 125), // #1503
+ INST(Vsqrtss , VexRvm , V(F30F00,51,_,I,I,0,2,T1S), 0 , 107, 0 , 10227, 198, 125), // #1504
+ INST(Vstmxcsr , VexM , V(000F00,AE,3,0,I,_,_,_ ), 0 , 226, 0 , 10235, 297, 126), // #1505
+ INST(Vsubpd , VexRvm_Lx , V(660F00,5C,_,x,I,1,4,FV ), 0 , 104, 0 , 10244, 195, 124), // #1506
+ INST(Vsubps , VexRvm_Lx , V(000F00,5C,_,x,I,0,4,FV ), 0 , 105, 0 , 10251, 196, 124), // #1507
+ INST(Vsubsd , VexRvm , V(F20F00,5C,_,I,I,1,3,T1S), 0 , 106, 0 , 10258, 197, 125), // #1508
+ INST(Vsubss , VexRvm , V(F30F00,5C,_,I,I,0,2,T1S), 0 , 107, 0 , 10265, 198, 125), // #1509
+ INST(Vtestpd , VexRm_Lx , V(660F38,0F,_,x,0,_,_,_ ), 0 , 97 , 0 , 10272, 276, 153), // #1510
+ INST(Vtestps , VexRm_Lx , V(660F38,0E,_,x,0,_,_,_ ), 0 , 97 , 0 , 10280, 276, 153), // #1511
+ INST(Vucomisd , VexRm , V(660F00,2E,_,I,I,1,3,T1S), 0 , 122, 0 , 10288, 224, 134), // #1512
+ INST(Vucomiss , VexRm , V(000F00,2E,_,I,I,0,2,T1S), 0 , 123, 0 , 10297, 225, 134), // #1513
+ INST(Vunpckhpd , VexRvm_Lx , V(660F00,15,_,x,I,1,4,FV ), 0 , 104, 0 , 10306, 205, 124), // #1514
+ INST(Vunpckhps , VexRvm_Lx , V(000F00,15,_,x,I,0,4,FV ), 0 , 105, 0 , 10316, 206, 124), // #1515
+ INST(Vunpcklpd , VexRvm_Lx , V(660F00,14,_,x,I,1,4,FV ), 0 , 104, 0 , 10326, 205, 124), // #1516
+ INST(Vunpcklps , VexRvm_Lx , V(000F00,14,_,x,I,0,4,FV ), 0 , 105, 0 , 10336, 206, 124), // #1517
+ INST(Vxorpd , VexRvm_Lx , V(660F00,57,_,x,I,1,4,FV ), 0 , 104, 0 , 10346, 388, 130), // #1518
+ INST(Vxorps , VexRvm_Lx , V(000F00,57,_,x,I,0,4,FV ), 0 , 105, 0 , 10353, 387, 130), // #1519
+ INST(Vzeroall , VexOp , V(000F00,77,_,1,I,_,_,_ ), 0 , 69 , 0 , 10360, 408, 126), // #1520
+ INST(Vzeroupper , VexOp , V(000F00,77,_,0,I,_,_,_ ), 0 , 73 , 0 , 10369, 408, 126), // #1521
INST(Wbinvd , X86Op , O(000F00,09,_,_,_,_,_,_ ), 0 , 4 , 0 , 10380, 30 , 0 ), // #1522
INST(Wbnoinvd , X86Op , O(F30F00,09,_,_,_,_,_,_ ), 0 , 6 , 0 , 10387, 30 , 162), // #1523
- INST(Wrfsbase , X86M , O(F30F00,AE,2,_,x,_,_,_ ), 0 , 227, 0 , 10396, 171, 104), // #1524
- INST(Wrgsbase , X86M , O(F30F00,AE,3,_,x,_,_,_ ), 0 , 228, 0 , 10405, 171, 104), // #1525
- INST(Wrmsr , X86Op , O(000F00,30,_,_,_,_,_,_ ), 0 , 4 , 0 , 10414, 172, 105), // #1526
- INST(Wrssd , X86Mr , O(000F38,F6,_,_,_,_,_,_ ), 0 , 84 , 0 , 10420, 408, 56 ), // #1527
- INST(Wrssq , X86Mr , O(000F38,F6,_,_,1,_,_,_ ), 0 , 229, 0 , 10426, 409, 56 ), // #1528
- INST(Wrussd , X86Mr , O(660F38,F5,_,_,_,_,_,_ ), 0 , 2 , 0 , 10432, 408, 56 ), // #1529
- INST(Wrussq , X86Mr , O(660F38,F5,_,_,1,_,_,_ ), 0 , 230, 0 , 10439, 409, 56 ), // #1530
+ INST(Wrfsbase , X86M , O(F30F00,AE,2,_,x,_,_,_ ), 0 , 227, 0 , 10396, 172, 104), // #1524
+ INST(Wrgsbase , X86M , O(F30F00,AE,3,_,x,_,_,_ ), 0 , 228, 0 , 10405, 172, 104), // #1525
+ INST(Wrmsr , X86Op , O(000F00,30,_,_,_,_,_,_ ), 0 , 4 , 0 , 10414, 173, 105), // #1526
+ INST(Wrssd , X86Mr , O(000F38,F6,_,_,_,_,_,_ ), 0 , 84 , 0 , 10420, 409, 56 ), // #1527
+ INST(Wrssq , X86Mr , O(000F38,F6,_,_,1,_,_,_ ), 0 , 229, 0 , 10426, 410, 56 ), // #1528
+ INST(Wrussd , X86Mr , O(660F38,F5,_,_,_,_,_,_ ), 0 , 2 , 0 , 10432, 409, 56 ), // #1529
+ INST(Wrussq , X86Mr , O(660F38,F5,_,_,1,_,_,_ ), 0 , 230, 0 , 10439, 410, 56 ), // #1530
INST(Xabort , X86Op_Mod11RM_I8 , O(000000,C6,7,_,_,_,_,_ ), 0 , 27 , 0 , 10446, 79 , 163), // #1531
- INST(Xadd , X86Xadd , O(000F00,C0,_,_,x,_,_,_ ), 0 , 4 , 0 , 10453, 410, 38 ), // #1532
- INST(Xbegin , X86JmpRel , O(000000,C7,7,_,_,_,_,_ ), 0 , 27 , 0 , 10458, 411, 163), // #1533
- INST(Xchg , X86Xchg , O(000000,86,_,_,x,_,_,_ ), 0 , 0 , 0 , 462 , 412, 0 ), // #1534
+ INST(Xadd , X86Xadd , O(000F00,C0,_,_,x,_,_,_ ), 0 , 4 , 0 , 10453, 411, 38 ), // #1532
+ INST(Xbegin , X86JmpRel , O(000000,C7,7,_,_,_,_,_ ), 0 , 27 , 0 , 10458, 412, 163), // #1533
+ INST(Xchg , X86Xchg , O(000000,86,_,_,x,_,_,_ ), 0 , 0 , 0 , 462 , 413, 0 ), // #1534
INST(Xend , X86Op , O(000F01,D5,_,_,_,_,_,_ ), 0 , 21 , 0 , 10465, 30 , 163), // #1535
- INST(Xgetbv , X86Op , O(000F01,D0,_,_,_,_,_,_ ), 0 , 21 , 0 , 10470, 172, 164), // #1536
+ INST(Xgetbv , X86Op , O(000F01,D0,_,_,_,_,_,_ ), 0 , 21 , 0 , 10470, 173, 164), // #1536
INST(Xlatb , X86Op , O(000000,D7,_,_,_,_,_,_ ), 0 , 0 , 0 , 10477, 30 , 0 ), // #1537
- INST(Xor , X86Arith , O(000000,30,6,_,x,_,_,_ ), 0 , 32 , 0 , 9565 , 177, 1 ), // #1538
- INST(Xorpd , ExtRm , O(660F00,57,_,_,_,_,_,_ ), 0 , 3 , 0 , 10347, 149, 4 ), // #1539
- INST(Xorps , ExtRm , O(000F00,57,_,_,_,_,_,_ ), 0 , 4 , 0 , 10354, 149, 5 ), // #1540
+ INST(Xor , X86Arith , O(000000,30,6,_,x,_,_,_ ), 0 , 32 , 0 , 9565 , 178, 1 ), // #1538
+ INST(Xorpd , ExtRm , O(660F00,57,_,_,_,_,_,_ ), 0 , 3 , 0 , 10347, 150, 4 ), // #1539
+ INST(Xorps , ExtRm , O(000F00,57,_,_,_,_,_,_ ), 0 , 4 , 0 , 10354, 150, 5 ), // #1540
INST(Xresldtrk , X86Op , O(F20F01,E9,_,_,_,_,_,_ ), 0 , 93 , 0 , 10483, 30 , 165), // #1541
- INST(Xrstor , X86M_Only_EDX_EAX , O(000F00,AE,5,_,_,_,_,_ ), 0 , 78 , 0 , 1164 , 413, 164), // #1542
- INST(Xrstor64 , X86M_Only_EDX_EAX , O(000F00,AE,5,_,1,_,_,_ ), 0 , 231, 0 , 1172 , 414, 164), // #1543
- INST(Xrstors , X86M_Only_EDX_EAX , O(000F00,C7,3,_,_,_,_,_ ), 0 , 79 , 0 , 10493, 413, 166), // #1544
- INST(Xrstors64 , X86M_Only_EDX_EAX , O(000F00,C7,3,_,1,_,_,_ ), 0 , 232, 0 , 10501, 414, 166), // #1545
- INST(Xsave , X86M_Only_EDX_EAX , O(000F00,AE,4,_,_,_,_,_ ), 0 , 98 , 0 , 1182 , 413, 164), // #1546
- INST(Xsave64 , X86M_Only_EDX_EAX , O(000F00,AE,4,_,1,_,_,_ ), 0 , 233, 0 , 1189 , 414, 164), // #1547
- INST(Xsavec , X86M_Only_EDX_EAX , O(000F00,C7,4,_,_,_,_,_ ), 0 , 98 , 0 , 10511, 413, 167), // #1548
- INST(Xsavec64 , X86M_Only_EDX_EAX , O(000F00,C7,4,_,1,_,_,_ ), 0 , 233, 0 , 10518, 414, 167), // #1549
- INST(Xsaveopt , X86M_Only_EDX_EAX , O(000F00,AE,6,_,_,_,_,_ ), 0 , 81 , 0 , 10527, 413, 168), // #1550
- INST(Xsaveopt64 , X86M_Only_EDX_EAX , O(000F00,AE,6,_,1,_,_,_ ), 0 , 234, 0 , 10536, 414, 168), // #1551
- INST(Xsaves , X86M_Only_EDX_EAX , O(000F00,C7,5,_,_,_,_,_ ), 0 , 78 , 0 , 10547, 413, 166), // #1552
- INST(Xsaves64 , X86M_Only_EDX_EAX , O(000F00,C7,5,_,1,_,_,_ ), 0 , 231, 0 , 10554, 414, 166), // #1553
- INST(Xsetbv , X86Op , O(000F01,D1,_,_,_,_,_,_ ), 0 , 21 , 0 , 10563, 172, 164), // #1554
+ INST(Xrstor , X86M_Only_EDX_EAX , O(000F00,AE,5,_,_,_,_,_ ), 0 , 78 , 0 , 1164 , 414, 164), // #1542
+ INST(Xrstor64 , X86M_Only_EDX_EAX , O(000F00,AE,5,_,1,_,_,_ ), 0 , 231, 0 , 1172 , 415, 164), // #1543
+ INST(Xrstors , X86M_Only_EDX_EAX , O(000F00,C7,3,_,_,_,_,_ ), 0 , 79 , 0 , 10493, 414, 166), // #1544
+ INST(Xrstors64 , X86M_Only_EDX_EAX , O(000F00,C7,3,_,1,_,_,_ ), 0 , 232, 0 , 10501, 415, 166), // #1545
+ INST(Xsave , X86M_Only_EDX_EAX , O(000F00,AE,4,_,_,_,_,_ ), 0 , 98 , 0 , 1182 , 414, 164), // #1546
+ INST(Xsave64 , X86M_Only_EDX_EAX , O(000F00,AE,4,_,1,_,_,_ ), 0 , 233, 0 , 1189 , 415, 164), // #1547
+ INST(Xsavec , X86M_Only_EDX_EAX , O(000F00,C7,4,_,_,_,_,_ ), 0 , 98 , 0 , 10511, 414, 167), // #1548
+ INST(Xsavec64 , X86M_Only_EDX_EAX , O(000F00,C7,4,_,1,_,_,_ ), 0 , 233, 0 , 10518, 415, 167), // #1549
+ INST(Xsaveopt , X86M_Only_EDX_EAX , O(000F00,AE,6,_,_,_,_,_ ), 0 , 81 , 0 , 10527, 414, 168), // #1550
+ INST(Xsaveopt64 , X86M_Only_EDX_EAX , O(000F00,AE,6,_,1,_,_,_ ), 0 , 234, 0 , 10536, 415, 168), // #1551
+ INST(Xsaves , X86M_Only_EDX_EAX , O(000F00,C7,5,_,_,_,_,_ ), 0 , 78 , 0 , 10547, 414, 166), // #1552
+ INST(Xsaves64 , X86M_Only_EDX_EAX , O(000F00,C7,5,_,1,_,_,_ ), 0 , 231, 0 , 10554, 415, 166), // #1553
+ INST(Xsetbv , X86Op , O(000F01,D1,_,_,_,_,_,_ ), 0 , 21 , 0 , 10563, 173, 164), // #1554
INST(Xsusldtrk , X86Op , O(F20F01,E8,_,_,_,_,_,_ ), 0 , 93 , 0 , 10570, 30 , 165), // #1555
INST(Xtest , X86Op , O(000F01,D6,_,_,_,_,_,_ ), 0 , 21 , 0 , 10580, 30 , 169) // #1556
// ${InstInfo:End}
@@ -2055,427 +2055,430 @@ const uint32_t InstDB::_altOpcodeTable[] = {
// ${InstCommonTable:Begin}
// ------------------- Automatically generated, do not edit -------------------
#define F(VAL) InstDB::kFlag##VAL
+#define X(VAL) InstDB::kAvx512Flag##VAL
#define CONTROL(VAL) Inst::kControl##VAL
#define SINGLE_REG(VAL) InstDB::kSingleReg##VAL
const InstDB::CommonInfo InstDB::_commonInfoTable[] = {
- { 0 , 0 , 0 , CONTROL(None) , SINGLE_REG(None), 0 }, // #0 [ref=1x]
- { 0 , 376, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #1 [ref=4x]
- { 0 , 377, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #2 [ref=2x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 16 , 12, CONTROL(None) , SINGLE_REG(None), 0 }, // #3 [ref=2x]
- { 0 , 180, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #4 [ref=2x]
- { F(Vec) , 79 , 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #5 [ref=54x]
- { F(Vec) , 106, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #6 [ref=19x]
- { F(Vec) , 257, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #7 [ref=16x]
- { F(Vec) , 215, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #8 [ref=20x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 28 , 11, CONTROL(None) , SINGLE_REG(RO) , 0 }, // #9 [ref=1x]
- { F(Vex) , 272, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #10 [ref=3x]
- { F(Vec) , 79 , 1 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #11 [ref=12x]
- { 0 , 378, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #12 [ref=1x]
- { F(Vex) , 274, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #13 [ref=5x]
- { F(Vex) , 180, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #14 [ref=12x]
- { F(Vec) , 379, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #15 [ref=4x]
- { 0 , 276, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #16 [ref=3x]
- { F(Mib) , 380, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #17 [ref=1x]
- { 0 , 381, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #18 [ref=1x]
- { 0 , 278, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #19 [ref=1x]
- { F(Mib) , 382, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #20 [ref=1x]
- { 0 , 280, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #21 [ref=1x]
- { 0 , 179, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #22 [ref=35x]
- { 0 , 383, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #23 [ref=3x]
- { 0 , 123, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #24 [ref=1x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 123, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #25 [ref=3x]
- { F(Rep)|F(RepIgnored) , 282, 2 , CONTROL(Call) , SINGLE_REG(None), 0 }, // #26 [ref=1x]
- { 0 , 384, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #27 [ref=1x]
- { 0 , 385, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #28 [ref=2x]
- { 0 , 359, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #29 [ref=1x]
- { 0 , 108, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #30 [ref=83x]
- { 0 , 386, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #31 [ref=24x]
- { 0 , 387, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #32 [ref=6x]
- { 0 , 388, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #33 [ref=13x]
- { 0 , 389, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #34 [ref=1x]
- { 0 , 16 , 12, CONTROL(None) , SINGLE_REG(None), 0 }, // #35 [ref=1x]
- { F(Rep) , 127, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #36 [ref=1x]
- { F(Vec) , 390, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #37 [ref=2x]
- { F(Vec) , 391, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #38 [ref=3x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 131, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #39 [ref=1x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 392, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #40 [ref=1x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 393, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #41 [ref=1x]
- { 0 , 394, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #42 [ref=1x]
- { 0 , 395, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #43 [ref=1x]
- { 0 , 284, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #44 [ref=1x]
- { F(Mmx)|F(Vec) , 396, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #45 [ref=2x]
- { F(Mmx)|F(Vec) , 397, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #46 [ref=2x]
- { F(Mmx)|F(Vec) , 398, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #47 [ref=2x]
- { F(Vec) , 399, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #48 [ref=2x]
- { F(Vec) , 400, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #49 [ref=2x]
- { F(Vec) , 401, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #50 [ref=2x]
- { 0 , 402, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #51 [ref=1x]
- { 0 , 403, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #52 [ref=2x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 286, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #53 [ref=2x]
- { 0 , 39 , 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #54 [ref=3x]
- { F(Mmx) , 108, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #55 [ref=1x]
- { 0 , 288, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #56 [ref=2x]
- { 0 , 404, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #57 [ref=1x]
- { F(Vec) , 405, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #58 [ref=2x]
- { F(Vec) , 290, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #59 [ref=1x]
- { F(FpuM32)|F(FpuM64) , 182, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #60 [ref=6x]
- { 0 , 292, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #61 [ref=9x]
- { F(FpuM80) , 406, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #62 [ref=2x]
- { 0 , 293, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #63 [ref=13x]
- { F(FpuM32)|F(FpuM64) , 294, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #64 [ref=2x]
- { F(FpuM16)|F(FpuM32) , 407, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #65 [ref=9x]
- { F(FpuM16)|F(FpuM32)|F(FpuM64) , 408, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #66 [ref=3x]
- { F(FpuM32)|F(FpuM64)|F(FpuM80) , 409, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #67 [ref=2x]
- { F(FpuM16) , 410, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #68 [ref=3x]
- { F(FpuM16) , 411, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #69 [ref=2x]
- { F(FpuM32)|F(FpuM64) , 295, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #70 [ref=1x]
- { 0 , 412, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #71 [ref=2x]
- { 0 , 413, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #72 [ref=1x]
- { 0 , 39 , 10, CONTROL(None) , SINGLE_REG(None), 0 }, // #73 [ref=1x]
- { 0 , 414, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #74 [ref=1x]
- { 0 , 415, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #75 [ref=2x]
- { 0 , 343, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #76 [ref=3x]
- { F(Rep) , 416, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #77 [ref=1x]
- { F(Vec) , 296, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #78 [ref=1x]
- { 0 , 417, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #79 [ref=2x]
- { 0 , 418, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #80 [ref=8x]
- { 0 , 298, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #81 [ref=3x]
- { 0 , 300, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #82 [ref=1x]
- { 0 , 108, 1 , CONTROL(Return) , SINGLE_REG(None), 0 }, // #83 [ref=2x]
- { 0 , 388, 1 , CONTROL(Return) , SINGLE_REG(None), 0 }, // #84 [ref=1x]
- { F(Rep)|F(RepIgnored) , 302, 2 , CONTROL(Branch) , SINGLE_REG(None), 0 }, // #85 [ref=30x]
- { F(Rep)|F(RepIgnored) , 304, 2 , CONTROL(Branch) , SINGLE_REG(None), 0 }, // #86 [ref=1x]
- { F(Rep)|F(RepIgnored) , 306, 2 , CONTROL(Jump) , SINGLE_REG(None), 0 }, // #87 [ref=1x]
- { F(Vec)|F(Vex) , 419, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #88 [ref=27x]
- { F(Vec)|F(Vex) , 308, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #89 [ref=1x]
- { F(Vec)|F(Vex) , 310, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #90 [ref=1x]
- { F(Vec)|F(Vex) , 312, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #91 [ref=1x]
- { F(Vec)|F(Vex) , 314, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #92 [ref=1x]
- { F(Vec)|F(Vex) , 420, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #93 [ref=12x]
- { F(Vec)|F(Vex) , 421, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #94 [ref=8x]
- { 0 , 422, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #95 [ref=2x]
- { 0 , 316, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #96 [ref=1x]
- { 0 , 318, 2 , CONTROL(Call) , SINGLE_REG(None), 0 }, // #97 [ref=1x]
- { F(Vec) , 224, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #98 [ref=2x]
- { 0 , 423, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #99 [ref=2x]
- { 0 , 320, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #100 [ref=2x]
- { F(Vex) , 424, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #101 [ref=2x]
- { 0 , 425, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #102 [ref=1x]
- { 0 , 185, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #103 [ref=3x]
- { 0 , 318, 2 , CONTROL(Jump) , SINGLE_REG(None), 0 }, // #104 [ref=1x]
- { 0 , 426, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #105 [ref=5x]
- { F(Vex) , 427, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #106 [ref=2x]
- { F(Rep) , 135, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #107 [ref=1x]
- { 0 , 304, 2 , CONTROL(Branch) , SINGLE_REG(None), 0 }, // #108 [ref=3x]
- { 0 , 322, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #109 [ref=1x]
- { F(Vex) , 428, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #110 [ref=2x]
- { F(Vec) , 429, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #111 [ref=1x]
- { F(Mmx) , 430, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #112 [ref=1x]
- { 0 , 431, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #113 [ref=2x]
- { F(XRelease) , 0 , 16, CONTROL(None) , SINGLE_REG(None), 0 }, // #114 [ref=1x]
- { 0 , 49 , 9 , CONTROL(None) , SINGLE_REG(None), 0 }, // #115 [ref=1x]
- { F(Vec) , 79 , 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #116 [ref=6x]
- { 0 , 73 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #117 [ref=1x]
- { F(Mmx)|F(Vec) , 324, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #118 [ref=1x]
- { 0 , 432, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #119 [ref=1x]
- { 0 , 77 , 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #120 [ref=2x]
- { F(Mmx)|F(Vec) , 433, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #121 [ref=1x]
- { F(Vec) , 291, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #122 [ref=2x]
- { F(Vec) , 230, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #123 [ref=4x]
- { F(Vec) , 434, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #124 [ref=2x]
- { F(Vec) , 80 , 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #125 [ref=3x]
- { F(Mmx) , 435, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #126 [ref=1x]
- { F(Vec) , 107, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #127 [ref=1x]
- { F(Vec) , 233, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #128 [ref=1x]
- { F(Mmx)|F(Vec) , 103, 5 , CONTROL(None) , SINGLE_REG(None), 0 }, // #129 [ref=1x]
- { F(Mmx)|F(Vec) , 436, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #130 [ref=1x]
- { F(Rep) , 139, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #131 [ref=1x]
- { F(Vec) , 106, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #132 [ref=1x]
- { F(Vec) , 326, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #133 [ref=1x]
- { 0 , 328, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #134 [ref=2x]
- { 0 , 437, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #135 [ref=1x]
- { F(Vex) , 330, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #136 [ref=1x]
- { 0 , 438, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #137 [ref=1x]
- { 0 , 439, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #138 [ref=1x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 287, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #139 [ref=2x]
- { 0 , 108, 5 , CONTROL(None) , SINGLE_REG(None), 0 }, // #140 [ref=1x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 16 , 12, CONTROL(None) , SINGLE_REG(RO) , 0 }, // #141 [ref=1x]
- { 0 , 440, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #142 [ref=1x]
- { F(Rep) , 441, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #143 [ref=1x]
- { F(Mmx)|F(Vec) , 332, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #144 [ref=37x]
- { F(Mmx)|F(Vec) , 334, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #145 [ref=1x]
- { F(Mmx)|F(Vec) , 332, 2 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #146 [ref=6x]
- { F(Mmx)|F(Vec) , 332, 2 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #147 [ref=16x]
- { F(Mmx) , 332, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #148 [ref=26x]
- { F(Vec) , 79 , 1 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #149 [ref=4x]
- { F(Vec) , 442, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #150 [ref=1x]
- { F(Vec) , 443, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #151 [ref=1x]
- { F(Vec) , 444, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #152 [ref=1x]
- { F(Vec) , 445, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #153 [ref=1x]
- { F(Vec) , 446, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #154 [ref=1x]
- { F(Vec) , 447, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #155 [ref=1x]
- { F(Mmx)|F(Vec) , 336, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #156 [ref=1x]
- { F(Vec) , 448, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #157 [ref=1x]
- { F(Vec) , 449, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #158 [ref=1x]
- { F(Vec) , 450, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #159 [ref=1x]
- { F(Mmx)|F(Vec) , 451, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #160 [ref=1x]
- { F(Mmx)|F(Vec) , 452, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #161 [ref=1x]
- { F(Vec) , 260, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #162 [ref=2x]
- { 0 , 143, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #163 [ref=1x]
- { F(Mmx) , 334, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #164 [ref=1x]
- { F(Mmx)|F(Vec) , 338, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #165 [ref=8x]
- { F(Vec) , 453, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #166 [ref=2x]
- { 0 , 454, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #167 [ref=1x]
- { F(Mmx)|F(Vec) , 340, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #168 [ref=3x]
- { 0 , 147, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #169 [ref=1x]
- { 0 , 455, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #170 [ref=8x]
- { 0 , 456, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #171 [ref=4x]
- { 0 , 457, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #172 [ref=8x]
- { 0 , 342, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #173 [ref=1x]
- { F(Rep)|F(RepIgnored) , 344, 2 , CONTROL(Return) , SINGLE_REG(None), 0 }, // #174 [ref=1x]
- { 0 , 344, 2 , CONTROL(Return) , SINGLE_REG(None), 0 }, // #175 [ref=1x]
- { F(Vex) , 346, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #176 [ref=1x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 16 , 12, CONTROL(None) , SINGLE_REG(WO) , 0 }, // #177 [ref=3x]
- { F(Rep) , 151, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #178 [ref=1x]
- { 0 , 458, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #179 [ref=30x]
- { 0 , 188, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #180 [ref=2x]
- { 0 , 459, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #181 [ref=3x]
- { F(Rep) , 155, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #182 [ref=1x]
- { F(Vex) , 460, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #183 [ref=5x]
- { 0 , 66 , 7 , CONTROL(None) , SINGLE_REG(None), 0 }, // #184 [ref=1x]
- { F(Tsib)|F(Vex) , 461, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #185 [ref=2x]
- { F(Vex) , 388, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #186 [ref=1x]
- { F(Tsib)|F(Vex) , 462, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #187 [ref=1x]
- { F(Vex) , 463, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #188 [ref=1x]
- { 0 , 464, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #189 [ref=2x]
- { 0 , 180, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #190 [ref=2x]
- { 0 , 465, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #191 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512T4X)|F(Avx512KZ) , 466, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #192 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512T4X)|F(Avx512KZ) , 467, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #193 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #194 [ref=22x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #195 [ref=22x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #196 [ref=18x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #197 [ref=17x]
- { F(Vec)|F(Vex) , 191, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #198 [ref=15x]
- { F(Vec)|F(Vex)|F(Evex) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #199 [ref=5x]
- { F(Vec)|F(Vex) , 79 , 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #200 [ref=17x]
- { F(Vec)|F(Vex) , 215, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #201 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #202 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #203 [ref=4x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #204 [ref=10x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #205 [ref=12x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #206 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #207 [ref=6x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #208 [ref=19x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #209 [ref=12x]
- { F(Vec)|F(Vex) , 194, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #210 [ref=6x]
- { F(Vec)|F(Vex) , 348, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #211 [ref=3x]
- { F(Vec)|F(Vex) , 470, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #212 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 471, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #213 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 472, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #214 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 473, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #215 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 474, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #216 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 471, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #217 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 475, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #218 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE_B64) , 197, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #219 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE_B32) , 197, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #220 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE) , 476, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #221 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE) , 477, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #222 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512SAE) , 106, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #223 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512SAE) , 257, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #224 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 200, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #225 [ref=6x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 203, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #226 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE_B32) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #227 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 350, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #228 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE_B64) , 350, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #229 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE_B64) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #230 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE_B64) , 350, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #231 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE) , 203, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #232 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE_B32) , 203, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #233 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE) , 209, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #234 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE_B32) , 203, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #235 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE_B32) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #236 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512ER_SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #237 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512ER_SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #238 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512ER_SAE) , 478, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #239 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #240 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512ER_SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #241 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512ER_SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #242 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE_B64) , 350, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #243 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B64) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #244 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B64) , 350, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #245 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE_B32) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #246 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B32) , 203, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #247 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B32) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #248 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #249 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #250 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #251 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #252 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 203, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #253 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512ER_SAE) , 478, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #254 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #255 [ref=3x]
- { F(Vec)|F(Vex) , 194, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #256 [ref=9x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B64) , 83 , 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #257 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B32) , 83 , 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #258 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #259 [ref=9x]
- { F(Vec)|F(Vex) , 210, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #260 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 479, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #261 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 211, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #262 [ref=4x]
- { F(Vec)|F(Vex)|F(Evex) , 405, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #263 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B64) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #264 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B32) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #265 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE) , 480, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #266 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE) , 481, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #267 [ref=4x]
- { F(Vec)|F(Vex) , 159, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #268 [ref=13x]
- { F(Vec)|F(Vex) , 352, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #269 [ref=4x]
- { F(Vec)|F(Vex) , 354, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #270 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512K_B64) , 482, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #271 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512K_B32) , 482, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #272 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512K) , 483, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #273 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512K) , 484, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #274 [ref=1x]
- { F(Vec)|F(Vex) , 206, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #275 [ref=7x]
- { F(Vec)|F(Vex) , 106, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #276 [ref=1x]
- { F(Vec)|F(Vex) , 257, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #277 [ref=1x]
- { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(Avx512K) , 163, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #278 [ref=2x]
- { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(Avx512K) , 113, 5 , CONTROL(None) , SINGLE_REG(None), 0 }, // #279 [ref=2x]
- { F(Vsib)|F(Evex)|F(Avx512K) , 485, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #280 [ref=4x]
- { F(Vsib)|F(Evex)|F(Avx512K) , 486, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #281 [ref=4x]
- { F(Vsib)|F(Evex)|F(Avx512K) , 487, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #282 [ref=8x]
- { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(Avx512K) , 118, 5 , CONTROL(None) , SINGLE_REG(None), 0 }, // #283 [ref=2x]
- { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(Avx512K) , 212, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #284 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #285 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #286 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B64) , 215, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #287 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_SAE_B32) , 215, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #288 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #289 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #290 [ref=22x]
- { F(Vec)|F(Vex) , 356, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #291 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 356, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #292 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 488, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #293 [ref=4x]
- { F(Vec)|F(Vex)|F(Evex) , 481, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #294 [ref=1x]
- { F(Vec)|F(Vex) , 224, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #295 [ref=1x]
- { F(Vex) , 423, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #296 [ref=2x]
- { F(Vec)|F(Vex) , 429, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #297 [ref=1x]
- { F(Vec)|F(Vex) , 167, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #298 [ref=4x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #299 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #300 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #301 [ref=2x]
- { 0 , 358, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #302 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 79 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #303 [ref=4x]
- { F(Vec)|F(Vex)|F(Evex) , 360, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #304 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 218, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #305 [ref=1x]
- { F(Vec)|F(Vex) , 79 , 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #306 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 79 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #307 [ref=6x]
- { F(Vec)|F(Vex)|F(Evex) , 232, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #308 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex) , 362, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #309 [ref=4x]
- { F(Vec)|F(Vex) , 489, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #310 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex) , 221, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #311 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex) , 224, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #312 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex) , 227, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #313 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 230, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #314 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #315 [ref=5x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 233, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #316 [ref=1x]
- { 0 , 364, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #317 [ref=1x]
- { 0 , 366, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #318 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512B32) , 236, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #319 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512B64) , 236, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #320 [ref=1x]
- { F(Vec)|F(Vex) , 191, 2 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #321 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #322 [ref=2x]
- { F(Vec)|F(Vex) , 191, 2 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #323 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #324 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #325 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #326 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #327 [ref=13x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 490, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #328 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 491, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #329 [ref=1x]
- { F(Vec)|F(Evex) , 492, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #330 [ref=6x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 239, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #331 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 493, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #332 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #333 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512K) , 242, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #334 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512K_B32) , 242, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #335 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512K) , 245, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #336 [ref=4x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512K_B32) , 245, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #337 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512K_B64) , 245, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #338 [ref=2x]
- { F(Vec)|F(Vex) , 442, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #339 [ref=1x]
- { F(Vec)|F(Vex) , 443, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #340 [ref=1x]
- { F(Vec)|F(Vex) , 444, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #341 [ref=1x]
- { F(Vec)|F(Vex) , 445, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #342 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512K_B64) , 242, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #343 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #344 [ref=6x]
- { F(Vec)|F(Vex)|F(Evex)|F(PreferEvex)|F(Avx512KZ_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #345 [ref=4x]
- { F(Vec)|F(Vex) , 195, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #346 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 192, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #347 [ref=2x]
- { F(Vec)|F(Vex) , 171, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #348 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B64) , 85 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #349 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B64) , 175, 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #350 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex) , 446, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #351 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex) , 447, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #352 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex) , 494, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #353 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 495, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #354 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 496, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #355 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 497, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #356 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 498, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #357 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #358 [ref=4x]
- { F(Vec)|F(Vex) , 348, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #359 [ref=12x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #360 [ref=8x]
- { F(Vec)|F(Evex) , 499, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #361 [ref=4x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 248, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #362 [ref=6x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 251, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #363 [ref=9x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 254, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #364 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 257, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #365 [ref=4x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 260, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #366 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 203, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #367 [ref=6x]
- { F(Vec)|F(Vex) , 159, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #368 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 215, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #369 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 215, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #370 [ref=3x]
- { F(Vec)|F(Vex) , 368, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #371 [ref=4x]
- { F(Vec)|F(Vsib)|F(Evex)|F(Avx512K) , 263, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #372 [ref=2x]
- { F(Vec)|F(Vsib)|F(Evex)|F(Avx512K) , 370, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #373 [ref=2x]
- { F(Vec)|F(Vsib)|F(Evex)|F(Avx512K) , 372, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #374 [ref=2x]
- { F(Vec)|F(Vsib)|F(Evex)|F(Avx512K) , 266, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #375 [ref=2x]
- { F(Vec)|F(Vex) , 374, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #376 [ref=8x]
- { F(Vec)|F(Evex)|F(Avx512K) , 269, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #377 [ref=5x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 215, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #378 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 215, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #379 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 91 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #380 [ref=3x]
- { F(Vec)|F(Vex)|F(Evex) , 215, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #381 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B64) , 91 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #382 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 91 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #383 [ref=3x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 97 , 6 , CONTROL(None) , SINGLE_REG(None), 0 }, // #384 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #385 [ref=6x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #386 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) , 0 }, // #387 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512K_B32) , 269, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #388 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512K_B64) , 269, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #389 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 468, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #390 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 469, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #391 [ref=2x]
- { F(Vec)|F(Vex) , 469, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #392 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 480, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #393 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ) , 481, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #394 [ref=1x]
- { F(Vec)|F(Vex) , 215, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #395 [ref=2x]
- { F(Vec)|F(Vex) , 480, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #396 [ref=1x]
- { F(Vec)|F(Vex) , 481, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #397 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE_B64) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #398 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE_B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #399 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #400 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_ER_SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #401 [ref=1x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B32) , 195, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #402 [ref=2x]
- { F(Vec)|F(Evex)|F(Avx512KZ_B64) , 195, 2 , CONTROL(None) , SINGLE_REG(None), 0 }, // #403 [ref=2x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B32) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #404 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_B64) , 194, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #405 [ref=1x]
- { F(Vec)|F(Vex)|F(Evex)|F(Avx512KZ_ER_SAE_B64) , 206, 3 , CONTROL(None) , SINGLE_REG(None), 0 }, // #406 [ref=1x]
- { F(Vec)|F(Vex) , 108, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #407 [ref=2x]
- { 0 , 23 , 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #408 [ref=2x]
- { 0 , 61 , 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #409 [ref=2x]
- { F(Lock)|F(XAcquire)|F(XRelease) , 58 , 4 , CONTROL(None) , SINGLE_REG(None), 0 }, // #410 [ref=1x]
- { 0 , 500, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #411 [ref=1x]
- { F(Lock)|F(XAcquire) , 58 , 8 , CONTROL(None) , SINGLE_REG(RO) , 0 }, // #412 [ref=1x]
- { 0 , 501, 1 , CONTROL(None) , SINGLE_REG(None), 0 }, // #413 [ref=6x]
- { 0 , 502, 1 , CONTROL(None) , SINGLE_REG(None), 0 } // #414 [ref=6x]
+ { 0 , 0 , 0 , 0 , CONTROL(None) , SINGLE_REG(None)}, // #0 [ref=1x]
+ { 0 , 0 , 376, 1 , CONTROL(None) , SINGLE_REG(None)}, // #1 [ref=4x]
+ { 0 , 0 , 377, 1 , CONTROL(None) , SINGLE_REG(None)}, // #2 [ref=2x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 16 , 12, CONTROL(None) , SINGLE_REG(None)}, // #3 [ref=2x]
+ { 0 , 0 , 180, 2 , CONTROL(None) , SINGLE_REG(None)}, // #4 [ref=2x]
+ { F(Vec) , 0 , 79 , 1 , CONTROL(None) , SINGLE_REG(None)}, // #5 [ref=54x]
+ { F(Vec) , 0 , 106, 1 , CONTROL(None) , SINGLE_REG(None)}, // #6 [ref=19x]
+ { F(Vec) , 0 , 257, 1 , CONTROL(None) , SINGLE_REG(None)}, // #7 [ref=16x]
+ { F(Vec) , 0 , 215, 1 , CONTROL(None) , SINGLE_REG(None)}, // #8 [ref=20x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 28 , 11, CONTROL(None) , SINGLE_REG(RO) }, // #9 [ref=1x]
+ { F(Vex) , 0 , 272, 2 , CONTROL(None) , SINGLE_REG(None)}, // #10 [ref=3x]
+ { F(Vec) , 0 , 79 , 1 , CONTROL(None) , SINGLE_REG(RO) }, // #11 [ref=12x]
+ { 0 , 0 , 378, 1 , CONTROL(None) , SINGLE_REG(None)}, // #12 [ref=1x]
+ { F(Vex) , 0 , 274, 2 , CONTROL(None) , SINGLE_REG(None)}, // #13 [ref=5x]
+ { F(Vex) , 0 , 180, 2 , CONTROL(None) , SINGLE_REG(None)}, // #14 [ref=12x]
+ { F(Vec) , 0 , 379, 1 , CONTROL(None) , SINGLE_REG(None)}, // #15 [ref=4x]
+ { 0 , 0 , 276, 2 , CONTROL(None) , SINGLE_REG(None)}, // #16 [ref=3x]
+ { F(Mib) , 0 , 380, 1 , CONTROL(None) , SINGLE_REG(None)}, // #17 [ref=1x]
+ { 0 , 0 , 381, 1 , CONTROL(None) , SINGLE_REG(None)}, // #18 [ref=1x]
+ { 0 , 0 , 278, 2 , CONTROL(None) , SINGLE_REG(None)}, // #19 [ref=1x]
+ { F(Mib) , 0 , 382, 1 , CONTROL(None) , SINGLE_REG(None)}, // #20 [ref=1x]
+ { 0 , 0 , 280, 2 , CONTROL(None) , SINGLE_REG(None)}, // #21 [ref=1x]
+ { 0 , 0 , 179, 3 , CONTROL(None) , SINGLE_REG(None)}, // #22 [ref=35x]
+ { 0 , 0 , 383, 1 , CONTROL(None) , SINGLE_REG(None)}, // #23 [ref=3x]
+ { 0 , 0 , 123, 4 , CONTROL(None) , SINGLE_REG(None)}, // #24 [ref=1x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 123, 4 , CONTROL(None) , SINGLE_REG(None)}, // #25 [ref=3x]
+ { F(Rep)|F(RepIgnored) , 0 , 282, 2 , CONTROL(Call) , SINGLE_REG(None)}, // #26 [ref=1x]
+ { 0 , 0 , 384, 1 , CONTROL(None) , SINGLE_REG(None)}, // #27 [ref=1x]
+ { 0 , 0 , 385, 1 , CONTROL(None) , SINGLE_REG(None)}, // #28 [ref=2x]
+ { 0 , 0 , 359, 1 , CONTROL(None) , SINGLE_REG(None)}, // #29 [ref=1x]
+ { 0 , 0 , 108, 1 , CONTROL(None) , SINGLE_REG(None)}, // #30 [ref=83x]
+ { 0 , 0 , 386, 1 , CONTROL(None) , SINGLE_REG(None)}, // #31 [ref=24x]
+ { 0 , 0 , 387, 1 , CONTROL(None) , SINGLE_REG(None)}, // #32 [ref=6x]
+ { 0 , 0 , 388, 1 , CONTROL(None) , SINGLE_REG(None)}, // #33 [ref=13x]
+ { 0 , 0 , 389, 1 , CONTROL(None) , SINGLE_REG(None)}, // #34 [ref=1x]
+ { 0 , 0 , 16 , 12, CONTROL(None) , SINGLE_REG(None)}, // #35 [ref=1x]
+ { F(Rep) , 0 , 127, 4 , CONTROL(None) , SINGLE_REG(None)}, // #36 [ref=1x]
+ { F(Vec) , 0 , 390, 1 , CONTROL(None) , SINGLE_REG(None)}, // #37 [ref=2x]
+ { F(Vec) , 0 , 391, 1 , CONTROL(None) , SINGLE_REG(None)}, // #38 [ref=3x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 131, 4 , CONTROL(None) , SINGLE_REG(None)}, // #39 [ref=1x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 392, 1 , CONTROL(None) , SINGLE_REG(None)}, // #40 [ref=1x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 393, 1 , CONTROL(None) , SINGLE_REG(None)}, // #41 [ref=1x]
+ { 0 , 0 , 394, 1 , CONTROL(None) , SINGLE_REG(None)}, // #42 [ref=1x]
+ { 0 , 0 , 395, 1 , CONTROL(None) , SINGLE_REG(None)}, // #43 [ref=1x]
+ { 0 , 0 , 284, 2 , CONTROL(None) , SINGLE_REG(None)}, // #44 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 396, 1 , CONTROL(None) , SINGLE_REG(None)}, // #45 [ref=2x]
+ { F(Mmx)|F(Vec) , 0 , 397, 1 , CONTROL(None) , SINGLE_REG(None)}, // #46 [ref=2x]
+ { F(Mmx)|F(Vec) , 0 , 398, 1 , CONTROL(None) , SINGLE_REG(None)}, // #47 [ref=2x]
+ { F(Vec) , 0 , 399, 1 , CONTROL(None) , SINGLE_REG(None)}, // #48 [ref=2x]
+ { F(Vec) , 0 , 400, 1 , CONTROL(None) , SINGLE_REG(None)}, // #49 [ref=2x]
+ { F(Vec) , 0 , 401, 1 , CONTROL(None) , SINGLE_REG(None)}, // #50 [ref=2x]
+ { 0 , 0 , 402, 1 , CONTROL(None) , SINGLE_REG(None)}, // #51 [ref=1x]
+ { 0 , 0 , 403, 1 , CONTROL(None) , SINGLE_REG(None)}, // #52 [ref=2x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 286, 2 , CONTROL(None) , SINGLE_REG(None)}, // #53 [ref=2x]
+ { 0 , 0 , 39 , 4 , CONTROL(None) , SINGLE_REG(None)}, // #54 [ref=3x]
+ { F(Mmx) , 0 , 108, 1 , CONTROL(None) , SINGLE_REG(None)}, // #55 [ref=1x]
+ { 0 , 0 , 288, 2 , CONTROL(None) , SINGLE_REG(None)}, // #56 [ref=2x]
+ { 0 , 0 , 404, 1 , CONTROL(None) , SINGLE_REG(None)}, // #57 [ref=1x]
+ { F(Vec) , 0 , 405, 1 , CONTROL(None) , SINGLE_REG(None)}, // #58 [ref=2x]
+ { F(Vec) , 0 , 290, 2 , CONTROL(None) , SINGLE_REG(None)}, // #59 [ref=1x]
+ { F(FpuM32)|F(FpuM64) , 0 , 182, 3 , CONTROL(None) , SINGLE_REG(None)}, // #60 [ref=6x]
+ { 0 , 0 , 292, 2 , CONTROL(None) , SINGLE_REG(None)}, // #61 [ref=9x]
+ { F(FpuM80) , 0 , 406, 1 , CONTROL(None) , SINGLE_REG(None)}, // #62 [ref=2x]
+ { 0 , 0 , 293, 1 , CONTROL(None) , SINGLE_REG(None)}, // #63 [ref=13x]
+ { F(FpuM32)|F(FpuM64) , 0 , 294, 2 , CONTROL(None) , SINGLE_REG(None)}, // #64 [ref=2x]
+ { F(FpuM16)|F(FpuM32) , 0 , 407, 1 , CONTROL(None) , SINGLE_REG(None)}, // #65 [ref=9x]
+ { F(FpuM16)|F(FpuM32)|F(FpuM64) , 0 , 408, 1 , CONTROL(None) , SINGLE_REG(None)}, // #66 [ref=3x]
+ { F(FpuM32)|F(FpuM64)|F(FpuM80) , 0 , 409, 1 , CONTROL(None) , SINGLE_REG(None)}, // #67 [ref=2x]
+ { F(FpuM16) , 0 , 410, 1 , CONTROL(None) , SINGLE_REG(None)}, // #68 [ref=3x]
+ { F(FpuM16) , 0 , 411, 1 , CONTROL(None) , SINGLE_REG(None)}, // #69 [ref=2x]
+ { F(FpuM32)|F(FpuM64) , 0 , 295, 1 , CONTROL(None) , SINGLE_REG(None)}, // #70 [ref=1x]
+ { 0 , 0 , 412, 1 , CONTROL(None) , SINGLE_REG(None)}, // #71 [ref=2x]
+ { 0 , 0 , 413, 1 , CONTROL(None) , SINGLE_REG(None)}, // #72 [ref=1x]
+ { 0 , 0 , 39 , 10, CONTROL(None) , SINGLE_REG(None)}, // #73 [ref=1x]
+ { 0 , 0 , 414, 1 , CONTROL(None) , SINGLE_REG(None)}, // #74 [ref=1x]
+ { 0 , 0 , 415, 1 , CONTROL(None) , SINGLE_REG(None)}, // #75 [ref=2x]
+ { 0 , 0 , 343, 1 , CONTROL(None) , SINGLE_REG(None)}, // #76 [ref=3x]
+ { F(Rep) , 0 , 416, 1 , CONTROL(None) , SINGLE_REG(None)}, // #77 [ref=1x]
+ { F(Vec) , 0 , 296, 2 , CONTROL(None) , SINGLE_REG(None)}, // #78 [ref=1x]
+ { 0 , 0 , 417, 1 , CONTROL(None) , SINGLE_REG(None)}, // #79 [ref=2x]
+ { 0 , 0 , 418, 1 , CONTROL(None) , SINGLE_REG(None)}, // #80 [ref=8x]
+ { 0 , 0 , 298, 2 , CONTROL(None) , SINGLE_REG(None)}, // #81 [ref=3x]
+ { 0 , 0 , 300, 2 , CONTROL(None) , SINGLE_REG(None)}, // #82 [ref=1x]
+ { 0 , 0 , 108, 1 , CONTROL(Return) , SINGLE_REG(None)}, // #83 [ref=2x]
+ { 0 , 0 , 388, 1 , CONTROL(Return) , SINGLE_REG(None)}, // #84 [ref=1x]
+ { F(Rep)|F(RepIgnored) , 0 , 302, 2 , CONTROL(Branch) , SINGLE_REG(None)}, // #85 [ref=30x]
+ { F(Rep)|F(RepIgnored) , 0 , 304, 2 , CONTROL(Branch) , SINGLE_REG(None)}, // #86 [ref=1x]
+ { F(Rep)|F(RepIgnored) , 0 , 306, 2 , CONTROL(Jump) , SINGLE_REG(None)}, // #87 [ref=1x]
+ { F(Vex) , 0 , 419, 1 , CONTROL(None) , SINGLE_REG(None)}, // #88 [ref=19x]
+ { F(Vex) , 0 , 308, 2 , CONTROL(None) , SINGLE_REG(None)}, // #89 [ref=1x]
+ { F(Vex) , 0 , 310, 2 , CONTROL(None) , SINGLE_REG(None)}, // #90 [ref=1x]
+ { F(Vex) , 0 , 312, 2 , CONTROL(None) , SINGLE_REG(None)}, // #91 [ref=1x]
+ { F(Vex) , 0 , 314, 2 , CONTROL(None) , SINGLE_REG(None)}, // #92 [ref=1x]
+ { F(Vex) , 0 , 420, 1 , CONTROL(None) , SINGLE_REG(None)}, // #93 [ref=12x]
+ { F(Vex) , 0 , 421, 1 , CONTROL(None) , SINGLE_REG(None)}, // #94 [ref=8x]
+ { F(Vex) , 0 , 419, 1 , CONTROL(None) , SINGLE_REG(WO) }, // #95 [ref=8x]
+ { 0 , 0 , 422, 1 , CONTROL(None) , SINGLE_REG(None)}, // #96 [ref=2x]
+ { 0 , 0 , 316, 2 , CONTROL(None) , SINGLE_REG(None)}, // #97 [ref=1x]
+ { 0 , 0 , 318, 2 , CONTROL(Call) , SINGLE_REG(None)}, // #98 [ref=1x]
+ { F(Vec) , 0 , 224, 1 , CONTROL(None) , SINGLE_REG(None)}, // #99 [ref=2x]
+ { 0 , 0 , 423, 1 , CONTROL(None) , SINGLE_REG(None)}, // #100 [ref=2x]
+ { 0 , 0 , 320, 2 , CONTROL(None) , SINGLE_REG(None)}, // #101 [ref=2x]
+ { F(Vex) , 0 , 424, 1 , CONTROL(None) , SINGLE_REG(None)}, // #102 [ref=2x]
+ { 0 , 0 , 425, 1 , CONTROL(None) , SINGLE_REG(None)}, // #103 [ref=1x]
+ { 0 , 0 , 185, 3 , CONTROL(None) , SINGLE_REG(None)}, // #104 [ref=3x]
+ { 0 , 0 , 318, 2 , CONTROL(Jump) , SINGLE_REG(None)}, // #105 [ref=1x]
+ { 0 , 0 , 426, 1 , CONTROL(None) , SINGLE_REG(None)}, // #106 [ref=5x]
+ { F(Vex) , 0 , 427, 1 , CONTROL(None) , SINGLE_REG(None)}, // #107 [ref=2x]
+ { F(Rep) , 0 , 135, 4 , CONTROL(None) , SINGLE_REG(None)}, // #108 [ref=1x]
+ { 0 , 0 , 304, 2 , CONTROL(Branch) , SINGLE_REG(None)}, // #109 [ref=3x]
+ { 0 , 0 , 322, 2 , CONTROL(None) , SINGLE_REG(None)}, // #110 [ref=1x]
+ { F(Vex) , 0 , 428, 1 , CONTROL(None) , SINGLE_REG(None)}, // #111 [ref=2x]
+ { F(Vec) , 0 , 429, 1 , CONTROL(None) , SINGLE_REG(None)}, // #112 [ref=1x]
+ { F(Mmx) , 0 , 430, 1 , CONTROL(None) , SINGLE_REG(None)}, // #113 [ref=1x]
+ { 0 , 0 , 431, 1 , CONTROL(None) , SINGLE_REG(None)}, // #114 [ref=2x]
+ { F(XRelease) , 0 , 0 , 16, CONTROL(None) , SINGLE_REG(None)}, // #115 [ref=1x]
+ { 0 , 0 , 49 , 9 , CONTROL(None) , SINGLE_REG(None)}, // #116 [ref=1x]
+ { F(Vec) , 0 , 79 , 2 , CONTROL(None) , SINGLE_REG(None)}, // #117 [ref=6x]
+ { 0 , 0 , 73 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #118 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 324, 2 , CONTROL(None) , SINGLE_REG(None)}, // #119 [ref=1x]
+ { 0 , 0 , 432, 1 , CONTROL(None) , SINGLE_REG(None)}, // #120 [ref=1x]
+ { 0 , 0 , 77 , 2 , CONTROL(None) , SINGLE_REG(None)}, // #121 [ref=2x]
+ { F(Mmx)|F(Vec) , 0 , 433, 1 , CONTROL(None) , SINGLE_REG(None)}, // #122 [ref=1x]
+ { F(Vec) , 0 , 291, 1 , CONTROL(None) , SINGLE_REG(None)}, // #123 [ref=2x]
+ { F(Vec) , 0 , 230, 2 , CONTROL(None) , SINGLE_REG(None)}, // #124 [ref=4x]
+ { F(Vec) , 0 , 434, 1 , CONTROL(None) , SINGLE_REG(None)}, // #125 [ref=2x]
+ { F(Vec) , 0 , 80 , 1 , CONTROL(None) , SINGLE_REG(None)}, // #126 [ref=3x]
+ { F(Mmx) , 0 , 435, 1 , CONTROL(None) , SINGLE_REG(None)}, // #127 [ref=1x]
+ { F(Vec) , 0 , 107, 1 , CONTROL(None) , SINGLE_REG(None)}, // #128 [ref=1x]
+ { F(Vec) , 0 , 233, 1 , CONTROL(None) , SINGLE_REG(None)}, // #129 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 103, 5 , CONTROL(None) , SINGLE_REG(None)}, // #130 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 436, 1 , CONTROL(None) , SINGLE_REG(None)}, // #131 [ref=1x]
+ { F(Rep) , 0 , 139, 4 , CONTROL(None) , SINGLE_REG(None)}, // #132 [ref=1x]
+ { F(Vec) , 0 , 106, 2 , CONTROL(None) , SINGLE_REG(None)}, // #133 [ref=1x]
+ { F(Vec) , 0 , 326, 2 , CONTROL(None) , SINGLE_REG(None)}, // #134 [ref=1x]
+ { 0 , 0 , 328, 2 , CONTROL(None) , SINGLE_REG(None)}, // #135 [ref=2x]
+ { 0 , 0 , 437, 1 , CONTROL(None) , SINGLE_REG(None)}, // #136 [ref=1x]
+ { F(Vex) , 0 , 330, 2 , CONTROL(None) , SINGLE_REG(None)}, // #137 [ref=1x]
+ { 0 , 0 , 438, 1 , CONTROL(None) , SINGLE_REG(None)}, // #138 [ref=1x]
+ { 0 , 0 , 439, 1 , CONTROL(None) , SINGLE_REG(None)}, // #139 [ref=1x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 287, 1 , CONTROL(None) , SINGLE_REG(None)}, // #140 [ref=2x]
+ { 0 , 0 , 108, 5 , CONTROL(None) , SINGLE_REG(None)}, // #141 [ref=1x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 16 , 12, CONTROL(None) , SINGLE_REG(RO) }, // #142 [ref=1x]
+ { 0 , 0 , 440, 1 , CONTROL(None) , SINGLE_REG(None)}, // #143 [ref=1x]
+ { F(Rep) , 0 , 441, 1 , CONTROL(None) , SINGLE_REG(None)}, // #144 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 332, 2 , CONTROL(None) , SINGLE_REG(None)}, // #145 [ref=37x]
+ { F(Mmx)|F(Vec) , 0 , 334, 2 , CONTROL(None) , SINGLE_REG(None)}, // #146 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 332, 2 , CONTROL(None) , SINGLE_REG(RO) }, // #147 [ref=6x]
+ { F(Mmx)|F(Vec) , 0 , 332, 2 , CONTROL(None) , SINGLE_REG(WO) }, // #148 [ref=16x]
+ { F(Mmx) , 0 , 332, 1 , CONTROL(None) , SINGLE_REG(None)}, // #149 [ref=26x]
+ { F(Vec) , 0 , 79 , 1 , CONTROL(None) , SINGLE_REG(WO) }, // #150 [ref=4x]
+ { F(Vec) , 0 , 442, 1 , CONTROL(None) , SINGLE_REG(None)}, // #151 [ref=1x]
+ { F(Vec) , 0 , 443, 1 , CONTROL(None) , SINGLE_REG(None)}, // #152 [ref=1x]
+ { F(Vec) , 0 , 444, 1 , CONTROL(None) , SINGLE_REG(None)}, // #153 [ref=1x]
+ { F(Vec) , 0 , 445, 1 , CONTROL(None) , SINGLE_REG(None)}, // #154 [ref=1x]
+ { F(Vec) , 0 , 446, 1 , CONTROL(None) , SINGLE_REG(None)}, // #155 [ref=1x]
+ { F(Vec) , 0 , 447, 1 , CONTROL(None) , SINGLE_REG(None)}, // #156 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 336, 2 , CONTROL(None) , SINGLE_REG(None)}, // #157 [ref=1x]
+ { F(Vec) , 0 , 448, 1 , CONTROL(None) , SINGLE_REG(None)}, // #158 [ref=1x]
+ { F(Vec) , 0 , 449, 1 , CONTROL(None) , SINGLE_REG(None)}, // #159 [ref=1x]
+ { F(Vec) , 0 , 450, 1 , CONTROL(None) , SINGLE_REG(None)}, // #160 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 451, 1 , CONTROL(None) , SINGLE_REG(None)}, // #161 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 452, 1 , CONTROL(None) , SINGLE_REG(None)}, // #162 [ref=1x]
+ { F(Vec) , 0 , 260, 1 , CONTROL(None) , SINGLE_REG(None)}, // #163 [ref=2x]
+ { 0 , 0 , 143, 4 , CONTROL(None) , SINGLE_REG(None)}, // #164 [ref=1x]
+ { F(Mmx) , 0 , 334, 1 , CONTROL(None) , SINGLE_REG(None)}, // #165 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 338, 2 , CONTROL(None) , SINGLE_REG(None)}, // #166 [ref=8x]
+ { F(Vec) , 0 , 453, 1 , CONTROL(None) , SINGLE_REG(None)}, // #167 [ref=2x]
+ { 0 , 0 , 454, 1 , CONTROL(None) , SINGLE_REG(None)}, // #168 [ref=1x]
+ { F(Mmx)|F(Vec) , 0 , 340, 2 , CONTROL(None) , SINGLE_REG(None)}, // #169 [ref=3x]
+ { 0 , 0 , 147, 4 , CONTROL(None) , SINGLE_REG(None)}, // #170 [ref=1x]
+ { 0 , 0 , 455, 1 , CONTROL(None) , SINGLE_REG(None)}, // #171 [ref=8x]
+ { 0 , 0 , 456, 1 , CONTROL(None) , SINGLE_REG(None)}, // #172 [ref=4x]
+ { 0 , 0 , 457, 1 , CONTROL(None) , SINGLE_REG(None)}, // #173 [ref=8x]
+ { 0 , 0 , 342, 2 , CONTROL(None) , SINGLE_REG(None)}, // #174 [ref=1x]
+ { F(Rep)|F(RepIgnored) , 0 , 344, 2 , CONTROL(Return) , SINGLE_REG(None)}, // #175 [ref=1x]
+ { 0 , 0 , 344, 2 , CONTROL(Return) , SINGLE_REG(None)}, // #176 [ref=1x]
+ { F(Vex) , 0 , 346, 2 , CONTROL(None) , SINGLE_REG(None)}, // #177 [ref=1x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 16 , 12, CONTROL(None) , SINGLE_REG(WO) }, // #178 [ref=3x]
+ { F(Rep) , 0 , 151, 4 , CONTROL(None) , SINGLE_REG(None)}, // #179 [ref=1x]
+ { 0 , 0 , 458, 1 , CONTROL(None) , SINGLE_REG(None)}, // #180 [ref=30x]
+ { 0 , 0 , 188, 3 , CONTROL(None) , SINGLE_REG(None)}, // #181 [ref=2x]
+ { 0 , 0 , 459, 1 , CONTROL(None) , SINGLE_REG(None)}, // #182 [ref=3x]
+ { F(Rep) , 0 , 155, 4 , CONTROL(None) , SINGLE_REG(None)}, // #183 [ref=1x]
+ { F(Vex) , 0 , 460, 1 , CONTROL(None) , SINGLE_REG(None)}, // #184 [ref=5x]
+ { 0 , 0 , 66 , 7 , CONTROL(None) , SINGLE_REG(None)}, // #185 [ref=1x]
+ { F(Tsib)|F(Vex) , 0 , 461, 1 , CONTROL(None) , SINGLE_REG(None)}, // #186 [ref=2x]
+ { F(Vex) , 0 , 388, 1 , CONTROL(None) , SINGLE_REG(None)}, // #187 [ref=1x]
+ { F(Tsib)|F(Vex) , 0 , 462, 1 , CONTROL(None) , SINGLE_REG(None)}, // #188 [ref=1x]
+ { F(Vex) , 0 , 463, 1 , CONTROL(None) , SINGLE_REG(None)}, // #189 [ref=1x]
+ { 0 , 0 , 464, 1 , CONTROL(None) , SINGLE_REG(None)}, // #190 [ref=2x]
+ { 0 , 0 , 180, 1 , CONTROL(None) , SINGLE_REG(None)}, // #191 [ref=2x]
+ { 0 , 0 , 465, 1 , CONTROL(None) , SINGLE_REG(None)}, // #192 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(T4X) , 466, 1 , CONTROL(None) , SINGLE_REG(None)}, // #193 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(T4X) , 467, 1 , CONTROL(None) , SINGLE_REG(None)}, // #194 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64)|X(ER)|X(SAE) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #195 [ref=22x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32)|X(ER)|X(SAE) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #196 [ref=22x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(ER)|X(SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None)}, // #197 [ref=18x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(ER)|X(SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None)}, // #198 [ref=17x]
+ { F(Vec)|F(Vex) , 0 , 191, 2 , CONTROL(None) , SINGLE_REG(None)}, // #199 [ref=15x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #200 [ref=5x]
+ { F(Vec)|F(Vex) , 0 , 79 , 1 , CONTROL(None) , SINGLE_REG(None)}, // #201 [ref=17x]
+ { F(Vec)|F(Vex) , 0 , 215, 1 , CONTROL(None) , SINGLE_REG(None)}, // #202 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #203 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #204 [ref=4x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #205 [ref=10x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #206 [ref=12x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) }, // #207 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) }, // #208 [ref=6x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #209 [ref=19x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #210 [ref=12x]
+ { F(Vec)|F(Vex) , 0 , 194, 2 , CONTROL(None) , SINGLE_REG(None)}, // #211 [ref=6x]
+ { F(Vec)|F(Vex) , 0 , 348, 2 , CONTROL(None) , SINGLE_REG(None)}, // #212 [ref=3x]
+ { F(Vec)|F(Vex)|F(EvexTransformable) , 0 , 470, 1 , CONTROL(None) , SINGLE_REG(None)}, // #213 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 471, 1 , CONTROL(None) , SINGLE_REG(None)}, // #214 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 472, 1 , CONTROL(None) , SINGLE_REG(None)}, // #215 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 473, 1 , CONTROL(None) , SINGLE_REG(None)}, // #216 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 474, 1 , CONTROL(None) , SINGLE_REG(None)}, // #217 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 471, 1 , CONTROL(None) , SINGLE_REG(None)}, // #218 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 475, 1 , CONTROL(None) , SINGLE_REG(None)}, // #219 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexKReg) , X(K)|X(Z)|X(B64)|X(SAE) , 197, 3 , CONTROL(None) , SINGLE_REG(None)}, // #220 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexKReg) , X(K)|X(Z)|X(B32)|X(SAE) , 197, 3 , CONTROL(None) , SINGLE_REG(None)}, // #221 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexKReg) , X(K)|X(Z)|X(SAE) , 476, 1 , CONTROL(None) , SINGLE_REG(None)}, // #222 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexKReg) , X(K)|X(Z)|X(SAE) , 477, 1 , CONTROL(None) , SINGLE_REG(None)}, // #223 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(SAE) , 106, 1 , CONTROL(None) , SINGLE_REG(None)}, // #224 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(SAE) , 257, 1 , CONTROL(None) , SINGLE_REG(None)}, // #225 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 200, 3 , CONTROL(None) , SINGLE_REG(None)}, // #226 [ref=6x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 203, 3 , CONTROL(None) , SINGLE_REG(None)}, // #227 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32)|X(ER)|X(SAE) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #228 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 350, 2 , CONTROL(None) , SINGLE_REG(None)}, // #229 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64)|X(ER)|X(SAE) , 350, 2 , CONTROL(None) , SINGLE_REG(None)}, // #230 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64)|X(ER)|X(SAE) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #231 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64)|X(ER)|X(SAE) , 350, 2 , CONTROL(None) , SINGLE_REG(None)}, // #232 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(SAE) , 203, 3 , CONTROL(None) , SINGLE_REG(None)}, // #233 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32)|X(ER)|X(SAE) , 203, 3 , CONTROL(None) , SINGLE_REG(None)}, // #234 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(SAE) , 209, 3 , CONTROL(None) , SINGLE_REG(None)}, // #235 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32)|X(ER)|X(SAE) , 203, 3 , CONTROL(None) , SINGLE_REG(None)}, // #236 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32)|X(ER)|X(SAE) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #237 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(ER)|X(SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None)}, // #238 [ref=1x]
+ { F(Vec)|F(Evex) , X(ER)|X(SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None)}, // #239 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(ER)|X(SAE) , 478, 1 , CONTROL(None) , SINGLE_REG(None)}, // #240 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None)}, // #241 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(ER)|X(SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None)}, // #242 [ref=1x]
+ { F(Vec)|F(Evex) , X(ER)|X(SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None)}, // #243 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64)|X(SAE) , 350, 2 , CONTROL(None) , SINGLE_REG(None)}, // #244 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64)|X(SAE) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #245 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64)|X(SAE) , 350, 2 , CONTROL(None) , SINGLE_REG(None)}, // #246 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32)|X(SAE) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #247 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32)|X(SAE) , 203, 3 , CONTROL(None) , SINGLE_REG(None)}, // #248 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32)|X(SAE) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #249 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None)}, // #250 [ref=1x]
+ { F(Vec)|F(Evex) , X(SAE) , 399, 1 , CONTROL(None) , SINGLE_REG(None)}, // #251 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None)}, // #252 [ref=1x]
+ { F(Vec)|F(Evex) , X(SAE) , 401, 1 , CONTROL(None) , SINGLE_REG(None)}, // #253 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 203, 3 , CONTROL(None) , SINGLE_REG(None)}, // #254 [ref=1x]
+ { F(Vec)|F(Evex) , X(ER)|X(SAE) , 478, 1 , CONTROL(None) , SINGLE_REG(None)}, // #255 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #256 [ref=3x]
+ { F(Vec)|F(Vex) , 0 , 194, 1 , CONTROL(None) , SINGLE_REG(None)}, // #257 [ref=9x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(SAE)|X(B64) , 83 , 1 , CONTROL(None) , SINGLE_REG(None)}, // #258 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(SAE)|X(B32) , 83 , 1 , CONTROL(None) , SINGLE_REG(None)}, // #259 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #260 [ref=9x]
+ { F(Vec)|F(Vex)|F(EvexTransformable) , 0 , 210, 1 , CONTROL(None) , SINGLE_REG(None)}, // #261 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 479, 1 , CONTROL(None) , SINGLE_REG(None)}, // #262 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 211, 1 , CONTROL(None) , SINGLE_REG(None)}, // #263 [ref=4x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 405, 1 , CONTROL(None) , SINGLE_REG(None)}, // #264 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64)|X(SAE) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #265 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32)|X(SAE) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #266 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(SAE) , 480, 1 , CONTROL(None) , SINGLE_REG(None)}, // #267 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(SAE) , 481, 1 , CONTROL(None) , SINGLE_REG(None)}, // #268 [ref=4x]
+ { F(Vec)|F(Vex) , 0 , 159, 4 , CONTROL(None) , SINGLE_REG(None)}, // #269 [ref=13x]
+ { F(Vec)|F(Vex) , 0 , 352, 2 , CONTROL(None) , SINGLE_REG(None)}, // #270 [ref=4x]
+ { F(Vec)|F(Vex) , 0 , 354, 2 , CONTROL(None) , SINGLE_REG(None)}, // #271 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(B64) , 482, 1 , CONTROL(None) , SINGLE_REG(None)}, // #272 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(B32) , 482, 1 , CONTROL(None) , SINGLE_REG(None)}, // #273 [ref=1x]
+ { F(Vec)|F(Evex) , X(K) , 483, 1 , CONTROL(None) , SINGLE_REG(None)}, // #274 [ref=1x]
+ { F(Vec)|F(Evex) , X(K) , 484, 1 , CONTROL(None) , SINGLE_REG(None)}, // #275 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 206, 2 , CONTROL(None) , SINGLE_REG(None)}, // #276 [ref=7x]
+ { F(Vec)|F(Vex) , 0 , 106, 1 , CONTROL(None) , SINGLE_REG(None)}, // #277 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 257, 1 , CONTROL(None) , SINGLE_REG(None)}, // #278 [ref=1x]
+ { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(EvexTwoOp) , X(K) , 163, 4 , CONTROL(None) , SINGLE_REG(None)}, // #279 [ref=2x]
+ { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(EvexTwoOp) , X(K) , 113, 5 , CONTROL(None) , SINGLE_REG(None)}, // #280 [ref=2x]
+ { F(Vsib)|F(Evex) , X(K) , 485, 1 , CONTROL(None) , SINGLE_REG(None)}, // #281 [ref=4x]
+ { F(Vsib)|F(Evex) , X(K) , 486, 1 , CONTROL(None) , SINGLE_REG(None)}, // #282 [ref=4x]
+ { F(Vsib)|F(Evex) , X(K) , 487, 1 , CONTROL(None) , SINGLE_REG(None)}, // #283 [ref=8x]
+ { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(EvexTwoOp) , X(K) , 118, 5 , CONTROL(None) , SINGLE_REG(None)}, // #284 [ref=2x]
+ { F(Vec)|F(Vsib)|F(Vex)|F(Evex)|F(EvexTwoOp) , X(K) , 212, 3 , CONTROL(None) , SINGLE_REG(None)}, // #285 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None)}, // #286 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None)}, // #287 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64)|X(SAE) , 215, 3 , CONTROL(None) , SINGLE_REG(None)}, // #288 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32)|X(SAE) , 215, 3 , CONTROL(None) , SINGLE_REG(None)}, // #289 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #290 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #291 [ref=22x]
+ { F(Vec)|F(Vex)|F(EvexTransformable) , 0 , 356, 1 , CONTROL(None) , SINGLE_REG(None)}, // #292 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 356, 2 , CONTROL(None) , SINGLE_REG(None)}, // #293 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 488, 1 , CONTROL(None) , SINGLE_REG(None)}, // #294 [ref=4x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 481, 1 , CONTROL(None) , SINGLE_REG(None)}, // #295 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 224, 2 , CONTROL(None) , SINGLE_REG(None)}, // #296 [ref=1x]
+ { F(Vex) , 0 , 423, 1 , CONTROL(None) , SINGLE_REG(None)}, // #297 [ref=2x]
+ { F(Vec)|F(Vex) , 0 , 429, 1 , CONTROL(None) , SINGLE_REG(None)}, // #298 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 167, 4 , CONTROL(None) , SINGLE_REG(None)}, // #299 [ref=4x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64)|X(SAE) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #300 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32)|X(SAE) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #301 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None)}, // #302 [ref=2x]
+ { 0 , 0 , 358, 2 , CONTROL(None) , SINGLE_REG(None)}, // #303 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 79 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #304 [ref=4x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 360, 2 , CONTROL(None) , SINGLE_REG(None)}, // #305 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 218, 3 , CONTROL(None) , SINGLE_REG(None)}, // #306 [ref=1x]
+ { F(Vec)|F(Vex)|F(EvexTransformable) , 0 , 79 , 4 , CONTROL(None) , SINGLE_REG(None)}, // #307 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 79 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #308 [ref=6x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 232, 1 , CONTROL(None) , SINGLE_REG(None)}, // #309 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 362, 2 , CONTROL(None) , SINGLE_REG(None)}, // #310 [ref=4x]
+ { F(Vec)|F(Vex) , 0 , 489, 1 , CONTROL(None) , SINGLE_REG(None)}, // #311 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 221, 3 , CONTROL(None) , SINGLE_REG(None)}, // #312 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 224, 3 , CONTROL(None) , SINGLE_REG(None)}, // #313 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 227, 3 , CONTROL(None) , SINGLE_REG(None)}, // #314 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 230, 3 , CONTROL(None) , SINGLE_REG(None)}, // #315 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #316 [ref=5x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 233, 3 , CONTROL(None) , SINGLE_REG(None)}, // #317 [ref=1x]
+ { 0 , 0 , 364, 2 , CONTROL(None) , SINGLE_REG(None)}, // #318 [ref=1x]
+ { 0 , 0 , 366, 2 , CONTROL(None) , SINGLE_REG(None)}, // #319 [ref=1x]
+ { F(Vec)|F(Evex) , X(B32) , 236, 3 , CONTROL(None) , SINGLE_REG(None)}, // #320 [ref=1x]
+ { F(Vec)|F(Evex) , X(B64) , 236, 3 , CONTROL(None) , SINGLE_REG(None)}, // #321 [ref=1x]
+ { F(Vec)|F(Vex)|F(EvexTransformable) , 0 , 191, 2 , CONTROL(None) , SINGLE_REG(RO) }, // #322 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) }, // #323 [ref=2x]
+ { F(Vec)|F(Vex)|F(EvexTransformable) , 0 , 191, 2 , CONTROL(None) , SINGLE_REG(WO) }, // #324 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #325 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #326 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) }, // #327 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #328 [ref=13x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 490, 1 , CONTROL(None) , SINGLE_REG(None)}, // #329 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 491, 1 , CONTROL(None) , SINGLE_REG(None)}, // #330 [ref=1x]
+ { F(Vec)|F(Evex) , 0 , 492, 1 , CONTROL(None) , SINGLE_REG(None)}, // #331 [ref=6x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 239, 3 , CONTROL(None) , SINGLE_REG(None)}, // #332 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 493, 1 , CONTROL(None) , SINGLE_REG(None)}, // #333 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #334 [ref=1x]
+ { F(Vec)|F(Evex) , X(K) , 242, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #335 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(B32) , 242, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #336 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexKReg) , X(K) , 245, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #337 [ref=4x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexKReg) , X(K)|X(B32) , 245, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #338 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexKReg) , X(K)|X(B64) , 245, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #339 [ref=2x]
+ { F(Vec)|F(Vex) , 0 , 442, 1 , CONTROL(None) , SINGLE_REG(None)}, // #340 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 443, 1 , CONTROL(None) , SINGLE_REG(None)}, // #341 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 444, 1 , CONTROL(None) , SINGLE_REG(None)}, // #342 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 445, 1 , CONTROL(None) , SINGLE_REG(None)}, // #343 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(B64) , 242, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #344 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #345 [ref=6x]
+ { F(Vec)|F(Vex)|F(Evex)|F(PreferEvex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #346 [ref=4x]
+ { F(Vec)|F(Vex) , 0 , 195, 1 , CONTROL(None) , SINGLE_REG(None)}, // #347 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 192, 2 , CONTROL(None) , SINGLE_REG(None)}, // #348 [ref=2x]
+ { F(Vec)|F(Vex) , 0 , 171, 4 , CONTROL(None) , SINGLE_REG(None)}, // #349 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64) , 85 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #350 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64) , 175, 4 , CONTROL(None) , SINGLE_REG(None)}, // #351 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 446, 1 , CONTROL(None) , SINGLE_REG(None)}, // #352 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 447, 1 , CONTROL(None) , SINGLE_REG(None)}, // #353 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 494, 1 , CONTROL(None) , SINGLE_REG(None)}, // #354 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 495, 1 , CONTROL(None) , SINGLE_REG(None)}, // #355 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 496, 1 , CONTROL(None) , SINGLE_REG(None)}, // #356 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 497, 1 , CONTROL(None) , SINGLE_REG(None)}, // #357 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 498, 1 , CONTROL(None) , SINGLE_REG(None)}, // #358 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #359 [ref=4x]
+ { F(Vec)|F(Vex) , 0 , 348, 1 , CONTROL(None) , SINGLE_REG(None)}, // #360 [ref=12x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 191, 3 , CONTROL(None) , SINGLE_REG(RO) }, // #361 [ref=8x]
+ { F(Vec)|F(Evex) , 0 , 499, 1 , CONTROL(None) , SINGLE_REG(None)}, // #362 [ref=4x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 248, 3 , CONTROL(None) , SINGLE_REG(None)}, // #363 [ref=6x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 251, 3 , CONTROL(None) , SINGLE_REG(None)}, // #364 [ref=9x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 254, 3 , CONTROL(None) , SINGLE_REG(None)}, // #365 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 257, 3 , CONTROL(None) , SINGLE_REG(None)}, // #366 [ref=4x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 260, 3 , CONTROL(None) , SINGLE_REG(None)}, // #367 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 203, 3 , CONTROL(None) , SINGLE_REG(None)}, // #368 [ref=6x]
+ { F(Vec)|F(Vex) , 0 , 159, 2 , CONTROL(None) , SINGLE_REG(None)}, // #369 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 215, 3 , CONTROL(None) , SINGLE_REG(None)}, // #370 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 215, 3 , CONTROL(None) , SINGLE_REG(None)}, // #371 [ref=3x]
+ { F(Vec)|F(Vex) , 0 , 368, 2 , CONTROL(None) , SINGLE_REG(None)}, // #372 [ref=4x]
+ { F(Vec)|F(Vsib)|F(Evex) , X(K) , 263, 3 , CONTROL(None) , SINGLE_REG(None)}, // #373 [ref=2x]
+ { F(Vec)|F(Vsib)|F(Evex) , X(K) , 370, 2 , CONTROL(None) , SINGLE_REG(None)}, // #374 [ref=2x]
+ { F(Vec)|F(Vsib)|F(Evex) , X(K) , 372, 2 , CONTROL(None) , SINGLE_REG(None)}, // #375 [ref=2x]
+ { F(Vec)|F(Vsib)|F(Evex) , X(K) , 266, 3 , CONTROL(None) , SINGLE_REG(None)}, // #376 [ref=2x]
+ { F(Vec)|F(Vex) , 0 , 374, 2 , CONTROL(None) , SINGLE_REG(None)}, // #377 [ref=8x]
+ { F(Vec)|F(Evex) , X(K) , 269, 3 , CONTROL(None) , SINGLE_REG(None)}, // #378 [ref=5x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 215, 3 , CONTROL(None) , SINGLE_REG(None)}, // #379 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 215, 3 , CONTROL(None) , SINGLE_REG(None)}, // #380 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 91 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #381 [ref=3x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , 0 , 215, 3 , CONTROL(None) , SINGLE_REG(None)}, // #382 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64) , 91 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #383 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 91 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #384 [ref=3x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 97 , 6 , CONTROL(None) , SINGLE_REG(None)}, // #385 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #386 [ref=6x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #387 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64) , 191, 3 , CONTROL(None) , SINGLE_REG(WO) }, // #388 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(B32) , 269, 3 , CONTROL(None) , SINGLE_REG(None)}, // #389 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(B64) , 269, 3 , CONTROL(None) , SINGLE_REG(None)}, // #390 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 468, 1 , CONTROL(None) , SINGLE_REG(None)}, // #391 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 469, 1 , CONTROL(None) , SINGLE_REG(None)}, // #392 [ref=2x]
+ { F(Vec)|F(Vex) , 0 , 469, 1 , CONTROL(None) , SINGLE_REG(None)}, // #393 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 480, 1 , CONTROL(None) , SINGLE_REG(None)}, // #394 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z) , 481, 1 , CONTROL(None) , SINGLE_REG(None)}, // #395 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 215, 2 , CONTROL(None) , SINGLE_REG(None)}, // #396 [ref=2x]
+ { F(Vec)|F(Vex) , 0 , 480, 1 , CONTROL(None) , SINGLE_REG(None)}, // #397 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 481, 1 , CONTROL(None) , SINGLE_REG(None)}, // #398 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64)|X(ER)|X(SAE) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #399 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32)|X(ER)|X(SAE) , 191, 3 , CONTROL(None) , SINGLE_REG(None)}, // #400 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(ER)|X(SAE) , 468, 1 , CONTROL(None) , SINGLE_REG(None)}, // #401 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(ER)|X(SAE) , 469, 1 , CONTROL(None) , SINGLE_REG(None)}, // #402 [ref=1x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B32) , 195, 2 , CONTROL(None) , SINGLE_REG(None)}, // #403 [ref=2x]
+ { F(Vec)|F(Evex) , X(K)|X(Z)|X(B64) , 195, 2 , CONTROL(None) , SINGLE_REG(None)}, // #404 [ref=2x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B32) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #405 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64) , 194, 3 , CONTROL(None) , SINGLE_REG(None)}, // #406 [ref=1x]
+ { F(Vec)|F(Vex)|F(Evex)|F(EvexCompat) , X(K)|X(Z)|X(B64)|X(ER)|X(SAE) , 206, 3 , CONTROL(None) , SINGLE_REG(None)}, // #407 [ref=1x]
+ { F(Vec)|F(Vex) , 0 , 108, 1 , CONTROL(None) , SINGLE_REG(None)}, // #408 [ref=2x]
+ { 0 , 0 , 23 , 1 , CONTROL(None) , SINGLE_REG(None)}, // #409 [ref=2x]
+ { 0 , 0 , 61 , 1 , CONTROL(None) , SINGLE_REG(None)}, // #410 [ref=2x]
+ { F(Lock)|F(XAcquire)|F(XRelease) , 0 , 58 , 4 , CONTROL(None) , SINGLE_REG(None)}, // #411 [ref=1x]
+ { 0 , 0 , 500, 1 , CONTROL(None) , SINGLE_REG(None)}, // #412 [ref=1x]
+ { F(Lock)|F(XAcquire) , 0 , 58 , 8 , CONTROL(None) , SINGLE_REG(RO) }, // #413 [ref=1x]
+ { 0 , 0 , 501, 1 , CONTROL(None) , SINGLE_REG(None)}, // #414 [ref=6x]
+ { 0 , 0 , 502, 1 , CONTROL(None) , SINGLE_REG(None)} // #415 [ref=6x]
};
#undef SINGLE_REG
#undef CONTROL
+#undef X
#undef F
// ----------------------------------------------------------------------------
// ${InstCommonTable:End}
@@ -4214,4 +4217,4 @@ UNIT(x86_inst_db) {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86
+#endif // !ASMJIT_NO_X86
diff --git a/erts/emulator/asmjit/x86/x86instdb.h b/erts/emulator/asmjit/x86/x86instdb.h
index 6de7527e2e..4c86c9f0ab 100644
--- a/erts/emulator/asmjit/x86/x86instdb.h
+++ b/erts/emulator/asmjit/x86/x86instdb.h
@@ -40,10 +40,14 @@ namespace InstDB {
//! Describes which mode is supported by an instruction or instruction signature.
enum Mode : uint32_t {
- kModeNone = 0x00u, //!< Invalid.
- kModeX86 = 0x01u, //!< X86 mode supported.
- kModeX64 = 0x02u, //!< X64 mode supported.
- kModeAny = 0x03u //!< Both X86 and X64 modes supported.
+ //! Invalid mode.
+ kModeNone = 0x00u,
+ //! X86 mode supported.
+ kModeX86 = 0x01u,
+ //! X64 mode supported.
+ kModeX64 = 0x02u,
+ //! Both X86 and X64 modes supported.
+ kModeAny = 0x03u
};
static constexpr uint32_t modeFromArch(uint32_t arch) noexcept {
@@ -57,45 +61,45 @@ static constexpr uint32_t modeFromArch(uint32_t arch) noexcept {
//! Operand flags (X86).
enum OpFlags : uint32_t {
- kOpNone = 0x00000000u, //!< No flags.
-
- kOpGpbLo = 0x00000001u, //!< Operand can be low 8-bit GPB register.
- kOpGpbHi = 0x00000002u, //!< Operand can be high 8-bit GPB register.
- kOpGpw = 0x00000004u, //!< Operand can be 16-bit GPW register.
- kOpGpd = 0x00000008u, //!< Operand can be 32-bit GPD register.
- kOpGpq = 0x00000010u, //!< Operand can be 64-bit GPQ register.
- kOpXmm = 0x00000020u, //!< Operand can be 128-bit XMM register.
- kOpYmm = 0x00000040u, //!< Operand can be 256-bit YMM register.
- kOpZmm = 0x00000080u, //!< Operand can be 512-bit ZMM register.
- kOpMm = 0x00000100u, //!< Operand can be 64-bit MM register.
- kOpKReg = 0x00000200u, //!< Operand can be 64-bit K register.
- kOpSReg = 0x00000400u, //!< Operand can be SReg (segment register).
- kOpCReg = 0x00000800u, //!< Operand can be CReg (control register).
- kOpDReg = 0x00001000u, //!< Operand can be DReg (debug register).
- kOpSt = 0x00002000u, //!< Operand can be 80-bit ST register (X87).
- kOpBnd = 0x00004000u, //!< Operand can be 128-bit BND register.
- kOpTmm = 0x00008000u, //!< Operand can be 0..8192-bit TMM register.
- kOpAllRegs = 0x0000FFFFu, //!< Combination of all possible registers.
-
- kOpI4 = 0x00010000u, //!< Operand can be unsigned 4-bit immediate.
- kOpU4 = 0x00020000u, //!< Operand can be unsigned 4-bit immediate.
- kOpI8 = 0x00040000u, //!< Operand can be signed 8-bit immediate.
- kOpU8 = 0x00080000u, //!< Operand can be unsigned 8-bit immediate.
- kOpI16 = 0x00100000u, //!< Operand can be signed 16-bit immediate.
- kOpU16 = 0x00200000u, //!< Operand can be unsigned 16-bit immediate.
- kOpI32 = 0x00400000u, //!< Operand can be signed 32-bit immediate.
- kOpU32 = 0x00800000u, //!< Operand can be unsigned 32-bit immediate.
- kOpI64 = 0x01000000u, //!< Operand can be signed 64-bit immediate.
- kOpU64 = 0x02000000u, //!< Operand can be unsigned 64-bit immediate.
- kOpAllImm = 0x03FF0000u, //!< Operand can be any immediate.
-
- kOpMem = 0x04000000u, //!< Operand can be a scalar memory pointer.
- kOpVm = 0x08000000u, //!< Operand can be a vector memory pointer.
-
- kOpRel8 = 0x10000000u, //!< Operand can be relative 8-bit displacement.
- kOpRel32 = 0x20000000u, //!< Operand can be relative 32-bit displacement.
-
- kOpImplicit = 0x80000000u //!< Operand is implicit.
+ kOpNone = 0x00000000u, //!< No flags.
+
+ kOpGpbLo = 0x00000001u, //!< Operand can be low 8-bit GPB register.
+ kOpGpbHi = 0x00000002u, //!< Operand can be high 8-bit GPB register.
+ kOpGpw = 0x00000004u, //!< Operand can be 16-bit GPW register.
+ kOpGpd = 0x00000008u, //!< Operand can be 32-bit GPD register.
+ kOpGpq = 0x00000010u, //!< Operand can be 64-bit GPQ register.
+ kOpXmm = 0x00000020u, //!< Operand can be 128-bit XMM register.
+ kOpYmm = 0x00000040u, //!< Operand can be 256-bit YMM register.
+ kOpZmm = 0x00000080u, //!< Operand can be 512-bit ZMM register.
+ kOpMm = 0x00000100u, //!< Operand can be 64-bit MM register.
+ kOpKReg = 0x00000200u, //!< Operand can be 64-bit K register.
+ kOpSReg = 0x00000400u, //!< Operand can be SReg (segment register).
+ kOpCReg = 0x00000800u, //!< Operand can be CReg (control register).
+ kOpDReg = 0x00001000u, //!< Operand can be DReg (debug register).
+ kOpSt = 0x00002000u, //!< Operand can be 80-bit ST register (X87).
+ kOpBnd = 0x00004000u, //!< Operand can be 128-bit BND register.
+ kOpTmm = 0x00008000u, //!< Operand can be 0..8192-bit TMM register.
+ kOpAllRegs = 0x0000FFFFu, //!< Combination of all possible registers.
+
+ kOpI4 = 0x00010000u, //!< Operand can be unsigned 4-bit immediate.
+ kOpU4 = 0x00020000u, //!< Operand can be unsigned 4-bit immediate.
+ kOpI8 = 0x00040000u, //!< Operand can be signed 8-bit immediate.
+ kOpU8 = 0x00080000u, //!< Operand can be unsigned 8-bit immediate.
+ kOpI16 = 0x00100000u, //!< Operand can be signed 16-bit immediate.
+ kOpU16 = 0x00200000u, //!< Operand can be unsigned 16-bit immediate.
+ kOpI32 = 0x00400000u, //!< Operand can be signed 32-bit immediate.
+ kOpU32 = 0x00800000u, //!< Operand can be unsigned 32-bit immediate.
+ kOpI64 = 0x01000000u, //!< Operand can be signed 64-bit immediate.
+ kOpU64 = 0x02000000u, //!< Operand can be unsigned 64-bit immediate.
+ kOpAllImm = 0x03FF0000u, //!< Operand can be any immediate.
+
+ kOpMem = 0x04000000u, //!< Operand can be a scalar memory pointer.
+ kOpVm = 0x08000000u, //!< Operand can be a vector memory pointer.
+
+ kOpRel8 = 0x10000000u, //!< Operand can be relative 8-bit displacement.
+ kOpRel32 = 0x20000000u, //!< Operand can be relative 32-bit displacement.
+
+ kOpImplicit = 0x80000000u //!< Operand is implicit.
};
// ============================================================================
@@ -107,31 +111,31 @@ enum MemFlags : uint32_t {
// NOTE: Instruction uses either scalar or vector memory operands, they never
// collide. This allows us to share bits between "M" and "Vm" enums.
- kMemOpAny = 0x0001u, //!< Operand can be any scalar memory pointer.
- kMemOpM8 = 0x0002u, //!< Operand can be an 8-bit memory pointer.
- kMemOpM16 = 0x0004u, //!< Operand can be a 16-bit memory pointer.
- kMemOpM32 = 0x0008u, //!< Operand can be a 32-bit memory pointer.
- kMemOpM48 = 0x0010u, //!< Operand can be a 48-bit memory pointer (FAR pointers only).
- kMemOpM64 = 0x0020u, //!< Operand can be a 64-bit memory pointer.
- kMemOpM80 = 0x0040u, //!< Operand can be an 80-bit memory pointer.
- kMemOpM128 = 0x0080u, //!< Operand can be a 128-bit memory pointer.
- kMemOpM256 = 0x0100u, //!< Operand can be a 256-bit memory pointer.
- kMemOpM512 = 0x0200u, //!< Operand can be a 512-bit memory pointer.
- kMemOpM1024 = 0x0400u, //!< Operand can be a 1024-bit memory pointer.
-
- kMemOpVm32x = 0x0002u, //!< Operand can be a vm32x (vector) pointer.
- kMemOpVm32y = 0x0004u, //!< Operand can be a vm32y (vector) pointer.
- kMemOpVm32z = 0x0008u, //!< Operand can be a vm32z (vector) pointer.
- kMemOpVm64x = 0x0020u, //!< Operand can be a vm64x (vector) pointer.
- kMemOpVm64y = 0x0040u, //!< Operand can be a vm64y (vector) pointer.
- kMemOpVm64z = 0x0080u, //!< Operand can be a vm64z (vector) pointer.
-
- kMemOpBaseOnly = 0x0800u, //!< Only memory base is allowed (no index, no offset).
- kMemOpDs = 0x1000u, //!< Implicit memory operand's DS segment.
- kMemOpEs = 0x2000u, //!< Implicit memory operand's ES segment.
-
- kMemOpMib = 0x4000u, //!< Operand must be MIB (base+index) pointer.
- kMemOpTMem = 0x8000u //!< Operand is a sib_mem (ADX memory operand).
+ kMemOpAny = 0x0001u, //!< Operand can be any scalar memory pointer.
+ kMemOpM8 = 0x0002u, //!< Operand can be an 8-bit memory pointer.
+ kMemOpM16 = 0x0004u, //!< Operand can be a 16-bit memory pointer.
+ kMemOpM32 = 0x0008u, //!< Operand can be a 32-bit memory pointer.
+ kMemOpM48 = 0x0010u, //!< Operand can be a 48-bit memory pointer (FAR pointers only).
+ kMemOpM64 = 0x0020u, //!< Operand can be a 64-bit memory pointer.
+ kMemOpM80 = 0x0040u, //!< Operand can be an 80-bit memory pointer.
+ kMemOpM128 = 0x0080u, //!< Operand can be a 128-bit memory pointer.
+ kMemOpM256 = 0x0100u, //!< Operand can be a 256-bit memory pointer.
+ kMemOpM512 = 0x0200u, //!< Operand can be a 512-bit memory pointer.
+ kMemOpM1024 = 0x0400u, //!< Operand can be a 1024-bit memory pointer.
+
+ kMemOpVm32x = 0x0002u, //!< Operand can be a vm32x (vector) pointer.
+ kMemOpVm32y = 0x0004u, //!< Operand can be a vm32y (vector) pointer.
+ kMemOpVm32z = 0x0008u, //!< Operand can be a vm32z (vector) pointer.
+ kMemOpVm64x = 0x0020u, //!< Operand can be a vm64x (vector) pointer.
+ kMemOpVm64y = 0x0040u, //!< Operand can be a vm64y (vector) pointer.
+ kMemOpVm64z = 0x0080u, //!< Operand can be a vm64z (vector) pointer.
+
+ kMemOpBaseOnly = 0x0800u, //!< Only memory base is allowed (no index, no offset).
+ kMemOpDs = 0x1000u, //!< Implicit memory operand's DS segment.
+ kMemOpEs = 0x2000u, //!< Implicit memory operand's ES segment.
+
+ kMemOpMib = 0x4000u, //!< Operand must be MIB (base+index) pointer.
+ kMemOpTMem = 0x8000u //!< Operand is a sib_mem (ADX memory operand).
};
// ============================================================================
@@ -142,76 +146,69 @@ enum MemFlags : uint32_t {
//!
//! Details about instruction encoding, operation, features, and some limitations.
enum Flags : uint32_t {
- kFlagNone = 0x00000000u, //!< No flags.
+ kFlagNone = 0x00000000u, //!< No flags.
// Instruction Family
// ------------------
//
// Instruction family information.
- kFlagFpu = 0x00000100u, //!< Instruction that accesses FPU registers.
- kFlagMmx = 0x00000200u, //!< Instruction that accesses MMX registers (including 3DNOW and GEODE) and EMMS.
- kFlagVec = 0x00000400u, //!< Instruction that accesses XMM registers (SSE, AVX, AVX512).
-
- // Prefixes and Encoding Flags
- // ---------------------------
- //
- // These describe optional X86 prefixes that can be used to change the instruction's operation.
-
- kFlagTsib = 0x00000800u, //!< Instruction uses TSIB (or SIB_MEM) encoding (MODRM followed by SIB).
- kFlagRep = 0x00001000u, //!< Instruction can be prefixed with using the REP(REPE) or REPNE prefix.
- kFlagRepIgnored = 0x00002000u, //!< Instruction ignores REP|REPNE prefixes, but they are accepted.
- kFlagLock = 0x00004000u, //!< Instruction can be prefixed with using the LOCK prefix.
- kFlagXAcquire = 0x00008000u, //!< Instruction can be prefixed with using the XACQUIRE prefix.
- kFlagXRelease = 0x00010000u, //!< Instruction can be prefixed with using the XRELEASE prefix.
- kFlagMib = 0x00020000u, //!< Instruction uses MIB (BNDLDX|BNDSTX) to encode two registers.
- kFlagVsib = 0x00040000u, //!< Instruction uses VSIB instead of legacy SIB.
- kFlagVex = 0x00080000u, //!< Instruction can be encoded by VEX|XOP (AVX|AVX2|BMI|XOP|...).
- kFlagEvex = 0x00100000u, //!< Instruction can be encoded by EVEX (AVX512).
- kFlagPreferEvex = 0x00200000u, //!< EVEX encoding is preferred over VEX encoding (AVX515_VNNI vs AVX_VNNI).
+ kFlagFpu = 0x00000100u, //!< Instruction that accesses FPU registers.
+ kFlagMmx = 0x00000200u, //!< Instruction that accesses MMX registers (including 3DNOW and GEODE) and EMMS.
+ kFlagVec = 0x00000400u, //!< Instruction that accesses XMM registers (SSE, AVX, AVX512).
// FPU Flags
// ---------
//
// Used to tell the encoder which memory operand sizes are encodable.
- kFlagFpuM16 = 0x00200000u, //!< FPU instruction can address `word_ptr` (shared with M80).
- kFlagFpuM32 = 0x00400000u, //!< FPU instruction can address `dword_ptr`.
- kFlagFpuM64 = 0x00800000u, //!< FPU instruction can address `qword_ptr`.
- kFlagFpuM80 = 0x00200000u, //!< FPU instruction can address `tword_ptr` (shared with M16).
+ kFlagFpuM16 = 0x00000800u, //!< FPU instruction can address `word_ptr` (shared with M80).
+ kFlagFpuM32 = 0x00001000u, //!< FPU instruction can address `dword_ptr`.
+ kFlagFpuM64 = 0x00002000u, //!< FPU instruction can address `qword_ptr`.
+ kFlagFpuM80 = 0x00000800u, //!< FPU instruction can address `tword_ptr` (shared with M16).
- // AVX and AVX515 Flags
- // --------------------
+ // Prefixes and Encoding Flags
+ // ---------------------------
//
+ // These describe optional X86 prefixes that can be used to change the instruction's operation.
+
+ kFlagTsib = 0x00004000u, //!< Instruction uses TSIB (or SIB_MEM) encoding (MODRM followed by SIB).
+ kFlagRep = 0x00008000u, //!< Instruction can be prefixed with using the REP(REPE) or REPNE prefix.
+ kFlagRepIgnored = 0x00010000u, //!< Instruction ignores REP|REPNE prefixes, but they are accepted.
+ kFlagLock = 0x00020000u, //!< Instruction can be prefixed with using the LOCK prefix.
+ kFlagXAcquire = 0x00040000u, //!< Instruction can be prefixed with using the XACQUIRE prefix.
+ kFlagXRelease = 0x00080000u, //!< Instruction can be prefixed with using the XRELEASE prefix.
+ kFlagMib = 0x00100000u, //!< Instruction uses MIB (BNDLDX|BNDSTX) to encode two registers.
+ kFlagVsib = 0x00200000u, //!< Instruction uses VSIB instead of legacy SIB.
+
// If both `kFlagPrefixVex` and `kFlagPrefixEvex` flags are specified it
// means that the instructions can be encoded by either VEX or EVEX prefix.
// In that case AsmJit checks global options and also instruction options
// to decide whether to emit VEX or EVEX prefix.
- kFlagAvx512_ = 0x00000000u, //!< Internally used in tables, has no meaning.
- kFlagAvx512K = 0x01000000u, //!< Supports masking {k1..k7}.
- kFlagAvx512Z = 0x02000000u, //!< Supports zeroing {z}, must be used together with `kAvx512k`.
- kFlagAvx512ER = 0x04000000u, //!< Supports 'embedded-rounding' {er} with implicit {sae},
- kFlagAvx512SAE = 0x08000000u, //!< Supports 'suppress-all-exceptions' {sae}.
- kFlagAvx512B32 = 0x10000000u, //!< Supports 32-bit broadcast 'b32'.
- kFlagAvx512B64 = 0x20000000u, //!< Supports 64-bit broadcast 'b64'.
- kFlagAvx512T4X = 0x80000000u, //!< Operates on a vector of consecutive registers (AVX512_4FMAPS and AVX512_4VNNIW).
-
- // Combinations used by instruction tables to make AVX512 definitions more compact.
- kFlagAvx512KZ = kFlagAvx512K | kFlagAvx512Z,
- kFlagAvx512ER_SAE = kFlagAvx512ER | kFlagAvx512SAE,
- kFlagAvx512KZ_SAE = kFlagAvx512KZ | kFlagAvx512SAE,
- kFlagAvx512KZ_SAE_B32 = kFlagAvx512KZ_SAE | kFlagAvx512B32,
- kFlagAvx512KZ_SAE_B64 = kFlagAvx512KZ_SAE | kFlagAvx512B64,
-
- kFlagAvx512KZ_ER_SAE = kFlagAvx512KZ | kFlagAvx512ER_SAE,
- kFlagAvx512KZ_ER_SAE_B32 = kFlagAvx512KZ_ER_SAE | kFlagAvx512B32,
- kFlagAvx512KZ_ER_SAE_B64 = kFlagAvx512KZ_ER_SAE | kFlagAvx512B64,
-
- kFlagAvx512K_B32 = kFlagAvx512K | kFlagAvx512B32,
- kFlagAvx512K_B64 = kFlagAvx512K | kFlagAvx512B64,
- kFlagAvx512KZ_B32 = kFlagAvx512KZ | kFlagAvx512B32,
- kFlagAvx512KZ_B64 = kFlagAvx512KZ | kFlagAvx512B64
+ kFlagVex = 0x00400000u, //!< Instruction can be encoded by VEX|XOP (AVX|AVX2|BMI|XOP|...).
+ kFlagEvex = 0x00800000u, //!< Instruction can be encoded by EVEX (AVX512).
+ kFlagPreferEvex = 0x01000000u, //!< EVEX encoding is preferred over VEX encoding (AVX515_VNNI vs AVX_VNNI).
+ kFlagEvexCompat = 0x02000000u, //!< EVEX and VEX signatures are compatible.
+ kFlagEvexKReg = 0x04000000u, //!< EVEX instruction requires K register in the first operand (compare instructions).
+ kFlagEvexTwoOp = 0x08000000u, //!< EVEX instruction requires two operands and K register as a selector (gather instructions).
+ kFlagEvexTransformable = 0x10000000u //!< VEX instruction that can be transformed to a compatible EVEX instruction.
+};
+
+// ============================================================================
+// [asmjit::x86::InstDB::Avx512Flags]
+// ============================================================================
+
+//! AVX512 flags.
+enum Avx512Flags : uint32_t {
+ kAvx512Flag_ = 0x00000000u, //!< Internally used in tables, has no meaning.
+ kAvx512FlagK = 0x00000001u, //!< Supports masking {k1..k7}.
+ kAvx512FlagZ = 0x00000002u, //!< Supports zeroing {z}, must be used together with `kAvx512k`.
+ kAvx512FlagER = 0x00000004u, //!< Supports 'embedded-rounding' {er} with implicit {sae},
+ kAvx512FlagSAE = 0x00000008u, //!< Supports 'suppress-all-exceptions' {sae}.
+ kAvx512FlagB32 = 0x00000010u, //!< Supports 32-bit broadcast 'b32'.
+ kAvx512FlagB64 = 0x00000020u, //!< Supports 64-bit broadcast 'b64'.
+ kAvx512FlagT4X = 0x00000080u //!< Operates on a vector of consecutive registers (AVX512_4FMAPS and AVX512_4VNNIW).
};
// ============================================================================
@@ -277,6 +274,8 @@ ASMJIT_VARAPI const InstSignature _instSignatureTable[];
struct CommonInfo {
//! Instruction flags.
uint32_t _flags;
+ //! Reserved for future use.
+ uint32_t _avx512Flags : 11;
//! First `InstSignature` entry in the database.
uint32_t _iSignatureIndex : 11;
//! Number of relevant `ISignature` entries.
@@ -285,18 +284,21 @@ struct CommonInfo {
uint32_t _controlType : 3;
//! Specifies what happens if all source operands share the same register.
uint32_t _singleRegCase : 2;
- //! Reserved for future use.
- uint32_t _reserved : 11;
// --------------------------------------------------------------------------
// [Accessors]
// --------------------------------------------------------------------------
- //! Returns instruction flags, see `InstInfo::Flags`.
+ //! Returns instruction flags, see \ref Flags.
inline uint32_t flags() const noexcept { return _flags; }
- //! Tests whether the instruction has a `flag`, see `InstInfo::Flags`.
+ //! Tests whether the instruction has a `flag`, see \ref Flags.
inline bool hasFlag(uint32_t flag) const noexcept { return (_flags & flag) != 0; }
+ //! Returns instruction AVX-512 flags, see \ref Avx512Flags.
+ inline uint32_t avx512Flags() const noexcept { return _avx512Flags; }
+ //! Tests whether the instruction has an AVX-512 `flag`, see \ref Avx512Flags.
+ inline bool hasAvx512Flag(uint32_t flag) const noexcept { return (_avx512Flags & flag) != 0; }
+
//! Tests whether the instruction is FPU instruction.
inline bool isFpu() const noexcept { return hasFlag(kFlagFpu); }
//! Tests whether the instruction is MMX/3DNOW instruction that accesses MMX registers (includes EMMS and FEMMS).
@@ -335,20 +337,25 @@ struct CommonInfo {
//! Tests whether the instruction should prefer EVEX prefix instead of VEX prefix.
inline bool preferEvex() const noexcept { return hasFlag(kFlagPreferEvex); }
+ inline bool isEvexCompatible() const noexcept { return hasFlag(kFlagEvexCompat); }
+ inline bool isEvexKRegOnly() const noexcept { return hasFlag(kFlagEvexKReg); }
+ inline bool isEvexTwoOpOnly() const noexcept { return hasFlag(kFlagEvexTwoOp); }
+ inline bool isEvexTransformable() const noexcept { return hasFlag(kFlagEvexTransformable); }
+
//! Tests whether the instruction supports AVX512 masking {k}.
- inline bool hasAvx512K() const noexcept { return hasFlag(kFlagAvx512K); }
+ inline bool hasAvx512K() const noexcept { return hasAvx512Flag(kAvx512FlagK); }
//! Tests whether the instruction supports AVX512 zeroing {k}{z}.
- inline bool hasAvx512Z() const noexcept { return hasFlag(kFlagAvx512Z); }
+ inline bool hasAvx512Z() const noexcept { return hasAvx512Flag(kAvx512FlagZ); }
//! Tests whether the instruction supports AVX512 embedded-rounding {er}.
- inline bool hasAvx512ER() const noexcept { return hasFlag(kFlagAvx512ER); }
+ inline bool hasAvx512ER() const noexcept { return hasAvx512Flag(kAvx512FlagER); }
//! Tests whether the instruction supports AVX512 suppress-all-exceptions {sae}.
- inline bool hasAvx512SAE() const noexcept { return hasFlag(kFlagAvx512SAE); }
+ inline bool hasAvx512SAE() const noexcept { return hasAvx512Flag(kAvx512FlagSAE); }
//! Tests whether the instruction supports AVX512 broadcast (either 32-bit or 64-bit).
- inline bool hasAvx512B() const noexcept { return hasFlag(kFlagAvx512B32 | kFlagAvx512B64); }
+ inline bool hasAvx512B() const noexcept { return hasAvx512Flag(kAvx512FlagB32 | kAvx512FlagB64); }
//! Tests whether the instruction supports AVX512 broadcast (32-bit).
- inline bool hasAvx512B32() const noexcept { return hasFlag(kFlagAvx512B32); }
+ inline bool hasAvx512B32() const noexcept { return hasAvx512Flag(kAvx512FlagB32); }
//! Tests whether the instruction supports AVX512 broadcast (64-bit).
- inline bool hasAvx512B64() const noexcept { return hasFlag(kFlagAvx512B64); }
+ inline bool hasAvx512B64() const noexcept { return hasAvx512Flag(kAvx512FlagB64); }
inline uint32_t signatureIndex() const noexcept { return _iSignatureIndex; }
inline uint32_t signatureCount() const noexcept { return _iSignatureCount; }
@@ -394,10 +401,15 @@ struct InstInfo {
//! Returns common information, see `CommonInfo`.
inline const CommonInfo& commonInfo() const noexcept { return _commonInfoTable[_commonInfoIndex]; }
- //! Tests whether the instruction has flag `flag`, see `Flags`.
- inline bool hasFlag(uint32_t flag) const noexcept { return commonInfo().hasFlag(flag); }
- //! Returns instruction flags, see `Flags`.
+ //! Returns instruction flags, see \ref Flags.
inline uint32_t flags() const noexcept { return commonInfo().flags(); }
+ //! Tests whether the instruction has flag `flag`, see \ref Flags.
+ inline bool hasFlag(uint32_t flag) const noexcept { return commonInfo().hasFlag(flag); }
+
+ //! Returns instruction AVX-512 flags, see \ref Avx512Flags.
+ inline uint32_t avx512Flags() const noexcept { return commonInfo().avx512Flags(); }
+ //! Tests whether the instruction has an AVX-512 `flag`, see \ref Avx512Flags.
+ inline bool hasAvx512Flag(uint32_t flag) const noexcept { return commonInfo().hasAvx512Flag(flag); }
//! Tests whether the instruction is FPU instruction.
inline bool isFpu() const noexcept { return commonInfo().isFpu(); }
@@ -432,20 +444,25 @@ struct InstInfo {
//! Tests whether the instruction uses EVEX (can be set together with VEX if both are encodable).
inline bool isVexOrEvex() const noexcept { return hasFlag(kFlagVex | kFlagEvex); }
+ inline bool isEvexCompatible() const noexcept { return hasFlag(kFlagEvexCompat); }
+ inline bool isEvexKRegOnly() const noexcept { return hasFlag(kFlagEvexKReg); }
+ inline bool isEvexTwoOpOnly() const noexcept { return hasFlag(kFlagEvexTwoOp); }
+ inline bool isEvexTransformable() const noexcept { return hasFlag(kFlagEvexTransformable); }
+
//! Tests whether the instruction supports AVX512 masking {k}.
- inline bool hasAvx512K() const noexcept { return hasFlag(kFlagAvx512K); }
+ inline bool hasAvx512K() const noexcept { return hasAvx512Flag(kAvx512FlagK); }
//! Tests whether the instruction supports AVX512 zeroing {k}{z}.
- inline bool hasAvx512Z() const noexcept { return hasFlag(kFlagAvx512Z); }
+ inline bool hasAvx512Z() const noexcept { return hasAvx512Flag(kAvx512FlagZ); }
//! Tests whether the instruction supports AVX512 embedded-rounding {er}.
- inline bool hasAvx512ER() const noexcept { return hasFlag(kFlagAvx512ER); }
+ inline bool hasAvx512ER() const noexcept { return hasAvx512Flag(kAvx512FlagER); }
//! Tests whether the instruction supports AVX512 suppress-all-exceptions {sae}.
- inline bool hasAvx512SAE() const noexcept { return hasFlag(kFlagAvx512SAE); }
+ inline bool hasAvx512SAE() const noexcept { return hasAvx512Flag(kAvx512FlagSAE); }
//! Tests whether the instruction supports AVX512 broadcast (either 32-bit or 64-bit).
- inline bool hasAvx512B() const noexcept { return hasFlag(kFlagAvx512B32 | kFlagAvx512B64); }
+ inline bool hasAvx512B() const noexcept { return hasAvx512Flag(kAvx512FlagB32 | kAvx512FlagB64); }
//! Tests whether the instruction supports AVX512 broadcast (32-bit).
- inline bool hasAvx512B32() const noexcept { return hasFlag(kFlagAvx512B32); }
+ inline bool hasAvx512B32() const noexcept { return hasAvx512Flag(kAvx512FlagB32); }
//! Tests whether the instruction supports AVX512 broadcast (64-bit).
- inline bool hasAvx512B64() const noexcept { return hasFlag(kFlagAvx512B64); }
+ inline bool hasAvx512B64() const noexcept { return hasAvx512Flag(kAvx512FlagB64); }
//! Gets the control-flow type of the instruction.
inline uint32_t controlType() const noexcept { return commonInfo().controlType(); }
diff --git a/erts/emulator/asmjit/x86/x86operand.cpp b/erts/emulator/asmjit/x86/x86operand.cpp
index 4c81d8e85d..47270c0fad 100644
--- a/erts/emulator/asmjit/x86/x86operand.cpp
+++ b/erts/emulator/asmjit/x86/x86operand.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#ifdef ASMJIT_BUILD_X86
+#if !defined(ASMJIT_NO_X86)
#include "../core/misc_p.h"
#include "../x86/x86operand.h"
@@ -245,4 +245,4 @@ UNIT(x86_operand) {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86
+#endif // !ASMJIT_NO_X86
diff --git a/erts/emulator/asmjit/x86/x86rapass.cpp b/erts/emulator/asmjit/x86/x86rapass.cpp
index faf05dc847..23cfd65fdf 100644
--- a/erts/emulator/asmjit/x86/x86rapass.cpp
+++ b/erts/emulator/asmjit/x86/x86rapass.cpp
@@ -22,7 +22,7 @@
// 3. This notice may not be removed or altered from any source distribution.
#include "../core/api-build_p.h"
-#if defined(ASMJIT_BUILD_X86) && !defined(ASMJIT_NO_COMPILER)
+#if !defined(ASMJIT_NO_X86) && !defined(ASMJIT_NO_COMPILER)
#include "../core/cpuinfo.h"
#include "../core/support.h"
@@ -140,6 +140,39 @@ Error RACFGBuilder::onInst(InstNode* inst, uint32_t& controlType, RAInstBuilder&
uint32_t singleRegOps = 0;
if (opCount) {
+ // The mask is for all registers, but we are mostly interested in AVX-512
+ // registers at the moment. The mask will be combined with all available
+ // registers of the Compiler at the end so we it never use more registers
+ // than available.
+ uint32_t instructionAllowedRegs = 0xFFFFFFFFu;
+
+ if (instInfo.isEvex()) {
+ // EVEX instruction and VEX instructions that can be encoded with EVEX
+ // have the possibility to use 32 SIMD registers (XMM/YMM/ZMM).
+ if (instInfo.isVex() && !instInfo.isEvexCompatible()) {
+ if (instInfo.isEvexKRegOnly()) {
+ // EVEX encodable only if the first operand is K register (compare instructions).
+ if (!Reg::isKReg(opArray[0]))
+ instructionAllowedRegs = 0xFFFFu;
+ }
+ else if (instInfo.isEvexTwoOpOnly()) {
+ // EVEX encodable only if the instruction has two operands (gather instructions).
+ if (opCount != 2)
+ instructionAllowedRegs = 0xFFFFu;
+ }
+ else {
+ instructionAllowedRegs = 0xFFFFu;
+ }
+ }
+ }
+ else if (instInfo.isEvexTransformable()) {
+ ib.addAggregatedFlags(RAInst::kFlagIsTransformable);
+ }
+ else {
+ // Not EVEX, restrict everything to [0-15] registers.
+ instructionAllowedRegs = 0xFFFFu;
+ }
+
for (uint32_t i = 0; i < opCount; i++) {
const Operand& op = opArray[i];
const OpRWInfo& opRwInfo = rwInfo.operand(i);
@@ -150,7 +183,7 @@ Error RACFGBuilder::onInst(InstNode* inst, uint32_t& controlType, RAInstBuilder&
const Reg& reg = op.as<Reg>();
uint32_t flags = raRegRwFlags(opRwInfo.opFlags());
- uint32_t allowedRegs = 0xFFFFFFFFu;
+ uint32_t allowedRegs = instructionAllowedRegs;
// X86-specific constraints related to LO|HI general purpose registers.
// This is only required when the register is part of the encoding. If
@@ -281,7 +314,7 @@ Error RACFGBuilder::onInst(InstNode* inst, uint32_t& controlType, RAInstBuilder&
uint32_t flags = raMemIndexRwFlags(opRwInfo.opFlags());
uint32_t group = workReg->group();
- uint32_t allocable = _pass->_availableRegs[group];
+ uint32_t allocable = _pass->_availableRegs[group] & instructionAllowedRegs;
// Index registers have never fixed id on X86/x64.
const uint32_t useId = BaseReg::kIdBad;
@@ -314,7 +347,7 @@ Error RACFGBuilder::onInst(InstNode* inst, uint32_t& controlType, RAInstBuilder&
if (group == Gp::kGroupKReg) {
// AVX-512 mask selector {k} register - read-only, allocable to any register except {k0}.
- uint32_t allocableRegs= _pass->_availableRegs[group] & ~Support::bitMask(0);
+ uint32_t allocableRegs = _pass->_availableRegs[group];
ASMJIT_PROPAGATE(ib.add(workReg, RATiedReg::kUse | RATiedReg::kRead, allocableRegs, BaseReg::kIdBad, rewriteMask, BaseReg::kIdBad, 0));
singleRegOps = 0;
}
@@ -1106,13 +1139,21 @@ X86RAPass::~X86RAPass() noexcept {}
void X86RAPass::onInit() noexcept {
uint32_t arch = cc()->arch();
uint32_t baseRegCount = Environment::is32Bit(arch) ? 8u : 16u;
+ uint32_t simdRegCount = baseRegCount;
+
+ if (Environment::is64Bit(arch) && _func->frame().isAvx512Enabled())
+ simdRegCount = 32u;
+
+ bool avxEnabled = _func->frame().isAvxEnabled();
+ bool avx512Enabled = _func->frame().isAvx512Enabled();
_emitHelper._emitter = _cb;
- _emitHelper._avxEnabled = _func->frame().isAvxEnabled();
+ _emitHelper._avxEnabled = avxEnabled || avx512Enabled;
+ _emitHelper._avx512Enabled = avx512Enabled;
_archTraits = &ArchTraits::byArch(arch);
_physRegCount.set(Reg::kGroupGp , baseRegCount);
- _physRegCount.set(Reg::kGroupVec , baseRegCount);
+ _physRegCount.set(Reg::kGroupVec , simdRegCount);
_physRegCount.set(Reg::kGroupMm , 8);
_physRegCount.set(Reg::kGroupKReg, 8);
_buildPhysIndex();
@@ -1121,7 +1162,7 @@ void X86RAPass::onInit() noexcept {
_availableRegs[Reg::kGroupGp ] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupGp ));
_availableRegs[Reg::kGroupVec ] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupVec ));
_availableRegs[Reg::kGroupMm ] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupMm ));
- _availableRegs[Reg::kGroupKReg] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupKReg));
+ _availableRegs[Reg::kGroupKReg] = Support::lsbMask<uint32_t>(_physRegCount.get(Reg::kGroupKReg)) ^ 1u;
_scratchRegIndexes[0] = uint8_t(Gp::kIdCx);
_scratchRegIndexes[1] = uint8_t(baseRegCount - 1);
@@ -1148,6 +1189,135 @@ Error X86RAPass::buildCFG() noexcept {
}
// ============================================================================
+// [asmjit::x86::X86RAPass - Rewrite]
+// ============================================================================
+
+static uint32_t transformVexToEvex(uint32_t instId) {
+ switch (instId) {
+ case Inst::kIdVbroadcastf128: return Inst::kIdVbroadcastf32x4;
+ case Inst::kIdVbroadcasti128: return Inst::kIdVbroadcasti32x4;
+ case Inst::kIdVextractf128: return Inst::kIdVextractf32x4;
+ case Inst::kIdVextracti128: return Inst::kIdVextracti32x4;
+ case Inst::kIdVinsertf128: return Inst::kIdVinsertf32x4;
+ case Inst::kIdVinserti128: return Inst::kIdVinserti32x4;
+ case Inst::kIdVmovdqa: return Inst::kIdVmovdqa32;
+ case Inst::kIdVmovdqu: return Inst::kIdVmovdqu32;
+ case Inst::kIdVpand: return Inst::kIdVpandd;
+ case Inst::kIdVpandn: return Inst::kIdVpandnd;
+ case Inst::kIdVpor: return Inst::kIdVpord;
+ case Inst::kIdVpxor: return Inst::kIdVpxord;
+
+ default:
+ // This should never happen as only transformable instructions should go this path.
+ ASMJIT_ASSERT(false);
+ return 0;
+ }
+}
+
+ASMJIT_FAVOR_SPEED Error X86RAPass::_rewrite(BaseNode* first, BaseNode* stop) noexcept {
+ uint32_t virtCount = cc()->_vRegArray.size();
+
+ BaseNode* node = first;
+ while (node != stop) {
+ BaseNode* next = node->next();
+ if (node->isInst()) {
+ InstNode* inst = node->as<InstNode>();
+ RAInst* raInst = node->passData<RAInst>();
+
+ Operand* operands = inst->operands();
+ uint32_t opCount = inst->opCount();
+ uint32_t maxRegId = 0;
+
+ uint32_t i;
+
+ // Rewrite virtual registers into physical registers.
+ if (raInst) {
+ // If the instruction contains pass data (raInst) then it was a subject
+ // for register allocation and must be rewritten to use physical regs.
+ RATiedReg* tiedRegs = raInst->tiedRegs();
+ uint32_t tiedCount = raInst->tiedCount();
+
+ for (i = 0; i < tiedCount; i++) {
+ RATiedReg* tiedReg = &tiedRegs[i];
+
+ Support::BitWordIterator<uint32_t> useIt(tiedReg->useRewriteMask());
+ uint32_t useId = tiedReg->useId();
+ while (useIt.hasNext()) {
+ maxRegId = Support::max(maxRegId, useId);
+ inst->rewriteIdAtIndex(useIt.next(), useId);
+ }
+
+ Support::BitWordIterator<uint32_t> outIt(tiedReg->outRewriteMask());
+ uint32_t outId = tiedReg->outId();
+ while (outIt.hasNext()) {
+ maxRegId = Support::max(maxRegId, outId);
+ inst->rewriteIdAtIndex(outIt.next(), outId);
+ }
+ }
+
+ if (raInst->isTransformable()) {
+ if (maxRegId > 15) {
+ // Transform VEX instruction to EVEX.
+ inst->setId(transformVexToEvex(inst->id()));
+ }
+ }
+
+ // This data is allocated by Zone passed to `runOnFunction()`, which
+ // will be reset after the RA pass finishes. So reset this data to
+ // prevent having a dead pointer after the RA pass is complete.
+ node->resetPassData();
+
+ if (ASMJIT_UNLIKELY(node->type() != BaseNode::kNodeInst)) {
+ // FuncRet terminates the flow, it must either be removed if the exit
+ // label is next to it (optimization) or patched to an architecture
+ // dependent jump instruction that jumps to the function's exit before
+ // the epilog.
+ if (node->type() == BaseNode::kNodeFuncRet) {
+ RABlock* block = raInst->block();
+ if (!isNextTo(node, _func->exitNode())) {
+ cc()->_setCursor(node->prev());
+ ASMJIT_PROPAGATE(emitJump(_func->exitNode()->label()));
+ }
+
+ BaseNode* prev = node->prev();
+ cc()->removeNode(node);
+ block->setLast(prev);
+ }
+ }
+ }
+
+ // Rewrite stack slot addresses.
+ for (i = 0; i < opCount; i++) {
+ Operand& op = operands[i];
+ if (op.isMem()) {
+ BaseMem& mem = op.as<BaseMem>();
+ if (mem.isRegHome()) {
+ uint32_t virtIndex = Operand::virtIdToIndex(mem.baseId());
+ if (ASMJIT_UNLIKELY(virtIndex >= virtCount))
+ return DebugUtils::errored(kErrorInvalidVirtId);
+
+ VirtReg* virtReg = cc()->virtRegByIndex(virtIndex);
+ RAWorkReg* workReg = virtReg->workReg();
+ ASMJIT_ASSERT(workReg != nullptr);
+
+ RAStackSlot* slot = workReg->stackSlot();
+ int32_t offset = slot->offset();
+
+ mem._setBase(_sp.type(), slot->baseRegId());
+ mem.clearRegHome();
+ mem.addOffsetLo32(offset);
+ }
+ }
+ }
+ }
+
+ node = next;
+ }
+
+ return kErrorOk;
+}
+
+// ============================================================================
// [asmjit::x86::X86RAPass - OnEmit]
// ============================================================================
@@ -1283,4 +1453,4 @@ Error X86RAPass::emitPreCall(InvokeNode* invokeNode) noexcept {
ASMJIT_END_SUB_NAMESPACE
-#endif // ASMJIT_BUILD_X86 && !ASMJIT_NO_COMPILER
+#endif // !ASMJIT_NO_X86 && !ASMJIT_NO_COMPILER
diff --git a/erts/emulator/asmjit/x86/x86rapass_p.h b/erts/emulator/asmjit/x86/x86rapass_p.h
index efcfd3c15c..5faa04f6a3 100644
--- a/erts/emulator/asmjit/x86/x86rapass_p.h
+++ b/erts/emulator/asmjit/x86/x86rapass_p.h
@@ -77,6 +77,7 @@ public:
// --------------------------------------------------------------------------
inline bool avxEnabled() const noexcept { return _emitHelper._avxEnabled; }
+ inline bool avx512Enabled() const noexcept { return _emitHelper._avx512Enabled; }
inline uint32_t choose(uint32_t sseInstId, uint32_t avxInstId) noexcept {
return avxEnabled() ? avxInstId : sseInstId;
@@ -96,6 +97,12 @@ public:
Error buildCFG() noexcept override;
// --------------------------------------------------------------------------
+ // [Rewrite]
+ // --------------------------------------------------------------------------
+
+ Error _rewrite(BaseNode* first, BaseNode* stop) noexcept override;
+
+ // --------------------------------------------------------------------------
// [Emit]
// --------------------------------------------------------------------------
diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names
index 9b1d2c4196..55b662abc9 100644
--- a/erts/emulator/beam/atom.names
+++ b/erts/emulator/beam/atom.names
@@ -476,6 +476,7 @@ atom nodeup
atom noeol
atom noproc
atom normal
+atom normal_exit
atom nosuspend
atom no_fail
atom no_float
@@ -590,6 +591,7 @@ atom return_time_trace
atom return_to
atom return_to_trace
atom return_trace
+atom run_process
atom run_queue
atom run_queue_lengths
atom run_queue_lengths_all
@@ -628,6 +630,7 @@ atom set_on_spawn
atom set_seq_token
atom set_tcw
atom set_tcw_fake
+atom short
atom sighup
atom sigterm
atom sigusr1
diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c
index ce0046c25a..e982ef5a7d 100644
--- a/erts/emulator/beam/beam_bif_load.c
+++ b/erts/emulator/beam/beam_bif_load.c
@@ -777,6 +777,12 @@ BIF_RETTYPE loaded_0(BIF_ALIST_0)
BIF_RETTYPE call_on_load_function_1(BIF_ALIST_1)
{
+#ifdef BEAMASM
+ /* This is implemented as an instruction. We've skipped providing a more
+ * helpful error message since it's undocumented and should never be called
+ * by the user. */
+ BIF_ERROR(BIF_P, BADARG);
+#else
Module* modp = erts_get_module(BIF_ARG_1, erts_active_code_ix());
const BeamCodeHeader *hdr;
@@ -792,6 +798,7 @@ BIF_RETTYPE call_on_load_function_1(BIF_ALIST_1)
}
BIF_ERROR(BIF_P, BADARG);
+#endif
}
BIF_RETTYPE finish_after_on_load_2(BIF_ALIST_2)
diff --git a/erts/emulator/beam/beam_bp.c b/erts/emulator/beam/beam_bp.c
index 2142830ae8..6e926ca11a 100644
--- a/erts/emulator/beam/beam_bp.c
+++ b/erts/emulator/beam/beam_bp.c
@@ -123,7 +123,8 @@ static void bp_meta_unref(BpMetaTracer *bmt);
static void bp_count_unref(BpCount *bcp);
static void bp_time_unref(BpDataTime *bdt);
static void consolidate_bp_data(Module *modp, ErtsCodeInfo *ci, int local);
-static void uninstall_breakpoint(ErtsCodeInfo *ci);
+static void uninstall_breakpoint(ErtsCodeInfo *ci_rw,
+ const ErtsCodeInfo *ci_exec);
/* bp_hash */
#define BP_TIME_ADD(pi0, pi1) \
@@ -188,31 +189,33 @@ erts_bp_match_functions(BpFunctions* f, ErtsCodeMFA *mfa, int specified)
}
for (fi = 0; fi < num_functions; fi++) {
- ErtsCodeInfo* ci;
+ const ErtsCodeInfo* ci_exec;
+ ErtsCodeInfo* ci_rw;
void *w_ptr;
- w_ptr = erts_writable_code_ptr(&module[current]->curr,
- code_hdr->functions[fi]);
- ci = (ErtsCodeInfo*)w_ptr;
+ ci_exec = code_hdr->functions[fi];
+ w_ptr = erts_writable_code_ptr(&module[current]->curr, ci_exec);
+ ci_rw = (ErtsCodeInfo*)w_ptr;
#ifndef BEAMASM
- ASSERT(BeamIsOpCode(ci->op, op_i_func_info_IaaI));
+ ASSERT(BeamIsOpCode(ci_rw->op, op_i_func_info_IaaI));
#endif
switch (specified) {
case 3:
- if (ci->mfa.arity != mfa->arity)
+ if (ci_rw->mfa.arity != mfa->arity)
continue;
case 2:
- if (ci->mfa.function != mfa->function)
+ if (ci_rw->mfa.function != mfa->function)
continue;
case 1:
- if (ci->mfa.module != mfa->module)
+ if (ci_rw->mfa.module != mfa->module)
continue;
case 0:
break;
}
/* Store match */
- f->matching[i].ci = ci;
+ f->matching[i].ci_exec = ci_exec;
+ f->matching[i].ci_rw = ci_rw;
f->matching[i].mod = module[current];
i++;
}
@@ -260,12 +263,13 @@ erts_bp_match_export(BpFunctions* f, ErtsCodeMFA *mfa, int specified)
ASSERT(BeamIsOpCode(ep->trampoline.common.op, op_i_generic_breakpoint));
}
- f->matching[ne].ci = &ep->info;
- f->matching[ne].mod = erts_get_module(ep->info.mfa.module, code_ix);
-
- ne++;
+ f->matching[ne].ci_exec = &ep->info;
+ f->matching[ne].ci_rw = &ep->info;
+ f->matching[ne].mod = erts_get_module(ep->info.mfa.module, code_ix);
+ ne++;
}
+
f->matched = ne;
}
@@ -288,14 +292,14 @@ erts_consolidate_bp_data(BpFunctions* f, int local)
ERTS_LC_ASSERT(erts_has_code_write_permission());
for (i = 0; i < n; i++) {
- consolidate_bp_data(fs[i].mod, fs[i].ci, local);
+ consolidate_bp_data(fs[i].mod, fs[i].ci_rw, local);
}
}
static void
-consolidate_bp_data(Module* modp, ErtsCodeInfo *ci, int local)
+consolidate_bp_data(Module* modp, ErtsCodeInfo *ci_rw, int local)
{
- GenericBp* g = ci->u.gen_bp;
+ GenericBp* g = ci_rw->u.gen_bp;
GenericBpData* src;
GenericBpData* dst;
Uint flags;
@@ -343,14 +347,15 @@ consolidate_bp_data(Module* modp, ErtsCodeInfo *ci, int local)
ASSERT(modp->curr.num_traced_exports >= 0);
#if !defined(BEAMASM) && defined(DEBUG)
{
- BeamInstr instr = *(const BeamInstr*)erts_codeinfo_to_code(ci);
+ BeamInstr instr = *(const BeamInstr*)erts_codeinfo_to_code(ci_rw);
ASSERT(!BeamIsOpCode(instr, op_i_generic_breakpoint));
}
#endif
- }
- ci->u.gen_bp = NULL;
- Free(g);
- return;
+ }
+
+ ci_rw->u.gen_bp = NULL;
+ Free(g);
+ return;
}
/*
@@ -396,11 +401,12 @@ erts_install_breakpoints(BpFunctions* f)
Uint n = f->matched;
for (i = 0; i < n; i++) {
- ErtsCodeInfo* ci = f->matching[i].ci;
- GenericBp* g = ci->u.gen_bp;
- Module* modp = f->matching[i].mod;
+ const ErtsCodeInfo *ci_exec = f->matching[i].ci_exec;
+ ErtsCodeInfo *ci_rw = f->matching[i].ci_rw;
+ GenericBp *g = ci_rw->u.gen_bp;
+ Module *modp = f->matching[i].mod;
#ifdef BEAMASM
- if ((erts_asm_bp_get_flags(ci) & ERTS_ASM_BP_FLAG_BP) == 0 && g) {
+ if ((erts_asm_bp_get_flags(ci_exec) & ERTS_ASM_BP_FLAG_BP) == 0 && g) {
/*
* The breakpoint must be disabled in the active data
* (it will enabled later by switching bp indices),
@@ -409,12 +415,16 @@ erts_install_breakpoints(BpFunctions* f)
ASSERT(g->data[erts_active_bp_ix()].flags == 0);
ASSERT(g->data[erts_staging_bp_ix()].flags != 0);
- erts_asm_bp_set_flag(ci, ERTS_ASM_BP_FLAG_BP);
+ erts_asm_bp_set_flag(ci_rw, ci_exec, ERTS_ASM_BP_FLAG_BP);
modp->curr.num_breakpoints++;
}
#else
- BeamInstr volatile *pc = (BeamInstr*)erts_codeinfo_to_code(ci);
+ BeamInstr volatile *pc = (BeamInstr*)erts_codeinfo_to_code(ci_rw);
BeamInstr instr = *pc;
+
+ ASSERT(ci_exec == ci_rw);
+ (void)ci_exec;
+
if (!BeamIsOpCode(instr, op_i_generic_breakpoint) && g) {
BeamInstr br = BeamOpCodeAddr(op_i_generic_breakpoint);
@@ -452,30 +462,33 @@ erts_uninstall_breakpoints(BpFunctions* f)
Uint n = f->matched;
for (i = 0; i < n; i++) {
- uninstall_breakpoint(f->matching[i].ci);
+ uninstall_breakpoint(f->matching[i].ci_rw, f->matching[i].ci_exec);
}
}
#ifdef BEAMASM
static void
-uninstall_breakpoint(ErtsCodeInfo *ci)
+uninstall_breakpoint(ErtsCodeInfo *ci_rw, const ErtsCodeInfo *ci_exec)
{
- if (erts_asm_bp_get_flags(ci) & ERTS_ASM_BP_FLAG_BP) {
- GenericBp* g = ci->u.gen_bp;
+ if (erts_asm_bp_get_flags(ci_rw) & ERTS_ASM_BP_FLAG_BP) {
+ GenericBp* g = ci_rw->u.gen_bp;
if (g->data[erts_active_bp_ix()].flags == 0) {
- erts_asm_bp_unset_flag(ci, ERTS_ASM_BP_FLAG_BP);
+ erts_asm_bp_unset_flag(ci_rw, ci_exec, ERTS_ASM_BP_FLAG_BP);
}
}
}
#else
static void
-uninstall_breakpoint(ErtsCodeInfo *ci)
+uninstall_breakpoint(ErtsCodeInfo *ci_rw, const ErtsCodeInfo *ci_exec)
{
- BeamInstr *pc = (BeamInstr*)erts_codeinfo_to_code(ci);
+ BeamInstr *pc = (BeamInstr*)erts_codeinfo_to_code(ci_rw);
+
+ ASSERT(ci_rw == ci_exec);
+ (void)ci_exec;
if (BeamIsOpCode(*pc, op_i_generic_breakpoint)) {
- GenericBp* g = ci->u.gen_bp;
+ GenericBp* g = ci_rw->u.gen_bp;
if (g->data[erts_active_bp_ix()].flags == 0) {
/*
@@ -574,7 +587,7 @@ erts_clear_time_break(BpFunctions* f)
{
clear_break(f, ERTS_BPF_TIME_TRACE|ERTS_BPF_TIME_TRACE_ACTIVE);
}
-
+
void
erts_clear_all_breaks(BpFunctions* f)
{
@@ -605,16 +618,18 @@ erts_clear_module_break(Module *modp) {
erts_commit_staged_bp();
for (i = 0; i < n; ++i) {
- ErtsCodeInfo* ci;
+ const ErtsCodeInfo *ci_exec;
+ ErtsCodeInfo *ci_rw;
void *w_ptr;
- w_ptr = erts_writable_code_ptr(&modp->curr,
- code_hdr->functions[i]);
- ci = (ErtsCodeInfo*)w_ptr;
+ ci_exec = code_hdr->functions[i];
+ w_ptr = erts_writable_code_ptr(&modp->curr, ci_exec);
+ ci_rw = (ErtsCodeInfo*)w_ptr;
- uninstall_breakpoint(ci);
- consolidate_bp_data(modp, ci, 1);
- ASSERT(ci->u.gen_bp == NULL);
+ uninstall_breakpoint(ci_rw, ci_exec);
+ consolidate_bp_data(modp, ci_rw, 1);
+
+ ASSERT(ci_rw->u.gen_bp == NULL);
}
return n;
@@ -653,25 +668,53 @@ erts_clear_export_break(Module* modp, Export *ep)
* being the function which is the caller, but rather the function
* which we are about to return to.
*/
-static void fixup_cp_before_trace(Process *c_p, int *return_to_trace)
+static void fixup_cp_before_trace(Process *c_p,
+ Eterm cp_save[2],
+ int *return_to_trace)
{
+ const ErtsFrameLayout frame_layout = erts_frame_layout;
Eterm *cpp = c_p->stop;
+ if (frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ ASSERT(is_CP(cpp[1]));
+ cp_save[1] = cpp[1];
+ }
+
+ ASSERT(is_CP(cpp[0]));
+ cp_save[0] = cpp[0];
+
for (;;) {
- ErtsCodePtr w = cp_val(*cpp);
+ ErtsCodePtr w;
+
+ erts_inspect_frame(cpp, &w);
+
if (BeamIsReturnTrace(w)) {
- cpp += 3;
+ cpp += CP_SIZE + 2;
+ } else if (BeamIsReturnTimeTrace(w)) {
+ cpp += CP_SIZE + 1;
} else if (BeamIsReturnToTrace(w)) {
*return_to_trace = 1;
- cpp += 1;
- } else if (BeamIsReturnTimeTrace(w)) {
- cpp += 2;
+ cpp += CP_SIZE;
} else {
- break;
+ if (frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ ASSERT(is_CP(cpp[1]));
+ c_p->stop[1] = cpp[1];
+ }
+
+ ASSERT(is_CP(cpp[0]));
+ c_p->stop[0] = cpp[0];
+
+ return;
}
}
- c_p->stop[0] = (Eterm) cp_val(*cpp);
- ASSERT(is_CP(*cpp));
+}
+
+static void restore_cp_after_trace(Process *c_p, const Eterm cp_save[2]) {
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ c_p->stop[1] = cp_save[1];
+ }
+
+ c_p->stop[0] = cp_save[0];
}
BeamInstr
@@ -738,24 +781,41 @@ erts_generic_breakpoint(Process* c_p, ErtsCodeInfo *info, Eterm* reg)
ErtsCodePtr w;
Eterm* E;
- prev_info= erts_trace_time_call(c_p, info, bp->time);
+ prev_info = erts_trace_time_call(c_p, info, bp->time);
+
E = c_p->stop;
- w = (ErtsCodePtr) E[0];
- if (!(BeamIsReturnTrace(w) || BeamIsReturnToTrace(w) || BeamIsReturnTimeTrace(w))) {
- ASSERT(c_p->htop <= E && E <= c_p->hend);
- if (HeapWordsLeft(c_p) < 2) {
- (void) erts_garbage_collect(c_p, 2, reg, info->mfa.arity);
- ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
- }
- E = c_p->stop;
- ASSERT(c_p->htop <= E && E <= c_p->hend);
+ erts_inspect_frame(E, &w);
- E -= 2;
- E[1] = prev_info ? make_cp(erts_codeinfo_to_code(prev_info)) : NIL;
- E[0] = (Eterm) beam_return_time_trace;
- c_p->stop = E;
- }
+ if (!(BeamIsReturnTrace(w) ||
+ BeamIsReturnToTrace(w) ||
+ BeamIsReturnTimeTrace(w))) {
+ int need = CP_SIZE + 1;
+
+ ASSERT(c_p->htop <= E && E <= c_p->hend);
+
+ if (HeapWordsLeft(c_p) < need) {
+ (void) erts_garbage_collect(c_p, need,
+ reg, info->mfa.arity);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ }
+
+ E = c_p->stop;
+
+ ASSERT(c_p->htop <= E && E <= c_p->hend);
+
+ E -= 2;
+ E[1] = prev_info ? make_cp(erts_codeinfo_to_code(prev_info)) : NIL;
+ E[0] = make_cp(beam_return_time_trace);
+
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ E -= 1;
+ E[0] = make_cp(FRAME_POINTER(c_p));
+ FRAME_POINTER(c_p) = E;
+ }
+
+ c_p->stop = E;
+ }
}
if (bp_flags & ERTS_BPF_DEBUG) {
@@ -769,56 +829,91 @@ static ErtsTracer
do_call_trace(Process* c_p, ErtsCodeInfo* info, Eterm* reg,
int local, Binary* ms, ErtsTracer tracer)
{
+ Eterm cp_save[2] = {0, 0};
int return_to_trace = 0;
Uint32 flags;
Uint need = 0;
- Eterm cp_save;
- Eterm* E = c_p->stop;
+ Eterm* E;
- cp_save = E[0];
+ fixup_cp_before_trace(c_p, cp_save, &return_to_trace);
- fixup_cp_before_trace(c_p, &return_to_trace);
ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
flags = erts_call_trace(c_p, info, ms, reg, local, &tracer);
ERTS_REQ_PROC_MAIN_LOCK(c_p);
- E[0] = cp_save;
+ restore_cp_after_trace(c_p, cp_save);
+
+ E = c_p->stop;
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+
if ((flags & MATCH_SET_RETURN_TO_TRACE) && !return_to_trace) {
- need += 1;
+ need += CP_SIZE;
}
+
if (flags & MATCH_SET_RX_TRACE) {
- need += 3 + size_object(tracer);
+ need += CP_SIZE + 2 + size_object(tracer);
}
+
if (need) {
- ASSERT(c_p->htop <= E && E <= c_p->hend);
- if (HeapWordsLeft(c_p) < need) {
- (void) erts_garbage_collect(c_p, need, reg, info->mfa.arity);
- ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
- E = c_p->stop;
- }
- }
- if (flags & MATCH_SET_RETURN_TO_TRACE && !return_to_trace) {
- E -= 1;
- ASSERT(c_p->htop <= E && E <= c_p->hend);
- E[0] = (Eterm) beam_return_to_trace;
- c_p->stop = E;
- }
- if (flags & MATCH_SET_RX_TRACE) {
- E -= 3;
- c_p->stop = E;
- ASSERT(c_p->htop <= E && E <= c_p->hend);
- ASSERT(is_CP((Eterm) (UWord) (&info->mfa.module)));
- ASSERT(IS_TRACER_VALID(tracer));
- E[2] = copy_object(tracer, c_p);
- E[1] = make_cp(&info->mfa.module);
- E[0] = (Eterm) ((flags & MATCH_SET_EXCEPTION_TRACE) ?
- beam_exception_trace : beam_return_trace);
- erts_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
- ERTS_TRACE_FLAGS(c_p) |= F_EXCEPTION_TRACE;
- erts_proc_unlock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
+ ASSERT(c_p->htop <= E && E <= c_p->hend);
+
+ if (HeapWordsLeft(c_p) < need) {
+ (void) erts_garbage_collect(c_p, need, reg, info->mfa.arity);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ E = c_p->stop;
+ }
+
+ if ((flags & MATCH_SET_RETURN_TO_TRACE) && !return_to_trace) {
+ E -= CP_SIZE;
+
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ E[0] = make_cp(beam_return_to_trace);
+ } else {
+ E[1] = make_cp(beam_return_to_trace);
+ E[0] = make_cp(FRAME_POINTER(c_p));
+ FRAME_POINTER(c_p) = E;
+ }
+
+ ASSERT(c_p->htop <= E && E <= c_p->hend);
+
+ c_p->stop = E;
+ }
+
+ if (flags & MATCH_SET_RX_TRACE) {
+ ErtsCodePtr trace_cp;
+
+ if (flags & MATCH_SET_EXCEPTION_TRACE) {
+ trace_cp = beam_exception_trace;
+ } else {
+ trace_cp = beam_return_trace;
+ }
+
+ E -= 2;
+ E[1] = copy_object(tracer, c_p);
+ E[0] = make_cp(&info->mfa.module);
+
+ E -= CP_SIZE;
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ E[0] = make_cp(trace_cp);
+ } else {
+ E[1] = make_cp(trace_cp);
+ E[0] = make_cp(FRAME_POINTER(c_p));
+ FRAME_POINTER(c_p) = E;
+ }
+
+ ASSERT(c_p->htop <= E && E <= c_p->hend);
+ ASSERT(is_CP((Eterm)(&info->mfa.module)));
+ ASSERT(IS_TRACER_VALID(tracer));
+
+ c_p->stop = E;
+
+ erts_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
+ ERTS_TRACE_FLAGS(c_p) |= F_EXCEPTION_TRACE;
+ erts_proc_unlock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
+ }
}
+
return tracer;
}
@@ -1287,9 +1382,9 @@ set_break(BpFunctions* f, Binary *match_spec, Uint break_flags,
n = f->matched;
for (i = 0; i < n; i++) {
- set_function_break(f->matching[i].ci,
+ set_function_break(f->matching[i].ci_rw,
match_spec, break_flags,
- count_op, tracer);
+ count_op, tracer);
}
}
@@ -1423,7 +1518,7 @@ clear_break(BpFunctions* f, Uint break_flags)
n = f->matched;
for (i = 0; i < n; i++) {
- clear_function_break(f->matching[i].ci, break_flags);
+ clear_function_break(f->matching[i].ci_exec, break_flags);
}
}
diff --git a/erts/emulator/beam/beam_bp.h b/erts/emulator/beam/beam_bp.h
index 9941533e2d..4ae068b9b0 100644
--- a/erts/emulator/beam/beam_bp.h
+++ b/erts/emulator/beam/beam_bp.h
@@ -91,7 +91,8 @@ enum erts_break_op{
typedef Uint32 ErtsBpIndex;
typedef struct {
- ErtsCodeInfo *ci;
+ const ErtsCodeInfo *ci_exec;
+ ErtsCodeInfo *ci_rw;
Module* mod;
} BpFunction;
diff --git a/erts/emulator/beam/beam_common.c b/erts/emulator/beam/beam_common.c
index 1a1326450f..0ef3922301 100644
--- a/erts/emulator/beam/beam_common.c
+++ b/erts/emulator/beam/beam_common.c
@@ -402,21 +402,24 @@ Eterm error_atom[NUMBER_EXIT_CODES] = {
* This is needed to generate correct stacktraces when throwing errors from
* instructions that return like an ordinary function, such as call_nif. */
ErtsCodePtr erts_printable_return_address(Process* p, Eterm *E) {
- Eterm *ptr = E;
+ Eterm *stack_bottom = STACK_START(p);
+ Eterm *scanner = E;
- ASSERT(is_CP(*ptr));
+ ASSERT(is_CP(scanner[0]));
- while (ptr < STACK_START(p)) {
- ErtsCodePtr cp = cp_val(*ptr);
+ while (scanner < stack_bottom) {
+ ErtsCodePtr return_address;
- if (BeamIsReturnTrace(cp)) {
- ptr += 3;
- } else if (BeamIsReturnTimeTrace(cp)) {
- ptr += 2;
- } else if (BeamIsReturnToTrace(cp)) {
- ptr += 1;
+ erts_inspect_frame(scanner, &return_address);
+
+ if (BeamIsReturnTrace(return_address)) {
+ scanner += CP_SIZE + 2;
+ } else if (BeamIsReturnTimeTrace(return_address)) {
+ scanner += CP_SIZE + 1;
+ } else if (BeamIsReturnToTrace(return_address)) {
+ scanner += CP_SIZE;
} else {
- return cp;
+ return return_address;
}
}
@@ -519,18 +522,20 @@ handle_error(Process* c_p, ErtsCodePtr pc, Eterm* reg,
&& !(c_p->freason & EXF_PANIC)) {
ErtsCodePtr new_pc;
/* The Beam handler code (catch_end or try_end) checks reg[0]
- for THE_NON_VALUE to see if the previous code finished
- abnormally. If so, reg[1], reg[2] and reg[3] should hold the
- exception class, term and trace, respectively. (If the
- handler is just a trap to native code, these registers will
- be ignored.) */
+ * for THE_NON_VALUE to see if the previous code finished
+ * abnormally. If so, reg[1], reg[2] and reg[3] should hold
+ * the term, trace, and exception class, respectively. Note
+ * that the handler code will only need to move the class
+ * to reg[0] to have all registers correctly set up for the
+ * code that follows.
+ */
reg[0] = THE_NON_VALUE;
- reg[1] = exception_tag[GET_EXC_CLASS(c_p->freason)];
- reg[2] = Value;
- reg[3] = c_p->ftrace;
+ reg[1] = Value;
+ reg[2] = c_p->ftrace;
+ reg[3] = exception_tag[GET_EXC_CLASS(c_p->freason)];
if ((new_pc = next_catch(c_p, reg))) {
-#if defined(BEAMASM) && defined(NATIVE_ERLANG_STACK)
+#if defined(BEAMASM) && (defined(NATIVE_ERLANG_STACK) || defined(__aarch64__))
/* In order to make use of native call and return
* instructions, when beamasm uses the native stack it
* doesn't include the CP in the current stack frame,
@@ -539,7 +544,11 @@ handle_error(Process* c_p, ErtsCodePtr pc, Eterm* reg,
*
* Therefore, we need to bump the stack pointer as if this were an
* ordinary return. */
- ASSERT(is_CP(c_p->stop[0]));
+
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ FRAME_POINTER(c_p) = (Eterm*)cp_val(c_p->stop[0]);
+ }
+
c_p->stop += CP_SIZE;
#else
/* To avoid keeping stale references. */
@@ -566,8 +575,10 @@ handle_error(Process* c_p, ErtsCodePtr pc, Eterm* reg,
static ErtsCodePtr
next_catch(Process* c_p, Eterm *reg) {
int active_catches = c_p->catches > 0;
+ ErtsCodePtr return_to_trace_address = NULL;
int have_return_to_trace = 0;
- Eterm *ptr, *prev, *return_to_trace_ptr = NULL;
+ Eterm *ptr, *prev;
+ ErtsCodePtr handler;
ptr = prev = c_p->stop;
ASSERT(ptr <= STACK_START(c_p));
@@ -583,53 +594,82 @@ next_catch(Process* c_p, Eterm *reg) {
}
while (ptr < STACK_START(c_p)) {
- if (is_catch(*ptr)) {
- if (active_catches) goto found_catch;
- ptr++;
- }
- else if (is_CP(*ptr)) {
- prev = ptr;
- if (BeamIsReturnTrace(cp_val(*prev))) {
- if (cp_val(*prev) == beam_exception_trace) {
- ErtsCodeMFA *mfa = (ErtsCodeMFA*)cp_val(ptr[1]);
- erts_trace_exception(c_p, mfa,
- reg[1], reg[2],
- ERTS_TRACER_FROM_ETERM(ptr+2));
- }
- /* Skip MFA, tracer, and CP. */
- ptr += 3;
- } else if (BeamIsReturnToTrace(cp_val(*prev))) {
- have_return_to_trace = !0; /* Record next cp */
- return_to_trace_ptr = NULL;
- /* Skip CP. */
- ptr += 1;
- } else if (BeamIsReturnTimeTrace(cp_val(*prev))) {
- /* Skip prev_info and CP. */
- ptr += 2;
- } else {
- if (have_return_to_trace) {
- /* Record this cp as possible return_to trace cp */
- have_return_to_trace = 0;
- return_to_trace_ptr = ptr;
- } else return_to_trace_ptr = NULL;
- ptr++;
- }
- } else ptr++;
+ Eterm val = ptr[0];
+
+ if (is_catch(val)) {
+ if (active_catches) {
+ goto found_catch;
+ }
+
+ ptr++;
+ } else if (is_CP(val)) {
+ ErtsCodePtr return_address;
+ const Eterm *frame;
+
+ prev = ptr;
+ frame = erts_inspect_frame(ptr, &return_address);
+
+ if (BeamIsReturnTrace(return_address)) {
+ if (return_address == beam_exception_trace) {
+ ErtsTracer *tracer;
+ ErtsCodeMFA *mfa;
+
+ mfa = (ErtsCodeMFA*)cp_val(frame[0]);
+ tracer = ERTS_TRACER_FROM_ETERM(&frame[1]);
+
+ ASSERT_MFA(mfa);
+ erts_trace_exception(c_p, mfa, reg[3], reg[1], tracer);
+ }
+
+ ptr += CP_SIZE + 2;
+ } else if (BeamIsReturnTimeTrace(return_address)) {
+ ptr += CP_SIZE + 1;
+ } else if (BeamIsReturnToTrace(return_address)) {
+ have_return_to_trace = 1; /* Record next cp */
+ return_to_trace_address = NULL;
+
+ ptr += CP_SIZE;
+ } else {
+ /* This is an ordinary call frame: if the previous frame was a
+ * return_to trace we should record this CP as a return_to
+ * candidate. */
+ if (have_return_to_trace) {
+ return_to_trace_address = return_address;
+ have_return_to_trace = 0;
+ } else {
+ return_to_trace_address = NULL;
+ }
+
+ ptr += CP_SIZE;
+ }
+ } else {
+ ptr++;
+ }
}
+
return NULL;
found_catch:
ASSERT(ptr < STACK_START(c_p));
c_p->stop = prev;
- if (IS_TRACED_FL(c_p, F_TRACE_RETURN_TO) && return_to_trace_ptr) {
- /* The stackframe closest to the catch contained an
- * return_to_trace entry, so since the execution now
- * continues after the catch, a return_to trace message
- * would be appropriate.
- */
- erts_trace_return_to(c_p, cp_val(*return_to_trace_ptr));
+
+ if (IS_TRACED_FL(c_p, F_TRACE_RETURN_TO) && return_to_trace_address) {
+ /* The stackframe closest to the catch contained an
+ * return_to_trace entry, so since the execution now
+ * continues after the catch, a return_to trace message
+ * would be appropriate.
+ */
+ erts_trace_return_to(c_p, return_to_trace_address);
}
- return catch_pc(*ptr);
+
+ /* Clear the try_tag or catch_tag in the stack frame so that we
+ * don't have to do it in the JITted code for the try_case
+ * instruction. (Unfortunately, a catch_end will still need to
+ * clear the catch_tag because it is executed even when no
+ * exception has occurred.) */
+ handler = catch_pc(*ptr);
+ *ptr = NIL;
+ return handler;
}
/*
@@ -753,35 +793,39 @@ gather_stacktrace(Process* p, struct StackTrace* s, int depth)
while (ptr < STACK_START(p) && depth > 0) {
if (is_CP(*ptr)) {
- ErtsCodePtr cp = cp_val(*ptr);
-
- if (BeamIsReturnTrace(cp)) {
- ptr += 3;
- } else if (BeamIsReturnTimeTrace(cp)) {
- ptr += 2;
- } else if (BeamIsReturnToTrace(cp)) {
- ptr += 1;
+ ErtsCodePtr return_address;
+
+ erts_inspect_frame(ptr, &return_address);
+
+ if (BeamIsReturnTrace(return_address)) {
+ ptr += CP_SIZE + 2;
+ } else if (BeamIsReturnTimeTrace(return_address)) {
+ ptr += CP_SIZE + 1;
+ } else if (BeamIsReturnToTrace(return_address)) {
+ ptr += CP_SIZE;
} else {
- if (cp != prev) {
- void *adjusted_cp;
+ if (return_address != prev) {
+ ErtsCodePtr adjusted_address;
/* Record non-duplicates only */
- prev = cp;
+ prev = return_address;
+
#ifdef BEAMASM
- /*
- * Some instructions (e.g. call) are shorter than one word,
- * so we will need to subtract one byte from the pointer
- * to avoid ending up before the start of the instruction.
- */
- adjusted_cp = ((char *) cp) - 1;
+ /* Some instructions (e.g. call) are shorter than one word,
+ * so we will need to subtract one byte from the pointer
+ * to avoid ending up before the start of the
+ * instruction. */
+ adjusted_address = ((char*)return_address) - 1;
#else
- /* Subtract one word from the pointer. */
- adjusted_cp = ((char *) cp) - sizeof(UWord);
+ /* Subtract one word from the pointer. */
+ adjusted_address = ((char*)return_address) - sizeof(UWord);
#endif
- s->trace[s->depth++] = adjusted_cp;
+
+ s->trace[s->depth++] = adjusted_address;
depth--;
}
- ptr++;
+
+ ptr += CP_SIZE;
}
} else {
ptr++;
@@ -1351,7 +1395,7 @@ apply_bif_error_adjustment(Process *p, Export *ep,
* error handling code.
*/
if (need == 0) {
- need = 1; /* i_apply_only */
+ need = CP_SIZE; /* i_apply_only */
}
if (HeapWordsLeft(p) < need) {
@@ -1365,7 +1409,17 @@ apply_bif_error_adjustment(Process *p, Export *ep,
* Push the continuation pointer for the current function to the stack.
*/
p->stop -= need;
- p->stop[0] = make_cp(I);
+
+ switch (erts_frame_layout) {
+ case ERTS_FRAME_LAYOUT_RA:
+ p->stop[0] = make_cp(I);
+ break;
+ case ERTS_FRAME_LAYOUT_FP_RA:
+ p->stop[0] = make_cp(FRAME_POINTER(p));
+ p->stop[1] = make_cp(I);
+ FRAME_POINTER(p) = &p->stop[0];
+ break;
+ }
} else {
/*
* Called from an i_apply_last_* instruction.
@@ -1377,7 +1431,17 @@ apply_bif_error_adjustment(Process *p, Export *ep,
* and then add a dummy stackframe for the i_apply_last* instruction
* to discard.
*/
- p->stop[0] = make_cp(I);
+ switch (erts_frame_layout) {
+ case ERTS_FRAME_LAYOUT_RA:
+ p->stop[0] = make_cp(I);
+ break;
+ case ERTS_FRAME_LAYOUT_FP_RA:
+ p->stop[0] = make_cp(FRAME_POINTER(p));
+ p->stop[1] = make_cp(I);
+ FRAME_POINTER(p) = &p->stop[0];
+ break;
+ }
+
p->stop -= need;
}
}
@@ -1596,10 +1660,21 @@ erts_hibernate(Process* c_p, Eterm* reg)
c_p->arg_reg[0] = module;
c_p->arg_reg[1] = function;
c_p->arg_reg[2] = args;
- c_p->stop = c_p->hend - CP_SIZE; /* Keep first continuation pointer */
- ASSERT(c_p->stop[0] == make_cp(beam_normal_exit));
+ c_p->stop = c_p->hend - CP_SIZE; /* Keep first continuation pointer */
+
+ switch(erts_frame_layout) {
+ case ERTS_FRAME_LAYOUT_RA:
+ ASSERT(c_p->stop[0] == make_cp(beam_normal_exit));
+ break;
+ case ERTS_FRAME_LAYOUT_FP_RA:
+ FRAME_POINTER(c_p) = &c_p->stop[0];
+ ASSERT(c_p->stop[0] == make_cp(NULL));
+ ASSERT(c_p->stop[1] == make_cp(beam_normal_exit));
+ break;
+ }
+
c_p->catches = 0;
- c_p->i = beam_apply;
+ c_p->i = beam_run_process;
/*
* If there are no waiting messages, garbage collect and
@@ -1628,8 +1703,7 @@ ErtsCodePtr
call_fun(Process* p, /* Current process. */
int arity, /* Number of arguments for Fun. */
Eterm* reg, /* Contents of registers. */
- Eterm args, /* THE_NON_VALUE or pre-built list of arguments. */
- Export **epp) /* Export entry, if any. */
+ Eterm args) /* THE_NON_VALUE or pre-built list of arguments. */
{
Eterm fun = reg[arity];
Eterm hdr;
@@ -1748,7 +1822,6 @@ call_fun(Process* p, /* Current process. */
reg[1] = fun;
reg[2] = args;
reg[3] = NIL;
- *epp = ep;
return ep->addresses[code_ix];
}
}
@@ -1761,7 +1834,6 @@ call_fun(Process* p, /* Current process. */
if (arity == actual_arity) {
DTRACE_GLOBAL_CALL(p, &ep->info.mfa);
- *epp = ep;
return ep->addresses[erts_active_code_ix()];
} else {
/*
@@ -1792,7 +1864,7 @@ call_fun(Process* p, /* Current process. */
}
ErtsCodePtr
-apply_fun(Process* p, Eterm fun, Eterm args, Eterm* reg, Export **epp)
+apply_fun(Process* p, Eterm fun, Eterm args, Eterm* reg)
{
int arity;
Eterm tmp;
@@ -1819,16 +1891,14 @@ apply_fun(Process* p, Eterm fun, Eterm args, Eterm* reg, Export **epp)
return NULL;
}
reg[arity] = fun;
- return call_fun(p, arity, reg, args, epp);
+ return call_fun(p, arity, reg, args);
}
ErlFunThing*
-new_fun_thing(Process* p, ErlFunEntry* fe, int num_free)
+new_fun_thing(Process* p, ErlFunEntry* fe, int arity, int num_free)
{
- const ErtsCodeMFA *mfa;
ErlFunThing* funp;
- mfa = erts_code_to_codemfa(fe->address);
funp = (ErlFunThing*) p->htop;
p->htop += ERL_FUN_SIZE + num_free;
erts_refc_inc(&fe->refc, 2);
@@ -1839,7 +1909,15 @@ new_fun_thing(Process* p, ErlFunEntry* fe, int num_free)
funp->fe = fe;
funp->num_free = num_free;
funp->creator = p->common.id;
- funp->arity = mfa->arity - num_free;
+ funp->arity = arity;
+
+#ifdef DEBUG
+ {
+ const ErtsCodeMFA *mfa = erts_get_fun_mfa(fe);
+ ASSERT(funp->arity == mfa->arity - num_free);
+ ASSERT(arity == fe->arity);
+ }
+#endif
return funp;
}
diff --git a/erts/emulator/beam/beam_common.h b/erts/emulator/beam/beam_common.h
index 52140c8a3e..56bfec5f9f 100644
--- a/erts/emulator/beam/beam_common.h
+++ b/erts/emulator/beam/beam_common.h
@@ -255,13 +255,14 @@ Export* call_error_handler(Process* p, const ErtsCodeMFA* mfa,
Export* fixed_apply(Process* p, Eterm* reg, Uint arity,
ErtsCodePtr I, Uint offs);
Export* apply(Process* p, Eterm* reg, ErtsCodePtr I, Uint offs);
-ErtsCodePtr call_fun(Process* p, int arity, Eterm* reg,
- Eterm args, Export **epp);
-ErtsCodePtr apply_fun(Process* p, Eterm fun, Eterm args,
- Eterm* reg, Export **epp);
+ErtsCodePtr call_fun(Process* p, int arity, Eterm* reg, Eterm args);
+ErtsCodePtr apply_fun(Process* p, Eterm fun, Eterm args, Eterm* reg);
Eterm new_fun(Process* p, Eterm* reg,
ErlFunEntry* fe, int num_free);
-ErlFunThing* new_fun_thing(Process* p, ErlFunEntry* fe, int num_free);
+ErlFunThing* new_fun_thing(Process* p,
+ ErlFunEntry* fe,
+ int arity,
+ int num_free);
int is_function2(Eterm Term, Uint arity);
Eterm erts_gc_new_map(Process* p, Eterm* reg, Uint live,
Uint n, const Eterm* data);
@@ -281,17 +282,41 @@ void copy_in_registers(Process *c_p, Eterm *reg);
void check_monitor_long_schedule(Process *c_p, Uint64 start_time,
ErtsCodePtr start_time_i);
-
-extern ErtsCodePtr beam_apply;
+extern ErtsCodePtr beam_run_process;
extern ErtsCodePtr beam_normal_exit;
extern ErtsCodePtr beam_exit;
extern ErtsCodePtr beam_save_calls;
extern ErtsCodePtr beam_bif_export_trap;
extern ErtsCodePtr beam_export_trampoline;
extern ErtsCodePtr beam_continue_exit;
+extern ErtsCodePtr beam_unloaded_fun;
+
extern ErtsCodePtr beam_return_to_trace; /* OpCode(i_return_to_trace) */
extern ErtsCodePtr beam_return_trace; /* OpCode(i_return_trace) */
extern ErtsCodePtr beam_exception_trace; /* OpCode(i_exception_trace) */
extern ErtsCodePtr beam_return_time_trace; /* OpCode(i_return_time_trace) */
+/** @brief Inspects an Erlang stack frame, returning the base of the data
+ * (first Y register).
+ * @param[in] frame The frame to inspect. Must point at a CP.
+ * @param[out] return_address The return address of \p frame */
+ERTS_GLB_INLINE
+const Eterm *erts_inspect_frame(Eterm *frame, ErtsCodePtr *return_address);
+
+#if ERTS_GLB_INLINE_INCL_FUNC_DEF
+ERTS_GLB_INLINE
+const Eterm *erts_inspect_frame(Eterm *frame, ErtsCodePtr *return_address) {
+ ASSERT(is_CP(frame[0]));
+
+ if (ERTS_LIKELY(erts_frame_layout == ERTS_FRAME_LAYOUT_RA)) {
+ *return_address = (ErtsCodePtr)cp_val(frame[0]);
+ return &frame[1];
+ }
+
+ ASSERT(cp_val(frame[0]) == NULL || frame < (Eterm*)cp_val(frame[0]));
+ *return_address = (ErtsCodePtr)cp_val(frame[1]);
+ return &frame[2];
+}
+#endif /* ERTS_GLB_INLINE_INCL_FUNC_DEF */
+
#endif /* _BEAM_COMMON_H_ */
diff --git a/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c
index a50ec46659..e995ca28db 100644
--- a/erts/emulator/beam/beam_debug.c
+++ b/erts/emulator/beam/beam_debug.c
@@ -671,7 +671,7 @@ print_op(fmtfn_t to, void *to_arg, int op, int size, BeamInstr* addr)
case 'F': /* Function definition */
{
ErlFunEntry* fe = (ErlFunEntry *) *ap;
- const ErtsCodeMFA *cmfa = erts_find_function_from_pc(fe->address);
+ const ErtsCodeMFA *cmfa = erts_get_fun_mfa(fe);
erts_print(to, to_arg, "fun(`%T`:`%T`/%bpu)", cmfa->module,
cmfa->function, cmfa->arity);
ap++;
@@ -878,7 +878,7 @@ print_op(fmtfn_t to, void *to_arg, int op, int size, BeamInstr* addr)
}
}
break;
- case op_i_make_fun3_Fdt:
+ case op_i_make_fun3_Fdtt:
{
int n = unpacked[-1];
diff --git a/erts/emulator/beam/beam_file.c b/erts/emulator/beam/beam_file.c
index afb5b1206c..2148e037ad 100644
--- a/erts/emulator/beam/beam_file.c
+++ b/erts/emulator/beam/beam_file.c
@@ -57,7 +57,10 @@ struct BeamCodeReader__ {
BeamFile *file;
BeamOp *pending;
- Uint first;
+
+ BeamOpArg current_func_label;
+ BeamOpArg current_entry_label;
+ int first;
};
typedef struct {
@@ -230,7 +233,6 @@ static int beamreader_read_tagged(BeamReader *reader, TaggedNumber *val) {
}
static int parse_atom_chunk(BeamFile *beam,
- ErtsAtomEncoding enc,
IFF_Chunk *chunk) {
BeamFile_AtomTable *atoms;
BeamReader reader;
@@ -255,7 +257,6 @@ static int parse_atom_chunk(BeamFile *beam,
atoms->entries = erts_alloc(ERTS_ALC_T_PREPARED_CODE,
count * sizeof(atoms->entries[0]));
atoms->entries[0] = THE_NON_VALUE;
- atoms->encoding = enc;
atoms->count = count;
for (i = 1; i < count; i++) {
@@ -266,7 +267,7 @@ static int parse_atom_chunk(BeamFile *beam,
LoadAssert(beamreader_read_u8(&reader, &length));
LoadAssert(beamreader_read_bytes(&reader, length, &string));
- atom = erts_atom_put(string, length, enc, 1);
+ atom = erts_atom_put(string, length, ERTS_ATOM_ENC_UTF8, 1);
LoadAssert(atom != THE_NON_VALUE);
atoms->entries[i] = atom;
@@ -320,24 +321,23 @@ static int parse_import_chunk(BeamFile *beam, IFF_Chunk *chunk) {
return 1;
}
-static int parse_export_chunk(BeamFile *beam, IFF_Chunk *chunk) {
- BeamFile_ExportTable *exports;
+static int parse_export_table(BeamFile_ExportTable *dest,
+ BeamFile *beam, IFF_Chunk *chunk) {
BeamFile_AtomTable *atoms;
BeamReader reader;
Sint32 count;
int i;
- exports = &beam->exports;
- ASSERT(exports->entries == NULL);
+ ASSERT(dest->entries == NULL);
beamreader_init(chunk->data, chunk->size, &reader);
LoadAssert(beamreader_read_i32(&reader, &count));
- LoadAssert(CHECK_ITEM_COUNT(count, 0, sizeof(exports->entries[0])));
+ LoadAssert(CHECK_ITEM_COUNT(count, 0, sizeof(dest->entries[0])));
- exports->entries = erts_alloc(ERTS_ALC_T_PREPARED_CODE,
- count * sizeof(exports->entries[0]));
- exports->count = count;
+ dest->entries = erts_alloc(ERTS_ALC_T_PREPARED_CODE,
+ count * sizeof(dest->entries[0]));
+ dest->count = count;
atoms = &beam->atoms;
@@ -352,14 +352,24 @@ static int parse_export_chunk(BeamFile *beam, IFF_Chunk *chunk) {
LoadAssert(arity >= 0 && arity <= MAX_ARG);
LoadAssert(label >= 0);
- exports->entries[i].function = atoms->entries[atom_index];
- exports->entries[i].arity = arity;
- exports->entries[i].label = label;
+ dest->entries[i].function = atoms->entries[atom_index];
+ dest->entries[i].arity = arity;
+ dest->entries[i].label = label;
}
return 1;
}
+static int parse_export_chunk(BeamFile *beam, IFF_Chunk *chunk) {
+ return parse_export_table(&beam->exports, beam, chunk);
+}
+
+#ifdef BEAMASM
+static int parse_locals_chunk(BeamFile *beam, IFF_Chunk *chunk) {
+ return parse_export_table(&beam->locals, beam, chunk);
+}
+#endif
+
static int parse_lambda_chunk(BeamFile *beam, IFF_Chunk *chunk) {
BeamFile_LambdaTable *lambdas;
BeamFile_AtomTable *atoms;
@@ -726,7 +736,7 @@ static int read_beam_chunks(const IFF_File *file,
enum beamfile_read_result
beamfile_read(const byte *data, size_t size, BeamFile *beam) {
static const Uint chunk_iffs[] = {
- MakeIffId('A', 't', 'o', 'm'), /* 0 */
+ MakeIffId('A', 't', 'U', '8'), /* 0 */
MakeIffId('C', 'o', 'd', 'e'), /* 1 */
MakeIffId('S', 't', 'r', 'T'), /* 2 */
MakeIffId('I', 'm', 'p', 'T'), /* 3 */
@@ -736,10 +746,11 @@ beamfile_read(const byte *data, size_t size, BeamFile *beam) {
MakeIffId('A', 't', 't', 'r'), /* 7 */
MakeIffId('C', 'I', 'n', 'f'), /* 8 */
MakeIffId('L', 'i', 'n', 'e'), /* 9 */
- MakeIffId('A', 't', 'U', '8'), /* 10 */
+ MakeIffId('L', 'o', 'c', 'T'), /* 10 */
+ MakeIffId('A', 't', 'o', 'm'), /* 11 */
};
- static const int ATOM_CHUNK = 0;
+ static const int UTF8_ATOM_CHUNK = 0;
static const int CODE_CHUNK = 1;
static const int STR_CHUNK = 2;
static const int IMP_CHUNK = 3;
@@ -749,7 +760,10 @@ beamfile_read(const byte *data, size_t size, BeamFile *beam) {
static const int ATTR_CHUNK = 7;
static const int COMPILE_CHUNK = 8;
static const int LINE_CHUNK = 9;
- static const int UTF8_ATOM_CHUNK = 10;
+#ifdef BEAMASM
+ static const int LOC_CHUNK = 10;
+#endif
+ static const int OBSOLETE_ATOM_CHUNK = 11;
static const int NUM_CHUNKS = sizeof(chunk_iffs) / sizeof(chunk_iffs[0]);
@@ -757,8 +771,6 @@ beamfile_read(const byte *data, size_t size, BeamFile *beam) {
/* MSVC doesn't like the use of NUM_CHUNKS here */
IFF_Chunk chunks[sizeof(chunk_iffs) / sizeof(chunk_iffs[0])];
- IFF_Chunk *atom_chunk;
- ErtsAtomEncoding enc;
sys_memset(beam, 0, sizeof(*beam));
@@ -780,18 +792,16 @@ beamfile_read(const byte *data, size_t size, BeamFile *beam) {
goto error;
}
- if (chunks[UTF8_ATOM_CHUNK].size > 0) {
- atom_chunk = &chunks[UTF8_ATOM_CHUNK];
- enc = ERTS_ATOM_ENC_UTF8;
- } else if (chunks[ATOM_CHUNK].size > 0) {
- atom_chunk = &chunks[ATOM_CHUNK];
- enc = ERTS_ATOM_ENC_LATIN1;
- } else {
- error = BEAMFILE_READ_MISSING_ATOM_TABLE;
+ if (chunks[UTF8_ATOM_CHUNK].size == 0) {
+ if (chunks[OBSOLETE_ATOM_CHUNK].size == 0) {
+ /* Old atom table chunk is also missing. */
+ error = BEAMFILE_READ_MISSING_ATOM_TABLE;
+ } else {
+ /* Old atom table chunk table exists. (OTP 20 or earlier.) */
+ error = BEAMFILE_READ_OBSOLETE_ATOM_TABLE;
+ }
goto error;
- }
-
- if (!parse_atom_chunk(beam, enc, atom_chunk)) {
+ } else if (!parse_atom_chunk(beam, &chunks[UTF8_ATOM_CHUNK])) {
error = BEAMFILE_READ_CORRUPT_ATOM_TABLE;
goto error;
}
@@ -812,6 +822,15 @@ beamfile_read(const byte *data, size_t size, BeamFile *beam) {
goto error;
}
+#ifdef BEAMASM
+ if (erts_jit_asm_dump && chunks[LOC_CHUNK].size > 0) {
+ if (!parse_locals_chunk(beam, &chunks[LOC_CHUNK])) {
+ error = BEAMFILE_READ_CORRUPT_LOCALS_TABLE;
+ goto error;
+ }
+ }
+#endif
+
if (chunks[LAMBDA_CHUNK].size > 0) {
if (!parse_lambda_chunk(beam, &chunks[LAMBDA_CHUNK])) {
error = BEAMFILE_READ_CORRUPT_LAMBDA_TABLE;
@@ -849,8 +868,8 @@ beamfile_read(const byte *data, size_t size, BeamFile *beam) {
MD5Init(&md5);
MD5Update(&md5,
- (byte*)atom_chunk->data,
- atom_chunk->size);
+ (byte*)chunks[UTF8_ATOM_CHUNK].data,
+ chunks[UTF8_ATOM_CHUNK].size);
MD5Update(&md5,
(byte*)chunks[CODE_CHUNK].data,
chunks[CODE_CHUNK].size);
@@ -940,6 +959,13 @@ void beamfile_free(BeamFile *beam) {
beam->exports.entries = NULL;
}
+#ifdef BEAMASM
+ if (beam->locals.entries) {
+ erts_free(ERTS_ALC_T_PREPARED_CODE, beam->locals.entries);
+ beam->locals.entries = NULL;
+ }
+#endif
+
if (beam->lambdas.entries) {
erts_free(ERTS_ALC_T_PREPARED_CODE, beam->lambdas.entries);
beam->lambdas.entries = NULL;
@@ -1465,82 +1491,101 @@ static int beamcodereader_read_next(BeamCodeReader *code_reader, BeamOp **out) {
return 1;
}
+static void synthesize_func_end(BeamCodeReader *code_reader) {
+ BeamOp *func_end;
+
+ func_end = beamopallocator_new_op(code_reader->allocator);
+ func_end->op = genop_int_func_end_2;
+ func_end->arity = 2;
+
+ ASSERT(code_reader->current_func_label.type == TAG_u);
+ func_end->a[0].val = code_reader->current_func_label.val;
+ func_end->a[0].type = TAG_f;
+
+ ASSERT(code_reader->current_entry_label.type == TAG_u);
+ func_end->a[1].val = code_reader->current_entry_label.val;
+ func_end->a[1].type = TAG_f;
+
+ func_end->next = code_reader->pending;
+ code_reader->pending = func_end;
+}
int beamcodereader_next(BeamCodeReader *code_reader, BeamOp **out) {
BeamOp *op;
if (code_reader->pending) {
- *out = code_reader->pending;
- code_reader->pending = code_reader->pending->next;
+ op = code_reader->pending;
+ code_reader->pending = op->next;
+
+ *out = op;
return 1;
}
LoadAssert(beamcodereader_read_next(code_reader, &op));
- if (op->op != genop_label_1) {
- *out = op;
- return 1;
- } else {
- /*
- * To simplify the rest of the loading process, attempt
- * to synthesize int_func_start/5 and int_func_end/0
- * instructions.
+ switch (op->op) {
+ case genop_label_1:
+ /* To simplify the rest of the loading process, attempt to synthesize
+ * int_func_start/5 and int_func_end/2 instructions.
*
* We look for the following instruction sequence to
* find function boundaries: label Lbl | line Loc | func_info M F A.
* (Where the line instruction is optional.)
*
- * So far we have seen a label/0 instruction. Put this
- * instruction into the pending queue and decode the next
- * instruction.
- */
+ * So far we have seen a label/0 instruction. Put this instruction into
+ * the pending queue and decode the next instruction. */
code_reader->pending = op;
LoadAssert(beamcodereader_read_next(code_reader, &op->next));
op = op->next;
- /*
- * If the current instruction is a line instruction, append it to
- * the pending queue and decode the following instruction.
- */
+ /* If the current instruction is a line instruction, append it to
+ * the pending queue and decode the following instruction. */
if (op->op == genop_line_1) {
LoadAssert(beamcodereader_read_next(code_reader, &op->next));
op = op->next;
}
- /*
- * If the current instruction is a func_info instruction, we
- * have found a function boundary.
- */
- if (op->op == genop_func_info_3) {
+ /* The code must not end abruptly after a label. */
+ LoadAssert(op->op != genop_int_code_end_0);
+
+ /* If the current instruction is a func_info instruction, we
+ * have found a function boundary. */
+ if (ERTS_LIKELY(op->op != genop_func_info_3)) {
+ op->next = NULL;
+ } else {
+ BeamOpArg func_label, entry_label;
BeamOp *func_start;
+ BeamOp *entry_op;
BeamOp *next;
- /*
- * Prepare to walk through the queue of pending instructions.
- */
+ /* The func_info/3 instruction must be followed by its entry
+ * label. */
+ LoadAssert(beamcodereader_read_next(code_reader, &entry_op));
+ LoadAssert(entry_op->op == genop_label_1);
+ entry_label = entry_op->a[0];
+ LoadAssert(entry_label.type == TAG_u);
+ entry_op->next = NULL;
+
+ /* Prepare to walk through the queue of pending instructions. */
op = code_reader->pending;
- ASSERT(op->op == genop_label_1);
- /*
- * Allocate the int_func_start/0 function.
- */
- func_start = beamopallocator_new_op(code_reader->allocator);
- func_start->op = genop_int_func_start_5;
- func_start->arity = 5;
+ /* Pick up the label from the first label/1 instruction. */
+ ASSERT(op->op == genop_label_1);
+ func_label = op->a[0];
+ LoadAssert(func_label.type == TAG_u);
- /*
- * Pick up the label from the label/1 instruction.
- */
- func_start->a[0] = op->a[0];
next = op->next;
beamopallocator_free_op(code_reader->allocator, op);
op = next;
- /*
- * If the current instruction is a line/1 instruction,
- * pick up the location from that instruction.
- * Otherwise use NIL.
- */
+ /* Allocate the int_func_start/0 function. */
+ func_start = beamopallocator_new_op(code_reader->allocator);
+ func_start->op = genop_int_func_start_5;
+ func_start->arity = 5;
+ func_start->a[0] = func_label;
+
+ /* If the current instruction is a line/1 instruction, pick up the
+ * location from that instruction. Otherwise use NIL. */
func_start->a[1].type = TAG_n;
if (op->op == genop_line_1) {
func_start->a[1] = op->a[0];
@@ -1549,45 +1594,46 @@ int beamcodereader_next(BeamCodeReader *code_reader, BeamOp **out) {
op = next;
}
- /*
- * Pick up the MFA from the func_info/3 instruction.
- */
+ /* Pick up the MFA from the func_info/3 instruction. */
ASSERT(op->op == genop_func_info_3);
func_start->a[2] = op->a[0];
func_start->a[3] = op->a[1];
func_start->a[4] = op->a[2];
beamopallocator_free_op(code_reader->allocator, op);
- /*
- * Put the int_func_start/5 instruction into the pending
- * queue.
- */
+ /* Put the int_func_start/5 instruction into the pending queue,
+ * and link the entry label after it. */
code_reader->pending = func_start;
- op = func_start;
-
- /*
- * Unless this is the first function in the module,
- * synthesize an int_func_end/0 instruction and prepend
- * it to the pending queue.
- */
- if (code_reader->first) {
- code_reader->first = 0;
- } else {
- BeamOp *func_end;
- func_end = beamopallocator_new_op(code_reader->allocator);
- func_end->op = genop_int_func_end_0;
- func_end->arity = 0;
- func_end->next = code_reader->pending;
- code_reader->pending = func_end;
+ func_start->next = entry_op;
+
+ /* Unless this is the first function in the module, synthesize an
+ * int_func_end/2 instruction and prepend it to the pending
+ * queue. */
+ if (!code_reader->first) {
+ synthesize_func_end(code_reader);
}
+
+ code_reader->current_func_label = func_label;
+ code_reader->current_entry_label = entry_label;
+ code_reader->first = 0;
+ }
+
+ /* At this point, there is at least one instruction in the pending
+ * queue, and the op variable points to the last instruction in the
+ * queue. */
+ return beamcodereader_next(code_reader, out);
+ case genop_int_code_end_0:
+ code_reader->pending = op;
+
+ if (!code_reader->first) {
+ synthesize_func_end(code_reader);
}
- /*
- * At this point, there is at least one instruction in the pending
- * queue. The op variable points to the last instruction in the queue.
- */
op->next = NULL;
return beamcodereader_next(code_reader, out);
+ default:
+ *out = op;
+ return 1;
}
}
diff --git a/erts/emulator/beam/beam_file.h b/erts/emulator/beam/beam_file.h
index fe68447b8e..91b3d5e149 100644
--- a/erts/emulator/beam/beam_file.h
+++ b/erts/emulator/beam/beam_file.h
@@ -54,10 +54,6 @@ int iff_init(const byte *data, size_t size, IFF_File *iff);
int iff_read_chunk(IFF_File *iff, Uint id, IFF_Chunk *chunk);
typedef struct {
- /* The encoding that was used to create this table. This is only used for
- * version tests. */
- ErtsAtomEncoding encoding;
-
Sint32 count;
Eterm *entries;
} BeamFile_AtomTable;
@@ -150,6 +146,9 @@ typedef struct {
BeamFile_AtomTable atoms;
BeamFile_ImportTable imports;
BeamFile_ExportTable exports;
+#ifdef BEAMASM
+ BeamFile_ExportTable locals;
+#endif
BeamFile_LambdaTable lambdas;
BeamFile_LineTable lines;
@@ -178,6 +177,7 @@ enum beamfile_read_result {
/* Mandatory chunks */
BEAMFILE_READ_MISSING_ATOM_TABLE,
+ BEAMFILE_READ_OBSOLETE_ATOM_TABLE,
BEAMFILE_READ_CORRUPT_ATOM_TABLE,
BEAMFILE_READ_MISSING_CODE_CHUNK,
BEAMFILE_READ_CORRUPT_CODE_CHUNK,
@@ -185,6 +185,7 @@ enum beamfile_read_result {
BEAMFILE_READ_CORRUPT_EXPORT_TABLE,
BEAMFILE_READ_MISSING_IMPORT_TABLE,
BEAMFILE_READ_CORRUPT_IMPORT_TABLE,
+ BEAMFILE_READ_CORRUPT_LOCALS_TABLE,
/* Optional chunks */
BEAMFILE_READ_CORRUPT_LAMBDA_TABLE,
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c
index 063b740c08..aac381b522 100644
--- a/erts/emulator/beam/beam_load.c
+++ b/erts/emulator/beam/beam_load.c
@@ -47,6 +47,8 @@ Uint erts_total_code_size;
static int load_code(LoaderState *stp);
+#define PLEASE_RECOMPILE "please re-compile this module with an Erlang/OTP " ERLANG_OTP_RELEASE " compiler"
+
/**********************************************************************/
void init_load(void)
@@ -128,6 +130,8 @@ erts_prepare_loading(Binary* magic, Process *c_p, Eterm group_leader,
BeamLoadError0(stp, "corrupt file header");
case BEAMFILE_READ_MISSING_ATOM_TABLE:
BeamLoadError0(stp, "missing atom table");
+ case BEAMFILE_READ_OBSOLETE_ATOM_TABLE:
+ BeamLoadError0(stp, PLEASE_RECOMPILE);
case BEAMFILE_READ_CORRUPT_ATOM_TABLE:
BeamLoadError0(stp, "corrupt atom table");
case BEAMFILE_READ_MISSING_CODE_CHUNK:
@@ -148,6 +152,8 @@ erts_prepare_loading(Binary* magic, Process *c_p, Eterm group_leader,
BeamLoadError0(stp, "corrupt line table");
case BEAMFILE_READ_CORRUPT_LITERAL_TABLE:
BeamLoadError0(stp, "corrupt literal table");
+ case BEAMFILE_READ_CORRUPT_LOCALS_TABLE:
+ BeamLoadError0(stp, "corrupt locals table");
case BEAMFILE_READ_SUCCESS:
break;
}
@@ -161,16 +167,13 @@ erts_prepare_loading(Binary* magic, Process *c_p, Eterm group_leader,
if (stp->beam.code.max_opcode > MAX_GENERIC_OPCODE) {
BeamLoadError2(stp,
"This BEAM file was compiled for a later version"
- " of the run-time system than " ERLANG_OTP_RELEASE ".\n"
- " To fix this, please recompile this module with an "
- ERLANG_OTP_RELEASE " compiler.\n"
+ " of the runtime system than the current (Erlang/OTP " ERLANG_OTP_RELEASE ").\n"
+ " To fix this, " PLEASE_RECOMPILE ".\n"
" (Use of opcode %d; this emulator supports "
"only up to %d.)",
stp->beam.code.max_opcode, MAX_GENERIC_OPCODE);
}
- stp->otp_20_or_higher = (stp->beam.atoms.encoding == ERTS_ATOM_ENC_UTF8);
-
if (!load_code(stp)) {
goto load_error;
}
@@ -369,10 +372,12 @@ static int load_code(LoaderState* stp)
int num_specific;
- beam_load_prepare_emit(stp);
-
op_reader = beamfile_get_code(&stp->beam, &stp->op_allocator);
+ if (!beam_load_prepare_emit(stp)) {
+ goto load_error;
+ }
+
for (;;) {
get_next_instr:
if (!beamcodereader_next(op_reader, &last_op)) {
@@ -540,8 +545,7 @@ static int load_code(LoaderState* stp)
* the instruction is obsolete.
*/
if (num_specific == 0 && gen_opc[tmp_op->op].transform == -1) {
- BeamLoadError0(stp, "please re-compile this module with an "
- ERLANG_OTP_RELEASE " compiler ");
+ BeamLoadError0(stp, PLEASE_RECOMPILE);
}
/*
@@ -550,8 +554,7 @@ static int load_code(LoaderState* stp)
*/
switch (stp->genop->op) {
case genop_too_old_compiler_0:
- BeamLoadError0(stp, "please re-compile this module with an "
- ERLANG_OTP_RELEASE " compiler");
+ BeamLoadError0(stp, PLEASE_RECOMPILE);
case genop_unsupported_guard_bif_3:
{
Eterm Mod = (Eterm) stp->genop->a[0].val;
diff --git a/erts/emulator/beam/beam_load.h b/erts/emulator/beam/beam_load.h
index 913574b5e5..e229efadfa 100644
--- a/erts/emulator/beam/beam_load.h
+++ b/erts/emulator/beam/beam_load.h
@@ -56,7 +56,7 @@ typedef struct LoaderState_ LoaderState;
int beam_load_prepared_dtor(Binary *magic);
void beam_load_prepared_free(Binary *magic);
-void beam_load_prepare_emit(LoaderState *stp);
+int beam_load_prepare_emit(LoaderState *stp);
int beam_load_emit_op(LoaderState *stp, BeamOp *op);
int beam_load_finish_emit(LoaderState *stp);
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index c81b2a9f48..766502b611 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -45,6 +45,7 @@
#include "erl_map.h"
#include "erl_msacc.h"
#include "erl_proc_sig_queue.h"
+#include "ryu.h"
#include "jit/beam_asm.h"
Export *erts_await_result;
@@ -3415,6 +3416,7 @@ static int do_float_to_charbuf(Process *p, Eterm efloat, Eterm list,
int compact = 0;
enum fmt_type_ {
FMT_LEGACY,
+ FMT_SHORT,
FMT_FIXED,
FMT_SCIENTIFIC
} fmt_type = FMT_LEGACY;
@@ -3443,16 +3445,26 @@ static int do_float_to_charbuf(Process *p, Eterm efloat, Eterm list,
continue;
}
}
+ } else if (arg == am_short) {
+ fmt_type = FMT_SHORT;
+ continue;
}
goto badarg;
}
+
if (is_not_nil(list)) {
goto badarg;
}
GET_DOUBLE(efloat, f);
- if (fmt_type == FMT_FIXED) {
+ if (fmt_type == FMT_SHORT) {
+ const int index = d2s_buffered_n(f.fd, fbuf);
+
+ /* Terminate the string. */
+ fbuf[index] = '\0';
+ return index;
+ } else if (fmt_type == FMT_FIXED) {
return sys_double_to_chars_fast(f.fd, fbuf, sizeof_fbuf,
decimals, compact);
} else {
diff --git a/erts/emulator/beam/break.c b/erts/emulator/beam/break.c
index 5527b62211..7c0c6332f5 100644
--- a/erts/emulator/beam/break.c
+++ b/erts/emulator/beam/break.c
@@ -708,25 +708,35 @@ bin_check(void)
{
Process *rp;
struct erl_off_heap_header* hdr;
+ struct erl_off_heap_header* oh_list;
int i, printed = 0, max = erts_ptab_max(&erts_proc);
+
for (i=0; i < max; i++) {
rp = erts_pix2proc(i);
if (!rp)
continue;
- for (hdr = rp->off_heap.first; hdr; hdr = hdr->next) {
- if (hdr->thing_word == HEADER_PROC_BIN) {
- ProcBin *bp = (ProcBin*) hdr;
- if (!printed) {
- erts_printf("Process %T holding binary data \n", rp->common.id);
- printed = 1;
- }
- erts_printf("%p orig_size: %bpd, norefs = %bpd\n",
- bp->val,
- bp->val->orig_size,
- erts_refc_read(&bp->val->intern.refc, 1));
- }
- }
+
+ oh_list = rp->off_heap.first;
+ for (;;) {
+ for (hdr = oh_list; hdr; hdr = hdr->next) {
+ if (hdr->thing_word == HEADER_PROC_BIN) {
+ ProcBin *bp = (ProcBin*) hdr;
+ if (!printed) {
+ erts_printf("Process %T holding binary data \n", rp->common.id);
+ printed = 1;
+ }
+ erts_printf("%p orig_size: %bpd, norefs = %bpd\n",
+ bp->val,
+ bp->val->orig_size,
+ erts_refc_read(&bp->val->intern.refc, 1));
+ }
+ }
+ if (oh_list == rp->wrt_bins)
+ break;
+ oh_list = rp->wrt_bins;
+ }
+
if (printed) {
erts_printf("--------------------------------------\n");
printed = 0;
diff --git a/erts/emulator/beam/dist.h b/erts/emulator/beam/dist.h
index 12392955e6..afd8bc889c 100644
--- a/erts/emulator/beam/dist.h
+++ b/erts/emulator/beam/dist.h
@@ -25,33 +25,35 @@
#include "erl_node_tables.h"
#include "zlib.h"
-#define DFLAG_PUBLISHED ((Uint64)0x01)
-#define DFLAG_ATOM_CACHE ((Uint64)0x02)
-#define DFLAG_EXTENDED_REFERENCES ((Uint64)0x04)
-#define DFLAG_DIST_MONITOR ((Uint64)0x08)
-#define DFLAG_FUN_TAGS ((Uint64)0x10)
-#define DFLAG_DIST_MONITOR_NAME ((Uint64)0x20)
-#define DFLAG_HIDDEN_ATOM_CACHE ((Uint64)0x40)
-#define DFLAG_NEW_FUN_TAGS ((Uint64)0x80)
-#define DFLAG_EXTENDED_PIDS_PORTS ((Uint64)0x100)
-#define DFLAG_EXPORT_PTR_TAG ((Uint64)0x200)
-#define DFLAG_BIT_BINARIES ((Uint64)0x400)
-#define DFLAG_NEW_FLOATS ((Uint64)0x800)
-#define DFLAG_UNICODE_IO ((Uint64)0x1000)
-#define DFLAG_DIST_HDR_ATOM_CACHE ((Uint64)0x2000)
-#define DFLAG_SMALL_ATOM_TAGS ((Uint64)0x4000)
-#define DFLAG_ETS_COMPRESSED ((Uint64)0x8000) /* internal */
-#define DFLAG_UTF8_ATOMS ((Uint64)0x10000)
-#define DFLAG_MAP_TAG ((Uint64)0x20000)
-#define DFLAG_BIG_CREATION ((Uint64)0x40000)
-#define DFLAG_SEND_SENDER ((Uint64)0x80000)
-#define DFLAG_BIG_SEQTRACE_LABELS ((Uint64)0x100000)
-#define DFLAG_PENDING_CONNECT ((Uint64)0x200000) /* internal */
-#define DFLAG_EXIT_PAYLOAD ((Uint64)0x400000)
-#define DFLAG_FRAGMENTS ((Uint64)0x800000)
-#define DFLAG_HANDSHAKE_23 ((Uint64)0x1000000)
-#define DFLAG_UNLINK_ID ((Uint64)0x2000000)
-#define DFLAG_RESERVED ((Uint64)0xfc000000)
+#define DFLAG_PUBLISHED ((Uint64)0x01)
+#define DFLAG_ATOM_CACHE ((Uint64)0x02)
+#define DFLAG_EXTENDED_REFERENCES ((Uint64)0x04)
+#define DFLAG_DIST_MONITOR ((Uint64)0x08)
+#define DFLAG_FUN_TAGS ((Uint64)0x10)
+#define DFLAG_DIST_MONITOR_NAME ((Uint64)0x20)
+#define DFLAG_HIDDEN_ATOM_CACHE ((Uint64)0x40)
+#define DFLAG_NEW_FUN_TAGS ((Uint64)0x80)
+#define DFLAG_EXTENDED_PIDS_PORTS ((Uint64)0x100)
+#define DFLAG_EXPORT_PTR_TAG ((Uint64)0x200)
+#define DFLAG_BIT_BINARIES ((Uint64)0x400)
+#define DFLAG_NEW_FLOATS ((Uint64)0x800)
+#define DFLAG_UNICODE_IO ((Uint64)0x1000)
+#define DFLAG_DIST_HDR_ATOM_CACHE ((Uint64)0x2000)
+#define DFLAG_SMALL_ATOM_TAGS ((Uint64)0x4000)
+#define DFLAG_ETS_COMPRESSED ((Uint64)0x8000) /* internal */
+#define DFLAG_UTF8_ATOMS ((Uint64)0x10000)
+#define DFLAG_MAP_TAG ((Uint64)0x20000)
+#define DFLAG_BIG_CREATION ((Uint64)0x40000)
+#define DFLAG_SEND_SENDER ((Uint64)0x80000)
+#define DFLAG_BIG_SEQTRACE_LABELS ((Uint64)0x100000)
+#define DFLAG_PENDING_CONNECT ((Uint64)0x200000) /* internal */
+#define DFLAG_EXIT_PAYLOAD ((Uint64)0x400000)
+#define DFLAG_FRAGMENTS ((Uint64)0x800000)
+#define DFLAG_HANDSHAKE_23 ((Uint64)0x1000000)
+#define DFLAG_UNLINK_ID ((Uint64)0x2000000)
+#define DFLAG_MANDATORY_25_DIGEST ((Uint64)0x4000000)
+#define DFLAG_RESERVED ((Uint64)0xf8000000)
+
/*
* As the old handshake only support 32 flag bits, we reserve the remaining
* bits in the lower 32 for changes in the handshake protocol or potentially
@@ -69,21 +71,27 @@
#define DFLAG_DETERMINISTIC DFLAG_ATOM_CACHE
-/* Mandatory flags for distribution */
-#define DFLAG_DIST_MANDATORY (DFLAG_EXTENDED_REFERENCES \
- | DFLAG_EXTENDED_PIDS_PORTS \
- | DFLAG_UTF8_ATOMS \
- | DFLAG_NEW_FUN_TAGS \
- | DFLAG_BIG_CREATION)
+/* Mandatory flags for distribution in OTP 25. */
+#define DFLAG_DIST_MANDATORY_25 (DFLAG_EXTENDED_REFERENCES \
+ | DFLAG_FUN_TAGS \
+ | DFLAG_EXTENDED_PIDS_PORTS \
+ | DFLAG_UTF8_ATOMS \
+ | DFLAG_NEW_FUN_TAGS \
+ | DFLAG_BIG_CREATION \
+ | DFLAG_NEW_FLOATS \
+ | DFLAG_MAP_TAG \
+ | DFLAG_EXPORT_PTR_TAG \
+ | DFLAG_BIT_BINARIES)
+
+/* Mandatory flags for distribution. */
+#define DFLAG_DIST_MANDATORY DFLAG_DIST_MANDATORY_25
/*
* Additional optimistic flags when encoding toward pending connection.
* If remote node (erl_interface) does not support these then we may need
* to transcode messages enqueued before connection setup was finished.
*/
-#define DFLAG_DIST_HOPEFULLY (DFLAG_EXPORT_PTR_TAG \
- | DFLAG_BIT_BINARIES \
- | DFLAG_DIST_MONITOR \
+#define DFLAG_DIST_HOPEFULLY (DFLAG_DIST_MONITOR \
| DFLAG_DIST_MONITOR_NAME \
| DFLAG_SPAWN \
| DFLAG_ALIAS \
@@ -91,13 +99,9 @@
/* Our preferred set of flags. Used for connection setup handshake */
#define DFLAG_DIST_DEFAULT (DFLAG_DIST_MANDATORY | DFLAG_DIST_HOPEFULLY \
- | DFLAG_FUN_TAGS \
- | DFLAG_NEW_FLOATS \
| DFLAG_UNICODE_IO \
| DFLAG_DIST_HDR_ATOM_CACHE \
| DFLAG_SMALL_ATOM_TAGS \
- | DFLAG_UTF8_ATOMS \
- | DFLAG_MAP_TAG \
| DFLAG_SEND_SENDER \
| DFLAG_BIG_SEQTRACE_LABELS \
| DFLAG_EXIT_PAYLOAD \
@@ -106,7 +110,8 @@
| DFLAG_SPAWN \
| DFLAG_V4_NC \
| DFLAG_ALIAS \
- | DFLAG_UNLINK_ID)
+ | DFLAG_UNLINK_ID \
+ | DFLAG_MANDATORY_25_DIGEST)
/* Flags addable by local distr implementations */
#define DFLAG_DIST_ADDABLE DFLAG_DIST_DEFAULT
@@ -121,14 +126,7 @@
#define DFLAG_DIST_STRICT_ORDER DFLAG_DIST_HDR_ATOM_CACHE
/* All flags that should be enabled when term_to_binary/1 is used. */
-#define TERM_TO_BINARY_DFLAGS (DFLAG_EXTENDED_REFERENCES \
- | DFLAG_NEW_FUN_TAGS \
- | DFLAG_NEW_FLOATS \
- | DFLAG_EXTENDED_PIDS_PORTS \
- | DFLAG_EXPORT_PTR_TAG \
- | DFLAG_BIT_BINARIES \
- | DFLAG_MAP_TAG \
- | DFLAG_BIG_CREATION)
+#define TERM_TO_BINARY_DFLAGS DFLAG_NEW_FLOATS
/* opcodes used in distribution messages */
enum dop {
diff --git a/erts/emulator/beam/emu/beam_emu.c b/erts/emulator/beam/emu/beam_emu.c
index 932e8a2108..b16e23c61e 100644
--- a/erts/emulator/beam/emu/beam_emu.c
+++ b/erts/emulator/beam/emu/beam_emu.c
@@ -107,9 +107,11 @@
* Special Beam instructions.
*/
-static BeamInstr beam_apply_[2];
-ErtsCodePtr beam_apply; /* beam_apply_[0]; */
-ErtsCodePtr beam_normal_exit; /* beam_apply_[1]; */
+static BeamInstr beam_run_process_[1];
+ErtsCodePtr beam_run_process;
+
+static BeamInstr beam_normal_exit_[1];
+ErtsCodePtr beam_normal_exit;
static BeamInstr beam_exit_[1];
ErtsCodePtr beam_exit;
@@ -140,6 +142,12 @@ ErtsCodePtr beam_exception_trace;
static BeamInstr beam_return_time_trace_[1];
ErtsCodePtr beam_return_time_trace;
+/* The address field of every fun that has no loaded code will point to
+ * beam_unloaded_fun[]. The -1 in beam_unloaded_fun[0] will be interpreted
+ * as an illegal arity when attempting to call a fun. */
+static BeamInstr unloaded_fun_code[4] = {NIL, NIL, -1, 0};
+ErtsCodePtr beam_unloaded_fun = &unloaded_fun_code[3];
+
/*
* All Beam instructions in numerical order.
*/
@@ -575,7 +583,7 @@ void process_main(ErtsSchedulerData *esdp)
OpCase(label_L):
OpCase(on_load):
OpCase(line_I):
- OpCase(int_func_end):
+ OpCase(i_nif_padding):
erts_exit(ERTS_ERROR_EXIT, "meta op\n");
/*
@@ -669,11 +677,11 @@ init_emulator_finish(void)
}
#endif
- beam_apply_[0] = BeamOpCodeAddr(op_i_apply);
- beam_apply_[1] = BeamOpCodeAddr(op_normal_exit);
+ beam_run_process_[0] = BeamOpCodeAddr(op_i_apply_only);
+ beam_run_process = (ErtsCodePtr)&beam_run_process_[0];
- beam_apply = (ErtsCodePtr)&beam_apply_[0];
- beam_normal_exit = (ErtsCodePtr)&beam_apply_[1];
+ beam_normal_exit_[0] = BeamOpCodeAddr(op_normal_exit);
+ beam_normal_exit = (ErtsCodePtr)&beam_normal_exit_[0];
beam_exit_[0] = BeamOpCodeAddr(op_error_action_code);
beam_exit = (ErtsCodePtr)&beam_exit_[0];
diff --git a/erts/emulator/beam/emu/bs_instrs.tab b/erts/emulator/beam/emu/bs_instrs.tab
index c52367de2a..305b2d6312 100644
--- a/erts/emulator/beam/emu/bs_instrs.tab
+++ b/erts/emulator/beam/emu/bs_instrs.tab
@@ -844,70 +844,6 @@ i_bs_validate_unicode_retract(Fail, Src, Ms) {
// Matching of binaries.
//
-i_bs_start_match2 := bs_start_match.fetch.execute;
-
-bs_start_match.head() {
- Eterm context;
-}
-
-bs_start_match.fetch(Src) {
- context = $Src;
-}
-
-bs_start_match.execute(Fail, Live, Slots, Dst) {
- Uint slots;
- Uint live;
- Eterm header;
- if (!is_boxed(context)) {
- $FAIL($Fail);
- }
- header = *boxed_val(context);
-
- /* Reserve a slot for the start position. */
- slots = $Slots + 1;
- live = $Live;
-
- if (header_is_bin_matchstate(header)) {
- ErlBinMatchState* ms = (ErlBinMatchState *) boxed_val(context);
- Uint actual_slots = HEADER_NUM_SLOTS(header);
-
- /* We're not compatible with contexts created by bs_start_match3. */
- ASSERT(actual_slots >= 1);
-
- ms->save_offset[0] = ms->mb.offset;
- if (ERTS_UNLIKELY(actual_slots < slots)) {
- ErlBinMatchState* expanded;
- Uint wordsneeded = ERL_BIN_MATCHSTATE_SIZE(slots);
- $GC_TEST_PRESERVE(wordsneeded, live, context);
- ms = (ErlBinMatchState *) boxed_val(context);
- expanded = (ErlBinMatchState *) HTOP;
- *expanded = *ms;
- *HTOP = HEADER_BIN_MATCHSTATE(slots);
- HTOP += wordsneeded;
- HEAP_SPACE_VERIFIED(0);
- context = make_matchstate(expanded);
- $REFRESH_GEN_DEST();
- }
- $Dst = context;
- } else if (is_binary_header(header)) {
- Eterm result;
- Uint wordsneeded = ERL_BIN_MATCHSTATE_SIZE(slots);
- $GC_TEST_PRESERVE(wordsneeded, live, context);
- HEAP_TOP(c_p) = HTOP;
-#ifdef DEBUG
- c_p->stop = E; /* Needed for checking in HeapOnlyAlloc(). */
-#endif
- result = erts_bs_start_match_2(c_p, context, slots);
- HTOP = HEAP_TOP(c_p);
- HEAP_SPACE_VERIFIED(0);
-
- $REFRESH_GEN_DEST();
- $Dst = result;
- } else {
- $FAIL($Fail);
- }
-}
-
bs_test_zero_tail2(Fail, Ctx) {
ErlBinMatchBuffer *_mb;
_mb = (ErlBinMatchBuffer*) ms_matchbuffer($Ctx);
@@ -1157,49 +1093,6 @@ i_bs_get_utf16.execute(Fail, Flags, Dst) {
$Dst = result;
}
-bs_context_to_binary := ctx_to_bin.fetch.execute;
-
-ctx_to_bin.head() {
- Eterm context;
- ErlBinMatchBuffer* mb;
- Uint size;
- Uint offs;
-}
-
-ctx_to_bin.fetch(Src) {
- context = $Src;
- if (is_boxed(context) &&
- header_is_bin_matchstate(*boxed_val(context))) {
- ErlBinMatchState* ms;
- ms = (ErlBinMatchState *) boxed_val(context);
- mb = &ms->mb;
- offs = ms->save_offset[0];
- size = mb->size - offs;
- } else {
- $NEXT0();
- }
-}
-
-ctx_to_bin.execute() {
- Uint hole_size;
- Uint orig = mb->orig;
- ErlSubBin* sb = (ErlSubBin *) boxed_val(context);
- /* Since we're going to overwrite the match state with the result, an
- * ErlBinMatchState must be at least as large as an ErlSubBin. */
- ERTS_CT_ASSERT(sizeof(ErlSubBin) <= sizeof(ErlBinMatchState));
- hole_size = 1 + header_arity(sb->thing_word) - ERL_SUB_BIN_SIZE;
- sb->thing_word = HEADER_SUB_BIN;
- sb->size = BYTE_OFFSET(size);
- sb->bitsize = BIT_OFFSET(size);
- sb->offs = BYTE_OFFSET(offs);
- sb->bitoffs = BIT_OFFSET(offs);
- sb->is_writable = 0;
- sb->orig = orig;
- if (hole_size) {
- sb[1].thing_word = make_pos_bignum_header(hole_size-1);
- }
-}
-
i_bs_match_string(Ctx, Fail, Bits, Ptr) {
byte* bytes = (byte *) $Ptr;
Uint bits = $Bits;
@@ -1221,18 +1114,6 @@ i_bs_match_string(Ctx, Fail, Bits, Ptr) {
mb->offset += bits;
}
-i_bs_save2(Src, Slot) {
- ErlBinMatchState* _ms = (ErlBinMatchState*) boxed_val((Eterm) $Src);
- ASSERT(HEADER_NUM_SLOTS(_ms->thing_word) > $Slot);
- _ms->save_offset[$Slot] = _ms->mb.offset;
-}
-
-i_bs_restore2(Src, Slot) {
- ErlBinMatchState* _ms = (ErlBinMatchState*) boxed_val((Eterm) $Src);
- ASSERT(HEADER_NUM_SLOTS(_ms->thing_word) > $Slot);
- _ms->mb.offset = _ms->save_offset[$Slot];
-}
-
bs_get_tail := bs_get_tail.fetch.execute;
bs_get_tail.head() {
@@ -1245,31 +1126,22 @@ bs_get_tail.fetch(Src) {
bs_get_tail.execute(Dst, Live) {
ErlBinMatchBuffer* mb;
- Uint size, offs;
- ErlSubBin* sb;
+ Eterm bin, *htop;
ASSERT(header_is_bin_matchstate(*boxed_val(context)));
- $GC_TEST_PRESERVE(ERL_SUB_BIN_SIZE, $Live, context);
-
- mb = ms_matchbuffer(context);
+ $GC_TEST_PRESERVE(EXTRACT_SUB_BIN_HEAP_NEED, $Live, context);
- offs = mb->offset;
- size = mb->size - offs;
+ htop = HTOP;
- sb = (ErlSubBin *) HTOP;
- HTOP += ERL_SUB_BIN_SIZE;
+ mb = ms_matchbuffer(context);
- sb->thing_word = HEADER_SUB_BIN;
- sb->size = BYTE_OFFSET(size);
- sb->bitsize = BIT_OFFSET(size);
- sb->offs = BYTE_OFFSET(offs);
- sb->bitoffs = BIT_OFFSET(offs);
- sb->is_writable = 0;
- sb->orig = mb->orig;
+ bin = erts_extract_sub_binary(&htop,mb->orig,mb->base,
+ mb->offset,mb->size - mb->offset);
+ HTOP = htop;
$REFRESH_GEN_DEST();
- $Dst = make_binary(sb);
+ $Dst = bin;
}
diff --git a/erts/emulator/beam/emu/emu_load.c b/erts/emulator/beam/emu/emu_load.c
index 35937754d9..fa0372be87 100644
--- a/erts/emulator/beam/emu/emu_load.c
+++ b/erts/emulator/beam/emu/emu_load.c
@@ -57,7 +57,7 @@ extern void check_allocated_block(Uint type, void *blk);
static void init_label(Label* lp);
-void beam_load_prepare_emit(LoaderState *stp) {
+int beam_load_prepare_emit(LoaderState *stp) {
BeamCodeHeader *hdr;
int i;
@@ -136,6 +136,8 @@ void beam_load_prepare_emit(LoaderState *stp) {
stp->beam.code.function_count *
sizeof(unsigned int));
}
+
+ return 1;
}
void beam_load_prepared_free(Binary* magic)
@@ -155,11 +157,6 @@ int beam_load_prepared_dtor(Binary* magic)
beamfile_free(&stp->beam);
beamopallocator_dtor(&stp->op_allocator);
- if (stp->bin) {
- driver_free_binary(stp->bin);
- stp->bin = NULL;
- }
-
if (stp->code_hdr) {
BeamCodeHeader *hdr = stp->code_hdr;
@@ -716,18 +713,6 @@ void beam_load_finalize_code(LoaderState* stp, struct erl_module_instance* inst_
stp->code_hdr = NULL;
}
-static int
-is_bif(Eterm mod, Eterm func, unsigned arity)
-{
- Export *e = erts_active_export_entry(mod, func, arity);
-
- if (e != NULL) {
- return e->bif_number != -1;
- }
-
- return 0;
-}
-
static void init_label(Label* lp)
{
lp->value = 0;
@@ -1356,38 +1341,30 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
#endif
}
break;
- case op_int_func_end:
- {
- /*
- * Native function calls may be larger than their stubs, so
- * we'll need to make sure any potentially-native function stub
- * is padded with enough room.
- */
- int padding_required;
-
- ci--; /* Get rid of the instruction */
-
- padding_required = stp->may_load_nif ||
- is_bif(stp->module, stp->function, stp->arity);
-
- ASSERT(stp->last_func_start);
- if (padding_required) {
- Sint pad = BEAM_NATIVE_MIN_FUNC_SZ - (ci - stp->last_func_start);
- if (pad > 0) {
- ASSERT(pad < BEAM_NATIVE_MIN_FUNC_SZ);
- CodeNeed(pad);
- while (pad-- > 0) {
- /*
- * Filling with actual instructions (instead
- * of zeroes) will look nicer in a disassembly
- * listing.
- */
- code[ci++] = BeamOpCodeAddr(op_padding);
- }
- }
- }
- }
- break;
+ case op_i_nif_padding:
+ {
+ /* Native function calls may be larger than their stubs, so we'll
+ * need to make sure any potentially-native function stub is padded
+ * with enough room. */
+ Sint pad;
+
+ ci -= 1; /* Get rid of the instruction */
+
+ ASSERT(stp->last_func_start);
+ pad = BEAM_NATIVE_MIN_FUNC_SZ - (ci - stp->last_func_start);
+
+ if (pad > 0) {
+ ASSERT(pad < BEAM_NATIVE_MIN_FUNC_SZ);
+ CodeNeed(pad);
+
+ while (pad-- > 0) {
+ /* Filling with actual instructions (instead of zeroes) will
+ * look nicer in a disassembly listing. */
+ code[ci++] = BeamOpCodeAddr(op_padding);
+ }
+ }
+ }
+ break;
case op_on_load:
ci--; /* Get rid of the instruction */
diff --git a/erts/emulator/beam/emu/instrs.tab b/erts/emulator/beam/emu/instrs.tab
index caa52927aa..74f75ff1ce 100644
--- a/erts/emulator/beam/emu/instrs.tab
+++ b/erts/emulator/beam/emu/instrs.tab
@@ -310,10 +310,8 @@ apply_last(Arity, Deallocate) {
}
APPLY_FUN(Next) {
- Export *ignored;
-
HEAVY_SWAPOUT;
- $Next = apply_fun(c_p, r(0), x(1), reg, &ignored);
+ $Next = apply_fun(c_p, r(0), x(1), reg);
HEAVY_SWAPIN;
if (ERTS_UNLIKELY(next == NULL)) {
@@ -350,10 +348,9 @@ i_apply_fun_only() {
CALL_FUN(Fun, Next) {
//| -no_next
- Export *ignored;
HEAVY_SWAPOUT;
- $Next = call_fun(c_p, $Fun, reg, THE_NON_VALUE, &ignored);
+ $Next = call_fun(c_p, $Fun, reg, THE_NON_VALUE);
HEAVY_SWAPIN;
if (ERTS_UNLIKELY(next == NULL)) {
@@ -543,12 +540,13 @@ init3(Y1, Y2, Y3) {
make_blank($Y3);
}
-i_make_fun3(FunP, Dst, NumFree) {
+i_make_fun3(FunP, Dst, Arity, NumFree) {
ErlFunThing* funp;
+ ErlFunEntry *fe = (ErlFunEntry *) $FunP;
int i, num_free = $NumFree;
//| -no_next
SWAPOUT;
- funp = new_fun_thing(c_p, (ErlFunEntry *) $FunP, num_free);
+ funp = new_fun_thing(c_p, fe, $Arity, num_free);
SWAPIN;
I = $NEXT_INSTRUCTION;
for (i = 0; i < num_free; i++) {
@@ -1088,28 +1086,39 @@ catch(Y, Fail) {
}
catch_end(Y) {
+ /*
+ * At entry:
+ *
+ * x0 = Result of expression or THE_NON_VALUE
+ *
+ * If x0 is THE_NON_VALUE, the following registers are also set:
+ *
+ * x1 = Error reason/thrown value
+ * x2 = Stacktrace
+ * x3 = Exception class
+ */
$try_end($Y);
if (is_non_value(r(0))) {
- c_p->fvalue = NIL;
- c_p->ftrace = NIL;
- if (x(1) == am_throw) {
- r(0) = x(2);
+ ASSERT(c_p->fvalue == NIL);
+ ASSERT(c_p->ftrace == NIL);
+ if (x(3) == am_throw) {
+ r(0) = x(1);
} else {
- if (x(1) == am_error) {
+ if (x(3) == am_error) {
SWAPOUT;
- x(2) = add_stacktrace(c_p, x(2), x(3));
+ x(1) = add_stacktrace(c_p, x(1), x(2));
SWAPIN;
}
- /* only x(2) is included in the rootset here */
+ /* only x(1) is included in the rootset here */
if ((E - HTOP) < (3 + S_RESERVED)) {
$GC_SWAPOUT();
PROCESS_MAIN_CHK_LOCKS(c_p);
- FCALLS -= erts_garbage_collect_nobump(c_p, 3, reg+2, 1, FCALLS);
+ FCALLS -= erts_garbage_collect_nobump(c_p, 3, reg+1, 1, FCALLS);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
SWAPIN;
}
- r(0) = TUPLE2(HTOP, am_EXIT, x(2));
+ r(0) = TUPLE2(HTOP, am_EXIT, x(1));
HTOP += 3;
}
}
@@ -1126,9 +1135,7 @@ try_case(Y) {
ASSERT(is_non_value(r(0)));
ASSERT(c_p->fvalue == NIL);
ASSERT(c_p->ftrace == NIL);
- r(0) = x(1);
- x(1) = x(2);
- x(2) = x(3);
+ r(0) = x(3);
}
try_case_end(Src) {
diff --git a/erts/emulator/beam/emu/load.h b/erts/emulator/beam/emu/load.h
index 83e8ace504..561327a870 100644
--- a/erts/emulator/beam/emu/load.h
+++ b/erts/emulator/beam/emu/load.h
@@ -94,11 +94,6 @@ typedef struct {
*/
struct LoaderState_ {
/*
- * The current logical file within the binary.
- */
- ErlDrvBinary* bin; /* Binary holding BEAM file (or NULL) */
-
- /*
* The following are used mainly for diagnostics.
*/
diff --git a/erts/emulator/beam/emu/map_instrs.tab b/erts/emulator/beam/emu/map_instrs.tab
index efebd37fb3..c5168f97f2 100644
--- a/erts/emulator/beam/emu/map_instrs.tab
+++ b/erts/emulator/beam/emu/map_instrs.tab
@@ -19,14 +19,6 @@
// %CopyrightEnd%
//
-ensure_map(Map) {
- if (is_not_map($Map)) {
- c_p->freason = BADMAP;
- c_p->fvalue = $Map;
- $FAIL_BODY();
- }
-}
-
new_map(Dst, Live, N) {
Eterm res;
diff --git a/erts/emulator/beam/emu/ops.tab b/erts/emulator/beam/emu/ops.tab
index 336c4d0283..c50b12513d 100644
--- a/erts/emulator/beam/emu/ops.tab
+++ b/erts/emulator/beam/emu/ops.tab
@@ -55,12 +55,6 @@ func_info M=a a==am_module_info A=u==1 | label L | move n x==0 => too_old_compil
bif1 Fail u$func:erlang:is_constant/1 Src Dst => too_old_compiler
-# Since the constant pool was introduced in R12B, empty tuples ({})
-# are literals. Therefore we no longer need to allow put_tuple/2
-# with a tuple size of zero.
-
-put_tuple u==0 d => too_old_compiler
-
#
# All the other instructions.
#
@@ -85,8 +79,11 @@ int_func_start/5
int_func_start Lbl Line M F A => label Lbl | i_func_info u M F A | line Line
# The end of a function.
-int_func_end/0
-int_func_end
+int_func_end/2
+int_func_end Func Entry | needs_nif_padding() => i_nif_padding
+int_func_end Func Entry =>
+
+i_nif_padding
# Instruction used for padding functions that use native code.
%cold
@@ -549,21 +546,6 @@ is_ne f? S s
# Code compiled with OTP 22 and later uses put_tuple2 to
# to construct a tuple.
#
-# Code compiled before OTP 22 uses put_tuple + one put instruction
-# per element. Translate to put_tuple2.
-#
-
-i_put_tuple/2
-put_tuple Arity Dst => i_put_tuple Dst u
-
-i_put_tuple Dst Arity Puts=* | put S1 | put S2 | \
- put S3 | put S4 | put S5 => \
- tuple_append_put5(Arity, Dst, Puts, S1, S2, S3, S4, S5)
-
-i_put_tuple Dst Arity Puts=* | put S => \
- tuple_append_put(Arity, Dst, Puts, S)
-
-i_put_tuple Dst Arity Puts=* => put_tuple2 Dst Arity Puts
put_tuple2 xy I *
@@ -1049,7 +1031,7 @@ make_fun3 OldIndex=u Dst=d NumFree=u Env=* => make_fun3(OldIndex, Dst, NumFree,
%cold
-i_make_fun3 F d t *
+i_make_fun3 F d t t *
# Psuedo-instruction for signalling lambda load errors. Never actually runs.
i_lambda_error t
@@ -1062,29 +1044,6 @@ is_function Fail=f c => jump Fail
func_info M F A => i_func_info u M F A
# ================================================================
-# Bit syntax matching obsoleted in OTP 22.
-# ================================================================
-
-%cold
-bs_start_match2 Fail=f ica X Y D => jump Fail
-bs_start_match2 Fail Bin X Y D => i_bs_start_match2 Bin Fail X Y D
-i_bs_start_match2 xy f t t d
-
-bs_save2 Y=y Index => move Y x | bs_save2 x Index
-bs_save2 Reg Index => bs_save(Reg, Index)
-i_bs_save2 x t
-
-bs_restore2 Y=y Index => move Y x | bs_restore2 x Index
-bs_restore2 Reg Index => bs_restore(Reg, Index)
-i_bs_restore2 x t
-
-bs_context_to_binary Y=y | line L | badmatch Y => \
- move Y x | bs_context_to_binary x | line L | badmatch x
-bs_context_to_binary Y=y => move Y x | bs_context_to_binary x
-bs_context_to_binary x
-%warm
-
-# ================================================================
# New bit syntax matching (R11B).
# ================================================================
@@ -1406,37 +1365,17 @@ apply t
apply_last t Q
#
-# Handle compatibility with OTP 17 here.
+# Map instructions. First introduced in R17.
#
-i_put_map_assoc/4
-
-# We KNOW that in OTP 20 (actually OTP 18 and higher), a put_map_assoc instruction
-# is always preceded by an is_map test. That means that put_map_assoc can never
-# fail and does not need any failure label.
+# We KNOW that in OTP 18 and higher, a put_map_assoc instruction is
+# always preceded by an is_map test. That means that put_map_assoc can
+# never fail and does not need any failure label.
-put_map_assoc Fail Map Dst Live Size Rest=* | compiled_with_otp_20_or_higher() => \
+put_map_assoc Fail Map Dst Live Size Rest=* => \
i_put_map_assoc Map Dst Live Size Rest
-# Translate the put_map_assoc instruction if the module was compiled by a compiler
-# before 20. This is only necessary if the OTP 17 compiler was used, but we
-# have no safe and relatively easy way to know whether OTP 18/19 was used.
-
-put_map_assoc Fail=p Map Dst Live Size Rest=* => \
- ensure_map Map | i_put_map_assoc Map Dst Live Size Rest
-put_map_assoc Fail=f Map Dst Live Size Rest=* => \
- is_map Fail Map | i_put_map_assoc Map Dst Live Size Rest
-
-ensure_map Lit=q | literal_is_map(Lit) =>
-ensure_map Src=cqy => move Src x | ensure_map x
-
-%cold
-ensure_map x
-%hot
-
-#
-# Map instructions. First introduced in R17.
-#
+i_put_map_assoc/4
sorted_put_map_assoc/4
i_put_map_assoc Map Dst Live Size Rest=* | map_key_sort(Size, Rest) => \
diff --git a/erts/emulator/beam/emu/predicates.tab b/erts/emulator/beam/emu/predicates.tab
index 4542d8bf0f..2a14fe68f3 100644
--- a/erts/emulator/beam/emu/predicates.tab
+++ b/erts/emulator/beam/emu/predicates.tab
@@ -45,3 +45,24 @@ pred.independent_moves(Src1, Dst1, Src2, Dst2) {
(Src2.type != Dst1.type || Src2.val != Dst1.val) &&
(Dst1.type != Dst2.type ||Dst1.val != Dst2.val);
}
+
+pred.needs_nif_padding() {
+ Export *e = erts_active_export_entry(S->module, S->function, S->arity);
+
+ if (e != NULL && e->bif_number != -1) {
+ return 1;
+ }
+
+ /* If the module may load a NIF all functions must be able to hold a NIF
+ * stub, so we'll pad to that size at the end of every function. */
+ return S->may_load_nif
+}
+
+// Test whether the given literal is a map.
+pred.literal_is_map(Lit) {
+ Eterm term;
+
+ ASSERT(Lit.type == TAG_q);
+ term = beamfile_get_literal(&S->beam, Lit.val);
+ return is_map(term);
+}
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index 2cea68a817..c1ce0225e7 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -639,6 +639,8 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
= ERTS_MAGIC_BIN_UNALIGNED_SIZE(sizeof(ErtsMagicIndirectionWord));
fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_RECV_MARK_BLK)]
= sizeof(ErtsRecvMarkerBlock);
+ fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_SIGQ_BUFFERS)]
+ = sizeof(ErtsSignalInQueueBufferArray);
#ifdef HARD_DEBUG
hdbg_init();
diff --git a/erts/emulator/beam/erl_alloc.types b/erts/emulator/beam/erl_alloc.types
index bb6d00ab8c..fb4d4094e2 100644
--- a/erts/emulator/beam/erl_alloc.types
+++ b/erts/emulator/beam/erl_alloc.types
@@ -254,6 +254,7 @@ type BINARY_FIND SHORT_LIVED PROCESSES binary_find
type CRASH_DUMP STANDARD SYSTEM crash_dump
type DIST_TRANSCODE SHORT_LIVED SYSTEM dist_transcode_context
type RLA_BLOCK_CNTRS LONG_LIVED SYSTEM release_literal_area_block_counters
+type SIGQ_BUFFERS FIXED_SIZE PROCESSES process_signal_queue_buffers
type THR_Q_EL STANDARD SYSTEM thr_q_element
type THR_Q_EL_SL FIXED_SIZE SYSTEM sl_thr_q_element
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index 8466f88fd5..8e29f126a9 100644
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -103,9 +103,9 @@ static char erts_system_version[] = ("Erlang/OTP " ERLANG_OTP_RELEASE
" [async-threads:%d]"
#ifdef BEAMASM
#ifdef NATIVE_ERLANG_STACK
- " [jit]"
+ " [jit:ns%s]"
#else
- " [jit:no-native-stack]"
+ " [jit%s]"
#endif
#endif
#ifdef ET_DEBUG
@@ -493,6 +493,7 @@ erts_print_system_version(fmtfn_t to, void *arg, Process *c_p)
, total, online
, dirty_cpu, dirty_cpu_onln, dirty_io
, erts_async_max_threads
+ , (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA ? ":fp" : "")
);
}
@@ -1109,7 +1110,7 @@ process_info_bif(Process *c_p, Eterm pid, Eterm opt, int always_wrap, int pi2)
sreds = reds_left;
if (!local_only) {
- erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(c_p);
erts_proc_sig_fetch(c_p);
erts_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
}
@@ -1217,7 +1218,7 @@ process_info_bif(Process *c_p, Eterm pid, Eterm opt, int always_wrap, int pi2)
}
if (flags & ERTS_PI_FLAG_NEED_MSGQ_LEN) {
ASSERT(locks & ERTS_PROC_LOCK_MAIN);
- erts_proc_lock(rp, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(rp);
erts_proc_sig_fetch(rp);
if (c_p->sig_qs.cont) {
erts_proc_unlock(rp, locks|ERTS_PROC_LOCK_MSGQ);
@@ -3585,7 +3586,7 @@ fun_info_2(BIF_ALIST_2)
break;
case am_name:
{
- const ErtsCodeMFA *mfa = erts_code_to_codemfa((funp->fe)->address);
+ const ErtsCodeMFA *mfa = erts_get_fun_mfa(funp->fe);
hp = HAlloc(p, 3);
val = mfa->function;
}
@@ -3660,8 +3661,9 @@ fun_info_mfa_1(BIF_ALIST_1)
if (is_fun(fun)) {
const ErtsCodeMFA *mfa;
ErlFunThing* funp;
+
funp = (ErlFunThing *) fun_val(fun);
- mfa = erts_code_to_codemfa((funp->fe)->address);
+ mfa = erts_get_fun_mfa(funp->fe);
hp = HAlloc(p, 4);
BIF_RET(TUPLE3(hp,
@@ -4356,15 +4358,6 @@ BIF_RETTYPE erts_debug_get_internal_state_1(BIF_ALIST_1)
BIF_RET(res);
}
}
- else if (ERTS_IS_ATOM_STR("term_to_binary_tuple_fallbacks", tp[1])) {
- Uint64 dflags = (TERM_TO_BINARY_DFLAGS
- & ~DFLAG_EXPORT_PTR_TAG
- & ~DFLAG_BIT_BINARIES);
- Eterm res = erts_term_to_binary(BIF_P, tp[2], 0, dflags);
- if (is_value(res))
- BIF_RET(res);
- BIF_ERROR(BIF_P, SYSTEM_LIMIT);
- }
else if (ERTS_IS_ATOM_STR("dist_ctrl", tp[1])) {
Eterm res = am_undefined;
DistEntry *dep = erts_sysname_to_connected_dist_entry(tp[2]);
diff --git a/erts/emulator/beam/erl_bif_trace.c b/erts/emulator/beam/erl_bif_trace.c
index 8024687c5e..fc30c7457c 100644
--- a/erts/emulator/beam/erl_bif_trace.c
+++ b/erts/emulator/beam/erl_bif_trace.c
@@ -1442,10 +1442,10 @@ erts_set_trace_pattern(Process*p, ErtsCodeMFA *mfa, int specified,
n = finish_bp.e.matched;
for (i = 0; i < n; i++) {
- ErtsCodeInfo *ci = fp[i].ci;
+ ErtsCodeInfo *ci_rw = fp[i].ci_rw;
Export* ep;
- ep = ErtsContainerStruct(ci, Export, info);
+ ep = ErtsContainerStruct(ci_rw, Export, info);
if (ep->bif_number != -1) {
ep->is_bif_traced = !!on;
@@ -1462,7 +1462,7 @@ erts_set_trace_pattern(Process*p, ErtsCodeMFA *mfa, int specified,
ep->trampoline.trace.address = (BeamInstr) ep->addresses[code_ix];
}
- erts_set_export_trace(ci, match_prog_set, 0);
+ erts_set_export_trace(ci_rw, match_prog_set, 0);
if (!erts_is_export_trampoline_active(ep, code_ix)) {
ep->trampoline.common.op = BeamOpCodeAddr(op_i_generic_breakpoint);
@@ -1474,7 +1474,7 @@ erts_set_trace_pattern(Process*p, ErtsCodeMFA *mfa, int specified,
* Turn off global tracing, either explicitly or implicitly
* before turning on breakpoint tracing.
*/
- erts_clear_export_trace(ci, 0);
+ erts_clear_export_trace(ci_rw, 0);
if (BeamIsOpCode(ep->trampoline.common.op, op_i_generic_breakpoint)) {
ep->trampoline.common.op = BeamOpCodeAddr(op_trace_jump_W);
}
@@ -1669,7 +1669,7 @@ install_exp_breakpoints(BpFunctions* f)
Uint i;
for (i = 0; i < ne; i++) {
- Export* ep = ErtsContainerStruct(fp[i].ci, Export, info);
+ Export* ep = ErtsContainerStruct(fp[i].ci_rw, Export, info);
erts_activate_export_trampoline(ep, code_ix);
}
}
@@ -1683,7 +1683,7 @@ uninstall_exp_breakpoints(BpFunctions* f)
Uint i;
for (i = 0; i < ne; i++) {
- Export* ep = ErtsContainerStruct(fp[i].ci, Export, info);
+ Export* ep = ErtsContainerStruct(fp[i].ci_rw, Export, info);
if (erts_is_export_trampoline_active(ep, code_ix)) {
ASSERT(BeamIsOpCode(ep->trampoline.common.op, op_trace_jump_W));
@@ -1701,7 +1701,7 @@ clean_export_entries(BpFunctions* f)
Uint i;
for (i = 0; i < ne; i++) {
- Export* ep = ErtsContainerStruct(fp[i].ci, Export, info);
+ Export* ep = ErtsContainerStruct(fp[i].ci_rw, Export, info);
if (erts_is_export_trampoline_active(ep, code_ix)) {
continue;
diff --git a/erts/emulator/beam/erl_bits.c b/erts/emulator/beam/erl_bits.c
index 2990f4e775..33c66e49b0 100644
--- a/erts/emulator/beam/erl_bits.c
+++ b/erts/emulator/beam/erl_bits.c
@@ -78,6 +78,11 @@ typedef Uint16 erlfp16;
static byte get_bit(byte b, size_t a_offs);
+/* If the proc bin is larger than 16 MB,
+ we only increase by 20% instead of doubling */
+#define GROW_PROC_BIN_SIZE(size) \
+ (((size) > (1ull << 24)) ? 1.2*(size) : 2*(size))
+
/* the state resides in the current process' scheduler data */
#define byte_buf (ErlBitsState.byte_buf_)
@@ -1353,6 +1358,21 @@ erts_new_bs_put_string(ERL_BITS_PROTO_2(byte* iptr, Uint num_bytes))
erts_bin_offset += num_bytes*8;
}
+static ERTS_INLINE
+void increase_proc_bin_sz(Process* p, ProcBin* pb, Uint new_size)
+{
+ if (new_size > pb->size) {
+ if (ErtsInArea(pb, OLD_HEAP(p), ((OLD_HTOP(p) - OLD_HEAP(p))
+ * sizeof(Eterm)))) {
+ BIN_OLD_VHEAP(p) += (new_size / sizeof(Eterm) -
+ pb->size / sizeof(Eterm));
+ }
+ pb->size = new_size;
+ }
+ else
+ ASSERT(new_size == pb->size);
+}
+
Eterm
erts_bs_append(Process* c_p, Eterm* reg, Uint live, Eterm build_size_term,
Uint extra_words, Uint unit)
@@ -1440,7 +1460,8 @@ erts_bs_append(Process* c_p, Eterm* reg, Uint live, Eterm build_size_term,
used_size_in_bits = erts_bin_offset + build_size_in_bits;
sb->is_writable = 0; /* Make sure that no one else can write. */
- pb->size = NBYTES(used_size_in_bits);
+
+ increase_proc_bin_sz(c_p, pb, NBYTES(used_size_in_bits));
pb->flags |= PB_ACTIVE_WRITER;
/*
@@ -1448,7 +1469,8 @@ erts_bs_append(Process* c_p, Eterm* reg, Uint live, Eterm build_size_term,
*/
binp = pb->val;
if (binp->orig_size < pb->size) {
- Uint new_size = 2*pb->size;
+ Uint new_size = GROW_PROC_BIN_SIZE(pb->size);
+
binp = erts_bin_realloc(binp, new_size);
pb->val = binp;
pb->bytes = (byte *) binp->orig_bytes;
@@ -1527,7 +1549,7 @@ erts_bs_append(Process* c_p, Eterm* reg, Uint live, Eterm build_size_term,
used_size_in_bytes = NBYTES(used_size_in_bits);
if(used_size_in_bits < (ERTS_UINT_MAX / 2)) {
- bin_size = 2 * used_size_in_bytes;
+ bin_size = GROW_PROC_BIN_SIZE(used_size_in_bytes);
} else {
bin_size = NBYTES(ERTS_UINT_MAX);
}
@@ -1547,8 +1569,8 @@ erts_bs_append(Process* c_p, Eterm* reg, Uint live, Eterm build_size_term,
hp += PROC_BIN_SIZE;
pb->thing_word = HEADER_PROC_BIN;
pb->size = used_size_in_bytes;
- pb->next = MSO(c_p).first;
- MSO(c_p).first = (struct erl_off_heap_header*)pb;
+ pb->next = c_p->wrt_bins;
+ c_p->wrt_bins = (struct erl_off_heap_header*)pb;
pb->val = bptr;
pb->bytes = (byte*) bptr->orig_bytes;
pb->flags = PB_IS_WRITABLE | PB_ACTIVE_WRITER;
@@ -1629,15 +1651,14 @@ erts_bs_private_append(Process* p, Eterm bin, Eterm build_size_term, Uint unit)
}
pos_in_bits_after_build = erts_bin_offset + build_size_in_bits;
- pb->size = (pos_in_bits_after_build+7) >> 3;
- pb->flags |= PB_ACTIVE_WRITER;
+ increase_proc_bin_sz(p, pb, (pos_in_bits_after_build+7) >> 3);
/*
* Reallocate the binary if it is too small.
*/
binp = pb->val;
if (binp->orig_size < pb->size) {
- Uint new_size = 2*pb->size;
+ Uint new_size = GROW_PROC_BIN_SIZE(pb->size);
BUMP_REDS(p, pb->size / BITS_PER_REDUCTION);
if (pb->flags & PB_IS_WRITABLE) {
@@ -1656,16 +1677,32 @@ erts_bs_private_append(Process* p, Eterm bin, Eterm build_size_term, Uint unit)
* on. That means that a trace process now has (or have
* had) a reference to the binary, so we are not allowed
* to reallocate the binary. Instead, we must allocate a new
- * binary and copy the contents of the old binary into it.
+ * binary and copy the contents of the old binary into it.
+ *
+ * Also make a new ProcBin as the old one may have been moved
+ * from the 'wrt_bins' list to the regular 'off_heap' list by
+ * the GC. To move it back would mean traversing the off_heap list
+ * from the start. So instead create a new ProcBin for this
+ * (hopefully) rare case.
*/
Binary* bptr = erts_bin_nrml_alloc(new_size);
- sys_memcpy(bptr->orig_bytes, binp->orig_bytes, binp->orig_size);
- pb->flags |= PB_IS_WRITABLE | PB_ACTIVE_WRITER;
- pb->val = bptr;
- pb->bytes = (byte *) bptr->orig_bytes;
- erts_bin_release(binp);
+ ProcBin* new_pb;
+
+ sys_memcpy(bptr->orig_bytes, binp->orig_bytes, binp->orig_size);
+
+ new_pb = (ProcBin*) HeapFragOnlyAlloc(p, PROC_BIN_SIZE);
+ new_pb->thing_word = HEADER_PROC_BIN;
+ new_pb->size = pb->size;
+ new_pb->val = bptr;
+ new_pb->bytes = (byte *) bptr->orig_bytes;
+ new_pb->next = p->wrt_bins;
+ p->wrt_bins = (struct erl_off_heap_header*) new_pb;
+ sb->orig = make_binary(new_pb);
+ pb = new_pb;
}
}
+ pb->flags = PB_IS_WRITABLE | PB_ACTIVE_WRITER;
+
erts_current_bin = pb->bytes;
sb->size = pos_in_bits_after_build >> 3;
@@ -1711,8 +1748,8 @@ erts_bs_init_writable(Process* p, Eterm sz)
hp += PROC_BIN_SIZE;
pb->thing_word = HEADER_PROC_BIN;
pb->size = 0;
- pb->next = MSO(p).first;
- MSO(p).first = (struct erl_off_heap_header*) pb;
+ pb->next = p->wrt_bins;
+ p->wrt_bins = (struct erl_off_heap_header*) pb;
pb->val = bptr;
pb->bytes = (byte*) bptr->orig_bytes;
pb->flags = PB_IS_WRITABLE | PB_ACTIVE_WRITER;
diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c
index eb3134b8fe..df977fea61 100644
--- a/erts/emulator/beam/erl_db_util.c
+++ b/erts/emulator/beam/erl_db_util.c
@@ -676,6 +676,24 @@ static DMCGuardBif guard_tab[] =
DBIF_ALL
},
{
+ am_byte_size,
+ &byte_size_1,
+ 1,
+ DBIF_ALL
+ },
+ {
+ am_binary_part,
+ &binary_part_2,
+ 2,
+ DBIF_ALL
+ },
+ {
+ am_binary_part,
+ &binary_part_3,
+ 3,
+ DBIF_ALL
+ },
+ {
am_tl,
&tl_1,
1,
@@ -2689,7 +2707,16 @@ restart:
break;
case matchCaller:
ASSERT(c_p == self);
- t = c_p->stop[0];
+
+ /* Note that we can't use `erts_inspect_frame` here as the top of
+ * the stack could point at something other than a frame. */
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ t = c_p->stop[0];
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+ t = c_p->stop[1];
+ }
+
if (is_not_CP(t)) {
*esp++ = am_undefined;
} else if (!(cp = erts_find_function_from_pc(cp_val(t)))) {
diff --git a/erts/emulator/beam/erl_fun.c b/erts/emulator/beam/erl_fun.c
index 13141e93e1..4267cbed63 100644
--- a/erts/emulator/beam/erl_fun.c
+++ b/erts/emulator/beam/erl_fun.c
@@ -27,6 +27,7 @@
#include "global.h"
#include "erl_fun.h"
#include "hash.h"
+#include "beam_common.h"
static Hash erts_fun_table;
@@ -42,14 +43,6 @@ static int fun_cmp(ErlFunEntry* obj1, ErlFunEntry* obj2);
static ErlFunEntry* fun_alloc(ErlFunEntry* template);
static void fun_free(ErlFunEntry* obj);
-/*
- * The address field of every fun that has no loaded code will point
- * to unloaded_fun[]. The -1 in unloaded_fun[0] will be interpreted
- * as an illegal arity when attempting to call a fun.
- */
-static BeamInstr unloaded_fun_code[4] = {NIL, NIL, -1, 0};
-static ErtsCodePtr unloaded_fun = &unloaded_fun_code[3];
-
void
erts_init_fun_table(void)
{
@@ -97,55 +90,46 @@ int erts_fun_table_sz(void)
ErlFunEntry*
erts_put_fun_entry2(Eterm mod, int old_uniq, int old_index,
- const byte* uniq, int index, int arity)
+ const byte* uniq, int index, int arity)
{
ErlFunEntry template;
ErlFunEntry* fe;
erts_aint_t refc;
+ /* All fields are copied from the template when inserting a new entry. */
ASSERT(is_atom(mod));
+ template.old_index = old_index;
template.old_uniq = old_uniq;
template.index = index;
template.module = mod;
+ template.arity = arity;
+ sys_memcpy(template.uniq, uniq, sizeof(template.uniq));
+
erts_fun_write_lock();
fe = (ErlFunEntry *) hash_put(&erts_fun_table, (void*) &template);
- sys_memcpy(fe->uniq, uniq, sizeof(fe->uniq));
- fe->old_index = old_index;
- fe->arity = arity;
refc = erts_refc_inctest(&fe->refc, 0);
- if (refc < 2) /* New or pending delete */
- erts_refc_inc(&fe->refc, 1);
+ if (refc < 2) {
+ /* New or pending delete */
+ erts_refc_inc(&fe->refc, 1);
+ }
erts_fun_write_unlock();
+
return fe;
}
-ErlFunEntry*
-erts_get_fun_entry(Eterm mod, int uniq, int index)
-{
- ErlFunEntry template;
- ErlFunEntry *ret;
+const ErtsCodeMFA *erts_get_fun_mfa(const ErlFunEntry *fe) {
+ static const ErtsCodeMFA unloaded_mfa = {NIL, NIL, ERTS_UINT_MAX};
+ ErtsCodePtr address = fe->address;
- ASSERT(is_atom(mod));
- template.old_uniq = uniq;
- template.index = index;
- template.module = mod;
- erts_fun_read_lock();
- ret = (ErlFunEntry *) hash_get(&erts_fun_table, (void*) &template);
- if (ret) {
- erts_aint_t refc = erts_refc_inctest(&ret->refc, 1);
- if (refc < 2) /* Pending delete */
- erts_refc_inc(&ret->refc, 1);
+ if (address != beam_unloaded_fun) {
+ return erts_find_function_from_pc(address);
}
- erts_fun_read_unlock();
- return ret;
-}
-int erts_is_fun_loaded(ErlFunEntry* fe) {
- int res = fe->address != unloaded_fun;
-
- ASSERT(res == (0 != ((const BeamInstr*)fe->address)[0]));
+ return &unloaded_mfa;
+}
- return res;
+int erts_is_fun_loaded(const ErlFunEntry* fe) {
+ return fe->address != beam_unloaded_fun;
}
static void
@@ -164,13 +148,14 @@ erts_erase_fun_entry(ErlFunEntry* fe)
*/
if (erts_refc_dectest(&fe->refc, -1) <= 0)
{
- if (fe->address != unloaded_fun)
- erts_exit(ERTS_ERROR_EXIT,
- "Internal error: "
- "Invalid reference count found on #Fun<%T.%d.%d>: "
- " About to erase fun still referred by code.\n",
- fe->module, fe->old_index, fe->old_uniq);
- erts_erase_fun_entry_unlocked(fe);
+ if (erts_is_fun_loaded(fe)) {
+ erts_exit(ERTS_ERROR_EXIT,
+ "Internal error: "
+ "Invalid reference count found on #Fun<%T.%d.%d>: "
+ " About to erase fun still referred by code.\n",
+ fe->module, fe->old_index, fe->old_uniq);
+ }
+ erts_erase_fun_entry_unlocked(fe);
}
erts_fun_write_unlock();
}
@@ -185,7 +170,7 @@ static void fun_purge_foreach(ErlFunEntry *fe, struct erl_module_instance* modp)
if (ErtsInArea(fun_addr, mod_start, modp->code_length)) {
fe->pend_purge_address = fe->address;
ERTS_THR_WRITE_MEMORY_BARRIER;
- fe->address = unloaded_fun;
+ fe->address = beam_unloaded_fun;
erts_purge_state_add_fun(fe);
}
}
@@ -206,7 +191,7 @@ erts_fun_purge_abort_prepare(ErlFunEntry **funs, Uint no)
for (ix = 0; ix < no; ix++) {
ErlFunEntry *fe = funs[ix];
- if (fe->address == unloaded_fun) {
+ if (fe->address == beam_unloaded_fun) {
fe->address = fe->pend_purge_address;
}
}
@@ -274,35 +259,26 @@ fun_hash(ErlFunEntry* obj)
static int
fun_cmp(ErlFunEntry* obj1, ErlFunEntry* obj2)
{
- /*
- * OTP 23: Use 'index' (instead of 'old_index') when comparing fun
- * entries. In OTP 23, multiple make_fun2 instructions may refer to the
- * the same 'index' (for the wrapper function generated for the
- * 'fun F/A' syntax).
- *
- * This is safe when loading code compiled with OTP R15 and later,
- * because since R15 (2011), the 'index' has been reliably equal
- * to 'old_index'. The loader refuses to load modules compiled before
- * OTP R15.
- */
-
- return !(obj1->module == obj2->module &&
- obj1->old_uniq == obj2->old_uniq &&
- obj1->index == obj2->index);
+ return !(obj1->old_index == obj2->old_index &&
+ obj1->old_uniq == obj2->old_uniq &&
+ obj1->module == obj2->module &&
+ obj1->index == obj2->index &&
+ obj1->arity == obj2->arity &&
+ !sys_memcmp(obj1->uniq, obj2->uniq, sizeof(obj1->uniq)));
}
static ErlFunEntry*
fun_alloc(ErlFunEntry* template)
{
ErlFunEntry* obj = (ErlFunEntry *) erts_alloc(ERTS_ALC_T_FUN_ENTRY,
- sizeof(ErlFunEntry));
+ sizeof(ErlFunEntry));
+
+ sys_memcpy(obj, template, sizeof(ErlFunEntry));
- obj->old_uniq = template->old_uniq;
- obj->index = template->index;
- obj->module = template->module;
erts_refc_init(&obj->refc, -1);
- obj->address = unloaded_fun;
+ obj->address = beam_unloaded_fun;
obj->pend_purge_address = NULL;
+
return obj;
}
diff --git a/erts/emulator/beam/erl_fun.h b/erts/emulator/beam/erl_fun.h
index e7768646e3..1f5e8669d7 100644
--- a/erts/emulator/beam/erl_fun.h
+++ b/erts/emulator/beam/erl_fun.h
@@ -26,18 +26,20 @@
/*
* Fun entry.
*/
-
typedef struct erl_fun_entry {
- HashBucket bucket; /* MUST BE LOCATED AT TOP OF STRUCT!!! */
+ HashBucket bucket;
- byte uniq[16]; /* MD5 for module. */
- int index; /* New style index. */
- int old_uniq; /* Unique number (old_style) */
- int old_index; /* Old style index */
- ErtsCodePtr address; /* Pointer to code for fun */
+ ErtsCodePtr address; /* Pointer to code for actual function */
- Uint arity; /* The arity of the fun. */
+ /* These fields identify the function and must not be altered after fun
+ * creation. */
Eterm module; /* Tagged atom for module. */
+ Uint arity; /* The arity of the fun. */
+ int index; /* New style index. */
+ byte uniq[16]; /* MD5 for module. */
+ int old_uniq; /* Unique number (old_style) */
+ int old_index; /* Old style index */
+
erts_refc_t refc; /* Reference count: One for code + one for
* each fun object in each process. */
ErtsCodePtr pend_purge_address; /* Address during a pending purge */
@@ -67,12 +69,13 @@ void erts_init_fun_table(void);
void erts_fun_info(fmtfn_t, void *);
int erts_fun_table_sz(void);
-ErlFunEntry* erts_get_fun_entry(Eterm mod, int uniq, int index);
-
+/* Finds or inserts a fun entry that matches the given signature. */
ErlFunEntry* erts_put_fun_entry2(Eterm mod, int old_uniq, int old_index,
- const byte* uniq, int index, int arity);
+ const byte* uniq, int index, int arity);
+
+const ErtsCodeMFA *erts_get_fun_mfa(const ErlFunEntry *fe);
-int erts_is_fun_loaded(ErlFunEntry* fe);
+int erts_is_fun_loaded(const ErlFunEntry* fe);
void erts_erase_fun_entry(ErlFunEntry* fe);
void erts_cleanup_funs(ErlFunThing* funp);
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 07a7b6c9e8..5f6eb4410a 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -113,6 +113,7 @@ typedef struct {
int num_roots; /* Number of root arrays. */
} Rootset;
+static void copy_erlang_stack(Process *p, Eterm *new_heap, SWord new_sz);
static Uint setup_rootset(Process*, Eterm*, int, Rootset*);
static void cleanup_rootset(Rootset *rootset);
static Eterm *full_sweep_heaps(Process *p,
@@ -148,12 +149,15 @@ static int adjust_after_fullsweep(Process *p, int need, Eterm *objv, int nobj);
static void shrink_new_heap(Process *p, Uint new_sz, Eterm *objv, int nobj);
static void grow_new_heap(Process *p, Uint new_sz, Eterm* objv, int nobj);
static void sweep_off_heap(Process *p, int fullsweep);
-static void offset_heap(Eterm* hp, Uint sz, Sint offs, char* area, Uint area_size);
-static void offset_heap_ptr(Eterm* hp, Uint sz, Sint offs, char* area, Uint area_size);
-static void offset_rootset(Process *p, Sint offs, char* area, Uint area_size,
- Eterm* objv, int nobj);
-static void offset_off_heap(Process* p, Sint offs, char* area, Uint area_size);
-static void offset_mqueue(Process *p, Sint offs, char* area, Uint area_size);
+static void offset_heap(Eterm* hp, Uint sz, Sint offs, char* area, Uint area_sz);
+static void offset_stack(Eterm *stack, Uint sz,
+ Sint heap_offset, Sint stack_offset,
+ char* area, Uint area_sz);
+static void offset_heap_ptr(Eterm* hp, Uint sz, Sint offs, char* area, Uint area_sz);
+static void offset_rootset(Process *p, Sint heap_offs, Sint stack_offs,
+ char* area, Uint area_sz, Eterm* objv, int nobj);
+static void offset_off_heap(Process* p, Sint offs, char* area, Uint area_sz);
+static void offset_mqueue(Process *p, Sint offs, char* area, Uint area_sz);
static int reached_max_heap_size(Process *p, Uint total_heap_size,
Uint extra_heap_size, Uint extra_old_heap_size);
static void init_gc_info(ErtsGCInfo *gcip);
@@ -459,14 +463,11 @@ erts_gc_after_bif_call(Process* p, Eterm result, Eterm* regs, Uint arity)
static ERTS_INLINE void assert_no_active_writers(Process *p)
{
#ifdef DEBUG
- struct erl_off_heap_header* ptr;
- ptr = MSO(p).first;
- while (ptr) {
- if (ptr->thing_word == HEADER_PROC_BIN) {
- ProcBin *pbp = (ProcBin*) ptr;
- ERTS_ASSERT(!(pbp->flags & PB_ACTIVE_WRITER));
- }
- ptr = ptr->next;
+ ProcBin *pb = (ProcBin*) p->wrt_bins;
+ while (pb) {
+ ASSERT(pb->thing_word == HEADER_PROC_BIN);
+ ERTS_ASSERT(!(pb->flags & PB_ACTIVE_WRITER));
+ pb = (ProcBin*) pb->next;
}
#endif
}
@@ -479,7 +480,7 @@ delay_garbage_collection(Process *p, ErlHeapFragment *live_hf_end, int need, int
{
ErlHeapFragment *hfrag;
Eterm *orig_heap, *orig_hend, *orig_htop, *orig_stop;
- Eterm *stop, *hend;
+ Eterm *hend;
Uint hsz, ssz;
int reds_left;
@@ -516,10 +517,11 @@ delay_garbage_collection(Process *p, ErlHeapFragment *live_hf_end, int need, int
hsz = ssz + need + ERTS_DELAY_GC_EXTRA_FREE + S_RESERVED;
hfrag = new_message_buffer(hsz);
+
+ copy_erlang_stack(p, &hfrag->mem[0], hsz);
+
p->heap = p->htop = &hfrag->mem[0];
p->hend = hend = &hfrag->mem[hsz];
- p->stop = stop = hend - ssz;
- sys_memcpy((void *) stop, (void *) orig_stop, ssz * sizeof(Eterm));
if (p->abandoned_heap) {
/*
@@ -917,7 +919,7 @@ garbage_collect_hibernate(Process* p, int check_long_gc)
Eterm* htop;
Uint actual_size;
char* area;
- Uint area_size;
+ Uint area_sz;
Sint offs;
int reds;
@@ -956,7 +958,17 @@ garbage_collect_hibernate(Process* p, int check_long_gc)
/* Only allow one continuation pointer. */
ASSERT(p->stop == p->hend - CP_SIZE);
- ASSERT(p->stop[0] == make_cp(beam_normal_exit));
+
+ switch (erts_frame_layout) {
+ case ERTS_FRAME_LAYOUT_RA:
+ ASSERT(p->stop[0] == make_cp(beam_normal_exit));
+ break;
+ case ERTS_FRAME_LAYOUT_FP_RA:
+ ASSERT(p->stop[0] == make_cp(NULL));
+ ASSERT(p->stop[1] == make_cp(beam_normal_exit));
+ ASSERT(FRAME_POINTER(p) == &p->stop[0]);
+ break;
+ }
/*
* Do it.
@@ -1020,14 +1032,24 @@ garbage_collect_hibernate(Process* p, int check_long_gc)
p->hend = heap + heap_size;
p->stop = p->hend - CP_SIZE;
- p->stop[0] = make_cp(beam_normal_exit);
+
+ switch (erts_frame_layout) {
+ case ERTS_FRAME_LAYOUT_RA:
+ p->stop[0] = make_cp(beam_normal_exit);
+ break;
+ case ERTS_FRAME_LAYOUT_FP_RA:
+ p->stop[0] = make_cp(NULL);
+ p->stop[1] = make_cp(beam_normal_exit);
+ FRAME_POINTER(p) = &p->stop[0];
+ break;
+ }
offs = heap - p->heap;
area = (char *) p->heap;
- area_size = ((char *) p->htop) - area;
- offset_heap(heap, actual_size, offs, area, area_size);
+ area_sz = ((char *) p->htop) - area;
+ offset_heap(heap, actual_size, offs, area, area_sz);
p->high_water = heap + (p->high_water - p->heap);
- offset_rootset(p, offs, area, area_size, p->arg_reg, p->arity);
+ offset_rootset(p, offs, 0, area, area_sz, p->arg_reg, p->arity);
p->htop = heap + actual_size;
p->heap = heap;
p->heap_sz = heap_size;
@@ -1062,11 +1084,6 @@ erts_garbage_collect_hibernate(Process* p)
BUMP_REDS(p, reds);
}
-#define fullsweep_nstack(p,n_htop) (n_htop)
-#define GENSWEEP_NSTACK(p,old_htop,n_htop) do{}while(0)
-#define offset_nstack(p,offs,area,area_size) do{}while(0)
-#define sweep_literals_nstack(p,old_htop,area,area_size) (old_htop)
-
int
erts_garbage_collect_literals(Process* p, Eterm* literals,
Uint byte_lit_size,
@@ -1080,7 +1097,7 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
Rootset rootset; /* Rootset for GC (stack, dictionary, etc). */
Roots* roots;
char* area;
- Uint area_size;
+ Uint area_sz;
Eterm* old_htop;
Uint n;
Uint ygen_usage = 0;
@@ -1172,7 +1189,8 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
offs = temp_lit - literals;
offset_heap(temp_lit, lit_size, offs, (char *) literals, byte_lit_size);
offset_heap(p->heap, p->htop - p->heap, offs, (char *) literals, byte_lit_size);
- offset_rootset(p, offs, (char *) literals, byte_lit_size, p->arg_reg, p->arity);
+ offset_rootset(p, offs, 0, (char *) literals, byte_lit_size,
+ p->arg_reg, p->arity);
if (oh) {
oh = (struct erl_off_heap_header *) ((Eterm *)(void *) oh + offs);
}
@@ -1184,10 +1202,10 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
*/
area = (char *) temp_lit;
- area_size = byte_lit_size;
+ area_sz = byte_lit_size;
n = setup_rootset(p, p->arg_reg, p->arity, &rootset);
roots = rootset.roots;
- old_htop = sweep_literals_nstack(p, p->old_htop, area, area_size);
+ old_htop = p->old_htop;
while (n--) {
Eterm* g_ptr = roots->v;
Uint g_sz = roots->sz;
@@ -1206,7 +1224,7 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
if (IS_MOVED_BOXED(val)) {
ASSERT(is_boxed(val));
*g_ptr = val;
- } else if (ErtsInArea(ptr, area, area_size)) {
+ } else if (ErtsInArea(ptr, area, area_sz)) {
move_boxed(ptr,val,&old_htop,g_ptr);
}
break;
@@ -1215,7 +1233,7 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
val = *ptr;
if (IS_MOVED_CONS(val)) { /* Moved */
*g_ptr = ptr[1];
- } else if (ErtsInArea(ptr, area, area_size)) {
+ } else if (ErtsInArea(ptr, area, area_sz)) {
move_cons(ptr,val,&old_htop,g_ptr);
}
break;
@@ -1232,10 +1250,10 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
* Now we'll have to go through all heaps updating all other references.
*/
- old_htop = sweep_literals_to_old_heap(p->heap, p->htop, old_htop, area, area_size);
+ old_htop = sweep_literals_to_old_heap(p->heap, p->htop, old_htop, area, area_sz);
old_htop = sweep_literal_area(p->old_heap, old_htop,
(char *) p->old_heap, sizeof(Eterm)*old_heap_size,
- area, area_size);
+ area, area_sz);
ASSERT(p->old_htop <= old_htop && old_htop <= p->old_hend);
p->old_htop = old_htop;
@@ -1491,6 +1509,65 @@ minor_collection(Process* p, ErlHeapFragment *live_hf_end,
return -1;
}
+/* Copies the Erlang stack to the end of the new heap, adjusting continuation
+ * pointers as needed. */
+static ERTS_INLINE void copy_erlang_stack(Process *p,
+ Eterm *new_heap,
+ SWord new_sz) {
+ const ErtsFrameLayout frame_layout = erts_frame_layout;
+
+ Eterm *prev_stack_top, *prev_stack_end;
+ Eterm *new_stack_top;
+ SWord stack_size;
+
+ ASSERT(new_heap != HEAP_START(p));
+
+ prev_stack_top = STACK_TOP(p);
+ prev_stack_end = STACK_START(p);
+
+ stack_size = prev_stack_end - prev_stack_top;
+ new_stack_top = &new_heap[new_sz - stack_size];
+
+#if defined(DEBUG) && defined(ERLANG_FRAME_POINTERS)
+ erts_validate_stack(p, FRAME_POINTER(p), prev_stack_top);
+#endif
+
+ if (frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ sys_memcpy(new_stack_top, prev_stack_top, stack_size * sizeof(Eterm));
+ } else {
+ Eterm *new_p, *old_p;
+ SWord stack_offset;
+
+ ASSERT(frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+
+ old_p = prev_stack_top;
+ new_p = new_stack_top;
+
+ stack_offset = new_stack_top - prev_stack_top;
+
+ while (old_p < prev_stack_end) {
+ Eterm val = old_p[0];
+
+ if (is_CP(val)) {
+ Eterm *frame_ptr = (Eterm*)cp_val(val);
+
+ if (old_p < frame_ptr && frame_ptr < prev_stack_end) {
+ val = offset_ptr(val, stack_offset);
+ }
+ }
+
+ new_p[0] = val;
+
+ new_p++;
+ old_p++;
+ }
+
+ FRAME_POINTER(p) += stack_offset;
+ }
+
+ p->stop = new_stack_top;
+}
+
static void
do_minor(Process *p, ErlHeapFragment *live_hf_end,
char *mature, Uint mature_size,
@@ -1530,7 +1607,6 @@ do_minor(Process *p, ErlHeapFragment *live_hf_end,
n_htop = collect_live_heap_frags(p, live_hf_end, n_htop);
}
- GENSWEEP_NSTACK(p, old_htop, n_htop);
while (n--) {
Eterm* g_ptr = roots->v;
Uint g_sz = roots->sz;
@@ -1665,7 +1741,7 @@ do_minor(Process *p, ErlHeapFragment *live_hf_end,
OLD_HTOP(p) = old_htop;
HIGH_WATER(p) = n_htop;
- if (MSO(p).first) {
+ if (MSO(p).first || p->wrt_bins) {
sweep_off_heap(p, 0);
}
@@ -1678,10 +1754,7 @@ do_minor(Process *p, ErlHeapFragment *live_hf_end,
disallow_heap_frag_ref_in_old_heap(p);
#endif
- /* Copy stack to end of new heap */
- n = p->hend - p->stop;
- sys_memcpy(n_heap + new_sz - n, p->stop, n * sizeof(Eterm));
- p->stop = n_heap + new_sz - n;
+ copy_erlang_stack(p, n_heap, new_sz);
#ifdef HARDDEBUG
disallow_heap_frag_ref_in_heap(p, n_heap, n_htop);
@@ -1720,7 +1793,7 @@ major_collection(Process* p, ErlHeapFragment *live_hf_end,
Eterm* n_htop;
char* oh = (char *) OLD_HEAP(p);
Uint oh_size = (char *) OLD_HTOP(p) - oh;
- Uint new_sz, stk_sz;
+ Uint new_sz;
int adjusted;
VERBOSE(DEBUG_SHCOPY, ("[pid=%T] MAJOR GC: %p %p %p %p\n", p->common.id,
@@ -1771,10 +1844,7 @@ major_collection(Process* p, ErlHeapFragment *live_hf_end,
n_htop = full_sweep_heaps(p, live_hf_end, 0, n_heap, n_htop, oh, oh_size,
objv, nobj);
- /* Move the stack to the end of the heap */
- stk_sz = HEAP_END(p) - p->stop;
- sys_memcpy(n_heap + new_sz - stk_sz, p->stop, stk_sz * sizeof(Eterm));
- p->stop = n_heap + new_sz - stk_sz;
+ copy_erlang_stack(p, n_heap, new_sz);
#ifdef HARDDEBUG
disallow_heap_frag_ref_in_heap(p, n_heap, n_htop);
@@ -1906,7 +1976,7 @@ full_sweep_heaps(Process *p,
n_htop = sweep_heaps(n_heap, n_htop, oh, oh_size);
- if (MSO(p).first) {
+ if (MSO(p).first || p->wrt_bins) {
sweep_off_heap(p, 1);
}
@@ -1926,7 +1996,7 @@ adjust_after_fullsweep(Process *p, int need, Eterm *objv, int nobj)
int adjusted = 0;
Uint wanted, sz, need_after;
Uint stack_size = STACK_SZ_ON_HEAP(p);
-
+
/*
* Resize the heap if needed.
*/
@@ -1936,7 +2006,7 @@ adjust_after_fullsweep(Process *p, int need, Eterm *objv, int nobj)
/* Too small - grow to match requested need */
sz = next_heap_size(p, need_after, 0);
grow_new_heap(p, sz, objv, nobj);
- adjusted = 1;
+ adjusted = 1;
} else if (3 * HEAP_SIZE(p) < 4 * need_after){
/* Need more than 75% of current, postpone to next GC.*/
FLAGS(p) |= F_HEAP_GROW;
@@ -2540,7 +2610,7 @@ setup_rootset(Process *p, Eterm *objv, int nobj, Rootset *rootset)
roots[n].sz = ERTS_RECV_MARKER_BLOCK_SIZE;
n++;
}
-
+
/*
* If a NIF or BIF has saved arguments, they need to be added
*/
@@ -2649,100 +2719,116 @@ void cleanup_rootset(Rootset* rootset)
}
}
-static void
-grow_new_heap(Process *p, Uint new_sz, Eterm* objv, int nobj)
+static void resize_new_heap(Process *p, Uint new_sz, Eterm* objv, int nobj)
{
- Eterm* new_heap;
- Uint heap_size = HEAP_TOP(p) - HEAP_START(p);
- Uint stack_size = p->hend - p->stop;
- Sint offs;
+ Eterm *new_stack, *prev_stack;
+ Eterm *new_heap, *prev_heap;
+ Sint heap_offs, stack_offs;
+ Uint heap_used, stack_used;
+ Uint prev_sz;
+ Uint area_sz;
+ char* area;
- ASSERT(HEAP_SIZE(p) < new_sz);
- new_heap = (Eterm *) ERTS_HEAP_REALLOC(ERTS_ALC_T_HEAP,
- (void *) HEAP_START(p),
- sizeof(Eterm)*(HEAP_SIZE(p)),
- sizeof(Eterm)*new_sz);
-
- if ((offs = new_heap - HEAP_START(p)) == 0) { /* No move. */
- HEAP_END(p) = new_heap + new_sz;
- sys_memmove(p->hend - stack_size, p->stop, stack_size * sizeof(Eterm));
- p->stop = p->hend - stack_size;
- } else {
- char* area = (char *) HEAP_START(p);
- Uint area_size = (char *) HEAP_TOP(p) - area;
- Eterm* prev_stop = p->stop;
+ prev_heap = HEAP_START(p);
+ prev_sz = HEAP_SIZE(p);
+
+ stack_used = STACK_START(p) - STACK_TOP(p);
+ prev_stack = &prev_heap[prev_sz - stack_used];
+
+ if (new_sz <= prev_sz) {
+ /* When shrinking, we need to move the stack prior to reallocating as
+ * the upper part of the stack will disappear. */
+ sys_memmove(prev_stack - (prev_sz - new_sz),
+ prev_stack, stack_used * sizeof(Eterm));
+ }
+
+ new_heap = ERTS_HEAP_REALLOC(ERTS_ALC_T_HEAP, prev_heap,
+ prev_sz * sizeof(Eterm),
+ new_sz * sizeof(Eterm));
+ new_stack = &new_heap[new_sz - stack_used];
+
+ if (new_sz > prev_sz) {
+ /* We've grown and the previous stack has either remained in place or
+ * been copied over to its _previous position_ as part of reallocation,
+ * so we need to copy it to its new position at the end of the heap.
+ *
+ * Note that its pointers are still unchanged, so offset calculation
+ * should still use `prev_stack` as set above.*/
+ sys_memmove(new_stack,
+ &new_heap[prev_sz - stack_used],
+ stack_used * sizeof(Eterm));
+ }
- offset_heap(new_heap, heap_size, offs, area, area_size);
+ heap_used = HEAP_TOP(p) - HEAP_START(p);
- HIGH_WATER(p) = new_heap + (HIGH_WATER(p) - HEAP_START(p));
+ heap_offs = new_heap - prev_heap;
+ stack_offs = new_stack - prev_stack;
+
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ FRAME_POINTER(p) += stack_offs;
+ }
- HEAP_END(p) = new_heap + new_sz;
- prev_stop = new_heap + (p->stop - p->heap);
- p->stop = p->hend - stack_size;
- sys_memmove(p->stop, prev_stop, stack_size * sizeof(Eterm));
+ HEAP_TOP(p) = &new_heap[heap_used];
+ HEAP_START(p) = new_heap;
- offset_rootset(p, offs, area, area_size, objv, nobj);
- HEAP_TOP(p) = new_heap + heap_size;
- HEAP_START(p) = new_heap;
+ STACK_START(p) = &new_heap[new_sz];
+ STACK_TOP(p) = new_stack;
+
+ HIGH_WATER(p) = &new_heap[HIGH_WATER(p) - prev_heap];
+ HEAP_END(p) = &new_heap[new_sz];
+
+ HEAP_SIZE(p) = new_sz;
+
+ area = (char *) prev_heap;
+ area_sz = prev_sz * sizeof(Eterm);
+
+ if (new_heap == prev_heap) {
+ offset_stack(new_stack, stack_used, heap_offs, stack_offs,
+ area, area_sz);
+ } else {
+ offset_heap(new_heap, heap_used, heap_offs, area, area_sz);
+ offset_rootset(p, heap_offs, stack_offs, area, area_sz, objv, nobj);
}
+}
+
+static void
+grow_new_heap(Process *p, Uint new_sz, Eterm* objv, int nobj)
+{
+#ifdef USE_VM_PROBES
+ Uint prev_sz = HEAP_SIZE(p);
+#endif
+
+ ASSERT(HEAP_SIZE(p) < new_sz);
+ resize_new_heap(p, new_sz, objv, nobj);
#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(process_heap_grow)) {
DTRACE_CHARBUF(pidbuf, DTRACE_TERM_BUF_SIZE);
dtrace_proc_str(p, pidbuf);
- DTRACE3(process_heap_grow, pidbuf, HEAP_SIZE(p), new_sz);
+ DTRACE3(process_heap_grow, pidbuf, prev_sz, new_sz);
}
#endif
-
- HEAP_SIZE(p) = new_sz;
}
static void
shrink_new_heap(Process *p, Uint new_sz, Eterm *objv, int nobj)
{
- Eterm* new_heap;
- Uint heap_size = HEAP_TOP(p) - HEAP_START(p);
- Sint offs;
- Uint stack_size = p->hend - p->stop;
-
- ASSERT(new_sz < p->heap_sz);
- sys_memmove(p->heap + new_sz - stack_size, p->stop, stack_size *
- sizeof(Eterm));
- new_heap = (Eterm *) ERTS_HEAP_REALLOC(ERTS_ALC_T_HEAP,
- (void*)p->heap,
- sizeof(Eterm)*(HEAP_SIZE(p)),
- sizeof(Eterm)*new_sz);
- p->hend = new_heap + new_sz;
- p->stop = p->hend - stack_size;
-
- if ((offs = new_heap - HEAP_START(p)) != 0) {
- char* area = (char *) HEAP_START(p);
- Uint area_size = (char *) HEAP_TOP(p) - area;
-
- /*
- * Normally, we don't expect a shrunk heap to move, but you never
- * know on some strange embedded systems...
- */
-
- offset_heap(new_heap, heap_size, offs, area, area_size);
+#ifdef USE_VM_PROBES
+ Uint prev_sz = HEAP_SIZE(p);
+#endif
- HIGH_WATER(p) = new_heap + (HIGH_WATER(p) - HEAP_START(p));
- offset_rootset(p, offs, area, area_size, objv, nobj);
- HEAP_TOP(p) = new_heap + heap_size;
- HEAP_START(p) = new_heap;
- }
+ ASSERT(HEAP_SIZE(p) > new_sz);
+ resize_new_heap(p, new_sz, objv, nobj);
#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(process_heap_shrink)) {
DTRACE_CHARBUF(pidbuf, DTRACE_TERM_BUF_SIZE);
dtrace_proc_str(p, pidbuf);
- DTRACE3(process_heap_shrink, pidbuf, HEAP_SIZE(p), new_sz);
+ DTRACE3(process_heap_shrink, pidbuf, prev_sz, new_sz);
}
#endif
-
- HEAP_SIZE(p) = new_sz;
}
static Uint64
@@ -2792,55 +2878,21 @@ next_vheap_size(Process* p, Uint64 vheap, Uint64 vheap_sz) {
return new_vheap_sz < p->min_vheap_size ? p->min_vheap_size : new_vheap_sz;
}
-struct shrink_cand_data {
- struct erl_off_heap_header* new_candidates;
- struct erl_off_heap_header* new_candidates_end;
- struct erl_off_heap_header* old_candidates;
- Uint no_of_candidates;
- Uint no_of_active;
-};
-
static ERTS_INLINE void
-link_live_proc_bin(struct shrink_cand_data *shrink,
- struct erl_off_heap_header*** prevppp,
- struct erl_off_heap_header** currpp,
- int new_heap)
+shrink_writable_bin(ProcBin *pb, Uint leave_unused)
{
- ProcBin *pbp = (ProcBin*) *currpp;
- ASSERT(**prevppp == *currpp);
-
- *currpp = pbp->next;
- if (pbp->flags & (PB_ACTIVE_WRITER|PB_IS_WRITABLE)) {
- ASSERT(pbp->flags & PB_IS_WRITABLE);
-
- if (pbp->flags & PB_ACTIVE_WRITER) {
- pbp->flags &= ~PB_ACTIVE_WRITER;
- shrink->no_of_active++;
- }
- else { /* inactive */
- Uint unused = pbp->val->orig_size - pbp->size;
- /* Our allocators are 8 byte aligned, i.e., shrinking with
- less than 8 bytes will have no real effect */
- if (unused >= 8) { /* A shrink candidate; save in candidate list */
- **prevppp = pbp->next;
- if (new_heap) {
- if (!shrink->new_candidates)
- shrink->new_candidates_end = (struct erl_off_heap_header*)pbp;
- pbp->next = shrink->new_candidates;
- shrink->new_candidates = (struct erl_off_heap_header*)pbp;
- }
- else {
- pbp->next = shrink->old_candidates;
- shrink->old_candidates = (struct erl_off_heap_header*)pbp;
- }
- shrink->no_of_candidates++;
- return;
- }
- }
- }
-
- /* Not a shrink candidate; keep in original mso list */
- *prevppp = &pbp->next;
+ Uint new_size = pb->size;
+
+ if (leave_unused) {
+ new_size += (new_size * 100) / leave_unused;
+ /* Our allocators are 8 byte aligned, i.e., shrinking with
+ less than 8 bytes will have no real effect */
+ if (new_size + 8 >= pb->val->orig_size)
+ return;
+ }
+ ASSERT(erts_refc_read(&pb->val->intern.refc, 1) == 1);
+ pb->val = erts_bin_realloc(pb->val, new_size);
+ pb->bytes = (byte *) pb->val->orig_bytes;
}
#ifdef ERTS_MAGIC_REF_THING_HEADER
@@ -2857,23 +2909,26 @@ link_live_proc_bin(struct shrink_cand_data *shrink,
static void
sweep_off_heap(Process *p, int fullsweep)
{
- struct shrink_cand_data shrink = {0};
struct erl_off_heap_header* ptr;
struct erl_off_heap_header** prev;
+ struct erl_off_heap_header** insert_old_here;
char* oheap = NULL;
Uint oheap_sz = 0;
Uint64 bin_vheap = 0;
#ifdef DEBUG
+ Uint64 orig_bin_old_vheap = BIN_OLD_VHEAP(p);
int seen_mature = 0;
#endif
+ Uint shrink_ncandidates;
+ Uint shrink_nactive;
+ ProcBin* shrink_unresolved_end;
+ ProcBin* pb;
if (fullsweep == 0) {
oheap = (char *) OLD_HEAP(p);
oheap_sz = (char *) OLD_HEND(p) - oheap;
}
- BIN_OLD_VHEAP(p) = 0;
-
prev = &MSO(p).first;
ptr = MSO(p).first;
@@ -2897,9 +2952,9 @@ sweep_off_heap(Process *p, int fullsweep)
if (to_new_heap) {
bin_vheap += ptr->size / sizeof(Eterm);
} else {
- BIN_OLD_VHEAP(p) += ptr->size / sizeof(Eterm); /* for binary gc (words)*/
- }
- link_live_proc_bin(&shrink, &prev, &ptr, to_new_heap);
+ BIN_OLD_VHEAP(p) += ptr->size / sizeof(Eterm);
+ }
+ ASSERT(!(((ProcBin*)ptr)->flags & (PB_ACTIVE_WRITER|PB_IS_WRITABLE)));
break;
}
case ERTS_USED_MAGIC_REF_THING_HEADER__: {
@@ -2920,19 +2975,24 @@ sweep_off_heap(Process *p, int fullsweep)
make_boxed(&ptr->thing_word),
ERL_NODE_INC, __FILE__, __LINE__);
}
- prev = &ptr->next;
- ptr = ptr->next;
}
+ prev = &ptr->next;
+ ptr = ptr->next;
}
- else if (ErtsInArea(ptr, oheap, oheap_sz))
- break; /* and let old-heap loop continue */
+ else if (ErtsInArea(ptr, oheap, oheap_sz)) {
+ /*
+ * The rest of the list resides on the old heap and needs no
+ * attention during a minor gc.
+ */
+ ASSERT(!fullsweep);
+ break;
+ }
else {
/* garbage */
switch (thing_subtag(ptr->thing_word)) {
case REFC_BINARY_SUBTAG:
{
- Binary* bptr = ((ProcBin*)ptr)->val;
- erts_bin_release(bptr);
+ erts_bin_release(((ProcBin*)ptr)->val);
break;
}
case FUN_SUBTAG:
@@ -2960,94 +3020,163 @@ sweep_off_heap(Process *p, int fullsweep)
}
}
- /* The rest of the list resides on old-heap, and we just did a
- * generational collection - keep objects in list.
- */
- while (ptr) {
- ASSERT(ErtsInArea(ptr, oheap, oheap_sz));
- ASSERT(!IS_MOVED_BOXED(ptr->thing_word));
- switch (ptr->thing_word) {
- case HEADER_PROC_BIN:
- BIN_OLD_VHEAP(p) += ptr->size / sizeof(Eterm); /* for binary gc (words)*/
- link_live_proc_bin(&shrink, &prev, &ptr, 0);
- break;
- case ERTS_USED_MAGIC_REF_THING_HEADER__:
- ASSERT(is_magic_ref_thing(ptr));
- BIN_OLD_VHEAP(p) +=
- (((Uint) ((ErtsMRefThing *) ptr)->mb->orig_size)
- / sizeof(Eterm)); /* for binary gc (words)*/
- /* fall through... */
- default:
- ASSERT(is_fun_header(ptr->thing_word) ||
- is_external_header(ptr->thing_word)
- || is_magic_ref_thing(ptr));
- prev = &ptr->next;
- ptr = ptr->next;
- break;
- }
- }
+ insert_old_here = prev;
+#ifdef DEBUG
if (fullsweep) {
- BIN_OLD_VHEAP_SZ(p) = next_vheap_size(p, BIN_OLD_VHEAP(p) + MSO(p).overhead, BIN_OLD_VHEAP_SZ(p));
+ ASSERT(ptr == NULL);
+ ASSERT(BIN_OLD_VHEAP(p) == orig_bin_old_vheap);
}
- BIN_VHEAP_SZ(p) = next_vheap_size(p, bin_vheap, BIN_VHEAP_SZ(p));
- MSO(p).overhead = bin_vheap;
+ else {
+ /* The rest of the list resides on the old heap and needs no
+ * attention during a minor gc. In a DEBUG build, verify
+ * that the binaries in the list are not writable and that
+ * the other terms are of the allowed types.
+ */
+ while (ptr) {
+ ASSERT(ErtsInArea(ptr, oheap, oheap_sz));
+ ASSERT(!IS_MOVED_BOXED(ptr->thing_word));
+ switch (ptr->thing_word) {
+ case HEADER_PROC_BIN:
+ ASSERT(!(((ProcBin*)ptr)->flags & (PB_ACTIVE_WRITER|PB_IS_WRITABLE)));
+ break;
+ default:
+ ASSERT(is_fun_header(ptr->thing_word) ||
+ is_external_header(ptr->thing_word) ||
+ is_magic_ref_thing(ptr));
+ break;
+ }
+ ptr = ptr->next;
+ }
+ }
+#endif /* DEBUG */
/*
- * If we got any shrink candidates, check them out.
+ * Traverse writable binaries.
+ * As writable binaries may reside on the old heap we traverse
+ * the entire wrt_bins list even during minor gc.
*/
+ shrink_nactive = 0; /* number of active writable binaries */
+ shrink_ncandidates = 0; /* number of candidates for shrinking */
+ shrink_unresolved_end = NULL; /* end marker for second traversal */
+
+ pb = (ProcBin*) p->wrt_bins;
+ prev = &p->wrt_bins;
+ while (pb) {
+ int on_old_heap;
+ if (IS_MOVED_BOXED(pb->thing_word)) {
+ ASSERT(!ErtsInArea(pb, oheap, oheap_sz));
+ pb = (ProcBin*) boxed_val(pb->thing_word);
+ *prev = (struct erl_off_heap_header*) pb;
+ ASSERT(pb->thing_word == HEADER_PROC_BIN);
+ on_old_heap = ErtsInArea(pb, oheap, oheap_sz);
+ if (!on_old_heap) {
+ bin_vheap += pb->size / sizeof(Eterm);
+ } else {
+ BIN_OLD_VHEAP(p) += pb->size / sizeof(Eterm);
+ }
+ }
+ else {
+ ASSERT(pb->thing_word == HEADER_PROC_BIN);
+ on_old_heap = ErtsInArea(pb, oheap, oheap_sz);
+ if (!on_old_heap) {
+ /* garbage */
+ erts_bin_release(pb->val);
+ pb = (ProcBin*) pb->next;
+ *prev = (struct erl_off_heap_header*) pb;
+ continue;
+ }
+ }
+ if (pb->flags) {
+ ASSERT(pb->flags & PB_IS_WRITABLE);
- if (shrink.no_of_candidates) {
- ProcBin *candlist[] = { (ProcBin*)shrink.new_candidates,
- (ProcBin*)shrink.old_candidates };
+ /*
+ * How to shrink writable binaries. There are two distinct cases:
+ *
+ * + There are one or more active writers. We will shrink all
+ * writable binaries without active writers down to their
+ * original sizes.
+ *
+ * + There are no active writers. We will shrink all writable
+ * binaries, but not fully. How much margin we will leave
+ * depends on the number of writable binaries.
+ *
+ * That is, we don't know how to shrink the binaries before either
+ * + finding the first active writer, or
+ * + finding more than ERTS_INACT_WR_PB_LEAVE_LIMIT
+ * shrink candidates
+ */
+
+ if (pb->flags & PB_ACTIVE_WRITER) {
+ pb->flags &= ~PB_ACTIVE_WRITER;
+ shrink_nactive++;
+ if (!shrink_unresolved_end)
+ shrink_unresolved_end = pb;
+ }
+ else { /* inactive */
+ Uint unused = pb->val->orig_size - pb->size;
+ /* Our allocators are 8 byte aligned, i.e., shrinking with
+ less than 8 bytes will have no real effect */
+ if (unused >= 8) { /* A shrink candidate */
+ if (shrink_unresolved_end) {
+ shrink_writable_bin(pb, 0);
+ }
+ else if (++shrink_ncandidates > ERTS_INACT_WR_PB_LEAVE_LIMIT) {
+ shrink_unresolved_end = pb;
+ shrink_writable_bin(pb, 0);
+ }
+ /* else unresolved, handle in second traversal below */
+ }
+ }
+ prev = &pb->next;
+ pb = (ProcBin*) pb->next;
+ }
+ else { /* emasculated, move to regular off-heap list */
+ struct erl_off_heap_header* next = pb->next;
+ if (on_old_heap) {
+ pb->next = *insert_old_here;
+ *insert_old_here = (struct erl_off_heap_header*)pb;
+ }
+ else {
+ pb->next = p->off_heap.first;
+ p->off_heap.first = (struct erl_off_heap_header*)pb;
+ if (insert_old_here == &p->off_heap.first)
+ insert_old_here = &pb->next;
+ }
+ pb = (ProcBin*) next;
+ *prev = next;
+ }
+ }
+
+ /*
+ * Handle any unresolved shrink candidates left at the head of wrt_bins.
+ */
+ if (shrink_ncandidates) {
Uint leave_unused = 0;
- int i;
- if (shrink.no_of_active == 0) {
- if (shrink.no_of_candidates <= ERTS_INACT_WR_PB_LEAVE_MUCH_LIMIT)
+ if (shrink_nactive == 0) {
+ if (shrink_ncandidates <= ERTS_INACT_WR_PB_LEAVE_MUCH_LIMIT)
leave_unused = ERTS_INACT_WR_PB_LEAVE_MUCH_PERCENTAGE;
- else if (shrink.no_of_candidates <= ERTS_INACT_WR_PB_LEAVE_LIMIT)
- leave_unused = ERTS_INACT_WR_PB_LEAVE_PERCENTAGE;
+ else if (shrink_ncandidates <= ERTS_INACT_WR_PB_LEAVE_LIMIT)
+ leave_unused = ERTS_INACT_WR_PB_LEAVE_PERCENTAGE;
}
- for (i = 0; i < sizeof(candlist)/sizeof(candlist[0]); i++) {
- ProcBin* pb;
- for (pb = candlist[i]; pb; pb = (ProcBin*)pb->next) {
- Uint new_size = pb->size;
-
- if (leave_unused) {
- new_size += (new_size * 100) / leave_unused;
- /* Our allocators are 8 byte aligned, i.e., shrinking with
- less than 8 bytes will have no real effect */
- if (new_size + 8 >= pb->val->orig_size)
- continue;
- }
-
- pb->val = erts_bin_realloc(pb->val, new_size);
- pb->bytes = (byte *) pb->val->orig_bytes;
- }
+ for (pb = (ProcBin *)p->wrt_bins;
+ pb != shrink_unresolved_end;
+ pb = (ProcBin *)pb->next) {
+ ASSERT(pb);
+ ASSERT(pb->flags == PB_IS_WRITABLE);
+ shrink_writable_bin(pb, leave_unused);
}
+ }
-
- /*
- * We now potentially have the mso list divided into three lists:
- * - shrink candidates on new heap (inactive writable with unused data)
- * - shrink candidates on old heap (inactive writable with unused data)
- * - other binaries (read only + active writable ...) + funs and externals
- *
- * Put them back together: new candidates -> other -> old candidates
- * This order will ensure that the list only refers from new
- * generation to old and never from old to new *which is important*.
- */
- if (shrink.new_candidates) {
- if (prev == &MSO(p).first) /* empty other binaries list */
- prev = &shrink.new_candidates_end->next;
- else
- shrink.new_candidates_end->next = MSO(p).first;
- MSO(p).first = shrink.new_candidates;
- }
+ if (fullsweep) {
+ ASSERT(BIN_OLD_VHEAP(p) == orig_bin_old_vheap);
+ BIN_OLD_VHEAP(p) = 0;
+ BIN_OLD_VHEAP_SZ(p) = next_vheap_size(p, MSO(p).overhead, BIN_OLD_VHEAP_SZ(p));
}
- *prev = shrink.old_candidates;
+ BIN_VHEAP_SZ(p) = next_vheap_size(p, bin_vheap, BIN_VHEAP_SZ(p));
+ MSO(p).overhead = bin_vheap;
}
/*
@@ -3124,19 +3253,57 @@ offset_heap(Eterm* hp, Uint sz, Sint offs, char* area, Uint area_size)
}
}
-/*
- * Offset pointers to heap from stack.
- */
+/* Offset on-stack pointers to stack and heap. */
+static void
+offset_stack(Eterm *stack, Uint sz,
+ Sint heap_offset, Sint stack_offset,
+ char* area, Uint area_sz) {
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA || stack_offset == 0) {
+ /* No need to update self-references, just update pointers to the
+ * heap. */
+ offset_heap_ptr(stack, sz, heap_offset, area, area_sz);
+ } else {
+ Sint i = 0;
-static void
-offset_heap_ptr(Eterm* hp, Uint sz, Sint offs, char* area, Uint area_size)
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+
+ while (i < sz) {
+ Eterm val = stack[i];
+
+ switch (primary_tag(val)) {
+ case TAG_PRIMARY_HEADER:
+ if (ErtsInArea(val, area, area_sz)) {
+ stack[i] = offset_ptr(val, stack_offset);
+ }
+
+ i++;
+ break;
+ case TAG_PRIMARY_LIST:
+ case TAG_PRIMARY_BOXED:
+ if (ErtsInArea(ptr_val(val), area, area_sz)) {
+ stack[i] = offset_ptr(val, heap_offset);
+ }
+
+ i++;
+ break;
+ default:
+ i++;
+ break;
+ }
+ }
+ }
+}
+
+/* Offset pointers to heap from a root set. */
+static void
+offset_heap_ptr(Eterm* hp, Uint sz, Sint offs, char* area, Uint area_sz)
{
while (sz--) {
Eterm val = *hp;
switch (primary_tag(val)) {
case TAG_PRIMARY_LIST:
case TAG_PRIMARY_BOXED:
- if (ErtsInArea(ptr_val(val), area, area_size)) {
+ if (ErtsInArea(ptr_val(val), area, area_sz)) {
*hp = offset_ptr(val, offs);
}
hp++;
@@ -3155,6 +3322,10 @@ offset_off_heap(Process* p, Sint offs, char* area, Uint area_size)
Eterm** uptr = (Eterm**) (void *) &MSO(p).first;
*uptr += offs;
}
+ if (p->wrt_bins && ErtsInArea(p->wrt_bins, area, area_size)) {
+ Eterm** uptr = (Eterm**) (void *) &p->wrt_bins;
+ *uptr += offs;
+ }
}
#ifndef USE_VM_PROBES
@@ -3212,43 +3383,46 @@ offset_mqueue(Process *p, Sint offs, char* area, Uint area_size)
}
static void ERTS_INLINE
-offset_one_rootset(Process *p, Sint offs, char* area, Uint area_size,
- Eterm* objv, int nobj)
+offset_one_rootset(Process *p, Sint heap_offs, Sint stack_offs,
+ char* area, Uint area_sz, Eterm* objv, int nobj)
{
Eterm *v;
Uint sz;
if (p->dictionary) {
- offset_heap(ERTS_PD_START(p->dictionary),
- ERTS_PD_SIZE(p->dictionary),
- offs, area, area_size);
+ offset_heap(ERTS_PD_START(p->dictionary),
+ ERTS_PD_SIZE(p->dictionary),
+ heap_offs, area, area_sz);
}
- offset_heap_ptr(&p->fvalue, 1, offs, area, area_size);
- offset_heap_ptr(&p->ftrace, 1, offs, area, area_size);
- offset_heap_ptr(&p->seq_trace_token, 1, offs, area, area_size);
+ offset_heap_ptr(&p->fvalue, 1, heap_offs, area, area_sz);
+ offset_heap_ptr(&p->ftrace, 1, heap_offs, area, area_sz);
+ offset_heap_ptr(&p->seq_trace_token, 1, heap_offs, area, area_sz);
#ifdef USE_VM_PROBES
- offset_heap_ptr(&p->dt_utag, 1, offs, area, area_size);
+ offset_heap_ptr(&p->dt_utag, 1, heap_offs, area, area_sz);
#endif
- offset_heap_ptr(&p->group_leader, 1, offs, area, area_size);
- if (p->sig_qs.recv_mrk_blk)
- offset_heap_ptr(&p->sig_qs.recv_mrk_blk->ref[0],
- ERTS_RECV_MARKER_BLOCK_SIZE, offs, area, area_size);
- offset_mqueue(p, offs, area, area_size);
- offset_heap_ptr(p->stop, (STACK_START(p) - p->stop), offs, area, area_size);
- offset_nstack(p, offs, area, area_size);
+ offset_heap_ptr(&p->group_leader, 1, heap_offs, area, area_sz);
+ if (p->sig_qs.recv_mrk_blk) {
+ offset_heap_ptr(&p->sig_qs.recv_mrk_blk->ref[0],
+ ERTS_RECV_MARKER_BLOCK_SIZE, heap_offs,
+ area, area_sz);
+ }
+ offset_mqueue(p, heap_offs, area, area_sz);
+ offset_stack(p->stop, (STACK_START(p) - p->stop), heap_offs, stack_offs,
+ area, area_sz);
if (nobj > 0) {
- offset_heap_ptr(objv, nobj, offs, area, area_size);
+ offset_heap_ptr(objv, nobj, heap_offs, area, area_sz);
+ }
+ offset_off_heap(p, heap_offs, area, area_sz);
+ if (erts_setup_nfunc_rootset(p, &v, &sz)) {
+ offset_heap_ptr(v, sz, heap_offs, area, area_sz);
}
- offset_off_heap(p, offs, area, area_size);
- if (erts_setup_nfunc_rootset(p, &v, &sz))
- offset_heap_ptr(v, sz, offs, area, area_size);
}
static void
-offset_rootset(Process *p, Sint offs, char* area, Uint area_size,
- Eterm* objv, int nobj)
+offset_rootset(Process *p, Sint heap_offs, Sint stack_offs,
+ char* area, Uint area_sz, Eterm* objv, int nobj)
{
- offset_one_rootset(p, offs, area, area_size, objv, nobj);
+ offset_one_rootset(p, heap_offs, stack_offs, area, area_sz, objv, nobj);
}
static void
@@ -3597,6 +3771,49 @@ erts_max_heap_size(Eterm arg, Uint *max_heap_size, Uint *max_heap_flags)
return 1;
}
+#ifdef DEBUG
+void erts_validate_stack(Process *p, Eterm *frame_ptr, Eterm *stack_top) {
+ Eterm *stack_bottom = HEAP_END(p);
+ Eterm *next_fp = frame_ptr;
+ Eterm *scanner = stack_top;
+
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ return;
+ }
+
+ /* We must have a frame pointer or an empty stack, but not both. */
+ ASSERT((next_fp != NULL) ^ (stack_top == stack_bottom));
+
+ while (next_fp) {
+ ASSERT(next_fp >= stack_top && next_fp <= stack_bottom);
+
+ /* We may not skip any frames. */
+ while (scanner < next_fp) {
+ ASSERT(is_not_CP(scanner[0]));
+ scanner++;
+ }
+
+ /* {Next frame, Return address} or vice versa */
+ ASSERT(is_CP(scanner[0]) && is_CP(scanner[1]));
+ next_fp = (Eterm*)cp_val(scanner[0]);
+
+ /* Call tracing may store raw pointers on the stack. This is explicitly
+ * handled in all routines that deal with the stack. */
+ if (BeamIsReturnTrace((ErtsCodePtr)scanner[1])) {
+ /* Skip MFA and tracer. */
+ ASSERT_MFA((ErtsCodeMFA*)cp_val(scanner[2]));
+ ASSERT(IS_TRACER_VALID(scanner[3]));
+ scanner += 2;
+ } else if (BeamIsReturnTimeTrace((ErtsCodePtr)scanner[1])) {
+ /* Skip prev_info. */
+ scanner += 1;
+ }
+
+ scanner += CP_SIZE;
+ }
+}
+#endif
+
#if defined(DEBUG) || defined(ERTS_OFFHEAP_DEBUG)
int
@@ -3668,11 +3885,13 @@ erts_check_off_heap2(Process *p, Eterm *htop)
{
Eterm *oheap = (Eterm *) OLD_HEAP(p);
Eterm *ohtop = (Eterm *) OLD_HTOP(p);
- int old;
+ enum { NEW_PART, OLD_PART, WRT_BIN_PART} part;
union erl_off_heap_ptr u;
- old = 0;
- for (u.hdr = MSO(p).first; u.hdr; u.hdr = u.hdr->next) {
+ part = NEW_PART;
+ u.hdr = MSO(p).first;
+repeat:
+ for (; u.hdr; u.hdr = u.hdr->next) {
erts_aint_t refc;
switch (thing_subtag(u.hdr->thing_word)) {
case REFC_BINARY_SUBTAG:
@@ -3698,19 +3917,26 @@ erts_check_off_heap2(Process *p, Eterm *htop)
ERTS_CHK_OFFHEAP_ASSERT(!(u.hdr->thing_word & ERTS_OFFHEAP_VISITED_BIT));
u.hdr->thing_word |= ERTS_OFFHEAP_VISITED_BIT;
#endif
- if (old) {
- ERTS_CHK_OFFHEAP_ASSERT(oheap <= u.ep && u.ep < ohtop);
- }
- else if (oheap <= u.ep && u.ep < ohtop)
- old = 1;
- else {
- ERTS_CHK_OFFHEAP_ASSERT(erts_dbg_within_proc(u.ep, p, htop));
- }
+ if (part == OLD_PART)
+ ERTS_CHK_OFFHEAP_ASSERT(oheap <= u.ep && u.ep < ohtop);
+ else if (part == NEW_PART && oheap <= u.ep && u.ep < ohtop)
+ part = OLD_PART;
+ else
+ ERTS_CHK_OFFHEAP_ASSERT(erts_dbg_within_proc(u.ep, p, htop));
}
+ if (part != WRT_BIN_PART) {
+ part = WRT_BIN_PART;
+ u.hdr = p->wrt_bins;
+ goto repeat;
+ }
+
+
#ifdef ERTS_OFFHEAP_DEBUG_CHK_CIRCULAR_LIST
for (u.hdr = MSO(p).first; u.hdr; u.hdr = u.hdr->next)
u.hdr->thing_word &= ~ERTS_OFFHEAP_VISITED_BIT;
+ for (u.hdr = p->wrt_bins; u.hdr; u.hdr = u.hdr->next)
+ u.hdr->thing_word &= ~ERTS_OFFHEAP_VISITED_BIT;
#endif
}
diff --git a/erts/emulator/beam/erl_gc.h b/erts/emulator/beam/erl_gc.h
index ef0f8e9978..7f86573a41 100644
--- a/erts/emulator/beam/erl_gc.h
+++ b/erts/emulator/beam/erl_gc.h
@@ -189,4 +189,10 @@ void erts_copy_one_frag(Eterm** hpp, ErlOffHeap* off_heap,
int erts_dbg_within_proc(Eterm *ptr, Process *p, Eterm* real_htop);
#endif
+#ifdef DEBUG
+/* Validates the frame chain, ensuring that it always points within the stack
+ * and that no frames are skipped. */
+void erts_validate_stack(Process *p, Eterm *frame_ptr, Eterm *stack_top);
+#endif
+
#endif /* __ERL_GC_H__ */
diff --git a/erts/emulator/beam/erl_lock_check.c b/erts/emulator/beam/erl_lock_check.c
index dd8a981353..3b71e1ccb8 100644
--- a/erts/emulator/beam/erl_lock_check.c
+++ b/erts/emulator/beam/erl_lock_check.c
@@ -168,7 +168,8 @@ static erts_lc_lock_order_t erts_lock_order[] = {
{ "hard_dbg_mseg", NULL },
{ "perf", NULL },
{ "jit_debug_descriptor", NULL },
- { "erts_mmap", NULL }
+ { "erts_mmap", NULL },
+ { "proc_sig_queue_buffer", "address" }
};
#define ERTS_LOCK_ORDER_SIZE \
diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c
index a6eecfabdc..1c61d4ca74 100644
--- a/erts/emulator/beam/erl_message.c
+++ b/erts/emulator/beam/erl_message.c
@@ -161,11 +161,11 @@ erts_resize_message_buffer(ErlHeapFragment *bp, Uint size,
void
-erts_cleanup_offheap(ErlOffHeap *offheap)
+erts_cleanup_offheap_list(struct erl_off_heap_header* first)
{
union erl_off_heap_ptr u;
- for (u.hdr = offheap->first; u.hdr; u.hdr = u.hdr->next) {
+ for (u.hdr = first; u.hdr; u.hdr = u.hdr->next) {
switch (thing_subtag(u.hdr->thing_word)) {
case REFC_BINARY_SUBTAG:
erts_bin_release(u.pb->val);
@@ -188,6 +188,13 @@ erts_cleanup_offheap(ErlOffHeap *offheap)
}
void
+erts_cleanup_offheap(ErlOffHeap *offheap)
+{
+ erts_cleanup_offheap_list(offheap->first);
+}
+
+
+void
free_message_buffer(ErlHeapFragment* bp)
{
ASSERT(bp != NULL);
@@ -343,7 +350,8 @@ erts_queue_dist_message(Process *rcvr,
/* Add messages last in message queue */
static void
-queue_messages(Process* receiver,
+queue_messages(Process* sender, /* is NULL if the sender is not a local process */
+ Process* receiver,
ErtsProcLocks receiver_locks,
ErtsMessage* first,
ErtsMessage** last,
@@ -367,8 +375,17 @@ queue_messages(Process* receiver,
ERTS_LC_ASSERT((erts_proc_lc_my_proc_locks(receiver) & ERTS_PROC_LOCK_MSGQ)
== (receiver_locks & ERTS_PROC_LOCK_MSGQ));
+ /*
+ * Try to enqueue to an outer message queue buffer instead of
+ * directly to the outer message queue
+ */
+ if (erts_proc_sig_queue_try_enqueue_to_buffer(sender, receiver, receiver_locks,
+ first, last, NULL, len, 0)) {
+ return;
+ }
+
if (!(receiver_locks & ERTS_PROC_LOCK_MSGQ)) {
- erts_proc_lock(receiver, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(receiver);
locked_msgq = 1;
}
@@ -390,8 +407,23 @@ queue_messages(Process* receiver,
return;
}
+ /*
+ * Install buffers for the outer message if the heuristic
+ * indicates that this is beneficial. It is best to do this as
+ * soon as possible to avoid as much contention as possible.
+ */
+ erts_proc_sig_queue_maybe_install_buffers(receiver, state);
+
if (last == &first->next) {
ASSERT(len == 1);
+ if (state & ERTS_PSFLG_OFF_HEAP_MSGQ) {
+ /*
+ * Flush outer signal queue buffers, if such buffers are
+ * installed, to ensure that messages from the same
+ * process cannot be reordered.
+ */
+ erts_proc_sig_queue_flush_buffers(receiver);
+ }
LINK_MESSAGE(receiver, first);
}
else {
@@ -446,7 +478,7 @@ erts_queue_message(Process* receiver, ErtsProcLocks receiver_locks,
ERL_MESSAGE_TERM(mp) = msg;
ERL_MESSAGE_FROM(mp) = from;
ERL_MESSAGE_TOKEN(mp) = am_undefined;
- queue_messages(receiver, receiver_locks, mp, &mp->next, 1);
+ queue_messages(NULL, receiver, receiver_locks, mp, &mp->next, 1);
}
/**
@@ -463,7 +495,7 @@ erts_queue_message_token(Process* receiver, ErtsProcLocks receiver_locks,
ERL_MESSAGE_TERM(mp) = msg;
ERL_MESSAGE_FROM(mp) = from;
ERL_MESSAGE_TOKEN(mp) = token;
- queue_messages(receiver, receiver_locks, mp, &mp->next, 1);
+ queue_messages(NULL, receiver, receiver_locks, mp, &mp->next, 1);
}
@@ -484,7 +516,7 @@ erts_queue_proc_message(Process* sender,
{
ERL_MESSAGE_TERM(mp) = msg;
ERL_MESSAGE_FROM(mp) = sender->common.id;
- queue_messages(receiver, receiver_locks,
+ queue_messages(sender, receiver, receiver_locks,
prepend_pending_sig_maybe(sender, receiver, mp),
&mp->next, 1);
}
@@ -495,7 +527,7 @@ erts_queue_proc_messages(Process* sender,
Process* receiver, ErtsProcLocks receiver_locks,
ErtsMessage* first, ErtsMessage** last, Uint len)
{
- queue_messages(receiver, receiver_locks,
+ queue_messages(sender, receiver, receiver_locks,
prepend_pending_sig_maybe(sender, receiver, first),
last, len);
}
@@ -988,8 +1020,19 @@ erts_change_message_queue_management(Process *c_p, Eterm new_state)
case am_off_heap:
break;
case am_on_heap:
- c_p->sig_qs.flags |= FS_ON_HEAP_MSGQ;
+ erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ /*
+ * The flags are changed while holding the
+ * ERTS_PROC_LOCK_MSGQ lock so that it is garanteed that
+ * there are no messages in buffers if (c_p->sig_qs.flags
+ * & FS_ON_HEAP_MSGQ) and the ERTS_PROC_LOCK_MSGQ is held.
+ */
+ erts_proc_sig_queue_flush_and_deinstall_buffers(c_p);
+
+ c_p->sig_qs.flags |= FS_ON_HEAP_MSGQ;
c_p->sig_qs.flags &= ~FS_OFF_HEAP_MSGQ;
+
+ erts_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
/*
* We are not allowed to clear ERTS_PSFLG_OFF_HEAP_MSGQ
* if a off heap change is ongoing. It will be adjusted
diff --git a/erts/emulator/beam/erl_message.h b/erts/emulator/beam/erl_message.h
index 89017a3998..ab44cbf69d 100644
--- a/erts/emulator/beam/erl_message.h
+++ b/erts/emulator/beam/erl_message.h
@@ -33,6 +33,28 @@
#define ERTS_MSG_COPY_WORDS_PER_REDUCTION 64
#endif
+/* The number of buffers have to be 64 or less because we currenlty
+ use a single word to implement a bitset with information about
+ non-empty buffers */
+#ifdef DEBUG
+#define ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS 64
+#define ERTS_PROC_SIG_INQ_BUFFERED_CONTENTION_INSTALL_LIMIT 250
+#define ERTS_PROC_SIG_INQ_BUFFERED_ALWAYS_TURN_ON 1
+#define ERTS_PROC_SIG_INQ_BUFFERED_MIN_FLUSH_ALL_OPS_BEFORE_CHANGE 2
+#define ERTS_PROC_SIG_INQ_BUFFERED_MIN_NO_ENQUEUES_TO_KEEP \
+ (ERTS_PROC_SIG_INQ_BUFFERED_MIN_FLUSH_ALL_OPS_BEFORE_CHANGE + \
+ ERTS_PROC_SIG_INQ_BUFFERED_MIN_FLUSH_ALL_OPS_BEFORE_CHANGE / 2)
+#else
+#define ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS 64
+#define ERTS_PROC_SIG_INQ_BUFFERED_CONTENTION_INSTALL_LIMIT 50
+#define ERTS_PROC_SIG_INQ_BUFFERED_ALWAYS_TURN_ON 0
+#define ERTS_PROC_SIG_INQ_BUFFERED_MIN_FLUSH_ALL_OPS_BEFORE_CHANGE 8192
+/* At least 1.5 enqueues per flush all op */
+#define ERTS_PROC_SIG_INQ_BUFFERED_MIN_NO_ENQUEUES_TO_KEEP \
+ (ERTS_PROC_SIG_INQ_BUFFERED_MIN_FLUSH_ALL_OPS_BEFORE_CHANGE + \
+ ERTS_PROC_SIG_INQ_BUFFERED_MIN_FLUSH_ALL_OPS_BEFORE_CHANGE / 2)
+#endif
+
struct proc_bin;
struct external_thing_;
@@ -340,6 +362,46 @@ typedef struct {
#endif
} ErtsSignalInQueue;
+typedef union {
+ struct ___ErtsSignalInQueueBufferFields {
+ erts_mtx_t lock;
+ /*
+ * Boolean value indicateing if the buffer is alive. An
+ * enqueue attempt to a dead buffer has to be canceled
+ */
+ int alive;
+ /*
+ * The number of enqueues that has been performed to this
+ * buffer. This value is used to decide if we should adapt
+ * back to an unbuffered state
+ */
+ Uint nr_of_enqueues;
+ ErtsSignalInQueue queue;
+ } b;
+ byte align__[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(struct ___ErtsSignalInQueueBufferFields))];
+} ErtsSignalInQueueBuffer;
+
+#if ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS > 64
+#error The data structure holding information about which slots that are non-empty (the nonempty_slots field in the struct below) needs to be changed (it currently only supports up to 64 slots)
+#endif
+
+typedef struct {
+ ErtsSignalInQueueBuffer slots[ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS];
+ ErtsThrPrgrLaterOp free_item;
+ erts_atomic64_t nonempty_slots;
+ erts_atomic64_t nonmsg_slots;
+ /*
+ * dirty_refc is incremented by dirty schedulers that access the
+ * buffer array to prevent deallocation while they are accessing
+ * the buffer array. This is needed since dirty schedulers are not
+ * part of the thread progress system.
+ */
+ erts_atomic64_t dirty_refc;
+ Uint nr_of_rounds;
+ Uint nr_of_enqueues;
+ int alive;
+} ErtsSignalInQueueBufferArray;
+
typedef struct erl_trace_message_queue__ {
struct erl_trace_message_queue__ *next; /* point to the next receiver */
Eterm receiver;
@@ -423,6 +485,7 @@ void erts_link_mbuf_to_proc(Process *proc, ErlHeapFragment *bp);
Uint erts_msg_attached_data_size_aux(ErtsMessage *msg);
+void erts_cleanup_offheap_list(struct erl_off_heap_header* first);
void erts_cleanup_offheap(ErlOffHeap *offheap);
void erts_save_message_in_proc(Process *p, ErtsMessage *msg);
Sint erts_move_messages_off_heap(Process *c_p);
diff --git a/erts/emulator/beam/erl_nfunc_sched.h b/erts/emulator/beam/erl_nfunc_sched.h
index ba4933a5df..cbe37840e3 100644
--- a/erts/emulator/beam/erl_nfunc_sched.h
+++ b/erts/emulator/beam/erl_nfunc_sched.h
@@ -40,8 +40,12 @@ typedef struct {
struct {
ErtsCodeInfo info;
#ifdef BEAMASM
- // Code used by tracing/nif load
+ /* Code used by tracing/nif load. */
+# ifdef __aarch64__
+ BeamInstr trace[2];
+# else
BeamInstr trace[1];
+# endif
#endif
BeamInstr call_op; /* call_bif || call_nif */
BeamInstr dfunc;
@@ -244,6 +248,8 @@ erts_flush_dirty_shadow_proc(Process *sproc)
}
c_p->off_heap.overhead += sproc->off_heap.overhead;
+
+ ASSERT(sproc->wrt_bins == NULL);
}
ERTS_GLB_INLINE void
@@ -268,6 +274,7 @@ erts_cache_dirty_shadow_proc(Process *sproc)
sproc->mbuf = NULL;
sproc->mbuf_sz = 0;
ERTS_INIT_OFF_HEAP(&sproc->off_heap);
+ sproc->wrt_bins = NULL;
}
ERTS_GLB_INLINE Process *
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index 79121f2651..2b73537b2e 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -58,6 +58,7 @@
#include "erl_utils.h"
#include "erl_io_queue.h"
#include "erl_proc_sig_queue.h"
+#include "beam_common.h"
#undef ERTS_WANT_NFUNC_SCHED_INTERNALS__
#define ERTS_WANT_NFUNC_SCHED_INTERNALS__
#include "erl_nfunc_sched.h"
@@ -335,6 +336,7 @@ schedule(ErlNifEnv* env, NativeFunPtr direct_fp, NativeFunPtr indirect_fp,
{
ErtsNativeFunc *ep;
Process *c_p, *dirty_shadow_proc;
+ ErtsCodePtr caller;
execution_state(env, &c_p, NULL);
ASSERT(c_p);
@@ -346,9 +348,11 @@ schedule(ErlNifEnv* env, NativeFunPtr direct_fp, NativeFunPtr indirect_fp,
ERTS_LC_ASSERT(ERTS_PROC_LOCK_MAIN & erts_proc_lc_my_proc_locks(c_p));
+ erts_inspect_frame(c_p->stop, &caller);
+
ep = erts_nfunc_schedule(c_p, dirty_shadow_proc,
c_p->current,
- cp_val(c_p->stop[0]),
+ caller,
#ifdef BEAMASM
op_call_nif_WWW,
#else
@@ -552,22 +556,15 @@ struct enif_msg_environment_t
Process phony_proc;
};
-#if S_REDZONE == 0
-/*
- * Arrays of size zero are not allowed (although some compilers do
- * allow it). Be sure to set the array size to 1 if there is no
- * redzone to ensure that the code can be compiled with any compiler.
- */
-static Eterm phony_heap[1];
-#else
-static Eterm phony_heap[S_REDZONE];
-#endif
+static Eterm phony_heap[32];
static ERTS_INLINE void
setup_nif_env(struct enif_msg_environment_t* msg_env,
struct erl_module_nif* mod,
Process* tracee)
{
+ ASSERT(sizeof(phony_heap) > (S_REDZONE * sizeof(Eterm)));
+
msg_env->env.hp = &phony_heap[0];
msg_env->env.hp_end = &phony_heap[0];
msg_env->env.heap_frag = NULL;
@@ -646,6 +643,7 @@ void enif_clear_env(ErlNifEnv* env)
menv->env.hp = menv->env.hp_end = HEAP_TOP(p);
ASSERT(!is_offheap(&MSO(p)));
+ ASSERT(!p->wrt_bins);
}
#ifdef DEBUG
@@ -4320,7 +4318,7 @@ typedef struct {
/* data */
#ifdef BEAMASM
BeamInstr prologue[BEAM_ASM_FUNC_PROLOGUE_SIZE / sizeof(UWord)];
- BeamInstr call_nif[10];
+ BeamInstr call_nif[7];
#else
BeamInstr call_nif[4];
#endif
@@ -4728,13 +4726,16 @@ static void patch_call_nif_early(ErlNifEntry* entry,
{
ErlNifFunc* f = &entry->funcs[i];
const ErtsCodeInfo * const * ci_pp;
- ErtsCodeInfo* ci;
+ const ErtsCodeInfo *ci_exec;
+ ErtsCodeInfo *ci_rw;
Eterm f_atom;
erts_atom_get(f->name, sys_strlen(f->name), &f_atom, ERTS_ATOM_ENC_LATIN1);
ci_pp = get_func_pp(this_mi->code_hdr, f_atom, f->arity);
- ci = erts_writable_code_ptr(this_mi, *ci_pp);
+ ci_exec = *ci_pp;
+
+ ci_rw = erts_writable_code_ptr(this_mi, ci_exec);
#ifndef BEAMASM
{
@@ -4742,14 +4743,14 @@ static void patch_call_nif_early(ErlNifEntry* entry,
BeamInstr volatile *code_ptr;
/* `ci` is writable. */
- code_ptr = (BeamInstr*)erts_codeinfo_to_code(ci);
+ code_ptr = (BeamInstr*)erts_codeinfo_to_code(ci_rw);
- if (ci->u.gen_bp) {
+ if (ci_rw->u.gen_bp) {
/*
* Function traced, patch the original instruction word
* Code write permission protects against racing breakpoint writes.
*/
- GenericBp* g = ci->u.gen_bp;
+ GenericBp* g = ci_rw->u.gen_bp;
g->orig_instr = BeamSetCodeAddr(g->orig_instr, call_nif_early);
if (BeamIsOpCode(code_ptr[0], op_i_generic_breakpoint))
continue;
@@ -4761,7 +4762,7 @@ static void patch_call_nif_early(ErlNifEntry* entry,
}
#else
/* See beam_asm.h for details on how the nif load trampoline works */
- erts_asm_bp_set_flag(ci, ERTS_ASM_BP_FLAG_CALL_NIF_EARLY);
+ erts_asm_bp_set_flag(ci_rw, ci_exec, ERTS_ASM_BP_FLAG_CALL_NIF_EARLY);
#endif
}
}
@@ -4792,15 +4793,25 @@ static void load_nif_1st_finisher(void* vlib)
if (fin) {
for (i=0; i < lib->entry.num_of_funcs; i++) {
- ErtsCodeInfo *ci = fin->beam_stubv[i].code_info_rw;
+ const ErtsCodeInfo *ci_exec = fin->beam_stubv[i].code_info_exec;
+ ErtsCodeInfo *ci_rw = fin->beam_stubv[i].code_info_rw;
#ifdef BEAMASM
- char *code_ptr = (char*)erts_codeinfo_to_code(ci);
- sys_memcpy(&code_ptr[BEAM_ASM_FUNC_PROLOGUE_SIZE],
+ const char *code_exec = (char*)erts_codeinfo_to_code(ci_exec);
+ char *code_rw = (char*)erts_codeinfo_to_code(ci_rw);
+
+ size_t cpy_sz = sizeof(fin->beam_stubv[0].code.call_nif);
+
+ sys_memcpy(&code_rw[BEAM_ASM_FUNC_PROLOGUE_SIZE],
fin->beam_stubv[i].code.call_nif,
- sizeof(fin->beam_stubv[0].code.call_nif));
+ cpy_sz);
+
+ beamasm_flush_icache(&code_exec[BEAM_ASM_FUNC_PROLOGUE_SIZE],
+ cpy_sz);
#else
- BeamInstr *code_ptr = (BeamInstr*)erts_codeinfo_to_code(ci);
+ BeamInstr *code_ptr = (BeamInstr*)erts_codeinfo_to_code(ci_rw);
+
+ (void)ci_exec;
/* called function */
code_ptr[1] = fin->beam_stubv[i].code.call_nif[1];
@@ -4849,29 +4860,36 @@ static void load_nif_2nd_finisher(void* vlib)
fin = lib->finish;
if (fin) {
for (i=0; i < lib->entry.num_of_funcs; i++) {
- ErtsCodeInfo *ci = fin->beam_stubv[i].code_info_rw;
+ const ErtsCodeInfo *ci_exec = fin->beam_stubv[i].code_info_exec;
+ ErtsCodeInfo *ci_rw = fin->beam_stubv[i].code_info_rw;
#ifndef BEAMASM
BeamInstr volatile *code_ptr;
- code_ptr = (BeamInstr*)erts_codeinfo_to_code(ci);
+ ASSERT(ci_exec == ci_rw);
+ (void)ci_exec;
- if (ci->u.gen_bp) {
+ code_ptr = (BeamInstr*)erts_codeinfo_to_code(ci_rw);
+
+ if (ci_rw->u.gen_bp) {
/*
* Function traced, patch the original instruction word
*/
- GenericBp* g = ci->u.gen_bp;
+ GenericBp* g = ci_rw->u.gen_bp;
ASSERT(BeamIsOpCode(g->orig_instr, op_call_nif_early));
g->orig_instr = BeamOpCodeAddr(op_call_nif_WWW);
- if (BeamIsOpCode(code_ptr[0], op_i_generic_breakpoint))
+
+ if (BeamIsOpCode(code_ptr[0], op_i_generic_breakpoint)) {
continue;
+ }
}
ASSERT(BeamIsOpCode(code_ptr[0], op_call_nif_early));
code_ptr[0] = BeamOpCodeAddr(op_call_nif_WWW);
#else
/* See beam_asm.h for details on how the nif load trampoline works */
- erts_asm_bp_unset_flag(ci, ERTS_ASM_BP_FLAG_CALL_NIF_EARLY);
+ erts_asm_bp_unset_flag(ci_rw, ci_exec,
+ ERTS_ASM_BP_FLAG_CALL_NIF_EARLY);
#endif
}
}
@@ -5025,6 +5043,9 @@ Eterm erts_nif_call_function(Process *p, Process *tracee,
ErlHeapFragment *orig_hf = MBUF(p);
ErlOffHeap orig_oh = MSO(p);
Eterm *orig_htop = HEAP_TOP(p);
+#ifdef DEBUG
+ struct erl_off_heap_header* orig_wrt_bins = p->wrt_bins;
+#endif
ASSERT(is_internal_pid(p->common.id));
MBUF(p) = NULL;
clear_offheap(&MSO(p));
@@ -5050,6 +5071,7 @@ Eterm erts_nif_call_function(Process *p, Process *tracee,
MBUF(p) = orig_hf;
MSO(p) = orig_oh;
HEAP_TOP(p) = orig_htop;
+ ASSERT(p->wrt_bins == orig_wrt_bins);
} else {
/* Nif call was done without a process context,
so we create a phony one. */
diff --git a/erts/emulator/beam/erl_proc_sig_queue.c b/erts/emulator/beam/erl_proc_sig_queue.c
index be4ee9772d..7d1bde0019 100644
--- a/erts/emulator/beam/erl_proc_sig_queue.c
+++ b/erts/emulator/beam/erl_proc_sig_queue.c
@@ -253,6 +253,12 @@ static void
send_cla_reply(Process *c_p, ErtsMessage *sig, Eterm to,
Eterm req_id, Eterm result);
+static Uint proc_sig_queue_flush_buffer(Process* proc,
+ Uint buffer_index,
+ ErtsSignalInQueueBufferArray* buffers);
+static void proc_sig_queue_lock_buffer(ErtsSignalInQueueBuffer* slot);
+static void proc_sig_queue_unlock_buffer(ErtsSignalInQueueBuffer* slot);
+
#ifdef ERTS_PROC_SIG_HARD_DEBUG
#define ERTS_PROC_SIG_HDBG_PRIV_CHKQ(P, T, NMN) \
do { \
@@ -526,46 +532,105 @@ static int dbg_count_nmsigs(ErtsMessage *first)
}
#endif
+#ifdef ERTS_PROC_SIG_HARD_DEBUG_SIGQ_BUFFERS
+static int dbg_count_all(ErtsMessage *first)
+{
+ ErtsMessage *sig;
+ int cnt = 0;
+
+ for (sig = first; sig; sig = sig->next) {
+ ++cnt;
+ }
+ return cnt;
+}
+
+static int dbg_check_non_msg(ErtsSignalInQueue* q)
+{
+ ErtsMessage** m = q->nmsigs.next;
+ int cnt = 0;
+ ErtsMessage** prev_m = NULL;
+ while (m != NULL) {
+ ERTS_ASSERT(ERTS_SIG_IS_NON_MSG(*m));
+ cnt++;
+ prev_m = m;
+ m = ((ErtsSignal *) (*m))->common.specific.next;
+ }
+ if (cnt > 0) {
+ ERTS_ASSERT(prev_m == q->nmsigs.last);
+ }
+ return cnt;
+}
+#endif /* ERTS_PROC_SIG_HARD_DEBUG_SIGQ_BUFFERS */
+
static ERTS_INLINE erts_aint32_t
enqueue_signals(Process *rp, ErtsMessage *first,
ErtsMessage **last, ErtsMessage **last_next,
Uint num_msgs,
- erts_aint32_t in_state)
+ erts_aint32_t state,
+ ErtsSignalInQueue* dest_queue)
{
- erts_aint32_t state = in_state;
- ErtsMessage **this = rp->sig_inq.last;
+ ErtsMessage **this;
+ int is_to_buffer = dest_queue != &rp->sig_inq;
+ int flush_buffers = (!is_to_buffer) && (state & ERTS_PSFLG_OFF_HEAP_MSGQ);
- ERTS_HDBG_CHECK_SIGNAL_IN_QUEUE(rp);
+ if (flush_buffers) {
+ erts_proc_sig_queue_flush_buffers(rp);
+#ifdef DEBUG
+ /*
+ * The following read is necessary to prevent
+ * ASSERT(is_to_buffer || state & ERTS_PSFLG_SIG_IN_Q) assert
+ * below from failing.
+ */
+ state = erts_atomic32_read_nob(&rp->state);
+#endif
+ }
+
+ this = dest_queue->last;
+
+ if ( ! is_to_buffer ){
+ ERTS_HDBG_CHECK_SIGNAL_IN_QUEUE(rp);
+ }
ASSERT(!*this);
*this = first;
- rp->sig_inq.last = last;
+ dest_queue->last = last;
- if (!rp->sig_inq.nmsigs.next) {
- ASSERT(!rp->sig_inq.nmsigs.last);
+ if (!dest_queue->nmsigs.next) {
+ ASSERT(!dest_queue->nmsigs.last);
if (ERTS_SIG_IS_NON_MSG(first)) {
- rp->sig_inq.nmsigs.next = this;
+ dest_queue->nmsigs.next = this;
}
else if (last_next) {
ASSERT(first->next && ERTS_SIG_IS_NON_MSG(first->next));
- rp->sig_inq.nmsigs.next = &first->next;
+ dest_queue->nmsigs.next = &first->next;
}
else
goto no_nmsig;
+ if (is_to_buffer) {
+ /*
+ * Check state first to avoid write overhead when it is
+ * unecessary.
+ */
+ if ( ! (state & ERTS_PSFLG_SIG_IN_Q)) {
+ state = erts_atomic32_read_bor_relb(&rp->state,
+ ERTS_PSFLG_SIG_IN_Q);
+ }
+ } else {
+ state = erts_atomic32_read_bor_nob(&rp->state,
+ ERTS_PSFLG_SIG_IN_Q);
+ }
- state = erts_atomic32_read_bor_nob(&rp->state,
- ERTS_PSFLG_SIG_IN_Q);
no_nmsig:
- ASSERT(!(state & ERTS_PSFLG_SIG_IN_Q));
+ ;
}
else {
ErtsSignal *sig;
- ASSERT(rp->sig_inq.nmsigs.last);
+ ASSERT(dest_queue->nmsigs.last);
- sig = (ErtsSignal *) *rp->sig_inq.nmsigs.last;
+ sig = (ErtsSignal *) *dest_queue->nmsigs.last;
ASSERT(sig && !sig->common.specific.next);
- ASSERT(state & ERTS_PSFLG_SIG_IN_Q);
+ ASSERT(is_to_buffer || state & ERTS_PSFLG_SIG_IN_Q);
if (ERTS_SIG_IS_NON_MSG(first)) {
sig->common.specific.next = this;
}
@@ -577,16 +642,16 @@ enqueue_signals(Process *rp, ErtsMessage *first,
if (last_next) {
ASSERT(dbg_count_nmsigs(first) >= 2);
- rp->sig_inq.nmsigs.last = last_next;
+ dest_queue->nmsigs.last = last_next;
}
else if (ERTS_SIG_IS_NON_MSG(first)) {
ASSERT(dbg_count_nmsigs(first) == 1);
- rp->sig_inq.nmsigs.last = this;
+ dest_queue->nmsigs.last = this;
}
else
ASSERT(dbg_count_nmsigs(first) == 0);
- rp->sig_inq.len += num_msgs;
+ dest_queue->len += num_msgs;
ERTS_HDBG_CHECK_SIGNAL_IN_QUEUE(rp);
@@ -598,7 +663,7 @@ erts_aint32_t erts_enqueue_signals(Process *rp, ErtsMessage *first,
Uint num_msgs,
erts_aint32_t in_state)
{
- return enqueue_signals(rp, first, last, last_next, num_msgs, in_state);
+ return enqueue_signals(rp, first, last, last_next, num_msgs, in_state, &rp->sig_inq);
}
void
@@ -731,14 +796,27 @@ first_last_done:
last->next = NULL;
- erts_proc_lock(rp, ERTS_PROC_LOCK_MSGQ);
+ if (op != ERTS_SIG_Q_OP_PROCESS_INFO &&
+ erts_proc_sig_queue_try_enqueue_to_buffer(c_p, rp, 0, first,
+ &last->next, last_next,
+ 0, 1)) {
+ if (!is_normal_sched)
+ erts_proc_dec_refc(rp);
+ return 1;
+ }
+
+ erts_proc_sig_queue_lock(rp);
state = erts_atomic32_read_nob(&rp->state);
+ erts_proc_sig_queue_maybe_install_buffers(rp, state);
+
if (ERTS_PSFLG_FREE & state)
res = 0;
else {
- state = enqueue_signals(rp, first, &last->next, last_next, 0, state);
+ state = enqueue_signals(rp, first, &last->next,
+ last_next, 0, state,
+ &rp->sig_inq);
if (ERTS_UNLIKELY(op == ERTS_SIG_Q_OP_PROCESS_INFO))
check_push_msgq_len_offs_marker(rp, sig);
res = !0;
@@ -833,8 +911,6 @@ erts_proc_sig_fetch__(Process *proc)
ASSERT(proc->sig_inq.first);
if (!proc->sig_inq.nmsigs.next) {
- ASSERT(!(ERTS_PSFLG_SIG_IN_Q
- & erts_atomic32_read_nob(&proc->state)));
ASSERT(!proc->sig_inq.nmsigs.last);
if (proc->sig_qs.cont || ERTS_MSG_RECV_TRACED(proc)) {
@@ -856,13 +932,10 @@ erts_proc_sig_fetch__(Process *proc)
else
proc->sig_qs.nmsigs.next = proc->sig_inq.nmsigs.next;
- s = erts_atomic32_read_bset_nob(&proc->state,
- (ERTS_PSFLG_SIG_Q
- | ERTS_PSFLG_SIG_IN_Q),
- ERTS_PSFLG_SIG_Q);
-
- ASSERT((s & (ERTS_PSFLG_SIG_Q|ERTS_PSFLG_SIG_IN_Q))
- == ERTS_PSFLG_SIG_IN_Q); (void)s;
+ erts_atomic32_read_bset_nob(&proc->state,
+ (ERTS_PSFLG_SIG_Q
+ | ERTS_PSFLG_SIG_IN_Q),
+ ERTS_PSFLG_SIG_Q);
}
else {
ErtsSignal *sig;
@@ -4961,7 +5034,7 @@ erts_proc_sig_handle_incoming(Process *c_p, erts_aint32_t *statep,
state = erts_atomic32_read_nob(&c_p->state);
if (!local_only) {
if (ERTS_PSFLG_SIG_IN_Q & state) {
- erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(c_p);
erts_proc_sig_fetch(c_p);
erts_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
}
@@ -5797,8 +5870,6 @@ erts_proc_sig_handle_exit(Process *c_p, Sint *redsp,
ERTS_HDBG_CHECK_SIGNAL_PRIV_QUEUE(c_p, 0);
ERTS_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p) == ERTS_PROC_LOCK_MAIN);
- ASSERT(!(ERTS_PSFLG_SIG_IN_Q & erts_atomic32_read_nob(&c_p->state)));
-
limit = *redsp;
limit *= ERTS_SIG_REDS_CNT_FACTOR;
@@ -6268,7 +6339,7 @@ erts_proc_sig_receive_helper(Process *c_p,
consumed_reds += 4;
left_reds -= 4;
- erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(c_p);
erts_proc_sig_fetch(c_p);
/*
* Messages may have been moved directly to
@@ -7790,3 +7861,463 @@ erts_proc_sig_hdbg_check_in_queue(Process *p, char *what, char *file, int line)
}
#endif /* ERTS_PROC_SIG_HARD_DEBUG */
+
+void erts_proc_sig_queue_lock(Process* proc)
+{
+ if (EBUSY == erts_proc_trylock(proc, ERTS_PROC_LOCK_MSGQ)) {
+ erts_proc_lock(proc, ERTS_PROC_LOCK_MSGQ);
+ proc->sig_inq_contention_counter += 1;
+ } else if(proc->sig_inq_contention_counter > 0) {
+ proc->sig_inq_contention_counter -= 1;
+ }
+}
+
+static void proc_sig_queue_lock_buffer(ErtsSignalInQueueBuffer* slot)
+{
+ erts_mtx_lock(&slot->b.lock);
+}
+
+static void proc_sig_queue_unlock_buffer(ErtsSignalInQueueBuffer* slot)
+{
+ erts_mtx_unlock(&slot->b.lock);
+}
+
+int
+erts_proc_sig_queue_try_enqueue_to_buffer(Process* sender, /* is NULL if the sender is not a local process */
+ Process* receiver,
+ ErtsProcLocks receiver_locks,
+ ErtsMessage* first,
+ ErtsMessage** last,
+ ErtsMessage** last_next,
+ Uint len,
+ int is_nonmsg_signal_enqueue)
+{
+ int need_unget_buffers;
+ ErtsSignalInQueueBufferArray* buffers;
+ if ((receiver_locks & ERTS_PROC_LOCK_MSGQ) ||
+ NULL == (buffers = erts_proc_sig_queue_get_buffers(receiver, &need_unget_buffers))) {
+ /* We never need to unget the buffers array if we do not get it */
+ return 0;
+ } else {
+ /*
+ * Use the sender process ID to hash to an outer signal queue
+ * buffer. This guarantees that all signals from the same
+ * process are ordered in send order.
+ */
+ Uint to_hash =
+ (sender == NULL ? 0 : internal_pid_number(sender->common.id));
+ Uint slot = to_hash % ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS;
+ ErtsSignalInQueueBuffer* buffer = &buffers->slots[slot];
+ Uint64 nonempty_slots_before = 1;
+ Uint32 state;
+ /*
+ * Multiple signals or is_nonmsg_signal_enqueue means that we
+ * report that there is a non-msg signal in the queue.
+ */
+ int is_nonmsg_signal_or_multi_sig =
+ is_nonmsg_signal_enqueue || !(last == &first->next);
+
+ proc_sig_queue_lock_buffer(buffer);
+
+ if ( ! buffer->b.alive ) {
+ /*
+ * The enqueue attempt fails if the buffer is dead. This
+ * means that the buffer array has got uninstalled.
+ */
+ proc_sig_queue_unlock_buffer(buffer);
+ erts_proc_sig_queue_unget_buffers(buffers, need_unget_buffers);
+ return 0;
+ }
+ /*
+ * The buffer is alive and locked. This means that it is safe
+ * to insert signals to it
+ */
+
+ if (&buffer->b.queue.first == buffer->b.queue.last) {
+ /* The buffer is empty so we need to notify the receiver
+ * unless some other slot is nonempty (in that case
+ * another enqueuer has already (or will) notified the
+ * receiver).
+ */
+ nonempty_slots_before =
+ (Uint64)erts_atomic64_read_bor_nob(&buffers->nonempty_slots,
+ (erts_aint64_t)(((Uint64)1) << slot));
+ }
+
+ if (is_nonmsg_signal_or_multi_sig && !buffer->b.queue.nmsigs.next) {
+ /*
+ * Inserting nonmsg signal and no nonmsg signals in buffer
+ * before. This means that we have to update the nonmsg
+ * status of this buffer in the buffers structure.
+ *
+ * Acquire barrier is used since we do not want this
+ * operation to be reordered with setting the
+ * ERTS_PSFLG_SIG_IN_Q flag inside the enqueue_signals
+ * call below.
+ */
+ erts_atomic64_read_bor_mb(&buffers->nonmsg_slots,
+ (erts_aint64_t)(((Uint64)1) << slot));
+ }
+
+ state = erts_atomic32_read_nob(&receiver->state);
+
+ if (last == &first->next && !is_nonmsg_signal_or_multi_sig) {
+ /*
+ * Optimization for the common case of a single message
+ * signal.
+ */
+ ASSERT(len == 1);
+ ASSERT(ERTS_SIG_IS_MSG(first));
+ *buffer->b.queue.last = first;
+ buffer->b.queue.last = &first->next;
+ buffer->b.queue.len++;
+ } else {
+ state =
+ enqueue_signals(receiver,
+ first,
+ last,
+ last_next,
+ len,
+ state,
+ &buffer->b.queue);
+ }
+ buffer->b.nr_of_enqueues += 1;
+
+ proc_sig_queue_unlock_buffer(buffer);
+
+ /*
+ * The signal(s) are inserted into a buffer. However, we are
+ * not done because we need to notify the scheduler about that
+ * we have new signals.
+ */
+
+ if (!nonempty_slots_before) {
+
+ /*
+ * There is one situation in which we need to synchronize
+ * with the ERTS_PROC_LOCK_MSGQ lock:
+ *
+ * The buffer we inserted to was empty before we inserted
+ * to it, and no other buffer was marked as nonempty. In
+ * this case the process might hold the
+ * ERTS_PROC_LOCK_MSGQ to check if there are any more
+ * messages. If the process does not find any messages,
+ * it tells the scheduler to put the process to sleep
+ * while still holding the lock. Therefore, we wait until
+ * the ERTS_PROC_LOCK_MSGQ is released before we requests
+ * the scheduler to schedule the process (with a call to
+ * erts_proc_notify_new_message or
+ * erts_proc_notify_new_sig) so the request does not get
+ * overwritten by the sleep request.
+ *
+ */
+
+ erts_proc_lock_wait_until_released(receiver, ERTS_PROC_LOCK_MSGQ);
+ }
+
+ if (is_nonmsg_signal_or_multi_sig) {
+ if (is_nonmsg_signal_enqueue) {
+ erts_proc_notify_new_sig(receiver, state, 0);
+ } else {
+ erts_proc_notify_new_sig(receiver, state, ERTS_PSFLG_ACTIVE);
+ }
+ } else {
+ erts_proc_notify_new_message(receiver, receiver_locks);
+ }
+ erts_proc_sig_queue_unget_buffers(buffers, need_unget_buffers);
+ return 1;
+ }
+}
+
+
+static void sig_inq_concat(ErtsSignalInQueue* q1, ErtsSignalInQueue* q2)
+{
+ ErtsMessage** first_queue_last = q1->last;
+ /* Second queue should not be empty */
+ ASSERT(q2->last != &q2->first);
+ if (NULL == q1->nmsigs.next) {
+ /* There is no non-message signals in q1 but maybe in q2 */
+ if (q2->nmsigs.next != NULL) {
+ /* There is non-message signals in q2 but not in q1 */
+ if (q2->nmsigs.next == &q2->first) {
+ /* The first message in q2 is a non-message signal
+ (The next pointer to the first non-message signal
+ comes from the first queue) */
+ q1->nmsigs.next = first_queue_last;
+ } else {
+ /* Internal message in q2 is the first non-message signal */
+ q1->nmsigs.next = q2->nmsigs.next;
+ }
+ if (q2->nmsigs.next == q2->nmsigs.last) {
+ /* Only one non-message signal in q2 (q1->nmsigs.last
+ should be the same as q1->nmsigs.next which is
+ already set up correctly) */
+ q1->nmsigs.last = q1->nmsigs.next;
+ } else {
+ /* More than one non-message signals in q2 */
+ q1->nmsigs.last = q2->nmsigs.last;
+ }
+ }
+ } else if (NULL != q2->nmsigs.next) {
+ ErtsMessage** first_nmsig_in_q2;
+ /* We have non-message signals in both queues */
+ if (q2->nmsigs.next == &q2->first) {
+ /* The first signal in q2 is a non-message signal */
+ ErtsSignal *sig;
+ sig = (ErtsSignal *) *q1->nmsigs.last;
+ sig->common.specific.next = first_queue_last;
+ first_nmsig_in_q2 = first_queue_last;
+ } else {
+ /* The first signal in q2 is a message signal */
+ ErtsSignal *sig;
+ sig = (ErtsSignal *) *q1->nmsigs.last;
+ sig->common.specific.next = q2->nmsigs.next;
+ first_nmsig_in_q2 = q2->nmsigs.next;
+ }
+ if (q2->nmsigs.last == &q2->first) {
+ /* Only one non-message signal in q2 */
+ q1->nmsigs.last = first_nmsig_in_q2;
+ } else {
+ q1->nmsigs.last = q2->nmsigs.last;
+ }
+ }
+ *q1->last = q2->first;
+ q1->last = q2->last;
+ q1->len += q2->len;
+ ASSERT((!q1->nmsigs.next && !q1->nmsigs.last) || (q1->nmsigs.next && q1->nmsigs.last));
+}
+
+static Uint proc_sig_queue_flush_buffer(Process* proc,
+ Uint buffer_index,
+ ErtsSignalInQueueBufferArray* buffers)
+{
+ Uint nr_of_enqueues;
+ ErtsSignalInQueueBuffer* buf = &buffers->slots[buffer_index];
+ proc_sig_queue_lock_buffer(buf);
+ /* This function should only be called when there is at least one
+ item in the buffer */
+ ASSERT(buf->b.queue.first != NULL);
+ nr_of_enqueues = buf->b.nr_of_enqueues;
+ buf->b.nr_of_enqueues = 0;
+ ASSERT(nr_of_enqueues > 0);
+ if (buf->b.alive) {
+ sig_inq_concat(&proc->sig_inq, &buf->b.queue);
+ buf->b.queue.first = NULL;
+ buf->b.queue.last = &buf->b.queue.first;
+ buf->b.queue.len = 0;
+ buf->b.queue.nmsigs.next = NULL;
+ buf->b.queue.nmsigs.last = NULL;
+ }
+ /*
+ * The appropriate bit in &buffers->nonempty_slots needs to be
+ * cleared because a thread might have inserted something after
+ * all bits got cleared in erts_proc_sig_queue_flush_all_buffers.
+ */
+ erts_atomic64_read_band_nob(&buffers->nonempty_slots,
+ (erts_aint64_t)(~(((Uint64)1) << buffer_index)));
+ /*
+ * The nonmsg_slots flag for this slot also needs to be cleared so
+ * that the erts_proc_sig_fetch function can detect if it has
+ * reset the ERTS_PSFLG_SIG_IN_Q when it should not do that.
+ */
+ erts_atomic64_read_band_nob(&buffers->nonmsg_slots,
+ (erts_aint64_t)(~(((Uint64)1) << buffer_index)));
+ proc_sig_queue_unlock_buffer(buf);
+ return nr_of_enqueues;
+}
+
+
+ErtsSignalInQueueBufferArray*
+erts_proc_sig_queue_flush_get_buffers(Process* proc, int *need_unget_buffers)
+{
+ Uint i;
+ ErtsSignalInQueueBufferArray* buffers;
+ Uint64 nonempty_slots;
+ buffers = erts_proc_sig_queue_get_buffers(proc, need_unget_buffers);
+ if (NULL == buffers) {
+ return NULL;
+ }
+ nonempty_slots = (Uint64)erts_atomic64_xchg_nob(&buffers->nonempty_slots,
+ (erts_aint64_t)((Uint64)0));
+ if (nonempty_slots != 0) {
+ for(i = 0; i < ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS; i++) {
+ Uint64 slot_mask = (((Uint64)1) << i);
+ if (nonempty_slots & slot_mask) {
+ buffers->nr_of_enqueues +=
+ proc_sig_queue_flush_buffer(proc, i, buffers);
+ }
+ }
+ }
+ buffers->nr_of_rounds += 1;
+ if (buffers->nr_of_rounds >
+ ERTS_PROC_SIG_INQ_BUFFERED_MIN_FLUSH_ALL_OPS_BEFORE_CHANGE) {
+ /* Take decision if we should adapt back to the normal state */
+ if(buffers->nr_of_enqueues <
+ ERTS_PROC_SIG_INQ_BUFFERED_MIN_NO_ENQUEUES_TO_KEEP) {
+ erts_proc_sig_queue_flush_and_deinstall_buffers(proc);
+ } else {
+ buffers->nr_of_rounds = 0;
+ buffers->nr_of_enqueues = 0;
+ }
+ }
+ return buffers;
+}
+
+
+void
+erts_proc_sig_queue_flush_buffers(Process* proc)
+{
+ int need_undread_buffers;
+ ErtsSignalInQueueBufferArray* buffers =
+ erts_proc_sig_queue_flush_get_buffers(proc, &need_undread_buffers);
+ erts_proc_sig_queue_unget_buffers(buffers, need_undread_buffers);
+}
+
+static void do_sigq_buffer_array_refc_dec(void *buffers_p)
+{
+ ErtsSignalInQueueBufferArray* buffers = buffers_p;
+ erts_proc_sig_queue_unget_buffers(buffers, 1);
+}
+
+
+static void do_schedule_sigq_buffer_array_refc_dec(void *buffers_p)
+{
+ ErtsSignalInQueueBufferArray* buffers = buffers_p;
+ erts_schedule_thr_prgr_later_cleanup_op(do_sigq_buffer_array_refc_dec,
+ buffers,
+ &buffers->free_item,
+ sizeof(ErtsSignalInQueueBufferArray));
+}
+
+void erts_proc_sig_queue_flush_and_deinstall_buffers(Process* proc)
+{
+ Uint i;
+ ErtsSignalInQueueBufferArray* buffers;
+ int need_unget_buffers;
+ ErtsSchedulerData *esdp;
+ ERTS_LC_ASSERT(ERTS_PROC_IS_EXITING(proc) ||
+ (erts_proc_lc_my_proc_locks(proc) & ERTS_PROC_LOCK_MSGQ));
+ buffers = erts_proc_sig_queue_get_buffers(proc, &need_unget_buffers);
+ if (buffers == NULL) {
+ return;
+ }
+ if (!buffers->alive) {
+ erts_proc_sig_queue_unget_buffers(buffers, need_unget_buffers);;
+ return;
+ }
+ buffers->alive = 0;
+ proc->sig_inq_contention_counter = 0;
+ for (i = 0; i < ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS; i++) {
+ proc_sig_queue_lock_buffer(&buffers->slots[i]);
+ if (buffers->slots[i].b.queue.first != NULL) {
+ sig_inq_concat(&proc->sig_inq, &buffers->slots[i].b.queue);
+ }
+ buffers->slots[i].b.alive = 0;
+ proc_sig_queue_unlock_buffer(&buffers->slots[i]);
+ }
+ /*
+ * Nothing can be enqueued to the buffer array any more
+ */
+ erts_atomic_set_mb(&proc->sig_inq_buffers, (erts_aint_t)NULL);
+ erts_proc_sig_queue_unget_buffers(buffers, need_unget_buffers);
+ /*
+ * We should now do an additional reference count decrement to
+ * force an eventiuall free of buffer array but we need to do that
+ * after a thread progress period because an unmanaged thread
+ * might be sleeping just before it will increment the reference
+ * count.
+ */
+ esdp = erts_get_scheduler_data();
+ if (esdp != NULL && esdp->type == ERTS_SCHED_NORMAL) {
+ erts_schedule_thr_prgr_later_cleanup_op(do_sigq_buffer_array_refc_dec,
+ buffers,
+ &buffers->free_item,
+ sizeof(ErtsSignalInQueueBufferArray));
+ } else {
+ /*
+ * We cannot schedule a thread progress later cleanup
+ * operation from an unmanaged thread so we schedule
+ * that task to be run on a managed thread.
+ */
+ erts_schedule_misc_aux_work(1,
+ do_schedule_sigq_buffer_array_refc_dec,
+ buffers);
+ }
+}
+
+void erts_proc_sig_queue_maybe_install_buffers(Process* p, erts_aint32_t state)
+{
+ int i;
+ ErtsSignalInQueueBufferArray* buffers;
+ if (!(state & ERTS_PSFLG_OFF_HEAP_MSGQ) ||
+ (((ErtsSignalInQueueBufferArray*)erts_atomic_read_nob(&p->sig_inq_buffers)) != NULL) ||
+ (!ERTS_PROC_SIG_INQ_BUFFERED_ALWAYS_TURN_ON &&
+ p->sig_inq_contention_counter <= ERTS_PROC_SIG_INQ_BUFFERED_CONTENTION_INSTALL_LIMIT)) {
+ return;
+ }
+ p->sig_inq_contention_counter = 0;
+ buffers = erts_alloc(ERTS_ALC_T_SIGQ_BUFFERS,
+ sizeof(ErtsSignalInQueueBufferArray));
+ erts_atomic64_init_nob(&buffers->nonempty_slots, (erts_aint64_t)(Uint64)0);
+ erts_atomic64_init_nob(&buffers->nonmsg_slots, (erts_aint64_t)(Uint64)0);
+ erts_atomic64_init_nob(&buffers->dirty_refc, (erts_aint64_t)(Uint64)1);
+ buffers->nr_of_enqueues = 0;
+ buffers->nr_of_rounds = 0;
+ buffers->alive = 1;
+ /* Initialize slots */
+ for(i = 0; i < ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS; i++) {
+ buffers->slots[i].b.alive = 1;
+ erts_mtx_init(&buffers->slots[i].b.lock,
+ "proc_sig_queue_buffer",
+ NIL,
+ ERTS_LOCK_FLAGS_CATEGORY_PROCESS);
+ buffers->slots[i].b.queue.first = NULL;
+ buffers->slots[i].b.queue.last = &buffers->slots[i].b.queue.first;
+ buffers->slots[i].b.queue.len = 0;
+ buffers->slots[i].b.queue.nmsigs.next = NULL;
+ buffers->slots[i].b.queue.nmsigs.last = NULL;
+ buffers->slots[i].b.nr_of_enqueues = 0;
+ }
+ erts_atomic_set_relb(&p->sig_inq_buffers, (erts_aint_t)buffers);
+}
+
+ErtsSignalInQueueBufferArray*
+erts_proc_sig_queue_get_buffers(Process* p, int *need_unread)
+{
+ ErtsThrPrgrDelayHandle dhndl =
+ erts_thr_progress_unmanaged_delay();
+ ErtsSignalInQueueBufferArray* buffers =
+ (ErtsSignalInQueueBufferArray*)erts_atomic_read_acqb(&p->sig_inq_buffers);
+ *need_unread = 0;
+ if (ERTS_THR_PRGR_DHANDLE_MANAGED == dhndl) {
+ erts_thr_progress_unmanaged_continue(dhndl);
+ return buffers;
+ }
+ if (buffers == NULL) {
+ erts_thr_progress_unmanaged_continue(dhndl);
+ return NULL;
+ }
+ erts_atomic64_inc_mb(&buffers->dirty_refc);
+ erts_thr_progress_unmanaged_continue(dhndl);
+ *need_unread = 1;
+ return buffers;
+}
+
+void erts_proc_sig_queue_unget_buffers(ErtsSignalInQueueBufferArray* buffers,
+ int need_unget)
+{
+ if (!need_unget) {
+ return;
+ } else {
+ int i;
+ erts_aint64_t refc = erts_atomic64_dec_read_mb(&buffers->dirty_refc);
+ ASSERT(refc >= 0);
+ if (refc != 0) {
+ return;
+ }
+ for (i = 0; i < ERTS_PROC_SIG_INQ_BUFFERED_NR_OF_BUFFERS; i++) {
+ erts_mtx_destroy(&buffers->slots[i].b.lock);
+ }
+ erts_free(ERTS_ALC_T_SIGQ_BUFFERS, buffers);
+ }
+}
diff --git a/erts/emulator/beam/erl_proc_sig_queue.h b/erts/emulator/beam/erl_proc_sig_queue.h
index 236b20ab4d..37c5a93947 100644
--- a/erts/emulator/beam/erl_proc_sig_queue.h
+++ b/erts/emulator/beam/erl_proc_sig_queue.h
@@ -91,6 +91,9 @@
#if 0
# define ERTS_PROC_SIG_HARD_DEBUG_RECV_MARKER
#endif
+#if 0
+# define ERTS_PROC_SIG_HARD_DEBUG_SIGQ_BUFFERS
+#endif
struct erl_mesg;
struct erl_dist_external;
@@ -238,6 +241,26 @@ void erl_proc_sig_hdbg_chk_recv_marker_block(struct process *c_p);
#include "erl_process.h"
#include "erl_bif_unique.h"
+
+void erts_proc_sig_queue_maybe_install_buffers(Process* p, erts_aint32_t state);
+void erts_proc_sig_queue_flush_and_deinstall_buffers(Process* proc);
+void erts_proc_sig_queue_flush_buffers(Process* proc);
+ErtsSignalInQueueBufferArray*
+erts_proc_sig_queue_flush_get_buffers(Process* proc, int *need_unget_buffers);
+void erts_proc_sig_queue_lock(Process* proc);
+ErtsSignalInQueueBufferArray*
+erts_proc_sig_queue_get_buffers(Process* p, int *need_unread);
+void erts_proc_sig_queue_unget_buffers(ErtsSignalInQueueBufferArray* buffers,
+ int need_unget);
+int erts_proc_sig_queue_try_enqueue_to_buffer(Process* sender, /* is NULL if the sender is not a local process */
+ Process* receiver,
+ ErtsProcLocks receiver_locks,
+ ErtsMessage* first,
+ ErtsMessage** last,
+ ErtsMessage** last_next,
+ Uint len,
+ int is_signal);
+
#define ERTS_SIG_Q_OP_BITS 8
#define ERTS_SIG_Q_OP_SHIFT 0
#define ERTS_SIG_Q_OP_MASK ((1 << ERTS_SIG_Q_OP_BITS) - 1)
@@ -1545,7 +1568,8 @@ erts_proc_sig_fetch(Process *proc)
{
Sint res = 0;
ErtsSignal *sig;
-
+ ErtsSignalInQueueBufferArray* buffers;
+ int need_unget_buffers;
ERTS_LC_ASSERT(ERTS_PROC_IS_EXITING(proc)
|| ((erts_proc_lc_my_proc_locks(proc)
& (ERTS_PROC_LOCK_MAIN
@@ -1556,6 +1580,9 @@ erts_proc_sig_fetch(Process *proc)
ERTS_HDBG_CHECK_SIGNAL_IN_QUEUE(proc);
ERTS_HDBG_CHECK_SIGNAL_PRIV_QUEUE(proc, !0);
+ buffers = erts_proc_sig_queue_flush_get_buffers(proc,
+ &need_unget_buffers);
+
sig = (ErtsSignal *) proc->sig_inq.first;
if (sig) {
if (ERTS_LIKELY(sig->common.tag != ERTS_PROC_SIG_MSGQ_LEN_OFFS_MARK))
@@ -1563,7 +1590,22 @@ erts_proc_sig_fetch(Process *proc)
else
res = erts_proc_sig_fetch_msgq_len_offs__(proc);
}
-
+ if (buffers) {
+ Uint32 state = erts_atomic32_read_acqb(&proc->state);
+ if (!(ERTS_PSFLG_SIG_IN_Q & state) &&
+ erts_atomic64_read_nob(&buffers->nonmsg_slots)) {
+ /*
+ * We may have raced with a thread inserting into a buffer
+ * when reseting the flag ERTS_PSFLG_SIG_IN_Q in one of
+ * the fetch functions above so we have to make sure that
+ * it is set when there is a nonmsg signal in the buffers.
+ */
+ erts_atomic32_read_bor_nob(&proc->state,
+ ERTS_PSFLG_SIG_IN_Q |
+ ERTS_PSFLG_ACTIVE);
+ }
+ erts_proc_sig_queue_unget_buffers(buffers, need_unget_buffers);
+ }
res += proc->sig_qs.len;
ERTS_HDBG_CHECK_SIGNAL_PRIV_QUEUE(proc, !0);
@@ -1740,7 +1782,7 @@ erts_msgq_recv_marker_clear(Process *c_p, Eterm id)
ERTS_GLB_INLINE Eterm
erts_msgq_recv_marker_insert(Process *c_p)
{
- erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(c_p);
erts_proc_sig_fetch(c_p);
erts_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
@@ -1789,7 +1831,7 @@ erts_msgq_recv_marker_insert_bind(Process *c_p, Eterm id)
ERTS_PROC_SIG_RECV_MARK_CLEAR_OLD_MARK__(blkp);
#endif
- erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(c_p);
erts_proc_sig_fetch(c_p);
erts_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
@@ -1881,7 +1923,7 @@ erts_msgq_set_save_end(Process *c_p)
{
/* Set save pointer to end of message queue... */
- erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(c_p);
erts_proc_sig_fetch(c_p);
erts_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index eacbb90770..c87f135870 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -10507,7 +10507,7 @@ execute_sys_tasks(Process *c_p, erts_aint32_t *statep, int in_reds)
st_res = am_false;
if (st->arg[0] == am_false) {
- erts_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(c_p);
erts_proc_sig_fetch(c_p);
erts_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
}
@@ -12073,6 +12073,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
*/
p->off_heap.first = NULL;
p->off_heap.overhead = 0;
+ p->wrt_bins = NULL;
if (is_not_immed(group_leader))
heap_need += NC_HEAP_SIZE(group_leader);
@@ -12088,7 +12089,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
p->high_water = p->heap;
p->gen_gcs = 0;
p->hend = p->heap + sz;
- p->stop = p->hend - 1; /* Reserve place for continuation pointer */
+ p->stop = p->hend - CP_SIZE; /* Reserve place for continuation pointer. */
p->htop = p->heap;
p->heap_sz = sz;
p->abandoned_heap = NULL;
@@ -12105,8 +12106,19 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
p->current = &p->u.initial;
- p->i = beam_apply;
- p->stop[0] = make_cp(beam_normal_exit);
+ p->i = beam_run_process;
+
+ switch (erts_frame_layout) {
+ case ERTS_FRAME_LAYOUT_RA:
+ p->stop[0] = make_cp(beam_normal_exit);
+ break;
+ case ERTS_FRAME_LAYOUT_FP_RA:
+ p->stop[0] = make_cp(NULL);
+ p->stop[1] = make_cp(beam_normal_exit);
+
+ FRAME_POINTER(p) = &p->stop[0];
+ break;
+ }
p->arg_reg = p->def_arg_reg;
p->max_arg_reg = sizeof(p->def_arg_reg)/sizeof(p->def_arg_reg[0]);
@@ -12156,11 +12168,13 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
p->sig_qs.len = 0;
p->sig_qs.nmsigs.next = NULL;
p->sig_qs.nmsigs.last = NULL;
+ p->sig_inq_contention_counter = 0;
p->sig_inq.first = NULL;
p->sig_inq.last = &p->sig_inq.first;
p->sig_inq.len = 0;
p->sig_inq.nmsigs.next = NULL;
p->sig_inq.nmsigs.last = NULL;
+ erts_atomic_init_nob(&p->sig_inq_buffers, (erts_aint_t)NULL);
#ifdef ERTS_PROC_SIG_HARD_DEBUG
p->sig_inq.may_contain_heap_terms = 0;
#endif
@@ -12636,6 +12650,7 @@ void erts_init_empty_process(Process *p)
p->next = NULL;
p->off_heap.first = NULL;
p->off_heap.overhead = 0;
+ p->wrt_bins = NULL;
p->common.u.alive.reg = NULL;
p->heap_sz = 0;
p->high_water = NULL;
@@ -12659,11 +12674,13 @@ void erts_init_empty_process(Process *p)
p->sig_qs.len = 0;
p->sig_qs.nmsigs.next = NULL;
p->sig_qs.nmsigs.last = NULL;
+ p->sig_inq_contention_counter = 0;
p->sig_inq.first = NULL;
p->sig_inq.last = &p->sig_inq.first;
p->sig_inq.len = 0;
p->sig_inq.nmsigs.next = NULL;
p->sig_inq.nmsigs.last = NULL;
+ erts_atomic_init_nob(&p->sig_inq_buffers, (erts_aint_t)NULL);
#ifdef ERTS_PROC_SIG_HARD_DEBUG
p->sig_inq.may_contain_heap_terms = 0;
#endif
@@ -12756,6 +12773,7 @@ erts_debug_verify_clean_empty_process(Process* p)
ASSERT(p->off_heap.first == NULL);
ASSERT(p->off_heap.overhead == 0);
+ ASSERT(p->wrt_bins == NULL);
ASSERT(p->mbuf == NULL);
}
@@ -12767,9 +12785,11 @@ erts_cleanup_empty_process(Process* p)
{
/* We only check fields that are known to be used... */
- erts_cleanup_offheap(&p->off_heap);
+ erts_cleanup_offheap_list(p->off_heap.first);
p->off_heap.first = NULL;
p->off_heap.overhead = 0;
+ erts_cleanup_offheap_list(p->wrt_bins);
+ p->wrt_bins = NULL;
if (p->mbuf != NULL) {
free_message_buffer(p->mbuf);
@@ -12823,6 +12843,7 @@ delete_process(Process* p)
/* Clean binaries and funs */
erts_cleanup_offheap(&p->off_heap);
+ erts_cleanup_offheap_list(p->wrt_bins);
/*
* The mso list should not be used anymore, but if it is, make sure that
@@ -13836,6 +13857,7 @@ restart:
erts_proc_lock(p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_flush_and_deinstall_buffers(p);
erts_proc_sig_fetch(p);
erts_proc_unlock(p, ERTS_PROC_LOCK_MSGQ);
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h
index 6fa91a5049..1f957ad126 100644
--- a/erts/emulator/beam/erl_process.h
+++ b/erts/emulator/beam/erl_process.h
@@ -661,11 +661,11 @@ typedef struct ErtsSchedulerRegisters_ {
ErtsCodePtr start_time_i;
UWord start_time;
-#if !defined(NATIVE_ERLANG_STACK) && defined(JIT_HARD_DEBUG)
+#if (!defined(NATIVE_ERLANG_STACK) || defined(__aarch64__)) && defined(JIT_HARD_DEBUG)
/* Holds the initial thread stack pointer. Used to ensure that everything
* that is pushed to the stack is also popped. */
UWord *initial_sp;
-#elif defined(NATIVE_ERLANG_STACK) && defined(DEBUG)
+#elif defined(NATIVE_ERLANG_STACK) && defined(DEBUG) && !defined(__aarch64__)
/* Raw pointers to the start and end of the stack. Used to test bounds
* without clobbering any registers. */
UWord *runtime_stack_start;
@@ -955,6 +955,21 @@ typedef struct ErtsProcSysTaskQs_ ErtsProcSysTaskQs;
(ASSERT((p)->htop <= (p)->stop), \
MAX((p)->htop, (p)->stop - S_REDZONE))
+#ifdef ERLANG_FRAME_POINTERS
+/* The current frame pointer on the Erlang stack. */
+# define FRAME_POINTER(p) (p)->frame_pointer
+#else
+/* We define this to a trapping lvalue when frame pointers are unsupported to
+ * provoke crashes when used without checking `erts_frame_layout`. The checks
+ * will always be optimized out because the variable is hardcoded to
+ * `ERTS_FRAME_LAYOUT_RA`. */
+# define FRAME_POINTER(p) (((Eterm ** volatile)0xbadf00d)[0])
+
+# ifndef erts_frame_layout
+# error "erts_frame_layout has not been hardcoded to ERTS_FRAME_LAYOUT_RA"
+# endif
+#endif
+
# define HEAP_END(p) (p)->hend
# define HEAP_SIZE(p) (p)->heap_sz
# define STACK_START(p) (p)->hend
@@ -994,8 +1009,13 @@ struct process {
* shorter instruction can be used to access them.
*/
- Eterm* htop; /* Heap top */
- Eterm* stop; /* Stack top */
+ Eterm *htop; /* Heap top */
+ Eterm *stop; /* Stack top */
+
+#ifdef ERLANG_FRAME_POINTERS
+ Eterm *frame_pointer; /* Frame pointer */
+#endif
+
Sint fcalls; /* Number of reductions left to execute.
* Only valid for the current process.
*/
@@ -1081,6 +1101,7 @@ struct process {
Uint16 gen_gcs; /* Number of (minor) generational GCs. */
Uint16 max_gen_gcs; /* Max minor gen GCs before fullsweep. */
ErlOffHeap off_heap; /* Off-heap data updated by copy_struct(). */
+ struct erl_off_heap_header* wrt_bins; /* Writable binaries */
ErlHeapFragment* mbuf; /* Pointer to heap fragment list */
ErlHeapFragment* live_hf_end;
ErtsMessage *msg_frag; /* Pointer to message fragment list */
@@ -1096,8 +1117,9 @@ struct process {
erts_atomic32_t state; /* Process state flags (see ERTS_PSFLG_*) */
erts_atomic32_t dirty_state; /* Process dirty state flags (see ERTS_PDSFLG_*) */
-
+ Uint sig_inq_contention_counter;
ErtsSignalInQueue sig_inq;
+ erts_atomic_t sig_inq_buffers;
ErlTraceMessageQueue *trace_msg_q;
erts_proc_lock_t lock;
ErtsSchedulerData *scheduler_data;
diff --git a/erts/emulator/beam/erl_process_dump.c b/erts/emulator/beam/erl_process_dump.c
index 3beafb4b3c..58fb386f44 100644
--- a/erts/emulator/beam/erl_process_dump.c
+++ b/erts/emulator/beam/erl_process_dump.c
@@ -159,7 +159,7 @@ Uint erts_process_memory(Process *p, int include_sigs_in_transit)
* Size of message queue plus size of all signals
* in transit to the process!
*/
- erts_proc_lock(p, ERTS_PROC_LOCK_MSGQ);
+ erts_proc_sig_queue_lock(p);
erts_proc_sig_fetch(p);
erts_proc_unlock(p, ERTS_PROC_LOCK_MSGQ);
diff --git a/erts/emulator/beam/erl_process_lock.h b/erts/emulator/beam/erl_process_lock.h
index 1e577cf004..b5ec8e31e1 100644
--- a/erts/emulator/beam/erl_process_lock.h
+++ b/erts/emulator/beam/erl_process_lock.h
@@ -462,6 +462,9 @@ typedef struct {
#define ERTS_PROC_LOCK_FLGS_READ_(L) \
((ErtsProcLocks) erts_atomic32_read_nob(&(L)->flags))
+#define ERTS_PROC_LOCK_FLGS_READ_ACQB_(L) \
+ ((ErtsProcLocks) erts_atomic32_read_acqb(&(L)->flags))
+
#else /* no opt atomic ops */
ERTS_GLB_INLINE ErtsProcLocks erts_proc_lock_flags_band(erts_proc_lock_t *,
@@ -509,6 +512,7 @@ erts_proc_lock_flags_cmpxchg(erts_proc_lock_t *lck, ErtsProcLocks new,
#define ERTS_PROC_LOCK_FLGS_CMPXCHG_RELB_(L, NEW, EXPECTED) \
erts_proc_lock_flags_cmpxchg((L), (NEW), (EXPECTED))
#define ERTS_PROC_LOCK_FLGS_READ_(L) ((L)->flags)
+#define ERTS_PROC_LOCK_FLGS_READ_ACQB_(L) ((L)->flags)
#endif /* end no opt atomic ops */
#endif /* ERTS_PROC_LOCK_OWN_IMPL */
@@ -918,6 +922,8 @@ ERTS_GLB_INLINE void erts_proc_lock(Process *, ErtsProcLocks);
#endif
ERTS_GLB_INLINE void erts_proc_unlock(Process *, ErtsProcLocks);
ERTS_GLB_INLINE int erts_proc_trylock(Process *, ErtsProcLocks);
+ERTS_GLB_INLINE void
+erts_proc_lock_wait_until_released(Process *p, ErtsProcLocks locks);
ERTS_GLB_INLINE void erts_proc_inc_refc(Process *);
ERTS_GLB_INLINE void erts_proc_dec_refc(Process *);
@@ -979,6 +985,50 @@ erts_proc_trylock(Process *p, ErtsProcLocks locks)
locks);
}
+ERTS_GLB_INLINE void
+erts_proc_lock_wait_until_released(Process *p, ErtsProcLocks locks)
+{
+#if ERTS_PROC_LOCK_OWN_IMPL
+#if !ERTS_PROC_LOCK_ATOMIC_IMPL
+ Uint32 was_locked;
+ erts_pix_lock(pix_lck);
+ was_locked = (ERTS_PROC_LOCK_FLGS_READ_(&p->lock) & locks);
+ erts_pix_unlock(pix_lck);
+ if (was_locked) {
+ erts_proc_lock(p, locks);
+ erts_proc_unlock(p, locks);
+ }
+#else
+ ETHR_MEMBAR(ETHR_StoreLoad | ETHR_LoadLoad);
+ if (ERTS_PROC_LOCK_FLGS_READ_ACQB_(&p->lock) & locks) {
+ erts_proc_lock(p, locks);
+ erts_proc_unlock(p, locks);
+ }
+#endif
+#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
+ if (locks & ERTS_PROC_LOCK_MAIN) {
+ erts_mtx_lock(&p->lock.main);
+ erts_mtx_unlock(&p->lock.main);
+ }
+ if (locks & ERTS_PROC_LOCK_MSGQ) {
+ erts_mtx_lock(&p->lock.msgq);
+ erts_mtx_unlock(&p->lock.msgq);
+ }
+ if (locks & ERTS_PROC_LOCK_BTM) {
+ erts_mtx_lock(&p->lock.btm);
+ erts_mtx_unlock(&p->lock.btm);
+ }
+ if (locks & ERTS_PROC_LOCK_STATUS) {
+ erts_mtx_lock(&p->lock.status);
+ erts_mtx_unlock(&p->lock.status);
+ }
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ erts_mtx_lock(&p->lock.trace);
+ erts_mtx_unlock(&p->lock.trace);
+ }
+#endif
+}
+
ERTS_GLB_INLINE void erts_proc_inc_refc(Process *p)
{
ASSERT(!(erts_atomic32_read_nob(&p->state) & ERTS_PSFLG_PROXY));
diff --git a/erts/emulator/beam/erl_vm.h b/erts/emulator/beam/erl_vm.h
index 50e3fdc9f2..7c2fe55796 100644
--- a/erts/emulator/beam/erl_vm.h
+++ b/erts/emulator/beam/erl_vm.h
@@ -27,9 +27,17 @@
*/
/* #define FORCE_HEAP_FRAGS */
-/* valgrind can't handle stack switching, so we will turn off native stack. */
+/* `valgrind` can't handle stack switching, so we will turn off native
+ * stack. */
#ifdef VALGRIND
#undef NATIVE_ERLANG_STACK
+#undef ERLANG_FRAME_POINTERS
+#endif
+
+/* Frame pointer support costs an extra word per process even when unused, so
+ * it's worth disabling for compact builds. */
+#ifdef CODE_MODEL_SMALL
+#undef ERLANG_FRAME_POINTERS
#endif
#if defined(DEBUG) && !defined(CHECK_FOR_HOLES) && !defined(__WIN32__)
@@ -54,7 +62,23 @@
#define VH_DEFAULT_SIZE 32768 /* default virtual (bin) heap min size (words) */
#define H_DEFAULT_MAX_SIZE 0 /* default max heap size is off */
-#define CP_SIZE 1
+typedef enum {
+ /* Return address only */
+ ERTS_FRAME_LAYOUT_RA,
+ /* Frame pointer, return address */
+ ERTS_FRAME_LAYOUT_FP_RA
+} ErtsFrameLayout;
+
+ERTS_GLB_INLINE
+int erts_cp_size(void);
+
+#if defined(BEAMASM) && defined(ERLANG_FRAME_POINTERS)
+extern ErtsFrameLayout ERTS_WRITE_UNLIKELY(erts_frame_layout);
+# define CP_SIZE erts_cp_size()
+#else
+# define erts_frame_layout ERTS_FRAME_LAYOUT_RA
+# define CP_SIZE 1
+#endif
/* In the JIT we're not guaranteed to have allocated a word for the CP when
* allocating a stack frame (it's still reserved however), as the `call` and
@@ -76,6 +100,8 @@
#if defined(BEAMASM) && defined(NATIVE_ERLANG_STACK)
#define S_REDZONE (CP_SIZE * 3)
+#elif defined(BEAMASM) && defined(__aarch64__)
+#define S_REDZONE (CP_SIZE * 3)
#elif defined(DEBUG)
/* Ensure that a redzone won't cause problems in the interpreter. */
#define S_REDZONE CP_SIZE
@@ -291,4 +317,17 @@ extern void** beam_ops;
#endif /* BEAMASM */
+#if ERTS_GLB_INLINE_INCL_FUNC_DEF
+ERTS_GLB_INLINE
+int erts_cp_size()
+{
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ return 1;
+ }
+
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+ return 2;
+}
+#endif
+
#endif /* __ERL_VM_H__ */
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index f4c7f6dec4..aa034b4108 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -123,10 +123,6 @@ static ErtsExtSzRes encode_size_struct_int(TTBSizeContext*, ErtsAtomCacheMap *ac
static Export binary_to_term_trap_export;
static BIF_RETTYPE binary_to_term_trap_1(BIF_ALIST_1);
static Sint transcode_dist_obuf(ErtsDistOutputBuf*, DistEntry*, Uint64 dflags, Sint reds);
-static byte *hopefull_bit_binary(TTBEncodeContext* ctx, byte **epp, Binary *pb_val, Eterm pb_term,
- byte *bytes, byte bitoffs, byte bitsize, Uint sz);
-static void hopefull_export(TTBEncodeContext* ctx, byte **epp, Export* exp, Uint32 dflags,
- struct erl_off_heap_header** off_heap);
static void store_in_vec(TTBEncodeContext *ctx, byte *ep, Binary *ohbin, Eterm ohpb,
byte *ohp, Uint ohsz);
@@ -230,7 +226,6 @@ insert_acache_map(ErtsAtomCacheMap *acmp, Eterm atom, Uint64 dflags)
if (acmp && acmp->sz < ERTS_MAX_INTERNAL_ATOM_CACHE_ENTRIES) {
int ix;
ASSERT(acmp->hdr_sz < 0);
- ASSERT(dflags & DFLAG_UTF8_ATOMS);
ix = atom2cix(atom);
if (acmp->cache[ix].iix < 0) {
acmp->cache[ix].iix = acmp->sz;
@@ -268,7 +263,6 @@ erts_finalize_atom_cache_map(ErtsAtomCacheMap *acmp, Uint64 dflags)
int i;
int sz = 0;
int min_sz;
- ASSERT(dflags & DFLAG_UTF8_ATOMS);
ASSERT(acmp->hdr_sz < 0);
/* Make sure cache update instructions fit */
min_sz = (2+4)*acmp->sz;
@@ -438,7 +432,6 @@ Sint erts_encode_ext_dist_header_finalize(ErtsDistOutputBuf* ob,
int long_atoms;
Uint64 seq_id = 0, frag_id = 0;
register byte *ep = ob->eiov->iov[1].iov_base;
- ASSERT(dflags & DFLAG_UTF8_ATOMS);
/*
* The buffer can have different layouts at this point depending on
@@ -852,9 +845,6 @@ erts_prepare_dist_ext(ErtsDistExternal *edep,
ASSERT(dep);
erts_de_rlock(dep);
- ASSERT(dep->dflags & DFLAG_UTF8_ATOMS);
-
-
if ((dep->state != ERTS_DE_STATE_CONNECTED &&
dep->state != ERTS_DE_STATE_PENDING)
|| dep->connection_id != conn_id) {
@@ -3387,8 +3377,6 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
? INTERNAL_LOCAL_SYSNAME : ref_node_name(obj));
Uint32 creation = ref_creation(obj);
- ASSERT(dflags & DFLAG_EXTENDED_REFERENCES);
-
erts_magic_ref_save_bin(obj);
*ep++ = NEWER_REFERENCE_EXT;
@@ -3661,72 +3649,23 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
data_dst = ep;
ep += j;
}
- } else if (dflags & DFLAG_BIT_BINARIES) {
- /* Bit-level binary. */
- if (dflags & DFLAG_PENDING_CONNECT) {
- ASSERT(ctx);
- j = off_heap_bytesize;
- if (!j) {
- pb_val = NULL;
- pb_term = THE_NON_VALUE;
- j = binary_size(obj);
- }
- data_dst = hopefull_bit_binary(ctx, &ep, pb_val, pb_term,
- bytes, bitoffs, bitsize, j);
- if (!data_dst)
- break; /* off heap binary referred... */
- ASSERT(!off_heap_bytesize);
- off_heap_tail = 0;
- /*
- * Trailing bits already written by hopefull_bit_binary();
- * now go copy all whole octets...
- */
- bitsize = 0;
- }
- else {
- *ep++ = BIT_BINARY_EXT;
- j = binary_size(obj);
- put_int32((j+1), ep);
- ep += 4;
- *ep++ = bitsize;
- if (off_heap_bytesize) {
- /* trailing bits */
- ep[0] = 0;
- copy_binary_to_buffer(ep, 0, bytes + j, 0, bitsize);
- off_heap_tail = 1;
- }
- else {
- ep[j] = 0; /* Zero unused bits at end of binary */
- data_dst = ep;
- ep += j + 1;
- }
- }
} else {
- /*
- * Bit-level binary, but the receiver doesn't support it.
- * Build a tuple instead.
- */
- *ep++ = SMALL_TUPLE_EXT;
- *ep++ = 2;
- *ep++ = BINARY_EXT;
- j = binary_size(obj);
- put_int32((j+1), ep);
- ep += 4;
-
+ /* Bit-level binary. */
+ *ep++ = BIT_BINARY_EXT;
+ j = binary_size(obj);
+ put_int32((j+1), ep);
+ ep += 4;
+ *ep++ = bitsize;
if (off_heap_bytesize) {
/* trailing bits */
ep[0] = 0;
copy_binary_to_buffer(ep, 0, bytes + j, 0, bitsize);
- ep[1] = SMALL_INTEGER_EXT;
- ep[2] = bitsize;
- off_heap_tail = 3;
+ off_heap_tail = 1;
}
else {
- ep[j] = 0; /* Zero unused bits at end of binary */
+ ep[j] = 0; /* Zero unused bits at end of binary */
data_dst = ep;
- ep += j+1;
- *ep++ = SMALL_INTEGER_EXT;
- *ep++ = bitsize;
+ ep += j + 1;
}
}
if (off_heap_bytesize) {
@@ -3747,28 +3686,11 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
case EXPORT_DEF:
{
Export* exp = *((Export **) (export_val(obj) + 1));
- if (dflags & DFLAG_PENDING_CONNECT) {
- ASSERT(ctx);
- hopefull_export(ctx, &ep, exp, dflags, off_heap);
- }
- else if ((dflags & DFLAG_EXPORT_PTR_TAG) != 0) {
- *ep++ = EXPORT_EXT;
- ep = enc_atom(acmp, exp->info.mfa.module, ep, dflags);
- ep = enc_atom(acmp, exp->info.mfa.function, ep, dflags);
- ep = enc_term(acmp, make_small(exp->info.mfa.arity),
- ep, dflags, off_heap);
- } else {
- /* Tag, arity */
- *ep++ = SMALL_TUPLE_EXT;
- put_int8(2, ep);
- ep += 1;
-
- /* Module name */
- ep = enc_atom(acmp, exp->info.mfa.module, ep, dflags);
-
- /* Function name */
- ep = enc_atom(acmp, exp->info.mfa.function, ep, dflags);
- }
+ *ep++ = EXPORT_EXT;
+ ep = enc_atom(acmp, exp->info.mfa.module, ep, dflags);
+ ep = enc_atom(acmp, exp->info.mfa.function, ep, dflags);
+ ep = enc_term(acmp, make_small(exp->info.mfa.arity),
+ ep, dflags, off_heap);
break;
}
break;
@@ -3777,7 +3699,6 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
ErlFunThing* funp = (ErlFunThing *) fun_val(obj);
int ei;
- ASSERT(dflags & DFLAG_NEW_FUN_TAGS);
*ep++ = NEW_FUN_EXT;
WSTACK_PUSH2(s, ENC_PATCH_FUN_SIZE,
(UWord) ep); /* Position for patching in size */
@@ -3938,123 +3859,6 @@ store_in_vec(TTBEncodeContext *ctx,
}
}
-static byte *
-begin_hopefull_data(TTBEncodeContext *ctx, byte *ep)
-{
- store_in_vec(ctx, ep, NULL, THE_NON_VALUE, NULL, 0);
- ASSERT(ERTS_NO_HIX == get_uint32(ctx->hopefull_ixp));
- put_int32(ctx->vlen, ctx->hopefull_ixp);
- ctx->hopefull_ixp = ep;
- put_int32(ERTS_NO_HIX, ep);
- ep += 4;
- ctx->cptr = ep;
- return ep;
-}
-
-static byte *
-end_hopefull_data(TTBEncodeContext *ctx, byte *ep, Uint fallback_size)
-{
- Uint sz;
- store_in_vec(ctx, ep, NULL, THE_NON_VALUE, NULL, 0);
- /*
- * Reserve extra room for fallback if needed. The four
- * bytes used for hopefull index can be used for
- * fallback encoding...
- */
- sz = ep - ctx->hopefull_ixp;
- if (fallback_size > sz) {
- ep += fallback_size - sz;
- ctx->cptr = ep;
- }
- return ep;
-}
-
-static byte *
-hopefull_bit_binary(TTBEncodeContext* ctx, byte **epp, Binary *pb_val, Eterm pb_term,
- byte *bytes, byte bitoffs, byte bitsize, Uint sz)
-{
- byte *octets, *ep = *epp;
-
- ctx->hopefull_flags |= DFLAG_BIT_BINARIES;
-
- /*
- * The fallback:
- *
- * SMALL_TUPLE_EXT - 1 byte
- * 2 - 1 byte
- * BINARY_EXT - 1 byte
- * whole octet size ('sz') - 4 byte
- * whole octets - 'sz' bytes
- * trailing bits - 1 byte
- * SMALL_INTEGER_EXT - 1 byte
- * bitsize - 1 byte
- */
-
- /* bit binary prelude in one hopefull data element */
- ep = begin_hopefull_data(ctx, ep);
- *ep++ = BIT_BINARY_EXT;
- put_int32((sz+1), ep);
- ep += 4;
- *ep++ = bitsize;
- ep = end_hopefull_data(ctx, ep, 1+1+1+4);
-
- /* All whole octets... */
- if (pb_val) {
- octets = NULL;
- store_in_vec(ctx, ep, pb_val, pb_term, bytes, sz);
- }
- else {
- /* ... will be copied here afterwards */
- octets = ep;
- ep += sz;
- }
-
- /* copy trailing bits into new hopefull data element */
- ep = begin_hopefull_data(ctx, ep);
- *ep = 0; /* Clear the bit in the byte */
-
- copy_binary_to_buffer(ep, 0, bytes + sz, bitoffs, bitsize);
- ep++;
-
- ep = end_hopefull_data(ctx, ep, 1+1+1);
- *epp = ep;
-
- return octets;
-}
-
-static void
-hopefull_export(TTBEncodeContext* ctx, byte **epp, Export* exp, Uint32 dflags,
- struct erl_off_heap_header** off_heap)
-{
- Uint fallback_sz;
- byte *ep = *epp, *mod_start;
-
- /*
- * The fallback:
- *
- * SMALL_TUPLE_EXT - 1 byte
- * 2 - 1 byte
- * module atom... - M bytes
- * function atom... - F bytes
- */
-
- ctx->hopefull_flags |= DFLAG_EXPORT_PTR_TAG;
-
- ep = begin_hopefull_data(ctx, ep);
-
- *ep++ = EXPORT_EXT;
- mod_start = ep;
- ep = enc_atom(NULL, exp->info.mfa.module, ep, dflags);
- ep = enc_atom(NULL, exp->info.mfa.function, ep, dflags);
- fallback_sz = 2 + (ep - mod_start);
- ep = enc_term(NULL, make_small(exp->info.mfa.arity),
- ep, dflags, off_heap);
-
- ep = end_hopefull_data(ctx, ep, fallback_sz);
-
- *epp = ep;
-}
-
/** @brief Is it a list of bytes not longer than MAX_STRING_LEN?
* @param lenp out: string length or number of list cells traversed
* @return true/false
@@ -5232,7 +5036,6 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
break;
case EXTERNAL_REF_DEF:
case REF_DEF:
- ASSERT(dflags & DFLAG_EXTENDED_REFERENCES);
i = ref_no_numbers(obj);
result += (1 + 2 + encode_size_struct2(acmp, ref_node_name(obj), dflags) +
4 + 4*i);
@@ -5388,21 +5191,12 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
+ 4 /* size */);
trailing_result = 0;
}
- else if (dflags & DFLAG_BIT_BINARIES) {
+ else {
result += (1 /* BIT_BINARY_EXT */
+ 4 /* size */
+ 1 /* trailing bitsize */);
trailing_result = 1 /* trailing bits */;
}
- else {
- /* sigh... */
- result += (1 /* SMALL_TUPLE_EXT */
- + 1 /* 2 tuple size */
- + 1 /* BINARY_EXT */
- + 4 /* binary size */);
- trailing_result = (1 /* SMALL_INTEGER_EXT */
- + 1 /* bitsize */);
- }
csz = result - ctx->last_result;
ctx->last_result = result;
result += trailing_result;
@@ -5415,7 +5209,6 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
ctx->extra_size += bin_size;
if (dflags & DFLAG_PENDING_CONNECT) {
- ASSERT(dflags & DFLAG_BIT_BINARIES);
ASSERT(ctx);
vlen += 2; /* for hopefull prolog and epilog */
result += (4 /* for hopefull prolog (see below) */
@@ -5436,7 +5229,6 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
/* This is the odd case when we have an un-aligned bit-string
during a pending connect. */
Uint csz;
- ASSERT(dflags & DFLAG_BIT_BINARIES);
ASSERT(ctx);
csz = result - ctx->last_result;
/* potentially multiple elements leading up to binary */
@@ -5461,20 +5253,15 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
result += 4 + 1;
ctx->last_result = result;
}
- else if (dflags & DFLAG_BIT_BINARIES) {
- result += 1 + 4 + 1 + bin_size + 1;
- }
else {
- /* Sigh... */
- result += 1 + 1 + 1 + 4 + bin_size + 1 + 1 + 1;
+ result += 1 + 4 + 1 + bin_size + 1;
}
break;
}
case FUN_DEF:
{
ErlFunThing* funp = (ErlFunThing *) fun_val(obj);
-
- ASSERT(dflags & DFLAG_NEW_FUN_TAGS);
+
result += 20+1+1+4; /* New ID + Tag */
result += 4; /* Length field (number of free variables */
result += encode_size_struct2(acmp, funp->creator, dflags);
@@ -5985,10 +5772,8 @@ Sint transcode_dist_obuf(ErtsDistOutputBuf* ob,
ErlIOVec* eiov = ob->eiov;
SysIOVec* iov = eiov->iov;
byte *hdr;
- Uint64 hopefull_flags;
- Uint32 hopefull_ix, payload_ix;
+ Uint32 payload_ix;
Sint start_r, r;
- Uint new_len;
byte *ep;
if (reds < 0)
@@ -6054,11 +5839,9 @@ Sint transcode_dist_obuf(ErtsDistOutputBuf* ob,
return reds;
}
+ /* Currently, the hopefull flags and IX are not used. */
hdr++;
- hopefull_flags = get_int64(hdr);
-
hdr += 8;
- hopefull_ix = get_int32(hdr);
if ((~dflags & DFLAG_SPAWN)
&& ep[0] == SMALL_TUPLE_EXT
@@ -6236,167 +6019,6 @@ Sint transcode_dist_obuf(ErtsDistOutputBuf* ob,
start_r = r = reds*ERTS_TRANSCODE_REDS_FACT;
- if (~dflags & hopefull_flags) {
-
- while (hopefull_ix != ERTS_NO_HIX) {
- Uint32 new_hopefull_ix;
-
- if (r <= 0) { /* yield... */
- /* save current hopefull_ix... */
- ep = (byte *) iov[1].iov_base;
- ep += 5;
- put_int32(hopefull_ix, ep);
- return -1;
- }
-
- /* Read next hopefull index */
- ep = (byte *) iov[hopefull_ix].iov_base;
- ep -= 4;
- new_hopefull_ix = get_int32(ep);
- ASSERT(new_hopefull_ix == ERTS_NO_HIX
- || (hopefull_ix < new_hopefull_ix
- && new_hopefull_ix < eiov->vsize));
-
- ep = (byte *) iov[hopefull_ix].iov_base;
- switch (*ep) {
-
- case EXPORT_EXT: {
- byte *start_ep, *end_ep;
- Eterm module, function;
- if (!(hopefull_flags & DFLAG_EXPORT_PTR_TAG))
- break;
- /* Read original encoding... */
- ep++;
- start_ep = ep;
- ep = (byte*)dec_atom(NULL, ep, &module);
- ASSERT(ep && is_atom(module));
- ep = (byte*)dec_atom(NULL, ep, &function);
- ASSERT(ep && is_atom(function));
- end_ep = ep;
- ASSERT(*ep == SMALL_INTEGER_EXT
- || *ep == INTEGER_EXT
- || *ep == SMALL_BIG_EXT
- || *ep == LARGE_BIG_EXT);
-
- /*
- * module and function atoms are encoded
- * between start_ep and end_ep. Prepend a
- * 2-tuple tag before the atoms and
- * remove arity at end.
- */
-
- /* write fallback */
-
- ep = start_ep;
- ep--;
- put_int8(2, ep);
- ep--;
- *ep = SMALL_TUPLE_EXT;
-
- iov[hopefull_ix].iov_base = ep;
-
- /* Update iov sizes... */
- new_len = end_ep - ep;
- eiov->size -= iov[hopefull_ix].iov_len;
- eiov->size += new_len;
- iov[hopefull_ix].iov_len = new_len;
- r--;
- break;
- }
-
- case BIT_BINARY_EXT: {
- Uint bin_sz;
- byte bitsize, epilog_byte;
- ASSERT(hopefull_ix != ERTS_NO_HIX);
- if (!(hopefull_flags & DFLAG_BIT_BINARIES)) {
- /* skip to epilog... */
- hopefull_ix = new_hopefull_ix;
- ep = (byte *) iov[hopefull_ix].iov_base;
- ep -= 4;
- new_hopefull_ix = get_int32(ep);
- ASSERT(new_hopefull_ix == ERTS_NO_HIX
- || (hopefull_ix < new_hopefull_ix
- && new_hopefull_ix < eiov->vsize));
- break;
- }
-
- /* read original encoded prolog... */
- ep++;
- bin_sz = get_uint32(ep);
- ep += 4;
- bitsize = *ep++;
-
- /* write fallback prolog... */
- iov[hopefull_ix].iov_base = &((byte*)iov[hopefull_ix].iov_base)[-4];
- ep = (byte *) iov[hopefull_ix].iov_base;
-
- *ep++ = SMALL_TUPLE_EXT;
- *ep++ = 2;
- *ep++ = BINARY_EXT;
- put_int32(bin_sz, ep);
- ep += 4;
-
- /* Update iov sizes... */
- new_len = ep - (byte *) iov[hopefull_ix].iov_base;
- eiov->size -= iov[hopefull_ix].iov_len;
- eiov->size += new_len;
- iov[hopefull_ix].iov_len = new_len;
- r--;
-#ifdef DEBUG
- /*
- * The binary data between the prolog and the
- * epilog should be of size 'bin_sz - 1' and
- * exists in the iov elements between prolog
- * and epilog...
- */
- {
- Uint ix, debug_bin_sz = 0;
- for (ix = hopefull_ix+1; ix < new_hopefull_ix; ix++)
- debug_bin_sz += iov[ix].iov_len;
- ASSERT(debug_bin_sz == bin_sz - 1);
- }
-#endif
- /* jump to epilog... */
- hopefull_ix = new_hopefull_ix;
- ep = (byte *) iov[hopefull_ix].iov_base;
-
- /* read original encoded epilog... */
- epilog_byte = *ep;
-
- ASSERT(1 == iov[hopefull_ix].iov_len);
-
- iov[hopefull_ix].iov_base = &((byte*)iov[hopefull_ix].iov_base)[-4];
- ep = (byte *) iov[hopefull_ix].iov_base;
- new_hopefull_ix = get_int32(ep);
- ASSERT(new_hopefull_ix == ERTS_NO_HIX
- || (hopefull_ix < new_hopefull_ix
- && new_hopefull_ix < eiov->vsize));
-
- /* write fallback epilog... */
-
- *ep++ = epilog_byte;
- *ep++ = SMALL_INTEGER_EXT;
- *ep++ = bitsize;
-
- /* Update iov sizes... */
- new_len = ep - (byte *) iov[hopefull_ix].iov_base;
- eiov->size -= iov[hopefull_ix].iov_len;
- eiov->size += new_len;
- iov[hopefull_ix].iov_len = new_len;
- r--;
- break;
- }
-
- default:
- ERTS_INTERNAL_ERROR("Unexpected external tag");
- break;
- }
-
- hopefull_ix = new_hopefull_ix;
- r--;
- }
- }
-
/*
* Replace hopefull data header with actual header...
*/
diff --git a/erts/emulator/beam/generators.tab b/erts/emulator/beam/generators.tab
index 520c688113..fd5756939a 100644
--- a/erts/emulator/beam/generators.tab
+++ b/erts/emulator/beam/generators.tab
@@ -51,31 +51,6 @@ NativeEndian(flags) {
#endif
}
-gen_bs_save_restore(reg, index, instr) {
- BeamOp* op;
-
- $NewBeamOp(S, op);
- $BeamOpNameArity(op, $instr, 2);
- op->a[0] = $reg;
- op->a[1] = $index;
- if (Index.type == TAG_u) {
- op->a[1].val = $index.val+1;
- } else if ($index.type == TAG_a && $index.val == am_start) {
- op->a[1].type = TAG_u;
- op->a[1].val = 0;
- }
- return op;
-}
-
-gen.bs_save(Reg, Index) {
- $gen_bs_save_restore(Reg, Index, i_bs_save2);
-}
-
-gen.bs_restore(Reg, Index) {
- $gen_bs_save_restore(Reg, Index, i_bs_restore2);
-}
-
-
// Generate an instruction to fetch a float from a binary.
gen.get_float2(Fail, Ms, Live, Size, Unit, Flags, Dst) {
BeamOp* op;
@@ -351,6 +326,7 @@ gen.make_fun2(idx) {
int i;
BeamFile_LambdaEntry *entry = &S->beam.lambdas.entries[idx.val];
unsigned num_free = entry->num_free;
+ unsigned arity = entry->arity;
$NewBeamOp(S, th);
@@ -361,17 +337,19 @@ gen.make_fun2(idx) {
th->a[1].val = num_free;
th->next = op;
- $BeamOpNameArity(op, i_make_fun3, 3);
- $BeamOpArity(op, 3 + num_free);
+ $BeamOpNameArity(op, i_make_fun3, 4);
+ $BeamOpArity(op, 4 + num_free);
op->a[0].type = TAG_u;
op->a[0].val = idx.val;
op->a[1].type = TAG_x;
op->a[1].val = 0;
op->a[2].type = TAG_u;
- op->a[2].val = num_free;
+ op->a[2].val = arity - num_free;
+ op->a[3].type = TAG_u;
+ op->a[3].val = num_free;
for (i = 0; i < num_free; i++) {
- op->a[i+3].type = TAG_x;
- op->a[i+3].val = i;
+ op->a[i+4].type = TAG_x;
+ op->a[i+4].val = i;
}
return th;
}
@@ -387,15 +365,17 @@ gen.make_fun3(idx, Dst, NumFree, Env) {
if (NumFree.val == entry->num_free) {
int i;
- $BeamOpNameArity(op, i_make_fun3, 3);
- $BeamOpArity(op, 3 + NumFree.val);
+ $BeamOpNameArity(op, i_make_fun3, 4);
+ $BeamOpArity(op, 4 + NumFree.val);
op->a[0].type = TAG_u;
op->a[0].val = idx.val;
op->a[1] = Dst;
op->a[2].type = TAG_u;
- op->a[2].val = entry->num_free;
+ op->a[2].val = entry->arity - entry->num_free;
+ op->a[3].type = TAG_u;
+ op->a[3].val = entry->num_free;
for (i = 0; i < NumFree.val; i++) {
- op->a[i+3] = Env[i];
+ op->a[i+4] = Env[i];
}
return op;
}
@@ -406,46 +386,6 @@ gen.make_fun3(idx, Dst, NumFree, Env) {
return op;
}
-gen.tuple_append_put5(Arity, Dst, Puts, S1, S2, S3, S4, S5) {
- BeamOp* op;
- int arity = Arity.val; /* Arity of tuple, not the instruction */
- int i;
-
- $NewBeamOp(S, op);
- $BeamOpNameArity(op, i_put_tuple, 2);
- $BeamOpArity(op, arity+2+5);
- op->a[0] = Dst;
- op->a[1].type = TAG_u;
- op->a[1].val = arity + 5;
- for (i = 0; i < arity; i++) {
- op->a[i+2] = Puts[i];
- }
- op->a[arity+2] = S1;
- op->a[arity+3] = S2;
- op->a[arity+4] = S3;
- op->a[arity+5] = S4;
- op->a[arity+6] = S5;
- return op;
-}
-
-gen.tuple_append_put(Arity, Dst, Puts, Src) {
- BeamOp* op;
- int arity = Arity.val; /* Arity of tuple, not the instruction */
- int i;
-
- $NewBeamOp(S, op);
- $BeamOpNameArity(op, i_put_tuple, 2);
- $BeamOpArity(op, arity+2+1);
- op->a[0] = Dst;
- op->a[1].type = TAG_u;
- op->a[1].val = arity + 1;
- for (i = 0; i < arity; i++) {
- op->a[i+2] = Puts[i];
- }
- op->a[arity+2] = Src;
- return op;
-}
-
// Generate an instruction for get/1.
gen.get(Src, Dst) {
BeamOp* op;
diff --git a/erts/emulator/beam/jit/arm/beam_asm.hpp b/erts/emulator/beam/jit/arm/beam_asm.hpp
new file mode 100644
index 0000000000..fbd42ba962
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/beam_asm.hpp
@@ -0,0 +1,1570 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include <string>
+#include <vector>
+#include <unordered_map>
+#include <queue>
+#include <map>
+#include <functional>
+
+#ifndef ASMJIT_ASMJIT_H_INCLUDED
+# include <asmjit/asmjit.hpp>
+#endif
+
+#include <asmjit/a64.h>
+
+extern "C"
+{
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "sys.h"
+#include "erl_vm.h"
+#include "global.h"
+#include "beam_catches.h"
+
+#include "beam_asm.h"
+}
+
+#include "beam_jit_common.hpp"
+
+/* Is it safe to STP or LDP `Struct->Field1` and `Struct->Field2`? */
+#define ERTS_CT_ASSERT_FIELD_PAIR(Struct, Field1, Field2) \
+ static_assert(std::is_standard_layout<Struct>::value && \
+ (offsetof(Struct, Field2) - offsetof(Struct, Field1) == \
+ sizeof(((Struct *)nullptr)->Field1)) && \
+ (sizeof(((Struct *)nullptr)->Field1) == \
+ sizeof(((Struct *)nullptr)->Field2)))
+
+using namespace asmjit;
+
+class BeamAssembler : public ErrorHandler {
+protected:
+ /* Holds code and relocation information. */
+ CodeHolder code;
+
+ a64::Assembler a;
+
+ FileLogger logger;
+
+ Section *rodata = nullptr;
+
+ /* * * * * * * * * */
+
+ /* Points at x_reg_array inside an ErtsSchedulerRegisters struct, allowing
+ * the aux_regs field to be addressed with an 8-bit displacement. */
+ const arm::Gp scheduler_registers = a64::x19;
+
+ const arm::Gp E = a64::x20;
+ const arm::Gp c_p = a64::x21;
+ const arm::Gp FCALLS = a64::x22;
+ const arm::Gp HTOP = a64::x23;
+
+ /* Local copy of the active code index.
+ *
+ * This is set to ERTS_SAVE_CALLS_CODE_IX when save_calls is active, which
+ * routes us to a common handler routine that calls save_calls before
+ * jumping to the actual code. */
+ const arm::Gp active_code_ix = a64::x24;
+
+ /* X registers */
+#if defined(DEBUG)
+ /*
+ * To ensure that we thoroughly test flushing of caller-save X
+ * registers, define more caller-save X registers in a DEBUG
+ * build.
+ */
+# define ERTS_HIGHEST_CALLEE_SAVE_XREG 2
+# define ERTS_HIGHEST_CALLER_SAVE_XREG 5
+ const arm::Gp XREG0 = a64::x25;
+ const arm::Gp XREG1 = a64::x26;
+ const arm::Gp XREG2 = a64::x27;
+
+ /*
+ * Caller-save X registers. Must be flushed before calling C
+ * code.
+ */
+ const arm::Gp XREG3 = a64::x15;
+ const arm::Gp XREG4 = a64::x16;
+ const arm::Gp XREG5 = a64::x17;
+#else
+# define ERTS_HIGHEST_CALLEE_SAVE_XREG 3
+# define ERTS_HIGHEST_CALLER_SAVE_XREG 5
+ const arm::Gp XREG0 = a64::x25;
+ const arm::Gp XREG1 = a64::x26;
+ const arm::Gp XREG2 = a64::x27;
+ const arm::Gp XREG3 = a64::x28;
+
+ /*
+ * Caller-save X registers. Must be flushed before calling C
+ * code.
+ */
+ const arm::Gp XREG4 = a64::x15;
+ const arm::Gp XREG5 = a64::x16;
+#endif
+
+#define ERTS_LOWEST_CALLEE_SAVE_XREG (0)
+#define ERTS_LOWEST_CALLER_SAVE_XREG (ERTS_HIGHEST_CALLEE_SAVE_XREG + 1)
+
+ static const int num_register_backed_xregs = 6;
+ const arm::Gp register_backed_xregs[num_register_backed_xregs] =
+ {XREG0, XREG1, XREG2, XREG3, XREG4, XREG5};
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ const arm::Mem erts_msacc_cache = getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, aux_regs.d.erts_msacc_cache));
+#endif
+
+ /* * * * * * * * * */
+ const arm::Gp ZERO = a64::xzr;
+
+ /*
+ * All of the following registers are caller-save.
+ *
+ * Note that ARG1 is also the register for the return value.
+ */
+ const arm::Gp ARG1 = a64::x0;
+ const arm::Gp ARG2 = a64::x1;
+ const arm::Gp ARG3 = a64::x2;
+ const arm::Gp ARG4 = a64::x3;
+ const arm::Gp ARG5 = a64::x4;
+ const arm::Gp ARG6 = a64::x5;
+ const arm::Gp ARG7 = a64::x6;
+ const arm::Gp ARG8 = a64::x7;
+
+ const arm::Gp TMP1 = a64::x8;
+ const arm::Gp TMP2 = a64::x9;
+ const arm::Gp TMP3 = a64::x10;
+ const arm::Gp TMP4 = a64::x11;
+ const arm::Gp TMP5 = a64::x12;
+ const arm::Gp TMP6 = a64::x13;
+
+ /*
+ * Assume that SUPER_TMP will be destroyed by any helper function.
+ */
+ const arm::Gp SUPER_TMP = a64::x14;
+
+ /* Callee-saved floating-point registers.
+ *
+ * Note that only the bottom 64 bits of these (128-bit) registers are
+ * callee-save, so we cannot pack two floats into each register. */
+ const arm::VecD FREG0 = a64::d8;
+ const arm::VecD FREG1 = a64::d9;
+ const arm::VecD FREG2 = a64::d10;
+ const arm::VecD FREG3 = a64::d11;
+ const arm::VecD FREG4 = a64::d12;
+ const arm::VecD FREG5 = a64::d13;
+ const arm::VecD FREG6 = a64::d14;
+ const arm::VecD FREG7 = a64::d15;
+ static const int num_register_backed_fregs = 8;
+ const arm::VecD register_backed_fregs[num_register_backed_fregs] =
+ {FREG0, FREG1, FREG2, FREG3, FREG4, FREG5, FREG6, FREG7};
+
+ /*
+ * Note that x18 is reserved on Apple platforms and must not be used.
+ */
+
+ const arm::Mem TMP_MEM1q = getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, aux_regs.d.TMP_MEM[0]));
+ const arm::Mem TMP_MEM2q = getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, aux_regs.d.TMP_MEM[1]));
+ const arm::Mem TMP_MEM3q = getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, aux_regs.d.TMP_MEM[2]));
+ const arm::Mem TMP_MEM4q = getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, aux_regs.d.TMP_MEM[3]));
+ const arm::Mem TMP_MEM5q = getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, aux_regs.d.TMP_MEM[4]));
+
+ /* Fill registers with undefined contents to find bugs faster.
+ * A boxed value is most likely to cause noticeable trouble.
+ */
+ static const Uint64 bad_boxed_ptr = 0xcafebad0000002UL;
+
+ /* Number of highest element displacement for stp/ldp. */
+ static const int MAX_LDP_STP_DISPLACEMENT = 0x3F;
+
+public:
+ static bool hasCpuFeature(uint32_t featureId);
+
+ BeamAssembler();
+ BeamAssembler(const std::string &log);
+
+ ~BeamAssembler();
+
+ void *getBaseAddress();
+ size_t getOffset();
+
+protected:
+ void _codegen(JitAllocator *allocator,
+ const void **executable_ptr,
+ void **writable_ptr);
+
+ void *getCode(Label label);
+ byte *getCode(char *labelName);
+
+ void handleError(Error err, const char *message, BaseEmitter *origin);
+
+#ifdef JIT_HARD_DEBUG
+ constexpr arm::Mem getInitialSPRef() const {
+ int base = offsetof(ErtsSchedulerRegisters, initial_sp);
+
+ return getSchedulerRegRef(base);
+ }
+#endif
+
+ constexpr arm::Mem getSchedulerRegRef(int offset) const {
+ ASSERT((offset & (sizeof(Eterm) - 1)) == 0);
+ return arm::Mem(scheduler_registers, offset);
+ }
+
+ constexpr arm::Mem getFRef(int index, size_t size = sizeof(UWord)) const {
+ int base = offsetof(ErtsSchedulerRegisters, f_reg_array.d);
+ int offset = index * sizeof(FloatDef);
+
+ ASSERT(0 <= index && index <= 1023);
+ return getSchedulerRegRef(base + offset);
+ }
+
+ constexpr arm::Mem getXRef(int index) const {
+ int base = offsetof(ErtsSchedulerRegisters, x_reg_array.d);
+ int offset = index * sizeof(Eterm);
+
+ ASSERT(0 <= index && index < ERTS_X_REGS_ALLOCATED);
+ return getSchedulerRegRef(base + offset);
+ }
+
+ constexpr arm::Mem getYRef(int index) const {
+ ASSERT(0 <= index && index <= 1023);
+
+ return arm::Mem(E, index * sizeof(Eterm));
+ }
+
+ constexpr arm::Mem getCARRef(arm::Gp Src) const {
+ return arm::Mem(Src, -TAG_PRIMARY_LIST);
+ }
+
+ constexpr arm::Mem getCDRRef(arm::Gp Src,
+ size_t size = sizeof(UWord)) const {
+ return arm::Mem(Src, -TAG_PRIMARY_LIST + sizeof(Eterm));
+ }
+
+ /* Loads the X register array into `to`. Remember to sync the registers in
+ * `emit_enter_runtime`. */
+ void load_x_reg_array(arm::Gp to) {
+ int offset = offsetof(ErtsSchedulerRegisters, x_reg_array.d);
+
+ lea(to, getSchedulerRegRef(offset));
+ }
+
+ void load_erl_bits_state(arm::Gp to) {
+ int offset =
+ offsetof(ErtsSchedulerRegisters, aux_regs.d.erl_bits_state);
+
+ lea(to, getSchedulerRegRef(offset));
+ }
+
+ void emit_assert_redzone_unused() {
+#ifdef JIT_HARD_DEBUG
+ const int REDZONE_BYTES = S_REDZONE * sizeof(Eterm);
+ Label next = a.newLabel();
+
+ a.sub(SUPER_TMP, E, imm(REDZONE_BYTES));
+ a.cmp(HTOP, SUPER_TMP);
+
+ a.cond_ls().b(next);
+ a.udf(0xbeef);
+
+ a.bind(next);
+#endif
+ }
+
+ /*
+ * Calls an Erlang function.
+ */
+ template<typename Any>
+ void erlang_call(Any Target) {
+ emit_assert_redzone_unused();
+ aligned_call(Target);
+ }
+
+ void branch(arm::Mem target) {
+ a.ldr(SUPER_TMP, target);
+ a.br(SUPER_TMP);
+ }
+
+ template<typename FuncPtr>
+ void aligned_call(FuncPtr(*target)) {
+ mov_imm(SUPER_TMP, target);
+ a.blr(SUPER_TMP);
+ }
+
+ void aligned_call(Label target) {
+ a.bl(target);
+ }
+
+ void aligned_call(arm::Gp target) {
+ a.blr(target);
+ }
+
+ /* Calls the given address. In DEBUG builds, make
+ * sure that the CP is aligned. */
+ template<typename OperandType>
+ void aligned_call(OperandType target) {
+ ERTS_CT_ASSERT(_CPMASK == 3);
+ ASSERT(is_CP(a.offset()));
+ a.ldr(TMP1, target);
+ a.blr(TMP1);
+ }
+
+ void runtime_call(arm::Gp func, unsigned args) {
+ ASSERT(args < 5);
+ a.blr(func);
+ }
+
+ template<typename T>
+ struct function_arity;
+ template<typename T, typename... Args>
+ struct function_arity<T(Args...)>
+ : std::integral_constant<int, sizeof...(Args)> {};
+
+ template<int expected_arity, typename T>
+ void runtime_call(T(*func)) {
+ static_assert(expected_arity == function_arity<T>());
+
+ a.mov(TMP1, func);
+ a.blr(TMP1);
+ }
+
+ /* Explicitly position-independent absolute jump, for use in fragments that
+ * need to be memcpy'd for performance reasons (e.g. NIF stubs) */
+ template<typename T>
+ void pic_jmp(T(*addr)) {
+ a.mov(SUPER_TMP, addr);
+ a.br(SUPER_TMP);
+ }
+
+ constexpr arm::Mem getArgRef(const ArgVal &val) const {
+ switch (val.getType()) {
+ case ArgVal::FReg:
+ return getFRef(val.getValue());
+ case ArgVal::XReg:
+ return getXRef(val.getValue());
+ case ArgVal::YReg:
+ return getYRef(val.getValue());
+ default:
+ ERTS_ASSERT(!"NYI");
+ return arm::Mem();
+ }
+ }
+
+ /* Returns the current code address for the export entry in `Src`
+ *
+ * Export tracing, save_calls, etc is implemented by shared fragments that
+ * assume that the export entry is in ARG1, so we have to copy it over if it
+ * isn't already. */
+ arm::Mem emit_setup_export_call(const arm::Gp &Src) {
+ return emit_setup_export_call(Src, active_code_ix);
+ }
+
+ arm::Mem emit_setup_export_call(const arm::Gp &Src,
+ const arm::Gp &CodeIndex) {
+ if (ARG1 != Src) {
+ a.mov(ARG1, Src);
+ }
+ ERTS_CT_ASSERT(offsetof(Export, addresses) == 0);
+ return arm::Mem(ARG1, CodeIndex, arm::lsl(3));
+ }
+
+ enum Update : int {
+ eStack = (1 << 0),
+ eHeap = (1 << 1),
+ eReductions = (1 << 2),
+ eCodeIndex = (1 << 3),
+ eXRegs = (1 << 4)
+ };
+
+ void emit_enter_erlang_frame() {
+ a.str(a64::x30, arm::Mem(E, -8).pre());
+ }
+
+ void emit_leave_erlang_frame() {
+ a.ldr(a64::x30, arm::Mem(E).post(8));
+ }
+
+ void emit_enter_runtime_frame() {
+ a.stp(a64::x29, a64::x30, arm::Mem(a64::sp, -16).pre());
+ a.mov(a64::x29, a64::sp);
+ }
+
+ void emit_leave_runtime_frame() {
+ a.mov(a64::sp, a64::x29);
+ a.ldp(a64::x29, a64::x30, arm::Mem(a64::sp).post(16));
+ }
+
+ /* We keep the first six X registers in machine registers. Some of those
+ * registers are callee-saved and some are caller-saved.
+ *
+ * We ignore the ones above `live` to reduce the save/restore traffic on
+ * these registers. It's enough for this figure to be at least as high as
+ * the number of actually live registers, and we default to all six
+ * registers when we don't know the exact number.
+ *
+ * Furthermore, we only save the callee-save registers when told to sync
+ * sync all registers with the `Update::eXRegs` flag, as this is very
+ * rarely needed. */
+
+ template<int Spec = 0>
+ void emit_enter_runtime(int live = num_register_backed_xregs) {
+ ERTS_CT_ASSERT((Spec & (Update::eReductions | Update::eStack |
+ Update::eHeap | Update::eXRegs)) == Spec);
+
+ if ((Spec & Update::eStack) && (Spec & Update::eHeap)) {
+ /* Store HTOP and E in one go. */
+ ERTS_CT_ASSERT_FIELD_PAIR(Process, htop, stop);
+ a.stp(HTOP, E, arm::Mem(c_p, offsetof(Process, htop)));
+ } else if (Spec & Update::eStack) {
+ a.str(E, arm::Mem(c_p, offsetof(Process, stop)));
+ } else if (Spec & Update::eHeap) {
+ a.str(HTOP, arm::Mem(c_p, offsetof(Process, htop)));
+ }
+
+ if (Spec & Update::eReductions) {
+ a.str(FCALLS, arm::Mem(c_p, offsetof(Process, fcalls)));
+ }
+
+ /* Save register-backed X registers to the X register array when
+ * needed. The backing registers must NOT be used afterwards.
+ *
+ * In a DEBUG build, the backing X registers will be overwritten with
+ * garbage values. */
+ if (live > 0) {
+ int num_to_save = MIN(live, ERTS_HIGHEST_CALLER_SAVE_XREG + 1);
+ int i;
+
+ if (Spec & Update::eXRegs) {
+ i = ERTS_LOWEST_CALLEE_SAVE_XREG;
+ } else {
+ /* If we don't need to sync the X register array, then we can
+ * get away with saving only the fragile X registers. */
+ i = ERTS_LOWEST_CALLER_SAVE_XREG;
+ }
+
+#ifdef DEBUG
+ /* Destroy the saved X registers to find bugs sooner.*/
+ if (i < num_to_save) {
+ mov_imm(SUPER_TMP, bad_boxed_ptr + 0x20 + (Spec << 8));
+ }
+#endif
+
+ while (i < num_to_save - 1) {
+ a.stp(register_backed_xregs[i + 0],
+ register_backed_xregs[i + 1],
+ getXRef(i));
+
+#ifdef DEBUG
+ a.mov(register_backed_xregs[i + 0], SUPER_TMP);
+ a.mov(register_backed_xregs[i + 1], SUPER_TMP);
+#endif
+
+ i += 2;
+ }
+
+ if (i < num_to_save) {
+ a.str(register_backed_xregs[i], getXRef(i));
+
+#ifdef DEBUG
+ a.mov(register_backed_xregs[i], SUPER_TMP);
+#endif
+ }
+ }
+ }
+
+ template<int Spec = 0>
+ void emit_leave_runtime(int live = num_register_backed_xregs) {
+ ERTS_CT_ASSERT(
+ (Spec & (Update::eReductions | Update::eStack | Update::eHeap |
+ Update::eXRegs | Update::eCodeIndex)) == Spec);
+
+ if ((Spec & Update::eStack) && (Spec & Update::eHeap)) {
+ /* Load HTOP and E in one go. */
+ ERTS_CT_ASSERT_FIELD_PAIR(Process, htop, stop);
+ a.ldp(HTOP, E, arm::Mem(c_p, offsetof(Process, htop)));
+ } else if (Spec & Update::eHeap) {
+ a.ldr(HTOP, arm::Mem(c_p, offsetof(Process, htop)));
+ } else if (Spec & Update::eStack) {
+ a.ldr(E, arm::Mem(c_p, offsetof(Process, stop)));
+ }
+
+ if (Spec & Update::eReductions) {
+ a.ldr(FCALLS, arm::Mem(c_p, offsetof(Process, fcalls)));
+ }
+
+ if (Spec & Update::eCodeIndex) {
+ /* Updates the local copy of the active code index, retaining
+ * save_calls if active. */
+ mov_imm(SUPER_TMP, &the_active_code_index);
+ a.ldr(SUPER_TMP.w(), arm::Mem(SUPER_TMP));
+ a.cmp(active_code_ix, imm(ERTS_SAVE_CALLS_CODE_IX));
+ a.csel(active_code_ix, active_code_ix, SUPER_TMP, arm::Cond::kEQ);
+ }
+
+ /* Restore register-backed X registers from the X register array when
+ * needed. The register array must NOT be used afterwards.
+ *
+ * In a DEBUG build, the register array will be overwritten with
+ * garbage values. */
+ if (live > 0) {
+ int num_to_restore = MIN(live, ERTS_HIGHEST_CALLER_SAVE_XREG + 1);
+ int i;
+
+ if (Spec & Update::eXRegs) {
+ i = ERTS_LOWEST_CALLEE_SAVE_XREG;
+ } else {
+ /* If we don't need to sync the X register array, then we can
+ * get away with loading only the fragile X registers. */
+ i = ERTS_LOWEST_CALLER_SAVE_XREG;
+ }
+
+#ifdef DEBUG
+ /* Destroy the restored X registers to find bugs sooner.*/
+ if (i < num_to_restore) {
+ mov_imm(SUPER_TMP, bad_boxed_ptr + 0x80 + (Spec << 8));
+ }
+#endif
+
+ while (i < num_to_restore - 1) {
+ a.ldp(register_backed_xregs[i],
+ register_backed_xregs[i + 1],
+ getXRef(i));
+
+#ifdef DEBUG
+ a.stp(SUPER_TMP, SUPER_TMP, getXRef(i));
+#endif
+
+ i += 2;
+ }
+
+ if (i < num_to_restore) {
+ a.ldr(register_backed_xregs[i], getXRef(i));
+
+#ifdef DEBUG
+ a.str(SUPER_TMP, getXRef(i));
+#endif
+ }
+ }
+ }
+
+ void emit_is_boxed(Label Fail, arm::Gp Src) {
+ const int bitNumber = 0;
+ ERTS_CT_ASSERT(_TAG_PRIMARY_MASK - TAG_PRIMARY_BOXED ==
+ (1 << bitNumber));
+ a.tbnz(Src, imm(bitNumber), Fail);
+ }
+
+ arm::Gp emit_ptr_val(arm::Gp Dst, arm::Gp Src) {
+#if !defined(TAG_LITERAL_PTR)
+ return Src;
+#else
+ /* We intentionally skip TAG_PTR_MASK__ here, as we want to use
+ * plain `emit_boxed_val` when we know the argument can't be a literal,
+ * such as in bit-syntax matching.
+ *
+ * This comes at very little cost as `emit_boxed_val` nearly always has
+ * a displacement. */
+ a.and_(Dst, Src, imm(~TAG_LITERAL_PTR));
+ return Dst;
+#endif
+ }
+
+ void emit_untag_ptr(arm::Gp Dst, arm::Gp Src) {
+ a.and_(Dst, Src, imm(~TAG_PTR_MASK__));
+ }
+
+ constexpr arm::Mem emit_boxed_val(arm::Gp Src, int32_t bytes = 0) const {
+ ASSERT(bytes % sizeof(Eterm) == 0);
+ return arm::Mem(Src, bytes - TAG_PRIMARY_BOXED);
+ }
+
+ void emit_branch_if_not_value(arm::Gp reg, Label lbl) {
+ emit_branch_if_eq(reg, THE_NON_VALUE, lbl);
+ }
+
+ void emit_branch_if_value(arm::Gp reg, Label lbl) {
+ emit_branch_if_ne(reg, THE_NON_VALUE, lbl);
+ }
+
+ void emit_branch_if_eq(arm::Gp reg, Uint value, Label lbl) {
+ if (value == 0) {
+ a.cbz(reg, lbl);
+ } else {
+ a.cmp(reg, imm(value));
+ a.cond_eq().b(lbl);
+ }
+ }
+
+ void emit_branch_if_ne(arm::Gp reg, Uint value, Label lbl) {
+ if (value == 0) {
+ a.cbnz(reg, lbl);
+ } else {
+ a.cmp(reg, imm(value));
+ a.cond_ne().b(lbl);
+ }
+ }
+
+ /* Set the Z flag if Reg1 and Reg2 are both immediates. */
+ void emit_are_both_immediate(arm::Gp Reg1, arm::Gp Reg2) {
+ ERTS_CT_ASSERT(TAG_PRIMARY_IMMED1 == _TAG_PRIMARY_MASK);
+ a.and_(SUPER_TMP, Reg1, Reg2);
+ a.and_(SUPER_TMP, SUPER_TMP, imm(_TAG_PRIMARY_MASK));
+ a.cmp(SUPER_TMP, imm(TAG_PRIMARY_IMMED1));
+ }
+
+ /* Set the Z flag if Reg1 and Reg2 are definitely not equal based
+ * on their tags alone. (They may still be equal if both are
+ * immediates and all other bits are equal too.) */
+ void emit_is_unequal_based_on_tags(arm::Gp Reg1, arm::Gp Reg2) {
+ ERTS_CT_ASSERT(TAG_PRIMARY_IMMED1 == _TAG_PRIMARY_MASK);
+ ERTS_CT_ASSERT((TAG_PRIMARY_LIST | TAG_PRIMARY_BOXED) ==
+ TAG_PRIMARY_IMMED1);
+ a.orr(SUPER_TMP, Reg1, Reg2);
+ a.and_(SUPER_TMP, SUPER_TMP, imm(_TAG_PRIMARY_MASK));
+
+ /*
+ * SUPER_TMP will be now be TAG_PRIMARY_IMMED1 if either
+ * one or both registers are immediates, or if one register
+ * is a list and the other a boxed.
+ */
+ a.cmp(SUPER_TMP, imm(TAG_PRIMARY_IMMED1));
+ }
+
+ template<typename T>
+ void mov_imm(arm::Gp to, T value) {
+ static_assert(std::is_integral<T>::value || std::is_pointer<T>::value);
+ if (value) {
+ a.mov(to, imm(value));
+ } else {
+ a.mov(to, ZERO);
+ }
+ }
+
+ void mov_imm(arm::Gp to, std::nullptr_t value) {
+ (void)value;
+ mov_imm(to, 0);
+ }
+
+ void sub(arm::Gp to, arm::Gp src, int64_t val) {
+ if (val < 0) {
+ add(to, src, -val);
+ } else if (val < (1 << 24)) {
+ if (val & 0xFFF) {
+ a.sub(to, src, val & 0xFFF);
+ }
+
+ if (val & 0xFFF000) {
+ a.sub(to, src, val & 0xFFF000);
+ }
+ } else {
+ mov_imm(SUPER_TMP, val);
+ a.sub(to, src, SUPER_TMP);
+ }
+ }
+
+ void add(arm::Gp to, arm::Gp src, int64_t val) {
+ if (val < 0) {
+ sub(to, src, -val);
+ } else if (val < (1 << 24)) {
+ if (val & 0xFFF) {
+ a.add(to, src, val & 0xFFF);
+ }
+
+ if (val & 0xFFF000) {
+ a.add(to, to, val & 0xFFF000);
+ }
+ } else {
+ mov_imm(SUPER_TMP, val);
+ a.add(to, src, SUPER_TMP);
+ }
+ }
+
+ void ldur(arm::Gp reg, arm::Mem mem) {
+ safe_9bit_imm(a64::Inst::kIdLdur, reg, mem);
+ }
+
+ void stur(arm::Gp reg, arm::Mem mem) {
+ safe_9bit_imm(a64::Inst::kIdStur, reg, mem);
+ }
+
+ void safe_9bit_imm(uint32_t instId, arm::Gp reg, arm::Mem mem) {
+ int64_t offset = mem.offset();
+
+ ASSERT(mem.hasBaseReg() && !mem.hasIndex());
+
+ if (Support::isInt9(offset)) {
+ a.emit(instId, reg, mem);
+ } else {
+ lea(SUPER_TMP, mem);
+ a.emit(instId, reg, arm::Mem(SUPER_TMP));
+ }
+ }
+
+ /*
+ * ARM has no LEA instruction. Implement our own to enable us
+ * to use helpers based on getSchedulerRegRef() that return an
+ * arm::Mem class.
+ */
+ void lea(arm::Gp to, arm::Mem mem) {
+ int64_t offset = mem.offset();
+
+ ASSERT(mem.hasBaseReg() && !mem.hasIndex());
+
+ if (offset == 0) {
+ a.mov(to, arm::GpX(mem.baseId()));
+ } else {
+ add(to, arm::GpX(mem.baseId()), offset);
+ }
+ }
+
+public:
+ void embed_rodata(const char *labelName, const char *buff, size_t size);
+ void embed_bss(const char *labelName, size_t size);
+ void embed_zeros(size_t size);
+
+ void setLogger(std::string log);
+ void setLogger(FILE *log);
+
+ template<typename... Ts>
+ void comment(const char *format, Ts... args) {
+ if (logger.file()) {
+ char buff[1024];
+ erts_snprintf(buff, sizeof(buff), format, args...);
+ a.commentf("# %s", buff);
+ }
+ }
+
+ struct AsmRange {
+ ErtsCodePtr start;
+ ErtsCodePtr stop;
+ std::string name;
+
+ /* Not used yet */
+ std::string file;
+ unsigned line;
+ };
+
+ void update_gdb_jit_info(std::string modulename,
+ std::vector<AsmRange> &functions);
+
+ void embed(void *data, uint32_t size) {
+ a.embed((char *)data, size);
+ }
+};
+
+class BeamGlobalAssembler : public BeamAssembler {
+ typedef void (BeamGlobalAssembler::*emitFptr)(void);
+ typedef void (*fptr)(void);
+
+ /* Please keep this in alphabetical order. */
+#define BEAM_GLOBAL_FUNCS(_) \
+ _(apply_fun_shared) \
+ _(arith_compare_shared) \
+ _(bif_nif_epilogue) \
+ _(bif_export_trap) \
+ _(bif_bit_size_body) \
+ _(bif_bit_size_guard) \
+ _(bif_byte_size_body) \
+ _(bif_byte_size_guard) \
+ _(bif_element_body_shared) \
+ _(bif_element_guard_shared) \
+ _(bif_is_eq_exact_shared) \
+ _(bif_is_ne_exact_shared) \
+ _(bif_tuple_size_body) \
+ _(bif_tuple_size_guard) \
+ _(bs_add_guard_shared) \
+ _(bs_add_body_shared) \
+ _(bs_get_tail_shared) \
+ _(bs_size_check_shared) \
+ _(call_bif_shared) \
+ _(call_light_bif_shared) \
+ _(call_nif_yield_helper) \
+ _(catch_end_shared) \
+ _(call_nif_early) \
+ _(call_nif_shared) \
+ _(check_float_error) \
+ _(debug_bp) \
+ _(dispatch_bif) \
+ _(dispatch_nif) \
+ _(dispatch_return) \
+ _(dispatch_save_calls) \
+ _(export_trampoline) \
+ _(fconv_shared) \
+ _(handle_and_error) \
+ _(handle_call_fun_error) \
+ _(handle_hd_error) \
+ _(handle_map_size_error) \
+ _(handle_not_error) \
+ _(handle_or_error) \
+ _(handle_tl_error) \
+ _(garbage_collect) \
+ _(generic_bp_global) \
+ _(generic_bp_local) \
+ _(i_band_body_shared) \
+ _(i_bnot_body_shared) \
+ _(i_bnot_guard_shared) \
+ _(i_bor_body_shared) \
+ _(i_bif_body_shared) \
+ _(i_bif_guard_shared) \
+ _(i_bsr_body_shared) \
+ _(i_bsl_body_shared) \
+ _(i_func_info_shared) \
+ _(i_length_guard_shared) \
+ _(i_length_body_shared) \
+ _(i_loop_rec_shared) \
+ _(i_new_small_map_lit_shared) \
+ _(i_test_yield_shared) \
+ _(i_bxor_body_shared) \
+ _(int_div_rem_body_shared) \
+ _(int_div_rem_guard_shared) \
+ _(minus_body_shared) \
+ _(new_map_shared) \
+ _(update_map_assoc_shared) \
+ _(unloaded_fun) \
+ _(plus_body_shared) \
+ _(process_exit) \
+ _(process_main) \
+ _(raise_exception) \
+ _(raise_exception_shared) \
+ _(times_body_shared) \
+ _(times_guard_shared) \
+ _(unary_minus_body_shared) \
+ _(update_map_exact_guard_shared) \
+ _(update_map_exact_body_shared)
+
+/* Labels exported from within process_main */
+#define PROCESS_MAIN_LABELS(_) \
+ _(context_switch) \
+ _(context_switch_simplified) \
+ _(do_schedule)
+
+#define DECL_ENUM(NAME) NAME,
+
+ enum GlobalLabels : uint32_t {
+ BEAM_GLOBAL_FUNCS(DECL_ENUM) PROCESS_MAIN_LABELS(DECL_ENUM)
+ };
+#undef DECL_ENUM
+
+ static const std::map<GlobalLabels, emitFptr> emitPtrs;
+ static const std::map<GlobalLabels, std::string> labelNames;
+ std::unordered_map<GlobalLabels, Label> labels;
+ std::unordered_map<GlobalLabels, fptr> ptrs;
+
+#define DECL_FUNC(NAME) void emit_##NAME(void);
+
+ BEAM_GLOBAL_FUNCS(DECL_FUNC);
+#undef DECL_FUNC
+
+ template<typename T>
+ void emit_bitwise_fallback_body(T(*func_ptr), const ErtsCodeMFA *mfa);
+
+ void emit_i_length_common(Label fail, int state_size);
+
+ void emit_raise_badarg(const ErtsCodeMFA *mfa);
+
+ void emit_bif_bit_size_helper(Label fail);
+ void emit_bif_byte_size_helper(Label fail);
+ void emit_bif_element_helper(Label fail);
+ void emit_bif_tuple_size_helper(Label fail);
+
+public:
+ BeamGlobalAssembler(JitAllocator *allocator);
+
+ void (*get(GlobalLabels lbl))(void) {
+ ASSERT(ptrs[lbl]);
+ return ptrs[lbl];
+ }
+
+#define GET_CODE(NAME) \
+ void (*get_##NAME(void))() { \
+ return get(NAME); \
+ }
+
+ BEAM_GLOBAL_FUNCS(GET_CODE)
+ PROCESS_MAIN_LABELS(GET_CODE)
+#undef GET_CODE
+};
+
+class BeamModuleAssembler : public BeamAssembler {
+ typedef unsigned BeamLabel;
+
+ /* Map of BEAM label number to asmjit Label. These should not be used
+ * directly by most instructions because of displacement limits, use
+ * `resolve_beam_label` instead. */
+ typedef std::unordered_map<BeamLabel, Label> LabelMap;
+ LabelMap rawLabels;
+
+ /* Map of label number to function name. Only defined for the
+ * entry label of a function. This map will be populated and
+ * used only when assembly output has been requested. */
+ typedef std::unordered_map<BeamLabel, std::string> LabelNames;
+ LabelNames labelNames;
+
+ /* Sequence number used to create unique named labels by
+ * resolve_label(). Only used when assembly output has been
+ * requested. */
+ long labelSeq = 0;
+
+ struct patch {
+ Label where;
+ uint64_t val_offs;
+ };
+
+ struct patch_catch {
+ struct patch patch;
+ Label handler;
+ };
+ std::vector<struct patch_catch> catches;
+
+ /* Map of import entry to patch labels and mfa */
+ struct patch_import {
+ std::vector<struct patch> patches;
+ ErtsCodeMFA mfa;
+ };
+ typedef std::unordered_map<unsigned, struct patch_import> ImportMap;
+ ImportMap imports;
+
+ /* Map of fun entry to patch labels */
+ struct patch_lambda {
+ std::vector<struct patch> patches;
+ Label trampoline;
+ };
+ typedef std::unordered_map<unsigned, struct patch_lambda> LambdaMap;
+ LambdaMap lambdas;
+
+ /* Map of literals to patch labels */
+ struct patch_literal {
+ std::vector<struct patch> patches;
+ };
+ typedef std::unordered_map<unsigned, struct patch_literal> LiteralMap;
+ LiteralMap literals;
+
+ /* All string patches */
+ std::vector<struct patch> strings;
+
+ /* All functions that have been seen so far */
+ std::vector<BeamLabel> functions;
+
+ BeamGlobalAssembler *ga;
+
+ /* Used by emit to populate the labelToMFA map */
+ Label currLabel;
+
+ /* Special shared fragments that must reside in each module. */
+ Label codeHeader;
+ Label genericBPTramp;
+
+ /* The module's on_load function, if any. */
+ Label on_load;
+
+ /* The end of the last function. Note that the dispatch table, constants,
+ * and veneers may follow. */
+ Label code_end;
+
+ Eterm mod;
+
+ /* Save the last PC for an error. */
+ size_t last_error_offset = 0;
+
+ static constexpr ptrdiff_t STUB_CHECK_INTERVAL = 4 << 10;
+ size_t last_stub_check_offset = 0;
+
+ enum Displacement : size_t {
+ /* Pessimistic estimate for helper functions, where we don't know the
+ * branch displacement or whether it will be used near label
+ * resolution.
+ *
+ * Note that we subtract the size of one instruction to handle
+ * backward displacements. */
+ dispUnknown = (32 << 10) - sizeof(Uint32) - STUB_CHECK_INTERVAL,
+
+ /* +- 32KB: `tbz`, `tbnz`, `ldr` of 8-byte literal. */
+ disp32K = (32 << 10) - sizeof(Uint32),
+
+ /* +- 1MB: `adr`, `b.cond`, `cb.cond` */
+ disp1MB = (1 << 20) - sizeof(Uint32),
+
+ /* +- 128MB: `b`, `blr` */
+ disp128MB = (128 << 20) - sizeof(Uint32),
+
+ dispMin = dispUnknown,
+ dispMax = disp128MB
+ };
+
+ static_assert(dispMin <= dispUnknown && dispMax >= disp128MB);
+ static_assert(STUB_CHECK_INTERVAL < dispMin / 2);
+
+ struct Veneer {
+ ssize_t latestOffset;
+ Label anchor;
+
+ Label target;
+
+ constexpr bool operator>(const Veneer &other) const {
+ return latestOffset > other.latestOffset;
+ }
+ };
+
+ struct Constant {
+ ssize_t latestOffset;
+ Label anchor;
+
+ ArgVal value;
+
+ constexpr bool operator>(const Constant &other) const {
+ return latestOffset > other.latestOffset;
+ }
+ };
+
+ /* ArgVal -> Constant
+ *
+ * `_pending_constants` points directly into this container, which is
+ * documented to be safe as long as we only insert elements. */
+ std::unordered_multimap<ArgVal, const Constant, ArgVal::Hash> _constants;
+
+ /* Label::id() -> Veneer
+ *
+ * `_pending_veneers` points directly into this container. */
+ std::unordered_multimap<uint32_t, const Veneer> _veneers;
+
+ template<typename T>
+ using PendingStubs =
+ std::priority_queue<std::reference_wrapper<const T>,
+ std::deque<std::reference_wrapper<const T>>,
+ std::greater<const T &>>;
+
+ /* All pending stubs, segregated by type and sorted by `latestOffset` in
+ * ascending order.
+ *
+ * We use separate queues to avoid interleaving them, as they have
+ * different sizes and alignment requirements. */
+ PendingStubs<Constant> _pending_constants;
+ PendingStubs<Veneer> _pending_veneers;
+
+ /* Maps code pointers to thunks that jump to them, letting us treat global
+ * fragments as if they were local. */
+ std::unordered_map<void (*)(), Label> _dispatchTable;
+
+public:
+ BeamModuleAssembler(BeamGlobalAssembler *ga,
+ Eterm mod,
+ unsigned num_labels,
+ BeamFile_ExportTable *named_labels = NULL);
+ BeamModuleAssembler(BeamGlobalAssembler *ga,
+ Eterm mod,
+ unsigned num_labels,
+ unsigned num_functions,
+ BeamFile_ExportTable *named_labels = NULL);
+
+ bool emit(unsigned op, const Span<ArgVal> &args);
+
+ void codegen(JitAllocator *allocator,
+ const void **executable_ptr,
+ void **writable_ptr,
+ const BeamCodeHeader *in_hdr,
+ const BeamCodeHeader **out_exec_hdr,
+ BeamCodeHeader **out_rw_hdr);
+
+ void codegen(JitAllocator *allocator,
+ const void **executable_ptr,
+ void **writable_ptr);
+
+ void codegen(char *buff, size_t len);
+
+ ErtsCodePtr getCode(unsigned label);
+ ErtsCodePtr getLambda(unsigned index);
+
+ void *getCode(Label label) {
+ return BeamAssembler::getCode(label);
+ }
+
+ byte *getCode(char *labelName) {
+ return BeamAssembler::getCode(labelName);
+ }
+
+ void embed_vararg_rodata(const Span<ArgVal> &args, a64::Gp reg);
+
+ unsigned getCodeSize() {
+ ASSERT(code.hasBaseAddress());
+ return code.codeSize();
+ }
+
+ void copyCodeHeader(BeamCodeHeader *hdr);
+ BeamCodeHeader *getCodeHeader(void);
+ const ErtsCodeInfo *getOnLoad(void);
+
+ unsigned patchCatches(char *rw_base);
+ void patchLambda(char *rw_base, unsigned index, BeamInstr I);
+ void patchLiteral(char *rw_base, unsigned index, Eterm lit);
+ void patchImport(char *rw_base, unsigned index, BeamInstr I);
+ void patchStrings(char *rw_base, const byte *string);
+
+protected:
+ /* Helpers */
+ void emit_gc_test(const ArgVal &Stack,
+ const ArgVal &Heap,
+ const ArgVal &Live);
+ void emit_gc_test_preserve(const ArgVal &Need,
+ const ArgVal &Live,
+ arm::Gp term);
+
+ arm::Mem emit_variable_apply(bool includeI);
+ arm::Mem emit_fixed_apply(const ArgVal &arity, bool includeI);
+
+ arm::Gp emit_call_fun();
+
+ arm::Gp emit_is_binary(const ArgVal &Fail,
+ const ArgVal &Src,
+ Label next,
+ Label subbin);
+
+ void emit_get_list(const arm::Gp boxed_ptr,
+ const ArgVal &Hd,
+ const ArgVal &Tl);
+
+ void emit_div_rem(const ArgVal &Fail,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ErtsCodeMFA *error_mfa);
+
+ void emit_i_bif(const ArgVal &Fail, const ArgVal &Bif, const ArgVal &Dst);
+
+ void emit_error(int code);
+
+ int emit_bs_get_field_size(const ArgVal &Size,
+ int unit,
+ Label Fail,
+ const arm::Gp &out);
+
+ void emit_bs_get_utf8(const ArgVal &Ctx, const ArgVal &Fail);
+ void emit_bs_get_utf16(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Flags);
+
+ void emit_raise_exception();
+ void emit_raise_exception(const ErtsCodeMFA *exp);
+ void emit_raise_exception(Label I, const ErtsCodeMFA *exp);
+
+ void emit_validate(const ArgVal &arity);
+ void emit_bs_skip_bits(const ArgVal &Fail, const ArgVal &Ctx);
+
+ void emit_linear_search(arm::Gp val, Label fail, const Span<ArgVal> &args);
+
+ void emit_float_instr(uint32_t instId,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst);
+
+ void emit_validate_unicode(Label next, Label fail, arm::Gp value);
+
+ void emit_bif_is_eq_ne_exact_immed(const ArgVal &Src,
+ const ArgVal &Immed,
+ const ArgVal &Dst,
+ Eterm fail_value,
+ Eterm succ_value);
+
+ void emit_proc_lc_unrequire(void);
+ void emit_proc_lc_require(void);
+
+ void emit_nyi(const char *msg);
+ void emit_nyi(void);
+
+ /* Returns a vector of the untagged and rebased `args`. The adjusted
+ * `comparand` is stored in ARG1. */
+ const std::vector<ArgVal> emit_select_untag(const Span<ArgVal> &args,
+ a64::Gp comparand,
+ Label fail,
+ UWord base,
+ int shift);
+
+ void emit_binsearch_nodes(arm::Gp reg,
+ size_t Left,
+ size_t Right,
+ Label fail,
+ const Span<ArgVal> &args);
+
+ bool emit_optimized_three_way_select(arm::Gp reg,
+ Label fail,
+ const Span<ArgVal> &args);
+
+#ifdef DEBUG
+ void emit_tuple_assertion(const ArgVal &Src, arm::Gp tuple_reg);
+#endif
+
+#include "beamasm_protos.h"
+
+ /* Resolves a BEAM label.
+ *
+ * When the branch type is not `dispUnknown`, this must be used
+ * _IMMEDIATELY BEFORE_ the instruction that the label is used in. */
+ Label resolve_beam_label(const ArgVal &Label, enum Displacement disp);
+ Label resolve_label(Label target,
+ enum Displacement disp,
+ std::string *name = nullptr);
+
+ /* Resolves a shared fragment, creating a trampoline that loads the
+ * appropriate address before jumping there.
+ *
+ * When the branch type is not `dispUnknown`, this must be used
+ * _IMMEDIATELY BEFORE_ the instruction that the label is used in. */
+ Label resolve_fragment(void (*fragment)(), enum Displacement disp);
+
+ /* Embeds a constant argument and returns its address. All kinds of
+ * constants are accepted, including labels and export entries.
+ *
+ * When the branch type is not `dispUnknown`, this must be used
+ * _IMMEDIATELY BEFORE_ the instruction that the label is used in. */
+ arm::Mem embed_constant(const ArgVal &value, enum Displacement disp);
+
+ /* Convenience wrapper for embedding raw pointers or immediates. */
+ template<typename T>
+ arm::Mem embed_constant(T data, enum Displacement disp) {
+ static_assert(std::is_integral<T>::value || std::is_pointer<T>::value);
+ return embed_constant(ArgVal(ArgVal::Word, (UWord)data), disp);
+ }
+
+ /* Binds a label and all related veneers that are within reach of it. */
+ void bind_veneer_target(const Label &target);
+
+ void emit_constant(const Constant &constant);
+ void emit_veneer(const Veneer &veneer);
+
+ /* Unconditionally emits all veneers and constants that are due within
+ * `range` bytes. */
+ void flush_pending_stubs(size_t range);
+
+ /* Emits pending veneers when appropriate. Must be called at least once
+ * every `STUB_CHECK_INTERVAL` bytes for veneers and constants to work. */
+ void check_pending_stubs();
+
+ /* Calls the given shared fragment, ensuring that the redzone is unused and
+ * that the return address forms a valid CP. */
+ template<typename Any>
+ void fragment_call(Any Target) {
+ emit_assert_redzone_unused();
+
+#if defined(JIT_HARD_DEBUG)
+ /* Verify that the stack has not grown. */
+ Label next = a.newLabel();
+ a.ldr(SUPER_TMP, getInitialSPRef());
+ a.cmp(a64::sp, SUPER_TMP);
+ a.cond_eq().b(next);
+ a.udf(0xdead);
+ a.bind(next);
+#endif
+
+ a.bl(resolve_fragment((void (*)())Target, disp128MB));
+ }
+
+ template<typename T>
+ struct function_arity;
+ template<typename T, typename... Args>
+ struct function_arity<T(Args...)>
+ : std::integral_constant<int, sizeof...(Args)> {};
+
+ template<int expected_arity, typename T>
+ void runtime_call(T(*func)) {
+ static_assert(expected_arity == function_arity<T>());
+
+ a.bl(resolve_fragment((void (*)())func, disp128MB));
+ }
+
+ bool isRegisterBacked(const ArgVal &arg) {
+ switch (arg.getType()) {
+ case ArgVal::XReg:
+ return arg.getValue() < num_register_backed_xregs;
+ case ArgVal::FReg:
+ return arg.getValue() < num_register_backed_fregs;
+ default:
+ return false;
+ }
+ }
+
+ template<typename RegType = arm::Gp>
+ struct Variable {
+ RegType reg;
+ arm::Mem mem;
+
+ Variable(RegType _r) : Variable(_r, arm::Mem()) {
+ }
+ Variable(RegType _r, arm::Mem _mem) : reg(_r), mem(_mem) {
+ }
+ };
+
+ Variable<arm::Gp> init_destination(const ArgVal &arg, arm::Gp tmp) {
+ /* We don't support storing into GpW since their maximum displacement
+ * is 16K, which means we have to check stubs far more often. */
+ ASSERT(tmp.isGpX());
+
+ if (isRegisterBacked(arg)) {
+ arm::Gp reg = register_backed_xregs[arg.getValue()];
+ return Variable(reg);
+ } else {
+ return Variable(tmp, getArgRef(arg));
+ }
+ }
+
+ Variable<arm::VecD> init_destination(const ArgVal &arg, arm::VecD tmp) {
+ if (isRegisterBacked(arg)) {
+ return Variable(register_backed_fregs[arg.getValue()]);
+ } else {
+ return Variable(tmp, getArgRef(arg));
+ }
+ }
+
+ Variable<arm::Gp> load_source(const ArgVal &arg, arm::Gp tmp) {
+ /* We don't support loading into GpW since their maximum displacement
+ * is 16K, which means we have to check stubs far more often. */
+ ASSERT(tmp.isGpX());
+
+ if (arg.isLiteral()) {
+ a.ldr(tmp, embed_constant(arg, disp32K));
+ return Variable(tmp);
+ } else if (isRegisterBacked(arg)) {
+ arm::Gp xreg = register_backed_xregs[arg.getValue()];
+ return Variable(xreg);
+ } else if (arg.isConstant()) {
+ if ((arg.isImmed() || arg.isWord()) &&
+ Support::isIntOrUInt32(arg.getValue())) {
+ mov_imm(tmp, arg.getValue());
+ } else {
+ a.ldr(tmp, embed_constant(arg, disp32K));
+ }
+
+ return Variable(tmp);
+ } else {
+ /* Register */
+ a.ldr(tmp, getArgRef(arg));
+ return Variable(tmp, getArgRef(arg));
+ }
+ }
+
+ auto load_sources(const ArgVal &Src1,
+ arm::Gp tmp1,
+ const ArgVal &Src2,
+ arm::Gp tmp2) {
+ if (Src1.isRegister() && Src2.isRegister() && !isRegisterBacked(Src1) &&
+ !isRegisterBacked(Src2)) {
+ switch (ArgVal::register_relation(Src1, Src2)) {
+ case ArgVal::Relation::consecutive:
+ safe_ldp(tmp1, tmp2, Src1, Src2);
+ return std::make_pair(Variable(tmp1, getArgRef(Src1)),
+ Variable(tmp2, getArgRef(Src2)));
+ case ArgVal::Relation::reverse_consecutive:
+ safe_ldp(tmp2, tmp1, Src2, Src1);
+ return std::make_pair(Variable(tmp1, getArgRef(Src1)),
+ Variable(tmp2, getArgRef(Src2)));
+ case ArgVal::Relation::none:
+ break;
+ }
+ }
+
+ return std::make_pair(load_source(Src1, tmp1), load_source(Src2, tmp2));
+ }
+
+ Variable<arm::VecD> load_source(const ArgVal &arg, arm::VecD tmp) {
+ if (isRegisterBacked(arg)) {
+ return Variable<arm::VecD>(register_backed_fregs[arg.getValue()]);
+ } else {
+ /* Register */
+ a.ldr(tmp, getArgRef(arg));
+ return Variable<arm::VecD>(tmp);
+ }
+ }
+
+ void mov_var(const Variable<arm::Gp> &to, const Variable<arm::Gp> &from) {
+ mov_var(to.reg, from);
+ }
+
+ void mov_var(const Variable<arm::Gp> &to, arm::Gp from) {
+ if (to.reg != from) {
+ a.mov(to.reg, from);
+ }
+ }
+
+ void mov_var(arm::Gp to, const Variable<arm::Gp> &from) {
+ if (to != from.reg) {
+ a.mov(to, from.reg);
+ }
+ }
+
+ void flush_var(const Variable<arm::Gp> &to) {
+ if (to.mem.hasBase()) {
+ a.str(to.reg, to.mem);
+ }
+ }
+
+ void flush_var(const Variable<arm::VecD> &to) {
+ if (to.mem.hasBase()) {
+ a.str(to.reg, to.mem);
+ }
+ }
+
+ void flush_vars(const Variable<arm::Gp> &to1,
+ const Variable<arm::Gp> &to2) {
+ const arm::Mem &mem1 = to1.mem;
+ const arm::Mem &mem2 = to2.mem;
+
+ if (mem1.hasBaseReg() && mem2.hasBaseReg() &&
+ mem1.baseId() == mem2.baseId()) {
+ if (mem1.offset() + 8 == mem2.offset()) {
+ safe_stp(to1.reg, to2.reg, mem1);
+ return;
+ } else if (mem1.offset() == mem2.offset() + 8) {
+ safe_stp(to2.reg, to1.reg, mem2);
+ return;
+ }
+ }
+
+ /* Not possible to optimize with stp. */
+ flush_var(to1);
+ flush_var(to2);
+ }
+
+ void mov_arg(const ArgVal &To, const ArgVal &From) {
+ if (isRegisterBacked(To)) {
+ auto to = init_destination(To, SUPER_TMP);
+ auto from = load_source(From, to.reg);
+ mov_var(to, from);
+ flush_var(to);
+ } else {
+ auto from = load_source(From, SUPER_TMP);
+ auto to = init_destination(To, from.reg);
+ mov_var(to, from);
+ flush_var(to);
+ }
+ }
+
+ void mov_arg(const ArgVal &To, arm::Mem From) {
+ auto to = init_destination(To, SUPER_TMP);
+ a.ldr(to.reg, From);
+ flush_var(to);
+ }
+
+ void mov_arg(arm::Mem To, const ArgVal &From) {
+ auto from = load_source(From, SUPER_TMP);
+ auto to = Variable(from.reg, To);
+ flush_var(to);
+ }
+
+ void mov_arg(arm::Gp to, const ArgVal &from) {
+ auto r = load_source(from, to);
+ if (r.reg != to) {
+ a.mov(to, r.reg);
+ }
+ }
+
+ void mov_arg(const ArgVal &to, arm::Gp from) {
+ auto r = init_destination(to, from);
+ if (r.reg != from) {
+ a.mov(r.reg, from);
+ }
+ flush_var(r);
+ }
+
+ void cmp_arg(arm::Gp gp, const ArgVal &val) {
+ if ((val.isImmed() || val.isWord())) {
+ if (Support::isUInt12((Sint)val.getValue())) {
+ a.cmp(gp, imm(val.getValue()));
+ } else if (Support::isUInt12(-(Sint)val.getValue())) {
+ a.adds(ZERO, gp, imm(-(Sint)val.getValue()));
+ } else {
+ mov_arg(SUPER_TMP, val);
+ a.cmp(gp, SUPER_TMP);
+ }
+ } else {
+ mov_arg(SUPER_TMP, val);
+ a.cmp(gp, SUPER_TMP);
+ }
+ }
+
+ void safe_stp(arm::Gp gp1,
+ arm::Gp gp2,
+ const ArgVal &Dst1,
+ const ArgVal &Dst2) {
+ ASSERT(ArgVal::register_relation(Dst1, Dst2) ==
+ ArgVal::Relation::consecutive);
+ safe_stp(gp1, gp2, getArgRef(Dst1));
+ }
+
+ void safe_stp(arm::Gp gp1, arm::Gp gp2, arm::Mem mem) {
+ int64_t offset = mem.offset();
+
+ ASSERT(gp1.isGpX() && gp2.isGpX());
+
+ if (offset <= sizeof(Eterm) * MAX_LDP_STP_DISPLACEMENT) {
+ a.stp(gp1, gp2, mem);
+ } else {
+ a.str(gp1, mem);
+ a.str(gp2, mem.cloneAdjusted(sizeof(Eterm)));
+ }
+ }
+
+ void safe_ldr(arm::Gp gp, arm::Mem mem) {
+ int64_t offset = mem.offset();
+
+ ASSERT(mem.hasBaseReg() && !mem.hasIndex());
+ ASSERT(gp.isGpX());
+
+ if (offset < sizeof(Eterm) * 4096) {
+ a.ldr(gp, mem);
+ } else {
+ mov_imm(SUPER_TMP, offset);
+ a.add(SUPER_TMP, arm::GpX(mem.baseId()), SUPER_TMP);
+ a.ldr(gp, arm::Mem(SUPER_TMP));
+ }
+ }
+
+ void safe_ldp(arm::Gp gp1,
+ arm::Gp gp2,
+ const ArgVal &Src1,
+ const ArgVal &Src2) {
+ ASSERT(ArgVal::register_relation(Src1, Src2) ==
+ ArgVal::Relation::consecutive);
+
+ safe_ldp(gp1, gp2, getArgRef(Src1));
+ }
+
+ void safe_ldp(arm::Gp gp1, arm::Gp gp2, arm::Mem mem) {
+ int64_t offset = mem.offset();
+
+ ASSERT(gp1.isGpX() && gp2.isGpX());
+ ASSERT(gp1 != gp2);
+
+ if (offset <= sizeof(Eterm) * MAX_LDP_STP_DISPLACEMENT) {
+ a.ldp(gp1, gp2, mem);
+ } else {
+ safe_ldr(gp1, mem);
+ safe_ldr(gp2, mem.cloneAdjusted(sizeof(Eterm)));
+ }
+ }
+};
+
+void beamasm_update_perf_info(std::string modulename,
+ std::vector<BeamAssembler::AsmRange> &ranges);
diff --git a/erts/emulator/beam/jit/arm/beam_asm_global.cpp b/erts/emulator/beam/jit/arm/beam_asm_global.cpp
new file mode 100644
index 0000000000..723d2199a0
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/beam_asm_global.cpp
@@ -0,0 +1,360 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+using namespace asmjit;
+
+extern "C"
+{
+#include "bif.h"
+#include "beam_common.h"
+}
+
+#define STRINGIFY_(X) #X
+#define STRINGIFY(X) STRINGIFY_(X)
+
+#define DECL_EMIT(NAME) {NAME, &BeamGlobalAssembler::emit_##NAME},
+const std::map<BeamGlobalAssembler::GlobalLabels, BeamGlobalAssembler::emitFptr>
+ BeamGlobalAssembler::emitPtrs = {BEAM_GLOBAL_FUNCS(DECL_EMIT)};
+#undef DECL_EMIT
+
+#define DECL_LABEL_NAME(NAME) {NAME, STRINGIFY(NAME)},
+
+const std::map<BeamGlobalAssembler::GlobalLabels, std::string>
+ BeamGlobalAssembler::labelNames = {BEAM_GLOBAL_FUNCS(
+ DECL_LABEL_NAME) PROCESS_MAIN_LABELS(DECL_LABEL_NAME)};
+#undef DECL_LABEL_NAME
+
+BeamGlobalAssembler::BeamGlobalAssembler(JitAllocator *allocator)
+ : BeamAssembler("beam_asm_global") {
+ labels.reserve(emitPtrs.size());
+
+ /* These labels are defined up-front so global functions can refer to each
+ * other freely without any order dependencies. */
+ for (auto val : labelNames) {
+ std::string name = "global::" + val.second;
+ labels[val.first] = a.newNamedLabel(name.c_str());
+ }
+
+ /* Emit all of the code and bind all of the labels */
+ for (auto val : emitPtrs) {
+ a.align(kAlignCode, 8);
+ a.bind(labels[val.first]);
+ /* This funky syntax calls the function pointer within this instance
+ * of BeamGlobalAssembler */
+ (this->*val.second)();
+ }
+
+ {
+ /* We have no need of the module pointers as we use `getCode(...)` for
+ * everything. */
+ const void *_ignored_exec;
+ void *_ignored_rw;
+ _codegen(allocator, &_ignored_exec, &_ignored_rw);
+ }
+
+#ifndef WIN32
+ std::vector<AsmRange> ranges;
+
+ ranges.reserve(emitPtrs.size());
+
+ for (auto val : emitPtrs) {
+ ErtsCodePtr start = (ErtsCodePtr)getCode(labels[val.first]);
+ ErtsCodePtr stop;
+
+ if (val.first + 1 < emitPtrs.size()) {
+ stop = (ErtsCodePtr)getCode(labels[(GlobalLabels)(val.first + 1)]);
+ } else {
+ stop = (ErtsCodePtr)((char *)getBaseAddress() + code.codeSize());
+ }
+
+ ranges.push_back({.start = start,
+ .stop = stop,
+ .name = code.labelEntry(labels[val.first])->name()});
+ }
+
+ update_gdb_jit_info("global", ranges);
+ beamasm_update_perf_info("global", ranges);
+#endif
+
+ /* `this->get_xxx` are populated last to ensure that we crash if we use them
+ * instead of labels in global code. */
+
+ for (auto val : labelNames) {
+ ptrs[val.first] = (fptr)getCode(labels[val.first]);
+ }
+}
+
+/*
+ * ARG3 = (HTOP + bytes needed)
+ * ARG4 = Live registers
+ */
+void BeamGlobalAssembler::emit_garbage_collect() {
+ emit_enter_runtime_frame();
+
+ /* Convert ARG3 to words needed and move it to the correct argument slot. */
+ a.sub(ARG2, ARG3, HTOP);
+ a.lsr(ARG2, ARG2, imm(3));
+
+ /* Save our return address in c_p->i so we can tell where we crashed if we
+ * did so during GC. */
+ a.str(a64::x30, arm::Mem(c_p, offsetof(Process, i)));
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+
+ a.mov(ARG1, c_p);
+ /* ARG2 is already loaded. */
+ load_x_reg_array(ARG3);
+ /* ARG4 (live registers) is already loaded. */
+ a.mov(ARG5, FCALLS);
+ runtime_call<5>(erts_garbage_collect_nobump);
+ a.sub(FCALLS, FCALLS, ARG1);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+/* Handles trapping to exports from C code, setting registers up in the same
+ * manner a normal call_ext instruction would so that save_calls, tracing, and
+ * so on will work.
+ *
+ * Our return address is on the stack as we always come here from a BIF, so we
+ * must pop it into LR (x30) to convert this into an ordinary call. The
+ * callee will then push LR to the stack in its prologue, cancelling this out.
+ *
+ * Assumes that c_p->current points into the MFA of an export entry. */
+void BeamGlobalAssembler::emit_bif_export_trap() {
+ int export_offset = offsetof(Export, info.mfa);
+
+ a.ldr(ARG1, arm::Mem(c_p, offsetof(Process, current)));
+ a.sub(ARG1, ARG1, export_offset);
+
+ emit_leave_erlang_frame();
+
+ branch(emit_setup_export_call(ARG1));
+}
+
+/* Handles export breakpoints, error handler, jump tracing, and so on.
+ *
+ * We must be careful with LR (x30) and the stack as this runs between the
+ * caller and callee, and the latter pushes LR to the stack as part of its
+ * prologue.
+ *
+ * ARG1 = export entry
+ */
+void BeamGlobalAssembler::emit_export_trampoline() {
+ Label call_bif = a.newLabel(), error_handler = a.newLabel(),
+ jump_trace = a.newLabel();
+
+ /* What are we supposed to do? */
+ a.ldr(TMP1, arm::Mem(ARG1, offsetof(Export, trampoline.common.op)));
+
+ /* We test the generic bp first as it is most likely to be triggered in a
+ * loop. */
+ a.cmp(TMP1, imm(op_i_generic_breakpoint));
+ a.cond_eq().b(labels[generic_bp_global]);
+
+ a.cmp(TMP1, imm(op_call_bif_W));
+ a.cond_eq().b(call_bif);
+
+ a.cmp(TMP1, imm(op_call_error_handler));
+ a.cond_eq().b(error_handler);
+
+ a.cmp(TMP1, imm(op_trace_jump_W));
+ a.cond_eq().b(jump_trace);
+
+ /* Must never happen. */
+ a.udf(0xffff);
+
+ a.bind(call_bif);
+ {
+ /* Emulate a `call_bif` instruction.
+ *
+ * Note that we don't check reductions: yielding here is very tricky
+ * and error-prone, and there's little point in doing so as we can only
+ * land here directly after being scheduled in. */
+ ssize_t func_offset = offsetof(Export, trampoline.bif.address);
+
+ lea(ARG2, arm::Mem(ARG1, offsetof(Export, info.mfa)));
+ a.ldr(ARG3, arm::Mem(c_p, offsetof(Process, i)));
+ a.ldr(ARG4, arm::Mem(ARG1, func_offset));
+
+ /* `call_bif_shared` assumes that the return address has been pushed to
+ * the stack as part of the prologue, so we have to do that manually
+ * now. */
+ emit_enter_erlang_frame();
+ a.b(labels[call_bif_shared]);
+ }
+
+ a.bind(jump_trace);
+ {
+ a.ldr(TMP1, arm::Mem(ARG1, offsetof(Export, trampoline.trace.address)));
+ a.br(TMP1);
+ }
+
+ a.bind(error_handler);
+ {
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eReductions | Update::eStack |
+ Update::eHeap | Update::eXRegs>();
+
+ lea(ARG2, arm::Mem(ARG1, offsetof(Export, info.mfa)));
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG3);
+ mov_imm(ARG4, am_undefined_function);
+ runtime_call<4>(call_error_handler);
+
+ /* If there is no error_handler, any number of X registers
+ * can be live. */
+ emit_leave_runtime<Update::eReductions | Update::eStack |
+ Update::eHeap | Update::eXRegs>();
+ emit_leave_runtime_frame();
+
+ a.cbz(ARG1, labels[process_exit]);
+
+ branch(emit_setup_export_call(ARG1));
+ }
+}
+
+/*
+ * Get the error address implicitly by calling the shared fragment and using
+ * the return address as the error address.
+ */
+void BeamModuleAssembler::emit_raise_exception() {
+ emit_raise_exception(nullptr);
+}
+
+void BeamModuleAssembler::emit_raise_exception(const ErtsCodeMFA *exp) {
+ if (exp) {
+ a.ldr(ARG4, embed_constant(exp, disp32K));
+ } else {
+ a.mov(ARG4, ZERO);
+ }
+
+ fragment_call(ga->get_raise_exception());
+
+ /*
+ * It is important that error address is not equal to a line
+ * instruction that may follow this BEAM instruction. To avoid
+ * that, BeamModuleAssembler::emit() will emit a nop instruction
+ * if necessary.
+ */
+ last_error_offset = getOffset() & -8;
+}
+
+void BeamModuleAssembler::emit_raise_exception(Label I,
+ const ErtsCodeMFA *exp) {
+ a.adr(ARG2, I);
+
+ if (exp) {
+ a.ldr(ARG4, embed_constant(exp, disp32K));
+ } else {
+ a.mov(ARG4, ZERO);
+ }
+
+ a.b(resolve_fragment(ga->get_raise_exception_shared(), disp128MB));
+}
+
+void BeamGlobalAssembler::emit_process_exit() {
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ mov_imm(ARG2, 0);
+ mov_imm(ARG4, 0);
+ load_x_reg_array(ARG3);
+ runtime_call<4>(handle_error);
+
+ emit_leave_runtime();
+
+ a.cbz(ARG1, labels[do_schedule]);
+ a.udf(0xdead);
+}
+
+/* You must have already done emit_leave_runtime_frame()! */
+void BeamGlobalAssembler::emit_raise_exception() {
+ a.mov(ARG2, a64::x30);
+ a.b(labels[raise_exception_shared]);
+}
+
+void BeamGlobalAssembler::emit_raise_exception_shared() {
+ Label crash = a.newLabel();
+
+ /* Push a fake CP to ensure that we can handle a topmost frame
+ * with `catch` and an instruction raising and exception.
+ *
+ * The fake CP is discarded by handle_error() before jumping to
+ * a catch handler, and is ignored as a duplicate in stack
+ * traces because it's equal to the error address. */
+ a.str(ARG2, arm::Mem(E, -8).pre());
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+
+ /* The error address must be a valid CP or NULL. */
+ a.tst(ARG2, imm(_CPMASK));
+ a.cond_ne().b(crash);
+
+ /* ARG2 and ARG4 must be set prior to jumping here! */
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG3);
+ runtime_call<4>(handle_error);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+
+ a.cbz(ARG1, labels[do_schedule]);
+
+ /* XREG0 = THE_NON_VALUE
+ * XREG1 = class
+ * XREG2 = error reason/thrown value
+ * XREG3 = raw stacktrace. */
+ a.br(ARG1);
+
+ a.bind(crash);
+ a.udf(0xbad);
+}
+
+void BeamModuleAssembler::emit_proc_lc_unrequire(void) {
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ a.mov(ARG1, c_p);
+ mov_imm(ARG2, ERTS_PROC_LOCK_MAIN);
+ runtime_call<2>(erts_proc_lc_unrequire_lock);
+#endif
+}
+
+void BeamModuleAssembler::emit_proc_lc_require(void) {
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ a.mov(ARG1, c_p);
+ mov_imm(ARG2, ERTS_PROC_LOCK_MAIN);
+ runtime_call<4>(erts_proc_lc_require_lock);
+#endif
+}
+
+extern "C"
+{
+ /* GDB puts a breakpoint in this function.
+ *
+ * Has to be on another file than the caller as otherwise gcc may
+ * optimize away the call. */
+ void ERTS_NOINLINE __jit_debug_register_code(void);
+ void ERTS_NOINLINE __jit_debug_register_code(void) {
+ }
+}
diff --git a/erts/emulator/beam/jit/arm/beam_asm_module.cpp b/erts/emulator/beam/jit/arm/beam_asm_module.cpp
new file mode 100644
index 0000000000..17a1385fca
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/beam_asm_module.cpp
@@ -0,0 +1,854 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include <algorithm>
+#include <sstream>
+#include <float.h>
+
+#include "beam_asm.hpp"
+using namespace asmjit;
+
+static std::string getAtom(Eterm atom) {
+ Atom *ap = atom_tab(atom_val(atom));
+ return std::string((char *)ap->name, ap->len);
+}
+
+#ifdef BEAMASM_DUMP_SIZES
+# include <mutex>
+
+typedef std::pair<Uint64, Uint64> op_stats;
+
+static std::unordered_map<char *, op_stats> sizes;
+static std::mutex size_lock;
+
+extern "C" void beamasm_dump_sizes() {
+ std::lock_guard<std::mutex> lock(size_lock);
+
+ std::vector<std::pair<char *, op_stats>> flat(sizes.cbegin(), sizes.cend());
+ double total_size = 0.0;
+
+ for (const auto &op : flat) {
+ total_size += op.second.second;
+ }
+
+ /* Sort instructions by total size, in descending order. */
+ std::sort(
+ flat.begin(),
+ flat.end(),
+ [](std::pair<char *, op_stats> &a, std::pair<char *, op_stats> &b) {
+ return a.second.second > b.second.second;
+ });
+
+ for (const auto &op : flat) {
+ fprintf(stderr,
+ "%34s:\t%zu\t%f\t%zu\t%zu\r\n",
+ op.first,
+ op.second.second,
+ op.second.second / total_size,
+ op.second.first,
+ op.second.first ? (op.second.second / op.second.first) : 0);
+ }
+}
+#endif
+
+ErtsCodePtr BeamModuleAssembler::getCode(BeamLabel label) {
+ ASSERT(label < rawLabels.size() + 1);
+ return (ErtsCodePtr)getCode(rawLabels[label]);
+}
+
+ErtsCodePtr BeamModuleAssembler::getLambda(unsigned index) {
+ const auto &lambda = lambdas[index];
+ return (ErtsCodePtr)getCode(lambda.trampoline);
+}
+
+BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
+ Eterm mod,
+ unsigned num_labels,
+ BeamFile_ExportTable *named_labels)
+ : BeamAssembler(getAtom(mod)) {
+ this->ga = ga;
+ this->mod = mod;
+
+ _veneers.reserve(num_labels + 1);
+ rawLabels.reserve(num_labels + 1);
+
+ if (erts_jit_asm_dump && named_labels) {
+ BeamFile_ExportEntry *e = &named_labels->entries[0];
+ for (unsigned i = 1; i < num_labels; i++) {
+ Label lbl;
+ char tmp[512]; // Large enough to hold most realistic
+ // function names. We will truncate too
+ // long names, but as the label name is not
+ // important for the functioning of asmjit
+ // and this functionality is probably only
+ // used by developers, we don't bother with
+ // dynamic allocation.
+ // The named_labels are sorted, so no need for a search.
+ if ((unsigned)e->label == i) {
+ erts_snprintf(tmp, sizeof(tmp), "%T/%d", e->function, e->arity);
+ lbl = a.newNamedLabel(tmp);
+ labelNames[i] = tmp;
+ e++;
+ } else {
+ std::string lblName = "label_" + std::to_string(i);
+ lbl = a.newNamedLabel(lblName.data());
+ }
+ rawLabels[i] = lbl;
+ }
+ return;
+ }
+ if (erts_jit_asm_dump) {
+ // There is no naming info, but dumping of the assembly code
+ // has been requested, so do the best we can and number the
+ // labels.
+ for (unsigned i = 1; i < num_labels; i++) {
+ std::string lblName = "label_" + std::to_string(i);
+ rawLabels[i] = a.newNamedLabel(lblName.data());
+ }
+ return;
+ }
+ // No output is requested, go with unnamed labels
+ for (unsigned i = 1; i < num_labels; i++)
+ rawLabels[i] = a.newLabel();
+}
+
+BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
+ Eterm mod,
+ unsigned num_labels,
+ unsigned num_functions,
+ BeamFile_ExportTable *named_labels)
+ : BeamModuleAssembler(ga, mod, num_labels, named_labels) {
+ codeHeader = a.newLabel();
+ a.align(kAlignCode, 8);
+ a.bind(codeHeader);
+
+ embed_zeros(sizeof(BeamCodeHeader) +
+ sizeof(ErtsCodeInfo *) * num_functions);
+
+ /* Setup the early_nif/breakpoint trampoline. */
+ genericBPTramp = a.newLabel();
+ a.bind(genericBPTramp);
+ {
+ Label bp_and_nif = a.newLabel(), bp_only = a.newLabel(),
+ nif_only = a.newLabel();
+
+ a.cmp(ARG1, imm(ERTS_ASM_BP_FLAG_BP_NIF_CALL_NIF_EARLY));
+ a.cond_eq().b(bp_and_nif);
+ ERTS_CT_ASSERT((1 << 0) == ERTS_ASM_BP_FLAG_CALL_NIF_EARLY);
+ a.tbnz(ARG1, imm(0), nif_only);
+ ERTS_CT_ASSERT((1 << 1) == ERTS_ASM_BP_FLAG_BP);
+ a.tbnz(ARG1, imm(1), bp_only);
+ a.ret(a64::x30);
+
+ a.bind(bp_and_nif);
+ {
+ emit_enter_runtime_frame();
+ a.bl(resolve_fragment(ga->get_generic_bp_local(), disp128MB));
+ emit_leave_runtime_frame();
+
+ a.b(nif_only);
+ }
+
+ a.bind(bp_only);
+ {
+ emit_enter_runtime_frame();
+ a.bl(resolve_fragment(ga->get_generic_bp_local(), disp128MB));
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+ }
+
+ a.bind(nif_only);
+ a.b(resolve_fragment(ga->get_call_nif_early(), disp128MB));
+ }
+
+#ifdef DEBUG
+ last_stub_check_offset = a.offset();
+#endif
+}
+
+void BeamModuleAssembler::embed_vararg_rodata(const Span<ArgVal> &args,
+ a64::Gp reg) {
+ /* Short sequences are inlined in the .text section for slightly better
+ * speed. */
+ bool inlineData = args.size() <= 6;
+
+ Label data = a.newLabel(), next = a.newLabel();
+
+ if (inlineData) {
+ a.adr(reg, data);
+ a.b(next);
+ } else {
+ Label pointer = a.newLabel();
+
+ a.ldr(reg, arm::Mem(pointer));
+ a.b(next);
+
+ a.align(kAlignCode, 8);
+ a.bind(pointer);
+ a.embedLabel(data, 8);
+
+ a.section(rodata);
+ }
+
+ a.align(kAlignData, 8);
+ a.bind(data);
+
+ for (const ArgVal &arg : args) {
+ union {
+ BeamInstr as_beam;
+ char as_char[1];
+ } data;
+
+ a.align(kAlignData, 8);
+ switch (arg.getType()) {
+ case ArgVal::Literal: {
+ auto &patches = literals[arg.getValue()].patches;
+ Label patch = a.newLabel();
+
+ a.bind(patch);
+ a.embedUInt64(LLONG_MAX);
+ patches.push_back({patch, 0});
+ break;
+ }
+ case ArgVal::XReg:
+ data.as_beam = make_loader_x_reg(arg.getValue());
+ a.embed(&data.as_char, sizeof(data.as_beam));
+ break;
+ case ArgVal::YReg:
+ data.as_beam = make_loader_y_reg(arg.getValue());
+ a.embed(&data.as_char, sizeof(data.as_beam));
+ break;
+ case ArgVal::Label:
+ a.embedLabel(rawLabels[arg.getValue()]);
+ break;
+ case ArgVal::Immediate:
+ case ArgVal::Word:
+ data.as_beam = arg.getValue();
+ a.embed(&data.as_char, sizeof(data.as_beam));
+ break;
+ default:
+ ERTS_ASSERT(!"error");
+ }
+ }
+
+ if (!inlineData) {
+ a.section(code.textSection());
+ }
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_i_nif_padding() {
+ const size_t minimum_size = sizeof(UWord[BEAM_NATIVE_MIN_FUNC_SZ]);
+ size_t prev_func_start, diff;
+
+ prev_func_start = code.labelOffsetFromBase(rawLabels[functions.back() + 1]);
+ diff = a.offset() - prev_func_start;
+
+ if (diff < minimum_size) {
+ embed_zeros(minimum_size - diff);
+ }
+}
+
+void BeamModuleAssembler::emit_i_breakpoint_trampoline() {
+ /* This little prologue is used by nif loading and tracing to insert
+ * alternative instructions. */
+ Label next = a.newLabel();
+
+ emit_enter_erlang_frame();
+
+ /* This branch is modified to jump to the MOVZ instruction when the
+ * breakpoint is enabled. */
+ a.b(next);
+
+ /* This instruction is updated with the current flag. */
+ a.movz(ARG1, imm(ERTS_ASM_BP_FLAG_NONE));
+
+ if (genericBPTramp.isValid()) {
+ a.bl(resolve_label(genericBPTramp, disp128MB));
+ } else {
+ /* NIF or BIF stub; we're not going to use this trampoline as-is, but
+ * we need to reserve space for it. */
+ a.udf(0xB1F);
+ }
+
+ a.bind(next);
+
+ ASSERT((a.offset() - code.labelOffsetFromBase(currLabel)) ==
+ BEAM_ASM_FUNC_PROLOGUE_SIZE);
+}
+
+static void i_emit_nyi(char *msg) {
+ erts_exit(ERTS_ERROR_EXIT, "NYI: %s\n", msg);
+}
+
+void BeamModuleAssembler::emit_nyi(const char *msg) {
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, imm(msg));
+ runtime_call<1>(i_emit_nyi);
+
+ /* Never returns */
+}
+
+void BeamModuleAssembler::emit_nyi() {
+ emit_nyi("<unspecified>");
+}
+
+bool BeamModuleAssembler::emit(unsigned specific_op, const Span<ArgVal> &args) {
+ check_pending_stubs();
+
+#ifdef BEAMASM_DUMP_SIZES
+ size_t before = a.offset();
+#endif
+
+ comment(opc[specific_op].name);
+
+#define InstrCnt()
+ switch (specific_op) {
+#include "beamasm_emit.h"
+ default:
+ ERTS_ASSERT(0 && "Invalid instruction");
+ break;
+ }
+
+ if (getOffset() == last_error_offset) {
+ /*
+ * The previous PC where an exception may occur is equal to the
+ * current offset, which is also the offset of the next
+ * instruction. If the next instruction happens to be a
+ * line instruction, the location for the exception will
+ * be that line instruction, which is probably wrong.
+ * To avoid that, bump the instruction offset.
+ */
+ a.nop();
+ }
+
+#ifdef BEAMASM_DUMP_SIZES
+ {
+ std::lock_guard<std::mutex> lock(size_lock);
+
+ sizes[opc[specific_op].name].first++;
+ sizes[opc[specific_op].name].second += a.offset() - before;
+ }
+#endif
+
+ return true;
+}
+
+/*
+ * Here follows meta instructions.
+ */
+
+void BeamGlobalAssembler::emit_i_func_info_shared() {
+ /* a64::x30 now points 4 bytes into the ErtsCodeInfo struct for the
+ * function. Put the address of the MFA into ARG1. */
+ a.add(ARG1, a64::x30, offsetof(ErtsCodeInfo, mfa) - 4);
+ mov_imm(TMP1, EXC_FUNCTION_CLAUSE);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.str(ARG1, arm::Mem(c_p, offsetof(Process, current)));
+
+ mov_imm(ARG2, 0);
+ mov_imm(ARG4, 0);
+
+ a.b(labels[raise_exception_shared]);
+}
+
+void BeamModuleAssembler::emit_i_func_info(const ArgVal &Label,
+ const ArgVal &Module,
+ const ArgVal &Function,
+ const ArgVal &Arity) {
+ ErtsCodeInfo info;
+
+ functions.push_back(Label.getValue());
+
+ info.mfa.module = Module.getValue();
+ info.mfa.function = Function.getValue();
+ info.mfa.arity = Arity.getValue();
+ info.u.gen_bp = NULL;
+
+ comment("%T:%T/%d", info.mfa.module, info.mfa.function, info.mfa.arity);
+
+ /* This is an ErtsCodeInfo structure that has a valid ARM opcode as its `op`
+ * field, which *calls* the `function_clause` fragment so we can trace it
+ * back to this particular function.
+ *
+ * We avoid using the `fragment_call` helper to ensure a constant layout,
+ * as it adds code in certain debug configurations. */
+ if (codeHeader.isValid()) {
+ a.bl(resolve_fragment(ga->get_i_func_info_shared(), disp128MB));
+ } else {
+ a.nop();
+ }
+
+ a.align(kAlignCode, sizeof(UWord));
+ a.embed(&info.u.gen_bp, sizeof(info.u.gen_bp));
+ a.embed(&info.mfa, sizeof(info.mfa));
+}
+
+void BeamModuleAssembler::emit_label(const ArgVal &Label) {
+ currLabel = rawLabels[Label.getValue()];
+ bind_veneer_target(currLabel);
+}
+
+void BeamModuleAssembler::emit_aligned_label(const ArgVal &Label,
+ const ArgVal &Alignment) {
+ ASSERT(Alignment.isWord());
+ a.align(kAlignCode, Alignment.getValue());
+ emit_label(Label);
+}
+
+void BeamModuleAssembler::emit_on_load() {
+ on_load = currLabel;
+}
+
+void BeamModuleAssembler::bind_veneer_target(const Label &target) {
+ auto veneer_range = _veneers.equal_range(target.id());
+ for (auto it = veneer_range.first; it != veneer_range.second; it++) {
+ const Veneer &veneer = it->second;
+
+ ASSERT(veneer.target == target);
+
+ if (!code.isLabelBound(veneer.anchor)) {
+ ASSERT(a.offset() <= veneer.latestOffset);
+ a.bind(veneer.anchor);
+
+ /* TODO: remove from pending stubs? */
+ }
+ }
+
+ a.bind(target);
+}
+
+void BeamModuleAssembler::emit_int_code_end() {
+ /* This label is used to figure out the end of the last function */
+ code_end = a.newLabel();
+ a.bind(code_end);
+
+ emit_nyi("int_code_end");
+
+ /* We emit the dispatch table before all remaining stubs to bind veneers
+ * directly in the table itself, avoiding a painful extra jump.
+ *
+ * Since the table is potentially very large, we'll emit all stubs that are
+ * due within it so we won't have to check on every iteration. */
+ flush_pending_stubs(_dispatchTable.size() * sizeof(Uint32[8]) +
+ dispUnknown);
+
+ for (auto pair : _dispatchTable) {
+ bind_veneer_target(pair.second);
+
+ a.mov(SUPER_TMP, imm(pair.first));
+ a.br(SUPER_TMP);
+ }
+
+ /* Emit all remaining stubs. */
+ flush_pending_stubs(dispMax);
+}
+
+void BeamModuleAssembler::emit_line(const ArgVal &) {
+ /*
+ * There is no need to align the line instruction. In the loaded
+ * code, the type of the pointer will be void* and that pointer
+ * will only be used in comparisons.
+ */
+}
+
+void BeamModuleAssembler::emit_func_line(const ArgVal &Loc) {
+ emit_line(Loc);
+}
+
+void BeamModuleAssembler::emit_empty_func_line() {
+}
+
+/*
+ * Here follows stubs for instructions that should never be called.
+ */
+
+void BeamModuleAssembler::emit_i_debug_breakpoint() {
+ emit_nyi("i_debug_breakpoint should never be called");
+}
+
+void BeamModuleAssembler::emit_i_generic_breakpoint() {
+ emit_nyi("i_generic_breakpoint should never be called");
+}
+
+void BeamModuleAssembler::emit_trace_jump(const ArgVal &) {
+ emit_nyi("trace_jump should never be called");
+}
+
+void BeamModuleAssembler::emit_call_error_handler() {
+ emit_nyi("call_error_handler should never be called");
+}
+
+unsigned BeamModuleAssembler::patchCatches(char *rw_base) {
+ unsigned catch_no = BEAM_CATCHES_NIL;
+
+ for (const auto &c : catches) {
+ const auto &patch = c.patch;
+ ErtsCodePtr handler;
+
+ handler = (ErtsCodePtr)getCode(c.handler);
+ catch_no = beam_catches_cons(handler, catch_no, nullptr);
+
+ /* Patch the `mov` instruction with the catch tag */
+ auto offset = code.labelOffsetFromBase(patch.where);
+ auto where = (Eterm *)&rw_base[offset];
+
+ ASSERT(LLONG_MAX == *where);
+ Eterm catch_term = make_catch(catch_no);
+
+ /* With the current tag scheme, more than 33 million
+ * catches can exist at once. */
+ ERTS_ASSERT(catch_term >> 31 == 0);
+
+ *where = catch_term;
+ }
+
+ return catch_no;
+}
+
+void BeamModuleAssembler::patchImport(char *rw_base,
+ unsigned index,
+ BeamInstr I) {
+ for (const auto &patch : imports[index].patches) {
+ auto offset = code.labelOffsetFromBase(patch.where);
+ auto where = (Eterm *)&rw_base[offset];
+
+ ASSERT(LLONG_MAX == *where);
+ *where = I + patch.val_offs;
+ }
+}
+
+void BeamModuleAssembler::patchLambda(char *rw_base,
+ unsigned index,
+ BeamInstr I) {
+ for (const auto &patch : lambdas[index].patches) {
+ auto offset = code.labelOffsetFromBase(patch.where);
+ auto where = (Eterm *)&rw_base[offset];
+
+ ASSERT(LLONG_MAX == *where);
+ *where = I + patch.val_offs;
+ }
+}
+
+void BeamModuleAssembler::patchLiteral(char *rw_base,
+ unsigned index,
+ Eterm lit) {
+ for (const auto &patch : literals[index].patches) {
+ auto offset = code.labelOffsetFromBase(patch.where);
+ auto where = (Eterm *)&rw_base[offset];
+
+ ASSERT(LLONG_MAX == *where);
+ *where = lit + patch.val_offs;
+ }
+}
+
+void BeamModuleAssembler::patchStrings(char *rw_base,
+ const byte *string_table) {
+ for (const auto &patch : strings) {
+ auto offset = code.labelOffsetFromBase(patch.where);
+ auto where = (const byte **)&rw_base[offset];
+
+ ASSERT(LLONG_MAX == (Eterm)*where);
+ *where = string_table + patch.val_offs;
+ }
+}
+
+Label BeamModuleAssembler::resolve_beam_label(const ArgVal &Lbl,
+ enum Displacement disp) {
+ ASSERT(Lbl.isLabel());
+ auto it = labelNames.find(Lbl.getValue());
+ if (it != labelNames.end()) {
+ return resolve_label(rawLabels[Lbl.getValue()], disp, &it->second);
+ } else {
+ return resolve_label(rawLabels[Lbl.getValue()], disp);
+ }
+}
+
+Label BeamModuleAssembler::resolve_label(Label target,
+ enum Displacement disp,
+ std::string *labelName) {
+ ssize_t currOffset = a.offset();
+
+ ssize_t minOffset = currOffset - disp;
+ ssize_t maxOffset = currOffset + disp;
+
+ ASSERT(disp >= dispMin && disp <= dispMax);
+ ASSERT(target.isValid());
+
+ if (code.isLabelBound(target)) {
+ ssize_t targetOffset = code.labelOffsetFromBase(target);
+
+ /* Backward reference: skip veneers if it's already in range. */
+ if (targetOffset >= minOffset) {
+ return target;
+ }
+ }
+
+ /* If a previously created veneer is reachable from this point, we can use
+ * it instead of creating a new one. */
+ auto range = _veneers.equal_range(target.id());
+ for (auto it = range.first; it != range.second; it++) {
+ const Veneer &veneer = it->second;
+
+ if (code.isLabelBound(veneer.anchor)) {
+ ssize_t veneerOffset = code.labelOffsetFromBase(veneer.anchor);
+
+ if (veneerOffset >= minOffset && veneerOffset <= maxOffset) {
+ return veneer.anchor;
+ }
+ } else if (veneer.latestOffset <= maxOffset) {
+ return veneer.anchor;
+ }
+ }
+
+ Label anchor;
+ if (!labelName) {
+ anchor = a.newLabel();
+ } else {
+ /* This is the entry label for a function. Create an unique
+ * name for the anchor label. It is necessary to include a
+ * sequence number in the label name because if the module is
+ * huge more than one veneer can be created for each entry
+ * label. */
+ std::stringstream name;
+ name << '@' << *labelName << '-' << labelSeq++;
+ anchor = a.newNamedLabel(name.str().c_str());
+ }
+ auto it = _veneers.emplace(target.id(),
+ Veneer{.latestOffset = maxOffset,
+ .anchor = anchor,
+ .target = target});
+
+ const Veneer &veneer = it->second;
+ _pending_veneers.emplace(veneer);
+
+ return veneer.anchor;
+}
+
+Label BeamModuleAssembler::resolve_fragment(void (*fragment)(),
+ enum Displacement disp) {
+ Label target;
+
+ auto it = _dispatchTable.find(fragment);
+
+ if (it != _dispatchTable.end()) {
+ target = it->second;
+ } else {
+ target = a.newLabel();
+ _dispatchTable.emplace(fragment, target);
+ }
+
+ return resolve_label(target, disp);
+}
+
+arm::Mem BeamModuleAssembler::embed_constant(const ArgVal &value,
+ enum Displacement disp) {
+ ssize_t currOffset = a.offset();
+
+ ssize_t minOffset = currOffset - disp;
+ ssize_t maxOffset = currOffset + disp;
+
+ ASSERT(disp >= dispMin && disp <= dispMax);
+ ASSERT(value.isConstant());
+
+ /* If a previously embedded constant is reachable from this point, we
+ * can use it instead of creating a new one. */
+ auto range = _constants.equal_range(value);
+ for (auto it = range.first; it != range.second; it++) {
+ const Constant &constant = it->second;
+
+ if (code.isLabelBound(constant.anchor)) {
+ ssize_t constOffset = code.labelOffsetFromBase(constant.anchor);
+
+ if (constOffset >= minOffset && constOffset <= maxOffset) {
+ return arm::Mem(constant.anchor);
+ }
+ } else if (constant.latestOffset <= maxOffset) {
+ return arm::Mem(constant.anchor);
+ }
+ }
+
+ auto it = _constants.emplace(value,
+ Constant{.latestOffset = maxOffset,
+ .anchor = a.newLabel(),
+ .value = value});
+
+ const Constant &constant = it->second;
+ _pending_constants.emplace(constant);
+
+ return arm::Mem(constant.anchor);
+}
+
+void BeamModuleAssembler::emit_i_flush_stubs() {
+ /* Flush all stubs that are due within the next two check intervals
+ * to prevent them from being emitted inside function prologues or
+ * NIF padding. */
+ flush_pending_stubs(STUB_CHECK_INTERVAL * 2);
+ last_stub_check_offset = a.offset();
+}
+
+void BeamModuleAssembler::check_pending_stubs() {
+ size_t currOffset = a.offset();
+
+ /* We shouldn't let too much space pass between checks. */
+ ASSERT((last_stub_check_offset + dispMin) >= currOffset);
+
+ if ((last_stub_check_offset + STUB_CHECK_INTERVAL) < currOffset) {
+ last_stub_check_offset = currOffset;
+
+ flush_pending_stubs(STUB_CHECK_INTERVAL * 2);
+ }
+}
+
+void BeamModuleAssembler::flush_pending_stubs(size_t range) {
+ size_t effective_offset;
+ Label next;
+
+ effective_offset = a.offset() + range;
+
+ while (!_pending_veneers.empty()) {
+ const Veneer &veneer = _pending_veneers.top();
+
+ if (veneer.latestOffset > effective_offset) {
+ break;
+ }
+
+ if (!code.isLabelBound(veneer.anchor)) {
+ if (!next.isValid()) {
+ next = a.newLabel();
+
+ comment("Begin stub section");
+ a.b(next);
+ }
+
+ emit_veneer(veneer);
+
+ effective_offset = a.offset() + range;
+ }
+
+ _pending_veneers.pop();
+ }
+
+ while (!_pending_constants.empty()) {
+ const Constant &constant = _pending_constants.top();
+
+ if (constant.latestOffset > effective_offset) {
+ break;
+ }
+
+ /* Unlike veneers, we never bind constants ahead of time. */
+ ASSERT(!code.isLabelBound(constant.anchor));
+
+ if (!next.isValid()) {
+ next = a.newLabel();
+
+ comment("Begin stub section");
+ a.b(next);
+ }
+
+ emit_constant(constant);
+
+ effective_offset = a.offset() + range;
+
+ _pending_constants.pop();
+ }
+
+ if (next.isValid()) {
+ comment("End stub section");
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_veneer(const Veneer &veneer) {
+ const Label &anchor = veneer.anchor;
+ const Label &target = veneer.target;
+ bool directBranch;
+
+ ASSERT(!code.isLabelBound(anchor));
+ a.bind(anchor);
+
+ /* Prefer direct branches when possible. */
+ if (code.isLabelBound(target)) {
+ auto targetOffset = code.labelOffsetFromBase(target);
+ directBranch = (a.offset() - targetOffset) <= disp128MB;
+ } else {
+ directBranch = false;
+ }
+
+#ifdef DEBUG
+ directBranch &= (a.offset() % 512) >= 256;
+#endif
+
+ if (ERTS_LIKELY(directBranch)) {
+ a.b(target);
+ } else {
+ Label pointer = a.newLabel();
+
+ a.ldr(SUPER_TMP, arm::Mem(pointer));
+ a.br(SUPER_TMP);
+
+ a.align(kAlignCode, 8);
+ a.bind(pointer);
+ a.embedLabel(veneer.target);
+ }
+}
+
+void BeamModuleAssembler::emit_constant(const Constant &constant) {
+ const Label &anchor = constant.anchor;
+ const ArgVal &value = constant.value;
+ auto rawValue = value.getValue();
+
+ ASSERT(!code.isLabelBound(anchor));
+ a.align(kAlignData, 8);
+ a.bind(anchor);
+
+ if (value.isImmed() || value.isWord()) {
+ a.embedUInt64(rawValue);
+ } else if (value.isLabel()) {
+ a.embedLabel(rawLabels[rawValue]);
+ } else {
+ a.embedUInt64(LLONG_MAX);
+
+ switch (value.getType()) {
+ case ArgVal::BytePtr:
+ strings.push_back({anchor, rawValue});
+ break;
+ case ArgVal::Catch: {
+ auto handler = rawLabels[rawValue];
+ catches.push_back({{anchor, 0}, handler});
+ break;
+ }
+ case ArgVal::Export:
+ imports[rawValue].patches.push_back({anchor, 0});
+ break;
+ case ArgVal::FunEntry:
+ lambdas[rawValue].patches.push_back({anchor, 0});
+ break;
+ case ArgVal::Literal:
+ literals[rawValue].patches.push_back({anchor, 0});
+ break;
+ default:
+ ASSERT(!"error");
+ }
+ }
+}
diff --git a/erts/emulator/beam/jit/arm/generators.tab b/erts/emulator/beam/jit/arm/generators.tab
new file mode 100644
index 0000000000..abe030f51f
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/generators.tab
@@ -0,0 +1,497 @@
+// -*- c -*-
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 2020. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// %CopyrightEnd%
+//
+
+// Generate the fastest instruction to fetch an integer from a binary.
+gen.get_integer2(Fail, Ms, Live, Size, Unit, Flags, Dst) {
+ BeamOp* op;
+ UWord bits;
+
+ $NewBeamOp(S, op);
+ $NativeEndian(Flags);
+
+ if (Size.type == TAG_i) {
+ if (!beam_load_safe_mul(Size.val, Unit.val, &bits)) {
+ $BeamOpNameArity(op, jump, 1);
+ op->a[0] = Fail;
+
+ return op;
+ } else if (bits <= 1023) {
+ $BeamOpNameArity(op, i_bs_get_fixed_integer, 6);
+ op->a[0] = Ms;
+ op->a[1] = Fail;
+ op->a[2] = Live;
+ op->a[3].type = TAG_u;
+ op->a[3].val = Flags.val;
+ op->a[4].type = TAG_u;
+ op->a[4].val = bits;
+ op->a[5] = Dst;
+
+ return op;
+ }
+ }
+
+ $BeamOpNameArity(op, i_bs_get_integer, 6);
+ op->a[0] = Ms;
+ op->a[1] = Fail;
+ op->a[2] = Live;
+ op->a[3].type = TAG_u;
+ op->a[3].val = (Unit.val << 3) | Flags.val;
+ op->a[4] = Size;
+ op->a[5] = Dst;
+
+ return op;
+}
+
+gen.select_tuple_arity(Src, Fail, Size, Rest) {
+ BeamOp* op;
+ BeamOpArg *tmp;
+ int size = Size.val / 2;
+ int arity = Size.val + 3;
+ int i, j;
+
+ /* Verify the validity of the list. */
+ if (Size.val % 2 != 0) {
+ return NULL;
+ }
+
+ for (i = 0; i < Size.val; i += 2) {
+ if (Rest[i].type != TAG_u || Rest[i+1].type != TAG_f) {
+ return NULL;
+ }
+ }
+
+ /*
+ * Generate the generic instruction.
+ * Assumption:
+ * Few different tuple arities to select on (fewer than 20).
+ * Use linear scan approach.
+ */
+ $NewBeamOp(S, op);
+ $BeamOpNameArity(op, i_select_tuple_arity, 3);
+ $BeamOpArity(op, arity);
+ op->next = NULL;
+ op->a[0] = Src;
+ op->a[1] = Fail;
+
+ /* Variable argument count */
+ op->a[2].type = TAG_u;
+ op->a[2].val = Size.val;
+
+ tmp = (BeamOpArg*)erts_alloc(ERTS_ALC_T_LOADER_TMP,
+ sizeof(BeamOpArg) * arity);
+
+ for (i = 3; i < arity; i += 2) {
+ tmp[i - 2] = Rest[i - 2];
+ tmp[i - 3].type = TAG_v;
+ tmp[i - 3].val = make_arityval(Rest[i - 3].val);
+ }
+
+ /* Sort the values to make them useful for a binary or sentinel search. */
+ beam_load_sort_select_vals(tmp, size);
+
+ j = 3;
+ for (i = 3; i < arity; i += 2) {
+ op->a[j + size] = tmp[i - 2];
+ op->a[j] = tmp[i - 3];
+ j++;
+ }
+
+ erts_free(ERTS_ALC_T_LOADER_TMP, (void *) tmp);
+
+ return op;
+}
+
+gen.split_values(Src, TypeFail, Fail, Size, Rest) {
+ BeamOp* op1;
+ BeamOp* op2;
+ BeamOp* is_integer;
+ int i;
+
+ ASSERT(Size.val >= 2 && Size.val % 2 == 0);
+
+ $NewBeamOp(S, is_integer);
+ $BeamOpNameArity(is_integer, is_integer, 2);
+ is_integer->a[0] = TypeFail;
+ is_integer->a[1] = Src;
+
+ $NewBeamOp(S, op1);
+ $BeamOpNameArity(op1, select_val, 3);
+ $BeamOpArity(op1, 3 + Size.val);
+ op1->a[0] = Src;
+ /* We use [] instead of a failure label to indicate a fallthrough
+ * to next instruction if none of the values match. That way, we
+ * don't have to create a new label dynamically, which would be
+ * tricky in BeamAsm. */
+ op1->a[1].type = TAG_n;
+ op1->a[1].val = 0;
+ op1->a[2].type = TAG_u;
+ op1->a[2].val = 0;
+
+ $NewBeamOp(S, op2);
+ $BeamOpNameArity(op2, select_val, 3);
+ $BeamOpArity(op2, 3 + Size.val);
+ op2->a[0] = Src;
+ op2->a[1] = Fail;
+ op2->a[2].type = TAG_u;
+ op2->a[2].val = 0;
+
+ /*
+ * Split the list.
+ */
+
+ ASSERT(Size.type == TAG_u);
+ for (i = 0; i < Size.val; i += 2) {
+ BeamOp* op = (Rest[i].type == TAG_q) ? op2 : op1;
+ int dst = 3 + op->a[2].val;
+
+ ASSERT(Rest[i+1].type == TAG_f);
+ op->a[dst] = Rest[i];
+ op->a[dst+1] = Rest[i+1];
+ op->arity += 2;
+ op->a[2].val += 2;
+ }
+ ASSERT(op1->a[2].val > 0);
+ ASSERT(op2->a[2].val > 0);
+
+ /*
+ * Order the instruction sequence appropriately.
+ */
+
+ if (TypeFail.val == Fail.val) {
+ /*
+ * select_val Src [] S ... (small numbers)
+ * is_integer Fail S
+ * select_val Src Fail S ... (bignums)
+ */
+ op1->next = is_integer;
+ is_integer->next = op2;
+ } else {
+ /*
+ * is_integer TypeFail S
+ * select_val Src [] S ... (small numbers)
+ * select_val Src Fail S ... (bignums)
+ */
+ is_integer->next = op1;
+ op1->next = op2;
+ op1 = is_integer;
+ }
+ op2->next = NULL;
+
+ return op1;
+}
+
+//
+// Generate a select_val instruction. We know that a jump table
+// is not suitable, and that all values are of the same type
+// (integer or atoms).
+//
+gen.select_val(Src, Fail, Size, Rest) {
+ BeamOp* op;
+ BeamOpArg *tmp;
+ int arity = Size.val + 3;
+ int size = Size.val / 2;
+ int i, j;
+
+ $NewBeamOp(S, op);
+ op->next = NULL;
+
+ /* Use linear search for small search spaces */
+ if (size <= 10) {
+ $BeamOpNameArity(op, i_select_val_lins, 3);
+ } else {
+ $BeamOpNameArity(op, i_select_val_bins, 3);
+ }
+
+ $BeamOpArity(op, arity);
+ op->a[0] = Src;
+ op->a[1] = Fail;
+
+ /* Variable argument count */
+ op->a[2].type = TAG_u;
+ op->a[2].val = Size.val;
+
+ tmp = (BeamOpArg *) erts_alloc(ERTS_ALC_T_LOADER_TMP, sizeof(BeamOpArg)*(arity));
+
+ for (i = 3; i < arity; i++) {
+ tmp[i-3] = Rest[i-3];
+ }
+
+ /* Sort the values to make them useful for a binary or sentinel search. */
+ beam_load_sort_select_vals(tmp, size);
+
+ j = 3;
+ for (i = 3; i < arity; i += 2) {
+ op->a[j] = tmp[i-3];
+ op->a[j+size] = tmp[i-2];
+ j++;
+ }
+
+ erts_free(ERTS_ALC_T_LOADER_TMP, (void *) tmp);
+
+#ifdef DEBUG
+ for (i = 0; i < size - 1; i++) {
+ ASSERT(op->a[i+3].val <= op->a[i+4].val);
+ }
+#endif
+
+ return op;
+}
+
+//
+// Generate a select_val instruction for big numbers.
+//
+gen.select_literals(Src, Fail, Size, Rest) {
+ BeamOp* op;
+ BeamOp* jump;
+ BeamOp** prev_next = &op;
+
+ int i;
+
+ for (i = 0; i < Size.val; i += 2) {
+ BeamOp* op;
+ ASSERT(Rest[i].type == TAG_q);
+
+ $NewBeamOp(S, op);
+ $BeamOpNameArity(op, is_ne_exact, 3);
+ op->a[0] = Rest[i+1];
+ op->a[1] = Src;
+ op->a[2] = Rest[i];
+ *prev_next = op;
+ prev_next = &op->next;
+ }
+
+ $NewBeamOp(S, jump);
+ $BeamOpNameArity(jump, jump, 1);
+ jump->next = NULL;
+ jump->a[0] = Fail;
+ *prev_next = jump;
+ return op;
+}
+
+gen.new_small_map_lit(Dst, Live, Size, Rest) {
+ unsigned size = Size.val;
+ Uint lit;
+ unsigned i;
+ BeamOp* op;
+ BeamOpArg* dst;
+ Eterm* tmp;
+ Eterm* thp;
+ Eterm keys;
+
+ $NewBeamOp(S, op);
+ $BeamOpNameArity(op, i_new_small_map_lit, 4);
+ $BeamOpArity(op, 4 + size/2);
+ op->next = NULL;
+
+ tmp = thp = erts_alloc(ERTS_ALC_T_LOADER_TMP, (1 + size/2) * sizeof(*tmp));
+ keys = make_tuple(thp);
+ *thp++ = make_arityval(size/2);
+
+ dst = op->a+4;
+
+ for (i = 0; i < size; i += 2) {
+ switch (Rest[i].type) {
+ case TAG_a:
+ *thp++ = Rest[i].val;
+ ASSERT(is_atom(Rest[i].val));
+ break;
+ case TAG_i:
+ *thp++ = make_small(Rest[i].val);
+ break;
+ case TAG_n:
+ *thp++ = NIL;
+ break;
+ case TAG_q:
+ *thp++ = beamfile_get_literal(&S->beam, Rest[i].val);
+ break;
+ }
+ *dst++ = Rest[i + 1];
+ }
+
+ lit = beamfile_add_literal(&S->beam, keys);
+ erts_free(ERTS_ALC_T_LOADER_TMP, tmp);
+
+ op->a[0] = Dst;
+ op->a[1] = Live;
+ op->a[2].type = TAG_q;
+ op->a[2].val = lit;
+ op->a[3].type = TAG_u;
+ op->a[3].val = size / 2;
+
+ return op;
+}
+
+// Generate the fastest instruction to fetch a binary from a binary.
+gen.get_binary2(Fail, Ms, Live, Size, Unit, Flags, Dst) {
+ BeamOp* op;
+
+ $NewBeamOp(S, op);
+ $NativeEndian(Flags);
+
+ if (Size.type == TAG_a && Size.val == am_all) {
+ $BeamOpNameArity(op, i_bs_get_binary_all2, 5);
+ op->a[0] = Ms;
+ op->a[1] = Fail;
+ op->a[2] = Live;
+ op->a[3] = Unit;
+ op->a[4] = Dst;
+ } else {
+ $BeamOpNameArity(op, i_bs_get_binary2, 6);
+ op->a[0] = Ms;
+ op->a[1] = Fail;
+ op->a[2] = Live;
+ op->a[3] = Size;
+ op->a[4].type = TAG_u;
+ op->a[4].val = (Unit.val << 3) | Flags.val;
+ op->a[5] = Dst;
+ }
+
+ op->next = NULL;
+ return op;
+}
+
+gen.allocate_heap_zero(Ns, Nh, Live) {
+ BeamOp* alloc;
+ BeamOp* init;
+ int i;
+
+ $NewBeamOp(S, alloc);
+ $NewBeamOp(S, init);
+
+ $BeamOpNameArity(alloc, allocate_heap, 3);
+ alloc->a[0] = Ns;
+ alloc->a[1] = Nh;
+ alloc->a[2] = Live;
+ alloc->next = init;
+
+ $BeamOpNameArity(init, init_yregs, 1);
+ $BeamOpArity(init, Ns.val+1);
+ init->a[0] = Ns;
+ for (i = 0; i < Ns.val; i++) {
+ init->a[i+1].type = TAG_y;
+ init->a[i+1].val = i;
+ }
+
+ return alloc;
+}
+
+gen.jump_tab(Src, Fail, Size, Rest) {
+ Sint min, max;
+ Sint i;
+ Sint size;
+ Sint arity;
+ int fixed_args;
+ BeamOp* op;
+
+ /*
+ * The rule in ops.tab must ensure that there are more than
+ * two values.
+ */
+ ASSERT(Size.val > 2);
+ ASSERT(Size.val % 2 == 0);
+
+ /* Calculate the minimum and maximum values and size of jump table. */
+ ASSERT(Rest[0].type == TAG_i);
+ min = max = Rest[0].val;
+ for (i = 2; i < Size.val; i += 2) {
+ ASSERT(Rest[i].type == TAG_i && Rest[i+1].type == TAG_f);
+ if (Rest[i].val < min) {
+ min = Rest[i].val;
+ } else if (max < Rest[i].val) {
+ max = Rest[i].val;
+ }
+ }
+ size = max - min + 1;
+
+ /* Allocate structure and fill in the fixed fields. */
+ $NewBeamOp(S, op);
+ op->next = NULL;
+ $BeamOpNameArity(op, i_jump_on_val, 4);
+ fixed_args = op->arity;
+ arity = fixed_args + size;
+ $BeamOpArity(op, arity);
+ op->a[0] = Src;
+ op->a[1] = Fail;
+ op->a[2].type = TAG_u;
+ op->a[2].val = min;
+ op->a[3].type = TAG_u;
+ op->a[3].val = size;
+
+ /* Fill in the jump table. */
+ for (i = fixed_args; i < arity; i++) {
+ op->a[i] = Fail;
+ }
+
+ for (i = 0; i < Size.val; i += 2) {
+ Sint index = fixed_args + Rest[i].val - min;
+ ASSERT(fixed_args <= index && index < arity);
+ op->a[index] = Rest[i+1];
+ }
+
+ return op;
+}
+
+gen.func_end(Func_Label, Entry_Label) {
+ BeamOp *op = NULL;
+
+ if (S->labels[Entry_Label.val].lambda_index != -1) {
+ int index = S->labels[Entry_Label.val].lambda_index;
+ BeamFile_LambdaEntry *lambda_entry;
+ BeamOp *lambda;
+
+ lambda_entry = &S->beam.lambdas.entries[index];
+
+ $NewBeamOp(S, lambda);
+ $BeamOpNameArity(lambda, i_lambda_trampoline, 4);
+
+ lambda->a[0].type = TAG_u;
+ lambda->a[0].val = index;
+ lambda->a[1] = Entry_Label;
+ lambda->a[2].type = TAG_u;
+ lambda->a[2].val = lambda_entry->arity;
+ lambda->a[3].type = TAG_u;
+ lambda->a[3].val = lambda_entry->num_free;
+
+ lambda->next = op;
+ op = lambda;
+ }
+
+ if (S->may_load_nif) {
+ BeamOp *padding;
+
+ $NewBeamOp(S, padding);
+ $BeamOpNameArity(padding, i_nif_padding, 0);
+
+ padding->next = op;
+ op = padding;
+ }
+
+ if (op == NULL) {
+ /* Workaround for the fact that we have to return an instruction from
+ * generators. The loader will remove this dummy instruction. */
+ $NewBeamOp(S, op);
+ $BeamOpNameArity(op, delete_me, 0);
+
+ op->next = NULL;
+ }
+
+ return op;
+}
diff --git a/erts/emulator/beam/jit/arm/instr_arith.cpp b/erts/emulator/beam/jit/arm/instr_arith.cpp
new file mode 100644
index 0000000000..4d68ed7ae9
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_arith.cpp
@@ -0,0 +1,1177 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "erl_bif_table.h"
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_plus_body_shared() {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_Plus, 2};
+
+ Label error = a.newLabel();
+
+ /* Save original arguments for the error path. */
+ a.stp(ARG2, ARG3, TMP_MEM1q);
+
+ emit_enter_runtime_frame();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_plus);
+
+ emit_leave_runtime_frame();
+
+ emit_branch_if_not_value(ARG1, error);
+
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ /* emit_enter_runtime() was done in the module code. */
+ emit_leave_runtime(0);
+
+ /* Place the original arguments in X registers. */
+ a.ldp(XREG0, XREG1, TMP_MEM1q);
+ mov_imm(ARG4, &bif_mfa);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_i_plus(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ Label next = a.newLabel();
+
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+ bool rhs_is_small = RHS.isImmed() && is_small(RHS.getValue());
+
+ if (rhs_is_small && Support::isUInt12(RHS.getValue())) {
+ comment("add small constant with overflow check");
+ Uint cleared_tag = RHS.getValue() & ~_TAG_IMMED1_MASK;
+ a.adds(ARG1, lhs.reg, imm(cleared_tag));
+ } else {
+ comment("addition with overflow check");
+ a.and_(TMP1, rhs.reg, imm(~_TAG_IMMED1_MASK));
+ a.adds(ARG1, lhs.reg, TMP1);
+ }
+
+ if (rhs_is_small) {
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ } else if (LHS.isImmed() && is_small(LHS.getValue())) {
+ a.and_(TMP1, rhs.reg, imm(_TAG_IMMED1_MASK));
+ } else {
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, lhs.reg, rhs.reg);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ }
+
+ /* Test for not overflow AND small operands. */
+ a.ccmp(TMP1, imm(_TAG_IMMED1_SMALL), 0, arm::Cond::kVC);
+ a.cond_eq().b(next);
+
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_plus);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_plus_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ a.bind(next);
+ mov_arg(Dst, ARG1);
+}
+
+/*
+ * ARG2 = Src
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_unary_minus_body_shared() {
+ Label error = a.newLabel();
+
+ /* Save original argument for the error path. */
+ a.str(ARG2, TMP_MEM1q);
+
+ emit_enter_runtime_frame();
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_unary_minus);
+
+ emit_leave_runtime_frame();
+
+ emit_branch_if_not_value(ARG1, error);
+
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_Minus, 1};
+
+ /* emit_enter_runtime() was done in the module code. */
+ emit_leave_runtime(0);
+
+ /* Place the original argument in an X registers. */
+ a.ldr(XREG0, TMP_MEM1q);
+ mov_imm(ARG4, &bif_mfa);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_i_unary_minus(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ Label next = a.newLabel();
+ auto src = load_source(Src, ARG2);
+
+ a.mov(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.and_(TMP2, src.reg, imm(~_TAG_IMMED1_MASK));
+ a.subs(ARG1, TMP1, TMP2);
+
+ /* Test for not overflow AND small operands. */
+ a.ccmp(TMP2, imm(_TAG_IMMED1_SMALL), 0, arm::Cond::kVC);
+ a.cond_eq().b(next);
+
+ mov_var(ARG2, src);
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_unary_minus);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_unary_minus_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ a.bind(next);
+ mov_arg(Dst, ARG1);
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_minus_body_shared() {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_Minus, 2};
+
+ Label error = a.newLabel();
+
+ /* Save original arguments for the error path. */
+ a.stp(ARG2, ARG3, TMP_MEM1q);
+
+ emit_enter_runtime_frame();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_minus);
+
+ emit_leave_runtime_frame();
+
+ emit_branch_if_not_value(ARG1, error);
+
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ /* emit_enter_runtime() was done in the module code. */
+ emit_leave_runtime(0);
+
+ /* Place the original arguments in X registers. */
+ a.ldp(XREG0, XREG1, TMP_MEM1q);
+ mov_imm(ARG4, &bif_mfa);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_i_minus(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ Label next = a.newLabel();
+
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+ bool rhs_is_small = RHS.isImmed() && is_small(RHS.getValue());
+
+ if (rhs_is_small && Support::isUInt12(RHS.getValue())) {
+ comment("subtract small constant with overflow check");
+ Uint cleared_tag = RHS.getValue() & ~_TAG_IMMED1_MASK;
+ a.subs(ARG1, lhs.reg, imm(cleared_tag));
+ } else {
+ comment("subtraction with overflow check");
+ a.and_(TMP1, rhs.reg, imm(~_TAG_IMMED1_MASK));
+ a.subs(ARG1, lhs.reg, TMP1);
+ }
+
+ if (rhs_is_small) {
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ } else if (LHS.isImmed() && is_small(LHS.getValue())) {
+ a.and_(TMP1, rhs.reg, imm(_TAG_IMMED1_MASK));
+ } else {
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, lhs.reg, rhs.reg);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ }
+
+ /* Test for not overflow AND small operands. */
+ a.ccmp(TMP1, imm(_TAG_IMMED1_SMALL), 0, arm::Cond::kVC);
+ a.cond_eq().b(next);
+
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_minus);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_minus_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ a.bind(next);
+ mov_arg(Dst, ARG1);
+}
+
+/* ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The result is returned in ARG1 (set to THE_NON_VALUE if
+ * the call failed).
+ */
+void BeamGlobalAssembler::emit_times_guard_shared() {
+ Label generic = a.newLabel();
+
+ /* Speculatively untag and multiply. */
+ a.and_(TMP1, ARG2, imm(~_TAG_IMMED1_MASK));
+ a.asr(TMP2, ARG3, imm(_TAG_IMMED1_SIZE));
+ a.mul(TMP3, TMP1, TMP2);
+ a.smulh(TMP4, TMP1, TMP2);
+
+ /* Check that both operands are small integers. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, ARG2, ARG3);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic);
+
+ /* The high 65 bits of result will all be the same if no overflow
+ * occurred. Another way to say that is that the sign bit of the
+ * low 64 bits repeated 64 times must be equal to the high 64 bits
+ * of the product. */
+ a.cmp(TMP4, TMP3, arm::asr(63));
+ a.cond_ne().b(generic);
+
+ a.orr(ARG1, TMP3, imm(_TAG_IMMED1_SMALL));
+ a.ret(a64::x30);
+
+ a.bind(generic);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_times);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+/* ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_times_body_shared() {
+ Label generic = a.newLabel(), error = a.newLabel();
+
+ /* Speculatively untag and multiply. */
+ a.and_(TMP1, ARG2, imm(~_TAG_IMMED1_MASK));
+ a.asr(TMP2, ARG3, imm(_TAG_IMMED1_SIZE));
+ a.mul(TMP3, TMP1, TMP2);
+ a.smulh(TMP4, TMP1, TMP2);
+
+ /* Check that both operands are integers. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, ARG2, ARG3);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic);
+
+ /* The high 65 bits of result will all be the same if no overflow
+ * occurred. Another way to say that is that the sign bit of the
+ * low 64 bits repeated 64 times must be equal to the high 64 bits
+ * of the product. */
+ a.cmp(TMP4, TMP3, arm::asr(63));
+ a.cond_ne().b(generic);
+
+ a.orr(ARG1, TMP3, imm(_TAG_IMMED1_SMALL));
+ a.ret(a64::x30);
+
+ a.bind(generic);
+
+ /* Save original arguments for the error path. */
+ a.stp(ARG2, ARG3, TMP_MEM1q);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_times);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ emit_branch_if_not_value(ARG1, error);
+
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_Times, 2};
+
+ /* Place the original arguments in x-registers. */
+ a.ldp(XREG0, XREG1, TMP_MEM1q);
+ mov_imm(ARG4, &bif_mfa);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_i_times(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ fragment_call(ga->get_times_guard_shared());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ fragment_call(ga->get_times_body_shared());
+ }
+
+ mov_arg(Dst, ARG1);
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * Quotient is returned in ARG1, remainder in ARG2.
+ * Error is indicated by the Z flag.
+ */
+void BeamGlobalAssembler::emit_int_div_rem_guard_shared() {
+ Label exit = a.newLabel(), generic = a.newLabel();
+
+ /* Speculatively go ahead with the division. */
+ a.asr(TMP1, ARG2, imm(_TAG_IMMED1_SIZE));
+ a.asr(TMP2, ARG3, imm(_TAG_IMMED1_SIZE));
+ a.sdiv(TMP3, TMP1, TMP2);
+ a.msub(TMP4, TMP3, TMP2, TMP1);
+
+ a.cmp(ARG3, imm(make_small(0)));
+ a.cond_eq().b(exit);
+
+ /* Check whether both operands are small integers. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, ARG2, ARG3);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic);
+
+ /* MIN_SMALL divided by -1 will overflow, and we'll need to fall
+ * back to the generic handler in that case. */
+ a.asr(TMP1, TMP3, imm(SMALL_BITS - 1));
+ a.cmp(TMP1, imm(1));
+ a.cond_ge().b(generic);
+
+ /* The Z flag is now clear (meaning no error). */
+
+ mov_imm(TMP1, _TAG_IMMED1_SMALL);
+ arm::Shift tagShift = arm::lsl(_TAG_IMMED1_SIZE);
+ a.orr(ARG1, TMP1, TMP3, tagShift);
+ a.orr(ARG2, TMP1, TMP4, tagShift);
+
+ a.bind(exit);
+ { a.ret(a64::x30); }
+
+ a.bind(generic);
+ {
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ lea(ARG4, TMP_MEM4q);
+ lea(ARG5, TMP_MEM5q);
+ runtime_call<5>(erts_int_div_rem);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.tst(ARG1, ARG1);
+ a.ldp(ARG1, ARG2, TMP_MEM4q);
+
+ a.ret(a64::x30);
+ }
+}
+
+/* ARG2 = LHS
+ * ARG3 = RHS
+ * ARG4 = error MFA
+ *
+ * Quotient is returned in ARG1, remainder in ARG2.
+ */
+void BeamGlobalAssembler::emit_int_div_rem_body_shared() {
+ Label div_zero = a.newLabel(), generic_div = a.newLabel(),
+ generic_error = a.newLabel();
+
+ /* Speculatively go ahead with the division. */
+ a.asr(TMP1, ARG2, imm(_TAG_IMMED1_SIZE));
+ a.asr(TMP2, ARG3, imm(_TAG_IMMED1_SIZE));
+ a.sdiv(TMP3, TMP1, TMP2);
+ a.msub(TMP4, TMP3, TMP2, TMP1);
+
+ a.cmp(ARG3, imm(make_small(0)));
+ a.cond_eq().b(div_zero);
+
+ /* Check whether both operands are small integers. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, ARG2, ARG3);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic_div);
+
+ /* MIN_SMALL divided by -1 will overflow, and we'll need to fall
+ * back to the generic handler in that case. */
+ a.asr(TMP1, TMP3, imm(SMALL_BITS - 1));
+ a.cmp(TMP1, imm(1));
+ a.cond_ge().b(generic_div);
+
+ mov_imm(TMP1, _TAG_IMMED1_SMALL);
+ arm::Shift tagShift = arm::lsl(_TAG_IMMED1_SIZE);
+ a.orr(ARG1, TMP1, TMP3, tagShift);
+ a.orr(ARG2, TMP1, TMP4, tagShift);
+
+ a.ret(a64::x30);
+
+ a.bind(generic_div);
+ {
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ /* Save MFA and original arguments for the error path. */
+ a.stp(ARG2, ARG3, TMP_MEM1q);
+ a.str(ARG4, TMP_MEM3q);
+
+ a.mov(ARG1, c_p);
+ lea(ARG4, TMP_MEM4q);
+ lea(ARG5, TMP_MEM5q);
+ runtime_call<5>(erts_int_div_rem);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.tst(ARG1, ARG1);
+ a.ldp(ARG1, ARG2, TMP_MEM4q);
+ a.cond_eq().b(generic_error);
+
+ a.ret(a64::x30);
+ }
+
+ a.bind(div_zero);
+ {
+ mov_imm(TMP1, EXC_BADARITH);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.mov(XREG0, ARG2);
+ a.mov(XREG1, ARG3);
+ a.b(labels[raise_exception]);
+ }
+
+ a.bind(generic_error);
+ {
+ a.ldp(XREG0, XREG1, TMP_MEM1q);
+ a.ldr(ARG4, TMP_MEM3q); // MFA
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_div_rem(const ArgVal &Fail,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ErtsCodeMFA *error_mfa) {
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ fragment_call(ga->get_int_div_rem_guard_shared());
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.mov(ARG4, imm(error_mfa));
+ fragment_call(ga->get_int_div_rem_body_shared());
+ }
+}
+
+void BeamModuleAssembler::emit_i_rem_div(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Remainder,
+ const ArgVal &Quotient) {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_rem, 2};
+
+ emit_div_rem(Fail, LHS, RHS, &bif_mfa);
+
+ mov_arg(Remainder, ARG2);
+ mov_arg(Quotient, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_div_rem(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Quotient,
+ const ArgVal &Remainder) {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_div, 2};
+
+ emit_div_rem(Fail, LHS, RHS, &bif_mfa);
+
+ mov_arg(Quotient, ARG1);
+ mov_arg(Remainder, ARG2);
+}
+
+void BeamModuleAssembler::emit_i_int_div(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Quotient) {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_div, 2};
+
+ emit_div_rem(Fail, LHS, RHS, &bif_mfa);
+
+ mov_arg(Quotient, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_rem(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Remainder) {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_rem, 2};
+
+ emit_div_rem(Fail, LHS, RHS, &bif_mfa);
+
+ mov_arg(Remainder, ARG2);
+}
+
+void BeamModuleAssembler::emit_i_m_div(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_Div, 2};
+
+ Label next = a.newLabel();
+
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ emit_enter_runtime(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_div);
+
+ emit_leave_runtime(Live.getValue());
+
+ a.cmp(ARG1, imm(THE_NON_VALUE));
+
+ if (Fail.getValue() != 0) {
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.cond_ne().b(next);
+
+ mov_arg(XREG0, LHS);
+ mov_arg(XREG1, RHS);
+
+ emit_raise_exception(&bif_mfa);
+ }
+
+ a.bind(next);
+ mov_arg(Dst, ARG1);
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+template<typename T>
+void BeamGlobalAssembler::emit_bitwise_fallback_body(T(*func_ptr),
+ const ErtsCodeMFA *mfa) {
+ Label error = a.newLabel();
+
+ emit_enter_runtime_frame();
+
+ /* Save original arguments for the error path. */
+ a.stp(ARG2, ARG3, TMP_MEM1q);
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(func_ptr);
+
+ emit_leave_runtime_frame();
+
+ emit_branch_if_not_value(ARG1, error);
+
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ /* emit_enter_runtime() was done in the module code. */
+ emit_leave_runtime(0);
+
+ /* Place the original arguments in X registers. */
+ a.ldp(XREG0, XREG1, TMP_MEM1q);
+ a.mov(ARG4, imm(mfa));
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamGlobalAssembler::emit_i_band_body_shared() {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_band, 2};
+ emit_bitwise_fallback_body(erts_band, &bif_mfa);
+}
+
+void BeamModuleAssembler::emit_i_band(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ Label next = a.newLabel();
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+ auto dst = init_destination(Dst, ARG1);
+
+ /* TAG & TAG = TAG, so we don't need to tag it again. */
+ a.and_(ARG1, lhs.reg, rhs.reg);
+
+ /* All other term types has at least one zero in the low 4
+ * bits. Therefore, the result will be a small iff both operands
+ * are small. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, ARG1, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_eq().b(next);
+
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_band);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_i_band_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ a.bind(next);
+ {
+ mov_var(dst, ARG1);
+ flush_var(dst);
+ }
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * Result is returned in RET.
+ */
+void BeamGlobalAssembler::emit_i_bor_body_shared() {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_bor, 2};
+ emit_bitwise_fallback_body(erts_bor, &bif_mfa);
+}
+
+void BeamModuleAssembler::emit_i_bor(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ Label generic = a.newLabel(), next = a.newLabel();
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+ auto dst = init_destination(Dst, ARG1);
+
+ /* TAG | TAG = TAG, so we don't need to tag it again. */
+ a.orr(ARG1, lhs.reg, rhs.reg);
+
+ if (RHS.isImmed() && is_small(RHS.getValue())) {
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ } else if (LHS.isImmed() && is_small(LHS.getValue())) {
+ a.and_(TMP1, rhs.reg, imm(_TAG_IMMED1_MASK));
+ } else {
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, lhs.reg, rhs.reg);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ }
+
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_eq().b(next);
+
+ a.bind(generic);
+ {
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_bor);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1,
+ resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_i_bor_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+ }
+
+ a.bind(next);
+ {
+ mov_var(dst, ARG1);
+ flush_var(dst);
+ }
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_i_bxor_body_shared() {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_bxor, 2};
+ emit_bitwise_fallback_body(erts_bxor, &bif_mfa);
+}
+
+void BeamModuleAssembler::emit_i_bxor(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ Label next = a.newLabel();
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+ auto dst = init_destination(Dst, ARG1);
+
+ /* TAG ^ TAG = 0, so we'll need to tag it again. */
+ a.eor(ARG1, lhs.reg, rhs.reg);
+ a.orr(ARG1, ARG1, imm(_TAG_IMMED1_SMALL));
+
+ if (RHS.isImmed() && is_small(RHS.getValue())) {
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ } else if (LHS.isImmed() && is_small(LHS.getValue())) {
+ a.and_(TMP1, rhs.reg, imm(_TAG_IMMED1_MASK));
+ } else {
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, lhs.reg, rhs.reg);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ }
+
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_eq().b(next);
+
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ runtime_call<3>(erts_bxor);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_i_bxor_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ a.bind(next);
+ {
+ mov_var(dst, ARG1);
+ flush_var(dst);
+ }
+}
+
+/*
+ * ARG1 = Src
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1. Error is indicated by
+ * THE_NON_VALUE.
+ */
+void BeamGlobalAssembler::emit_i_bnot_guard_shared() {
+ emit_enter_runtime_frame();
+
+ /* Undo the speculative inversion in module code. */
+ a.eor(ARG2, ARG1, imm(~_TAG_IMMED1_MASK));
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_bnot);
+
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+/*
+ * ARG1 = Src
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_i_bnot_body_shared() {
+ Label error = a.newLabel();
+
+ emit_enter_runtime_frame();
+
+ /* Undo the speculative inversion in module code. */
+ a.eor(ARG2, ARG1, imm(~_TAG_IMMED1_MASK));
+
+ /* Save original arguments for the error path. */
+ a.str(ARG2, TMP_MEM1q);
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_bnot);
+
+ emit_leave_runtime_frame();
+
+ emit_branch_if_not_value(ARG1, error);
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_bnot, 1};
+
+ /* emit_enter_runtime() was done in the module code. */
+ emit_leave_runtime(0);
+
+ /* Place the original arguments in X registers. */
+ a.ldr(XREG0, TMP_MEM1q);
+ mov_imm(ARG4, &bif_mfa);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_i_bnot(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ Label next = a.newLabel();
+ auto src = load_source(Src, TMP2);
+ auto dst = init_destination(Dst, ARG1);
+
+ /* Invert everything except the tag so we don't have to tag it again. */
+ a.eor(ARG1, src.reg, imm(~_TAG_IMMED1_MASK));
+
+ a.and_(TMP1, src.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_eq().b(next);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_i_bnot_guard_shared());
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_i_bnot_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ a.bind(next);
+ mov_var(dst, ARG1);
+ flush_var(dst);
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_i_bsr_body_shared() {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_bsr, 2};
+ emit_bitwise_fallback_body(erts_bsr, &bif_mfa);
+}
+
+void BeamModuleAssembler::emit_i_bsr(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ Label generic = a.newLabel(), next = a.newLabel();
+ auto lhs = load_source(LHS, ARG2);
+ auto dst = init_destination(Dst, ARG1);
+
+ if (RHS.isImmed() && is_small(RHS.getValue())) {
+ Sint shift = signed_val(RHS.getValue());
+
+ if (shift >= 0 && shift < SMALL_BITS - 1) {
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic);
+
+ /* We don't need to clear the mask after shifting because
+ * _TAG_IMMED1_SMALL will set all the bits anyway. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_MASK == _TAG_IMMED1_SMALL);
+ a.asr(TMP1, lhs.reg, imm(shift));
+ a.orr(dst.reg, TMP1, imm(_TAG_IMMED1_SMALL));
+
+ a.b(next);
+ } else {
+ /* Constant shift is negative or too big to fit the `asr`
+ * instruction; fall back to the generic path. */
+ }
+ }
+
+ a.bind(generic);
+ {
+ mov_var(ARG2, lhs);
+ mov_arg(ARG3, RHS);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_bsr);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1,
+ resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_i_bsr_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ mov_var(dst, ARG1);
+ }
+
+ a.bind(next);
+ flush_var(dst);
+}
+
+/*
+ * ARG2 = LHS
+ * ARG3 = RHS
+ *
+ * The module code must have executed emit_enter_runtime()
+ * before calling this function.
+ *
+ * The result is returned in ARG1.
+ */
+void BeamGlobalAssembler::emit_i_bsl_body_shared() {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_bsl, 2};
+ emit_bitwise_fallback_body(erts_bsl, &bif_mfa);
+}
+
+static int count_leading_zeroes(UWord value) {
+ const int word_bits = sizeof(value) * CHAR_BIT;
+
+ if (value == 0) {
+ return word_bits;
+ }
+
+ return Support::clz(value);
+}
+
+void BeamModuleAssembler::emit_i_bsl(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ Label generic = a.newLabel(), next = a.newLabel();
+ auto [lhs, rhs] = load_sources(LHS, ARG2, RHS, ARG3);
+ auto dst = init_destination(Dst, ARG1);
+
+ bool inline_shift = true;
+ if (LHS.isImmed() && RHS.isImmed()) {
+ /* The compiler should've optimized this away, so we'll fall
+ * back to the generic path to simplify the inline
+ * implementation. */
+ inline_shift = false;
+ } else if (LHS.isLiteral() || RHS.isLiteral()) {
+ /* At least one argument is not a small. */
+ inline_shift = false;
+ } else if (LHS.isImmed() && !is_small(LHS.getValue())) {
+ /* Invalid constant. */
+ inline_shift = false;
+ } else if (RHS.isImmed() &&
+ (!is_small(RHS.getValue()) || signed_val(RHS.getValue()) < 0 ||
+ signed_val(RHS.getValue()) >= SMALL_BITS - 1)) {
+ /* Constant shift is invalid or always produces a bignum. */
+ inline_shift = false;
+ }
+
+ if (inline_shift) {
+ /* shiftLimit will be calculated as the number of leading sign
+ * bits not counting the sign bit. Note that this value is one
+ * lower than the number of leading zeros as used by the
+ * x86_64 JIT. */
+ Operand shiftLimit, shiftCount;
+
+ ASSERT(!(LHS.isImmed() && RHS.isImmed()));
+ if (LHS.isRegister()) {
+ /* Count the number of leading sign bits so we can test
+ * whether the shift will overflow. (The count does not
+ * include the sign bit.) To ensure that the tag bits are
+ * not counted, we must make sure that the topmost tag bit
+ * is equal to the inverted value of the sign bit. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.eor(TMP1, lhs.reg, lhs.reg, arm::lsr(64 - _TAG_IMMED1_SIZE));
+ a.cls(ARG4, TMP1);
+ shiftLimit = ARG4;
+
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic);
+ } else {
+ UWord value = LHS.getValue();
+
+ if (signed_val(value) < 0) {
+ value ^= ~(UWord)_TAG_IMMED1_MASK;
+ }
+
+ shiftLimit = imm(count_leading_zeroes(value) - 1);
+ }
+
+ if (RHS.isRegister()) {
+ /* Negate the tag bits and then rotate them out, forcing the
+ * comparison below to fail for non-smalls. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.eor(ARG5, rhs.reg, imm(_TAG_IMMED1_SMALL));
+ a.ror(ARG5, ARG5, imm(_TAG_IMMED1_SIZE));
+ shiftCount = ARG5;
+
+ /* Fall back to generic path when the shift magnitude is negative or
+ * greater than the leading zero count.
+ *
+ * The raw emit form is used since `shiftLimit` may be a register
+ * or immediate, and the `cmp` helper doesn't accept untyped
+ * `Operand`s. */
+ a.emit(a64::Inst::kIdCmp, ARG5, shiftLimit);
+ a.cond_hi().b(generic);
+ } else {
+ ASSERT(!shiftLimit.isImm());
+
+ shiftCount = imm(signed_val(RHS.getValue()));
+
+ a.emit(a64::Inst::kIdCmp, shiftLimit, shiftCount);
+ a.cond_lo().b(generic);
+ }
+
+ a.and_(TMP1, lhs.reg, imm(~_TAG_IMMED1_MASK));
+ a.emit(a64::Inst::kIdLsl, TMP1, TMP1, shiftCount);
+ a.orr(dst.reg, TMP1, imm(_TAG_IMMED1_SMALL));
+
+ flush_var(dst);
+ a.b(next);
+ }
+
+ a.bind(generic);
+ {
+ mov_var(ARG2, lhs);
+ mov_var(ARG3, rhs);
+
+ if (Fail.getValue() != 0) {
+ emit_enter_runtime(Live.getValue());
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_bsl);
+ emit_leave_runtime(Live.getValue());
+ emit_branch_if_not_value(ARG1,
+ resolve_beam_label(Fail, dispUnknown));
+ } else {
+ emit_enter_runtime(Live.getValue());
+ fragment_call(ga->get_i_bsl_body_shared());
+ emit_leave_runtime(Live.getValue());
+ }
+
+ mov_var(dst, ARG1);
+ flush_var(dst);
+ }
+
+ a.bind(next);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_bif.cpp b/erts/emulator/beam/jit/arm/instr_bif.cpp
new file mode 100644
index 0000000000..3b8498b1fa
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_bif.cpp
@@ -0,0 +1,991 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "beam_common.h"
+#include "code_ix.h"
+#include "erl_bif_table.h"
+#include "erl_nfunc_sched.h"
+#include "bif.h"
+#include "erl_msacc.h"
+}
+
+/* ARG2 = argument vector, ARG4 (!) = bif function pointer
+ *
+ * Result is returned in ARG1 (will be THE_NON_VALUE if the BIF call failed). */
+void BeamGlobalAssembler::emit_i_bif_guard_shared() {
+ /* We use the X register array for the arguments for the BIF. The
+ * actual contents of the first three X registers are kept safe in
+ * callee-saved machine registers (XREG0 through XREG2).
+ */
+ ERTS_CT_ASSERT(ERTS_HIGHEST_CALLEE_SAVE_XREG >= 2);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ lea(ARG2, getXRef(0));
+ mov_imm(ARG3, 0);
+ runtime_call(ARG4, 3); /* ARG3 is never used by guard BIFs. */
+
+ emit_leave_runtime<Update::eReductions>();
+ emit_leave_runtime_frame();
+ a.ret(a64::x30);
+}
+
+/* ARG2 = argument vector, ARG4 (!) = bif function pointer
+ *
+ * Result is returned in RET. */
+void BeamGlobalAssembler::emit_i_bif_body_shared() {
+ Label error = a.newLabel();
+
+ /* See comment in emit_i_bif_guard_shared. */
+ ERTS_CT_ASSERT(ERTS_HIGHEST_CALLEE_SAVE_XREG >= 2);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eReductions>();
+
+ /* Save current BIF for the error path. */
+ a.mov(ARG1, c_p);
+ lea(ARG2, getXRef(0));
+ a.str(ARG4, TMP_MEM1q);
+ mov_imm(ARG3, 0); /* ARG3 is never used by guard BIFs. */
+
+ runtime_call(ARG4, 3);
+ emit_branch_if_not_value(ARG1, error);
+
+ emit_leave_runtime<Update::eReductions>();
+
+ emit_leave_runtime_frame();
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ /* Find the correct MFA from the BIF's function address. */
+ a.ldr(ARG1, TMP_MEM1q);
+ runtime_call<1>(ubif2mfa);
+
+ /* The argument registers must be reloaded on error, as the machine
+ * registers may contain garbage, which will later be swapped into the
+ * register array in the `raise_exception` fragment. */
+ emit_leave_runtime<Update::eReductions | Update::eXRegs>(3);
+ emit_leave_runtime_frame();
+
+ a.mov(ARG4, ARG1);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_i_bif1(const ArgVal &Src1,
+ const ArgVal &Fail,
+ const ArgVal &Bif,
+ const ArgVal &Dst) {
+ auto src1 = load_source(Src1, TMP1);
+
+ a.str(src1.reg, getXRef(0));
+
+ emit_i_bif(Fail, Bif, Dst);
+}
+
+void BeamModuleAssembler::emit_i_bif2(const ArgVal &Src1,
+ const ArgVal &Src2,
+ const ArgVal &Fail,
+ const ArgVal &Bif,
+ const ArgVal &Dst) {
+ auto [src1, src2] = load_sources(Src1, TMP1, Src2, TMP2);
+
+ a.stp(src1.reg, src2.reg, getXRef(0));
+
+ emit_i_bif(Fail, Bif, Dst);
+}
+
+void BeamModuleAssembler::emit_i_bif3(const ArgVal &Src1,
+ const ArgVal &Src2,
+ const ArgVal &Src3,
+ const ArgVal &Fail,
+ const ArgVal &Bif,
+ const ArgVal &Dst) {
+ auto [src1, src2] = load_sources(Src1, TMP1, Src2, TMP2);
+ auto src3 = load_source(Src3, TMP3);
+
+ a.stp(src1.reg, src2.reg, getXRef(0));
+ a.str(src3.reg, getXRef(2));
+
+ emit_i_bif(Fail, Bif, Dst);
+}
+
+void BeamModuleAssembler::emit_i_bif(const ArgVal &Fail,
+ const ArgVal &Bif,
+ const ArgVal &Dst) {
+ mov_arg(ARG4, Bif);
+
+ if (Fail.getValue() != 0) {
+ fragment_call(ga->get_i_bif_guard_shared());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ fragment_call(ga->get_i_bif_body_shared());
+ }
+
+ mov_arg(Dst, ARG1);
+}
+
+/*
+ * Emit code for guard BIFs that can't fail (e.g. is_list/1). We
+ * don't need to test for failure.
+ */
+
+void BeamModuleAssembler::emit_nofail_bif1(const ArgVal &Src1,
+ const ArgVal &Bif,
+ const ArgVal &Dst) {
+ auto src1 = load_source(Src1, TMP1);
+
+ a.str(src1.reg, getXRef(0));
+
+ mov_arg(ARG4, Bif);
+ fragment_call(ga->get_i_bif_guard_shared());
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_nofail_bif2(const ArgVal &Src1,
+ const ArgVal &Src2,
+ const ArgVal &Bif,
+ const ArgVal &Dst) {
+ auto [src1, src2] = load_sources(Src1, TMP1, Src2, TMP2);
+
+ a.stp(src1.reg, src2.reg, getXRef(0));
+
+ mov_arg(ARG4, Bif);
+ fragment_call(ga->get_i_bif_guard_shared());
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_length_setup(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Src) {
+ mov_arg(TMP1, Src);
+ mov_imm(TMP2, make_small(0));
+
+ /* Store trap state after the currently live registers. There are
+ * 3 extra registers beyond the ordinary ones that we're free to
+ * use for whatever purpose. */
+ ERTS_CT_ASSERT(ERTS_X_REGS_ALLOCATED - MAX_REG >= 3);
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue() + 0), TMP1);
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue() + 1), TMP2);
+
+ /* Store original argument. This is only needed for exceptions and can be
+ * safely skipped in guards. */
+ if (Fail.getValue() == 0) {
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue() + 2), TMP1);
+ }
+}
+
+/* ARG2 = live registers, ARG3 = entry address
+ *
+ * Result is returned in RET. */
+void BeamGlobalAssembler::emit_i_length_common(Label fail, int state_size) {
+ Label trap_or_error = a.newLabel();
+
+ ASSERT(state_size >= 2 && state_size <= ERTS_X_REGS_ALLOCATED - MAX_REG);
+
+ /* Save arguments for error/trapping path. */
+ a.stp(ARG2, ARG3, TMP_MEM1q);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eReductions | Update::eXRegs>();
+
+ a.mov(ARG1, c_p);
+ lea(TMP1, getXRef(0));
+ a.add(ARG2, TMP1, ARG2, arm::lsl(3));
+ runtime_call<2>(erts_trapping_length_1);
+
+ emit_branch_if_not_value(ARG1, trap_or_error);
+
+ emit_leave_runtime<Update::eReductions | Update::eXRegs>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+
+ a.bind(trap_or_error);
+ {
+ a.ldp(ARG2, ARG3, TMP_MEM1q);
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.cmp(TMP1, imm(TRAP));
+ a.cond_ne().b(fail);
+
+ emit_leave_runtime<Update::eReductions | Update::eXRegs>();
+ emit_leave_runtime_frame();
+
+ /* The trap state is stored in the registers above the current live
+ * ones, so we add the state size (in words) to keep it alive. */
+ a.add(ARG2, ARG2, imm(state_size));
+
+ a.str(ZERO, arm::Mem(c_p, offsetof(Process, current)));
+ a.str(ARG2, arm::Mem(c_p, offsetof(Process, arity)));
+
+ /* We'll find our way back through the entry address (ARG3). */
+ a.b(labels[context_switch_simplified]);
+ }
+}
+
+/* ARG2 = live registers, ARG3 = entry address
+ *
+ * Result is returned in RET. */
+void BeamGlobalAssembler::emit_i_length_body_shared() {
+ Label error = a.newLabel();
+ /* `state_size = 3` to include the original argument. */
+ emit_i_length_common(error, 3);
+
+ a.bind(error);
+ {
+ static const ErtsCodeMFA bif_mfa = {am_erlang, am_length, 1};
+
+ /* Move the original argument to x0. It's stored in the third word of
+ * the trap state. */
+ lea(TMP1, getXRef(0));
+ a.add(ARG2, TMP1, ARG2, arm::lsl(3));
+ a.ldr(TMP1, arm::Mem(ARG2, sizeof(Eterm[2])));
+
+ emit_leave_runtime<Update::eReductions | Update::eXRegs>();
+ emit_leave_runtime_frame();
+
+ a.mov(XREG0, TMP1);
+
+ mov_imm(ARG4, &bif_mfa);
+ emit_raise_exception();
+ }
+}
+
+/* ARG2 = live registers, ARG3 = entry address
+ *
+ * Result is returned in ARG. Error is indicated by THE_NON_VALUE. */
+void BeamGlobalAssembler::emit_i_length_guard_shared() {
+ Label error = a.newLabel();
+
+ emit_i_length_common(error, 2);
+
+ a.bind(error);
+ {
+ emit_leave_runtime<Update::eReductions | Update::eXRegs>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_i_length(const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ Label entry = a.newLabel();
+
+ a.bind(entry);
+
+ mov_arg(ARG2, Live);
+ a.adr(ARG3, entry);
+ if (Fail.getValue() != 0) {
+ fragment_call(ga->get_i_length_guard_shared());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ fragment_call(ga->get_i_length_body_shared());
+ }
+
+ mov_arg(Dst, ARG1);
+}
+
+#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
+
+static Eterm debug_call_light_bif(Process *c_p,
+ Eterm *reg,
+ ErtsCodePtr I,
+ ErtsBifFunc vbf) {
+ Eterm result;
+
+ ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
+ {
+ ERTS_CHK_MBUF_SZ(c_p);
+ ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ result = vbf(c_p, reg, I);
+ ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(result));
+ ERTS_CHK_MBUF_SZ(c_p);
+
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ ERTS_HOLE_CHECK(c_p);
+ }
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ ERTS_REQ_PROC_MAIN_LOCK(c_p);
+
+ return result;
+}
+#endif
+
+/* It is important that the below code is as optimized as possible.
+ * When doing any changes, make sure to look at the estone bif_dispatch
+ * benchmark to make sure you don't introduce any regressions.
+ *
+ * ARG3 = entry
+ * ARG4 = export entry
+ * ARG8 = BIF pointer
+ */
+void BeamGlobalAssembler::emit_call_light_bif_shared() {
+ /* We use the HTOP, FCALLS, and XREG1 registers as they are not
+ * used on the runtime-stack and are caller save. */
+
+ arm::Gp I = HTOP, exp = FCALLS;
+
+ Label error = a.newLabel(), trace = a.newLabel(), trap = a.newLabel(),
+ yield = a.newLabel(), call_save_calls = a.newLabel(),
+ call_bif = a.newLabel(), gc_after_bif_call = a.newLabel(),
+ check_bif_return = a.newLabel();
+
+ /* Check if we should trace this bif call */
+ a.ldr(TMP1.w(), arm::Mem(ARG4, offsetof(Export, is_bif_traced)));
+ a.cbnz(TMP1, trace);
+
+ a.subs(FCALLS, FCALLS, imm(1));
+ a.cond_le().b(yield);
+ {
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eReductions | Update::eStack |
+ Update::eHeap | Update::eXRegs>();
+
+ /* Spill the arguments we may need on the error path. */
+ a.mov(I, ARG3);
+ a.mov(exp, ARG4);
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ {
+ Label skip_msacc = a.newLabel();
+
+ a.ldr(TMP1, erts_msacc_cache);
+ a.cbz(TMP1, skip_msacc);
+
+ /* The values of the X registers are in the X register
+ * array, so we can use XREG0 to save the contents of ARG1
+ * during the call. */
+ a.mov(XREG0, ARG1);
+ a.ldr(ARG1, erts_msacc_cache);
+ a.ldr(ARG2, arm::Mem(ARG4, offsetof(Export, info.mfa.module)));
+ a.mov(ARG3, XREG0);
+ runtime_call<3>(erts_msacc_set_bif_state);
+
+ a.mov(ARG3, I);
+ a.mov(ARG1, XREG0);
+
+ a.bind(skip_msacc);
+ }
+#endif
+
+ /* Check if we need to call save_calls */
+ emit_branch_if_eq(active_code_ix,
+ ERTS_SAVE_CALLS_CODE_IX,
+ call_save_calls);
+ a.bind(call_bif);
+
+ a.ldr(ARG1, arm::Mem(c_p, offsetof(Process, mbuf)));
+ a.str(ARG1, TMP_MEM1q);
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+
+#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
+ a.mov(ARG4, ARG8);
+ runtime_call<4>(debug_call_light_bif);
+#else
+ runtime_call(ARG8, 3);
+#endif
+
+ /* ERTS_IS_GC_DESIRED_INTERNAL */
+ {
+ a.ldr(ARG2, arm::Mem(c_p, offsetof(Process, stop)));
+ a.mov(ARG3, ARG1);
+ a.ldr(ARG5, arm::Mem(c_p, offsetof(Process, htop)));
+
+ /* Test whether binary heap size should trigger gc */
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, bin_vheap_sz)));
+ a.ldr(TMP2, arm::Mem(c_p, offsetof(Process, off_heap.overhead)));
+ a.cmp(TMP2, TMP1);
+ a.cond_hi().b(gc_after_bif_call);
+
+ /* Test whether GC is forced. */
+ a.ldr(TMP1.w(), arm::Mem(c_p, offsetof(Process, flags)));
+ a.tbnz(TMP1, Support::ctz(F_FORCE_GC), gc_after_bif_call);
+
+ /* Test if heap fragment size is larger than remaining heap size. */
+ a.sub(TMP1, ARG2, ARG5);
+ a.asr(TMP1, TMP1, imm(3));
+ a.ldr(TMP2, arm::Mem(c_p, offsetof(Process, mbuf_sz)));
+ a.cmp(TMP1, TMP2);
+ a.cond_lt().b(gc_after_bif_call);
+ }
+ /*
+ ARG2 is set to E
+ ARG3 is set to bif return
+ ARG5 is set to HTOP
+
+ HTOP is exp
+ E_saved|E is I
+ */
+ a.bind(check_bif_return);
+ emit_branch_if_not_value(ARG3, trap);
+
+ a.mov(HTOP, ARG5);
+ a.mov(E, ARG2);
+
+ /* We must update the active code index in case another process has
+ * loaded new code, as the result of this BIF may be observable on both
+ * ends.
+ *
+ * It doesn't matter whether the BIF modifies anything; if process A
+ * loads new code and calls erlang:monotonic_time/0 soon after, we'd
+ * break the illusion of atomic upgrades if process B still ran old code
+ * after seeing a later timestamp from its own call to
+ * erlang:monotonic_time/0. */
+
+ emit_leave_runtime<Update::eReductions | Update::eCodeIndex |
+ Update::eXRegs>();
+ emit_leave_runtime_frame();
+
+ a.mov(XREG0, ARG3);
+ a.ret(a64::x30);
+
+ a.bind(call_save_calls);
+ {
+ /* Stash the bif function pointer */
+ a.str(ARG8, TMP_MEM1q);
+
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, exp);
+ runtime_call<2>(save_calls);
+
+ /* Restore bif pointer and ARG3 to the values expected by the bif
+ * call */
+ a.ldr(ARG8, TMP_MEM1q);
+ a.mov(ARG3, I);
+
+ a.b(call_bif);
+ }
+
+ a.bind(trap);
+ {
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ emit_branch_if_ne(TMP1, TRAP, error);
+
+ emit_leave_runtime<Update::eHeap | Update::eStack | Update::eXRegs |
+ Update::eReductions | Update::eCodeIndex>();
+ emit_leave_runtime_frame();
+
+ /* Push our return address to the Erlang stack and trap out.
+ *
+ * The BIF_TRAP macros all set up c_p->arity and c_p->current, so
+ * we can use a simplified context switch. */
+ emit_enter_erlang_frame();
+ a.ldr(ARG3, arm::Mem(c_p, offsetof(Process, i)));
+ a.b(labels[context_switch_simplified]);
+ }
+
+ a.bind(error);
+ {
+ a.mov(ARG4, exp);
+ a.mov(ARG2, I);
+
+ emit_leave_runtime<Update::eHeap | Update::eStack | Update::eXRegs |
+ Update::eReductions | Update::eCodeIndex>();
+ emit_leave_runtime_frame();
+
+ /* raise_exception_shared expects current PC in ARG2 and MFA in
+ * ARG4. */
+ add(ARG4, ARG4, offsetof(Export, info.mfa));
+ a.b(labels[raise_exception_shared]);
+ }
+
+ a.bind(gc_after_bif_call);
+ {
+ a.mov(ARG1, c_p);
+ a.ldr(ARG2, TMP_MEM1q);
+ /* ARG3 already contains result */
+ load_x_reg_array(ARG4);
+ a.ldr(ARG5, arm::Mem(exp, offsetof(Export, info.mfa.arity)));
+ runtime_call<5>(erts_gc_after_bif_call_lhf);
+ a.ldr(ARG2, arm::Mem(c_p, offsetof(Process, stop)));
+ a.mov(ARG3, ARG1);
+ a.ldr(ARG5, arm::Mem(c_p, offsetof(Process, htop)));
+ a.b(check_bif_return);
+ }
+ }
+
+ a.bind(trace);
+ {
+ /* Call the export entry instead of the BIF. */
+ branch(emit_setup_export_call(ARG4));
+ }
+
+ a.bind(yield);
+ {
+ a.ldr(ARG2, arm::Mem(ARG4, offsetof(Export, info.mfa.arity)));
+ lea(ARG4, arm::Mem(ARG4, offsetof(Export, info.mfa)));
+ a.str(ARG2, arm::Mem(c_p, offsetof(Process, arity)));
+ a.str(ARG4, arm::Mem(c_p, offsetof(Process, current)));
+
+ /* We'll find our way back through ARG3 (entry address). */
+ a.b(labels[context_switch_simplified]);
+ }
+}
+
+void BeamModuleAssembler::emit_call_light_bif(const ArgVal &Bif,
+ const ArgVal &Exp) {
+ Label entry = a.newLabel();
+
+ a.bind(entry);
+
+ mov_arg(ARG4, Exp);
+ mov_arg(ARG8, Bif);
+ a.adr(ARG3, entry);
+
+ fragment_call(ga->get_call_light_bif_shared());
+}
+
+void BeamModuleAssembler::emit_send() {
+ Label entry = a.newLabel();
+
+ /* This is essentially a mirror of call_light_bif, there's no point to
+ * specializing send/2 anymore. We do it here because it's far more work to
+ * do it in the loader. */
+ a.bind(entry);
+
+ a.ldr(ARG4, embed_constant(BIF_TRAP_EXPORT(BIF_send_2), disp32K));
+ a.ldr(ARG8, embed_constant(send_2, disp32K));
+ a.adr(ARG3, entry);
+
+ fragment_call(ga->get_call_light_bif_shared());
+}
+
+void BeamGlobalAssembler::emit_bif_nif_epilogue(void) {
+ Label check_trap = a.newLabel(), trap = a.newLabel(), error = a.newLabel();
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ {
+ Label skip_msacc = a.newLabel();
+
+ a.ldr(TMP1, erts_msacc_cache);
+ a.cbz(TMP1, skip_msacc);
+
+ /* The values of the X registers are in the X register array,
+ * so we can use XREG0 to save the contents of ARG1 during the
+ * call. */
+ a.mov(XREG0, ARG1);
+ a.ldr(ARG1, erts_msacc_cache);
+ mov_imm(ARG2, ERTS_MSACC_STATE_EMULATOR);
+ mov_imm(ARG3, 1);
+ runtime_call<3>(erts_msacc_set_state_m__);
+ a.mov(ARG1, XREG0);
+
+ a.bind(skip_msacc);
+ }
+#endif
+
+ /* Another process may have loaded new code and somehow notified us through
+ * this call, so we must update the active code index. */
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions | Update::eCodeIndex>();
+
+ emit_branch_if_not_value(ARG1, check_trap);
+
+ comment("Do return and dispatch to it");
+ a.mov(XREG0, ARG1);
+
+ emit_leave_erlang_frame();
+ a.ret(a64::x30);
+
+ a.bind(check_trap);
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.cmp(TMP1, imm(TRAP));
+ a.cond_ne().b(error);
+ {
+ comment("yield");
+
+ comment("test trap to hibernate");
+ a.ldr(TMP1.w(), arm::Mem(c_p, offsetof(Process, flags)));
+ a.tbz(TMP1, imm(Support::ctz(F_HIBERNATE_SCHED)), trap);
+
+ comment("do hibernate trap");
+ a.and_(TMP1, TMP1, imm(~F_HIBERNATE_SCHED));
+ a.str(TMP1.w(), arm::Mem(c_p, offsetof(Process, flags)));
+ a.b(labels[do_schedule]);
+ }
+
+ a.bind(trap);
+ {
+ comment("do normal trap");
+
+ /* The BIF_TRAP macros all set up c_p->arity and c_p->current, so we
+ * can use a simplified context switch. */
+ a.ldr(ARG3, arm::Mem(c_p, offsetof(Process, i)));
+ a.b(labels[context_switch_simplified]);
+ }
+
+ a.bind(error);
+ {
+ a.mov(ARG2, E);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_printable_return_address);
+
+ emit_leave_runtime();
+
+ a.mov(ARG2, ARG1);
+ a.ldr(ARG4, arm::Mem(c_p, offsetof(Process, current)));
+ a.b(labels[raise_exception_shared]);
+ }
+}
+
+/* Used by call_bif, dispatch_bif, and export_trampoline.
+ *
+ * Note that we don't check reductions here as we may have jumped here through
+ * interpreted code (e.g. an ErtsNativeFunc or export entry) and it's very
+ * tricky to yield back. Reductions are checked in module code instead.
+ *
+ * ARG2 = BIF MFA
+ * ARG3 = I (rip), doesn't need to point past an MFA
+ * ARG4 = function to be called */
+void BeamGlobalAssembler::emit_call_bif_shared(void) {
+ /* "Heavy" BIFs need up-to-date values for `c_p->i`, `c_p->current`, and
+ * `c_p->arity`. */
+
+ emit_enter_runtime_frame();
+ a.str(ARG2, arm::Mem(c_p, offsetof(Process, current)));
+ /* `call_bif` wants arity in ARG5. */
+ a.ldr(ARG5, arm::Mem(ARG2, offsetof(ErtsCodeMFA, arity)));
+ a.str(ARG5, arm::Mem(c_p, offsetof(Process, arity)));
+ a.str(ARG3, arm::Mem(c_p, offsetof(Process, i)));
+
+ /* The corresponding leave can be found in the epilogue. */
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ {
+ Label skip_msacc = a.newLabel();
+
+ a.ldr(TMP1, erts_msacc_cache);
+ a.cbz(TMP1, skip_msacc);
+
+ /* The values of the X registers are in the X register array,
+ * so we can use XREG0 through XREG2 to save the contents of
+ * the ARG* registers during the call. */
+ a.mov(XREG0, ARG3);
+ a.mov(XREG1, ARG4);
+ a.mov(XREG2, ARG5);
+
+ a.ldr(ARG1, erts_msacc_cache);
+ a.ldr(ARG2, arm::Mem(ARG2, offsetof(ErtsCodeMFA, module)));
+ a.mov(ARG3, ARG4);
+ runtime_call<3>(erts_msacc_set_bif_state);
+
+ a.mov(ARG3, XREG0);
+ a.mov(ARG4, XREG1);
+ a.mov(ARG5, XREG2);
+
+ a.bind(skip_msacc);
+ }
+#endif
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ /* ARG3 (I), ARG4 (func), and ARG5 (arity) have already been provided. */
+ runtime_call<5>(beam_jit_call_bif);
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ /* The values of the X registers are in the X register array, so we can use
+ * XREG0 to save the contents of ARG1 during the call. */
+ a.mov(XREG0, ARG1);
+ lea(ARG1, erts_msacc_cache);
+ runtime_call<1>(erts_msacc_update_cache);
+ a.mov(ARG1, XREG0);
+#endif
+
+ emit_leave_runtime_frame();
+ emit_bif_nif_epilogue();
+}
+
+void BeamGlobalAssembler::emit_dispatch_bif(void) {
+ /* c_p->i points into the trampoline of a ErtsNativeFunc, right after the
+ * `info` structure. */
+ a.ldr(ARG3, arm::Mem(c_p, offsetof(Process, i)));
+
+ ERTS_CT_ASSERT(offsetof(ErtsNativeFunc, trampoline.trace) ==
+ sizeof(ErtsCodeInfo));
+
+ ssize_t mfa_offset = offsetof(ErtsNativeFunc, trampoline.trace) -
+ offsetof(ErtsNativeFunc, trampoline.info.mfa);
+
+ a.sub(ARG2, ARG3, imm(mfa_offset));
+
+ ssize_t dfunc_offset = offsetof(ErtsNativeFunc, trampoline.dfunc) -
+ offsetof(ErtsNativeFunc, trampoline.trace);
+ a.ldr(ARG4, arm::Mem(ARG3, dfunc_offset));
+
+ a.b(labels[call_bif_shared]);
+}
+
+/* This is only used for opcode compatibility with the interpreter, it's never
+ * actually called. */
+void BeamModuleAssembler::emit_call_bif(const ArgVal &Func) {
+ (void)Func;
+
+ emit_nyi("emit_call_bif");
+}
+
+void BeamModuleAssembler::emit_call_bif_mfa(const ArgVal &M,
+ const ArgVal &F,
+ const ArgVal &A) {
+ BeamInstr func;
+ Export *e;
+
+ e = erts_active_export_entry(M.getValue(), F.getValue(), A.getValue());
+ ASSERT(e != NULL && e->bif_number != -1);
+
+ func = (BeamInstr)bif_table[e->bif_number].f;
+
+ a.adr(ARG3, currLabel);
+ a.sub(ARG2, ARG3, imm(sizeof(ErtsCodeMFA)));
+ a.mov(ARG4, imm(func));
+
+ a.b(resolve_fragment(ga->get_call_bif_shared(), disp128MB));
+}
+
+void BeamGlobalAssembler::emit_call_nif_early() {
+ a.mov(ARG2, a64::x30);
+ a.sub(ARG2, ARG2, imm(BEAM_ASM_BP_RETURN_OFFSET + sizeof(ErtsCodeInfo)));
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_call_nif_early);
+
+ emit_leave_runtime();
+
+ /* Emulate `emit_call_nif`, loading the current (phony) instruction
+ * pointer into ARG3.
+ *
+ * Note that we "inherit" the frame that was pushed to the stack prior to
+ * running the breakpoint instruction, discarding the current content of
+ * LR (x30). */
+ a.mov(ARG3, ARG1);
+ a.b(labels[call_nif_shared]);
+}
+
+/* Used by call_nif, call_nif_early, and dispatch_nif.
+ *
+ * Note that we don't check reductions here as we may have jumped here through
+ * interpreted code (e.g. an ErtsNativeFunc or export entry) and it's very
+ * tricky to yield back. Reductions are checked in module code instead.
+ *
+ * ARG3 = current I, just past the end of an ErtsCodeInfo. */
+void BeamGlobalAssembler::emit_call_nif_shared(void) {
+ /* The corresponding leave can be found in the epilogue. */
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ {
+ Label skip_msacc = a.newLabel();
+
+ a.ldr(TMP1, erts_msacc_cache);
+ a.cbz(TMP1, skip_msacc);
+
+ /* The values of the X registers are in the X register array,
+ * so we can use XREG0 to save the contents of ARG3 during the
+ * call. */
+ a.mov(XREG0, ARG3);
+ a.ldr(ARG1, erts_msacc_cache);
+ mov_imm(ARG2, ERTS_MSACC_STATE_NIF);
+ mov_imm(ARG3, 1);
+ runtime_call<3>(erts_msacc_set_state_m__);
+ a.mov(ARG3, XREG0);
+
+ a.bind(skip_msacc);
+ }
+#endif
+
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, ARG3);
+ load_x_reg_array(ARG3);
+ a.ldr(ARG4, arm::Mem(ARG2, 8 + BEAM_ASM_FUNC_PROLOGUE_SIZE));
+ a.ldr(ARG5, arm::Mem(ARG2, 16 + BEAM_ASM_FUNC_PROLOGUE_SIZE));
+ a.ldr(ARG6, arm::Mem(ARG2, 24 + BEAM_ASM_FUNC_PROLOGUE_SIZE));
+ runtime_call<5>(beam_jit_call_nif);
+
+ emit_bif_nif_epilogue();
+}
+
+void BeamGlobalAssembler::emit_dispatch_nif(void) {
+ /* c_p->i points into the trampoline of a ErtsNativeFunc, right after the
+ * `info` structure.
+ *
+ * ErtsNativeFunc already follows the NIF call layout, so we don't need to
+ * do anything beyond loading the address. */
+ a.ldr(ARG3, arm::Mem(c_p, offsetof(Process, i)));
+ a.b(labels[call_nif_shared]);
+}
+
+void BeamGlobalAssembler::emit_call_nif_yield_helper() {
+ Label yield = a.newLabel();
+
+ a.subs(FCALLS, FCALLS, imm(1));
+ a.cond_le().b(yield);
+ a.b(labels[call_nif_shared]);
+
+ a.bind(yield);
+ {
+ int mfa_offset = sizeof(ErtsCodeMFA);
+ int arity_offset = offsetof(ErtsCodeMFA, arity) - mfa_offset;
+
+ a.ldur(TMP1, arm::Mem(ARG3, arity_offset));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, arity)));
+
+ a.sub(TMP1, ARG3, imm(mfa_offset));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, current)));
+
+ /* Yield to `dispatch` rather than `entry` to avoid pushing too many
+ * frames to the stack. See `emit_call_nif` for details. */
+ a.add(ARG3, ARG3, imm(BEAM_ASM_FUNC_PROLOGUE_SIZE + sizeof(UWord[4])));
+ a.b(labels[context_switch_simplified]);
+ }
+}
+
+/* WARNING: This stub is memcpy'd, so all code herein must be explicitly
+ * position-independent. */
+void BeamModuleAssembler::emit_call_nif(const ArgVal &Func,
+ const ArgVal &NifMod,
+ const ArgVal &DirtyFunc) {
+ Label entry = a.newLabel(), dispatch = a.newLabel();
+
+#ifdef DEBUG
+ size_t entry_offset = a.offset();
+#endif
+
+ ASSERT(BEAM_ASM_FUNC_PROLOGUE_SIZE ==
+ (a.offset() - code.labelOffsetFromBase(currLabel)));
+
+ /* The start of this function must mimic the layout of ErtsNativeFunc.
+ *
+ * We jump here on the very first entry. */
+ a.bind(entry);
+ {
+ a.b(dispatch); /* call_op */
+
+ a.align(kAlignCode, 8);
+
+ /* ErtsNativeFunc.func */
+ a.embedUInt64(Func.getValue());
+
+ /* ErtsNativeFunc.m */
+ a.embedUInt64(NifMod.getValue());
+
+ /* ErtsNativeFunc.dfunc */
+ a.embedUInt64(DirtyFunc.getValue());
+ }
+
+ /* `emit_call_nif_yield_helper` relies on this to compute the address of
+ * `dispatch` */
+ ASSERT(a.offset() == entry_offset + sizeof(UWord[4]));
+
+ a.bind(dispatch);
+ {
+ a.adr(ARG3, currLabel);
+ pic_jmp(ga->get_call_nif_yield_helper());
+ }
+}
+
+static ErtsCodePtr get_on_load_address(Process *c_p, Eterm module) {
+ const Module *modp = erts_get_module(module, erts_active_code_ix());
+
+ if (modp && modp->on_load) {
+ const BeamCodeHeader *hdr = (modp->on_load)->code_hdr;
+
+ if (hdr) {
+ return erts_codeinfo_to_code(hdr->on_load);
+ }
+ }
+
+ c_p->freason = BADARG;
+
+ return NULL;
+}
+
+/* Implements the internal and undocumented erlang:call_on_load_function/1,
+ * which is very tricky to implement as a BIF. */
+void BeamModuleAssembler::emit_i_call_on_load_function() {
+ static ErtsCodeMFA mfa = {am_erlang, am_call_on_load_function, 1};
+ Label next = a.newLabel();
+
+ a.mov(ARG2, XREG0);
+
+ /* The first X register must be preserved for the error path. */
+ emit_enter_runtime(1);
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(get_on_load_address);
+
+ emit_leave_runtime(1);
+
+ a.cbnz(ARG1, next);
+ emit_raise_exception(&mfa);
+
+ a.bind(next);
+ erlang_call(ARG1);
+}
+
+void BeamModuleAssembler::emit_i_load_nif() {
+ static ErtsCodeMFA mfa = {am_erlang, am_load_nif, 2};
+
+ Label entry = a.newLabel(), next = a.newLabel(), schedule = a.newLabel();
+
+ a.bind(entry);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs>(2);
+
+ a.mov(ARG1, c_p);
+ a.adr(ARG2, currLabel);
+ load_x_reg_array(ARG3);
+ runtime_call<3>(beam_jit_load_nif);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs>(2);
+
+ a.cmp(ARG1, imm(RET_NIF_yield));
+ a.cond_eq().b(schedule);
+
+ a.cmp(ARG1, imm(RET_NIF_success));
+ a.cond_eq().b(next);
+
+ emit_raise_exception(currLabel, &mfa);
+
+ a.bind(schedule);
+ {
+ a.adr(ARG3, entry);
+ a.b(resolve_fragment(ga->get_context_switch_simplified(), disp128MB));
+ }
+
+ a.bind(next);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_bs.cpp b/erts/emulator/beam/jit/arm/instr_bs.cpp
new file mode 100644
index 0000000000..93a65f613a
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_bs.cpp
@@ -0,0 +1,1357 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "erl_binary.h"
+#include "erl_bits.h"
+#include "beam_common.h"
+}
+
+/* Clobbers TMP1+TMP2
+ *
+ * If max_size > 0, we jump to the fail label when Size > max_size
+ *
+ * Returns -1 when the field check always fails, 1 if it may fail, and 0 if it
+ * never fails. */
+int BeamModuleAssembler::emit_bs_get_field_size(const ArgVal &Size,
+ int unit,
+ Label fail,
+ const arm::Gp &out) {
+ if (Size.isImmed()) {
+ if (is_small(Size.getValue())) {
+ Sint sval = signed_val(Size.getValue());
+
+ if (sval < 0) {
+ /* badarg */
+ } else if (sval > (MAX_SMALL / unit)) {
+ /* system_limit */
+ } else {
+ mov_imm(out, sval * unit);
+ return 0;
+ }
+ }
+
+ a.b(fail);
+ return -1;
+ } else {
+ auto size_reg = load_source(Size, TMP2);
+
+ /* Negating the tag bits lets us guard against non-smalls, negative
+ * numbers, and overflow with a single `tst` instruction. */
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ ASSERT(unit <= 1024);
+
+ a.eor(out, size_reg.reg, imm(_TAG_IMMED1_SMALL));
+ a.tst(out, imm(0xFFF0000000000000UL | _TAG_IMMED1_MASK));
+
+ if (unit == 0) {
+ /* Silly but legal.*/
+ mov_imm(out, 0);
+ } else if (Support::isPowerOf2(unit)) {
+ int trailing_bits = Support::ctz<Eterm>(unit);
+
+ /* The tag bits were cleared out by the argument check, so all we
+ * need to do is shift the result into place. */
+ if (trailing_bits < _TAG_IMMED1_SIZE) {
+ a.lsr(out, out, imm(_TAG_IMMED1_SIZE - trailing_bits));
+ } else if (trailing_bits > _TAG_IMMED1_SIZE) {
+ a.lsl(out, out, imm(trailing_bits - _TAG_IMMED1_SIZE));
+ }
+ } else {
+ if (unit >= (1 << _TAG_IMMED1_SIZE)) {
+ mov_imm(TMP1, unit >> _TAG_IMMED1_SIZE);
+ } else {
+ a.lsr(out, out, imm(_TAG_IMMED1_SIZE));
+ mov_imm(TMP1, unit);
+ }
+
+ a.mul(out, out, TMP1);
+ }
+
+ a.cond_ne().b(fail);
+
+ return 1;
+ }
+}
+
+void BeamModuleAssembler::emit_i_bs_init_heap(const ArgVal &Size,
+ const ArgVal &Heap,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ mov_arg(ARG4, Size);
+ mov_arg(ARG5, Heap);
+ mov_arg(ARG6, Live);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ load_erl_bits_state(ARG3);
+ runtime_call<6>(beam_jit_bs_init);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ mov_arg(Dst, ARG1);
+}
+
+/* Set the error reason when a size check has failed. */
+void BeamGlobalAssembler::emit_bs_size_check_shared() {
+ emit_enter_runtime_frame();
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(beam_jit_bs_field_size_argument_error);
+
+ emit_leave_runtime(0);
+ emit_leave_runtime_frame();
+
+ mov_imm(ARG4, 0);
+ a.b(labels[raise_exception]);
+}
+
+void BeamModuleAssembler::emit_i_bs_init_fail_heap(const ArgVal &Size,
+ const ArgVal &Heap,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ Label fail;
+
+ if (Fail.getValue() != 0) {
+ fail = resolve_beam_label(Fail, dispUnknown);
+ } else {
+ fail = a.newLabel();
+ }
+
+ if (emit_bs_get_field_size(Size, 1, fail, ARG4) >= 0) {
+ mov_arg(ARG5, Heap);
+ mov_arg(ARG6, Live);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ load_erl_bits_state(ARG3);
+ runtime_call<6>(beam_jit_bs_init);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ mov_arg(Dst, ARG1);
+ }
+
+ if (Fail.getValue() == 0) {
+ Label next = a.newLabel();
+
+ a.b(next);
+
+ a.bind(fail);
+ {
+ mov_arg(ARG2, Size);
+ fragment_call(ga->get_bs_size_check_shared());
+ }
+
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_i_bs_init(const ArgVal &Size,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ const ArgVal Heap(ArgVal::Word, 0);
+ emit_i_bs_init_heap(Size, Heap, Live, Dst);
+}
+
+void BeamModuleAssembler::emit_i_bs_init_fail(const ArgVal &Size,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ const ArgVal Heap(ArgVal::Word, 0);
+ emit_i_bs_init_fail_heap(Size, Heap, Fail, Live, Dst);
+}
+
+void BeamModuleAssembler::emit_i_bs_init_bits(const ArgVal &NumBits,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ const ArgVal heap(ArgVal::Word, 0);
+ emit_i_bs_init_bits_heap(NumBits, heap, Live, Dst);
+}
+
+void BeamModuleAssembler::emit_i_bs_init_bits_heap(const ArgVal &NumBits,
+ const ArgVal &Alloc,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ mov_arg(ARG4, NumBits);
+ mov_arg(ARG5, Alloc);
+ mov_arg(ARG6, Live);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ load_erl_bits_state(ARG3);
+ runtime_call<6>(beam_jit_bs_init_bits);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_bs_init_bits_fail(const ArgVal &NumBits,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ const ArgVal Heap(ArgVal::Word, 0);
+
+ emit_i_bs_init_bits_fail_heap(NumBits, Heap, Fail, Live, Dst);
+}
+
+void BeamModuleAssembler::emit_i_bs_init_bits_fail_heap(const ArgVal &NumBits,
+ const ArgVal &Alloc,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Dst) {
+ Label fail;
+
+ if (Fail.getValue() != 0) {
+ fail = resolve_beam_label(Fail, dispUnknown);
+ } else {
+ fail = a.newLabel();
+ }
+
+ if (emit_bs_get_field_size(NumBits, 1, fail, ARG4) >= 0) {
+ mov_arg(ARG5, Alloc);
+ mov_arg(ARG6, Live);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ load_erl_bits_state(ARG3);
+ runtime_call<6>(beam_jit_bs_init_bits);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ mov_arg(Dst, ARG1);
+ }
+
+ if (Fail.getValue() == 0) {
+ Label next = a.newLabel();
+
+ a.b(next);
+ a.bind(fail);
+ {
+ mov_arg(ARG2, NumBits);
+ fragment_call(ga->get_bs_size_check_shared());
+ }
+
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_bs_put_string(const ArgVal &Size,
+ const ArgVal &Ptr) {
+ mov_arg(ARG2, Ptr);
+ mov_arg(ARG3, Size);
+
+ emit_enter_runtime();
+
+ load_erl_bits_state(ARG1);
+ runtime_call<3>(erts_new_bs_put_string);
+
+ emit_leave_runtime();
+}
+
+void BeamModuleAssembler::emit_i_new_bs_put_integer_imm(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Sz,
+ const ArgVal &Flags) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG3, Sz);
+ mov_arg(ARG4, Flags);
+
+ emit_enter_runtime();
+
+ load_erl_bits_state(ARG1);
+ runtime_call<4>(erts_new_bs_put_integer);
+
+ emit_leave_runtime();
+
+ if (Fail.getValue() != 0) {
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+ } else {
+ Label next = a.newLabel();
+
+ a.cbnz(ARG1, next);
+ emit_error(BADARG);
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_i_new_bs_put_integer(const ArgVal &Fail,
+ const ArgVal &Sz,
+ const ArgVal &Flags,
+ const ArgVal &Src) {
+ int unit = Flags.getValue() >> 3;
+ Label next, fail;
+
+ if (Fail.getValue() != 0) {
+ fail = resolve_beam_label(Fail, dispUnknown);
+ } else {
+ fail = a.newLabel();
+ next = a.newLabel();
+ }
+
+ /* Clobbers RET + ARG3 */
+ if (emit_bs_get_field_size(Sz, unit, fail, ARG3) >= 0) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG4, Flags);
+
+ emit_enter_runtime();
+
+ load_erl_bits_state(ARG1);
+ runtime_call<4>(erts_new_bs_put_integer);
+
+ emit_leave_runtime();
+
+ if (Fail.getValue() != 0) {
+ a.cbz(ARG1, fail);
+ } else {
+ a.cbnz(ARG1, next);
+ }
+ }
+
+ if (Fail.getValue() == 0) {
+ a.bind(fail);
+ emit_error(BADARG);
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_i_new_bs_put_binary(const ArgVal &Fail,
+ const ArgVal &Sz,
+ const ArgVal &Flags,
+ const ArgVal &Src) {
+ int unit = Flags.getValue() >> 3;
+ Label next, fail;
+
+ if (Fail.getValue() != 0) {
+ fail = resolve_beam_label(Fail, dispUnknown);
+ } else {
+ fail = a.newLabel();
+ next = a.newLabel();
+ }
+
+ if (emit_bs_get_field_size(Sz, unit, fail, ARG3) >= 0) {
+ mov_arg(ARG2, Src);
+
+ emit_enter_runtime<Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_new_bs_put_binary);
+
+ emit_leave_runtime<Update::eReductions>();
+
+ if (Fail.getValue() != 0) {
+ a.cbz(ARG1, fail);
+ } else {
+ a.cbnz(ARG1, next);
+ }
+ }
+
+ if (Fail.getValue() == 0) {
+ a.bind(fail);
+ emit_error(BADARG);
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_i_new_bs_put_binary_all(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Unit) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG3, Unit);
+
+ emit_enter_runtime<Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_new_bs_put_binary_all);
+
+ emit_leave_runtime<Update::eReductions>();
+
+ if (Fail.getValue() == 0) {
+ Label next = a.newLabel();
+
+ a.cbnz(ARG1, next);
+ emit_error(BADARG);
+ a.bind(next);
+ } else {
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+ }
+}
+
+void BeamModuleAssembler::emit_i_new_bs_put_binary_imm(const ArgVal &Fail,
+ const ArgVal &Sz,
+ const ArgVal &Src) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG3, Sz);
+
+ emit_enter_runtime<Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_new_bs_put_binary);
+
+ emit_leave_runtime<Update::eReductions>();
+
+ if (Fail.getValue() == 0) {
+ Label next = a.newLabel();
+
+ a.cbnz(ARG1, next);
+ emit_error(BADARG);
+ a.bind(next);
+ } else {
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+ }
+}
+
+void BeamModuleAssembler::emit_i_new_bs_put_float(const ArgVal &Fail,
+ const ArgVal &Sz,
+ const ArgVal &Flags,
+ const ArgVal &Src) {
+ int unit = Flags.getValue() >> 3;
+ Label next, fail;
+
+ if (Fail.getValue() != 0) {
+ fail = resolve_beam_label(Fail, dispUnknown);
+ } else {
+ fail = a.newLabel();
+ next = a.newLabel();
+ }
+
+ if (emit_bs_get_field_size(Sz, unit, fail, ARG3) >= 0) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG4, Flags);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<4>(erts_new_bs_put_float);
+
+ emit_leave_runtime();
+
+ if (Fail.getValue() != 0) {
+ a.cbz(ARG1, fail);
+ } else {
+ a.cbnz(ARG1, next);
+ }
+ }
+
+ if (Fail.getValue() == 0) {
+ a.bind(fail);
+ emit_error(BADARG);
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_i_new_bs_put_float_imm(const ArgVal &Fail,
+ const ArgVal &Sz,
+ const ArgVal &Flags,
+ const ArgVal &Src) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG3, Sz);
+ mov_arg(ARG4, Flags);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<4>(erts_new_bs_put_float);
+
+ emit_leave_runtime();
+
+ if (Fail.getValue() != 0) {
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+ } else {
+ Label next = a.newLabel();
+
+ a.cbnz(ARG1, next);
+ emit_error(BADARG);
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_i_bs_start_match3(const ArgVal &Src,
+ const ArgVal &Live,
+ const ArgVal &Fail,
+ const ArgVal &Dst) {
+ Label is_binary = a.newLabel(), next = a.newLabel();
+
+ mov_arg(ARG2, Src);
+
+ if (Fail.getValue() != 0) {
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), ARG2);
+ } else {
+ /* bs_start_match3 may not throw, and the compiler will only emit {f,0}
+ * when it knows that the source is a match state or binary, so we're
+ * free to skip the binary tests. */
+ }
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, ARG2);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr, 0));
+
+ a.and_(TMP1, TMP1, imm(_HEADER_SUBTAG_MASK));
+ a.cmp(TMP1, imm(BIN_MATCHSTATE_SUBTAG));
+ a.cond_eq().b(next);
+
+ if (Fail.getValue() != 0) {
+ comment("is_binary_header");
+ a.cmp(TMP1, _TAG_HEADER_SUB_BIN);
+ a.cond_eq().b(is_binary);
+ ERTS_CT_ASSERT(_TAG_HEADER_REFC_BIN + 4 == _TAG_HEADER_HEAP_BIN);
+ a.and_(TMP1, TMP1, imm(~4));
+ a.cmp(TMP1, imm(_TAG_HEADER_REFC_BIN));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ }
+
+ a.bind(is_binary);
+ {
+ /* Src is not guaranteed to be inside the live range, so we need to
+ * stash it during GC. */
+ emit_gc_test_preserve(ArgVal(ArgVal::Word, ERL_BIN_MATCHSTATE_SIZE(0)),
+ Live,
+ ARG2);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ /* ARG2 was set above */
+ runtime_call<2>(erts_bs_start_match_3);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap>(Live.getValue());
+
+ a.add(ARG2, ARG1, imm(TAG_PRIMARY_BOXED));
+ }
+
+ a.bind(next);
+ mov_arg(Dst, ARG2);
+}
+
+void BeamModuleAssembler::emit_i_bs_match_string(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Bits,
+ const ArgVal &Ptr) {
+ const int position_offset = offsetof(ErlBinMatchState, mb.offset);
+ const int size_offset = offsetof(ErlBinMatchState, mb.size);
+ const int base_offset = offsetof(ErlBinMatchState, mb.base);
+
+ const UWord size = Bits.getValue();
+
+ {
+ auto ctx_reg = load_source(Ctx, TMP1);
+
+ a.ldur(TMP2, emit_boxed_val(ctx_reg.reg, position_offset));
+ a.ldur(TMP3, emit_boxed_val(ctx_reg.reg, size_offset));
+ a.add(TMP4, TMP2, imm(size));
+ a.cmp(TMP4, TMP3);
+ a.cond_hi().b(resolve_beam_label(Fail, disp1MB));
+
+ /* ARG4 = mb->offset & 7 */
+ a.and_(ARG4, TMP2, imm(7));
+
+ /* ARG3 = mb->base + (mb->offset >> 3) */
+ a.lsr(TMP2, TMP2, imm(3));
+ a.ldur(TMP1, emit_boxed_val(ctx_reg.reg, base_offset));
+ a.add(ARG3, TMP1, TMP2);
+ }
+
+ emit_enter_runtime();
+
+ mov_arg(ARG1, Ptr);
+ mov_imm(ARG2, 0);
+ mov_imm(ARG5, size);
+ runtime_call<5>(erts_cmp_bits);
+
+ emit_leave_runtime();
+ a.cbnz(ARG1, resolve_beam_label(Fail, disp1MB));
+
+ {
+ auto ctx_reg = load_source(Ctx, TMP1);
+
+ a.ldur(TMP2, emit_boxed_val(ctx_reg.reg, position_offset));
+ a.add(TMP2, TMP2, imm(size));
+ a.stur(TMP2, emit_boxed_val(ctx_reg.reg, position_offset));
+ }
+}
+
+void BeamModuleAssembler::emit_i_bs_get_position(const ArgVal &Ctx,
+ const ArgVal &Dst) {
+ const int position_offset = offsetof(ErlBinMatchState, mb.offset);
+ auto ctx_reg = load_source(Ctx, TMP1);
+ auto dst_reg = init_destination(Dst, TMP2);
+
+ /* Match contexts can never be literals, so we can skip clearing literal
+ * tags. */
+ a.ldur(dst_reg.reg, emit_boxed_val(ctx_reg.reg, position_offset));
+ a.lsl(dst_reg.reg, dst_reg.reg, imm(_TAG_IMMED1_SIZE));
+ a.orr(dst_reg.reg, dst_reg.reg, imm(_TAG_IMMED1_SMALL));
+
+ flush_var(dst_reg);
+}
+
+void BeamModuleAssembler::emit_i_bs_get_fixed_integer(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Flags,
+ const ArgVal &Bits,
+ const ArgVal &Dst) {
+ auto ctx = load_source(Ctx, TMP1);
+ int flags, bits;
+
+ flags = Flags.getValue();
+ bits = Bits.getValue();
+
+ if (bits >= SMALL_BITS) {
+ emit_gc_test_preserve(ArgVal(ArgVal::Word, BIG_NEED_FOR_BITS(bits)),
+ Live,
+ ctx.reg);
+ }
+
+ lea(ARG4, emit_boxed_val(ctx.reg, offsetof(ErlBinMatchState, mb)));
+
+ if (bits >= SMALL_BITS) {
+ emit_enter_runtime<Update::eHeap>(Live.getValue());
+ } else {
+ emit_enter_runtime(Live.getValue());
+ }
+
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, bits);
+ a.mov(ARG3, flags);
+ /* ARG4 set above. */
+ runtime_call<4>(erts_bs_get_integer_2);
+
+ if (bits >= SMALL_BITS) {
+ emit_leave_runtime<Update::eHeap>(Live.getValue());
+ } else {
+ emit_leave_runtime(Live.getValue());
+ }
+
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_bs_get_integer(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &FlagsAndUnit,
+ const ArgVal &Sz,
+ const ArgVal &Dst) {
+ Label fail;
+ int unit;
+
+ fail = resolve_beam_label(Fail, dispUnknown);
+ unit = FlagsAndUnit.getValue() >> 3;
+
+ if (emit_bs_get_field_size(Sz, unit, fail, ARG5) >= 0) {
+ mov_arg(ARG3, Ctx);
+ mov_arg(ARG4, FlagsAndUnit);
+ mov_arg(ARG6, Live);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<6>(beam_jit_bs_get_integer);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue());
+
+ emit_branch_if_not_value(ARG1, fail);
+ mov_arg(Dst, ARG1);
+ }
+}
+
+void BeamModuleAssembler::emit_bs_test_tail2(const ArgVal &Fail,
+ const ArgVal &Ctx,
+ const ArgVal &Offset) {
+ const int position_offset = offsetof(ErlBinMatchState, mb.offset);
+ const int size_offset = offsetof(ErlBinMatchState, mb.size);
+
+ auto ctx_reg = load_source(Ctx, TMP1);
+
+ ASSERT(Offset.isWord());
+
+ a.ldur(TMP2, emit_boxed_val(ctx_reg.reg, size_offset));
+ a.ldur(TMP3, emit_boxed_val(ctx_reg.reg, position_offset));
+ a.sub(TMP2, TMP2, TMP3);
+
+ if (Offset.getValue() != 0) {
+ a.cmp(TMP2, imm(Offset.getValue()));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.cbnz(TMP2, resolve_beam_label(Fail, disp1MB));
+ }
+}
+
+void BeamModuleAssembler::emit_bs_set_position(const ArgVal &Ctx,
+ const ArgVal &Pos) {
+ const int position_offset = offsetof(ErlBinMatchState, mb.offset);
+ auto [ctx, pos] = load_sources(Ctx, TMP1, Pos, TMP2);
+
+ a.lsr(TMP2, pos.reg, imm(_TAG_IMMED1_SIZE));
+ a.stur(TMP2, emit_boxed_val(ctx.reg, position_offset));
+}
+
+void BeamModuleAssembler::emit_i_bs_get_binary_all2(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Unit,
+ const ArgVal &Dst) {
+ unsigned unit = Unit.getValue();
+
+ mov_arg(ARG1, Ctx);
+
+ /* Ctx is not guaranteed to be inside the live range, so we need to stash
+ * it during GC. */
+ emit_gc_test_preserve(ArgVal(ArgVal::Word, EXTRACT_SUB_BIN_HEAP_NEED),
+ Live,
+ ARG1);
+
+ /* Make field fetching slightly more compact by pre-loading the match
+ * buffer into the right argument slot for `erts_bs_get_binary_all_2`. */
+ lea(ARG2, emit_boxed_val(ARG1, offsetof(ErlBinMatchState, mb)));
+
+ ERTS_CT_ASSERT_FIELD_PAIR(ErlBinMatchBuffer, offset, size);
+ a.ldp(TMP2, TMP3, arm::Mem(ARG2, offsetof(ErlBinMatchBuffer, offset)));
+
+ /* Remainder = Size - Offset */
+ a.sub(TMP1, TMP3, TMP2);
+
+ /* Unit may be 1 if compiling with +no_bsm3, which lacks the
+ * bs_get_tail instruction. */
+ if (unit > 1) {
+ if ((unit & (unit - 1))) {
+ mov_imm(TMP2, unit);
+
+ a.udiv(TMP3, TMP1, TMP2);
+ a.msub(TMP1, TMP3, TMP2, TMP1);
+
+ a.cbnz(TMP1, resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.tst(TMP1, imm(unit - 1));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ }
+ }
+
+ emit_enter_runtime<Update::eHeap>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ /* ARG2 was set above. */
+ runtime_call<2>(erts_bs_get_binary_all_2);
+
+ emit_leave_runtime<Update::eHeap>(Live.getValue());
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamGlobalAssembler::emit_bs_get_tail_shared() {
+ lea(TMP1, emit_boxed_val(ARG1, offsetof(ErlBinMatchState, mb)));
+
+ ERTS_CT_ASSERT_FIELD_PAIR(ErlBinMatchBuffer, orig, base);
+ a.ldp(ARG2, ARG3, arm::Mem(TMP1, offsetof(ErlBinMatchBuffer, orig)));
+
+ ERTS_CT_ASSERT_FIELD_PAIR(ErlBinMatchBuffer, offset, size);
+ a.ldp(ARG4, TMP1, arm::Mem(TMP1, offsetof(ErlBinMatchBuffer, offset)));
+
+ lea(ARG1, arm::Mem(c_p, offsetof(Process, htop)));
+
+ /* Extracted size = mb->size - mb->offset */
+ a.sub(ARG5, TMP1, ARG4);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eHeap>();
+
+ runtime_call<5>(erts_extract_sub_binary);
+
+ emit_leave_runtime<Update::eHeap>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+void BeamModuleAssembler::emit_bs_get_tail(const ArgVal &Ctx,
+ const ArgVal &Dst,
+ const ArgVal &Live) {
+ mov_arg(ARG1, Ctx);
+
+ /* Ctx is not guaranteed to be inside the live range, so we need to stash
+ * it during GC. */
+ emit_gc_test_preserve(ArgVal(ArgVal::Word, EXTRACT_SUB_BIN_HEAP_NEED),
+ Live,
+ ARG1);
+
+ fragment_call(ga->get_bs_get_tail_shared());
+
+ mov_arg(Dst, ARG1);
+}
+
+/* Bits to skip are passed in ARG1 */
+void BeamModuleAssembler::emit_bs_skip_bits(const ArgVal &Fail,
+ const ArgVal &Ctx) {
+ const int position_offset = offsetof(ErlBinMatchState, mb.offset);
+ const int size_offset = offsetof(ErlBinMatchState, mb.size);
+
+ auto ctx_reg = load_source(Ctx, TMP1);
+
+ a.ldur(TMP2, emit_boxed_val(ctx_reg.reg, position_offset));
+ a.ldur(TMP3, emit_boxed_val(ctx_reg.reg, size_offset));
+
+ a.add(TMP2, TMP2, ARG1);
+ a.cmp(TMP2, TMP3);
+ a.cond_hi().b(resolve_beam_label(Fail, disp1MB));
+
+ a.stur(TMP2, emit_boxed_val(ctx_reg.reg, position_offset));
+}
+
+void BeamModuleAssembler::emit_i_bs_skip_bits2(const ArgVal &Ctx,
+ const ArgVal &Bits,
+ const ArgVal &Fail,
+ const ArgVal &Unit) {
+ Label fail = resolve_beam_label(Fail, dispUnknown);
+
+ if (emit_bs_get_field_size(Bits, Unit.getValue(), fail, ARG1) >= 0) {
+ emit_bs_skip_bits(Fail, Ctx);
+ }
+}
+
+void BeamModuleAssembler::emit_i_bs_skip_bits_imm2(const ArgVal &Fail,
+ const ArgVal &Ctx,
+ const ArgVal &Bits) {
+ mov_arg(ARG1, Bits);
+ emit_bs_skip_bits(Fail, Ctx);
+}
+
+void BeamModuleAssembler::emit_i_bs_get_binary2(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Size,
+ const ArgVal &Flags,
+ const ArgVal &Dst) {
+ Label fail;
+ int unit;
+
+ fail = resolve_beam_label(Fail, dispUnknown);
+ unit = Flags.getValue() >> 3;
+
+ if (emit_bs_get_field_size(Size, unit, fail, ARG2) >= 0) {
+ a.str(ARG2, TMP_MEM1q);
+
+ mov_arg(ARG4, Ctx);
+
+ /* Ctx is not guaranteed to be inside the live range, so we need to
+ * stash it during GC. */
+ emit_gc_test_preserve(ArgVal(ArgVal::Word, EXTRACT_SUB_BIN_HEAP_NEED),
+ Live,
+ ARG4);
+
+ lea(ARG4, emit_boxed_val(ARG4, offsetof(ErlBinMatchState, mb)));
+
+ emit_enter_runtime<Update::eHeap>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ a.ldr(ARG2, TMP_MEM1q);
+ mov_imm(ARG3, Flags.getValue());
+ runtime_call<4>(erts_bs_get_binary_2);
+
+ emit_leave_runtime<Update::eHeap>(Live.getValue());
+
+ emit_branch_if_not_value(ARG1, fail);
+
+ mov_arg(Dst, ARG1);
+ }
+}
+
+void BeamModuleAssembler::emit_i_bs_get_float2(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Live,
+ const ArgVal &Sz,
+ const ArgVal &Flags,
+ const ArgVal &Dst) {
+ Label fail;
+ Sint unit;
+
+ fail = resolve_beam_label(Fail, dispUnknown);
+ unit = Flags.getValue() >> 3;
+
+ mov_arg(ARG4, Ctx);
+
+ /* Ctx is not guaranteed to be inside the live range, so we need to stash
+ * it during GC. */
+ emit_gc_test_preserve(ArgVal(ArgVal::Word, FLOAT_SIZE_OBJECT), Live, ARG4);
+
+ if (emit_bs_get_field_size(Sz, unit, fail, ARG2) >= 0) {
+ lea(ARG4, emit_boxed_val(ARG4, offsetof(ErlBinMatchState, mb)));
+
+ emit_enter_runtime<Update::eHeap>(Live.getValue());
+
+ a.mov(ARG1, c_p);
+ mov_imm(ARG3, Flags.getValue());
+ runtime_call<4>(erts_bs_get_float_2);
+
+ emit_leave_runtime<Update::eHeap>(Live.getValue());
+
+ emit_branch_if_not_value(ARG1, fail);
+
+ mov_arg(Dst, ARG1);
+ }
+}
+
+void BeamModuleAssembler::emit_i_bs_utf8_size(const ArgVal &Src,
+ const ArgVal &Dst) {
+ auto src_reg = load_source(Src, TMP1);
+ auto dst_reg = init_destination(Dst, TMP2);
+
+ Label next = a.newLabel();
+
+ /* Note that the source and destination registers could be the
+ * same register. Therefore, we must copy the source register
+ * before writing to the destination register. */
+ a.lsr(TMP1, src_reg.reg, imm(_TAG_IMMED1_SIZE));
+ mov_imm(dst_reg.reg, make_small(1));
+ a.cmp(TMP1, imm(0x7F));
+ a.cond_ls().b(next);
+
+ mov_imm(dst_reg.reg, make_small(2));
+ a.cmp(TMP1, imm(0x7FFUL));
+ a.cond_ls().b(next);
+
+ a.cmp(TMP1, imm(0x10000UL));
+ mov_imm(TMP2, make_small(3));
+ mov_imm(TMP3, make_small(4));
+ a.csel(dst_reg.reg, TMP2, TMP3, arm::Cond::kLO);
+
+ a.bind(next);
+ flush_var(dst_reg);
+}
+
+void BeamModuleAssembler::emit_i_bs_put_utf8(const ArgVal &Fail,
+ const ArgVal &Src) {
+ mov_arg(ARG2, Src);
+
+ emit_enter_runtime();
+
+ load_erl_bits_state(ARG1);
+ runtime_call<2>(erts_bs_put_utf8);
+
+ emit_leave_runtime();
+
+ if (Fail.getValue() != 0) {
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+ } else {
+ Label next = a.newLabel();
+
+ a.cbnz(ARG1, next);
+ emit_error(BADARG);
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_bs_get_utf8(const ArgVal &Ctx,
+ const ArgVal &Fail) {
+ mov_arg(ARG1, Ctx);
+ lea(ARG1, emit_boxed_val(ARG1, offsetof(ErlBinMatchState, mb)));
+
+ emit_enter_runtime();
+
+ runtime_call<1>(erts_bs_get_utf8);
+
+ emit_leave_runtime();
+
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+}
+
+void BeamModuleAssembler::emit_i_bs_get_utf8(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Dst) {
+ emit_bs_get_utf8(Ctx, Fail);
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_bs_skip_utf8(const ArgVal &Ctx,
+ const ArgVal &Fail) {
+ emit_bs_get_utf8(Ctx, Fail);
+}
+
+void BeamModuleAssembler::emit_i_bs_utf16_size(const ArgVal &Src,
+ const ArgVal &Dst) {
+ auto src_reg = load_source(Src, TMP1);
+ auto dst_reg = init_destination(Dst, TMP2);
+
+ /* erts_bs_put_utf16 errors out whenever something's fishy, so we can
+ * return garbage (2 or 4) if our input is not a small. */
+ a.asr(TMP1, src_reg.reg, imm(_TAG_IMMED1_SIZE));
+ a.cmp(TMP1, imm(0x10000UL));
+ mov_imm(TMP1, make_small(2));
+ mov_imm(TMP2, make_small(4));
+ a.csel(dst_reg.reg, TMP1, TMP2, arm::Cond::kLO);
+
+ flush_var(dst_reg);
+}
+
+void BeamModuleAssembler::emit_bs_put_utf16(const ArgVal &Fail,
+ const ArgVal &Flags,
+ const ArgVal &Src) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG3, Flags);
+
+ emit_enter_runtime();
+
+ load_erl_bits_state(ARG1);
+ runtime_call<3>(erts_bs_put_utf16);
+
+ emit_leave_runtime();
+
+ if (Fail.getValue() != 0) {
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+ } else {
+ Label next = a.newLabel();
+
+ a.cbnz(ARG1, next);
+ emit_error(BADARG);
+ a.bind(next);
+ }
+}
+
+void BeamModuleAssembler::emit_bs_get_utf16(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Flags) {
+ auto ctx_reg = load_source(Ctx, TMP1);
+
+ lea(ARG1, emit_boxed_val(ctx_reg.reg, offsetof(ErlBinMatchState, mb)));
+
+ emit_enter_runtime();
+
+ mov_imm(ARG2, Flags.getValue());
+ runtime_call<2>(erts_bs_get_utf16);
+
+ emit_leave_runtime();
+
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+}
+
+void BeamModuleAssembler::emit_i_bs_get_utf16(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Flags,
+ const ArgVal &Dst) {
+ emit_bs_get_utf16(Ctx, Fail, Flags);
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_bs_skip_utf16(const ArgVal &Ctx,
+ const ArgVal &Fail,
+ const ArgVal &Flags) {
+ emit_bs_get_utf16(Ctx, Fail, Flags);
+}
+
+void BeamModuleAssembler::emit_validate_unicode(Label next,
+ Label fail,
+ arm::Gp value) {
+ ASSERT(value != TMP2);
+
+ a.and_(TMP2, value, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP2, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(fail);
+
+ mov_imm(TMP2, make_small(0xD800UL));
+ a.cmp(value, TMP2);
+ a.cond_lo().b(next);
+
+ mov_imm(TMP2, make_small(0xDFFFUL));
+ a.cmp(value, TMP2);
+ a.cond_ls().b(fail);
+
+ mov_imm(TMP2, make_small(0x10FFFFUL));
+ a.cmp(value, TMP2);
+ a.cond_hi().b(fail);
+
+ a.b(next);
+}
+
+void BeamModuleAssembler::emit_i_bs_validate_unicode(const ArgVal &Fail,
+ const ArgVal &Src) {
+ auto src_reg = load_source(Src, TMP1);
+ Label fail, next = a.newLabel();
+
+ if (Fail.getValue() != 0) {
+ fail = resolve_beam_label(Fail, dispUnknown);
+ } else {
+ fail = a.newLabel();
+ }
+
+ emit_validate_unicode(next, fail, src_reg.reg);
+
+ if (Fail.getValue() == 0) {
+ a.bind(fail);
+ emit_error(BADARG);
+ }
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_i_bs_validate_unicode_retract(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Ms) {
+ Label fail = a.newLabel(), next = a.newLabel();
+ auto src_reg = load_source(Src, TMP1);
+
+ emit_validate_unicode(next, fail, src_reg.reg);
+
+ a.bind(fail);
+ {
+ const int position_offset = offsetof(ErlBinMatchState, mb.offset);
+ auto ctx_reg = load_source(Ms, TMP2);
+
+ a.ldur(TMP1, emit_boxed_val(ctx_reg.reg, position_offset));
+ a.sub(TMP1, TMP1, imm(32));
+ a.stur(TMP1, emit_boxed_val(ctx_reg.reg, position_offset));
+
+ if (Fail.getValue() != 0) {
+ a.b(resolve_beam_label(Fail, disp128MB));
+ } else {
+ emit_error(BADARG);
+ }
+ }
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_bs_test_unit(const ArgVal &Fail,
+ const ArgVal &Ctx,
+ const ArgVal &Unit) {
+ auto ctx_reg = load_source(Ctx, TMP1);
+ unsigned int unit = Unit.getValue();
+
+ a.ldur(TMP2,
+ emit_boxed_val(ctx_reg.reg, offsetof(ErlBinMatchState, mb.size)));
+ a.ldur(TMP3,
+ emit_boxed_val(ctx_reg.reg, offsetof(ErlBinMatchState, mb.offset)));
+
+ a.sub(TMP1, TMP2, TMP3);
+
+ if ((unit & (unit - 1))) {
+ mov_imm(TMP2, unit);
+
+ a.udiv(TMP3, TMP1, TMP2);
+ a.msub(TMP1, TMP3, TMP2, TMP1);
+
+ a.cbnz(TMP1, resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.tst(TMP1, imm(unit - 1));
+ a.cond_ne().b(resolve_beam_label(Fail, dispUnknown));
+ }
+}
+
+/* ARG2 = current `Size`,
+ * ARG3 = elements to `Add`,
+ * ARG4 = element `Unit`
+ *
+ * Error is indicated through cond_ne() */
+void BeamGlobalAssembler::emit_bs_add_guard_shared() {
+ Label error = a.newLabel();
+
+ /* Since `Unit` is guaranteed to be less than 1024, we can check overflow
+ * and negative numbers by testing whether any of the highest 12 value bits
+ * are set on either argument. */
+ a.orr(TMP1, ARG2, ARG3);
+ a.tst(TMP1, imm(0xFFF0000000000000UL));
+
+ a.and_(TMP1, ARG2, ARG3);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ a.ccmp(TMP1, imm(_TAG_IMMED1_SMALL), imm(0), imm(arm::Cond::kEQ));
+ a.cond_ne().b(error);
+
+ /* Return `Size` + `Add` * `Unit`
+ *
+ * Note that the result takes the tag bits from `Size` */
+ a.and_(TMP2, ARG3, imm(~_TAG_IMMED1_SMALL));
+ a.mul(TMP2, TMP2, ARG4);
+ a.add(ARG1, TMP2, ARG2);
+
+ a.bind(error);
+ a.ret(a64::x30);
+}
+
+/* ARG2 = current `Size`,
+ * ARG3 = elements to `Add`,
+ * ARG4 = element `Unit` */
+void BeamGlobalAssembler::emit_bs_add_body_shared() {
+ Label error = a.newLabel();
+
+ /* Since `Unit` is guaranteed to be less than 1024, we can check overflow
+ * and negative numbers by testing whether any of the highest 12 value bits
+ * are set on either argument. */
+ a.orr(TMP1, ARG2, ARG3);
+ a.tst(TMP1, imm(0xFFF0000000000000UL));
+
+ a.and_(TMP1, ARG2, ARG3);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ a.ccmp(TMP1, imm(_TAG_IMMED1_SMALL), imm(0), imm(arm::Cond::kEQ));
+ a.cond_ne().b(error);
+
+ /* Return `Size` + `Add` * `Unit`
+ *
+ * Note that the result takes the tag bits from `Size` */
+ a.and_(TMP2, ARG3, imm(~_TAG_IMMED1_SMALL));
+ a.mul(TMP2, TMP2, ARG4);
+ a.add(ARG1, TMP2, ARG2);
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ emit_enter_runtime_frame();
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(beam_jit_bs_add_argument_error);
+
+ emit_leave_runtime(0);
+ emit_leave_runtime_frame();
+
+ mov_imm(ARG4, 0);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_bs_add(const ArgVal &Fail,
+ const ArgVal &Size,
+ const ArgVal &Add,
+ const ArgVal &Unit,
+ const ArgVal &Dst) {
+ ASSERT(Unit.isWord() && Unit.getValue() < 1024);
+
+ mov_arg(ARG2, Size);
+ mov_arg(ARG3, Add);
+ mov_arg(ARG4, Unit);
+
+ if (Fail.getValue() == 0) {
+ fragment_call(ga->get_bs_add_body_shared());
+ } else {
+ fragment_call(ga->get_bs_add_guard_shared());
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ }
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_bs_append(const ArgVal &Fail,
+ const ArgVal &ExtraHeap,
+ const ArgVal &Live,
+ const ArgVal &Unit,
+ const ArgVal &Size,
+ const ArgVal &Bin,
+ const ArgVal &Dst) {
+ mov_arg(ARG3, Live);
+ mov_arg(ARG4, Size);
+ mov_arg(ARG5, ExtraHeap);
+ mov_arg(ARG6, Unit);
+
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue()), Bin);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue() + 1);
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<6>(erts_bs_append);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(Live.getValue() + 1);
+
+ if (Fail.getValue() != 0) {
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ Label next = a.newLabel();
+
+ emit_branch_if_value(ARG1, next);
+ /* The error has been prepared in `erts_bs_append` */
+ emit_raise_exception();
+
+ a.bind(next);
+ }
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_bs_private_append(const ArgVal &Fail,
+ const ArgVal &Unit,
+ const ArgVal &Size,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ mov_arg(ARG2, Src);
+ mov_arg(ARG3, Size);
+ mov_arg(ARG4, Unit);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<4>(erts_bs_private_append);
+
+ emit_leave_runtime();
+
+ if (Fail.getValue() != 0) {
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ Label next = a.newLabel();
+
+ emit_branch_if_value(ARG1, next);
+ /* The error has been prepared in `erts_bs_private_append` */
+ emit_raise_exception();
+
+ a.bind(next);
+ }
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_bs_init_writable() {
+ ERTS_CT_ASSERT(ERTS_HIGHEST_CALLEE_SAVE_XREG >= 0);
+
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, XREG0);
+
+ /* We have an implicit liveness of 0, so we don't need to stash X
+ * registers. */
+ emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>(0);
+
+ runtime_call<2>(erts_bs_init_writable);
+
+ emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>(0);
+
+ a.mov(XREG0, ARG1);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_call.cpp b/erts/emulator/beam/jit/arm/instr_call.cpp
new file mode 100644
index 0000000000..7679ae18ea
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_call.cpp
@@ -0,0 +1,217 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "beam_common.h"
+}
+
+void BeamGlobalAssembler::emit_dispatch_return() {
+ a.mov(ARG3, a64::x30);
+ a.str(ZERO, arm::Mem(c_p, offsetof(Process, current)));
+ mov_imm(TMP1, 1);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, arity)));
+ a.b(labels[context_switch_simplified]);
+}
+
+void BeamModuleAssembler::emit_return() {
+ emit_leave_erlang_frame();
+
+#ifdef JIT_HARD_DEBUG
+ /* Validate return address and {x,0} */
+ emit_validate(ArgVal(ArgVal::Word, 1));
+#endif
+
+ /* The reduction test is kept in module code because moving it to a shared
+ * fragment caused major performance regressions in dialyzer. */
+ a.subs(FCALLS, FCALLS, imm(1));
+ a.cond_mi().b(resolve_fragment(ga->get_dispatch_return(), disp1MB));
+
+ a.ret(a64::x30);
+}
+
+void BeamModuleAssembler::emit_i_call(const ArgVal &CallTarget) {
+ erlang_call(resolve_beam_label(CallTarget, disp128MB));
+}
+
+void BeamModuleAssembler::emit_i_call_last(const ArgVal &CallTarget,
+ const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+ emit_i_call_only(CallTarget);
+}
+
+void BeamModuleAssembler::emit_i_call_only(const ArgVal &CallTarget) {
+ emit_leave_erlang_frame();
+ a.b(resolve_beam_label(CallTarget, disp128MB));
+}
+
+/* Handles save_calls. When the active code index is ERTS_SAVE_CALLS_CODE_IX,
+ * all remote calls will land here.
+ *
+ * Export entry is in ARG1, return address is in LR (x30). Both of these must
+ * be preserved since this runs between caller and callee. */
+void BeamGlobalAssembler::emit_dispatch_save_calls() {
+ a.str(ARG1, TMP_MEM1q);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ a.mov(ARG2, ARG1);
+ a.mov(ARG1, c_p);
+ runtime_call<2>(save_calls);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.ldr(ARG1, TMP_MEM1q);
+
+ /* Keep going with the actual code index. */
+ a.mov(TMP1, imm(&the_active_code_index));
+ a.ldr(TMP1.w(), arm::Mem(TMP1));
+
+ branch(emit_setup_export_call(ARG1, TMP1));
+}
+
+void BeamModuleAssembler::emit_i_call_ext(const ArgVal &Exp) {
+ mov_arg(ARG1, Exp);
+
+ arm::Mem target = emit_setup_export_call(ARG1);
+ erlang_call(target);
+}
+
+void BeamModuleAssembler::emit_i_call_ext_only(const ArgVal &Exp) {
+ mov_arg(ARG1, Exp);
+
+ arm::Mem target = emit_setup_export_call(ARG1);
+ emit_leave_erlang_frame();
+ branch(target);
+}
+
+void BeamModuleAssembler::emit_i_call_ext_last(const ArgVal &Exp,
+ const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+ emit_i_call_ext_only(Exp);
+}
+
+static ErtsCodeMFA apply3_mfa = {am_erlang, am_apply, 3};
+
+arm::Mem BeamModuleAssembler::emit_variable_apply(bool includeI) {
+ Label dispatch = a.newLabel(), entry = a.newLabel();
+
+ a.bind(entry);
+
+ emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap |
+ Update::eXRegs>(3);
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+
+ if (includeI) {
+ a.adr(ARG3, entry);
+ } else {
+ mov_imm(ARG3, 0);
+ }
+
+ mov_imm(ARG4, 0);
+
+ comment("apply()");
+ runtime_call<4>(apply);
+
+ /* Any number of X registers can be live at this point. */
+ emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap |
+ Update::eXRegs>();
+
+ a.cbnz(ARG1, dispatch);
+ emit_raise_exception(entry, &apply3_mfa);
+
+ a.bind(dispatch);
+ return emit_setup_export_call(ARG1);
+}
+
+void BeamModuleAssembler::emit_i_apply() {
+ arm::Mem target = emit_variable_apply(false);
+ erlang_call(target);
+}
+
+void BeamModuleAssembler::emit_i_apply_last(const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+ emit_i_apply_only();
+}
+
+void BeamModuleAssembler::emit_i_apply_only() {
+ arm::Mem target = emit_variable_apply(true);
+
+ emit_leave_erlang_frame();
+ branch(target);
+}
+
+arm::Mem BeamModuleAssembler::emit_fixed_apply(const ArgVal &Arity,
+ bool includeI) {
+ Label dispatch = a.newLabel(), entry = a.newLabel();
+
+ a.bind(entry);
+
+ mov_arg(ARG3, Arity);
+
+ emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap |
+ Update::eXRegs>(Arity.getValue() + 2);
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+
+ if (includeI) {
+ a.adr(ARG4, entry);
+ } else {
+ mov_imm(ARG4, 0);
+ }
+
+ mov_imm(ARG5, 0);
+
+ runtime_call<5>(fixed_apply);
+
+ /* We will need to reload all X registers in case there has been
+ * an error. */
+ emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap |
+ Update::eXRegs>();
+
+ a.cbnz(ARG1, dispatch);
+ emit_raise_exception(entry, &apply3_mfa);
+
+ a.bind(dispatch);
+
+ return emit_setup_export_call(ARG1);
+}
+
+void BeamModuleAssembler::emit_apply(const ArgVal &Arity) {
+ arm::Mem target = emit_fixed_apply(Arity, false);
+ erlang_call(target);
+}
+
+void BeamModuleAssembler::emit_apply_last(const ArgVal &Arity,
+ const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+
+ arm::Mem target = emit_fixed_apply(Arity, true);
+
+ emit_leave_erlang_frame();
+ branch(target);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_common.cpp b/erts/emulator/beam/jit/arm/instr_common.cpp
new file mode 100644
index 0000000000..adc8112a2e
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_common.cpp
@@ -0,0 +1,1633 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+/*
+ * Notes.
+ *
+ * The immediate operand for the and, orr, eor, and tst instructions
+ * follow special rules.
+ *
+ * For our purposes, only bit patterns consisting of 1 through 63 ones
+ * at any position in a word are possible to encode as an
+ * immediate. Other patterns must be loaded into a tempoary register.
+ *
+ * Here are some examples of possible immediate values:
+ *
+ * 0b00000011
+ * 0b00001111
+ * 0b00111100
+ *
+ * 0xFFFFFFFFFFFFFFF0
+ * 0x100000000000000F
+ *
+ * The last one is possible because it is the pattern 0x1F
+ * (0b00011111) rotated right one position.
+ *
+ * Here is an example of mask that is not a possible to encode as an
+ * immediate:
+ *
+ * 0b111011
+ *
+ * For more about the encoding rules, see:
+ *
+ * https://stackoverflow.com/questions/30904718/range-of-immediate-values-in-armv8-a64-assembly
+ *
+ */
+
+#include <algorithm>
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "erl_bif_table.h"
+#include "big.h"
+#include "beam_catches.h"
+#include "beam_common.h"
+#include "code_ix.h"
+}
+
+using namespace asmjit;
+
+/* Helpers */
+
+void BeamModuleAssembler::emit_error(int reason) {
+ mov_imm(TMP1, reason);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ emit_raise_exception();
+}
+
+void BeamModuleAssembler::emit_gc_test_preserve(const ArgVal &Need,
+ const ArgVal &Live,
+ arm::Gp term) {
+ const int32_t bytes_needed = (Need.getValue() + S_RESERVED) * sizeof(Eterm);
+ Label after_gc_check = a.newLabel();
+
+ add(ARG3, HTOP, bytes_needed);
+ a.cmp(ARG3, E);
+ a.cond_ls().b(after_gc_check);
+
+ ASSERT(Live.getValue() < ERTS_X_REGS_ALLOCATED);
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue()), term);
+
+ mov_imm(ARG4, Live.getValue() + 1);
+ fragment_call(ga->get_garbage_collect());
+
+ mov_arg(term, ArgVal(ArgVal::XReg, Live.getValue()));
+
+ a.bind(after_gc_check);
+}
+
+void BeamModuleAssembler::emit_gc_test(const ArgVal &Ns,
+ const ArgVal &Nh,
+ const ArgVal &Live) {
+ int32_t bytes_needed =
+ (Ns.getValue() + Nh.getValue() + S_RESERVED) * sizeof(Eterm);
+ Label after_gc_check = a.newLabel();
+
+ add(ARG3, HTOP, bytes_needed);
+ a.cmp(ARG3, E);
+ a.cond_ls().b(after_gc_check);
+
+ mov_imm(ARG4, Live.getValue());
+ fragment_call(ga->get_garbage_collect());
+
+ a.bind(after_gc_check);
+}
+
+void BeamModuleAssembler::emit_validate(const ArgVal &arity) {
+#ifdef DEBUG
+ Label next = a.newLabel(), crash = a.newLabel();
+
+ /* Crash if the Erlang heap is not word-aligned */
+ a.tst(HTOP, imm(sizeof(Eterm) - 1));
+ a.cond_ne().b(crash);
+
+ /* Crash if the Erlang stack is not word-aligned */
+ a.tst(E, imm(sizeof(Eterm) - 1));
+ a.cond_ne().b(crash);
+
+ /* Crash if we've overrun the stack */
+ lea(TMP1, arm::Mem(E, -(int32_t)(S_REDZONE * sizeof(Eterm))));
+ a.cmp(HTOP, TMP1);
+ a.cond_hi().b(crash);
+
+ a.b(next);
+
+ a.bind(crash);
+ a.udf(0xbad);
+ a.bind(next);
+
+# ifdef JIT_HARD_DEBUG
+ emit_enter_runtime_frame();
+
+ for (unsigned i = 0; i < arity.getValue(); i++) {
+ mov_arg(ARG1, ArgVal(ArgVal::XReg, i));
+
+ emit_enter_runtime();
+ runtime_call<1>(beam_jit_validate_term);
+ emit_leave_runtime();
+ }
+
+ emit_leave_runtime_frame();
+# endif
+
+#endif
+}
+
+/* Instrs */
+
+void BeamModuleAssembler::emit_i_validate(const ArgVal &Arity) {
+ emit_validate(Arity);
+}
+
+void BeamModuleAssembler::emit_allocate_heap(const ArgVal &NeedStack,
+ const ArgVal &NeedHeap,
+ const ArgVal &Live) {
+ ASSERT(NeedStack.isWord() && NeedStack.getValue() <= MAX_REG);
+ ArgVal needed = NeedStack;
+
+ emit_gc_test(needed, NeedHeap, Live);
+
+ if (needed.getValue() > 0) {
+ sub(E, E, needed.getValue() * sizeof(Eterm));
+ }
+}
+
+void BeamModuleAssembler::emit_allocate(const ArgVal &NeedStack,
+ const ArgVal &Live) {
+ emit_allocate_heap(NeedStack, ArgVal(ArgVal::Word, 0), Live);
+}
+
+void BeamModuleAssembler::emit_deallocate(const ArgVal &Deallocate) {
+ ASSERT(Deallocate.isWord() && Deallocate.getValue() <= 1023);
+
+ if (Deallocate.getValue() > 0) {
+ add(E, E, Deallocate.getValue() * sizeof(Eterm));
+ }
+}
+
+void BeamModuleAssembler::emit_test_heap(const ArgVal &Nh, const ArgVal &Live) {
+ emit_gc_test(ArgVal(ArgVal::Word, 0), Nh, Live);
+}
+
+void BeamModuleAssembler::emit_normal_exit() {
+ /* This is implictly global; it does not normally appear in modules and
+ * doesn't require size optimization. */
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+ emit_proc_lc_unrequire();
+
+ mov_imm(TMP1, EXC_NORMAL);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.str(ZERO, arm::Mem(c_p, offsetof(Process, arity)));
+ a.mov(ARG1, c_p);
+ mov_imm(ARG2, am_normal);
+ runtime_call<2>(erts_do_exit_process);
+
+ emit_proc_lc_require();
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.b(resolve_fragment(ga->get_do_schedule(), disp128MB));
+}
+
+void BeamModuleAssembler::emit_continue_exit() {
+ /* This is implictly global; it does not normally appear in modules and
+ * doesn't require size optimization. */
+
+ emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>(0);
+ emit_proc_lc_unrequire();
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(erts_continue_exit_process);
+
+ emit_proc_lc_require();
+ emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>(0);
+
+ a.b(resolve_fragment(ga->get_do_schedule(), disp128MB));
+}
+
+void BeamModuleAssembler::emit_get_list(const ArgVal &Src,
+ const ArgVal &Hd,
+ const ArgVal &Tl) {
+ auto src = load_source(Src, TMP1);
+ auto hd = init_destination(Hd, TMP2);
+ auto tl = init_destination(Tl, TMP3);
+ arm::Gp cons_ptr = emit_ptr_val(TMP1, src.reg);
+
+ /* The `ldp` instruction does not accept a negative offset, so we
+ * will need subtract the LIST tag beforehand. (This also nicely
+ * take care of the potential overwriting issue when Src == Hd.) */
+ a.sub(TMP1, cons_ptr, imm(TAG_PRIMARY_LIST));
+ if (hd.reg == tl.reg) {
+ /* ldp with two identical registers is an illegal
+ * instruction. Produce the same result at the interpreter. */
+ a.ldr(tl.reg, arm::Mem(TMP1, sizeof(Eterm)));
+ flush_var(tl);
+ } else {
+ a.ldp(hd.reg, tl.reg, arm::Mem(TMP1));
+ flush_vars(hd, tl);
+ }
+}
+
+void BeamModuleAssembler::emit_get_hd(const ArgVal &Src, const ArgVal &Hd) {
+ auto src = load_source(Src, TMP1);
+ auto hd = init_destination(Hd, TMP2);
+ arm::Gp cons_ptr = emit_ptr_val(TMP1, src.reg);
+
+ a.ldur(hd.reg, getCARRef(cons_ptr));
+ flush_var(hd);
+}
+
+void BeamModuleAssembler::emit_get_tl(const ArgVal &Src, const ArgVal &Tl) {
+ auto src = load_source(Src, TMP1);
+ auto tl = init_destination(Tl, TMP2);
+ arm::Gp cons_ptr = emit_ptr_val(TMP1, src.reg);
+
+ a.ldur(tl.reg, getCDRRef(cons_ptr));
+ flush_var(tl);
+}
+
+void BeamModuleAssembler::emit_i_get(const ArgVal &Src, const ArgVal &Dst) {
+ mov_arg(ARG2, Src);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_pd_hash_get);
+
+ emit_leave_runtime();
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_get_hash(const ArgVal &Src,
+ const ArgVal &Hash,
+ const ArgVal &Dst) {
+ mov_arg(ARG2, Hash);
+ mov_arg(ARG3, Src);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_pd_hash_get_with_hx);
+
+ emit_leave_runtime();
+
+ mov_arg(Dst, ARG1);
+}
+
+/* Store the untagged pointer to a tuple in ARG1. */
+void BeamModuleAssembler::emit_load_tuple_ptr(const ArgVal &Src) {
+ auto src = load_source(Src, ARG1);
+ emit_untag_ptr(ARG1, src.reg);
+}
+
+#ifdef DEBUG
+/* Emit an assertion to ensure that tuple_reg points into the same
+ * tuple as Src. */
+void BeamModuleAssembler::emit_tuple_assertion(const ArgVal &Src,
+ arm::Gp tuple_reg) {
+ Label ok = a.newLabel(), fatal = a.newLabel();
+ ASSERT(tuple_reg != TMP1);
+ mov_arg(TMP1, Src);
+ emit_is_boxed(fatal, TMP1);
+ emit_untag_ptr(TMP1, TMP1);
+ a.cmp(TMP1, tuple_reg);
+ a.cond_eq().b(ok);
+
+ a.bind(fatal);
+ a.udf(0xaaaa);
+ a.bind(ok);
+}
+#endif
+
+/* Fetch an element from the tuple pointed to by the untagged pointer
+ * in ARG1. */
+void BeamModuleAssembler::emit_i_get_tuple_element(const ArgVal &Src,
+ const ArgVal &Element,
+ const ArgVal &Dst) {
+#ifdef DEBUG
+ emit_tuple_assertion(Src, ARG1);
+#endif
+
+ auto dst = init_destination(Dst, TMP1);
+ safe_ldr(dst.reg, arm::Mem(ARG1, Element.getValue()));
+ flush_var(dst);
+}
+
+/* Fetch two consecutive tuple elements from the tuple pointed to by
+ * the boxed pointer in ARG1. */
+void BeamModuleAssembler::emit_get_two_tuple_elements(const ArgVal &Src,
+ const ArgVal &Element,
+ const ArgVal &Dst1,
+ const ArgVal &Dst2) {
+#ifdef DEBUG
+ emit_tuple_assertion(Src, ARG1);
+#endif
+
+ auto dst1 = init_destination(Dst1, TMP1);
+ auto dst2 = init_destination(Dst2, TMP2);
+
+ arm::Mem element_ptr = arm::Mem(ARG1, Element.getValue());
+ safe_ldp(dst1.reg, dst2.reg, element_ptr);
+ flush_vars(dst1, dst2);
+}
+
+void BeamModuleAssembler::emit_init(const ArgVal &Y) {
+ mov_imm(TMP1, NIL);
+ a.str(TMP1, getArgRef(Y));
+}
+
+void BeamModuleAssembler::emit_init_yregs(const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ unsigned count = Size.getValue();
+ ASSERT(count == args.size());
+
+ unsigned i = 0;
+
+ mov_imm(TMP1, NIL);
+
+ while (i < count) {
+ unsigned slots = 1;
+ unsigned first_y = args[i].getValue();
+
+ while (i + slots < count) {
+ const ArgVal &current_y = args[i + slots];
+ if (first_y + slots != current_y.getValue()) {
+ break;
+ }
+ slots++;
+ }
+
+ i += slots;
+
+ /* Now first_y is the number of the first y register to be initialized
+ * and slots is the number of y registers to be initialized. */
+ while (slots >= 2) {
+ /* `stp` can only address the first 64 Y registers. */
+ if (first_y <= MAX_LDP_STP_DISPLACEMENT) {
+ a.stp(TMP1, TMP1, getYRef(first_y));
+ first_y += 2;
+ slots -= 2;
+ } else {
+ a.str(TMP1, getYRef(first_y));
+ first_y += 1;
+ slots -= 1;
+ }
+ }
+
+ if (slots == 1) {
+ a.str(TMP1, getYRef(first_y));
+ }
+ }
+}
+
+void BeamModuleAssembler::emit_trim(const ArgVal &Words,
+ const ArgVal &Remaining) {
+ ASSERT(Words.isWord() && Words.getValue() <= 1023);
+
+ if (Words.getValue() > 0) {
+ add(E, E, Words.getValue() * sizeof(Eterm));
+ }
+}
+
+void BeamModuleAssembler::emit_i_move(const ArgVal &Src, const ArgVal &Dst) {
+ mov_arg(Dst, Src);
+}
+
+void BeamModuleAssembler::emit_store_two_xregs(const ArgVal &Src1,
+ const ArgVal &Dst1,
+ const ArgVal &Src2,
+ const ArgVal &Dst2) {
+ auto [src1, src2] = load_sources(Src1, TMP1, Src2, TMP2);
+ safe_stp(src1.reg, src2.reg, Dst1, Dst2);
+}
+
+void BeamModuleAssembler::emit_load_two_xregs(const ArgVal &Src1,
+ const ArgVal &Dst1,
+ const ArgVal &Src2,
+ const ArgVal &Dst2) {
+ ASSERT(ArgVal::register_relation(Src1, Src2) ==
+ ArgVal::Relation::consecutive);
+ auto dst1 = init_destination(Dst1, TMP1);
+ auto dst2 = init_destination(Dst2, TMP2);
+
+ safe_ldp(dst1.reg, dst2.reg, Src1, Src2);
+ flush_vars(dst1, dst2);
+}
+
+void BeamModuleAssembler::emit_move_two_yregs(const ArgVal &Src1,
+ const ArgVal &Dst1,
+ const ArgVal &Src2,
+ const ArgVal &Dst2) {
+ /* Optimize fetching of source Y registers. */
+ switch (ArgVal::register_relation(Src1, Src2)) {
+ case ArgVal::Relation::consecutive:
+ safe_ldp(TMP1, TMP2, Src1, Src2);
+ break;
+ case ArgVal::Relation::reverse_consecutive:
+ safe_ldp(TMP2, TMP1, Src2, Src1);
+ break;
+ case ArgVal::Relation::none:
+ a.ldr(TMP1, getArgRef(Src1));
+ a.ldr(TMP2, getArgRef(Src2));
+ break;
+ }
+
+ /* Destination registers are always in consecutive order. */
+ safe_stp(TMP1, TMP2, Dst1, Dst2);
+}
+
+void BeamModuleAssembler::emit_swap(const ArgVal &R1, const ArgVal &R2) {
+ if (isRegisterBacked(R1)) {
+ auto r1 = load_source(R1, ZERO);
+ mov_arg(TMP1, R2);
+ mov_arg(R2, R1);
+ a.mov(r1.reg, TMP1);
+ } else if (isRegisterBacked(R2)) {
+ return emit_swap(R2, R1);
+ } else {
+ switch (ArgVal::register_relation(R1, R2)) {
+ case ArgVal::Relation::consecutive:
+ safe_ldp(TMP1, TMP2, R1, R2);
+ safe_stp(TMP2, TMP1, R1, R2);
+ break;
+ case ArgVal::Relation::reverse_consecutive:
+ safe_ldp(TMP1, TMP2, R2, R1);
+ safe_stp(TMP2, TMP1, R2, R1);
+ break;
+ case ArgVal::Relation::none:
+ a.ldr(TMP1, getArgRef(R1));
+ a.ldr(TMP2, getArgRef(R2));
+ a.str(TMP1, getArgRef(R2));
+ a.str(TMP2, getArgRef(R1));
+ break;
+ }
+ }
+}
+
+void BeamModuleAssembler::emit_swap2(const ArgVal &R1,
+ const ArgVal &R2,
+ const ArgVal &R3) {
+ auto [arg1, arg2] = load_sources(R1, TMP1, R2, TMP2);
+ auto arg3 = load_source(R3, TMP3);
+
+ mov_var(TMP4, arg1);
+ mov_var(arg1, arg2);
+ mov_var(arg2, arg3);
+ mov_var(arg3, TMP4);
+
+ flush_vars(arg1, arg2);
+ flush_var(arg3);
+}
+
+void BeamModuleAssembler::emit_swap3(const ArgVal &R1,
+ const ArgVal &R2,
+ const ArgVal &R3,
+ const ArgVal &R4) {
+ auto [arg1, arg2] = load_sources(R1, TMP1, R2, TMP2);
+ auto [arg3, arg4] = load_sources(R3, TMP3, R4, TMP4);
+
+ mov_var(TMP5, arg1);
+ mov_var(arg1, arg2);
+ mov_var(arg2, arg3);
+ mov_var(arg3, arg4);
+ mov_var(arg4, TMP5);
+
+ flush_vars(arg1, arg2);
+ flush_vars(arg3, arg4);
+}
+
+void BeamModuleAssembler::emit_swap4(const ArgVal &R1,
+ const ArgVal &R2,
+ const ArgVal &R3,
+ const ArgVal &R4,
+ const ArgVal &R5) {
+ auto [arg1, arg2] = load_sources(R1, TMP1, R2, TMP2);
+ auto [arg3, arg4] = load_sources(R3, TMP3, R4, TMP4);
+ auto arg5 = load_source(R5, TMP5);
+
+ mov_var(TMP6, arg1);
+ mov_var(arg1, arg2);
+ mov_var(arg2, arg3);
+ mov_var(arg3, arg4);
+ mov_var(arg4, arg5);
+ mov_var(arg5, TMP6);
+
+ flush_vars(arg1, arg2);
+ flush_vars(arg3, arg4);
+ flush_var(arg5);
+}
+
+void BeamModuleAssembler::emit_node(const ArgVal &Dst) {
+ a.ldr(TMP1, embed_constant(&erts_this_node, disp32K));
+ a.ldr(TMP1, arm::Mem(TMP1));
+ mov_arg(Dst, arm::Mem(TMP1, offsetof(ErlNode, sysname)));
+}
+
+void BeamModuleAssembler::emit_put_list(const ArgVal &Hd,
+ const ArgVal &Tl,
+ const ArgVal &Dst) {
+ auto [hd, tl] = load_sources(Hd, TMP1, Tl, TMP2);
+ auto dst = init_destination(Dst, TMP3);
+
+ a.stp(hd.reg, tl.reg, arm::Mem(HTOP).post(sizeof(Eterm[2])));
+ a.sub(dst.reg, HTOP, imm(sizeof(Eterm[2]) - TAG_PRIMARY_LIST));
+
+ flush_var(dst);
+}
+
+void BeamModuleAssembler::emit_put_list2(const ArgVal &Hd1,
+ const ArgVal &Hd2,
+ const ArgVal &Tl,
+ const ArgVal &Dst) {
+ const arm::Mem put_cons = arm::Mem(HTOP).post(sizeof(Eterm[2]));
+
+ auto [hd1, hd2] = load_sources(Hd1, TMP1, Hd2, TMP2);
+ auto tl = load_source(Tl, TMP3);
+ auto dst = init_destination(Dst, TMP4);
+
+ a.stp(hd1.reg, tl.reg, put_cons);
+ a.sub(dst.reg, HTOP, imm(sizeof(Eterm[2]) - TAG_PRIMARY_LIST));
+
+ a.stp(hd2.reg, dst.reg, put_cons);
+ a.sub(dst.reg, HTOP, imm(sizeof(Eterm[2]) - TAG_PRIMARY_LIST));
+
+ flush_var(dst);
+}
+
+void BeamModuleAssembler::emit_put_tuple2(const ArgVal &Dst,
+ const ArgVal &Arity,
+ const Span<ArgVal> &args) {
+ ASSERT(arityval(Arity.getValue()) == args.size());
+
+ std::vector<ArgVal> data;
+ data.reserve(args.size() + 1);
+ data.push_back(Arity);
+
+ bool dst_is_src = false;
+ for (auto arg : args) {
+ data.push_back(arg);
+ dst_is_src |= (arg == Dst);
+ }
+
+ if (dst_is_src) {
+ a.add(TMP1, HTOP, TAG_PRIMARY_BOXED);
+ } else {
+ auto ptr = init_destination(Dst, TMP1);
+ a.add(ptr.reg, HTOP, TAG_PRIMARY_BOXED);
+ flush_var(ptr);
+ }
+
+ size_t size = data.size();
+ unsigned i;
+ for (i = 0; i < size - 1; i += 2) {
+ if ((i % 128) == 0) {
+ check_pending_stubs();
+ }
+
+ auto [first, second] = load_sources(data[i], TMP2, data[i + 1], TMP3);
+ a.stp(first.reg, second.reg, arm::Mem(HTOP).post(sizeof(Eterm[2])));
+ }
+
+ if (i < size) {
+ mov_arg(arm::Mem(HTOP).post(sizeof(Eterm)), data[i]);
+ }
+
+ if (dst_is_src) {
+ auto ptr = init_destination(Dst, TMP1);
+ mov_var(ptr, TMP1);
+ flush_var(ptr);
+ }
+}
+
+void BeamModuleAssembler::emit_self(const ArgVal &Dst) {
+ mov_arg(Dst, arm::Mem(c_p, offsetof(Process, common.id)));
+}
+
+void BeamModuleAssembler::emit_set_tuple_element(const ArgVal &Element,
+ const ArgVal &Tuple,
+ const ArgVal &Offset) {
+ auto tuple = load_source(Tuple, TMP1);
+ auto element = load_source(Element, TMP2);
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, tuple.reg);
+ arm::Mem boxed_val = emit_boxed_val(boxed_ptr, Offset.getValue());
+
+ stur(element.reg, boxed_val);
+}
+
+void BeamModuleAssembler::emit_is_nonempty_list(const ArgVal &Fail,
+ const ArgVal &Src) {
+ auto list_ptr = load_source(Src, TMP1);
+ const int bitNumber = 1;
+
+ ERTS_CT_ASSERT(_TAG_PRIMARY_MASK - TAG_PRIMARY_LIST == (1 << bitNumber));
+ a.tbnz(list_ptr.reg, bitNumber, resolve_beam_label(Fail, disp32K));
+}
+
+void BeamModuleAssembler::emit_jump(const ArgVal &Fail) {
+ a.b(resolve_beam_label(Fail, disp128MB));
+}
+
+void BeamModuleAssembler::emit_is_atom(const ArgVal &Fail, const ArgVal &Src) {
+ auto src = load_source(Src, TMP1);
+
+ a.and_(TMP1, src.reg, imm(_TAG_IMMED2_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED2_ATOM));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+void BeamModuleAssembler::emit_is_boolean(const ArgVal &Fail,
+ const ArgVal &Src) {
+ /* Since am_true and am_false differ by a single bit, we can simplify the
+ * check by clearing said bit and comparing against the lesser one. */
+ ERTS_CT_ASSERT(am_false == make_atom(0));
+ ERTS_CT_ASSERT(am_true == make_atom(1));
+
+ auto src = load_source(Src, TMP1);
+ a.and_(TMP1, src.reg, imm(~(am_true & ~_TAG_IMMED1_MASK)));
+ a.cmp(TMP1, imm(am_false));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+arm::Gp BeamModuleAssembler::emit_is_binary(const ArgVal &Fail,
+ const ArgVal &Src,
+ Label next,
+ Label subbin) {
+ auto src = load_source(Src, ARG1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+
+ arm::Gp boxed_ptr = emit_ptr_val(ARG1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+ a.and_(TMP1, TMP1, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP1, imm(_TAG_HEADER_SUB_BIN));
+ a.cond_eq().b(subbin);
+
+ ERTS_CT_ASSERT(_TAG_HEADER_REFC_BIN + 4 == _TAG_HEADER_HEAP_BIN);
+ a.and_(TMP1, TMP1, imm(~4));
+ a.cmp(TMP1, imm(_TAG_HEADER_REFC_BIN));
+ a.cond_eq().b(next);
+ a.b(resolve_beam_label(Fail, disp128MB));
+
+ return boxed_ptr;
+}
+
+void BeamModuleAssembler::emit_is_binary(const ArgVal &Fail,
+ const ArgVal &Src) {
+ Label next = a.newLabel(), subbin = a.newLabel();
+ arm::Gp boxed_ptr;
+
+ boxed_ptr = emit_is_binary(Fail, Src, next, subbin);
+
+ a.bind(subbin);
+ {
+ /* emit_is_binary() has already removed the literal tag (if
+ * applicable) from the copy of Src. */
+ a.ldrb(TMP1.w(),
+ emit_boxed_val(boxed_ptr, offsetof(ErlSubBin, bitsize)));
+ a.cbnz(TMP1, resolve_beam_label(Fail, disp1MB));
+ }
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_bitstring(const ArgVal &Fail,
+ const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ (void)emit_is_binary(Fail, Src, next, next);
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_float(const ArgVal &Fail, const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+
+ a.cmp(TMP1, imm(HEADER_FLONUM));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_function(const ArgVal &Fail,
+ const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+ a.cmp(TMP1, imm(HEADER_FUN));
+ a.cond_eq().b(next);
+ a.cmp(TMP1, imm(HEADER_EXPORT));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_function2(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Arity) {
+ if (Arity.getType() != ArgVal::Immediate) {
+ /*
+ * Non-literal arity - extremely uncommon. Generate simple code.
+ */
+ mov_arg(ARG2, Src);
+ mov_arg(ARG3, Arity);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erl_is_function);
+
+ emit_leave_runtime();
+
+ a.cmp(ARG1, imm(am_true));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ return;
+ }
+
+ unsigned arity = unsigned_val(Arity.getValue());
+ if (arity > MAX_ARG) {
+ /* Arity is negative or too large. */
+ a.b(resolve_beam_label(Fail, disp128MB));
+
+ return;
+ }
+
+ Label next = a.newLabel();
+ Label fun = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP2, emit_boxed_val(boxed_ptr));
+ a.cmp(TMP2, imm(HEADER_FUN));
+ a.cond_eq().b(fun);
+ a.cmp(TMP2, imm(HEADER_EXPORT));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ comment("Check arity of export fun");
+ a.ldur(TMP2, emit_boxed_val(boxed_ptr, sizeof(Eterm)));
+ a.ldr(TMP2, arm::Mem(TMP2, offsetof(Export, info.mfa.arity)));
+ emit_branch_if_ne(TMP2, arity, resolve_beam_label(Fail, dispUnknown));
+ a.b(next);
+
+ comment("Check arity of fun");
+ a.bind(fun);
+ {
+ a.ldur(TMP2, emit_boxed_val(boxed_ptr, offsetof(ErlFunThing, arity)));
+ emit_branch_if_ne(TMP2, arity, resolve_beam_label(Fail, dispUnknown));
+ }
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_integer(const ArgVal &Fail,
+ const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ a.and_(TMP2, src.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP2, imm(_TAG_IMMED1_SMALL));
+ a.cond_eq().b(next);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), TMP2);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+
+ /* The following value (0b111011) is not possible to use as
+ * an immediate operand for 'and'. See the note at the beginning
+ * of the file.
+ */
+ mov_imm(TMP2, _TAG_HEADER_MASK - _BIG_SIGN_BIT);
+ a.and_(TMP1, TMP1, TMP2);
+ a.cmp(TMP1, imm(_TAG_HEADER_POS_BIG));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_list(const ArgVal &Fail, const ArgVal &Src) {
+ auto src = load_source(Src, TMP1);
+
+ a.tst(src.reg, imm(_TAG_PRIMARY_MASK - TAG_PRIMARY_LIST));
+ a.mov(TMP2, NIL);
+ a.ccmp(src.reg, TMP2, 4, arm::Cond::kNE);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+void BeamModuleAssembler::emit_is_map(const ArgVal &Fail, const ArgVal &Src) {
+ auto src = load_source(Src, TMP1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+ a.and_(TMP1, TMP1, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP1, imm(_TAG_HEADER_MAP));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+void BeamModuleAssembler::emit_is_nil(const ArgVal &Fail, const ArgVal &Src) {
+ auto src = load_source(Src, TMP1);
+ a.cmp(src.reg, imm(NIL));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+void BeamModuleAssembler::emit_is_number(const ArgVal &Fail,
+ const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ a.and_(TMP2, src.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP2, imm(_TAG_IMMED1_SMALL));
+ a.cond_eq().b(next);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), TMP2);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+
+ /* The following value (0b111011) is not possible to use as
+ * an immediate operand for 'and'. See the note at the beginning
+ * of the file.
+ */
+ mov_imm(TMP2, _TAG_HEADER_MASK - _BIG_SIGN_BIT);
+ a.and_(TMP2, TMP1, TMP2);
+ a.cmp(TMP2, imm(_TAG_HEADER_POS_BIG));
+
+ a.mov(TMP3, imm(HEADER_FLONUM));
+ a.ccmp(TMP1, TMP3, 4, arm::Cond::kNE);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_pid(const ArgVal &Fail, const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ a.and_(TMP2, src.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP2, imm(_TAG_IMMED1_PID));
+ a.cond_eq().b(next);
+
+ /* Reuse TMP2 as the important bits are still available. */
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), TMP2);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP2, emit_boxed_val(boxed_ptr));
+ a.and_(TMP2, TMP2, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP2, imm(_TAG_HEADER_EXTERNAL_PID));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_port(const ArgVal &Fail, const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ a.and_(TMP2, src.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP2, imm(_TAG_IMMED1_PORT));
+ a.cond_eq().b(next);
+
+ /* Reuse TMP2 as the important bits are still available. */
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), TMP2);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP2, emit_boxed_val(boxed_ptr));
+ a.and_(TMP2, TMP2, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP2, imm(_TAG_HEADER_EXTERNAL_PORT));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_reference(const ArgVal &Fail,
+ const ArgVal &Src) {
+ Label next = a.newLabel();
+
+ auto src = load_source(Src, TMP1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+ a.and_(TMP1, TMP1, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP1, imm(_TAG_HEADER_EXTERNAL_REF));
+ a.ccmp(TMP1, imm(_TAG_HEADER_REF), 4, arm::Cond::kNE);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+/* Note: This instruction leaves the untagged pointer to the tuple in
+ * ARG1. */
+void BeamModuleAssembler::emit_i_is_tagged_tuple(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Arity,
+ const ArgVal &Tag) {
+ auto src = load_source(Src, ARG1);
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+ emit_untag_ptr(ARG1, src.reg);
+
+ /* It is tempting to fetch the both the header word and the first
+ * element of the tuple with ldp, but that is potentially unsafe
+ * if Src is the empty tuple. To make ldp safe, we would have to
+ * ensure that an empty tuple in a heap fragment, literal area, or
+ * persistent term is always followed by one word of allocated
+ * memory. */
+ a.ldr(TMP1, arm::Mem(ARG1));
+ cmp_arg(TMP1, Arity);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.ldr(TMP2, arm::Mem(ARG1, sizeof(Eterm)));
+ cmp_arg(TMP2, Tag);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+/* Note: This instruction leaves the untagged pointer to the tuple in
+ * ARG2. */
+void BeamModuleAssembler::emit_i_is_tagged_tuple_ff(const ArgVal &NotTuple,
+ const ArgVal &NotRecord,
+ const ArgVal &Src,
+ const ArgVal &Arity,
+ const ArgVal &Tag) {
+ Label correct_arity = a.newLabel();
+ auto src = load_source(Src, ARG1);
+
+ emit_is_boxed(resolve_beam_label(NotTuple, dispUnknown), src.reg);
+ emit_untag_ptr(ARG1, src.reg);
+
+ /* It is tempting to fetch the both the header word and the first
+ * element of the tuple with ldp, but that is potentially unsafe
+ * if Src is the empty tuple. */
+ a.ldr(TMP1, arm::Mem(ARG1));
+
+ cmp_arg(TMP1, Arity);
+ a.cond_eq().b(correct_arity);
+
+ /* Not a tuple or the wrong arity. Decide which. */
+ ERTS_CT_ASSERT(_TAG_HEADER_ARITYVAL == 0);
+ a.tst(TMP1, imm(_TAG_HEADER_MASK));
+ a.cond_eq().b(resolve_beam_label(NotRecord, disp1MB));
+ a.b(resolve_beam_label(NotTuple, disp128MB));
+
+ a.bind(correct_arity);
+ {
+ a.ldr(TMP2, arm::Mem(ARG1, sizeof(Eterm)));
+ cmp_arg(TMP2, Tag);
+ a.cond_ne().b(resolve_beam_label(NotRecord, disp1MB));
+ }
+}
+
+/* Note: This instruction leaves the untagged pointer to the tuple in
+ * ARG1. */
+void BeamModuleAssembler::emit_i_is_tuple(const ArgVal &Fail,
+ const ArgVal &Src) {
+ auto src = load_source(Src, ARG1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+ emit_untag_ptr(ARG1, src.reg);
+
+ a.ldr(TMP1, arm::Mem(ARG1));
+ ERTS_CT_ASSERT(_TAG_HEADER_ARITYVAL == 0);
+ a.tst(TMP1, imm(_TAG_HEADER_MASK));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+/* Note: This instruction leaves the untagged pointer to the tuple in
+ * ARG1. */
+void BeamModuleAssembler::emit_i_is_tuple_of_arity(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Arity) {
+ auto src = load_source(Src, ARG1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+ emit_untag_ptr(ARG1, src.reg);
+
+ a.ldr(TMP1, arm::Mem(ARG1));
+ cmp_arg(TMP1, Arity);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+/* Note: This instruction leaves the untagged pointer to the tuple in
+ * ARG1. */
+void BeamModuleAssembler::emit_i_test_arity(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Arity) {
+ auto src = load_source(Src, ARG1);
+ emit_untag_ptr(ARG1, src.reg);
+
+ a.ldr(TMP1, arm::Mem(ARG1));
+ cmp_arg(TMP1, Arity);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+}
+
+void BeamModuleAssembler::emit_is_eq_exact(const ArgVal &Fail,
+ const ArgVal &X,
+ const ArgVal &Y) {
+ auto x = load_source(X, ARG1);
+
+ if (Y.isImmed()) {
+ /* If the second operand is a known to be an immediate, we can
+ * fail immediately if the operands are not equal. */
+ cmp_arg(x.reg, Y);
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ return;
+ }
+
+ /* Both operands are registers. */
+ Label next = a.newLabel();
+ auto y = load_source(Y, ARG2);
+
+ a.cmp(x.reg, y.reg);
+ a.cond_eq().b(next);
+
+ /* The terms could still be equal if both operands are pointers
+ * having the same tag. */
+ emit_is_unequal_based_on_tags(x.reg, y.reg);
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+
+ /* Both operands are pointers having the same tag. Must do a
+ * deeper comparison. */
+ mov_var(ARG1, x);
+ mov_var(ARG2, y);
+
+ emit_enter_runtime();
+
+ runtime_call<2>(eq);
+
+ emit_leave_runtime();
+
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_ne_exact(const ArgVal &Fail,
+ const ArgVal &X,
+ const ArgVal &Y) {
+ auto x = load_source(X, ARG1);
+
+ if (Y.isImmed()) {
+ /* If the second operand is a known to be an immediate, we can
+ * fail immediately if the operands are equal. */
+ cmp_arg(x.reg, Y);
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+
+ return;
+ }
+
+ /* Both operands are registers. */
+ Label next = a.newLabel();
+ auto y = load_source(Y, ARG2);
+
+ a.cmp(x.reg, y.reg);
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+
+ /* Test whether the terms are definitely unequal based on the tags
+ * alone. */
+ emit_is_unequal_based_on_tags(x.reg, y.reg);
+ a.cond_eq().b(next);
+
+ /* Both operands are pointers having the same tag. Must do a
+ * deeper comparison. */
+ mov_var(ARG1, x);
+ mov_var(ARG2, y);
+
+ emit_enter_runtime();
+
+ runtime_call<2>(eq);
+
+ emit_leave_runtime();
+
+ a.cbnz(ARG1, resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_eq(const ArgVal &Fail,
+ const ArgVal &X,
+ const ArgVal &Y) {
+ Label next = a.newLabel();
+
+ auto x = load_source(X, ARG1);
+ auto y = load_source(Y, ARG2);
+
+ a.cmp(x.reg, y.reg);
+ a.cond_eq().b(next);
+
+ /* We can skip deep comparisons when both args are immediates. */
+ emit_are_both_immediate(x.reg, y.reg);
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+
+ mov_var(ARG1, x);
+ mov_var(ARG2, y);
+ fragment_call(ga->get_arith_compare_shared());
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_ne(const ArgVal &Fail,
+ const ArgVal &X,
+ const ArgVal &Y) {
+ Label next = a.newLabel();
+
+ auto x = load_source(X, ARG1);
+ auto y = load_source(Y, ARG2);
+
+ a.cmp(x.reg, y.reg);
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+
+ /* We can skip deep comparisons when both args are immediates. */
+ emit_are_both_immediate(x.reg, y.reg);
+ a.cond_eq().b(next);
+
+ mov_var(ARG1, x);
+ mov_var(ARG2, y);
+ fragment_call(ga->get_arith_compare_shared());
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+
+ a.bind(next);
+}
+
+/*
+ * ARG1 = LHS
+ * ARG2 = RHS
+ *
+ * Result is returned in the flags.
+ */
+void BeamGlobalAssembler::emit_arith_compare_shared() {
+ Label atom_compare = a.newLabel(), generic_compare = a.newLabel();
+
+ /* Are both floats?
+ *
+ * This is done first as relative comparisons on atoms doesn't make much
+ * sense. */
+ a.orr(TMP1, ARG1, ARG2);
+ emit_is_boxed(atom_compare, TMP1);
+
+ arm::Gp boxed_ptr1 = emit_ptr_val(TMP1, ARG1);
+ a.ldur(TMP3, emit_boxed_val(boxed_ptr1));
+ arm::Gp boxed_ptr2 = emit_ptr_val(TMP2, ARG2);
+ a.ldur(TMP4, emit_boxed_val(boxed_ptr2));
+
+ mov_imm(TMP5, HEADER_FLONUM);
+ a.cmp(TMP3, TMP5);
+ a.ccmp(TMP4, TMP5, 0, arm::Cond::kEQ);
+ a.cond_ne().b(generic_compare);
+
+ a.ldur(a64::d0, emit_boxed_val(boxed_ptr1, sizeof(Eterm)));
+ a.ldur(a64::d1, emit_boxed_val(boxed_ptr2, sizeof(Eterm)));
+ a.fcmpe(a64::d0, a64::d1);
+ a.ret(a64::x30);
+
+ a.bind(atom_compare);
+ {
+ a.and_(TMP1, ARG1, imm(_TAG_IMMED2_MASK));
+ a.and_(TMP2, ARG2, imm(_TAG_IMMED2_MASK));
+ a.sub(TMP1, TMP1, imm(_TAG_IMMED2_ATOM));
+ a.sub(TMP2, TMP2, imm(_TAG_IMMED2_ATOM));
+ a.orr(TMP1, TMP1, TMP2);
+ a.cbnz(TMP1, generic_compare);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ runtime_call<2>(erts_cmp_atoms);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ /* Note: erts_cmp_atoms() returns int, not Sint. */
+ a.tst(ARG1.w(), ARG1.w());
+ a.ret(a64::x30);
+ }
+
+ a.bind(generic_compare);
+ {
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ comment("erts_cmp_compound(X, Y, 0, 0);");
+ mov_imm(ARG3, 0);
+ mov_imm(ARG4, 0);
+ runtime_call<4>(erts_cmp_compound);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.tst(ARG1, ARG1);
+
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_is_lt(const ArgVal &Fail,
+ const ArgVal &LHS,
+ const ArgVal &RHS) {
+ Label generic = a.newLabel(), next = a.newLabel();
+
+ auto lhs = load_source(LHS, ARG1);
+ auto rhs = load_source(RHS, ARG2);
+
+ a.cmp(lhs.reg, rhs.reg);
+ a.cond_eq().b(resolve_beam_label(Fail, disp1MB));
+
+ /* Relative comparisons are overwhelmingly likely to be used on smalls, so
+ * we'll specialize those and keep the rest in a shared fragment. */
+
+ if (RHS.isImmed() && is_small(RHS.getValue())) {
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ } else if (LHS.isImmed() && is_small(LHS.getValue())) {
+ a.and_(TMP1, rhs.reg, imm(_TAG_IMMED1_MASK));
+ } else {
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, lhs.reg, rhs.reg);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ }
+
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic);
+
+ a.cmp(lhs.reg, rhs.reg);
+ a.cond_lt().b(next);
+ a.b(resolve_beam_label(Fail, disp128MB));
+
+ a.bind(generic);
+ {
+ mov_var(ARG1, lhs);
+ mov_var(ARG2, rhs);
+ fragment_call(ga->get_arith_compare_shared());
+ a.cond_ge().b(resolve_beam_label(Fail, disp1MB));
+ }
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_is_ge(const ArgVal &Fail,
+ const ArgVal &LHS,
+ const ArgVal &RHS) {
+ Label generic = a.newLabel(), next = a.newLabel();
+
+ auto lhs = load_source(LHS, ARG1);
+ auto rhs = load_source(RHS, ARG2);
+
+ a.cmp(lhs.reg, rhs.reg);
+ a.cond_eq().b(next);
+
+ /* Relative comparisons are overwhelmingly likely to be used on smalls, so
+ * we'll specialize those and keep the rest in a shared fragment. */
+
+ if (RHS.isImmed() && is_small(RHS.getValue())) {
+ a.and_(TMP1, lhs.reg, imm(_TAG_IMMED1_MASK));
+ } else if (LHS.isImmed() && is_small(LHS.getValue())) {
+ a.and_(TMP1, rhs.reg, imm(_TAG_IMMED1_MASK));
+ } else {
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.and_(TMP1, lhs.reg, rhs.reg);
+ a.and_(TMP1, TMP1, imm(_TAG_IMMED1_MASK));
+ }
+
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(generic);
+
+ a.cmp(lhs.reg, rhs.reg);
+ a.cond_ge().b(next);
+ a.b(resolve_beam_label(Fail, disp128MB));
+
+ a.bind(generic);
+ {
+ mov_var(ARG1, lhs);
+ mov_var(ARG2, rhs);
+ fragment_call(ga->get_arith_compare_shared());
+ a.cond_lt().b(resolve_beam_label(Fail, disp1MB));
+ }
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_badmatch(const ArgVal &Src) {
+ mov_arg(arm::Mem(c_p, offsetof(Process, fvalue)), Src);
+ emit_error(BADMATCH);
+}
+
+void BeamModuleAssembler::emit_case_end(const ArgVal &Src) {
+ mov_arg(arm::Mem(c_p, offsetof(Process, fvalue)), Src);
+ emit_error(EXC_CASE_CLAUSE);
+}
+
+void BeamModuleAssembler::emit_system_limit_body() {
+ emit_error(SYSTEM_LIMIT);
+}
+
+void BeamModuleAssembler::emit_if_end() {
+ emit_error(EXC_IF_CLAUSE);
+}
+
+void BeamModuleAssembler::emit_catch(const ArgVal &Y, const ArgVal &Handler) {
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, catches)));
+ a.add(TMP1, TMP1, imm(1));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, catches)));
+
+ mov_arg(Y, Handler);
+}
+
+void BeamGlobalAssembler::emit_catch_end_shared() {
+ Label not_throw = a.newLabel(), not_error = a.newLabel(),
+ after_gc = a.newLabel();
+
+ /* XREG0 = THE_NON_VALUE
+ * XREG1 = error reason/thrown value
+ * XREG2 = raw stacktrace.
+ * XREG3 = class
+ */
+
+ a.mov(XREG0, XREG1);
+ a.cmp(XREG3, imm(am_throw));
+
+ a.cond_ne().b(not_throw);
+
+ /* Return thrown value. */
+ a.ret(a64::x30);
+
+ a.bind(not_throw);
+ {
+ emit_enter_runtime_frame();
+
+ a.mov(ARG1, XREG0);
+
+ a.cmp(XREG3, imm(am_error));
+ a.cond_ne().b(not_error);
+
+ a.mov(ARG2, XREG0);
+ a.mov(ARG3, XREG2);
+
+ /* This is an error, attach a stacktrace to the reason. */
+ ERTS_CT_ASSERT(ERTS_HIGHEST_CALLEE_SAVE_XREG >= 2);
+ emit_enter_runtime<Update::eStack | Update::eHeap>(2);
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(add_stacktrace);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap>(2);
+
+ /* Fall through! */
+ }
+
+ /* Error term from exit/1 or stack backtrace from error/{1,2,3} is
+ * now in ARG1. */
+ a.bind(not_error);
+ {
+ const int32_t bytes_needed = (3 + S_RESERVED) * sizeof(Eterm);
+ add(ARG3, HTOP, bytes_needed);
+ a.cmp(ARG3, E);
+
+ a.cond_ls().b(after_gc);
+ {
+ /* Preserve stacktrace / reason. */
+ a.mov(XREG0, ARG1);
+
+ mov_imm(ARG4, 1);
+ a.bl(labels[garbage_collect]);
+
+ a.mov(ARG1, XREG0);
+ }
+ a.bind(after_gc);
+
+ a.add(XREG0, HTOP, imm(TAG_PRIMARY_BOXED));
+ mov_imm(TMP1, make_arityval(2));
+ mov_imm(TMP2, am_EXIT);
+ a.stp(TMP1, TMP2, arm::Mem(HTOP).post(2 * sizeof(Eterm)));
+ a.str(ARG1, arm::Mem(HTOP).post(sizeof(Eterm)));
+ }
+
+ emit_leave_runtime_frame();
+ a.ret(a64::x30);
+}
+
+void BeamModuleAssembler::emit_catch_end(const ArgVal &Y) {
+ Label next = a.newLabel();
+
+ /* XREG0 = THE_NON_VALUE
+ * XREG1 = class
+ * XREG2 = error reason/thrown value
+ * XREG3 = raw stacktrace. */
+
+ emit_try_end(Y);
+ emit_branch_if_value(XREG0, next);
+ fragment_call(ga->get_catch_end_shared());
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_try_end(const ArgVal &Y) {
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, catches)));
+ a.sub(TMP1, TMP1, imm(1));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, catches)));
+ emit_init(Y);
+}
+
+void BeamModuleAssembler::emit_try_case(const ArgVal &Y) {
+ /* XREG0 = THE_NON_VALUE
+ * XREG1 = error reason/thrown value
+ * XREG2 = raw stacktrace.
+ * XREG3 = class */
+
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, catches)));
+ a.mov(XREG0, XREG3);
+ a.sub(TMP1, TMP1, imm(1));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, catches)));
+
+ /* The try_tag in the Y slot in the stack frame has already been
+ * cleared. */
+
+#ifdef DEBUG
+ Label ok = a.newLabel();
+ comment("Start of assertion code");
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, fvalue)));
+ a.ldr(TMP2, arm::Mem(c_p, offsetof(Process, ftrace)));
+ mov_imm(TMP3, NIL);
+ a.cmp(TMP1, TMP3);
+ a.ccmp(TMP2, TMP3, 0, arm::Cond::kEQ);
+ a.cond_eq().b(ok);
+
+ comment("Assertion c_p->fvalue == NIL && c_p->ftrace == NIL failed");
+ a.udf(0x42);
+
+ a.bind(ok);
+#endif
+}
+
+void BeamModuleAssembler::emit_try_case_end(const ArgVal &Src) {
+ mov_arg(arm::Mem(c_p, offsetof(Process, fvalue)), Src);
+ emit_error(EXC_TRY_CLAUSE);
+}
+
+void BeamModuleAssembler::emit_raise(const ArgVal &Trace, const ArgVal &Value) {
+ mov_arg(TMP1, Value);
+ mov_arg(ARG2, Trace);
+
+ /* This is an error, attach a stacktrace to the reason. */
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, fvalue)));
+ a.str(ARG2, arm::Mem(c_p, offsetof(Process, ftrace)));
+
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_sanitize_freason);
+
+ emit_leave_runtime(0);
+
+ emit_raise_exception();
+}
+
+void BeamModuleAssembler::emit_build_stacktrace() {
+ a.mov(ARG2, XREG0);
+
+ emit_enter_runtime<Update::eStack | Update::eHeap>(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(build_stacktrace);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap>(0);
+
+ a.mov(XREG0, ARG1);
+}
+
+/* This instruction has the same semantics as the erlang:raise/3 BIF,
+ * except that it can rethrow a raw stack backtrace. */
+void BeamModuleAssembler::emit_raw_raise() {
+ Label next = a.newLabel();
+
+ a.mov(ARG1, XREG2);
+ a.mov(ARG2, XREG0);
+ a.mov(ARG3, XREG1);
+ a.mov(ARG4, c_p);
+
+ emit_enter_runtime(0);
+ runtime_call<4>(raw_raise);
+ emit_leave_runtime(0);
+
+ a.cbnz(ARG1, next);
+
+ emit_raise_exception();
+
+ a.bind(next);
+ mov_imm(XREG0, am_badarg);
+}
+
+static size_t TEST_YIELD_RETURN_OFFSET = sizeof(Uint32[3]);
+
+void BeamGlobalAssembler::emit_i_test_yield_shared() {
+ int mfa_offset = sizeof(ErtsCodeMFA) + BEAM_ASM_FUNC_PROLOGUE_SIZE;
+
+ /* Yield return address is in LR (x30). */
+ a.sub(ARG2, a64::x30, imm(TEST_YIELD_RETURN_OFFSET + mfa_offset));
+ a.str(ARG2, arm::Mem(c_p, offsetof(Process, current)));
+
+ a.ldr(ARG2, arm::Mem(ARG2, offsetof(ErtsCodeMFA, arity)));
+ a.str(ARG2, arm::Mem(c_p, offsetof(Process, arity)));
+
+ a.mov(ARG3, a64::x30);
+ a.b(labels[context_switch_simplified]);
+}
+
+void BeamModuleAssembler::emit_i_test_yield() {
+ Label next = a.newLabel();
+
+ /* When present, this is guaranteed to be the first instruction after the
+ * breakpoint trampoline. */
+
+#ifdef DEBUG
+ size_t startPos = a.offset();
+ ASSERT(startPos % 8 == 0);
+#endif
+
+ a.subs(FCALLS, FCALLS, imm(1));
+ a.cond_gt().b(next);
+
+ /* We avoid using the `fragment_call` helper to ensure a constant layout,
+ * as it adds code in certain debug configurations. */
+ a.bl(resolve_fragment(ga->get_i_test_yield_shared(), disp128MB));
+ a.bind(next);
+
+ ASSERT(a.offset() - startPos == TEST_YIELD_RETURN_OFFSET);
+}
+
+void BeamModuleAssembler::emit_i_yield() {
+ mov_imm(XREG0, am_true);
+ fragment_call(ga->get_dispatch_return());
+}
+
+void BeamModuleAssembler::emit_i_perf_counter() {
+ Label next = a.newLabel(), small = a.newLabel();
+
+ emit_enter_runtime_frame();
+ runtime_call<0>(erts_sys_time_data__.r.o.perf_counter);
+ emit_leave_runtime_frame();
+
+ a.asr(TMP1, ARG1, imm(SMALL_BITS - 1));
+ a.add(TMP1, TMP1, imm(1));
+ a.cmp(TMP1, imm(1));
+ a.cond_ls().b(small);
+
+ {
+ a.mov(XREG0, ARG1);
+
+ emit_gc_test(ArgVal(ArgVal::Word, 0),
+ ArgVal(ArgVal::Word, ERTS_MAX_UINT64_HEAP_SIZE),
+ ArgVal(ArgVal::Word, 0));
+
+ mov_imm(TMP1, make_pos_bignum_header(1));
+ a.stp(TMP1, XREG0, arm::Mem(HTOP).post(sizeof(Eterm[2])));
+ a.sub(XREG0, HTOP, imm(sizeof(Eterm[2]) - TAG_PRIMARY_BOXED));
+ a.b(next);
+ }
+
+ a.bind(small);
+ {
+ a.lsl(ARG1, ARG1, imm(_TAG_IMMED1_SIZE));
+ a.orr(XREG0, ARG1, imm(_TAG_IMMED1_SMALL));
+ }
+
+ a.bind(next);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_float.cpp b/erts/emulator/beam/jit/arm/instr_float.cpp
new file mode 100644
index 0000000000..b1c4220100
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_float.cpp
@@ -0,0 +1,162 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "big.h"
+}
+
+/* Checks whether d0 contains a finite value.
+ *
+ * Clobbers d30 and d31. */
+void BeamGlobalAssembler::emit_check_float_error() {
+ Label double_max = a.newLabel(), error = a.newLabel();
+
+ a.fabs(a64::d30, a64::d0);
+ a.ldr(a64::d31, arm::Mem(double_max));
+ a.fcmp(a64::d30, a64::d31);
+ a.cond_hi().b(error);
+ a.ret(a64::x30);
+
+ a.align(kAlignCode, 8);
+ a.bind(double_max);
+ a.embedUInt64(0x7FEFFFFFFFFFFFFFul);
+
+ a.bind(error);
+ {
+ mov_imm(ARG4, 0);
+ mov_imm(TMP1, EXC_BADARITH);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_float_instr(uint32_t instId,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ auto lhs = load_source(LHS, a64::d0);
+ auto rhs = load_source(RHS, a64::d1);
+ auto dst = init_destination(Dst, a64::d2);
+
+ a.emit(instId, a64::d0, lhs.reg, rhs.reg);
+ fragment_call(ga->get_check_float_error());
+ a.mov(dst.reg, a64::d0);
+ flush_var(dst);
+}
+
+/* * * * */
+
+void BeamModuleAssembler::emit_fload(const ArgVal &Src, const ArgVal &Dst) {
+ auto src = load_source(Src, TMP1);
+ auto dst = init_destination(Dst, a64::d0);
+ arm::Gp float_ptr = emit_ptr_val(TMP1, src.reg);
+
+ a.ldur(dst.reg, emit_boxed_val(float_ptr, sizeof(Eterm)));
+ flush_var(dst);
+}
+
+void BeamModuleAssembler::emit_fstore(const ArgVal &Src, const ArgVal &Dst) {
+ auto src = load_source(Src, a64::d0);
+ auto dst = init_destination(Dst, TMP1);
+
+ a.add(dst.reg, HTOP, imm(TAG_PRIMARY_BOXED));
+
+ mov_imm(TMP2, HEADER_FLONUM);
+ a.str(TMP2, arm::Mem(HTOP).post(sizeof(Eterm)));
+ a.str(src.reg, arm::Mem(HTOP).post(sizeof(Eterm)));
+
+ flush_var(dst);
+}
+
+static double handle_fconv(Eterm src) {
+ if (is_small(src)) {
+ return (double)signed_val(src);
+ } else if (is_float(src)) {
+ double res;
+ GET_DOUBLE(src, *(FloatDef *)&res);
+ return res;
+ } else if (is_big(src)) {
+ double res;
+ if (big_to_double(src, &res) < 0) {
+ return NAN;
+ }
+ return res;
+ } else {
+ return NAN;
+ }
+}
+
+void BeamGlobalAssembler::emit_fconv_shared() {
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ runtime_call<1>(handle_fconv);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.b(labels[check_float_error]);
+}
+
+void BeamModuleAssembler::emit_fconv(const ArgVal &Src, const ArgVal &Dst) {
+ auto dst = init_destination(Dst, a64::d0);
+
+ mov_arg(ARG1, Src);
+ fragment_call(ga->get_fconv_shared());
+ a.mov(dst.reg, a64::d0);
+ flush_var(dst);
+}
+
+void BeamModuleAssembler::emit_i_fadd(const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ emit_float_instr(a64::Inst::kIdFadd_v, LHS, RHS, Dst);
+}
+
+void BeamModuleAssembler::emit_i_fsub(const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ emit_float_instr(a64::Inst::kIdFsub_v, LHS, RHS, Dst);
+}
+
+void BeamModuleAssembler::emit_i_fmul(const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ emit_float_instr(a64::Inst::kIdFmul_v, LHS, RHS, Dst);
+}
+
+void BeamModuleAssembler::emit_i_fdiv(const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ emit_float_instr(a64::Inst::kIdFdiv_v, LHS, RHS, Dst);
+}
+
+void BeamModuleAssembler::emit_i_fnegate(const ArgVal &Src, const ArgVal &Dst) {
+ auto src = load_source(Src, a64::d0);
+ auto dst = init_destination(Dst, a64::d1);
+
+ a.fneg(a64::d0, src.reg);
+ fragment_call(ga->get_check_float_error());
+ a.mov(dst.reg, a64::d0);
+ flush_var(dst);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_fun.cpp b/erts/emulator/beam/jit/arm/instr_fun.cpp
new file mode 100644
index 0000000000..bd04162ba2
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_fun.cpp
@@ -0,0 +1,412 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2021-2021. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+/* Calls to functions that are being purged (but haven't finished) land here.
+ *
+ * Keep in mind that this runs in the limbo between caller and callee. It must
+ * not clobber LR (x30).
+ *
+ * ARG3 = arity
+ * ARG4 = fun thing
+ * ARG5 = address of the call_fun instruction that got us here. Note that we
+ * can't use LR (x30) for this because tail calls point elsehwere. */
+void BeamGlobalAssembler::emit_unloaded_fun() {
+ Label error = a.newLabel();
+
+ a.str(ARG5, TMP_MEM1q);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eHeap | Update::eStack | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ /* ARG3 and ARG4 have already been set. */
+ runtime_call<4>(beam_jit_handle_unloaded_fun);
+
+ emit_leave_runtime<Update::eHeap | Update::eStack | Update::eXRegs |
+ Update::eReductions | Update::eCodeIndex>();
+ emit_leave_runtime_frame();
+
+ a.cbz(ARG1, error);
+
+ a.ldr(TMP1, emit_setup_export_call(ARG1));
+ a.br(TMP1);
+
+ a.bind(error);
+ {
+ a.ldr(ARG2, TMP_MEM1q);
+ mov_imm(ARG4, nullptr);
+ a.b(labels[raise_exception_shared]);
+ }
+}
+
+/* Handles errors for `call_fun` and `i_lambda_trampoline`. Assumes that we're
+ * running on the Erlang stack with a valid stack frame.
+ *
+ * ARG3 = arity
+ * ARG4 = fun thing
+ * ARG5 = address of the call_fun instruction that got us here. Note that we
+ * can't use LR (x30) for this because tail calls point elsehwere. */
+void BeamGlobalAssembler::emit_handle_call_fun_error() {
+ Label bad_arity = a.newLabel(), bad_fun = a.newLabel();
+
+ emit_is_boxed(bad_fun, ARG4);
+
+ arm::Gp fun_thing = emit_ptr_val(TMP1, ARG4);
+ a.ldur(TMP1, emit_boxed_val(fun_thing));
+ a.cmp(TMP1, imm(HEADER_FUN));
+ a.cond_eq().b(bad_arity);
+ a.cmp(TMP1, imm(HEADER_EXPORT));
+ a.cond_eq().b(bad_arity);
+
+ a.bind(bad_fun);
+ {
+ /* Not a fun. This is only reachable through `call_fun` */
+ mov_imm(TMP1, EXC_BADFUN);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.str(ARG4, arm::Mem(c_p, offsetof(Process, fvalue)));
+
+ a.mov(ARG2, ARG5);
+ mov_imm(ARG4, nullptr);
+ a.b(labels[raise_exception_shared]);
+ }
+
+ a.bind(bad_arity);
+ {
+ /* Bad arity. This is reachable through `call_fun` when we have an
+ * export fun, and `i_lambda_trampoline` when we have a local one. */
+
+ a.stp(ARG4, ARG5, TMP_MEM1q);
+
+ emit_enter_runtime<Update::eHeap | Update::eStack | Update::eXRegs>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ /* ARG3 is already set */
+ runtime_call<3>(beam_jit_build_argument_list);
+
+ emit_leave_runtime<Update::eHeap | Update::eStack | Update::eXRegs>();
+
+ a.ldr(XREG0, TMP_MEM1q);
+ a.mov(XREG1, ARG1);
+
+ /* Create the {Fun, Args} tuple. */
+ {
+ const int32_t bytes_needed = (3 + S_RESERVED) * sizeof(Eterm);
+ Label after_gc = a.newLabel();
+
+ add(ARG3, HTOP, bytes_needed);
+ a.cmp(ARG3, E);
+ a.cond_ls().b(after_gc);
+ {
+ mov_imm(ARG4, 2);
+ a.bl(labels[garbage_collect]);
+ }
+ a.bind(after_gc);
+
+ a.add(ARG1, HTOP, imm(TAG_PRIMARY_BOXED));
+
+ mov_imm(TMP1, make_arityval(2));
+ a.str(TMP1, arm::Mem(HTOP).post(sizeof(Eterm)));
+ a.stp(XREG0, XREG1, arm::Mem(HTOP).post(sizeof(Eterm[2])));
+ }
+
+ a.mov(TMP1, imm(EXC_BADARITY));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.str(ARG1, arm::Mem(c_p, offsetof(Process, fvalue)));
+
+ a.ldr(ARG2, TMP_MEM2q);
+ mov_imm(ARG4, nullptr);
+ a.b(labels[raise_exception_shared]);
+ }
+}
+
+/* `call_fun` instructions land here to check arity and set up their
+ * environment before jumping to the actual implementation.
+ *
+ * Keep in mind that this runs in the limbo between caller and callee. It must
+ * not clobber LR (x30).
+ *
+ * ARG3 = arity
+ * ARG4 = fun thing
+ * ARG5 = current PC */
+void BeamModuleAssembler::emit_i_lambda_trampoline(const ArgVal &Index,
+ const ArgVal &Lbl,
+ const ArgVal &Arity,
+ const ArgVal &NumFree) {
+ const ssize_t env_offset = offsetof(ErlFunThing, env) - TAG_PRIMARY_BOXED;
+ const ssize_t fun_arity = Arity.getValue() - NumFree.getValue();
+ const ssize_t total_arity = Arity.getValue();
+ Label error = a.newLabel();
+
+ auto &lambda = lambdas[Index.getValue()];
+ lambda.trampoline = a.newLabel();
+ a.bind(lambda.trampoline);
+
+ a.cmp(ARG3, imm(fun_arity));
+ a.cond_ne().b(error);
+
+ if (NumFree.getValue() == 1) {
+ auto first = init_destination(ArgVal(ArgVal::XReg, fun_arity), TMP1);
+
+ /* Don't bother untagging when there's only a single element, it's
+ * guaranteed to be within range of LDUR. */
+ emit_ptr_val(ARG4, ARG4);
+ a.ldur(first.reg, arm::Mem(ARG4, env_offset));
+ flush_var(first);
+ } else if (NumFree.getValue() >= 2) {
+ ssize_t i;
+
+ emit_ptr_val(ARG4, ARG4);
+ a.add(ARG4, ARG4, imm(env_offset));
+
+ for (i = fun_arity; i < total_arity - 1; i += 2) {
+ auto first = init_destination(ArgVal(ArgVal::XReg, i), TMP1);
+ auto second = init_destination(ArgVal(ArgVal::XReg, i + 1), TMP2);
+
+ a.ldp(first.reg, second.reg, arm::Mem(ARG4).post(sizeof(Eterm[2])));
+ flush_vars(first, second);
+ }
+
+ if (i < total_arity) {
+ auto last = init_destination(ArgVal(ArgVal::XReg, i), TMP1);
+ a.ldr(last.reg, arm::Mem(ARG4));
+ flush_var(last);
+ }
+ }
+
+ a.b(resolve_beam_label(Lbl, disp128MB));
+
+ a.bind(error);
+ {
+ emit_enter_erlang_frame();
+ a.b(resolve_fragment(ga->get_handle_call_fun_error(), disp128MB));
+ }
+}
+
+void BeamModuleAssembler::emit_i_make_fun3(const ArgVal &Fun,
+ const ArgVal &Dst,
+ const ArgVal &Arity,
+ const ArgVal &NumFree,
+ const Span<ArgVal> &env) {
+ const ssize_t num_free = NumFree.getValue();
+ ssize_t i;
+
+ ASSERT(num_free == env.size());
+
+ mov_arg(ARG2, Fun);
+ mov_arg(ARG3, Arity);
+ mov_arg(ARG4, NumFree);
+
+ emit_enter_runtime<Update::eHeap>();
+
+ a.mov(ARG1, c_p);
+ runtime_call<4>(new_fun_thing);
+
+ emit_leave_runtime<Update::eHeap>();
+
+ if (num_free) {
+ comment("Move fun environment");
+ }
+
+ for (i = 0; i < num_free - 1; i += 2) {
+ ssize_t offset = offsetof(ErlFunThing, env) + i * sizeof(Eterm);
+
+ if ((i % 128) == 0) {
+ check_pending_stubs();
+ }
+
+ auto [first, second] = load_sources(env[i], TMP1, env[i + 1], TMP2);
+ safe_stp(first.reg, second.reg, arm::Mem(ARG1, offset));
+ }
+
+ if (i < num_free) {
+ ssize_t offset = offsetof(ErlFunThing, env) + i * sizeof(Eterm);
+ mov_arg(arm::Mem(ARG1, offset), env[i]);
+ }
+
+ comment("Create boxed ptr");
+ auto dst = init_destination(Dst, TMP1);
+ a.orr(dst.reg, ARG1, imm(TAG_PRIMARY_BOXED));
+ flush_var(dst);
+}
+
+void BeamGlobalAssembler::emit_apply_fun_shared() {
+ Label finished = a.newLabel();
+
+ /* Put the arity and fun into the right registers for `call_fun`, and stash
+ * the argument list in ARG5 for the error path. We'll bump the arity as
+ * we go through the argument list. */
+ mov_imm(ARG3, 0);
+ a.mov(ARG4, XREG0);
+ a.mov(ARG5, XREG1);
+
+ {
+ Label unpack_next = a.newLabel(), malformed_list = a.newLabel(),
+ raise_error = a.newLabel();
+
+ /* apply/2 is rarely used on a hot code path, so we'll simplify things
+ * by switching to the runtime environment where we can operate
+ * entirely on the X register array.
+ *
+ * Note that we don't have any live registers at this point. */
+ emit_enter_runtime<Update::eXRegs>(0);
+
+ a.mov(TMP1, ARG5);
+ lea(TMP2, getXRef(0));
+
+ a.bind(unpack_next);
+ {
+ a.cmp(TMP1, imm(NIL));
+ a.cond_eq().b(finished);
+
+ ERTS_CT_ASSERT(_TAG_PRIMARY_MASK - TAG_PRIMARY_LIST == (1 << 1));
+ a.tbnz(TMP1, imm(1), malformed_list);
+
+ emit_ptr_val(TMP1, TMP1);
+ a.sub(TMP1, TMP1, imm(TAG_PRIMARY_LIST));
+ a.ldp(TMP3, TMP1, arm::Mem(TMP1));
+ a.str(TMP3, arm::Mem(TMP2).post(sizeof(Eterm)));
+
+ /* We bail at MAX_REG-1 rather than MAX_REG as the highest register
+ * is reserved for the loader. */
+ a.add(ARG3, ARG3, imm(1));
+ a.cmp(ARG3, imm(MAX_REG - 1));
+ a.cond_lo().b(unpack_next);
+ }
+
+ a.mov(TMP1, imm(SYSTEM_LIMIT));
+ a.b(raise_error);
+
+ a.bind(malformed_list);
+ a.mov(TMP1, imm(BADARG));
+
+ a.bind(raise_error);
+ {
+ static const ErtsCodeMFA apply_mfa = {am_erlang, am_apply, 2};
+
+ emit_leave_runtime<Update::eXRegs>(0);
+
+ a.mov(XREG0, ARG4);
+ a.mov(XREG1, ARG5);
+
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ mov_imm(ARG4, &apply_mfa);
+ a.b(labels[raise_exception]);
+ }
+ }
+
+ a.bind(finished);
+ {
+ emit_leave_runtime<Update::eXRegs>();
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_i_apply_fun() {
+ fragment_call(ga->get_apply_fun_shared());
+ erlang_call(emit_call_fun());
+}
+
+void BeamModuleAssembler::emit_i_apply_fun_last(const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+ emit_i_apply_fun_only();
+}
+
+void BeamModuleAssembler::emit_i_apply_fun_only() {
+ fragment_call(ga->get_apply_fun_shared());
+ emit_leave_erlang_frame();
+ a.br(emit_call_fun());
+}
+
+/* Asssumes that:
+ * ARG3 = arity
+ * ARG4 = fun thing */
+arm::Gp BeamModuleAssembler::emit_call_fun() {
+ Label exported = a.newLabel(), next = a.newLabel();
+
+ /* Load the error fragment into TMP3 so we can CSEL ourselves there on
+ * error. */
+ a.adr(TMP3, resolve_fragment(ga->get_handle_call_fun_error(), disp1MB));
+
+ /* The `handle_call_fun_error` and `i_lambda_trampoline` fragments expect
+ * current PC in ARG5. */
+ a.adr(ARG5, next);
+
+ /* As emit_is_boxed(), but explicitly sets ZF so we can rely on that for
+ * error checking in `next`. */
+ a.tst(ARG4, imm(_TAG_PRIMARY_MASK - TAG_PRIMARY_BOXED));
+ a.cond_ne().b(next);
+
+ arm::Gp fun_thing = emit_ptr_val(TMP2, ARG4);
+ a.ldur(TMP1, emit_boxed_val(fun_thing));
+ a.cmp(TMP1, imm(HEADER_EXPORT));
+ a.cond_eq().b(exported);
+ a.cmp(TMP1, imm(HEADER_FUN));
+ a.cond_ne().b(next);
+
+ a.ldur(TMP1, emit_boxed_val(fun_thing, offsetof(ErlFunThing, fe)));
+ a.ldr(TMP1, arm::Mem(TMP1, offsetof(ErlFunEntry, address)));
+ a.b(next);
+
+ a.bind(exported);
+ {
+ a.ldur(ARG1, emit_boxed_val(fun_thing, sizeof(Eterm)));
+
+ a.ldr(TMP1, arm::Mem(ARG1, offsetof(Export, info.mfa.arity)));
+ a.cmp(TMP1, ARG3);
+
+ a.ldr(TMP1, emit_setup_export_call(ARG1));
+ }
+
+ /* Assumes that ZF is set on success and clear on error, overwriting our
+ * destination with the error fragment's address. */
+ a.bind(next);
+ a.csel(TMP1, TMP1, TMP3, imm(arm::Cond::kEQ));
+
+ return TMP1;
+}
+
+void BeamModuleAssembler::emit_i_call_fun(const ArgVal &Arity) {
+ mov_arg(ARG4, ArgVal(ArgVal::XReg, Arity.getValue()));
+ mov_imm(ARG3, Arity.getValue());
+
+ erlang_call(emit_call_fun());
+}
+
+void BeamModuleAssembler::emit_i_call_fun_last(const ArgVal &Arity,
+ const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+
+ mov_arg(ARG4, ArgVal(ArgVal::XReg, Arity.getValue()));
+ mov_imm(ARG3, Arity.getValue());
+
+ arm::Gp target = emit_call_fun();
+ emit_leave_erlang_frame();
+ a.br(target);
+}
+
+/* Psuedo-instruction for signalling lambda load errors. Never actually runs. */
+void BeamModuleAssembler::emit_i_lambda_error(const ArgVal &Dummy) {
+ emit_nyi("emit_i_lambda_error");
+}
diff --git a/erts/emulator/beam/jit/arm/instr_guard_bifs.cpp b/erts/emulator/beam/jit/arm/instr_guard_bifs.cpp
new file mode 100644
index 0000000000..7b0dbbdd3f
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_guard_bifs.cpp
@@ -0,0 +1,727 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+/*
+ * Guard BIF calls using the generic bif1, bif2, and bif3 instructions
+ * are expensive. Not only are there two indirect calls (one to the
+ * fragment, one to the BIF itself), but the caller-saved X registers
+ * must also be saved and restored, and the BIF operands that are
+ * usually in CPU registers must be written out to memory.
+ *
+ * Therefore, guard BIFs that are used fairly frequently and can
+ * be implemented entirely in assembly language without any calls to
+ * C function are implemented in this source file.
+ */
+
+#include <algorithm>
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "erl_bif_table.h"
+#include "big.h"
+#include "beam_catches.h"
+#include "beam_common.h"
+#include "code_ix.h"
+#include "erl_map.h"
+}
+
+using namespace asmjit;
+
+/* Raise a badarg exception for the given MFA. */
+void BeamGlobalAssembler::emit_raise_badarg(const ErtsCodeMFA *mfa) {
+ mov_imm(TMP1, BADARG);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ mov_imm(ARG4, mfa);
+ a.b(labels[raise_exception]);
+}
+
+/* ================================================================
+ * '=:='/2
+ * '=/='/2
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_bif_is_eq_exact_shared() {
+ Label succ = a.newLabel(), fail = a.newLabel();
+
+ a.cmp(ARG1, ARG2);
+ a.cond_eq().b(succ);
+
+ /* The terms could still be equal if both operands are pointers
+ * having the same tag. */
+ emit_is_unequal_based_on_tags(ARG1, ARG2);
+ a.cond_eq().b(fail);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ runtime_call<2>(eq);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.cbz(ARG1, fail);
+
+ a.bind(succ);
+ {
+ mov_imm(ARG1, am_true);
+ a.ret(a64::x30);
+ }
+
+ a.bind(fail);
+ {
+ mov_imm(ARG1, am_false);
+ a.ret(a64::x30);
+ }
+}
+
+void BeamGlobalAssembler::emit_bif_is_ne_exact_shared() {
+ Label succ = a.newLabel(), fail = a.newLabel();
+
+ a.cmp(ARG1, ARG2);
+ a.cond_eq().b(fail);
+
+ emit_is_unequal_based_on_tags(ARG1, ARG2);
+ a.cond_eq().b(succ);
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime();
+
+ runtime_call<2>(eq);
+
+ emit_leave_runtime();
+ emit_leave_runtime_frame();
+
+ a.cbnz(ARG1, fail);
+
+ a.bind(succ);
+ {
+ mov_imm(ARG1, am_true);
+ a.ret(a64::x30);
+ }
+
+ a.bind(fail);
+ {
+ mov_imm(ARG1, am_false);
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_bif_is_eq_ne_exact_immed(const ArgVal &Src,
+ const ArgVal &Immed,
+ const ArgVal &Dst,
+ Eterm fail_value,
+ Eterm succ_value) {
+ auto src = load_source(Src, TMP1);
+ auto dst = init_destination(Dst, TMP2);
+
+ cmp_arg(src.reg, Immed);
+ mov_imm(TMP3, succ_value);
+ mov_imm(TMP4, fail_value);
+ a.csel(dst.reg, TMP3, TMP4, arm::Cond::kEQ);
+ flush_var(dst);
+}
+
+void BeamModuleAssembler::emit_bif_is_eq_exact(const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ if (RHS.isImmed()) {
+ emit_bif_is_eq_ne_exact_immed(LHS, RHS, Dst, am_false, am_true);
+ } else {
+ auto [lhs, rhs] = load_sources(LHS, ARG1, RHS, ARG2);
+ auto dst = init_destination(Dst, ARG1);
+
+ mov_var(ARG1, lhs);
+ mov_var(ARG2, rhs);
+ fragment_call(ga->get_bif_is_eq_exact_shared());
+ mov_var(dst, ARG1);
+ flush_var(dst);
+ }
+}
+
+void BeamModuleAssembler::emit_bif_is_ne_exact(const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ if (RHS.isImmed()) {
+ emit_bif_is_eq_ne_exact_immed(LHS, RHS, Dst, am_true, am_false);
+ } else {
+ auto [lhs, rhs] = load_sources(LHS, ARG1, RHS, ARG2);
+ auto dst = init_destination(Dst, ARG1);
+
+ mov_var(ARG1, lhs);
+ mov_var(ARG2, rhs);
+ fragment_call(ga->get_bif_is_ne_exact_shared());
+ mov_var(dst, ARG1);
+ flush_var(dst);
+ }
+}
+
+/* ================================================================
+ * and/2
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_handle_and_error() {
+ static ErtsCodeMFA mfa = {am_erlang, am_and, 2};
+ emit_raise_badarg(&mfa);
+}
+
+void BeamModuleAssembler::emit_bif_and(const ArgVal &Fail,
+ const ArgVal &Src1,
+ const ArgVal &Src2,
+ const ArgVal &Dst) {
+ static const Uint diff_bit = am_true - am_false;
+ Label next = a.newLabel();
+
+ auto [src1, src2] = load_sources(Src1, TMP1, Src2, TMP2);
+ auto dst = init_destination(Dst, TMP3);
+
+ ERTS_CT_ASSERT(am_false == make_atom(0));
+ ERTS_CT_ASSERT(am_true == make_atom(1));
+
+ a.and_(TMP3, src1.reg, imm(_TAG_IMMED2_MASK | ~diff_bit));
+ a.and_(TMP4, src2.reg, imm(_TAG_IMMED2_MASK | ~diff_bit));
+ a.cmp(TMP3, imm(_TAG_IMMED2_ATOM));
+ a.ccmp(TMP3, TMP4, 0, arm::Cond::kEQ);
+
+ if (Fail.getValue()) {
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.cond_eq().b(next);
+ mov_var(XREG0, src1);
+ mov_var(XREG1, src2);
+ fragment_call(ga->get_handle_or_error());
+ }
+
+ a.bind(next);
+ {
+ a.and_(dst.reg, src1.reg, src2.reg);
+ flush_var(dst);
+ }
+}
+
+/* ================================================================
+ * bit_size/1
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_bif_bit_size_helper(Label fail) {
+ Label not_sub_bin = a.newLabel();
+ arm::Gp boxed_ptr = emit_ptr_val(ARG1, ARG1);
+
+ emit_is_boxed(fail, boxed_ptr);
+
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+ a.and_(TMP1, TMP1, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP1, imm(_TAG_HEADER_SUB_BIN));
+ a.cond_ne().b(not_sub_bin);
+
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr, sizeof(Eterm)));
+ a.ldurb(TMP2.w(), emit_boxed_val(boxed_ptr, offsetof(ErlSubBin, bitsize)));
+
+ mov_imm(ARG1, _TAG_IMMED1_SMALL);
+ a.add(TMP1, TMP2, TMP1, arm::lsl(3));
+ a.bfi(ARG1, TMP1, imm(_TAG_IMMED1_SIZE), imm(SMALL_BITS));
+ a.ret(a64::x30);
+
+ a.bind(not_sub_bin);
+ ERTS_CT_ASSERT(_TAG_HEADER_REFC_BIN + 4 == _TAG_HEADER_HEAP_BIN);
+ a.and_(TMP1, TMP1, imm(~4));
+ a.cmp(TMP1, imm(_TAG_HEADER_REFC_BIN));
+ a.cond_ne().b(fail);
+
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr, sizeof(Eterm)));
+ mov_imm(ARG1, _TAG_IMMED1_SMALL);
+ a.bfi(ARG1, TMP1, imm(_TAG_IMMED1_SIZE + 3), imm(SMALL_BITS - 3));
+
+ a.ret(a64::x30);
+}
+
+void BeamGlobalAssembler::emit_bif_bit_size_body() {
+ Label error = a.newLabel();
+
+ emit_bif_bit_size_helper(error);
+
+ a.bind(error);
+ {
+ static ErtsCodeMFA mfa = {am_erlang, am_bit_size, 1};
+ a.mov(XREG0, ARG1);
+ emit_raise_badarg(&mfa);
+ }
+}
+
+void BeamGlobalAssembler::emit_bif_bit_size_guard() {
+ Label error = a.newLabel();
+
+ emit_bif_bit_size_helper(error);
+
+ a.bind(error);
+ {
+ mov_imm(ARG1, THE_NON_VALUE);
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_bif_bit_size(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ auto src = load_source(Src, ARG1);
+ auto dst = init_destination(Dst, ARG1);
+
+ mov_var(ARG1, src);
+
+ if (Fail.getValue() == 0) {
+ fragment_call(ga->get_bif_bit_size_body());
+ } else {
+ fragment_call(ga->get_bif_bit_size_guard());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ }
+
+ mov_var(dst, ARG1);
+ flush_var(dst);
+}
+
+/* ================================================================
+ * byte_size/1
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_bif_byte_size_helper(Label fail) {
+ Label not_sub_bin = a.newLabel();
+ arm::Gp boxed_ptr = emit_ptr_val(ARG1, ARG1);
+
+ emit_is_boxed(fail, boxed_ptr);
+
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+ a.and_(TMP1, TMP1, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP1, imm(_TAG_HEADER_SUB_BIN));
+ a.cond_ne().b(not_sub_bin);
+
+ a.ldurb(TMP2.w(), emit_boxed_val(boxed_ptr, offsetof(ErlSubBin, bitsize)));
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr, sizeof(Eterm)));
+ a.cmp(TMP2, imm(0));
+ a.cinc(TMP1, TMP1, arm::Cond::kNE);
+
+ mov_imm(ARG1, _TAG_IMMED1_SMALL);
+ a.bfi(ARG1, TMP1, imm(_TAG_IMMED1_SIZE), imm(SMALL_BITS));
+ a.ret(a64::x30);
+
+ a.bind(not_sub_bin);
+ ERTS_CT_ASSERT(_TAG_HEADER_REFC_BIN + 4 == _TAG_HEADER_HEAP_BIN);
+ a.and_(TMP1, TMP1, imm(~4));
+ a.cmp(TMP1, imm(_TAG_HEADER_REFC_BIN));
+ a.cond_ne().b(fail);
+
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr, sizeof(Eterm)));
+ mov_imm(ARG1, _TAG_IMMED1_SMALL);
+ a.bfi(ARG1, TMP1, imm(_TAG_IMMED1_SIZE), imm(SMALL_BITS));
+
+ a.ret(a64::x30);
+}
+
+void BeamGlobalAssembler::emit_bif_byte_size_body() {
+ Label error = a.newLabel();
+
+ emit_bif_byte_size_helper(error);
+
+ a.bind(error);
+ {
+ static ErtsCodeMFA mfa = {am_erlang, am_byte_size, 1};
+ a.mov(XREG0, ARG1);
+ emit_raise_badarg(&mfa);
+ }
+}
+
+void BeamGlobalAssembler::emit_bif_byte_size_guard() {
+ Label error = a.newLabel();
+
+ emit_bif_byte_size_helper(error);
+
+ a.bind(error);
+ {
+ mov_imm(ARG1, THE_NON_VALUE);
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_bif_byte_size(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ auto src = load_source(Src, ARG1);
+ auto dst = init_destination(Dst, ARG1);
+
+ mov_var(ARG1, src);
+
+ if (Fail.getValue() == 0) {
+ fragment_call(ga->get_bif_byte_size_body());
+ } else {
+ fragment_call(ga->get_bif_byte_size_guard());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ }
+
+ mov_var(dst, ARG1);
+ flush_var(dst);
+}
+
+/* ================================================================
+ * element/2
+ * ================================================================
+ */
+
+/* ARG1 = Position (1-based)
+ * ARG2 = Tuple
+ *
+ * Will return the result in ARG1, or jump to the label `fail` if
+ * the operation fails.
+ */
+void BeamGlobalAssembler::emit_bif_element_helper(Label fail) {
+ a.and_(TMP1, ARG1, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ a.cond_ne().b(fail);
+
+ /* Ensure that ARG2 contains a tuple. */
+ emit_is_boxed(fail, ARG2);
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, ARG2);
+ lea(TMP1, emit_boxed_val(boxed_ptr));
+ a.ldr(TMP2, arm::Mem(TMP1));
+ ERTS_CT_ASSERT(make_arityval(0) == 0);
+ a.tst(TMP2, imm(_TAG_HEADER_MASK));
+ a.cond_ne().b(fail);
+
+ /* Ensure that the position points within the tuple. */
+ a.lsr(TMP2, TMP2, imm(_HEADER_ARITY_OFFS));
+ a.asr(TMP3, ARG1, imm(_TAG_IMMED1_SIZE));
+ a.cmp(TMP3, imm(1));
+ a.cond_mi().b(fail);
+ a.cmp(TMP2, TMP3);
+ a.cond_lo().b(fail);
+
+ a.ldr(ARG1, arm::Mem(TMP1, TMP3, arm::lsl(3)));
+ a.ret(a64::x30);
+}
+
+void BeamGlobalAssembler::emit_bif_element_body_shared() {
+ Label error = a.newLabel();
+
+ emit_bif_element_helper(error);
+
+ a.bind(error);
+ {
+ static ErtsCodeMFA mfa = {am_erlang, am_element, 2};
+ a.mov(XREG0, ARG1);
+ a.mov(XREG1, ARG2);
+ emit_raise_badarg(&mfa);
+ }
+}
+
+void BeamGlobalAssembler::emit_bif_element_guard_shared() {
+ Label error = a.newLabel();
+
+ emit_bif_element_helper(error);
+
+ a.bind(error);
+ {
+ mov_imm(ARG1, THE_NON_VALUE);
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_bif_element(const ArgVal &Fail,
+ const ArgVal &Pos,
+ const ArgVal &Tuple,
+ const ArgVal &Dst) {
+ mov_arg(ARG1, Pos);
+ mov_arg(ARG2, Tuple);
+
+ if (Fail.getValue() != 0) {
+ fragment_call(ga->get_bif_element_guard_shared());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ fragment_call(ga->get_bif_element_body_shared());
+ }
+
+ auto dst = init_destination(Dst, ARG1);
+ mov_var(dst, ARG1);
+ flush_var(dst);
+}
+
+/* ================================================================
+ * hd/1
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_handle_hd_error() {
+ static ErtsCodeMFA mfa = {am_erlang, am_hd, 1};
+ emit_raise_badarg(&mfa);
+}
+
+void BeamModuleAssembler::emit_bif_hd(const ArgVal &Src, const ArgVal &Hd) {
+ Label good_cons = a.newLabel();
+ auto src = load_source(Src, TMP1);
+ auto hd = init_destination(Hd, TMP2);
+ const int bitNumber = 1;
+
+ ERTS_CT_ASSERT(_TAG_PRIMARY_MASK - TAG_PRIMARY_LIST == (1 << bitNumber));
+
+ a.tbz(src.reg, bitNumber, good_cons);
+ mov_var(XREG0, src);
+ fragment_call(ga->get_handle_hd_error());
+
+ a.bind(good_cons);
+ {
+ arm::Gp cons_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(hd.reg, getCARRef(cons_ptr));
+ flush_var(hd);
+ }
+}
+
+/* ================================================================
+ * map_size/1
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_handle_map_size_error() {
+ static ErtsCodeMFA mfa = {am_erlang, am_map_size, 1};
+ mov_imm(TMP1, BADMAP);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, freason)));
+ a.str(XREG0, arm::Mem(c_p, offsetof(Process, fvalue)));
+ mov_imm(ARG4, &mfa);
+ a.b(labels[raise_exception]);
+}
+
+void BeamModuleAssembler::emit_bif_map_size(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ Label error = a.newLabel(), good_map = a.newLabel();
+ auto src = load_source(Src, TMP1);
+ auto dst = init_destination(Dst, TMP2);
+
+ if (Fail.getValue() == 0) {
+ emit_is_boxed(error, src.reg);
+ } else {
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+ }
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP3, src.reg);
+ a.ldur(TMP4, emit_boxed_val(boxed_ptr));
+ a.and_(TMP4, TMP4, imm(_TAG_HEADER_MASK));
+ a.cmp(TMP4, imm(_TAG_HEADER_MAP));
+
+ if (Fail.getValue() == 0) {
+ a.cond_eq().b(good_map);
+ a.bind(error);
+ {
+ mov_var(XREG0, src);
+ fragment_call(ga->get_handle_map_size_error());
+ }
+ } else {
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ a.bind(error); /* Never referenced. */
+ }
+
+ a.bind(good_map);
+ {
+ ERTS_CT_ASSERT(offsetof(flatmap_t, size) == sizeof(Eterm));
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr, sizeof(Eterm)));
+ mov_imm(dst.reg, _TAG_IMMED1_SMALL);
+ a.bfi(dst.reg, TMP1, imm(_TAG_IMMED1_SIZE), imm(SMALL_BITS));
+ flush_var(dst);
+ }
+}
+
+/* ================================================================
+ * not/1
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_handle_not_error() {
+ static ErtsCodeMFA mfa = {am_erlang, am_not, 1};
+ emit_raise_badarg(&mfa);
+}
+
+void BeamModuleAssembler::emit_bif_not(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ Label next = a.newLabel();
+ auto src = load_source(Src, TMP1);
+ auto dst = init_destination(Dst, TMP2);
+ ERTS_CT_ASSERT(am_false == make_atom(0));
+ ERTS_CT_ASSERT(am_true == make_atom(1));
+ Uint diff_bit = am_true - am_false;
+
+ a.and_(TMP3, src.reg, imm(_TAG_IMMED2_MASK | ~diff_bit));
+ a.cmp(TMP3, imm(_TAG_IMMED2_ATOM));
+
+ if (Fail.getValue() == 0) {
+ a.cond_eq().b(next);
+ mov_var(XREG0, src);
+ fragment_call(ga->get_handle_not_error());
+ } else {
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ }
+
+ a.bind(next);
+ {
+ a.eor(dst.reg, src.reg, imm(diff_bit));
+ flush_var(dst);
+ }
+}
+
+/* ================================================================
+ * or/2
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_handle_or_error() {
+ static ErtsCodeMFA mfa = {am_erlang, am_or, 2};
+ emit_raise_badarg(&mfa);
+}
+
+void BeamModuleAssembler::emit_bif_or(const ArgVal &Fail,
+ const ArgVal &Src1,
+ const ArgVal &Src2,
+ const ArgVal &Dst) {
+ static const Uint diff_bit = am_true - am_false;
+ Label next = a.newLabel();
+
+ auto [src1, src2] = load_sources(Src1, TMP1, Src2, TMP2);
+ auto dst = init_destination(Dst, TMP3);
+
+ ERTS_CT_ASSERT(am_false == make_atom(0));
+ ERTS_CT_ASSERT(am_true == make_atom(1));
+
+ a.and_(TMP3, src1.reg, imm(_TAG_IMMED2_MASK | ~diff_bit));
+ a.and_(TMP4, src2.reg, imm(_TAG_IMMED2_MASK | ~diff_bit));
+ a.cmp(TMP3, imm(_TAG_IMMED2_ATOM));
+ a.ccmp(TMP3, TMP4, 0, arm::Cond::kEQ);
+
+ if (Fail.getValue()) {
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.cond_eq().b(next);
+ mov_var(XREG0, src1);
+ mov_var(XREG1, src2);
+ fragment_call(ga->get_handle_or_error());
+ }
+
+ a.bind(next);
+ {
+ a.orr(dst.reg, src1.reg, src2.reg);
+ flush_var(dst);
+ }
+}
+
+/* ================================================================
+ * tl/1
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_handle_tl_error() {
+ static ErtsCodeMFA mfa = {am_erlang, am_tl, 1};
+ emit_raise_badarg(&mfa);
+}
+
+void BeamModuleAssembler::emit_bif_tl(const ArgVal &Src, const ArgVal &Tl) {
+ Label good_cons = a.newLabel();
+ auto src = load_source(Src, TMP1);
+ auto tl = init_destination(Tl, TMP2);
+ const int bitNumber = 1;
+
+ ERTS_CT_ASSERT(_TAG_PRIMARY_MASK - TAG_PRIMARY_LIST == (1 << bitNumber));
+
+ a.tbz(src.reg, bitNumber, good_cons);
+ mov_var(XREG0, src);
+ fragment_call(ga->get_handle_tl_error());
+
+ a.bind(good_cons);
+ {
+ arm::Gp cons_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(tl.reg, getCDRRef(cons_ptr));
+ flush_var(tl);
+ }
+}
+
+/* ================================================================
+ * tuple_size/1
+ * ================================================================
+ */
+
+void BeamGlobalAssembler::emit_bif_tuple_size_helper(Label fail) {
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, ARG1);
+
+ emit_is_boxed(fail, boxed_ptr);
+
+ ERTS_CT_ASSERT(_TAG_HEADER_ARITYVAL == 0);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr));
+ a.tst(TMP1, imm(_TAG_HEADER_MASK));
+ a.cond_ne().b(fail);
+
+ ERTS_CT_ASSERT(_HEADER_ARITY_OFFS - _TAG_IMMED1_SIZE > 0);
+ ERTS_CT_ASSERT(_TAG_IMMED1_SMALL == _TAG_IMMED1_MASK);
+ a.lsr(TMP1, TMP1, _HEADER_ARITY_OFFS - _TAG_IMMED1_SIZE);
+ a.orr(ARG1, TMP1, imm(_TAG_IMMED1_SMALL));
+
+ a.ret(a64::x30);
+}
+
+void BeamGlobalAssembler::emit_bif_tuple_size_body() {
+ Label error = a.newLabel();
+
+ emit_bif_tuple_size_helper(error);
+
+ a.bind(error);
+ {
+ static ErtsCodeMFA mfa = {am_erlang, am_tuple_size, 1};
+ a.mov(XREG0, ARG1);
+ emit_raise_badarg(&mfa);
+ }
+}
+
+void BeamGlobalAssembler::emit_bif_tuple_size_guard() {
+ Label error = a.newLabel();
+
+ emit_bif_tuple_size_helper(error);
+
+ a.bind(error);
+ {
+ mov_imm(ARG1, THE_NON_VALUE);
+ a.ret(a64::x30);
+ }
+}
+
+void BeamModuleAssembler::emit_bif_tuple_size(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Dst) {
+ auto src = load_source(Src, ARG1);
+ auto dst = init_destination(Dst, ARG1);
+
+ mov_var(ARG1, src);
+
+ if (Fail.getValue() == 0) {
+ fragment_call(ga->get_bif_tuple_size_body());
+ } else {
+ fragment_call(ga->get_bif_tuple_size_guard());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ }
+
+ mov_var(dst, ARG1);
+ flush_var(dst);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_map.cpp b/erts/emulator/beam/jit/arm/instr_map.cpp
new file mode 100644
index 0000000000..ba6bb40f77
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_map.cpp
@@ -0,0 +1,276 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+#include <algorithm>
+#include "beam_asm.hpp"
+
+using namespace asmjit;
+
+extern "C"
+{
+#include "erl_map.h"
+#include "beam_common.h"
+}
+
+void BeamGlobalAssembler::emit_new_map_shared() {
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<5>(erts_gc_new_map);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+void BeamModuleAssembler::emit_new_map(const ArgVal &Dst,
+ const ArgVal &Live,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ embed_vararg_rodata(args, ARG5);
+
+ mov_imm(ARG3, Live.getValue());
+ mov_imm(ARG4, args.size());
+ fragment_call(ga->get_new_map_shared());
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamGlobalAssembler::emit_i_new_small_map_lit_shared() {
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<5>(erts_gc_new_small_map_lit);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+void BeamModuleAssembler::emit_i_new_small_map_lit(const ArgVal &Dst,
+ const ArgVal &Live,
+ const ArgVal &Keys,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ ASSERT(Size.getValue() == args.size());
+
+ embed_vararg_rodata(args, ARG5);
+
+ ASSERT(Keys.isLiteral());
+ mov_arg(ARG3, Keys);
+ mov_imm(ARG4, Live.getValue());
+
+ fragment_call(ga->get_i_new_small_map_lit_shared());
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_i_get_map_element(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Key,
+ const ArgVal &Dst) {
+ mov_arg(ARG1, Src);
+ mov_arg(ARG2, Key);
+
+ emit_enter_runtime();
+
+ runtime_call<2>(get_map_element);
+
+ emit_leave_runtime();
+
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+
+ /*
+ * Don't store the result if the destination is the scratch X register.
+ * (This instruction was originally a has_map_fields instruction.)
+ */
+ if (!(Dst.getType() == ArgVal::XReg && Dst.getValue() == SCRATCH_X_REG)) {
+ mov_arg(Dst, ARG1);
+ }
+}
+
+void BeamModuleAssembler::emit_i_get_map_elements(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ ASSERT(Size.getValue() == args.size());
+
+ embed_vararg_rodata(args, ARG5);
+
+ mov_arg(ARG1, Src);
+ a.mov(ARG3, E);
+
+ emit_enter_runtime<Update::eXRegs>();
+
+ mov_imm(ARG4, args.size() / 3);
+ load_x_reg_array(ARG2);
+ runtime_call<5>(beam_jit_get_map_elements);
+
+ emit_leave_runtime<Update::eXRegs>();
+
+ a.cbz(ARG1, resolve_beam_label(Fail, disp1MB));
+}
+
+void BeamModuleAssembler::emit_i_get_map_element_hash(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Key,
+ const ArgVal &Hx,
+ const ArgVal &Dst) {
+ mov_arg(ARG1, Src);
+ mov_arg(ARG2, Key);
+ mov_arg(ARG3, Hx);
+
+ emit_enter_runtime();
+
+ runtime_call<3>(get_map_element_hash);
+
+ emit_leave_runtime();
+
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+
+ /*
+ * Don't store the result if the destination is the scratch X register.
+ * (This instruction was originally a has_map_fields instruction.)
+ */
+ if (!(Dst.getType() == ArgVal::XReg && Dst.getValue() == SCRATCH_X_REG)) {
+ mov_arg(Dst, ARG1);
+ }
+}
+
+/* ARG3 = live registers, ARG4 = update vector size, ARG5 = update vector. */
+void BeamGlobalAssembler::emit_update_map_assoc_shared() {
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<5>(erts_gc_update_map_assoc);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+void BeamModuleAssembler::emit_update_map_assoc(const ArgVal &Src,
+ const ArgVal &Dst,
+ const ArgVal &Live,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ auto src_reg = load_source(Src, TMP1);
+
+ ASSERT(Size.getValue() == args.size());
+
+ embed_vararg_rodata(args, ARG5);
+
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue()), src_reg.reg);
+ mov_imm(ARG3, Live.getValue());
+ mov_imm(ARG4, args.size());
+
+ fragment_call(ga->get_update_map_assoc_shared());
+
+ mov_arg(Dst, ARG1);
+}
+
+/* ARG3 = live registers, ARG4 = update vector size, ARG5 = update vector.
+ *
+ * Result is returned in RET, error is indicated by ZF. */
+void BeamGlobalAssembler::emit_update_map_exact_guard_shared() {
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<5>(erts_gc_update_map_exact);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+ emit_leave_runtime_frame();
+
+ a.ret(a64::x30);
+}
+
+/* ARG3 = live registers, ARG4 = update vector size, ARG5 = update vector.
+ *
+ * Does not return on error. */
+void BeamGlobalAssembler::emit_update_map_exact_body_shared() {
+ Label error = a.newLabel();
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<5>(erts_gc_update_map_exact);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+ emit_leave_runtime_frame();
+
+ emit_branch_if_not_value(ARG1, error);
+ a.ret(a64::x30);
+
+ a.bind(error);
+ {
+ mov_imm(ARG4, 0);
+ a.b(labels[raise_exception]);
+ }
+}
+
+void BeamModuleAssembler::emit_update_map_exact(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Dst,
+ const ArgVal &Live,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ auto src_reg = load_source(Src, TMP1);
+
+ ASSERT(Size.getValue() == args.size());
+
+ embed_vararg_rodata(args, ARG5);
+
+ /* We _KNOW_ Src is a map */
+
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue()), src_reg.reg);
+ mov_imm(ARG3, Live.getValue());
+ mov_imm(ARG4, args.size());
+
+ if (Fail.getValue() != 0) {
+ fragment_call(ga->get_update_map_exact_guard_shared());
+ emit_branch_if_not_value(ARG1, resolve_beam_label(Fail, dispUnknown));
+ } else {
+ fragment_call(ga->get_update_map_exact_body_shared());
+ }
+
+ mov_arg(Dst, ARG1);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_msg.cpp b/erts/emulator/beam/jit/arm/instr_msg.cpp
new file mode 100644
index 0000000000..56ea4d67ce
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_msg.cpp
@@ -0,0 +1,385 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "bif.h"
+#include "code_ix.h"
+#include "erl_proc_sig_queue.h"
+#ifdef USE_VM_PROBES
+# include "dtrace-wrapper.h"
+#endif
+}
+
+#ifdef ERTS_SUPPORT_OLD_RECV_MARK_INSTRS
+
+static void recv_mark(Process *p) {
+ /* inlined here... */
+ erts_msgq_recv_marker_insert_bind(p, erts_old_recv_marker_id);
+}
+
+static void recv_mark_set(Process *p) {
+ /* inlined here... */
+ erts_msgq_recv_marker_set_save(p, erts_old_recv_marker_id);
+}
+
+void BeamModuleAssembler::emit_i_recv_mark() {
+ /*
+ * OLD INSTRUCTION: This instruction is to be removed
+ * in OTP 26.
+ *
+ * Save the current end of message queue
+ */
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(recv_mark);
+
+ emit_leave_runtime();
+}
+
+void BeamModuleAssembler::emit_i_recv_set() {
+ /*
+ * OLD INSTRUCTION: This instruction is to be removed
+ * in OTP 26.
+ *
+ * If previously saved recv mark, set save pointer to it
+ */
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(recv_mark_set);
+
+ emit_leave_runtime();
+}
+
+#endif /* ERTS_SUPPORT_OLD_RECV_MARK_INSTRS */
+
+void BeamModuleAssembler::emit_recv_marker_reserve(const ArgVal &Dst) {
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(erts_msgq_recv_marker_insert);
+
+ emit_leave_runtime();
+
+ mov_arg(Dst, ARG1);
+}
+
+void BeamModuleAssembler::emit_recv_marker_bind(const ArgVal &Marker,
+ const ArgVal &Reference) {
+ mov_arg(ARG2, Marker);
+ mov_arg(ARG3, Reference);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_msgq_recv_marker_bind);
+
+ emit_leave_runtime();
+}
+
+void BeamModuleAssembler::emit_recv_marker_clear(const ArgVal &Reference) {
+ mov_arg(ARG2, Reference);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_msgq_recv_marker_clear);
+
+ emit_leave_runtime();
+}
+
+void BeamModuleAssembler::emit_recv_marker_use(const ArgVal &Reference) {
+ mov_arg(ARG2, Reference);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_msgq_recv_marker_set_save);
+
+ emit_leave_runtime();
+}
+
+#ifdef ERTS_ENABLE_LOCK_CHECK
+int erts_lc_proc_sig_receive_helper(Process *c_p,
+ int fcalls,
+ int neg_o_reds,
+ ErtsMessage **msgpp,
+ int *get_outp) {
+ int res;
+ /*
+ * erts_proc_sig_receive_helper() may temporarliy release
+ * its own main lock...
+ */
+ ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
+ res = erts_proc_sig_receive_helper(c_p,
+ fcalls,
+ neg_o_reds,
+ msgpp,
+ get_outp);
+ ERTS_REQ_PROC_MAIN_LOCK(c_p);
+ return res;
+}
+#endif
+
+void BeamGlobalAssembler::emit_i_loop_rec_shared() {
+ Label restart = a.newLabel(), peek_message = a.newLabel(),
+ schedule_out = a.newLabel(), check_is_distributed = a.newLabel(),
+ done = a.newLabel();
+
+ arm::Mem await_addr = TMP_MEM1q, message_ptr = TMP_MEM2q,
+ get_out = TMP_MEM3q;
+ arm::Mem flags = arm::Mem(c_p, offsetof(Process, flags));
+
+ a.mov(XREG1, a64::x30);
+
+ a.ldr(TMP1.w(), flags);
+ a.orr(TMP1, TMP1, imm(F_DELAY_GC));
+ a.str(TMP1.w(), flags);
+ a.str(ARG1, arm::Mem(c_p, offsetof(Process, i)));
+ a.str(ARG2, await_addr);
+
+ a.bind(restart);
+ {
+ a.tst(FCALLS, FCALLS);
+ a.cond_le().b(schedule_out);
+
+ /* !! FALL THROUGH !! */
+ }
+
+ comment("Peek next message");
+ a.bind(peek_message);
+ {
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, sig_qs.save)));
+ a.ldr(ARG1, arm::Mem(TMP1));
+ a.cbnz(ARG1, check_is_distributed);
+ comment("Inner queue empty, fetch more from outer/middle queues");
+
+ emit_enter_runtime<Update::eReductions | Update::eStack |
+ Update::eHeap>(0);
+
+ a.str(ZERO, message_ptr);
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, FCALLS);
+ mov_imm(ARG3, 0);
+ lea(ARG4, message_ptr);
+ lea(ARG5, get_out);
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ runtime_call<5>(erts_lc_proc_sig_receive_helper);
+#else
+ runtime_call<5>(erts_proc_sig_receive_helper);
+#endif
+
+ /* erts_proc_sig_receive_helper merely inspects FCALLS, so we don't
+ * need to update it here.
+ *
+ * Also note that another process may have loaded new code and sent us
+ * a message to notify us about it, so we must update the active code
+ * index. */
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eCodeIndex>(
+ 0);
+
+ a.sub(FCALLS, FCALLS, ARG1);
+
+ /* Need to spill message_ptr to ARG1 as check_is_distributed uses it. */
+ a.ldr(ARG1, message_ptr);
+ a.cbnz(ARG1, check_is_distributed);
+
+ /* Did we receive a signal or run out of reds? */
+ a.ldr(TMP1.w(), get_out);
+ a.cbnz(TMP1, schedule_out);
+
+ /* The queue is empty and we're not yielding or exiting, so we'll jump
+ * to our wait/timeout instruction.
+ *
+ * Note that the message queue lock is still held in this case. */
+ a.ldr(TMP1.w(), flags);
+ a.and_(TMP1, TMP1, imm(~F_DELAY_GC));
+ a.str(TMP1.w(), flags);
+
+ a.ldr(TMP1, await_addr);
+ a.br(TMP1);
+ }
+
+ a.bind(schedule_out);
+ {
+ /* We either ran out of reductions or received an exit signal; schedule
+ * ourselves out. The yield address (`c_p->i`) was set on ingress. */
+ a.ldr(TMP1.w(), flags);
+ a.and_(TMP1, TMP1, imm(~F_DELAY_GC));
+ a.str(TMP1.w(), flags);
+ a.str(ZERO, arm::Mem(c_p, offsetof(Process, arity)));
+ a.str(ZERO, arm::Mem(c_p, offsetof(Process, current)));
+
+ a.b(labels[do_schedule]);
+ }
+
+ /*
+ * ARG1 now contains the pointer to a message.
+ */
+ comment("Check if message is distributed");
+ a.bind(check_is_distributed);
+ {
+ a.ldr(TMP1, arm::Mem(ARG1, offsetof(ErtsSignal, common.tag)));
+ emit_branch_if_value(TMP1, done);
+
+ sub(FCALLS, FCALLS, 10);
+
+ emit_enter_runtime(0);
+
+ a.mov(ARG2, ARG1);
+ a.mov(ARG1, c_p);
+ runtime_call<2>(beam_jit_decode_dist);
+
+ emit_leave_runtime(0);
+
+ a.cbz(ARG1, restart);
+
+ /* !! FALL THROUGH !! */
+ }
+
+ a.bind(done);
+ {
+ a.ldr(XREG0, arm::Mem(ARG1, offsetof(ErtsMessage, m[0])));
+ a.ret(XREG1);
+ }
+}
+
+void BeamModuleAssembler::emit_i_loop_rec(const ArgVal &Wait) {
+ Label entry = a.newLabel();
+
+ a.bind(entry);
+ a.adr(ARG1, entry);
+ a.ldr(ARG2, embed_constant(Wait, disp32K));
+ fragment_call(ga->get_i_loop_rec_shared());
+}
+
+void BeamModuleAssembler::emit_remove_message() {
+ /* HTOP and E are passed explicitly and only read from, so we don't need to
+ * swap them out. */
+ a.mov(ARG3, HTOP);
+ a.mov(ARG4, E);
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, FCALLS);
+ a.mov(ARG5, active_code_ix);
+ runtime_call<5>(beam_jit_remove_message);
+ a.mov(FCALLS, ARG1);
+
+ emit_leave_runtime();
+}
+
+void BeamModuleAssembler::emit_loop_rec_end(const ArgVal &Dest) {
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(erts_msgq_set_save_next);
+
+ emit_leave_runtime(0);
+
+ a.sub(FCALLS, FCALLS, imm(1));
+ a.b(resolve_beam_label(Dest, disp128MB));
+}
+
+void BeamModuleAssembler::emit_wait_unlocked(const ArgVal &Dest) {
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ a.ldr(ARG2, embed_constant(Dest, disp32K));
+ runtime_call<2>(beam_jit_wait_unlocked);
+
+ emit_leave_runtime(0);
+
+ a.b(resolve_fragment(ga->get_do_schedule(), disp128MB));
+}
+
+void BeamModuleAssembler::emit_wait_locked(const ArgVal &Dest) {
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ a.ldr(ARG2, embed_constant(Dest, disp32K));
+ runtime_call<2>(beam_jit_wait_locked);
+
+ emit_leave_runtime(0);
+
+ a.b(resolve_fragment(ga->get_do_schedule(), disp128MB));
+}
+
+void BeamModuleAssembler::emit_wait_timeout_unlocked(const ArgVal &Src,
+ const ArgVal &Dest) {
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(beam_jit_take_receive_lock);
+
+ emit_leave_runtime(0);
+
+ emit_wait_timeout_locked(Src, Dest);
+}
+
+void BeamModuleAssembler::emit_wait_timeout_locked(const ArgVal &Src,
+ const ArgVal &Dest) {
+ Label wait = a.newLabel(), next = a.newLabel();
+
+ mov_arg(ARG2, Src);
+
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ a.adr(ARG3, next);
+ runtime_call<3>(beam_jit_wait_timeout);
+
+ emit_leave_runtime(0);
+
+ ERTS_CT_ASSERT(RET_next < RET_wait && RET_wait < RET_badarg);
+ a.cmp(ARG1, imm(RET_wait));
+ a.cond_eq().b(wait);
+ a.cond_lt().b(next);
+
+ emit_raise_exception(currLabel, (ErtsCodeMFA *)nullptr);
+
+ a.bind(wait);
+ emit_wait_locked(Dest);
+
+ a.bind(next);
+}
+
+void BeamModuleAssembler::emit_timeout_locked() {
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(beam_jit_timeout_locked);
+
+ emit_leave_runtime(0);
+}
+
+void BeamModuleAssembler::emit_timeout() {
+ emit_enter_runtime(0);
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(beam_jit_timeout);
+
+ emit_leave_runtime(0);
+}
diff --git a/erts/emulator/beam/jit/arm/instr_select.cpp b/erts/emulator/beam/jit/arm/instr_select.cpp
new file mode 100644
index 0000000000..bac2238be7
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_select.cpp
@@ -0,0 +1,479 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include <algorithm>
+#include <numeric>
+
+#include "beam_asm.hpp"
+
+using namespace asmjit;
+
+/* Request Support::isInt12 ! */
+template<typename T>
+bool isInt12(T value) {
+ typedef typename std::make_unsigned<T>::type U;
+ typedef typename std::make_signed<T>::type S;
+
+ return Support::isUInt12(U(value)) || Support::isUInt12(-S(value));
+}
+
+/* The cmp instruction for AArch accepts only a 12-bit immediate value.
+ * That means that to compare most atoms, the atom number to be compared
+ * must be loaded into a temporary register.
+ *
+ * We can use the immediate form of cmp for more values if we untag both
+ * the source value and the values to be compared.
+ *
+ * This function finds the `base` and `shift` that result in the most number
+ * of elements fitting in a 12-bit immediate. */
+static std::pair<UWord, int> plan_untag(const Span<ArgVal> &args) {
+ auto left = args.begin(), right = args.begin();
+ auto best_left = left, best_right = right;
+ int count, shift;
+
+ count = args.size() / 2;
+
+ ASSERT(left->isImmed() && (args.begin() + count)->isLabel());
+ ASSERT(is_small(left->getValue()) || is_atom(right->getValue()));
+
+ shift = is_small(left->getValue()) ? _TAG_IMMED1_SIZE : _TAG_IMMED2_SIZE;
+
+ while (right < (args.begin() + count)) {
+ auto distance = std::distance(left, right);
+ UWord left_value, mid_value, right_value;
+
+ left_value = left->getValue() >> shift;
+ mid_value = (left + distance / 2)->getValue() >> shift;
+ right_value = right->getValue() >> shift;
+
+ if (isInt12(left_value - mid_value) &&
+ isInt12(right_value - mid_value)) {
+ if (distance > std::distance(best_left, best_right)) {
+ best_right = right;
+ best_left = left;
+ }
+
+ right++;
+ } else {
+ left++;
+ }
+ }
+
+ auto distance = std::distance(best_left, best_right);
+
+ /* Skip everything if the best run is too short, untagging has its costs
+ * too. */
+ if (distance <= 6) {
+ return std::make_pair(0, 0);
+ }
+
+ /* Apply neither shift nor base if the best run doesn't need it: we're more
+ * likely to lose by rebasing/shifting. */
+ if (isInt12(best_left->getValue()) && isInt12(best_right->getValue())) {
+ return std::make_pair(0, 0);
+ }
+
+ /* Skip rebasing if the best run doesn't need it after shifting. */
+ if (isInt12(best_left->getValue() >> shift) &&
+ isInt12(best_right->getValue() >> shift)) {
+ return std::make_pair(0, shift);
+ }
+
+ auto mid_value = (best_left + distance / 2)->getValue();
+ return std::make_pair(mid_value, shift);
+}
+
+const std::vector<ArgVal> BeamModuleAssembler::emit_select_untag(
+ const Span<ArgVal> &args,
+ a64::Gp comparand,
+ Label fail,
+ UWord base,
+ int shift) {
+ ASSERT(base != 0 || shift > 0);
+
+ /* Emit code to test that the source value has the correct type and
+ * untag it. */
+ comment("(comparing untagged+rebased values)");
+ if (is_small(args.front().getValue())) {
+ a.and_(TMP1, comparand, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED1_SMALL));
+ } else {
+ ASSERT(is_atom(args.front().getValue()));
+ a.and_(TMP1, comparand, imm(_TAG_IMMED2_MASK));
+ a.cmp(TMP1, imm(_TAG_IMMED2_ATOM));
+ }
+
+ a.cond_ne().b(resolve_label(fail, disp1MB));
+
+ if (shift != 0) {
+ a.lsr(ARG1, comparand, imm(shift));
+ base >>= shift;
+
+ comparand = ARG1;
+ }
+
+ std::vector<ArgVal> result(args.begin(), args.end());
+ int count = args.size() / 2;
+
+ if (base != 0) {
+ sub(ARG1, comparand, base);
+
+ /* The values will always be ordered differently after adjusting the
+ * base, so we have to sort them again.
+ *
+ * This is rather annoying because the labels and values can't be
+ * sorted together. Perhaps we should diverge from the other platforms,
+ * keeping them together just on ARM? */
+ std::vector<int> sorted_indexes(count);
+ std::iota(sorted_indexes.begin(), sorted_indexes.end(), 0);
+ std::sort(sorted_indexes.begin(),
+ sorted_indexes.end(),
+ [&](int lhs, int rhs) {
+ auto lhs_value = (args[lhs].getValue() >> shift) - base;
+ auto rhs_value = (args[rhs].getValue() >> shift) - base;
+ return lhs_value < rhs_value;
+ });
+
+ for (auto i = 0; i < count; i++) {
+ const auto &src_value = args[sorted_indexes[i]];
+ const auto &src_label = args[sorted_indexes[i] + count];
+ auto &dst_value = result[i];
+ auto &dst_label = result[i + count];
+
+ dst_value = ArgVal(ArgVal::Immediate,
+ (src_value.getValue() >> shift) - base);
+ dst_label = src_label;
+ }
+ } else {
+ /* Fast-path for when a shift alone is enough, it won't affect the
+ * order. */
+ for (auto i = 0; i < count; i++) {
+ auto &dst_value = result[i];
+ auto &dst_label = result[i + count];
+
+ dst_value = ArgVal(ArgVal::Immediate, args[i].getValue() >> shift);
+ dst_label = args[i + count];
+ }
+ }
+
+ ASSERT(std::is_sorted(result.begin(),
+ result.begin() + count,
+ [](const ArgVal &lhs, const ArgVal &rhs) {
+ return lhs.getValue() < rhs.getValue();
+ }));
+
+ return result;
+}
+
+void BeamModuleAssembler::emit_linear_search(arm::Gp comparand,
+ Label fail,
+ const Span<ArgVal> &args) {
+ int count = args.size() / 2;
+
+ for (int i = 0; i < count; i++) {
+ const ArgVal &value = args[i];
+ const ArgVal &label = args[i + count];
+
+ if ((i % 128) == 0) {
+ /* Checking veneers on the first element is intentional. */
+ check_pending_stubs();
+ }
+
+ cmp_arg(comparand, value);
+ a.cond_eq().b(resolve_beam_label(label, disp1MB));
+ }
+
+ /* An invalid label means fallthrough to the next instruction. */
+ if (fail.isValid()) {
+ a.b(resolve_label(fail, disp128MB));
+ }
+}
+
+void BeamModuleAssembler::emit_i_select_tuple_arity(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ auto src = load_source(Src, TMP1);
+
+ emit_is_boxed(resolve_beam_label(Fail, dispUnknown), src.reg);
+
+ arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg);
+ a.ldur(TMP1, emit_boxed_val(boxed_ptr, 0));
+
+ ERTS_CT_ASSERT(_TAG_HEADER_ARITYVAL == 0);
+ a.tst(TMP1, imm(_TAG_HEADER_MASK));
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+
+ Label fail = rawLabels[Fail.getValue()];
+ emit_linear_search(TMP1, fail, args);
+}
+
+void BeamModuleAssembler::emit_i_select_val_lins(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ ASSERT(Size.getValue() == args.size());
+ Label fail, next;
+
+ /*
+ * To keep the code simpler, we will drop down a level and
+ * use rawLabels. That will allow us to use Label to represent
+ * a label present in the BEAM file or a label created here.
+ */
+
+ if (Fail.isLabel()) {
+ next = fail = rawLabels[Fail.getValue()];
+ } else {
+ /* Fail is [], meaning that if none of the values match,
+ * we should fall through to the next instruction.
+ *
+ * We set `next` to a label that will be located after the
+ * instructions for the linear search. That label is needed if
+ * values are untagged and a type test is emitted to skip the
+ * comparisons of the untagged values in case the type is
+ * wrong.
+ *
+ * We intentionally do not initialize the Label `fail`
+ * as an indication for emit_optimized_three_way_select() and
+ * emit_linear_search() that not branch is needed at the end
+ * of the linear search.
+ */
+ next = a.newLabel();
+ }
+
+ auto src = load_source(Src, ARG1);
+
+ auto plan = plan_untag(args);
+ auto base = plan.first;
+ auto shift = plan.second;
+
+ if (base == 0 && shift == 0) {
+ if (!emit_optimized_three_way_select(src.reg, fail, args)) {
+ emit_linear_search(src.reg, fail, args);
+ }
+ } else {
+ auto untagged = emit_select_untag(args, src.reg, next, base, shift);
+
+ if (!emit_optimized_three_way_select(ARG1, fail, untagged)) {
+ emit_linear_search(ARG1, fail, untagged);
+ }
+ }
+
+ if (!Fail.isLabel()) {
+ bind_veneer_target(next);
+ }
+}
+
+void BeamModuleAssembler::emit_i_select_val_bins(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ ASSERT(Size.getValue() == args.size());
+ int count = args.size() / 2;
+ Label fail;
+
+ /* See the comment in emit_i_select_val_lins() for an explanation
+ * why we use raw labels. */
+ if (Fail.isLabel()) {
+ fail = rawLabels[Fail.getValue()];
+ } else {
+ fail = a.newLabel();
+ }
+
+ comment("Binary search in table of %lu elements", count);
+
+ auto src = load_source(Src, ARG1);
+
+ auto plan = plan_untag(args);
+ auto base = plan.first;
+ auto shift = plan.second;
+
+ if (base == 0 && shift == 0) {
+ emit_binsearch_nodes(src.reg, 0, count - 1, fail, args);
+ } else {
+ auto untagged = emit_select_untag(args, src.reg, fail, base, shift);
+ emit_binsearch_nodes(ARG1, 0, count - 1, fail, untagged);
+ }
+
+ if (!Fail.isLabel()) {
+ bind_veneer_target(fail);
+ }
+}
+
+/*
+ * Emit code for a binary search through an interval Left <= Right of
+ * the i_select_val argument vector `args`.
+ */
+void BeamModuleAssembler::emit_binsearch_nodes(arm::Gp reg,
+ size_t Left,
+ size_t Right,
+ Label fail,
+ const Span<ArgVal> &args) {
+ ASSERT(Left <= Right);
+ ASSERT(Right < args.size() / 2);
+
+ size_t mid = (Left + Right) >> 1;
+ ArgVal midval(ArgVal::Immediate, args[mid].getValue());
+ int count = args.size() / 2;
+ size_t remaining = (Right - Left + 1);
+
+ if (remaining <= 10) {
+ /* Measurements on randomly generated select_val instructions
+ have shown that linear search is faster than binary search
+ when there are ten or less elements.
+ */
+ std::vector<ArgVal> shrunk;
+
+ comment("Linear search in [%lu..%lu], %lu elements",
+ Left,
+ Right,
+ remaining);
+
+ shrunk.reserve(remaining * 2);
+ shrunk.insert(shrunk.end(),
+ args.begin() + Left,
+ args.begin() + Left + remaining);
+ shrunk.insert(shrunk.end(),
+ args.begin() + Left + count,
+ args.begin() + count + Left + remaining);
+
+ emit_linear_search(reg, fail, shrunk);
+
+ return;
+ }
+
+ comment("Subtree [%lu..%lu], pivot %lu", Left, Right, mid);
+
+ check_pending_stubs();
+
+ cmp_arg(reg, midval);
+
+ auto &lbl = args[mid + count];
+
+ /* The search has failed if Left == Right, but that should never
+ * happen since we revert to a linear search when there are
+ * ten or less elements. */
+ ASSERT(Left != Right);
+ ASSERT(Left != mid);
+
+ a.cond_eq().b(resolve_beam_label(lbl, disp1MB));
+
+ Label right_tree = a.newLabel();
+ a.cond_hs().b(resolve_label(right_tree, disp1MB));
+
+ emit_binsearch_nodes(reg, Left, mid - 1, fail, args);
+
+ bind_veneer_target(right_tree);
+ emit_binsearch_nodes(reg, mid + 1, Right, fail, args);
+}
+
+void BeamModuleAssembler::emit_i_jump_on_val(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Base,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
+ Label fail;
+ auto src = load_source(Src, TMP1);
+
+ ASSERT(Size.getValue() == args.size());
+
+ a.and_(TMP3, src.reg, imm(_TAG_IMMED1_MASK));
+ a.cmp(TMP3, imm(_TAG_IMMED1_SMALL));
+
+ if (Fail.isLabel()) {
+ a.cond_ne().b(resolve_beam_label(Fail, disp1MB));
+ } else {
+ /* NIL means fallthrough to the next instruction. */
+ ASSERT(Fail.getType() == ArgVal::Immediate && Fail.getValue() == NIL);
+ fail = a.newLabel();
+ a.cond_ne().b(fail);
+ }
+
+ a.asr(TMP1, src.reg, imm(_TAG_IMMED1_SIZE));
+
+ if (Base.getValue() != 0) {
+ if (Support::isUInt12((Sint)Base.getValue())) {
+ a.sub(TMP1, TMP1, imm(Base.getValue()));
+ } else {
+ mov_imm(TMP3, Base.getValue());
+ a.sub(TMP1, TMP1, TMP3);
+ }
+ }
+
+ a.cmp(TMP1, imm(args.size()));
+ if (Fail.isLabel()) {
+ a.cond_hs().b(resolve_beam_label(Fail, disp1MB));
+ } else {
+ a.cond_hs().b(fail);
+ }
+
+ embed_vararg_rodata(args, TMP2);
+ a.ldr(TMP3, arm::Mem(TMP2, TMP1, arm::lsl(3)));
+ a.br(TMP3);
+
+ if (Fail.getType() == ArgVal::Immediate) {
+ a.bind(fail);
+ }
+}
+
+/*
+ * Attempt to optimize the case when a select_val has exactly two
+ * values which only differ by one bit and they both branch to the
+ * same label.
+ *
+ * The optimization makes use of the observation that (V == X || V ==
+ * Y) is equivalent to (V | (X ^ Y)) == (X | Y) when (X ^ Y) has only
+ * one bit set.
+ *
+ * Return true if the optimization was possible.
+ */
+bool BeamModuleAssembler::emit_optimized_three_way_select(
+ arm::Gp reg,
+ Label fail,
+ const Span<ArgVal> &args) {
+ if (args.size() != 4 || (args[2].getValue() != args[3].getValue()))
+ return false;
+
+ uint64_t x = args[0].getValue();
+ uint64_t y = args[1].getValue();
+ uint64_t combined = x | y;
+ uint64_t diff = x ^ y;
+ ArgVal val(ArgVal::Immediate, combined);
+
+ if ((diff & (diff - 1)) != 0) {
+ return false;
+ }
+
+ comment("(Src == 0x%x || Src == 0x%x) <=> (Src | 0x%x) == 0x%x",
+ x,
+ y,
+ diff,
+ combined);
+
+ a.orr(TMP1, reg, imm(diff));
+ cmp_arg(TMP1, val);
+ a.cond_eq().b(resolve_beam_label(args[2], disp1MB));
+
+ /* An invalid label means fallthrough to the next instruction. */
+ if (fail.isValid()) {
+ a.b(resolve_label(fail, disp128MB));
+ }
+ return true;
+}
diff --git a/erts/emulator/beam/jit/arm/instr_trace.cpp b/erts/emulator/beam/jit/arm/instr_trace.cpp
new file mode 100644
index 0000000000..ff32ebed31
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/instr_trace.cpp
@@ -0,0 +1,217 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "beam_common.h"
+#include "erl_bif_table.h"
+#include "beam_bp.h"
+};
+
+/* This function is jumped to from the export entry of a function.
+ *
+ * ARG1 = export entry */
+void BeamGlobalAssembler::emit_generic_bp_global() {
+ /* Enter an Erlang frame to make the stack consistent with local
+ * breakpoints. */
+ emit_enter_erlang_frame();
+
+ lea(ARG2, arm::Mem(ARG1, offsetof(Export, info)));
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ /* ARG2 is already set above */
+ load_x_reg_array(ARG3);
+ runtime_call<3>(erts_generic_breakpoint);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ /* This is technically a tail call so we must leave the current frame
+ * before jumping. Note that we might not leave the frame we entered
+ * earlier in this function, but one added by erts_generic_breakpoint. */
+ emit_leave_erlang_frame();
+ a.br(ARG1);
+}
+
+/* This function is called from the module header, which is in turn called from
+ * the prologue of the traced function. As such, the real return address is at
+ * SP+8 rather than LR (x30).
+ *
+ * See beam_asm.h for more details */
+void BeamGlobalAssembler::emit_generic_bp_local() {
+ a.ldr(ARG2, arm::Mem(a64::sp, 8));
+
+ /* Stash return address for later use in `debug_bp` */
+ a.str(ARG2, TMP_MEM1q);
+
+ /* Our actual return address is valid (and word-aligned), but it points
+ * just after the trampoline word so we'll need to skip that to find our
+ * ErtsCodeInfo. */
+ a.sub(ARG2, ARG2, imm(BEAM_ASM_BP_RETURN_OFFSET + sizeof(ErtsCodeInfo)));
+
+ emit_enter_runtime_frame();
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ /* ARG2 is already set above */
+ load_x_reg_array(ARG3);
+ runtime_call<3>(erts_generic_breakpoint);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.cmp(ARG1, imm(BeamOpCodeAddr(op_i_debug_breakpoint)));
+ a.cond_eq().b(labels[debug_bp]);
+
+ emit_leave_runtime_frame();
+ a.ret(a64::x30);
+}
+
+/* This function is called from the module header which is called from the
+ * prologue of the function to trace. See beam_asm.h for more details
+ *
+ * The only place that we can come to here is from generic_bp_local */
+void BeamGlobalAssembler::emit_debug_bp() {
+ Label error = a.newLabel();
+
+ /* Read and adjust the return address we saved in generic_bp_local. */
+ a.ldr(ARG2, TMP_MEM1q);
+ a.sub(ARG2, ARG2, imm(BEAM_ASM_BP_RETURN_OFFSET + sizeof(ErtsCodeMFA)));
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG3);
+ a.mov(ARG4, imm(am_breakpoint));
+ runtime_call<4>(call_error_handler);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>();
+
+ /* We skip two runtime frames (ours and the one entered in the module
+ * header) so that we can call the error handler's code instead of
+ * `call_nif_early`, if necessary. */
+ emit_leave_runtime_frame();
+ emit_leave_runtime_frame();
+
+ a.cbz(ARG1, error);
+
+ emit_leave_erlang_frame();
+ branch(emit_setup_export_call(ARG1));
+
+ a.bind(error);
+ {
+ a.ldr(ARG2, TMP_MEM1q);
+ mov_imm(ARG4, 0);
+
+ a.b(labels[raise_exception_shared]);
+ }
+}
+
+static void return_trace(Process *c_p,
+ ErtsCodeMFA *mfa,
+ Eterm val,
+ ErtsTracer *tracer) {
+ ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
+ erts_trace_return(c_p, mfa, val, tracer);
+ ERTS_REQ_PROC_MAIN_LOCK(c_p);
+}
+
+void BeamModuleAssembler::emit_return_trace() {
+ a.ldr(ARG2, getYRef(0));
+ a.mov(ARG3, XREG0);
+ lea(ARG4, getYRef(1));
+
+ ERTS_CT_ASSERT(ERTS_HIGHEST_CALLEE_SAVE_XREG >= 1);
+ emit_enter_runtime<Update::eStack | Update::eHeap>(1);
+
+ a.mov(ARG1, c_p);
+ runtime_call<4>(return_trace);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap>(1);
+
+ emit_deallocate(ArgVal(ArgVal::Word, 2));
+ emit_return();
+}
+
+void BeamModuleAssembler::emit_i_return_time_trace() {
+ /* Pass prev_info if present (is a CP), otherwise null. */
+ a.ldr(ARG2, getYRef(0));
+ mov_imm(ARG3, 0);
+
+ a.tst(ARG2, imm(_CPMASK));
+ a.sub(ARG2, ARG2, imm(sizeof(ErtsCodeInfo)));
+ a.csel(ARG2, ARG2, ARG3, arm::Cond::kEQ);
+
+ ERTS_CT_ASSERT(ERTS_HIGHEST_CALLEE_SAVE_XREG >= 1);
+ emit_enter_runtime<Update::eStack | Update::eHeap>(1);
+
+ a.mov(ARG1, c_p);
+ runtime_call<2>(erts_trace_time_return);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap>(1);
+
+ emit_deallocate(ArgVal(ArgVal::Word, 1));
+ emit_return();
+}
+
+void BeamModuleAssembler::emit_i_return_to_trace() {
+ ERTS_CT_ASSERT(ERTS_HIGHEST_CALLEE_SAVE_XREG >= 1);
+ emit_enter_runtime<Update::eStack | Update::eHeap>(1);
+
+ a.mov(ARG1, c_p);
+ runtime_call<1>(beam_jit_return_to_trace);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap>(1);
+
+ emit_deallocate(ArgVal(ArgVal::Word, 0));
+ emit_return();
+}
+
+void BeamModuleAssembler::emit_i_hibernate() {
+ Label error = a.newLabel();
+
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(3);
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<2>(erts_hibernate);
+
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs |
+ Update::eReductions>(3);
+
+ a.cbz(ARG1, error);
+
+ a.ldr(TMP1.w(), arm::Mem(c_p, offsetof(Process, flags)));
+ a.and_(TMP1, TMP1, imm(~F_HIBERNATE_SCHED));
+ a.str(TMP1.w(), arm::Mem(c_p, offsetof(Process, flags)));
+ a.b(resolve_fragment(ga->get_do_schedule(), disp128MB));
+
+ a.bind(error);
+ emit_raise_exception(&BIF_TRAP_EXPORT(BIF_hibernate_3)->info.mfa);
+}
diff --git a/erts/emulator/beam/jit/arm/ops.tab b/erts/emulator/beam/jit/arm/ops.tab
new file mode 100644
index 0000000000..d6f0c283f6
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/ops.tab
@@ -0,0 +1,1308 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2019. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+
+#
+# Types that should never be used in specific operations.
+#
+
+FORBIDDEN_TYPES=hQ
+
+#
+# The instructions that follows are only known by the loader and the emulator.
+# They can be changed without recompiling old Beam files.
+#
+# Instructions starting with a "i_" prefix are instructions produced by
+# instruction transformations; thus, they never occur in BEAM files.
+#
+
+# The too_old_compiler/0 instruction is specially handled in beam_load.c
+# to produce a user-friendly message informing the user that the module
+# needs to be re-compiled with a modern compiler.
+
+too_old_compiler/0
+too_old_compiler | never() =>
+
+# In R9C and earlier, the loader used to insert special instructions inside
+# the module_info/0,1 functions. (In R10B and later, the compiler inserts
+# an explicit call to an undocumented BIF, so that no loader trickery is
+# necessary.) Since the instructions don't work correctly in R12B, simply
+# refuse to load the module.
+
+func_info M=a a==am_module_info A=u==0 | label L | move n x==0 => too_old_compiler
+func_info M=a a==am_module_info A=u==1 | label L | move n x==0 => too_old_compiler
+
+# The undocumented and unsupported guard BIF is_constant/1 was removed
+# in R13. The is_constant/2 operation is marked as obsolete in genop.tab,
+# so the loader will automatically generate a too_old_compiler message
+# it is used, but we need to handle the is_constant/1 BIF specially here.
+
+bif1 Fail u$func:erlang:is_constant/1 Src Dst => too_old_compiler
+
+#
+# All the other instructions.
+#
+
+%cold
+# An unaligned label. The address of an unaligned label must never be saved
+# on the stack or used in a context where it can be confused with an Erlang term.
+
+label L
+
+# An label aligned to a certain boundary. This is used in two cases:
+#
+# * When the label points to the start of a function, as the ErtsCodeInfo
+# struct must be word-aligned.
+# * When the address is stored on the stack or otherwise needs to be properly
+# tagged as a continuation pointer.
+aligned_label L t
+
+i_func_info I a a I
+int_code_end
+
+i_generic_breakpoint
+i_debug_breakpoint
+i_return_time_trace
+i_return_to_trace
+trace_jump W
+i_yield
+%hot
+
+return
+
+#
+# A tail call will not refer to the current function on error unless it's a
+# BIF, so we can omit the line instruction for non-BIFs.
+#
+
+move S X0=x==0 | line Loc | call_ext_last Ar Func=u$is_not_bif D => \
+ move S X0 | call_ext_last Ar Func D
+move S X0=x==0 | line Loc | call_ext_only Ar Func=u$is_not_bif => \
+ move S X0 | call_ext_only Ar Func
+
+move S X0=x==0 | line Loc | call_last Ar Func D => \
+ move S X0 | call_last Ar Func D
+move S X0=x==0 | line Loc | call_only Ar Func => \
+ move S X0 | call_only Ar Func
+
+# The line number in int_func_start/5 can be NIL.
+func_line n => empty_func_line
+
+empty_func_line
+func_line I
+
+line n =>
+line I
+
+allocate t t?
+allocate_heap t I t?
+
+deallocate t
+
+init y
+
+trim t t
+
+test_heap I t?
+
+# Translate instructions generated by a compiler before OTP 24.
+allocate_zero Ns Live => allocate_heap_zero Ns u Live
+allocate_heap_zero Ns Nh Live => allocate_heap_zero(Ns, Nh, Live)
+
+init_yregs I *
+
+# Selecting values.
+
+# The size of the dispatch code for a jump table is at least 40 bytes
+# (8 instructions + one 64-bit word for the pointer to the
+# table). Therefore we shouldn't use a jump table if there are too few
+# values.
+
+select_val S Fail=fn Size=u Rest=* | use_jump_tab(Size, Rest, 6) => \
+ jump_tab(S, Fail, Size, Rest)
+is_integer Fail=f S | select_val S=s Fail=fn Size=u Rest=* | use_jump_tab(Size, Rest, 6) => \
+ jump_tab(S, Fail, Size, Rest)
+
+is_integer TypeFail=f S | select_val S=s Fail=fn Size=u Rest=* | \
+ mixed_types(Size, Rest) => \
+ split_values(S, TypeFail, Fail, Size, Rest)
+
+select_val S Fail=fn Size=u Rest=* | mixed_types(Size, Rest) => \
+ split_values(S, Fail, Fail, Size, Rest)
+
+is_integer Fail=f S | select_val S=d Fail=fn Size=u Rest=* | \
+ fixed_size_values(Size, Rest) => select_val(S, Fail, Size, Rest)
+
+is_atom Fail=f S | select_val S=d Fail=fn Size=u Rest=* | \
+ fixed_size_values(Size, Rest) => select_val(S, Fail, Size, Rest)
+
+select_val S Fail=fn Size=u Rest=* | floats_or_bignums(Size, Rest) => \
+ select_literals(S, Fail, Size, Rest)
+
+select_val S Fail=fn Size=u Rest=* | fixed_size_values(Size, Rest) => \
+ select_val(S, Fail, Size, Rest)
+
+is_tuple Fail=f S | select_tuple_arity S=d Fail=f Size=u Rest=* => \
+ select_tuple_arity(S, Fail, Size, Rest)
+
+select_tuple_arity S=d Fail=f Size=u Rest=* => \
+ select_tuple_arity(S, Fail, Size, Rest)
+
+i_select_val_bins s fn I *
+
+i_select_val_lins s fn I *
+
+i_select_tuple_arity S f? I *
+
+i_jump_on_val s fn W I *
+
+is_number f? s
+
+jump f
+
+#
+# List matching instructions. The combination of test for a nonempty list followed
+# by get_{list/hd/tl} are common, so we will optimize that.
+#
+is_nonempty_list Fail nqia => jump Fail
+
+is_nonempty_list f? S
+
+get_list S d d
+get_hd S d
+get_tl S d
+
+# Old-style catch.
+catch y H
+catch_end y
+
+# Try/catch.
+try Y F => catch Y F
+
+try_case y
+try_end y
+
+try_case_end s
+
+# Destructive set tuple element
+
+set_tuple_element s S P
+
+#
+# Get tuple element. Since this instruction is frequently used, we will try
+# to only fetch the pointer to the tuple once for a sequence of BEAM instructions
+# that fetch multiple elements from the same tuple.
+#
+
+current_tuple/1
+current_tuple/2
+
+is_tuple Fail=f Src | test_arity Fail Src Arity => \
+ i_is_tuple_of_arity Fail Src Arity | current_tuple Src
+
+test_arity Fail Src Arity => i_test_arity Fail Src Arity | current_tuple Src
+
+is_tuple NotTupleFail Tuple | is_tagged_tuple WrongRecordFail Tuple Arity Atom => \
+ i_is_tagged_tuple_ff NotTupleFail WrongRecordFail Tuple Arity Atom | current_tuple Tuple
+
+is_tagged_tuple Fail Tuple Arity Atom => \
+ i_is_tagged_tuple Fail Tuple Arity Atom | current_tuple Tuple
+
+is_tuple Fail=f Src => i_is_tuple Fail Src | current_tuple Src
+
+i_is_tuple_of_arity f? s A
+i_test_arity f? s A
+
+i_is_tagged_tuple f? s A a
+i_is_tagged_tuple_ff f? f? s A a
+
+i_is_tuple f? s
+
+# Generate instruction sequence for fetching the tuple element and remember
+# that we have a current tuple pointer.
+
+get_tuple_element Tuple Pos Dst => \
+ load_tuple_ptr Tuple | i_get_tuple_element Tuple Pos Dst | current_tuple Tuple
+current_tuple Tuple | get_tuple_element Tuple Pos Dst => \
+ i_get_tuple_element Tuple Pos Dst | current_tuple Tuple
+
+# Drop the current_tuple instruction if the tuple is overwritten.
+i_get_tuple_element Tuple Pos Tuple | current_tuple Tuple => i_get_tuple_element Tuple Pos Tuple
+
+# This is a current_tuple instruction instruction not followed by get_tuple_element.
+# Invalidate the current tuple pointer.
+
+current_tuple Tuple =>
+
+load_tuple_ptr s
+
+# If both positions and destinations are in consecutive memory, fetch and store
+# two words at once.
+i_get_tuple_element Tuple Pos1 Dst1 | current_tuple Tuple | \
+ get_tuple_element Tuple Pos2 Dst2 | consecutive_words(Pos1, Pos2) => \
+ get_two_tuple_elements Tuple Pos1 Dst1 Dst2 | current_tuple Tuple Dst2
+i_get_tuple_element Tuple Pos1 Dst1 | current_tuple Tuple | \
+ get_tuple_element Tuple Pos2 Dst2 | consecutive_words(Pos1, Pos2) => \
+ get_two_tuple_elements Tuple Pos1 Dst1 Dst2 | current_tuple Tuple Dst2
+
+# Drop the current_tuple instruction if the tuple is overwritten.
+current_tuple Tuple Tuple =>
+current_tuple Tuple Dst => current_tuple Tuple
+
+# The first operand will only be used in the debug-compiled runtime
+# system to verify that the register holding the tuple pointer agrees
+# with the source tuple operand.
+i_get_tuple_element s P S
+get_two_tuple_elements s P S S
+
+#
+# Expection rasing instructions. Infrequently executed.
+#
+
+%cold
+case_end s
+
+badmatch s
+
+if_end
+
+raise s s
+
+# Workaround the limitation that generators must always return at least one instruction.
+delete_me/0
+delete_me =>
+
+system_limit/1
+system_limit p => system_limit_body
+system_limit Fail=f => jump Fail
+
+system_limit_body
+
+%hot
+
+#
+# Optimize moves of consecutive memory addresses.
+#
+move Src=c Dst => i_move Src Dst
+move Src SrcDst | move SrcDst Dst => i_move Src SrcDst | move SrcDst Dst
+
+# Optimize two moves from X registers to Y registers when destination Y registers are consecutive.
+move S1=x D1=y | move S2=x D2=y | consecutive_words(D1, D2) => store_two_xregs S1 D1 S2 D2
+move S1=x D1=y | move S2=x D2=y | consecutive_words(D2, D1) => store_two_xregs S2 D2 S1 D1
+
+# Optimize two moves from Y registers to X registers when source Y registers are consecutive.
+move S1=y D1=x | move S2=y D2=x | consecutive_words(S1, S2) | distinct(D1, D2) => load_two_xregs S1 D1 S2 D2
+move S1=y D1=x | move S2=y D2=x | consecutive_words(S2, S1) | distinct(D1, D2) => load_two_xregs S2 D2 S1 D1
+
+# Optimize two moves of Y registers when destinations are consecutive.
+move S1=y D1=y | move S2=y D2=y | consecutive_words(D1, D2) => move_two_yregs S1 D1 S2 D2
+move S1=y D1=y | move S2=y D2=y | consecutive_words(D2, D1) => move_two_yregs S2 D2 S1 D1
+
+move Src Dst => i_move Src Dst
+
+#
+# Move instructions.
+#
+
+swap R1 R2 | swap R2 R3 => swap2 R1 R2 R3
+swap R1 R2 | swap R1 R3 => swap2 R2 R1 R3
+swap R1 R2 | swap R3 R2 => swap2 R1 R2 R3
+swap R1 R2 | swap R3 R1 => swap2 R2 R1 R3
+
+swap2 R1 R2 R3 | swap R3 R4 => swap3 R1 R2 R3 R4
+swap2 R1 R2 R3 | swap R4 R3 => swap3 R1 R2 R3 R4
+
+swap3 R1 R2 R3 R4 | swap R4 R5 => swap4 R1 R2 R3 R4 R5
+swap3 R1 R2 R3 R4 | swap R5 R4 => swap4 R1 R2 R3 R4 R5
+
+swap d d
+swap2 d d d
+swap3 d d d d
+swap4 d d d d d
+
+i_move s d
+store_two_xregs x y x y
+load_two_xregs y x y x
+move_two_yregs y y y y
+
+#
+# Receive operations. We conservatively align all labels before any
+# of the receive instructions.
+#
+# As the labels may be stored in the process structure, we must align them to
+# the nearest 4-byte boundary to ensure they're properly tagged as continuation
+# pointers.
+#
+
+label L | loop_rec Fail Reg => \
+ aligned_label L u=4 | loop_rec Fail Reg
+label L | wait_timeout Fail Src => \
+ aligned_label L u=4 | wait_timeout Fail Src
+label L | wait Fail => \
+ aligned_label L u=4 | wait Fail
+label L | timeout => \
+ aligned_label L u=4 | timeout
+
+loop_rec Fail x==0 | smp_mark_target_label(Fail) => i_loop_rec Fail
+
+aligned_label L A | wait_timeout Fail Src | smp_already_locked(L) => \
+ aligned_label L A | wait_timeout_locked Src Fail
+wait_timeout Fail Src => wait_timeout_unlocked Src Fail
+
+aligned_label L A | wait Fail | smp_already_locked(L) => \
+ aligned_label L A | wait_locked Fail
+wait Fail => wait_unlocked Fail
+
+aligned_label L A | timeout | smp_already_locked(L) => \
+ aligned_label L A | timeout_locked
+
+remove_message
+timeout
+timeout_locked
+i_loop_rec f
+loop_rec_end f
+wait_locked f
+wait_unlocked f
+
+# Note that a timeout value must fit in 32 bits.
+wait_timeout_unlocked s f
+wait_timeout_locked s f
+
+send
+
+#
+# Optimized comparisons with one immediate/literal operand.
+#
+
+is_eq_exact Lbl S S =>
+is_eq_exact Lbl C=c R=xy => is_eq_exact Lbl R C
+
+is_eq_exact Lbl R=xy n => is_nil Lbl R
+
+is_ne_exact Lbl S S => jump Lbl
+is_ne_exact Lbl C=c R=xy => is_ne_exact Lbl R C
+
+is_eq_exact f? s s
+
+is_ne_exact f? s s
+
+is_lt f? s s
+is_ge f? s s
+
+is_eq Fail=f Const=c Reg=xy => is_eq Fail Reg Const
+is_eq f? s s
+
+is_ne Fail=f Const=c Reg=xy => is_ne Fail Reg Const
+is_ne f? s s
+
+#
+# Putting tuples.
+#
+# Code compiled with OTP 22 and later uses put_tuple2 to
+# to construct a tuple.
+#
+
+put_tuple2 S A *
+
+#
+# Putting lists.
+#
+
+put_list Hd1=y Tl Dst | put_list Hd2=y Dst Dst | consecutive_words(Hd1, Hd2) => \
+ put_list2 Hd1 Hd2 Tl Dst
+
+put_list s s d
+put_list2 s s s d
+
+#
+# Some more only used by the emulator
+#
+
+%cold
+normal_exit
+continue_exit
+call_bif W
+call_bif_mfa a a I
+call_nif W W W
+call_error_handler
+return_trace
+%hot
+
+#
+# Type tests. Note that the operands for most type tests are `s` to
+# ensure that literal operands will work. The BEAM compiler starting
+# from OTP 22 will never emit type tests with literal operands even if
+# all optimizations are turned off, but loading unoptimized code from
+# older releases and code generated by alternative code generators.
+#
+
+is_integer f? s
+is_list f? s
+is_atom f? s
+is_float f? s
+
+is_nil Fail=f n =>
+is_nil Fail=f qia => jump Fail
+is_nil f? S
+
+# XXX Deprecated.
+is_bitstr Fail Term => is_bitstring Fail Term
+
+is_binary f? s
+is_bitstring f? s
+
+is_reference f? s
+is_pid f? s
+is_port f? s
+
+is_boolean f? s
+
+is_function2 f? s s
+
+#################################################################
+# External function and bif calls.
+#################################################################
+
+# Expands into call_light_bif/2
+call_light_bif/1
+
+#
+# The load_nif/2 BIF is an instruction.
+#
+
+call_ext u==2 u$func:erlang:load_nif/2 => \
+ i_load_nif
+call_ext_last u==2 u$func:erlang:load_nif/2 D => \
+ i_load_nif | deallocate D | return
+call_ext_only u==2 u$func:erlang:load_nif/2 => \
+ i_load_nif | return
+
+%cold
+i_load_nif
+%hot
+
+#
+# The call_on_load_function/1 BIF is an instruction.
+#
+
+call_ext u==1 u$func:erlang:call_on_load_function/1 => \
+ i_call_on_load_function
+call_ext_last u==1 u$func:erlang:call_on_load_function/1 D => \
+ i_call_on_load_function | deallocate D | return
+call_ext_only u==1 u$func:erlang:call_on_load_function/1 => \
+ i_call_on_load_function | return
+
+%cold
+i_call_on_load_function
+%hot
+
+#
+# apply/2 is an instruction, not a BIF.
+#
+
+call_ext u==2 u$func:erlang:apply/2 => i_apply_fun
+call_ext_last u==2 u$func:erlang:apply/2 D => i_apply_fun_last D
+call_ext_only u==2 u$func:erlang:apply/2 => i_apply_fun_only
+
+#
+# The apply/3 BIF is an instruction.
+#
+
+call_ext u==3 u$func:erlang:apply/3 => i_apply
+call_ext_last u==3 u$func:erlang:apply/3 D => i_apply_last D
+call_ext_only u==3 u$func:erlang:apply/3 => i_apply_only
+
+#
+# The yield/0 BIF is an instruction
+#
+
+call_ext u==0 u$func:erlang:yield/0 => i_yield
+call_ext_last u==0 u$func:erlang:yield/0 D => i_yield | deallocate D | return
+call_ext_only u==0 u$func:erlang:yield/0 => i_yield | return
+
+#
+# The hibernate/3 BIF is an instruction.
+#
+call_ext u==3 u$func:erlang:hibernate/3 => i_hibernate
+call_ext_last u==3 u$func:erlang:hibernate/3 D => i_hibernate
+call_ext_only u==3 u$func:erlang:hibernate/3 => i_hibernate
+
+call_ext u==0 u$func:os:perf_counter/0 => \
+ i_perf_counter
+call_ext_last u==0 u$func:os:perf_counter/0 D => \
+ i_perf_counter | deallocate D | return
+call_ext_only u==0 u$func:os:perf_counter/0 => \
+ i_perf_counter | return
+
+#
+# BIFs like process_info/1,2 require up-to-date information about the current
+# emulator state, which the ordinary call_light_bif instruction doesn't save.
+#
+
+call_ext u Bif=u$is_bif | is_heavy_bif(Bif) => \
+ i_call_ext Bif
+call_ext_last u Bif=u$is_bif D | is_heavy_bif(Bif) => \
+ i_call_ext Bif | deallocate D | return
+call_ext_only Ar=u Bif=u$is_bif | is_heavy_bif(Bif) => \
+ allocate u Ar | i_call_ext Bif | deallocate u | return
+
+#
+# The general case for BIFs that have no special requirements.
+#
+
+call_ext u Bif=u$is_bif => \
+ call_light_bif Bif
+call_ext_last u Bif=u$is_bif D => \
+ call_light_bif Bif | deallocate D | return
+call_ext_only Ar=u Bif=u$is_bif => \
+ allocate u Ar | call_light_bif Bif | deallocate u | return
+
+#
+# Any remaining calls are calls to Erlang functions, not BIFs.
+# We rename the instructions to internal names. This is necessary,
+# to avoid an end-less loop, because we want to call a few BIFs
+# with call instructions.
+#
+
+call_ext Ar Func => i_call_ext Func
+call_ext_last Ar Func D => i_call_ext_last Func D
+call_ext_only Ar Func => i_call_ext_only Func
+
+i_validate t
+
+i_apply
+i_apply_last t
+i_apply_only
+
+i_apply_fun
+i_apply_fun_last t
+i_apply_fun_only
+
+call_light_bif Bif => call_light_bif Bif Bif
+call_light_bif b e
+
+%cold
+
+i_hibernate
+i_perf_counter
+
+%hot
+
+#
+# Calls to non-building and guard BIFs.
+#
+
+bif0 u$bif:erlang:self/0 Dst=d => self Dst
+bif0 u$bif:erlang:node/0 Dst=d => node Dst
+
+bif1 Fail=f Bif=u$bif:erlang:hd/1 Src=n Dst => \
+ jump Fail
+bif1 Fail=f Bif=u$bif:erlang:hd/1 Src Dst => \
+ is_nonempty_list Fail Src | get_hd Src Dst
+bif1 Fail=p Bif=u$bif:erlang:hd/1 Src Dst => \
+ bif_hd Src Dst
+
+bif_hd s d
+
+bif1 Fail=f Bif=u$bif:erlang:tl/1 Src=n Dst => \
+ jump Fail
+bif1 Fail=f Bif=u$bif:erlang:tl/1 Src Dst => \
+ is_nonempty_list Fail Src | get_tl Src Dst
+bif1 Fail=p Bif=u$bif:erlang:tl/1 Src Dst => \
+ bif_tl Src Dst
+
+bif_tl s d
+
+bif1 Fail Bif=u$bif:erlang:get/1 Src=s Dst=d => get(Src, Dst)
+
+bif2 Fail u$bif:erlang:element/2 S1 S2 Dst => bif_element Fail S1 S2 Dst
+bif_element j s s d
+
+bif2 Fail Bif=u$bif:erlang:and/2 Src1 Src2 Dst=d => bif_and Fail Src1 Src2 Dst
+bif_and j s s d
+
+bif2 Fail Bif=u$bif:erlang:or/2 Src1 Src2 Dst=d => bif_or Fail Src1 Src2 Dst
+bif_or j s s d
+
+bif1 Fail Bif=u$bif:erlang:not/1 Src=d Dst=d => bif_not Fail Src Dst
+bif_not j S d
+
+gc_bif1 Fail Live Bif=u$bif:erlang:bit_size/1 Src Dst=d => \
+ bif_bit_size Fail Src Dst
+bif_bit_size j s d
+
+gc_bif1 Fail Live Bif=u$bif:erlang:byte_size/1 Src Dst=d => \
+ bif_byte_size Fail Src Dst
+bif_byte_size j s d
+
+bif1 Fail Bif=u$bif:erlang:tuple_size/1 Src=d Dst=d => bif_tuple_size Fail Src Dst
+bif_tuple_size j S d
+
+bif1 Fail Bif S1 Dst | never_fails(Bif) => nofail_bif1 S1 Bif Dst
+bif2 Fail Bif S1 S2 Dst | never_fails(Bif) => nofail_bif2 S1 S2 Bif Dst
+
+bif1 Fail Bif S1 Dst => i_bif1 S1 Fail Bif Dst
+bif2 Fail Bif S1 S2 Dst => i_bif2 S1 S2 Fail Bif Dst
+
+nofail_bif2 S1=d S2 Bif Dst | is_eq_exact_bif(Bif) => bif_is_eq_exact S1 S2 Dst
+nofail_bif2 S1=d S2 Bif Dst | is_ne_exact_bif(Bif) => bif_is_ne_exact S1 S2 Dst
+
+i_get_hash c I d
+i_get s d
+
+self d
+
+node d
+
+nofail_bif1 s b d
+nofail_bif2 s s b d
+
+i_bif1 s j? b d
+i_bif2 s s j? b d
+i_bif3 s s s j? b d
+
+bif_is_eq_exact S s d
+bif_is_ne_exact S s d
+
+#
+# Internal calls.
+#
+
+call Ar Func => i_call Func
+call_last Ar Func D => i_call_last Func D
+call_only Ar Func => i_call_only Func
+
+i_call f
+i_call_last f t
+i_call_only f
+
+i_call_ext e
+i_call_ext_last e t
+i_call_ext_only e
+
+# Fun calls.
+
+call_fun Arity | deallocate D | return => i_call_fun_last Arity D
+call_fun Arity => i_call_fun Arity
+
+i_call_fun t
+i_call_fun_last t t
+
+#
+# A fun with an empty environment can be converted to a literal.
+# As a further optimization, the we try to move the fun to its
+# final destination directly.
+
+make_fun2 OldIndex=u => make_fun2(OldIndex)
+make_fun3 OldIndex=u Dst=d NumFree=u Env=* => make_fun3(OldIndex, Dst, NumFree, Env)
+
+%cold
+
+i_make_fun3 F S t t *
+
+# Psuedo-instruction for signalling lambda load errors. Never actually runs.
+i_lambda_error t
+
+%hot
+
+is_function f? S
+is_function Fail=f c => jump Fail
+
+# The start and end of a function.
+int_func_start/5
+int_func_end/2
+
+func_prologue/2
+
+int_func_start Func_Label Func_Line M F A | \
+ label Entry_Label | line Entry_Line => \
+ int_func_start Func_Label Func_Line M F A | \
+ func_prologue Entry_Label Entry_Line
+
+int_func_start Func_Label Func_Line M F A | \
+ label Entry_Label => \
+ int_func_start Func_Label Func_Line M F A | \
+ func_prologue Entry_Label n
+
+int_func_start Func_Label Func_Line M F A | \
+ func_prologue Entry_Label Entry_Line | \
+ is_mfa_bif(M, F, A) => \
+ i_flush_stubs | \
+ aligned_label Func_Label u=8 | \
+ func_line Func_Line | \
+ i_func_info Func_Label M F A | \
+ aligned_label Entry_Label u=8 | \
+ line Entry_Line | \
+ i_breakpoint_trampoline | \
+ call_bif_mfa M F A
+
+int_func_start Func_Label Func_Line M F A | \
+ func_prologue Entry_Label Entry_Line => \
+ i_flush_stubs | \
+ aligned_label Func_Label u=8 | \
+ func_line Func_Line | \
+ i_func_info Func_Label M F A | \
+ aligned_label Entry_Label u=8 | \
+ line Entry_Line | \
+ i_breakpoint_trampoline | \
+ i_test_yield
+
+int_func_end Func_Label Entry_Label => \
+ func_end(Func_Label, Entry_Label)
+
+# Handles yielding on function ingress (rather than on each call).
+i_test_yield
+
+# Ensures that the prior function is large enough to allow NIF patching.
+i_nif_padding
+
+# Flushes veneers prior to entering a new function so we don't have to worry
+# about them being emitted in the prologue or NIF padding.
+i_flush_stubs
+
+# Handles tracing, early NIF calls, and so on.
+i_breakpoint_trampoline
+
+# ================================================================
+# New bit syntax matching (R11B).
+# ================================================================
+
+%warm
+
+# Matching integers
+bs_match_string Fail Ms Bits Val => i_bs_match_string Ms Fail Bits Val
+
+i_bs_match_string S f W M
+
+# Fetching integers from binaries.
+bs_get_integer2 Fail=f Ms=xy Live=u Sz=sq Unit=u Flags=u Dst=d => \
+ get_integer2(Fail, Ms, Live, Sz, Unit, Flags, Dst)
+
+i_bs_get_integer S f? t t s d
+i_bs_get_fixed_integer S f? t t t d
+
+# Fetching binaries from binaries.
+bs_get_binary2 Fail=f Ms=xy Live=u Sz=sq Unit=u Flags=u Dst=d => \
+ get_binary2(Fail, Ms, Live, Sz, Unit, Flags, Dst)
+
+i_bs_get_binary2 S f t? s t d
+i_bs_get_binary_all2 S f? t t d
+
+# Fetching float from binaries.
+bs_get_float2 Fail=f Ms=xy Live=u Sz=s Unit=u Flags=u Dst=d => \
+ get_float2(Fail, Ms, Live, Sz, Unit, Flags, Dst)
+
+bs_get_float2 Fail=f Ms=x Live=u Sz=q Unit=u Flags=u Dst=d => jump Fail
+
+i_bs_get_float2 S f? t s t d
+
+# Miscellanous
+
+bs_skip_bits2 Fail=f Ms=xy Sz=sq Unit=u Flags=u => \
+ skip_bits2(Fail, Ms, Sz, Unit, Flags)
+
+i_bs_skip_bits_imm2 f? S W
+i_bs_skip_bits2 S S f? t
+
+bs_test_tail2 f? S t
+
+bs_test_unit f? S t
+
+# Gets a bitstring from the tail of a context.
+bs_get_tail S d t
+
+# New bs_start_match variant for contexts with external position storage.
+#
+# bs_get/set_position is used to save positions into registers instead of
+# "slots" in the context itself, which lets us continue matching even after
+# we've passed it off to another function.
+
+bs_start_match4 a==am_no_fail Live=u Src=xy Ctx=d => \
+ bs_start_match3 p Src Live Ctx
+bs_start_match4 Fail=f Live=u Src=xy Ctx=d => \
+ bs_start_match3 Fail Src Live Ctx
+
+%if ARCH_64
+
+# This instruction nops on 64-bit platforms
+bs_start_match4 a==am_resume Live Same Same =>
+bs_start_match4 a==am_resume Live Ctx Dst => move Ctx Dst
+
+%else
+
+bs_start_match4 a==am_resume Live Ctx Dst => \
+ bs_start_match4 a=am_no_fail Live Ctx Dst
+
+%endif
+
+bs_start_match3 Fail=j ica Live Dst => jump Fail
+bs_start_match3 Fail Bin Live Dst => i_bs_start_match3 Bin Live Fail Dst
+
+i_bs_start_match3 S t j d
+
+# Match context position instructions. 64-bit assumes that all positions can
+# fit into an unsigned small.
+
+%if ARCH_64
+ bs_get_position Src Dst Live => i_bs_get_position Src Dst
+ i_bs_get_position S S
+ bs_set_position S S
+%else
+ bs_get_position S d t?
+ bs_set_position S S
+%endif
+
+#
+# Utf8/utf16/utf32 support. (R12B-5)
+#
+bs_get_utf8 Fail=f Ms=xy u u Dst=d => i_bs_get_utf8 Ms Fail Dst
+i_bs_get_utf8 S f? d
+
+bs_skip_utf8 Fail=f Ms=xy u u => i_bs_skip_utf8 Ms Fail
+i_bs_skip_utf8 S f?
+
+bs_get_utf16 Fail=f Ms=xy u Flags=u Dst=d => i_bs_get_utf16 Ms Fail Flags Dst
+bs_skip_utf16 Fail=f Ms=xy u Flags=u => i_bs_skip_utf16 Ms Fail Flags
+
+i_bs_get_utf16 S f? t d
+i_bs_skip_utf16 S f? t
+
+bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst=d => \
+ bs_get_integer2 Fail Ms Live i=32 u=1 Flags Dst | \
+ i_bs_validate_unicode_retract Fail Dst Ms
+bs_skip_utf32 Fail=f Ms=xy Live=u Flags=u => \
+ bs_get_integer2 Fail Ms Live i=32 u=1 Flags x | \
+ i_bs_validate_unicode_retract Fail x Ms
+
+i_bs_validate_unicode_retract j s S
+%hot
+
+#
+# Constructing binaries
+#
+%warm
+
+bs_init2 Fail Sz Words Regs Flags Dst | binary_too_big(Sz) => system_limit Fail
+
+bs_init2 Fail Sz=u Words=u==0 Regs Flags Dst => i_bs_init Sz Regs Dst
+
+bs_init2 Fail Sz=u Words Regs Flags Dst => \
+ i_bs_init_heap Sz Words Regs Dst
+
+bs_init2 Fail Sz Words=u==0 Regs Flags Dst => \
+ i_bs_init_fail Sz Fail Regs Dst
+bs_init2 Fail Sz Words Regs Flags Dst => \
+ i_bs_init_fail_heap Sz Words Fail Regs Dst
+
+i_bs_init_fail S j? t? S
+
+i_bs_init_fail_heap s I j? t? S
+
+i_bs_init W t? S
+
+i_bs_init_heap W I t? S
+
+
+bs_init_bits Fail Sz=o Words Regs Flags Dst => system_limit Fail
+
+bs_init_bits Fail Sz=u Words=u==0 Regs Flags Dst => \
+ i_bs_init_bits Sz Regs Dst
+bs_init_bits Fail Sz=u Words Regs Flags Dst => \
+ i_bs_init_bits_heap Sz Words Regs Dst
+
+bs_init_bits Fail Sz Words=u==0 Regs Flags Dst => \
+ i_bs_init_bits_fail Sz Fail Regs Dst
+bs_init_bits Fail Sz Words Regs Flags Dst => \
+ i_bs_init_bits_fail_heap Sz Words Fail Regs Dst
+
+i_bs_init_bits_fail S j? t? S
+
+i_bs_init_bits_fail_heap s I j? t? S
+
+i_bs_init_bits W t? S
+i_bs_init_bits_heap W I t? S
+
+bs_add Fail S1=i==0 S2 Unit=u==1 D => move S2 D
+
+bs_add j? s s t? x
+
+bs_append Fail Size Extra Live Unit Bin Flags Dst => \
+ i_bs_append Fail Extra Live Unit Size Bin Dst
+
+bs_private_append Fail Size Unit Bin Flags Dst => \
+ i_bs_private_append Fail Unit Size Bin Dst
+
+i_bs_private_append Fail Unit Size Bin Dst=y => \
+ i_bs_private_append Fail Unit Size Bin x | move x Dst
+
+bs_init_writable
+
+i_bs_append j? I t? t s s S
+i_bs_private_append j? t s S x
+
+#
+# Storing integers into binaries.
+#
+
+bs_put_integer Fail=j Sz=sq Unit=u Flags=u Src=s => \
+ put_integer(Fail, Sz, Unit, Flags, Src)
+
+i_new_bs_put_integer j? S t s
+i_new_bs_put_integer_imm s j? W t
+
+#
+# Utf8/utf16/utf32 support. (R12B-5)
+#
+
+bs_utf8_size j Src Dst=d => i_bs_utf8_size Src Dst
+bs_utf16_size j Src Dst=d => i_bs_utf16_size Src Dst
+
+bs_put_utf8 Fail u Src => i_bs_put_utf8 Fail Src
+
+bs_put_utf32 Fail=j Flags=u Src=s => \
+ i_bs_validate_unicode Fail Src | bs_put_integer Fail i=32 u=1 Flags Src
+
+i_bs_utf8_size s x
+i_bs_utf16_size s x
+
+i_bs_put_utf8 j? s
+bs_put_utf16 j? t s
+
+i_bs_validate_unicode j? s
+
+#
+# Storing floats into binaries.
+#
+
+# Will fail. No need to keep the instruction, because bs_add or
+# bs_init* would already have raised an exception.
+bs_put_float Fail Sz=q Unit Flags Val =>
+
+bs_put_float Fail=j Sz=s Unit=u Flags=u Src=s => \
+ put_float(Fail, Sz, Unit, Flags, Src)
+
+i_new_bs_put_float j? S t s
+i_new_bs_put_float_imm j? W t s
+
+#
+# Storing binaries into binaries.
+#
+
+bs_put_binary Fail=j Sz=s Unit=u Flags=u Src=s => \
+ put_binary(Fail, Sz, Unit, Flags, Src)
+
+i_new_bs_put_binary j? s t s
+i_new_bs_put_binary_imm j? W s
+i_new_bs_put_binary_all s j? t
+
+#
+# Warning: The i_bs_put_string and i_new_bs_put_string instructions
+# are specially treated in the loader.
+# Don't change the instruction format unless you change the loader too.
+#
+
+bs_put_string W M
+
+#
+# New floating point instructions (R8).
+#
+
+fadd p FR1 FR2 FR3 => i_fadd FR1 FR2 FR3
+fsub p FR1 FR2 FR3 => i_fsub FR1 FR2 FR3
+fmul p FR1 FR2 FR3 => i_fmul FR1 FR2 FR3
+fdiv p FR1 FR2 FR3 => i_fdiv FR1 FR2 FR3
+fnegate p FR1 FR2 => i_fnegate FR1 FR2
+
+fmove Arg=l Dst=d => fstore Arg Dst
+fmove Arg=dq Dst=l => fload Arg Dst
+
+fstore l d
+fload Sq l
+
+fconv s l
+
+i_fadd l l l
+i_fsub l l l
+i_fmul l l l
+i_fdiv l l l
+i_fnegate l l
+
+fclearerror =>
+fcheckerror p =>
+
+%hot
+
+#
+# New apply instructions in R10B.
+#
+
+apply t
+apply_last t t
+
+#
+# Map instructions. First introduced in R17.
+#
+
+# We KNOW that in OTP 18 and higher, a put_map_assoc instruction is
+# always preceded by an is_map test. That means that put_map_assoc can
+# never fail and does not need any failure label.
+
+put_map_assoc Fail Map Dst Live Size Rest=* => \
+ i_put_map_assoc Map Dst Live Size Rest
+i_put_map_assoc/4
+
+sorted_put_map_assoc/4
+i_put_map_assoc Map Dst Live Size Rest=* | map_key_sort(Size, Rest) => \
+ sorted_put_map_assoc Map Dst Live Size Rest
+
+sorted_put_map_exact/5
+put_map_exact F Map Dst Live Size Rest=* | map_key_sort(Size, Rest) => \
+ sorted_put_map_exact F Map Dst Live Size Rest
+
+sorted_put_map_assoc Map Dst Live Size Rest=* | is_empty_map(Map) => \
+ new_map Dst Live Size Rest
+sorted_put_map_assoc Src=s Dst Live Size Rest=* => \
+ update_map_assoc Src Dst Live Size Rest
+
+sorted_put_map_exact Fail Src Dst Live Size Rest=* => \
+ update_map_exact Src Fail Dst Live Size Rest
+
+new_map Dst Live Size Rest=* | is_small_map_literal_keys(Size, Rest) => \
+ new_small_map_lit(Dst, Live, Size, Rest)
+
+new_map d t I *
+i_new_small_map_lit d t q I *
+update_map_assoc s d t I *
+update_map_exact s j? d t I *
+
+is_map f? s
+
+## Transform has_map_fields #{ K1 := _, K2 := _ } to has_map_elements
+
+has_map_fields Fail Src Size Rest=* => \
+ has_map_fields(Fail, Src, Size, Rest)
+
+## Transform get_map_elements(s) #{ K1 := V1, K2 := V2 }
+
+get_map_elements Fail Src Size=u==2 Rest=* => \
+ get_map_element(Fail, Src, Size, Rest)
+get_map_elements Fail Src Size Rest=* | map_key_sort(Size, Rest) => \
+ get_map_elements(Fail, Src, Size, Rest)
+
+i_get_map_elements f? s I *
+
+i_get_map_element_hash Fail Src=c Key Hash Dst => \
+ move Src x | i_get_map_element_hash Fail x Key Hash Dst
+i_get_map_element_hash f? S c I S
+
+i_get_map_element Fail Src=c Key Dst => \
+ move Src x | i_get_map_element Fail x Key Dst
+i_get_map_element f? S S S
+
+#
+# Arithmetic instructions.
+#
+
+gc_bif2 Fail Live u$bif:erlang:splus/2 Src1 Src2 Dst => \
+ i_plus Fail Live Src1 Src2 Dst
+
+gc_bif1 Fail Live u$bif:erlang:sminus/1 Src Dst => \
+ i_unary_minus Fail Live Src Dst
+
+gc_bif2 Fail Live u$bif:erlang:sminus/2 Src1 Src2 Dst => \
+ i_minus Fail Live Src1 Src2 Dst
+
+gc_bif2 Fail Live u$bif:erlang:stimes/2 S1 S2 Dst => \
+ i_times Fail Live S1 S2 Dst
+
+gc_bif2 Fail Live u$bif:erlang:div/2 S1 S2 Dst => \
+ i_m_div Fail Live S1 S2 Dst
+
+# Fused 'rem'/'div' pair.
+gc_bif2 Fail Live u$bif:erlang:rem/2 LHS RHS Remainder | \
+ gc_bif2 A B u$bif:erlang:intdiv/2 LHS RHS Quotient | \
+ distinct(LHS, Remainder) | \
+ distinct(RHS, Remainder) => \
+ i_rem_div Fail Live LHS RHS Remainder Quotient
+
+# As above but with a `line` in between
+gc_bif2 Fail Live u$bif:erlang:rem/2 LHS RHS Remainder | \
+ line Loc | \
+ gc_bif2 A B u$bif:erlang:intdiv/2 LHS RHS Quotient | \
+ distinct(LHS, Remainder) | \
+ distinct(RHS, Remainder) => \
+ i_rem_div Fail Live LHS RHS Remainder Quotient
+
+# Fused 'div'/'rem' pair
+gc_bif2 Fail Live u$bif:erlang:intdiv/2 LHS RHS Quotient | \
+ gc_bif2 A B u$bif:erlang:rem/2 LHS RHS Remainder | \
+ distinct(LHS, Quotient) | \
+ distinct(RHS, Quotient) => \
+ i_div_rem Fail Live LHS RHS Quotient Remainder
+
+# As above but with a `line` in between
+gc_bif2 Fail Live u$bif:erlang:intdiv/2 LHS RHS Quotient | \
+ line Loc | \
+ gc_bif2 A B u$bif:erlang:rem/2 LHS RHS Remainder | \
+ distinct(LHS, Quotient) | \
+ distinct(RHS, Quotient) => \
+ i_div_rem Fail Live LHS RHS Quotient Remainder
+
+gc_bif2 Fail Live u$bif:erlang:intdiv/2 S1 S2 Dst => \
+ i_int_div Fail Live S1 S2 Dst
+gc_bif2 Fail Live u$bif:erlang:rem/2 S1 S2 Dst => \
+ i_rem Fail Live S1 S2 Dst
+
+gc_bif2 Fail Live u$bif:erlang:band/2 S1 S2 Dst => \
+ i_band Fail Live S1 S2 Dst
+
+gc_bif2 Fail Live u$bif:erlang:bor/2 S1 S2 Dst => \
+ i_bor Fail Live S1 S2 Dst
+
+gc_bif2 Fail Live u$bif:erlang:bxor/2 S1 S2 Dst => \
+ i_bxor Fail Live S1 S2 Dst
+
+gc_bif1 Fail Live u$bif:erlang:bnot/1 Src Dst => \
+ i_bnot Fail Live Src Dst
+
+gc_bif2 Fail Live u$bif:erlang:bsr/2 S1 S2 Dst => \
+ i_bsr Fail Live S1 S2 Dst
+
+gc_bif2 Fail Live u$bif:erlang:bsl/2 S1 S2 Dst => \
+ i_bsl Fail Live S1 S2 Dst
+
+i_plus j I s s d
+i_unary_minus j I s d
+i_minus j I s s d
+i_times j I s s d
+
+i_m_div j I s s d
+
+i_rem_div j I s s d d
+i_div_rem j I s s d d
+i_int_div j I s s d
+i_rem j I s s d
+
+i_band j I s s d
+i_bor j I s s d
+i_bxor j I s s d
+
+i_bnot j I s d
+
+i_bsr j I s s d
+i_bsl j I s s d
+
+#
+# Old guard BIFs that creates heap fragments are no longer allowed.
+#
+bif1 Fail u$bif:erlang:length/1 s d => too_old_compiler
+bif1 Fail u$bif:erlang:size/1 s d => too_old_compiler
+bif1 Fail u$bif:erlang:abs/1 s d => too_old_compiler
+bif1 Fail u$bif:erlang:float/1 s d => too_old_compiler
+bif1 Fail u$bif:erlang:round/1 s d => too_old_compiler
+bif1 Fail u$bif:erlang:trunc/1 s d => too_old_compiler
+
+#
+# Handle the length/1 guard BIF specially to make it trappable.
+#
+
+gc_bif1 Fail=j Live u$bif:erlang:length/1 Src Dst => \
+ i_length_setup Fail Live Src | i_length Fail Live Dst
+
+i_length_setup j? t s
+i_length j? t d
+
+#
+# Specialized guard BIFs.
+#
+
+gc_bif1 Fail Live Bif=u$bif:erlang:map_size/1 Src Dst=d => bif_map_size Fail Src Dst
+bif_map_size j s d
+
+#
+# Guard BIFs.
+#
+gc_bif1 Fail Live Bif Src Dst => i_bif1 Src Fail Bif Dst
+gc_bif2 Fail Live Bif S1 S2 Dst => i_bif2 S1 S2 Fail Bif Dst
+gc_bif3 Fail Live Bif S1 S2 S3 Dst => i_bif3 S1 S2 S3 Fail Bif Dst
+
+#
+# The following instruction is specially handled in beam_load.c
+# to produce a user-friendly message if an unsupported guard BIF is
+# encountered.
+#
+unsupported_guard_bif/3
+unsupported_guard_bif A B C | never() =>
+
+#
+# R13B03
+#
+on_load
+
+#
+# R14A.
+#
+# Superseded in OTP 24 by 'recv_marker_reserve' and friends.
+#
+
+recv_mark f => i_recv_mark
+i_recv_mark
+
+recv_set Fail | label Lbl | loop_rec Lf Reg => \
+ i_recv_set | label Lbl | loop_rec Lf Reg
+i_recv_set
+
+#
+# OTP 21.
+#
+
+build_stacktrace
+raw_raise
+
+#
+# Specialized move instructions. Since they don't require a second
+# instruction, we have intentionally placed them after any other
+# transformation rules that starts with a move instruction in order to
+# produce better code for the transformation engine.
+#
+
+move n D=y => init D
+
+#
+# OTP 24
+#
+
+recv_marker_reserve S
+recv_marker_bind S S
+recv_marker_clear S
+recv_marker_use S
+
+#
+# Mark all intentionally unused macros, predicates, and generators.
+#
+
+%unused pred.negation_is_small
+
+%unused gen_increment
+%unused gen.increment
+%unused gen.increment_from_minus
+%unused gen.plus_from_minus
+
+# Landing pad for fun calls/apply where we set up arguments and check errors
+i_lambda_trampoline W f W W
diff --git a/erts/emulator/beam/jit/arm/predicates.tab b/erts/emulator/beam/jit/arm/predicates.tab
new file mode 100644
index 0000000000..9cc3d49a47
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/predicates.tab
@@ -0,0 +1,107 @@
+// -*- c -*-
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 2020. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// %CopyrightEnd%
+//
+
+pred.is_mfa_bif(M, F, A) {
+ Export *e;
+
+ ASSERT(M.type == TAG_a && F.type == TAG_a && A.type == TAG_u);
+ e = erts_active_export_entry(M.val, F.val, A.val);
+
+ if (e != NULL) {
+ return e->bif_number != -1;
+ }
+
+ return 0;
+}
+
+pred.never_fails(Bif) {
+ static Eterm nofail_bifs[] =
+ {am_Neqeq,
+ am_Le,
+ am_Neq,
+ am_Eq,
+ am_Le,
+ am_Eqeq,
+ am_Gt,
+ am_Ge,
+ am_is_atom,
+ am_is_boolean,
+ am_is_binary,
+ am_is_bitstring,
+ am_is_float,
+ am_is_integer,
+ am_is_list,
+ am_is_map,
+ am_is_number,
+ am_is_pid,
+ am_is_port,
+ am_is_reference,
+ am_is_tuple,
+ };
+
+ Uint index = Bif.val;
+
+ if (Bif.type == TAG_u && index < S->beam.imports.count) {
+ BeamFile_ImportEntry *entry = &S->beam.imports.entries[index];
+ int i;
+
+ if (entry->module != am_erlang) {
+ return 0;
+ }
+
+ if (entry->function == am_is_function) {
+ /* Note that is_function/2 may fail. */
+ return entry->arity == 1;
+ }
+
+ for (i = 0; i < sizeof(nofail_bifs) / sizeof(nofail_bifs[0]); i++) {
+ if (entry->function == nofail_bifs[i]) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+pred.consecutive_words(A1, A2) {
+ return A1.type == A2.type && A1.val + 1 == A2.val;
+}
+pred.is_eq_exact_bif(Bif) {
+ Uint index = Bif.val;
+
+ if (Bif.type == TAG_u && index < S->beam.imports.count) {
+ BeamFile_ImportEntry *entry = &S->beam.imports.entries[index];
+
+ return entry->module == am_erlang && entry->function == am_Eq && entry->arity == 2;
+ }
+ return 0;
+}
+
+pred.is_ne_exact_bif(Bif) {
+ Uint index = Bif.val;
+
+ if (Bif.type == TAG_u && index < S->beam.imports.count) {
+ BeamFile_ImportEntry *entry = &S->beam.imports.entries[index];
+
+ return entry->module == am_erlang && entry->function == am_Neq && entry->arity == 2;
+ }
+ return 0;
+}
diff --git a/erts/emulator/beam/jit/arm/process_main.cpp b/erts/emulator/beam/jit/arm/process_main.cpp
new file mode 100644
index 0000000000..c9b56e26bf
--- /dev/null
+++ b/erts/emulator/beam/jit/arm/process_main.cpp
@@ -0,0 +1,314 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "bif.h"
+#include "beam_common.h"
+#include "code_ix.h"
+#include "export.h"
+}
+
+#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
+static Process *erts_debug_schedule(ErtsSchedulerData *esdp,
+ Process *c_p,
+ int calls) {
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ c_p = erts_schedule(esdp, c_p, calls);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ ERTS_REQ_PROC_MAIN_LOCK(c_p);
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ return c_p;
+}
+#endif
+
+/* void process_main(ErtsSchedulerData *esdp); */
+void BeamGlobalAssembler::emit_process_main() {
+ Label context_switch_local = a.newLabel(),
+ context_switch_simplified_local = a.newLabel(),
+ do_schedule_local = a.newLabel(), schedule_next = a.newLabel();
+
+ const arm::Mem start_time_i =
+ getSchedulerRegRef(offsetof(ErtsSchedulerRegisters, start_time_i));
+ const arm::Mem start_time =
+ getSchedulerRegRef(offsetof(ErtsSchedulerRegisters, start_time));
+
+ /* Be kind to debuggers and `perf` by setting up a proper stack frame. */
+ a.stp(a64::x29, a64::x30, arm::Mem(a64::sp, -16).pre());
+
+ /* Allocate the register structure on the stack to allow computing the
+ * runtime stack address from it, greatly reducing the cost of stack
+ * swapping. */
+ a.mov(TMP1, a64::sp);
+ sub(TMP1, TMP1, sizeof(ErtsSchedulerRegisters) + ERTS_CACHE_LINE_SIZE);
+ a.and_(TMP1, TMP1, imm(~ERTS_CACHE_LINE_MASK));
+ a.mov(a64::sp, TMP1);
+ a.mov(a64::x29, a64::sp);
+
+ a.str(TMP1, arm::Mem(ARG1, offsetof(ErtsSchedulerData, registers)));
+
+ a.mov(scheduler_registers, a64::sp);
+
+ load_erl_bits_state(ARG1);
+ runtime_call<1>(erts_bits_init_state);
+
+ /* Save the initial SP of the thread so that we can verify that it
+ * doesn't grow. */
+#ifdef JIT_HARD_DEBUG
+ a.mov(TMP1, a64::sp);
+ a.str(TMP1, getInitialSPRef());
+#endif
+
+ a.str(a64::xzr, start_time_i);
+ a.str(a64::xzr, start_time);
+
+ mov_imm(c_p, 0);
+ mov_imm(FCALLS, 0);
+ mov_imm(ARG3, 0); /* Set reds_used for erts_schedule call */
+
+ a.b(schedule_next);
+
+ a.bind(do_schedule_local);
+ {
+ /* Figure out reds_used. def_arg_reg[5] = REDS_IN */
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, def_arg_reg[5])));
+ a.sub(ARG3, TMP1, FCALLS);
+ a.b(schedule_next);
+ }
+
+ /*
+ * The *next* instruction pointer is provided in ARG3, and must be preceded
+ * by an ErtsCodeMFA.
+ */
+ a.bind(context_switch_local);
+ comment("Context switch, unknown arity/MFA");
+ {
+ Sint arity_offset = offsetof(ErtsCodeMFA, arity) - sizeof(ErtsCodeMFA);
+
+ a.ldur(TMP1, arm::Mem(ARG3, arity_offset));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, arity)));
+
+ a.sub(TMP1, ARG3, imm((Uint)sizeof(ErtsCodeMFA)));
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, current)));
+
+ /* !! Fall through !! */
+ }
+
+ a.bind(context_switch_simplified_local);
+ comment("Context switch, known arity and MFA");
+ {
+ Label not_exiting = a.newLabel();
+
+#ifdef DEBUG
+ Label check_i = a.newLabel();
+ /* Check that ARG3 is set to a valid CP. */
+ a.tst(ARG3, imm(_CPMASK));
+ a.cond_eq().b(check_i);
+ a.udf(1);
+ a.bind(check_i);
+#endif
+
+ a.str(ARG3, arm::Mem(c_p, offsetof(Process, i)));
+ a.ldr(TMP1.w(), arm::Mem(c_p, offsetof(Process, state.value)));
+
+ a.tst(TMP1, imm(ERTS_PSFLG_EXITING));
+ a.cond_eq().b(not_exiting);
+ {
+ comment("Process exiting");
+
+ a.adr(TMP1, labels[process_exit]);
+ a.str(TMP1, arm::Mem(c_p, offsetof(Process, i)));
+ a.str(ZERO, arm::Mem(c_p, offsetof(Process, arity)));
+ a.str(ZERO, arm::Mem(c_p, offsetof(Process, current)));
+ a.b(do_schedule_local);
+ }
+
+ a.bind(not_exiting);
+
+ /* Figure out reds_used. def_arg_reg[5] = REDS_IN */
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, def_arg_reg[5])));
+ a.sub(FCALLS, TMP1, FCALLS);
+
+ comment("Copy out X registers");
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<2>(copy_out_registers);
+
+ /* Restore reds_used from FCALLS */
+ a.mov(ARG3, FCALLS);
+
+ /* !! Fall through !! */
+ }
+
+ a.bind(schedule_next);
+ comment("schedule_next");
+
+ {
+ Label schedule = a.newLabel(), skip_long_schedule = a.newLabel();
+
+ /* ARG3 contains reds_used at this point */
+
+ a.ldr(TMP1, start_time);
+ a.cbz(TMP1, schedule);
+ {
+ a.mov(ARG1, c_p);
+ a.ldr(ARG2, start_time);
+
+ /* Spill reds_used in start_time slot */
+ a.str(ARG3, start_time);
+
+ a.ldr(ARG3, start_time_i);
+ runtime_call<3>(check_monitor_long_schedule);
+
+ /* Restore reds_used */
+ a.ldr(ARG3, start_time);
+ }
+
+ a.bind(schedule);
+ mov_imm(ARG1, 0);
+ a.mov(ARG2, c_p);
+#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
+ runtime_call<3>(erts_debug_schedule);
+#else
+ runtime_call<3>(erts_schedule);
+#endif
+ a.mov(c_p, ARG1);
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ lea(ARG1, erts_msacc_cache);
+ runtime_call<1>(erts_msacc_update_cache);
+#endif
+
+ a.str(ZERO, start_time);
+ mov_imm(ARG1, &erts_system_monitor_long_schedule);
+ a.ldr(TMP1, arm::Mem(ARG1));
+ a.cbz(TMP1, skip_long_schedule);
+
+ {
+ /* Enable long schedule test */
+ runtime_call<0>(erts_timestamp_millis);
+ a.str(ARG1, start_time);
+ a.ldr(TMP1, arm::Mem(c_p, offsetof(Process, i)));
+ a.str(TMP1, start_time_i);
+ }
+
+ a.bind(skip_long_schedule);
+ comment("skip_long_schedule");
+
+ /* Copy arguments */
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<2>(copy_in_registers);
+
+ /* Setup reduction counting */
+ a.ldr(FCALLS, arm::Mem(c_p, offsetof(Process, fcalls)));
+ a.str(FCALLS, arm::Mem(c_p, offsetof(Process, def_arg_reg[5])));
+
+#ifdef DEBUG
+ a.str(FCALLS, a64::Mem(c_p, offsetof(Process, debug_reds_in)));
+#endif
+
+ comment("check whether save calls is on");
+ a.mov(ARG1, c_p);
+ mov_imm(ARG2, ERTS_PSD_SAVED_CALLS_BUF);
+ runtime_call<2>(erts_psd_get);
+
+ /* Read the active code index, overriding it with
+ * ERTS_SAVE_CALLS_CODE_IX when save_calls is enabled (ARG1 != 0). */
+ mov_imm(TMP1, &the_active_code_index);
+ a.ldr(TMP1.w(), arm::Mem(TMP1));
+ a.mov(TMP2, imm(ERTS_SAVE_CALLS_CODE_IX));
+ a.cmp(ARG1, ZERO);
+ a.csel(active_code_ix, TMP1, TMP2, arm::Cond::kEQ);
+
+ /* Start executing the Erlang process. Note that reductions have
+ * already been set up above. */
+ emit_leave_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+
+ /* Check if we are just returning from a dirty nif/bif call and if so we
+ * need to do a bit of cleaning up before continuing.
+ *
+ * This relies on `op_call_nif_WWW` / `op_call_bif_W` being encoded as
+ * UDF(opcode) followed by UDF(0), which we will never emit. */
+ a.ldr(ARG1, arm::Mem(c_p, offsetof(Process, i)));
+ a.ldr(TMP1, arm::Mem(ARG1));
+
+ ERTS_CT_ASSERT((op_call_nif_WWW & 0xFFFF0000) == 0);
+ a.cmp(TMP1, imm(op_call_nif_WWW));
+ a.cond_eq().b(labels[dispatch_nif]);
+
+ ERTS_CT_ASSERT((op_call_bif_W & 0xFFFF0000) == 0);
+ a.cmp(TMP1, imm(op_call_bif_W));
+ a.cond_eq().b(labels[dispatch_bif]);
+
+ a.br(ARG1);
+ }
+
+ /* Processes may jump to the exported entry points below, executing on the
+ * Erlang stack when entering. These are separate from the `_local` labels
+ * above as we don't want to worry about which stack we're on when the
+ * cases overlap. */
+
+ /* `ga->get_context_switch()`
+ *
+ * The *next* instruction pointer is provided in ARG3, and must be preceded
+ * by an ErtsCodeMFA.
+ *
+ * The X registers are expected to be in CPU registers.
+ */
+ a.bind(labels[context_switch]);
+ {
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+
+ a.b(context_switch_local);
+ }
+
+ /* `ga->get_context_switch_simplified()`
+ *
+ * The next instruction pointer is provided in ARG3, which does not need to
+ * point past an ErtsCodeMFA as the process structure has already been
+ * updated.
+ *
+ * The X registers are expected to be in CPU registers.
+ */
+ a.bind(labels[context_switch_simplified]);
+ {
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+
+ a.b(context_switch_simplified_local);
+ }
+
+ /* `ga->get_do_schedule()`
+ *
+ * `c_p->i` must be set prior to jumping here.
+ *
+ * The X registers are expected to be in CPU registers.
+ */
+ a.bind(labels[do_schedule]);
+ {
+ emit_enter_runtime<Update::eStack | Update::eHeap | Update::eXRegs>();
+
+ a.b(do_schedule_local);
+ }
+}
diff --git a/erts/emulator/beam/jit/asm_load.c b/erts/emulator/beam/jit/asm_load.c
index cf064b2590..a50236ed7f 100644
--- a/erts/emulator/beam/jit/asm_load.c
+++ b/erts/emulator/beam/jit/asm_load.c
@@ -36,15 +36,54 @@
# include <sanitizer/lsan_interface.h>
#endif
+#define INVALID_LAMBDA_INDEX -1
+
static void init_label(Label *lp);
-void beam_load_prepare_emit(LoaderState *stp) {
+static int named_labels_compare(BeamFile_ExportEntry *a,
+ BeamFile_ExportEntry *b) {
+ if (a->label < b->label)
+ return -1;
+ else if (a->label == b->label)
+ return 0;
+ else
+ return 1;
+}
+
+int beam_load_prepare_emit(LoaderState *stp) {
BeamCodeHeader *hdr;
+ BeamFile_ExportTable *named_labels_ptr = NULL, named_labels;
int i;
+ if (erts_jit_asm_dump) {
+ /* Dig out all named labels from the BEAM-file and sort them on the
+ label id. */
+ named_labels.count = stp->beam.exports.count + stp->beam.locals.count;
+ named_labels.entries = erts_alloc(
+ ERTS_ALC_T_PREPARED_CODE,
+ named_labels.count * sizeof(named_labels.entries[0]));
+
+ for (unsigned i = 0; i < stp->beam.exports.count; i++)
+ memcpy(&named_labels.entries[i],
+ &stp->beam.exports.entries[i],
+ sizeof(stp->beam.exports.entries[i]));
+ for (unsigned i = 0; i < stp->beam.locals.count; i++)
+ memcpy(&named_labels.entries[i + stp->beam.exports.count],
+ &stp->beam.locals.entries[i],
+ sizeof(stp->beam.locals.entries[i]));
+
+ qsort(named_labels.entries,
+ named_labels.count,
+ sizeof(named_labels.entries[0]),
+ (int (*)(const void *, const void *))named_labels_compare);
+ named_labels_ptr = &named_labels;
+ }
stp->ba = beamasm_new_assembler(stp->module,
stp->beam.code.label_count,
- stp->beam.code.function_count);
+ stp->beam.code.function_count,
+ named_labels_ptr);
+ if (named_labels_ptr != NULL)
+ erts_free(ERTS_ALC_T_PREPARED_CODE, named_labels_ptr->entries);
/* Initialize code header */
stp->codev_size = stp->beam.code.function_count + 1;
@@ -73,6 +112,23 @@ void beam_load_prepare_emit(LoaderState *stp) {
init_label(&stp->labels[i]);
}
+ for (i = 0; i < stp->beam.lambdas.count; i++) {
+ BeamFile_LambdaEntry *lambda = &stp->beam.lambdas.entries[i];
+
+ if (stp->labels[lambda->label].lambda_index == INVALID_LAMBDA_INDEX) {
+ stp->labels[lambda->label].lambda_index = i;
+ } else {
+ beam_load_report_error(__LINE__,
+ stp,
+ "lambda already defined for label %i. To "
+ "fix this, please recompile this module "
+ "with an OTP " ERLANG_OTP_RELEASE
+ " compiler.",
+ lambda->label);
+ return 0;
+ }
+ }
+
stp->bif_imports =
erts_alloc(ERTS_ALC_T_PREPARED_CODE,
stp->beam.imports.count * sizeof(BifEntry **));
@@ -111,10 +167,13 @@ void beam_load_prepare_emit(LoaderState *stp) {
stp->beam.code.function_count *
sizeof(unsigned int));
}
+
+ return 1;
}
static void init_label(Label *lp) {
sys_memset(lp, 0, sizeof(*lp));
+ lp->lambda_index = INVALID_LAMBDA_INDEX;
}
void beam_load_prepared_free(Binary *magic) {
@@ -132,11 +191,6 @@ int beam_load_prepared_dtor(Binary *magic) {
beamfile_free(&stp->beam);
beamopallocator_dtor(&stp->op_allocator);
- if (stp->bin) {
- driver_free_binary(stp->bin);
- stp->bin = NULL;
- }
-
if (stp->load_hdr) {
BeamCodeHeader *hdr = stp->load_hdr;
@@ -252,7 +306,7 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
switch (*sign) {
case 'n': /* Nil */
ASSERT(tag != TAG_r);
- curr->type = TAG_i;
+ curr->type = 'I';
curr->val = NIL;
BeamLoadVerifyTag(stp, tag_to_letter[tag], *sign);
break;
@@ -262,19 +316,20 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
break;
case 'a': /* Tagged atom */
BeamLoadVerifyTag(stp, tag_to_letter[tag], *sign);
- curr->type = TAG_i;
+ curr->type = 'I';
break;
case 'c': /* Tagged constant */
switch (tag) {
case TAG_i:
curr->val = make_small((Uint)curr->val);
+ curr->type = 'I';
break;
case TAG_a:
- curr->type = TAG_i;
+ curr->type = 'I';
break;
case TAG_n:
curr->val = NIL;
- curr->type = TAG_i;
+ curr->type = 'I';
break;
case TAG_q:
break;
@@ -294,12 +349,13 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
break;
case TAG_i:
curr->val = (BeamInstr)make_small(curr->val);
+ curr->type = 'I';
break;
case TAG_a:
- curr->type = TAG_i;
+ curr->type = 'I';
break;
case TAG_n:
- curr->type = TAG_i;
+ curr->type = 'I';
curr->val = NIL;
break;
case TAG_q: {
@@ -400,7 +456,7 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
if (curr->val >= stp->beam.imports.count) {
BeamLoadError1(stp, "invalid import table index %d", curr->val);
}
- curr->type = TAG_r;
+ curr->type = 'E';
break;
case 'b': {
int i = tmp_op->a[arg].val;
@@ -426,10 +482,26 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
break;
case 'F': /* Fun entry */
BeamLoadVerifyTag(stp, tag, TAG_u);
+ curr->type = 'F';
+ break;
+ case 'H': /* Exception handler */
+ BeamLoadVerifyTag(stp, tag, TAG_f);
+ curr->type = 'H';
+ break;
+ case 'M':
+ curr->type = 'M';
+ break;
+ case 'i':
+ curr->type = 'I';
break;
default:
BeamLoadError1(stp, "bad argument tag: %d", *sign);
}
+
+ /* These types must have been translated to 'I' */
+ ASSERT(curr->type != TAG_i && curr->type != TAG_n &&
+ curr->type != TAG_a && curr->type != TAG_v);
+
sign++;
arg++;
}
@@ -437,7 +509,7 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
/*
* Verify and massage any list arguments according to the primitive tags.
*
- * TAG_i will denote a tagged immediate value (NIL, small integer,
+ * 'I' will denote a tagged immediate value (NIL, small integer,
* atom, or tuple arity). TAG_n, TAG_a, and TAG_v will no longer be used.
*/
for (; arg < tmp_op->arity; arg++) {
@@ -446,14 +518,15 @@ int beam_load_emit_op(LoaderState *stp, BeamOp *tmp_op) {
switch (tmp_op->a[arg].type) {
case TAG_i:
curr->val = make_small(tmp_op->a[arg].val);
+ curr->type = 'I';
break;
case TAG_n:
curr->val = NIL;
- curr->type = TAG_i;
+ curr->type = 'I';
break;
case TAG_a:
case TAG_v:
- curr->type = TAG_i;
+ curr->type = 'I';
break;
case TAG_u:
case TAG_f:
@@ -905,7 +978,7 @@ void beam_load_finalize_code(LoaderState *stp,
erts_refc_dectest(&fun_entry->refc, 1);
}
- fun_entry->address = beamasm_get_code(stp->ba, lambda->label);
+ fun_entry->address = beamasm_get_lambda(stp->ba, i);
beamasm_patch_lambda(stp->ba,
stp->native_module_rw,
diff --git a/erts/emulator/beam/jit/beam_asm.h b/erts/emulator/beam/jit/beam_asm.h
index 4a61c87fe0..98290657ff 100644
--- a/erts/emulator/beam/jit/beam_asm.h
+++ b/erts/emulator/beam/jit/beam_asm.h
@@ -27,6 +27,10 @@
# include "beam_file.h"
# include "beam_common.h"
+# if defined(__APPLE__)
+# include <libkern/OSCacheControl.h>
+# endif
+
/* Global configuration variables */
# ifdef HAVE_LINUX_PERF_SUPPORT
# define BEAMASM_PERF_DUMP (1 << 0)
@@ -36,7 +40,10 @@ extern int erts_jit_perf_support;
void beamasm_init(void);
void beamasm_init_perf(void);
-void *beamasm_new_assembler(Eterm mod, int num_labels, int num_functions);
+void *beamasm_new_assembler(Eterm mod,
+ int num_labels,
+ int num_functions,
+ BeamFile_ExportTable *named_labels);
void beamasm_codegen(void *ba,
const void **native_module_exec,
void **native_module_rw,
@@ -48,6 +55,7 @@ void beamasm_purge_module(const void *native_module_exec,
void beamasm_delete_assembler(void *ba);
int beamasm_emit(void *ba, unsigned specific_op, BeamOp *op);
ErtsCodePtr beamasm_get_code(void *ba, int label);
+ErtsCodePtr beamasm_get_lambda(void *ba, int index);
const byte *beamasm_get_rodata(void *ba, char *label);
void beamasm_embed_rodata(void *ba,
const char *labelName,
@@ -61,10 +69,6 @@ void beamasm_patch_literal(void *ba, char *rw_base, int index, Eterm lit);
void beamasm_patch_lambda(void *ba, char *rw_base, int index, BeamInstr fe);
void beamasm_patch_strings(void *ba, char *rw_base, const byte *strtab);
-void beamasm_emit_call_bif(const ErtsCodeInfo *info,
- Eterm (*bif)(BIF_ALIST),
- char *buff,
- unsigned buff_len);
void beamasm_emit_call_nif(const ErtsCodeInfo *info,
void *normal_fptr,
void *lib,
@@ -80,8 +84,16 @@ char *beamasm_get_base(void *instance);
/* Return current instruction offset, for line information. */
size_t beamasm_get_offset(void *ba);
-// Number of bytes emitted at first label in order to support trace and nif load
-# define BEAM_ASM_FUNC_PROLOGUE_SIZE 8
+void beamasm_flush_icache(const void *address, size_t size);
+
+/* Number of bytes emitted at first label in order to support trace and nif
+ * load. */
+# if defined(__aarch64__)
+# define BEAM_ASM_BP_RETURN_OFFSET 16
+# define BEAM_ASM_FUNC_PROLOGUE_SIZE 16
+# else
+# define BEAM_ASM_FUNC_PROLOGUE_SIZE 8
+# endif
/*
* The code below is used to deal with intercepting the execution of
@@ -91,7 +103,7 @@ size_t beamasm_get_offset(void *ba);
* the first instruction in a function. In asm mode it is not as simple as
* our code changes have to be to executing native code.
*
- * The solution is as follows:
+ * On x86, the solution is as follows:
*
* When emitting a function the first word (or function prologue) is:
* 0x0: jmp 6
@@ -120,6 +132,12 @@ size_t beamasm_get_offset(void *ba);
* is updated. So if CALL_NIF_EARLY is set, then it is updated to be
* genericBPTramp + 0x10. If BP is set, it is updated to genericBPTramp + 0x20
* and the combination makes it be genericBPTramp + 0x30.
+ *
+ * The solution for AArch64 is similar but we move the flag to a register
+ * before jumping to `genericBPTramp`, where we branch on said flag value. This
+ * is necessary because the maximum jump distance is limited to 128MB and we
+ * need veneers to jump further than that, which are very annoying to deal with
+ * here.
*/
enum erts_asm_bp_flag {
@@ -130,9 +148,61 @@ enum erts_asm_bp_flag {
ERTS_ASM_BP_FLAG_CALL_NIF_EARLY | ERTS_ASM_BP_FLAG_BP
};
-static inline void erts_asm_bp_set_flag(ErtsCodeInfo *ci,
+static inline enum erts_asm_bp_flag erts_asm_bp_get_flags(
+ const ErtsCodeInfo *ci_exec) {
+ enum erts_asm_bp_flag flag;
+
+# if defined(__aarch64__)
+ Uint32 *exec_code = (Uint32 *)erts_codeinfo_to_code(ci_exec);
+
+ /* MOVZ instruction, flag lives in bits 5..21 */
+ const Uint32 flag_immed_shift = 5;
+ const Uint32 flag_immed_mask = ((1 << 16) - 1) << flag_immed_shift;
+
+ Uint32 set_flag = exec_code[2]; /* MOVZ x0, flag */
+
+ ASSERT((set_flag & ~flag_immed_mask) == 0xd2800000);
+ flag = (enum erts_asm_bp_flag)((set_flag & flag_immed_mask) >>
+ flag_immed_shift);
+
+# else /* x86_64 */
+ byte *codebytes = (byte *)erts_codeinfo_to_code(ci_exec);
+ /* 0xEB = relative jmp, 0xE8 = relative call */
+ flag = (enum erts_asm_bp_flag)codebytes[2];
+# endif
+
+ return flag;
+}
+
+static inline void erts_asm_bp_set_flag(ErtsCodeInfo *ci_rw,
+ const ErtsCodeInfo *ci_exec,
enum erts_asm_bp_flag flag) {
- BeamInstr volatile *code_ptr = (BeamInstr *)erts_codeinfo_to_code(ci);
+# if defined(__aarch64__)
+ const Uint32 *exec_code = (Uint32 *)erts_codeinfo_to_code(ci_exec);
+ Uint32 volatile *rw_code = (Uint32 *)erts_codeinfo_to_code(ci_rw);
+
+ const Uint32 branch_target_shift = 0;
+ const Uint32 branch_target_mask = ((1 << 26) - 1) << branch_target_shift;
+ const Uint32 flag_immed_shift = 5;
+ const Uint32 flag_immed_mask = ((1 << 16) - 1) << flag_immed_shift;
+
+ Uint32 old_guard_branch = rw_code[1]; /* B next */
+ Uint32 old_set_flag = rw_code[2]; /* MOVZ x0, flag */
+
+ ASSERT((old_guard_branch & ~branch_target_mask) == 0x14000000);
+ ASSERT((old_set_flag & ~flag_immed_mask) == 0xd2800000);
+ (void)flag_immed_mask;
+
+ /* MOVZ instruction, flag lives in bits 5..21 */
+ rw_code[2] = old_set_flag | (flag << flag_immed_shift);
+
+ /* Reroute the initial branch instruction to the flag instruction. */
+ rw_code[1] = (old_guard_branch & ~branch_target_mask) |
+ (1 << branch_target_shift);
+
+ beamasm_flush_icache(&exec_code[1], sizeof(Uint32[2]));
+# else /* x86_64 */
+ BeamInstr volatile *code_ptr = (BeamInstr *)erts_codeinfo_to_code(ci_rw);
BeamInstr code = *code_ptr;
byte *codebytes = (byte *)&code;
Uint32 *code32 = (Uint32 *)(codebytes + 4);
@@ -142,16 +212,50 @@ static inline void erts_asm_bp_set_flag(ErtsCodeInfo *ci,
codebytes[2] |= flag;
*code32 += flag * 16;
code_ptr[0] = code;
-}
-static inline enum erts_asm_bp_flag erts_asm_bp_get_flags(ErtsCodeInfo *ci) {
- byte *codebytes = (byte *)erts_codeinfo_to_code(ci);
- return (enum erts_asm_bp_flag)codebytes[2];
+ (void)ci_exec;
+# endif
}
-static inline void erts_asm_bp_unset_flag(ErtsCodeInfo *ci,
+static inline void erts_asm_bp_unset_flag(ErtsCodeInfo *ci_rw,
+ const ErtsCodeInfo *ci_exec,
enum erts_asm_bp_flag flag) {
- BeamInstr volatile *code_ptr = (BeamInstr *)erts_codeinfo_to_code(ci);
+# if defined(__aarch64__)
+ const Uint32 *exec_code = (Uint32 *)erts_codeinfo_to_code(ci_exec);
+ Uint32 volatile *rw_code = (Uint32 *)erts_codeinfo_to_code(ci_rw);
+
+ const Uint32 flag_immed_shift = 5;
+ const Uint32 flag_immed_mask = ((1 << 16) - 1) << flag_immed_shift;
+ const Uint32 branch_target_shift = 0;
+ const Uint32 branch_target_mask = ((1 << 26) - 1) << branch_target_shift;
+
+ Uint32 old_guard_branch = rw_code[1]; /* B next */
+ Uint32 old_set_flag = rw_code[2]; /* MOVZ x0, flag */
+ Uint32 new_set_flag;
+
+ ASSERT((old_guard_branch & ~branch_target_mask) == 0x14000000);
+ ASSERT((old_set_flag & ~flag_immed_mask) == 0xd2800000);
+
+ new_set_flag = old_set_flag & ~(flag << flag_immed_shift);
+ rw_code[2] = new_set_flag;
+
+ ERTS_CT_ASSERT(ERTS_ASM_BP_FLAG_NONE == 0);
+ if ((new_set_flag & flag_immed_mask) == 0) {
+ Uint32 new_guard_branch, new_target;
+
+ /* We've removed the last flag, route the branch instruction back
+ * past the prologue. */
+ new_target = (BEAM_ASM_FUNC_PROLOGUE_SIZE / sizeof(Uint32) - 1);
+
+ new_guard_branch = (old_guard_branch & ~branch_target_mask) |
+ (new_target << branch_target_shift);
+ rw_code[1] = new_guard_branch;
+ }
+
+ beamasm_flush_icache(&exec_code[1], sizeof(Uint32[2]));
+
+# else /* x86_64 */
+ BeamInstr volatile *code_ptr = (BeamInstr *)erts_codeinfo_to_code(ci_rw);
BeamInstr code = *code_ptr;
byte *codebytes = (byte *)&code;
Uint32 *code32 = (Uint32 *)(codebytes + 4);
@@ -163,6 +267,9 @@ static inline void erts_asm_bp_unset_flag(ErtsCodeInfo *ci,
codebytes[1] = 6;
}
code_ptr[0] = code;
+
+ (void)ci_exec;
+# endif
}
#endif
diff --git a/erts/emulator/beam/jit/beam_jit_common.c b/erts/emulator/beam/jit/beam_jit_common.cpp
index a69a48beff..c372bcea2c 100644
--- a/erts/emulator/beam/jit/beam_jit_common.c
+++ b/erts/emulator/beam/jit/beam_jit_common.cpp
@@ -18,14 +18,14 @@
* %CopyrightEnd%
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include "beam_jit_common.hpp"
+#include "beam_asm.hpp"
+extern "C"
+{
#include "sys.h"
#include "erl_vm.h"
#include "global.h"
-#include "bif.h"
#include "code_ix.h"
#include "erl_proc_sig_queue.h"
#include "erl_binary.h"
@@ -35,8 +35,297 @@
#ifdef USE_VM_PROBES
# include "dtrace-wrapper.h"
#endif
+}
+
+static std::string getAtom(Eterm atom) {
+ Atom *ap = atom_tab(atom_val(atom));
+ return std::string((char *)ap->name, ap->len);
+}
+
+BeamAssembler::BeamAssembler() : code() {
+ /* Setup with default code info */
+ Error err = code.init(hostEnvironment());
+ ERTS_ASSERT(!err && "Failed to init codeHolder");
+
+ err = code.newSection(&rodata, ".rodata", SIZE_MAX, Section::kFlagConst, 8);
+ ERTS_ASSERT(!err && "Failed to create .rodata section");
+
+ err = code.attach(&a);
+
+ ERTS_ASSERT(!err && "Failed to attach codeHolder");
+#ifdef DEBUG
+ a.addValidationOptions(BaseEmitter::kValidationOptionAssembler);
+#endif
+ a.addEncodingOptions(BaseEmitter::kEncodingOptionOptimizeForSize);
+ code.setErrorHandler(this);
+}
+
+BeamAssembler::BeamAssembler(const std::string &log) : BeamAssembler() {
+ if (erts_jit_asm_dump) {
+ setLogger(log + ".asm");
+ }
+}
+
+BeamAssembler::~BeamAssembler() {
+ if (logger.file()) {
+ fclose(logger.file());
+ }
+}
+
+void *BeamAssembler::getBaseAddress() {
+ ASSERT(code.hasBaseAddress());
+ return (void *)code.baseAddress();
+}
+
+size_t BeamAssembler::getOffset() {
+ return a.offset();
+}
+
+void BeamAssembler::_codegen(JitAllocator *allocator,
+ const void **executable_ptr,
+ void **writable_ptr) {
+ Error err = code.flatten();
+ ERTS_ASSERT(!err && "Could not flatten code");
+ err = code.resolveUnresolvedLinks();
+ ERTS_ASSERT(!err && "Could not resolve all links");
+
+ /* Verify that all labels are bound */
+#ifdef DEBUG
+ for (auto e : code.labelEntries()) {
+ if (!e->isBound()) {
+ if (e->hasName()) {
+ erts_exit(ERTS_ABORT_EXIT,
+ "Label %d with name %s is not bound\n",
+ e->id(),
+ e->name());
+ } else {
+ erts_exit(ERTS_ABORT_EXIT, "Label %d is not bound\n", e->id());
+ }
+ }
+ }
+#endif
+
+ err = allocator->alloc(const_cast<void **>(executable_ptr),
+ writable_ptr,
+ code.codeSize() + 16);
+
+ if (err == ErrorCode::kErrorTooManyHandles) {
+ ERTS_ASSERT(!"Failed to allocate module code: "
+ "out of file descriptors");
+ } else if (err) {
+ ERTS_ASSERT("Failed to allocate module code");
+ }
+
+ code.relocateToBase((uint64_t)*executable_ptr);
+ code.copyFlattenedData(*writable_ptr,
+ code.codeSize(),
+ CodeHolder::kCopyPadSectionBuffer);
+
+ beamasm_flush_icache(*executable_ptr, code.codeSize());
+
+#ifdef DEBUG
+ if (FileLogger *l = dynamic_cast<FileLogger *>(code.logger()))
+ if (FILE *f = l->file())
+ fprintf(f, "; CODE_SIZE: %zd\n", code.codeSize());
+#endif
+}
+
+void *BeamAssembler::getCode(Label label) {
+ ASSERT(label.isValid());
+ return (char *)getBaseAddress() + code.labelOffsetFromBase(label);
+}
+
+byte *BeamAssembler::getCode(char *labelName) {
+ return (byte *)getCode(code.labelByName(labelName, strlen(labelName)));
+}
+
+void BeamAssembler::handleError(Error err,
+ const char *message,
+ BaseEmitter *origin) {
+ comment(message);
+ fflush(logger.file());
+ ASSERT(0 && "Failed to encode instruction");
+}
+
+void BeamAssembler::embed_rodata(const char *labelName,
+ const char *buff,
+ size_t size) {
+ Label label = a.newNamedLabel(labelName);
+
+ a.section(rodata);
+ a.bind(label);
+ a.embed(buff, size);
+ a.section(code.textSection());
+}
+
+void BeamAssembler::embed_bss(const char *labelName, size_t size) {
+ Label label = a.newNamedLabel(labelName);
+
+ /* Reuse rodata section for now */
+ a.section(rodata);
+ a.bind(label);
+ embed_zeros(size);
+ a.section(code.textSection());
+}
+
+void BeamAssembler::embed_zeros(size_t size) {
+ static constexpr size_t buf_size = 16384;
+ static const char zeros[buf_size] = {};
+
+ while (size >= buf_size) {
+ a.embed(zeros, buf_size);
+ size -= buf_size;
+ }
+
+ if (size > 0) {
+ a.embed(zeros, size);
+ }
+}
+
+void BeamAssembler::setLogger(std::string log) {
+ FILE *f = fopen(log.data(), "w+");
+
+ /* FIXME: Don't crash when loading multiple modules with the same name.
+ *
+ * setLogger(nullptr) disables logging. */
+ if (f) {
+ setvbuf(f, NULL, _IONBF, 0);
+ }
+
+ setLogger(f);
+}
+
+void BeamAssembler::setLogger(FILE *log) {
+ logger.setFile(log);
+ logger.setIndentation(FormatOptions::kIndentationCode, 4);
+ code.setLogger(&logger);
+}
+
+void BeamModuleAssembler::codegen(JitAllocator *allocator,
+ const void **executable_ptr,
+ void **writable_ptr,
+ const BeamCodeHeader *in_hdr,
+ const BeamCodeHeader **out_exec_hdr,
+ BeamCodeHeader **out_rw_hdr) {
+ const BeamCodeHeader *code_hdr_exec;
+ BeamCodeHeader *code_hdr_rw;
+
+ codegen(allocator, executable_ptr, writable_ptr);
+
+ {
+ auto offset = code.labelOffsetFromBase(codeHeader);
+
+ auto base_exec = (const char *)(*executable_ptr);
+ code_hdr_exec = (const BeamCodeHeader *)&base_exec[offset];
+
+ auto base_rw = (const char *)(*writable_ptr);
+ code_hdr_rw = (BeamCodeHeader *)&base_rw[offset];
+ }
-#include "beam_jit_common.h"
+ sys_memcpy(code_hdr_rw, in_hdr, sizeof(BeamCodeHeader));
+ code_hdr_rw->on_load = getOnLoad();
+
+ for (unsigned i = 0; i < functions.size(); i++) {
+ ErtsCodeInfo *ci = (ErtsCodeInfo *)getCode(functions[i]);
+ code_hdr_rw->functions[i] = ci;
+ }
+
+ char *module_end = (char *)code.baseAddress() + a.offset();
+ code_hdr_rw->functions[functions.size()] = (ErtsCodeInfo *)module_end;
+
+ *out_exec_hdr = code_hdr_exec;
+ *out_rw_hdr = code_hdr_rw;
+}
+
+void BeamModuleAssembler::codegen(JitAllocator *allocator,
+ const void **executable_ptr,
+ void **writable_ptr) {
+ _codegen(allocator, executable_ptr, writable_ptr);
+
+#if !(defined(WIN32) || defined(__APPLE__) || defined(__MACH__) || \
+ defined(__DARWIN__))
+ if (functions.size()) {
+ char *buff = (char *)erts_alloc(ERTS_ALC_T_TMP, 1024);
+ std::vector<AsmRange> ranges;
+ std::string name = getAtom(mod);
+ ranges.reserve(functions.size() + 2);
+
+ /* Push info about the header */
+ ranges.push_back({.start = (ErtsCodePtr)getBaseAddress(),
+ .stop = getCode(functions[0]),
+ .name = name + "::codeHeader"});
+
+ for (unsigned i = 0; i < functions.size(); i++) {
+ ErtsCodePtr start, stop;
+ const ErtsCodeInfo *ci;
+ int n;
+
+ start = getCode(functions[i]);
+ ci = (const ErtsCodeInfo *)start;
+
+ n = erts_snprintf(buff,
+ 1024,
+ "%T:%T/%d",
+ ci->mfa.module,
+ ci->mfa.function,
+ ci->mfa.arity);
+ stop = ((const char *)erts_codeinfo_to_code(ci)) +
+ BEAM_ASM_FUNC_PROLOGUE_SIZE;
+
+ /* We use a different symbol for CodeInfo and the Prologue
+ in order for the perf disassembly to be better. */
+ std::string name(buff, n);
+ ranges.push_back({.start = start,
+ .stop = stop,
+ .name = name + "-CodeInfoPrologue"});
+
+ /* The actual code */
+ start = stop;
+ if (i + 1 < functions.size()) {
+ stop = getCode(functions[i + 1]);
+ } else {
+ stop = getCode(code_end);
+ }
+
+ ranges.push_back({.start = start, .stop = stop, .name = name});
+ }
+
+ /* Push info about the footer */
+ ranges.push_back(
+ {.start = ranges.back().stop,
+ .stop = (ErtsCodePtr)(code.baseAddress() + code.codeSize()),
+ .name = name + "::codeFooter"});
+
+ update_gdb_jit_info(name, ranges);
+ beamasm_update_perf_info(name, ranges);
+ erts_free(ERTS_ALC_T_TMP, buff);
+ }
+#endif
+}
+
+void BeamModuleAssembler::codegen(char *buff, size_t len) {
+ code.flatten();
+ code.resolveUnresolvedLinks();
+ ERTS_ASSERT(code.codeSize() <= len);
+ code.relocateToBase((uint64_t)buff);
+ code.copyFlattenedData(buff,
+ code.codeSize(),
+ CodeHolder::kCopyPadSectionBuffer);
+}
+
+BeamCodeHeader *BeamModuleAssembler::getCodeHeader() {
+ return (BeamCodeHeader *)getCode(codeHeader);
+}
+
+const ErtsCodeInfo *BeamModuleAssembler::getOnLoad() {
+ if (on_load.isValid()) {
+ return erts_code_to_codeinfo((ErtsCodePtr)getCode(on_load));
+ } else {
+ return 0;
+ }
+}
+
+/* ** */
#if defined(DEBUG) && defined(JIT_HARD_DEBUG)
void beam_jit_validate_term(Eterm term) {
@@ -280,79 +569,6 @@ void beam_jit_bs_add_argument_error(Process *c_p, Eterm A, Eterm B) {
}
}
-static Eterm i_bs_start_match2_gc_test_preserve(Process *c_p,
- Eterm *reg,
- Uint need,
- Uint live,
- Eterm preserve) {
- Uint words_left = (Uint)(STACK_TOP(c_p) - HEAP_TOP(c_p));
-
- if (ERTS_UNLIKELY(words_left < need + S_RESERVED)) {
- reg[live] = preserve;
- PROCESS_MAIN_CHK_LOCKS(c_p);
- c_p->fcalls -= erts_garbage_collect_nobump(c_p,
- need,
- reg,
- live + 1,
- c_p->fcalls);
- ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
- PROCESS_MAIN_CHK_LOCKS(c_p);
- preserve = reg[live];
- }
-
- return preserve;
-}
-
-Eterm beam_jit_bs_start_match2(Eterm context,
- Uint live,
- Uint slots,
- Process *c_p,
- Eterm *reg) {
- Eterm header;
- if (!is_boxed(context)) {
- return THE_NON_VALUE;
- }
- header = *boxed_val(context);
-
- slots++;
-
- if (header_is_bin_matchstate(header)) {
- ErlBinMatchState *ms = (ErlBinMatchState *)boxed_val(context);
- Uint actual_slots = HEADER_NUM_SLOTS(header);
-
- /* We're not compatible with contexts created by bs_start_match3. */
- ASSERT(actual_slots >= 1);
-
- ms->save_offset[0] = ms->mb.offset;
- if (ERTS_UNLIKELY(actual_slots < slots)) {
- ErlBinMatchState *expanded;
- Uint wordsneeded = ERL_BIN_MATCHSTATE_SIZE(slots);
- context = i_bs_start_match2_gc_test_preserve(c_p,
- reg,
- wordsneeded,
- live,
- context);
- ms = (ErlBinMatchState *)boxed_val(context);
- expanded = (ErlBinMatchState *)HEAP_TOP(c_p);
- *expanded = *ms;
- *HEAP_TOP(c_p) = HEADER_BIN_MATCHSTATE(slots);
- HEAP_TOP(c_p) += wordsneeded;
- context = make_matchstate(expanded);
- }
- return context;
- } else if (is_binary_header(header)) {
- Uint wordsneeded = ERL_BIN_MATCHSTATE_SIZE(slots);
- context = i_bs_start_match2_gc_test_preserve(c_p,
- reg,
- wordsneeded,
- live,
- context);
- return erts_bs_start_match_2(c_p, context, slots);
- } else {
- return THE_NON_VALUE;
- }
-}
-
Eterm beam_jit_bs_init(Process *c_p,
Eterm *reg,
ERL_BITS_DECLARE_STATEP,
@@ -526,35 +742,6 @@ Eterm beam_jit_bs_get_integer(Process *c_p,
return erts_bs_get_integer_2(c_p, size, flags, mb);
}
-void beam_jit_bs_context_to_binary(Eterm context) {
- if (is_boxed(context) && header_is_bin_matchstate(*boxed_val(context))) {
- Uint orig, size, offs, hole_size;
- ErlBinMatchBuffer *mb;
- ErlBinMatchState *ms;
- ErlSubBin *sb;
- ms = (ErlBinMatchState *)boxed_val(context);
- mb = &ms->mb;
- offs = ms->save_offset[0];
- size = mb->size - offs;
- orig = mb->orig;
- sb = (ErlSubBin *)boxed_val(context);
- /* Since we're going to overwrite the match state with the result, an
- * ErlBinMatchState must be at least as large as an ErlSubBin. */
- ERTS_CT_ASSERT(sizeof(ErlSubBin) <= sizeof(ErlBinMatchState));
- hole_size = 1 + header_arity(sb->thing_word) - ERL_SUB_BIN_SIZE;
- sb->thing_word = HEADER_SUB_BIN;
- sb->size = BYTE_OFFSET(size);
- sb->bitsize = BIT_OFFSET(size);
- sb->offs = BYTE_OFFSET(offs);
- sb->bitoffs = BIT_OFFSET(offs);
- sb->is_writable = 0;
- sb->orig = orig;
- if (hole_size) {
- sb[1].thing_word = make_pos_bignum_header(hole_size - 1);
- }
- }
-}
-
ErtsMessage *beam_jit_decode_dist(Process *c_p, ErtsMessage *msgp) {
if (!erts_proc_sig_decode_dist(c_p, ERTS_PROC_LOCK_MAIN, msgp, 0)) {
/*
@@ -755,3 +942,104 @@ void beam_jit_timeout_locked(Process *c_p) {
erts_proc_unlock(c_p, ERTS_PROC_LOCKS_MSG_RECEIVE);
beam_jit_timeout(c_p);
}
+
+void beam_jit_return_to_trace(Process *c_p) {
+ if (IS_TRACED_FL(c_p, F_TRACE_RETURN_TO)) {
+ ErtsCodePtr return_to_address;
+ Uint *cpp;
+
+ cpp = (Uint *)c_p->stop;
+ ASSERT(is_CP(cpp[0]));
+
+ for (;;) {
+ erts_inspect_frame(cpp, &return_to_address);
+
+ if (BeamIsReturnTrace(return_to_address)) {
+ cpp += CP_SIZE + 2;
+ } else if (BeamIsReturnTimeTrace(return_to_address)) {
+ cpp += CP_SIZE + 1;
+ } else if (BeamIsReturnToTrace(return_to_address)) {
+ cpp += CP_SIZE;
+ } else {
+ break;
+ }
+ }
+
+ ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
+ erts_trace_return_to(c_p, return_to_address);
+ ERTS_REQ_PROC_MAIN_LOCK(c_p);
+ }
+}
+
+Eterm beam_jit_build_argument_list(Process *c_p, const Eterm *regs, int arity) {
+ Eterm *hp;
+ Eterm res;
+
+ hp = HAlloc(c_p, arity * 2);
+ res = NIL;
+
+ for (int i = arity - 1; i >= 0; i--) {
+ res = CONS(hp, regs[i], res);
+ hp += 2;
+ }
+
+ return res;
+}
+
+Export *beam_jit_handle_unloaded_fun(Process *c_p,
+ Eterm *reg,
+ int arity,
+ Eterm fun_thing) {
+ ErtsCodeIndex code_ix = erts_active_code_ix();
+ Eterm module, args;
+ ErlFunThing *funp;
+ ErlFunEntry *fe;
+ Module *modp;
+ Export *ep;
+
+ funp = (ErlFunThing *)fun_val(fun_thing);
+ fe = funp->fe;
+ module = fe->module;
+
+ ERTS_THR_READ_MEMORY_BARRIER;
+
+ if (fe->pend_purge_address) {
+ /* The system is currently trying to purge the module containing this
+ * fun. Suspend the process and let it try again when the purge
+ * operation is done (may succeed or not). */
+ ep = erts_suspend_process_on_pending_purge_lambda(c_p, fe);
+ } else {
+ if ((modp = erts_get_module(module, code_ix)) != NULL &&
+ modp->curr.code_hdr != NULL) {
+ /* There is a module loaded, but obviously the fun is not defined
+ * in it. We must not call the error_handler (or we will get into
+ * an infinite loop). */
+ c_p->current = NULL;
+ c_p->freason = EXC_BADFUN;
+ c_p->fvalue = fun_thing;
+ return NULL;
+ }
+
+ /* No current code for this module. Call the error_handler module to
+ * attempt loading the module. */
+ ep = erts_find_function(erts_proc_get_error_handler(c_p),
+ am_undefined_lambda,
+ 3,
+ code_ix);
+ if (ERTS_UNLIKELY(ep == NULL)) {
+ /* No error handler, crash out. */
+ c_p->current = NULL;
+ c_p->freason = EXC_UNDEF;
+ return NULL;
+ }
+ }
+
+ args = beam_jit_build_argument_list(c_p, reg, arity);
+
+ reg[0] = module;
+ reg[1] = fun_thing;
+ reg[2] = args;
+ reg[3] = NIL;
+
+ return ep;
+}
diff --git a/erts/emulator/beam/jit/beam_jit_common.h b/erts/emulator/beam/jit/beam_jit_common.h
deleted file mode 100644
index b2da85d0b8..0000000000
--- a/erts/emulator/beam/jit/beam_jit_common.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * %CopyrightBegin%
- *
- * Copyright Ericsson AB 2021. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * %CopyrightEnd%
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "sys.h"
-#include "erl_vm.h"
-#include "global.h"
-
-#if defined(DEBUG) && defined(JIT_HARD_DEBUG)
-void beam_jit_validate_term(Eterm term);
-#endif
-
-typedef Eterm BeamJitNifF(struct enif_environment_t *, int argc, Eterm argv[]);
-enum beam_jit_nif_load_ret { RET_NIF_success, RET_NIF_error, RET_NIF_yield };
-
-Eterm beam_jit_call_bif(Process *c_p,
- Eterm *reg,
- ErtsCodePtr I,
- ErtsBifFunc vbf,
- Uint arity);
-Eterm beam_jit_call_nif(Process *c_p,
- ErtsCodePtr I,
- Eterm *reg,
- BeamJitNifF *fp,
- struct erl_module_nif *NifMod);
-enum beam_jit_nif_load_ret beam_jit_load_nif(Process *c_p,
- ErtsCodePtr I,
- Eterm *reg);
-
-Uint beam_jit_get_map_elements(Eterm map,
- Eterm *reg,
- Eterm *E,
- Uint n,
- Eterm *fs);
-
-void beam_jit_bs_field_size_argument_error(Process *c_p, Eterm size);
-void beam_jit_bs_add_argument_error(Process *c_p, Eterm A, Eterm B);
-Eterm beam_jit_bs_start_match2(Eterm context,
- Uint live,
- Uint slots,
- Process *c_p,
- Eterm *reg);
-Eterm beam_jit_bs_init(Process *c_p,
- Eterm *reg,
- ERL_BITS_DECLARE_STATEP,
- Eterm BsOp1,
- Eterm BsOp2,
- unsigned Live);
-Eterm beam_jit_bs_init_bits(Process *c_p,
- Eterm *reg,
- ERL_BITS_DECLARE_STATEP,
- Uint num_bits,
- Uint alloc,
- unsigned Live);
-Eterm beam_jit_bs_get_integer(Process *c_p,
- Eterm *reg,
- Eterm context,
- Uint flags,
- Uint size,
- Uint Live);
-
-ErtsMessage *beam_jit_decode_dist(Process *c_p, ErtsMessage *msgp);
-Sint beam_jit_remove_message(Process *c_p,
- Sint FCALLS,
- Eterm *HTOP,
- Eterm *E,
- Uint32 active_code_ix);
-void beam_jit_bs_context_to_binary(Eterm context);
-
-void beam_jit_take_receive_lock(Process *c_p);
-void beam_jit_wait_locked(Process *c_p, ErtsCodePtr cp);
-void beam_jit_wait_unlocked(Process *c_p, ErtsCodePtr cp);
-
-enum beam_jit_tmo_ret { RET_next = 0, RET_wait = 1, RET_badarg = 2 };
-
-enum beam_jit_tmo_ret beam_jit_wait_timeout(Process *c_p,
- Eterm timeout_value,
- ErtsCodePtr next);
-
-void beam_jit_timeout(Process *c_p);
-void beam_jit_timeout_locked(Process *c_p);
diff --git a/erts/emulator/beam/jit/beam_jit_common.hpp b/erts/emulator/beam/jit/beam_jit_common.hpp
index f8f894c676..ca73395006 100644
--- a/erts/emulator/beam/jit/beam_jit_common.hpp
+++ b/erts/emulator/beam/jit/beam_jit_common.hpp
@@ -18,6 +18,9 @@
* %CopyrightEnd%
*/
+#ifndef __BEAM_JIT_COMMON_HPP__
+#define __BEAM_JIT_COMMON_HPP__
+
#include <string>
#include <vector>
#include <unordered_map>
@@ -30,108 +33,285 @@ extern "C"
#endif
#include "sys.h"
+#include "bif.h"
#include "erl_vm.h"
#include "global.h"
-
-#include "beam_jit_common.h"
+#include "beam_file.h"
}
-class ArgVal {
- BeamOpArg gen_op;
+struct ArgVal : public BeamOpArg {
+ enum TYPE : int {
+ Word = TAG_u,
+ XReg = TAG_x,
+ YReg = TAG_y,
+ FReg = TAG_l,
+ Label = TAG_f,
+ Literal = TAG_q,
-public:
- enum TYPE {
- u = TAG_u,
- i = TAG_i,
- x = TAG_x,
- y = TAG_y,
- f = TAG_f,
- q = TAG_q,
- e = TAG_r,
- l = TAG_l /* float register */
+ BytePtr = 'M',
+ Catch = 'H',
+ Export = 'E',
+ FunEntry = 'F',
+ Immediate = 'I'
};
- ArgVal(const BeamOpArg &arg) {
- gen_op = arg;
- }
-
- ArgVal(enum TYPE t, BeamInstr val) {
- gen_op.type = t;
- gen_op.val = val;
- }
-
- ArgVal(unsigned t, BeamInstr val) {
+ ArgVal(int t, UWord value) {
#ifdef DEBUG
switch (t) {
- case TAG_u:
+ case TAG_f:
break;
- case TAG_i:
+ case TAG_l:
+ break;
+ case TAG_q:
+ break;
+ case TAG_u:
break;
case TAG_x:
break;
case TAG_y:
break;
- case TAG_f:
+ case 'I':
break;
- case TAG_q:
+ case 'E':
break;
- case TAG_r:
+ case 'F':
break;
- case TAG_l:
+ case 'M':
+ break;
+ case 'H':
break;
default:
ASSERT(0);
}
#endif
-
- gen_op.type = t;
- gen_op.val = val;
+ type = (enum TYPE)t;
+ val = value;
}
constexpr enum TYPE getType() const {
- return (enum TYPE)gen_op.type;
+ return (enum TYPE)type;
}
constexpr uint64_t getValue() const {
- return gen_op.val;
+ return val;
}
- constexpr bool isMem() const {
- return gen_op.type == x || gen_op.type == y;
+ constexpr bool isRegister() const {
+ switch (getType()) {
+ case TYPE::FReg:
+ case TYPE::XReg:
+ case TYPE::YReg:
+ return true;
+ default:
+ return false;
+ }
}
constexpr bool isLiteral() const {
- return gen_op.type == q;
+ return getType() == TYPE::Literal;
}
constexpr bool isImmed() const {
- return gen_op.type == i;
+ return getType() == TYPE::Immediate;
}
- template<typename T>
- ArgVal operator+(T val) const {
- return ArgVal(gen_op.type, val + gen_op.val);
+ constexpr bool isWord() const {
+ return getType() == TYPE::Word;
+ }
+
+ constexpr bool isLabel() const {
+ return getType() == TYPE::Label;
+ }
+
+ constexpr bool isConstant() const {
+ switch (getType()) {
+ case TYPE::BytePtr:
+ case TYPE::Catch:
+ case TYPE::Export:
+ case TYPE::FunEntry:
+ case TYPE::Immediate:
+ case TYPE::Label:
+ case TYPE::Literal:
+ case TYPE::Word:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ struct Hash {
+ size_t operator()(const ArgVal &key) const {
+ return ((size_t)key.getType() << 48) ^ (size_t)key.getValue();
+ }
+ };
+
+ bool operator==(const ArgVal &other) const {
+ return getType() == other.getType() && getValue() == other.getValue();
}
template<typename T>
- ArgVal operator*(T val) const {
- return ArgVal(gen_op.type, val * gen_op.val);
+ ArgVal operator+(T val) const {
+ return ArgVal(getType(), getValue() + val);
}
enum Relation { none, consecutive, reverse_consecutive };
- static Relation register_relation(const ArgVal &arg1, const ArgVal &arg2) {
- TYPE type = arg1.getType();
- bool same_reg_types =
- type == arg2.getType() && (type == TYPE::x || type == TYPE::y);
+ static Relation register_relation(const ArgVal &lhs, const ArgVal &rhs) {
+ bool same_reg_types = lhs.getType() == rhs.getType();
+
if (!same_reg_types) {
return none;
- } else if (arg1.getValue() + 1 == arg2.getValue()) {
+ } else if (!lhs.isRegister()) {
+ return none;
+ } else if (lhs.getValue() + 1 == rhs.getValue()) {
return consecutive;
- } else if (arg1.getValue() == arg2.getValue() + 1) {
+ } else if (lhs.getValue() == rhs.getValue() + 1) {
return reverse_consecutive;
} else {
return none;
}
};
};
+
+/* This is a view into a contiguous container (like an array or `std::vector`),
+ * letting us reuse the existing argument array in `beamasm_emit` while keeping
+ * our interfaces convenient.
+ *
+ * Needless to say, spans must not live longer than the container they wrap, so
+ * you must be careful not to return a span of an rvalue or stack-allocated
+ * container.
+ *
+ * We can replace this with std::span once we require C++20. */
+template<typename T>
+class Span {
+ const T *_data;
+ size_t _size;
+
+public:
+ template<typename Container>
+ Span(const Container &other) : Span(other.data(), other.size()) {
+ }
+
+ template<typename Container>
+ Span(Container &other) : Span(other.data(), other.size()) {
+ }
+
+ Span(const T *begin, const T *end) : Span(begin, end - begin) {
+ }
+
+ Span(const T *data, size_t size) : _data(data), _size(size) {
+ }
+
+ Span<T> subspan(size_t index, size_t count) const {
+ ASSERT(index <= size() && count <= (size() - index));
+ return Span<T>(begin() + index, count);
+ }
+
+ const auto size() const {
+ return _size;
+ }
+
+ const auto begin() const {
+ return &_data[0];
+ }
+
+ const auto end() const {
+ return &_data[size()];
+ }
+
+ const T &operator[](size_t index) const {
+#ifdef DEBUG
+ ASSERT(index < _size);
+#endif
+ return _data[index];
+ }
+
+ const T &front() const {
+ return operator[](0);
+ }
+
+ const T &back() const {
+ return operator[](size() - 1);
+ }
+};
+
+/* ** */
+
+#if defined(DEBUG) && defined(JIT_HARD_DEBUG)
+void beam_jit_validate_term(Eterm term);
+#endif
+
+typedef Eterm BeamJitNifF(struct enif_environment_t *, int argc, Eterm argv[]);
+enum beam_jit_nif_load_ret { RET_NIF_success, RET_NIF_error, RET_NIF_yield };
+
+Eterm beam_jit_call_bif(Process *c_p,
+ Eterm *reg,
+ ErtsCodePtr I,
+ ErtsBifFunc vbf,
+ Uint arity);
+Eterm beam_jit_call_nif(Process *c_p,
+ ErtsCodePtr I,
+ Eterm *reg,
+ BeamJitNifF *fp,
+ struct erl_module_nif *NifMod);
+enum beam_jit_nif_load_ret beam_jit_load_nif(Process *c_p,
+ ErtsCodePtr I,
+ Eterm *reg);
+
+Uint beam_jit_get_map_elements(Eterm map,
+ Eterm *reg,
+ Eterm *E,
+ Uint n,
+ Eterm *fs);
+
+void beam_jit_bs_field_size_argument_error(Process *c_p, Eterm size);
+void beam_jit_bs_add_argument_error(Process *c_p, Eterm A, Eterm B);
+Eterm beam_jit_bs_init(Process *c_p,
+ Eterm *reg,
+ ERL_BITS_DECLARE_STATEP,
+ Eterm BsOp1,
+ Eterm BsOp2,
+ unsigned Live);
+Eterm beam_jit_bs_init_bits(Process *c_p,
+ Eterm *reg,
+ ERL_BITS_DECLARE_STATEP,
+ Uint num_bits,
+ Uint alloc,
+ unsigned Live);
+Eterm beam_jit_bs_get_integer(Process *c_p,
+ Eterm *reg,
+ Eterm context,
+ Uint flags,
+ Uint size,
+ Uint Live);
+
+ErtsMessage *beam_jit_decode_dist(Process *c_p, ErtsMessage *msgp);
+Sint beam_jit_remove_message(Process *c_p,
+ Sint FCALLS,
+ Eterm *HTOP,
+ Eterm *E,
+ Uint32 active_code_ix);
+
+void beam_jit_take_receive_lock(Process *c_p);
+void beam_jit_wait_locked(Process *c_p, ErtsCodePtr cp);
+void beam_jit_wait_unlocked(Process *c_p, ErtsCodePtr cp);
+
+enum beam_jit_tmo_ret { RET_next = 0, RET_wait = 1, RET_badarg = 2 };
+
+enum beam_jit_tmo_ret beam_jit_wait_timeout(Process *c_p,
+ Eterm timeout_value,
+ ErtsCodePtr next);
+
+void beam_jit_timeout(Process *c_p);
+void beam_jit_timeout_locked(Process *c_p);
+
+void beam_jit_return_to_trace(Process *c_p);
+
+Eterm beam_jit_build_argument_list(Process *c_p, const Eterm *regs, int arity);
+
+Export *beam_jit_handle_unloaded_fun(Process *c_p,
+ Eterm *reg,
+ int arity,
+ Eterm fun_thing);
+
+#endif
diff --git a/erts/emulator/beam/jit/x86/beam_asm.cpp b/erts/emulator/beam/jit/beam_jit_main.cpp
index c4bfec3183..b5a3d80052 100644
--- a/erts/emulator/beam/jit/x86/beam_asm.cpp
+++ b/erts/emulator/beam/jit/beam_jit_main.cpp
@@ -26,8 +26,18 @@ extern "C"
#include "beam_common.h"
#include "code_ix.h"
#include "export.h"
+
+#if defined(__APPLE__)
+# include <libkern/OSCacheControl.h>
+#elif defined(WIN32)
+# include <windows.h>
+#endif
}
+#ifdef ERLANG_FRAME_POINTERS
+ErtsFrameLayout ERTS_WRITE_UNLIKELY(erts_frame_layout);
+#endif
+
/* Global configuration variables (under the `+J` prefix) */
#ifdef HAVE_LINUX_PERF_SUPPORT
int erts_jit_perf_support;
@@ -37,13 +47,14 @@ int erts_jit_perf_support;
* Special Beam instructions.
*/
-ErtsCodePtr beam_apply;
+ErtsCodePtr beam_run_process;
ErtsCodePtr beam_normal_exit;
ErtsCodePtr beam_exit;
ErtsCodePtr beam_export_trampoline;
ErtsCodePtr beam_bif_export_trap;
ErtsCodePtr beam_continue_exit;
ErtsCodePtr beam_save_calls;
+ErtsCodePtr beam_unloaded_fun;
/* NOTE These should be the only variables containing trace instructions.
** Sometimes tests are for the instruction value, and sometimes
@@ -183,24 +194,42 @@ void beamasm_init() {
struct operands {
Eterm name;
+ int arity;
BeamInstr operand;
ErtsCodePtr *target;
};
std::vector<struct operands> operands = {
- {am_exit, op_error_action_code, &beam_exit},
- {am_continue_exit, op_continue_exit, &beam_continue_exit},
- {am_return_trace, op_return_trace, &beam_return_trace},
- {am_return_to_trace, op_i_return_to_trace, &beam_return_to_trace},
+ {am_run_process, 3, op_i_apply_only, &beam_run_process},
+ {am_normal_exit, 0, op_normal_exit, &beam_normal_exit},
+ {am_continue_exit, 0, op_continue_exit, &beam_continue_exit},
+ {am_exception_trace, 0, op_return_trace, &beam_exception_trace},
+ {am_return_trace, 0, op_return_trace, &beam_return_trace},
+ {am_return_to_trace,
+ 0,
+ op_i_return_to_trace,
+ &beam_return_to_trace},
{am_return_time_trace,
+ 0,
op_i_return_time_trace,
- &beam_return_time_trace},
- {am_exception_trace, op_return_trace, &beam_exception_trace}};
+ &beam_return_time_trace}};
Eterm mod_name;
ERTS_DECL_AM(erts_beamasm);
mod_name = AM_erts_beamasm;
+ /* erts_frame_layout is hardcoded to ERTS_FRAME_LAYOUT_RA when Erlang
+ * frame pointers are disabled or unsupported. */
+#if defined(ERLANG_FRAME_POINTERS)
+ if (erts_jit_perf_support & BEAMASM_PERF_MAP) {
+ erts_frame_layout = ERTS_FRAME_LAYOUT_FP_RA;
+ } else {
+ erts_frame_layout = ERTS_FRAME_LAYOUT_RA;
+ }
+#else
+ ERTS_CT_ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_RA);
+#endif
+
beamasm_init_perf();
beamasm_init_gdb_jit_info();
@@ -209,20 +238,28 @@ void beamasm_init() {
* short instructions. Before removing any of these assertions, please
* consider the effect it will have on code size and/or performance.
*/
-
ERTS_CT_ASSERT(offsetof(Process, htop) < 128);
ERTS_CT_ASSERT(offsetof(Process, stop) < 128);
ERTS_CT_ASSERT(offsetof(Process, fcalls) < 128);
ERTS_CT_ASSERT(offsetof(Process, freason) < 128);
ERTS_CT_ASSERT(offsetof(Process, fvalue) < 128);
+#ifdef ERLANG_FRAME_POINTERS
+ ERTS_CT_ASSERT(offsetof(Process, frame_pointer) < 128);
+#endif
+
cpuinfo = CpuInfo::host();
jit_allocator = pick_allocator();
bga = new BeamGlobalAssembler(jit_allocator);
- bma = new BeamModuleAssembler(bga, mod_name, 4 + operands.size() * 2);
+ bma = new BeamModuleAssembler(bga,
+ mod_name,
+ 1 + operands.size() * 2,
+ operands.size());
+
+ std::vector<ArgVal> args;
for (auto &op : operands) {
unsigned func_label, entry_label;
@@ -230,59 +267,36 @@ void beamasm_init() {
func_label = label++;
entry_label = label++;
- bma->emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, func_label),
- ArgVal(ArgVal::u, sizeof(UWord))});
- bma->emit(op_i_func_info_IaaI,
- {ArgVal(ArgVal::i, func_label),
- ArgVal(ArgVal::i, am_erts_internal),
- ArgVal(ArgVal::i, op.name),
- ArgVal(ArgVal::i, 0)});
- bma->emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, entry_label),
- ArgVal(ArgVal::u, sizeof(UWord))});
- bma->emit(op.operand, {});
+ args = {ArgVal(ArgVal::Immediate, func_label),
+ ArgVal(ArgVal::Word, sizeof(UWord))};
+ bma->emit(op_aligned_label_Lt, args);
+
+ args = {ArgVal(ArgVal::Immediate, func_label),
+ ArgVal(ArgVal::Immediate, mod_name),
+ ArgVal(ArgVal::Immediate, op.name),
+ ArgVal(ArgVal::Immediate, op.arity)};
+ bma->emit(op_i_func_info_IaaI, args);
+
+ args = {ArgVal(ArgVal::Immediate, entry_label),
+ ArgVal(ArgVal::Word, sizeof(UWord))};
+ bma->emit(op_aligned_label_Lt, args);
+
+ args = {};
+ bma->emit(op.operand, args);
op.operand = entry_label;
}
- {
- unsigned func_label, apply_label, normal_exit_label;
+ args = {};
+ bma->emit(op_int_code_end, args);
- func_label = label++;
- apply_label = label++;
- normal_exit_label = label++;
-
- bma->emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, func_label),
- ArgVal(ArgVal::u, sizeof(UWord))});
- bma->emit(op_i_func_info_IaaI,
- {ArgVal(ArgVal::i, func_label),
- ArgVal(ArgVal::i, am_erts_internal),
- ArgVal(ArgVal::i, am_apply),
- ArgVal(ArgVal::i, 3)});
- bma->emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, apply_label),
- ArgVal(ArgVal::u, sizeof(UWord))});
- bma->emit(op_i_apply, {});
- bma->emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, normal_exit_label),
- ArgVal(ArgVal::u, sizeof(UWord))});
- bma->emit(op_normal_exit, {});
-
- bma->emit(op_int_code_end, {});
-
- {
- /* We have no need of the module pointers as we use `getCode(...)`
- * for everything, and the code will live as long as the emulator
- * itself. */
- const void *_ignored_exec;
- void *_ignored_rw;
- bma->codegen(jit_allocator, &_ignored_exec, &_ignored_rw);
- }
-
- beam_apply = bma->getCode(apply_label);
- beam_normal_exit = bma->getCode(normal_exit_label);
+ {
+ /* We have no need of the module pointers as we use `getCode(...)`
+ * for everything, and the code will live as long as the emulator
+ * itself. */
+ const void *_ignored_exec;
+ void *_ignored_rw;
+ bma->codegen(jit_allocator, &_ignored_exec, &_ignored_rw);
}
for (auto op : operands) {
@@ -291,11 +305,20 @@ void beamasm_init() {
}
}
- /* This instruction relies on register contents, and can only be reached
- * from a `call_ext_*`-instruction, hence the lack of a wrapper function. */
+ /* These instructions rely on register contents, and can only be reached
+ * from a `call_ext_*`-instruction or trapping from the emulator, hence the
+ * lack of wrapper functions. */
beam_save_calls = (ErtsCodePtr)bga->get_dispatch_save_calls();
beam_export_trampoline = (ErtsCodePtr)bga->get_export_trampoline();
+
+ /* Used when trappping to Erlang code from the emulator, setting up
+ * registers in the same way as call_ext so that save_calls and tracing
+ * works when trapping. */
beam_bif_export_trap = (ErtsCodePtr)bga->get_bif_export_trap();
+
+ beam_exit = (ErtsCodePtr)bga->get_process_exit();
+
+ beam_unloaded_fun = (ErtsCodePtr)bga->get_unloaded_fun();
}
bool BeamAssembler::hasCpuFeature(uint32_t featureId) {
@@ -313,299 +336,6 @@ void process_main(ErtsSchedulerData *esdp) {
pmain(esdp);
}
-#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
-static Process *erts_debug_schedule(ErtsSchedulerData *esdp,
- Process *c_p,
- int calls) {
- PROCESS_MAIN_CHK_LOCKS(c_p);
- ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
- ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
- c_p = erts_schedule(esdp, c_p, calls);
- ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
- ERTS_REQ_PROC_MAIN_LOCK(c_p);
- PROCESS_MAIN_CHK_LOCKS(c_p);
- return c_p;
-}
-#endif
-
-/* void process_main(ErtsSchedulerData *esdp); */
-void BeamGlobalAssembler::emit_process_main() {
- Label context_switch_local = a.newLabel(),
- context_switch_simplified_local = a.newLabel(),
- do_schedule_local = a.newLabel(), schedule_next = a.newLabel();
-
- const x86::Mem start_time_i =
- getSchedulerRegRef(offsetof(ErtsSchedulerRegisters, start_time_i));
- const x86::Mem start_time =
- getSchedulerRegRef(offsetof(ErtsSchedulerRegisters, start_time));
-
- /* Allocate the register structure on the stack to allow computing the
- * runtime stack address from it, greatly reducing the cost of stack
- * swapping. */
- a.sub(x86::rsp, imm(sizeof(ErtsSchedulerRegisters) + ERTS_CACHE_LINE_SIZE));
- a.and_(x86::rsp, imm(~ERTS_CACHE_LINE_MASK));
-
- a.mov(x86::qword_ptr(ARG1, offsetof(ErtsSchedulerData, registers)),
- x86::rsp);
-
- /* Center `registers` at the base of x_reg_array so we can use negative
- * 8-bit displacement to address the commonly used aux_regs, located at the
- * start of the ErtsSchedulerRegisters struct. */
- a.lea(registers,
- x86::qword_ptr(x86::rsp,
- offsetof(ErtsSchedulerRegisters, x_reg_array.d)));
-
-#if defined(DEBUG) && defined(NATIVE_ERLANG_STACK)
- /* Save stack bounds so they can be tested without clobbering anything. */
- a.call(erts_get_stacklimit);
-
- a.mov(getSchedulerRegRef(
- offsetof(ErtsSchedulerRegisters, runtime_stack_end)),
- RET);
- a.mov(getSchedulerRegRef(
- offsetof(ErtsSchedulerRegisters, runtime_stack_start)),
- x86::rsp);
-#elif !defined(NATIVE_ERLANG_STACK)
- /* Save the initial SP of the thread so that we can verify that it
- * doesn't grow. */
-# ifdef JIT_HARD_DEBUG
- a.mov(getInitialSPRef(), x86::rsp);
-# endif
-
- /* Manually do an `emit_enter_runtime` to match the `emit_leave_runtime`
- * below. We avoid `emit_enter_runtime` because it may do additional
- * assertions that may currently fail.
- *
- * IMPORTANT: We must ensure that this sequence leaves the stack
- * aligned on a 16-byte boundary. */
- a.mov(getRuntimeStackRef(), x86::rsp);
- a.sub(x86::rsp, imm(15));
- a.and_(x86::rsp, imm(-16));
-#endif
-
- load_erl_bits_state(ARG1);
- runtime_call<1>(erts_bits_init_state);
-
- a.mov(start_time_i, imm(0));
- a.mov(start_time, imm(0));
-
- mov_imm(c_p, 0);
- mov_imm(FCALLS, 0);
- mov_imm(ARG3, 0); /* Set reds_used for erts_schedule call */
-
- a.jmp(schedule_next);
-
- a.bind(do_schedule_local);
- {
- /* Figure out reds_used. def_arg_reg[5] = REDS_IN */
- a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, def_arg_reg[5])));
- a.sub(ARG3, FCALLS);
-
- a.jmp(schedule_next);
- }
-
- a.bind(context_switch_local);
- comment("Context switch, unknown arity/MFA");
- {
- Sint arity_offset = offsetof(ErtsCodeMFA, arity) - sizeof(ErtsCodeMFA);
-
- a.mov(ARG1, x86::qword_ptr(ARG3, arity_offset));
- a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), ARG1);
-
- a.lea(ARG1, x86::qword_ptr(ARG3, -(Sint)sizeof(ErtsCodeMFA)));
- a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), ARG1);
-
- /* !! Fall through !! */
- }
-
- a.bind(context_switch_simplified_local);
- comment("Context switch, known arity and MFA");
- {
- Label not_exiting = a.newLabel();
-
-#ifdef DEBUG
- Label check_i = a.newLabel();
- /* Check that ARG3 is set to a valid CP. */
- a.test(ARG3, imm(_CPMASK));
- a.je(check_i);
- a.ud2();
- a.bind(check_i);
-#endif
-
- a.mov(x86::qword_ptr(c_p, offsetof(Process, i)), ARG3);
-
-#ifdef WIN32
- a.mov(ARG1d, x86::dword_ptr(c_p, offsetof(Process, state.value)));
-#else
- a.mov(ARG1d, x86::dword_ptr(c_p, offsetof(Process, state.counter)));
-#endif
-
- a.test(ARG1d, imm(ERTS_PSFLG_EXITING));
- a.short_().je(not_exiting);
- {
- comment("Process exiting");
-
- /* We load the beam_exit from memory because it has not yet been set
- * when the global assembler is created. */
- a.mov(ARG1, imm(&beam_exit));
- a.mov(ARG1, x86::qword_ptr(ARG1));
- a.mov(x86::qword_ptr(c_p, offsetof(Process, i)), ARG1);
- a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), imm(0));
- a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), imm(0));
- a.jmp(do_schedule_local);
- }
- a.bind(not_exiting);
-
- /* Figure out reds_used. def_arg_reg[5] = REDS_IN */
- a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, def_arg_reg[5])));
- a.sub(ARG3, FCALLS);
-
- /* Spill reds_used to FCALLS as we no longer need that value */
- a.mov(FCALLS, ARG3);
-
- a.mov(ARG1, c_p);
- load_x_reg_array(ARG2);
- runtime_call<2>(copy_out_registers);
-
- /* Restore reds_used from FCALLS */
- a.mov(ARG3, FCALLS);
-
- /* !! Fall through !! */
- }
-
- a.bind(schedule_next);
- comment("schedule_next");
- {
- Label schedule = a.newLabel(), skip_long_schedule = a.newLabel();
-
- /* ARG3 contains reds_used at this point */
-
- a.cmp(start_time, imm(0));
- a.short_().je(schedule);
- {
- a.mov(ARG1, c_p);
- a.mov(ARG2, start_time);
-
- /* Spill reds_used in start_time slot */
- a.mov(start_time, ARG3);
-
- a.mov(ARG3, start_time_i);
- runtime_call<3>(check_monitor_long_schedule);
-
- /* Restore reds_used */
- a.mov(ARG3, start_time);
- }
- a.bind(schedule);
-
- mov_imm(ARG1, 0);
- a.mov(ARG2, c_p);
-#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
- runtime_call<3>(erts_debug_schedule);
-#else
- runtime_call<3>(erts_schedule);
-#endif
- a.mov(c_p, RET);
-
-#ifdef ERTS_MSACC_EXTENDED_STATES
- a.lea(ARG1,
- x86::qword_ptr(registers,
- offsetof(ErtsSchedulerRegisters,
- aux_regs.d.erts_msacc_cache)));
- runtime_call<1>(erts_msacc_update_cache);
-#endif
-
- a.mov(ARG1, imm((UWord)&erts_system_monitor_long_schedule));
- a.cmp(x86::qword_ptr(ARG1), imm(0));
- a.mov(start_time, imm(0));
- a.short_().je(skip_long_schedule);
- {
- /* Enable long schedule test */
- runtime_call<0>(erts_timestamp_millis);
- a.mov(start_time, RET);
- a.mov(RET, x86::qword_ptr(c_p, offsetof(Process, i)));
- a.mov(start_time_i, RET);
- }
- a.bind(skip_long_schedule);
-
- /* Copy arguments */
- a.mov(ARG1, c_p);
- load_x_reg_array(ARG2);
- runtime_call<2>(copy_in_registers);
-
- /* Setup reduction counting */
- a.mov(FCALLS, x86::qword_ptr(c_p, offsetof(Process, fcalls)));
- a.mov(x86::qword_ptr(c_p, offsetof(Process, def_arg_reg[5])), FCALLS);
-
-#ifdef DEBUG
- a.mov(x86::qword_ptr(c_p, offsetof(Process, debug_reds_in)), FCALLS);
-#endif
-
- /* Check whether save calls is on */
- a.mov(ARG1, c_p);
- a.mov(ARG2, imm(ERTS_PSD_SAVED_CALLS_BUF));
- runtime_call<2>(erts_psd_get);
-
- /* Read the active code index, overriding it with
- * ERTS_SAVE_CALLS_CODE_IX when save_calls is enabled (RET != 0). */
- a.test(RET, RET);
- a.mov(ARG1, imm(&the_active_code_index));
- a.mov(ARG2, imm(ERTS_SAVE_CALLS_CODE_IX));
- a.mov(active_code_ix.r32(), x86::dword_ptr(ARG1));
- a.cmovnz(active_code_ix, ARG2);
-
- /* Start executing the Erlang process. Note that reductions have
- * already been set up above. */
- emit_leave_runtime<Update::eStack | Update::eHeap>();
-
- /* Check if we are just returning from a dirty nif/bif call and if so we
- * need to do a bit of cleaning up before continuing. */
- a.mov(RET, x86::qword_ptr(c_p, offsetof(Process, i)));
- a.cmp(x86::qword_ptr(RET), imm(op_call_nif_WWW));
- a.je(labels[dispatch_nif]);
- a.cmp(x86::qword_ptr(RET), imm(op_call_bif_W));
- a.je(labels[dispatch_bif]);
- a.jmp(RET);
- }
-
- /* Processes may jump to the exported entry points below, executing on the
- * Erlang stack when entering. These are separate from the `_local` labels
- * above as we don't want to worry about which stack we're on when the
- * cases overlap. */
-
- /* `ga->get_context_switch()`
- *
- * The *next* instruction pointer is provided in ARG3, and must be preceded
- * by an ErtsCodeMFA. */
- a.bind(labels[context_switch]);
- {
- emit_enter_runtime<Update::eStack | Update::eHeap>();
-
- a.jmp(context_switch_local);
- }
-
- /* `ga->get_context_switch_simplified()`
- *
- * The next instruction pointer is provided in ARG3, which does not need to
- * point past an ErtsCodeMFA as the process structure has already been
- * updated. */
- a.bind(labels[context_switch_simplified]);
- {
- emit_enter_runtime<Update::eStack | Update::eHeap>();
-
- a.jmp(context_switch_simplified_local);
- }
-
- /* `ga->get_do_schedule()`
- *
- * `c_p->i` must be set prior to jumping here. */
- a.bind(labels[do_schedule]);
- {
- emit_enter_runtime<Update::eStack | Update::eHeap>();
-
- a.jmp(do_schedule_local);
- }
-}
-
enum jit_actions : uint32_t {
JIT_NOACTION = 0,
JIT_REGISTER_FN,
@@ -744,14 +474,48 @@ extern "C"
#endif
}
- void *beamasm_new_assembler(Eterm mod, int num_labels, int num_functions) {
- return new BeamModuleAssembler(bga, mod, num_labels, num_functions);
+ void beamasm_flush_icache(const void *address, size_t size) {
+#if defined(__aarch64__)
+# if defined(WIN32)
+ FlushInstructionCache(GetCurrentProcess(), address, size);
+# elif defined(__APPLE__)
+ sys_icache_invalidate((char *)address, size);
+# elif defined(__GNUC__)
+ __builtin___clear_cache(&((char *)address)[0],
+ &((char *)address)[size]);
+# else
+# error "Platform lacks implementation for clearing instruction cache." \
+ "Please report this bug."
+# endif
+#else
+ (void)address;
+ (void)size;
+#endif
+ }
+
+ void *beamasm_new_assembler(Eterm mod,
+ int num_labels,
+ int num_functions,
+ BeamFile_ExportTable *named_labels) {
+ return new BeamModuleAssembler(bga,
+ mod,
+ num_labels,
+ num_functions,
+ named_labels);
}
int beamasm_emit(void *instance, unsigned specific_op, BeamOp *op) {
- BeamModuleAssembler *ba = static_cast<BeamModuleAssembler *>(instance);
- const std::vector<ArgVal> args(&op->a[0], &op->a[op->arity]);
+ /* The argument array must be safely convertible from `BeamOpArg*` to
+ * `ArgVal*` for us to reuse it directly.
+ *
+ * The exact traits we need weren't introduced until C++20, but the
+ * assertions below will catch just about everything that would break
+ * this conversion. */
+ static_assert(std::is_base_of<BeamOpArg, ArgVal>::value);
+ static_assert(std::is_standard_layout<ArgVal>::value);
+ BeamModuleAssembler *ba = static_cast<BeamModuleAssembler *>(instance);
+ const Span<ArgVal> args(static_cast<ArgVal *>(op->a), op->arity);
return ba->emit(specific_op, args);
}
@@ -762,42 +526,29 @@ extern "C"
char *buff,
unsigned buff_len) {
BeamModuleAssembler ba(bga, info->mfa.module, 3);
+ std::vector<ArgVal> args;
- ba.emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, 1), ArgVal(ArgVal::u, sizeof(UWord))});
- ba.emit(op_i_func_info_IaaI,
- {ArgVal(ArgVal::i, 1),
- ArgVal(ArgVal::i, info->mfa.module),
- ArgVal(ArgVal::i, info->mfa.function),
- ArgVal(ArgVal::i, info->mfa.arity)});
- ba.emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, 2), ArgVal(ArgVal::u, sizeof(UWord))});
- ba.emit(op_i_breakpoint_trampoline, {});
- ba.emit(op_call_nif_WWW,
- {ArgVal(ArgVal::i, (BeamInstr)normal_fptr),
- ArgVal(ArgVal::i, (BeamInstr)lib),
- ArgVal(ArgVal::i, (BeamInstr)dirty_fptr)});
+ args = {ArgVal(ArgVal::Immediate, 1),
+ ArgVal(ArgVal::Word, sizeof(UWord))};
+ ba.emit(op_aligned_label_Lt, args);
- ba.codegen(buff, buff_len);
- }
+ args = {ArgVal(ArgVal::Immediate, 1),
+ ArgVal(ArgVal::Immediate, info->mfa.module),
+ ArgVal(ArgVal::Immediate, info->mfa.function),
+ ArgVal(ArgVal::Immediate, info->mfa.arity)};
+ ba.emit(op_i_func_info_IaaI, args);
- void beamasm_emit_call_bif(const ErtsCodeInfo *info,
- Eterm (*bif)(BIF_ALIST),
- char *buff,
- unsigned buff_len) {
- BeamModuleAssembler ba(bga, info->mfa.module, 3);
+ args = {ArgVal(ArgVal::Immediate, 2),
+ ArgVal(ArgVal::Word, sizeof(UWord))};
+ ba.emit(op_aligned_label_Lt, args);
- ba.emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, 1), ArgVal(ArgVal::u, sizeof(UWord))});
- ba.emit(op_i_func_info_IaaI,
- {ArgVal(ArgVal::i, 1),
- ArgVal(ArgVal::i, info->mfa.module),
- ArgVal(ArgVal::i, info->mfa.function),
- ArgVal(ArgVal::i, info->mfa.arity)});
- ba.emit(op_aligned_label_Lt,
- {ArgVal(ArgVal::i, 2), ArgVal(ArgVal::u, sizeof(UWord))});
- ba.emit(op_i_breakpoint_trampoline, {});
- ba.emit(op_call_bif_W, {ArgVal(ArgVal::i, (BeamInstr)bif)});
+ args = {};
+ ba.emit(op_i_breakpoint_trampoline, args);
+
+ args = {ArgVal(ArgVal::Immediate, (BeamInstr)normal_fptr),
+ ArgVal(ArgVal::Immediate, (BeamInstr)lib),
+ ArgVal(ArgVal::Immediate, (BeamInstr)dirty_fptr)};
+ ba.emit(op_call_nif_WWW, args);
ba.codegen(buff, buff_len);
}
@@ -817,6 +568,11 @@ extern "C"
return reinterpret_cast<ErtsCodePtr>(ba->getCode(label));
}
+ ErtsCodePtr beamasm_get_lambda(void *instance, int index) {
+ BeamModuleAssembler *ba = static_cast<BeamModuleAssembler *>(instance);
+ return reinterpret_cast<ErtsCodePtr>(ba->getLambda(index));
+ }
+
const byte *beamasm_get_rodata(void *instance, char *label) {
BeamModuleAssembler *ba = static_cast<BeamModuleAssembler *>(instance);
return reinterpret_cast<const byte *>(ba->getCode(label));
@@ -914,8 +670,3 @@ extern "C"
ba->patchStrings(rw_base, string_table);
}
}
-
-const uint8_t *BeamAssembler::nops[3] = {nop1, nop2, nop3};
-const uint8_t BeamAssembler::nop1[1] = {0x90};
-const uint8_t BeamAssembler::nop2[2] = {0x66, 0x90};
-const uint8_t BeamAssembler::nop3[3] = {0x0F, 0x1F, 0x00};
diff --git a/erts/emulator/beam/jit/x86/beam_asm_perf.cpp b/erts/emulator/beam/jit/beam_jit_perf.cpp
index bb2e1d8169..7fcf74febb 100644
--- a/erts/emulator/beam/jit/x86/beam_asm_perf.cpp
+++ b/erts/emulator/beam/jit/beam_jit_perf.cpp
@@ -250,5 +250,7 @@ void beamasm_init_perf() {
void beamasm_update_perf_info(std::string modulename,
std::vector<BeamAssembler::AsmRange> &ranges) {
+ (void)modulename;
+ (void)ranges;
}
#endif
diff --git a/erts/emulator/beam/jit/load.h b/erts/emulator/beam/jit/load.h
index a3d099bb04..dff5852429 100644
--- a/erts/emulator/beam/jit/load.h
+++ b/erts/emulator/beam/jit/load.h
@@ -25,9 +25,11 @@
* Type for a label.
*/
typedef struct {
- Uint value; /* Value of label (0 if not known yet). */
- Uint looprec_targeted; /* Non-zero if this label is the target of a
- * loop_rec instruction. */
+ Uint value; /* Value of label (0 if not known yet). */
+ int looprec_targeted; /* Non-zero if this label is the target of a
+ * loop_rec instruction. */
+ int lambda_index; /* The lambda index of this label, or -1 if not
+ * a target of a lambda. */
} Label;
/*
@@ -41,8 +43,6 @@ typedef struct {
/* This structure contains all information about the module being loaded. */
struct LoaderState_ {
- ErlDrvBinary *bin; /* Binary holding BEAM file (or NULL) */
-
/*
* The following are used mainly for diagnostics.
*/
@@ -90,8 +90,6 @@ struct LoaderState_ {
int function_number;
int last_label;
- int otp_20_or_higher;
-
BeamOpAllocator op_allocator;
BeamFile beam;
};
diff --git a/erts/emulator/beam/jit/x86/beam_asm.hpp b/erts/emulator/beam/jit/x86/beam_asm.hpp
index 9e1254fec1..dee1edebb5 100644
--- a/erts/emulator/beam/jit/x86/beam_asm.hpp
+++ b/erts/emulator/beam/jit/x86/beam_asm.hpp
@@ -69,16 +69,18 @@ protected:
* when running on the runtime stack. */
const x86::Gp E = x86::rsp;
- /* Cached copy of Erlang stack pointer used to speed up stack switches when
- * we know that the runtime doesn't read or modify the Erlang stack.
- *
- * If we find ourselves pressed for registers in the future, we could save
- * this in the same slot as `registers` as that can be trivially recomputed
- * from the top of the runtime stack. */
- const x86::Gp E_saved = x86::r12;
+# ifdef ERLANG_FRAME_POINTERS
+ /* Current frame pointer, used when we emit native stack frames (e.g. to
+ * better support `perf`). */
+ const x86::Gp frame_pointer = x86::rbp;
+# endif
+ /* When we're not using frame pointers, we can keep the Erlang stack in
+ * RBP when running on the runtime stack, which is slightly faster than
+ * reading and writing from c_p->stop. */
+ const x86::Gp E_saved = x86::rbp;
#else
- const x86::Gp E = x86::r12;
+ const x86::Gp E = x86::rbp;
#endif
const x86::Gp c_p = x86::r13;
@@ -90,7 +92,7 @@ protected:
* This is set to ERTS_SAVE_CALLS_CODE_IX when save_calls is active, which
* routes us to a common handler routine that calls save_calls before
* jumping to the actual code. */
- const x86::Gp active_code_ix = x86::rbp;
+ const x86::Gp active_code_ix = x86::r12;
#ifdef ERTS_MSACC_EXTENDED_STATES
const x86::Mem erts_msacc_cache = getSchedulerRegRef(
@@ -164,102 +166,23 @@ protected:
public:
static bool hasCpuFeature(uint32_t featureId);
- BeamAssembler() : code() {
- /* Setup with default code info */
- Error err = code.init(hostEnvironment());
- ERTS_ASSERT(!err && "Failed to init codeHolder");
-
- err = code.newSection(&rodata,
- ".rodata",
- SIZE_MAX,
- Section::kFlagConst,
- 8);
- ERTS_ASSERT(!err && "Failed to create .rodata section");
-
- err = code.attach(&a);
-
- ERTS_ASSERT(!err && "Failed to attach codeHolder");
-#ifdef DEBUG
- a.addValidationOptions(BaseEmitter::kValidationOptionAssembler);
-#endif
- a.addEncodingOptions(BaseEmitter::kEncodingOptionOptimizeForSize);
- code.setErrorHandler(this);
- }
-
- BeamAssembler(const std::string &log) : BeamAssembler() {
- if (erts_jit_asm_dump) {
- setLogger(log + ".asm");
- }
- }
-
- ~BeamAssembler() {
- if (logger.file())
- fclose(logger.file());
- }
+ BeamAssembler();
+ BeamAssembler(const std::string &log);
- void *getBaseAddress() {
- ASSERT(code.hasBaseAddress());
- return (void *)code.baseAddress();
- }
+ ~BeamAssembler();
- size_t getOffset() {
- return a.offset();
- }
+ void *getBaseAddress();
+ size_t getOffset();
protected:
void _codegen(JitAllocator *allocator,
const void **executable_ptr,
- void **writable_ptr) {
- Error err = code.flatten();
- ERTS_ASSERT(!err && "Could not flatten code");
- err = code.resolveUnresolvedLinks();
- ERTS_ASSERT(!err && "Could not resolve all links");
+ void **writable_ptr);
- /* Verify that all labels are bound */
-#ifdef DEBUG
- for (auto e : code.labelEntries()) {
- if (!e->isBound()) {
- erts_exit(ERTS_ABORT_EXIT, "Label %s is not bound", e->name());
- }
- }
-#endif
+ void *getCode(Label label);
+ byte *getCode(char *labelName);
- err = allocator->alloc(const_cast<void **>(executable_ptr),
- writable_ptr,
- code.codeSize() + 16);
-
- if (err == ErrorCode::kErrorTooManyHandles) {
- ERTS_ASSERT(!"Failed to allocate module code: "
- "out of file descriptors");
- } else if (err) {
- ERTS_ASSERT("Failed to allocate module code");
- }
-
- code.relocateToBase((uint64_t)*executable_ptr);
- code.copyFlattenedData(*writable_ptr,
- code.codeSize(),
- CodeHolder::kCopyPadSectionBuffer);
-#ifdef DEBUG
- if (FileLogger *l = dynamic_cast<FileLogger *>(code.logger()))
- if (FILE *f = l->file())
- fprintf(f, "; CODE_SIZE: %zd\n", code.codeSize());
-#endif
- }
-
- void *getCode(Label label) {
- ASSERT(label.isValid());
- return (char *)getBaseAddress() + code.labelOffsetFromBase(label);
- }
-
- byte *getCode(char *labelName) {
- return (byte *)getCode(code.labelByName(labelName, strlen(labelName)));
- }
-
- void handleError(Error err, const char *message, BaseEmitter *origin) {
- comment(message);
- fflush(logger.file());
- ASSERT(0 && "Fault instruction encode");
- }
+ void handleError(Error err, const char *message, BaseEmitter *origin);
constexpr x86::Mem getRuntimeStackRef() const {
int base = offsetof(ErtsSchedulerRegisters, aux_regs.d.runtime_stack);
@@ -365,6 +288,7 @@ protected:
a.short_().jle(ok);
a.bind(crash);
+ a.comment("# Redzone touched");
a.ud2();
a.bind(ok);
@@ -412,6 +336,7 @@ protected:
Label next = a.newLabel();
a.cmp(x86::rsp, getInitialSPRef());
a.short_().je(next);
+ a.comment("# The stack has grown");
a.ud2();
a.bind(next);
#endif
@@ -553,7 +478,7 @@ protected:
}
/* Explicitly position-independent absolute jump, for use in fragments that
- * need to be memcpy'd for performance reasons (e.g. export entries) */
+ * need to be memcpy'd for performance reasons (e.g. NIF stubs) */
template<typename T>
void pic_jmp(T(*addr)) {
a.mov(ARG6, imm(addr));
@@ -563,11 +488,11 @@ protected:
constexpr x86::Mem getArgRef(const ArgVal &val,
size_t size = sizeof(UWord)) const {
switch (val.getType()) {
- case ArgVal::TYPE::l:
+ case ArgVal::FReg:
return getFRef(val.getValue(), size);
- case ArgVal::TYPE::x:
+ case ArgVal::XReg:
return getXRef(val.getValue(), size);
- case ArgVal::TYPE::y:
+ case ArgVal::YReg:
return getYRef(val.getValue(), size);
default:
ERTS_ASSERT(!"NYI");
@@ -593,14 +518,6 @@ protected:
return x86::qword_ptr(RET, CodeIndex, 3, offsetof(Export, addresses));
}
- /* Discards a continuation pointer, including the frame pointer if
- * applicable. */
- void emit_discard_cp() {
- emit_assert_erlang_stack();
-
- a.add(x86::rsp, imm(CP_SIZE * sizeof(Eterm)));
- }
-
void emit_assert_runtime_stack() {
#ifdef JIT_HARD_DEBUG
Label crash = a.newLabel(), next = a.newLabel();
@@ -623,6 +540,7 @@ protected:
a.short_().je(next);
a.bind(crash);
+ a.comment("# Runtime stack is corrupt");
a.ud2();
a.bind(next);
@@ -643,6 +561,7 @@ protected:
a.short_().jle(next);
a.bind(crash);
+ a.comment("Erlang stack is corrupt");
a.ud2();
a.bind(next);
#endif
@@ -655,6 +574,36 @@ protected:
eCodeIndex = (1 << 3)
};
+ void emit_enter_frame() {
+#ifdef NATIVE_ERLANG_STACK
+ if (ERTS_UNLIKELY(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA)) {
+# ifdef ERLANG_FRAME_POINTERS
+ a.push(frame_pointer);
+ a.mov(frame_pointer, E);
+# endif
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_RA);
+ }
+#endif
+ }
+
+ void emit_leave_frame() {
+#ifdef NATIVE_ERLANG_STACK
+ if (ERTS_UNLIKELY(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA)) {
+ a.leave();
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_RA);
+ }
+#endif
+ }
+
+ void emit_unwind_frame() {
+ emit_assert_erlang_stack();
+
+ emit_leave_frame();
+ a.add(x86::rsp, imm(sizeof(UWord)));
+ }
+
template<int Spec = 0>
void emit_enter_runtime() {
emit_assert_erlang_stack();
@@ -662,46 +611,65 @@ protected:
ERTS_CT_ASSERT((Spec & (Update::eReductions | Update::eStack |
Update::eHeap)) == Spec);
-#ifdef NATIVE_ERLANG_STACK
- if (!(Spec & Update::eStack)) {
- a.mov(E_saved, E);
- }
-#endif
+ if (ERTS_LIKELY(erts_frame_layout == ERTS_FRAME_LAYOUT_RA)) {
+ if ((Spec & (Update::eHeap | Update::eStack)) ==
+ (Update::eHeap | Update::eStack)) {
+ /* To update both heap and stack we use sse instructions like
+ * gcc -O3 does. Basically it is this function run through
+ * gcc -O3:
+ *
+ * struct a { long a; long b; long c; };
+ * void test(long a, long b, long c, struct a *s) {
+ * s->a = a;
+ * s->b = b;
+ * s->c = c;
+ * } */
+ ERTS_CT_ASSERT((offsetof(Process, stop) -
+ offsetof(Process, htop)) == sizeof(Eterm *));
+ a.movq(x86::xmm0, HTOP);
+ a.movq(x86::xmm1, E);
+ a.punpcklqdq(x86::xmm0, x86::xmm1);
+ a.movups(x86::xmmword_ptr(c_p, offsetof(Process, htop)),
+ x86::xmm0);
+ } else if (Spec & Update::eHeap) {
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, htop)), HTOP);
+ } else if (Spec & Update::eStack) {
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, stop)), E);
+ }
- if ((Spec & (Update::eHeap | Update::eStack)) ==
- (Update::eHeap | Update::eStack)) {
- /* To update both heap and stack we use sse instructions like gcc
- -O3 does. Basically it is this function run through gcc -O3:
-
- struct a { long a; long b; long c; };
-
- void test(long a, long b, long c, struct a *s) {
- s->a = a;
- s->b = b;
- s->c = c;
- }
- */
- ERTS_CT_ASSERT(offsetof(Process, stop) - offsetof(Process, htop) ==
- 8);
- a.movq(x86::xmm0, HTOP);
- a.movq(x86::xmm1, E);
- if (Spec & Update::eReductions) {
- a.mov(x86::qword_ptr(c_p, offsetof(Process, fcalls)), FCALLS);
+#ifdef NATIVE_ERLANG_STACK
+ if (!(Spec & Update::eStack)) {
+ a.mov(E_saved, E);
}
- a.punpcklqdq(x86::xmm0, x86::xmm1);
- a.movups(x86::xmmword_ptr(c_p, offsetof(Process, htop)), x86::xmm0);
+#endif
} else {
- if ((Spec & Update::eStack)) {
+#ifdef ERLANG_FRAME_POINTERS
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+
+ if (Spec & Update::eStack) {
+ ERTS_CT_ASSERT((offsetof(Process, frame_pointer) -
+ offsetof(Process, stop)) == sizeof(Eterm *));
+ a.movq(x86::xmm0, E);
+ a.movq(x86::xmm1, frame_pointer);
+ a.punpcklqdq(x86::xmm0, x86::xmm1);
+ a.movups(x86::xmmword_ptr(c_p, offsetof(Process, stop)),
+ x86::xmm0);
+ } else {
+ /* We can skip updating the frame pointer whenever the process
+ * doesn't have to inspect the stack. We still need to update
+ * the stack pointer to switch stacks, though, since we don't
+ * have enough spare callee-save registers. */
a.mov(x86::qword_ptr(c_p, offsetof(Process, stop)), E);
}
if (Spec & Update::eHeap) {
a.mov(x86::qword_ptr(c_p, offsetof(Process, htop)), HTOP);
}
+#endif
+ }
- if (Spec & Update::eReductions) {
- a.mov(x86::qword_ptr(c_p, offsetof(Process, fcalls)), FCALLS);
- }
+ if (Spec & Update::eReductions) {
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, fcalls)), FCALLS);
}
#ifdef NATIVE_ERLANG_STACK
@@ -724,13 +692,25 @@ protected:
ERTS_CT_ASSERT((Spec & (Update::eReductions | Update::eStack |
Update::eHeap | Update::eCodeIndex)) == Spec);
+ if (ERTS_LIKELY(erts_frame_layout == ERTS_FRAME_LAYOUT_RA)) {
+ if (Spec & Update::eStack) {
+ a.mov(E, x86::qword_ptr(c_p, offsetof(Process, stop)));
+ } else {
#ifdef NATIVE_ERLANG_STACK
- if (!(Spec & Update::eStack)) {
- a.mov(E, E_saved);
- }
+ a.mov(E, E_saved);
#endif
- if ((Spec & Update::eStack)) {
+ }
+ } else {
+#ifdef ERLANG_FRAME_POINTERS
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+
a.mov(E, x86::qword_ptr(c_p, offsetof(Process, stop)));
+
+ if (Spec & Update::eStack) {
+ a.mov(frame_pointer,
+ x86::qword_ptr(c_p, offsetof(Process, frame_pointer)));
+ }
+#endif
}
if (Spec & Update::eHeap) {
@@ -811,8 +791,12 @@ protected:
* Generate the shortest instruction for setting a register to an immediate
* value. May clear flags.
*/
- void mov_imm(x86::Gp to, Uint value) {
- if (value == 0) {
+ template<typename T>
+ void mov_imm(x86::Gp to, T value) {
+ static_assert(std::is_integral<T>::value || std::is_pointer<T>::value);
+ if (value) {
+ a.mov(to, imm(value));
+ } else {
/*
* Generate the shortest instruction to set the register to zero.
*
@@ -825,35 +809,21 @@ protected:
* Note: xor clears ZF and CF; mov does not change any flags.
*/
a.xor_(to.r32(), to.r32());
- } else {
- a.mov(to, imm(value));
}
}
+ void mov_imm(x86::Gp to, std::nullptr_t value) {
+ (void)value;
+ mov_imm(to, 0);
+ }
+
public:
void embed_rodata(const char *labelName, const char *buff, size_t size);
void embed_bss(const char *labelName, size_t size);
-
void embed_zeros(size_t size);
- void setLogger(std::string log) {
- FILE *f = fopen(log.data(), "w+");
-
- /* FIXME: Don't crash when loading multiple modules with the same name.
- *
- * setLogger(nullptr) disables logging. */
- if (f) {
- setvbuf(f, NULL, _IONBF, 0);
- }
-
- setLogger(f);
- }
-
- void setLogger(FILE *log) {
- logger.setFile(log);
- logger.setIndentation(FormatOptions::kIndentationCode, 4);
- code.setLogger(&logger);
- }
+ void setLogger(std::string log);
+ void setLogger(FILE *log);
template<typename... Ts>
void comment(const char *format, Ts... args) {
@@ -876,10 +846,6 @@ public:
void update_gdb_jit_info(std::string modulename,
std::vector<AsmRange> &functions);
-
- void embed(void *data, uint32_t size) {
- a.embed((char *)data, size);
- }
};
class BeamGlobalAssembler : public BeamAssembler {
@@ -888,6 +854,7 @@ class BeamGlobalAssembler : public BeamAssembler {
/* Please keep this in alphabetical order. */
#define BEAM_GLOBAL_FUNCS(_) \
+ _(apply_fun_shared) \
_(arith_compare_shared) \
_(arith_eq_shared) \
_(bif_nif_epilogue) \
@@ -901,19 +868,20 @@ class BeamGlobalAssembler : public BeamAssembler {
_(call_light_bif_shared) \
_(call_nif_early) \
_(call_nif_shared) \
+ _(call_nif_yield_helper) \
_(catch_end_shared) \
+ _(check_float_error) \
_(dispatch_bif) \
_(dispatch_nif) \
_(dispatch_return) \
_(dispatch_save_calls) \
- _(error_action_code) \
_(export_trampoline) \
_(garbage_collect) \
_(generic_bp_global) \
_(generic_bp_local) \
_(debug_bp) \
- _(handle_error_shared_prologue) \
- _(handle_error_shared) \
+ _(fconv_shared) \
+ _(handle_call_fun_error) \
_(handle_element_error) \
_(handle_hd_error) \
_(i_band_body_shared) \
@@ -945,11 +913,15 @@ class BeamGlobalAssembler : public BeamAssembler {
_(new_map_shared) \
_(plus_body_shared) \
_(plus_guard_shared) \
+ _(process_exit) \
_(process_main) \
+ _(raise_exception) \
+ _(raise_exception_shared) \
_(times_body_shared) \
_(times_guard_shared) \
_(unary_minus_body_shared) \
_(unary_minus_guard_shared) \
+ _(unloaded_fun) \
_(update_map_assoc_shared) \
_(update_map_exact_guard_shared) \
_(update_map_exact_body_shared)
@@ -985,8 +957,6 @@ class BeamGlobalAssembler : public BeamAssembler {
x86::Mem emit_i_length_common(Label fail, int state_size);
- void emit_handle_error();
-
public:
BeamGlobalAssembler(JitAllocator *allocator);
@@ -1032,10 +1002,10 @@ class BeamModuleAssembler : public BeamAssembler {
typedef std::unordered_map<unsigned, struct patch_import> ImportMap;
ImportMap imports;
- /* Map of fun entry to patch labels */
+ /* Map of fun entry to trampoline labels and patches */
struct patch_lambda {
std::vector<struct patch> patches;
- ErlFunEntry fe;
+ Label trampoline;
};
typedef std::unordered_map<unsigned, struct patch_lambda> LambdaMap;
LambdaMap lambdas;
@@ -1055,17 +1025,22 @@ class BeamModuleAssembler : public BeamAssembler {
BeamGlobalAssembler *ga;
+ Label codeHeader;
+
/* Used by emit to populate the labelToMFA map */
Label currLabel;
- unsigned prev_op = 0;
- Label codeHeader;
+
+ /* Special shared fragments that must reside in each module. */
Label funcInfo;
- Label funcYield;
Label genericBPTramp;
+ Label yieldReturn;
+ Label yieldEnter;
+
+ /* The module's on_load function, if any. */
Label on_load;
- Label floatMax;
- Label floatSignMask;
+ /* The end of the last function. */
+ Label code_end;
Eterm mod;
@@ -1075,13 +1050,15 @@ class BeamModuleAssembler : public BeamAssembler {
public:
BeamModuleAssembler(BeamGlobalAssembler *ga,
Eterm mod,
- unsigned num_labels);
+ unsigned num_labels,
+ BeamFile_ExportTable *named_labels = NULL);
BeamModuleAssembler(BeamGlobalAssembler *ga,
Eterm mod,
unsigned num_labels,
- unsigned num_functions);
+ unsigned num_functions,
+ BeamFile_ExportTable *named_labels = NULL);
- bool emit(unsigned op, const std::vector<ArgVal> &args);
+ bool emit(unsigned op, const Span<ArgVal> &args);
void codegen(JitAllocator *allocator,
const void **executable_ptr,
@@ -1097,6 +1074,8 @@ public:
void codegen(char *buff, size_t len);
ErtsCodePtr getCode(unsigned label);
+ ErtsCodePtr getLambda(unsigned index);
+
void *getCode(Label label) {
return BeamAssembler::getCode(label);
}
@@ -1104,7 +1083,7 @@ public:
return BeamAssembler::getCode(labelName);
}
- Label embed_vararg_rodata(const std::vector<ArgVal> &args, int y_offset);
+ Label embed_vararg_rodata(const Span<ArgVal> &args, int y_offset);
unsigned getCodeSize() {
ASSERT(code.hasBaseAddress());
@@ -1133,8 +1112,7 @@ protected:
x86::Mem emit_variable_apply(bool includeI);
x86::Mem emit_fixed_apply(const ArgVal &arity, bool includeI);
- x86::Gp emit_call_fun(const ArgVal &Fun);
- x86::Gp emit_apply_fun(void);
+ x86::Gp emit_call_fun(void);
void emit_is_binary(Label Fail, x86::Gp Src, Label next, Label subbin);
@@ -1150,7 +1128,6 @@ protected:
void emit_setup_guard_bif(const std::vector<ArgVal> &args,
const ArgVal &bif);
- void emit_bif_arg_error(std::vector<ArgVal> args, const ErtsCodeMFA *mfa);
void emit_error(int code);
x86::Mem emit_bs_get_integer_prologue(Label next,
@@ -1169,17 +1146,22 @@ protected:
const ArgVal &Fail,
const ArgVal &Flags);
- void emit_handle_error();
- void emit_handle_error(const ErtsCodeMFA *exp);
- void emit_handle_error(Label I, const ErtsCodeMFA *exp);
+ void emit_raise_exception();
+ void emit_raise_exception(const ErtsCodeMFA *exp);
+ void emit_raise_exception(Label I, const ErtsCodeMFA *exp);
+ void emit_raise_exception(x86::Gp I, const ErtsCodeMFA *exp);
+
void emit_validate(const ArgVal &arity);
void emit_bs_skip_bits(const ArgVal &Fail, const ArgVal &Ctx);
void emit_linear_search(x86::Gp val,
const ArgVal &Fail,
- const std::vector<ArgVal> &args);
+ const Span<ArgVal> &args);
- void emit_check_float(Label next, x86::Xmm value);
+ void emit_float_instr(uint32_t instId,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst);
void emit_is_small(Label fail, x86::Gp Reg);
void emit_is_both_small(Label fail, x86::Gp A, x86::Gp B);
@@ -1201,10 +1183,10 @@ protected:
void emit_binsearch_nodes(size_t Left,
size_t Right,
const ArgVal &Fail,
- const std::vector<ArgVal> &args);
+ const Span<ArgVal> &args);
bool emit_optimized_three_way_select(const ArgVal &Fail,
- const std::vector<ArgVal> &args);
+ const Span<ArgVal> &args);
#ifdef DEBUG
void emit_tuple_assertion(const ArgVal &Src, x86::Gp tuple_reg);
@@ -1271,7 +1253,7 @@ protected:
/* Note: May clear flags. */
void mov_arg(x86::Gp to, const ArgVal &from, const x86::Gp &spill) {
- if (from.isMem()) {
+ if (from.isRegister()) {
a.mov(to, getArgRef(from));
} else if (from.isLiteral()) {
make_move_patch(to, literals[from.getValue()].patches);
@@ -1310,7 +1292,7 @@ protected:
}
void mov_arg(const ArgVal &to, const ArgVal &from, const x86::Gp &spill) {
- if (from.isMem()) {
+ if (from.isRegister()) {
mov_arg(spill, from);
mov_arg(to, spill);
} else {
diff --git a/erts/emulator/beam/jit/x86/beam_asm_global.cpp b/erts/emulator/beam/jit/x86/beam_asm_global.cpp
index 1c6479186a..f388aefa3b 100644
--- a/erts/emulator/beam/jit/x86/beam_asm_global.cpp
+++ b/erts/emulator/beam/jit/x86/beam_asm_global.cpp
@@ -103,23 +103,11 @@ BeamGlobalAssembler::BeamGlobalAssembler(JitAllocator *allocator)
}
}
-void BeamGlobalAssembler::emit_handle_error() {
- /* Move return address into ARG2 so we know where we crashed.
- *
- * This bluntly assumes that we haven't pushed anything to the (Erlang)
- * stack in the fragments that jump here. */
-
-#ifdef NATIVE_ERLANG_STACK
- a.mov(ARG2, x86::qword_ptr(E));
-#else
- a.pop(ARG2);
-#endif
- a.jmp(labels[handle_error_shared]);
-}
-
/* ARG3 = (HTOP + bytes needed) !!
* ARG4 = Live registers */
void BeamGlobalAssembler::emit_garbage_collect() {
+ emit_enter_frame();
+
/* Convert ARG3 to words needed and move it to the correct argument slot */
a.sub(ARG3, HTOP);
a.shr(ARG3, imm(3));
@@ -127,7 +115,13 @@ void BeamGlobalAssembler::emit_garbage_collect() {
/* Save our return address in c_p->i so we can tell where we crashed if we
* do so during GC. */
- a.mov(RET, x86::qword_ptr(x86::rsp));
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ a.mov(RET, x86::qword_ptr(x86::rsp));
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+ a.mov(RET, x86::qword_ptr(x86::rsp, 8));
+ }
+
a.mov(x86::qword_ptr(c_p, offsetof(Process, i)), RET);
emit_enter_runtime<Update::eStack | Update::eHeap>();
@@ -139,6 +133,7 @@ void BeamGlobalAssembler::emit_garbage_collect() {
a.sub(FCALLS, RET);
emit_leave_runtime<Update::eStack | Update::eHeap>();
+ emit_leave_frame();
a.ret();
}
@@ -149,11 +144,10 @@ void BeamGlobalAssembler::emit_garbage_collect() {
*
* Assumes that c_p->current points into the MFA of an export entry. */
void BeamGlobalAssembler::emit_bif_export_trap() {
- int export_offset = offsetof(Export, info.mfa);
-
a.mov(RET, x86::qword_ptr(c_p, offsetof(Process, current)));
- a.sub(RET, export_offset);
+ a.sub(RET, imm(offsetof(Export, info.mfa)));
+ emit_leave_frame();
a.jmp(emit_setup_export_call(RET));
}
@@ -182,6 +176,7 @@ void BeamGlobalAssembler::emit_export_trampoline() {
a.je(jump_trace);
/* Must never happen. */
+ a.comment("# Unexpected export trampoline op");
a.ud2();
a.bind(call_bif);
@@ -197,6 +192,7 @@ void BeamGlobalAssembler::emit_export_trampoline() {
a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, i)));
a.mov(ARG4, x86::qword_ptr(RET, func_offset));
+ emit_enter_frame();
a.jmp(labels[call_bif_shared]);
}
@@ -205,6 +201,7 @@ void BeamGlobalAssembler::emit_export_trampoline() {
a.bind(error_handler);
{
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack |
Update::eHeap>();
@@ -218,7 +215,9 @@ void BeamGlobalAssembler::emit_export_trampoline() {
Update::eHeap>();
a.test(RET, RET);
- a.je(labels[error_action_code]);
+ a.je(labels[process_exit]);
+
+ emit_leave_frame();
a.jmp(emit_setup_export_call(RET));
}
}
@@ -227,13 +226,13 @@ void BeamGlobalAssembler::emit_export_trampoline() {
* Get the error address implicitly by calling the shared fragment and using
* the return address as the error address.
*/
-void BeamModuleAssembler::emit_handle_error() {
- emit_handle_error(nullptr);
+void BeamModuleAssembler::emit_raise_exception() {
+ emit_raise_exception(nullptr);
}
-void BeamModuleAssembler::emit_handle_error(const ErtsCodeMFA *exp) {
- mov_imm(ARG4, (Uint)exp);
- safe_fragment_call(ga->get_handle_error_shared_prologue());
+void BeamModuleAssembler::emit_raise_exception(const ErtsCodeMFA *exp) {
+ mov_imm(ARG4, exp);
+ safe_fragment_call(ga->get_raise_exception());
/*
* It is important that error address is not equal to a line
@@ -244,44 +243,81 @@ void BeamModuleAssembler::emit_handle_error(const ErtsCodeMFA *exp) {
last_error_offset = getOffset() & -8;
}
-void BeamModuleAssembler::emit_handle_error(Label I, const ErtsCodeMFA *exp) {
+void BeamModuleAssembler::emit_raise_exception(Label I,
+ const ErtsCodeMFA *exp) {
a.lea(ARG2, x86::qword_ptr(I));
- mov_imm(ARG4, (Uint)exp);
+ emit_raise_exception(ARG2, exp);
+}
+
+void BeamModuleAssembler::emit_raise_exception(x86::Gp I,
+ const ErtsCodeMFA *exp) {
+ if (I != ARG2) {
+ a.mov(ARG2, I);
+ }
+
+ mov_imm(ARG4, exp);
#ifdef NATIVE_ERLANG_STACK
/* The CP must be reserved for try/catch to work, so we'll fake a call with
* the return address set to the error address. */
a.push(ARG2);
+
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+# ifdef ERLANG_FRAME_POINTERS
+ a.push(frame_pointer);
+# endif
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_RA);
+ }
#endif
- abs_jmp(ga->get_handle_error_shared());
+ abs_jmp(ga->get_raise_exception_shared());
}
-/* This is an alias for handle_error */
-void BeamGlobalAssembler::emit_error_action_code() {
+void BeamGlobalAssembler::emit_process_exit() {
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
mov_imm(ARG2, 0);
mov_imm(ARG4, 0);
+ load_x_reg_array(ARG3);
+ runtime_call<4>(handle_error);
- a.jmp(labels[handle_error_shared]);
+ emit_leave_runtime();
+
+ a.test(RET, RET);
+ a.je(labels[do_schedule]);
+ a.comment("# End of process");
+ a.ud2();
}
-void BeamGlobalAssembler::emit_handle_error_shared_prologue() {
- /*
- * We must align the return address to make it a proper tagged CP.
- * This is safe because we will never actually return to the
- * return address.
- */
+/* Helper function for throwing exceptions from global fragments.
+ *
+ * Assumes that the next item on the _machine stack_ is a return address: we
+ * must not jump here while in a frame. */
+void BeamGlobalAssembler::emit_raise_exception() {
+ /* We must align the return address to make it a proper tagged CP, in case
+ * we were called with `safe_fragment_call`. This is safe because we will
+ * never actually return to the return address. */
a.pop(ARG2);
a.and_(ARG2, imm(-8));
#ifdef NATIVE_ERLANG_STACK
a.push(ARG2);
+
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+# ifdef ERLANG_FRAME_POINTERS
+ a.push(frame_pointer);
+# endif
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_RA);
+ }
#endif
- a.jmp(labels[handle_error_shared]);
+ a.jmp(labels[raise_exception_shared]);
}
-void BeamGlobalAssembler::emit_handle_error_shared() {
+void BeamGlobalAssembler::emit_raise_exception_shared() {
Label crash = a.newLabel();
emit_enter_runtime<Update::eStack | Update::eHeap>();
@@ -303,6 +339,7 @@ void BeamGlobalAssembler::emit_handle_error_shared() {
a.jmp(RET);
a.bind(crash);
+ a.comment("# Error address is not a CP or NULL or ARG2 and ARG4 are unset");
a.ud2();
}
diff --git a/erts/emulator/beam/jit/x86/beam_asm_module.cpp b/erts/emulator/beam/jit/x86/beam_asm_module.cpp
index 0da710d878..5627b44603 100644
--- a/erts/emulator/beam/jit/x86/beam_asm_module.cpp
+++ b/erts/emulator/beam/jit/x86/beam_asm_module.cpp
@@ -67,33 +67,71 @@ extern "C" void beamasm_dump_sizes() {
}
#endif
+ErtsCodePtr BeamModuleAssembler::getCode(BeamLabel label) {
+ ASSERT(label < labels.size() + 1);
+ return (ErtsCodePtr)getCode(labels[label]);
+}
+
+ErtsCodePtr BeamModuleAssembler::getLambda(unsigned index) {
+ const auto &lambda = lambdas[index];
+ return (ErtsCodePtr)getCode(lambda.trampoline);
+}
+
BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
Eterm mod,
- unsigned num_labels)
+ unsigned num_labels,
+ BeamFile_ExportTable *named_labels)
: BeamAssembler(getAtom(mod)) {
this->ga = ga;
this->mod = mod;
labels.reserve(num_labels + 1);
- for (unsigned i = 1; i < num_labels; i++) {
- Label lbl;
-
-#ifdef DEBUG
- std::string lblName = "label_" + std::to_string(i);
- lbl = a.newNamedLabel(lblName.data());
-#else
- lbl = a.newLabel();
-#endif
- labels[i] = lbl;
+ if (erts_jit_asm_dump && named_labels) {
+ BeamFile_ExportEntry *e = &named_labels->entries[0];
+ for (unsigned i = 1; i < num_labels; i++) {
+ Label lbl;
+ char tmp[512]; // Large enough to hold most realistic
+ // function names. We will truncate too
+ // long names, but as the label name is not
+ // important for the functioning of asmjit
+ // and this functionality is probably only
+ // used by developers, we don't bother with
+ // dynamic allocation.
+ // The named_labels are sorted, so no need for a search.
+ if ((unsigned)e->label == i) {
+ erts_snprintf(tmp, sizeof(tmp), "%T/%d", e->function, e->arity);
+ lbl = a.newNamedLabel(tmp);
+ e++;
+ } else {
+ std::string lblName = "label_" + std::to_string(i);
+ lbl = a.newNamedLabel(lblName.data());
+ }
+ labels[i] = lbl;
+ }
+ return;
+ }
+ if (erts_jit_asm_dump) {
+ // There is no naming info, but dumping of the assembly code
+ // has been requested, so do the best we can and number the
+ // labels.
+ for (unsigned i = 1; i < num_labels; i++) {
+ std::string lblName = "label_" + std::to_string(i);
+ labels[i] = a.newNamedLabel(lblName.data());
+ }
+ return;
}
+ // No output is requested, go with unnamed labels
+ for (unsigned i = 1; i < num_labels; i++)
+ labels[i] = a.newLabel();
}
BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
Eterm mod,
unsigned num_labels,
- unsigned num_functions)
- : BeamModuleAssembler(ga, mod, num_labels) {
+ unsigned num_functions,
+ BeamFile_ExportTable *named_labels)
+ : BeamModuleAssembler(ga, mod, num_labels, named_labels) {
codeHeader = a.newLabel();
a.align(kAlignCode, 8);
a.bind(codeHeader);
@@ -101,18 +139,6 @@ BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
embed_zeros(sizeof(BeamCodeHeader) +
sizeof(ErtsCodeInfo *) * num_functions);
- floatMax = a.newLabel();
- a.align(kAlignCode, 8);
- a.bind(floatMax);
- double max = DBL_MAX;
- a.embed((char *)&max, sizeof(double));
-
- floatSignMask = a.newLabel();
- a.align(kAlignCode, 16); /* 128-bit aligned */
- a.bind(floatSignMask);
- uint64_t signMask = 0x7FFFFFFFFFFFFFFFul;
- a.embed((char *)&signMask, sizeof(double));
-
/* Shared trampoline for function_clause errors, which can't jump straight
* to `i_func_info_shared` due to size restrictions. */
funcInfo = a.newLabel();
@@ -121,11 +147,17 @@ BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
abs_jmp(ga->get_i_func_info_shared());
/* Shared trampoline for yielding on function ingress. */
- funcYield = a.newLabel();
+ yieldEnter = a.newLabel();
a.align(kAlignCode, 8);
- a.bind(funcYield);
+ a.bind(yieldEnter);
abs_jmp(ga->get_i_test_yield_shared());
+ /* Shared trampoline for yielding on function return. */
+ yieldReturn = a.newLabel();
+ a.align(kAlignCode, 8);
+ a.bind(yieldReturn);
+ abs_jmp(ga->get_dispatch_return());
+
/* Setup the early_nif/breakpoint trampoline. */
genericBPTramp = a.newLabel();
a.align(kAlignCode, 16);
@@ -134,9 +166,11 @@ BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
a.ret();
a.align(kAlignCode, 16);
+ ASSERT(a.offset() - code.labelOffsetFromBase(genericBPTramp) == 16 * 1);
abs_jmp(ga->get_call_nif_early());
a.align(kAlignCode, 16);
+ ASSERT(a.offset() - code.labelOffsetFromBase(genericBPTramp) == 16 * 2);
aligned_call(ga->get_generic_bp_local());
a.ret();
@@ -147,47 +181,7 @@ BeamModuleAssembler::BeamModuleAssembler(BeamGlobalAssembler *ga,
}
}
-ErtsCodePtr BeamModuleAssembler::getCode(unsigned label) {
- ASSERT(label < labels.size() + 1);
- return (ErtsCodePtr)getCode(labels[label]);
-}
-
-void BeamAssembler::embed_rodata(const char *labelName,
- const char *buff,
- size_t size) {
- Label label = a.newNamedLabel(labelName);
-
- a.section(rodata);
- a.bind(label);
- a.embed(buff, size);
- a.section(code.textSection());
-}
-
-void BeamAssembler::embed_bss(const char *labelName, size_t size) {
- Label label = a.newNamedLabel(labelName);
-
- /* Reuse rodata section for now */
- a.section(rodata);
- a.bind(label);
- embed_zeros(size);
- a.section(code.textSection());
-}
-
-void BeamAssembler::embed_zeros(size_t size) {
- static constexpr size_t buf_size = 16384;
- static const char zeros[buf_size] = {};
-
- while (size >= buf_size) {
- a.embed(zeros, buf_size);
- size -= buf_size;
- }
-
- if (size > 0) {
- a.embed(zeros, size);
- }
-}
-
-Label BeamModuleAssembler::embed_vararg_rodata(const std::vector<ArgVal> &args,
+Label BeamModuleAssembler::embed_vararg_rodata(const Span<ArgVal> &args,
int y_offset) {
Label label = a.newLabel();
@@ -206,27 +200,27 @@ Label BeamModuleAssembler::embed_vararg_rodata(const std::vector<ArgVal> &args,
a.align(kAlignData, 8);
switch (arg.getType()) {
- case TAG_x:
+ case ArgVal::XReg:
data.as_beam = make_loader_x_reg(arg.getValue());
a.embed(&data.as_char, sizeof(data.as_beam));
break;
- case TAG_y:
+ case ArgVal::YReg:
data.as_beam = make_loader_y_reg(arg.getValue() + y_offset);
a.embed(&data.as_char, sizeof(data.as_beam));
break;
- case TAG_q:
+ case ArgVal::Literal:
make_word_patch(literals[arg.getValue()].patches);
break;
- case TAG_f:
+ case ArgVal::Label:
a.embedLabel(labels[arg.getValue()]);
break;
- case TAG_i:
- case TAG_u:
- /* Tagged immediate or untagged word. */
+ case ArgVal::Immediate:
+ case ArgVal::Word:
data.as_beam = arg.getValue();
a.embed(&data.as_char, sizeof(data.as_beam));
break;
default:
+ erts_fprintf(stderr, "tag: %li\n", arg.getType());
ERTS_ASSERT(!"error");
}
}
@@ -236,10 +230,6 @@ Label BeamModuleAssembler::embed_vararg_rodata(const std::vector<ArgVal> &args,
return label;
}
-static void i_emit_nyi(char *msg) {
- erts_exit(ERTS_ERROR_EXIT, "NYI: %s\n", msg);
-}
-
void BeamModuleAssembler::emit_i_nif_padding() {
const size_t minimum_size = sizeof(UWord[BEAM_NATIVE_MIN_FUNC_SZ]);
size_t prev_func_start, diff;
@@ -257,14 +247,13 @@ void BeamModuleAssembler::emit_i_breakpoint_trampoline() {
* alternative instructions. The call is filled with a relative call to a
* trampoline in the module header and then the jmp target is zeroed so that
* it effectively becomes a nop */
- byte flag = ERTS_ASM_BP_FLAG_NONE;
Label next = a.newLabel();
a.short_().jmp(next);
/* We embed a zero byte here, which is used to flag whether to make an early
* nif call, call a breakpoint handler, or both. */
- a.embed(&flag, sizeof(flag));
+ a.embedUInt8(ERTS_ASM_BP_FLAG_NONE);
if (genericBPTramp.isValid()) {
a.call(genericBPTramp);
@@ -280,6 +269,10 @@ void BeamModuleAssembler::emit_i_breakpoint_trampoline() {
BEAM_ASM_FUNC_PROLOGUE_SIZE);
}
+static void i_emit_nyi(char *msg) {
+ erts_exit(ERTS_ERROR_EXIT, "NYI: %s\n", msg);
+}
+
void BeamModuleAssembler::emit_nyi(const char *msg) {
emit_enter_runtime();
@@ -293,8 +286,7 @@ void BeamModuleAssembler::emit_nyi() {
emit_nyi("<unspecified>");
}
-bool BeamModuleAssembler::emit(unsigned specific_op,
- const std::vector<ArgVal> &args) {
+bool BeamModuleAssembler::emit(unsigned specific_op, const Span<ArgVal> &args) {
comment(opc[specific_op].name);
#ifdef BEAMASM_DUMP_SIZES
@@ -347,7 +339,10 @@ void BeamGlobalAssembler::emit_i_func_info_shared() {
a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)), EXC_FUNCTION_CLAUSE);
a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), ARG1);
- a.jmp(labels[error_action_code]);
+
+ mov_imm(ARG2, 0);
+ mov_imm(ARG4, 0);
+ a.jmp(labels[raise_exception_shared]);
}
void BeamModuleAssembler::emit_i_func_info(const ArgVal &Label,
@@ -390,7 +385,7 @@ void BeamModuleAssembler::emit_label(const ArgVal &Label) {
void BeamModuleAssembler::emit_aligned_label(const ArgVal &Label,
const ArgVal &Alignment) {
- ASSERT(Alignment.getType() == ArgVal::u);
+ ASSERT(Alignment.isWord());
a.align(kAlignCode, Alignment.getValue());
emit_label(Label);
}
@@ -401,8 +396,8 @@ void BeamModuleAssembler::emit_on_load() {
void BeamModuleAssembler::emit_int_code_end() {
/* This label is used to figure out the end of the last function */
- labels[labels.size() + 1] = a.newLabel();
- a.bind(labels[labels.size()]);
+ code_end = a.newLabel();
+ a.bind(code_end);
emit_nyi("int_code_end");
}
@@ -442,129 +437,6 @@ void BeamModuleAssembler::emit_call_error_handler() {
emit_nyi("call_error_handler should never be called");
}
-void BeamModuleAssembler::codegen(JitAllocator *allocator,
- const void **executable_ptr,
- void **writable_ptr,
- const BeamCodeHeader *in_hdr,
- const BeamCodeHeader **out_exec_hdr,
- BeamCodeHeader **out_rw_hdr) {
- const BeamCodeHeader *code_hdr_exec;
- BeamCodeHeader *code_hdr_rw;
-
- codegen(allocator, executable_ptr, writable_ptr);
-
- {
- auto offset = code.labelOffsetFromBase(codeHeader);
-
- auto base_exec = (const char *)(*executable_ptr);
- code_hdr_exec = (const BeamCodeHeader *)&base_exec[offset];
-
- auto base_rw = (const char *)(*writable_ptr);
- code_hdr_rw = (BeamCodeHeader *)&base_rw[offset];
- }
-
- sys_memcpy(code_hdr_rw, in_hdr, sizeof(BeamCodeHeader));
- code_hdr_rw->on_load = getOnLoad();
-
- for (unsigned i = 0; i < functions.size(); i++) {
- ErtsCodeInfo *ci = (ErtsCodeInfo *)getCode(functions[i]);
- code_hdr_rw->functions[i] = ci;
- }
-
- char *module_end = (char *)code.baseAddress() + a.offset();
- code_hdr_rw->functions[functions.size()] = (ErtsCodeInfo *)module_end;
-
- *out_exec_hdr = code_hdr_exec;
- *out_rw_hdr = code_hdr_rw;
-}
-
-void BeamModuleAssembler::codegen(JitAllocator *allocator,
- const void **executable_ptr,
- void **writable_ptr) {
- _codegen(allocator, executable_ptr, writable_ptr);
-
-#ifndef WIN32
- if (functions.size()) {
- char *buff = (char *)erts_alloc(ERTS_ALC_T_TMP, 1024);
- std::vector<AsmRange> ranges;
- std::string name = getAtom(mod);
- ranges.reserve(functions.size() + 2);
-
- /* Push info about the header */
- ranges.push_back({.start = (ErtsCodePtr)getBaseAddress(),
- .stop = getCode(functions[0]),
- .name = name + "::codeHeader"});
-
- for (unsigned i = 0; i < functions.size(); i++) {
- ErtsCodePtr start, stop;
- const ErtsCodeInfo *ci;
- int n;
-
- start = getCode(functions[i]);
- ci = (const ErtsCodeInfo *)start;
-
- n = erts_snprintf(buff,
- 1024,
- "%T:%T/%d",
- ci->mfa.module,
- ci->mfa.function,
- ci->mfa.arity);
- stop = ((const char *)erts_codeinfo_to_code(ci)) +
- BEAM_ASM_FUNC_PROLOGUE_SIZE;
-
- /* We use a different symbol for CodeInfo and the Prologue
- in order for the perf disassembly to be better. */
- std::string name(buff, n);
- ranges.push_back({.start = start,
- .stop = stop,
- .name = name + "-CodeInfoPrologue"});
-
- /* The actual code */
- start = stop;
- if (i + 1 < functions.size()) {
- stop = getCode(functions[i + 1]);
- } else {
- stop = getCode(labels.size());
- }
-
- ranges.push_back({.start = start, .stop = stop, .name = name});
- }
-
- /* Push info about the footer */
- ranges.push_back(
- {.start = ranges.back().stop,
- .stop = (ErtsCodePtr)(code.baseAddress() + code.codeSize()),
- .name = name + "::codeFooter"});
-
- update_gdb_jit_info(name, ranges);
- beamasm_update_perf_info(name, ranges);
- erts_free(ERTS_ALC_T_TMP, buff);
- }
-#endif
-}
-
-void BeamModuleAssembler::codegen(char *buff, size_t len) {
- code.flatten();
- code.resolveUnresolvedLinks();
- ERTS_ASSERT(code.codeSize() <= len);
- code.relocateToBase((uint64_t)buff);
- code.copyFlattenedData(buff,
- code.codeSize(),
- CodeHolder::kCopyPadSectionBuffer);
-}
-
-BeamCodeHeader *BeamModuleAssembler::getCodeHeader() {
- return (BeamCodeHeader *)getCode(codeHeader);
-}
-
-const ErtsCodeInfo *BeamModuleAssembler::getOnLoad() {
- if (on_load.isValid()) {
- return erts_code_to_codeinfo((ErtsCodePtr)getCode(on_load));
- } else {
- return 0;
- }
-}
-
unsigned BeamModuleAssembler::patchCatches(char *rw_base) {
unsigned catch_no = BEAM_CATCHES_NIL;
diff --git a/erts/emulator/beam/jit/x86/generators.tab b/erts/emulator/beam/jit/x86/generators.tab
index ab755fde4c..8763e34a47 100644
--- a/erts/emulator/beam/jit/x86/generators.tab
+++ b/erts/emulator/beam/jit/x86/generators.tab
@@ -516,3 +516,50 @@ gen.allocate_heap_zero(Ns, Nh, Live) {
return alloc;
}
+
+gen.func_end(Func_Label, Entry_Label) {
+ BeamOp *op = NULL;
+
+ if (S->labels[Entry_Label.val].lambda_index != -1) {
+ int index = S->labels[Entry_Label.val].lambda_index;
+ BeamFile_LambdaEntry *lambda_entry;
+ BeamOp *lambda;
+
+ lambda_entry = &S->beam.lambdas.entries[index];
+
+ $NewBeamOp(S, lambda);
+ $BeamOpNameArity(lambda, i_lambda_trampoline, 4);
+
+ lambda->a[0].type = TAG_u;
+ lambda->a[0].val = index;
+ lambda->a[1] = Entry_Label;
+ lambda->a[2].type = TAG_u;
+ lambda->a[2].val = lambda_entry->arity;
+ lambda->a[3].type = TAG_u;
+ lambda->a[3].val = lambda_entry->num_free;
+
+ lambda->next = op;
+ op = lambda;
+ }
+
+ if (S->may_load_nif) {
+ BeamOp *padding;
+
+ $NewBeamOp(S, padding);
+ $BeamOpNameArity(padding, i_nif_padding, 0);
+
+ padding->next = op;
+ op = padding;
+ }
+
+ if (op == NULL) {
+ /* Workaround for the fact that we have to return an instruction from
+ * generators. The loader will remove this dummy instruction. */
+ $NewBeamOp(S, op);
+ $BeamOpNameArity(op, delete_me, 0);
+
+ op->next = NULL;
+ }
+
+ return op;
+}
diff --git a/erts/emulator/beam/jit/x86/instr_arith.cpp b/erts/emulator/beam/jit/x86/instr_arith.cpp
index 5615230551..f163f48915 100644
--- a/erts/emulator/beam/jit/x86/instr_arith.cpp
+++ b/erts/emulator/beam/jit/x86/instr_arith.cpp
@@ -30,14 +30,6 @@ extern "C"
#include "erl_bif_table.h"
}
-void BeamModuleAssembler::emit_bif_arg_error(std::vector<ArgVal> args,
- const ErtsCodeMFA *mfa) {
- comment("handle_error");
- for (unsigned i = 0; i < args.size(); i++)
- mov_arg(ArgVal(ArgVal::x, i), args[i]);
- emit_handle_error(mfa);
-}
-
void BeamModuleAssembler::emit_is_small(Label fail, x86::Gp Reg) {
ASSERT(ARG1 != Reg);
@@ -69,6 +61,7 @@ void BeamModuleAssembler::emit_is_both_small(Label fail, x86::Gp A, x86::Gp B) {
void BeamGlobalAssembler::emit_increment_body_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
emit_enter_runtime();
a.mov(ARG1, c_p);
@@ -76,16 +69,16 @@ void BeamGlobalAssembler::emit_increment_body_shared() {
runtime_call<3>(erts_mixed_plus);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(error);
-
a.ret();
a.bind(error);
{
mov_imm(ARG4, 0);
- emit_handle_error_shared_prologue();
+ a.jmp(labels[raise_exception]);
}
}
@@ -120,6 +113,7 @@ void BeamGlobalAssembler::emit_plus_body_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
emit_enter_runtime();
/* Save original arguments for the error path. */
@@ -130,10 +124,10 @@ void BeamGlobalAssembler::emit_plus_body_shared() {
runtime_call<3>(erts_mixed_plus);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(error);
-
a.ret();
a.bind(error);
@@ -145,11 +139,12 @@ void BeamGlobalAssembler::emit_plus_body_shared() {
a.mov(getXRef(1), ARG2);
a.mov(ARG4, imm(&bif_mfa));
- emit_handle_error_shared_prologue();
+ a.jmp(labels[raise_exception]);
}
}
void BeamGlobalAssembler::emit_plus_guard_shared() {
+ emit_enter_frame();
emit_enter_runtime();
a.mov(ARG1, c_p);
@@ -157,6 +152,7 @@ void BeamGlobalAssembler::emit_plus_guard_shared() {
runtime_call<3>(erts_mixed_plus);
emit_leave_runtime();
+ emit_leave_frame();
/* Set ZF if the addition failed. */
emit_test_the_non_value(RET);
@@ -200,6 +196,7 @@ void BeamGlobalAssembler::emit_minus_body_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
emit_enter_runtime();
/* Save original arguments for the error path. */
@@ -210,10 +207,10 @@ void BeamGlobalAssembler::emit_minus_body_shared() {
runtime_call<3>(erts_mixed_minus);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(error);
-
a.ret();
a.bind(error);
@@ -225,11 +222,12 @@ void BeamGlobalAssembler::emit_minus_body_shared() {
a.mov(getXRef(1), ARG2);
a.mov(ARG4, imm(&bif_mfa));
- emit_handle_error_shared_prologue();
+ a.jmp(labels[raise_exception]);
}
}
void BeamGlobalAssembler::emit_minus_guard_shared() {
+ emit_enter_frame();
emit_enter_runtime();
a.mov(ARG1, c_p);
@@ -237,6 +235,7 @@ void BeamGlobalAssembler::emit_minus_guard_shared() {
runtime_call<3>(erts_mixed_minus);
emit_leave_runtime();
+ emit_leave_frame();
/* Set ZF if the addition failed. */
emit_test_the_non_value(RET);
@@ -288,6 +287,7 @@ void BeamGlobalAssembler::emit_unary_minus_body_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
emit_enter_runtime();
/* Save original arguments for the error path. */
@@ -297,10 +297,10 @@ void BeamGlobalAssembler::emit_unary_minus_body_shared() {
runtime_call<2>(erts_unary_minus);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(error);
-
a.ret();
a.bind(error);
@@ -310,11 +310,12 @@ void BeamGlobalAssembler::emit_unary_minus_body_shared() {
a.mov(getXRef(0), ARG1);
a.mov(ARG4, imm(&bif_mfa));
- emit_handle_error_shared_prologue();
+ a.jmp(labels[raise_exception]);
}
}
void BeamGlobalAssembler::emit_unary_minus_guard_shared() {
+ emit_enter_frame();
emit_enter_runtime();
a.mov(ARG1, c_p);
@@ -322,6 +323,7 @@ void BeamGlobalAssembler::emit_unary_minus_guard_shared() {
runtime_call<2>(erts_unary_minus);
emit_leave_runtime();
+ emit_leave_frame();
/* Set ZF if the negation failed. */
emit_test_the_non_value(RET);
@@ -368,6 +370,8 @@ void BeamModuleAssembler::emit_i_unary_minus(const ArgVal &Src,
void BeamGlobalAssembler::emit_int_div_rem_guard_shared() {
Label exit = a.newLabel(), generic = a.newLabel();
+ emit_enter_frame();
+
a.cmp(ARG4, imm(SMALL_ZERO));
a.je(exit);
@@ -431,7 +435,10 @@ void BeamGlobalAssembler::emit_int_div_rem_guard_shared() {
/* Return with a potential error in ZF. It will be set if we came here from
* the guard against SMALL_ZERO or if we're returning THE_NON_VALUE. */
a.bind(exit);
- a.ret();
+ {
+ emit_leave_frame();
+ a.ret();
+ }
}
/* ARG1 = LHS, ARG4 (!) = RHS, ARG5 = error MFA
@@ -442,7 +449,9 @@ void BeamGlobalAssembler::emit_int_div_rem_guard_shared() {
* Quotient is returned in RAX, remainder in RDX. */
void BeamGlobalAssembler::emit_int_div_rem_body_shared() {
Label div_zero = a.newLabel(), generic_div = a.newLabel(),
- generic_error = a.newLabel(), error = a.newLabel();
+ generic_error = a.newLabel();
+
+ emit_enter_frame();
a.cmp(ARG4, imm(SMALL_ZERO));
a.je(div_zero);
@@ -478,6 +487,7 @@ void BeamGlobalAssembler::emit_int_div_rem_body_shared() {
a.cmp(ARG6, imm(1));
a.short_().jge(generic_div);
+ emit_leave_frame();
a.ret();
a.bind(generic_div);
@@ -497,6 +507,7 @@ void BeamGlobalAssembler::emit_int_div_rem_body_shared() {
runtime_call<5>(erts_int_div_rem);
emit_leave_runtime();
+ emit_leave_frame();
a.test(RET, RET);
@@ -510,6 +521,8 @@ void BeamGlobalAssembler::emit_int_div_rem_body_shared() {
a.bind(div_zero);
{
+ emit_leave_frame();
+
/* Set up a badarith exception and place the original arguments in
* x-registers. */
a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)),
@@ -519,7 +532,7 @@ void BeamGlobalAssembler::emit_int_div_rem_body_shared() {
a.mov(getXRef(1), ARG4);
a.mov(ARG4, ARG5);
- a.short_().jmp(error);
+ a.jmp(labels[raise_exception]);
}
a.bind(generic_error);
@@ -532,12 +545,8 @@ void BeamGlobalAssembler::emit_int_div_rem_body_shared() {
/* Read saved MFA. */
a.mov(ARG4, TMP_MEM3q);
-
- /* Fall through to `error` */
+ a.jmp(labels[raise_exception]);
}
-
- a.bind(error);
- emit_handle_error_shared_prologue();
}
void BeamModuleAssembler::emit_div_rem(const ArgVal &Fail,
@@ -631,106 +640,61 @@ void BeamModuleAssembler::emit_i_m_div(const ArgVal &Fail,
a.je(labels[Fail.getValue()]);
} else {
a.short_().jne(next);
- emit_bif_arg_error({LHS, RHS}, &bif_mfa);
+
+ mov_arg(ARG2, LHS);
+ mov_arg(ARG3, RHS);
+ mov_arg(ArgVal(ArgVal::XReg, 0), ARG2);
+ mov_arg(ArgVal(ArgVal::XReg, 1), ARG3);
+
+ emit_raise_exception(&bif_mfa);
}
a.bind(next);
mov_arg(Dst, RET);
}
-/* ARG1 = LHS, ARG4 (!) = RHS
- *
- * We avoid using ARG2 and ARG3 because multiplication clobbers RDX, which is
- * ARG2 on Windows and ARG3 on SystemV.
+/* ARG2 = LHS, ARG3 (!) = RHS
*
* Result is returned in RET, error is indicated by ZF. */
void BeamGlobalAssembler::emit_times_guard_shared() {
- Label generic = a.newLabel();
+ emit_enter_frame();
+ emit_enter_runtime();
- /* Are both smalls? */
- a.mov(ARG2d, ARG1d);
- a.and_(ARG2d, ARG4d);
- a.and_(ARG2d, imm(_TAG_IMMED1_MASK));
- a.cmp(ARG2d, imm(_TAG_IMMED1_SMALL));
- a.short_().jne(generic);
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_times);
- a.mov(RET, ARG1);
- a.mov(ARG2, ARG4);
- a.and_(RET, imm(~_TAG_IMMED1_MASK));
- a.sar(ARG2, imm(_TAG_IMMED1_SIZE));
- a.imul(RET, ARG2); /* Clobbers RDX */
- a.short_().jo(generic);
+ emit_leave_runtime();
+ emit_leave_frame();
- a.or_(RET, imm(_TAG_IMMED1_SMALL)); /* Always sets ZF to false */
+ emit_test_the_non_value(RET); /* Sets ZF for use in caller */
a.ret();
-
- a.bind(generic);
- {
- emit_enter_runtime();
-
- a.mov(ARG2, ARG1);
- a.mov(ARG3, ARG4);
- a.mov(ARG1, c_p);
- runtime_call<3>(erts_mixed_times);
-
- emit_leave_runtime();
-
- emit_test_the_non_value(RET); /* Sets ZF for use in caller */
-
- a.ret();
- }
}
-/* ARG1 = LHS, ARG4 (!) = RHS
- *
- * We avoid using ARG2 and ARG3 because multiplication clobbers RDX, which is
- * ARG2 on Windows and ARG3 on SystemV.
+/* ARG2 = LHS, ARG3 (!) = RHS
*
* Result is returned in RET. */
void BeamGlobalAssembler::emit_times_body_shared() {
static const ErtsCodeMFA bif_mfa = {am_erlang, am_Times, 2};
- Label generic = a.newLabel(), error = a.newLabel();
-
- /* Are both smalls? */
- a.mov(ARG2d, ARG1d);
- a.and_(ARG2d, ARG4d);
- a.and_(ARG2d, imm(_TAG_IMMED1_MASK));
- a.cmp(ARG2, imm(_TAG_IMMED1_SMALL));
- a.jne(generic);
-
- a.mov(RET, ARG1);
- a.mov(ARG2, ARG4);
- a.and_(RET, imm(~_TAG_IMMED1_MASK));
- a.sar(ARG2, imm(_TAG_IMMED1_SIZE));
- a.imul(RET, ARG2); /* Clobbers RDX */
- a.short_().jo(generic);
-
- a.or_(RET, imm(_TAG_IMMED1_SMALL));
-
- a.ret();
-
- a.bind(generic);
- {
- emit_enter_runtime();
+ Label error = a.newLabel();
- /* Save original arguments for the error path. */
- a.mov(TMP_MEM1q, ARG1);
- a.mov(TMP_MEM2q, ARG4);
+ emit_enter_frame();
+ emit_enter_runtime();
- a.mov(ARG2, ARG1);
- a.mov(ARG3, ARG4);
- a.mov(ARG1, c_p);
- runtime_call<3>(erts_mixed_times);
+ /* Save original arguments for the error path. */
+ a.mov(TMP_MEM1q, ARG2);
+ a.mov(TMP_MEM2q, ARG3);
- emit_leave_runtime();
+ a.mov(ARG1, c_p);
+ runtime_call<3>(erts_mixed_times);
- emit_test_the_non_value(RET);
- a.short_().je(error);
+ emit_leave_runtime();
+ emit_leave_frame();
- a.ret();
- }
+ emit_test_the_non_value(RET);
+ a.short_().je(error);
+ a.ret();
a.bind(error);
{
@@ -741,7 +705,7 @@ void BeamGlobalAssembler::emit_times_body_shared() {
a.mov(getXRef(1), ARG2);
a.mov(ARG4, imm(&bif_mfa));
- emit_handle_error_shared_prologue();
+ a.jmp(labels[raise_exception]);
}
}
@@ -749,18 +713,49 @@ void BeamModuleAssembler::emit_i_times(const ArgVal &Fail,
const ArgVal &LHS,
const ArgVal &RHS,
const ArgVal &Dst) {
- mov_arg(ARG4, RHS); /* Done first as mov_arg may clobber ARG1 */
- mov_arg(ARG1, LHS);
+ Label next = a.newLabel(), mixed = a.newLabel();
- /* TODO: Specialize multiplication with immediates, either here or in the
- * compiler. */
- if (Fail.getValue() != 0) {
- safe_fragment_call(ga->get_times_guard_shared());
- a.je(labels[Fail.getValue()]);
+ mov_arg(ARG2, LHS); /* Used by erts_mixed_times in this slot */
+ mov_arg(ARG3, RHS); /* Used by erts_mixed_times in this slot */
+
+ if (RHS.isImmed() && is_small(RHS.getValue())) {
+ Sint val = signed_val(RHS.getValue());
+ emit_is_small(mixed, ARG2);
+ comment("mul with overflow check, imm RHS");
+ a.mov(RET, ARG2);
+ a.mov(ARG4, imm(val));
+ } else if (LHS.isImmed() && is_small(LHS.getValue())) {
+ Sint val = signed_val(LHS.getValue());
+ emit_is_small(mixed, ARG3);
+ comment("mul with overflow check, imm LHS");
+ a.mov(RET, ARG3);
+ a.mov(ARG4, imm(val));
} else {
- safe_fragment_call(ga->get_times_body_shared());
+ emit_is_both_small(mixed, ARG2, ARG3);
+ comment("mul with overflow check");
+ a.mov(RET, ARG2);
+ a.mov(ARG4, ARG3);
+ a.sar(ARG4, imm(_TAG_IMMED1_SIZE));
+ }
+
+ a.and_(RET, imm(~_TAG_IMMED1_MASK));
+ a.imul(RET, ARG4);
+ a.short_().jo(mixed);
+ a.or_(RET, imm(_TAG_IMMED1_SMALL));
+ a.short_().jmp(next);
+
+ /* Call mixed multiplication. */
+ a.bind(mixed);
+ {
+ if (Fail.getValue() != 0) {
+ safe_fragment_call(ga->get_times_guard_shared());
+ a.je(labels[Fail.getValue()]);
+ } else {
+ safe_fragment_call(ga->get_times_body_shared());
+ }
}
+ a.bind(next);
mov_arg(Dst, RET);
}
@@ -769,6 +764,7 @@ void BeamModuleAssembler::emit_i_times(const ArgVal &Fail,
* Result is returned in RET. Error is indicated by ZF. */
template<typename T>
void BeamGlobalAssembler::emit_bitwise_fallback_guard(T(*func_ptr)) {
+ emit_enter_frame();
emit_enter_runtime();
a.mov(ARG1, c_p);
@@ -777,6 +773,7 @@ void BeamGlobalAssembler::emit_bitwise_fallback_guard(T(*func_ptr)) {
runtime_call<3>(func_ptr);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.ret();
@@ -790,6 +787,7 @@ void BeamGlobalAssembler::emit_bitwise_fallback_body(T(*func_ptr),
const ErtsCodeMFA *mfa) {
Label error = a.newLabel();
+ emit_enter_frame();
emit_enter_runtime();
/* Save original arguments for the error path. */
@@ -802,10 +800,10 @@ void BeamGlobalAssembler::emit_bitwise_fallback_body(T(*func_ptr),
runtime_call<3>(func_ptr);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(error);
-
a.ret();
a.bind(error);
@@ -817,7 +815,7 @@ void BeamGlobalAssembler::emit_bitwise_fallback_body(T(*func_ptr),
a.mov(getXRef(1), ARG2);
a.mov(ARG4, imm(mfa));
- emit_handle_error_shared_prologue();
+ a.jmp(labels[raise_exception]);
}
}
@@ -964,6 +962,8 @@ void BeamModuleAssembler::emit_i_bxor(const ArgVal &Fail,
*
* Result is returned in RET. Error is indicated by ZF. */
void BeamGlobalAssembler::emit_i_bnot_guard_shared() {
+ emit_enter_frame();
+
/* Undo the speculative inversion in module code */
a.xor_(RET, imm(~_TAG_IMMED1_MASK));
@@ -974,6 +974,7 @@ void BeamGlobalAssembler::emit_i_bnot_guard_shared() {
runtime_call<2>(erts_bnot);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.ret();
@@ -987,6 +988,8 @@ void BeamGlobalAssembler::emit_i_bnot_body_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
+
/* Undo the speculative inversion in module code */
a.xor_(RET, imm(~_TAG_IMMED1_MASK));
@@ -1000,10 +1003,10 @@ void BeamGlobalAssembler::emit_i_bnot_body_shared() {
runtime_call<2>(erts_bnot);
emit_leave_runtime();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(error);
-
a.ret();
a.bind(error);
@@ -1013,7 +1016,7 @@ void BeamGlobalAssembler::emit_i_bnot_body_shared() {
a.mov(getXRef(0), ARG1);
a.mov(ARG4, imm(&bif_mfa));
- emit_handle_error_shared_prologue();
+ a.jmp(labels[raise_exception]);
}
}
@@ -1127,15 +1130,7 @@ static int count_leading_zeroes(UWord value) {
return word_bits;
}
- UWord mask = UWORD_CONSTANT(1) << (word_bits - 1);
- int count = 0;
-
- while ((value & mask) == 0) {
- mask >>= 1;
- count++;
- }
-
- return count;
+ return Support::clz(value);
}
void BeamModuleAssembler::emit_i_bsl(const ArgVal &LHS,
@@ -1170,7 +1165,7 @@ void BeamModuleAssembler::emit_i_bsl(const ArgVal &LHS,
ASSERT(!(LHS.isImmed() && RHS.isImmed()));
- if (LHS.isMem()) {
+ if (LHS.isRegister()) {
a.mov(ARG1, ARG2);
a.mov(ARG3, ARG2);
@@ -1199,7 +1194,7 @@ void BeamModuleAssembler::emit_i_bsl(const ArgVal &LHS,
shiftLimit = imm(count_leading_zeroes(value));
}
- if (RHS.isMem()) {
+ if (RHS.isRegister()) {
/* Move RHS to the counter register, as it's the only one that can
* be used for variable shifts. */
a.mov(x86::rcx, RET);
diff --git a/erts/emulator/beam/jit/x86/instr_bif.cpp b/erts/emulator/beam/jit/x86/instr_bif.cpp
index ae329e3f0c..e435a9e4fd 100644
--- a/erts/emulator/beam/jit/x86/instr_bif.cpp
+++ b/erts/emulator/beam/jit/x86/instr_bif.cpp
@@ -34,6 +34,7 @@ extern "C"
*
* Result is returned in RET, error is indicated by ZF. */
void BeamGlobalAssembler::emit_i_bif_guard_shared() {
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions>();
a.mov(ARG1, c_p);
@@ -42,6 +43,7 @@ void BeamGlobalAssembler::emit_i_bif_guard_shared() {
runtime_call(ARG4, 3);
emit_leave_runtime<Update::eReductions>();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.ret();
@@ -53,6 +55,7 @@ void BeamGlobalAssembler::emit_i_bif_guard_shared() {
void BeamGlobalAssembler::emit_i_bif_body_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions>();
/* Save current BIF and argument vector for the error path. */
@@ -68,6 +71,7 @@ void BeamGlobalAssembler::emit_i_bif_body_shared() {
a.short_().je(error);
emit_leave_runtime<Update::eReductions>();
+ emit_leave_frame();
a.ret();
@@ -87,9 +91,10 @@ void BeamGlobalAssembler::emit_i_bif_body_shared() {
runtime_call<1>(ubif2mfa);
emit_leave_runtime<Update::eReductions>();
+ emit_leave_frame();
a.mov(ARG4, RET);
- a.jmp(labels[handle_error_shared_prologue]);
+ a.jmp(labels[raise_exception]);
}
}
@@ -102,7 +107,7 @@ void BeamModuleAssembler::emit_setup_guard_bif(const std::vector<ArgVal> &args,
/* If the guard BIF's arguments are in memory and continuous, for example
* `map_get(x0, x1)`, then we can pass the address of the first argument
* instead of filling in the argument vector. */
- is_contiguous_mem = args.size() && args[0].isMem();
+ is_contiguous_mem = args.size() && args[0].isRegister();
for (size_t i = 1; i < args.size() && is_contiguous_mem; i++) {
const ArgVal &curr = args[i], &prev = args[i - 1];
@@ -238,6 +243,8 @@ x86::Mem BeamGlobalAssembler::emit_i_length_common(Label fail, int state_size) {
trap_state = getXRef(0);
trap_state.setIndex(ARG2, 3);
+ emit_enter_frame();
+
/* Save arguments for error/trapping path. */
a.mov(TMP_MEM1q, ARG2);
a.mov(TMP_MEM2q, ARG3);
@@ -249,6 +256,7 @@ x86::Mem BeamGlobalAssembler::emit_i_length_common(Label fail, int state_size) {
runtime_call<2>(erts_trapping_length_1);
emit_leave_runtime<Update::eReductions>();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(trap);
@@ -268,7 +276,7 @@ x86::Mem BeamGlobalAssembler::emit_i_length_common(Label fail, int state_size) {
a.add(ARG2, imm(state_size));
/* We'll find our way back through the entry address (ARG3). */
- emit_discard_cp();
+ a.add(x86::rsp, imm(sizeof(UWord)));
a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), imm(0));
a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), ARG2);
@@ -298,7 +306,7 @@ void BeamGlobalAssembler::emit_i_length_body_shared() {
a.mov(getXRef(0), ARG1);
a.mov(ARG4, imm(&bif_mfa));
- emit_handle_error();
+ a.jmp(labels[raise_exception]);
}
}
@@ -312,7 +320,7 @@ void BeamGlobalAssembler::emit_i_length_guard_shared() {
a.bind(error);
{
- mov_imm(RET, 0);
+ a.sub(RET, RET);
a.ret();
}
}
@@ -334,7 +342,7 @@ void BeamModuleAssembler::emit_i_length(const ArgVal &Fail,
safe_fragment_call(ga->get_i_length_guard_shared());
a.je(labels[Fail.getValue()]);
} else {
- fragment_call(ga->get_i_length_body_shared());
+ safe_fragment_call(ga->get_i_length_body_shared());
}
mov_arg(Dst, RET);
@@ -380,10 +388,9 @@ void BeamGlobalAssembler::emit_call_light_bif_shared() {
x86::Gp I = HTOP, exp = FCALLS;
- Label error = a.newLabel(), trace = a.newLabel(), trap = a.newLabel(),
- yield = a.newLabel(), call_save_calls = a.newLabel(),
- call_bif = a.newLabel(), gc_after_bif_call = a.newLabel(),
- check_bif_return = a.newLabel();
+ Label trace = a.newLabel(), yield = a.newLabel();
+
+ emit_enter_frame();
/* Check if we should trace this bif call */
a.cmp(x86::dword_ptr(ARG4, offsetof(Export, is_bif_traced)), imm(0));
@@ -393,6 +400,9 @@ void BeamGlobalAssembler::emit_call_light_bif_shared() {
a.jle(yield);
{
+ Label call_bif = a.newLabel(), call_save_calls = a.newLabel(),
+ check_bif_return = a.newLabel(), gc_after_bif_call = a.newLabel();
+
emit_enter_runtime<Update::eReductions | Update::eStack |
Update::eHeap>();
@@ -420,54 +430,56 @@ void BeamGlobalAssembler::emit_call_light_bif_shared() {
a.bind(skip_msacc);
}
#endif
+
/* Check if we need to call save_calls */
a.cmp(active_code_ix, imm(ERTS_SAVE_CALLS_CODE_IX));
a.je(call_save_calls);
- a.bind(call_bif);
- a.mov(ARG1, x86::qword_ptr(c_p, offsetof(Process, mbuf)));
- a.mov(TMP_MEM1q, ARG1);
+ a.bind(call_bif);
+ {
+ a.mov(ARG1, x86::qword_ptr(c_p, offsetof(Process, mbuf)));
+ a.mov(TMP_MEM1q, ARG1);
- /* ARG3 and RET have been set earlier. */
- a.mov(ARG1, c_p);
- load_x_reg_array(ARG2);
+ /* ARG3 and RET have been set earlier. */
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
- a.mov(ARG4, RET);
- runtime_call<4>(debug_call_light_bif);
+ a.mov(ARG4, RET);
+ runtime_call<4>(debug_call_light_bif);
#else
- runtime_call(RET, 3);
+ runtime_call(RET, 3);
#endif
#ifdef ERTS_MSACC_EXTENDED_STATES
- {
Label skip_msacc = a.newLabel();
a.cmp(erts_msacc_cache, imm(0));
a.short_().je(skip_msacc);
-
- /* update cache if it was changed in the bif.
- TMP_MEM1q is already taken to save ARG1 above */
- a.mov(TMP_MEM2q, RET);
- a.lea(ARG1, erts_msacc_cache);
- runtime_call<1>(erts_msacc_update_cache);
- a.mov(RET, TMP_MEM2q);
-
- /* set state to emulator if msacc has been enabled */
- a.cmp(erts_msacc_cache, imm(0));
- a.short_().je(skip_msacc);
- a.mov(ARG1, erts_msacc_cache);
- a.mov(ARG2, imm(ERTS_MSACC_STATE_EMULATOR));
- a.mov(ARG3, imm(1));
- runtime_call<3>(erts_msacc_set_state_m__);
- a.mov(RET, TMP_MEM2q);
-
+ {
+ /* update cache if it was changed in the bif.
+ TMP_MEM1q is already taken to save ARG1 above */
+ a.mov(TMP_MEM2q, RET);
+ a.lea(ARG1, erts_msacc_cache);
+ runtime_call<1>(erts_msacc_update_cache);
+ a.mov(RET, TMP_MEM2q);
+
+ /* set state to emulator if msacc has been enabled */
+ a.cmp(erts_msacc_cache, imm(0));
+ a.short_().je(skip_msacc);
+ a.mov(ARG1, erts_msacc_cache);
+ a.mov(ARG2, imm(ERTS_MSACC_STATE_EMULATOR));
+ a.mov(ARG3, imm(1));
+ runtime_call<3>(erts_msacc_set_state_m__);
+ a.mov(RET, TMP_MEM2q);
+ }
a.bind(skip_msacc);
- }
#endif
+ }
/* ERTS_IS_GC_DESIRED_INTERNAL */
{
+ /* ERTS_IS_GC_DESIRED_INTERNAL */
a.mov(ARG2, x86::qword_ptr(c_p, offsetof(Process, stop)));
a.mov(ARG3, RET);
a.mov(ARG5, x86::qword_ptr(c_p, offsetof(Process, htop)));
@@ -490,104 +502,79 @@ void BeamGlobalAssembler::emit_call_light_bif_shared() {
a.jl(gc_after_bif_call);
}
- /*
- ARG2 is set to E
- ARG3 is set to bif return
- ARG5 is set to HTOP
+ /* ! FALL THROUGH ! */
- HTOP is exp
- E_saved|E is I
- */
a.bind(check_bif_return);
- emit_test_the_non_value(ARG3);
-
- /* NOTE: Short won't reach if JIT_HARD_DEBUG is defined. */
- a.je(trap);
-
- a.mov(HTOP, ARG5);
-#ifdef NATIVE_ERLANG_STACK
- a.mov(E_saved, ARG2);
-#else
- a.mov(E, ARG2);
-#endif
-
- /* We must update the active code index in case another process has
- * loaded new code, as the result of this BIF may be observable on both
- * ends.
- *
- * It doesn't matter whether the BIF modifies anything; if process A
- * loads new code and calls erlang:monotonic_time/0 soon after, we'd
- * break the illusion of atomic upgrades if process B still ran old code
- * after seeing a later timestamp from its own call to
- * erlang:monotonic_time/0. */
-
- emit_leave_runtime<Update::eReductions | Update::eCodeIndex>();
-
- a.mov(getXRef(0), ARG3);
- a.ret();
-
- a.bind(call_save_calls);
{
- /* Stash the bif function pointer */
- a.mov(TMP_MEM1q, RET);
-
- /* Setup the arguments to call */
- a.mov(ARG1, c_p);
- a.mov(ARG2, exp);
- runtime_call<2>(save_calls);
-
- /* Restore RET and ARG3 to the values expected
- by the bif call */
- a.mov(RET, TMP_MEM1q);
- a.mov(ARG3, I);
- a.jmp(call_bif);
- }
+ Label trap = a.newLabel(), error = a.newLabel();
- a.bind(trap);
- {
- a.cmp(x86::qword_ptr(c_p, offsetof(Process, freason)), imm(TRAP));
- a.short_().jne(error);
+ emit_test_the_non_value(ARG3);
+ a.short_().je(trap);
- emit_leave_runtime<Update::eHeap | Update::eStack |
- Update::eReductions | Update::eCodeIndex>();
+ /* We must update the active code index in case another process has
+ * loaded new code, as the result of this BIF may be observable on
+ * both ends.
+ *
+ * It doesn't matter whether the BIF modifies anything; if process
+ * A loads new code and calls erlang:monotonic_time/0 soon after,
+ * we'd break the illusion of atomic upgrades if process B still
+ * ran old code after seeing a later timestamp from its own call to
+ * erlang:monotonic_time/0. */
+ emit_leave_runtime<Update::eReductions | Update::eStack |
+ Update::eHeap | Update::eCodeIndex>();
+ emit_leave_frame();
+
+ a.mov(getXRef(0), ARG3);
+ a.ret();
+
+ a.bind(trap);
+ {
+ /* raise_exception_shared expects the entry address in ARG2 and
+ * MFA in ARG4. We have to set these up *before* leaving the
+ * runtime as we've saved our arguments in callee-save
+ * registers that will be clobbered by `emit_leave_runtime` */
+ a.mov(ARG2, I);
+ a.lea(ARG4, x86::qword_ptr(exp, offsetof(Export, info.mfa)));
+
+ emit_leave_runtime<Update::eReductions | Update::eStack |
+ Update::eHeap | Update::eCodeIndex>();
+
+ a.cmp(x86::qword_ptr(c_p, offsetof(Process, freason)),
+ imm(TRAP));
+ a.short_().jne(error);
#if !defined(NATIVE_ERLANG_STACK)
- a.pop(getCPRef());
+ a.pop(getCPRef());
#endif
- /* Trap out, our return address is on the Erlang stack.
- *
- * The BIF_TRAP macros all set up c_p->arity and c_p->current, so
- * we can use a simplified context switch. */
- a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, i)));
- a.jmp(labels[context_switch_simplified]);
- }
-
- a.bind(error);
- {
- a.mov(ARG4, exp);
- a.mov(RET, I);
-
- /* Update::eCodeIndex clobbers ARG1 + ARG2 */
- emit_leave_runtime<Update::eHeap | Update::eStack |
- Update::eReductions | Update::eCodeIndex>();
-
- /* handle_error_shared needs the entry address in ARG2 */
- a.mov(ARG2, RET);
+ /* Trap out, our return address is on the Erlang stack.
+ *
+ * The BIF_TRAP macros all set up c_p->arity and c_p->current,
+ * so we can use a simplified context switch. */
+ a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, i)));
+ a.jmp(labels[context_switch_simplified]);
+ }
+ a.bind(error);
+ {
#if !defined(NATIVE_ERLANG_STACK)
- /* Discard the continuation pointer as it will never be used. */
- emit_discard_cp();
+ /* Discard the continuation pointer as it will never be
+ * used. */
+ emit_unwind_frame();
#endif
- /* get_handle_error expects current PC in ARG2 and MFA in ARG4. */
- a.lea(ARG4, x86::qword_ptr(ARG4, offsetof(Export, info.mfa)));
-
- /* Overwrite the return address with the entry address to ensure
- * that only the entry address ends up in the stack trace. */
- a.mov(x86::qword_ptr(E), ARG2);
-
- a.jmp(labels[handle_error_shared]);
+ /* Overwrite the return address with the entry address to
+ * ensure that only the entry address ends up in the stack
+ * trace. */
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_RA) {
+ a.mov(x86::qword_ptr(E), ARG2);
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
+ a.mov(x86::qword_ptr(E, 8), ARG2);
+ }
+
+ a.jmp(labels[raise_exception_shared]);
+ }
}
a.bind(gc_after_bif_call);
@@ -603,15 +590,32 @@ void BeamGlobalAssembler::emit_call_light_bif_shared() {
a.mov(ARG2, x86::qword_ptr(c_p, offsetof(Process, stop)));
a.jmp(check_bif_return);
}
+
+ a.bind(call_save_calls);
+ {
+ /* Stash the bif function pointer. */
+ a.mov(TMP_MEM1q, RET);
+
+ /* Setup the arguments to call. */
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, exp);
+ runtime_call<2>(save_calls);
+
+ /* Restore RET and ARG3 to the values expected by the bif call. */
+ a.mov(RET, TMP_MEM1q);
+ a.mov(ARG3, I);
+ a.jmp(call_bif);
+ }
}
a.bind(trace);
{
- /* Call the export entry instead of the BIF. If we use the
- * native stack as the Erlang stack our return address is
- * already on the Erlang stack. Otherwise we will have to move
- * the return address from the native stack to the Erlang
- * stack. */
+ /* Tail call the export entry instead of the BIF. If we use the native
+ * stack as the Erlang stack our return address is already on the
+ * Erlang stack. Otherwise we will have to move the return address from
+ * the native stack to the Erlang stack. */
+
+ emit_leave_frame();
#if !defined(NATIVE_ERLANG_STACK)
/* The return address must be on the Erlang stack. */
@@ -630,7 +634,7 @@ void BeamGlobalAssembler::emit_call_light_bif_shared() {
a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), ARG4);
/* We'll find our way back through ARG3 (entry address). */
- emit_discard_cp();
+ emit_unwind_frame();
a.jmp(labels[context_switch_simplified]);
}
@@ -654,9 +658,8 @@ void BeamModuleAssembler::emit_send() {
Label entry = a.newLabel();
/* This is essentially a mirror of call_light_bif, there's no point to
- * specializing send/2 anymore.
- *
- * FIXME: Rewrite this to an ordinary BIF in the loader instead. */
+ * specializing send/2 anymore. We do it here because it's far more work to
+ * do it in the loader. */
align_erlang_cp();
a.bind(entry);
@@ -696,6 +699,9 @@ void BeamGlobalAssembler::emit_bif_nif_epilogue(void) {
comment("Do return and dispatch to it");
a.mov(getXRef(0), RET);
+
+ emit_leave_frame();
+
#ifdef NATIVE_ERLANG_STACK
a.ret();
#else
@@ -745,7 +751,7 @@ void BeamGlobalAssembler::emit_bif_nif_epilogue(void) {
a.mov(ARG2, RET);
a.mov(ARG4, x86::qword_ptr(c_p, offsetof(Process, current)));
- a.jmp(labels[handle_error_shared]);
+ a.jmp(labels[raise_exception_shared]);
}
}
@@ -831,11 +837,22 @@ void BeamGlobalAssembler::emit_dispatch_bif(void) {
void BeamModuleAssembler::emit_call_bif(const ArgVal &Func) {
int mfa_offset = -(int)sizeof(ErtsCodeMFA);
- a.lea(ARG2, x86::qword_ptr(currLabel, mfa_offset));
- a.lea(ARG3, x86::qword_ptr(currLabel));
- mov_arg(ARG4, Func);
+ Label entry = a.newLabel();
+
+ /* This is _always_ the first instruction in a function and replaces the
+ * yield test that would otherwise add a frame, so we must add a frame
+ * here. */
+ emit_enter_frame();
+
+ /* Yield entry point; must be after entering frame. */
+ a.bind(entry);
+ {
+ a.lea(ARG2, x86::qword_ptr(currLabel, mfa_offset));
+ a.lea(ARG3, x86::qword_ptr(entry));
+ mov_arg(ARG4, Func);
- abs_jmp(ga->get_call_bif_shared());
+ abs_jmp(ga->get_call_bif_shared());
+ }
}
void BeamModuleAssembler::emit_call_bif_mfa(const ArgVal &M,
@@ -848,7 +865,7 @@ void BeamModuleAssembler::emit_call_bif_mfa(const ArgVal &M,
ASSERT(e != NULL && e->bif_number != -1);
func = (BeamInstr)bif_table[e->bif_number].f;
- emit_call_bif(ArgVal(ArgVal::i, func));
+ emit_call_bif(ArgVal(ArgVal::Immediate, func));
}
void BeamGlobalAssembler::emit_call_nif_early() {
@@ -866,6 +883,7 @@ void BeamGlobalAssembler::emit_call_nif_early() {
a.test(ARG2, imm(sizeof(UWord) - 1));
a.short_().je(next);
+ a.comment("# Return address isn't word-aligned");
a.ud2();
a.bind(next);
@@ -879,11 +897,14 @@ void BeamGlobalAssembler::emit_call_nif_early() {
emit_leave_runtime();
- /* We won't return to the original code. */
- emit_discard_cp();
+ /* We won't return to the original code. We KNOW that the stack points at
+ * a return address. */
+ a.add(x86::rsp, imm(8));
/* Emulate `emit_call_nif`, loading the current (phony) instruction
- * pointer into ARG2. */
+ * pointer into ARG2. We push a (redundant) frame pointer to match the
+ * corresponding `emit_leave_frame` in `call_nif_shared`. */
+ emit_enter_frame();
a.mov(ARG3, RET);
a.jmp(labels[call_nif_shared]);
}
@@ -938,42 +959,71 @@ void BeamGlobalAssembler::emit_dispatch_nif(void) {
a.jmp(labels[call_nif_shared]);
}
+void BeamGlobalAssembler::emit_call_nif_yield_helper() {
+ Label yield = a.newLabel();
+
+ a.dec(FCALLS);
+ a.short_().jl(yield);
+ a.jmp(labels[call_nif_shared]);
+
+ a.bind(yield);
+ {
+ int mfa_offset = -(int)sizeof(ErtsCodeMFA);
+ int arity_offset = mfa_offset + (int)offsetof(ErtsCodeMFA, arity);
+
+ a.mov(ARG1, x86::qword_ptr(ARG3, arity_offset));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), ARG1);
+
+ a.lea(ARG1, x86::qword_ptr(ARG3, mfa_offset));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), ARG1);
+
+ /* Yield to `dispatch` rather than `entry` to avoid pushing too many
+ * frames to the stack. See `emit_call_nif` for details. */
+ a.add(ARG3, imm(BEAM_ASM_FUNC_PROLOGUE_SIZE + sizeof(UWord[4])));
+ a.jmp(labels[context_switch_simplified]);
+ }
+}
+
/* WARNING: This stub is memcpy'd, so all code herein must be explicitly
* position-independent. */
void BeamModuleAssembler::emit_call_nif(const ArgVal &Func,
const ArgVal &NifMod,
const ArgVal &DirtyFunc) {
- Label dispatch = a.newLabel();
- uint64_t val;
-
- /* The start of this function has to mimic the layout of ErtsNativeFunc. */
- a.jmp(dispatch); /* call_op */
-
- a.align(kAlignCode, 8);
- /* ErtsNativeFunc.dfunc */
- val = Func.getValue();
- a.embed(&val, sizeof(val));
- /* ErtsNativeFunc.m */
- val = NifMod.getValue();
- a.embed(&val, sizeof(val));
- /* ErtsNativeFunc.func */
- val = DirtyFunc.getValue();
- a.embed(&val, sizeof(val));
-
- /* The real code starts here */
- a.bind(dispatch);
- {
- Label yield = a.newLabel();
+ Label entry = a.newLabel(), dispatch = a.newLabel();
- a.lea(ARG3, x86::qword_ptr(currLabel));
+#ifdef DEBUG
+ size_t entry_offset = a.offset();
+#endif
- a.dec(FCALLS);
- a.jl(yield);
+ ASSERT(BEAM_ASM_FUNC_PROLOGUE_SIZE ==
+ (a.offset() - code.labelOffsetFromBase(currLabel)));
+
+ /* The start of this function must mimic the layout of ErtsNativeFunc.
+ *
+ * We jump here on the very first entry, pushing a stack frame if
+ * applicable. */
+ a.bind(entry);
+ {
+ emit_enter_frame();
+ a.short_().jmp(dispatch); /* call_op */
+
+ a.align(kAlignCode, 8);
+ /* ErtsNativeFunc.dfunc */
+ a.embedUInt64(Func.getValue());
+ /* ErtsNativeFunc.m */
+ a.embedUInt64(NifMod.getValue());
+ /* ErtsNativeFunc.func */
+ a.embedUInt64(DirtyFunc.getValue());
+ }
- pic_jmp(ga->get_call_nif_shared());
+ /* `emit_call_nif_yield_helper` relies on this to compute the address of
+ * `dispatch` */
+ ASSERT(a.offset() == entry_offset + sizeof(UWord[4]));
- a.bind(yield);
- pic_jmp(ga->get_context_switch());
+ a.bind(dispatch);
+ {
+ a.lea(ARG3, x86::qword_ptr(currLabel));
+ pic_jmp(ga->get_call_nif_yield_helper());
}
}
@@ -996,15 +1046,18 @@ void BeamGlobalAssembler::emit_i_load_nif_shared() {
a.cmp(RET, RET_NIF_yield);
a.short_().je(yield);
+
+ /* We entered the frame in module code. */
+ emit_leave_frame();
+
a.cmp(RET, RET_NIF_success);
a.short_().jne(error);
-
a.ret();
a.bind(error);
{
a.mov(ARG4, imm(&bif_mfa));
- emit_handle_error();
+ a.jmp(labels[raise_exception]);
}
a.bind(yield);
@@ -1014,10 +1067,49 @@ void BeamGlobalAssembler::emit_i_load_nif_shared() {
}
}
+static ErtsCodePtr get_on_load_address(Process *c_p, Eterm module) {
+ const Module *modp = erts_get_module(module, erts_active_code_ix());
+
+ if (modp && modp->on_load) {
+ const BeamCodeHeader *hdr = (modp->on_load)->code_hdr;
+
+ if (hdr) {
+ return erts_codeinfo_to_code(hdr->on_load);
+ }
+ }
+
+ c_p->freason = BADARG;
+
+ return NULL;
+}
+
+/* Implements the internal and undocumented erlang:call_on_load_function/1,
+ * which is tricky to implement in the face of frame pointers. */
+void BeamModuleAssembler::emit_i_call_on_load_function() {
+ static ErtsCodeMFA mfa = {am_erlang, am_call_on_load_function, 1};
+ Label next = a.newLabel();
+
+ emit_enter_runtime();
+
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, getXRef(0));
+ runtime_call<2>(get_on_load_address);
+
+ emit_leave_runtime();
+
+ a.test(RET, RET);
+ a.jne(next);
+
+ emit_raise_exception(&mfa);
+
+ a.bind(next);
+ erlang_call(RET, ARG1);
+}
+
#ifdef NATIVE_ERLANG_STACK
void BeamModuleAssembler::emit_i_load_nif() {
- Label entry = a.newLabel(), next = a.newLabel();
+ Label entry = a.newLabel(), yield = a.newLabel(), next = a.newLabel();
/* i_load_nif is a rewrite of a call_ext instruction, so we'll body-call
* ourselves to ensure the stack is consistent with that. This greatly
@@ -1028,8 +1120,13 @@ void BeamModuleAssembler::emit_i_load_nif() {
align_erlang_cp();
a.bind(entry);
{
- a.lea(ARG2, x86::qword_ptr(entry));
- abs_jmp(ga->get_i_load_nif_shared());
+ emit_enter_frame();
+
+ a.bind(yield);
+ {
+ a.lea(ARG2, x86::qword_ptr(yield));
+ abs_jmp(ga->get_i_load_nif_shared());
+ }
}
a.bind(next);
@@ -1059,7 +1156,7 @@ void BeamModuleAssembler::emit_i_load_nif() {
a.cmp(RET, imm(RET_NIF_success));
a.je(next);
- emit_handle_error(currLabel, &mfa);
+ emit_raise_exception(currLabel, &mfa);
a.bind(schedule);
{
diff --git a/erts/emulator/beam/jit/x86/instr_bs.cpp b/erts/emulator/beam/jit/x86/instr_bs.cpp
index 7df0b84cae..1aad5060ef 100644
--- a/erts/emulator/beam/jit/x86/instr_bs.cpp
+++ b/erts/emulator/beam/jit/x86/instr_bs.cpp
@@ -165,7 +165,7 @@ void BeamModuleAssembler::emit_i_bs_init_fail_heap(const ArgVal &Size,
{
mov_arg(ARG2, Size);
safe_fragment_call(ga->get_bs_size_check_shared());
- emit_handle_error();
+ emit_raise_exception();
}
a.bind(next);
@@ -175,7 +175,7 @@ void BeamModuleAssembler::emit_i_bs_init_fail_heap(const ArgVal &Size,
void BeamModuleAssembler::emit_i_bs_init(const ArgVal &Size,
const ArgVal &Live,
const ArgVal &Dst) {
- const ArgVal Heap(ArgVal::TYPE::u, 0);
+ const ArgVal Heap(ArgVal::Word, 0);
emit_i_bs_init_heap(Size, Heap, Live, Dst);
}
@@ -184,7 +184,7 @@ void BeamModuleAssembler::emit_i_bs_init_fail(const ArgVal &Size,
const ArgVal &Fail,
const ArgVal &Live,
const ArgVal &Dst) {
- const ArgVal Heap(ArgVal::TYPE::u, 0);
+ const ArgVal Heap(ArgVal::Word, 0);
emit_i_bs_init_fail_heap(Size, Heap, Fail, Live, Dst);
}
@@ -192,7 +192,7 @@ void BeamModuleAssembler::emit_i_bs_init_fail(const ArgVal &Size,
void BeamModuleAssembler::emit_i_bs_init_bits(const ArgVal &NumBits,
const ArgVal &Live,
const ArgVal &Dst) {
- const ArgVal heap(ArgVal::TYPE::u, 0);
+ const ArgVal heap(ArgVal::Word, 0);
emit_i_bs_init_bits_heap(NumBits, heap, Live, Dst);
}
@@ -221,7 +221,7 @@ void BeamModuleAssembler::emit_i_bs_init_bits_fail(const ArgVal &NumBits,
const ArgVal &Fail,
const ArgVal &Live,
const ArgVal &Dst) {
- const ArgVal Heap(ArgVal::TYPE::u, 0);
+ const ArgVal Heap(ArgVal::Word, 0);
emit_i_bs_init_bits_fail_heap(NumBits, Heap, Fail, Live, Dst);
}
@@ -267,7 +267,7 @@ void BeamModuleAssembler::emit_i_bs_init_bits_fail_heap(const ArgVal &NumBits,
{
mov_arg(ARG2, NumBits);
safe_fragment_call(ga->get_bs_size_check_shared());
- emit_handle_error();
+ emit_raise_exception();
}
a.bind(next);
@@ -577,9 +577,10 @@ void BeamModuleAssembler::emit_i_bs_start_match3(const ArgVal &Src,
{
/* Src is not guaranteed to be inside the live range, so we need to
* stash it during GC. */
- emit_gc_test_preserve(ArgVal(ArgVal::i, ERL_BIN_MATCHSTATE_SIZE(0)),
- Live,
- ARG2);
+ emit_gc_test_preserve(
+ ArgVal(ArgVal::Immediate, ERL_BIN_MATCHSTATE_SIZE(0)),
+ Live,
+ ARG2);
emit_enter_runtime<Update::eStack | Update::eHeap>();
@@ -837,7 +838,9 @@ void BeamModuleAssembler::emit_i_bs_get_integer_64(const ArgVal &Ctx,
/* Ctx is not guaranteed to be inside the live range, so we need to stash
* it during GC. */
- emit_gc_test_preserve(ArgVal(ArgVal::i, BIG_UINT_HEAP_SIZE), Live, ARG4);
+ emit_gc_test_preserve(ArgVal(ArgVal::Immediate, BIG_UINT_HEAP_SIZE),
+ Live,
+ ARG4);
address = emit_bs_get_integer_prologue(next,
labels[Fail.getValue()],
@@ -928,7 +931,7 @@ void BeamModuleAssembler::emit_i_bs_get_integer(const ArgVal &Ctx,
void BeamModuleAssembler::emit_bs_test_tail2(const ArgVal &Fail,
const ArgVal &Ctx,
const ArgVal &Offset) {
- ASSERT(Offset.getType() == ArgVal::TYPE::u);
+ ASSERT(Offset.isWord());
mov_arg(ARG1, Ctx);
@@ -962,7 +965,7 @@ void BeamModuleAssembler::emit_i_bs_get_binary_all2(const ArgVal &Ctx,
/* Ctx is not guaranteed to be inside the live range, so we need to stash
* it during GC. */
- emit_gc_test_preserve(ArgVal(ArgVal::i, EXTRACT_SUB_BIN_HEAP_NEED),
+ emit_gc_test_preserve(ArgVal(ArgVal::Immediate, EXTRACT_SUB_BIN_HEAP_NEED),
Live,
ARG1);
@@ -1018,7 +1021,7 @@ void BeamModuleAssembler::emit_bs_get_tail(const ArgVal &Ctx,
/* Ctx is not guaranteed to be inside the live range, so we need to stash
* it during GC. */
- emit_gc_test_preserve(ArgVal(ArgVal::i, EXTRACT_SUB_BIN_HEAP_NEED),
+ emit_gc_test_preserve(ArgVal(ArgVal::Immediate, EXTRACT_SUB_BIN_HEAP_NEED),
Live,
ARG1);
@@ -1080,9 +1083,10 @@ void BeamModuleAssembler::emit_i_bs_get_binary2(const ArgVal &Ctx,
/* Ctx is not guaranteed to be inside the live range, so we need to
* stash it during GC. */
- emit_gc_test_preserve(ArgVal(ArgVal::i, EXTRACT_SUB_BIN_HEAP_NEED),
- Live,
- ARG4);
+ emit_gc_test_preserve(
+ ArgVal(ArgVal::Immediate, EXTRACT_SUB_BIN_HEAP_NEED),
+ Live,
+ ARG4);
emit_enter_runtime<Update::eHeap>();
@@ -1117,7 +1121,9 @@ void BeamModuleAssembler::emit_i_bs_get_float2(const ArgVal &Ctx,
/* Ctx is not guaranteed to be inside the live range, so we need to stash
* it during GC. */
- emit_gc_test_preserve(ArgVal(ArgVal::i, FLOAT_SIZE_OBJECT), Live, ARG4);
+ emit_gc_test_preserve(ArgVal(ArgVal::Immediate, FLOAT_SIZE_OBJECT),
+ Live,
+ ARG4);
if (emit_bs_get_field_size(Sz, unit, fail, ARG2, 64) >= 0) {
emit_enter_runtime<Update::eHeap>();
@@ -1398,12 +1404,12 @@ void BeamModuleAssembler::emit_bs_add(const ArgVal &Fail,
/* Both arguments must be immediates on x64. */
mov_arg(ARG1, Src1);
- if (Src2.getType() == ArgVal::i) {
+ if (Src2.getType() == ArgVal::Immediate) {
a.mov(RETd, ARG1d);
} else {
mov_arg(ARG2, Src2);
a.mov(RETd, ARG2d);
- if (Src1.getType() != ArgVal::i) {
+ if (Src1.getType() != ArgVal::Immediate) {
a.and_(RETd, ARG1d);
}
}
@@ -1413,7 +1419,7 @@ void BeamModuleAssembler::emit_bs_add(const ArgVal &Fail,
/* Verify that ARG2 >= 0 and multiply ARG2 by the unit. The
* result will be untagged but not shifted and stored in RET. */
- if (Src2.getType() == ArgVal::i) {
+ if (Src2.getType() == ArgVal::Immediate) {
Uint val = unsigned_val(Src2.getValue());
if ((val >> (sizeof(Eterm) - 1) * 8) != 0) {
/* Protect against negative or huge literal size. */
@@ -1456,7 +1462,7 @@ void BeamModuleAssembler::emit_bs_add(const ArgVal &Fail,
mov_arg(ARG2, Src1);
mov_arg(ARG3, Src2);
safe_fragment_call(ga->get_bs_add_shared());
- emit_handle_error();
+ emit_raise_exception();
}
a.bind(next);
@@ -1483,7 +1489,7 @@ void BeamModuleAssembler::emit_i_bs_append(const ArgVal &Fail,
mov_arg(ARG5, ExtraHeap);
mov_arg(ARG6, Unit);
- mov_arg(ArgVal(ArgVal::TYPE::x, Live.getValue()), Bin);
+ mov_arg(ArgVal(ArgVal::XReg, Live.getValue()), Bin);
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
@@ -1500,7 +1506,7 @@ void BeamModuleAssembler::emit_i_bs_append(const ArgVal &Fail,
} else {
a.short_().jne(next);
/* The error has been prepared in `erts_bs_append` */
- emit_handle_error();
+ emit_raise_exception();
a.bind(next);
}
@@ -1536,7 +1542,7 @@ void BeamModuleAssembler::emit_i_bs_private_append(const ArgVal &Fail,
} else {
a.short_().jne(next);
/* The error has been prepared in `erts_bs_private_append` */
- emit_handle_error();
+ emit_raise_exception();
a.bind(next);
}
@@ -1553,61 +1559,3 @@ void BeamModuleAssembler::emit_bs_init_writable() {
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
}
-
-/* Old compatibility instructions for <= OTP-21. Kept in order to be able to
- * load old code. While technically we could remove these in OTP-24, we've
- * decided to keep them until at least OTP-25 to make things easier for
- * users. */
-void BeamModuleAssembler::emit_i_bs_start_match2(const ArgVal &Src,
- const ArgVal &Fail,
- const ArgVal &Live,
- const ArgVal &Slots,
- const ArgVal &Dst) {
- mov_arg(ARG1, Src);
- mov_arg(ARG2, Live);
- mov_arg(ARG3, Slots);
-
- emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
-
- a.mov(ARG4, c_p);
- load_x_reg_array(ARG5);
- runtime_call<5>(beam_jit_bs_start_match2);
-
- emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
-
- emit_test_the_non_value(RET);
- a.je(labels[Fail.getValue()]);
- mov_arg(Dst, RET);
-}
-
-void BeamModuleAssembler::emit_i_bs_save2(const ArgVal &Ctx,
- const ArgVal &Slot) {
- int slot_offset = offsetof(ErlBinMatchState, save_offset) +
- (sizeof(Eterm) * Slot.getValue());
-
- mov_arg(ARG1, Ctx);
-
- a.mov(ARG2, emit_boxed_val(ARG1, offsetof(ErlBinMatchState, mb.offset)));
- a.mov(emit_boxed_val(ARG1, slot_offset), ARG2);
-}
-
-void BeamModuleAssembler::emit_i_bs_restore2(const ArgVal &Ctx,
- const ArgVal &Slot) {
- int slot_offset = offsetof(ErlBinMatchState, save_offset) +
- (sizeof(Eterm) * Slot.getValue());
-
- mov_arg(ARG1, Ctx);
-
- a.mov(ARG2, emit_boxed_val(ARG1, slot_offset));
- a.mov(emit_boxed_val(ARG1, offsetof(ErlBinMatchState, mb.offset)), ARG2);
-}
-
-void BeamModuleAssembler::emit_bs_context_to_binary(const ArgVal &Src) {
- mov_arg(ARG1, Src);
-
- emit_enter_runtime();
-
- runtime_call<1>(beam_jit_bs_context_to_binary);
-
- emit_leave_runtime();
-}
diff --git a/erts/emulator/beam/jit/x86/instr_call.cpp b/erts/emulator/beam/jit/x86/instr_call.cpp
index e0ee3543bd..968f5bf3de 100644
--- a/erts/emulator/beam/jit/x86/instr_call.cpp
+++ b/erts/emulator/beam/jit/x86/instr_call.cpp
@@ -39,13 +39,13 @@ void BeamGlobalAssembler::emit_dispatch_return() {
}
void BeamModuleAssembler::emit_return() {
- Label dispatch_return = a.newLabel();
-
#ifdef JIT_HARD_DEBUG
/* Validate return address and {x,0} */
- emit_validate(ArgVal(ArgVal::u, 1));
+ emit_validate(ArgVal(ArgVal::Word, 1));
#endif
+ emit_leave_frame();
+
#if !defined(NATIVE_ERLANG_STACK)
a.mov(ARG3, getCPRef());
a.mov(getCPRef(), imm(NIL));
@@ -54,16 +54,24 @@ void BeamModuleAssembler::emit_return() {
/* The reduction test is kept in module code because moving it to a shared
* fragment caused major performance regressions in dialyzer. */
a.dec(FCALLS);
- a.short_().jl(dispatch_return);
+
+ if (yieldReturn.isValid()) {
+ /* We're in an ordinary module. Reduce the code size by branching to
+ * the yield trampoline in the module header. */
+ a.jl(yieldReturn);
+ } else {
+ Label next = a.newLabel();
+
+ a.short_().jge(next);
+ abs_jmp(ga->get_dispatch_return());
+ a.bind(next);
+ }
#ifdef NATIVE_ERLANG_STACK
a.ret();
#else
a.jmp(ARG3);
#endif
-
- a.bind(dispatch_return);
- abs_jmp(ga->get_dispatch_return());
}
void BeamModuleAssembler::emit_i_call(const ArgVal &CallDest) {
@@ -76,10 +84,14 @@ void BeamModuleAssembler::emit_i_call_last(const ArgVal &CallDest,
const ArgVal &Deallocate) {
emit_deallocate(Deallocate);
+ emit_leave_frame();
+
a.jmp(labels[CallDest.getValue()]);
}
void BeamModuleAssembler::emit_i_call_only(const ArgVal &CallDest) {
+ emit_leave_frame();
+
a.jmp(labels[CallDest.getValue()]);
}
@@ -116,6 +128,8 @@ void BeamModuleAssembler::emit_i_call_ext(const ArgVal &Exp) {
void BeamModuleAssembler::emit_i_call_ext_only(const ArgVal &Exp) {
make_move_patch(RET, imports[Exp.getValue()].patches);
x86::Mem destination = emit_setup_export_call(RET);
+
+ emit_leave_frame();
a.jmp(destination);
}
@@ -125,6 +139,8 @@ void BeamModuleAssembler::emit_i_call_ext_last(const ArgVal &Exp,
make_move_patch(RET, imports[Exp.getValue()].patches);
x86::Mem destination = emit_setup_export_call(RET);
+
+ emit_leave_frame();
a.jmp(destination);
}
@@ -155,7 +171,7 @@ x86::Mem BeamModuleAssembler::emit_variable_apply(bool includeI) {
a.test(RET, RET);
a.short_().jne(dispatch);
- emit_handle_error(entry, &apply3_mfa);
+ emit_raise_exception(entry, &apply3_mfa);
a.bind(dispatch);
return emit_setup_export_call(RET);
@@ -173,6 +189,8 @@ void BeamModuleAssembler::emit_i_apply_last(const ArgVal &Deallocate) {
void BeamModuleAssembler::emit_i_apply_only() {
x86::Mem dest = emit_variable_apply(true);
+
+ emit_leave_frame();
a.jmp(dest);
}
@@ -205,7 +223,7 @@ x86::Mem BeamModuleAssembler::emit_fixed_apply(const ArgVal &Arity,
a.test(RET, RET);
a.short_().jne(dispatch);
- emit_handle_error(entry, &apply3_mfa);
+ emit_raise_exception(entry, &apply3_mfa);
a.bind(dispatch);
return emit_setup_export_call(RET);
@@ -221,97 +239,7 @@ void BeamModuleAssembler::emit_apply_last(const ArgVal &Arity,
emit_deallocate(Deallocate);
x86::Mem dest = emit_fixed_apply(Arity, true);
- a.jmp(dest);
-}
-
-x86::Gp BeamModuleAssembler::emit_apply_fun() {
- Label dispatch = a.newLabel();
-
- emit_enter_runtime<Update::eStack | Update::eHeap>();
-
- a.mov(ARG1, c_p);
- a.mov(ARG2, getXRef(0));
- a.mov(ARG3, getXRef(1));
- load_x_reg_array(ARG4);
- a.lea(ARG5, TMP_MEM1q);
- runtime_call<5>(apply_fun);
-
- emit_leave_runtime<Update::eStack | Update::eHeap>();
-
- a.mov(ARG2, RET);
- a.test(RET, RET);
-
- /* Put the export entry, if any, into RET to follow the export calling
- * convention in case we applied an external fun. See
- * `emit_setup_export_call` for details. */
- a.mov(RET, TMP_MEM1q);
-
- a.short_().jne(dispatch);
- emit_handle_error();
- a.bind(dispatch);
-
- return ARG2;
-}
-
-void BeamModuleAssembler::emit_i_apply_fun() {
- x86::Gp dest = emit_apply_fun();
-
- ASSERT(dest != ARG1);
- erlang_call(dest, ARG1);
-}
-
-void BeamModuleAssembler::emit_i_apply_fun_last(const ArgVal &Deallocate) {
- emit_deallocate(Deallocate);
- emit_i_apply_fun_only();
-}
-
-void BeamModuleAssembler::emit_i_apply_fun_only() {
- x86::Gp dest = emit_apply_fun();
-
- a.jmp(dest);
-}
-
-x86::Gp BeamModuleAssembler::emit_call_fun(const ArgVal &Fun) {
- Label dispatch = a.newLabel();
-
- mov_arg(ARG2, Fun);
-
- emit_enter_runtime<Update::eStack | Update::eHeap>();
-
- a.mov(ARG1, c_p);
- load_x_reg_array(ARG3);
- mov_imm(ARG4, THE_NON_VALUE);
- a.lea(ARG5, TMP_MEM1q);
- runtime_call<5>(call_fun);
-
- emit_leave_runtime<Update::eStack | Update::eHeap>();
-
- a.mov(ARG2, RET);
- a.test(RET, RET);
-
- /* Put the export entry, if any, into RET to follow the export calling
- * convention in case we called an external fun. See
- * `emit_setup_export_call` for details. */
- a.mov(RET, TMP_MEM1q);
-
- a.short_().jne(dispatch);
- emit_handle_error();
- a.bind(dispatch);
-
- return ARG2;
-}
-
-void BeamModuleAssembler::emit_i_call_fun(const ArgVal &Fun) {
- x86::Gp dest = emit_call_fun(Fun);
-
- ASSERT(dest != ARG1);
- erlang_call(dest, ARG1);
-}
-
-void BeamModuleAssembler::emit_i_call_fun_last(const ArgVal &Fun,
- const ArgVal &Deallocate) {
- emit_deallocate(Deallocate);
- x86::Gp dest = emit_call_fun(Fun);
+ emit_leave_frame();
a.jmp(dest);
}
diff --git a/erts/emulator/beam/jit/x86/instr_common.cpp b/erts/emulator/beam/jit/x86/instr_common.cpp
index cd3649d6f4..e0dd4d792b 100644
--- a/erts/emulator/beam/jit/x86/instr_common.cpp
+++ b/erts/emulator/beam/jit/x86/instr_common.cpp
@@ -93,7 +93,7 @@ using namespace asmjit;
void BeamModuleAssembler::emit_error(int reason) {
a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)), imm(reason));
- emit_handle_error();
+ emit_raise_exception();
}
void BeamModuleAssembler::emit_gc_test_preserve(const ArgVal &Need,
@@ -178,8 +178,7 @@ void BeamModuleAssembler::emit_i_validate(const ArgVal &Arity) {
void BeamModuleAssembler::emit_allocate_heap(const ArgVal &NeedStack,
const ArgVal &NeedHeap,
const ArgVal &Live) {
- ASSERT(NeedStack.getType() == ArgVal::TYPE::u);
- ASSERT(NeedStack.getValue() <= MAX_REG);
+ ASSERT(NeedStack.isWord() && NeedStack.getValue() <= MAX_REG);
ArgVal needed = NeedStack;
#if !defined(NATIVE_ERLANG_STACK)
@@ -198,25 +197,29 @@ void BeamModuleAssembler::emit_allocate_heap(const ArgVal &NeedStack,
void BeamModuleAssembler::emit_allocate(const ArgVal &NeedStack,
const ArgVal &Live) {
- emit_allocate_heap(NeedStack, ArgVal(ArgVal::TYPE::u, 0), Live);
+ emit_allocate_heap(NeedStack, ArgVal(ArgVal::Word, 0), Live);
}
void BeamModuleAssembler::emit_deallocate(const ArgVal &Deallocate) {
- ASSERT(Deallocate.getType() == ArgVal::TYPE::u);
- ASSERT(Deallocate.getValue() <= 1023);
- ArgVal dealloc = Deallocate;
+ ASSERT(Deallocate.isWord() && Deallocate.getValue() <= 1023);
+
+ if (ERTS_LIKELY(erts_frame_layout == ERTS_FRAME_LAYOUT_RA)) {
+ ArgVal dealloc = Deallocate;
#if !defined(NATIVE_ERLANG_STACK)
- dealloc = dealloc + CP_SIZE;
+ dealloc = dealloc + CP_SIZE;
#endif
- if (dealloc.getValue() > 0) {
- a.add(E, imm(dealloc.getValue() * sizeof(Eterm)));
+ if (dealloc.getValue() > 0) {
+ a.add(E, imm(dealloc.getValue() * sizeof(Eterm)));
+ }
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA);
}
}
void BeamModuleAssembler::emit_test_heap(const ArgVal &Nh, const ArgVal &Live) {
- emit_gc_test(ArgVal(ArgVal::u, 0), Nh, Live);
+ emit_gc_test(ArgVal(ArgVal::Word, 0), Nh, Live);
}
void BeamModuleAssembler::emit_normal_exit() {
@@ -254,45 +257,6 @@ void BeamModuleAssembler::emit_continue_exit() {
abs_jmp(ga->get_do_schedule());
}
-/* This is an alias for handle_error */
-void BeamModuleAssembler::emit_error_action_code() {
- abs_jmp(ga->get_error_action_code());
-}
-
-/* Psuedo-instruction for signalling lambda load errors. Never actually runs. */
-void BeamModuleAssembler::emit_i_lambda_error(const ArgVal &Dummy) {
- a.hlt();
-}
-
-void BeamModuleAssembler::emit_i_make_fun3(const ArgVal &Fun,
- const ArgVal &Dst,
- const ArgVal &NumFree,
- const std::vector<ArgVal> &env) {
- size_t num_free = env.size();
- ASSERT(NumFree.getValue() == num_free);
-
- mov_arg(ARG3, NumFree);
-
- emit_enter_runtime<Update::eHeap>();
-
- a.mov(ARG1, c_p);
- make_move_patch(ARG2, lambdas[Fun.getValue()].patches);
- runtime_call<3>(new_fun_thing);
-
- emit_leave_runtime<Update::eHeap>();
-
- comment("Move fun environment");
- for (unsigned i = 0; i < num_free; i++) {
- mov_arg(x86::qword_ptr(RET,
- offsetof(ErlFunThing, env) + i * sizeof(Eterm)),
- env[i]);
- }
-
- comment("Create boxed ptr");
- a.or_(RETb, TAG_PRIMARY_BOXED);
- mov_arg(Dst, RET);
-}
-
void BeamModuleAssembler::emit_get_list(const x86::Gp src,
const ArgVal &Hd,
const ArgVal &Tl) {
@@ -443,7 +407,10 @@ void BeamModuleAssembler::emit_tuple_assertion(const ArgVal &Src,
a.short_().je(ok);
a.bind(fatal);
- { a.ud2(); }
+ {
+ a.comment("# Tuple assertion failure");
+ a.ud2();
+ }
a.bind(ok);
}
#endif
@@ -506,7 +473,7 @@ void BeamModuleAssembler::emit_init(const ArgVal &Y) {
}
void BeamModuleAssembler::emit_init_yregs(const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+ const Span<ArgVal> &args) {
unsigned count = Size.getValue();
ASSERT(count == args.size());
@@ -523,10 +490,10 @@ void BeamModuleAssembler::emit_init_yregs(const ArgVal &Size,
while (i < count) {
unsigned slots = 1;
- unsigned first_y = args.at(i).getValue();
+ unsigned first_y = args[i].getValue();
while (i + slots < count) {
- ArgVal current_y = args.at(i + slots);
+ ArgVal current_y = args[i + slots];
if (first_y + slots != current_y.getValue()) {
break;
}
@@ -585,8 +552,7 @@ void BeamModuleAssembler::emit_init_yregs(const ArgVal &Size,
}
void BeamModuleAssembler::emit_i_trim(const ArgVal &Words) {
- ASSERT(Words.getType() == ArgVal::TYPE::u);
- ASSERT(Words.getValue() <= 1023);
+ ASSERT(Words.isWord() && Words.getValue() <= 1023);
if (Words.getValue() > 0) {
a.add(E, imm(Words.getValue() * sizeof(Eterm)));
@@ -719,7 +685,7 @@ void BeamModuleAssembler::emit_store_cons(const ArgVal &len,
void BeamModuleAssembler::emit_put_tuple2(const ArgVal &Dst,
const ArgVal &Arity,
- const std::vector<ArgVal> &args) {
+ const Span<ArgVal> &args) {
size_t size = args.size();
ASSERT(arityval(Arity.getValue()) == size);
@@ -905,7 +871,7 @@ void BeamModuleAssembler::emit_is_function(const ArgVal &Fail,
void BeamModuleAssembler::emit_is_function2(const ArgVal &Fail,
const ArgVal &Src,
const ArgVal &Arity) {
- if (Arity.getType() != ArgVal::i) {
+ if (Arity.getType() != ArgVal::Immediate) {
/*
* Non-literal arity - extremely uncommon. Generate simple code.
*/
@@ -1414,6 +1380,8 @@ void BeamGlobalAssembler::emit_arith_compare_shared() {
atom_compare = a.newLabel();
generic_compare = a.newLabel();
+ emit_enter_frame();
+
/* Are both floats?
*
* This is done first as relative comparisons on atoms doesn't make much
@@ -1447,6 +1415,7 @@ void BeamGlobalAssembler::emit_arith_compare_shared() {
a.setae(x86::al);
a.dec(x86::al);
+ emit_leave_frame();
a.ret();
a.bind(atom_compare);
@@ -1470,6 +1439,7 @@ void BeamGlobalAssembler::emit_arith_compare_shared() {
/* !! erts_cmp_atoms returns int, not Sint !! */
a.test(RETd, RETd);
+ emit_leave_frame();
a.ret();
}
@@ -1486,6 +1456,7 @@ void BeamGlobalAssembler::emit_arith_compare_shared() {
a.test(RET, RET);
+ emit_leave_frame();
a.ret();
}
}
@@ -1638,24 +1609,35 @@ void BeamModuleAssembler::emit_catch(const ArgVal &Y, const ArgVal &Fail) {
catches.push_back({{patch_addr, 0x1, 0}, labels[Fail.getValue()]});
}
+/*
+ * At entry:
+ *
+ * x0 = THE_NON_VALUE
+ * x1 = Term
+ * x2 = Stacktrace
+ * x3 = Exception class
+ */
void BeamGlobalAssembler::emit_catch_end_shared() {
Label not_throw = a.newLabel(), not_error = a.newLabel(),
after_gc = a.newLabel();
+ emit_enter_frame();
+
/* Load thrown value / reason into ARG2 for add_stacktrace */
- a.mov(ARG2, getXRef(2));
+ a.mov(ARG2, getXRef(1));
- a.cmp(getXRef(1), imm(am_throw));
+ a.cmp(getXRef(3), imm(am_throw));
a.short_().jne(not_throw);
/* Thrown value, return it in x0 */
a.mov(getXRef(0), ARG2);
+ emit_leave_frame();
a.ret();
a.bind(not_throw);
{
- a.cmp(getXRef(1), imm(am_error));
+ a.cmp(getXRef(3), imm(am_error));
/* NOTE: Short won't reach if JIT_HARD_DEBUG is defined. */
a.jne(not_error);
@@ -1664,7 +1646,7 @@ void BeamGlobalAssembler::emit_catch_end_shared() {
a.mov(ARG1, c_p);
/* ARG2 set above. */
- a.mov(ARG3, getXRef(3));
+ a.mov(ARG3, getXRef(2));
runtime_call<3>(add_stacktrace);
emit_leave_runtime<Update::eStack | Update::eHeap>();
@@ -1699,6 +1681,7 @@ void BeamGlobalAssembler::emit_catch_end_shared() {
a.mov(getXRef(0), RET);
}
+ emit_leave_frame();
a.ret();
}
@@ -1719,12 +1702,11 @@ void BeamModuleAssembler::emit_try_end(const ArgVal &Y) {
}
void BeamModuleAssembler::emit_try_case(const ArgVal &Y) {
+ /* The try_tag in the Y slot in the stack frame has already been
+ * cleared. */
a.dec(x86::qword_ptr(c_p, offsetof(Process, catches)));
- mov_arg(Y, NIL);
- a.movups(x86::xmm0, x86::xmmword_ptr(registers, 1 * sizeof(Eterm)));
a.mov(RET, getXRef(3));
- a.movups(x86::xmmword_ptr(registers, 0 * sizeof(Eterm)), x86::xmm0);
- a.mov(getXRef(2), RET);
+ a.mov(getXRef(0), RET);
#ifdef DEBUG
Label fvalue_ok = a.newLabel(), assertion_failed = a.newLabel();
@@ -1762,7 +1744,7 @@ void BeamModuleAssembler::emit_raise(const ArgVal &Trace, const ArgVal &Value) {
emit_leave_runtime();
- emit_handle_error();
+ emit_raise_exception();
}
void BeamModuleAssembler::emit_build_stacktrace() {
@@ -1792,7 +1774,7 @@ void BeamModuleAssembler::emit_raw_raise() {
a.test(RET, RET);
a.short_().jne(next);
- emit_handle_error();
+ emit_raise_exception();
a.bind(next);
a.mov(getXRef(0), imm(am_badarg));
}
@@ -1800,14 +1782,21 @@ void BeamModuleAssembler::emit_raw_raise() {
void BeamGlobalAssembler::emit_i_test_yield_shared() {
int mfa_offset = -(int)sizeof(ErtsCodeMFA) - BEAM_ASM_FUNC_PROLOGUE_SIZE;
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ /* Subtract the size of an `emit_enter_frame` sequence. */
+ mfa_offset -= 4;
+ } else {
+ ASSERT(erts_frame_layout == ERTS_FRAME_LAYOUT_RA);
+ }
+
+ a.add(x86::rsp, imm(8));
+
/* Yield address is in ARG3. */
a.lea(ARG2, x86::qword_ptr(ARG3, mfa_offset));
a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), ARG2);
a.mov(ARG2, x86::qword_ptr(ARG2, offsetof(ErtsCodeMFA, arity)));
a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), ARG2);
- emit_discard_cp();
-
a.jmp(labels[context_switch_simplified]);
}
@@ -1816,25 +1805,37 @@ void BeamModuleAssembler::emit_i_test_yield() {
/* When present, this is guaranteed to be the first instruction after the
* breakpoint trampoline. */
-
ASSERT(a.offset() % 8 == 0);
+
+ emit_enter_frame();
+
a.bind(entry);
a.dec(FCALLS);
a.short_().jg(next);
a.lea(ARG3, x86::qword_ptr(entry));
- a.call(funcYield);
+ a.call(yieldEnter);
a.bind(next);
+
+#if defined(JIT_HARD_DEBUG) && defined(ERLANG_FRAME_POINTERS)
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, x86::rbp);
+ a.mov(ARG3, x86::rsp);
+
+ emit_enter_runtime<Update::eStack>();
+ runtime_call<3>(erts_validate_stack);
+ emit_leave_runtime<Update::eStack>();
+#endif
}
void BeamModuleAssembler::emit_i_yield() {
a.mov(getXRef(0), imm(am_true));
#ifdef NATIVE_ERLANG_STACK
- fragment_call(ga->get_dispatch_return());
+ fragment_call(yieldReturn);
#else
Label next = a.newLabel();
a.lea(ARG3, x86::qword_ptr(next));
- abs_jmp(ga->get_dispatch_return());
+ a.jmp(yieldReturn);
a.align(kAlignCode, 8);
a.bind(next);
@@ -1864,9 +1865,9 @@ void BeamModuleAssembler::emit_i_perf_counter() {
{
a.mov(TMP_MEM1q, RET);
- emit_gc_test(ArgVal(ArgVal::i, 0),
- ArgVal(ArgVal::i, ERTS_MAX_UINT64_HEAP_SIZE),
- ArgVal(ArgVal::i, 0));
+ emit_gc_test(ArgVal(ArgVal::Word, 0),
+ ArgVal(ArgVal::Word, ERTS_MAX_UINT64_HEAP_SIZE),
+ ArgVal(ArgVal::Word, 0));
a.mov(ARG1, TMP_MEM1q);
diff --git a/erts/emulator/beam/jit/x86/instr_float.cpp b/erts/emulator/beam/jit/x86/instr_float.cpp
index 43acf485ff..b39433164e 100644
--- a/erts/emulator/beam/jit/x86/instr_float.cpp
+++ b/erts/emulator/beam/jit/x86/instr_float.cpp
@@ -25,6 +25,50 @@ extern "C"
#include "big.h"
}
+/* Fixes a silly compilation error on Windows, where the following macro
+ * prevents us from using `std::numeric_limits<T>::max()` */
+#ifdef max
+# undef max
+#endif
+
+void BeamGlobalAssembler::emit_check_float_error() {
+ Label error = a.newLabel(), floatMax = a.newLabel(),
+ floatSignMask = a.newLabel();
+
+ a.movsd(x86::xmm2, x86::xmm0);
+ a.movsd(x86::xmm1, x86::qword_ptr(floatMax));
+ a.andpd(x86::xmm2, x86::xmmword_ptr(floatSignMask));
+ a.ucomisd(x86::xmm1, x86::xmm2);
+ a.short_().jb(error);
+ a.ret();
+
+ a.bind(error);
+ {
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)),
+ imm(EXC_BADARITH));
+ a.sub(ARG4, ARG4);
+ a.jmp(labels[raise_exception]);
+ }
+
+ a.align(kAlignCode, 16);
+ a.bind(floatSignMask);
+ a.embedUInt64(0x7FFFFFFFFFFFFFFFul);
+ a.bind(floatMax);
+ a.embedDouble(std::numeric_limits<double>::max());
+}
+
+void BeamModuleAssembler::emit_float_instr(uint32_t instId,
+ const ArgVal &LHS,
+ const ArgVal &RHS,
+ const ArgVal &Dst) {
+ a.movsd(x86::xmm0, getArgRef(LHS));
+ a.movsd(x86::xmm1, getArgRef(RHS));
+
+ a.emit(instId, x86::xmm0, x86::xmm1);
+ safe_fragment_call(ga->get_check_float_error());
+ a.movsd(getArgRef(Dst), x86::xmm0);
+}
+
void BeamModuleAssembler::emit_fload(const ArgVal &Src, const ArgVal &Dst) {
/* {thing_word,double} */
mov_arg(ARG1, Src);
@@ -47,122 +91,67 @@ void BeamModuleAssembler::emit_fstore(const ArgVal &Src, const ArgVal &Dst) {
a.add(HTOP, imm(FLOAT_SIZE_OBJECT * sizeof(Eterm)));
}
-static int handle_fconv(Eterm src, double *dst) {
+static double handle_fconv(Eterm src) {
if (is_small(src)) {
- *dst = (double)signed_val(src);
+ return (double)signed_val(src);
} else if (is_float(src)) {
- GET_DOUBLE(src, *(FloatDef *)dst);
+ double res;
+ GET_DOUBLE(src, *(FloatDef *)&res);
+ return res;
} else if (is_big(src)) {
- if (big_to_double(src, dst) < 0) {
- return 1;
+ double res;
+ if (big_to_double(src, &res) < 0) {
+ return NAN;
}
+ return res;
} else {
- return 1;
+ return NAN;
}
-
- return 0;
}
-void BeamModuleAssembler::emit_fconv(const ArgVal &Src, const ArgVal &Dst) {
- Label next = a.newLabel();
-
- mov_arg(ARG1, Src);
- a.lea(ARG2, getArgRef(Dst));
-
+void BeamGlobalAssembler::emit_fconv_shared() {
emit_enter_runtime();
-
- runtime_call<2>(handle_fconv);
-
+ runtime_call<1>(handle_fconv);
emit_leave_runtime();
- a.test(RET, RET);
- a.short_().je(next);
-
- emit_error(EXC_BADARITH);
-
- a.bind(next);
+ a.jmp(labels[check_float_error]);
}
-void BeamModuleAssembler::emit_check_float(Label next, x86::Xmm value) {
- a.movsd(x86::xmm2, value);
- a.movsd(x86::xmm1, x86::qword_ptr(floatMax));
- a.andpd(x86::xmm2, x86::xmmword_ptr(floatSignMask));
- a.ucomisd(x86::xmm1, x86::xmm2);
- a.short_().jnb(next);
-
- emit_error(EXC_BADARITH);
+void BeamModuleAssembler::emit_fconv(const ArgVal &Src, const ArgVal &Dst) {
+ mov_arg(ARG1, Src);
+ safe_fragment_call(ga->get_fconv_shared());
+ a.movsd(getArgRef(Dst), x86::xmm0);
}
void BeamModuleAssembler::emit_i_fadd(const ArgVal &LHS,
const ArgVal &RHS,
const ArgVal &Dst) {
- Label next = a.newLabel();
-
- a.movsd(x86::xmm0, getArgRef(LHS));
- a.movsd(x86::xmm1, getArgRef(RHS));
- a.addpd(x86::xmm0, x86::xmm1);
-
- emit_check_float(next, x86::xmm0);
-
- a.bind(next);
- a.movsd(getArgRef(Dst), x86::xmm0);
+ emit_float_instr(x86::Inst::kIdAddpd, LHS, RHS, Dst);
}
void BeamModuleAssembler::emit_i_fsub(const ArgVal &LHS,
const ArgVal &RHS,
const ArgVal &Dst) {
- Label next = a.newLabel();
-
- a.movsd(x86::xmm0, getArgRef(LHS));
- a.movsd(x86::xmm1, getArgRef(RHS));
- a.subpd(x86::xmm0, x86::xmm1);
-
- emit_check_float(next, x86::xmm0);
-
- a.bind(next);
- a.movsd(getArgRef(Dst), x86::xmm0);
+ emit_float_instr(x86::Inst::kIdSubpd, LHS, RHS, Dst);
}
void BeamModuleAssembler::emit_i_fmul(const ArgVal &LHS,
const ArgVal &RHS,
const ArgVal &Dst) {
- Label next = a.newLabel();
-
- a.movsd(x86::xmm0, getArgRef(LHS));
- a.movsd(x86::xmm1, getArgRef(RHS));
- a.mulpd(x86::xmm0, x86::xmm1);
-
- emit_check_float(next, x86::xmm0);
-
- a.bind(next);
- a.movsd(getArgRef(Dst), x86::xmm0);
+ emit_float_instr(x86::Inst::kIdMulpd, LHS, RHS, Dst);
}
void BeamModuleAssembler::emit_i_fdiv(const ArgVal &LHS,
const ArgVal &RHS,
const ArgVal &Dst) {
- Label next = a.newLabel();
-
- a.movsd(x86::xmm0, getArgRef(LHS));
- a.movsd(x86::xmm1, getArgRef(RHS));
- a.divpd(x86::xmm0, x86::xmm1);
-
- emit_check_float(next, x86::xmm0);
-
- a.bind(next);
- a.movsd(getArgRef(Dst), x86::xmm0);
+ emit_float_instr(x86::Inst::kIdDivpd, LHS, RHS, Dst);
}
void BeamModuleAssembler::emit_i_fnegate(const ArgVal &Src, const ArgVal &Dst) {
- Label next = a.newLabel();
-
/* xmm0 = 0.0 */
a.psubd(x86::xmm0, x86::xmm0);
a.movsd(x86::xmm1, getArgRef(Src));
a.subpd(x86::xmm0, x86::xmm1);
-
- emit_check_float(next, x86::xmm0);
-
- a.bind(next);
+ safe_fragment_call(ga->get_check_float_error());
a.movsd(getArgRef(Dst), x86::xmm0);
}
diff --git a/erts/emulator/beam/jit/x86/instr_fun.cpp b/erts/emulator/beam/jit/x86/instr_fun.cpp
new file mode 100644
index 0000000000..1c8c1a22d9
--- /dev/null
+++ b/erts/emulator/beam/jit/x86/instr_fun.cpp
@@ -0,0 +1,394 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2021-2021. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+/* Calls to functions that are being purged (but haven't finished) land here.
+ *
+ * ARG3 = arity
+ * ARG4 = fun thing
+ * ARG5 = current PC */
+void BeamGlobalAssembler::emit_unloaded_fun() {
+ Label error = a.newLabel();
+
+ emit_enter_frame();
+
+ a.mov(TMP_MEM1q, ARG5);
+
+ emit_enter_runtime<Update::eHeap | Update::eStack | Update::eReductions>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ /* ARG3 and ARG4 have already been set. */
+ runtime_call<4>(beam_jit_handle_unloaded_fun);
+
+ emit_leave_runtime<Update::eHeap | Update::eStack | Update::eReductions |
+ Update::eCodeIndex>();
+
+ a.test(RET, RET);
+ a.jz(error);
+
+ emit_leave_frame();
+ a.jmp(emit_setup_export_call(RET));
+
+ a.bind(error);
+ {
+ /* The `raise_exception` fragment expects that the PC is on the
+ * stack. */
+ a.push(TMP_MEM1q);
+ mov_imm(ARG4, nullptr);
+ a.jmp(labels[raise_exception]);
+ }
+}
+
+/* Handles errors for `call_fun` and `i_lambda_trampoline`.
+ *
+ * ARG3 = arity
+ * ARG4 = fun thing
+ * ARG5 = current PC */
+void BeamGlobalAssembler::emit_handle_call_fun_error() {
+ Label bad_arity = a.newLabel(), bad_fun = a.newLabel();
+
+ emit_enter_frame();
+
+ emit_is_boxed(bad_fun, ARG4);
+
+ x86::Gp fun_thing = emit_ptr_val(RET, ARG4);
+ a.mov(RET, emit_boxed_val(fun_thing));
+ a.cmp(RET, imm(HEADER_EXPORT));
+ a.short_().je(bad_arity);
+ a.cmp(RET, imm(HEADER_FUN));
+ a.short_().je(bad_arity);
+
+ a.bind(bad_fun);
+ {
+ /* Not a fun: this is only reachable through `call_fun` */
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)), imm(EXC_BADFUN));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, fvalue)), ARG4);
+
+ /* The `raise_exception` fragment expects that the PC is on the
+ * stack. */
+ a.push(ARG5);
+ mov_imm(ARG4, nullptr);
+ a.jmp(labels[raise_exception]);
+ }
+
+ a.bind(bad_arity);
+ {
+ /* Bad arity: this is reachable through `call_fun` when we have an
+ * export fun, and `i_lambda_trampoline` when we have a local one. */
+
+ /* Stash our fun and current PC. Note that we don't move the fun to
+ * {x,0} straight away as that would clobber the first argument. */
+ a.mov(TMP_MEM1q, ARG4);
+ a.mov(TMP_MEM2q, ARG5);
+
+ emit_enter_runtime<Update::eHeap | Update::eStack>();
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ /* ARG3 is already set. */
+ runtime_call<3>(beam_jit_build_argument_list);
+
+ emit_leave_runtime<Update::eHeap | Update::eStack>();
+
+ a.mov(ARG1, TMP_MEM1q);
+ a.mov(getXRef(0), ARG1);
+ a.mov(getXRef(1), RET);
+
+ /* Create the {Fun, Args} tuple. */
+ {
+ const int32_t bytes_needed = (3 + S_RESERVED) * sizeof(Eterm);
+ Label after_gc = a.newLabel();
+
+ a.lea(ARG3, x86::qword_ptr(HTOP, bytes_needed));
+ a.cmp(ARG3, E);
+ a.short_().jbe(after_gc);
+ {
+ mov_imm(ARG4, 2);
+ aligned_call(labels[garbage_collect]);
+ }
+ a.bind(after_gc);
+
+ a.mov(ARG1, getXRef(0));
+ a.mov(ARG2, getXRef(1));
+
+ a.mov(x86::qword_ptr(HTOP), imm(make_arityval(2)));
+ a.mov(x86::qword_ptr(HTOP, sizeof(Eterm[1])), ARG1);
+ a.mov(x86::qword_ptr(HTOP, sizeof(Eterm[2])), ARG2);
+
+ a.lea(ARG1, x86::qword_ptr(HTOP, TAG_PRIMARY_BOXED));
+ a.add(HTOP, imm(sizeof(Eterm[3])));
+ }
+
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)),
+ imm(EXC_BADARITY));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, fvalue)), ARG1);
+
+ /* The `raise_exception` fragment expects that the PC is on the
+ * stack. */
+ a.push(TMP_MEM2q);
+ mov_imm(ARG4, nullptr);
+ a.jmp(labels[raise_exception]);
+ }
+}
+
+/* `call_fun` instructions land here to check arity and set up their
+ * environment before jumping to the actual implementation.
+ *
+ * Keep in mind that this runs in the limbo between caller and callee, so we
+ * must not enter a frame here.
+ *
+ * ARG3 = arity
+ * ARG4 = fun thing
+ * ARG5 = current PC */
+void BeamModuleAssembler::emit_i_lambda_trampoline(const ArgVal &Index,
+ const ArgVal &Lbl,
+ const ArgVal &Arity,
+ const ArgVal &NumFree) {
+ const ssize_t effective_arity = Arity.getValue() - NumFree.getValue();
+ const ssize_t num_free = NumFree.getValue();
+ Label error = a.newLabel();
+ ssize_t i;
+
+ auto &lambda = lambdas[Index.getValue()];
+ lambda.trampoline = a.newLabel();
+ a.bind(lambda.trampoline);
+
+ a.cmp(ARG3, imm(effective_arity));
+ a.short_().jne(error);
+
+ emit_ptr_val(ARG4, ARG4);
+
+ for (i = 0; i < num_free - 1; i += 2) {
+ size_t offset = offsetof(ErlFunThing, env) + i * sizeof(Eterm);
+
+ a.movups(x86::xmm0, emit_boxed_val(ARG4, offset, sizeof(Eterm[2])));
+ a.movups(getXRef(i + effective_arity, sizeof(Eterm[2])), x86::xmm0);
+ }
+
+ if (i < num_free) {
+ size_t offset = offsetof(ErlFunThing, env) + i * sizeof(Eterm);
+
+ a.mov(RET, emit_boxed_val(ARG4, offset));
+ a.mov(getXRef(i + effective_arity), RET);
+ }
+
+ a.jmp(labels[Lbl.getValue()]);
+
+ a.bind(error);
+ abs_jmp(ga->get_handle_call_fun_error());
+}
+
+void BeamModuleAssembler::emit_i_make_fun3(const ArgVal &Fun,
+ const ArgVal &Dst,
+ const ArgVal &Arity,
+ const ArgVal &NumFree,
+ const Span<ArgVal> &env) {
+ size_t num_free = env.size();
+ ASSERT(NumFree.getValue() == num_free);
+
+ mov_arg(ARG3, Arity);
+ mov_arg(ARG4, NumFree);
+
+ emit_enter_runtime<Update::eHeap>();
+
+ a.mov(ARG1, c_p);
+ make_move_patch(ARG2, lambdas[Fun.getValue()].patches);
+ runtime_call<4>(new_fun_thing);
+
+ emit_leave_runtime<Update::eHeap>();
+
+ comment("Move fun environment");
+ for (unsigned i = 0; i < num_free; i++) {
+ mov_arg(x86::qword_ptr(RET,
+ offsetof(ErlFunThing, env) + i * sizeof(Eterm)),
+ env[i]);
+ }
+
+ comment("Create boxed ptr");
+ a.or_(RETb, TAG_PRIMARY_BOXED);
+ mov_arg(Dst, RET);
+}
+
+/* Unwraps `apply_fun` so we can share the rest of the implementation with
+ * `call_fun`. */
+void BeamGlobalAssembler::emit_apply_fun_shared() {
+ Label finished = a.newLabel();
+
+ emit_enter_frame();
+
+ /* Put the arity and fun into the right registers for `call_fun`, and stash
+ * the argument list in ARG5 for the error path. We'll bump the arity as
+ * we go through the argument list. */
+ mov_imm(ARG3, 0);
+ a.mov(ARG4, getXRef(0));
+ a.mov(ARG5, getXRef(1));
+
+ {
+ Label unpack_next = a.newLabel(), malformed_list = a.newLabel(),
+ raise_error = a.newLabel();
+
+ auto x_register = getXRef(0);
+
+ ASSERT(x_register.shift() == 0);
+ x_register.setIndex(ARG3);
+ x_register.setShift(3);
+
+ a.mov(ARG1, ARG5);
+ a.bind(unpack_next);
+ {
+ a.cmp(ARG1d, imm(NIL));
+ a.short_().je(finished);
+
+ a.test(ARG1d, imm(_TAG_PRIMARY_MASK - TAG_PRIMARY_LIST));
+ a.short_().jne(malformed_list);
+
+ emit_ptr_val(ARG1, ARG1);
+ a.mov(RET, getCARRef(ARG1));
+ a.mov(ARG1, getCDRRef(ARG1));
+ a.mov(x_register, RET);
+
+ a.inc(ARG3);
+
+ /* We bail at MAX_REG-1 rather than MAX_REG as the highest register
+ * is reserved for the loader. */
+ a.cmp(ARG3, imm(MAX_REG - 1));
+ a.jb(unpack_next);
+ }
+
+ a.mov(RET, imm(SYSTEM_LIMIT));
+ a.jmp(raise_error);
+
+ a.bind(malformed_list);
+ a.mov(RET, imm(BADARG));
+
+ a.bind(raise_error);
+ {
+ static const ErtsCodeMFA apply_mfa = {am_erlang, am_apply, 2};
+
+ a.mov(getXRef(0), ARG4);
+ a.mov(getXRef(1), ARG5);
+
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)), RET);
+ mov_imm(ARG4, &apply_mfa);
+
+ emit_leave_frame();
+ a.jmp(labels[raise_exception]);
+ }
+ }
+
+ a.bind(finished);
+
+ emit_leave_frame();
+ a.ret();
+}
+
+void BeamModuleAssembler::emit_i_apply_fun() {
+ safe_fragment_call(ga->get_apply_fun_shared());
+
+ x86::Gp dest = emit_call_fun();
+ ASSERT(dest != ARG6);
+ erlang_call(dest, ARG6);
+}
+
+void BeamModuleAssembler::emit_i_apply_fun_last(const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+ emit_i_apply_fun_only();
+}
+
+void BeamModuleAssembler::emit_i_apply_fun_only() {
+ safe_fragment_call(ga->get_apply_fun_shared());
+
+ x86::Gp dest = emit_call_fun();
+ emit_leave_frame();
+ a.jmp(dest);
+}
+
+/* Asssumes that:
+ * ARG3 = arity
+ * ARG4 = fun thing */
+x86::Gp BeamModuleAssembler::emit_call_fun() {
+ Label exported = a.newLabel(), next = a.newLabel();
+
+ /* Load the error fragment into ARG2 so we can CMOV ourselves there on
+ * error. */
+ a.mov(ARG2, ga->get_handle_call_fun_error());
+
+ /* The `handle_call_fun_error` and `i_lambda_trampoline` fragments expect
+ * current PC in ARG5. */
+ a.lea(ARG5, x86::qword_ptr(next));
+
+ /* As emit_is_boxed(), but explicitly sets ZF so we can rely on that for
+ * error checking in `next`. */
+ a.test(ARG4d, imm(_TAG_PRIMARY_MASK - TAG_PRIMARY_BOXED));
+ a.short_().jne(next);
+
+ x86::Gp fun_thing = emit_ptr_val(RET, ARG4);
+ a.cmp(emit_boxed_val(fun_thing), imm(HEADER_EXPORT));
+ a.short_().je(exported);
+ a.cmp(emit_boxed_val(fun_thing), imm(HEADER_FUN));
+ a.short_().jne(next);
+
+ a.mov(ARG1, emit_boxed_val(fun_thing, offsetof(ErlFunThing, fe)));
+ a.mov(ARG1, x86::qword_ptr(ARG1, offsetof(ErlFunEntry, address)));
+ a.short_().jmp(next);
+
+ a.bind(exported);
+ {
+ a.mov(RET, emit_boxed_val(fun_thing, sizeof(Eterm)));
+ a.mov(ARG1, emit_setup_export_call(RET));
+
+ a.cmp(x86::qword_ptr(RET, offsetof(Export, info.mfa.arity)), ARG3);
+ }
+
+ /* Assumes that ZF is set on success and clear on error, overwriting our
+ * destination with the error fragment's address. */
+ a.bind(next);
+ a.cmovne(ARG1, ARG2);
+
+ return ARG1;
+}
+
+void BeamModuleAssembler::emit_i_call_fun(const ArgVal &Arity) {
+ mov_arg(ARG4, ArgVal(ArgVal::XReg, Arity.getValue()));
+ mov_imm(ARG3, Arity.getValue());
+
+ x86::Gp dest = emit_call_fun();
+ erlang_call(dest, ARG6);
+}
+
+void BeamModuleAssembler::emit_i_call_fun_last(const ArgVal &Arity,
+ const ArgVal &Deallocate) {
+ emit_deallocate(Deallocate);
+
+ mov_arg(ARG4, ArgVal(ArgVal::XReg, Arity.getValue()));
+ mov_imm(ARG3, Arity.getValue());
+
+ x86::Gp dest = emit_call_fun();
+ emit_leave_frame();
+ a.jmp(dest);
+}
+
+/* Psuedo-instruction for signalling lambda load errors. Never actually runs. */
+void BeamModuleAssembler::emit_i_lambda_error(const ArgVal &Dummy) {
+ a.comment("# Lambda error");
+ a.ud2();
+}
diff --git a/erts/emulator/beam/jit/x86/instr_guard_bifs.cpp b/erts/emulator/beam/jit/x86/instr_guard_bifs.cpp
index 1084a1c0e9..2f7289bf25 100644
--- a/erts/emulator/beam/jit/x86/instr_guard_bifs.cpp
+++ b/erts/emulator/beam/jit/x86/instr_guard_bifs.cpp
@@ -49,7 +49,7 @@ void BeamGlobalAssembler::emit_handle_hd_error() {
a.mov(getXRef(0), RET);
a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)), imm(BADARG));
a.mov(ARG4, imm(&mfa));
- a.jmp(labels[handle_error_shared_prologue]);
+ a.jmp(labels[raise_exception]);
}
/*
@@ -88,19 +88,20 @@ void BeamGlobalAssembler::emit_handle_element_error() {
a.mov(getXRef(1), ARG2);
a.mov(x86::qword_ptr(c_p, offsetof(Process, freason)), imm(BADARG));
a.mov(ARG4, imm(&mfa));
- a.jmp(labels[handle_error_shared_prologue]);
+
+ a.jmp(labels[raise_exception]);
}
-/*
- * ARG1 = Position (1-based)
+/* ARG1 = Position (1-based)
* ARG2 = Tuple
* ARG3 = 0 if if in body, otherwise address of failure label.
*
- * Will return with a value in RET only if the element operation succeeds.
- */
+ * Will return with a value in RET only if the element operation succeeds. */
void BeamGlobalAssembler::emit_bif_element_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
+
a.mov(RETd, ARG1d);
a.and_(RETb, imm(_TAG_IMMED1_MASK));
a.cmp(RETb, imm(_TAG_IMMED1_SMALL));
@@ -127,20 +128,20 @@ void BeamGlobalAssembler::emit_bif_element_shared() {
a.inc(ARG4);
a.mov(RET, x86::qword_ptr(ARG5, ARG4, 3));
- a.test(RETd, RETd);
+
+ emit_leave_frame();
a.ret();
a.bind(error);
{
- Label exception = a.newLabel();
+ emit_leave_frame();
a.test(ARG3, ARG3);
- a.short_().je(exception);
- emit_discard_cp();
- a.jmp(ARG3);
+ a.je(labels[handle_element_error]);
- a.bind(exception);
- a.jmp(labels[handle_element_error]);
+ /* Discard return address and jump to fail label. */
+ a.add(x86::rsp, imm(8));
+ a.jmp(ARG3);
}
}
@@ -157,7 +158,8 @@ void BeamModuleAssembler::emit_bif_element(const ArgVal &Fail,
const ArgVal &Dst) {
bool const_position;
- const_position = Pos.getType() == ArgVal::i && is_small(Pos.getValue()) &&
+ const_position = Pos.getType() == ArgVal::Immediate &&
+ is_small(Pos.getValue()) &&
signed_val(Pos.getValue()) > 0 &&
signed_val(Pos.getValue()) <= (Sint)MAX_ARITYVAL;
diff --git a/erts/emulator/beam/jit/x86/instr_map.cpp b/erts/emulator/beam/jit/x86/instr_map.cpp
index a1fb7394d9..e413fbd72b 100644
--- a/erts/emulator/beam/jit/x86/instr_map.cpp
+++ b/erts/emulator/beam/jit/x86/instr_map.cpp
@@ -28,28 +28,8 @@ extern "C"
#include "beam_common.h"
}
-void BeamModuleAssembler::emit_ensure_map(const ArgVal &map) {
- Label next = a.newLabel(), badmap = a.newLabel();
-
- mov_arg(ARG1, map);
- emit_is_boxed(badmap, ARG1, dShort);
- /* We use ARG1 in the badmap branch, so use ARG2 below */
- x86::Gp boxed_ptr = emit_ptr_val(ARG2, ARG1);
- a.mov(ARG2, emit_boxed_val(boxed_ptr));
- a.and_(ARG2d, imm(_TAG_HEADER_MASK));
- a.cmp(ARG2d, imm(_TAG_HEADER_MAP));
- a.short_().je(next);
-
- a.bind(badmap);
- {
- a.mov(x86::qword_ptr(c_p, offsetof(Process, fvalue)), ARG1);
- emit_error(BADMAP);
- }
-
- a.bind(next);
-}
-
void BeamGlobalAssembler::emit_new_map_shared() {
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
@@ -57,6 +37,7 @@ void BeamGlobalAssembler::emit_new_map_shared() {
runtime_call<5>(erts_gc_new_map);
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
+ emit_leave_frame();
a.ret();
}
@@ -64,7 +45,7 @@ void BeamGlobalAssembler::emit_new_map_shared() {
void BeamModuleAssembler::emit_new_map(const ArgVal &Dst,
const ArgVal &Live,
const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+ const Span<ArgVal> &args) {
Label data = embed_vararg_rodata(args, CP_SIZE);
ASSERT(Size.getValue() == args.size());
@@ -78,6 +59,7 @@ void BeamModuleAssembler::emit_new_map(const ArgVal &Dst,
}
void BeamGlobalAssembler::emit_i_new_small_map_lit_shared() {
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
@@ -85,16 +67,16 @@ void BeamGlobalAssembler::emit_i_new_small_map_lit_shared() {
runtime_call<5>(erts_gc_new_small_map_lit);
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
+ emit_leave_frame();
a.ret();
}
-void BeamModuleAssembler::emit_i_new_small_map_lit(
- const ArgVal &Dst,
- const ArgVal &Live,
- const ArgVal &Keys,
- const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_i_new_small_map_lit(const ArgVal &Dst,
+ const ArgVal &Live,
+ const ArgVal &Keys,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
Label data = embed_vararg_rodata(args, CP_SIZE);
ASSERT(Size.getValue() == args.size());
@@ -129,16 +111,15 @@ void BeamModuleAssembler::emit_i_get_map_element(const ArgVal &Fail,
* Don't store the result if the destination is the scratch X register.
* (This instruction was originally a has_map_fields instruction.)
*/
- if (!(Dst.getType() == ArgVal::x && Dst.getValue() == SCRATCH_X_REG)) {
+ if (!(Dst.getType() == ArgVal::XReg && Dst.getValue() == SCRATCH_X_REG)) {
mov_arg(Dst, RET);
}
}
-void BeamModuleAssembler::emit_i_get_map_elements(
- const ArgVal &Fail,
- const ArgVal &Src,
- const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_i_get_map_elements(const ArgVal &Fail,
+ const ArgVal &Src,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
Label data = embed_vararg_rodata(args, 0);
ASSERT(Size.getValue() == args.size());
@@ -181,13 +162,14 @@ void BeamModuleAssembler::emit_i_get_map_element_hash(const ArgVal &Fail,
* Don't store the result if the destination is the scratch X register.
* (This instruction was originally a has_map_fields instruction.)
*/
- if (!(Dst.getType() == ArgVal::x && Dst.getValue() == SCRATCH_X_REG)) {
+ if (!(Dst.getType() == ArgVal::XReg && Dst.getValue() == SCRATCH_X_REG)) {
mov_arg(Dst, RET);
}
}
/* ARG3 = live registers, ARG4 = update vector size, ARG5 = update vector. */
void BeamGlobalAssembler::emit_update_map_assoc_shared() {
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
@@ -195,16 +177,16 @@ void BeamGlobalAssembler::emit_update_map_assoc_shared() {
runtime_call<5>(erts_gc_update_map_assoc);
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
+ emit_leave_frame();
a.ret();
}
-void BeamModuleAssembler::emit_update_map_assoc(
- const ArgVal &Src,
- const ArgVal &Dst,
- const ArgVal &Live,
- const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_update_map_assoc(const ArgVal &Src,
+ const ArgVal &Dst,
+ const ArgVal &Live,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
Label data = embed_vararg_rodata(args, CP_SIZE);
ASSERT(Size.getValue() == args.size());
@@ -223,6 +205,7 @@ void BeamModuleAssembler::emit_update_map_assoc(
*
* Result is returned in RET, error is indicated by ZF. */
void BeamGlobalAssembler::emit_update_map_exact_guard_shared() {
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
@@ -230,6 +213,7 @@ void BeamGlobalAssembler::emit_update_map_exact_guard_shared() {
runtime_call<5>(erts_gc_update_map_exact);
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.ret();
@@ -241,6 +225,7 @@ void BeamGlobalAssembler::emit_update_map_exact_guard_shared() {
void BeamGlobalAssembler::emit_update_map_exact_body_shared() {
Label error = a.newLabel();
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
@@ -248,6 +233,7 @@ void BeamGlobalAssembler::emit_update_map_exact_body_shared() {
runtime_call<5>(erts_gc_update_map_exact);
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
+ emit_leave_frame();
emit_test_the_non_value(RET);
a.short_().je(error);
@@ -257,17 +243,16 @@ void BeamGlobalAssembler::emit_update_map_exact_body_shared() {
a.bind(error);
{
mov_imm(ARG4, 0);
- emit_handle_error();
+ a.jmp(labels[raise_exception]);
}
}
-void BeamModuleAssembler::emit_update_map_exact(
- const ArgVal &Src,
- const ArgVal &Fail,
- const ArgVal &Dst,
- const ArgVal &Live,
- const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_update_map_exact(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Dst,
+ const ArgVal &Live,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
Label data = embed_vararg_rodata(args, CP_SIZE);
ASSERT(Size.getValue() == args.size());
diff --git a/erts/emulator/beam/jit/x86/instr_msg.cpp b/erts/emulator/beam/jit/x86/instr_msg.cpp
index d0fa04d1ac..43097600ab 100644
--- a/erts/emulator/beam/jit/x86/instr_msg.cpp
+++ b/erts/emulator/beam/jit/x86/instr_msg.cpp
@@ -150,6 +150,8 @@ void BeamGlobalAssembler::emit_i_loop_rec_shared() {
x86::Mem await_addr = TMP_MEM1q, message_ptr = TMP_MEM2q,
get_out = TMP_MEM3d;
+ emit_enter_frame();
+
a.or_(x86::dword_ptr(c_p, offsetof(Process, flags)), imm(F_DELAY_GC));
a.mov(x86::qword_ptr(c_p, offsetof(Process, i)), ARG1);
a.mov(await_addr, ARG2);
@@ -223,7 +225,7 @@ void BeamGlobalAssembler::emit_i_loop_rec_shared() {
* Note that the message queue lock is still held in this case. */
a.and_(x86::dword_ptr(c_p, offsetof(Process, flags)), imm(~F_DELAY_GC));
- emit_discard_cp();
+ emit_unwind_frame();
a.jmp(await_addr);
}
@@ -235,7 +237,7 @@ void BeamGlobalAssembler::emit_i_loop_rec_shared() {
a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), imm(0));
a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), imm(0));
- emit_discard_cp();
+ emit_unwind_frame();
a.jmp(labels[do_schedule]);
}
@@ -269,6 +271,7 @@ void BeamGlobalAssembler::emit_i_loop_rec_shared() {
a.mov(ARG1, x86::qword_ptr(ARG1, offsetof(ErtsMessage, m[0])));
a.mov(getXRef(0), ARG1);
+ emit_leave_frame();
a.ret();
}
}
@@ -372,7 +375,7 @@ void BeamModuleAssembler::emit_wait_timeout_locked(const ArgVal &Src,
a.short_().jl(next);
#endif
- emit_handle_error(currLabel, (ErtsCodeMFA *)nullptr);
+ emit_raise_exception(currLabel, (ErtsCodeMFA *)nullptr);
a.bind(wait);
emit_wait_locked(Dest);
diff --git a/erts/emulator/beam/jit/x86/instr_select.cpp b/erts/emulator/beam/jit/x86/instr_select.cpp
index 8aaa80267f..4fef1ea6d7 100644
--- a/erts/emulator/beam/jit/x86/instr_select.cpp
+++ b/erts/emulator/beam/jit/x86/instr_select.cpp
@@ -24,7 +24,7 @@ using namespace asmjit;
void BeamModuleAssembler::emit_linear_search(x86::Gp comparand,
const ArgVal &Fail,
- const std::vector<ArgVal> &args) {
+ const Span<ArgVal> &args) {
int count = args.size() / 2;
for (int i = 0; i < count; i++) {
@@ -35,19 +35,18 @@ void BeamModuleAssembler::emit_linear_search(x86::Gp comparand,
a.je(labels[label.getValue()]);
}
- if (Fail.getType() == ArgVal::f) {
+ if (Fail.isLabel()) {
a.jmp(labels[Fail.getValue()]);
} else {
/* NIL means fallthrough to the next instruction. */
- ASSERT(Fail.getType() == ArgVal::i && Fail.getValue() == NIL);
+ ASSERT(Fail.getType() == ArgVal::Immediate && Fail.getValue() == NIL);
}
}
-void BeamModuleAssembler::emit_i_select_tuple_arity(
- const ArgVal &Src,
- const ArgVal &Fail,
- const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_i_select_tuple_arity(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
mov_arg(ARG2, Src);
emit_is_boxed(labels[Fail.getValue()], ARG2);
x86::Gp boxed_ptr = emit_ptr_val(ARG2, ARG2);
@@ -71,11 +70,10 @@ void BeamModuleAssembler::emit_i_select_tuple_arity(
a.jne(labels[Fail.getValue()]);
}
-void BeamModuleAssembler::emit_i_select_val_lins(
- const ArgVal &Src,
- const ArgVal &Fail,
- const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_i_select_val_lins(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
ASSERT(Size.getValue() == args.size());
mov_arg(ARG2, Src);
if (emit_optimized_three_way_select(Fail, args))
@@ -83,20 +81,19 @@ void BeamModuleAssembler::emit_i_select_val_lins(
emit_linear_search(ARG2, Fail, args);
}
-void BeamModuleAssembler::emit_i_select_val_bins(
- const ArgVal &Src,
- const ArgVal &Fail,
- const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_i_select_val_bins(const ArgVal &Src,
+ const ArgVal &Fail,
+ const ArgVal &Size,
+ const Span<ArgVal> &args) {
ASSERT(Size.getValue() == args.size());
int count = args.size() / 2;
Label fail;
- if (Fail.getType() == ArgVal::f) {
+ if (Fail.isLabel()) {
fail = labels[Fail.getValue()];
} else {
/* NIL means fallthrough to the next instruction. */
- ASSERT(Fail.getType() == ArgVal::i && Fail.getValue() == NIL);
+ ASSERT(Fail.getType() == ArgVal::Immediate && Fail.getValue() == NIL);
fail = a.newLabel();
}
@@ -104,7 +101,7 @@ void BeamModuleAssembler::emit_i_select_val_bins(
comment("Binary search in table of %lu elements", count);
emit_binsearch_nodes(0, count - 1, Fail, args);
- if (Fail.getType() == ArgVal::i) {
+ if (Fail.getType() == ArgVal::Immediate) {
a.bind(fail);
}
}
@@ -115,15 +112,14 @@ void BeamModuleAssembler::emit_i_select_val_bins(
*
* ARG2 is the value being looked up.
*/
-void BeamModuleAssembler::emit_binsearch_nodes(
- size_t Left,
- size_t Right,
- const ArgVal &Fail,
- const std::vector<ArgVal> &args) {
+void BeamModuleAssembler::emit_binsearch_nodes(size_t Left,
+ size_t Right,
+ const ArgVal &Fail,
+ const Span<ArgVal> &args) {
ASSERT(Left <= Right);
ASSERT(Right < args.size() / 2);
size_t mid = (Left + Right) >> 1;
- ArgVal midval(ArgVal::i, args[mid].getValue());
+ ArgVal midval(ArgVal::Immediate, args[mid].getValue());
int count = args.size() / 2;
size_t remaining = (Right - Left + 1);
@@ -179,7 +175,7 @@ void BeamModuleAssembler::emit_i_jump_on_val(const ArgVal &Src,
const ArgVal &Fail,
const ArgVal &Base,
const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+ const Span<ArgVal> &args) {
Label data = embed_vararg_rodata(args, 0);
Label fail;
@@ -191,11 +187,11 @@ void BeamModuleAssembler::emit_i_jump_on_val(const ArgVal &Src,
a.and_(RETb, imm(_TAG_IMMED1_MASK));
a.cmp(RETb, imm(_TAG_IMMED1_SMALL));
- if (Fail.getType() == ArgVal::f) {
+ if (Fail.isLabel()) {
a.jne(labels[Fail.getValue()]);
} else {
/* NIL means fallthrough to the next instruction. */
- ASSERT(Fail.getType() == ArgVal::i && Fail.getValue() == NIL);
+ ASSERT(Fail.getType() == ArgVal::Immediate && Fail.getValue() == NIL);
fail = a.newLabel();
a.short_().jne(fail);
}
@@ -212,7 +208,7 @@ void BeamModuleAssembler::emit_i_jump_on_val(const ArgVal &Src,
}
a.cmp(ARG1, imm(args.size()));
- if (Fail.getType() == ArgVal::f) {
+ if (Fail.isLabel()) {
a.jae(labels[Fail.getValue()]);
} else {
a.short_().jae(fail);
@@ -221,7 +217,7 @@ void BeamModuleAssembler::emit_i_jump_on_val(const ArgVal &Src,
a.lea(RET, x86::qword_ptr(data));
a.jmp(x86::qword_ptr(RET, ARG1, 3));
- if (Fail.getType() == ArgVal::i) {
+ if (Fail.getType() == ArgVal::Immediate) {
a.bind(fail);
}
}
@@ -241,7 +237,7 @@ void BeamModuleAssembler::emit_i_jump_on_val(const ArgVal &Src,
*/
bool BeamModuleAssembler::emit_optimized_three_way_select(
const ArgVal &Fail,
- const std::vector<ArgVal> &args) {
+ const Span<ArgVal> &args) {
if (args.size() != 4 || (args[2].getValue() != args[3].getValue()))
return false;
@@ -249,7 +245,7 @@ bool BeamModuleAssembler::emit_optimized_three_way_select(
uint64_t y = args[1].getValue();
uint64_t combined = x | y;
uint64_t diff = x ^ y;
- ArgVal val(ArgVal::i, combined);
+ ArgVal val(ArgVal::Immediate, combined);
if ((diff & (diff - 1)) != 0)
return false;
@@ -267,11 +263,11 @@ bool BeamModuleAssembler::emit_optimized_three_way_select(
}
cmp_arg(ARG2, val, ARG1);
a.je(labels[args[2].getValue()]);
- if (Fail.getType() == ArgVal::f) {
+ if (Fail.isLabel()) {
a.jmp(labels[Fail.getValue()]);
} else {
/* NIL means fallthrough to the next instruction. */
- ASSERT(Fail.getType() == ArgVal::i && Fail.getValue() == NIL);
+ ASSERT(Fail.getType() == ArgVal::Immediate && Fail.getValue() == NIL);
}
return true;
}
diff --git a/erts/emulator/beam/jit/x86/instr_trace.cpp b/erts/emulator/beam/jit/x86/instr_trace.cpp
index a1b87624c7..128fbbe615 100644
--- a/erts/emulator/beam/jit/x86/instr_trace.cpp
+++ b/erts/emulator/beam/jit/x86/instr_trace.cpp
@@ -31,6 +31,7 @@ extern "C"
*
* RET = export entry */
void BeamGlobalAssembler::emit_generic_bp_global() {
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
@@ -40,6 +41,10 @@ void BeamGlobalAssembler::emit_generic_bp_global() {
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
+ /* This is technically a tail call so we must leave the current frame
+ * before jumping. Note that we might not leave the frame we entered
+ * earlier this function, but one added by `erts_generic_breakpoint`. */
+ emit_leave_frame();
a.jmp(RET);
}
@@ -52,8 +57,14 @@ void BeamGlobalAssembler::emit_generic_bp_local() {
emit_assert_erlang_stack();
#ifdef NATIVE_ERLANG_STACK
- /* Since we've entered here on the Erlang stack, we need to stash our return
- * addresses in case `erts_generic_breakpoint` pushes any trace frames. */
+ /* Since we've entered here on the Erlang stack, we need to stash our
+ * return addresses in case `erts_generic_breakpoint` pushes any trace
+ * frames.
+ *
+ * Note that both of these are return addresses even when frame pointers
+ * are enabled due to the way the breakpoint trampoline works. They must
+ * not be restored until we're ready to return to module code, lest we
+ * leave the stack in an inconsistent state. */
a.pop(TMP_MEM2q);
a.pop(ARG2);
#else
@@ -81,6 +92,7 @@ void BeamGlobalAssembler::emit_generic_bp_local() {
}
#endif
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
@@ -90,14 +102,21 @@ void BeamGlobalAssembler::emit_generic_bp_local() {
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
+ /* This doesn't necessarily leave the frame entered above: see the
+ * corresponding comment in `generic_bp_global` */
+ emit_leave_frame();
+
+ a.cmp(RET, imm(BeamOpCodeAddr(op_i_debug_breakpoint)));
+ a.je(labels[debug_bp]);
+
+ /* Note that we don't restore our return addresses in the `debug_bp` case
+ * above, since it tail calls the error handler and thus never returns to
+ * module code or `call_nif_early`. */
#ifdef NATIVE_ERLANG_STACK
a.push(TMP_MEM1q);
a.push(TMP_MEM2q);
#endif
- a.cmp(RET, imm(BeamOpCodeAddr(op_i_debug_breakpoint)));
- a.je(labels[debug_bp]);
-
a.ret();
}
@@ -110,6 +129,7 @@ void BeamGlobalAssembler::emit_debug_bp() {
emit_assert_erlang_stack();
+ emit_enter_frame();
emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
/* Read and adjust the return address we saved in generic_bp_local. */
@@ -123,13 +143,7 @@ void BeamGlobalAssembler::emit_debug_bp() {
runtime_call<4>(call_error_handler);
emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>();
-
- /* Skip two frames so we can make a direct jump to the error handler. This
- * makes it so that if we are to do a call_nif_early, we skip that and call
- * the error handler's code instead, mirroring the way the interpreter
- * works. */
- emit_discard_cp();
- emit_discard_cp();
+ emit_leave_frame();
a.test(RET, RET);
a.je(error);
@@ -139,7 +153,7 @@ void BeamGlobalAssembler::emit_debug_bp() {
a.bind(error);
{
a.mov(ARG2, TMP_MEM1q);
- a.jmp(labels[handle_error_shared]);
+ a.jmp(labels[raise_exception]);
}
}
@@ -164,7 +178,7 @@ void BeamModuleAssembler::emit_return_trace() {
emit_leave_runtime<Update::eStack | Update::eHeap>();
- emit_deallocate(ArgVal(ArgVal::u, 2));
+ emit_deallocate(ArgVal(ArgVal::Word, 2));
emit_return();
}
@@ -184,49 +198,21 @@ void BeamModuleAssembler::emit_i_return_time_trace() {
emit_leave_runtime<Update::eStack | Update::eHeap>();
- emit_deallocate(ArgVal(ArgVal::u, 1));
+ emit_deallocate(ArgVal(ArgVal::Word, 1));
emit_return();
}
-static void i_return_to_trace(Process *c_p) {
- if (IS_TRACED_FL(c_p, F_TRACE_RETURN_TO)) {
- Uint *cpp = (Uint *)c_p->stop;
- while (is_not_CP(*cpp)) {
- cpp++;
- }
- for (;;) {
- ErtsCodePtr w = cp_val(*cpp);
- if (BeamIsReturnTrace(w)) {
- do
- ++cpp;
- while (is_not_CP(*cpp));
- cpp += 2;
- } else if (BeamIsReturnToTrace(w)) {
- do
- ++cpp;
- while (is_not_CP(*cpp));
- } else {
- break;
- }
- }
- ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
- erts_trace_return_to(c_p, cp_val(*cpp));
- ERTS_REQ_PROC_MAIN_LOCK(c_p);
- }
-}
-
void BeamModuleAssembler::emit_i_return_to_trace() {
emit_enter_runtime<Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
- runtime_call<1>(i_return_to_trace);
+ runtime_call<1>(beam_jit_return_to_trace);
emit_leave_runtime<Update::eStack | Update::eHeap>();
/* Remove the zero-sized stack frame. (Will actually do nothing if
* the native stack is used.) */
- emit_deallocate(ArgVal(ArgVal::u, 0));
-
+ emit_deallocate(ArgVal(ArgVal::Word, 0));
emit_return();
}
@@ -250,5 +236,5 @@ void BeamModuleAssembler::emit_i_hibernate() {
abs_jmp(ga->get_do_schedule());
a.bind(error);
- emit_handle_error(&BIF_TRAP_EXPORT(BIF_hibernate_3)->info.mfa);
+ emit_raise_exception(&BIF_TRAP_EXPORT(BIF_hibernate_3)->info.mfa);
}
diff --git a/erts/emulator/beam/jit/x86/ops.tab b/erts/emulator/beam/jit/x86/ops.tab
index d6af3818a1..8109821a1b 100644
--- a/erts/emulator/beam/jit/x86/ops.tab
+++ b/erts/emulator/beam/jit/x86/ops.tab
@@ -55,12 +55,6 @@ func_info M=a a==am_module_info A=u==1 | label L | move n x==0 => too_old_compil
bif1 Fail u$func:erlang:is_constant/1 Src Dst => too_old_compiler
-# Since the constant pool was introduced in R12B, empty tuples ({})
-# are literals. Therefore we no longer need to allow put_tuple/2
-# with a tuple size of zero.
-
-put_tuple u==0 d => too_old_compiler
-
#
# All the other instructions.
#
@@ -428,21 +422,6 @@ is_ne f? s s
# Code compiled with OTP 22 and later uses put_tuple2 to
# to construct a tuple.
#
-# Code compiled before OTP 22 uses put_tuple + one put instruction
-# per element. Translate to put_tuple2.
-#
-
-i_put_tuple/2
-put_tuple Arity Dst => i_put_tuple Dst u
-
-i_put_tuple Dst Arity Puts=* | put S1 | put S2 | \
- put S3 | put S4 | put S5 => \
- tuple_append_put5(Arity, Dst, Puts, S1, S2, S3, S4, S5)
-
-i_put_tuple Dst Arity Puts=* | put S => \
- tuple_append_put(Arity, Dst, Puts, S)
-
-i_put_tuple Dst Arity Puts=* => put_tuple2 Dst Arity Puts
put_tuple2 S A *
@@ -470,7 +449,6 @@ call_bif W
call_bif_mfa a a I
call_nif W W W
call_error_handler
-error_action_code
return_trace
%hot
@@ -528,6 +506,21 @@ i_load_nif
%hot
#
+# The call_on_load_function/1 BIF is an instruction.
+#
+
+call_ext u==1 u$func:erlang:call_on_load_function/1 => \
+ i_call_on_load_function
+call_ext_last u==1 u$func:erlang:call_on_load_function/1 D => \
+ i_call_on_load_function | deallocate D | return
+call_ext_only u==1 u$func:erlang:call_on_load_function/1 => \
+ i_call_on_load_function | return
+
+%cold
+i_call_on_load_function
+%hot
+
+#
# apply/2 is an instruction, not a BIF.
#
@@ -643,7 +636,6 @@ bif1 Fail=f Bif=u$bif:erlang:tl/1 Src Dst => \
bif1 Fail Bif=u$bif:erlang:get/1 Src=s Dst=d => get(Src, Dst)
bif2 Fail u$bif:erlang:element/2 S1=ixy S2 Dst => bif_element Fail S1 S2 Dst
-
bif_element j? s s d
bif1 Fail Bif S1 Dst | never_fails(Bif) => nofail_bif1 S1 Bif Dst
@@ -706,7 +698,7 @@ make_fun3 OldIndex=u Dst=d NumFree=u Env=* => make_fun3(OldIndex, Dst, NumFree,
%cold
-i_make_fun3 F S t *
+i_make_fun3 F S t t *
# Psuedo-instruction for signalling lambda load errors. Never actually runs.
i_lambda_error t
@@ -718,7 +710,7 @@ is_function Fail=f c => jump Fail
# The start and end of a function.
int_func_start/5
-int_func_end/0
+int_func_end/2
func_prologue/2
@@ -753,9 +745,8 @@ int_func_start Func_Label Func_Line M F A | \
i_breakpoint_trampoline | \
i_test_yield
-
-int_func_end | needs_nif_padding() => i_nif_padding
-int_func_end =>
+int_func_end Func_Label Entry_Label => \
+ func_end(Func_Label, Entry_Label)
# Handles yielding on function ingress (rather than on each call).
i_test_yield
@@ -763,28 +754,13 @@ i_test_yield
# Ensures that the prior function is large enough to allow NIF patching.
i_nif_padding
+# Landing pad for fun calls/apply where we set up arguments and check errors
+i_lambda_trampoline W f W W
+
# Handles tracing, early NIF calls, and so on.
i_breakpoint_trampoline
# ================================================================
-# Bit syntax matching obsoleted in OTP 22.
-# ================================================================
-
-%cold
-bs_start_match2 Fail=f ica X Y D => jump Fail
-bs_start_match2 Fail Bin X Y D => i_bs_start_match2 Bin Fail X Y D
-i_bs_start_match2 S f t t d
-
-bs_save2 Reg Index => bs_save(Reg, Index)
-i_bs_save2 x t
-
-bs_restore2 Reg Index => bs_restore(Reg, Index)
-i_bs_restore2 S t
-
-bs_context_to_binary S
-%warm
-
-# ================================================================
# New bit syntax matching (R11B).
# ================================================================
@@ -1065,36 +1041,17 @@ apply t
apply_last t t
#
-# Handle compatibility with OTP 17 here.
+# Map instructions. First introduced in R17.
#
-i_put_map_assoc/4
+# We KNOW that in OTP 18 and higher, a put_map_assoc instruction is
+# always preceded by an is_map test. That means that put_map_assoc can
+# never fail and does not need any failure label.
-# We KNOW that in OTP 20 (actually OTP 18 and higher), a put_map_assoc instruction
-# is always preceded by an is_map test. That means that put_map_assoc can never
-# fail and does not need any failure label.
-
-put_map_assoc Fail Map Dst Live Size Rest=* | compiled_with_otp_20_or_higher() => \
+put_map_assoc Fail Map Dst Live Size Rest=* => \
i_put_map_assoc Map Dst Live Size Rest
-# Translate the put_map_assoc instruction if the module was compiled by a compiler
-# before 20. This is only necessary if the OTP 17 compiler was used, but we
-# have no safe and relatively easy way to know whether OTP 18/19 was used.
-
-put_map_assoc Fail=p Map Dst Live Size Rest=* => \
- ensure_map Map | i_put_map_assoc Map Dst Live Size Rest
-put_map_assoc Fail=f Map Dst Live Size Rest=* => \
- is_map Fail Map | i_put_map_assoc Map Dst Live Size Rest
-
-ensure_map Lit=q | literal_is_map(Lit) =>
-
-%cold
-ensure_map s
-%hot
-
-#
-# Map instructions. First introduced in R17.
-#
+i_put_map_assoc/4
sorted_put_map_assoc/4
i_put_map_assoc Map Dst Live Size Rest=* | map_key_sort(Size, Rest) => \
diff --git a/erts/emulator/beam/jit/x86/predicates.tab b/erts/emulator/beam/jit/x86/predicates.tab
index a4e00586f6..8b8aa58ca3 100644
--- a/erts/emulator/beam/jit/x86/predicates.tab
+++ b/erts/emulator/beam/jit/x86/predicates.tab
@@ -32,12 +32,6 @@ pred.is_mfa_bif(M, F, A) {
return 0;
}
-pred.needs_nif_padding() {
- /* If the module may load a NIF all functions must be able to hold a NIF
- * stub, so we'll pad to that size at the end of every function. */
- return S->may_load_nif;
-}
-
pred.never_fails(Bif) {
static Eterm nofail_bifs[] =
{am_Neqeq,
diff --git a/erts/emulator/beam/jit/x86/process_main.cpp b/erts/emulator/beam/jit/x86/process_main.cpp
new file mode 100644
index 0000000000..ebd7b356cf
--- /dev/null
+++ b/erts/emulator/beam/jit/x86/process_main.cpp
@@ -0,0 +1,348 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2020-2020. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "beam_asm.hpp"
+
+extern "C"
+{
+#include "bif.h"
+#include "beam_common.h"
+#include "code_ix.h"
+#include "export.h"
+}
+
+const uint8_t *BeamAssembler::nops[3] = {nop1, nop2, nop3};
+const uint8_t BeamAssembler::nop1[1] = {0x90};
+const uint8_t BeamAssembler::nop2[2] = {0x66, 0x90};
+const uint8_t BeamAssembler::nop3[3] = {0x0F, 0x1F, 0x00};
+
+#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
+static Process *erts_debug_schedule(ErtsSchedulerData *esdp,
+ Process *c_p,
+ int calls) {
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ c_p = erts_schedule(esdp, c_p, calls);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ ERTS_REQ_PROC_MAIN_LOCK(c_p);
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ return c_p;
+}
+#endif
+
+/* void process_main(ErtsSchedulerData *esdp); */
+void BeamGlobalAssembler::emit_process_main() {
+ Label context_switch_local = a.newLabel(),
+ context_switch_simplified_local = a.newLabel(),
+ do_schedule_local = a.newLabel(), schedule_next = a.newLabel();
+
+ const x86::Mem start_time_i =
+ getSchedulerRegRef(offsetof(ErtsSchedulerRegisters, start_time_i));
+ const x86::Mem start_time =
+ getSchedulerRegRef(offsetof(ErtsSchedulerRegisters, start_time));
+
+ /* Allocate the register structure on the stack to allow computing the
+ * runtime stack address from it, greatly reducing the cost of stack
+ * swapping. */
+ a.sub(x86::rsp, imm(sizeof(ErtsSchedulerRegisters) + ERTS_CACHE_LINE_SIZE));
+ a.and_(x86::rsp, imm(~ERTS_CACHE_LINE_MASK));
+
+ a.mov(x86::qword_ptr(ARG1, offsetof(ErtsSchedulerData, registers)),
+ x86::rsp);
+
+ /* Center `registers` at the base of x_reg_array so we can use negative
+ * 8-bit displacement to address the commonly used aux_regs, located at the
+ * start of the ErtsSchedulerRegisters struct. */
+ a.lea(registers,
+ x86::qword_ptr(x86::rsp,
+ offsetof(ErtsSchedulerRegisters, x_reg_array.d)));
+
+ load_erl_bits_state(ARG1);
+ runtime_call<1>(erts_bits_init_state);
+
+#if defined(DEBUG) && defined(NATIVE_ERLANG_STACK)
+ /* Save stack bounds so they can be tested without clobbering anything. */
+ runtime_call<0>(erts_get_stacklimit);
+
+ a.mov(getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, runtime_stack_end)),
+ RET);
+ a.mov(getSchedulerRegRef(
+ offsetof(ErtsSchedulerRegisters, runtime_stack_start)),
+ x86::rsp);
+#elif !defined(NATIVE_ERLANG_STACK)
+ /* Save the initial SP of the thread so that we can verify that it
+ * doesn't grow. */
+# ifdef JIT_HARD_DEBUG
+ a.mov(getInitialSPRef(), x86::rsp);
+# endif
+
+ /* Manually do an `emit_enter_runtime` to match the `emit_leave_runtime`
+ * below. We avoid `emit_enter_runtime` because it may do additional
+ * assertions that may currently fail.
+ *
+ * IMPORTANT: We must ensure that this sequence leaves the stack
+ * aligned on a 16-byte boundary. */
+ a.mov(getRuntimeStackRef(), x86::rsp);
+ a.sub(x86::rsp, imm(15));
+ a.and_(x86::rsp, imm(-16));
+#endif
+
+ a.mov(start_time_i, imm(0));
+ a.mov(start_time, imm(0));
+
+ mov_imm(c_p, 0);
+ mov_imm(FCALLS, 0);
+ mov_imm(ARG3, 0); /* Set reds_used for erts_schedule call */
+
+ a.jmp(schedule_next);
+
+ a.bind(do_schedule_local);
+ {
+ /* Figure out reds_used. def_arg_reg[5] = REDS_IN */
+ a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, def_arg_reg[5])));
+ a.sub(ARG3, FCALLS);
+
+ a.jmp(schedule_next);
+ }
+
+ a.bind(context_switch_local);
+ comment("Context switch, unknown arity/MFA");
+ {
+ Sint arity_offset = offsetof(ErtsCodeMFA, arity) - sizeof(ErtsCodeMFA);
+
+ a.mov(ARG1, x86::qword_ptr(ARG3, arity_offset));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), ARG1);
+
+ a.lea(ARG1, x86::qword_ptr(ARG3, -(Sint)sizeof(ErtsCodeMFA)));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), ARG1);
+
+ /* !! Fall through !! */
+ }
+
+ a.bind(context_switch_simplified_local);
+ comment("Context switch, known arity and MFA");
+ {
+ Label not_exiting = a.newLabel();
+
+#ifdef ERLANG_FRAME_POINTERS
+ /* Kill the current frame pointer to avoid confusing `perf` and similar
+ * tools. */
+ a.sub(frame_pointer, frame_pointer);
+#endif
+
+#ifdef DEBUG
+ Label check_i = a.newLabel();
+ /* Check that ARG3 is set to a valid CP. */
+ a.test(ARG3, imm(_CPMASK));
+ a.je(check_i);
+ a.comment("# ARG3 is not a valid CP");
+ a.ud2();
+ a.bind(check_i);
+#endif
+
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, i)), ARG3);
+
+#if defined(JIT_HARD_DEBUG) && defined(ERLANG_FRAME_POINTERS)
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, x86::qword_ptr(c_p, offsetof(Process, frame_pointer)));
+ a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, stop)));
+
+ runtime_call<3>(erts_validate_stack);
+#endif
+
+#ifdef WIN32
+ a.mov(ARG1d, x86::dword_ptr(c_p, offsetof(Process, state.value)));
+#else
+ a.mov(ARG1d, x86::dword_ptr(c_p, offsetof(Process, state.counter)));
+#endif
+
+ a.test(ARG1d, imm(ERTS_PSFLG_EXITING));
+ a.short_().je(not_exiting);
+ {
+ comment("Process exiting");
+
+ a.lea(ARG1, x86::qword_ptr(labels[process_exit]));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, i)), ARG1);
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, arity)), imm(0));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, current)), imm(0));
+ a.jmp(do_schedule_local);
+ }
+ a.bind(not_exiting);
+
+ /* Figure out reds_used. def_arg_reg[5] = REDS_IN */
+ a.mov(ARG3, x86::qword_ptr(c_p, offsetof(Process, def_arg_reg[5])));
+ a.sub(ARG3, FCALLS);
+
+ /* Spill reds_used to FCALLS as we no longer need that value */
+ a.mov(FCALLS, ARG3);
+
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<2>(copy_out_registers);
+
+ /* Restore reds_used from FCALLS */
+ a.mov(ARG3, FCALLS);
+
+ /* !! Fall through !! */
+ }
+
+ a.bind(schedule_next);
+ comment("schedule_next");
+ {
+ Label schedule = a.newLabel(), skip_long_schedule = a.newLabel();
+
+ /* ARG3 contains reds_used at this point */
+
+ a.cmp(start_time, imm(0));
+ a.short_().je(schedule);
+ {
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, start_time);
+
+ /* Spill reds_used in start_time slot */
+ a.mov(start_time, ARG3);
+
+ a.mov(ARG3, start_time_i);
+ runtime_call<3>(check_monitor_long_schedule);
+
+ /* Restore reds_used */
+ a.mov(ARG3, start_time);
+ }
+ a.bind(schedule);
+
+#ifdef ERLANG_FRAME_POINTERS
+ if (erts_frame_layout == ERTS_FRAME_LAYOUT_FP_RA) {
+ /* Kill the current frame pointer so that misc jobs that execute
+ * during `erts_schedule` aren't attributed to the function we
+ * were scheduled out of. */
+ a.sub(frame_pointer, frame_pointer);
+ }
+#endif
+
+ mov_imm(ARG1, 0);
+ a.mov(ARG2, c_p);
+#if defined(DEBUG) || defined(ERTS_ENABLE_LOCK_CHECK)
+ runtime_call<3>(erts_debug_schedule);
+#else
+ runtime_call<3>(erts_schedule);
+#endif
+ a.mov(c_p, RET);
+
+#ifdef ERTS_MSACC_EXTENDED_STATES
+ a.lea(ARG1,
+ x86::qword_ptr(registers,
+ offsetof(ErtsSchedulerRegisters,
+ aux_regs.d.erts_msacc_cache)));
+ runtime_call<1>(erts_msacc_update_cache);
+#endif
+
+ a.mov(ARG1, imm((UWord)&erts_system_monitor_long_schedule));
+ a.cmp(x86::qword_ptr(ARG1), imm(0));
+ a.mov(start_time, imm(0));
+ a.short_().je(skip_long_schedule);
+ {
+ /* Enable long schedule test */
+ runtime_call<0>(erts_timestamp_millis);
+ a.mov(start_time, RET);
+ a.mov(RET, x86::qword_ptr(c_p, offsetof(Process, i)));
+ a.mov(start_time_i, RET);
+ }
+ a.bind(skip_long_schedule);
+
+ /* Copy arguments */
+ a.mov(ARG1, c_p);
+ load_x_reg_array(ARG2);
+ runtime_call<2>(copy_in_registers);
+
+ /* Setup reduction counting */
+ a.mov(FCALLS, x86::qword_ptr(c_p, offsetof(Process, fcalls)));
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, def_arg_reg[5])), FCALLS);
+
+#ifdef DEBUG
+ a.mov(x86::qword_ptr(c_p, offsetof(Process, debug_reds_in)), FCALLS);
+#endif
+
+ /* Check whether save calls is on */
+ a.mov(ARG1, c_p);
+ a.mov(ARG2, imm(ERTS_PSD_SAVED_CALLS_BUF));
+ runtime_call<2>(erts_psd_get);
+
+ /* Read the active code index, overriding it with
+ * ERTS_SAVE_CALLS_CODE_IX when save_calls is enabled (RET != 0). */
+ a.test(RET, RET);
+ a.mov(ARG1, imm(&the_active_code_index));
+ a.mov(ARG2, imm(ERTS_SAVE_CALLS_CODE_IX));
+ a.mov(active_code_ix.r32(), x86::dword_ptr(ARG1));
+ a.cmovnz(active_code_ix, ARG2);
+
+ /* Start executing the Erlang process. Note that reductions have
+ * already been set up above. */
+ emit_leave_runtime<Update::eStack | Update::eHeap>();
+
+ /* Check if we are just returning from a dirty nif/bif call and if so we
+ * need to do a bit of cleaning up before continuing. */
+ a.mov(RET, x86::qword_ptr(c_p, offsetof(Process, i)));
+ a.cmp(x86::qword_ptr(RET), imm(op_call_nif_WWW));
+ a.je(labels[dispatch_nif]);
+ a.cmp(x86::qword_ptr(RET), imm(op_call_bif_W));
+ a.je(labels[dispatch_bif]);
+ a.jmp(RET);
+ }
+
+ /* Processes may jump to the exported entry points below, executing on the
+ * Erlang stack when entering. These are separate from the `_local` labels
+ * above as we don't want to worry about which stack we're on when the
+ * cases overlap. */
+
+ /* `ga->get_context_switch()`
+ *
+ * The *next* instruction pointer is provided in ARG3, and must be preceded
+ * by an ErtsCodeMFA. */
+ a.bind(labels[context_switch]);
+ {
+ emit_enter_runtime<Update::eStack | Update::eHeap>();
+
+ a.jmp(context_switch_local);
+ }
+
+ /* `ga->get_context_switch_simplified()`
+ *
+ * The next instruction pointer is provided in ARG3, which does not need to
+ * point past an ErtsCodeMFA as the process structure has already been
+ * updated. */
+ a.bind(labels[context_switch_simplified]);
+ {
+ emit_enter_runtime<Update::eStack | Update::eHeap>();
+
+ a.jmp(context_switch_simplified_local);
+ }
+
+ /* `ga->get_do_schedule()`
+ *
+ * `c_p->i` must be set prior to jumping here. */
+ a.bind(labels[do_schedule]);
+ {
+ emit_enter_runtime<Update::eStack | Update::eHeap>();
+
+ a.jmp(do_schedule_local);
+ }
+}
diff --git a/erts/emulator/beam/predicates.tab b/erts/emulator/beam/predicates.tab
index 833542112b..239b763174 100644
--- a/erts/emulator/beam/predicates.tab
+++ b/erts/emulator/beam/predicates.tab
@@ -23,10 +23,6 @@ pred.never() {
return 0;
}
-pred.compiled_with_otp_20_or_higher() {
- return S->otp_20_or_higher;
-}
-
// Test whether a jump table can be used.
pred.use_jump_tab(Size, Rest, MinSize) {
Sint min, max;
@@ -144,25 +140,18 @@ pred.is_heavy_bif(Bif) {
return 0;
}
-// Test whether the given literal is a map.
-pred.literal_is_map(Lit) {
- Eterm term;
-
- ASSERT(Lit.type == TAG_q);
- term = beamfile_get_literal(&S->beam, Lit.val);
- return is_map(term);
-}
-
// Predicate to test whether all of the given new small map keys are literals
pred.is_small_map_literal_keys(Size, Rest) {
- if (Size.val > MAP_SMALL_MAP_LIMIT) {
+ Uint pair_count = Size.val / 2;
+
+ if (pair_count > MAP_SMALL_MAP_LIMIT) {
return 0;
}
/*
* Operations with non-literals have always only one key.
*/
- if (Size.val != 2) {
+ if (pair_count != 1) {
return 1;
}
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c
index ec05ebe662..41bc23e15d 100644
--- a/erts/emulator/beam/utils.c
+++ b/erts/emulator/beam/utils.c
@@ -60,6 +60,7 @@
#include "erl_nfunc_sched.h"
#include "erl_proc_sig_queue.h"
#include "erl_unicode.h"
+#include "beam_common.h"
/* *******************************
* ** Yielding C Fun (YCF) Note **
diff --git a/erts/emulator/internal_doc/BeamAsm.md b/erts/emulator/internal_doc/BeamAsm.md
index 3b4ac619ce..fa5a308a03 100644
--- a/erts/emulator/internal_doc/BeamAsm.md
+++ b/erts/emulator/internal_doc/BeamAsm.md
@@ -47,8 +47,10 @@ liveness of values and the physical registers are statically allocated to keep
the necessary process state. At the moment this is the static register allocation:
rbx: ErtsSchedulerRegisters struct (contains x/float registers and some metadata)
- rbp: Active code index
- r12: Optional Save slot for the Erlang stack pointer when executing C code
+ rbp: Current frame pointer when `perf` support is enabled, otherwise this
+ is an optional save slot for the Erlang stack pointer when executing C
+ code.
+ r12: Active code index
r13: Current running process
r14: Remaining reductions
r15: Erlang heap pointer
@@ -132,6 +134,23 @@ handlers even when we lack a stack frame. This is merely a reservation and has
no effect on how the stack works, and all values stored there must be valid
Erlang terms in case of a garbage collection.
+## Frame pointers
+
+To aid debuggers and sampling profilers, we support running Erlang code with
+native frame pointers. At the time of writing, this is only enabled together
+with `perf` support (`+JPperf true`) to save stack space, but we may add a flag
+to explicitly enable it in the future.
+
+When enabled, continuation pointers (CP) have both a return address _and_ a
+frame pointer that points at the previous CP. CPs must form a valid chain at
+all times, and it's illegal to have "half" a CP when the stack is inspected.
+
+Frame pointers are pushed when entering an Erlang function and popped before
+leaving it, including on tail calls as the callee will immediately push the
+frame pointer on entry. This has a slight overhead but saves us the headache of
+having multiple entry points for each function depending on whether it's tail-
+or body-called, which would get very tricky once breakpoints enter the picture.
+
## Running C code
As Erlang stacks can be very small, we have to switch over to a different stack
@@ -209,16 +228,17 @@ The `erts_writable_code_ptr` function can be used to get writable pointers,
given a module instance:
for (i = 0; i < n; ++i) {
- ErtsCodeInfo* ci;
+ const ErtsCodeInfo* ci_exec;
+ ErtsCodeInfo* ci_rw;
void *w_ptr;
- w_ptr = erts_writable_code_ptr(&modp->curr,
- code_hdr->functions[i]);
- ci = (ErtsCodeInfo*)w_ptr;
+ ci_exec = code_hdr->functions[i];
+ w_ptr = erts_writable_code_ptr(&modp->curr, ci_exec);
+ ci_rw = (ErtsCodeInfo*)w_ptr;
- uninstall_breakpoint(ci);
- consolidate_bp_data(modp, ci, 1);
- ASSERT(ci->u.gen_bp == NULL);
+ uninstall_breakpoint(ci_rw, ci_exec);
+ consolidate_bp_data(modp, ci_rw, 1);
+ ASSERT(ci_rw->u.gen_bp == NULL);
}
Without the module instance there's no reliable way to figure out the writable
@@ -288,14 +308,18 @@ You can run perf on BeamAsm like this:
perf record erl +JPperf true
-and then look at the results using `perf report` as you normally would with perf.
+and then look at the results using `perf report` as you normally would with
+perf.
+
+Frame pointers are enabled when the `+JPperf true` option is passed, so you can
+use `perf record --call-graph=fp` to get more context. This will give you
+accurate call graphs for pure Erlang code, but in rare cases it fails to track
+transitions from Erlang to C code and back. [`perf record --call-graph=lbr`](https://lwn.net/Articles/680985/)
+may work better in those cases, but it's worse at tracking in general.
-If you want to get some context to you calls you cann use the [lbr](https://lwn.net/Articles/680985/)
-call-graph option to `perf record`. Using `lbr` is not perfect (for instance you
-do not get any syscalls in the context), but it work well enough.
For example, you can run perf to analyze dialyzer building a PLT like this:
- ERL_FLAGS="+JPperf true +S 1" perf record --call-graph lbr \
+ ERL_FLAGS="+JPperf true +S 1" perf record --call-graph=fp \
dialyzer --build_plt -Wunknown --apps compiler crypto erts kernel stdlib \
syntax_tools asn1 edoc et ftp inets mnesia observer public_key \
sasl runtime_tools snmp ssl tftp wx xmerl tools
@@ -315,10 +339,10 @@ By expanding it and looking at its parents we can see that it is the function
at it in the source code to see if you can figure out why so much time is spent there.
After `eq` we see the function `erl_types:t_has_var/1` where we spend almost
-6% of the entire execution in. A while further down you can see `copy_struct` which
-is the function used to copy terms. If we expand it to view the parents we find that
-it is mostly `ets:lookup_element/3` that contributes to this time via the Erlang
-function `dialyzer_plt:ets_table_lookup/2`.
+5% of the entire execution in. A while further down you can see `copy_struct_x`
+which is the function used to copy terms. If we expand it to view the parents
+we find that it is mostly `ets:lookup_element/3` that contributes to this time
+via the Erlang function `dialyzer_plt:ets_table_lookup/2`.
### Flame Graph
@@ -328,7 +352,7 @@ be more easily shared with others and manipulated to give a graph tailor-made fo
your needs. For instance, if we run dialyzer with all schedulers:
## Run dialyzer with multiple schedulers
- ERL_FLAGS="+JPperf true" perf record --call-graph lbr \
+ ERL_FLAGS="+JPperf true" perf record --call-graph=fp \
dialyzer --build_plt -Wunknown --apps compiler crypto erts kernel stdlib \
syntax_tools asn1 edoc et ftp inets mnesia observer public_key \
sasl runtime_tools snmp ssl tftp wx xmerl tools --statistics
@@ -372,7 +396,7 @@ the annotate functionality in the `perf report` gui) you need to use a monotonic
clock when calling `perf record`, i.e. `perf record -k mono`. So for a dialyzer
run you would do this:
- ERL_FLAGS="+JPperf true +S 1" perf record -k mono --call-graph lbr \
+ ERL_FLAGS="+JPperf true +S 1" perf record -k mono --call-graph=fp \
dialyzer --build_plt -Wunknown --apps compiler crypto erts kernel stdlib \
syntax_tools asn1 edoc et ftp inets mnesia observer public_key \
sasl runtime_tools snmp ssl tftp wx xmerl tools
@@ -424,7 +448,6 @@ There are three major reasons why when building Erlang/OTP you would not get the
* You are not building x86 64-bit
* You do not have a C++ compiler that supports C++-17
-* You do not have an OS that supports executable *and* writable memory
If you run `./configure --enable-jit` configure will abort when it discovers that
your system cannot build the JIT.
diff --git a/erts/emulator/internal_doc/beam_makeops.md b/erts/emulator/internal_doc/beam_makeops.md
index e93aeac52d..578858d686 100644
--- a/erts/emulator/internal_doc/beam_makeops.md
+++ b/erts/emulator/internal_doc/beam_makeops.md
@@ -2047,13 +2047,13 @@ like this:
select_val s f I *
The `*` as the last operand will make sure that the variable operands
-are passed in as a C++ vector of `ArgVal`. Here is the emitter
-function:
+are passed in as a `Span` of `ArgVal` (will be `std::span` in C++20 onwards).
+Here is the emitter function:
void BeamModuleAssembler::emit_select_val(const ArgVal &Src,
const ArgVal &Fail,
const ArgVal &Size,
- const std::vector<ArgVal> &args) {
+ const Span<ArgVal> &args) {
ASSERT(Size.getValue() == args.size());
.
.
diff --git a/erts/emulator/internal_doc/figures/beamasm-perf-annotate.png b/erts/emulator/internal_doc/figures/beamasm-perf-annotate.png
index 6961341bdd..0d5ed0f0f7 100644
--- a/erts/emulator/internal_doc/figures/beamasm-perf-annotate.png
+++ b/erts/emulator/internal_doc/figures/beamasm-perf-annotate.png
Binary files differ
diff --git a/erts/emulator/internal_doc/figures/perf-beamasm.png b/erts/emulator/internal_doc/figures/perf-beamasm.png
index 8524709a68..7012861459 100644
--- a/erts/emulator/internal_doc/figures/perf-beamasm.png
+++ b/erts/emulator/internal_doc/figures/perf-beamasm.png
Binary files differ
diff --git a/erts/emulator/pcre/local_config.h b/erts/emulator/pcre/local_config.h
index 178c4d4281..6f4f3a1868 100644
--- a/erts/emulator/pcre/local_config.h
+++ b/erts/emulator/pcre/local_config.h
@@ -73,9 +73,6 @@
"configure" can be used to override this default. */
#define POSIX_MALLOC_THRESHOLD 10
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
/* Define to enable support for Unicode properties */
#define SUPPORT_UCP
diff --git a/erts/emulator/pcre/pcre_exec.c b/erts/emulator/pcre/pcre_exec.c
index 99c37f0657..e4da43e99f 100644
--- a/erts/emulator/pcre/pcre_exec.c
+++ b/erts/emulator/pcre/pcre_exec.c
@@ -7023,7 +7023,7 @@ if (extra_data != NULL)
{
md->loop_limit = extra_data->loop_limit;
if (extra_data->restart_data)
- md->loop_limit -= extra_data->loop_limit - exec_context->valid_utf_ystate.cnt;
+ md->loop_limit -= exec_context->valid_utf_ystate.cnt;
if (md->loop_limit < 10)
md->loop_limit = 10; /* At least do something if we've come this far... */
}
diff --git a/erts/emulator/ryu/README.ryu_update.md b/erts/emulator/ryu/README.ryu_update.md
new file mode 100644
index 0000000000..cc60ea1690
--- /dev/null
+++ b/erts/emulator/ryu/README.ryu_update.md
@@ -0,0 +1,20 @@
+# How to update the Ryu version used by Erlang
+
+Last commit taken : 844864ac213bdbf1fb57e6f51c653b3d90af0937
+
+## The basic changes to the Ryu library
+
+To work with the Erlang VM, Ryu has been changed in three important ways. These
+changes have been marked with a `//CHANGE_FOR_ERLANG` comment explaining them in
+the code.
+
+1. We only kept the bare minimum files needed to generate a double to string with the shortest algorithm, with the widest lookup table
+2. We deleted the code producing the final string, this is handled using a modified version of to_chars from the MS STL. <https://github.com/microsoft/STL/blob/8f4c8163775d665d80642044ce27c4bc696127ce/stl/inc/xcharconv_ryu.h#L1302>
+3. All other unneeded code has been deleted
+
+This is build with our own makefile.
+
+Some of the more minor difference:
+
+- the Zero case in common.h is changed to correspond to erlang fixed point version
+- the MS STL pointer check are not here. Erlang generate a 256 bytes buffer, we only need 30 maximum. Beware what this mean when refactoring.
diff --git a/erts/emulator/ryu/common.h b/erts/emulator/ryu/common.h
new file mode 100644
index 0000000000..7048e90974
--- /dev/null
+++ b/erts/emulator/ryu/common.h
@@ -0,0 +1,115 @@
+// Copyright 2018 Ulf Adams
+//
+// The contents of this file may be used under the terms of the Apache License,
+// Version 2.0.
+//
+// (See accompanying file LICENSE-Apache or copy at
+// http://www.apache.org/licenses/LICENSE-2.0)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE-Boost or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+//
+// Unless required by applicable law or agreed to in writing, this software
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.
+#ifndef RYU_COMMON_H
+#define RYU_COMMON_H
+
+#include <assert.h>
+#include <stdint.h>
+#include <string.h>
+
+#if defined(_M_IX86) || defined(_M_ARM)
+#define RYU_32_BIT_PLATFORM
+#endif
+
+// Returns the number of decimal digits in v, which must not contain more than 9 digits.
+static inline uint32_t decimalLength9(const uint32_t v) {
+ // Function precondition: v is not a 10-digit number.
+ // (f2s: 9 digits are sufficient for round-tripping.)
+ // (d2fixed: We print 9-digit blocks.)
+ assert(v < 1000000000);
+ if (v >= 100000000) { return 9; }
+ if (v >= 10000000) { return 8; }
+ if (v >= 1000000) { return 7; }
+ if (v >= 100000) { return 6; }
+ if (v >= 10000) { return 5; }
+ if (v >= 1000) { return 4; }
+ if (v >= 100) { return 3; }
+ if (v >= 10) { return 2; }
+ return 1;
+}
+
+// Returns e == 0 ? 1 : [log_2(5^e)]; requires 0 <= e <= 3528.
+static inline int32_t log2pow5(const int32_t e) {
+ // This approximation works up to the point that the multiplication overflows at e = 3529.
+ // If the multiplication were done in 64 bits, it would fail at 5^4004 which is just greater
+ // than 2^9297.
+ assert(e >= 0);
+ assert(e <= 3528);
+ return (int32_t) ((((uint32_t) e) * 1217359) >> 19);
+}
+
+// Returns e == 0 ? 1 : ceil(log_2(5^e)); requires 0 <= e <= 3528.
+static inline int32_t pow5bits(const int32_t e) {
+ // This approximation works up to the point that the multiplication overflows at e = 3529.
+ // If the multiplication were done in 64 bits, it would fail at 5^4004 which is just greater
+ // than 2^9297.
+ assert(e >= 0);
+ assert(e <= 3528);
+ return (int32_t) (((((uint32_t) e) * 1217359) >> 19) + 1);
+}
+
+// Returns e == 0 ? 1 : ceil(log_2(5^e)); requires 0 <= e <= 3528.
+static inline int32_t ceil_log2pow5(const int32_t e) {
+ return log2pow5(e) + 1;
+}
+
+// Returns floor(log_10(2^e)); requires 0 <= e <= 1650.
+static inline uint32_t log10Pow2(const int32_t e) {
+ // The first value this approximation fails for is 2^1651 which is just greater than 10^297.
+ assert(e >= 0);
+ assert(e <= 1650);
+ return (((uint32_t) e) * 78913) >> 18;
+}
+
+// Returns floor(log_10(5^e)); requires 0 <= e <= 2620.
+static inline uint32_t log10Pow5(const int32_t e) {
+ // The first value this approximation fails for is 5^2621 which is just greater than 10^1832.
+ assert(e >= 0);
+ assert(e <= 2620);
+ return (((uint32_t) e) * 732923) >> 20;
+}
+
+static inline int copy_special_str(char * const result, const bool sign, const bool exponent, const bool mantissa) {
+ if (mantissa) {
+ memcpy(result, "NaN", 3);
+ return 3;
+ }
+ if (sign) {
+ result[0] = '-';
+ }
+ if (exponent) {
+ memcpy(result + sign, "Infinity", 8);
+ return sign + 8;
+ }
+ // CHANGE_FOR_ERLANG we use "0.0" as the 0 and not "0E0"
+ memcpy(result + sign, "0.0", 3);
+ return sign + 3;
+}
+
+static inline uint32_t float_to_bits(const float f) {
+ uint32_t bits = 0;
+ memcpy(&bits, &f, sizeof(float));
+ return bits;
+}
+
+static inline uint64_t double_to_bits(const double d) {
+ uint64_t bits = 0;
+ memcpy(&bits, &d, sizeof(double));
+ return bits;
+}
+
+#endif // RYU_COMMON_H
diff --git a/erts/emulator/ryu/d2s.c b/erts/emulator/ryu/d2s.c
new file mode 100644
index 0000000000..643e41ce02
--- /dev/null
+++ b/erts/emulator/ryu/d2s.c
@@ -0,0 +1,712 @@
+// Copyright 2018 Ulf Adams
+//
+// The contents of this file may be used under the terms of the Apache License,
+// Version 2.0.
+//
+// (See accompanying file LICENSE-Apache or copy at
+// http://www.apache.org/licenses/LICENSE-2.0)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE-Boost or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+//
+// Unless required by applicable law or agreed to in writing, this software
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.
+
+// Runtime compiler options:
+// -DRYU_DEBUG Generate verbose debugging output to stdout.
+//
+// -DRYU_ONLY_64_BIT_OPS Avoid using uint128_t or 64-bit intrinsics. Slower,
+// depending on your compiler.
+//
+
+// CHANGE_FOR_ERLANG: "ryu/ryu.h" -> "ryu.h"
+#include "ryu.h"
+// END CHANGE_FOR_ERLANG
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef RYU_DEBUG
+#include <inttypes.h>
+#include <stdio.h>
+#endif
+
+// CHANGE_FOR_ERLANG: "ryu/*.h" -> "*.h"
+#include "common.h"
+#include "digit_table.h"
+#include "d2s_intrinsics.h"
+// END CHANGE_FOR_ERLANG
+
+// CHANGE_FOR_ERLANG we got rid of the small_table. Also namespace as above
+#include "d2s_full_table.h"
+// END CHANGE_FOR_ERLANG
+
+#define DOUBLE_MANTISSA_BITS 52
+#define DOUBLE_EXPONENT_BITS 11
+#define DOUBLE_BIAS 1023
+
+static inline uint32_t decimalLength17(const uint64_t v) {
+ // This is slightly faster than a loop.
+ // The average output length is 16.38 digits, so we check high-to-low.
+ // Function precondition: v is not an 18, 19, or 20-digit number.
+ // (17 digits are sufficient for round-tripping.)
+ assert(v < 100000000000000000L);
+ if (v >= 10000000000000000L) { return 17; }
+ if (v >= 1000000000000000L) { return 16; }
+ if (v >= 100000000000000L) { return 15; }
+ if (v >= 10000000000000L) { return 14; }
+ if (v >= 1000000000000L) { return 13; }
+ if (v >= 100000000000L) { return 12; }
+ if (v >= 10000000000L) { return 11; }
+ if (v >= 1000000000L) { return 10; }
+ if (v >= 100000000L) { return 9; }
+ if (v >= 10000000L) { return 8; }
+ if (v >= 1000000L) { return 7; }
+ if (v >= 100000L) { return 6; }
+ if (v >= 10000L) { return 5; }
+ if (v >= 1000L) { return 4; }
+ if (v >= 100L) { return 3; }
+ if (v >= 10L) { return 2; }
+ return 1;
+}
+
+// A floating decimal representing m * 10^e.
+typedef struct floating_decimal_64 {
+ uint64_t mantissa;
+ // Decimal exponent's range is -324 to 308
+ // inclusive, and can fit in a short if needed.
+ int32_t exponent;
+} floating_decimal_64;
+
+static inline floating_decimal_64 d2d(const uint64_t ieeeMantissa, const uint32_t ieeeExponent) {
+ int32_t e2;
+ uint64_t m2;
+ if (ieeeExponent == 0) {
+ // We subtract 2 so that the bounds computation has 2 additional bits.
+ e2 = 1 - DOUBLE_BIAS - DOUBLE_MANTISSA_BITS - 2;
+ m2 = ieeeMantissa;
+ } else {
+ e2 = (int32_t) ieeeExponent - DOUBLE_BIAS - DOUBLE_MANTISSA_BITS - 2;
+ m2 = (1ull << DOUBLE_MANTISSA_BITS) | ieeeMantissa;
+ }
+ const bool even = (m2 & 1) == 0;
+ const bool acceptBounds = even;
+
+#ifdef RYU_DEBUG
+ printf("-> %" PRIu64 " * 2^%d\n", m2, e2 + 2);
+#endif
+
+ // Step 2: Determine the interval of valid decimal representations.
+ const uint64_t mv = 4 * m2;
+ // Implicit bool -> int conversion. True is 1, false is 0.
+ const uint32_t mmShift = ieeeMantissa != 0 || ieeeExponent <= 1;
+ // We would compute mp and mm like this:
+ // uint64_t mp = 4 * m2 + 2;
+ // uint64_t mm = mv - 1 - mmShift;
+
+ // Step 3: Convert to a decimal power base using 128-bit arithmetic.
+ uint64_t vr, vp, vm;
+ int32_t e10;
+ bool vmIsTrailingZeros = false;
+ bool vrIsTrailingZeros = false;
+ if (e2 >= 0) {
+ // I tried special-casing q == 0, but there was no effect on performance.
+ // This expression is slightly faster than max(0, log10Pow2(e2) - 1).
+ const uint32_t q = log10Pow2(e2) - (e2 > 3);
+ e10 = (int32_t) q;
+ const int32_t k = DOUBLE_POW5_INV_BITCOUNT + pow5bits((int32_t) q) - 1;
+ const int32_t i = -e2 + (int32_t) q + k;
+ vr = mulShiftAll64(m2, DOUBLE_POW5_INV_SPLIT[q], i, &vp, &vm, mmShift);
+#ifdef RYU_DEBUG
+ printf("%" PRIu64 " * 2^%d / 10^%u\n", mv, e2, q);
+ printf("V+=%" PRIu64 "\nV =%" PRIu64 "\nV-=%" PRIu64 "\n", vp, vr, vm);
+#endif
+ if (q <= 21) {
+ // This should use q <= 22, but I think 21 is also safe. Smaller values
+ // may still be safe, but it's more difficult to reason about them.
+ // Only one of mp, mv, and mm can be a multiple of 5, if any.
+ const uint32_t mvMod5 = ((uint32_t) mv) - 5 * ((uint32_t) div5(mv));
+ if (mvMod5 == 0) {
+ vrIsTrailingZeros = multipleOfPowerOf5(mv, q);
+ } else if (acceptBounds) {
+ // Same as min(e2 + (~mm & 1), pow5Factor(mm)) >= q
+ // <=> e2 + (~mm & 1) >= q && pow5Factor(mm) >= q
+ // <=> true && pow5Factor(mm) >= q, since e2 >= q.
+ vmIsTrailingZeros = multipleOfPowerOf5(mv - 1 - mmShift, q);
+ } else {
+ // Same as min(e2 + 1, pow5Factor(mp)) >= q.
+ vp -= multipleOfPowerOf5(mv + 2, q);
+ }
+ }
+ } else {
+ // This expression is slightly faster than max(0, log10Pow5(-e2) - 1).
+ const uint32_t q = log10Pow5(-e2) - (-e2 > 1);
+ e10 = (int32_t) q + e2;
+ const int32_t i = -e2 - (int32_t) q;
+ const int32_t k = pow5bits(i) - DOUBLE_POW5_BITCOUNT;
+ const int32_t j = (int32_t) q - k;
+ vr = mulShiftAll64(m2, DOUBLE_POW5_SPLIT[i], j, &vp, &vm, mmShift);
+#ifdef RYU_DEBUG
+ printf("%" PRIu64 " * 5^%d / 10^%u\n", mv, -e2, q);
+ printf("%u %d %d %d\n", q, i, k, j);
+ printf("V+=%" PRIu64 "\nV =%" PRIu64 "\nV-=%" PRIu64 "\n", vp, vr, vm);
+#endif
+ if (q <= 1) {
+ // {vr,vp,vm} is trailing zeros if {mv,mp,mm} has at least q trailing 0 bits.
+ // mv = 4 * m2, so it always has at least two trailing 0 bits.
+ vrIsTrailingZeros = true;
+ if (acceptBounds) {
+ // mm = mv - 1 - mmShift, so it has 1 trailing 0 bit iff mmShift == 1.
+ vmIsTrailingZeros = mmShift == 1;
+ } else {
+ // mp = mv + 2, so it always has at least one trailing 0 bit.
+ --vp;
+ }
+ } else if (q < 63) { // TODO(ulfjack): Use a tighter bound here.
+ // We want to know if the full product has at least q trailing zeros.
+ // We need to compute min(p2(mv), p5(mv) - e2) >= q
+ // <=> p2(mv) >= q && p5(mv) - e2 >= q
+ // <=> p2(mv) >= q (because -e2 >= q)
+ vrIsTrailingZeros = multipleOfPowerOf2(mv, q);
+#ifdef RYU_DEBUG
+ printf("vr is trailing zeros=%s\n", vrIsTrailingZeros ? "true" : "false");
+#endif
+ }
+ }
+#ifdef RYU_DEBUG
+ printf("e10=%d\n", e10);
+ printf("V+=%" PRIu64 "\nV =%" PRIu64 "\nV-=%" PRIu64 "\n", vp, vr, vm);
+ printf("vm is trailing zeros=%s\n", vmIsTrailingZeros ? "true" : "false");
+ printf("vr is trailing zeros=%s\n", vrIsTrailingZeros ? "true" : "false");
+#endif
+
+ // Step 4: Find the shortest decimal representation in the interval of valid representations.
+ int32_t removed = 0;
+ uint8_t lastRemovedDigit = 0;
+ uint64_t output;
+ // On average, we remove ~2 digits.
+ if (vmIsTrailingZeros || vrIsTrailingZeros) {
+ // General case, which happens rarely (~0.7%).
+ for (;;) {
+ const uint64_t vpDiv10 = div10(vp);
+ const uint64_t vmDiv10 = div10(vm);
+ if (vpDiv10 <= vmDiv10) {
+ break;
+ }
+ const uint32_t vmMod10 = ((uint32_t) vm) - 10 * ((uint32_t) vmDiv10);
+ const uint64_t vrDiv10 = div10(vr);
+ const uint32_t vrMod10 = ((uint32_t) vr) - 10 * ((uint32_t) vrDiv10);
+ vmIsTrailingZeros &= vmMod10 == 0;
+ vrIsTrailingZeros &= lastRemovedDigit == 0;
+ lastRemovedDigit = (uint8_t) vrMod10;
+ vr = vrDiv10;
+ vp = vpDiv10;
+ vm = vmDiv10;
+ ++removed;
+ }
+#ifdef RYU_DEBUG
+ printf("V+=%" PRIu64 "\nV =%" PRIu64 "\nV-=%" PRIu64 "\n", vp, vr, vm);
+ printf("d-10=%s\n", vmIsTrailingZeros ? "true" : "false");
+#endif
+ if (vmIsTrailingZeros) {
+ for (;;) {
+ const uint64_t vmDiv10 = div10(vm);
+ const uint32_t vmMod10 = ((uint32_t) vm) - 10 * ((uint32_t) vmDiv10);
+ if (vmMod10 != 0) {
+ break;
+ }
+ const uint64_t vpDiv10 = div10(vp);
+ const uint64_t vrDiv10 = div10(vr);
+ const uint32_t vrMod10 = ((uint32_t) vr) - 10 * ((uint32_t) vrDiv10);
+ vrIsTrailingZeros &= lastRemovedDigit == 0;
+ lastRemovedDigit = (uint8_t) vrMod10;
+ vr = vrDiv10;
+ vp = vpDiv10;
+ vm = vmDiv10;
+ ++removed;
+ }
+ }
+#ifdef RYU_DEBUG
+ printf("%" PRIu64 " %d\n", vr, lastRemovedDigit);
+ printf("vr is trailing zeros=%s\n", vrIsTrailingZeros ? "true" : "false");
+#endif
+ if (vrIsTrailingZeros && lastRemovedDigit == 5 && vr % 2 == 0) {
+ // Round even if the exact number is .....50..0.
+ lastRemovedDigit = 4;
+ }
+ // We need to take vr + 1 if vr is outside bounds or we need to round up.
+ output = vr + ((vr == vm && (!acceptBounds || !vmIsTrailingZeros)) || lastRemovedDigit >= 5);
+ } else {
+ // Specialized for the common case (~99.3%). Percentages below are relative to this.
+ bool roundUp = false;
+ const uint64_t vpDiv100 = div100(vp);
+ const uint64_t vmDiv100 = div100(vm);
+ if (vpDiv100 > vmDiv100) { // Optimization: remove two digits at a time (~86.2%).
+ const uint64_t vrDiv100 = div100(vr);
+ const uint32_t vrMod100 = ((uint32_t) vr) - 100 * ((uint32_t) vrDiv100);
+ roundUp = vrMod100 >= 50;
+ vr = vrDiv100;
+ vp = vpDiv100;
+ vm = vmDiv100;
+ removed += 2;
+ }
+ // Loop iterations below (approximately), without optimization above:
+ // 0: 0.03%, 1: 13.8%, 2: 70.6%, 3: 14.0%, 4: 1.40%, 5: 0.14%, 6+: 0.02%
+ // Loop iterations below (approximately), with optimization above:
+ // 0: 70.6%, 1: 27.8%, 2: 1.40%, 3: 0.14%, 4+: 0.02%
+ for (;;) {
+ const uint64_t vpDiv10 = div10(vp);
+ const uint64_t vmDiv10 = div10(vm);
+ if (vpDiv10 <= vmDiv10) {
+ break;
+ }
+ const uint64_t vrDiv10 = div10(vr);
+ const uint32_t vrMod10 = ((uint32_t) vr) - 10 * ((uint32_t) vrDiv10);
+ roundUp = vrMod10 >= 5;
+ vr = vrDiv10;
+ vp = vpDiv10;
+ vm = vmDiv10;
+ ++removed;
+ }
+#ifdef RYU_DEBUG
+ printf("%" PRIu64 " roundUp=%s\n", vr, roundUp ? "true" : "false");
+ printf("vr is trailing zeros=%s\n", vrIsTrailingZeros ? "true" : "false");
+#endif
+ // We need to take vr + 1 if vr is outside bounds or we need to round up.
+ output = vr + (vr == vm || roundUp);
+ }
+ const int32_t exp = e10 + removed;
+
+#ifdef RYU_DEBUG
+ printf("V+=%" PRIu64 "\nV =%" PRIu64 "\nV-=%" PRIu64 "\n", vp, vr, vm);
+ printf("O=%" PRIu64 "\n", output);
+ printf("EXP=%d\n", exp);
+#endif
+
+ floating_decimal_64 fd;
+ fd.exponent = exp;
+ fd.mantissa = output;
+ return fd;
+}
+
+//CHANGE_FOR_ERLANG: This format is new, it is here to handle the different format switch used in the STL code
+enum chars_format {
+ FMT_SCIENTIFIC,
+ FMT_FIXED,
+ FMT_GENERAL
+};
+
+// This is inspired from the MS STL Charconv, under Apache with LLVM exception licence
+// see https://github.com/microsoft/STL/blob/main/LICENSE.txt
+// The inspiration is at https://github.com/microsoft/STL/blob/e745bad3b1d05b5b19ec652d68abb37865ffa454/stl/inc/xcharconv_ryu.h#L1926
+// CHANGE_FOR_ERLANG all the types and typecast have been adapted to C types from Cpp.
+// I have also kept the Ryu original function head as it allows to not impact the rest of the code
+// __v and __mantissa and __exponent have lost their double underscore over the whole function
+// all the test on the lenght of the buffer have been dropped too. This could need change, but
+// we always pass a 256 bytes buffer when we only need 26 bytes maximum.
+static inline int to_chars(const floating_decimal_64 v, const bool sign, char* const result) {
+ // Step 5: Print the decimal representation.
+ uint64_t __output = v.mantissa;
+ int32_t _Ryu_exponent = v.exponent;
+ const uint32_t __olength = decimalLength17(__output);
+ int32_t _Scientific_exponent = _Ryu_exponent + ((int32_t) __olength) - 1;
+
+ // CHANGE_FOR_ERLANG: we use our chars_format instead of the STL one
+ enum chars_format _Fmt;
+
+ int32_t _Lower;
+ int32_t _Upper;
+
+ if (__olength == 1) {
+ // CHANGE_FOR_ERLANG the format and examples have been adapted to the erlang format
+ // as the original would have not shown a change in format
+ // (erlang always add ".0" to scientific format) and omit the + in the exponent
+ // Value | Fixed | Scientific
+ // 1e-4 | "0.0001" | "1.0e-4"
+ // 1e2 | "100.0" | "1.0e2"
+ // CHANGE_FOR_ERLANG the values for a switch, as seen in the example above, for erlang
+ // are different than for STL format.
+ _Lower = -4;
+ _Upper = 2;
+ } else if (_Scientific_exponent >= 10) {
+ // CHANGE_FOR_ERLANG This case does not exist for the STL and is due to the
+ // negative sign in the exponent.
+ // Value | Fixed | Scientific
+ // 123456789e1 | "1234567890.0" | "1.23456789e9"
+ // 123456789e2 | "12345678900.0" | "1.23456789e10"
+
+ _Lower = - (int32_t) (__olength + 2);
+ _Upper = 2;
+ } else {
+ // CHANGE_FOR_ERLANG the format and examples have been adapted to the erlang format
+ // as the original would have not shown a change in format
+ // (erlang always add ".0" to scientific format) and omit the + in the exponent
+ // Value | Fixed | Scientific
+ // 1234e-6 | "0.001234" | "1.234e-4"
+ // 1234e1 | "12340.0" | "1.234e4"
+ // CHANGE_FOR_ERLANG the values for a switch, as seen in the example above, for erlang
+ // are different than for STL format.
+ _Lower = - (int32_t) (__olength + 2);
+ _Upper = 1;
+ }
+
+ if (_Lower <= _Ryu_exponent && _Ryu_exponent <= _Upper) {
+ // CHANGE_FOR_ERLANG this is added to handle the -2**53, 2**53 range special case
+ // These are edge cases not captured above, all the other are naturally handled
+ // by _Lower nad _Upper
+ if ((__output >= (1ull << 53) && _Ryu_exponent == 0)
+ || (__output > ((1ull << 52) / 5) && _Ryu_exponent == 1)
+ || (__output > ((1ull << 51) / 25) && _Ryu_exponent == 2)) {
+ _Fmt = FMT_SCIENTIFIC;
+ } else {
+ _Fmt = FMT_FIXED;
+ }
+ } else {
+ // CHANGE_FOR_ERLANG we do not need to handle the %g case here.
+ _Fmt = FMT_SCIENTIFIC;
+ }
+
+ // CHANGE_FOR_ERLANG we handle the sign here as it is handled outside of this in the STL case
+ // and we need it to compute the start of the buffer for the characters after
+ if (sign) {
+ result[0] = '-';
+ }
+
+ // CHANGE_FOR_ERLANG we compute the start of the usable buffer. It is done here
+ // in order to be fixed for both branches of formatting.
+ char* const __result = result + sign;
+
+ if (_Fmt == FMT_FIXED) {
+ // CHANGE_FOR_ERLANG this whole table has been adapted to erlang examples to help
+ // debug and evolve the edge cases
+ // Example: __output == 1729, __olength == 4
+
+ // _Ryu_exponent | Printed | _Whole_digits | _Total_fixed_length | Notes
+ // --------------|----------|---------------|----------------------|---------------------------------------
+ // 1 | 17290.0 | 5 | _Whole_digits + 2 | Unified length cases.
+ // 0 | 1729.0 | 4 | |
+ // --------------|----------|---------------|----------------------|---------------------------------------
+ // -1 | 172.9 | 3 | __olength + 1 | This case can't happen for
+ // -2 | 17.29 | 2 | | __olength == 1, but no additional
+ // -3 | 1.729 | 1 | | code is needed to avoid it.
+ // --------------|----------|---------------|----------------------|---------------------------------------
+ // -4 | 0.1729 | 0 | 2 - _Ryu_exponent | If the decimal point appears, we need
+ // -5 | 0.01729 | -1 | | to put the "0" in front
+ // -6 | 0.001729 | -2 | |
+
+ const int32_t _Whole_digits = (int32_t) (__olength) + _Ryu_exponent;
+
+ uint32_t _Total_fixed_length;
+ if (_Ryu_exponent >= 0) {
+ // CHANGE_FOR_ERLANG the examples and values have been adapted to erlang format one
+ // CHANGE_FOR_ERLANG we also dropped the whole adjustement, as it is only of value
+ // for %f which we do not handle
+ // cases "17290.0" and "1729.0"
+ _Total_fixed_length = (uint32_t) (_Whole_digits) + 2;
+ } else if (_Whole_digits > 0) { // case "17.29"
+ _Total_fixed_length = __olength + 1;
+ } else { // case "0.001729"
+ _Total_fixed_length = (uint32_t) (2 - _Ryu_exponent);
+ }
+
+ char* _Mid;
+ if (_Ryu_exponent >= 0) { // case "172900.0"
+ // CHANGE_FOR_ERLANG we do not need the can_use_ryu, as we are not doing %f
+ // but always shortest round_trip. The whole complexity here is dropped
+ // Print the decimal digits, left-aligned within [result, result + _Total_fixed_length).
+ _Mid = __result + __olength;
+ } else { // cases "1729.0", "17.29", and "0.001729"
+ // Print the decimal digits, right-aligned within [result, result + _Total_fixed_length).
+ _Mid = __result + _Total_fixed_length;
+ }
+
+ // We prefer 32-bit operations, even on 64-bit platforms.
+ // We have at most 17 digits, and uint32_t can store 9 digits.
+ // If __output doesn't fit into uint32_t, we cut off 8 digits,
+ // so the rest will fit into uint32_t.
+ // CHANGE_FOR_ERLANG we consider in this whole thing that memcopy use the same
+ // char has defined in the DIGIT_TABLE
+ // CHANGE_FOR_ERLANG __DIGIT_TABLE became DIGIT_TABLE
+ if ((__output >> 32) != 0) {
+ // Expensive 64-bit division.
+ const uint64_t __q = div1e8(__output);
+ uint32_t __output2 = (uint32_t) (__output - 100000000 * __q);
+ __output = __q;
+
+ const uint32_t __c = __output2 % 10000;
+ __output2 /= 10000;
+ const uint32_t __d = __output2 % 10000;
+ const uint32_t __c0 = (__c % 100) << 1;
+ const uint32_t __c1 = (__c / 100) << 1;
+ const uint32_t __d0 = (__d % 100) << 1;
+ const uint32_t __d1 = (__d / 100) << 1;
+
+ memcpy(_Mid -= 2, DIGIT_TABLE + __c0, 2);
+ memcpy(_Mid -= 2, DIGIT_TABLE + __c1, 2);
+ memcpy(_Mid -= 2, DIGIT_TABLE + __d0, 2);
+ memcpy(_Mid -= 2, DIGIT_TABLE + __d1, 2);
+ }
+ uint32_t __output2 = (uint32_t) __output;
+ while (__output2 >= 10000) {
+#ifdef __clang__ // TRANSITION, LLVM-38217
+ const uint32_t __c = __output2 - 10000 * (__output2 / 10000);
+#else
+ const uint32_t __c = __output2 % 10000;
+#endif
+ __output2 /= 10000;
+ const uint32_t __c0 = (__c % 100) << 1;
+ const uint32_t __c1 = (__c / 100) << 1;
+ memcpy(_Mid -= 2, DIGIT_TABLE + __c0, 2);
+ memcpy(_Mid -= 2, DIGIT_TABLE + __c1, 2);
+ }
+ if (__output2 >= 100) {
+ const uint32_t __c = (__output2 % 100) << 1;
+ __output2 /= 100;
+ memcpy(_Mid -= 2, DIGIT_TABLE + __c, 2);
+ }
+ if (__output2 >= 10) {
+ const uint32_t __c = __output2 << 1;
+ memcpy(_Mid -= 2, DIGIT_TABLE + __c, 2);
+ } else {
+ *--_Mid = (char) ('0' + __output2);
+ }
+
+ if (_Ryu_exponent > 0) { // case "172900.0"
+ // Performance note: it might be more efficient to do this immediately after setting _Mid.
+ // CHANGE_FOR_ERLANG we have different case here, so we have to add the ".0" here
+ // we use memset as we do not have access to fill_n
+ memset(__result + __olength, '0', (size_t) _Ryu_exponent);
+ __result[__olength + (size_t) _Ryu_exponent] = '.';
+ __result[__olength + (size_t) _Ryu_exponent + 1] = '0';
+ } else if (_Ryu_exponent == 0) { // case "1729.0"
+ // CHANGE_FOR_ERLANG we have different case here, so we have to add the ".0" here
+ __result[__olength] = '.';
+ __result[__olength + 1] = '0';
+ } else if (_Whole_digits > 0) { // case "17.29"
+ // Performance note: moving digits might not be optimal.
+ memmove(__result, __result + 1, (size_t) _Whole_digits);
+ __result[_Whole_digits] = '.';
+ } else { // case "0.001729"
+ // CHANGE_FOR_ERLANG we use the memset here as we do not have access to fill_n
+ // Performance note: a larger memset() followed by overwriting '.' might be more efficient.
+ __result[0] = '0';
+ __result[1] = '.';
+ memset(__result + 2, '0', (size_t) (-_Whole_digits));
+ }
+
+ // CHANGE_FOR_ERLANG we do not need the errc and we are only interested in
+ // returning the length, as it is what Ryu and erlang expect. We do add the
+ // sign as we did it here instead of adding it by default as in the STL
+ return _Total_fixed_length + sign;
+ }
+
+ uint32_t _Scientific_exponent_length;
+ // CHANGE_FOR_ERLANG we have to do a little bit more complex logic here because we do not always
+ // print the exponent sign, only if it is negative
+ if (_Scientific_exponent <= -100) { // "e-100"
+ _Scientific_exponent_length = 5;
+ } else if (_Scientific_exponent <= -10 || _Scientific_exponent >= 100) { // "e-10" or "e100"
+ _Scientific_exponent_length = 4;
+ } else if ((_Scientific_exponent > -10 && _Scientific_exponent < 0) || _Scientific_exponent >= 10) { // "e-9" or "e10"
+ _Scientific_exponent_length = 3;
+ } else { // "e1"
+ _Scientific_exponent_length = 2;
+ }
+
+ // CHANGE_FOR_ERLANG we do not need the ternary as we did all the logic above
+ const uint32_t _Total_scientific_length = __olength + 1 +(__olength == 1) // digits + decimal point + possible 0 after decimal point
+ + _Scientific_exponent_length; // + scientific exponent
+
+ // Print the decimal digits.
+ uint32_t __i = 0;
+ // We prefer 32-bit operations, even on 64-bit platforms.
+ // We have at most 17 digits, and uint32_t can store 9 digits.
+ // If __output doesn't fit into uint32_t, we cut off 8 digits,
+ // so the rest will fit into uint32_t.
+ // CHANGE_FOR_ERLANG we consider in this whole thing that memcopy use the same
+ // char has defined in the DIGIT_TABLE
+ // CHANGE_FOR_ERLANG __DIGIT_TABLE became DIGIT_TABLE
+ if ((__output >> 32) != 0) {
+ // Expensive 64-bit division.
+ const uint64_t __q = div1e8(__output);
+ uint32_t __output2 = (uint32_t) (__output) - 100000000 * (uint32_t) (__q);
+ __output = __q;
+
+ const uint32_t __c = __output2 % 10000;
+ __output2 /= 10000;
+ const uint32_t __d = __output2 % 10000;
+ const uint32_t __c0 = (__c % 100) << 1;
+ const uint32_t __c1 = (__c / 100) << 1;
+ const uint32_t __d0 = (__d % 100) << 1;
+ const uint32_t __d1 = (__d / 100) << 1;
+ memcpy(__result + __olength - __i - 1, DIGIT_TABLE + __c0, 2);
+ memcpy(__result + __olength - __i - 3, DIGIT_TABLE + __c1, 2);
+ memcpy(__result + __olength - __i - 5, DIGIT_TABLE + __d0, 2);
+ memcpy(__result + __olength - __i - 7, DIGIT_TABLE + __d1, 2);
+ __i += 8;
+ }
+ uint32_t __output2 = (uint32_t) (__output);
+ while (__output2 >= 10000) {
+#ifdef __clang__ // TRANSITION, LLVM-38217
+ const uint32_t __c = __output2 - 10000 * (__output2 / 10000);
+#else
+ const uint32_t __c = __output2 % 10000;
+#endif
+ __output2 /= 10000;
+ const uint32_t __c0 = (__c % 100) << 1;
+ const uint32_t __c1 = (__c / 100) << 1;
+ memcpy(__result + __olength - __i - 1, DIGIT_TABLE + __c0, 2);
+ memcpy(__result + __olength - __i - 3, DIGIT_TABLE + __c1, 2);
+ __i += 4;
+ }
+ if (__output2 >= 100) {
+ const uint32_t __c = (__output2 % 100) << 1;
+ __output2 /= 100;
+ memcpy(__result + __olength - __i - 1, DIGIT_TABLE + __c, 2);
+ __i += 2;
+ }
+ if (__output2 >= 10) {
+ const uint32_t __c = __output2 << 1;
+ // We can't use memcpy here: the decimal dot goes between these two digits.
+ __result[2] = DIGIT_TABLE[__c + 1];
+ __result[0] = DIGIT_TABLE[__c];
+ } else {
+ __result[0] = (char) ('0' + __output2);
+ }
+
+ // Print decimal point if needed.
+ uint32_t __index;
+ if (__olength > 1) {
+ __result[1] = '.';
+ __index = __olength + 1;
+ } else {
+ // In erlang we _have_ to print the ".0" in the case this is an integer
+ __result[1] = '.';
+ __result[2] = '0';
+ __index = __olength + 2;
+ }
+
+ // Print the exponent.
+ __result[__index++] = 'e';
+ if (_Scientific_exponent < 0) {
+ __result[__index++] = '-';
+ _Scientific_exponent = -_Scientific_exponent;
+ }
+ // CHANGE_FOR_ERLANG no else, as we do not print the positive sign on the exponent
+
+ if (_Scientific_exponent >= 100) {
+ const int32_t __c = _Scientific_exponent % 10;
+ memcpy(__result + __index, DIGIT_TABLE + 2 * (_Scientific_exponent / 10), 2);
+ __result[__index + 2] = (char) ('0' + __c);
+ __index += 3;
+ } else if (_Scientific_exponent >= 10) {
+ // CHANGE_FOR_ERLANG we have to do this only if the exponent is larger than 10
+ memcpy(__result + __index, DIGIT_TABLE + 2 * _Scientific_exponent, 2);
+ __index += 2;
+ } else {
+ // CHANGE_FOR_ERLANG we can have an exponent under 10, which is not handled by the table
+ // so we handle it here
+ __result[__index++] = (char) ('0' + _Scientific_exponent);
+ }
+
+ // CHANGE_FOR_ERLANG we do not need the errc and we are only interested in
+ // returning the length, as it is what Ryu and erlang expect. We do add the
+ // sign as we did it here instead of adding it by default as in the STL
+ return _Total_scientific_length + sign;
+}
+// end of STL code, back to ryu
+
+static inline bool d2d_small_int(const uint64_t ieeeMantissa, const uint32_t ieeeExponent,
+ floating_decimal_64* const v) {
+ const uint64_t m2 = (1ull << DOUBLE_MANTISSA_BITS) | ieeeMantissa;
+ const int32_t e2 = (int32_t) ieeeExponent - DOUBLE_BIAS - DOUBLE_MANTISSA_BITS;
+
+ if (e2 > 0) {
+ // f = m2 * 2^e2 >= 2^53 is an integer.
+ // Ignore this case for now.
+ return false;
+ }
+
+ if (e2 < -52) {
+ // f < 1.
+ return false;
+ }
+
+ // Since 2^52 <= m2 < 2^53 and 0 <= -e2 <= 52: 1 <= f = m2 / 2^-e2 < 2^53.
+ // Test if the lower -e2 bits of the significand are 0, i.e. whether the fraction is 0.
+ const uint64_t mask = (1ull << -e2) - 1;
+ const uint64_t fraction = m2 & mask;
+ if (fraction != 0) {
+ return false;
+ }
+
+ // f is an integer in the range [1, 2^53).
+ // Note: mantissa might contain trailing (decimal) 0's.
+ // Note: since 2^53 < 10^16, there is no need to adjust decimalLength17().
+ v->mantissa = m2 >> -e2;
+ v->exponent = 0;
+ return true;
+}
+
+int d2s_buffered_n(double f, char* result) {
+ // Step 1: Decode the floating-point number, and unify normalized and subnormal cases.
+ const uint64_t bits = double_to_bits(f);
+
+#ifdef RYU_DEBUG
+ printf("IN=");
+ for (int32_t bit = 63; bit >= 0; --bit) {
+ printf("%d", (int) ((bits >> bit) & 1));
+ }
+ printf("\n");
+#endif
+
+ // Decode bits into sign, mantissa, and exponent.
+ const bool ieeeSign = ((bits >> (DOUBLE_MANTISSA_BITS + DOUBLE_EXPONENT_BITS)) & 1) != 0;
+ const uint64_t ieeeMantissa = bits & ((1ull << DOUBLE_MANTISSA_BITS) - 1);
+ const uint32_t ieeeExponent = (uint32_t) ((bits >> DOUBLE_MANTISSA_BITS) & ((1u << DOUBLE_EXPONENT_BITS) - 1));
+ // Case distinction; exit early for the easy cases.
+ if (ieeeExponent == ((1u << DOUBLE_EXPONENT_BITS) - 1u) || (ieeeExponent == 0 && ieeeMantissa == 0)) {
+ return copy_special_str(result, ieeeSign, ieeeExponent, ieeeMantissa);
+ }
+
+ floating_decimal_64 v;
+ const bool isSmallInt = d2d_small_int(ieeeMantissa, ieeeExponent, &v);
+ if (isSmallInt) {
+ // For small integers in the range [1, 2^53), v.mantissa might contain trailing (decimal) zeros.
+ // For scientific notation we need to move these zeros into the exponent.
+ // (This is not needed for fixed-point notation, so it might be beneficial to trim
+ // trailing zeros in to_chars only if needed - once fixed-point notation output is implemented.)
+ for (;;) {
+ const uint64_t q = div10(v.mantissa);
+ const uint32_t r = ((uint32_t) v.mantissa) - 10 * ((uint32_t) q);
+ if (r != 0) {
+ break;
+ }
+ v.mantissa = q;
+ ++v.exponent;
+ }
+ } else {
+ v = d2d(ieeeMantissa, ieeeExponent);
+ }
+
+ return to_chars(v, ieeeSign, result);
+}
+
+void d2s_buffered(double f, char* result) {
+ const int index = d2s_buffered_n(f, result);
+
+ // Terminate the string.
+ result[index] = '\0';
+}
+
+char* d2s(double f) {
+ char* const result = (char*) malloc(25);
+ d2s_buffered(f, result);
+ return result;
+}
diff --git a/erts/emulator/ryu/d2s_full_table.h b/erts/emulator/ryu/d2s_full_table.h
new file mode 100644
index 0000000000..c8629eef1b
--- /dev/null
+++ b/erts/emulator/ryu/d2s_full_table.h
@@ -0,0 +1,367 @@
+// Copyright 2018 Ulf Adams
+//
+// The contents of this file may be used under the terms of the Apache License,
+// Version 2.0.
+//
+// (See accompanying file LICENSE-Apache or copy at
+// http://www.apache.org/licenses/LICENSE-2.0)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE-Boost or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+//
+// Unless required by applicable law or agreed to in writing, this software
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.
+#ifndef RYU_D2S_FULL_TABLE_H
+#define RYU_D2S_FULL_TABLE_H
+
+// These tables are generated by PrintDoubleLookupTable.
+#define DOUBLE_POW5_INV_BITCOUNT 125
+#define DOUBLE_POW5_BITCOUNT 125
+
+#define DOUBLE_POW5_INV_TABLE_SIZE 342
+#define DOUBLE_POW5_TABLE_SIZE 326
+
+static const uint64_t DOUBLE_POW5_INV_SPLIT[DOUBLE_POW5_INV_TABLE_SIZE][2] = {
+ { 1u, 2305843009213693952u }, { 11068046444225730970u, 1844674407370955161u },
+ { 5165088340638674453u, 1475739525896764129u }, { 7821419487252849886u, 1180591620717411303u },
+ { 8824922364862649494u, 1888946593147858085u }, { 7059937891890119595u, 1511157274518286468u },
+ { 13026647942995916322u, 1208925819614629174u }, { 9774590264567735146u, 1934281311383406679u },
+ { 11509021026396098440u, 1547425049106725343u }, { 16585914450600699399u, 1237940039285380274u },
+ { 15469416676735388068u, 1980704062856608439u }, { 16064882156130220778u, 1584563250285286751u },
+ { 9162556910162266299u, 1267650600228229401u }, { 7281393426775805432u, 2028240960365167042u },
+ { 16893161185646375315u, 1622592768292133633u }, { 2446482504291369283u, 1298074214633706907u },
+ { 7603720821608101175u, 2076918743413931051u }, { 2393627842544570617u, 1661534994731144841u },
+ { 16672297533003297786u, 1329227995784915872u }, { 11918280793837635165u, 2126764793255865396u },
+ { 5845275820328197809u, 1701411834604692317u }, { 15744267100488289217u, 1361129467683753853u },
+ { 3054734472329800808u, 2177807148294006166u }, { 17201182836831481939u, 1742245718635204932u },
+ { 6382248639981364905u, 1393796574908163946u }, { 2832900194486363201u, 2230074519853062314u },
+ { 5955668970331000884u, 1784059615882449851u }, { 1075186361522890384u, 1427247692705959881u },
+ { 12788344622662355584u, 2283596308329535809u }, { 13920024512871794791u, 1826877046663628647u },
+ { 3757321980813615186u, 1461501637330902918u }, { 10384555214134712795u, 1169201309864722334u },
+ { 5547241898389809503u, 1870722095783555735u }, { 4437793518711847602u, 1496577676626844588u },
+ { 10928932444453298728u, 1197262141301475670u }, { 17486291911125277965u, 1915619426082361072u },
+ { 6610335899416401726u, 1532495540865888858u }, { 12666966349016942027u, 1225996432692711086u },
+ { 12888448528943286597u, 1961594292308337738u }, { 17689456452638449924u, 1569275433846670190u },
+ { 14151565162110759939u, 1255420347077336152u }, { 7885109000409574610u, 2008672555323737844u },
+ { 9997436015069570011u, 1606938044258990275u }, { 7997948812055656009u, 1285550435407192220u },
+ { 12796718099289049614u, 2056880696651507552u }, { 2858676849947419045u, 1645504557321206042u },
+ { 13354987924183666206u, 1316403645856964833u }, { 17678631863951955605u, 2106245833371143733u },
+ { 3074859046935833515u, 1684996666696914987u }, { 13527933681774397782u, 1347997333357531989u },
+ { 10576647446613305481u, 2156795733372051183u }, { 15840015586774465031u, 1725436586697640946u },
+ { 8982663654677661702u, 1380349269358112757u }, { 18061610662226169046u, 2208558830972980411u },
+ { 10759939715039024913u, 1766847064778384329u }, { 12297300586773130254u, 1413477651822707463u },
+ { 15986332124095098083u, 2261564242916331941u }, { 9099716884534168143u, 1809251394333065553u },
+ { 14658471137111155161u, 1447401115466452442u }, { 4348079280205103483u, 1157920892373161954u },
+ { 14335624477811986218u, 1852673427797059126u }, { 7779150767507678651u, 1482138742237647301u },
+ { 2533971799264232598u, 1185710993790117841u }, { 15122401323048503126u, 1897137590064188545u },
+ { 12097921058438802501u, 1517710072051350836u }, { 5988988032009131678u, 1214168057641080669u },
+ { 16961078480698431330u, 1942668892225729070u }, { 13568862784558745064u, 1554135113780583256u },
+ { 7165741412905085728u, 1243308091024466605u }, { 11465186260648137165u, 1989292945639146568u },
+ { 16550846638002330379u, 1591434356511317254u }, { 16930026125143774626u, 1273147485209053803u },
+ { 4951948911778577463u, 2037035976334486086u }, { 272210314680951647u, 1629628781067588869u },
+ { 3907117066486671641u, 1303703024854071095u }, { 6251387306378674625u, 2085924839766513752u },
+ { 16069156289328670670u, 1668739871813211001u }, { 9165976216721026213u, 1334991897450568801u },
+ { 7286864317269821294u, 2135987035920910082u }, { 16897537898041588005u, 1708789628736728065u },
+ { 13518030318433270404u, 1367031702989382452u }, { 6871453250525591353u, 2187250724783011924u },
+ { 9186511415162383406u, 1749800579826409539u }, { 11038557946871817048u, 1399840463861127631u },
+ { 10282995085511086630u, 2239744742177804210u }, { 8226396068408869304u, 1791795793742243368u },
+ { 13959814484210916090u, 1433436634993794694u }, { 11267656730511734774u, 2293498615990071511u },
+ { 5324776569667477496u, 1834798892792057209u }, { 7949170070475892320u, 1467839114233645767u },
+ { 17427382500606444826u, 1174271291386916613u }, { 5747719112518849781u, 1878834066219066582u },
+ { 15666221734240810795u, 1503067252975253265u }, { 12532977387392648636u, 1202453802380202612u },
+ { 5295368560860596524u, 1923926083808324180u }, { 4236294848688477220u, 1539140867046659344u },
+ { 7078384693692692099u, 1231312693637327475u }, { 11325415509908307358u, 1970100309819723960u },
+ { 9060332407926645887u, 1576080247855779168u }, { 14626963555825137356u, 1260864198284623334u },
+ { 12335095245094488799u, 2017382717255397335u }, { 9868076196075591040u, 1613906173804317868u },
+ { 15273158586344293478u, 1291124939043454294u }, { 13369007293925138595u, 2065799902469526871u },
+ { 7005857020398200553u, 1652639921975621497u }, { 16672732060544291412u, 1322111937580497197u },
+ { 11918976037903224966u, 2115379100128795516u }, { 5845832015580669650u, 1692303280103036413u },
+ { 12055363241948356366u, 1353842624082429130u }, { 841837113407818570u, 2166148198531886609u },
+ { 4362818505468165179u, 1732918558825509287u }, { 14558301248600263113u, 1386334847060407429u },
+ { 12225235553534690011u, 2218135755296651887u }, { 2401490813343931363u, 1774508604237321510u },
+ { 1921192650675145090u, 1419606883389857208u }, { 17831303500047873437u, 2271371013423771532u },
+ { 6886345170554478103u, 1817096810739017226u }, { 1819727321701672159u, 1453677448591213781u },
+ { 16213177116328979020u, 1162941958872971024u }, { 14873036941900635463u, 1860707134196753639u },
+ { 15587778368262418694u, 1488565707357402911u }, { 8780873879868024632u, 1190852565885922329u },
+ { 2981351763563108441u, 1905364105417475727u }, { 13453127855076217722u, 1524291284333980581u },
+ { 7073153469319063855u, 1219433027467184465u }, { 11317045550910502167u, 1951092843947495144u },
+ { 12742985255470312057u, 1560874275157996115u }, { 10194388204376249646u, 1248699420126396892u },
+ { 1553625868034358140u, 1997919072202235028u }, { 8621598323911307159u, 1598335257761788022u },
+ { 17965325103354776697u, 1278668206209430417u }, { 13987124906400001422u, 2045869129935088668u },
+ { 121653480894270168u, 1636695303948070935u }, { 97322784715416134u, 1309356243158456748u },
+ { 14913111714512307107u, 2094969989053530796u }, { 8241140556867935363u, 1675975991242824637u },
+ { 17660958889720079260u, 1340780792994259709u }, { 17189487779326395846u, 2145249268790815535u },
+ { 13751590223461116677u, 1716199415032652428u }, { 18379969808252713988u, 1372959532026121942u },
+ { 14650556434236701088u, 2196735251241795108u }, { 652398703163629901u, 1757388200993436087u },
+ { 11589965406756634890u, 1405910560794748869u }, { 7475898206584884855u, 2249456897271598191u },
+ { 2291369750525997561u, 1799565517817278553u }, { 9211793429904618695u, 1439652414253822842u },
+ { 18428218302589300235u, 2303443862806116547u }, { 7363877012587619542u, 1842755090244893238u },
+ { 13269799239553916280u, 1474204072195914590u }, { 10615839391643133024u, 1179363257756731672u },
+ { 2227947767661371545u, 1886981212410770676u }, { 16539753473096738529u, 1509584969928616540u },
+ { 13231802778477390823u, 1207667975942893232u }, { 6413489186596184024u, 1932268761508629172u },
+ { 16198837793502678189u, 1545815009206903337u }, { 5580372605318321905u, 1236652007365522670u },
+ { 8928596168509315048u, 1978643211784836272u }, { 18210923379033183008u, 1582914569427869017u },
+ { 7190041073742725760u, 1266331655542295214u }, { 436019273762630246u, 2026130648867672343u },
+ { 7727513048493924843u, 1620904519094137874u }, { 9871359253537050198u, 1296723615275310299u },
+ { 4726128361433549347u, 2074757784440496479u }, { 7470251503888749801u, 1659806227552397183u },
+ { 13354898832594820487u, 1327844982041917746u }, { 13989140502667892133u, 2124551971267068394u },
+ { 14880661216876224029u, 1699641577013654715u }, { 11904528973500979224u, 1359713261610923772u },
+ { 4289851098633925465u, 2175541218577478036u }, { 18189276137874781665u, 1740432974861982428u },
+ { 3483374466074094362u, 1392346379889585943u }, { 1884050330976640656u, 2227754207823337509u },
+ { 5196589079523222848u, 1782203366258670007u }, { 15225317707844309248u, 1425762693006936005u },
+ { 5913764258841343181u, 2281220308811097609u }, { 8420360221814984868u, 1824976247048878087u },
+ { 17804334621677718864u, 1459980997639102469u }, { 17932816512084085415u, 1167984798111281975u },
+ { 10245762345624985047u, 1868775676978051161u }, { 4507261061758077715u, 1495020541582440929u },
+ { 7295157664148372495u, 1196016433265952743u }, { 7982903447895485668u, 1913626293225524389u },
+ { 10075671573058298858u, 1530901034580419511u }, { 4371188443704728763u, 1224720827664335609u },
+ { 14372599139411386667u, 1959553324262936974u }, { 15187428126271019657u, 1567642659410349579u },
+ { 15839291315758726049u, 1254114127528279663u }, { 3206773216762499739u, 2006582604045247462u },
+ { 13633465017635730761u, 1605266083236197969u }, { 14596120828850494932u, 1284212866588958375u },
+ { 4907049252451240275u, 2054740586542333401u }, { 236290587219081897u, 1643792469233866721u },
+ { 14946427728742906810u, 1315033975387093376u }, { 16535586736504830250u, 2104054360619349402u },
+ { 5849771759720043554u, 1683243488495479522u }, { 15747863852001765813u, 1346594790796383617u },
+ { 10439186904235184007u, 2154551665274213788u }, { 15730047152871967852u, 1723641332219371030u },
+ { 12584037722297574282u, 1378913065775496824u }, { 9066413911450387881u, 2206260905240794919u },
+ { 10942479943902220628u, 1765008724192635935u }, { 8753983955121776503u, 1412006979354108748u },
+ { 10317025513452932081u, 2259211166966573997u }, { 874922781278525018u, 1807368933573259198u },
+ { 8078635854506640661u, 1445895146858607358u }, { 13841606313089133175u, 1156716117486885886u },
+ { 14767872471458792434u, 1850745787979017418u }, { 746251532941302978u, 1480596630383213935u },
+ { 597001226353042382u, 1184477304306571148u }, { 15712597221132509104u, 1895163686890513836u },
+ { 8880728962164096960u, 1516130949512411069u }, { 10793931984473187891u, 1212904759609928855u },
+ { 17270291175157100626u, 1940647615375886168u }, { 2748186495899949531u, 1552518092300708935u },
+ { 2198549196719959625u, 1242014473840567148u }, { 18275073973719576693u, 1987223158144907436u },
+ { 10930710364233751031u, 1589778526515925949u }, { 12433917106128911148u, 1271822821212740759u },
+ { 8826220925580526867u, 2034916513940385215u }, { 7060976740464421494u, 1627933211152308172u },
+ { 16716827836597268165u, 1302346568921846537u }, { 11989529279587987770u, 2083754510274954460u },
+ { 9591623423670390216u, 1667003608219963568u }, { 15051996368420132820u, 1333602886575970854u },
+ { 13015147745246481542u, 2133764618521553367u }, { 3033420566713364587u, 1707011694817242694u },
+ { 6116085268112601993u, 1365609355853794155u }, { 9785736428980163188u, 2184974969366070648u },
+ { 15207286772667951197u, 1747979975492856518u }, { 1097782973908629988u, 1398383980394285215u },
+ { 1756452758253807981u, 2237414368630856344u }, { 5094511021344956708u, 1789931494904685075u },
+ { 4075608817075965366u, 1431945195923748060u }, { 6520974107321544586u, 2291112313477996896u },
+ { 1527430471115325346u, 1832889850782397517u }, { 12289990821117991246u, 1466311880625918013u },
+ { 17210690286378213644u, 1173049504500734410u }, { 9090360384495590213u, 1876879207201175057u },
+ { 18340334751822203140u, 1501503365760940045u }, { 14672267801457762512u, 1201202692608752036u },
+ { 16096930852848599373u, 1921924308174003258u }, { 1809498238053148529u, 1537539446539202607u },
+ { 12515645034668249793u, 1230031557231362085u }, { 1578287981759648052u, 1968050491570179337u },
+ { 12330676829633449412u, 1574440393256143469u }, { 13553890278448669853u, 1259552314604914775u },
+ { 3239480371808320148u, 2015283703367863641u }, { 17348979556414297411u, 1612226962694290912u },
+ { 6500486015647617283u, 1289781570155432730u }, { 10400777625036187652u, 2063650512248692368u },
+ { 15699319729512770768u, 1650920409798953894u }, { 16248804598352126938u, 1320736327839163115u },
+ { 7551343283653851484u, 2113178124542660985u }, { 6041074626923081187u, 1690542499634128788u },
+ { 12211557331022285596u, 1352433999707303030u }, { 1091747655926105338u, 2163894399531684849u },
+ { 4562746939482794594u, 1731115519625347879u }, { 7339546366328145998u, 1384892415700278303u },
+ { 8053925371383123274u, 2215827865120445285u }, { 6443140297106498619u, 1772662292096356228u },
+ { 12533209867169019542u, 1418129833677084982u }, { 5295740528502789974u, 2269007733883335972u },
+ { 15304638867027962949u, 1815206187106668777u }, { 4865013464138549713u, 1452164949685335022u },
+ { 14960057215536570740u, 1161731959748268017u }, { 9178696285890871890u, 1858771135597228828u },
+ { 14721654658196518159u, 1487016908477783062u }, { 4398626097073393881u, 1189613526782226450u },
+ { 7037801755317430209u, 1903381642851562320u }, { 5630241404253944167u, 1522705314281249856u },
+ { 814844308661245011u, 1218164251424999885u }, { 1303750893857992017u, 1949062802279999816u },
+ { 15800395974054034906u, 1559250241823999852u }, { 5261619149759407279u, 1247400193459199882u },
+ { 12107939454356961969u, 1995840309534719811u }, { 5997002748743659252u, 1596672247627775849u },
+ { 8486951013736837725u, 1277337798102220679u }, { 2511075177753209390u, 2043740476963553087u },
+ { 13076906586428298482u, 1634992381570842469u }, { 14150874083884549109u, 1307993905256673975u },
+ { 4194654460505726958u, 2092790248410678361u }, { 18113118827372222859u, 1674232198728542688u },
+ { 3422448617672047318u, 1339385758982834151u }, { 16543964232501006678u, 2143017214372534641u },
+ { 9545822571258895019u, 1714413771498027713u }, { 15015355686490936662u, 1371531017198422170u },
+ { 5577825024675947042u, 2194449627517475473u }, { 11840957649224578280u, 1755559702013980378u },
+ { 16851463748863483271u, 1404447761611184302u }, { 12204946739213931940u, 2247116418577894884u },
+ { 13453306206113055875u, 1797693134862315907u }, { 3383947335406624054u, 1438154507889852726u },
+ { 16482362180876329456u, 2301047212623764361u }, { 9496540929959153242u, 1840837770099011489u },
+ { 11286581558709232917u, 1472670216079209191u }, { 5339916432225476010u, 1178136172863367353u },
+ { 4854517476818851293u, 1885017876581387765u }, { 3883613981455081034u, 1508014301265110212u },
+ { 14174937629389795797u, 1206411441012088169u }, { 11611853762797942306u, 1930258305619341071u },
+ { 5600134195496443521u, 1544206644495472857u }, { 15548153800622885787u, 1235365315596378285u },
+ { 6430302007287065643u, 1976584504954205257u }, { 16212288050055383484u, 1581267603963364205u },
+ { 12969830440044306787u, 1265014083170691364u }, { 9683682259845159889u, 2024022533073106183u },
+ { 15125643437359948558u, 1619218026458484946u }, { 8411165935146048523u, 1295374421166787957u },
+ { 17147214310975587960u, 2072599073866860731u }, { 10028422634038560045u, 1658079259093488585u },
+ { 8022738107230848036u, 1326463407274790868u }, { 9147032156827446534u, 2122341451639665389u },
+ { 11006974540203867551u, 1697873161311732311u }, { 5116230817421183718u, 1358298529049385849u },
+ { 15564666937357714594u, 2173277646479017358u }, { 1383687105660440706u, 1738622117183213887u },
+ { 12174996128754083534u, 1390897693746571109u }, { 8411947361780802685u, 2225436309994513775u },
+ { 6729557889424642148u, 1780349047995611020u }, { 5383646311539713719u, 1424279238396488816u },
+ { 1235136468979721303u, 2278846781434382106u }, { 15745504434151418335u, 1823077425147505684u },
+ { 16285752362063044992u, 1458461940118004547u }, { 5649904260166615347u, 1166769552094403638u },
+ { 5350498001524674232u, 1866831283351045821u }, { 591049586477829062u, 1493465026680836657u },
+ { 11540886113407994219u, 1194772021344669325u }, { 18673707743239135u, 1911635234151470921u },
+ { 14772334225162232601u, 1529308187321176736u }, { 8128518565387875758u, 1223446549856941389u },
+ { 1937583260394870242u, 1957514479771106223u }, { 8928764237799716840u, 1566011583816884978u },
+ { 14521709019723594119u, 1252809267053507982u }, { 8477339172590109297u, 2004494827285612772u },
+ { 17849917782297818407u, 1603595861828490217u }, { 6901236596354434079u, 1282876689462792174u },
+ { 18420676183650915173u, 2052602703140467478u }, { 3668494502695001169u, 1642082162512373983u },
+ { 10313493231639821582u, 1313665730009899186u }, { 9122891541139893884u, 2101865168015838698u },
+ { 14677010862395735754u, 1681492134412670958u }, { 673562245690857633u, 1345193707530136767u }
+};
+
+static const uint64_t DOUBLE_POW5_SPLIT[DOUBLE_POW5_TABLE_SIZE][2] = {
+ { 0u, 1152921504606846976u }, { 0u, 1441151880758558720u },
+ { 0u, 1801439850948198400u }, { 0u, 2251799813685248000u },
+ { 0u, 1407374883553280000u }, { 0u, 1759218604441600000u },
+ { 0u, 2199023255552000000u }, { 0u, 1374389534720000000u },
+ { 0u, 1717986918400000000u }, { 0u, 2147483648000000000u },
+ { 0u, 1342177280000000000u }, { 0u, 1677721600000000000u },
+ { 0u, 2097152000000000000u }, { 0u, 1310720000000000000u },
+ { 0u, 1638400000000000000u }, { 0u, 2048000000000000000u },
+ { 0u, 1280000000000000000u }, { 0u, 1600000000000000000u },
+ { 0u, 2000000000000000000u }, { 0u, 1250000000000000000u },
+ { 0u, 1562500000000000000u }, { 0u, 1953125000000000000u },
+ { 0u, 1220703125000000000u }, { 0u, 1525878906250000000u },
+ { 0u, 1907348632812500000u }, { 0u, 1192092895507812500u },
+ { 0u, 1490116119384765625u }, { 4611686018427387904u, 1862645149230957031u },
+ { 9799832789158199296u, 1164153218269348144u }, { 12249790986447749120u, 1455191522836685180u },
+ { 15312238733059686400u, 1818989403545856475u }, { 14528612397897220096u, 2273736754432320594u },
+ { 13692068767113150464u, 1421085471520200371u }, { 12503399940464050176u, 1776356839400250464u },
+ { 15629249925580062720u, 2220446049250313080u }, { 9768281203487539200u, 1387778780781445675u },
+ { 7598665485932036096u, 1734723475976807094u }, { 274959820560269312u, 2168404344971008868u },
+ { 9395221924704944128u, 1355252715606880542u }, { 2520655369026404352u, 1694065894508600678u },
+ { 12374191248137781248u, 2117582368135750847u }, { 14651398557727195136u, 1323488980084844279u },
+ { 13702562178731606016u, 1654361225106055349u }, { 3293144668132343808u, 2067951531382569187u },
+ { 18199116482078572544u, 1292469707114105741u }, { 8913837547316051968u, 1615587133892632177u },
+ { 15753982952572452864u, 2019483917365790221u }, { 12152082354571476992u, 1262177448353618888u },
+ { 15190102943214346240u, 1577721810442023610u }, { 9764256642163156992u, 1972152263052529513u },
+ { 17631875447420442880u, 1232595164407830945u }, { 8204786253993389888u, 1540743955509788682u },
+ { 1032610780636961552u, 1925929944387235853u }, { 2951224747111794922u, 1203706215242022408u },
+ { 3689030933889743652u, 1504632769052528010u }, { 13834660704216955373u, 1880790961315660012u },
+ { 17870034976990372916u, 1175494350822287507u }, { 17725857702810578241u, 1469367938527859384u },
+ { 3710578054803671186u, 1836709923159824231u }, { 26536550077201078u, 2295887403949780289u },
+ { 11545800389866720434u, 1434929627468612680u }, { 14432250487333400542u, 1793662034335765850u },
+ { 8816941072311974870u, 2242077542919707313u }, { 17039803216263454053u, 1401298464324817070u },
+ { 12076381983474541759u, 1751623080406021338u }, { 5872105442488401391u, 2189528850507526673u },
+ { 15199280947623720629u, 1368455531567204170u }, { 9775729147674874978u, 1710569414459005213u },
+ { 16831347453020981627u, 2138211768073756516u }, { 1296220121283337709u, 1336382355046097823u },
+ { 15455333206886335848u, 1670477943807622278u }, { 10095794471753144002u, 2088097429759527848u },
+ { 6309871544845715001u, 1305060893599704905u }, { 12499025449484531656u, 1631326116999631131u },
+ { 11012095793428276666u, 2039157646249538914u }, { 11494245889320060820u, 1274473528905961821u },
+ { 532749306367912313u, 1593091911132452277u }, { 5277622651387278295u, 1991364888915565346u },
+ { 7910200175544436838u, 1244603055572228341u }, { 14499436237857933952u, 1555753819465285426u },
+ { 8900923260467641632u, 1944692274331606783u }, { 12480606065433357876u, 1215432671457254239u },
+ { 10989071563364309441u, 1519290839321567799u }, { 9124653435777998898u, 1899113549151959749u },
+ { 8008751406574943263u, 1186945968219974843u }, { 5399253239791291175u, 1483682460274968554u },
+ { 15972438586593889776u, 1854603075343710692u }, { 759402079766405302u, 1159126922089819183u },
+ { 14784310654990170340u, 1448908652612273978u }, { 9257016281882937117u, 1811135815765342473u },
+ { 16182956370781059300u, 2263919769706678091u }, { 7808504722524468110u, 1414949856066673807u },
+ { 5148944884728197234u, 1768687320083342259u }, { 1824495087482858639u, 2210859150104177824u },
+ { 1140309429676786649u, 1381786968815111140u }, { 1425386787095983311u, 1727233711018888925u },
+ { 6393419502297367043u, 2159042138773611156u }, { 13219259225790630210u, 1349401336733506972u },
+ { 16524074032238287762u, 1686751670916883715u }, { 16043406521870471799u, 2108439588646104644u },
+ { 803757039314269066u, 1317774742903815403u }, { 14839754354425000045u, 1647218428629769253u },
+ { 4714634887749086344u, 2059023035787211567u }, { 9864175832484260821u, 1286889397367007229u },
+ { 16941905809032713930u, 1608611746708759036u }, { 2730638187581340797u, 2010764683385948796u },
+ { 10930020904093113806u, 1256727927116217997u }, { 18274212148543780162u, 1570909908895272496u },
+ { 4396021111970173586u, 1963637386119090621u }, { 5053356204195052443u, 1227273366324431638u },
+ { 15540067292098591362u, 1534091707905539547u }, { 14813398096695851299u, 1917614634881924434u },
+ { 13870059828862294966u, 1198509146801202771u }, { 12725888767650480803u, 1498136433501503464u },
+ { 15907360959563101004u, 1872670541876879330u }, { 14553786618154326031u, 1170419088673049581u },
+ { 4357175217410743827u, 1463023860841311977u }, { 10058155040190817688u, 1828779826051639971u },
+ { 7961007781811134206u, 2285974782564549964u }, { 14199001900486734687u, 1428734239102843727u },
+ { 13137066357181030455u, 1785917798878554659u }, { 11809646928048900164u, 2232397248598193324u },
+ { 16604401366885338411u, 1395248280373870827u }, { 16143815690179285109u, 1744060350467338534u },
+ { 10956397575869330579u, 2180075438084173168u }, { 6847748484918331612u, 1362547148802608230u },
+ { 17783057643002690323u, 1703183936003260287u }, { 17617136035325974999u, 2128979920004075359u },
+ { 17928239049719816230u, 1330612450002547099u }, { 17798612793722382384u, 1663265562503183874u },
+ { 13024893955298202172u, 2079081953128979843u }, { 5834715712847682405u, 1299426220705612402u },
+ { 16516766677914378815u, 1624282775882015502u }, { 11422586310538197711u, 2030353469852519378u },
+ { 11750802462513761473u, 1268970918657824611u }, { 10076817059714813937u, 1586213648322280764u },
+ { 12596021324643517422u, 1982767060402850955u }, { 5566670318688504437u, 1239229412751781847u },
+ { 2346651879933242642u, 1549036765939727309u }, { 7545000868343941206u, 1936295957424659136u },
+ { 4715625542714963254u, 1210184973390411960u }, { 5894531928393704067u, 1512731216738014950u },
+ { 16591536947346905892u, 1890914020922518687u }, { 17287239619732898039u, 1181821263076574179u },
+ { 16997363506238734644u, 1477276578845717724u }, { 2799960309088866689u, 1846595723557147156u },
+ { 10973347230035317489u, 1154122327223216972u }, { 13716684037544146861u, 1442652909029021215u },
+ { 12534169028502795672u, 1803316136286276519u }, { 11056025267201106687u, 2254145170357845649u },
+ { 18439230838069161439u, 1408840731473653530u }, { 13825666510731675991u, 1761050914342066913u },
+ { 3447025083132431277u, 2201313642927583642u }, { 6766076695385157452u, 1375821026829739776u },
+ { 8457595869231446815u, 1719776283537174720u }, { 10571994836539308519u, 2149720354421468400u },
+ { 6607496772837067824u, 1343575221513417750u }, { 17482743002901110588u, 1679469026891772187u },
+ { 17241742735199000331u, 2099336283614715234u }, { 15387775227926763111u, 1312085177259197021u },
+ { 5399660979626290177u, 1640106471573996277u }, { 11361262242960250625u, 2050133089467495346u },
+ { 11712474920277544544u, 1281333180917184591u }, { 10028907631919542777u, 1601666476146480739u },
+ { 7924448521472040567u, 2002083095183100924u }, { 14176152362774801162u, 1251301934489438077u },
+ { 3885132398186337741u, 1564127418111797597u }, { 9468101516160310080u, 1955159272639746996u },
+ { 15140935484454969608u, 1221974545399841872u }, { 479425281859160394u, 1527468181749802341u },
+ { 5210967620751338397u, 1909335227187252926u }, { 17091912818251750210u, 1193334516992033078u },
+ { 12141518985959911954u, 1491668146240041348u }, { 15176898732449889943u, 1864585182800051685u },
+ { 11791404716994875166u, 1165365739250032303u }, { 10127569877816206054u, 1456707174062540379u },
+ { 8047776328842869663u, 1820883967578175474u }, { 836348374198811271u, 2276104959472719343u },
+ { 7440246761515338900u, 1422565599670449589u }, { 13911994470321561530u, 1778206999588061986u },
+ { 8166621051047176104u, 2222758749485077483u }, { 2798295147690791113u, 1389224218428173427u },
+ { 17332926989895652603u, 1736530273035216783u }, { 17054472718942177850u, 2170662841294020979u },
+ { 8353202440125167204u, 1356664275808763112u }, { 10441503050156459005u, 1695830344760953890u },
+ { 3828506775840797949u, 2119787930951192363u }, { 86973725686804766u, 1324867456844495227u },
+ { 13943775212390669669u, 1656084321055619033u }, { 3594660960206173375u, 2070105401319523792u },
+ { 2246663100128858359u, 1293815875824702370u }, { 12031700912015848757u, 1617269844780877962u },
+ { 5816254103165035138u, 2021587305976097453u }, { 5941001823691840913u, 1263492066235060908u },
+ { 7426252279614801142u, 1579365082793826135u }, { 4671129331091113523u, 1974206353492282669u },
+ { 5225298841145639904u, 1233878970932676668u }, { 6531623551432049880u, 1542348713665845835u },
+ { 3552843420862674446u, 1927935892082307294u }, { 16055585193321335241u, 1204959932551442058u },
+ { 10846109454796893243u, 1506199915689302573u }, { 18169322836923504458u, 1882749894611628216u },
+ { 11355826773077190286u, 1176718684132267635u }, { 9583097447919099954u, 1470898355165334544u },
+ { 11978871809898874942u, 1838622943956668180u }, { 14973589762373593678u, 2298278679945835225u },
+ { 2440964573842414192u, 1436424174966147016u }, { 3051205717303017741u, 1795530218707683770u },
+ { 13037379183483547984u, 2244412773384604712u }, { 8148361989677217490u, 1402757983365377945u },
+ { 14797138505523909766u, 1753447479206722431u }, { 13884737113477499304u, 2191809349008403039u },
+ { 15595489723564518921u, 1369880843130251899u }, { 14882676136028260747u, 1712351053912814874u },
+ { 9379973133180550126u, 2140438817391018593u }, { 17391698254306313589u, 1337774260869386620u },
+ { 3292878744173340370u, 1672217826086733276u }, { 4116098430216675462u, 2090272282608416595u },
+ { 266718509671728212u, 1306420176630260372u }, { 333398137089660265u, 1633025220787825465u },
+ { 5028433689789463235u, 2041281525984781831u }, { 10060300083759496378u, 1275800953740488644u },
+ { 12575375104699370472u, 1594751192175610805u }, { 1884160825592049379u, 1993438990219513507u },
+ { 17318501580490888525u, 1245899368887195941u }, { 7813068920331446945u, 1557374211108994927u },
+ { 5154650131986920777u, 1946717763886243659u }, { 915813323278131534u, 1216698602428902287u },
+ { 14979824709379828129u, 1520873253036127858u }, { 9501408849870009354u, 1901091566295159823u },
+ { 12855909558809837702u, 1188182228934474889u }, { 2234828893230133415u, 1485227786168093612u },
+ { 2793536116537666769u, 1856534732710117015u }, { 8663489100477123587u, 1160334207943823134u },
+ { 1605989338741628675u, 1450417759929778918u }, { 11230858710281811652u, 1813022199912223647u },
+ { 9426887369424876662u, 2266277749890279559u }, { 12809333633531629769u, 1416423593681424724u },
+ { 16011667041914537212u, 1770529492101780905u }, { 6179525747111007803u, 2213161865127226132u },
+ { 13085575628799155685u, 1383226165704516332u }, { 16356969535998944606u, 1729032707130645415u },
+ { 15834525901571292854u, 2161290883913306769u }, { 2979049660840976177u, 1350806802445816731u },
+ { 17558870131333383934u, 1688508503057270913u }, { 8113529608884566205u, 2110635628821588642u },
+ { 9682642023980241782u, 1319147268013492901u }, { 16714988548402690132u, 1648934085016866126u },
+ { 11670363648648586857u, 2061167606271082658u }, { 11905663298832754689u, 1288229753919426661u },
+ { 1047021068258779650u, 1610287192399283327u }, { 15143834390605638274u, 2012858990499104158u },
+ { 4853210475701136017u, 1258036869061940099u }, { 1454827076199032118u, 1572546086327425124u },
+ { 1818533845248790147u, 1965682607909281405u }, { 3442426662494187794u, 1228551629943300878u },
+ { 13526405364972510550u, 1535689537429126097u }, { 3072948650933474476u, 1919611921786407622u },
+ { 15755650962115585259u, 1199757451116504763u }, { 15082877684217093670u, 1499696813895630954u },
+ { 9630225068416591280u, 1874621017369538693u }, { 8324733676974063502u, 1171638135855961683u },
+ { 5794231077790191473u, 1464547669819952104u }, { 7242788847237739342u, 1830684587274940130u },
+ { 18276858095901949986u, 2288355734093675162u }, { 16034722328366106645u, 1430222333808546976u },
+ { 1596658836748081690u, 1787777917260683721u }, { 6607509564362490017u, 2234722396575854651u },
+ { 1823850468512862308u, 1396701497859909157u }, { 6891499104068465790u, 1745876872324886446u },
+ { 17837745916940358045u, 2182346090406108057u }, { 4231062170446641922u, 1363966306503817536u },
+ { 5288827713058302403u, 1704957883129771920u }, { 6611034641322878003u, 2131197353912214900u },
+ { 13355268687681574560u, 1331998346195134312u }, { 16694085859601968200u, 1664997932743917890u },
+ { 11644235287647684442u, 2081247415929897363u }, { 4971804045566108824u, 1300779634956185852u },
+ { 6214755056957636030u, 1625974543695232315u }, { 3156757802769657134u, 2032468179619040394u },
+ { 6584659645158423613u, 1270292612261900246u }, { 17454196593302805324u, 1587865765327375307u },
+ { 17206059723201118751u, 1984832206659219134u }, { 6142101308573311315u, 1240520129162011959u },
+ { 3065940617289251240u, 1550650161452514949u }, { 8444111790038951954u, 1938312701815643686u },
+ { 665883850346957067u, 1211445438634777304u }, { 832354812933696334u, 1514306798293471630u },
+ { 10263815553021896226u, 1892883497866839537u }, { 17944099766707154901u, 1183052186166774710u },
+ { 13206752671529167818u, 1478815232708468388u }, { 16508440839411459773u, 1848519040885585485u },
+ { 12623618533845856310u, 1155324400553490928u }, { 15779523167307320387u, 1444155500691863660u },
+ { 1277659885424598868u, 1805194375864829576u }, { 1597074856780748586u, 2256492969831036970u },
+ { 5609857803915355770u, 1410308106144398106u }, { 16235694291748970521u, 1762885132680497632u },
+ { 1847873790976661535u, 2203606415850622041u }, { 12684136165428883219u, 1377254009906638775u },
+ { 11243484188358716120u, 1721567512383298469u }, { 219297180166231438u, 2151959390479123087u },
+ { 7054589765244976505u, 1344974619049451929u }, { 13429923224983608535u, 1681218273811814911u },
+ { 12175718012802122765u, 2101522842264768639u }, { 14527352785642408584u, 1313451776415480399u },
+ { 13547504963625622826u, 1641814720519350499u }, { 12322695186104640628u, 2052268400649188124u },
+ { 16925056528170176201u, 1282667750405742577u }, { 7321262604930556539u, 1603334688007178222u },
+ { 18374950293017971482u, 2004168360008972777u }, { 4566814905495150320u, 1252605225005607986u },
+ { 14931890668723713708u, 1565756531257009982u }, { 9441491299049866327u, 1957195664071262478u },
+ { 1289246043478778550u, 1223247290044539049u }, { 6223243572775861092u, 1529059112555673811u },
+ { 3167368447542438461u, 1911323890694592264u }, { 1979605279714024038u, 1194577431684120165u },
+ { 7086192618069917952u, 1493221789605150206u }, { 18081112809442173248u, 1866527237006437757u },
+ { 13606538515115052232u, 1166579523129023598u }, { 7784801107039039482u, 1458224403911279498u },
+ { 507629346944023544u, 1822780504889099373u }, { 5246222702107417334u, 2278475631111374216u },
+ { 3278889188817135834u, 1424047269444608885u }, { 8710297504448807696u, 1780059086805761106u }
+};
+
+#endif // RYU_D2S_FULL_TABLE_H
diff --git a/erts/emulator/ryu/d2s_intrinsics.h b/erts/emulator/ryu/d2s_intrinsics.h
new file mode 100644
index 0000000000..77388b3088
--- /dev/null
+++ b/erts/emulator/ryu/d2s_intrinsics.h
@@ -0,0 +1,358 @@
+// Copyright 2018 Ulf Adams
+//
+// The contents of this file may be used under the terms of the Apache License,
+// Version 2.0.
+//
+// (See accompanying file LICENSE-Apache or copy at
+// http://www.apache.org/licenses/LICENSE-2.0)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE-Boost or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+//
+// Unless required by applicable law or agreed to in writing, this software
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.
+#ifndef RYU_D2S_INTRINSICS_H
+#define RYU_D2S_INTRINSICS_H
+
+#include <assert.h>
+#include <stdint.h>
+
+// Defines RYU_32_BIT_PLATFORM if applicable.
+#include "common.h"
+
+// ABSL avoids uint128_t on Win32 even if __SIZEOF_INT128__ is defined.
+// Let's do the same for now.
+#if defined(__SIZEOF_INT128__) && !defined(_MSC_VER) && !defined(RYU_ONLY_64_BIT_OPS)
+#define HAS_UINT128
+#elif defined(_MSC_VER) && !defined(RYU_ONLY_64_BIT_OPS) && defined(_M_X64)
+#define HAS_64_BIT_INTRINSICS
+#endif
+
+#if defined(HAS_UINT128)
+typedef __uint128_t uint128_t;
+#endif
+
+#if defined(HAS_64_BIT_INTRINSICS)
+
+#include <intrin.h>
+
+static inline uint64_t umul128(const uint64_t a, const uint64_t b, uint64_t* const productHi) {
+ return _umul128(a, b, productHi);
+}
+
+// Returns the lower 64 bits of (hi*2^64 + lo) >> dist, with 0 < dist < 64.
+static inline uint64_t shiftright128(const uint64_t lo, const uint64_t hi, const uint32_t dist) {
+ // For the __shiftright128 intrinsic, the shift value is always
+ // modulo 64.
+ // In the current implementation of the double-precision version
+ // of Ryu, the shift value is always < 64. (In the case
+ // RYU_OPTIMIZE_SIZE == 0, the shift value is in the range [49, 58].
+ // Otherwise in the range [2, 59].)
+ // However, this function is now also called by s2d, which requires supporting
+ // the larger shift range (TODO: what is the actual range?).
+ // Check this here in case a future change requires larger shift
+ // values. In this case this function needs to be adjusted.
+ assert(dist < 64);
+ return __shiftright128(lo, hi, (unsigned char) dist);
+}
+
+#else // defined(HAS_64_BIT_INTRINSICS)
+
+static inline uint64_t umul128(const uint64_t a, const uint64_t b, uint64_t* const productHi) {
+ // The casts here help MSVC to avoid calls to the __allmul library function.
+ const uint32_t aLo = (uint32_t)a;
+ const uint32_t aHi = (uint32_t)(a >> 32);
+ const uint32_t bLo = (uint32_t)b;
+ const uint32_t bHi = (uint32_t)(b >> 32);
+
+ const uint64_t b00 = (uint64_t)aLo * bLo;
+ const uint64_t b01 = (uint64_t)aLo * bHi;
+ const uint64_t b10 = (uint64_t)aHi * bLo;
+ const uint64_t b11 = (uint64_t)aHi * bHi;
+
+ const uint32_t b00Lo = (uint32_t)b00;
+ const uint32_t b00Hi = (uint32_t)(b00 >> 32);
+
+ const uint64_t mid1 = b10 + b00Hi;
+ const uint32_t mid1Lo = (uint32_t)(mid1);
+ const uint32_t mid1Hi = (uint32_t)(mid1 >> 32);
+
+ const uint64_t mid2 = b01 + mid1Lo;
+ const uint32_t mid2Lo = (uint32_t)(mid2);
+ const uint32_t mid2Hi = (uint32_t)(mid2 >> 32);
+
+ const uint64_t pHi = b11 + mid1Hi + mid2Hi;
+ const uint64_t pLo = ((uint64_t)mid2Lo << 32) | b00Lo;
+
+ *productHi = pHi;
+ return pLo;
+}
+
+static inline uint64_t shiftright128(const uint64_t lo, const uint64_t hi, const uint32_t dist) {
+ // We don't need to handle the case dist >= 64 here (see above).
+ assert(dist < 64);
+ assert(dist > 0);
+ return (hi << (64 - dist)) | (lo >> dist);
+}
+
+#endif // defined(HAS_64_BIT_INTRINSICS)
+
+#if defined(RYU_32_BIT_PLATFORM)
+
+// Returns the high 64 bits of the 128-bit product of a and b.
+static inline uint64_t umulh(const uint64_t a, const uint64_t b) {
+ // Reuse the umul128 implementation.
+ // Optimizers will likely eliminate the instructions used to compute the
+ // low part of the product.
+ uint64_t hi;
+ umul128(a, b, &hi);
+ return hi;
+}
+
+// On 32-bit platforms, compilers typically generate calls to library
+// functions for 64-bit divisions, even if the divisor is a constant.
+//
+// E.g.:
+// https://bugs.llvm.org/show_bug.cgi?id=37932
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=17958
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37443
+//
+// The functions here perform division-by-constant using multiplications
+// in the same way as 64-bit compilers would do.
+//
+// NB:
+// The multipliers and shift values are the ones generated by clang x64
+// for expressions like x/5, x/10, etc.
+
+static inline uint64_t div5(const uint64_t x) {
+ return umulh(x, 0xCCCCCCCCCCCCCCCDu) >> 2;
+}
+
+static inline uint64_t div10(const uint64_t x) {
+ return umulh(x, 0xCCCCCCCCCCCCCCCDu) >> 3;
+}
+
+static inline uint64_t div100(const uint64_t x) {
+ return umulh(x >> 2, 0x28F5C28F5C28F5C3u) >> 2;
+}
+
+static inline uint64_t div1e8(const uint64_t x) {
+ return umulh(x, 0xABCC77118461CEFDu) >> 26;
+}
+
+static inline uint64_t div1e9(const uint64_t x) {
+ return umulh(x >> 9, 0x44B82FA09B5A53u) >> 11;
+}
+
+static inline uint32_t mod1e9(const uint64_t x) {
+ // Avoid 64-bit math as much as possible.
+ // Returning (uint32_t) (x - 1000000000 * div1e9(x)) would
+ // perform 32x64-bit multiplication and 64-bit subtraction.
+ // x and 1000000000 * div1e9(x) are guaranteed to differ by
+ // less than 10^9, so their highest 32 bits must be identical,
+ // so we can truncate both sides to uint32_t before subtracting.
+ // We can also simplify (uint32_t) (1000000000 * div1e9(x)).
+ // We can truncate before multiplying instead of after, as multiplying
+ // the highest 32 bits of div1e9(x) can't affect the lowest 32 bits.
+ return ((uint32_t) x) - 1000000000 * ((uint32_t) div1e9(x));
+}
+
+#else // defined(RYU_32_BIT_PLATFORM)
+
+static inline uint64_t div5(const uint64_t x) {
+ return x / 5;
+}
+
+static inline uint64_t div10(const uint64_t x) {
+ return x / 10;
+}
+
+static inline uint64_t div100(const uint64_t x) {
+ return x / 100;
+}
+
+static inline uint64_t div1e8(const uint64_t x) {
+ return x / 100000000;
+}
+
+static inline uint64_t div1e9(const uint64_t x) {
+ return x / 1000000000;
+}
+
+static inline uint32_t mod1e9(const uint64_t x) {
+ return (uint32_t) (x - 1000000000 * div1e9(x));
+}
+
+#endif // defined(RYU_32_BIT_PLATFORM)
+
+static inline uint32_t pow5Factor(uint64_t value) {
+ uint32_t count = 0;
+ for (;;) {
+ assert(value != 0);
+ const uint64_t q = div5(value);
+ const uint32_t r = ((uint32_t) value) - 5 * ((uint32_t) q);
+ if (r != 0) {
+ break;
+ }
+ value = q;
+ ++count;
+ }
+ return count;
+}
+
+// Returns true if value is divisible by 5^p.
+static inline bool multipleOfPowerOf5(const uint64_t value, const uint32_t p) {
+ // I tried a case distinction on p, but there was no performance difference.
+ return pow5Factor(value) >= p;
+}
+
+// Returns true if value is divisible by 2^p.
+static inline bool multipleOfPowerOf2(const uint64_t value, const uint32_t p) {
+ assert(value != 0);
+ assert(p < 64);
+ // __builtin_ctzll doesn't appear to be faster here.
+ return (value & ((1ull << p) - 1)) == 0;
+}
+
+// We need a 64x128-bit multiplication and a subsequent 128-bit shift.
+// Multiplication:
+// The 64-bit factor is variable and passed in, the 128-bit factor comes
+// from a lookup table. We know that the 64-bit factor only has 55
+// significant bits (i.e., the 9 topmost bits are zeros). The 128-bit
+// factor only has 124 significant bits (i.e., the 4 topmost bits are
+// zeros).
+// Shift:
+// In principle, the multiplication result requires 55 + 124 = 179 bits to
+// represent. However, we then shift this value to the right by j, which is
+// at least j >= 115, so the result is guaranteed to fit into 179 - 115 = 64
+// bits. This means that we only need the topmost 64 significant bits of
+// the 64x128-bit multiplication.
+//
+// There are several ways to do this:
+// 1. Best case: the compiler exposes a 128-bit type.
+// We perform two 64x64-bit multiplications, add the higher 64 bits of the
+// lower result to the higher result, and shift by j - 64 bits.
+//
+// We explicitly cast from 64-bit to 128-bit, so the compiler can tell
+// that these are only 64-bit inputs, and can map these to the best
+// possible sequence of assembly instructions.
+// x64 machines happen to have matching assembly instructions for
+// 64x64-bit multiplications and 128-bit shifts.
+//
+// 2. Second best case: the compiler exposes intrinsics for the x64 assembly
+// instructions mentioned in 1.
+//
+// 3. We only have 64x64 bit instructions that return the lower 64 bits of
+// the result, i.e., we have to use plain C.
+// Our inputs are less than the full width, so we have three options:
+// a. Ignore this fact and just implement the intrinsics manually.
+// b. Split both into 31-bit pieces, which guarantees no internal overflow,
+// but requires extra work upfront (unless we change the lookup table).
+// c. Split only the first factor into 31-bit pieces, which also guarantees
+// no internal overflow, but requires extra work since the intermediate
+// results are not perfectly aligned.
+#if defined(HAS_UINT128)
+
+// Best case: use 128-bit type.
+static inline uint64_t mulShift64(const uint64_t m, const uint64_t* const mul, const int32_t j) {
+ const uint128_t b0 = ((uint128_t) m) * mul[0];
+ const uint128_t b2 = ((uint128_t) m) * mul[1];
+ return (uint64_t) (((b0 >> 64) + b2) >> (j - 64));
+}
+
+static inline uint64_t mulShiftAll64(const uint64_t m, const uint64_t* const mul, const int32_t j,
+ uint64_t* const vp, uint64_t* const vm, const uint32_t mmShift) {
+// m <<= 2;
+// uint128_t b0 = ((uint128_t) m) * mul[0]; // 0
+// uint128_t b2 = ((uint128_t) m) * mul[1]; // 64
+//
+// uint128_t hi = (b0 >> 64) + b2;
+// uint128_t lo = b0 & 0xffffffffffffffffull;
+// uint128_t factor = (((uint128_t) mul[1]) << 64) + mul[0];
+// uint128_t vpLo = lo + (factor << 1);
+// *vp = (uint64_t) ((hi + (vpLo >> 64)) >> (j - 64));
+// uint128_t vmLo = lo - (factor << mmShift);
+// *vm = (uint64_t) ((hi + (vmLo >> 64) - (((uint128_t) 1ull) << 64)) >> (j - 64));
+// return (uint64_t) (hi >> (j - 64));
+ *vp = mulShift64(4 * m + 2, mul, j);
+ *vm = mulShift64(4 * m - 1 - mmShift, mul, j);
+ return mulShift64(4 * m, mul, j);
+}
+
+#elif defined(HAS_64_BIT_INTRINSICS)
+
+static inline uint64_t mulShift64(const uint64_t m, const uint64_t* const mul, const int32_t j) {
+ // m is maximum 55 bits
+ uint64_t high1; // 128
+ const uint64_t low1 = umul128(m, mul[1], &high1); // 64
+ uint64_t high0; // 64
+ umul128(m, mul[0], &high0); // 0
+ const uint64_t sum = high0 + low1;
+ if (sum < high0) {
+ ++high1; // overflow into high1
+ }
+ return shiftright128(sum, high1, j - 64);
+}
+
+static inline uint64_t mulShiftAll64(const uint64_t m, const uint64_t* const mul, const int32_t j,
+ uint64_t* const vp, uint64_t* const vm, const uint32_t mmShift) {
+ *vp = mulShift64(4 * m + 2, mul, j);
+ *vm = mulShift64(4 * m - 1 - mmShift, mul, j);
+ return mulShift64(4 * m, mul, j);
+}
+
+#else // !defined(HAS_UINT128) && !defined(HAS_64_BIT_INTRINSICS)
+
+static inline uint64_t mulShift64(const uint64_t m, const uint64_t* const mul, const int32_t j) {
+ // m is maximum 55 bits
+ uint64_t high1; // 128
+ const uint64_t low1 = umul128(m, mul[1], &high1); // 64
+ uint64_t high0; // 64
+ umul128(m, mul[0], &high0); // 0
+ const uint64_t sum = high0 + low1;
+ if (sum < high0) {
+ ++high1; // overflow into high1
+ }
+ return shiftright128(sum, high1, j - 64);
+}
+
+// This is faster if we don't have a 64x64->128-bit multiplication.
+static inline uint64_t mulShiftAll64(uint64_t m, const uint64_t* const mul, const int32_t j,
+ uint64_t* const vp, uint64_t* const vm, const uint32_t mmShift) {
+ m <<= 1;
+ // m is maximum 55 bits
+ uint64_t tmp;
+ const uint64_t lo = umul128(m, mul[0], &tmp);
+ uint64_t hi;
+ const uint64_t mid = tmp + umul128(m, mul[1], &hi);
+ hi += mid < tmp; // overflow into hi
+
+ const uint64_t lo2 = lo + mul[0];
+ const uint64_t mid2 = mid + mul[1] + (lo2 < lo);
+ const uint64_t hi2 = hi + (mid2 < mid);
+ *vp = shiftright128(mid2, hi2, (uint32_t) (j - 64 - 1));
+
+ if (mmShift == 1) {
+ const uint64_t lo3 = lo - mul[0];
+ const uint64_t mid3 = mid - mul[1] - (lo3 > lo);
+ const uint64_t hi3 = hi - (mid3 > mid);
+ *vm = shiftright128(mid3, hi3, (uint32_t) (j - 64 - 1));
+ } else {
+ const uint64_t lo3 = lo + lo;
+ const uint64_t mid3 = mid + mid + (lo3 < lo);
+ const uint64_t hi3 = hi + hi + (mid3 < mid);
+ const uint64_t lo4 = lo3 - mul[0];
+ const uint64_t mid4 = mid3 - mul[1] - (lo4 > lo3);
+ const uint64_t hi4 = hi3 - (mid4 > mid3);
+ *vm = shiftright128(mid4, hi4, (uint32_t) (j - 64));
+ }
+
+ return shiftright128(mid, hi, (uint32_t) (j - 64 - 1));
+}
+
+#endif // HAS_64_BIT_INTRINSICS
+
+#endif // RYU_D2S_INTRINSICS_H
diff --git a/erts/emulator/ryu/digit_table.h b/erts/emulator/ryu/digit_table.h
new file mode 100644
index 0000000000..02219bc6d5
--- /dev/null
+++ b/erts/emulator/ryu/digit_table.h
@@ -0,0 +1,35 @@
+// Copyright 2018 Ulf Adams
+//
+// The contents of this file may be used under the terms of the Apache License,
+// Version 2.0.
+//
+// (See accompanying file LICENSE-Apache or copy at
+// http://www.apache.org/licenses/LICENSE-2.0)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE-Boost or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+//
+// Unless required by applicable law or agreed to in writing, this software
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.
+#ifndef RYU_DIGIT_TABLE_H
+#define RYU_DIGIT_TABLE_H
+
+// A table of all two-digit numbers. This is used to speed up decimal digit
+// generation by copying pairs of digits into the final output.
+static const char DIGIT_TABLE[200] = {
+ '0','0','0','1','0','2','0','3','0','4','0','5','0','6','0','7','0','8','0','9',
+ '1','0','1','1','1','2','1','3','1','4','1','5','1','6','1','7','1','8','1','9',
+ '2','0','2','1','2','2','2','3','2','4','2','5','2','6','2','7','2','8','2','9',
+ '3','0','3','1','3','2','3','3','3','4','3','5','3','6','3','7','3','8','3','9',
+ '4','0','4','1','4','2','4','3','4','4','4','5','4','6','4','7','4','8','4','9',
+ '5','0','5','1','5','2','5','3','5','4','5','5','5','6','5','7','5','8','5','9',
+ '6','0','6','1','6','2','6','3','6','4','6','5','6','6','6','7','6','8','6','9',
+ '7','0','7','1','7','2','7','3','7','4','7','5','7','6','7','7','7','8','7','9',
+ '8','0','8','1','8','2','8','3','8','4','8','5','8','6','8','7','8','8','8','9',
+ '9','0','9','1','9','2','9','3','9','4','9','5','9','6','9','7','9','8','9','9'
+};
+
+#endif // RYU_DIGIT_TABLE_H
diff --git a/erts/emulator/ryu/ryu.h b/erts/emulator/ryu/ryu.h
new file mode 100644
index 0000000000..9439ada7cc
--- /dev/null
+++ b/erts/emulator/ryu/ryu.h
@@ -0,0 +1,36 @@
+// Copyright 2018 Ulf Adams
+//
+// The contents of this file may be used under the terms of the Apache License,
+// Version 2.0.
+//
+// (See accompanying file LICENSE-Apache or copy at
+// http://www.apache.org/licenses/LICENSE-2.0)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE-Boost or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+//
+// Unless required by applicable law or agreed to in writing, this software
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.
+#ifndef RYU_H
+#define RYU_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <inttypes.h>
+
+int d2s_buffered_n(double f, char* result);
+void d2s_buffered(double f, char* result);
+char* d2s(double f);
+
+//CHANGE_FOR_ERLANG we dropped all the other functions as not used by us
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // RYU_H
diff --git a/erts/emulator/ryu/ryu.mk b/erts/emulator/ryu/ryu.mk
new file mode 100644
index 0000000000..524618f446
--- /dev/null
+++ b/erts/emulator/ryu/ryu.mk
@@ -0,0 +1,57 @@
+#-*-makefile-*- ; force emacs to enter makefile-mode
+# ----------------------------------------------------
+# Make include file for Ryu
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2011-2021. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# ----------------------------------------------------
+
+RYU_FILES = d2s
+
+RYU_OBJDIR = $(ERL_TOP)/erts/emulator/ryu/obj/$(TARGET)/$(TYPE)
+RYU_OBJS = $(RYU_FILES:%=$(RYU_OBJDIR)/%.o)
+RYU_DIR = $(ERL_TOP)/erts/emulator/ryu
+
+RYU_SRC = $(RYU_FILES:%=ryu/%.c)
+
+ifeq ($(TARGET), win32)
+RYU_LIBRARY = $(RYU_OBJDIR)/ryu.lib
+else
+RYU_LIBRARY = $(RYU_OBJDIR)/libryu.a
+endif
+
+ifeq ($(TARGET), win32)
+RYU_CFLAGS = $(CFLAGS)
+else
+RYU_CFLAGS = $(filter-out -Wdeclaration-after-statement,$(CFLAGS))
+endif
+
+ifeq ($(TARGET), win32)
+$(RYU_LIBRARY): $(RYU_OBJS)
+ $(V_AR) -out:$@ $(RYU_OBJS)
+else
+$(RYU_LIBRARY): $(RYU_OBJS)
+ $(V_AR) $(ARFLAGS) $@ $(RYU_OBJS)
+ -@ ($(RANLIB) $@ || true) 2>/dev/null
+endif
+
+
+
+$(RYU_OBJDIR)/%.o: ryu/%.c
+ $(V_CC) -c $(RYU_CFLAGS) -o $@ $<
diff --git a/erts/emulator/sys/unix/erl_unix_sys.h b/erts/emulator/sys/unix/erl_unix_sys.h
index 832b7a09c2..0aa782f6bf 100644
--- a/erts/emulator/sys/unix/erl_unix_sys.h
+++ b/erts/emulator/sys/unix/erl_unix_sys.h
@@ -73,15 +73,9 @@
# include <sys/mman.h>
#endif
-#if TIME_WITH_SYS_TIME
+#include <time.h>
+#if HAVE_SYS_TIME_H
# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
#include <sys/times.h>
@@ -113,6 +107,10 @@
# define ERTS_HAVE_ERTS_SYS_ALIGNED_ALLOC 1
#endif
+#ifndef RETSIGTYPE
+#define RETSIGTYPE void
+#endif
+
/*
* Make sure that MAXPATHLEN is defined.
*/
diff --git a/erts/emulator/test/Makefile b/erts/emulator/test/Makefile
index 34a73a6f1d..239d02874a 100644
--- a/erts/emulator/test/Makefile
+++ b/erts/emulator/test/Makefile
@@ -76,6 +76,7 @@ MODULES= \
hello_SUITE \
hibernate_SUITE \
iovec_SUITE \
+ jit_SUITE \
list_bif_SUITE \
lttng_SUITE \
lcnt_SUITE \
@@ -92,7 +93,6 @@ MODULES= \
message_queue_data_SUITE \
op_SUITE \
os_signal_SUITE \
- perf_SUITE \
port_SUITE \
port_bif_SUITE \
prim_eval_SUITE \
diff --git a/erts/emulator/test/alloc_SUITE.erl b/erts/emulator/test/alloc_SUITE.erl
index 97cd90d72c..ebc60b3cc2 100644
--- a/erts/emulator/test/alloc_SUITE.erl
+++ b/erts/emulator/test/alloc_SUITE.erl
@@ -197,11 +197,11 @@ erts_mmap_do(Config, SCO, SCRPM, SCRFSD) ->
{false, {os,_}} -> ok
end,
- Self ! {Ref, ok}
+ exit(ok)
end,
- spawn_link(Node, F),
- Result = receive {Ref, Rslt} -> Rslt end,
+ {Pid, MRef} = spawn_monitor(Node, F),
+ Result = receive {'DOWN', MRef, process, Pid, Rslt} -> Rslt end,
stop_node(Node),
Result.
diff --git a/erts/emulator/test/binary_SUITE.erl b/erts/emulator/test/binary_SUITE.erl
index 2840eb3dd0..fe0e968f63 100644
--- a/erts/emulator/test/binary_SUITE.erl
+++ b/erts/emulator/test/binary_SUITE.erl
@@ -69,7 +69,6 @@
ordering/1,unaligned_order/1,gc_test/1,
bit_sized_binary_sizes/1,
otp_6817/1,deep/1,
- term2bin_tuple_fallbacks/1,
robustness/1,otp_8117/1,
otp_8180/1, trapping/1, large/1,
error_after_yield/1, cmp_old_impl/1,
@@ -98,7 +97,6 @@ all() ->
otp_5484, otp_5933,
ordering, unaligned_order, gc_test,
bit_sized_binary_sizes, otp_6817, otp_8117, deep,
- term2bin_tuple_fallbacks,
robustness, otp_8180, trapping, large,
error_after_yield, cmp_old_impl].
@@ -1739,29 +1737,6 @@ deep_roundtrip(T) ->
B = term_to_binary(T),
T = binary_to_term(B).
-term2bin_tuple_fallbacks(Config) when is_list(Config) ->
- erts_debug:set_internal_state(available_internal_state, true),
-
- term2bin_tf(fun ?MODULE:all/1),
- term2bin_tf(<<1:1>>),
- term2bin_tf(<<90,80:7>>),
-
- erts_debug:set_internal_state(available_internal_state, false),
- ok.
-
-term2bin_tf(Term) ->
- Tuple = case Term of
- Fun when is_function(Fun) ->
- {type, external} = erlang:fun_info(Fun, type),
- {module,M} = erlang:fun_info(Fun, module),
- {name,F} = erlang:fun_info(Fun, name),
- {M,F};
- BS when bit_size(BS) rem 8 =/= 0 ->
- Bits = bit_size(BS) rem 8,
- {<<BS/bitstring, 0:(8-Bits)>>, Bits}
- end,
- Tuple = binary_to_term_stress(erts_debug:get_internal_state({term_to_binary_tuple_fallbacks,Term})).
-
%% Test non-standard encodings never generated by term_to_binary/1
%% but recognized by binary_to_term/1.
diff --git a/erts/emulator/test/distribution_SUITE.erl b/erts/emulator/test/distribution_SUITE.erl
index 496e80b9ac..a24d7ddace 100644
--- a/erts/emulator/test/distribution_SUITE.erl
+++ b/erts/emulator/test/distribution_SUITE.erl
@@ -860,9 +860,9 @@ stop_dist(Config) when is_list(Config) ->
++ " -noshell -pa "
++ proplists:get_value(data_dir, Config)
++ " -s run"),
- %% The "true" may be followed by an error report, so ignore anything that
- %% follows it.
- "true\n"++_ = Str,
+ %% The "true" may be followed or prepended by an error report
+ Lines = string:lexemes(Str, "\n"),
+ true = lists:member("true", Lines),
%% "May fail on FreeBSD due to differently configured name lookup - ask Arndt",
%% if you can find him.
diff --git a/erts/emulator/test/erts_test_utils.erl b/erts/emulator/test/erts_test_utils.erl
index 1759a464e2..158b78c2c1 100644
--- a/erts/emulator/test/erts_test_utils.erl
+++ b/erts/emulator/test/erts_test_utils.erl
@@ -19,7 +19,7 @@
%%
-module(erts_test_utils).
--compile(r20).
+-compile(r22).
%%
%% THIS MODULE IS ALSO USED BY *OTHER* APPLICATIONS TEST CODE
diff --git a/erts/emulator/test/exception_SUITE.erl b/erts/emulator/test/exception_SUITE.erl
index 746993bf34..6744ee895b 100644
--- a/erts/emulator/test/exception_SUITE.erl
+++ b/erts/emulator/test/exception_SUITE.erl
@@ -1436,11 +1436,23 @@ line_numbers(Config) when is_list(Config) ->
[{file,"fake_file.erl"},{line,3}]},
{?MODULE,line_numbers,1,_}|_]}} =
(catch line1(bad_tag, 0)),
- {'EXIT',{badarith,
- [{?MODULE,line1,2,
- [{file,"fake_file.erl"},{line,5}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch line1(a, not_an_integer)),
+
+ %% The stacktrace for operators such a '+' can vary depending on
+ %% whether the JIT is used or not.
+ case catch line1(a, not_an_integer) of
+ {'EXIT',{badarith,
+ [{erlang,'+',[not_an_integer,1],_},
+ {?MODULE,line1,2,
+ [{file,"fake_file.erl"},{line,5}]},
+ {?MODULE,line_numbers,1,_}|_]}} ->
+ ok;
+ {'EXIT',{badarith,
+ [{?MODULE,line1,2,
+ [{file,"fake_file.erl"},{line,5}]},
+ {?MODULE,line_numbers,1,_}|_]}} ->
+ ok
+ end,
+
{'EXIT',{{badmatch,{ok,1}},
[{?MODULE,line1,2,
[{file,"fake_file.erl"},{line,7}]},
@@ -1524,14 +1536,29 @@ line_numbers(Config) when is_list(Config) ->
{?MODULE,line_numbers,1,_}|_]}} =
(catch applied_bif_2()),
- {'EXIT',{badarith,
- [{?MODULE,increment1,1,[{file,"increment.erl"},{line,45}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch increment1(x)),
- {'EXIT',{badarith,
- [{?MODULE,increment2,1,[{file,"increment.erl"},{line,48}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch increment2(x)),
+ case catch increment1(x) of
+ {'EXIT',{badarith,
+ [{erlang,'+',[x,1],_},
+ {?MODULE,increment1,1,[{file,"increment.erl"},{line,45}]},
+ {?MODULE,line_numbers,1,_}|_]}} ->
+ ok;
+ {'EXIT',{badarith,
+ [{?MODULE,increment1,1,[{file,"increment.erl"},{line,45}]},
+ {?MODULE,line_numbers,1,_}|_]}} ->
+ ok
+ end,
+
+ case catch increment2(x) of
+ {'EXIT',{badarith,
+ [{erlang,'+',[x,1],_},
+ {?MODULE,increment2,1,[{file,"increment.erl"},{line,48}]},
+ {?MODULE,line_numbers,1,_}|_]}} ->
+ ok;
+ {'EXIT',{badarith,
+ [{?MODULE,increment2,1,[{file,"increment.erl"},{line,48}]},
+ {?MODULE,line_numbers,1,_}|_]}} ->
+ ok
+ end,
{'EXIT',{{badmap,not_a_map},
[{?MODULE,update_map,1,[{file,"map.erl"},{line,3}]}|_]}} =
diff --git a/erts/emulator/test/hash_SUITE.erl b/erts/emulator/test/hash_SUITE.erl
index 86b4460b38..e8b284b2d0 100644
--- a/erts/emulator/test/hash_SUITE.erl
+++ b/erts/emulator/test/hash_SUITE.erl
@@ -557,38 +557,41 @@ last_byte(Bin) ->
<<_:NotLastByteSize/bitstring, LastByte:8>> = Bin,
LastByte.
+
+%% This testcase needs 8-10 GB of free memory. If not enough is available
+%% the testcase will fail with {erpc,noconnection}
test_phash2_4GB_plus_bin(Config) when is_list(Config) ->
run_when_enough_resources(
fun() ->
{ok, N} = start_node(?FUNCTION_NAME),
erpc:call(N,
fun() ->
- erts_debug:set_internal_state(available_internal_state, true),
- %% Created Bin4GB here so it only needs to be created once
- erts_debug:set_internal_state(force_gc, self()),
- Bin4GB = get_4GB_bin(),
- test_phash2_plus_bin_helper1(Bin4GB, <<>>, <<>>, 13708901),
- erts_debug:set_internal_state(force_gc, self()),
- test_phash2_plus_bin_helper1(Bin4GB, <<>>, <<3:5>>, 66617678),
- erts_debug:set_internal_state(force_gc, self()),
- test_phash2_plus_bin_helper1(Bin4GB, <<13>>, <<>>, 31308392),
- erts_debug:set_internal_state(force_gc, self()),
- erts_debug:set_internal_state(available_internal_state, false)
+ test_phash2_4GB_plus_bin_tc()
end),
stop_node(N)
end).
+test_phash2_4GB_plus_bin_tc() ->
+ erts_debug:set_internal_state(available_internal_state, true),
+ test_phash2_gc(),
+ test_phash2_plus_bin_helper(fun get_4GB_bin/0, <<>>, <<>>, 13708901),
+ test_phash2_gc(),
+ test_phash2_plus_bin_helper(fun get_4GB_bin/0, <<>>, <<3:5>>, 66617678),
+ test_phash2_gc(),
+ test_phash2_plus_bin_helper(fun get_4GB_bin/0, <<13>>, <<>>, 31308392),
+ test_phash2_gc(),
+ erts_debug:set_internal_state(available_internal_state, false),
+ ok.
test_phash2_10MB_plus_bin(Config) when is_list(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
- erts_debug:set_internal_state(force_gc, self()),
- Bin10MB = get_10MB_bin(),
- test_phash2_plus_bin_helper1(Bin10MB, <<>>, <<>>, 22776267),
- erts_debug:set_internal_state(force_gc, self()),
- test_phash2_plus_bin_helper1(Bin10MB, <<>>, <<3:5>>, 124488972),
- erts_debug:set_internal_state(force_gc, self()),
- test_phash2_plus_bin_helper1(Bin10MB, <<13>>, <<>>, 72958346),
- erts_debug:set_internal_state(force_gc, self()),
+ test_phash2_gc(),
+ test_phash2_plus_bin_helper(fun get_10MB_bin/0, <<>>, <<>>, 22776267),
+ test_phash2_gc(),
+ test_phash2_plus_bin_helper(fun get_10MB_bin/0, <<>>, <<3:5>>, 124488972),
+ test_phash2_gc(),
+ test_phash2_plus_bin_helper(fun get_10MB_bin/0, <<13>>, <<>>, 72958346),
+ test_phash2_gc(),
erts_debug:set_internal_state(available_internal_state, false).
get_10MB_bin() ->
@@ -612,39 +615,86 @@ duplicate_iolist(IOList, 0) ->
duplicate_iolist(IOList, NrOfTimes) ->
duplicate_iolist([IOList, IOList], NrOfTimes - 1).
-test_phash2_plus_bin_helper1(Bin4GB, ExtraBytes, ExtraBits, ExpectedHash) ->
- test_phash2_plus_bin_helper2(Bin4GB, fun id/1, ExtraBytes, ExtraBits, ExpectedHash),
- test_phash2_plus_bin_helper2(Bin4GB, fun make_unaligned_sub_bitstring/1, ExtraBytes, ExtraBits, ExpectedHash).
-test_phash2_plus_bin_helper2(Bin, TransformerFun, ExtraBytes, ExtraBits, ExpectedHash) ->
+%% This functions is written very carefully so that the binaries
+%% created are released as quickly as possible. If they are not released
+%% then the memory consumption going through the roof and systems will need
+%% lots of memory.
+test_phash2_plus_bin_helper(Bin4GB, ExtraBytes, ExtraBits, ExpectedHash) ->
+ ct:log("Test with ~p extra bytes and ~p extra bits",
+ [ExtraBytes, ExtraBits]),
+ test_phash2_plus_bin_helper(Bin4GB, fun id/1, ExtraBytes, ExtraBits, ExpectedHash),
+ ct:log("Test as unaligned sub bitstring"),
+ test_phash2_plus_bin_helper(Bin4GB, fun make_unaligned_sub_bitstring/1,
+ ExtraBytes, ExtraBits, ExpectedHash).
+test_phash2_plus_bin_helper(Bin, TransformerFun, ExtraBytes, ExtraBits, ExpectedHash) ->
+ %% GC to free any binaries used by previous test cases
+ test_phash2_gc(),
ExtraBitstring = << ExtraBytes/binary, ExtraBits/bitstring >>,
LargerBitstring = << ExtraBytes/binary,
ExtraBits/bitstring,
- Bin/bitstring >>,
+ (Bin())/bitstring >>,
+ %% GC to free binary created by Bin()
+ test_phash2_gc(),
LargerTransformedBitstring = TransformerFun(LargerBitstring),
+ %% GC to free binary LargerBitstring
+ test_phash2_gc(),
ExtraBitstringHash = erlang:phash2(ExtraBitstring),
ExpectedHash =
case size(LargerTransformedBitstring) < 4294967296 of
true ->
- erts_debug:set_internal_state(force_gc, self()),
erts_debug:set_internal_state(reds_left, 1),
Hash = erlang:phash2(LargerTransformedBitstring),
Hash = erlang:phash2(LargerTransformedBitstring),
Hash;
false ->
- erts_debug:set_internal_state(force_gc, self()),
erts_debug:set_internal_state(reds_left, 1),
ExtraBitstringHash = erlang:phash2(LargerTransformedBitstring),
ExtraBitstringHash = erlang:phash2(LargerTransformedBitstring),
ExtraBitstringHash
end.
+test_phash2_gc() ->
+ erts_debug:set_internal_state(force_gc, self()),
+ wait_for_mseg_cache(10).
+
+%% We want to wait for the mseg cache to clear as otherwise the
+%% extra refc binaries may still use memory and cause the system
+%% to run out when it should not.
+wait_for_mseg_cache(0) ->
+ io:format("Cached segments never became zero, continue anyways.");
+wait_for_mseg_cache(N) ->
+ case get_cached_segments() of
+ 0 ->
+ %% We sleep an extra second in order for the OS to catch up
+ timer:sleep(1000);
+ NotZero ->
+ io:format("Cached segments = ~p, sleeping for 1 second~n",
+ [NotZero]),
+ timer:sleep(1000),
+ wait_for_mseg_cache(N-1)
+ end.
+
+get_cached_segments() ->
+ case erlang:system_info({allocator,mseg_alloc}) of
+ false ->
+ 0;
+ MsegInfo ->
+ lists:foldl(
+ fun({instance,_,Info}, Acc) ->
+ Kind = proplists:get_value(memkind, Info),
+ Status = proplists:get_value(status, Kind),
+ {cached_segments,Cached} = lists:keyfind(cached_segments, 1, Status),
+ Acc + Cached
+ end, 0, MsegInfo)
+ end.
+
run_when_enough_resources(Fun) ->
Bits = 8 * erlang:system_info({wordsize,external}),
Mem = total_memory(),
Build = erlang:system_info(build_type),
- if Bits =:= 64, is_integer(Mem), Mem >= 31,
+ if Bits =:= 64, is_integer(Mem), Mem >= 16,
Build =/= valgrind, Build =/= asan ->
Fun();
@@ -1257,9 +1307,18 @@ make_unaligned_sub_binary(Bin0) when is_binary(Bin0) ->
<<0:3,Bin:Sz/binary,31:5>> = id(Bin1),
Bin.
+%% This functions is written very carefully so that the bitstrings
+%% created are released as quickly as possible. If they are not released
+%% then the memory consumption going through the roof and systems will need
+%% lots of memory.
make_unaligned_sub_bitstring(Bin0) ->
- Bin1 = <<0:3,Bin0/bitstring,31:5>>,
Sz = erlang:bit_size(Bin0),
+ Bin1 = <<0:3,Bin0/bitstring,31:5>>,
+ make_unaligned_sub_bitstring2(Sz, Bin1).
+
+make_unaligned_sub_bitstring2(Sz, Bin1) ->
+ %% Make sure to release Bin0 if possible
+ erlang:garbage_collect(),
<<0:3,Bin:Sz/bitstring,31:5>> = id(Bin1),
Bin.
diff --git a/erts/emulator/test/hello_SUITE_data/hello.erl b/erts/emulator/test/hello_SUITE_data/hello.erl
index 7e77a71061..3d75391060 100644
--- a/erts/emulator/test/hello_SUITE_data/hello.erl
+++ b/erts/emulator/test/hello_SUITE_data/hello.erl
@@ -1662,7 +1662,7 @@ test_hibernate() ->
maximum_hibernate_heap_size(Term) ->
%% When hibernating, a few extra words will be allocated to hold the
%% continuation pointer as well as scratch space for the interpreter/jit.
- erts_debug:flat_size(Term) + 4.
+ erts_debug:flat_size(Term) + 8.
hibernate_wake_up(0, _, _) -> ok;
hibernate_wake_up(N, MaxHeapSz, Child) ->
diff --git a/erts/emulator/test/hibernate_SUITE.erl b/erts/emulator/test/hibernate_SUITE.erl
index 3f13ad421a..95bd425575 100644
--- a/erts/emulator/test/hibernate_SUITE.erl
+++ b/erts/emulator/test/hibernate_SUITE.erl
@@ -55,7 +55,7 @@ basic(Config) when is_list(Config) ->
maximum_hibernate_heap_size(Term) ->
%% When hibernating, a few extra words will be allocated to hold the
%% continuation pointer as well as scratch space for the interpreter/jit.
- erts_debug:size(Term) + 4.
+ erts_debug:size(Term) + 8.
hibernate_wake_up(0, _, _) -> ok;
hibernate_wake_up(N, MaxHeapSz, Child) ->
@@ -188,7 +188,7 @@ min_heap_size(Config) when is_list(Config) ->
{heap_size,HeapSz} = process_info(Child, heap_size),
io:format("Heap size: ~p\n", [HeapSz]),
if
- HeapSz < 20 -> ok
+ HeapSz =< 20 -> ok
end,
Child ! wake_up,
receive
@@ -334,7 +334,7 @@ no_heap(Config) when is_list(Config) ->
wait_until(fun () -> is_hibernated(H) end),
[{heap_size, Size}, {total_heap_size, Size}]
= process_info(H, [heap_size, total_heap_size]),
- true = Size =< 4,
+ true = Size =< maximum_hibernate_heap_size(0),
receive after 10 -> ok end,
H ! again
end, lists:seq(1, 100)),
diff --git a/erts/emulator/test/perf_SUITE.erl b/erts/emulator/test/jit_SUITE.erl
index aaef7b039c..d5acc11cf8 100644
--- a/erts/emulator/test/perf_SUITE.erl
+++ b/erts/emulator/test/jit_SUITE.erl
@@ -18,18 +18,35 @@
%% %CopyrightEnd%
%%
--module(perf_SUITE).
+-module(jit_SUITE).
--export([all/0, suite/0, init_per_suite/1, end_per_suite/1]).
--export([symbols/1, annotate/1]).
+-export([suite/0, groups/0, all/0,
+ init_per_suite/1, end_per_suite/1,
+ init_per_group/2, end_per_group/2,
+ init_per_testcase/2, end_per_testcase/2]).
+-export([annotate/1, named_labels/1, symbols/1]).
suite() ->
[{timetrap, {minutes, 4}}].
-all() ->
- [symbols, annotate].
+groups() ->
+ [{perf, [symbols, annotate]}].
+
+all() ->
+ [{group, perf}, named_labels].
init_per_suite(Config) ->
+ case erlang:system_info(emu_flavor) of
+ jit ->
+ Config;
+ _ ->
+ {skip, "No point in running JIT tests on non-JIT emulator"}
+ end.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(perf, Config) ->
case os:find_executable("perf") of
false ->
{skip, "perf not found"};
@@ -64,9 +81,11 @@ init_per_suite(Config) ->
_ ->
{skip,"unknown old perf version: " ++ PerfVsn}
end
- end.
+ end;
+init_per_group(_, Config) ->
+ Config.
-end_per_suite(Config) ->
+end_per_group(perf, Config) ->
%% perf inject writes data to /tmp and ~/.debug/tmp so we need to clean
%% that up after the tests are done.
SoToDelete = get_tmp_so_files() -- proplists:get_value(sobefore, Config),
@@ -79,6 +98,31 @@ end_per_suite(Config) ->
ok
end
end, SoToDelete),
+ ok;
+end_per_group(_, _Config) ->
+ ok.
+
+init_per_testcase(named_labels, Config) ->
+ %% Only run named_labels on platforms where we know it works.
+ case erlang:system_info(system_architecture) of
+ "x86" ++ _ ->
+ [{asmbefore,get_tmp_asm_files()}|Config];
+ "aarch64" ++ _ ->
+ [{asmbefore,get_tmp_asm_files()}|Config];
+ _ ->
+ {skip, "Unsupported architecture"}
+ end;
+init_per_testcase(_Case, Config) ->
+ Config.
+
+end_per_testcase(named_labels, Config) ->
+ AsmToDelete = get_tmp_asm_files() -- proplists:get_value(asmbefore, Config),
+ lists:foreach(
+ fun(File) ->
+ ok = file:delete(File)
+ end, AsmToDelete),
+ ok;
+end_per_testcase(_, _Config) ->
ok.
get_tmp_so_files() ->
@@ -128,4 +172,52 @@ annotate(Config) ->
ct:log("Did not find disassembly test for ~ts.~n~ts",
[Symbol, Anno])
end.
-
+
+get_tmp_asm_files() ->
+ {ok, Cwd} = file:get_cwd(),
+ filelib:wildcard(filename:join(Cwd, "*.asm")).
+
+named_labels(_Config) ->
+ %% Check that pretty printing of named labels is working. We do
+ %% that by loading this module in an emulator running with +JDdump
+ %% true and then checking that the produced jit_SUITE.asm contains
+ %% a label for each exported function. We also check that the
+ %% label for the non-exported function get_tmp_asm_files/0, which
+ %% is used by this test, is present.
+ Exports = proplists:get_value(exports, ?MODULE:module_info()),
+ ModName = atom_to_list(?MODULE),
+ ModulePath = filename:dirname(code:which(?MODULE)),
+ Cmd = "erl +JDdump true -noshell -pa " ++ ModulePath ++ " -eval \""
+ ++ ModName ++ ":module_info(),erlang:halt(0).\"",
+ os:cmd(Cmd),
+ {ok, Cwd} = file:get_cwd(),
+ AsmFile = filename:join(Cwd, ModName ++ ".asm"),
+ {ok, Data} = file:read_file(AsmFile),
+ Expected = sets:from_list([ lists:flatten(io_lib:format("~p/~p", [N,A]))
+ || {N,A} <- Exports]
+ ++ ["get_tmp_asm_files/0"]),
+ StripSeqNo = fun(Lbl) ->
+ %% In the Arm JIT, labels have the form
+ %% @Mod:Name/Arity-SequenceNumber, so strip
+ %% out the Mod part and the sequence number
+ %% as we can't know anything about them.
+ case re:run(Lbl, "^.*\:(.*)-[0-9]*$",
+ [{capture,all_but_first,list}]) of
+ {match,[R]} -> R;
+ nomatch -> Lbl
+ end
+ end,
+ case re:run(Data, "^(.*)\:\n",
+ [global,multiline,{capture,all_but_first,list}]) of
+ {match,Labels} ->
+ Found = sets:from_list([ StripSeqNo(NA) || [NA] <- Labels]),
+ case sets:is_subset(Expected, Found) of
+ true ->
+ ok;
+ false ->
+ ct:fail("Expected ~p, found ~p",
+ [sets:to_list(Expected), sets:to_list(Found)])
+ end;
+ _ ->
+ ct:fail("No labels found in assembly dump")
+ end.
diff --git a/erts/emulator/test/map_SUITE.erl b/erts/emulator/test/map_SUITE.erl
index 5707a8e56c..daf3110b82 100644
--- a/erts/emulator/test/map_SUITE.erl
+++ b/erts/emulator/test/map_SUITE.erl
@@ -85,7 +85,6 @@
%% instruction-level tests
t_has_map_fields/1,
y_regs/1,
- badmap_17/1,
%%Bugs
t_large_unequal_bins_same_hash_bug/1]).
@@ -102,7 +101,7 @@
suite() -> [].
all() ->
- run_once() ++ [{group,main}].
+ [{group,main}].
groups() ->
[{main,[],
@@ -160,8 +159,7 @@ groups() ->
y_regs,
%% Bugs
- t_large_unequal_bins_same_hash_bug]},
- {once,[],[badmap_17]}].
+ t_large_unequal_bins_same_hash_bug]}].
run_once() ->
case ?MODULE of
@@ -3211,15 +3209,6 @@ do_badmap(Test) ->
[],{a,b,c},[a,b],atom,10.0,42,(1 bsl 65) + 3],
[Test(T) || T <- Terms].
-%% Test that a module compiled with the OTP 17 compiler will
-%% generate the correct 'badmap' exception.
-badmap_17(Config) ->
- Mod = badmap_17,
- DataDir = test_server:lookup_config(data_dir, Config),
- Beam = filename:join(DataDir, Mod),
- {module,Mod} = code:load_abs(Beam),
- do_badmap(fun Mod:update/1).
-
%% Use this function to avoid compile-time evaluation of an expression.
id(I) -> I.
diff --git a/erts/emulator/test/map_SUITE_data/badmap_17.erl b/erts/emulator/test/map_SUITE_data/badmap_17.erl
deleted file mode 100644
index 887fc2e5e3..0000000000
--- a/erts/emulator/test/map_SUITE_data/badmap_17.erl
+++ /dev/null
@@ -1,58 +0,0 @@
--module(badmap_17).
--export([update/1]).
-
-%% Compile this source file with OTP 17.0.
-
-update(Map) ->
- try
- update_1(Map),
- error(update_did_not_fail)
- catch
- error:{badmap,Map} ->
- ok
- end,
- try
- update_2(Map),
- error(update_did_not_fail)
- catch
- error:{badmap,Map} ->
- ok
- end,
- try
- update_3(Map),
- error(update_did_not_fail)
- catch
- error:{badmap,Map} ->
- ok
- end,
- ok = update_4(Map),
- ok = update_5(Map),
- ok.
-
-update_1(M) ->
- M#{a=>42}.
-
-update_2(M) ->
- M#{a:=42}.
-
-update_3(M) ->
- id(M),
- M#{a=>42}.
-
-update_4(M) when M#{a=>b} =:= M ->
- did_not_fail;
-update_4(_) ->
- ok.
-
-update_5(M) ->
- id(M),
- case id(true) of
- true when M#{a=>b} =:= M ->
- did_not_fail;
- true ->
- ok
- end.
-
-id(I) ->
- I.
-
diff --git a/erts/emulator/test/num_bif_SUITE.erl b/erts/emulator/test/num_bif_SUITE.erl
index d509699eef..8d06a3d948 100644
--- a/erts/emulator/test/num_bif_SUITE.erl
+++ b/erts/emulator/test/num_bif_SUITE.erl
@@ -191,15 +191,75 @@ t_float_to_string(Config) when is_list(Config) ->
<<NegZero/float>> = <<16#8000000000000000:64>>,
"-0.0" = float_to_list(NegZero, [{decimals, 1}, compact]),
"-0.0" = float_to_list(NegZero, [{decimals, 1}]),
+ "-0.0" = float_to_list(NegZero, [short]),
"-0.0e+00" = float_to_list(NegZero, [{scientific, 1}]),
"-0.0e+00" = float_to_list(NegZero, [{scientific, 1}, compact]),
<<"-0.0">> = float_to_binary(NegZero, [{decimals, 1}, compact]),
<<"-0.0">> = float_to_binary(NegZero, [{decimals, 1}]),
+ <<"-0.0">> = float_to_binary(NegZero, [short]),
<<"-0.0e+00">> = float_to_binary(NegZero, [{scientific, 1}]),
<<"-0.0e+00">> = float_to_binary(NegZero, [{scientific, 1}, compact]),
fts_rand_float_decimals(1000),
+ % test short option
+
+ % test switch for big integers
+ test_fts("-9007199254740991.0", -float((1 bsl 53) -1), [short]),
+ test_fts("-9.007199254740992e15", -float(1 bsl 53), [short]),
+ test_fts("-9.007199254740992e15", -float((1 bsl 53) +1), [short]),
+ test_fts("9007199254740991.0", float((1 bsl 53) -1), [short]),
+ test_fts("9.007199254740992e15", float(1 bsl 53), [short]),
+ test_fts("9.007199254740992e15", float((1 bsl 53) +1), [short]),
+
+ % test basic
+ test_fts("2.018", 2.018, [short]),
+ test_fts("-2.018", -2.018, [short]),
+
+ % test switching logic between decimal and scientific
+ test_fts("1.0e-6", 1.0e-6, [short]),
+ test_fts("1.0e-5", 1.0e-5, [short]),
+ test_fts("0.0001", 1.0e-4, [short]),
+ test_fts("0.001", 1.0e-3, [short]),
+ test_fts("0.01", 1.0e-2, [short]),
+ test_fts("0.1", 1.0e-1, [short]),
+ test_fts("1.0", 1.0e0, [short]),
+ test_fts("10.0", 1.0e1, [short]),
+ test_fts("100.0", 1.0e2, [short]),
+ test_fts("1.0e3", 1.0e3, [short]),
+ test_fts("1.0e4", 1.0e4, [short]),
+ test_fts("1.0e5", 1.0e5, [short]),
+ test_fts("1.0e6", 1.0e6, [short]),
+ test_fts("1.0e7", 1.0e7, [short]),
+ test_fts("1.234e-6", 1.234e-6, [short]),
+ test_fts("1.234e-5", 1.234e-5, [short]),
+ test_fts("1.234e-4", 1.234e-4, [short]),
+ test_fts("0.001234", 1.234e-3, [short]),
+ test_fts("0.01234", 1.234e-2, [short]),
+ test_fts("0.1234", 1.234e-1, [short]),
+ test_fts("1.234", 1.234e0, [short]),
+ test_fts("12.34", 1.234e1, [short]),
+ test_fts("123.4", 1.234e2, [short]),
+ test_fts("1234.0", 1.234e3, [short]),
+ test_fts("12340.0", 1.234e4, [short]),
+ test_fts("1.234e5", 1.234e5, [short]),
+ test_fts("1.234e6", 1.234e6, [short]),
+
+ % test the switch to subnormals
+ test_fts("2.2250738585072014e-308", 2.2250738585072014e-308, [short]),
+
+ % test lots of trailing zeroes
+ test_fts("2.9802322387695312e-8", 2.98023223876953125e-8, [short]),
+
+ % test some ryu regressions
+ test_fts("-2.109808898695963e16", -2.109808898695963e16, [short]),
+ test_fts("4.940656e-318", 4.940656e-318, [short]),
+ test_fts("1.18575755e-316", 1.18575755e-316, [short]),
+ test_fts("2.989102097996e-312", 2.989102097996e-312, [short]),
+ test_fts("9.0608011534336e15", 9.0608011534336e15, [short]),
+ test_fts("4.708356024711512e18", 4.708356024711512e18, [short]),
+ test_fts("9.409340012568248e18", 9.409340012568248e18, [short]),
+ test_fts("1.2345678", 1.2345678, [short]),
ok.
test_fts(Expect, Float) ->
@@ -245,7 +305,7 @@ fts_rand_float_decimals(N) ->
end,
F1 = list_to_float(L1),
Diff = abs(F0-F1),
- MaxDiff = max_diff_decimals(F0, D),
+ MaxDiff = max_diff_decimals(F0, D-1),
ok = case Diff =< MaxDiff of
true -> ok;
false ->
diff --git a/erts/emulator/test/tuple_SUITE.erl b/erts/emulator/test/tuple_SUITE.erl
index 931f83062f..9e6f21a090 100644
--- a/erts/emulator/test/tuple_SUITE.erl
+++ b/erts/emulator/test/tuple_SUITE.erl
@@ -125,10 +125,17 @@ t_element(Config) when is_list(Config) ->
a = element(1, {a}),
a = element(1, {a, b}),
- List = lists:seq(1, 4096),
- Tuple = list_to_tuple(lists:seq(1, 4096)),
+ List = lists:seq(1, 16384),
+ Tuple = list_to_tuple(List),
get_elements(List, Tuple, 1),
+ get_literal_elements(Tuple),
+ get_literal_tuple_elements(Tuple),
+
+ {31,32, 63,64, 127,128, 255,256, 511,512, 1023,1024,
+ 2047,2048, 4095,4096, 8191,8192, 16383, 16384} =
+ get_literal_tuple_element_pairs(Tuple),
+
{'EXIT', {badarg, _}} = (catch element(0, id({a,b}))),
{'EXIT', {badarg, _}} = (catch element(3, id({a,b}))),
{'EXIT', {badarg, _}} = (catch element(1, id({}))),
@@ -150,7 +157,110 @@ get_elements([Element|Rest], Tuple, Pos) ->
get_elements(Rest, Tuple, Pos+1);
get_elements([], _Tuple, _Pos) ->
ok.
-
+
+get_literal_elements(Tuple) ->
+ 31 = element(31, Tuple),
+ 32 = element(32, Tuple),
+
+ 63 = element(63, Tuple),
+ 64 = element(64, Tuple),
+
+ 127 = element(127, Tuple),
+ 128 = element(128, Tuple),
+
+ 255 = element(255, Tuple),
+ 256 = element(256, Tuple),
+
+ 511 = element(511, Tuple),
+ 512 = element(512, Tuple),
+
+ 1023 = element(1023, Tuple),
+ 1024 = element(1024, Tuple),
+
+ 2047 = element(2047, Tuple),
+ 2048 = element(2048, Tuple),
+
+ 4095 = element(4095, Tuple),
+ 4096 = element(4096, Tuple),
+
+ 8191 = element(8191, Tuple),
+ 8192 = element(8192, Tuple),
+
+ 16383 = element(16383, Tuple),
+ 16384 = element(16384, Tuple),
+
+ ok.
+
+get_literal_tuple_elements(Tuple) when tuple_size(Tuple) =:= 16384 ->
+ %% Since the tuple size is known, the element/2 calls will be
+ %% rewritten to get_tuple_element instructions.
+
+ 31 = element(31, Tuple),
+ 32 = element(32, Tuple),
+
+ 63 = element(63, Tuple),
+ 64 = element(64, Tuple),
+
+ 127 = element(127, Tuple),
+ 128 = element(128, Tuple),
+
+ 255 = element(255, Tuple),
+ 256 = element(256, Tuple),
+
+ 511 = element(511, Tuple),
+ 512 = element(512, Tuple),
+
+ 1023 = element(1023, Tuple),
+ 1024 = element(1024, Tuple),
+
+ 2047 = element(2047, Tuple),
+ 2048 = element(2048, Tuple),
+
+ 4095 = element(4095, Tuple),
+ 4096 = element(4096, Tuple),
+
+ 8191 = element(8191, Tuple),
+ 8192 = element(8192, Tuple),
+
+ 16383 = element(16383, Tuple),
+ 16384 = element(16384, Tuple),
+
+ ok.
+
+get_literal_tuple_element_pairs(Tuple) when tuple_size(Tuple) =:= 16384 ->
+ %% Since the tuple size is known, the element/2 calls will be
+ %% rewritten to get_tuple_element instructions.
+
+ {element(31, Tuple),
+ element(32, Tuple),
+
+ element(63, Tuple),
+ element(64, Tuple),
+
+ element(127, Tuple),
+ element(128, Tuple),
+
+ element(255, Tuple),
+ element(256, Tuple),
+
+ element(511, Tuple),
+ element(512, Tuple),
+
+ element(1023, Tuple),
+ element(1024, Tuple),
+
+ element(2047, Tuple),
+ element(2048, Tuple),
+
+ element(4095, Tuple),
+ element(4096, Tuple),
+
+ element(8191, Tuple),
+ element(8192, Tuple),
+
+ element(16383, Tuple),
+ element(16384, Tuple)}.
+
%% Tests set_element/3.
t_setelement(Config) when is_list(Config) ->
@@ -158,9 +268,9 @@ t_setelement(Config) when is_list(Config) ->
{x,2} = setelement(1, id({1,2}), x),
{1,x} = setelement(2, id({1,2}), x),
- Tuple = list_to_tuple(lists:duplicate(2048, x)),
+ Tuple = list_to_tuple(lists:duplicate(16385, x)),
NewTuple = set_all_elements(Tuple, 1),
- NewTuple = list_to_tuple(lists:seq(1+7, 2048+7)),
+ NewTuple = list_to_tuple(lists:seq(1+7, 16385+7)),
{'EXIT', {badarg, _}} = (catch setelement(0, {a, b}, x)),
{'EXIT', {badarg, _}} = (catch setelement(3, {a, b}, x)),
@@ -174,6 +284,9 @@ t_setelement(Config) when is_list(Config) ->
setelement(1, setelement(2, setelement(3, AnotherTuple, gurka),
3.0), 93748793749387837476555412),
+ NewNewTuple = set_literal_tuple_elements(NewTuple),
+ verify_set_elements(1, NewNewTuple),
+
ok.
set_all_elements(Tuple, Pos) when Pos =< size(Tuple) ->
@@ -181,6 +294,71 @@ set_all_elements(Tuple, Pos) when Pos =< size(Tuple) ->
set_all_elements(Tuple, Pos) when Pos > size(Tuple) ->
Tuple.
+set_literal_tuple_elements(Tuple0) when tuple_size(Tuple0) =:= 16385 ->
+ %% Since the tuple size is known, the setelement/3 calls will be
+ %% rewritten to set_tuple_element instructions.
+ Tuple1 = setelement(16385, Tuple0, -16385),
+ Tuple2 = setelement(16384, Tuple1, -16384),
+
+ Tuple3 = setelement(8192, Tuple2, -8192),
+ Tuple4 = setelement(8191, Tuple3, -8191),
+
+ Tuple5 = setelement(4096, Tuple4, -4096),
+ Tuple6 = setelement(4095, Tuple5, -4095),
+
+ Tuple7 = setelement(2048, Tuple6, -2048),
+ Tuple8 = setelement(2047, Tuple7, -2047),
+
+ Tuple9 = setelement(1024, Tuple8, -1024),
+ Tuple10 = setelement(1023, Tuple9, -1023),
+
+ Tuple11 = setelement(512, Tuple10, -512),
+ Tuple12 = setelement(511, Tuple11, -511),
+
+ Tuple13 = setelement(256, Tuple12, -256),
+ Tuple14 = setelement(255, Tuple13, -255),
+
+ Tuple15 = setelement(128, Tuple14, -128),
+ Tuple16 = setelement(127, Tuple15, -127),
+
+ Tuple17 = setelement(64, Tuple16, -64),
+ Tuple18 = setelement(63, Tuple17, -63),
+
+ Tuple19 = setelement(32, Tuple18, -32),
+ Tuple20 = setelement(31, Tuple19, -31),
+
+ Tuple21 = setelement(16, Tuple20, -16),
+ Tuple22 = setelement(15, Tuple21, -15),
+
+ Tuple23 = setelement(8, Tuple22, -8),
+ Tuple24 = setelement(7, Tuple23, -7),
+
+ Tuple25 = setelement(4, Tuple24, -4),
+ Tuple26 = setelement(3, Tuple25, -3),
+
+ Tuple27 = setelement(2, Tuple26, -2),
+ setelement(1, Tuple27, -1).
+
+verify_set_elements(16385, Tuple) ->
+ -16385 = element(16385, Tuple),
+ ok;
+verify_set_elements(N, Tuple) ->
+ El = element(N, Tuple),
+ if
+ El =:= N + 7 ->
+ true = not (is_power_of_two(N + 1) andalso is_power_of_two(N)),
+ verify_set_elements(N + 1, Tuple);
+ El =:= -N ->
+ true = is_power_of_two(N + 1) orelse is_power_of_two(N),
+ verify_set_elements(N + 1, Tuple);
+ true ->
+ io:format("element(~p) =:= ~p\n", [N,El]),
+ ct:fail(bad_element)
+ end.
+
+is_power_of_two(N) ->
+ N band (N - 1) =:= 0.
+
%% Tests list_to_tuple/1.
t_list_to_tuple(Config) when is_list(Config) ->
diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops
index 0bfce0f19b..7d2992044d 100755
--- a/erts/emulator/utils/beam_makeops
+++ b/erts/emulator/utils/beam_makeops
@@ -50,6 +50,9 @@ my $code_model = 'unknown';
my $jit = 'no';
my %defs; # Defines (from command line).
+# Intentionally unused macros, predicates, and generators.
+my %intentionally_unused;
+
# This is shift counts and mask for the packer.
my $WHOLE_WORD = '';
@@ -178,6 +181,8 @@ my %arg_size = ('r' => 0, # x(0) - x register zero,
'h' => 1, # character (not used)
'l' => 1, # float reg
'q' => 1, # literal term
+ 'M' => 1, # pointer to raw string
+ 'H' => 1, # exception handler
);
#
@@ -256,6 +261,8 @@ sub define_type_bit {
define_type_bit('e', $type_bit{'u'});
define_type_bit('Q', $type_bit{'u'});
define_type_bit('P', $type_bit{'u'});
+ define_type_bit('M', $type_bit{'u'});
+ define_type_bit('H', $type_bit{'u'});
}
#
@@ -449,6 +456,24 @@ while (<>) {
}
#
+ # Handle %unused.
+ #
+ if (/^\%unused\s+(\S+)/) {
+ my $name = $1;
+ error("Illegal predicate/generator name '$name'")
+ unless $name =~ /^[a-z][.\w\d_]*$/;
+ $intentionally_unused{$name} = 1;
+ next;
+ }
+
+ #
+ # Handle unrecognized % directives.
+ #
+ if (/^\%(\S+)/) {
+ error("Unrecognized directive '%$1'");
+ }
+
+ #
# Handle transformations.
#
if (/=>/) {
@@ -617,7 +642,8 @@ error("there were previous type errors") if $any_errors;
#
{
my(@unused) = grep(!$c_code_used{$_}, keys %c_code);
- foreach my $unused (@unused) {
+ @unused = grep(!$intentionally_unused{$_}, @unused);
+ foreach my $unused (sort @unused) {
my(undef,$where) = @{$c_code{$unused}};
warn "$where: $unused is unused\n";
}
@@ -633,6 +659,13 @@ sub emulator_output {
my $name;
my $key; # Loop variable.
+ foreach $key (sort keys %c_code) {
+ if ($intentionally_unused{$key}) {
+ delete $c_code{$key};
+ }
+# print STDERR "$key: ", defined($c_code{$key}), "\n";
+ }
+
# Initialize common information always needed.
foreach $key (keys %specific_op) {
foreach (@{$specific_op{$key}}) {
@@ -692,11 +725,11 @@ sub emulator_output {
}
if ($varargs) {
- # We pass variable argument lists as a vector of ArgVal,
+ # We pass variable argument lists as a Span of ArgVal,
# slicing our argument vector after the argument count.
$body .= $sep .
- "std::vector<ArgVal>(" .
- "args.cbegin() + " . scalar(@args) . ", args.cend())";
+ "args.subspan(" . scalar(@args) . "," .
+ "args.size() - " . scalar(@args) . ")";
}
$body .= ");";
@@ -719,7 +752,7 @@ sub emulator_output {
@args = ("const ArgVal&") x @args;
if ($varargs) {
- push @args, "const std::vector<ArgVal>&";
+ push @args, "const Span<ArgVal>&";
}
print "void emit_$name(", join(", ", @args), ");\n";
diff --git a/erts/epmd/src/epmd_int.h b/erts/epmd/src/epmd_int.h
index e09dd0ac95..bc20e121ad 100644
--- a/erts/epmd/src/epmd_int.h
+++ b/erts/epmd/src/epmd_int.h
@@ -50,15 +50,9 @@
#include <fcntl.h>
#ifndef __WIN32__
-# ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-# else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
+# include <time.h>
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
# endif
#endif
diff --git a/erts/etc/unix/Install.src b/erts/etc/unix/Install.src
index 2dbf628972..5fca25dac6 100644
--- a/erts/etc/unix/Install.src
+++ b/erts/etc/unix/Install.src
@@ -111,7 +111,6 @@ cp -p "$ERL_ROOT/erts-%I_VSN%/bin/to_erl" .
cp -p "$ERL_ROOT/erts-%I_VSN%/bin/start" .
sed -e "s;%EMU%;%EMULATOR%%EMULATOR_NUMBER%;" "$ERL_ROOT/erts-%I_VSN%/bin/start_erl.src" > start_erl
chmod 755 start_erl
-echo ""
echo %I_VSN% %I_SYSTEM_VSN% > "$ERL_ROOT/releases/start_erl.data"
sed -e "s;%ERL_ROOT%;$TARGET_ERL_ROOT;" "$ERL_ROOT/releases/RELEASES.src" > "$ERL_ROOT/releases/RELEASES"
diff --git a/erts/etc/unix/cerl.src b/erts/etc/unix/cerl.src
index adc20f5ac6..912a2d1066 100644
--- a/erts/etc/unix/cerl.src
+++ b/erts/etc/unix/cerl.src
@@ -83,7 +83,7 @@ skip_erlexec=no
# Default rootdir
ROOTDIR=%SRC_ROOTDIR%
-BINDIR="$ROOTDIR/bin/`$ROOTDIR/erts/autoconf/config.guess`"
+BINDIR="$ROOTDIR/bin/`$ROOTDIR/make/autoconf/config.guess`"
TARGET=%TARGET%
#BINDIR="$ROOTDIR/bin/%TARGET%"
PROGNAME=$ROOTDIR/bin/cerl
diff --git a/erts/etc/unix/etp-commands.in b/erts/etc/unix/etp-commands.in
index 381e6813e2..d1b25327d0 100644
--- a/erts/etc/unix/etp-commands.in
+++ b/erts/etc/unix/etp-commands.in
@@ -67,7 +67,7 @@ document etp-help
% etp-overlapped-heaps, etp-chart, etp-chart-start, etp-chart-end
%
% System inspection
-% etp-system-info, etp-schedulers, etp-process, etp-ports, etp-lc-dump,
+% etp-system-info, etp-schedulers, etp-processes, etp-ports, etp-lc-dump,
% etp-migration-info, etp-processes-memory,
% etp-compile-info, etp-config-h-info
%
@@ -140,7 +140,7 @@ define etp-1
else
if (($arg0) & 0x3) == 2
if $etp_flat
- printf "<etpf-boxed %p>", (($arg0) etp_ptr_mask)
+ printf "<etpf-boxed %p>", (($arg0) & etp_ptr_mask)
else
etp-boxed-1 ($arg0) ($arg1)
end
@@ -1154,7 +1154,7 @@ document etp-mfa
%
% Take an Eterm* to an MFA function name entry and print it.
% These can be found e.g in the process structure;
-% process_tab[i]->current and process_tab[i]->initial.
+% ((Process*)erts_proc->r.o.tab[i])->current and &(((Process*)erts_proc->r.o.tab[i])->u.initial)
%---------------------------------------------------------------------------
end
@@ -1305,7 +1305,7 @@ define etp-cp-1
printf "#Cp"
etp-mfa-1 $etp_cp_p $cp_cp_p_offset
else
- if $etp_cp == beam_apply+1
+ if $etp_cp == beam_normal_exit
printf "#Cp<terminate process normally>"
else
if ($etp_cp) == beam_return_trace
@@ -1652,7 +1652,7 @@ document etp-msgq
% Sequential trace tokens are included in comments and
% the current match position in the queue is marked '<='.
%
-% A process's message queue is process_tab[i]->sig_qs.
+% A process's message queue is ((Process*)erts_proc->r.o.tab[i])->sig_qs.
%---------------------------------------------------------------------------
end
diff --git a/erts/etc/unix/etp-thr.py b/erts/etc/unix/etp-thr.py
index fb82dcaf1f..fef69d5602 100644
--- a/erts/etc/unix/etp-thr.py
+++ b/erts/etc/unix/etp-thr.py
@@ -33,6 +33,12 @@ def get_thread_name(t):
return "child_waiter";
elif f.name() == "sched_thread_func":
return "scheduler";
+ elif f.name() == "sched_dirty_cpu_thread_func":
+ return "dirty_cpu_scheduler";
+ elif f.name() == "sched_dirty_io_thread_func":
+ return "dirty_io_scheduler";
+ elif f.name() == "poll_thread":
+ return "poll_thread";
elif f.name() == "aux_thread":
return "aux";
f = f.older();
diff --git a/erts/etc/unix/etp.py b/erts/etc/unix/etp.py
index 38c9e18408..53b8bd173f 100644
--- a/erts/etc/unix/etp.py
+++ b/erts/etc/unix/etp.py
@@ -686,7 +686,7 @@ def strip_literal_tag(valobj):
return valobj
def init(target):
- names = ['beam_apply', 'beam_normal_exit', 'beam_exit', 'beam_save_calls',
+ names = ['beam_run_process', 'beam_normal_exit', 'beam_exit', 'beam_save_calls',
'beam_bif_export_trap', 'beam_export_trampoline', 'beam_continue_exit',
'beam_return_to_trace', 'beam_return_trace', 'beam_exception_trace',
'beam_return_time_trace']
diff --git a/erts/include/internal/ethr_internal.h b/erts/include/internal/ethr_internal.h
index 986e2b84de..f9c351ff63 100644
--- a/erts/include/internal/ethr_internal.h
+++ b/erts/include/internal/ethr_internal.h
@@ -56,28 +56,22 @@ ethr_ts_event *ethr_get_tse__(void);
ETHR_PROTO_NORETURN__ ethr_abort__(void);
#ifdef ETHR_INCLUDE_MONOTONIC_CLOCK__
-#undef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
-#if defined(ETHR_HAVE_CLOCK_GETTIME_MONOTONIC) \
- || defined(ETHR_HAVE_MACH_CLOCK_GET_TIME) \
- || defined(ETHR_HAVE_GETHRTIME)
-#ifdef ETHR_TIME_WITH_SYS_TIME
-# include <time.h>
-# include <sys/time.h>
-#else
-# ifdef ETHR_HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
+# undef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
+# if defined(ETHR_HAVE_CLOCK_GETTIME_MONOTONIC) \
+ || defined(ETHR_HAVE_MACH_CLOCK_GET_TIME) \
+ || defined(ETHR_HAVE_GETHRTIME)
# include <time.h>
+# ifdef ETHR_HAVE_SYS_TIME_H
+# include <sys/time.h>
+# endif
# endif
-#endif
-#ifdef ETHR_HAVE_MACH_CLOCK_GET_TIME
-#include <mach/clock.h>
-#include <mach/mach.h>
-#endif
-#define ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
+# ifdef ETHR_HAVE_MACH_CLOCK_GET_TIME
+# include <mach/clock.h>
+# include <mach/mach.h>
+# endif
+# define ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
ethr_sint64_t ethr_get_monotonic_time(void);
int ethr_get_monotonic_time_is_broken(void);
-#endif
#endif /* ETHR_INCLUDE_MONOTONIC_CLOCK__ */
void ethr_init_event__(void);
diff --git a/erts/include/internal/gcc/ethr_atomic.h b/erts/include/internal/gcc/ethr_atomic.h
index 3ef042ce61..eb6b4fb286 100644
--- a/erts/include/internal/gcc/ethr_atomic.h
+++ b/erts/include/internal/gcc/ethr_atomic.h
@@ -496,13 +496,13 @@ ETHR_NATMC_FUNC__(or_retold_mb)(ETHR_ATMC_T__ *var, ETHR_AINT_T__ mask)
static ETHR_INLINE ETHR_AINT_T__
ETHR_NATMC_FUNC__(cmpxchg)(ETHR_ATMC_T__ *var,
- ETHR_AINT_T__ new,
+ ETHR_AINT_T__ new_val,
ETHR_AINT_T__ exp)
{
ETHR_AINT_T__ xchg = exp;
if (__atomic_compare_exchange_n(&var->value,
&xchg,
- new,
+ new_val,
0, /* No spurious failures, please */
__ATOMIC_RELAXED,
__ATOMIC_RELAXED))
@@ -522,13 +522,13 @@ ETHR_NATMC_FUNC__(cmpxchg)(ETHR_ATMC_T__ *var,
static ETHR_INLINE ETHR_AINT_T__
ETHR_NATMC_FUNC__(cmpxchg_acqb)(ETHR_ATMC_T__ *var,
- ETHR_AINT_T__ new,
+ ETHR_AINT_T__ new_val,
ETHR_AINT_T__ exp)
{
ETHR_AINT_T__ xchg = exp;
if (__atomic_compare_exchange_n(&var->value,
&xchg,
- new,
+ new_val,
0, /* No spurious failures, please */
__ATOMIC_ACQUIRE,
__ATOMIC_ACQUIRE))
diff --git a/erts/include/internal/gcc/ethr_dw_atomic.h b/erts/include/internal/gcc/ethr_dw_atomic.h
index 69cf6cd3f3..d661bf33fb 100644
--- a/erts/include/internal/gcc/ethr_dw_atomic.h
+++ b/erts/include/internal/gcc/ethr_dw_atomic.h
@@ -178,7 +178,7 @@ ethr_native_su_dw_atomic_read_acqb(ethr_native_dw_atomic_t *var)
static ETHR_INLINE ETHR_NATIVE_SU_DW_SINT_T
ethr_native_su_dw_atomic_cmpxchg(ethr_native_dw_atomic_t *var,
- ETHR_NATIVE_SU_DW_SINT_T new,
+ ETHR_NATIVE_SU_DW_SINT_T new_val,
ETHR_NATIVE_SU_DW_SINT_T exp)
{
ethr_native_dw_ptr_t p = (ethr_native_dw_ptr_t) ETHR_DW_NATMC_MEM__(var);
@@ -186,7 +186,7 @@ ethr_native_su_dw_atomic_cmpxchg(ethr_native_dw_atomic_t *var,
ETHR_DW_DBG_ALIGNED__(p);
if (__atomic_compare_exchange_n(p,
&xchg,
- new,
+ new_val,
0,
__ATOMIC_RELAXED,
__ATOMIC_RELAXED))
@@ -202,7 +202,7 @@ ethr_native_su_dw_atomic_cmpxchg(ethr_native_dw_atomic_t *var,
static ETHR_INLINE ETHR_NATIVE_SU_DW_SINT_T
ethr_native_su_dw_atomic_cmpxchg_acqb(ethr_native_dw_atomic_t *var,
- ETHR_NATIVE_SU_DW_SINT_T new,
+ ETHR_NATIVE_SU_DW_SINT_T new_val,
ETHR_NATIVE_SU_DW_SINT_T exp)
{
ethr_native_dw_ptr_t p = (ethr_native_dw_ptr_t) ETHR_DW_NATMC_MEM__(var);
@@ -210,7 +210,7 @@ ethr_native_su_dw_atomic_cmpxchg_acqb(ethr_native_dw_atomic_t *var,
ETHR_DW_DBG_ALIGNED__(p);
if (__atomic_compare_exchange_n(p,
&xchg,
- new,
+ new_val,
0,
__ATOMIC_ACQUIRE,
__ATOMIC_ACQUIRE))
diff --git a/erts/lib_src/common/erl_misc_utils.c b/erts/lib_src/common/erl_misc_utils.c
index b35d53be7d..9b6c8341dc 100644
--- a/erts/lib_src/common/erl_misc_utils.c
+++ b/erts/lib_src/common/erl_misc_utils.c
@@ -41,15 +41,9 @@
# ifdef SYS_SELECT_H
# include <sys/select.h>
# endif
-# if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-# else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
+# include <time.h>
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
# endif
# include <string.h>
# include <stdio.h>
diff --git a/erts/lib_src/pthread/ethread.c b/erts/lib_src/pthread/ethread.c
index f7262c02b1..2a7f6aa18a 100644
--- a/erts/lib_src/pthread/ethread.c
+++ b/erts/lib_src/pthread/ethread.c
@@ -30,15 +30,9 @@
#define ETHR_CHILD_WAIT_SPIN_COUNT 4000
#include <stdio.h>
-#ifdef ETHR_TIME_WITH_SYS_TIME
-# include <time.h>
+#include <time.h>
+#ifdef ETHR_HAVE_SYS_TIME_H
# include <sys/time.h>
-#else
-# ifdef ETHR_HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
#include <sys/types.h>
#include <unistd.h>
diff --git a/erts/lib_src/yielding_c_fun/lib/tiny_regex_c/UPGRADE_NOTE b/erts/lib_src/yielding_c_fun/lib/tiny_regex_c/UPGRADE_NOTE
new file mode 100644
index 0000000000..b895003a69
--- /dev/null
+++ b/erts/lib_src/yielding_c_fun/lib/tiny_regex_c/UPGRADE_NOTE
@@ -0,0 +1,10 @@
+The scripts folder (contained test python scripts) that existed in the
+original repository has been removed as it was not used and contained a
+license text that was incompatible with Erlang/OTP's license.
+
+The tests folder that exited in the original repository has also been
+removed because it was not used.
+
+The file GIT_VERSION contains information of which repository URL and
+GIT version the code in this folder was fetched from. The GIT_VERSION
+file should be updated if the code in this folder is upgraded. \ No newline at end of file
diff --git a/erts/preloaded/ebin/atomics.beam b/erts/preloaded/ebin/atomics.beam
index 3b59aefa80..49a5aaeeb0 100644
--- a/erts/preloaded/ebin/atomics.beam
+++ b/erts/preloaded/ebin/atomics.beam
Binary files differ
diff --git a/erts/preloaded/ebin/counters.beam b/erts/preloaded/ebin/counters.beam
index f6b3ee4236..9f1a81a5bb 100644
--- a/erts/preloaded/ebin/counters.beam
+++ b/erts/preloaded/ebin/counters.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erl_init.beam b/erts/preloaded/ebin/erl_init.beam
index 678ff35564..1df98ff312 100644
--- a/erts/preloaded/ebin/erl_init.beam
+++ b/erts/preloaded/ebin/erl_init.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erl_prim_loader.beam b/erts/preloaded/ebin/erl_prim_loader.beam
index 003d7f8d98..55e98bc367 100644
--- a/erts/preloaded/ebin/erl_prim_loader.beam
+++ b/erts/preloaded/ebin/erl_prim_loader.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erl_tracer.beam b/erts/preloaded/ebin/erl_tracer.beam
index 35fb1c1df5..418ef82c53 100644
--- a/erts/preloaded/ebin/erl_tracer.beam
+++ b/erts/preloaded/ebin/erl_tracer.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index 421c4803f9..9cff067d77 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_code_purger.beam b/erts/preloaded/ebin/erts_code_purger.beam
index 8e22c47267..8ffc2136c3 100644
--- a/erts/preloaded/ebin/erts_code_purger.beam
+++ b/erts/preloaded/ebin/erts_code_purger.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_dirty_process_signal_handler.beam b/erts/preloaded/ebin/erts_dirty_process_signal_handler.beam
index 0e0cbf0ad5..ab48981e8e 100644
--- a/erts/preloaded/ebin/erts_dirty_process_signal_handler.beam
+++ b/erts/preloaded/ebin/erts_dirty_process_signal_handler.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam
index 540be7491e..51c42524ab 100644
--- a/erts/preloaded/ebin/erts_internal.beam
+++ b/erts/preloaded/ebin/erts_internal.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_literal_area_collector.beam b/erts/preloaded/ebin/erts_literal_area_collector.beam
index 580ac9a107..fa794d873d 100644
--- a/erts/preloaded/ebin/erts_literal_area_collector.beam
+++ b/erts/preloaded/ebin/erts_literal_area_collector.beam
Binary files differ
diff --git a/erts/preloaded/ebin/init.beam b/erts/preloaded/ebin/init.beam
index 2066108897..2ca9c0e826 100644
--- a/erts/preloaded/ebin/init.beam
+++ b/erts/preloaded/ebin/init.beam
Binary files differ
diff --git a/erts/preloaded/ebin/persistent_term.beam b/erts/preloaded/ebin/persistent_term.beam
index 22151a59e5..e54ee489d2 100644
--- a/erts/preloaded/ebin/persistent_term.beam
+++ b/erts/preloaded/ebin/persistent_term.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_buffer.beam b/erts/preloaded/ebin/prim_buffer.beam
index 0acb67d9e5..5127b02acc 100644
--- a/erts/preloaded/ebin/prim_buffer.beam
+++ b/erts/preloaded/ebin/prim_buffer.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_eval.beam b/erts/preloaded/ebin/prim_eval.beam
index db5dbdf9f5..edf420f2fe 100644
--- a/erts/preloaded/ebin/prim_eval.beam
+++ b/erts/preloaded/ebin/prim_eval.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_file.beam b/erts/preloaded/ebin/prim_file.beam
index c50d824325..3297c7bd69 100644
--- a/erts/preloaded/ebin/prim_file.beam
+++ b/erts/preloaded/ebin/prim_file.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_inet.beam b/erts/preloaded/ebin/prim_inet.beam
index cebf181e14..99ee3cc2ce 100644
--- a/erts/preloaded/ebin/prim_inet.beam
+++ b/erts/preloaded/ebin/prim_inet.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_net.beam b/erts/preloaded/ebin/prim_net.beam
index e35894f550..72f0a8df15 100644
--- a/erts/preloaded/ebin/prim_net.beam
+++ b/erts/preloaded/ebin/prim_net.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_socket.beam b/erts/preloaded/ebin/prim_socket.beam
index 3e6e718e83..d06d8e526e 100644
--- a/erts/preloaded/ebin/prim_socket.beam
+++ b/erts/preloaded/ebin/prim_socket.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_zip.beam b/erts/preloaded/ebin/prim_zip.beam
index 668243a1f3..d20f7ff8cf 100644
--- a/erts/preloaded/ebin/prim_zip.beam
+++ b/erts/preloaded/ebin/prim_zip.beam
Binary files differ
diff --git a/erts/preloaded/ebin/socket_registry.beam b/erts/preloaded/ebin/socket_registry.beam
index 49e3c75798..a8472ceafd 100644
--- a/erts/preloaded/ebin/socket_registry.beam
+++ b/erts/preloaded/ebin/socket_registry.beam
Binary files differ
diff --git a/erts/preloaded/ebin/zlib.beam b/erts/preloaded/ebin/zlib.beam
index 397f28c8c7..60fc41af86 100644
--- a/erts/preloaded/ebin/zlib.beam
+++ b/erts/preloaded/ebin/zlib.beam
Binary files differ
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index 0c43b690a0..3e5f69c760 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.erl
@@ -946,7 +946,8 @@ float_to_binary(_Float) ->
Options :: [Option],
Option :: {decimals, Decimals :: 0..253} |
{scientific, Decimals :: 0..249} |
- compact.
+ compact |
+ short.
float_to_binary(_Float, _Options) ->
erlang:nif_error(undefined).
@@ -962,7 +963,8 @@ float_to_list(_Float) ->
Options :: [Option],
Option :: {decimals, Decimals :: 0..253} |
{scientific, Decimals :: 0..249} |
- compact.
+ compact |
+ short.
float_to_list(_Float, _Options) ->
erlang:nif_error(undefined).
diff --git a/erts/test/Makefile b/erts/test/Makefile
index 1fe230adaf..dc5dcf2ca0 100644
--- a/erts/test/Makefile
+++ b/erts/test/Makefile
@@ -38,7 +38,8 @@ MODULES= \
run_erl_SUITE \
erlexec_SUITE \
z_SUITE \
- upgrade_SUITE
+ upgrade_SUITE \
+ parallel_messages_SUITE
ERL_FILES= $(MODULES:%=%.erl)
@@ -84,6 +85,8 @@ release_tests_spec: opt
$(INSTALL_DATA) system.spec system.dynspec system_smoke.spec \
$(ERL_FILES) $(TARGET_FILES) "$(RELSYSDIR)"
chmod -R u+w "$(RELSYSDIR)"
+ cp "$(ERL_TOP)/otp_versions.table" "$(ERL_TOP)/erts/test/otp_SUITE_data"
+ cp "$(ERL_TOP)/make/otp_version_tickets" "$(ERL_TOP)/erts/test/otp_SUITE_data"
tar cf - *_SUITE_data utils | (cd "$(RELSYSDIR)"; tar xf -)
release_docs_spec:
diff --git a/erts/test/otp_SUITE.erl b/erts/test/otp_SUITE.erl
index c222d708ce..54decdb57c 100644
--- a/erts/test/otp_SUITE.erl
+++ b/erts/test/otp_SUITE.erl
@@ -27,7 +27,8 @@
call_to_size_1/1,call_to_now_0/1,strong_components/1,
erl_file_encoding/1,xml_file_encoding/1,
runtime_dependencies_functions/1,
- runtime_dependencies_modules/1]).
+ runtime_dependencies_modules/1,
+ test_runtime_dependencies_versions/1]).
-include_lib("common_test/include/ct.hrl").
@@ -35,15 +36,17 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap, {minutes, 10}}].
+ {timetrap, {minutes, 30}}].
-all() ->
+all() ->
[undefined_functions, deprecated_not_in_obsolete,
obsolete_but_not_deprecated, call_to_deprecated,
call_to_size_1, call_to_now_0, strong_components,
erl_file_encoding, xml_file_encoding,
runtime_dependencies_functions,
- runtime_dependencies_modules].
+ runtime_dependencies_modules,
+ test_runtime_dependencies_versions
+].
init_per_suite(Config) ->
Server = start_xref_server(daily_xref, functions),
@@ -533,3 +536,319 @@ start_xref_server(Server, Mode) ->
end
end,
Server.
+
+get_suite_data_dir_path() ->
+ filename:join(filename:dirname(code:which(?MODULE)), "otp_SUITE_data").
+
+get_otp_versions_table_path() ->
+ filename:join(get_suite_data_dir_path(), "otp_versions.table").
+
+get_otp_version_tickets_path() ->
+ filename:join(get_suite_data_dir_path(), "otp_version_tickets").
+
+%% Return a map that maps from app versions to the OTP versions they
+%% were last released in. The function makes use of the file
+%% "otp_versions.table" and the current code:get_path() to
+%% find apps.
+get_runtime_dep_to_otp_version_map() ->
+ %% Find apps in "otp_versions.table"
+ VersionsTableFile = get_otp_versions_table_path(),
+ VersionsTableBin =
+ case file:read_file(VersionsTableFile) of
+ {ok, Bin} -> Bin;
+ Error -> ct:fail("Could not read the file ~s which is needed to perform the test. "
+ "Error: ~p~n",
+ [VersionsTableFile, Error])
+ end,
+ VersionsTableStr = erlang:binary_to_list(VersionsTableBin),
+ Lines = lists:reverse(string:tokens(VersionsTableStr, "\n")),
+ AddVersionsInString =
+ fun(Map, OTPVersion, AppVersionsString0) ->
+ AppVersionsString =
+ lists:flatten(string:replace(AppVersionsString0, "#", "", all)),
+ AppVersions = string:tokens(AppVersionsString, " "),
+ lists:foldl(
+ fun(AppVersion0, MapSoFar) ->
+ case string:trim(AppVersion0) of
+ "" ->
+ MapSoFar;
+ AppVersion1 ->
+ maps:put(AppVersion1, OTPVersion, MapSoFar)
+ end
+ end,
+ Map,
+ AppVersions)
+ end,
+ VersionMap0 =
+ lists:foldl(
+ fun(Line, MapSoFar) ->
+ [OTPVersion, AppVersionsString| _] =
+ string:tokens(Line, ":"),
+ AddVersionsInString(MapSoFar,
+ string:trim(OTPVersion),
+ string:trim(AppVersionsString))
+ end,
+ #{},
+ Lines),
+ %% Find apps in code:get_path()
+ lists:foldl(
+ fun(Path, MapSoFar) ->
+ case filelib:wildcard(filename:join(Path, "*.app")) of
+ [AppFile] ->
+ {ok,[{application, App, Info}]} = file:consult(AppFile),
+ case lists:keyfind(vsn, 1, Info) of
+ false ->
+ MapSoFar;
+ {vsn, VsnStr} ->
+ AppVsnStr =
+ erlang:atom_to_list(App) ++ "-" ++ VsnStr,
+ maps:put(AppVsnStr, {latest, Path}, MapSoFar)
+ end;
+ _ ->
+ MapSoFar
+ end
+ end,
+ VersionMap0,
+ code:get_path()).
+
+%% Find runtime dependencies for an app
+get_runtime_deps(App) ->
+ AppFile = code:where_is_file(atom_to_list(App) ++ ".app"),
+ {ok,[{application, App, Info}]} = file:consult(AppFile),
+ case lists:keyfind(runtime_dependencies, 1, Info) of
+ {runtime_dependencies, RDeps} ->
+ RDeps;
+ false ->
+ []
+ end.
+
+%% Given a release dir find the path to the given dependency
+find_dep_in_rel_dir(Dep, RelDirRoot) ->
+ %% The dependencies that we have found are cached to avoid
+ %% searching through the file system unecessary many times
+ CacheId = runtime_dep_test_cache,
+ DepCache =
+ case erlang:get(CacheId) of
+ undefined -> #{};
+ M-> M
+ end,
+ case maps:get(Dep, DepCache, none) of
+ none ->
+ DepPaths = filelib:wildcard(filename:join([RelDirRoot, "lib", "**", Dep, "ebin"])),
+ case DepPaths of
+ [Path] ->
+ erlang:put(CacheId, maps:put(Dep, Path, DepCache)),
+ Path;
+ _ ->
+ ErrorMessage =
+ io_lib:format("ERROR: Could not find ~p in ~p (where it is supposed to be)."
+ "Found ~p~n", [Dep, RelDirRoot, DepPaths]),
+ io:format(ErrorMessage),
+ ct:fail(ErrorMessage)
+
+ end;
+ Path ->
+ Path
+ end.
+
+%% Get the major OTP version part of an OTP version string
+%% Example: OTP-22.0 gives 22
+get_major_version(OtpVersion) ->
+ [_,MajorVersion|_] = string:tokens(OtpVersion, "-."),
+ MajorVersion.
+
+%% Returns the release directory for the oldest available OTP release
+%% on the current machine
+first_available_otp_rel() ->
+ %% At least one version less than the current version should be available
+ SholdBeAvailable = erlang:list_to_integer(erlang:system_info(otp_release)) - 1,
+ (fun FindOldest(CurrRel, PrevAvailable) ->
+ case test_server:is_release_available(erlang:integer_to_list(CurrRel)) of
+ false -> PrevAvailable;
+ true -> FindOldest(CurrRel-1, erlang:integer_to_list(CurrRel))
+ end
+ end)(SholdBeAvailable, none).
+
+%% Searches for the oldest available version of Dep
+get_oldest_available_version_of_dep(Dep) ->
+ [DepName, _Version] = string:tokens(Dep, "-"),
+ FirstAvailableRel = first_available_otp_rel(),
+ (fun Find(LookInRel) ->
+ case test_server:is_release_available(LookInRel) of
+ true ->
+ RelRoot = find_rel_root(LookInRel),
+ Options0 = filelib:wildcard(filename:join([RelRoot, "lib", "**", "ebin"])),
+ Options1 = [Opt ||
+ Opt <- Options0,
+ string:find(Opt,
+ filename:join("lib", DepName ++ "-")) =/= nomatch],
+ GetVersionTuple =
+ fun(Path) ->
+ [AppVerStr] =
+ [C || C <- filename:split(Path),
+ string:find(C, DepName ++ "-") =/= nomatch],
+ [_,VerStr] = string:tokens(AppVerStr, "-"),
+ erlang:list_to_tuple([erlang:list_to_integer(X) ||
+ X <- string:tokens(VerStr, ".")])
+ end,
+ Options2 =
+ lists:sort(fun(A,B) ->
+ GetVersionTuple(A) =< GetVersionTuple(B)
+ end,
+ Options1),
+ case Options2 of
+ [Path|_] ->
+ Path;
+ _ ->
+ NextRelToTry =
+ erlang:integer_to_list(erlang:list_to_integer(LookInRel)+1),
+ Find(NextRelToTry)
+ end;
+ false ->
+ ct:fail({could_not_find_dep_anywhere, DepName})
+ end
+ end)(FirstAvailableRel).
+
+find_rel_root(Rel) ->
+ case test_server:find_release(Rel) of
+ not_available ->
+ not_available;
+ OtpRelErl -> filename:dirname(filename:dirname(OtpRelErl))
+ end.
+
+%% Find the absoulte paths to RuntimeDeps
+get_paths_to_dependencies(App, RuntimeDeps) ->
+ FirstAvailableOTPRel = first_available_otp_rel(),
+ FirstAvailableRel = erlang:list_to_integer(FirstAvailableOTPRel),
+ DepToOtpVerMap = get_runtime_dep_to_otp_version_map(),
+ lists:foldl(
+ fun(Dep, SoFar) ->
+ case maps:get(Dep, DepToOtpVerMap, false) of
+ false ->
+ ct:fail(io_lib:format(
+ "The dependency ~s for ~p could not be found. "
+ "Have you typed a non-existing version?",
+ [Dep, App]));
+ {latest, Path} ->
+ %% The dependency is in Path (one of the paths returned by code:get_paths())
+ [Path | SoFar];
+ OtpVersionWithDep ->
+ OtpMajorVersionWithDep = get_major_version(OtpVersionWithDep),
+ OtpMajorVersionWithDepInt = erlang:list_to_integer(OtpMajorVersionWithDep),
+ case find_rel_root(OtpMajorVersionWithDep) of
+ not_available when FirstAvailableRel > OtpMajorVersionWithDepInt ->
+ io:format("Warning: Could not find runtime dependency ~p for ~p. "
+ "~p belongs to ~p but ~p is too old to be available on this machine. "
+ "Trying to find the oldest available version of ~p...",
+ [Dep, App, Dep, OtpVersionWithDep, OtpVersionWithDep, Dep]),
+ [get_oldest_available_version_of_dep(Dep) | SoFar];
+ RelDirRoot ->
+ [find_dep_in_rel_dir(Dep, RelDirRoot) | SoFar]
+ end
+ end
+ end,
+ [],
+ RuntimeDeps).
+
+test_app_runtime_deps_versions(AppPath, App, IgnoredUndefinedFunctions) ->
+ %% Get a list of all runtime dependencies for app
+ RuntimeDeps = get_runtime_deps(App),
+ %% Get paths to the found runtime dependices
+ DepPaths = get_paths_to_dependencies(App, RuntimeDeps),
+ XRefSName = test_app_runtime_deps_versions_server,
+ %% Start xref server and do the test
+ {ok, _} = xref:start(XRefSName, []),
+ ok = xref:set_library_path(XRefSName, DepPaths),
+ Dir = filename:join(AppPath, "ebin"),
+ {ok, _} = xref:add_directory(XRefSName, Dir),
+ {ok, UndefinedFunctions0} = xref:analyze(XRefSName, undefined_functions),
+ xref:stop(XRefSName),
+ %% Filter out undefined functions that we should ignore
+ UndefinedFunctions1 =
+ [F || F <- UndefinedFunctions0,
+ not maps:get(F, IgnoredUndefinedFunctions, false)],
+ case UndefinedFunctions1 of
+ [] ->
+ ok;
+ UndefinedFunctions ->
+ {error_undefined_functions_in_app, App, UndefinedFunctions}
+ end.
+
+test_runtime_dependencies_versions_rels(IgnoreApps, AppsToIgnoredUndefinedFunctions) ->
+ %% Do for every application:
+ %% 1. Find deps from app file
+ %% 2. Find where the deps are installed
+ %% 3. Run xref tests on the apps with the specified dependencies
+ %% 4. Report error if undefined function
+ Apps0 = [{Path, list_to_atom(AppName)}
+ || {match, [Path, AppName]}
+ <- [re:run(X,"(" ++ code:lib_dir()++"/"++"([^/-]*).*)/ebin",
+ [{capture,[1,2],list},unicode]) || X <- code:get_path()]],
+ Apps = [{Path, App} ||
+ {Path, App} <- Apps0,
+ code:where_is_file(atom_to_list(App) ++ ".app") =/= non_existing],
+ Res = [test_app_runtime_deps_versions(AppPath,
+ App,
+ maps:get(App, AppsToIgnoredUndefinedFunctions, #{})) ||
+ {AppPath, App} <- Apps, not lists:member(App, IgnoreApps)],
+ BadRes = [R || R <- Res, R =/= ok],
+ case BadRes =:= [] of
+ true -> ok;
+ _ ->
+ ct:fail(BadRes)
+ end.
+
+is_development_build() ->
+ {ok, FileContentBin} = file:read_file(get_otp_version_tickets_path()),
+ "DEVELOPMENT" =:= string:trim(erlang:binary_to_list(FileContentBin), both, "\n ").
+
+test_runtime_dependencies_versions(_Config) ->
+ ReleasesDir = "/usr/local/otp/releases",
+ IgnoreApps = [],
+ AppsToIgnoredUndefinedFunctions =
+ #{eunit =>
+ %% Intentional call to nonexisting function
+ #{{eunit_test, nonexisting_function, 0} => true},
+ diameter =>
+ %% The following functions are optional dependencies for diameter
+ #{{dbg,ctp,0} => true,
+ {dbg,p,2} => true,
+ {dbg,stop_clear,0} => true,
+ {dbg,trace_port,2} => true,
+ {dbg,tracer,2} => true,
+ {erl_prettypr,format,1} => true,
+ {erl_syntax,form_list,1} => true},
+ common_test =>
+ %% ftp:start/0 has been part of the ftp application from
+ %% the beginning so it is unclear why xref report this
+ %% as undefined
+ #{{ftp,start,0} => true}},
+ case {erlang:element(1, os:type()) =:= unix,
+ not is_development_build(),
+ filelib:is_dir(ReleasesDir),
+ filelib:is_file(get_otp_versions_table_path()),
+ first_available_otp_rel() =/= none} of
+ {true, true, true, true, true} ->
+ test_runtime_dependencies_versions_rels(IgnoreApps,
+ AppsToIgnoredUndefinedFunctions);
+ {_, _ ,_, false, _} -> {skip,
+ "Could not find the file \"otp_versions.table\". "
+ "Check that the test has been built correctly. "
+ "\"otp_versions.table\" is copied to \"erts/test/otp_SUITE_data\" "
+ "by the makefile \"erts/test/Makefile\""};
+ {_, false , _, _, _} -> {skip,
+ "This test case is designed to run in the Erlang/OTP teams "
+ "test system for nightly tests. The test case depend on that "
+ "app versions have been set correctly by scripts that "
+ "are executed before creating builds for the nightly tests."};
+ {_, _ ,false, _, _} -> {skip, "Can not do the tests without a proper releases dir. "
+ "Check that " ++ ReleasesDir ++ " is set up correctly."};
+ {_, _ , _, _, false} ->
+ PrevRelNr = erlang:list_to_integer(erlang:system_info(otp_release)) - 1,
+ PrevRelNrStr = erlang:integer_to_list(PrevRelNr),
+ {skip,
+ "Seems like the releases dir is not set up correctly. "
+ "Is release " ++ PrevRelNrStr ++ " installed in the releases dir? "
+ "(releases dir = " ++ ReleasesDir ++ ")"};
+ {false, _ ,_, _, _} -> {skip, "This test only runs on Unix systems"}
+ end.
diff --git a/erts/test/otp_SUITE_data/.keep b/erts/test/otp_SUITE_data/.keep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/erts/test/otp_SUITE_data/.keep
diff --git a/erts/test/parallel_messages_SUITE.erl b/erts/test/parallel_messages_SUITE.erl
new file mode 100644
index 0000000000..9c5d6b4f28
--- /dev/null
+++ b/erts/test/parallel_messages_SUITE.erl
@@ -0,0 +1,465 @@
+-module(parallel_messages_SUITE).
+
+-export([all/0,
+ suite/0,
+ test_throughput_benchmark/1,
+ test_message_queue_data_switching/1,
+ throughput_benchmark/0,
+ large_throughput_benchmark/0]).
+
+all() -> [test_throughput_benchmark,
+ test_message_queue_data_switching].
+
+suite() ->
+ [{timetrap, {minutes, 90}}].
+
+get_op([{_,O}], _RandNum) ->
+ O;
+get_op([{Prob,O}|Rest], RandNum) ->
+ case RandNum < Prob of
+ true -> O;
+ false -> get_op(Rest, RandNum)
+ end.
+do_op(ProbHelpTab, Operations, Receiver) ->
+ RandNum = rand:uniform(),
+ Op = get_op(ProbHelpTab, RandNum),
+ TheOp = Operations(Op),
+ TheOp(Receiver).
+do_work(WorksDoneSoFar, ProbHelpTab, Operations, Receiver) ->
+ receive
+ stop -> WorksDoneSoFar
+ after
+ 0 -> do_op(ProbHelpTab, Operations, Receiver),
+ do_work(WorksDoneSoFar + 1, ProbHelpTab, Operations, Receiver)
+ end.
+
+-record(parallel_messages_bench_config,
+ {benchmark_duration_ms = 500,
+ recover_time_ms = 500,
+ thread_counts = not_set,
+ nr_of_repeats = 1,
+ report_receive_throughput = [false, true],
+ spawn_opts = [[{message_queue_data, off_heap}]],
+ scenarios =
+ [
+ [
+ {1.0, {message_size, 1}}
+ ],
+ [
+ {1.0, {exit_signal_size, 3}}
+ ],
+ [
+ {0.5, {exit_signal_size, 1}},
+ {0.5, {message_size, 1}}
+ ]
+ ],
+ notify_res_fun = fun(_Name, _Throughput) -> ok end,
+ print_result_paths_fun =
+ fun(ResultPath, _LatestResultPath) ->
+ Comment =
+ io_lib:format("<a href=\"file:///~s\">Result visualization</a>",[ResultPath]),
+ {comment, Comment}
+ end
+ }).
+
+stdout_notify_res(ResultPath, LatestResultPath) ->
+ io:format("Result Location: /~s~n", [ResultPath]),
+ io:format("Latest Result Location: ~s~n", [LatestResultPath]).
+
+
+throughput_benchmark(
+ #parallel_messages_bench_config{
+ benchmark_duration_ms = BenchmarkDurationMs,
+ recover_time_ms = RecoverTimeMs,
+ thread_counts = ThreadCountsOpt,
+ nr_of_repeats = NrOfRepeats,
+ report_receive_throughput = ReportReceiveThroughputList,
+ spawn_opts = SpawnOptsList,
+ scenarios = Scenarios,
+ notify_res_fun = NotifyResFun,
+ print_result_paths_fun = PrintResultPathsFun}) ->
+ NrOfSchedulers = erlang:system_info(schedulers),
+ %Parent = self(),
+ %% Mapping benchmark operation names to their action
+ Operations =
+ fun({message_size, Size}) ->
+ case get(Size) of
+ undefined ->
+ Msg = lists:seq(1, Size),
+ NewSendFun =
+ fun(Receiver) ->
+ Receiver ! Msg
+ end,
+ put(Size, NewSendFun),
+ NewSendFun;
+ SendFun ->
+ SendFun
+ end;
+ ({exit_signal_size, Size} = SigType) ->
+ case get(SigType) of
+ undefined ->
+ Msg = lists:seq(1, Size),
+ NewSendFun =
+ fun(Receiver) ->
+ erlang:exit(Receiver, Msg)
+ end,
+ put(SigType, NewSendFun),
+ NewSendFun;
+ SendFun ->
+ SendFun
+ end;
+ ({message_queue_data_change, off_heap}) ->
+ fun(Receiver) ->
+ Receiver ! off_heap
+ end;
+ ({message_queue_data_change, on_heap}) ->
+ fun(Receiver) ->
+ Receiver ! on_heap
+ end
+ end,
+ %% Helper functions
+ CalculateThreadCounts =
+ fun Calculate([Count|Rest]) ->
+ case Count > NrOfSchedulers of
+ true -> lists:reverse(Rest);
+ false -> Calculate([Count*2,Count|Rest])
+ end
+ end,
+ CalculateOpsProbHelpTab =
+ fun Calculate([{_, OpName}], _) ->
+ [{1.0, OpName}];
+ Calculate([{OpPropability, OpName}|Res], Current) ->
+ NewCurrent = Current + OpPropability,
+ [{NewCurrent, OpName}| Calculate(Res, NewCurrent)]
+ end,
+ RenderScenario =
+ fun R([], StringSoFar) ->
+ StringSoFar;
+ R([{Fraction, Operation}], StringSoFar) ->
+ io_lib:format("~s ~f% ~w",[StringSoFar, Fraction * 100.0, Operation]);
+ R([{Fraction, Operation}|Rest], StringSoFar) ->
+ R(Rest,
+ io_lib:format("~s ~f% ~w, ",[StringSoFar, Fraction * 100.0, Operation]))
+ end,
+ DataHolder =
+ fun DataHolderFun(Data)->
+ receive
+ {get_data, Pid} -> Pid ! {message_bench_data, Data};
+ D -> DataHolderFun([Data,D])
+ end
+ end,
+ DataHolderPid = spawn_link(fun()-> DataHolder([]) end),
+ PrintData =
+ fun (Str, List) ->
+ io:format(Str, List),
+ DataHolderPid ! io_lib:format(Str, List)
+ end,
+ GetData =
+ fun () ->
+ DataHolderPid ! {get_data, self()},
+ receive {message_bench_data, Data} -> Data end
+ end,
+ %% Function that runs a benchmark instance and returns the number
+ %% of operations that were performed and how long time they took
+ %% to perform
+ RunBenchmark =
+ fun({NrOfProcs, Scenario, Duration, SpawnOpts}) ->
+ ProbHelpTab = CalculateOpsProbHelpTab(Scenario, 0),
+ ParentPid = self(),
+ ReceiveFun =
+ fun ReceiveFun(NrOfStops, ReceiveCount) when NrOfStops =:= NrOfProcs ->
+ ParentPid ! {done_nothing_more_to_receive, ReceiveCount};
+ ReceiveFun(NrOfStops, ReceiveCount) ->
+ receive
+ Msg ->
+ case Msg of
+ stop ->
+ ReceiveFun(NrOfStops + 1, ReceiveCount);
+ off_heap ->
+ erlang:process_flag(message_queue_data, off_heap),
+ ReceiveFun(NrOfStops, ReceiveCount + 1);
+ on_heap ->
+ erlang:process_flag(message_queue_data, on_heap),
+ ReceiveFun(NrOfStops, ReceiveCount + 1);
+ _X ->
+ ReceiveFun(NrOfStops, ReceiveCount + 1)
+ end
+ end
+ end,
+ Receiver =
+ spawn_opt(
+ fun() ->
+ process_flag(trap_exit, true),
+ ReceiveFun(0, 0)
+ end,
+ SpawnOpts),
+ Worker =
+ fun() ->
+ receive start -> ok end,
+ WorksDone =
+ do_work(0, ProbHelpTab, Operations, Receiver),
+ ParentPid ! {works_done, WorksDone},
+ Receiver ! stop
+ end,
+ ChildPids =
+ lists:map(fun(_N) -> spawn_link(Worker) end, lists:seq(1, NrOfProcs)),
+ erlang:garbage_collect(),
+ timer:sleep(RecoverTimeMs),
+ lists:foreach(fun(Pid) -> Pid ! start end, ChildPids),
+ timer:sleep(Duration),
+ lists:foreach(fun(Pid) -> Pid ! stop end, ChildPids),
+ TotalWorksDone = lists:foldl(
+ fun(_, Sum) ->
+ receive
+ {works_done, Count} -> Sum + Count
+ end
+ end, 0, ChildPids),
+ {TimeAfterSends, ok} =
+ timer:tc(
+ fun() ->
+ receive
+ {done_nothing_more_to_receive, ReceiveCount} ->
+ %% Sanity check
+ ReceiveCount = TotalWorksDone,
+ ok
+ end
+ end),
+ {Duration + (TimeAfterSends div 1000), TotalWorksDone}
+ end,
+ RunBenchmarkInSepProcess =
+ fun(ParameterTuple) ->
+ P = self(),
+ Results =
+ [begin
+ spawn_link(fun()-> P ! {bench_result, RunBenchmark(ParameterTuple)} end),
+ receive {bench_result, Res} -> Res end
+ end || _ <- lists:seq(1, NrOfRepeats)],
+ {R1, R2} = lists:foldl(fun ({I1, I2}, {A1, A2}) ->
+ {I1 + A1, I2 + A2}
+ end, {0, 0}, Results),
+ {R1 / NrOfRepeats, R2 / NrOfRepeats}
+ end,
+ RunBenchmarkAndReport =
+ fun(ThreadCount,
+ Scenario,
+ Duration,
+ ReportReceive,
+ SpawnOpts) ->
+ {ReceiveTime, NrOfSends} =
+ RunBenchmarkInSepProcess({ThreadCount,
+ Scenario,
+ Duration,
+ SpawnOpts}),
+ Throughput =
+ case ReportReceive of
+ true ->
+ NrOfSends/(ReceiveTime/1000.0);
+ false ->
+ NrOfSends/(Duration/1000.0)
+ end,
+ PrintData("; ~f",[Throughput]),
+ Name = io_lib:format("Scenario: ~w, "
+ "# of Processes: ~w",
+ [Scenario, ThreadCount]),
+ NotifyResFun(Name, Throughput)
+ end,
+ ThreadCounts =
+ case ThreadCountsOpt of
+ not_set ->
+ CalculateThreadCounts([1]);
+ _ -> ThreadCountsOpt
+ end,
+ Version =
+ (fun() ->
+ VersionString = erlang:system_info(system_version),
+ case re:run(VersionString, "\\[(source\\-[^\\]]+)\\]") of
+ {match, [_, {StartPos, Length}]} ->
+ string:slice(VersionString, StartPos, Length);
+ _ ->
+ erlang:system_info(otp_release)
+ end
+ end)(),
+ %% Run the benchmark
+ PrintData("# Each instance of the benchmark runs for ~w seconds:~n", [BenchmarkDurationMs/1000]),
+ PrintData("# The result of a benchmark instance is presented as a number representing~n",[]),
+ PrintData("# the number of operations performed per second:~n~n~n",[]),
+ PrintData("# To plot graphs for the results below:~n",[]),
+ PrintData("# 1. Open \"$ERL_TOP/erts/test/parallel_messages_SUITE_data/visualize_throughput.html\" in a web browser~n",[]),
+ PrintData("# 2. Copy the lines between \"#BENCHMARK STARTED$\" and \"#BENCHMARK ENDED$\" below~n",[]),
+ PrintData("# 3. Paste the lines copied in step 2 to the text box in the browser window opened in~n",[]),
+ PrintData("# step 1 and press the Render button~n~n",[]),
+ PrintData("#BENCHMARK STARTED$~n",[]),
+ %% The following loop runs all benchmark scenarios and prints the results (i.e, operations/second)
+ lists:foreach(
+ fun(SpawnOpts) ->
+ lists:foreach(
+ fun(Scenario) ->
+ lists:foreach(
+ fun(ReportReceiveThroughput) ->
+ PrintData("Scenario: ~s, send_duration=~w ms, ~s, Spawn Options=~w$~n",
+ [case ReportReceiveThroughput of
+ true -> "Receive Throughput";
+ false -> "Send Throughput"
+ end,
+ BenchmarkDurationMs,
+ RenderScenario(Scenario, ""),
+ SpawnOpts]),
+ lists:foreach(
+ fun(ThreadCount) ->
+ PrintData("; ~w",[ThreadCount])
+ end,
+ ThreadCounts),
+ PrintData("$~n",[]),
+ PrintData(Version,[]),
+ lists:foreach(
+ fun(ThreadCount) ->
+ %erlang:display({thread_count, ThreadCount}),
+ RunBenchmarkAndReport(ThreadCount,
+ Scenario,
+ BenchmarkDurationMs,
+ ReportReceiveThroughput,
+ SpawnOpts)
+ end,
+ ThreadCounts),
+ PrintData("$~n",[])
+ end,
+ ReportReceiveThroughputList)
+ end,
+ Scenarios)
+ end,
+ SpawnOptsList),
+ PrintData("~n#BENCHMARK ENDED$~n~n",[]),
+ DataDir = filename:join(filename:dirname(code:which(?MODULE)), "parallel_messages_SUITE_data"),
+ TemplatePath = filename:join(DataDir, "visualize_throughput.html"),
+ {ok, Template} = file:read_file(TemplatePath),
+ OutputData = string:replace(Template, "#bench_data_placeholder", GetData()),
+ OutputPath1 = filename:join(DataDir, "message_bench_result.html"),
+ {{Year, Month, Day}, {Hour, Minute, Second}} = calendar:now_to_datetime(erlang:timestamp()),
+ StrTime = lists:flatten(io_lib:format("~4..0w-~2..0w-~2..0wT~2..0w:~2..0w:~2..0w",[Year,Month,Day,Hour,Minute,Second])),
+ OutputPath2 = filename:join(DataDir, io_lib:format("message_bench_result_~s.html", [StrTime])),
+ file:write_file(OutputPath1, OutputData),
+ file:write_file(OutputPath2, OutputData),
+ PrintResultPathsFun(OutputPath2, OutputPath1).
+
+
+throughput_benchmark() ->
+ throughput_benchmark(
+ #parallel_messages_bench_config{
+ benchmark_duration_ms = 500,
+ recover_time_ms = 500,
+ thread_counts = not_set,
+ nr_of_repeats = 1,
+ report_receive_throughput = [false, true],
+ spawn_opts = [[{message_queue_data, off_heap}]],
+ scenarios =
+ [
+ [
+ {1.0, {message_size, 1}}
+ ],
+ [
+ {1.0, {exit_signal_size, 3}}
+ ],
+ [
+ {0.5, {exit_signal_size, 1}},
+ {0.5, {message_size, 1}}
+ ]
+ ],
+ notify_res_fun = fun(_Name, _Throughput) -> ok end,
+ print_result_paths_fun =
+ fun(ResultPath, _LatestResultPath) ->
+ Comment =
+ io_lib:format("<a href=\"file:///~s\">Result visualization</a>",[ResultPath]),
+ {comment, Comment}
+ end
+ }).
+
+test_throughput_benchmark(_) ->
+ throughput_benchmark().
+
+large_throughput_benchmark() ->
+ throughput_benchmark(
+ #parallel_messages_bench_config{
+ benchmark_duration_ms = 1000,
+ recover_time_ms = 1000,
+ thread_counts = [1,2,4,8,15,16,31,32,47,48,63,64],
+ nr_of_repeats = 3,
+ report_receive_throughput = [false, true],
+ spawn_opts = [[{message_queue_data, off_heap}]],
+ scenarios =
+ [
+ [
+ {1.0, {message_size, 1}}
+ ],
+ [
+ {1.0, {message_size, 10}}
+ ],
+ [
+ {1.0, {message_size, 100}}
+ ],
+ [
+ {1.0, {message_size, 1000}}
+ ],
+ [
+ {1.0, {exit_signal_size, 1}}
+ ],
+ [
+ {1.0, {exit_signal_size, 10}}
+ ],
+ [
+ {1.0, {exit_signal_size, 100}}
+ ],
+ [
+ {1.0, {exit_signal_size, 1000}}
+ ],
+ [
+ {0.5, {exit_signal_size, 1}},
+ {0.5, {message_size, 1}}
+ ],
+ [
+ {0.5, {exit_signal_size, 10}},
+ {0.5, {message_size, 10}}
+ ],
+ [
+ {0.5, {exit_signal_size, 100}},
+ {0.5, {message_size, 100}}
+ ],
+ [
+ {0.5, {exit_signal_size, 1000}},
+ {0.5, {message_size, 1000}}
+ ]
+ ],
+ notify_res_fun =
+ fun(Name, Throughput) ->
+ io:format("~n~n#Name: ~s Throughput: ~w~n~n", [Name, Throughput])
+ end,
+ print_result_paths_fun =
+ fun stdout_notify_res/2
+ }).
+
+test_message_queue_data_switching(_) ->
+ throughput_benchmark(
+ #parallel_messages_bench_config{
+ benchmark_duration_ms = 100,
+ recover_time_ms = 500,
+ thread_counts = [1,2,4],
+ nr_of_repeats = 1,
+ report_receive_throughput = [true],
+ spawn_opts = [[{message_queue_data, off_heap}]],
+ scenarios =
+ [
+ [
+ {0.499995, {exit_signal_size, 1}},
+ {0.499995, {message_size, 1}},
+ %% About 1 in 100k changes message data type
+ {0.000005, {message_queue_data_change, off_heap}},
+ {0.000005, {message_queue_data_change, on_heap}}
+ ]
+ ],
+ notify_res_fun = fun(_Name, _Throughput) -> ok end,
+ print_result_paths_fun =
+ fun(ResultPath, _LatestResultPath) ->
+ Comment =
+ io_lib:format("<a href=\"file:///~s\">Result visualization</a>",[ResultPath]),
+ {comment, Comment}
+ end
+ }).
diff --git a/erts/test/parallel_messages_SUITE_data/visualize_throughput.html b/erts/test/parallel_messages_SUITE_data/visualize_throughput.html
new file mode 100644
index 0000000000..5f8b00592a
--- /dev/null
+++ b/erts/test/parallel_messages_SUITE_data/visualize_throughput.html
@@ -0,0 +1,304 @@
+<!doctype html>
+<html lang="en">
+
+<!-- %% -->
+<!-- %% %CopyrightBegin% -->
+<!-- %% -->
+<!-- %% Copyright Ericsson AB and Kjell Winblad 1996-2020. All Rights Reserved. -->
+<!-- %% -->
+<!-- %% Licensed under the Apache License, Version 2.0 (the "License"); -->
+<!-- %% you may not use this file except in compliance with the License. -->
+<!-- %% You may obtain a copy of the License at -->
+<!-- %% -->
+<!-- %% http://www.apache.org/licenses/LICENSE-2.0 -->
+<!-- %% -->
+<!-- %% Unless required by applicable law or agreed to in writing, software -->
+<!-- %% distributed under the License is distributed on an "AS IS" BASIS, -->
+<!-- %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -->
+<!-- %% See the License for the specific language governing permissions and -->
+<!-- %% limitations under the License. -->
+<!-- %% -->
+<!-- %% %CopyrightEnd% -->
+<!-- %% -->
+<!-- %% Author: Kjell Winblad -->
+<!-- %% -->
+
+ <head>
+ <meta charset="utf-8">
+ <title>Message Send/Receive Benchmark Result Viewer</title>
+ </head>
+
+ <body>
+ <div id="insertPlaceholder"></div>
+ <h1>Message Send/Receive Benchmark Result Viewer</h1>
+ <p>
+ This page generates graphs from data produced by the Message Send/Receive Benchmark which is defined in the function <code>parallel_messages_SUITE:test_throughput_benchmark/1</code> (see "<code>$ERL_TOP/erts/test/parallel_messages_SUITE.erl</code>").
+ </p>
+ <p>
+ Note that one can paste results from several benchmark runs into the field below. Results from the same scenario but from different benchmark runs will be relabeled and plotted in the same graph automatically.
+ </p>
+ <p>
+ Note also that that lines can be hidden by clicking on the corresponding label.
+ </p>
+ Paste the generated data in the field below and press the Render button:
+ <br>
+ <textarea id="dataField" rows="4" cols="50">#bench_data_placeholder</textarea>
+ <br>
+ <input type="checkbox" id="throughputPlot" checked> Include Throughput Plot
+ <br>
+ <input type="checkbox" id="betterThanWorstPlot"> Include % More Throughput Than Worst Plot
+ <br>
+ <input type="checkbox" id="worseThanBestPlot"> Include % Less Throughput Than Best Plot
+ <br>
+ <input type="checkbox" id="barPlot"> Bar Plot
+ <br>
+ <input type="checkbox" id="sameSpacing" checked> Same X Spacing Between Points
+ <br>
+ <button id="renderButton" type="button">Render</button>
+
+ <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
+ integrity="sha256-3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E="
+ crossorigin="anonymous"></script>
+ <script>
+ var loading = false;
+ function toggleLoadingScreen(){
+ if(loading){
+ $("#loading").remove();
+ loading = false;
+ }else{
+ $('<div id="loading">'+
+ '<span style="position: fixed; top: 50%;left: 50%;color: white;"><b>Loading...</b></span>'+
+ '</div>')
+ .css({position: "fixed",
+ top: 0,
+ left: 0,
+ width: "100%",
+ height: "100%",
+ 'background-color': "#000",
+ filter:"alpha(opacity=50)",
+ '-moz-opacity':"0.5",
+ '-khtml-opacity': "0.5",
+ opacity: "0.5",
+ 'z-index': "10000"})
+ .appendTo(document.body);
+ loading = true;
+
+ }
+ }
+ //Start loading screen before downloading plotly which is quite large
+ toggleLoadingScreen();
+ </script>
+ <script src="https://cdn.plot.ly/plotly-1.5.0.min.js"></script>
+ <script>
+ String.prototype.replaceAll = function(search, replacement) {
+ var target = this;
+ return target.split(search).join(replacement);
+ };
+ String.prototype.myTrim = function() {
+ var target = this;
+ return target.replace(/^\s+|\s+$/g, '');
+ };
+ function plotGraph(lines, sameSpacing, barPlot, prefix) {
+ var xvals = null;
+ var data = [];
+ while(lines.length > 0 &&
+ (lines[0].myTrim() == "" ||
+ lines[0].myTrim().indexOf(";") !== -1)){
+ var line = lines.shift().myTrim();
+ if(line == "" || line.startsWith("#")){
+ continue;
+ } else if(line.startsWith(";")) {
+ xvals = line.split(";")
+ xvals.shift(); // Remove first
+ xvals = $.map(xvals, function (i){
+ if(sameSpacing){
+ return "_"+i.myTrim();
+ }else{
+ return parseInt(i.myTrim(), 10);
+ }
+ });
+ }else{
+ line = line.split(";")
+ var label = prefix + line.shift().myTrim();
+ var yvals = $.map(line, function (i){
+ return parseFloat(i.myTrim(), 10);
+ });
+ var trace = {
+ x: xvals,
+ y: yvals,
+ mode: 'lines+markers',
+ name: label
+ };
+ if(barPlot){
+ trace['type'] = "bar";
+ }
+ data.push(trace);
+ }
+
+ }
+ return data;
+ }
+ function toCompareData(dataParam, compareWithWorst) {
+ var data = $.extend(true, [], dataParam);
+ var worstSoFarMap = {};
+ var defaultSoFarValue = compareWithWorst ? Number.MAX_VALUE : Number.MIN_VALUE;
+ function getWorstBestSoFar(x){
+ return worstSoFarMap[x] === undefined ? defaultSoFarValue : worstSoFarMap[x];
+ }
+ function setWorstBestSoFar(x, y){
+ return worstSoFarMap[x] = y;
+ }
+ function lessOrGreaterThan(n1, n2){
+ return compareWithWorst ? n1 < n2 : n1 > n2;
+ }
+ $.each(data, function(i, allResConfig) {
+ $.each(allResConfig.y, function(index, res) {
+ var xName = allResConfig.x[index];
+ if(lessOrGreaterThan(res, getWorstBestSoFar(xName))){
+ setWorstBestSoFar(xName, res);
+ }
+ });
+ });
+ $.each(data, function(i, allResConfig) {
+ $.each(allResConfig.y, function(index, res) {
+ var xName = allResConfig.x[index];
+ if(compareWithWorst){
+ allResConfig.y[index] = ((res / getWorstBestSoFar(xName))-1.0) * 100;
+ }else{
+ allResConfig.y[index] = (1.0 -(res / getWorstBestSoFar(xName))) * 100;
+ }
+ });
+ });
+ return data;
+ }
+ function toBetterThanWorstData(data){
+ return toCompareData(data, true);
+ }
+ function toWorseThanBestData(data){
+ return toCompareData(data, false);
+ }
+ function plotGraphs(){
+ var insertPlaceholder = $("#insertPlaceholder");
+ var sameSpacing = $('#sameSpacing').is(":checked");
+ var barPlot = $('#barPlot').is(":checked");
+ var throughputPlot = $('#throughputPlot').is(":checked");
+ var betterThanWorstPlot = $('#betterThanWorstPlot').is(":checked");
+ var worseThanBestPlot = $('#worseThanBestPlot').is(":checked");
+ var lines = $("#dataField").val();
+ $('.showCheck').each(function() {
+ var item = $(this);
+ if(!item.is(":checked")){
+ lines = lines.replaceAll(item.val(), "#"+item.val())
+ }
+ });
+ lines = lines.split("$");
+ var nrOfGraphs = 0;
+ var scenarioDataMap = {};
+ var scenarioNrOfVersionsMap = {};
+ var scenarioList = [];
+ while(lines.length > 0){
+ var line = lines.shift().myTrim();
+ if(line == ""){
+ continue;
+ } else if(line.startsWith("Scenario:")) {
+ nrOfGraphs = nrOfGraphs + 1;
+ var name = line;
+ if(scenarioDataMap[name] === undefined){
+ scenarioDataMap[name] = [];
+ scenarioNrOfVersionsMap[name] = 0;
+ scenarioList.push(line);
+ }
+ scenarioNrOfVersionsMap[name] = scenarioNrOfVersionsMap[name] + 1;
+ var prefix = undefined;
+ if(scenarioNrOfVersionsMap[name] === 1){
+ prefix = "";
+ }else{
+ prefix = "Ver: " + scenarioNrOfVersionsMap[name] + " ";
+ }
+ scenarioDataMap[name] =
+ scenarioDataMap[name].concat(
+ plotGraph(lines, sameSpacing, barPlot, prefix));
+ }
+ }
+ var nrOfGraphs = 0;
+ function plotScenario(name, plotType) {
+ var data = scenarioDataMap[name];
+ var yAxisTitle = undefined;
+ var graphId = "graph" + nrOfGraphs;
+ var fullscreenButtonid = "fullscreenButton" + nrOfGraphs;
+ nrOfGraphs = nrOfGraphs + 1;
+ $("<div class='added' id='" + graphId + "'>")
+ .insertBefore(insertPlaceholder);
+ $("<button type='button' class='added' id='" + fullscreenButtonid + "'>Fill screen</button>")
+ .insertBefore(insertPlaceholder);
+ $("<span class='added'><br><hr><br></span>")
+ .insertBefore(insertPlaceholder);
+ if (plotType === 'throughput') {
+ yAxisTitle = 'Operations/Second';
+ } else if (plotType === 'better_than_worst') {
+ yAxisTitle = '% More Throughput Than Worst';
+ data = toBetterThanWorstData(data);
+ } else {
+ yAxisTitle = '% Less Throughput Than Best';
+ data = toWorseThanBestData(data);
+ }
+ var layout = {
+ title: name,
+ xaxis: {
+ title: '# of Processes'
+ },
+ yaxis: {
+ title: yAxisTitle
+ }
+ };
+ $("#" + fullscreenButtonid).click(
+ function () {
+ $('#' + graphId).replaceWith(
+ $("<div class='added' id='" + graphId + "'>"));
+ layout = $.extend({}, layout, {
+ width: $(window).width() - 40,
+ height: $(window).height() - 40
+ });
+ Plotly.newPlot(graphId, data, layout);
+ });
+ Plotly.newPlot(graphId, data, layout);
+ }
+ $.each(scenarioList,
+ function (index, name) {
+ if (throughputPlot) {
+ plotScenario(name, 'throughput');
+ }
+ if (betterThanWorstPlot) {
+ plotScenario(name, 'better_than_worst');
+ }
+ if (worseThanBestPlot) {
+ plotScenario(name, 'worse_than_best');
+ }
+ });
+ }
+ $(document).ready(function(){
+ $('#renderButton').click(
+ function(){
+ toggleLoadingScreen();
+ setTimeout(function(){
+ try {
+ $( ".added" ).remove();
+ plotGraphs();
+ toggleLoadingScreen();
+ } catch(e){
+ toggleLoadingScreen();
+ console.log(e);
+ alert("Error happened when parsing data.\n" +
+ "See console for more info");
+ }
+ }, 10);
+ });
+ setTimeout(function(){
+ $( ".added" ).remove();
+ plotGraphs();
+ toggleLoadingScreen();
+ }, 10);
+ });
+ </script>
+ </body>
+</html>
diff --git a/erts/test/upgrade_SUITE.erl b/erts/test/upgrade_SUITE.erl
index 3c1d220b47..8df4a50ec2 100644
--- a/erts/test/upgrade_SUITE.erl
+++ b/erts/test/upgrade_SUITE.erl
@@ -20,7 +20,7 @@
-compile(export_all).
--compile(r21).
+-compile(r22).
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
diff --git a/lib/asn1/src/asn1.app.src b/lib/asn1/src/asn1.app.src
index d2da727193..bd269651ef 100644
--- a/lib/asn1/src/asn1.app.src
+++ b/lib/asn1/src/asn1.app.src
@@ -10,5 +10,5 @@
]},
{env, []},
{applications, [kernel, stdlib]},
- {runtime_dependencies, ["stdlib-2.0","kernel-3.0","erts-7.0"]}
+ {runtime_dependencies, ["stdlib-3.4","kernel-3.0","erts-7.0"]}
]}.
diff --git a/lib/common_test/configure b/lib/common_test/configure
index 73b2a2d156..67ddf2ecb7 100755
--- a/lib/common_test/configure
+++ b/lib/common_test/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,41 +167,52 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -227,14 +220,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -252,18 +252,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -290,6 +291,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -307,6 +309,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -321,7 +331,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -330,7 +340,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -369,12 +379,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -386,18 +397,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -409,9 +429,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -438,7 +458,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -482,7 +502,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -496,6 +516,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -509,6 +533,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -574,16 +605,20 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
ac_subst_vars='LTLIBOBJS
LIBOBJS
TARGET
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -706,8 +741,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -748,9 +781,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -774,9 +807,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -987,9 +1020,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1003,9 +1036,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1049,9 +1082,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1067,7 +1100,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1131,7 +1164,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1249,6 +1282,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1272,9 +1306,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1302,7 +1336,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1310,7 +1345,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1320,9 +1355,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1332,14 +1367,34 @@ fi
## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -1372,8 +1427,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -1408,7 +1467,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -1443,11 +1502,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -1458,8 +1519,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -1483,7 +1544,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -1491,14 +1552,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -1506,15 +1567,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -1522,8 +1583,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -1537,63 +1598,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -1603,19 +1649,117 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -1626,12 +1770,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -1640,24 +1784,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -1667,11 +1811,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -1685,57 +1830,122 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_aux_dir=
-for ac_dir in priv/auxdir "$srcdir"/priv/auxdir; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in priv/auxdir \"$srcdir\"/priv/auxdir" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -1754,21 +1964,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -1787,10 +1998,108 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=win32
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
+fi
+
+
TARGET=$host
@@ -1823,8 +2132,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -1854,15 +2163,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -1876,8 +2185,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -1930,7 +2239,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -1946,8 +2255,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -1970,14 +2279,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -1987,46 +2298,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -2035,13 +2346,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -2050,8 +2354,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -2063,30 +2371,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -2099,13 +2387,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -2132,18 +2421,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -2155,12 +2446,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -2191,7 +2483,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -2213,6 +2505,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -2226,6 +2522,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -2267,7 +2569,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -2276,7 +2578,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -2339,7 +2641,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -2388,14 +2690,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -2432,21 +2736,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -2474,7 +2778,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -2488,7 +2792,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -2513,7 +2817,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -2741,7 +3045,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -2749,17 +3053,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -2776,7 +3080,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -2800,9 +3104,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -2855,8 +3159,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -2898,9 +3202,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -2947,7 +3251,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/lib/common_test/configure.ac b/lib/common_test/configure.ac
new file mode 100644
index 0000000000..490a64328d
--- /dev/null
+++ b/lib/common_test/configure.ac
@@ -0,0 +1,14 @@
+AC_INIT
+AC_PREREQ([2.71])
+
+m4_include([otp.m4])
+
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
+
+ERL_CANONICAL_SYSTEM_TYPE
+
+TARGET=$host
+AC_SUBST(TARGET)
+
+AC_CONFIG_FILES([priv/$host/Makefile:priv/Makefile.in])
+AC_OUTPUT
diff --git a/lib/common_test/configure.in b/lib/common_test/configure.in
deleted file mode 100644
index b2e6ad997a..0000000000
--- a/lib/common_test/configure.in
+++ /dev/null
@@ -1,14 +0,0 @@
-AC_INIT()
-
-AC_CONFIG_AUX_DIR(priv/auxdir)
-
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=win32
-fi
-
-TARGET=$host
-AC_SUBST(TARGET)
-
-AC_OUTPUT(priv/$host/Makefile:priv/Makefile.in)
diff --git a/lib/common_test/src/common_test.app.src b/lib/common_test/src/common_test.app.src
index 8aa15efa7e..017c409de3 100644
--- a/lib/common_test/src/common_test.app.src
+++ b/lib/common_test/src/common_test.app.src
@@ -79,20 +79,20 @@
{env, []},
{runtime_dependencies,
["compiler-6.0",
- "crypto-3.6",
+ "crypto-4.5",
"debugger-4.1",
"erts-7.0",
- "ftp-1.0.0",
+ "ftp-1.0",
"inets-6.0",
- "kernel-4.0",
+ "kernel-6.0",
"observer-2.1",
"runtime_tools-1.8.16",
- "sasl-2.4.2",
+ "sasl-2.5",
"snmp-5.1.2",
"ssh-4.0",
"stdlib-3.5",
"syntax_tools-1.7",
- "tools-2.8",
+ "tools-3.2",
"xmerl-1.3.8"
]}]}.
diff --git a/lib/common_test/src/test_server.erl b/lib/common_test/src/test_server.erl
index 9b5fabb718..0d2a89ed82 100644
--- a/lib/common_test/src/test_server.erl
+++ b/lib/common_test/src/test_server.erl
@@ -39,7 +39,7 @@
-export([m_out_of_n/3,do_times/4,do_times/2]).
-export([call_crash/3,call_crash/4,call_crash/5]).
-export([temp_name/1]).
--export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1]).
+-export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1, find_release/1]).
-export([app_test/1, app_test/2, appup_test/1]).
-export([comment/1, make_priv_dir/0]).
-export([os_type/0]).
@@ -2766,6 +2766,19 @@ is_release_available(Release) ->
{test_server_ctrl,is_release_available,[Release]}},
receive {sync_result,R} -> R end.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% find_release(Release) -> PathToReleaseErlFile | not_available
+%% Release -> string()
+%%
+%% Test if a release (such as "r10b") and if so return the path to the
+%% release's erl file
+
+find_release(Release) ->
+ group_leader() ! {sync_apply,
+ self(),
+ {test_server_ctrl,find_release,[Release]}},
+ receive {sync_result,R} -> R end.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% run_on_shielded_node(Fun, CArgs) -> term()
diff --git a/lib/common_test/src/test_server_ctrl.erl b/lib/common_test/src/test_server_ctrl.erl
index 5ca36affe3..bf53e1287f 100644
--- a/lib/common_test/src/test_server_ctrl.erl
+++ b/lib/common_test/src/test_server_ctrl.erl
@@ -54,15 +54,14 @@
-export([multiply_timetraps/1, scale_timetraps/1, get_timetrap_parameters/0]).
-export([create_priv_dir/1]).
-export([cover/1, cover/2, cover/3,
- cover_compile/7, cover_analyse/2, cross_cover_analyse/2,
- trc/1, stop_trace/0]).
+ cover_compile/7, cover_analyse/2, cross_cover_analyse/2]).
-export([testcase_callback/1]).
-export([set_random_seed/1]).
-export([kill_slavenodes/0]).
%%% TEST_SERVER INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-export([print/2, print/3, print/4, print_timestamp/2]).
--export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1]).
+-export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1, find_release/1]).
-export([format/1, format/2, format/3, to_string/1]).
-export([get_target_info/0]).
-export([get_hosts/0]).
@@ -115,7 +114,7 @@
-record(state,{jobs=[], levels={1,19,10}, reject_io_reqs=false,
multiply_timetraps=1, scale_timetraps=true,
create_priv_dir=auto_per_run, finish=false,
- target_info, trc=false, cover=false, wait_for_node=[],
+ target_info, cover=false, wait_for_node=[],
testcase_callback=undefined, idle_notify=[],
get_totals=false, random_seed=undefined}).
@@ -224,55 +223,53 @@ add_tests_with_skip(LogDir, Tests, Skip) ->
%% COMMAND LINE INTERFACE
parse_cmd_line(Cmds) ->
- parse_cmd_line(Cmds, [], [], local, false, false, undefined).
+ parse_cmd_line(Cmds, [], [], local, false, undefined).
-parse_cmd_line(['SPEC',Spec|Cmds], SpecList, Names, Param, Trc, Cov, TCCB) ->
+parse_cmd_line(['SPEC',Spec|Cmds], SpecList, Names, Param, Cov, TCCB) ->
case file:consult(Spec) of
{ok, TermList} ->
Name = filename:rootname(Spec),
parse_cmd_line(Cmds, TermList++SpecList, [Name|Names], Param,
- Trc, Cov, TCCB);
+ Cov, TCCB);
{error,Reason} ->
io:format("Can't open ~tw: ~tp\n",[Spec, file:format_error(Reason)]),
- parse_cmd_line(Cmds, SpecList, Names, Param, Trc, Cov, TCCB)
+ parse_cmd_line(Cmds, SpecList, Names, Param, Cov, TCCB)
end;
-parse_cmd_line(['NAME',Name|Cmds], SpecList, Names, Param, Trc, Cov, TCCB) ->
+parse_cmd_line(['NAME',Name|Cmds], SpecList, Names, Param, Cov, TCCB) ->
parse_cmd_line(Cmds, SpecList, [{name,atom_to_list(Name)}|Names],
- Param, Trc, Cov, TCCB);
-parse_cmd_line(['SKIPMOD',Mod|Cmds], SpecList, Names, Param, Trc, Cov, TCCB) ->
+ Param, Cov, TCCB);
+parse_cmd_line(['SKIPMOD',Mod|Cmds], SpecList, Names, Param, Cov, TCCB) ->
parse_cmd_line(Cmds, [{skip,{Mod,"by command line"}}|SpecList], Names,
- Param, Trc, Cov, TCCB);
-parse_cmd_line(['SKIPCASE',Mod,Case|Cmds], SpecList, Names, Param, Trc, Cov, TCCB) ->
+ Param, Cov, TCCB);
+parse_cmd_line(['SKIPCASE',Mod,Case|Cmds], SpecList, Names, Param, Cov, TCCB) ->
parse_cmd_line(Cmds, [{skip,{Mod,Case,"by command line"}}|SpecList], Names,
- Param, Trc, Cov, TCCB);
-parse_cmd_line(['DIR',Dir|Cmds], SpecList, Names, Param, Trc, Cov, TCCB) ->
+ Param, Cov, TCCB);
+parse_cmd_line(['DIR',Dir|Cmds], SpecList, Names, Param, Cov, TCCB) ->
Name = filename:basename(Dir),
parse_cmd_line(Cmds, [{topcase,{dir,Name}}|SpecList], [Name|Names],
- Param, Trc, Cov, TCCB);
-parse_cmd_line(['MODULE',Mod|Cmds], SpecList, Names, Param, Trc, Cov, TCCB) ->
+ Param, Cov, TCCB);
+parse_cmd_line(['MODULE',Mod|Cmds], SpecList, Names, Param, Cov, TCCB) ->
parse_cmd_line(Cmds,[{topcase,{Mod,all}}|SpecList],[atom_to_list(Mod)|Names],
- Param, Trc, Cov, TCCB);
-parse_cmd_line(['CASE',Mod,Case|Cmds], SpecList, Names, Param, Trc, Cov, TCCB) ->
+ Param, Cov, TCCB);
+parse_cmd_line(['CASE',Mod,Case|Cmds], SpecList, Names, Param, Cov, TCCB) ->
parse_cmd_line(Cmds,[{topcase,{Mod,Case}}|SpecList],[atom_to_list(Mod)|Names],
- Param, Trc, Cov, TCCB);
-parse_cmd_line(['TRACE',Trc|Cmds], SpecList, Names, Param, _Trc, Cov, TCCB) ->
- parse_cmd_line(Cmds, SpecList, Names, Param, Trc, Cov, TCCB);
-parse_cmd_line(['COVER',App,CF,Analyse|Cmds], SpecList, Names, Param, Trc, _Cov, TCCB) ->
- parse_cmd_line(Cmds, SpecList, Names, Param, Trc, {{App,CF}, Analyse}, TCCB);
-parse_cmd_line(['TESTCASE_CALLBACK',Mod,Func|Cmds], SpecList, Names, Param, Trc, Cov, _) ->
- parse_cmd_line(Cmds, SpecList, Names, Param, Trc, Cov, {Mod,Func});
-parse_cmd_line([Obj|_Cmds], _SpecList, _Names, _Param, _Trc, _Cov, _TCCB) ->
+ Param, Cov, TCCB);
+parse_cmd_line(['COVER',App,CF,Analyse|Cmds], SpecList, Names, Param, _Cov, TCCB) ->
+ parse_cmd_line(Cmds, SpecList, Names, Param, {{App,CF}, Analyse}, TCCB);
+parse_cmd_line(['TESTCASE_CALLBACK',Mod,Func|Cmds], SpecList, Names, Param, Cov, _) ->
+ parse_cmd_line(Cmds, SpecList, Names, Param, Cov, {Mod,Func});
+parse_cmd_line([Obj|_Cmds], _SpecList, _Names, _Param, __Cov, _TCCB) ->
io:format("~w: Bad argument: ~tw\n", [?MODULE,Obj]),
io:format(" Use the `ts' module to start tests.\n", []),
io:format(" (If you ARE using `ts', there is a bug in `ts'.)\n", []),
halt(1);
-parse_cmd_line([], SpecList, Names, Param, Trc, Cov, TCCB) ->
+parse_cmd_line([], SpecList, Names, Param, Cov, TCCB) ->
NameList = lists:reverse(Names, ["suite"]),
Name = case lists:keysearch(name, 1, NameList) of
{value,{name,N}} -> N;
false -> hd(NameList)
end,
- {lists:reverse(SpecList), Name, Param, Trc, Cov, TCCB}.
+ {lists:reverse(SpecList), Name, Param, Cov, TCCB}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% cast_to_list(X) -> string()
@@ -311,12 +308,8 @@ start_link() ->
run_test(CommandLine) ->
process_flag(trap_exit,true),
- {SpecList,Name,Param,Trc,Cov,TCCB} = parse_cmd_line(CommandLine),
+ {SpecList,Name,Param,Cov,TCCB} = parse_cmd_line(CommandLine),
{ok,_TSPid} = start_link(Param),
- case Trc of
- false -> ok;
- File -> trc(File)
- end,
case Cov of
false -> ok;
{{App,CoverFile},Analyse} -> cover(App, maybe_file(CoverFile), Analyse)
@@ -399,12 +392,6 @@ get_timetrap_parameters() ->
create_priv_dir(Value) ->
controller_call({create_priv_dir,Value}).
-trc(TraceFile) ->
- controller_call({trace,TraceFile}, 2*?ACCEPT_TIMEOUT).
-
-stop_trace() ->
- controller_call(stop_trace).
-
node_started(Node) ->
gen_server:cast(?MODULE, {node_started,Node}).
@@ -796,45 +783,6 @@ handle_call(get_timetrap_parameters, _From, State) ->
{reply,{State#state.multiply_timetraps,State#state.scale_timetraps},State};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% handle_call({trace,TraceFile}, _, State) -> ok | {error,Reason}
-%%
-%% Starts a separate node (trace control node) which
-%% starts tracing on target and all slave nodes
-%%
-%% TraceFile is a text file with elements of type
-%% {Trace,Mod,TracePattern}.
-%% {Trace,Mod,Func,TracePattern}.
-%% {Trace,Mod,Func,Arity,TracePattern}.
-%%
-%% Trace = tp | tpl; local or global call trace
-%% Mod,Func = atom(), Arity=integer(); defines what to trace
-%% TracePattern = [] | match_spec()
-%%
-%% The 'call' trace flag is set on all processes, and then
-%% the given trace patterns are set.
-
-handle_call({trace,TraceFile}, _From, State=#state{trc=false}) ->
- TI = State#state.target_info,
- case test_server_node:start_tracer_node(TraceFile, TI) of
- {ok,Tracer} -> {reply,ok,State#state{trc=Tracer}};
- Error -> {reply,Error,State}
- end;
-handle_call({trace,_TraceFile}, _From, State) ->
- {reply,{error,already_tracing},State};
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% handle_call(stop_trace, _, State) -> ok | {error,Reason}
-%%
-%% Stops tracing on target and all slave nodes and
-%% terminates trace control node
-
-handle_call(stop_trace, _From, State=#state{trc=false}) ->
- {reply,{error,not_tracing},State};
-handle_call(stop_trace, _From, State) ->
- R = test_server_node:stop_tracer_node(State#state.trc),
- {reply,R,State#state{trc=false}};
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% handle_call({cover,CoverInfo}, _, State) -> ok | {error,Reason}
%%
%% Set specification of cover analysis to be used when running tests
@@ -962,6 +910,19 @@ handle_call({stop_node, Name}, _From, State) ->
handle_call({is_release_available, Release}, _From, State) ->
R = test_server_node:is_release_available(Release),
+ {reply, R, State};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% handle_call({find_release,Name}, _, State) -> PathToReleaseErlFile | not_available
+%%
+%% Find the path of the release's erl file if available
+
+handle_call({find_release, Release}, _From, State) ->
+ R =
+ case test_server_node:is_release_available(Release) of
+ true -> test_server_node:find_release(Release);
+ _ -> not_available
+ end,
{reply, R, State}.
%%--------------------------------------------------------------------
@@ -974,10 +935,6 @@ set_hosts(Hosts) ->
%% Called by test_server_node when a slave/peer node is fully started.
handle_cast({node_started,Node}, State) ->
- case State#state.trc of
- false -> ok;
- Trc -> test_server_node:trace_nodes(Trc, [Node])
- end,
NewWaitList =
case lists:keysearch(Node,1,State#state.wait_for_node) of
{value,{Node,From}} ->
@@ -1052,14 +1009,8 @@ handle_info({'EXIT',Pid,Reason}, State) ->
%% handle_info({tcp_closed,Sock}, State)
%%
%% A Socket was closed. This indicates that a node died.
-%% This can be
-%% *Slave or peer node started by a test suite
-%% *Trace controll node
-
-handle_info({tcp_closed,Sock}, State=#state{trc=Sock}) ->
- %% Tracer node died - can't really do anything
- %%! Maybe print something???
- {noreply,State#state{trc=false}};
+%% This can be a slave or peer node started by a test suite
+
handle_info({tcp_closed,Sock}, State) ->
test_server_node:nodedown(Sock),
{noreply,State};
@@ -1076,10 +1027,6 @@ handle_info(_, State) ->
terminate(_Reason, State) ->
test_server_sup:util_stop(),
- case State#state.trc of
- false -> ok;
- Sock -> test_server_node:stop_tracer_node(Sock)
- end,
ok = kill_all_jobs(State#state.jobs),
_ = test_server_node:kill_nodes(),
ok.
@@ -5172,6 +5119,14 @@ is_release_available(Release) ->
controller_call({is_release_available,Release}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% handle_call({find_release,Name}, _, State) -> PathToReleaseErlFile | not_available
+%%
+%% Find the path of the release's erl file if available
+
+find_release(Release) ->
+ controller_call({find_release,Release}).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% stop_node(Name) -> ok | {error,Reason}
%%
%% Clean up - test_server will stop this node
diff --git a/lib/common_test/src/test_server_node.erl b/lib/common_test/src/test_server_node.erl
index edfb1fbd92..349402fcca 100644
--- a/lib/common_test/src/test_server_node.erl
+++ b/lib/common_test/src/test_server_node.erl
@@ -18,20 +18,14 @@
%% %CopyrightEnd%
%%
-module(test_server_node).
--compile(r20).
-
-%%%
-%%% The same compiled code for this module must be possible to load
-%%% in R16B and later.
-%%%
+-compile(r22).
%% Test Controller interface
--export([is_release_available/1]).
--export([start_tracer_node/2,trace_nodes/2,stop_tracer_node/1]).
+-export([is_release_available/1, find_release/1]).
-export([start_node/5, stop_node/1]).
-export([kill_nodes/0, nodedown/1]).
%% Internal export
--export([node_started/1,trc/1,handle_debug/4]).
+-export([node_started/1]).
-include("test_server_internal.hrl").
-record(slave_info, {name,socket,client}).
@@ -39,7 +33,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% %%%
%%% All code in this module executes on the test_server_ctrl process %%%
-%%% except for node_started/1 and trc/1 which execute on a new node. %%%
+%%% except for node_started/1 which execute on a new node. %%%
%%% %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -68,211 +62,6 @@ nodedown(Sock) ->
ok
end.
-
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% Start trace node
-%%%
-start_tracer_node(TraceFile,TI) ->
- Match = #slave_info{name='$1',_='_'},
- SlaveNodes = lists:map(fun([N]) -> [" ",N] end,
- ets:match(slave_tab,Match)),
- TargetNode = node(),
- Cookie = TI#target_info.cookie,
- {ok,LSock} = gen_tcp:listen(0,[binary,{reuseaddr,true},{packet,2}]),
- {ok,TracePort} = inet:port(LSock),
- Prog = quote_progname(pick_erl_program(default)),
- Cmd = lists:concat([Prog, " -sname tracer -hidden -setcookie ", Cookie,
- " -s ", ?MODULE, " trc ", TraceFile, " ",
- TracePort, " ", TI#target_info.os_family]),
- spawn(fun() -> print_data(open_port({spawn,Cmd},[stream])) end),
-%! open_port({spawn,Cmd},[stream]),
- case gen_tcp:accept(LSock,?ACCEPT_TIMEOUT) of
- {ok,Sock} ->
- gen_tcp:close(LSock),
- receive
- {tcp,Sock,Result} when is_binary(Result) ->
- case unpack(Result) of
- error ->
- gen_tcp:close(Sock),
- {error,timeout};
- {ok,started} ->
- trace_nodes(Sock,[TargetNode | SlaveNodes]),
- {ok,Sock};
- {ok,Error} -> Error
- end;
- {tcp_closed,Sock} ->
- gen_tcp:close(Sock),
- {error,could_not_start_tracernode}
- after ?ACCEPT_TIMEOUT ->
- gen_tcp:close(Sock),
- {error,timeout}
- end;
- Error ->
- gen_tcp:close(LSock),
- {error,{could_not_start_tracernode,Error}}
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% Start a tracer on each of these nodes and set flags and patterns
-%%%
-trace_nodes(Sock,Nodes) ->
- Bin = term_to_binary({add_nodes,Nodes}),
- ok = gen_tcp:send(Sock, tag_trace_message(Bin)),
- receive_ack(Sock).
-
-
-receive_ack(Sock) ->
- receive
- {tcp,Sock,Bin} when is_binary(Bin) ->
- case unpack(Bin) of
- error -> receive_ack(Sock);
- {ok,_} -> ok
- end;
- _ ->
- receive_ack(Sock)
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% Stop trace node
-%%%
-stop_tracer_node(Sock) ->
- Bin = term_to_binary(id(stop)),
- ok = gen_tcp:send(Sock, tag_trace_message(Bin)),
- receive {tcp_closed,Sock} -> gen_tcp:close(Sock) end,
- ok.
-
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% trc([TraceFile,Nodes]) -> ok
-%%
-%% Start tracing on the given nodes
-%%
-%% This function executes on the new node
-%%
-trc([TraceFile, PortAtom, Type]) ->
- {Result,Patterns} =
- case file:consult(TraceFile) of
- {ok,TI} ->
- Pat = parse_trace_info(lists:flatten(TI)),
- {started,Pat};
- Error ->
- {Error,[]}
- end,
- Port = list_to_integer(atom_to_list(PortAtom)),
- case catch gen_tcp:connect("localhost", Port, [binary,
- {reuseaddr,true},
- {packet,2}]) of
- {ok,Sock} ->
- BinResult = term_to_binary(Result),
- ok = gen_tcp:send(Sock,tag_trace_message(BinResult)),
- trc_loop(Sock,Patterns,Type);
- _else ->
- ok
- end,
- erlang:halt().
-trc_loop(Sock,Patterns,Type) ->
- receive
- {tcp,Sock,Bin} ->
- case unpack(Bin) of
- error ->
- ttb:stop(),
- gen_tcp:close(Sock);
- {ok,{add_nodes,Nodes}} ->
- add_nodes(Nodes,Patterns,Type),
- Bin = term_to_binary(id(ok)),
- ok = gen_tcp:send(Sock, tag_trace_message(Bin)),
- trc_loop(Sock,Patterns,Type);
- {ok,stop} ->
- ttb:stop(),
- gen_tcp:close(Sock)
- end;
- {tcp_closed,Sock} ->
- ttb:stop(),
- gen_tcp:close(Sock)
- end.
-add_nodes(Nodes,Patterns,_Type) ->
- {ok, _} = ttb:tracer(Nodes,[{file,{local, test_server}},
- {handler, {{?MODULE,handle_debug},initial}}]),
- {ok, _} = ttb:p(all,[call,timestamp]),
- lists:foreach(fun({TP,M,F,A,Pat}) -> ttb:TP(M,F,A,Pat);
- ({CTP,M,F,A}) -> ttb:CTP(M,F,A)
- end,
- Patterns).
-
-parse_trace_info([{TP,M,Pat}|Pats]) when TP=:=tp; TP=:=tpl ->
- [{TP,M,'_','_',Pat}|parse_trace_info(Pats)];
-parse_trace_info([{TP,M,F,Pat}|Pats]) when TP=:=tp; TP=:=tpl ->
- [{TP,M,F,'_',Pat}|parse_trace_info(Pats)];
-parse_trace_info([{TP,M,F,A,Pat}|Pats]) when TP=:=tp; TP=:=tpl ->
- [{TP,M,F,A,Pat}|parse_trace_info(Pats)];
-parse_trace_info([CTP|Pats]) when CTP=:=ctp; CTP=:=ctpl; CTP=:=ctpg ->
- [{CTP,'_','_','_'}|parse_trace_info(Pats)];
-parse_trace_info([{CTP,M}|Pats]) when CTP=:=ctp; CTP=:=ctpl; CTP=:=ctpg ->
- [{CTP,M,'_','_'}|parse_trace_info(Pats)];
-parse_trace_info([{CTP,M,F}|Pats]) when CTP=:=ctp; CTP=:=ctpl; CTP=:=ctpg ->
- [{CTP,M,F,'_'}|parse_trace_info(Pats)];
-parse_trace_info([{CTP,M,F,A}|Pats]) when CTP=:=ctp; CTP=:=ctpl; CTP=:=ctpg ->
- [{CTP,M,F,A}|parse_trace_info(Pats)];
-parse_trace_info([]) ->
- [];
-parse_trace_info([_other|Pats]) -> % ignore
- parse_trace_info(Pats).
-
-handle_debug(Out,Trace,TI,initial) ->
- handle_debug(Out,Trace,TI,0);
-handle_debug(_Out,end_of_trace,_TI,N) ->
- N;
-handle_debug(Out,Trace,_TI,N) ->
- print_trc(Out,Trace,N),
- N+1.
-
-print_trc(Out,{trace_ts,P,call,{M,F,A},C,Ts},N) ->
- io:format(Out,
- "~w: ~s~n"
- "Process : ~w~n"
- "Call : ~w:~tw/~w~n"
- "Arguments : ~tp~n"
- "Caller : ~tw~n~n",
- [N,ts(Ts),P,M,F,length(A),A,C]);
-print_trc(Out,{trace_ts,P,call,{M,F,A},Ts},N) ->
- io:format(Out,
- "~w: ~s~n"
- "Process : ~w~n"
- "Call : ~w:~tw/~w~n"
- "Arguments : ~tp~n~n",
- [N,ts(Ts),P,M,F,length(A),A]);
-print_trc(Out,{trace_ts,P,return_from,{M,F,A},R,Ts},N) ->
- io:format(Out,
- "~w: ~s~n"
- "Process : ~w~n"
- "Return from : ~w:~tw/~w~n"
- "Return value : ~tp~n~n",
- [N,ts(Ts),P,M,F,A,R]);
-print_trc(Out,{drop,X},N) ->
- io:format(Out,
- "~w: Tracer dropped ~w messages - too busy~n~n",
- [N,X]);
-print_trc(Out,Trace,N) ->
- Ts = element(size(Trace),Trace),
- io:format(Out,
- "~w: ~s~n"
- "Trace : ~tp~n~n",
- [N,ts(Ts),Trace]).
-ts({_, _, Micro} = Now) ->
- {{Y,M,D},{H,Min,S}} = calendar:now_to_local_time(Now),
- io_lib:format("~4.4.0w-~2.2.0w-~2.2.0w ~2.2.0w:~2.2.0w:~2.2.0w,~6.6.0w",
- [Y,M,D,H,Min,S,Micro]).
-
-
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Start slave/peer nodes (initiated by test_server:start_node/5)
%%%
@@ -883,24 +672,3 @@ unpack(Bin) ->
_ -> error
end.
-id(I) -> I.
-
-print_data(Port) ->
- ct_util:mark_process(),
- receive
- {Port, {data, Bytes}} ->
- io:put_chars(Bytes),
- print_data(Port);
- {Port, eof} ->
- Port ! {self(), close},
- receive
- {Port, closed} ->
- true
- end,
- receive
- {'EXIT', Port, _} ->
- ok
- after 1 -> % force context switch
- ok
- end
- end.
diff --git a/lib/common_test/test_server/Makefile b/lib/common_test/test_server/Makefile
index f015064b39..b542524876 100644
--- a/lib/common_test/test_server/Makefile
+++ b/lib/common_test/test_server/Makefile
@@ -47,7 +47,7 @@ TS_TARGET_MODULES= $(TS_MODULES:%=$(EBIN)/%)
TS_ERL_FILES = $(TS_MODULES:=.erl)
TS_HRL_FILES = ts.hrl
-AUTOCONF_FILES = configure.in conf_vars.in
+AUTOCONF_FILES = conf_vars.in
PROGRAMS = configure config.sub config.guess install-sh
CONFIG = ts.config ts.unix.config ts.win32.config
@@ -72,9 +72,6 @@ clean:
docs:
-configure: configure.in
- autoconf configure.in > configure
-
# ----------------------------------------------------
# Special Build Targets
# ----------------------------------------------------
diff --git a/lib/common_test/test_server/configure b/lib/common_test/test_server/configure
index d190f0250b..38a17b2fab 100755
--- a/lib/common_test/test_server/configure
+++ b/lib/common_test/test_server/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,52 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +220,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +252,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +291,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +309,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +331,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +340,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +379,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +397,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +429,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +458,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +502,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +516,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +533,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,50 +605,46 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
ac_unique_file="conf_vars.in"
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
test_c_compiler
@@ -640,9 +666,6 @@ SHLIB_CFLAGS
SHLIB_LDLIBS
SHLIB_LDFLAGS
SHLIB_LD
-EGREP
-GREP
-CPP
DEBUG_FLAGS
OBJEXT
EXEEXT
@@ -713,8 +736,7 @@ CC
CFLAGS
LDFLAGS
LIBS
-CPPFLAGS
-CPP'
+CPPFLAGS'
# Initialize some variables set by options.
@@ -783,8 +805,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -825,9 +845,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -851,9 +871,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1064,9 +1084,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1080,9 +1100,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1126,9 +1146,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1144,7 +1164,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1208,7 +1228,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1350,7 +1370,6 @@ Some influential environment variables:
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1371,9 +1390,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1401,7 +1420,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1409,7 +1429,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1419,9 +1439,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1438,14 +1458,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1453,14 +1473,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1476,14 +1497,14 @@ fi
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1491,17 +1512,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1516,172 +1538,6 @@ fi
} # ac_fn_c_try_link
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
@@ -1689,26 +1545,28 @@ fi
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
@@ -1719,11 +1577,12 @@ $as_echo "$ac_res" >&6; }
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -1731,16 +1590,9 @@ else
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ which can conflict with char $2 (); below. */
+#include <limits.h>
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -1758,35 +1610,56 @@ choke me
#endif
int
-main ()
+main (void)
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -1819,8 +1692,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -1855,7 +1732,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -1890,11 +1767,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -1905,8 +1784,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -1930,7 +1809,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -1938,14 +1817,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -1953,15 +1832,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -1969,8 +1848,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -1984,63 +1863,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2050,19 +1914,434 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.."
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2073,12 +2352,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2087,24 +2366,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2114,11 +2393,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2132,55 +2412,32 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2199,21 +2456,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2233,6 +2491,15 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2241,11 +2508,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2253,11 +2521,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2268,11 +2540,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2281,11 +2553,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2293,11 +2566,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2308,11 +2585,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2320,8 +2597,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2334,11 +2611,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2346,11 +2624,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2361,11 +2643,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2374,11 +2656,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2387,15 +2670,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2411,18 +2698,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2433,11 +2720,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2445,11 +2733,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2460,11 +2752,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2477,11 +2769,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2489,11 +2782,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2504,11 +2801,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2520,34 +2817,138 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
fi
+else
+ CC="$ac_cv_prog_CC"
fi
fi
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -2557,7 +2958,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -2565,7 +2966,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -2577,9 +2978,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -2600,11 +3001,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -2621,7 +3023,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -2637,44 +3039,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2688,15 +3092,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -2705,7 +3109,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -2717,8 +3121,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -2726,10 +3130,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -2737,39 +3141,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -2783,11 +3188,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -2796,31 +3202,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -2830,29 +3237,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -2861,57 +3272,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -2926,94 +3340,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3030,7 +3494,8 @@ fi
# Check whether --enable-debug-mode was given.
-if test "${enable_debug_mode+set}" = set; then :
+if test ${enable_debug_mode+y}
+then :
enableval=$enable_debug_mode; case "$enableval" in
no) ;;
*) CFLAGS=$DEBUG_FLAGS ;;
@@ -3039,25 +3504,27 @@ fi
# Check whether --enable-m64-build was given.
-if test "${enable_m64_build+set}" = set; then :
+if test ${enable_m64_build+y}
+then :
enableval=$enable_m64_build; case "$enableval" in
no) enable_m64_build=no ;;
*) enable_m64_build=yes ;;
esac
-else
+else $as_nop
enable_m64_build=no
fi
# Check whether --enable-m32-build was given.
-if test "${enable_m32_build+set}" = set; then :
+if test ${enable_m32_build+y}
+then :
enableval=$enable_m32_build; case "$enableval" in
no) enable_m32_build=no ;;
*) enable_m32_build=yes ;;
esac
-else
+else $as_nop
enable_m32_build=no
fi
@@ -3074,11 +3541,12 @@ if test X${enable_m32_build} = Xyes; then
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
-$as_echo_n "checking for sin in -lm... " >&6; }
-if ${ac_cv_lib_m_sin+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
+printf %s "checking for sin in -lm... " >&6; }
+if test ${ac_cv_lib_m_sin+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3087,33 +3555,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char sin ();
int
-main ()
+main (void)
{
return sin ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_m_sin=yes
-else
+else $as_nop
ac_cv_lib_m_sin=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
-$as_echo "$ac_cv_lib_m_sin" >&6; }
-if test "x$ac_cv_lib_m_sin" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
+printf "%s\n" "$ac_cv_lib_m_sin" >&6; }
+if test "x$ac_cv_lib_m_sin" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h
LIBS="-lm $LIBS"
@@ -3125,11 +3590,12 @@ fi
# needs net/errno.h to define the socket-related error codes.
#--------------------------------------------------------------------
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5
-$as_echo_n "checking for main in -linet... " >&6; }
-if ${ac_cv_lib_inet_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5
+printf %s "checking for main in -linet... " >&6; }
+if test ${ac_cv_lib_inet_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-linet $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3137,446 +3603,80 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_inet_main=yes
-else
+else $as_nop
ac_cv_lib_inet_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5
-$as_echo "$ac_cv_lib_inet_main" >&6; }
-if test "x$ac_cv_lib_inet_main" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5
+printf "%s\n" "$ac_cv_lib_inet_main" >&6; }
+if test "x$ac_cv_lib_inet_main" = xyes
+then :
LIBS="$LIBS -linet"
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
+done
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-fi
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
fi
-
-done
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default"
-if test "x$ac_cv_header_net_errno_h" = xyes; then :
- $as_echo "#define HAVE_NET_ERRNO_H 1" >>confdefs.h
+ac_fn_c_check_header_compile "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default"
+if test "x$ac_cv_header_net_errno_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NET_ERRNO_H 1" >>confdefs.h
fi
-
#--------------------------------------------------------------------
# Linux/tcp.h may be needed for sockopt test in kernel
#--------------------------------------------------------------------
-ac_fn_c_check_header_mongrel "$LINENO" "linux/tcp.h" "ac_cv_header_linux_tcp_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_tcp_h" = xyes; then :
- $as_echo "#define HAVE_LINUX_TCP_H 1" >>confdefs.h
+ac_fn_c_check_header_compile "$LINENO" "linux/tcp.h" "ac_cv_header_linux_tcp_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_tcp_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LINUX_TCP_H 1" >>confdefs.h
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sane linux/tcp.h" >&5
-$as_echo_n "checking for sane linux/tcp.h... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sane linux/tcp.h" >&5
+printf %s "checking for sane linux/tcp.h... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -3591,29 +3691,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#include <netinet/in.h>
#include <netdb.h>
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
have_sane_linux_tcp_h=yes
-else
+else $as_nop
have_sane_linux_tcp_h=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test $have_sane_linux_tcp_h = yes; then
-$as_echo "#define HAVE_SANE_LINUX_TCP_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SANE_LINUX_TCP_H 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3621,26 +3722,26 @@ fi
#--------------------------------------------------------------------
# Linux requires sys/socketio.h instead of sys/sockio.h
#--------------------------------------------------------------------
-ac_fn_c_check_header_mongrel "$LINENO" "sys/socketio.h" "ac_cv_header_sys_socketio_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_socketio_h" = xyes; then :
- $as_echo "#define HAVE_SOCKETIO_H 1" >>confdefs.h
+ac_fn_c_check_header_compile "$LINENO" "sys/socketio.h" "ac_cv_header_sys_socketio_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socketio_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SOCKETIO_H 1" >>confdefs.h
fi
-
#--------------------------------------------------------------------
# Misc
#--------------------------------------------------------------------
-ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default"
-if test "x$ac_cv_header_poll_h" = xyes; then :
- $as_echo "#define HAVE_POLL_H 1" >>confdefs.h
+ac_fn_c_check_header_compile "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default"
+if test "x$ac_cv_header_poll_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_POLL_H 1" >>confdefs.h
fi
-
#--------------------------------------------------------------------
# The statements below define a collection of symbols related to
# dynamic loading and shared libraries:
@@ -3658,20 +3759,21 @@ fi
# Step 1: set the variable "system" to hold the name and version number
# for the system.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking system version (for dynamic loading)" >&5
-$as_echo_n "checking system version (for dynamic loading)... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking system version (for dynamic loading)" >&5
+printf %s "checking system version (for dynamic loading)... " >&6; }
system=`./config.sub $host`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $system" >&5
-$as_echo "$system" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $system" >&5
+printf "%s\n" "$system" >&6; }
# Step 2: check for existence of -ldl library. This is needed because
# Linux can use either -ldl or -ldld for dynamic loading.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3680,32 +3782,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char dlopen ();
int
-main ()
+main (void)
{
return dlopen ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_dl_dlopen=yes
-else
+else $as_nop
ac_cv_lib_dl_dlopen=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
have_dl=yes
-else
+else $as_nop
have_dl=no
fi
@@ -3714,8 +3815,9 @@ fi
SHLIB_LDLIBS=
fullSrcDir=`cd $srcdir; pwd`
-case $system in
- *-linux-*)
+case $system in #(
+ *-linux-*) :
+
SHLIB_CFLAGS="-fPIC"
SHLIB_SUFFIX=".so"
if test "$have_dl" = yes; then
@@ -3723,14 +3825,14 @@ case $system in
SHLIB_LDFLAGS="$LDFLAGS -shared"
LD_FLAGS="-rdynamic"
else
- ac_fn_c_check_header_mongrel "$LINENO" "dld.h" "ac_cv_header_dld_h" "$ac_includes_default"
-if test "x$ac_cv_header_dld_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "dld.h" "ac_cv_header_dld_h" "$ac_includes_default"
+if test "x$ac_cv_header_dld_h" = xyes
+then :
SHLIB_LD="ld"
SHLIB_LDFLAGS="-shared"
fi
-
if test X${enable_m64_build} = Xyes; then
as_fn_error $? "don't know how to link 64-bit dynamic drivers" "$LINENO" 5
fi
@@ -3739,11 +3841,13 @@ fi
fi
fi
SHLIB_EXTRACT_ALL=""
- ;;
- *-openbsd*|*-netbsd*|*-freebsd*|*-dragonfly*)
+ ;; #(
+ *-openbsd*|*-netbsd*|*-freebsd*|*-dragonfly*) :
+
# Not available on all versions: check for include file.
- ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
SHLIB_CFLAGS="-fpic"
SHLIB_LD="${CC}"
@@ -3756,7 +3860,7 @@ if test "x$ac_cv_header_dlfcn_h" = xyes; then :
as_fn_error $? "don't know how to link 32-bit dynamic drivers" "$LINENO" 5
fi
-else
+else $as_nop
# No dynamic loading.
SHLIB_CFLAGS=""
@@ -3767,10 +3871,10 @@ else
fi
-
SHLIB_EXTRACT_ALL=""
- ;;
- *-solaris2*|*-sysv4*)
+ ;; #(
+ *-solaris2*|*-sysv4*) :
+
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld"
SHLIB_LDFLAGS="$no_mXX_LDFLAGS -G -z text"
@@ -3782,15 +3886,17 @@ fi
fi
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL="-z allextract"
- ;;
- *darwin*)
+ ;; #(
+ *darwin*) :
+
SHLIB_CFLAGS="-fno-common"
SHLIB_LD="cc"
SHLIB_LDFLAGS="$LDFLAGS -bundle -flat_namespace -undefined suppress"
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL=""
- ;;
- *osf1*)
+ ;; #(
+ *osf1*) :
+
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld"
SHLIB_LDFLAGS="$LDFLAGS -shared"
@@ -3802,15 +3908,17 @@ fi
fi
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL=""
- ;;
- *osf5*)
+ ;; #(
+ *osf5*) :
+
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="${CC} -shared"
SHLIB_LDFLAGS="$LDFLAGS"
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL=""
- ;;
- *)
+ ;; #(
+ *) :
+
# No dynamic loading.
SHLIB_CFLAGS=""
SHLIB_LD="ld"
@@ -3819,7 +3927,7 @@ fi
SHLIB_SUFFIX=""
SHLIB_EXTRACT_ALL=""
as_fn_error $? "don't know how to compile and link dynamic drivers" "$LINENO" 5
- ;;
+ ;;
esac
# If we're running gcc, then change the C flags for compiling shared
@@ -3853,7 +3961,8 @@ EI_CFLAGS="$CFLAGS"
# Add thread-safety flags if requested
# Check whether --enable-shlib-thread-safety was given.
-if test "${enable_shlib_thread_safety+set}" = set; then :
+if test ${enable_shlib_thread_safety+y}
+then :
enableval=$enable_shlib_thread_safety; case "$enableval" in
no) ;;
*) SHLIB_CFLAGS="$SHLIB_CFLAGS -D_THREAD_SAFE -D_REENTRANT"
@@ -3895,18 +4004,22 @@ SHLIB_CFLAGS="$SHLIB_CFLAGS $CFLAGS"
erl_checkBoth=0
ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
+if test "x$ac_cv_func_connect" = xyes
+then :
erl_checkSocket=0
-else
+else $as_nop
erl_checkSocket=1
fi
-if test "$erl_checkSocket" = 1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lsocket" >&5
-$as_echo_n "checking for main in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "$erl_checkSocket" = 1
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lsocket" >&5
+printf %s "checking for main in -lsocket... " >&6; }
+if test ${ac_cv_lib_socket_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsocket $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3914,51 +4027,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_socket_main=yes
-else
+else $as_nop
ac_cv_lib_socket_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_main" >&5
-$as_echo "$ac_cv_lib_socket_main" >&6; }
-if test "x$ac_cv_lib_socket_main" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_main" >&5
+printf "%s\n" "$ac_cv_lib_socket_main" >&6; }
+if test "x$ac_cv_lib_socket_main" = xyes
+then :
LIBS="$LIBS -lsocket"
-else
+else $as_nop
erl_checkBoth=1
fi
+
fi
-if test "$erl_checkBoth" = 1; then
+if test "$erl_checkBoth" = 1
+then :
+
tk_oldLibs=$LIBS
LIBS="$LIBS -lsocket -lnsl"
ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept"
-if test "x$ac_cv_func_accept" = xyes; then :
+if test "x$ac_cv_func_accept" = xyes
+then :
erl_checkNsl=0
-else
+else $as_nop
LIBS=$tk_oldLibs
fi
+
fi
ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5
-$as_echo_n "checking for main in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "x$ac_cv_func_gethostbyname" = xyes
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5
+printf %s "checking for main in -lnsl... " >&6; }
+if test ${ac_cv_lib_nsl_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lnsl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3966,72 +4088,63 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_nsl_main=yes
-else
+else $as_nop
ac_cv_lib_nsl_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5
-$as_echo "$ac_cv_lib_nsl_main" >&6; }
-if test "x$ac_cv_lib_nsl_main" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5
+printf "%s\n" "$ac_cv_lib_nsl_main" >&6; }
+if test "x$ac_cv_lib_nsl_main" = xyes
+then :
LIBS="$LIBS -lnsl"
fi
fi
-for ac_func in strerror
-do :
- ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
-if test "x$ac_cv_func_strerror" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRERROR 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h
fi
-done
-for ac_func in vsnprintf
-do :
- ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
-if test "x$ac_cv_func_vsnprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VSNPRINTF 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
+if test "x$ac_cv_func_vsnprintf" = xyes
+then :
+ printf "%s\n" "#define HAVE_VSNPRINTF 1" >>confdefs.h
fi
-done
-for ac_func in usleep
-do :
- ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
-if test "x$ac_cv_func_usleep" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_USLEEP 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
+if test "x$ac_cv_func_usleep" = xyes
+then :
+ printf "%s\n" "#define HAVE_USLEEP 1" >>confdefs.h
fi
-done
# First check if the library is available, then if we can choose between
# two versions of gethostbyname
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lresolv" >&5
-$as_echo_n "checking for main in -lresolv... " >&6; }
-if ${ac_cv_lib_resolv_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lresolv" >&5
+printf %s "checking for main in -lresolv... " >&6; }
+if test ${ac_cv_lib_resolv_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lresolv $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4039,39 +4152,40 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_resolv_main=yes
-else
+else $as_nop
ac_cv_lib_resolv_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_main" >&5
-$as_echo "$ac_cv_lib_resolv_main" >&6; }
-if test "x$ac_cv_lib_resolv_main" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBRESOLV 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_main" >&5
+printf "%s\n" "$ac_cv_lib_resolv_main" >&6; }
+if test "x$ac_cv_lib_resolv_main" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBRESOLV 1" >>confdefs.h
LIBS="-lresolv $LIBS"
fi
ac_cv_lib_resolv=ac_cv_lib_resolv_main
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_gethostbyname in -lresolv" >&5
-$as_echo_n "checking for res_gethostbyname in -lresolv... " >&6; }
-if ${ac_cv_lib_resolv_res_gethostbyname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for res_gethostbyname in -lresolv" >&5
+printf %s "checking for res_gethostbyname in -lresolv... " >&6; }
+if test ${ac_cv_lib_resolv_res_gethostbyname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lresolv $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4080,31 +4194,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char res_gethostbyname ();
int
-main ()
+main (void)
{
return res_gethostbyname ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_resolv_res_gethostbyname=yes
-else
+else $as_nop
ac_cv_lib_resolv_res_gethostbyname=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_gethostbyname" >&5
-$as_echo "$ac_cv_lib_resolv_res_gethostbyname" >&6; }
-if test "x$ac_cv_lib_resolv_res_gethostbyname" = xyes; then :
- $as_echo "#define HAVE_RES_GETHOSTBYNAME 1" >>confdefs.h
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_gethostbyname" >&5
+printf "%s\n" "$ac_cv_lib_resolv_res_gethostbyname" >&6; }
+if test "x$ac_cv_lib_resolv_res_gethostbyname" = xyes
+then :
+ printf "%s\n" "#define HAVE_RES_GETHOSTBYNAME 1" >>confdefs.h
fi
@@ -4113,37 +4226,38 @@ fi
# Check for isfinite
#--------------------------------------------------------------------
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for isfinite" >&5
-$as_echo_n "checking for isfinite... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for isfinite" >&5
+printf %s "checking for isfinite... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <math.h>
int
-main ()
+main (void)
{
isfinite(0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
have_isfinite=yes
-else
+else $as_nop
have_isfinite=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $have_isfinite = yes; then
- $as_echo "#define HAVE_ISFINITE 1" >>confdefs.h
+ printf "%s\n" "#define HAVE_ISFINITE 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- $as_echo "#define HAVE_FINITE 1" >>confdefs.h
+ printf "%s\n" "#define HAVE_FINITE 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
#--------------------------------------------------------------------
@@ -4225,11 +4339,12 @@ for ac_prog in javac guavac gcj jikes bock
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_JAVAC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_JAVAC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$JAVAC"; then
ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
else
@@ -4237,11 +4352,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_JAVAC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4252,23 +4371,26 @@ fi
fi
JAVAC=$ac_cv_prog_JAVAC
if test -n "$JAVAC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
-$as_echo "$JAVAC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+printf "%s\n" "$JAVAC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
test -n "$JAVAC" && break
done
-if test -n "$JAVAC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JDK version 1.5" >&5
-$as_echo_n "checking for JDK version 1.5... " >&6; }
-if ${ac_cv_prog_javac_ver_1_5+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test -n "$JAVAC"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for JDK version 1.5" >&5
+printf %s "checking for JDK version 1.5... " >&6; }
+if test ${ac_cv_prog_javac_ver_1_5+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
java_link='$JAVAC conftest.java 1>&5'
cat > conftest.java <<EOF
@@ -4279,24 +4401,30 @@ EOF
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$java_link\""; } >&5
(eval $java_link) 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s conftest.class; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest.class
+then :
+
rm -rf conftest*
ac_cv_prog_javac_ver_1_5=yes
-else
+
+else $as_nop
+
echo "configure: failed program was:" 1>&5
cat conftest.java 1>&5
echo "configure: PATH was $PATH" 1>&5
rm -rf conftest*
ac_cv_prog_javac_ver_1_5=no
+
fi
rm -f conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_ver_1_5" >&5
-$as_echo "$ac_cv_prog_javac_ver_1_5" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_ver_1_5" >&5
+printf "%s\n" "$ac_cv_prog_javac_ver_1_5" >&6; }
if test $ac_cv_prog_javac_ver_1_5 = no; then
unset -v JAVAC
fi
+
fi
if test -n "$JAVAC"; then
@@ -4307,11 +4435,12 @@ for ac_prog in make gmake
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_make_command+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_make_command+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$make_command"; then
ac_cv_prog_make_command="$make_command" # Let the user override the test.
else
@@ -4319,11 +4448,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_make_command="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4334,11 +4467,11 @@ fi
fi
make_command=$ac_cv_prog_make_command
if test -n "$make_command"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $make_command" >&5
-$as_echo "$make_command" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $make_command" >&5
+printf "%s\n" "$make_command" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4384,8 +4517,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -4415,15 +4548,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -4437,8 +4570,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -4491,7 +4624,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -4507,8 +4640,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -4531,14 +4664,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -4548,46 +4683,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -4596,13 +4731,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -4611,8 +4739,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -4624,30 +4756,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -4660,13 +4772,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -4693,18 +4806,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -4716,12 +4831,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -4752,7 +4868,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -4774,6 +4890,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -4787,6 +4907,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -4828,7 +4954,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -4837,7 +4963,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -4900,7 +5026,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -4949,14 +5075,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -4993,21 +5121,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -5035,7 +5163,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -5049,7 +5177,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -5074,7 +5202,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -5302,7 +5430,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -5310,17 +5438,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -5337,7 +5465,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -5361,9 +5489,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -5416,8 +5544,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -5459,9 +5587,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -5508,7 +5636,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/lib/common_test/test_server/configure.in b/lib/common_test/test_server/configure.ac
index d58b4fc51b..8051614e99 100644
--- a/lib/common_test/test_server/configure.in
+++ b/lib/common_test/test_server/configure.ac
@@ -19,7 +19,9 @@ dnl
dnl %CopyrightEnd%
dnl
-AC_INIT(conf_vars.in)
+AC_INIT
+AC_CONFIG_SRCDIR([conf_vars.in])
+AC_PREREQ([2.71])
AC_CANONICAL_HOST
@@ -84,7 +86,7 @@ AC_CHECK_HEADER(net/errno.h, AC_DEFINE(HAVE_NET_ERRNO_H))
AC_CHECK_HEADER(linux/tcp.h, AC_DEFINE(HAVE_LINUX_TCP_H))
AC_MSG_CHECKING(for sane linux/tcp.h)
-AC_TRY_COMPILE([#include <stdio.h>
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@@ -94,10 +96,7 @@ AC_TRY_COMPILE([#include <stdio.h>
#include <sys/wait.h>
#include <linux/tcp.h>
#include <netinet/in.h>
- #include <netdb.h>],
- [return 0;],
- have_sane_linux_tcp_h=yes,
- have_sane_linux_tcp_h=no)
+ #include <netdb.h>]], [[return 0;]])],[have_sane_linux_tcp_h=yes],[have_sane_linux_tcp_h=no])
if test $have_sane_linux_tcp_h = yes; then
AC_DEFINE(HAVE_SANE_LINUX_TCP_H,[1],
@@ -150,8 +149,10 @@ AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
SHLIB_LDLIBS=
fullSrcDir=`cd $srcdir; pwd`
-case $system in
- *-linux-*)
+AS_CASE([$system],
+
+ [*-linux-*],
+ [
SHLIB_CFLAGS="-fPIC"
SHLIB_SUFFIX=".so"
if test "$have_dl" = yes; then
@@ -170,8 +171,10 @@ case $system in
fi
fi
SHLIB_EXTRACT_ALL=""
- ;;
- *-openbsd*|*-netbsd*|*-freebsd*|*-dragonfly*)
+ ],
+
+ [*-openbsd*|*-netbsd*|*-freebsd*|*-dragonfly*],
+ [
# Not available on all versions: check for include file.
AC_CHECK_HEADER(dlfcn.h, [
SHLIB_CFLAGS="-fpic"
@@ -193,8 +196,10 @@ case $system in
AC_MSG_ERROR(don't know how to compile and link dynamic drivers)
])
SHLIB_EXTRACT_ALL=""
- ;;
- *-solaris2*|*-sysv4*)
+ ],
+
+ [*-solaris2*|*-sysv4*],
+ [
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld"
SHLIB_LDFLAGS="$no_mXX_LDFLAGS -G -z text"
@@ -206,15 +211,19 @@ case $system in
fi
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL="-z allextract"
- ;;
- *darwin*)
+ ],
+
+ [*darwin*],
+ [
SHLIB_CFLAGS="-fno-common"
SHLIB_LD="cc"
SHLIB_LDFLAGS="$LDFLAGS -bundle -flat_namespace -undefined suppress"
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL=""
- ;;
- *osf1*)
+ ],
+
+ [*osf1*],
+ [
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld"
SHLIB_LDFLAGS="$LDFLAGS -shared"
@@ -226,15 +235,18 @@ case $system in
fi
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL=""
- ;;
- *osf5*)
+ ],
+
+ [*osf5*],
+ [
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="${CC} -shared"
SHLIB_LDFLAGS="$LDFLAGS"
SHLIB_SUFFIX=".so"
SHLIB_EXTRACT_ALL=""
- ;;
- *)
+ ],
+
+ [
# No dynamic loading.
SHLIB_CFLAGS=""
SHLIB_LD="ld"
@@ -243,8 +255,7 @@ case $system in
SHLIB_SUFFIX=""
SHLIB_EXTRACT_ALL=""
AC_MSG_ERROR(don't know how to compile and link dynamic drivers)
- ;;
-esac
+ ])
# If we're running gcc, then change the C flags for compiling shared
# libraries to the right flags for gcc, instead of those for the
@@ -317,14 +328,16 @@ AC_SUBST(EI_CFLAGS)
erl_checkBoth=0
AC_CHECK_FUNC(connect, erl_checkSocket=0, erl_checkSocket=1)
-if test "$erl_checkSocket" = 1; then
+AS_IF([test "$erl_checkSocket" = 1],
+ [
AC_CHECK_LIB(socket, main, LIBS="$LIBS -lsocket", erl_checkBoth=1)
-fi
-if test "$erl_checkBoth" = 1; then
+ ])
+AS_IF([test "$erl_checkBoth" = 1],
+ [
tk_oldLibs=$LIBS
LIBS="$LIBS -lsocket -lnsl"
AC_CHECK_FUNC(accept, erl_checkNsl=0, [LIBS=$tk_oldLibs])
-fi
+ ])
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"]))
dnl Checks for library functions.
@@ -334,7 +347,8 @@ AC_CHECK_FUNCS(usleep)
# First check if the library is available, then if we can choose between
# two versions of gethostbyname
-AC_HAVE_LIBRARY(resolv)
+AC_CHECK_LIB([resolv],[main],[],[],[])ac_cv_lib_resolv=ac_cv_lib_resolv_main
+
AC_CHECK_LIB(resolv, res_gethostbyname,[AC_DEFINE(HAVE_RES_GETHOSTBYNAME,1)])
#--------------------------------------------------------------------
@@ -342,8 +356,7 @@ AC_CHECK_LIB(resolv, res_gethostbyname,[AC_DEFINE(HAVE_RES_GETHOSTBYNAME,1)])
#--------------------------------------------------------------------
AC_MSG_CHECKING([for isfinite])
-AC_TRY_LINK([#include <math.h>],
- [isfinite(0);], have_isfinite=yes, have_isfinite=no)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[isfinite(0);]])],[have_isfinite=yes],[have_isfinite=no])
if test $have_isfinite = yes; then
AC_DEFINE(HAVE_ISFINITE,1)
@@ -438,10 +451,10 @@ SSLEAY_ROOT=$TARGET
#
dnl ERL_TRY_LINK_JAVA(CLASSES, FUNCTION-BODY
dnl [ACTION_IF_FOUND [, ACTION-IF-NOT-FOUND]])
-dnl Freely inspired by AC_TRY_LINK. (Maybe better to create a
+dnl Freely inspired by AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]). (Maybe better to create a
dnl AC_LANG_JAVA instead...)
AC_DEFUN(ERL_TRY_LINK_JAVA,
-[java_link='$JAVAC conftest.java 1>&AC_FD_CC'
+[java_link='$JAVAC conftest.java 1>&AS_MESSAGE_LOG_FD'
changequote(, )dnl
cat > conftest.java <<EOF
$1
@@ -450,21 +463,24 @@ class conftest { public static void main(String[] args) {
; return; }}
EOF
changequote([, ])dnl
-if AC_TRY_EVAL(java_link) && test -s conftest.class; then
+AS_IF([AC_TRY_EVAL(java_link) && test -s conftest.class],
+ [
ifelse([$3], , :, [rm -rf conftest*
$3])
-else
- echo "configure: failed program was:" 1>&AC_FD_CC
- cat conftest.java 1>&AC_FD_CC
- echo "configure: PATH was $PATH" 1>&AC_FD_CC
+ ],
+ [
+ echo "configure: failed program was:" 1>&AS_MESSAGE_LOG_FD
+ cat conftest.java 1>&AS_MESSAGE_LOG_FD
+ echo "configure: PATH was $PATH" 1>&AS_MESSAGE_LOG_FD
ifelse([$4], , , [ rm -rf conftest*
$4
])dnl
-fi
+ ])
rm -f conftest*])
dnl
AC_CHECK_PROGS(JAVAC, javac guavac gcj jikes bock)
-if test -n "$JAVAC"; then
+AS_IF([test -n "$JAVAC"],
+ [
dnl Make sure it's at least JDK 1.5
AC_CACHE_CHECK(for JDK version 1.5,
ac_cv_prog_javac_ver_1_5,
@@ -473,7 +489,7 @@ if test -n "$JAVAC"; then
if test $ac_cv_prog_javac_ver_1_5 = no; then
unset -v JAVAC
fi
-fi
+ ])
if test -n "$JAVAC"; then
AC_SUBST(JAVAC)
:
@@ -489,4 +505,5 @@ else
fi
AC_SUBST(test_c_compiler)
-AC_OUTPUT(conf_vars)
+AC_CONFIG_FILES([conf_vars])
+AC_OUTPUT
diff --git a/lib/common_test/test_server/ts_install.erl b/lib/common_test/test_server/ts_install.erl
index 87c2664af6..5fdfa2ec0d 100644
--- a/lib/common_test/test_server/ts_install.erl
+++ b/lib/common_test/test_server/ts_install.erl
@@ -183,7 +183,7 @@ get_xcomp_flag(Flag, Flags) ->
get_xcomp_flag(Flag, Tag, Flags) ->
case proplists:get_value(Flag,Flags) of
undefined -> "";
- "guess" -> [" --",Tag,"=",os:cmd("$ERL_TOP/erts/autoconf/config.guess")];
+ "guess" -> [" --",Tag,"=",os:cmd("$ERL_TOP/make/autoconf/config.guess")];
HostVal -> [" --",Tag,"=",HostVal]
end.
diff --git a/lib/compiler/internal_doc/beam_ssa.md b/lib/compiler/internal_doc/beam_ssa.md
index 29ad019194..d32431ecff 100644
--- a/lib/compiler/internal_doc/beam_ssa.md
+++ b/lib/compiler/internal_doc/beam_ssa.md
@@ -1,6 +1,113 @@
Invariants on the Structure and Format of BEAM SSA
==================================================
+Exception Handling
+------------------
+
+The translation of a `try`-`catch` expression into BEAM SSA has the
+following structure:
+
+ @tag = new_try_tag `try`
+ br @tag, ^protected_block0, ^landing_pad_block
+
+ protected_block0:
+ @success0 = ... % Something that could raise an exception
+ br @success0, ^protected_block1, ^landing_pad_block
+
+ ...
+
+ protected_blockN:
+ % The end of the protected code
+ @ignored0 = kill_try_tag @tag
+ br ^after_try_catch
+
+ landing_pad_block:
+ @aggregate = landingpad try, @tag
+ @class = extract @aggregate, `0` % The error class
+ @reason = extract @aggregate, `1` % The reason
+ @stk = extract @aggregate, `2` % The stack trace
+ @ignored1 = kill_try_tag @tag
+ %% Pattern matching on @class, @reason, and @stk is done here
+ %% to send control to the appropriate catch clause
+ br ^after_try_catch
+
+ after_try_catch:
+ % Normal execution continues
+
+The following invariants must hold for the SSA:
+
+ * All code that can cause an exception in one of the protected blocks
+ must have explicit control flow edges to the landing pad block. If
+ there are no edges to the landing pad block except from the block
+ containing the `new_try_tag`, the compiler will remove the
+ redundant exception handler.
+ * The extraction of the class, reason and stack trace from the result
+ of the `landingpad` instruction must be done in that
+ order. Omitting the extraction of elements which are unused is
+ allowed.
+ * Both the landing pad block and the final protected block must end
+ with a `kill_try_tag` instruction. Trying to share the
+ `kill_try_tag` epilogue between the last protected block and the
+ landing pad is unlikely to work.
+
+The translation of an old-style `catch` expression into BEAM SSA has
+the following structure:
+
+ @tag = new_try_tag `try`
+ br @tag, ^protected_block0, ^landing_pad_block
+
+ protected_block0:
+ @success0 = ... % Something that could raise an exception
+ br @success0, ^protected_block1, ^landing_pad_block
+
+ ...
+
+ protected_blockN:
+ % The end of the protected code
+ @successful_result = .... % The result of a successful computation
+ br ^common_end_of_catch
+
+ landing_pad_block:
+ @aggregate = landingpad catch, @tag
+ @catched_val = extract @ssa_agg, `0`
+ br ^common_end_of_catch
+
+ common_end_of_catch:
+ @tmp = phi { @catched_val, ^landing_pad_block },
+ { @successful_result, ^protected_blockN }
+ @result_of_catch_expr = catch_end @tag, @tmp
+
+Just as for a `try`-`catch` expression all code that can cause an
+exception in one of the protected blocks must have explicit control
+flow edges to the landing pad block.
+
+Exception Re-issuing
+--------------------
+
+A typical user-written `try`-`catch` expression will catch a subset of
+all possible exception classes and reasons and leave unhandled
+exceptions to a handler further up the call stack. Re-issuing an
+exception is done with the `resume` instruction. The `resume` must
+come after the `kill_try_tag` instruction in the program flow. For
+example, if the [example in the Exception Handling Section](#exception-handling)
+was to only handle user `throws`, the relevant blocks would look like this:
+
+ landing_pad_block:
+ @aggregate = landingpad `try`, @tag
+ @class = extract @aggregate, `0` % The error class
+ @reason = extract @aggregate, `1` % The reason
+ @stk = extract @aggregate, `2` % The stack trace
+ @ignored1 = kill_try_tag @tag
+ @is_throw = bif:'=:=' @class, `throw`
+ br @is_throw ^first_block_of_throw_handler, ^reissue
+
+ first_block_of_throw_handler:
+ %% Handle the user-defined throw
+
+ reissue:
+ @tmp = resume @stk, @reason
+ ret @tmp
+
Function Calls
--------------
diff --git a/lib/compiler/src/Makefile b/lib/compiler/src/Makefile
index f195e16dc6..24414fef77 100644
--- a/lib/compiler/src/Makefile
+++ b/lib/compiler/src/Makefile
@@ -58,7 +58,6 @@ MODULES = \
beam_jump \
beam_listing \
beam_opcodes \
- beam_peep \
beam_ssa \
beam_ssa_bc_size \
beam_ssa_bool \
diff --git a/lib/compiler/src/beam_asm.erl b/lib/compiler/src/beam_asm.erl
index d9de7031a0..7d1cf90c8e 100644
--- a/lib/compiler/src/beam_asm.erl
+++ b/lib/compiler/src/beam_asm.erl
@@ -142,9 +142,8 @@ build_file(Code, Attr, Dict, NumLabels, NumFuncs, ExtraChunks, CompileInfo, Comp
Code),
%% Create the atom table chunk.
- AtomEncoding = atom_encoding(CompilerOpts),
- {NumAtoms, AtomTab} = beam_dict:atom_table(Dict, AtomEncoding),
- AtomChunk = chunk(atom_chunk_name(AtomEncoding), <<NumAtoms:32>>, AtomTab),
+ {NumAtoms, AtomTab} = beam_dict:atom_table(Dict),
+ AtomChunk = chunk(<<"AtU8">>, <<NumAtoms:32>>, AtomTab),
%% Create the import table chunk.
@@ -220,15 +219,6 @@ build_file(Code, Attr, Dict, NumLabels, NumFuncs, ExtraChunks, CompileInfo, Comp
end,
build_form(<<"BEAM">>, Chunks).
-atom_encoding(Opts) ->
- case proplists:get_bool(no_utf8_atoms, Opts) of
- false -> utf8;
- true -> latin1
- end.
-
-atom_chunk_name(utf8) -> <<"AtU8">>;
-atom_chunk_name(latin1) -> <<"Atom">>.
-
%% finalize_fun_table(Essentials, MD5) -> FinalizedEssentials
%% Update the 'old_uniq' field in the entry for each fun in the
%% 'FunT' chunk. We'll use part of the MD5 for the module as a
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl
index e8d024b20b..bcbb03bf31 100644
--- a/lib/compiler/src/beam_block.erl
+++ b/lib/compiler/src/beam_block.erl
@@ -22,7 +22,8 @@
-module(beam_block).
-export([module/2]).
--import(lists, [keysort/2,reverse/1,reverse/2,splitwith/2]).
+-import(lists, [keysort/2,member/2,reverse/1,reverse/2,
+ splitwith/2,usort/1]).
-spec module(beam_utils:module_code(), [compile:option()]) ->
{'ok',beam_utils:module_code()}.
@@ -35,7 +36,8 @@ function({function,Name,Arity,CLabel,Is0}) ->
try
Is1 = swap_opt(Is0),
Is2 = blockify(Is1),
- Is = embed_lines(Is2),
+ Is3 = embed_lines(Is2),
+ Is = opt_maps(Is3),
{function,Name,Arity,CLabel,Is}
catch
Class:Error:Stack ->
@@ -152,8 +154,6 @@ collect({bif,N,{f,0},As,D}) -> {set,[D],As,{bif,N,{f,0}}};
collect({gc_bif,N,{f,0},R,As,D}) -> {set,[D],As,{alloc,R,{gc_bif,N,{f,0}}}};
collect({move,S,D}) -> {set,[D],[S],move};
collect({put_list,S1,S2,D}) -> {set,[D],[S1,S2],put_list};
-collect({put_tuple,A,D}) -> {set,[D],[],{put_tuple,A}};
-collect({put,S}) -> {set,[],[S],put};
collect({put_tuple2,D,{list,Els}}) -> {set,[D],Els,put_tuple2};
collect({get_tuple_element,S,I,D}) -> {set,[D],[S],{get_tuple_element,I}};
collect({set_tuple_element,S,D,I}) -> {set,[],[S,D],{set_tuple_element,I}};
@@ -216,3 +216,68 @@ sort_on_yreg([{set,[Dst],[Src],move}|_]=Moves) ->
{{x,_},{y,_}} ->
keysort(3, Moves)
end.
+
+%%%
+%%% Coalesce adjacent get_map_elements and has_map_fields instructions.
+%%%
+
+opt_maps(Is) ->
+ opt_maps(Is, []).
+
+opt_maps([{get_map_elements,Fail,Src,List}=I|Is], Acc0) ->
+ case simplify_get_map_elements(Fail, Src, List, Acc0) of
+ {ok,Acc} ->
+ opt_maps(Is, Acc);
+ error ->
+ opt_maps(Is, [I|Acc0])
+ end;
+opt_maps([{test,has_map_fields,Fail,Ops}=I|Is], Acc0) ->
+ case simplify_has_map_fields(Fail, Ops, Acc0) of
+ {ok,Acc} ->
+ opt_maps(Is, Acc);
+ error ->
+ opt_maps(Is, [I|Acc0])
+ end;
+opt_maps([I|Is], Acc) ->
+ opt_maps(Is, [I|Acc]);
+opt_maps([], Acc) -> reverse(Acc).
+
+simplify_get_map_elements(Fail, Src, {list,[Key,Dst]},
+ [{get_map_elements,Fail,Src,{list,List1}}|Acc]) ->
+ case are_keys_literals([Key]) andalso are_keys_literals(List1) andalso
+ not is_source_overwritten(Src, List1) of
+ true ->
+ case member(Key, List1) of
+ true ->
+ %% The key is already in the other list. That is
+ %% very unusual, because there are optimizations to get
+ %% rid of duplicate keys. Therefore, don't try to
+ %% do anything smart here; just keep the
+ %% get_map_elements instructions separate.
+ error;
+ false ->
+ List = [Key,Dst|List1],
+ {ok,[{get_map_elements,Fail,Src,{list,List}}|Acc]}
+ end;
+ false ->
+ error
+ end;
+simplify_get_map_elements(_, _, _, _) -> error.
+
+simplify_has_map_fields(Fail, [Src|Keys0],
+ [{test,has_map_fields,Fail,[Src|Keys1]}|Acc]) ->
+ case are_keys_literals(Keys0) andalso are_keys_literals(Keys1) of
+ true ->
+ Keys = usort(Keys0 ++ Keys1),
+ {ok,[{test,has_map_fields,Fail,[Src|Keys]}|Acc]};
+ false ->
+ error
+ end;
+simplify_has_map_fields(_, _, _) -> error.
+
+are_keys_literals([{x,_}|_]) -> false;
+are_keys_literals([{y,_}|_]) -> false;
+are_keys_literals([_|_]) -> true.
+
+is_source_overwritten(Src, [_Key,Src]) -> true;
+is_source_overwritten(_, _) -> false.
diff --git a/lib/compiler/src/beam_clean.erl b/lib/compiler/src/beam_clean.erl
index 643cc1c386..e771818d10 100644
--- a/lib/compiler/src/beam_clean.erl
+++ b/lib/compiler/src/beam_clean.erl
@@ -22,7 +22,6 @@
-module(beam_clean).
-export([module/2]).
--export([clean_labels/1]).
-spec module(beam_utils:module_code(), [compile:option()]) ->
{'ok',beam_utils:module_code()}.
@@ -98,9 +97,6 @@ add_to_work_list(F, {Fs,Used}=Sets) ->
lc :: non_neg_integer() %Label counter
}).
--spec clean_labels([beam_utils:instruction()]) ->
- {[beam_utils:instruction()],pos_integer()}.
-
clean_labels(Fs0) ->
St0 = #st{lmap=[],entry=1,lc=1},
{Fs1,#st{lmap=Lmap0,lc=Lc}} = function_renumber(Fs0, St0, []),
diff --git a/lib/compiler/src/beam_dict.erl b/lib/compiler/src/beam_dict.erl
index b32c15a270..43a8ea4fb1 100644
--- a/lib/compiler/src/beam_dict.erl
+++ b/lib/compiler/src/beam_dict.erl
@@ -24,7 +24,7 @@
-export([new/0,opcode/2,highest_opcode/1,
atom/2,local/4,export/4,import/4,
string/2,lambda/3,literal/2,line/2,fname/2,
- atom_table/2,local_table/1,export_table/1,import_table/1,
+ atom_table/1,local_table/1,export_table/1,import_table/1,
string_table/1,lambda_table/1,literal_table/1,
line_table/1]).
@@ -227,26 +227,26 @@ fname(Name, #asm{fnames=Fnames}=Dict) ->
%% Returns the atom table.
%% atom_table(Dict, Encoding) -> {LastIndex,[Length,AtomString...]}
--spec atom_table(bdict(), latin1 | utf8) -> {non_neg_integer(), [[non_neg_integer(),...]]}.
+-spec atom_table(bdict()) -> {non_neg_integer(), [[non_neg_integer(),...]]}.
-atom_table(#asm{atoms=Atoms}, Encoding) ->
+atom_table(#asm{atoms=Atoms}) ->
NumAtoms = maps:size(Atoms),
Sorted = lists:keysort(2, maps:to_list(Atoms)),
{NumAtoms,[begin
- L = atom_to_binary(A, Encoding),
+ L = atom_to_binary(A, utf8),
[byte_size(L),L]
end || {A,_} <- Sorted]}.
%% Returns the table of local functions.
%% local_table(Dict) -> {NumLocals, [{Function, Arity, Label}...]}
--spec local_table(bdict()) -> {non_neg_integer(), [{label(),arity(),label()}]}.
+-spec local_table(bdict()) -> {non_neg_integer(), [{index(),arity(),label()}]}.
local_table(#asm{locals = Locals}) ->
{length(Locals),Locals}.
%% Returns the export table.
%% export_table(Dict) -> {NumExports, [{Function, Arity, Label}...]}
--spec export_table(bdict()) -> {non_neg_integer(), [{label(),arity(),label()}]}.
+-spec export_table(bdict()) -> {non_neg_integer(), [{index(),arity(),label()}]}.
export_table(#asm{exports = Exports}) ->
{length(Exports),Exports}.
diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl
index ae2ca16218..172cf68d35 100644
--- a/lib/compiler/src/beam_flatten.erl
+++ b/lib/compiler/src/beam_flatten.erl
@@ -55,8 +55,6 @@ norm({set,[D],[S],fmove}) -> {fmove,S,D};
norm({set,[D],[S],fconv}) -> {fconv,S,D};
norm({set,[D],[S1,S2],put_list}) -> {put_list,S1,S2,D};
norm({set,[D],Els,put_tuple2}) -> {put_tuple2,D,{list,Els}};
-norm({set,[D],[],{put_tuple,A}}) -> {put_tuple,A,D};
-norm({set,[],[S],put}) -> {put,S};
norm({set,[D],[S],{get_tuple_element,I}}) -> {get_tuple_element,S,I,D};
norm({set,[],[S,D],{set_tuple_element,I}}) -> {set_tuple_element,S,D,I};
norm({set,[D],[S],get_hd}) -> {get_hd,S,D};
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index 6a10c25dbd..d060978a52 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -597,21 +597,9 @@ find_fixpoint(OptFun, Is0) ->
Is -> find_fixpoint(OptFun, Is)
end.
-opt([{test,_,{f,L}=Lbl,_}=I|[{jump,{f,L}}|_]=Is], Acc, St) ->
- %% We have
- %% Test Label Ops
- %% jump Label
- %% The test instruction is not needed if the test is pure
- %% (it modifies neither registers nor bit syntax state).
- case beam_utils:is_pure_test(I) of
- false ->
- %% Test is not pure; we must keep it.
- opt(Is, [I|Acc], label_used(Lbl, St));
- true ->
- %% The test is pure and its failure label is the same
- %% as in the jump that follows -- thus it is not needed.
- opt(Is, Acc, St)
- end;
+opt([{test,is_eq_exact,{f,L},_}|[{jump,{f,L}}|_]=Is], Acc, St) ->
+ %% The is_eq_exact test is not needed.
+ opt(Is, Acc, St);
opt([{test,Test0,{f,L}=Lbl,Ops}=I|[{jump,To}|Is]=Is0], Acc, St) ->
case is_label_defined(Is, L) of
false ->
@@ -629,6 +617,28 @@ opt([{test,_,{f,_}=Lbl,_}=I|Is], Acc, St) ->
opt(Is, [I|Acc], label_used(Lbl, St));
opt([{test,_,{f,_}=Lbl,_,_,_}=I|Is], Acc, St) ->
opt(Is, [I|Acc], label_used(Lbl, St));
+opt([{select,select_val,R,F,Vls0}|Is], Acc, St) ->
+ case prune_redundant_values(Vls0, F) of
+ [] ->
+ %% No values left. Must convert to plain jump.
+ I = {jump,F},
+ opt([I|Is], Acc, St);
+ [{atom,_}=Value,Lbl] ->
+ %% Single value left. Convert to regular test.
+ Is1 = [{test,is_eq_exact,F,[R,Value]},{jump,Lbl}|Is],
+ opt(Is1, Acc, St);
+ [{integer,_}=Value,Lbl] ->
+ %% Single value left. Convert to regular test.
+ Is1 = [{test,is_eq_exact,F,[R,Value]},{jump,Lbl}|Is],
+ opt(Is1, Acc, St);
+ [{atom,B1},Lbl,{atom,B2},Lbl] when B1 =:= not B2 ->
+ %% Replace with is_boolean test.
+ Is1 = [{test,is_boolean,F,[R]},{jump,Lbl}|Is],
+ opt(Is1, Acc, St);
+ [_|_]=Vls ->
+ I = {select,select_val,R,F,Vls},
+ skip_unreachable(Is, [I|Acc], label_used([F|Vls], St))
+ end;
opt([{select,_,_R,Fail,Vls}=I|Is], Acc, St) ->
skip_unreachable(Is, [I|Acc], label_used([Fail|Vls], St));
opt([{label,From}=I,{label,To}|Is], Acc, #st{replace=Replace}=St) ->
@@ -664,6 +674,12 @@ opt([], Acc, #st{replace=Replace0}) when Replace0 =/= #{} ->
opt([], Acc, #st{replace=Replace}) when Replace =:= #{} ->
reverse(Acc).
+prune_redundant_values([_Val,F|Vls], F) ->
+ prune_redundant_values(Vls, F);
+prune_redundant_values([Val,Lbl|Vls], F) ->
+ [Val,Lbl|prune_redundant_values(Vls, F)];
+prune_redundant_values([], _) -> [].
+
normalize_replace([{From,To0}|Rest], Replace, Acc) ->
case Replace of
#{To0 := To} ->
diff --git a/lib/compiler/src/beam_listing.erl b/lib/compiler/src/beam_listing.erl
index 6121593b11..dc3044bec4 100644
--- a/lib/compiler/src/beam_listing.erl
+++ b/lib/compiler/src/beam_listing.erl
@@ -26,7 +26,7 @@
-include("beam_ssa.hrl").
-include("beam_disasm.hrl").
--import(lists, [foreach/2]).
+-import(lists, [foldl/3, foreach/2]).
-type code() :: cerl:c_module()
| beam_utils:module_code()
@@ -55,18 +55,29 @@ module(Stream, {Mod,Exp,Attr,Code,NumLabels}) ->
io:format(Stream, "\n{exports, ~p}.\n", [Exp]),
io:format(Stream, "\n{attributes, ~p}.\n", [Attr]),
io:format(Stream, "\n{labels, ~p}.\n", [NumLabels]),
+ Lbl2Fun = foldl(fun({function,Name,Arity,Entry,_}, Map) ->
+ Map#{ Entry => {Name,Arity} }
+ end, #{}, Code),
foreach(
fun ({function,Name,Arity,Entry,Asm}) ->
io:format(Stream, "\n\n{function, ~w, ~w, ~w}.\n",
[Name, Arity, Entry]),
- io:put_chars(Stream, format_asm(Asm))
+ io:put_chars(Stream, format_asm(Asm, Lbl2Fun))
end, Code);
module(Stream, [_|_]=Fs) ->
%% Form-based abstract format.
foreach(fun (F) -> io:format(Stream, "~p.\n", [F]) end, Fs).
-format_asm([{label,L}|Is]) ->
- [io_lib:format(" {label,~p}.\n", [L])|format_asm(Is)];
-format_asm([I|Is]) ->
- [io_lib:format(" ~p", [I]),".\n"|format_asm(Is)];
-format_asm([]) -> [].
+format_asm([{label,L}|Is], Lbl2Fun) ->
+ [io_lib:format(" {label,~p}.\n", [L])|format_asm(Is, Lbl2Fun)];
+format_asm([I={Call,_,L}|Is], Lbl2Fun) when Call =:= call; Call =:= call_only ->
+ format_asm_call(L, I, Is, Lbl2Fun);
+format_asm([I={call_last,_,L,_}|Is], Lbl2Fun) ->
+ format_asm_call(L, I, Is, Lbl2Fun);
+format_asm([I|Is], Lbl2Fun) ->
+ [io_lib:format(" ~p", [I]),".\n"|format_asm(Is, Lbl2Fun)];
+format_asm([], _) -> [].
+
+format_asm_call({f,L}, I, Is, Lbl2Fun) ->
+ {N,A} = map_get(L, Lbl2Fun),
+ [io_lib:format(" ~p. % ~p/~p\n", [I, N, A])|format_asm(Is, Lbl2Fun)].
diff --git a/lib/compiler/src/beam_peep.erl b/lib/compiler/src/beam_peep.erl
deleted file mode 100644
index da59aea2bd..0000000000
--- a/lib/compiler/src/beam_peep.erl
+++ /dev/null
@@ -1,223 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2020. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(beam_peep).
-
--export([module/2]).
-
--import(lists, [reverse/1,member/2,usort/1]).
-
--spec module(beam_utils:module_code(), [compile:option()]) ->
- {'ok',beam_utils:module_code()}.
-
-module({Mod,Exp,Attr,Fs0,_}, _Opts) ->
- %% First coalesce adjacent labels.
- {Fs1,Lc} = beam_clean:clean_labels(Fs0),
-
- %% Do the peep hole optimizations.
- Fs = [function(F) || F <- Fs1],
- {ok,{Mod,Exp,Attr,Fs,Lc}}.
-
-function({function,Name,Arity,CLabel,Is0}) ->
- try
- Is1 = peep(Is0),
- Is = beam_jump:remove_unused_labels(Is1),
- {function,Name,Arity,CLabel,Is}
- catch
- Class:Error:Stack ->
- io:fwrite("Function: ~w/~w\n", [Name,Arity]),
- erlang:raise(Class, Error, Stack)
- end.
-
-
-%% Peep-hole optimizations suitable to perform when most of the
-%% optimations passes have been run.
-%%
-%% (1) In a sequence of tests, we can remove any test instruction
-%% that has been previously seen, because it will certainly
-%% succeed.
-%%
-%% For instance, in the following code sequence
-%%
-%% is_eq_exact _Fail SomeRegister SomeLiteral
-%% is_ne_exact _Fail SomeOtherRegister SomeOtherLiteral
-%% is_eq_exact _Fail SomeRegister SomeLiteral
-%% is_ne_exact _Fail SomeOtherRegister StillSomeOtherLiteral
-%%
-%% the third test is redundant. The code sequence will be produced
-%% by a combination of semicolon and command guards, such as
-%%
-%% InEncoding =:= latin1, OutEncoding =:= unicode;
-%% InEncoding =:= latin1, OutEncoding =:= utf8 ->
-%%
-
-peep(Is) ->
- peep(Is, gb_sets:empty(), []).
-
-peep([{bif,tuple_size,_,[_]=Ops,Dst}=I|Is], SeenTests0, Acc) ->
- %% Pretend that we have seen {test,is_tuple,_,Ops}.
- SeenTests1 = gb_sets:add({is_tuple,Ops}, SeenTests0),
- %% Kill all remembered tests that depend on the destination register.
- SeenTests = kill_seen(Dst, SeenTests1),
- peep(Is, SeenTests, [I|Acc]);
-peep([{bif,map_get,_,[Key,Map],Dst}=I|Is], SeenTests0, Acc) ->
- %% Pretend that we have seen {test,has_map_fields,_,[Map,Key]}
- SeenTests1 = gb_sets:add({has_map_fields,[Map,Key]}, SeenTests0),
- %% Kill all remembered tests that depend on the destination register.
- SeenTests = kill_seen(Dst, SeenTests1),
- peep(Is, SeenTests, [I|Acc]);
-peep([{bif,_,_,_,Dst}=I|Is], SeenTests0, Acc) ->
- %% Kill all remembered tests that depend on the destination register.
- SeenTests = kill_seen(Dst, SeenTests0),
- peep(Is, SeenTests, [I|Acc]);
-peep([{gc_bif,_,_,_,_,Dst}=I|Is], SeenTests0, Acc) ->
- %% Kill all remembered tests that depend on the destination register.
- SeenTests = kill_seen(Dst, SeenTests0),
- peep(Is, SeenTests, [I|Acc]);
-peep([{jump,{f,L}},{label,L}=I|Is], _, Acc) ->
- %% Sometimes beam_jump has missed this optimization.
- peep(Is, gb_sets:empty(), [I|Acc]);
-peep([{select,select_val,R,F,Vls0}|Is], SeenTests0, Acc0) ->
- case prune_redundant_values(Vls0, F) of
- [] ->
- %% No values left. Must convert to plain jump.
- I = {jump,F},
- peep([I|Is], gb_sets:empty(), Acc0);
- [{atom,_}=Value,Lbl] ->
- %% Single value left. Convert to regular test.
- Is1 = [{test,is_eq_exact,F,[R,Value]},{jump,Lbl}|Is],
- peep(Is1, SeenTests0, Acc0);
- [{integer,_}=Value,Lbl] ->
- %% Single value left. Convert to regular test.
- Is1 = [{test,is_eq_exact,F,[R,Value]},{jump,Lbl}|Is],
- peep(Is1, SeenTests0, Acc0);
- [{atom,B1},Lbl,{atom,B2},Lbl] when B1 =:= not B2 ->
- %% Replace with is_boolean test.
- Is1 = [{test,is_boolean,F,[R]},{jump,Lbl}|Is],
- peep(Is1, SeenTests0, Acc0);
- [_|_]=Vls ->
- I = {select,select_val,R,F,Vls},
- peep(Is, gb_sets:empty(), [I|Acc0])
- end;
-peep([{get_map_elements,Fail,Src,List}=I|Is], _SeenTests, Acc0) ->
- SeenTests = gb_sets:empty(),
- case simplify_get_map_elements(Fail, Src, List, Acc0) of
- {ok,Acc} ->
- peep(Is, SeenTests, Acc);
- error ->
- peep(Is, SeenTests, [I|Acc0])
- end;
-peep([{test,has_map_fields,Fail,Ops}=I|Is], SeenTests, Acc0) ->
- case simplify_has_map_fields(Fail, Ops, Acc0) of
- {ok,Acc} ->
- peep(Is, SeenTests, Acc);
- error ->
- peep(Is, SeenTests, [I|Acc0])
- end;
-peep([{test,Op,_,Ops}=I|Is], SeenTests0, Acc) ->
- case beam_utils:is_pure_test(I) of
- false ->
- %% Bit syntax matching, which may modify registers and/or
- %% match state. Clear all information about tests that
- %% has succeeded.
- peep(Is, gb_sets:empty(), [I|Acc]);
- true ->
- case is_test_redundant(Op, Ops, SeenTests0) of
- true ->
- %% This test or a similar test has already succeeded and
- %% is therefore redundant.
- peep(Is, SeenTests0, Acc);
- false ->
- %% Remember that we have seen this test.
- Test = {Op,Ops},
- SeenTests = gb_sets:insert(Test, SeenTests0),
- peep(Is, SeenTests, [I|Acc])
- end
- end;
-peep([I|Is], _, Acc) ->
- %% An unknown instruction. Throw away all information we
- %% have collected about test instructions.
- peep(Is, gb_sets:empty(), [I|Acc]);
-peep([], _, Acc) -> reverse(Acc).
-
-is_test_redundant(Op, Ops, Seen) ->
- gb_sets:is_element({Op,Ops}, Seen) orelse
- is_test_redundant_1(Op, Ops, Seen).
-
-is_test_redundant_1(is_boolean, [R], Seen) ->
- gb_sets:is_element({is_eq_exact,[R,{atom,false}]}, Seen) orelse
- gb_sets:is_element({is_eq_exact,[R,{atom,true}]}, Seen);
-is_test_redundant_1(_, _, _) -> false.
-
-kill_seen(Dst, Seen0) ->
- gb_sets:from_ordset(kill_seen_1(gb_sets:to_list(Seen0), Dst)).
-
-kill_seen_1([{_,Ops}=Test|T], Dst) ->
- case member(Dst, Ops) of
- true -> kill_seen_1(T, Dst);
- false -> [Test|kill_seen_1(T, Dst)]
- end;
-kill_seen_1([], _) -> [].
-
-prune_redundant_values([_Val,F|Vls], F) ->
- prune_redundant_values(Vls, F);
-prune_redundant_values([Val,Lbl|Vls], F) ->
- [Val,Lbl|prune_redundant_values(Vls, F)];
-prune_redundant_values([], _) -> [].
-
-simplify_get_map_elements(Fail, Src, {list,[Key,Dst]},
- [{get_map_elements,Fail,Src,{list,List1}}|Acc]) ->
- case are_keys_literals([Key]) andalso are_keys_literals(List1) andalso
- not is_source_overwritten(Src, List1) of
- true ->
- case member(Key, List1) of
- true ->
- %% The key is already in the other list. That is
- %% very unusual, because there are optimizations to get
- %% rid of duplicate keys. Therefore, don't try to
- %% do anything smart here; just keep the
- %% get_map_elements instructions separate.
- error;
- false ->
- List = [Key,Dst|List1],
- {ok,[{get_map_elements,Fail,Src,{list,List}}|Acc]}
- end;
- false ->
- error
- end;
-simplify_get_map_elements(_, _, _, _) -> error.
-
-simplify_has_map_fields(Fail, [Src|Keys0],
- [{test,has_map_fields,Fail,[Src|Keys1]}|Acc]) ->
- case are_keys_literals(Keys0) andalso are_keys_literals(Keys1) of
- true ->
- Keys = usort(Keys0 ++ Keys1),
- {ok,[{test,has_map_fields,Fail,[Src|Keys]}|Acc]};
- false ->
- error
- end;
-simplify_has_map_fields(_, _, _) -> error.
-
-are_keys_literals([{x,_}|_]) -> false;
-are_keys_literals([{y,_}|_]) -> false;
-are_keys_literals([_|_]) -> true.
-
-is_source_overwritten(Src, [_Key,Src]) -> true;
-is_source_overwritten(_, _) -> false.
diff --git a/lib/compiler/src/beam_ssa_codegen.erl b/lib/compiler/src/beam_ssa_codegen.erl
index e38a2265d5..c929b65aa3 100644
--- a/lib/compiler/src/beam_ssa_codegen.erl
+++ b/lib/compiler/src/beam_ssa_codegen.erl
@@ -342,8 +342,6 @@ add_heap_float(#need{f=F}=N) ->
classify_heap_need(put_list, _) ->
{put,2};
-classify_heap_need(put_tuple_arity, [#b_literal{val=Words}]) ->
- {put,Words+1};
classify_heap_need(put_tuple, Elements) ->
{put,length(Elements)+1};
classify_heap_need(make_fun, Args) ->
@@ -380,8 +378,6 @@ classify_heap_need(bs_init) -> gc;
classify_heap_need(bs_init_writable) -> gc;
classify_heap_need(bs_match_string) -> gc;
classify_heap_need(bs_put) -> neutral;
-classify_heap_need(bs_restore) -> neutral;
-classify_heap_need(bs_save) -> neutral;
classify_heap_need(bs_get_position) -> gc;
classify_heap_need(bs_set_position) -> neutral;
classify_heap_need(bs_skip) -> gc;
@@ -409,7 +405,6 @@ classify_heap_need(new_try_tag) -> gc;
classify_heap_need(old_make_fun) -> gc;
classify_heap_need(peek_message) -> gc;
classify_heap_need(put_map) -> gc;
-classify_heap_need(put_tuple_elements) -> neutral;
classify_heap_need(raw_raise) -> gc;
classify_heap_need(recv_marker_bind) -> neutral;
classify_heap_need(recv_marker_clear) -> neutral;
@@ -1137,23 +1132,15 @@ cg_block([#cg_set{op=bs_init,dst=Dst0,args=Args0,anno=Anno}=I,
Is = [Line,{bs_append,Fail,Bits,Alloc,Live,Unit,Src,Flags,Dst}],
{Is,St}
end;
-cg_block([#cg_set{anno=Anno,
- op=bs_start_match,
+cg_block([#cg_set{op=bs_start_match,
dst=Ctx0,
args=[#b_literal{val=new},Bin0]}=I,
#cg_set{op=succeeded,dst=Bool}], {Bool,Fail}, St) ->
[Dst,Bin1] = beam_args([Ctx0,Bin0], St),
{Bin,Pre} = force_reg(Bin1, Dst),
Live = get_live(I),
- %% num_slots is only set when using the old instructions.
- case maps:find(num_slots, Anno) of
- {ok, Slots} ->
- Is = Pre ++ [{test,bs_start_match2,Fail,Live,[Bin,Slots],Dst}],
- {Is,St};
- error ->
- Is = Pre ++ [{test,bs_start_match3,Fail,Live,[Bin],Dst}],
- {Is,St}
- end;
+ Is = Pre ++ [{test,bs_start_match3,Fail,Live,[Bin],Dst}],
+ {Is,St};
cg_block([#cg_set{op=bs_get}=Set,
#cg_set{op=succeeded,dst=Bool}], {Bool,Fail}, St) ->
{cg_bs_get(Fail, Set, St),St};
@@ -1209,9 +1196,19 @@ cg_block([#cg_set{op=Op,dst=Dst0,args=Args0}=I,
cg_block([#cg_set{op=bs_test_tail,dst=Bool,args=Args0}], {Bool,Fail}, St) ->
[Ctx,{integer,Bits}] = beam_args(Args0, St),
{[{test,bs_test_tail2,bif_fail(Fail),[Ctx,Bits]}],St};
-cg_block([#cg_set{op=is_tagged_tuple,dst=Bool,args=Args0}], {Bool,Fail}, St) ->
- [Src,{integer,Arity},Tag] = beam_args(Args0, St),
- {[{test,is_tagged_tuple,ensure_label(Fail, St),[Src,Arity,Tag]}],St};
+cg_block([#cg_set{op=is_tagged_tuple,anno=Anno,dst=Bool,args=Args0}], {Bool,Fail}, St) ->
+ case Anno of
+ #{constraints := arity} ->
+ [Src,{integer,Arity},_Tag] = beam_args(Args0, St),
+ {[{test,test_arity,ensure_label(Fail, St),[Src,Arity]}],St};
+ #{constraints := tuple_arity} ->
+ [Src,{integer,Arity},_Tag] = beam_args(Args0, St),
+ {[{test,is_tuple,ensure_label(Fail, St),[Src]},
+ {test,test_arity,ensure_label(Fail, St),[Src,Arity]}],St};
+ #{} ->
+ [Src,{integer,Arity},Tag] = beam_args(Args0, St),
+ {[{test,is_tagged_tuple,ensure_label(Fail, St),[Src,Arity,Tag]}],St}
+ end;
cg_block([#cg_set{op=is_nonempty_list,dst=Bool,args=Args0}], {Bool,Fail}, St) ->
Args = beam_args(Args0, St),
{[{test,is_nonempty_list,ensure_label(Fail, St),Args}],St};
@@ -1669,21 +1666,19 @@ cg_instr(bs_get_position, [Ctx], Dst, Set) ->
cg_instr(put_map, [{atom,assoc},SrcMap|Ss], Dst, Set) ->
Live = get_live(Set),
[{put_map_assoc,{f,0},SrcMap,Dst,Live,{list,Ss}}];
+cg_instr(is_nonempty_list, Ss, Dst, Set) ->
+ #cg_set{anno=#{was_bif_is_list := true}} = Set, %Assertion.
+
+ %% This instruction was a call to is_list/1, which was rewritten
+ %% to an is_nonempty_list test by beam_ssa_type. BEAM has no
+ %% is_nonempty_list instruction that will return a boolean, so
+ %% we must revert it to an is_list/1 call.
+ [{bif,is_list,{f,0},Ss,Dst}];
cg_instr(Op, Args, Dst, _Set) ->
cg_instr(Op, Args, Dst).
cg_instr(bs_init_writable, Args, Dst) ->
setup_args(Args) ++ [bs_init_writable|copy({x,0}, Dst)];
-cg_instr(bs_restore, [Ctx,Slot], _Dst) ->
- case Slot of
- {integer,N} ->
- [{bs_restore2,Ctx,N}];
- {atom,start} ->
- [{bs_restore2,Ctx,Slot}]
- end;
-cg_instr(bs_save, [Ctx,Slot], _Dst) ->
- {integer,N} = Slot,
- [{bs_save2,Ctx,N}];
cg_instr(bs_set_position, [Ctx,Pos], _Dst) ->
[{bs_set_position,Ctx,Pos}];
cg_instr(build_stacktrace, Args, Dst) ->
@@ -1708,10 +1703,6 @@ cg_instr(nop, [], _Dst) ->
[];
cg_instr(put_tuple, Elements, Dst) ->
[{put_tuple2,Dst,{list,Elements}}];
-cg_instr(put_tuple_arity, [{integer,Arity}], Dst) ->
- [{put_tuple,Arity,Dst}];
-cg_instr(put_tuple_elements, Elements, _Dst) ->
- [{put,E} || E <- Elements];
cg_instr(raw_raise, Args, Dst) ->
setup_args(Args) ++ [raw_raise|copy({x,0}, Dst)];
cg_instr(recv_marker_bind, [Mark, Ref], _Dst) ->
diff --git a/lib/compiler/src/beam_ssa_dead.erl b/lib/compiler/src/beam_ssa_dead.erl
index 5ae3d89e6f..73626dd08a 100644
--- a/lib/compiler/src/beam_ssa_dead.erl
+++ b/lib/compiler/src/beam_ssa_dead.erl
@@ -27,24 +27,24 @@
-export([opt/1]).
-include("beam_ssa.hrl").
--import(lists, [append/1,keymember/3,last/1,member/2,
- reverse/1,takewhile/2]).
+-import(lists, [append/1,foldl/3,keymember/3,last/1,member/2,
+ reverse/1,reverse/2,takewhile/2]).
-type used_vars() :: #{beam_ssa:label():=sets:set(beam_ssa:var_name())}.
-type basic_type_test() :: atom() | {'is_tagged_tuple',pos_integer(),atom()}.
-type type_test() :: basic_type_test() | {'not',basic_type_test()}.
-type op_name() :: atom().
--type basic_rel_op() :: {op_name(),beam_ssa:b_var(),beam_ssa:value()} |
- {basic_type_test(),beam_ssa:value()}.
--type rel_op() :: {op_name(),beam_ssa:b_var(),beam_ssa:value()} |
- {type_test(),beam_ssa:value()}.
+-type basic_test() :: {op_name(),beam_ssa:b_var(),beam_ssa:value()} |
+ {basic_type_test(),beam_ssa:value()}.
+-type test() :: {op_name(),beam_ssa:b_var(),beam_ssa:value()} |
+ {type_test(),beam_ssa:value()}.
-record(st,
{bs :: beam_ssa:block_map(),
us :: used_vars(),
skippable :: #{beam_ssa:label():='true'},
- rel_op=none :: 'none' | rel_op(),
+ test=none :: 'none' | test(),
target=any :: 'any' | 'one_way' | beam_ssa:label()
}).
@@ -54,13 +54,13 @@
Label :: beam_ssa:label(),
Block :: beam_ssa:b_blk().
-opt(Linear) ->
- {Used,Skippable} = used_vars(Linear),
- Blocks0 = maps:from_list(Linear),
+opt(Linear0) ->
+ {Used,Skippable} = used_vars(Linear0),
+ Blocks0 = maps:from_list(Linear0),
St0 = #st{bs=Blocks0,us=Used,skippable=Skippable},
St = shortcut_opt(St0),
#st{bs=Blocks} = combine_eqs(St#st{us=#{}}),
- beam_ssa:linearize(Blocks).
+ opt_redundant_tests(Blocks).
%%%
%%% Shortcut br/switch targets.
@@ -116,20 +116,20 @@ shortcut_opt([], St) -> St.
shortcut_terminator(#b_br{bool=#b_literal{val=true},succ=Succ0},
_Is, From, St0) ->
- St = St0#st{rel_op=none},
+ St = St0#st{test=none},
shortcut(Succ0, From, #{}, St);
shortcut_terminator(#b_br{bool=#b_var{}=Bool,succ=Succ0,fail=Fail0}=Br,
Is, From, St0) ->
St = St0#st{target=one_way},
- RelOp = get_rel_op(Bool, Is),
+ Test = get_test(Bool, Is),
%% The boolean in a `br` is seldom used by the successors. By
%% not binding its value unless it is actually used we might be able
%% to skip some work in shortcut/4 and sub/2.
SuccBs = bind_var_if_used(Succ0, Bool, #b_literal{val=true}, St),
- BrSucc = shortcut(Succ0, From, SuccBs, St#st{rel_op=RelOp}),
+ BrSucc = shortcut(Succ0, From, SuccBs, St#st{test=Test}),
FailBs = bind_var_if_used(Fail0, Bool, #b_literal{val=false}, St),
- BrFail = shortcut(Fail0, From, FailBs, St#st{rel_op=invert_op(RelOp)}),
+ BrFail = shortcut(Fail0, From, FailBs, St#st{test=invert_test(Test)}),
case {BrSucc,BrFail} of
{#b_br{bool=#b_literal{val=true},succ=Succ},
@@ -158,8 +158,8 @@ shortcut_sw_fail(Fail0, List, Bool, From, St0) ->
case List of
[{#b_literal{val=false},_},
{#b_literal{val=true},_}] ->
- RelOp = {{'not',is_boolean},Bool},
- St = St0#st{rel_op=RelOp,target=one_way},
+ Test = {{'not',is_boolean},Bool},
+ St = St0#st{test=Test,target=one_way},
#b_br{bool=#b_literal{val=true},succ=Fail} =
shortcut(Fail0, From, #{}, St),
Fail;
@@ -168,18 +168,19 @@ shortcut_sw_fail(Fail0, List, Bool, From, St0) ->
end.
shortcut_sw_list([{Lit,L0}|T], Bool, From, St0) ->
- RelOp = {'=:=',Bool,Lit},
- St = St0#st{rel_op=RelOp},
+ Test = {'=:=',Bool,Lit},
+ St = St0#st{test=Test},
#b_br{bool=#b_literal{val=true},succ=L} =
shortcut(L0, From, bind_var(Bool, Lit, #{}), St#st{target=one_way}),
[{Lit,L}|shortcut_sw_list(T, Bool, From, St0)];
shortcut_sw_list([], _, _, _) -> [].
-shortcut(L, _From, Bs, #st{rel_op=none,target=one_way}) when map_size(Bs) =:= 0 ->
- %% There is no way that we can find a suitable branch, because there is no
- %% relational operator stored, there are no bindings, and the block L can't
- %% have any phi nodes from which we could pick bindings because when the target
- %% is `one_way`, it implies the From block has a two-way `br` terminator.
+shortcut(L, _From, Bs, #st{test=none,target=one_way}) when map_size(Bs) =:= 0 ->
+ %% There is no way that we can find a suitable branch, because
+ %% there are no stored tests, there are no bindings, and the block
+ %% L can't have any phi nodes from which we could pick bindings
+ %% because when the target is `one_way`, it implies that the From
+ %% block has a two-way `br` terminator.
#b_br{bool=#b_literal{val=true},succ=L,fail=L};
shortcut(L, From, Bs, St) ->
shortcut_1(L, From, Bs, sets:new([{version, 2}]), St).
@@ -463,7 +464,7 @@ eval_is([#b_set{op={bif,_},dst=Dst}=I0|Is], From, Bs, St) ->
eval_is([#b_set{op=Op,dst=Dst}=I|Is], From, Bs, St)
when Op =:= is_tagged_tuple; Op =:= is_nonempty_list ->
#b_set{args=Args} = sub(I, Bs),
- case eval_rel_op(Op, Args, St) of
+ case eval_test(Op, Args, St) of
#b_literal{}=Val ->
eval_is(Is, From, bind_var(Dst, Val, Bs), St);
none ->
@@ -524,7 +525,7 @@ eval_terminator(#b_switch{arg=Arg,fail=Fail,list=List}=Sw, Bs, St) ->
eval_terminator(#b_ret{}, _Bs, _St) ->
none.
-eval_switch(List, Arg, #st{rel_op={_,Arg,_}=PrevOp}, Fail) ->
+eval_switch(List, Arg, #st{test={_,Arg,_}=PrevOp}, Fail) ->
%% There is a previous relational operator testing the same variable.
%% Optimization may be possible.
eval_switch_1(List, Arg, PrevOp, Fail);
@@ -534,8 +535,8 @@ eval_switch(_, _, _, _) ->
none.
eval_switch_1([{Lit,Lbl}|T], Arg, PrevOp, Fail) ->
- RelOp = {'=:=',Arg,Lit},
- case will_succeed(PrevOp, RelOp) of
+ Test = {'=:=',Arg,Lit},
+ case will_succeed(PrevOp, Test) of
yes ->
%% Success. This branch will always be taken.
Lbl;
@@ -577,7 +578,7 @@ eval_bif(#b_set{op={bif,Bif},args=Args}, St) ->
none ->
%% Not literal arguments. Try to evaluate
%% it based on a previous relational operator.
- eval_rel_op({bif,Bif}, Args, St);
+ eval_test({bif,Bif}, Args, St);
LitArgs ->
try apply(erlang, Bif, LitArgs) of
Val -> #b_literal{val=Val}
@@ -602,61 +603,61 @@ get_lit_args(_) -> none.
%%% Handling of relational operators.
%%%
-get_rel_op(Bool, [_|_]=Is) ->
+get_test(Bool, [_|_]=Is) ->
case last(Is) of
#b_set{op=Op,dst=Bool,args=Args} ->
- normalize_op(Op, Args);
+ normalize_test(Op, Args);
#b_set{} ->
none
end;
-get_rel_op(_, []) -> none.
+get_test(_, []) -> none.
-%% normalize_op(Instruction) -> {Normalized,FailLabel} | error
+%% normalize_test(Instruction) -> {Normalized,FailLabel} | error
%% Normalized = {Operator,Variable,Variable|Literal} |
%% {TypeTest,Variable}
-%% Operation = '<' | '=<' | '=:=' | '=/=' | '>=' | '>'
+%% Operation = '<' | '=<' | '=:=' | '=/=' | '>=' | '>' | '==' | '/='
%% TypeTest = is_atom | is_integer ...
%% Variable = #b_var{}
%% Literal = #b_literal{}
%%
-%% Normalize a relational operator to facilitate further
-%% comparisons between operators. Always make the register
-%% operand the first operand. If there are two registers,
-%% order the registers in lexical order.
+%% Normalize type tests and relational operators to facilitate
+%% further comparisons between test. Always make the register
+%% operand the first operand. If there are two registers, order the
+%% registers in lexical order.
%%
%% For example, this instruction:
%%
-%% #b_set{op={bif,=<},args=[#b_literal{}, #b_var{}}
+%% #b_set{op={bif,'<'},args=[#b_literal{}, #b_var{}}
%%
%% will be normalized to:
%%
-%% {'=<',#b_var{},#b_literal{}}
+%% {'>',#b_var{},#b_literal{}}
--spec normalize_op(Op, Args) -> NormalizedOp | 'none' when
+-spec normalize_test(Op, Args) -> NormalizedTest | 'none' when
Op :: beam_ssa:op(),
Args :: [beam_ssa:value()],
- NormalizedOp :: basic_rel_op().
+ NormalizedTest :: basic_test().
-normalize_op(is_tagged_tuple, [Arg,#b_literal{val=Size},#b_literal{val=Tag}])
+normalize_test(is_tagged_tuple, [Arg,#b_literal{val=Size},#b_literal{val=Tag}])
when is_integer(Size), is_atom(Tag) ->
{{is_tagged_tuple,Size,Tag},Arg};
-normalize_op(is_nonempty_list, [Arg]) ->
+normalize_test(is_nonempty_list, [Arg]) ->
{is_nonempty_list,Arg};
-normalize_op({bif,Bif}, [Arg]) ->
+normalize_test({bif,Bif}, [Arg]) ->
case erl_internal:new_type_test(Bif, 1) of
true -> {Bif,Arg};
false -> none
end;
-normalize_op({bif,Bif}, [_,_]=Args) ->
+normalize_test({bif,Bif}, [_,_]=Args) ->
case erl_internal:comp_op(Bif, 2) of
true ->
- normalize_op_1(Bif, Args);
+ normalize_test_1(Bif, Args);
false ->
none
end;
-normalize_op(_, _) -> none.
+normalize_test(_, _) -> none.
-normalize_op_1(Bif, Args) ->
+normalize_test_1(Bif, Args) ->
case Args of
[#b_literal{}=Arg1,#b_var{}=Arg2] ->
{turn_op(Bif),Arg2,Arg1};
@@ -670,22 +671,22 @@ normalize_op_1(Bif, Args) ->
none
end.
--spec invert_op(basic_rel_op() | 'none') -> rel_op() | 'none'.
+-spec invert_test(basic_test() | 'none') -> test() | 'none'.
-invert_op({Op,Arg1,Arg2}) ->
- {invert_op_1(Op),Arg1,Arg2};
-invert_op({TypeTest,Arg}) ->
+invert_test({Op,Arg1,Arg2}) ->
+ {invert_op(Op),Arg1,Arg2};
+invert_test({TypeTest,Arg}) ->
{{'not',TypeTest},Arg};
-invert_op(none) -> none.
+invert_test(none) -> none.
-invert_op_1('>=') -> '<';
-invert_op_1('<') -> '>=';
-invert_op_1('=<') -> '>';
-invert_op_1('>') -> '=<';
-invert_op_1('=:=') -> '=/=';
-invert_op_1('=/=') -> '=:=';
-invert_op_1('==') -> '/=';
-invert_op_1('/=') -> '=='.
+invert_op('>=') -> '<';
+invert_op('<') -> '>=';
+invert_op('=<') -> '>';
+invert_op('>') -> '=<';
+invert_op('=:=') -> '=/=';
+invert_op('=/=') -> '=:=';
+invert_op('==') -> '/=';
+invert_op('/=') -> '=='.
turn_op('<') -> '>';
turn_op('=<') -> '>=';
@@ -696,14 +697,14 @@ turn_op('=/='=Op) -> Op;
turn_op('=='=Op) -> Op;
turn_op('/='=Op) -> Op.
-eval_rel_op(_Bif, _Args, #st{rel_op=none}) ->
+eval_test(_Bif, _Args, #st{test=none}) ->
none;
-eval_rel_op(Bif, Args, #st{rel_op=Prev}) ->
- case normalize_op(Bif, Args) of
+eval_test(Bif, Args, #st{test=Prev}) ->
+ case normalize_test(Bif, Args) of
none ->
none;
- RelOp ->
- case will_succeed(Prev, RelOp) of
+ Test ->
+ case will_succeed(Prev, Test) of
yes -> #b_literal{val=true};
no -> #b_literal{val=false};
maybe -> none
@@ -1049,6 +1050,320 @@ lit_type(Val) ->
true -> none
end.
+
+%%%
+%%% Remove redundant tests.
+%%%
+%%% Repeated tests can be introduced by inlining, macros, or
+%%% complex guards such as:
+%%%
+%%% is_head(M, S) when M =:= <<1>>, S =:= <<2>> ->
+%%% true;
+%%% is_head(M, S) when M =:= <<1>>, S =:= <<3>> ->
+%%% false.
+%%%
+%%% The repeated test is not removed by any of the other optimizing
+%%% passes:
+%%%
+%%% 0:
+%%% _2 = bif:'=:=' _0, `<<1>>`
+%%% br _2, ^19, ^3
+%%%
+%%% 19:
+%%% _3 = bif:'=:=' _1, `<<2>>`
+%%% br _3, ^7, ^4
+%%%
+%%% 7:
+%%% ret `true`
+%%%
+%%% 4:
+%%% _4 = bif:'=:=' _0, `<<1>>`
+%%% br _4, ^15, ^3
+%%%
+%%% 15:
+%%% _5 = bif:'=:=' _1, `<<3>>`
+%%% br _5, ^11, ^3
+%%%
+%%% 11:
+%%% ret `false`
+%%%
+%%% 3:
+%%% %% Generate function clause error.
+%%% . . .
+%%%
+%%% This sub pass will keep track of all tests that are known to have
+%%% been executed at each block in the SSA code. If a repeated or
+%%% inverted test is seen, it can be eliminated. For the example
+%%% above, this sub pass will rewrite block 4 like this:
+%%%
+%%% 4:
+%%% _4 = bif:'=:=' `true`, `true`
+%%% br ^15
+%%%
+%%% This sub pass also removes redundant inverted test such as the
+%%% last test in this code:
+%%%
+%%% if
+%%% A < B -> . . . ;
+%%% A >= B -> . . .
+%%% end
+%%%
+%%% and this code:
+%%%
+%%% if
+%%% A < B -> . . . ;
+%%% A > B -> . . . ;
+%%% A == B -> . . .
+%%% end
+%%%
+
+opt_redundant_tests(Blocks) ->
+ All = #{0 => #{}, ?EXCEPTION_BLOCK => #{}},
+ RPO = beam_ssa:rpo(Blocks),
+ Linear = opt_redundant_tests(RPO, Blocks, All),
+ beam_ssa:trim_unreachable(Linear).
+
+opt_redundant_tests([L|Ls], Blocks, All0) ->
+ case All0 of
+ #{L := Tests} ->
+ Blk0 = map_get(L, Blocks),
+ Tests = map_get(L, All0),
+ Blk1 = opt_switch(Blk0, Tests),
+ #b_blk{is=Is0} = Blk1,
+ case opt_redundant_tests_is(Is0, Tests, []) of
+ none ->
+ All = update_successors(Blk1, Tests, All0),
+ [{L,Blk1}|opt_redundant_tests(Ls, Blocks, All)];
+ {new_test,Bool,Test,MustInvert} ->
+ All = update_successors(Blk1, Bool, Test, MustInvert,
+ Tests, All0),
+ [{L,Blk1}|opt_redundant_tests(Ls, Blocks, All)];
+ {old_test,Is,BoolVar,BoolValue} ->
+ Blk = case Blk1 of
+ #b_blk{last=#b_br{bool=BoolVar}=Br0} ->
+ Br = beam_ssa:normalize(Br0#b_br{bool=BoolValue}),
+ Blk1#b_blk{is=Is,last=Br};
+ #b_blk{}=Blk2 ->
+ Blk2#b_blk{is=Is}
+ end,
+ All = update_successors(Blk, Tests, All0),
+ [{L,Blk}|opt_redundant_tests(Ls, Blocks, All)]
+ end;
+ #{} ->
+ opt_redundant_tests(Ls, Blocks, All0)
+ end;
+opt_redundant_tests([], _Blocks, _All) -> [].
+
+opt_switch(#b_blk{last=#b_switch{arg=Arg,list=List0}=Sw}=Blk, Tests)
+ when map_size(Tests) =/= 0 ->
+ List = opt_switch_1(List0, Arg, Tests),
+ Blk#b_blk{last=Sw#b_switch{list=List}};
+opt_switch(Blk, _Tests) -> Blk.
+
+opt_switch_1([{Lit,_}=H|T], Arg, Tests) ->
+ case Tests of
+ #{{'=:=',Arg,Lit} := false} ->
+ opt_switch_1(T, Arg, Tests);
+ #{} ->
+ [H|opt_switch_1(T, Arg, Tests)]
+ end;
+opt_switch_1([], _, _) -> [].
+
+opt_redundant_tests_is([#b_set{op=Op,args=Args,dst=Bool}=I0], Tests, Acc) ->
+ case canonical_test(Op, Args) of
+ none ->
+ none;
+ {Test,MustInvert} ->
+ case old_result(Test, Tests) of
+ Result0 when is_boolean(Result0) ->
+ Result = #b_literal{val=Result0 xor MustInvert},
+ I = I0#b_set{op={bif,'=:='},args=[Result,#b_literal{val=true}]},
+ {old_test,reverse(Acc, [I]),Bool,Result};
+ none ->
+ {new_test,Bool,Test,MustInvert}
+ end
+ end;
+opt_redundant_tests_is([I|Is], Tests, Acc) ->
+ opt_redundant_tests_is(Is, Tests, [I|Acc]);
+opt_redundant_tests_is([], _Tests, _Acc) -> none.
+
+old_result(Test, Tests) ->
+ case Tests of
+ #{Test := Val} -> Val;
+ #{} -> old_result_1(Test, Tests)
+ end.
+
+%%
+%% Remove the last test in a sequence of tests (in any order):
+%%
+%% if
+%% Val1 < Val2 -> . . .
+%% Val1 > Val2 -> . . .
+%% Val1 == Val2 -> . . .
+%% end
+%%
+%% NOTE: The same optimization is not possible to do with `=:=`, unless
+%% we have type information so that we know that `==` and `=:=` produces
+%% the same result.
+%%
+
+old_result_1({'==',A,B}, Tests) ->
+ case Tests of
+ #{{'<',A,B} := false, {'=<',A,B} := true} ->
+ %% not A < B, not A > B ==> A == B
+ true;
+ #{} ->
+ none
+ end;
+old_result_1({'=<',A,B}, Tests) ->
+ case Tests of
+ #{{'<',A,B} := false, {'==',A,B} := false} ->
+ %% not A < B, not A == B ==> A > B
+ false;
+ #{} ->
+ none
+ end;
+old_result_1({'<',A,B}, Tests) ->
+ case Tests of
+ #{{'=<',A,B} := true, {'==',A,B} := false} ->
+ %% not A < B, not A == B ==> A < B
+ true;
+ #{} ->
+ none
+ end;
+old_result_1({is_nonempty_list,A}, Tests) ->
+ case Tests of
+ #{{is_list,A} := false} -> false;
+ #{} -> none
+ end;
+old_result_1(_, _) -> none.
+
+%% canonical_test(Op0, Args0) -> {CanonicalTest, MustInvert}
+%% CanonicalTest = {Operator,Variable,Variable|Literal} |
+%% {TypeTest,Variable}
+%% Operation = '<' | '=<' | '=:=' | '=='
+%% TypeTest = is_atom | is_integer ...
+%% Variable = #b_var{}
+%% Literal = #b_literal{}
+%% MustInvert = true | false
+%%
+%% Canonicalize a test. Always make the register
+%% operand the first operand. If there are two registers,
+%% order the registers in lexical order. Invert four of
+%% the relation operators and indicate with MustInvert
+%% whether the operator was inverted.
+%%
+%% For example, this instruction:
+%%
+%% #b_set{op={bif,'=:='},args=[#b_literal{}, #b_var{}}
+%%
+%% will be canonicalized to:
+%%
+%% {{'=:=',#b_var{},#b_literal{}}, false}
+%%
+%% while:
+%%
+%% #b_set{op={bif,'>'},args=[#b_var{}, #b_literal{}}}
+%%
+%% will be canonicalized to:
+%%
+%% {{'=<',#b_var{},#b_literal{}}, true}
+%%
+canonical_test(Op, Args) ->
+ case normalize_test(Op, Args) of
+ none ->
+ none;
+ Test ->
+ Inv = case Test of
+ {'=/=',_,_} -> true;
+ {'/=',_,_} -> true;
+ {'>',_,_} -> true;
+ {'>=',_,_} -> true;
+ _ -> false
+ end,
+ case Inv of
+ true -> {invert_test(Test),true};
+ false -> {Test,false}
+ end
+ end.
+
+update_successors(#b_blk{last=#b_br{bool=Bool,succ=Succ,fail=Fail}},
+ Bool, Test, MustInvert, Tests, All0) ->
+ All1 = update_successor(Succ, Tests#{Test => not MustInvert}, All0),
+ update_successor(Fail, Tests#{Test => MustInvert}, All1);
+update_successors(Blk, _, _, _, TestsA, All) ->
+ update_successors(Blk, TestsA, All).
+
+update_successors(#b_blk{last=#b_ret{}}, _Tests, All) ->
+ All;
+update_successors(#b_blk{last=#b_switch{arg=Arg,fail=Fail,list=List}},
+ Tests, All0) ->
+ All1 = update_successors_sw_fail(List, Arg, Fail, Tests, All0),
+ update_successors_sw(List, Arg, Tests, All1);
+update_successors(Blk, Tests, All) ->
+ foldl(fun(L, A) ->
+ update_successor(L, Tests, A)
+ end, All, beam_ssa:successors(Blk)).
+
+update_successors_sw_fail(List, Arg, Fail, Tests0, All) ->
+ Tests = foldl(fun({Lit,_}, A) ->
+ A#{{'=:=',Arg,Lit} => false}
+ end, Tests0, List),
+ update_successor(Fail, Tests, All).
+
+update_successors_sw([{Lit,L}|T], Arg, Tests, All0) ->
+ All = update_successor(L, Tests#{{'=:=',Arg,Lit} => true}, All0),
+ update_successors_sw(T, Arg, Tests, All);
+update_successors_sw([], _, _, All) -> All.
+
+update_successor(?EXCEPTION_BLOCK, _Tests, All) ->
+ All;
+update_successor(L, TestsA, All0) ->
+ case All0 of
+ #{L := TestsB} ->
+ All0#{L := maps_intersect_kv(TestsA, TestsB)};
+ #{} ->
+ All0#{L => TestsA}
+ end.
+
+maps_intersect_kv(Map, Map) ->
+ Map;
+maps_intersect_kv(Map1, Map2) ->
+ if
+ map_size(Map1) < map_size(Map2) ->
+ map_intersect_kv_1(Map1, Map2);
+ true ->
+ map_intersect_kv_1(Map2, Map1)
+ end.
+
+map_intersect_kv_1(SmallMap, BigMap) ->
+ Next = maps:next(maps:iterator(SmallMap)),
+ case maps_is_subset_kv(Next, BigMap) of
+ true -> SmallMap;
+ false -> map_intersect_kv_2(Next, BigMap, [])
+ end.
+
+map_intersect_kv_2({K, V, Iterator}, BigMap, Acc) ->
+ Next = maps:next(Iterator),
+ case BigMap of
+ #{K := V} ->
+ map_intersect_kv_2(Next, BigMap, [{K,V}|Acc]);
+ #{} ->
+ map_intersect_kv_2(Next, BigMap, Acc)
+ end;
+map_intersect_kv_2(none, _BigMap, Acc) ->
+ maps:from_list(Acc).
+
+maps_is_subset_kv({K, V, Iterator}, BigMap) ->
+ Next = maps:next(Iterator),
+ case BigMap of
+ #{K := V} ->
+ maps_is_subset_kv(Next, BigMap);
+ #{} ->
+ false
+ end;
+maps_is_subset_kv(none, _BigMap) -> true.
+
%%%
%%% Calculate used variables for each block.
%%%
diff --git a/lib/compiler/src/beam_ssa_opt.erl b/lib/compiler/src/beam_ssa_opt.erl
index 3ffa8ecc0a..72e320749e 100644
--- a/lib/compiler/src/beam_ssa_opt.erl
+++ b/lib/compiler/src/beam_ssa_opt.erl
@@ -39,7 +39,7 @@
-include("beam_ssa_opt.hrl").
--import(lists, [all/2,append/1,duplicate/2,flatten/1,foldl/3,
+-import(lists, [all/2,append/1,droplast/1,duplicate/2,flatten/1,foldl/3,
keyfind/3,last/1,mapfoldl/3,member/2,
partition/2,reverse/1,reverse/2,
splitwith/2,sort/1,takewhile/2,unzip/1]).
@@ -301,6 +301,7 @@ epilogue_passes(Opts) ->
?PASS(ssa_opt_bsm_shortcut),
?PASS(ssa_opt_sink),
?PASS(ssa_opt_blockify),
+ ?PASS(ssa_opt_redundant_br),
?PASS(ssa_opt_merge_blocks),
?PASS(ssa_opt_get_tuple_element),
?PASS(ssa_opt_tail_calls),
@@ -3102,6 +3103,127 @@ is_tail_call_is([I|Is], Bool, Ret, Acc) ->
is_tail_call_is([], _Bool, _Ret, _Acc) -> no.
%%%
+%%% Eliminate redundant branches.
+%%%
+%%% Redundant `br` instructions following calls to guard BIFs such as:
+%%%
+%%% @bif_result = bif:Bif ...
+%%% br @bif_result, ^100, ^200
+%%%
+%%% 100:
+%%% ret `true`
+%%%
+%%% 200:
+%%% ret `false`
+%%%
+%%% can can be rewritten to:
+%%%
+%%% @bif_result = bif:Bif ...
+%%% ret @bif_result
+%%%
+%%% A similar rewriting is possible if the true and false branches end
+%%% up at a phi node.
+%%%
+%%% A code sequence such as:
+%%%
+%%% @ssa_bool = bif:'=:=' Var, Other
+%%% br @ssa_bool, ^100, ^200
+%%%
+%%% 100:
+%%% ret Other
+%%%
+%%% 200:
+%%% ret Var
+%%%
+%%% can be rewritten to:
+%%%
+%%% ret Var
+%%%
+
+ssa_opt_redundant_br({#opt_st{ssa=Blocks0}=St, FuncDb}) ->
+ Blocks = redundant_br(beam_ssa:rpo(Blocks0), Blocks0),
+ {St#opt_st{ssa=Blocks}, FuncDb}.
+
+redundant_br([L|Ls], Blocks0) ->
+ Blk0 = map_get(L, Blocks0),
+ case Blk0 of
+ #b_blk{is=Is,
+ last=#b_br{bool=#b_var{}=Bool,
+ succ=Succ,
+ fail=Fail}} ->
+ case Blocks0 of
+ #{Succ := #b_blk{is=[],last=#b_ret{arg=#b_literal{val=true}}},
+ Fail := #b_blk{is=[],last=#b_ret{arg=#b_literal{val=false}}}} ->
+ case redundant_br_safe_bool(Is, Bool) of
+ true ->
+ Blk = Blk0#b_blk{last=#b_ret{arg=Bool}},
+ Blocks = Blocks0#{L => Blk},
+ redundant_br(Ls, Blocks);
+ false ->
+ redundant_br(Ls, Blocks0)
+ end;
+ #{Succ := #b_blk{is=[],last=#b_br{succ=PhiL,fail=PhiL}},
+ Fail := #b_blk{is=[],last=#b_br{succ=PhiL,fail=PhiL}}} ->
+ case redundant_br_safe_bool(Is, Bool) of
+ true ->
+ Blocks = redundant_br_phi(L, Blk0, PhiL, Blocks0),
+ redundant_br(Ls, Blocks);
+ false ->
+ redundant_br(Ls, Blocks0)
+ end;
+ #{Succ := #b_blk{is=[],last=#b_ret{arg=Other}},
+ Fail := #b_blk{is=[],last=#b_ret{arg=Var}}} when Is =/= [] ->
+ case last(Is) of
+ #b_set{op={bif,'=:='},args=[Var,Other]} ->
+ Blk = Blk0#b_blk{is=droplast(Is),
+ last=#b_ret{arg=Var}},
+ Blocks = Blocks0#{L => Blk},
+ redundant_br(Ls, Blocks);
+ #b_set{} ->
+ redundant_br(Ls, Blocks0)
+ end;
+ #{} ->
+ redundant_br(Ls, Blocks0)
+ end;
+ _ ->
+ redundant_br(Ls, Blocks0)
+ end;
+redundant_br([], Blocks) -> Blocks.
+
+redundant_br_phi(L, Blk0, PhiL, Blocks) ->
+ #b_blk{is=Is0} = PhiBlk0 = map_get(PhiL, Blocks),
+ case Is0 of
+ [#b_set{op=phi},#b_set{op=phi}|_] ->
+ Blocks;
+ [#b_set{op=phi,args=PhiArgs0}=I0|Is] ->
+ #b_blk{last=#b_br{succ=Succ,fail=Fail}} = Blk0,
+ BoolPhiArgs = [{#b_literal{val=false},Fail},
+ {#b_literal{val=true},Succ}],
+ PhiArgs1 = ordsets:from_list(PhiArgs0),
+ case ordsets:is_subset(BoolPhiArgs, PhiArgs1) of
+ true ->
+ #b_blk{last=#b_br{bool=Bool}} = Blk0,
+ PhiArgs = ordsets:add_element({Bool,L}, PhiArgs1),
+ I = I0#b_set{args=PhiArgs},
+ PhiBlk = PhiBlk0#b_blk{is=[I|Is]},
+ Br = #b_br{bool=#b_literal{val=true},succ=PhiL,fail=PhiL},
+ Blk = Blk0#b_blk{last=Br},
+ Blocks#{L := Blk, PhiL := PhiBlk};
+ false ->
+ Blocks
+ end
+ end.
+
+redundant_br_safe_bool([], _Bool) ->
+ true;
+redundant_br_safe_bool(Is, Bool) ->
+ case last(Is) of
+ #b_set{op={bif,_}} -> true;
+ #b_set{op=has_map_field} -> true;
+ #b_set{dst=Dst} -> Dst =/= Bool
+ end.
+
+%%%
%%% Common utilities.
%%%
diff --git a/lib/compiler/src/beam_ssa_pp.erl b/lib/compiler/src/beam_ssa_pp.erl
index adb8533a81..e5ebbaed13 100644
--- a/lib/compiler/src/beam_ssa_pp.erl
+++ b/lib/compiler/src/beam_ssa_pp.erl
@@ -22,6 +22,7 @@
-export([format_function/1,format_instr/1,format_var/1]).
-include("beam_ssa.hrl").
+-include("beam_types.hrl").
-spec format_function(beam_ssa:b_function()) -> iolist().
@@ -115,7 +116,7 @@ format_param_info([], _Break) ->
format_type(T, Break) ->
%% Gross hack, but it's short and simple.
- Indented = lists:flatten(io_lib:format("~p", [T])),
+ Indented = lists:flatten(format_type(T)),
string:replace(Indented, [$\n], Break, all).
format_blocks(Ls, Blocks, Anno) ->
@@ -274,3 +275,106 @@ format_live_interval(#b_var{}=Dst, #{live_intervals:=Intervals}) ->
end;
format_live_interval(_, _) -> [].
+format_type(any) ->
+ "any()";
+format_type(#t_atom{elements=any}) ->
+ "atom()";
+format_type(#t_atom{elements=Es}) ->
+ string:join([io_lib:format("'~p'", [E])
+ || E <- ordsets:to_list(Es)], " | ");
+format_type(#t_bs_matchable{tail_unit=U}) ->
+ io_lib:format("bs_matchable(~p)", [U]);
+format_type(#t_bitstring{size_unit=S}) ->
+ io_lib:format("bitstring(~p)", [S]);
+format_type(#t_bs_context{tail_unit=U,slots=S,valid=V}) ->
+ io_lib:format("bs_context(~p, ~p, ~p)", [U, S, V]);
+format_type(#t_fun{arity=any,type=any}) ->
+ "fun()";
+format_type(#t_fun{arity=any,type=T}) ->
+ ["fun((...) -> ", format_type(T), ")"];
+format_type(#t_fun{arity=A,type=any}) ->
+ ["fun((", format_fun_args(A), "))"];
+format_type(#t_fun{arity=A,type=T}) ->
+ ["fun((", format_fun_args(A), ") -> ", format_type(T), ")"];
+format_type(#t_map{super_key=any,super_value=any}) ->
+ "map()";
+format_type(#t_map{super_key=none,super_value=none}) ->
+ "#{}";
+format_type(#t_map{super_key=K,super_value=V}) ->
+ ["#{", format_type(K), "=>", format_type(V), "}"];
+format_type(number) ->
+ "number()";
+format_type(#t_float{elements=any}) ->
+ "float()";
+format_type(#t_float{elements={X,X}}) ->
+ io_lib:format("~p", [X]);
+format_type(#t_float{elements={Low,High}}) ->
+ io_lib:format("~p..~p", [Low,High]);
+format_type(#t_integer{elements=any}) ->
+ "integer()";
+format_type(#t_integer{elements={X,X}}) ->
+ io_lib:format("~p", [X]);
+format_type(#t_integer{elements={Low,High}}) ->
+ io_lib:format("~p..~p", [Low,High]);
+format_type(#t_list{type=ET,terminator=nil}) ->
+ ["list(", format_type(ET), ")"];
+format_type(#t_list{type=ET,terminator=TT}) ->
+ ["maybe_improper_list(", format_type(ET), ", ", format_type(TT), ")"];
+format_type(#t_cons{type=ET,terminator=nil}) ->
+ ["nonempty_list(", format_type(ET), ")"];
+format_type(#t_cons{type=ET,terminator=TT}) ->
+ ["nonempty_improper_list(", format_type(ET), ", ", format_type(TT), ")"];
+format_type(nil) ->
+ "nil()";
+format_type(#t_tuple{elements=Es,exact=Ex,size=S}) ->
+ ["{",
+ string:join(format_tuple_elems(S, Ex, Es, 1), ", "),
+ "}"];
+format_type(none) ->
+ "none()";
+format_type(#t_union{atom=A,list=L,number=N,tuple_set=Ts,other=O}) ->
+ Es = case A of
+ none -> [];
+ _ -> [format_type(A)]
+ end
+ ++ case L of
+ none -> [];
+ _ -> [format_type(L)]
+ end
+ ++ case N of
+ none -> [];
+ _ -> [format_type(N)]
+ end
+ ++ case Ts of
+ none -> [];
+ _ -> [format_tuple_set(Ts)]
+ end
+ ++ case O of
+ none -> [];
+ _ -> [format_type(O)]
+ end,
+ string:join(Es, " | ").
+
+format_fun_args(A) ->
+ string:join(lists:duplicate(A, "_"), ", ").
+
+format_tuple_elems(Size, true, _Elems, Idx) when Idx > Size ->
+ [];
+format_tuple_elems(Size, false, _Elems, Idx) when Idx > Size ->
+ ["..."];
+format_tuple_elems(Size, Exact, Elems, Idx) ->
+ T = case Elems of
+ #{ Idx := Ty} -> Ty;
+ _ -> any
+ end,
+ [format_type(T)|format_tuple_elems(Size, Exact, Elems, Idx + 1)].
+
+format_tuple_set(#t_tuple{}=T) ->
+ format_type(T);
+format_tuple_set(RecordSet) ->
+ string:join([format_tuple_set_1(T) || T <- ordsets:to_list(RecordSet)],
+ " | ").
+
+format_tuple_set_1({{Arity,Key},#t_tuple{size=Arity,elements=Elems}=Tuple}) ->
+ Key = map_get(1, Elems), % Assertion
+ format_type(Tuple).
diff --git a/lib/compiler/src/beam_ssa_pre_codegen.erl b/lib/compiler/src/beam_ssa_pre_codegen.erl
index 6ff4e3001f..23890447c5 100644
--- a/lib/compiler/src/beam_ssa_pre_codegen.erl
+++ b/lib/compiler/src/beam_ssa_pre_codegen.erl
@@ -78,14 +78,13 @@
{'ok',beam_ssa:b_module()}.
module(#b_module{body=Fs0}=Module, Opts) ->
- UseBSM3 = not proplists:get_bool(no_bsm3, Opts),
Ps = passes(Opts),
- Fs = functions(Fs0, Ps, UseBSM3),
+ Fs = functions(Fs0, Ps),
{ok,Module#b_module{body=Fs}}.
-functions([F|Fs], Ps, UseBSM3) ->
- [function(F, Ps, UseBSM3)|functions(Fs, Ps, UseBSM3)];
-functions([], _Ps, _UseBSM3) -> [].
+functions([F|Fs], Ps) ->
+ [function(F, Ps)|functions(Fs, Ps)];
+functions([], _Ps) -> [].
-type b_var() :: beam_ssa:b_var().
-type var_name() :: beam_ssa:var_name().
@@ -103,7 +102,6 @@ functions([], _Ps, _UseBSM3) -> [].
-record(st, {ssa :: beam_ssa:block_map(),
args :: [b_var()],
cnt :: beam_ssa:label(),
- use_bsm3 :: boolean(),
frames=[] :: [beam_ssa:label()],
intervals=[] :: [{b_var(),[range()]}],
res=[] :: [{b_var(),reservation()}] | #{b_var():=reservation()},
@@ -115,17 +113,12 @@ functions([], _Ps, _UseBSM3) -> [].
passes(Opts) ->
AddPrecgAnnos = proplists:get_bool(dprecg, Opts),
- FixTuples = proplists:get_bool(no_put_tuple2, Opts),
Ps = [?PASS(assert_no_critical_edges),
%% Preliminaries.
?PASS(fix_bs),
?PASS(sanitize),
?PASS(match_fail_instructions),
- case FixTuples of
- false -> ignore;
- true -> ?PASS(fix_tuples)
- end,
?PASS(use_set_tuple_element),
?PASS(place_frames),
?PASS(fix_receives),
@@ -134,10 +127,6 @@ passes(Opts) ->
?PASS(find_yregs),
?PASS(reserve_yregs),
- %% Handle legacy binary match instruction that don't
- %% accept a Y register as destination.
- ?PASS(legacy_bs),
-
%% Improve reuse of Y registers to potentially
%% reduce the size of the stack frame.
?PASS(copy_retval),
@@ -163,11 +152,10 @@ passes(Opts) ->
?PASS(assert_no_critical_edges)],
[P || P <- Ps, P =/= ignore].
-function(#b_function{anno=Anno,args=Args,bs=Blocks0,cnt=Count0}=F0,
- Ps, UseBSM3) ->
+function(#b_function{anno=Anno,args=Args,bs=Blocks0,cnt=Count0}=F0, Ps) ->
try
Location = maps:get(location, Anno, none),
- St0 = #st{ssa=Blocks0,args=Args,use_bsm3=UseBSM3,
+ St0 = #st{ssa=Blocks0,args=Args,
cnt=Count0,location=Location},
St = compile:run_sub_passes(Ps, St0),
#st{ssa=Blocks,cnt=Count,regs=Regs,extra_annos=ExtraAnnos} = St,
@@ -210,14 +198,9 @@ assert_no_ces(_, #b_blk{is=[#b_set{op=phi,args=[_,_]=Phis}|_]}, Blocks) ->
assert_no_ces(_, _, Blocks) -> Blocks.
%% fix_bs(St0) -> St.
-%% Fix up the binary matching instructions:
-%%
-%% * Insert bs_save and bs_restore instructions where needed.
-%%
-%% * Combine bs_match and bs_extract instructions to bs_get
-%% instructions.
+%% Combine bs_match and bs_extract instructions to bs_get instructions.
-fix_bs(#st{ssa=Blocks,cnt=Count0,use_bsm3=UseBSM3}=St) ->
+fix_bs(#st{ssa=Blocks,cnt=Count0}=St) ->
F = fun(#b_set{op=bs_start_match,dst=Dst}, A) ->
%% Mark the root of the match context list.
[{Dst,{context,Dst}}|A];
@@ -237,12 +220,7 @@ fix_bs(#st{ssa=Blocks,cnt=Count0,use_bsm3=UseBSM3}=St) ->
Linear0 = beam_ssa:linearize(Blocks),
%% Insert position instructions where needed.
- {Linear1,Count} = case UseBSM3 of
- true ->
- bs_pos_bsm3(Linear0, CtxChain, Count0);
- false ->
- bs_pos_bsm2(Linear0, CtxChain, Count0)
- end,
+ {Linear1,Count} = bs_pos_bsm3(Linear0, CtxChain, Count0),
%% Rename instructions.
Linear = bs_instrs(Linear1, CtxChain, []),
@@ -296,60 +274,6 @@ make_bs_pos_dict_1([H|T], Ctx, I, Acc) ->
make_bs_pos_dict_1([], Ctx, I, Acc) ->
{[{Ctx,I}|Acc], I}.
-%% As bs_position but without OTP-22 instructions. This is only used when
-%% cross-compiling to older versions.
-bs_pos_bsm2(Linear0, CtxChain, Count0) ->
- Rs0 = bs_restores(Linear0, CtxChain, #{}, #{}),
- Rs = maps:values(Rs0),
- S0 = sofs:relation(Rs, [{context,save_point}]),
- S1 = sofs:relation_to_family(S0),
- S = sofs:to_external(S1),
- Slots = make_save_point_dict(S, []),
- {Saves,Count1} = make_save_map(Rs, Slots, Count0, []),
- {Restores,Count} = make_restore_map(maps:to_list(Rs0), Slots, Count1, []),
-
- %% Now insert all saves and restores.
- {bs_insert_bsm2(Linear0, Saves, Restores, Slots),Count}.
-
-make_save_map([{Ctx,Save}=Ps|T], Slots, Count, Acc) ->
- Ignored = #b_var{name={'@ssa_ignored',Count}},
- case make_slot(Ps, Slots) of
- #b_literal{val=start} ->
- make_save_map(T, Slots, Count, Acc);
- Slot ->
- I = #b_set{op=bs_save,dst=Ignored,args=[Ctx,Slot]},
- make_save_map(T, Slots, Count+1, [{Save,I}|Acc])
- end;
-make_save_map([], _, Count, Acc) ->
- {maps:from_list(Acc),Count}.
-
-make_restore_map([{Bef,{Ctx,_}=Ps}|T], Slots, Count, Acc) ->
- Ignored = #b_var{name={'@ssa_ignored',Count}},
- I = #b_set{op=bs_restore,dst=Ignored,args=[Ctx,make_slot(Ps, Slots)]},
- make_restore_map(T, Slots, Count+1, [{Bef,I}|Acc]);
-make_restore_map([], _, Count, Acc) ->
- {maps:from_list(Acc),Count}.
-
-make_slot({Same,Same}, _Slots) ->
- #b_literal{val=start};
-make_slot({_,_}=Ps, Slots) ->
- #b_literal{val=map_get(Ps, Slots)}.
-
-make_save_point_dict([{Ctx,Pts}|T], Acc0) ->
- Acc = make_save_point_dict_1(Pts, Ctx, 0, Acc0),
- make_save_point_dict(T, Acc);
-make_save_point_dict([], Acc) ->
- maps:from_list(Acc).
-
-make_save_point_dict_1([Ctx|T], Ctx, I, Acc) ->
- %% Special {atom,start} save point. Does not need a
- %% bs_save instruction.
- make_save_point_dict_1(T, Ctx, I, Acc);
-make_save_point_dict_1([H|T], Ctx, I, Acc) ->
- make_save_point_dict_1(T, Ctx, I+1, [{{Ctx,H},I}|Acc]);
-make_save_point_dict_1([], Ctx, I, Acc) ->
- [{Ctx,I}|Acc].
-
bs_restores([{L,#b_blk{is=Is,last=Last}}|Bs], CtxChain, D0, Rs0) ->
InPos = maps:get(L, D0, #{}),
{SuccPos, FailPos, Rs} = bs_restores_is(Is, CtxChain, InPos, InPos, Rs0),
@@ -561,20 +485,6 @@ bs_restore_args([], Pos, _CtxChain, _Dst, Rs) ->
bs_insert_bsm3(Blocks, Saves, Restores) ->
bs_insert_1(Blocks, [], Saves, Restores, fun(I) -> I end).
-bs_insert_bsm2(Blocks, Saves, Restores, Slots) ->
- %% The old instructions require bs_start_match to be annotated with the
- %% number of position slots it needs.
- bs_insert_1(Blocks, [], Saves, Restores,
- fun(#b_set{op=bs_start_match,dst=Dst}=I0) ->
- NumSlots = case Slots of
- #{Dst:=NumSlots0} -> NumSlots0;
- #{} -> 0
- end,
- beam_ssa:add_anno(num_slots, NumSlots, I0);
- (I) ->
- I
- end).
-
bs_insert_1([{L,#b_blk{is=Is0}=Blk} | Bs], Deferred0, Saves, Restores, XFrm) ->
Is1 = bs_insert_deferred(Is0, Deferred0),
{Is, Deferred} = bs_insert_is(Is1, Saves, Restores, XFrm, []),
@@ -668,59 +578,6 @@ bs_subst_ctx(#b_var{}=Var, CtxChain) ->
bs_subst_ctx(Other, _CtxChain) ->
Other.
-%% legacy_bs(St0) -> St.
-%% Binary matching instructions in OTP 21 and earlier don't support
-%% a Y register as destination. If St#st.use_bsm3 is false,
-%% we will need to rewrite those instructions so that the result
-%% is first put in an X register and then moved to a Y register
-%% if the operation succeeded.
-
-legacy_bs(#st{use_bsm3=false,ssa=Blocks0,cnt=Count0,res=Res}=St) ->
- IsYreg = maps:from_list([{V,true} || {V,{y,_}} <- Res]),
- Linear0 = beam_ssa:linearize(Blocks0),
- {Linear,Count} = legacy_bs(Linear0, IsYreg, Count0, #{}, []),
- Blocks = maps:from_list(Linear),
- St#st{ssa=Blocks,cnt=Count};
-legacy_bs(#st{use_bsm3=true}=St) -> St.
-
-legacy_bs([{L,Blk}|Bs], IsYreg, Count0, Copies0, Acc) ->
- #b_blk{is=Is0,last=Last} = Blk,
- Is1 = case Copies0 of
- #{L:=Copy} -> [Copy|Is0];
- #{} -> Is0
- end,
- {Is,Count,Copies} = legacy_bs_is(Is1, Last, IsYreg, Count0, Copies0, []),
- legacy_bs(Bs, IsYreg, Count, Copies, [{L,Blk#b_blk{is=Is}}|Acc]);
-legacy_bs([], _IsYreg, Count, _Copies, Acc) ->
- {Acc,Count}.
-
-legacy_bs_is([#b_set{op=Op,dst=Dst}=I0,
- #b_set{op=succeeded,dst=SuccDst,args=[Dst]}=SuccI0],
- Last, IsYreg, Count0, Copies0, Acc) ->
- NeedsFix = is_map_key(Dst, IsYreg) andalso
- case Op of
- bs_get -> true;
- bs_init -> true;
- _ -> false
- end,
- case NeedsFix of
- true ->
- TempDst = #b_var{name={'@bs_temp_dst',Count0}},
- Count = Count0 + 1,
- I = I0#b_set{dst=TempDst},
- SuccI = SuccI0#b_set{args=[TempDst]},
- Copy = #b_set{op=copy,dst=Dst,args=[TempDst]},
- #b_br{bool=SuccDst,succ=SuccL} = Last,
- Copies = Copies0#{SuccL=>Copy},
- legacy_bs_is([], Last, IsYreg, Count, Copies, [SuccI,I|Acc]);
- false ->
- legacy_bs_is([], Last, IsYreg, Count0, Copies0, [SuccI0,I0|Acc])
- end;
-legacy_bs_is([I|Is], Last, IsYreg, Count, Copies, Acc) ->
- legacy_bs_is(Is, Last, IsYreg, Count, Copies, [I|Acc]);
-legacy_bs_is([], _Last, _IsYreg, Count, Copies, Acc) ->
- {reverse(Acc),Count,Copies}.
-
%% sanitize(St0) -> St.
%% Remove constructs that can cause problems later:
%%
@@ -1110,29 +967,6 @@ match_fail_stk(T, [#b_set{op=Op}=I|Is], IAcc, VAcc)
match_fail_stk(_, _, _, _) -> none.
%%%
-%%% Fix tuples.
-%%%
-
-%% fix_tuples(St0) -> St.
-%% If compatibility with a previous version of Erlang has been
-%% requested, tuple creation must be split into two instruction to
-%% mirror the the way tuples are created in BEAM prior to OTP 22.
-%% Each put_tuple instruction is split into put_tuple_arity followed
-%% by put_tuple_elements.
-
-fix_tuples(#st{ssa=Blocks0,cnt=Count0}=St) ->
- F = fun (#b_set{op=put_tuple,args=Args}=Put, C0) ->
- Arity = #b_literal{val=length(Args)},
- {Ignore,C} = new_var('@ssa_ignore', C0),
- {[Put#b_set{op=put_tuple_arity,args=[Arity]},
- #b_set{dst=Ignore,op=put_tuple_elements,args=Args}],C};
- (I, C) -> {[I],C}
- end,
- RPO = beam_ssa:rpo(Blocks0),
- {Blocks,Count} = beam_ssa:flatmapfold_instrs(F, RPO, Count0, Blocks0),
- St#st{ssa=Blocks,cnt=Count}.
-
-%%%
%%% Introduce the set_tuple_element instructions to make
%%% multiple-field record updates faster.
%%%
@@ -2019,10 +1853,6 @@ copy_retval_2([L|Ls], Yregs, Copy0, Blocks0, Count0) ->
copy_retval_2([], _Yregs, none, Blocks, Count) ->
{Blocks,Count}.
-copy_retval_is([#b_set{op=put_tuple_elements,args=Args0}=I0], false, _Yregs,
- Copy, Count, Acc) ->
- I = I0#b_set{args=copy_sub_args(Args0, Copy)},
- {reverse(Acc, [I|acc_copy([], Copy)]),Count};
copy_retval_is([#b_set{op=Op}=I0], false, Yregs, Copy, Count0, Acc0)
when Op =:= call; Op =:= old_make_fun ->
{I,Count,Acc} = place_retval_copy(I0, Yregs, Copy, Count0, Acc0),
@@ -2663,12 +2493,9 @@ reserve_zreg([#b_set{op=Op,dst=Dst} | Is], Last, ShortLived, A) ->
reserve_zreg([], _, _, A) -> A.
use_zreg(bs_match_string) -> yes;
-use_zreg(bs_save) -> yes;
-use_zreg(bs_restore) -> yes;
use_zreg(bs_set_position) -> yes;
use_zreg(kill_try_tag) -> yes;
use_zreg(landingpad) -> yes;
-use_zreg(put_tuple_elements) -> yes;
use_zreg(recv_marker_bind) -> yes;
use_zreg(recv_marker_clear) -> yes;
use_zreg(remove_message) -> yes;
diff --git a/lib/compiler/src/beam_ssa_type.erl b/lib/compiler/src/beam_ssa_type.erl
index 2fa8f0dcf5..63dfa64199 100644
--- a/lib/compiler/src/beam_ssa_type.erl
+++ b/lib/compiler/src/beam_ssa_type.erl
@@ -60,35 +60,37 @@
{ func_id :: func_id(),
limit_return :: boolean(),
params :: [beam_ssa:b_var()],
- used_once :: sets:set(beam_ssa:b_var()) }).
+ used_once :: #{beam_ssa:b_var() => _ } }).
+-type metadata() :: #metadata{}.
+-type meta_cache() :: #{ func_id() => metadata() }.
-type type_db() :: #{ beam_ssa:var_name() := type() }.
%%
-spec opt_start(term(), term()) -> term().
opt_start(StMap, FuncDb0) when FuncDb0 =/= #{} ->
- {ArgDb, FuncDb} = signatures(StMap, FuncDb0),
+ {ArgDb, MetaCache, FuncDb} = signatures(StMap, FuncDb0),
- opt_start_1(maps:keys(StMap), ArgDb, StMap, FuncDb);
+ opt_start_1(maps:keys(StMap), ArgDb, StMap, FuncDb, MetaCache);
opt_start(StMap, FuncDb) ->
%% Module-level analysis is disabled, likely because of a call to
%% load_nif/2 or similar. opt_continue/4 will assume that all arguments and
%% return types are 'any'.
{StMap, FuncDb}.
-opt_start_1([Id | Ids], ArgDb, StMap0, FuncDb0) ->
+opt_start_1([Id | Ids], ArgDb, StMap0, FuncDb0, MetaCache) ->
case ArgDb of
#{ Id := ArgTypes } ->
#opt_st{ssa=Linear0,args=Args} = St0 = map_get(Id, StMap0),
Ts = maps:from_list(zip(Args, ArgTypes)),
- {Linear, FuncDb} = opt_function(Linear0, Args, Id, Ts, FuncDb0),
+ {Linear, FuncDb} = opt_function(Linear0, Args, Id, Ts, FuncDb0, MetaCache),
St = St0#opt_st{ssa=Linear},
StMap = StMap0#{ Id := St },
- opt_start_1(Ids, ArgDb, StMap, FuncDb);
+ opt_start_1(Ids, ArgDb, StMap, FuncDb, MetaCache);
#{} ->
%% Unreachable functions must be removed so that opt_continue/4
%% won't process them and potentially taint the argument types of
@@ -96,9 +98,9 @@ opt_start_1([Id | Ids], ArgDb, StMap0, FuncDb0) ->
StMap = maps:remove(Id, StMap0),
FuncDb = maps:remove(Id, FuncDb0),
- opt_start_1(Ids, ArgDb, StMap, FuncDb)
+ opt_start_1(Ids, ArgDb, StMap, FuncDb, MetaCache)
end;
-opt_start_1([], _CommittedArgs, StMap, FuncDb) ->
+opt_start_1([], _CommittedArgs, StMap, FuncDb, _MetaCache) ->
{StMap, FuncDb}.
%%
@@ -124,12 +126,13 @@ opt_start_1([], _CommittedArgs, StMap, FuncDb) ->
-record(sig_st,
{ wl = wl_new() :: worklist(),
committed = #{} :: #{ func_id() => [type()] },
- updates = #{} :: #{ func_id() => [type()] }}).
+ updates = #{} :: #{ func_id() => [type()] },
+ meta_cache = #{} :: meta_cache()}).
signatures(StMap, FuncDb0) ->
State0 = init_sig_st(StMap, FuncDb0),
{State, FuncDb} = signatures_1(StMap, FuncDb0, State0),
- {State#sig_st.committed, FuncDb}.
+ {State#sig_st.committed, State#sig_st.meta_cache, FuncDb}.
signatures_1(StMap, FuncDb0, State0) ->
case wl_next(State0#sig_st.wl) of
@@ -203,11 +206,11 @@ sig_function_1(Id, StMap, State0, FuncDb) ->
Ls = #{ ?EXCEPTION_BLOCK => {incoming, Ts},
0 => {incoming, Ts} },
- Meta = init_metadata(Id, Linear, Args),
+ {Meta, State2} = sig_init_metadata(Id, Linear, Args, State1),
Wl0 = State1#sig_st.wl,
- {State, SuccTypes} = sig_bs(Linear, Ds, Ls, FuncDb, #{}, [], Meta, State1),
+ {State, SuccTypes} = sig_bs(Linear, Ds, Ls, FuncDb, #{}, [], Meta, State2),
WlChanged = wl_changed(Wl0, State#sig_st.wl),
#{ Id := #func_info{succ_types=SuccTypes0}=Entry0 } = FuncDb,
@@ -220,6 +223,17 @@ sig_function_1(Id, StMap, State0, FuncDb) ->
{true, WlChanged, State, FuncDb#{ Id := Entry }}
end.
+%% Get the metadata for a function. If this function has been analysed
+%% previously, retrieve the previously calculated metadata.
+sig_init_metadata(Id, Linear, Args, #sig_st{meta_cache=MetaCache} = State) ->
+ case MetaCache of
+ #{Id := Meta} ->
+ {Meta, State};
+ #{} ->
+ Meta = init_metadata(Id, Linear, Args),
+ {Meta, State#sig_st{meta_cache=MetaCache#{Id => Meta}}}
+ end.
+
sig_bs([{L, #b_blk{is=Is,last=Last0}} | Bs],
Ds0, Ls0, Fdb, Sub0, SuccTypes0, Meta, State0) ->
case Ls0 of
@@ -253,7 +267,7 @@ sig_is([#b_set{op=call,
dst=Dst}=I0 | Is],
Ts0, Ds0, Ls, Fdb, Sub, State0) ->
Args = simplify_args(Args0, Ts0, Sub),
- I1 = beam_ssa:normalize(I0#b_set{args=Args}),
+ I1 = I0#b_set{args=Args},
[_ | CallArgs] = Args,
{I, State} = sig_local_call(I1, Callee, CallArgs, Ts0, Fdb, State0),
@@ -266,7 +280,7 @@ sig_is([#b_set{op=call,
dst=Dst}=I0 | Is],
Ts0, Ds0, Ls, Fdb, Sub, State) ->
Args = simplify_args(Args0, Ts0, Sub),
- I1 = beam_ssa:normalize(I0#b_set{args=Args}),
+ I1 = I0#b_set{args=Args},
[Fun | _] = Args,
I = case normalized_type(Fun, Ts0) of
@@ -281,7 +295,7 @@ sig_is([#b_set{op=MakeFun,args=Args0,dst=Dst}=I0|Is],
Ts0, Ds0, Ls, Fdb, Sub0, State0) when MakeFun =:= make_fun;
MakeFun =:= old_make_fun ->
Args = simplify_args(Args0, Ts0, Sub0),
- I1 = beam_ssa:normalize(I0#b_set{args=Args}),
+ I1 = I0#b_set{args=Args},
{I, State} = sig_make_fun(I1, Ts0, Fdb, State0),
@@ -413,23 +427,28 @@ join_arg_types([], [], Ts) ->
%%
%% Optimizes a function based on the type information inferred by signatures/2
-%% and earlier runs of opt_function/5.
+%% and earlier runs of opt_function/5,6.
%%
%% This is pretty straightforward as it only walks through each function once,
%% and because it only makes types narrower it's safe to optimize the functions
%% in any order or not at all.
%%
--spec opt_function(Linear, Args, Id, Ts, FuncDb) -> Result when
+opt_function(Linear, Args, Id, Ts, FuncDb) ->
+ MetaCache = #{},
+ opt_function(Linear, Args, Id, Ts, FuncDb, MetaCache).
+
+-spec opt_function(Linear, Args, Id, Ts, FuncDb, MetaCache) -> Result when
Linear :: [{non_neg_integer(), beam_ssa:b_blk()}],
Args :: [beam_ssa:b_var()],
Id :: func_id(),
Ts :: type_db(),
FuncDb :: func_info_db(),
- Result :: {Linear, FuncDb}.
-opt_function(Linear, Args, Id, Ts, FuncDb) ->
+ Result :: {Linear, FuncDb},
+ MetaCache :: meta_cache().
+opt_function(Linear, Args, Id, Ts, FuncDb, MetaCache) ->
try
- do_opt_function(Linear, Args, Id, Ts, FuncDb)
+ do_opt_function(Linear, Args, Id, Ts, FuncDb, MetaCache)
catch
Class:Error:Stack ->
#b_local{name=#b_literal{val=Name},arity=Arity} = Id,
@@ -437,7 +456,7 @@ opt_function(Linear, Args, Id, Ts, FuncDb) ->
erlang:raise(Class, Error, Stack)
end.
-do_opt_function(Linear0, Args, Id, Ts, FuncDb0) ->
+do_opt_function(Linear0, Args, Id, Ts, FuncDb0, MetaCache) ->
FakeCall = #b_set{op=call,args=[#b_remote{mod=#b_literal{val=unknown},
name=#b_literal{val=unknown},
arity=0}]},
@@ -448,7 +467,12 @@ do_opt_function(Linear0, Args, Id, Ts, FuncDb0) ->
Ls = #{ ?EXCEPTION_BLOCK => {incoming, Ts},
0 => {incoming, Ts} },
- Meta = init_metadata(Id, Linear0, Args),
+ Meta = case MetaCache of
+ #{Id := Meta0} ->
+ Meta0;
+ #{} ->
+ init_metadata(Id, Linear0, Args)
+ end,
{Linear, FuncDb, SuccTypes} =
opt_bs(Linear0, Ds, Ls, FuncDb0, #{}, [], Meta, []),
@@ -497,7 +521,7 @@ opt_is([#b_set{op=call,
dst=Dst}=I0 | Is],
Ts0, Ds0, Ls, Fdb0, Sub, Meta, Acc) ->
Args = simplify_args(Args0, Ts0, Sub),
- I1 = beam_ssa:normalize(I0#b_set{args=Args}),
+ I1 = I0#b_set{args=Args},
[_ | CallArgs] = Args,
{I, Fdb} = opt_local_call(I1, Callee, CallArgs, Dst, Ts0, Fdb0, Meta),
@@ -510,7 +534,7 @@ opt_is([#b_set{op=call,
dst=Dst}=I0 | Is],
Ts0, Ds0, Ls, Fdb, Sub, Meta, Acc) ->
Args = simplify_args(Args0, Ts0, Sub),
- I1 = beam_ssa:normalize(I0#b_set{args=Args}),
+ I1 = I0#b_set{args=Args},
[Fun | _] = Args,
I = case normalized_type(Fun, Ts0) of
@@ -527,7 +551,7 @@ opt_is([#b_set{op=MakeFun,args=Args0,dst=Dst}=I0|Is],
Ts0, Ds0, Ls, Fdb0, Sub0, Meta, Acc) when MakeFun =:= make_fun;
MakeFun =:= old_make_fun ->
Args = simplify_args(Args0, Ts0, Sub0),
- I1 = beam_ssa:normalize(I0#b_set{args=Args}),
+ I1 = I0#b_set{args=Args},
{I, Fdb} = opt_make_fun(I1, Ts0, Fdb0, Meta),
@@ -688,9 +712,9 @@ simplify(#b_set{op=phi,dst=Dst,args=Args0}=I0, Ts0, Ds0, Ls, Sub) ->
Ds = Ds0#{ Dst => I },
{I, Ts, Ds}
end;
-simplify(#b_set{op={succeeded,Kind},args=[Arg],dst=Dst}=I0,
+simplify(#b_set{op={succeeded,Kind},args=[Arg],dst=Dst}=I,
Ts0, Ds0, _Ls, Sub) ->
- Type = case will_succeed(I0, Ts0, Ds0, Sub) of
+ Type = case will_succeed(I, Ts0, Ds0, Sub) of
yes -> beam_types:make_atom(true);
no -> beam_types:make_atom(false);
maybe -> beam_types:make_boolean()
@@ -711,14 +735,13 @@ simplify(#b_set{op={succeeded,Kind},args=[Arg],dst=Dst}=I0,
%% Note that we never simplify args; this instruction is specific
%% to the operation being checked, and simplifying could break that
%% connection.
- I = beam_ssa:normalize(I0),
Ts = Ts0#{ Dst => Type },
Ds = Ds0#{ Dst => I },
{I, Ts, Ds}
end;
simplify(#b_set{op=bs_match,dst=Dst,args=Args0}=I0, Ts0, Ds0, _Ls, Sub) ->
Args = simplify_args(Args0, Ts0, Sub),
- I1 = beam_ssa:normalize(I0#b_set{args=Args}),
+ I1 = I0#b_set{args=Args},
I2 = case {Args0,Args} of
{[_,_,_,#b_var{},_],[Type,Val,Flags,#b_literal{val=all},Unit]} ->
%% The size `all` is used for the size of the final binary
@@ -730,8 +753,7 @@ simplify(#b_set{op=bs_match,dst=Dst,args=Args0}=I0, Ts0, Ds0, _Ls, Sub) ->
end,
%% We KNOW that simplify/2 will return a #b_set{} record when called with
%% a bs_match instruction.
- #b_set{} = I3 = simplify(I2, Ts0),
- I = beam_ssa:normalize(I3),
+ #b_set{} = I = simplify(I2, Ts0),
Ts = update_types(I, Ts0, Ds0),
Ds = Ds0#{ Dst => I },
{I, Ts, Ds};
@@ -739,8 +761,7 @@ simplify(#b_set{dst=Dst,args=Args0}=I0, Ts0, Ds0, _Ls, Sub) ->
Args = simplify_args(Args0, Ts0, Sub),
I1 = beam_ssa:normalize(I0#b_set{args=Args}),
case simplify(I1, Ts0) of
- #b_set{}=I2 ->
- I = beam_ssa:normalize(I2),
+ #b_set{}=I ->
Ts = update_types(I, Ts0, Ds0),
Ds = Ds0#{ Dst => I },
{I, Ts, Ds};
@@ -885,6 +906,19 @@ simplify(#b_set{op={bif,'=:='},args=[LHS,RHS]}=I, Ts) ->
{_,_} ->
eval_bif(I, Ts)
end
+ end;
+simplify(#b_set{op={bif,is_list},args=[Src]}=I0, Ts) ->
+ case raw_type(Src, Ts) of
+ #t_union{list=#t_cons{}} ->
+ I = I0#b_set{op=is_nonempty_list,args=[Src]},
+ %% We might need to convert back to is_list/1 if it turns
+ %% out that this instruction is followed by a #b_ret{}
+ %% terminator.
+ beam_ssa:add_anno(was_bif_is_list, true, I);
+ #t_union{list=nil} ->
+ I0#b_set{op={bif,'=:='},args=[Src,#b_literal{val=[]}]};
+ _ ->
+ eval_bif(I0, Ts)
end;
simplify(#b_set{op={bif,Op},args=Args}=I, Ts) ->
Types = normalized_types(Args, Ts),
@@ -945,7 +979,51 @@ simplify(#b_set{op=is_nonempty_list,args=[Src]}=I, Ts) ->
end;
simplify(#b_set{op=is_tagged_tuple,
args=[Src,#b_literal{val=Size},#b_literal{}=Tag]}=I, Ts) ->
- simplify_is_record(I, normalized_type(Src, Ts), Size, Tag, Ts);
+ case raw_type(Src, Ts) of
+ #t_union{tuple_set=TupleSet}=U ->
+ %% A union of different types, one of them (probably)
+ %% a tuple. Dig out the tuple type from the union and
+ %% find out whether it will match.
+ TupleOnlyType = #t_union{tuple_set=TupleSet},
+ TT = beam_types:normalize(TupleOnlyType),
+ case simplify_is_record(I, TT, Size, Tag, Ts) of
+ #b_literal{val=true} ->
+ %% The tuple part of the union will always match.
+ %% A simple is_tuple/1 test will be sufficient to
+ %% distinguish the tuple from the other types in
+ %% the union.
+ I#b_set{op={bif,is_tuple},args=[Src]};
+ #b_literal{val=false}=False ->
+ %% Src is never a tuple.
+ False;
+ _ ->
+ %% More than one type of tuple can match. Find out
+ %% whether the possible tuples can be
+ %% distinguished by size.
+ TupleArityType = #t_tuple{size=Size,exact=true},
+ TTT = beam_types:meet(TupleArityType, TupleOnlyType),
+ case simplify_is_record(I, TTT, Size, Tag, Ts) of
+ #b_literal{val=true} ->
+ %% The possible tuple types have different sizes.
+ %% Example: {ok, _} | {error, _, _}.
+ case beam_types:normalize(U) of
+ #t_tuple{} ->
+ %% Src is known to be a tuple, so it will
+ %% be sufficient to test the arity.
+ beam_ssa:add_anno(constraints, arity, I);
+ any ->
+ %% Src might not be a tuple. Must
+ %% test for a tuple with a given
+ %% arity.
+ beam_ssa:add_anno(constraints, tuple_arity, I)
+ end;
+ _ ->
+ I
+ end
+ end;
+ SimpleType ->
+ simplify_is_record(I, SimpleType, Size, Tag, Ts)
+ end;
simplify(#b_set{op=put_list,args=[#b_literal{val=H},
#b_literal{val=T}]}, _Ts) ->
#b_literal{val=[H|T]};
@@ -1564,7 +1642,7 @@ update_successors(#b_br{bool=#b_literal{val=true},succ=Succ}=Last,
{Last, update_successor(Succ, Ts, Ls)};
update_successors(#b_br{bool=#b_var{}=Bool,succ=Succ,fail=Fail}=Last0,
Ts, Ds, Ls0, UsedOnce) ->
- IsTempVar = sets:is_element(Bool, UsedOnce),
+ IsTempVar = is_map_key(Bool, UsedOnce),
case infer_types_br(Bool, Ts, IsTempVar, Ds) of
{#{}=SuccTs, #{}=FailTs} ->
Ls1 = update_successor(Succ, SuccTs, Ls0),
@@ -1579,7 +1657,7 @@ update_successors(#b_br{bool=#b_var{}=Bool,succ=Succ,fail=Fail}=Last0,
end;
update_successors(#b_switch{arg=#b_var{}=V,fail=Fail0,list=List0}=Last0,
Ts, Ds, Ls0, UsedOnce) ->
- IsTempVar = sets:is_element(V, UsedOnce),
+ IsTempVar = is_map_key(V, UsedOnce),
{List1, FailTs, Ls1} =
update_switch(List0, V, raw_type(V, Ts), Ts, Ds, Ls0, IsTempVar, []),
@@ -2148,9 +2226,8 @@ gcd(A, B) ->
%%%
init_metadata(FuncId, Linear, Params) ->
- {RetCounter, Map0} = init_metadata_1(reverse(Linear), 0, #{}),
- Map = maps:without(Params, Map0),
- UsedOnce = sets:from_list(maps:keys(Map), [{version, 2}]),
+ {RetCounter, UsedOnce0} = init_metadata_1(reverse(Linear), 0, #{}),
+ UsedOnce = maps:without(Params, UsedOnce0),
#metadata{ func_id = FuncId,
limit_return = (RetCounter >= ?RETURN_LIMIT),
@@ -2165,11 +2242,11 @@ init_metadata_1([{L,#b_blk{is=Is,last=Last}} | Bs], RetCounter0, Uses0) ->
_ -> RetCounter0
end,
- %% Calculate the set of variables that are only used once in the terminator
- %% of the block that defines them. That will allow us to discard type
- %% information discard type information for variables that will never be
- %% referenced by the successor blocks, potentially improving compilation
- %% times.
+ %% Calculate the set of variables that are only used once in the
+ %% terminator of the block that defines them. That will allow us
+ %% to discard type information for variables that will never be
+ %% referenced by the successor blocks, potentially improving
+ %% compilation times.
Uses1 = used_once_last_uses(beam_ssa:used(Last), L, Uses0),
Uses = used_once_2(reverse(Is), L, Uses1),
@@ -2180,7 +2257,7 @@ init_metadata_1([], RetCounter, Uses) ->
used_once_2([#b_set{dst=Dst}=I|Is], L, Uses0) ->
Uses = used_once_uses(beam_ssa:used(I), L, Uses0),
case Uses of
- #{Dst:=[L]} ->
+ #{Dst:=L} ->
used_once_2(Is, L, Uses);
#{} ->
%% Used more than once or used once in
@@ -2202,15 +2279,15 @@ used_once_uses([], _, Uses) -> Uses.
used_once_last_uses([V|Vs], L, Uses) ->
case Uses of
- #{V:=[_]} ->
- %% Second time this variable is used.
- used_once_last_uses(Vs, L, Uses#{V:=more_than_once});
#{V:=more_than_once} ->
%% Used at least twice before.
used_once_last_uses(Vs, L, Uses);
+ #{V:=_} ->
+ %% Second time this variable is used.
+ used_once_last_uses(Vs, L, Uses#{V:=more_than_once});
#{} ->
%% First time this variable is used.
- used_once_last_uses(Vs, L, Uses#{V=>[L]})
+ used_once_last_uses(Vs, L, Uses#{V=>L})
end;
used_once_last_uses([], _, Uses) -> Uses.
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index 437bc9b24a..816c29bc55 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -21,7 +21,7 @@
%%
-module(beam_utils).
--export([replace_labels/4,is_pure_test/1,split_even/1]).
+-export([replace_labels/4,split_even/1]).
-export_type([code_index/0,module_code/0,instruction/0]).
@@ -39,11 +39,6 @@
-type module_code() ::
{module(),[_],[_],[int_function()],pos_integer()}.
-%% Internal types.
--type fail() :: beam_asm:fail() | 'fail'.
--type test() :: {'test',atom(),fail(),[beam_asm:src()]} |
- {'test',atom(),fail(),integer(),list(),beam_asm:reg()}.
-
%% replace_labels(FunctionIs, Tail, ReplaceDb, Fallback) -> FunctionIs.
%% Replace all labels in instructions according to the ReplaceDb.
%% If label is not found the Fallback is called with the label to
@@ -56,28 +51,6 @@
replace_labels(Is, Acc, D, Fb) ->
replace_labels_1(Is, Acc, D, Fb).
-%% is_pure_test({test,Op,Fail,Ops}) -> true|false.
-%% Return 'true' if the test instruction does not modify any
-%% registers and/or bit syntax matching state.
-%%
-
--spec is_pure_test(test()) -> boolean().
-
-is_pure_test({test,is_eq,_,[_,_]}) -> true;
-is_pure_test({test,is_ne,_,[_,_]}) -> true;
-is_pure_test({test,is_eq_exact,_,[_,_]}) -> true;
-is_pure_test({test,is_ne_exact,_,[_,_]}) -> true;
-is_pure_test({test,is_ge,_,[_,_]}) -> true;
-is_pure_test({test,is_lt,_,[_,_]}) -> true;
-is_pure_test({test,is_nonempty_list,_,[_]}) -> true;
-is_pure_test({test,is_tagged_tuple,_,[_,_,_]}) -> true;
-is_pure_test({test,test_arity,_,[_,_]}) -> true;
-is_pure_test({test,has_map_fields,_,[_|_]}) -> true;
-is_pure_test({test,is_bitstr,_,[_]}) -> true;
-is_pure_test({test,is_function2,_,[_,_]}) -> true;
-is_pure_test({test,Op,_,Ops}) ->
- erl_internal:new_type_test(Op, length(Ops)).
-
%% split_even/1
%% [1,2,3,4,5,6] -> {[1,3,5],[2,4,6]}
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index 0e343d7533..4c9122d2c6 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -847,8 +847,6 @@ vi({bs_start_match4,Fail,Live,Src,Dst}, Vst) ->
validate_bs_start_match(Fail, Live, 0, Src, Dst, Vst);
vi({test,bs_start_match3,{f,_}=Fail,Live,[Src],Dst}, Vst) ->
validate_bs_start_match(Fail, Live, 0, Src, Dst, Vst);
-vi({test,bs_start_match2,{f,_}=Fail,Live,[Src,Slots],Dst}, Vst) ->
- validate_bs_start_match(Fail, Live, Slots, Src, Dst, Vst);
vi({test,bs_match_string,{f,Fail},[Ctx,Stride,{string,String}]}, Vst) ->
true = is_bitstring(String), %Assertion.
validate_bs_skip(Fail, Ctx, Stride, Vst);
@@ -929,10 +927,6 @@ vi({test,_Op,{f,Lbl},Src}, Vst) ->
%% Bit syntax positioning
%%
-vi({bs_save2,Ctx,SavePoint}, Vst) ->
- bsm_save(Ctx, SavePoint, Vst);
-vi({bs_restore2,Ctx,SavePoint}, Vst) ->
- bsm_restore(Ctx, SavePoint, Vst);
vi({bs_get_position, Ctx, Dst, Live}, Vst0) ->
assert_type(#t_bs_context{}, Ctx, Vst0),
@@ -1843,41 +1837,6 @@ assert_unique_map_keys([_,_|_]=Ls) ->
false -> error(keys_not_unique)
end.
-%%%
-%%% New binary matching instructions.
-%%%
-
-bsm_save(Reg, {atom,start}, Vst) ->
- %% Save point refering to where the match started.
- %% It is always valid. But don't forget to validate the context register.
- assert_type(#t_bs_context{}, Reg, Vst),
- Vst;
-bsm_save(Reg, SavePoint, Vst) ->
- case get_movable_term_type(Reg, Vst) of
- #t_bs_context{valid=Bits,slots=Slots}=Ctxt0 when SavePoint < Slots ->
- Ctx = Ctxt0#t_bs_context{valid=Bits bor (1 bsl SavePoint),
- slots=Slots},
- override_type(Ctx, Reg, Vst);
- _ ->
- error({illegal_save, SavePoint})
- end.
-
-bsm_restore(Reg, {atom,start}, Vst) ->
- %% (Mostly) automatic save point refering to where the match started.
- %% It is always valid. But don't forget to validate the context register.
- assert_type(#t_bs_context{}, Reg, Vst),
- Vst;
-bsm_restore(Reg, SavePoint, Vst) ->
- case get_movable_term_type(Reg, Vst) of
- #t_bs_context{valid=Bits,slots=Slots} when SavePoint < Slots ->
- case Bits band (1 bsl SavePoint) of
- 0 -> error({illegal_restore, SavePoint, not_set});
- _ -> Vst
- end;
- _ ->
- error({illegal_restore, SavePoint, range})
- end.
-
bsm_stride({integer, Size}, Unit) ->
Size * Unit;
bsm_stride(_Size, Unit) ->
diff --git a/lib/compiler/src/beam_z.erl b/lib/compiler/src/beam_z.erl
index e4bf879fb2..84f18a2d41 100644
--- a/lib/compiler/src/beam_z.erl
+++ b/lib/compiler/src/beam_z.erl
@@ -24,23 +24,21 @@
-export([module/2]).
--import(lists, [dropwhile/2,map/2,sort/1]).
+-import(lists, [dropwhile/2,sort/1]).
-spec module(beam_utils:module_code(), [compile:option()]) ->
{'ok',beam_asm:module_code()}.
module({Mod,Exp,Attr,Fs0,Lc}, Opts) ->
- NoGetHdTl = proplists:get_bool(no_get_hd_tl, Opts),
NoInitYregs = proplists:get_bool(no_init_yregs, Opts),
- Fs = [function(F, NoGetHdTl, NoInitYregs) || F <- Fs0],
+ Fs = [function(F, NoInitYregs) || F <- Fs0],
{ok,{Mod,Exp,Attr,Fs,Lc}}.
-function({function,Name,Arity,CLabel,Is0}, NoGetHdTl, NoInitYregs) ->
+function({function,Name,Arity,CLabel,Is0}, NoInitYregs) ->
try
Is1 = undo_renames(Is0),
- Is2 = maybe_eliminate_get_hd_tl(Is1, NoGetHdTl),
- Is3 = maybe_eliminate_init_yregs(Is2, NoInitYregs),
- Is = remove_redundant_lines(Is3),
+ Is2 = maybe_eliminate_init_yregs(Is1, NoInitYregs),
+ Is = remove_redundant_lines(Is2),
{function,Name,Arity,CLabel,Is}
catch
Class:Error:Stack ->
@@ -162,20 +160,6 @@ undo_rename({select,I,Reg,Fail,List}) ->
undo_rename(I) -> I.
%%%
-%%% Eliminate get_hd/get_tl instructions if requested by
-%%% the no_get_hd_tl option.
-%%%
-
-maybe_eliminate_get_hd_tl(Is, true) ->
- map(fun({get_hd,Cons,Hd}) ->
- {get_list,Cons,Hd,{x,1022}};
- ({get_tl,Cons,Tl}) ->
- {get_list,Cons,{x,1022},Tl};
- (I) -> I
- end, Is);
-maybe_eliminate_get_hd_tl(Is, false) -> Is.
-
-%%%
%%% Eliminate the init_yreg/1 instruction if requested by
%%% the no_init_yregs option.
%%%
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 7a36c6333a..faed60e938 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -271,14 +271,6 @@ expand_opt(no_bsm4, Os) ->
%% bsm4 instructions are only used when type optimization has determined
%% that a match instruction won't fail.
expand_opt(no_type_opt, Os);
-expand_opt(r18, Os) ->
- expand_opt_before_21(Os);
-expand_opt(r19, Os) ->
- expand_opt_before_21(Os);
-expand_opt(r20, Os) ->
- expand_opt_before_21(Os);
-expand_opt(r21, Os) ->
- expand_opt(r22, [no_put_tuple2 | expand_opt(no_bsm3, Os)]);
expand_opt(r22, Os) ->
expand_opt(r23, [no_shared_fun_wrappers, no_swap | expand_opt(no_bsm4, Os)]);
expand_opt(r23, Os) ->
@@ -298,15 +290,10 @@ expand_opt(no_module_opt=O, Os) ->
[O,no_recv_opt | Os];
expand_opt(O, Os) -> [O|Os].
-expand_opt_before_21(Os) ->
- [no_init_yregs, no_make_fun3, no_fun_opt,
- no_shared_fun_wrappers, no_swap,
- no_put_tuple2, no_get_hd_tl, no_ssa_opt_record,
- no_utf8_atoms, no_recv_opt | expand_opt(no_bsm3, Os)].
-
-
-spec format_error(error_description()) -> iolist().
+format_error({obsolete_option,Ver}) ->
+ io_lib:fwrite("the ~p option is no longer supported", [Ver]);
format_error(no_crypto) ->
"this system is not configured with crypto support.";
format_error(bad_crypto_key) ->
@@ -916,8 +903,6 @@ asm_passes() ->
{iff,dblk,{listing,"block"}},
{unless,no_jopt,{pass,beam_jump}},
{iff,djmp,{listing,"jump"}},
- {unless,no_peep_opt,{pass,beam_peep}},
- {iff,dpeep,{listing,"peep"}},
{pass,beam_clean},
{iff,dclean,{listing,"clean"}},
{unless,no_stack_trimming,{pass,beam_trim}},
@@ -1430,9 +1415,35 @@ expand_records(Code0, #compile{options=Opts}=St) ->
Code = erl_expand_records:module(Code0, Opts),
{ok,Code,St}.
-compile_directives(Forms, #compile{options=Opts0}=St) ->
- Opts = expand_opts(flatten([C || {attribute,_,compile,C} <- Forms])),
- {ok, Forms, St#compile{options=Opts ++ Opts0}}.
+compile_directives(Forms, #compile{options=Opts0}=St0) ->
+ Opts1 = expand_opts(flatten([C || {attribute,_,compile,C} <- Forms])),
+ Opts = Opts1 ++ Opts0,
+ St1 = St0#compile{options=Opts},
+ case any_obsolete_option(Opts) of
+ {yes,Opt} ->
+ Error = {St1#compile.ifile,[{none,?MODULE,{obsolete_option,Opt}}]},
+ St = St1#compile{errors=[Error|St1#compile.errors]},
+ {error,St};
+ no ->
+ {ok,Forms,St1}
+ end.
+
+any_obsolete_option([Opt|Opts]) ->
+ case is_obsolete(Opt) of
+ true -> {yes,Opt};
+ false -> any_obsolete_option(Opts)
+ end;
+any_obsolete_option([]) -> no.
+
+is_obsolete(r18) -> true;
+is_obsolete(r19) -> true;
+is_obsolete(r20) -> true;
+is_obsolete(r21) -> true;
+is_obsolete(no_bsm3) -> true;
+is_obsolete(no_get_hd_tl) -> true;
+is_obsolete(no_put_tuple2) -> true;
+is_obsolete(no_utf8_atoms) -> true;
+is_obsolete(_) -> false.
core(Forms, #compile{options=Opts}=St) ->
{ok,Core,Ws} = v3_core:module(Forms, Opts),
@@ -2020,7 +2031,6 @@ pre_load() ->
beam_jump,
beam_kernel_to_ssa,
beam_opcodes,
- beam_peep,
beam_ssa,
beam_ssa_bc_size,
beam_ssa_bool,
diff --git a/lib/compiler/src/compiler.app.src b/lib/compiler/src/compiler.app.src
index fe7179b695..6aa4009645 100644
--- a/lib/compiler/src/compiler.app.src
+++ b/lib/compiler/src/compiler.app.src
@@ -34,7 +34,6 @@
beam_kernel_to_ssa,
beam_listing,
beam_opcodes,
- beam_peep,
beam_ssa,
beam_ssa_bc_size,
beam_ssa_bool,
@@ -82,5 +81,5 @@
{registered, []},
{applications, [kernel, stdlib]},
{env, []},
- {runtime_dependencies, ["stdlib-3.13","kernel-7.0","erts-11.0",
- "crypto-3.6"]}]}.
+ {runtime_dependencies, ["stdlib-3.15","kernel-7.0","erts-11.0",
+ "crypto-4.5"]}]}.
diff --git a/lib/compiler/src/genop.tab b/lib/compiler/src/genop.tab
index fafffdc03f..9c0fb13c84 100755
--- a/lib/compiler/src/genop.tab
+++ b/lib/compiler/src/genop.tab
@@ -332,8 +332,8 @@ BEAM_FORMAT_NUMBER=0
#
68: -put_string/3
69: put_list/3
-70: put_tuple/2
-71: put/1
+70: -put_tuple/2
+71: -put/1
#
# Raising errors.
@@ -438,14 +438,14 @@ BEAM_FORMAT_NUMBER=0
# New bit syntax matching in R11B.
-116: bs_start_match2/5
+116: -bs_start_match2/5
117: bs_get_integer2/7
118: bs_get_float2/7
119: bs_get_binary2/7
120: bs_skip_bits2/5
121: bs_test_tail2/3
-122: bs_save2/2
-123: bs_restore2/2
+122: -bs_save2/2
+123: -bs_restore2/2
# New GC bifs introduced in R11B.
@@ -478,7 +478,7 @@ BEAM_FORMAT_NUMBER=0
129: is_bitstr/2
# R12B
-130: bs_context_to_binary/1
+130: -bs_context_to_binary/1
131: bs_test_unit/3
132: bs_match_string/4
133: bs_init_writable/0
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index 01e9987196..3653d5e647 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -324,19 +324,16 @@ expr(#c_case{}=Case0, Ctxt, Sub) ->
%% (in addition to any warnings that may have been emitted
%% according to the rules above).
%%
- case opt_bool_case(Case0, Sub) of
- #c_case{anno=Anno,arg=Arg0,clauses=Cs0}=Case1 ->
- Arg1 = body(Arg0, value, Sub),
- LitExpr = cerl:is_literal(Arg1),
- {Arg2,Cs1} = case_opt(Arg1, Cs0, Sub),
- Cs2 = clauses(Arg2, Cs1, Ctxt, Sub, LitExpr, Anno),
- Case = Case1#c_case{arg=Arg2,clauses=Cs2},
- warn_no_clause_match(Case1, Case),
- Expr = eval_case(Case, Sub),
- move_case_into_arg(Expr, Sub);
- Other ->
- expr(Other, Ctxt, Sub)
- end;
+ Case1 = opt_bool_case(Case0, Sub),
+ #c_case{anno=Anno,arg=Arg0,clauses=Cs0} = Case1,
+ Arg1 = body(Arg0, value, Sub),
+ LitExpr = cerl:is_literal(Arg1),
+ {Arg2,Cs1} = case_opt(Arg1, Cs0, Sub),
+ Cs2 = clauses(Arg2, Cs1, Ctxt, Sub, LitExpr, Anno),
+ Case = Case1#c_case{arg=Arg2,clauses=Cs2},
+ warn_no_clause_match(Case1, Case),
+ Expr = eval_case(Case, Sub),
+ move_case_into_arg(Expr, Sub);
expr(#c_apply{anno=Anno,op=Op0,args=As0}=Apply0, _, Sub) ->
Op1 = expr(Op0, value, Sub),
As1 = expr_list(As0, value, Sub),
@@ -1593,34 +1590,12 @@ opt_bool_not(#c_case{arg=Arg,clauses=Cs0}=Case0) ->
Case = Case0#c_case{arg=Expr,clauses=Cs},
opt_bool_not(Case);
_ ->
- opt_bool_case_redundant(Case0)
+ Case0
end.
opt_bool_not_invert(#c_clause{pats=[#c_literal{val=Bool}]}=C) ->
C#c_clause{pats=[#c_literal{val=not Bool}]}.
-%% opt_bool_case_redundant(Core) -> Core'.
-%% If the sole purpose of the case is to verify that the case
-%% expression is indeed boolean, we do not need the case
-%% (since we have already verified that the case expression is
-%% boolean).
-%%
-%% case BoolExpr of
-%% true -> true ==> BoolExpr
-%% false -> false
-%% end.
-%%
-opt_bool_case_redundant(#c_case{arg=Arg,clauses=Cs}=Case) ->
- case all(fun opt_bool_case_redundant_1/1, Cs) of
- true -> Arg;
- false -> Case
- end.
-
-opt_bool_case_redundant_1(#c_clause{pats=[#c_literal{val=B}],
- body=#c_literal{val=B}}) ->
- true;
-opt_bool_case_redundant_1(_) -> false.
-
%% eval_case(Case) -> #c_case{} | #c_let{}.
%% If possible, evaluate a case at compile time. We know that the
%% last clause is guaranteed to match so if there is only one clause
diff --git a/lib/compiler/test/Makefile b/lib/compiler/test/Makefile
index 9019429414..467a2be6e3 100644
--- a/lib/compiler/test/Makefile
+++ b/lib/compiler/test/Makefile
@@ -103,9 +103,7 @@ INLINE= \
receive \
record
-R21= \
- bs_construct \
- bs_match \
+R23= \
fun
DIALYZER = bs_match
@@ -128,8 +126,8 @@ NO_CORE_OPT_MODULES= $(NO_OPT:%=%_no_copt_SUITE)
NO_CORE_OPT_ERL_FILES= $(NO_CORE_OPT_MODULES:%=%.erl)
INLINE_MODULES= $(INLINE:%=%_inline_SUITE)
INLINE_ERL_FILES= $(INLINE_MODULES:%=%.erl)
-R21_MODULES= $(R21:%=%_r21_SUITE)
-R21_ERL_FILES= $(R21_MODULES:%=%.erl)
+R23_MODULES= $(R23:%=%_r23_SUITE)
+R23_ERL_FILES= $(R23_MODULES:%=%.erl)
NO_MOD_OPT_MODULES= $(NO_MOD_OPT:%=%_no_module_opt_SUITE)
NO_MOD_OPT_ERL_FILES= $(NO_MOD_OPT_MODULES:%=%.erl)
NO_SSA_OPT_MODULES= $(NO_SSA_OPT:%=%_no_ssa_opt_SUITE)
@@ -169,7 +167,7 @@ EBIN = .
DISABLE_SSA_OPT = +no_bool_opt +no_share_opt +no_bsm_opt +no_fun_opt +no_ssa_opt +no_recv_opt
make_emakefile: $(NO_OPT_ERL_FILES) $(POST_OPT_ERL_FILES) $(NO_SSA_OPT_ERL_FILES) \
- $(NO_CORE_OPT_ERL_FILES) $(INLINE_ERL_FILES) $(R21_ERL_FILES) \
+ $(NO_CORE_OPT_ERL_FILES) $(INLINE_ERL_FILES) $(R23_ERL_FILES) \
$(NO_MOD_OPT_ERL_FILES) $(NO_TYPE_OPT_ERL_FILES) \
$(DIALYZER_ERL_FILES)
$(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) $(MODULES) \
@@ -184,8 +182,8 @@ make_emakefile: $(NO_OPT_ERL_FILES) $(POST_OPT_ERL_FILES) $(NO_SSA_OPT_ERL_FILES
-o$(EBIN) $(NO_CORE_OPT_MODULES) >> $(EMAKEFILE)
$(ERL_TOP)/make/make_emakefile +inline $(ERL_COMPILE_FLAGS) \
-o$(EBIN) $(INLINE_MODULES) >> $(EMAKEFILE)
- $(ERL_TOP)/make/make_emakefile +r21 $(ERL_COMPILE_FLAGS) \
- -o$(EBIN) $(R21_MODULES) >> $(EMAKEFILE)
+ $(ERL_TOP)/make/make_emakefile +r23 $(ERL_COMPILE_FLAGS) \
+ -o$(EBIN) $(R23_MODULES) >> $(EMAKEFILE)
$(ERL_TOP)/make/make_emakefile +no_module_opt $(ERL_COMPILE_FLAGS) \
-o$(EBIN) $(NO_MOD_OPT_MODULES) >> $(EMAKEFILE)
$(ERL_TOP)/make/make_emakefile +from_core $(ERL_COMPILE_FLAGS) \
@@ -224,7 +222,7 @@ docs:
%_inline_SUITE.erl: %_SUITE.erl
sed -e 's;-module($(basename $<));-module($(basename $@));' $< > $@
-%_r21_SUITE.erl: %_SUITE.erl
+%_r23_SUITE.erl: %_SUITE.erl
sed -e 's;-module($(basename $<));-module($(basename $@));' $< > $@
%_no_module_opt_SUITE.erl: %_SUITE.erl
@@ -248,7 +246,7 @@ release_tests_spec: make_emakefile
$(INSTALL_DATA) compiler.spec compiler.cover \
$(EMAKEFILE) $(ERL_FILES) "$(RELSYSDIR)"
$(INSTALL_DATA) $(NO_OPT_ERL_FILES) $(POST_OPT_ERL_FILES) \
- $(INLINE_ERL_FILES) $(R21_ERL_FILES) \
+ $(INLINE_ERL_FILES) $(R23_ERL_FILES) \
$(NO_CORE_OPT_ERL_FILES) \
$(NO_MOD_OPT_ERL_FILES) \
$(NO_SSA_OPT_ERL_FILES) \
diff --git a/lib/compiler/test/beam_except_SUITE.erl b/lib/compiler/test/beam_except_SUITE.erl
index ec29659f66..93cb3b0688 100644
--- a/lib/compiler/test/beam_except_SUITE.erl
+++ b/lib/compiler/test/beam_except_SUITE.erl
@@ -57,8 +57,8 @@ multiple_allocs(_Config) ->
ok.
-could(Coupons = pda, Favorite = _pleasure = 0.0, {_, true}, {Presents}) ->
- (0 = true) = #{true => [Presents]}.
+could(_Coupons = pda, _Favorite = _pleasure = 0.0, {_, true}, {Presents}) ->
+ (0 = true) = #{true => [Presents]}.
place(lee) ->
(pregnancy = presentations) = [hours | [purchase || _ <- 0]] + wine.
@@ -114,8 +114,16 @@ coverage(_) ->
{'EXIT',{undef,[{erlang,error,[a,b,c,d],_}|_]}} =
(catch erlang:error(a, b, c, d)),
- {'EXIT',{badarith,[{?MODULE,bar,1,[File,{line,9}]}|_]}} =
- (catch bar(x)),
+ %% The stacktrace for operators such a '+' can vary depending on
+ %% whether the JIT is used or not.
+ case catch bar(x) of
+ {'EXIT',{badarith,[{erlang,'+',[x,1],[_|_]},
+ {?MODULE,bar,1,[File,{line,9}]}|_]}} ->
+ ok;
+ {'EXIT',{badarith,[{?MODULE,bar,1,[File,{line,9}]}|_]}} ->
+ ok
+ end,
+
{'EXIT',{{case_clause,{1}},[{?MODULE,bar,1,[File,{line,9}]}|_]}} =
(catch bar(0)),
diff --git a/lib/compiler/test/beam_ssa_SUITE.erl b/lib/compiler/test/beam_ssa_SUITE.erl
index 311ab556fc..6bada57a2a 100644
--- a/lib/compiler/test/beam_ssa_SUITE.erl
+++ b/lib/compiler/test/beam_ssa_SUITE.erl
@@ -25,7 +25,8 @@
cover_ssa_dead/1,combine_sw/1,share_opt/1,
beam_ssa_dead_crash/1,stack_init/1,
mapfoldl/0,mapfoldl/1,
- grab_bag/1,coverage/1]).
+ grab_bag/1,redundant_br/1,
+ coverage/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -45,6 +46,7 @@ groups() ->
beam_ssa_dead_crash,
stack_init,
grab_bag,
+ redundant_br,
coverage
]}].
@@ -933,7 +935,7 @@ grab_bag_4() ->
end
end.
-grab_bag_5(A, B) when <<business:(node(power))>> ->
+grab_bag_5(_A, _B) when <<business:(node(power))>> ->
true.
grab_bag_6(face) ->
@@ -1084,6 +1086,18 @@ grab_bag_17() ->
[]
end.
+redundant_br(_Config) ->
+ {false,{x,y,z}} = redundant_br_1(id({x,y,z})),
+ {true,[[a,b,c]]} = redundant_br_1(id([[[a,b,c]]])),
+ ok.
+
+redundant_br_1(Specs0) ->
+ {Join,Specs} =
+ if
+ is_list(hd(hd(Specs0))) -> {true,hd(Specs0)};
+ true -> {false,Specs0}
+ end,
+ id({Join,Specs}).
coverage(_Config) ->
diff --git a/lib/compiler/test/beam_type_SUITE.erl b/lib/compiler/test/beam_type_SUITE.erl
index 1f4fa6599f..7cc18cdda0 100644
--- a/lib/compiler/test/beam_type_SUITE.erl
+++ b/lib/compiler/test/beam_type_SUITE.erl
@@ -26,7 +26,7 @@
arity_checks/1,elixir_binaries/1,find_best/1,
test_size/1,cover_lists_functions/1,list_append/1,bad_binary_unit/1,
none_argument/1,success_type_oscillation/1,type_subtraction/1,
- container_subtraction/1]).
+ container_subtraction/1,is_list_opt/1]).
%% Force id/1 to return 'any'.
-export([id/1]).
@@ -58,7 +58,8 @@ groups() ->
none_argument,
success_type_oscillation,
type_subtraction,
- container_subtraction
+ container_subtraction,
+ is_list_opt
]}].
init_per_suite(Config) ->
@@ -661,5 +662,19 @@ cs_1({_,_}=Other) ->
cs_2({bar,baz}) ->
ok.
+is_list_opt(_Config) ->
+ true = is_list_opt_1(id(<<"application/a2l">>)),
+ false = is_list_opt_1(id(<<"">>)),
+ ok.
+
+is_list_opt_1(Type) ->
+ %% The call to is_list/1 would be optimized to an is_nonempty_list
+ %% instruction, which is illegal in a return context. That would
+ %% crash beam_ssa_codegen.
+ is_list(is_list_opt_2(Type)).
+
+is_list_opt_2(<<"application/a2l">>) -> [<<"a2l">>];
+is_list_opt_2(_Type) -> nil.
+
id(I) ->
I.
diff --git a/lib/compiler/test/beam_utils_SUITE.erl b/lib/compiler/test/beam_utils_SUITE.erl
index eb0af59f9d..f25a72e623 100644
--- a/lib/compiler/test/beam_utils_SUITE.erl
+++ b/lib/compiler/test/beam_utils_SUITE.erl
@@ -392,9 +392,9 @@ merchant([Merchant, Laws, Electric]) ->
if true; Electric -> Laws end) + 42.
oklahoma([], Int) -> Int.
-town(overall, {{If}, Healing = alcohol})
- when Healing#{[] => Healing}; include ->
- [If || Healing <- awareness].
+town(overall, {{If}, _Healing = alcohol})
+ when _Healing#{[] => _Healing}; include ->
+ [If || _Healing <- awareness].
%% Cover is_reg_used_at/3.
resulting([Conservation], stone) ->
diff --git a/lib/compiler/test/bs_match_SUITE.erl b/lib/compiler/test/bs_match_SUITE.erl
index 5bb116752a..e9f7b74cf2 100644
--- a/lib/compiler/test/bs_match_SUITE.erl
+++ b/lib/compiler/test/bs_match_SUITE.erl
@@ -1623,9 +1623,9 @@ mos_int_receive(Msg) ->
Res.
mos_int_fun(B) ->
- L = ignore_me,
- F = fun ([<<L,I:L,X:32>>]) -> {I,X};
- ([<<L,I:L,X:64>>]) -> {I,X}
+ _L = ignore_me,
+ F = fun ([<<_L,I:_L,X:32>>]) -> {I,X};
+ ([<<_L,I:_L,X:64>>]) -> {I,X}
end,
F(B).
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index 3db70e466e..12fadd59d5 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -33,12 +33,12 @@
other_output/1, kernel_listing/1, encrypted_abstr/1,
strict_record/1, utf8_atoms/1, utf8_functions/1, extra_chunks/1,
cover/1, env/1, core_pp/1, tuple_calls/1,
- core_roundtrip/1, asm/1,
+ core_roundtrip/1, asm/1, asm_labels/1,
sys_pre_attributes/1, dialyzer/1, no_core_prepare/1,
warnings/1, pre_load_check/1, env_compiler_options/1,
bc_options/1, deterministic_include/1, deterministic_paths/1,
compile_attribute/1, message_printing/1, other_options/1,
- transforms/1, erl_compile_api/1
+ transforms/1, erl_compile_api/1, types_pp/1
]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -52,12 +52,12 @@ all() ->
binary, makedep, cond_and_ifdef, listings, listings_big,
other_output, kernel_listing, encrypted_abstr, tuple_calls,
strict_record, utf8_atoms, utf8_functions, extra_chunks,
- cover, env, core_pp, core_roundtrip, asm, no_core_prepare,
+ cover, env, core_pp, core_roundtrip, asm, asm_labels, no_core_prepare,
sys_pre_attributes, dialyzer, warnings, pre_load_check,
env_compiler_options, custom_debug_info, bc_options,
custom_compile_info, deterministic_include, deterministic_paths,
compile_attribute, message_printing, other_options, transforms,
- erl_compile_api].
+ erl_compile_api, types_pp].
groups() ->
[].
@@ -486,7 +486,6 @@ do_file_listings(DataDir, PrivDir, [File|Files]) ->
{dblk, ".block"},
{djmp, ".jump"},
{dclean, ".clean"},
- {dpeep, ".peep"},
{dopt, ".optimize"},
{diffable, ".S"}],
p_listings(List, Simple, TargetDir),
@@ -495,16 +494,15 @@ do_file_listings(DataDir, PrivDir, [File|Files]) ->
do_listing(Simple, TargetDir, to_pp, ".P"),
do_listing(Simple, TargetDir, to_exp, ".E"),
do_listing(Simple, TargetDir, to_core0, ".core"),
- Listings = filename:join(PrivDir, listings),
- ok = file:delete(filename:join(Listings, File ++ ".core")),
+ ok = file:delete(filename:join(TargetDir, File ++ ".core")),
do_listing(Simple, TargetDir, to_core, ".core"),
do_listing(Simple, TargetDir, to_kernel, ".kernel"),
do_listing(Simple, TargetDir, to_dis, ".dis"),
%% Final clean up.
lists:foreach(fun(F) -> ok = file:delete(F) end,
- filelib:wildcard(filename:join(Listings, "*"))),
- ok = file:del_dir(Listings),
+ filelib:wildcard(filename:join(TargetDir, "*"))),
+ ok = file:del_dir(TargetDir),
do_file_listings(DataDir,PrivDir,Files).
@@ -881,9 +879,8 @@ utf8_atoms(Config) when is_list(Config) ->
beam_lib:chunks(Utf8AtomBin, [atoms]),
code:load_binary(utf8_atom, "compile_SUITE", Utf8AtomBin),
Atom = utf8_atom:atom(),
-
- NoUtf8AtomForms = [{attribute,Anno,module,no_utf8_atom}|Forms],
- error = compile:forms(NoUtf8AtomForms, [binary, r19]).
+ true = is_atom(Atom),
+ ok.
utf8_functions(Config) when is_list(Config) ->
Anno = erl_anno:new(1),
@@ -1283,6 +1280,26 @@ do_asm(Beam, Outdir) ->
error
end.
+%% Compile a crafted file which produces the three call instructions
+%% which should have a comment with the called function in clear
+%% text. We check that the expected functions and comments occur in
+%% the listing.
+
+asm_labels(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ InFile = filename:join(DataDir, "asm_labels.erl"),
+ OutDir = filename:join(PrivDir, "asm_labels"),
+ OutFile = filename:join(OutDir, "asm_labels.S"),
+ ok = file:make_dir(OutDir),
+ {ok,asm_labels} = compile:file(InFile, ['S',{outdir,OutDir}]),
+ {ok,Listing} = file:read_file(OutFile),
+ Os = [global,multiline,{capture,all_but_first,list}],
+ {match,[_]} = re:run(Listing, "({call,.+,{f,.+}}\\. % foo/1)", Os),
+ {match,[_]} = re:run(Listing, "({call_only,.+,{f,.+}}\\. % foo/1)", Os),
+ {match,[_]} = re:run(Listing, "({call_last,.+,{f,.+},.+}\\. % bar/1)", Os),
+ ok = file:del_dir_r(OutDir).
+
sys_pre_attributes(Config) ->
DataDir = proplists:get_value(data_dir, Config),
File = filename:join(DataDir, "attributes.erl"),
@@ -1553,45 +1570,46 @@ env_compiler_options(_Config) ->
bc_options(Config) ->
DataDir = proplists:get_value(data_dir, Config),
- L = [{101, small_float, [no_shared_fun_wrappers,
- no_get_hd_tl,no_line_info]},
- {125, small_float, [no_shared_fun_wrappers,no_get_hd_tl,
+ DataDir = proplists:get_value(data_dir, Config),
+
+ L = [{101, small_float, [no_shared_fun_wrappers,no_line_info]},
+ {125, small_float, [no_shared_fun_wrappers,
no_line_info,
no_ssa_opt_float]},
- {132, small, [no_init_yregs,no_shared_fun_wrappers,
- no_put_tuple2,no_get_hd_tl,no_ssa_opt_record,
- no_ssa_opt_float,no_line_info,no_bsm3]},
-
- {153, small, [r20]},
- {153, small, [r21]},
-
- {153, big, [r18]},
- {153, big, [r19]},
{153, small_float, [no_shared_fun_wrappers]},
- {158, small_maps, [r18]},
- {158, small_maps, [r19]},
- {158, small_maps, [r20]},
- {158, small_maps, [r21]},
-
{164, small_maps, [no_init_yregs,no_shared_fun_wrappers]},
{164, small_maps, [r22]},
{164, big, [r22]},
+ {164, funs, [r22]},
+ {164, funs, [no_init_yregs,no_shared_fun_wrappers,
+ no_ssa_opt_record,
+ no_line_info,no_stack_trimming,
+ no_make_fun3]},
{168, small, [r22]},
{169, big, [no_init_yregs,no_shared_fun_wrappers,
- no_put_tuple2,no_get_hd_tl,no_ssa_opt_record,
+ no_ssa_opt_record,
no_line_info,no_stack_trimming,
no_make_fun3]},
{169, big, [r23]},
{169, small_maps, [no_init_yregs]},
- {170, small, [no_shared_fun_wrappers,no_init_yregs]},
+ {170, small, [no_init_yregs,no_shared_fun_wrappers,
+ no_ssa_opt_record,
+ no_ssa_opt_float,no_line_info]},
+
+ {171, big, [no_init_yregs,no_shared_fun_wrappers,
+ no_ssa_opt_record,
+ no_ssa_opt_float,no_line_info]},
+ {171, funs, [no_init_yregs,no_shared_fun_wrappers,
+ no_ssa_opt_record,
+ no_ssa_opt_float,no_line_info]},
- {171, big, [no_init_yregs]},
+ {172, funs, []},
{172, big, []}
],
@@ -1610,7 +1628,7 @@ bc_options(Config) ->
highest_opcode(DataDir, Mod, Opt) ->
Src = filename:join(DataDir, atom_to_list(Mod)++".erl"),
- {ok,Mod,Beam} = compile:file(Src, [binary|Opt]),
+ {ok,Mod,Beam} = compile:file(Src, [binary,report_errors|Opt]),
test_lib:highest_opcode(Beam).
deterministic_include(Config) when is_list(Config) ->
@@ -1852,6 +1870,94 @@ erl_compile_api(Config) ->
ok.
+%% Check that an ssa dump contains the pretty printed types we expect.
+%% The module we compile and dump, types_pp, is crafted so it contains
+%% calls to functions which have the result types we want to check the
+%% pretty printer for. We check all types except for bs_context,
+%% bs_matchable and the interval form of float as the first two never
+%% seem to appear in result types and the latter doesn't appear in any
+%% module compiled by diffable.
+types_pp(Config) when is_list(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ TargetDir = filename:join(PrivDir, types_pp),
+ File = filename:join(DataDir, "types_pp.erl"),
+ Listing = filename:join(TargetDir, "types_pp.ssaopt"),
+ ok = file:make_dir(TargetDir),
+
+ {ok,_} = compile:file(File, [dssaopt, {outdir, TargetDir}]),
+ {ok, Data} = file:read_file(Listing),
+ Lines = string:split(binary_to_list(Data), "\n", all),
+ ResultTypes = get_result_types(Lines),
+ io:format("Calls: ~p~n", [ResultTypes]),
+
+ TypesToCheck = [{make_atom, "'an_atom'"},
+ {make_number, "number()"},
+ {make_float, "3.14"},
+ {make_integer, "17"},
+ {make_integer_range, "0..3"},
+ {make_nil, "nil()"},
+ {make_list, "list(any())"},
+ {make_list_of_ints, "list(integer())"},
+ {make_maybe_improper_list,
+ "maybe_improper_list(any(), any())"},
+ {make_nonempty_list, "nonempty_list(any())"},
+ {make_nonempty_improper_list,
+ "nonempty_improper_list(any(), ''end'')"},
+ {make_empty_map, "#{}"},
+ {make_map, "map()"},
+ {make_map_known_types, "#{integer()=>float()}"},
+ {make_fun_unknown_arity_known_type,
+ "fun((...) -> number())"},
+ {make_fun_known_arity_known_type,
+ "fun((_, _) -> number())"},
+ {make_fun_unknown_arity_unknown_type,
+ "fun()"},
+ {make_fun_known_arity_unknown_type,
+ "fun((_, _))"},
+ {make_unconstrained_tuple, "{...}"},
+ {make_known_size_tuple,
+ "{any(), any(), any(), any(), any()}"},
+ {make_inexact_tuple, "{any(), any(), any(), ...}"},
+ {make_union,
+ "'foo' | nonempty_list(1..3) | number() |"
+ " {'tag0', 1, 2} | {'tag1', 3, 4} | bitstring(24)"},
+ {make_bitstring, "bitstring(24)"},
+ {make_none, "none()"}],
+ lists:foreach(fun({FunName, Expected}) ->
+ Actual = map_get(atom_to_list(FunName), ResultTypes),
+ case Actual of
+ Expected ->
+ ok;
+ _ ->
+ ct:fail("Expected type of ~p is ~s, found ~s",
+ [FunName, Expected, Actual])
+ end
+ end, TypesToCheck),
+ ok = file:del_dir_r(TargetDir),
+ ok.
+
+%% We assume that a call starts with a "Result type:"-line followed by
+%% a type line, which is followed by an optional annotation before the
+%% actual call.
+get_result_types(Lines) ->
+ get_result_types(Lines, #{}).
+
+get_result_types([" %% Result type:"++_," %% "++TypeLine|Lines], Acc) ->
+ get_result_types(Lines, TypeLine, Acc);
+get_result_types([_|Lines], Acc) ->
+ get_result_types(Lines, Acc);
+get_result_types([], Acc) ->
+ Acc.
+
+get_result_types([" %% Anno: "++_|Lines], TypeLine, Acc) ->
+ get_result_types(Lines, TypeLine, Acc);
+get_result_types([CallLine|Lines], TypeLine, Acc) ->
+ [_,Callee,_] = string:split(CallLine, "`", all),
+ get_result_types(Lines, Acc#{ Callee => TypeLine }).
+
+
+
%%%
%%% Utilities.
%%%
diff --git a/lib/compiler/test/compile_SUITE_data/asm_labels.erl b/lib/compiler/test/compile_SUITE_data/asm_labels.erl
new file mode 100644
index 0000000000..59571f5539
--- /dev/null
+++ b/lib/compiler/test/compile_SUITE_data/asm_labels.erl
@@ -0,0 +1,47 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2021. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%% A module which when compiled to a BEAM assembly listing will
+%% contain call instructions with comments containing the called
+%% function in clear text.
+
+-module(asm_labels).
+
+-export([foo/0, bar/0]).
+
+%% Expected to generate a `call_only` instruction
+foo() ->
+ foo(10).
+
+%% Expected to generate a `call` instruction
+foo(0) ->
+ 17;
+foo(N) ->
+ foo(N-1) + 1.
+
+%% Expected to generate a `call_last` instruction
+bar() ->
+ receive
+ X ->
+ bar(X)
+ end.
+
+bar([]) ->
+ ok.
diff --git a/lib/compiler/test/compile_SUITE_data/funs.erl b/lib/compiler/test/compile_SUITE_data/funs.erl
new file mode 100644
index 0000000000..d605128ef4
--- /dev/null
+++ b/lib/compiler/test/compile_SUITE_data/funs.erl
@@ -0,0 +1,8 @@
+-module(funs).
+-export([go/0]).
+
+go() ->
+ Id = id(fun id/1),
+ {Id(ok), Id(42)}.
+
+id(I) -> I.
diff --git a/lib/compiler/test/compile_SUITE_data/types_pp.erl b/lib/compiler/test/compile_SUITE_data/types_pp.erl
new file mode 100644
index 0000000000..bcbd93a835
--- /dev/null
+++ b/lib/compiler/test/compile_SUITE_data/types_pp.erl
@@ -0,0 +1,127 @@
+-module(types_pp).
+
+-export([doit/0]).
+
+make_atom() ->
+ an_atom.
+
+make_number(X, Y) ->
+ X + Y.
+
+make_float() ->
+ 3.14.
+
+make_integer_range(X) ->
+ case X of
+ a -> 0;
+ b -> 1;
+ c -> 2;
+ _ -> 3
+ end.
+
+make_integer() ->
+ 17.
+
+make_nil() ->
+ [].
+
+make_list(X) when is_list(X) ->
+ X ++ [1, 2, 3].
+
+make_list_of_ints(X) when is_list(X) ->
+ [ Y || Y <- X, is_integer(Y)].
+
+make_maybe_improper_list(X) when is_list(X) ->
+ X.
+
+make_nonempty_list(X) ->
+ [X].
+
+make_nonempty_improper_list(X) ->
+ [X|'end'].
+
+make_empty_map() ->
+ #{}.
+
+make_map(X) when is_map(X) ->
+ X.
+
+make_map_known_types(K, V) when is_integer(K), is_float(V) ->
+ #{ K => V }.
+
+make_fun_unknown_arity_known_type() ->
+ case ext:f() of
+ 0 -> fun(X) -> X + 1 end;
+ 1 -> fun(X, Y) -> X + Y end
+ end.
+
+make_fun_known_arity_known_type() ->
+ fun(Y, Z) ->
+ Y + Z
+ end.
+
+make_fun_unknown_arity_unknown_type() ->
+ case ext:f() of
+ 0 -> fun(X) -> ext:f(X) end;
+ 1 -> fun(X, Y) -> ext:f(X, Y) end
+ end.
+
+make_fun_known_arity_unknown_type() ->
+ fun(Y, Z) ->
+ ext:f(Y, Z)
+ end.
+
+make_none() ->
+ exit(foo).
+
+make_unconstrained_tuple(X) when is_tuple(X) ->
+ X.
+
+make_known_size_tuple(X) when is_tuple(X), tuple_size(X) =:= 5 ->
+ X.
+
+make_inexact_tuple({X1,X2,X3,_X4,_X5,_X6,_X7,_X8,_X9,_X10,_X11,_X12,_X13}=X)
+ when is_integer(X1), is_float(X2), is_integer(X3) ->
+ case ext:f() of
+ 0 ->
+ {1, 2, 3};
+ _ ->
+ X
+ end.
+
+make_union() ->
+ case ext:f() of
+ 0 -> foo;
+ 1 -> [1, 2, 3];
+ 2 -> 7;
+ 3 -> 3.14;
+ 4 -> {tag0,1,2};
+ 5 -> {tag1,3,4};
+ 6 -> <<1,2,3>>
+ end.
+
+make_bitstring() ->
+ <<1, 2, 3>>.
+
+doit() ->
+ {make_number(ext:f(), ext:f()), make_atom(),
+ make_float(),
+ make_integer(), make_integer_range(ext:f()),
+ make_nil(), make_list(ext:f()), make_list_of_ints(ext:f()),
+ make_maybe_improper_list(ext:f()),
+ make_nonempty_list( ext:f()), make_nonempty_improper_list( ext:f()),
+ make_empty_map(), make_map(ext:f()),
+ make_map_known_types(ext:f(), ext:f()),
+ make_fun_unknown_arity_known_type(),
+ make_fun_known_arity_known_type(),
+ make_fun_unknown_arity_unknown_type(),
+ make_fun_known_arity_unknown_type(),
+ make_unconstrained_tuple(ext:f()),
+ make_known_size_tuple(ext:f()),
+ make_inexact_tuple(ext:f()),
+ make_union(),
+ make_bitstring(),
+ make_none()
+ }.
+
+
diff --git a/lib/compiler/test/core_fold_SUITE.erl b/lib/compiler/test/core_fold_SUITE.erl
index c832d68fe4..9504ae7774 100644
--- a/lib/compiler/test/core_fold_SUITE.erl
+++ b/lib/compiler/test/core_fold_SUITE.erl
@@ -566,7 +566,7 @@ configuration(_Config) ->
ok.
configuration() ->
- [forgotten || Components <- enemy, is_tuple(fun art/0)].
+ [forgotten || _Components <- enemy, is_tuple(fun art/0)].
art() ->
creating.
diff --git a/lib/compiler/test/fun_SUITE.erl b/lib/compiler/test/fun_SUITE.erl
index 387ed90ee6..0bf014f8bc 100644
--- a/lib/compiler/test/fun_SUITE.erl
+++ b/lib/compiler/test/fun_SUITE.erl
@@ -60,7 +60,7 @@ end_per_group(_GroupName, Config) ->
l1() ->
[
- ?T((begin A = 3, F = fun(A) -> 1; (_) -> 2 end, F(2) end), 1),
+ ?T((begin _A = 3, F = fun(_A) -> 1; (_) -> 2 end, F(2) end), 1),
?T((begin G = fun(1=0) -> ok end, {'EXIT',_} = (catch G(2)), ok end), ok),
?T((begin F = fun(_, 1) -> 1; (F, N) -> N * F(F, N-1) end, F(F, 5) end), 120),
?T((begin F = fun(_, 1) -> 1; (F, N) -> N * F(F, N-1) end, F(F, 1), ok end), ok)
@@ -224,7 +224,7 @@ bad_external_fun() ->
eep37(Config) when is_list(Config) ->
F = fun Fact(N) when N > 0 -> N * Fact(N - 1); Fact(0) -> 1 end,
Add = fun _(N) -> N + 1 end,
- UnusedName = fun BlackAdder(N) -> N + 42 end,
+ UnusedName = fun _BlackAdder(N) -> N + 42 end,
720 = F(6),
10 = Add(9),
50 = UnusedName(8),
diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl
index 69eb7f26b9..3d7da5075f 100644
--- a/lib/compiler/test/guard_SUITE.erl
+++ b/lib/compiler/test/guard_SUITE.erl
@@ -19,6 +19,10 @@
%%
-module(guard_SUITE).
+%% Warnings for obsolete guards are generated by erl_lint, so we will not
+%% any less testing of the compiler by suppressing them.
+-compile([nowarn_obsolete_guard]).
+
-include_lib("syntax_tools/include/merl.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -1420,7 +1424,9 @@ rel_op_combinations(Config) when is_list(Config) ->
Red = gb_trees:from_orddict(Red0),
rel_op_combinations_3(100, Red),
- rel_op_combinations_4().
+ rel_op_combinations_4(),
+
+ rel_op_combinations_5().
rel_op_combinations_1(0, _) ->
ok;
@@ -1673,6 +1679,145 @@ rel_op_vars_1(X, N) when X =< N -> le.
rel_op_vars_2(X, N) when X =/= N -> ne;
rel_op_vars_2(X, N) when X >= N -> ge.
+rel_op_combinations_5() ->
+ lt = lt_gt_eq(a, b),
+ lt = lt_gt_eq(1.0, 42),
+ lt = lt_gt_eq(1, 42.0),
+
+ eq = lt_gt_eq(a, a),
+ eq = lt_gt_eq(42, 42),
+ eq = lt_gt_eq(42.0, 42),
+ eq = lt_gt_eq(42, 42.0),
+ eq = lt_gt_eq(42.0, 42.0),
+
+ gt = lt_gt_eq(b, a),
+ gt = lt_gt_eq(42.0, 1),
+ gt = lt_gt_eq(42, 1.0),
+
+ lt = eq_exact_lt_gt(a, b),
+ lt = eq_exact_lt_gt(1.0, 42),
+ lt = eq_exact_lt_gt(1, 42.0),
+
+ eq = eq_exact_lt_gt(a, a),
+ eq = eq_exact_lt_gt(42, 42),
+ none = eq_exact_lt_gt(42, 42.0),
+
+ gt = eq_exact_lt_gt(b, a),
+ gt = eq_exact_lt_gt(42.0, 1),
+ gt = eq_exact_lt_gt(42, 1.0),
+
+ ok.
+
+lt_gt_eq(A, B) ->
+ Res = lt_gt_eq_1(A, B),
+ Res = lt_gt_eq_2(A, B),
+ Res = lt_gt_eq_3(A, B),
+ Res = lt_gt_eq_4(A, B),
+ Res = lt_gt_eq_5(A, B),
+ lt_gt_eq_6(A, B).
+
+%% The last test in each 'if' is unnecessary.
+lt_gt_eq_1(A, B) ->
+ if
+ A < B -> lt;
+ A == B -> eq;
+ A > B -> gt
+ end.
+
+lt_gt_eq_2(A, B) ->
+ if
+ A > B -> gt;
+ A == B -> eq;
+ A < B -> lt
+ end.
+
+lt_gt_eq_3(A, B) ->
+ if
+ A == B -> eq;
+ A < B -> lt;
+ A > B -> gt
+ end.
+
+lt_gt_eq_4(A, B) ->
+ if
+ A == B -> eq;
+ A > B -> gt;
+ A < B -> lt
+ end.
+
+lt_gt_eq_5(A, B) ->
+ if
+ A < B -> lt;
+ A > B -> gt;
+ A == B -> eq
+ end.
+
+lt_gt_eq_6(A, B) ->
+ if
+ A > B -> gt;
+ A < B -> lt;
+ A == B -> eq
+ end.
+
+eq_exact_lt_gt(A, B) ->
+ Res = eq_exact_lt_gt_1(A, B),
+ Res = eq_exact_lt_gt_2(A, B),
+ Res = eq_exact_lt_gt_3(A, B),
+ Res = eq_exact_lt_gt_4(A, B),
+ Res = eq_exact_lt_gt_5(A, B),
+ Res = eq_exact_lt_gt_6(A, B).
+
+%% Not possible to optimize (unless we have type information so we
+%% know that A == B and A =:= B produces the same result).
+
+eq_exact_lt_gt_1(A, B) ->
+ if
+ A < B -> lt;
+ A =:= B -> eq;
+ A > B -> gt;
+ true -> none
+ end.
+
+eq_exact_lt_gt_2(A, B) ->
+ if
+ A > B -> gt;
+ A =:= B -> eq;
+ A < B -> lt;
+ true -> none
+ end.
+
+eq_exact_lt_gt_3(A, B) ->
+ if
+ A =:= B -> eq;
+ A < B -> lt;
+ A > B -> gt;
+ true -> none
+ end.
+
+eq_exact_lt_gt_4(A, B) ->
+ if
+ A =:= B -> eq;
+ A > B -> gt;
+ A < B -> lt;
+ true -> none
+ end.
+
+eq_exact_lt_gt_5(A, B) ->
+ if
+ A < B -> lt;
+ A > B -> gt;
+ A =:= B -> eq;
+ true -> none
+ end.
+
+eq_exact_lt_gt_6(A, B) ->
+ if
+ A > B -> gt;
+ A < B -> lt;
+ A =:= B -> eq;
+ true -> none
+ end.
+
%% Exhaustively test all combinations of relational operators
%% to ensure the correctness of the optimizations in beam_ssa_dead.
diff --git a/lib/compiler/test/lc_SUITE.erl b/lib/compiler/test/lc_SUITE.erl
index b8921755e0..351a0544b0 100644
--- a/lib/compiler/test/lc_SUITE.erl
+++ b/lib/compiler/test/lc_SUITE.erl
@@ -90,8 +90,8 @@ basic(Config) when is_list(Config) ->
"abc123" = alphanum("?abc123.;"),
%% Aliased patterns.
- [] = [t || {C=D}={_,_} <- []],
- [] = [X || {X,{Y}={X,X}} <- []],
+ [] = [t || {_C=_D}={_,_} <- []],
+ [] = [X || {X,{_Y}={X,X}} <- []],
[t] = [t || "a"++"b" = "ab" <- ["ab"]],
%% Strange filter block.
diff --git a/lib/compiler/test/match_SUITE.erl b/lib/compiler/test/match_SUITE.erl
index e354c88730..699ddf08ac 100644
--- a/lib/compiler/test/match_SUITE.erl
+++ b/lib/compiler/test/match_SUITE.erl
@@ -351,8 +351,8 @@ entirely() ->
[receive _ -> Voice end || banking <- printer].
printer() ->
- {[Indoor] = [] = associates},
- [ireland || Indoor <- Indoor].
+ {[_Indoor] = [] = associates},
+ [ireland || _Indoor <- _Indoor].
tench() ->
E = begin
@@ -364,7 +364,7 @@ tench() ->
perch(X) ->
begin
put(perch, get(perch)+1),
- [A] = [] = {spine,X}
+ [_A] = [] = {spine,X}
end.
salmon() ->
diff --git a/lib/compiler/test/misc_SUITE.erl b/lib/compiler/test/misc_SUITE.erl
index 5f24fb1f27..ae5fff2ed3 100644
--- a/lib/compiler/test/misc_SUITE.erl
+++ b/lib/compiler/test/misc_SUITE.erl
@@ -257,17 +257,6 @@ silly_coverage(Config) when is_list(Config) ->
TrimInput = BlockInput,
expect_error(fun() -> beam_trim:module(TrimInput, []) end),
- %% beam_peep. This is tricky. Use a select instruction with
- %% an odd number of elements in the list to crash
- %% prune_redundant_values/2 but not beam_clean:clean_labels/1.
- PeepInput = {?MODULE,[{foo,0}],[],
- [{function,foo,0,2,
- [{label,1},
- {func_info,{atom,?MODULE},{atom,foo},0},
- {label,2},{select,select_val,r,{f,2},[{f,2}]}]}],
- 2},
- expect_error(fun() -> beam_peep:module(PeepInput, []) end),
-
BeamZInput = {?MODULE,[{foo,0}],[],
[{function,foo,0,2,
[{label,1},
diff --git a/lib/compiler/test/test_lib.erl b/lib/compiler/test/test_lib.erl
index cca81d70f7..8a6071e71f 100644
--- a/lib/compiler/test/test_lib.erl
+++ b/lib/compiler/test/test_lib.erl
@@ -118,7 +118,6 @@ get_data_dir(Config) ->
"_no_copt_SUITE",
"_post_opt_SUITE",
"_inline_SUITE",
- "_r21_SUITE",
"_no_module_opt_SUITE",
"_no_type_opt_SUITE",
"_no_ssa_opt_SUITE"],
diff --git a/lib/compiler/test/trycatch_SUITE.erl b/lib/compiler/test/trycatch_SUITE.erl
index 6221e64bcd..1cde10adce 100644
--- a/lib/compiler/test/trycatch_SUITE.erl
+++ b/lib/compiler/test/trycatch_SUITE.erl
@@ -1259,7 +1259,7 @@ stacktrace(_Config) ->
try
throw(x)
catch
- throw:x:IntentionallyUnused ->
+ throw:x:_IntentionallyUnused ->
ok
end.
diff --git a/lib/crypto/c_src/Makefile.in b/lib/crypto/c_src/Makefile.in
index 92918b5d9f..d400e8f889 100644
--- a/lib/crypto/c_src/Makefile.in
+++ b/lib/crypto/c_src/Makefile.in
@@ -111,7 +111,9 @@ CRYPTO_OBJS = $(OBJDIR)/crypto$(TYPEMARKER).o \
$(OBJDIR)/pkey$(TYPEMARKER).o \
$(OBJDIR)/rand$(TYPEMARKER).o \
$(OBJDIR)/rsa$(TYPEMARKER).o \
- $(OBJDIR)/srp$(TYPEMARKER).o
+ $(OBJDIR)/srp$(TYPEMARKER).o \
+ $(OBJDIR)/hash_equals$(TYPEMARKER).o
+
CALLBACK_OBJS = $(OBJDIR)/crypto_callback$(TYPEMARKER).o
CRYPTO_STATIC_OBJS = $(patsubst $(OBJDIR)/%$(TYPEMARKER).o,$(OBJDIR)/%_static$(TYPEMARKER).o,$(CRYPTO_OBJS) $(CALLBACK_OBJS))
@@ -142,7 +144,7 @@ CRYPTO_LINK_LIB=$(SSL_DED_LD_RUNTIME_LIBRARY_PATH) -L$(SSL_LIBDIR) -l$(SSL_CRYPT
EXTRA_FLAGS = -DHAVE_DYNAMIC_CRYPTO_LIB
else
SSL_DED_LD_RUNTIME_LIBRARY_PATH=
-CRYPTO_LINK_LIB=$(SSL_LIBDIR)/lib$(SSL_CRYPTO_LIBNAME).a
+CRYPTO_LINK_LIB=$(SSL_LIBDIR)/lib$(SSL_CRYPTO_LIBNAME).a
EXTRA_FLAGS =
CRYPTO_OBJS := $(CRYPTO_OBJS) $(CALLBACK_OBJS)
CALLBACK_OBJS =
@@ -244,7 +246,7 @@ docs:
# ----------------------------------------------------
# Release Target
-# ----------------------------------------------------
+# ----------------------------------------------------
include $(ERL_TOP)/make/otp_release_targets.mk
release_spec: opt
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c
index 65804bf6fb..6810396d95 100644
--- a/lib/crypto/c_src/crypto.c
+++ b/lib/crypto/c_src/crypto.c
@@ -42,6 +42,7 @@
#include "evp.h"
#include "fips.h"
#include "hash.h"
+#include "hash_equals.h"
#include "hmac.h"
#include "info.h"
#include "math.h"
@@ -90,6 +91,9 @@ static ErlNifFunc nif_funcs[] = {
{"rand_uniform_nif", 2, rand_uniform_nif, 0},
{"mod_exp_nif", 4, mod_exp_nif, 0},
{"do_exor", 2, do_exor, 0},
+
+ {"hash_equals_nif", 2, hash_equals_nif, 0},
+
{"pkey_sign_nif", 5, pkey_sign_nif, 0},
{"pkey_verify_nif", 6, pkey_verify_nif, 0},
{"pkey_crypt_nif", 6, pkey_crypt_nif, 0},
@@ -304,3 +308,4 @@ static void unload(ErlNifEnv* env, void* priv_data)
if (--library_refc == 0)
cleanup_algorithms_types(env);
}
+
diff --git a/lib/crypto/c_src/hash_equals.c b/lib/crypto/c_src/hash_equals.c
new file mode 100644
index 0000000000..85f54b14eb
--- /dev/null
+++ b/lib/crypto/c_src/hash_equals.c
@@ -0,0 +1,51 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2010-2021. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+
+ */
+
+#include "common.h"
+#include "hash_equals.h"
+
+ERL_NIF_TERM hash_equals_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+#ifdef HAVE_OPENSSL_CRYPTO_MEMCMP
+ ErlNifBinary s1, s2;
+
+ ASSERT(argc == 2);
+
+ if (!enif_inspect_binary(env, argv[0], &s1))
+ goto bad_arg;
+ if (!enif_inspect_binary(env, argv[1], &s2))
+ goto bad_arg;
+
+ if (s1.size != s2.size)
+ goto err;
+
+ if (CRYPTO_memcmp(s1.data, s2.data, s1.size) == 0)
+ return enif_make_atom(env, "true");
+
+ return enif_make_atom(env, "false");
+
+ bad_arg:
+ err:
+ return enif_make_badarg(env);
+#else
+ return EXCP_NOTSUP(env, "Unsupported CRYPTO_memcmp");
+#endif
+}
diff --git a/lib/crypto/c_src/hash_equals.h b/lib/crypto/c_src/hash_equals.h
new file mode 100644
index 0000000000..966862c828
--- /dev/null
+++ b/lib/crypto/c_src/hash_equals.h
@@ -0,0 +1,28 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2010-2021. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#ifndef E_HASH_EQUALS_H__
+#define E_HASH_EQUALS_H__ 1
+
+#include "common.h"
+
+ERL_NIF_TERM hash_equals_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+#endif /* E_HASH_EQUALS_H__ */
diff --git a/lib/crypto/configure b/lib/crypto/configure
index 82e882c337..9706b823fb 100755
--- a/lib/crypto/configure
+++ b/lib/crypto/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +221,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +253,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +292,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +310,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +332,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +380,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +398,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +430,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +459,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +503,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +517,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +534,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,50 +606,46 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
ac_unique_file="vsn.mk"
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
DISABLE_EVP_HMAC
@@ -632,6 +659,8 @@ SSL_FLAGS
SSL_LIBDIR
SSL_INCDIR
SSL_INCLUDE
+EGREP
+GREP
DED_OSTYPE
DED_THR_DEFS
DED_LIBS
@@ -645,8 +674,6 @@ DED_SYS_INCLUDE
DED_EXT
DED_GCC
DED_CC
-EGREP
-GREP
MIXED_MINGW
MIXED_VC
OBJEXT
@@ -689,6 +716,10 @@ STATIC_CFLAGS
CFLAGS
CC
ERL_TOP
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -857,8 +888,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -899,9 +928,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -925,9 +954,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1138,9 +1167,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1154,9 +1183,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1200,9 +1229,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1218,7 +1247,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1282,7 +1311,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1400,6 +1429,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1539,9 +1569,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1569,7 +1599,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1577,7 +1608,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1587,9 +1618,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1606,14 +1637,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1621,14 +1652,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1644,14 +1676,14 @@ fi
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1659,17 +1691,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1690,11 +1723,12 @@ fi
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -1702,16 +1736,9 @@ else
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ which can conflict with char $2 (); below. */
+#include <limits.h>
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -1729,156 +1756,66 @@ choke me
#endif
int
-main ()
+main (void)
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-} # ac_fn_c_check_header_mongrel
+} # ac_fn_c_check_header_compile
# ac_fn_c_try_run LINENO
# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
ac_fn_c_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1888,25 +1825,26 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
@@ -1917,37 +1855,6 @@ fi
} # ac_fn_c_try_run
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
# --------------------------------------------
# Tries to find the compile-time value of EXPR in a program that includes
@@ -1962,7 +1869,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0;
@@ -1972,14 +1879,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=0 ac_mid=0
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1989,9 +1897,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid; break
-else
+else $as_nop
as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
@@ -1999,14 +1908,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0;
@@ -2016,14 +1925,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=-1 ac_mid=-1
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0;
@@ -2033,9 +1943,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=$ac_mid; break
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
@@ -2043,14 +1954,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
ac_lo= ac_hi=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -2058,7 +1969,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -2068,12 +1979,13 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
case $ac_lo in #((
?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -2083,12 +1995,12 @@ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.val", "w");
@@ -2116,9 +2028,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
ac_retval=1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -2130,14 +2043,124 @@ rm -f conftest.val
as_fn_set_status $ac_retval
} # ac_fn_c_compute_int
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ eval ac_save_FLAGS=\$$6
+ as_fn_append $6 " $5"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ eval $6=\$ac_save_FLAGS
+
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_check_decl
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -2170,8 +2193,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2206,7 +2233,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2241,11 +2268,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2256,8 +2285,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2281,7 +2310,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2289,14 +2318,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2304,15 +2333,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2320,8 +2349,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2335,63 +2364,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2401,19 +2415,434 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2424,12 +2853,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2438,24 +2867,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2465,11 +2894,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2483,57 +2913,123 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_aux_dir=
-for ac_dir in ${ERL_TOP}/erts/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ${ERL_TOP}/erts/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2552,21 +3048,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2585,10 +3082,108 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=win32
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
fi
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2659,6 +3254,15 @@ else
fi
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2667,11 +3271,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2679,11 +3284,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2694,11 +3303,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2707,11 +3316,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2719,11 +3329,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2734,11 +3348,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2746,8 +3360,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2760,11 +3374,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2772,11 +3387,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2787,11 +3406,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2800,11 +3419,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2813,15 +3433,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2837,18 +3461,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2859,11 +3483,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2871,11 +3496,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2886,11 +3515,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2903,11 +3532,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2915,11 +3545,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2930,11 +3564,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2946,8 +3580,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2955,25 +3589,129 @@ esac
fi
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -2983,7 +3721,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -2991,7 +3729,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3003,9 +3741,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -3026,11 +3764,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -3047,7 +3786,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -3063,44 +3802,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3114,15 +3855,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -3131,7 +3872,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -3143,8 +3884,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -3152,10 +3893,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -3163,39 +3904,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3209,11 +3951,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -3222,31 +3965,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3256,29 +4000,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3287,57 +4035,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3352,94 +4103,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3459,515 +4260,147 @@ MIXED_VSL=no
MIXED_VC=no
MIXED_MINGW=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
-$as_echo_n "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
+printf %s "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
-$as_echo "MSYS and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
+printf "%s\n" "MSYS and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
-$as_echo "Cygwin and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
+printf "%s\n" "Cygwin and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /bin/wslpath; then
CFLAGS="$CFLAGS -O2"
MIXED_WSL=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
-$as_echo "WSL and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
+printf "%s\n" "WSL and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not within any known env" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$MIXED_MSYS" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
-$as_echo_n "checking for mixed cygwin and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
+printf %s "checking for mixed cygwin and native MinGW environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with cygwin" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
-$as_echo_n "checking for mixed MSYS and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
+printf %s "checking for mixed MSYS and native MinGW environment... " >&6; }
if test "x$GCC" = x"yes"; then
if test -x /usr/bin/msys-=.0.dll; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with msys" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
-$as_echo_n "checking if we mix cygwin with any native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
+printf %s "checking if we mix cygwin with any native compiler... " >&6; }
if test "X$MIXED_CYGWIN" = "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
-$as_echo_n "checking if we mix msys with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
+printf %s "checking if we mix msys with another native compiler... " >&6; }
if test "X$MIXED_MSYS" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
-$as_echo_n "checking if we mix WSL with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
+printf %s "checking if we mix WSL with another native compiler... " >&6; }
if test "X$MIXED_WSL" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
+done
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-fi
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
fi
-done
-
-
-
USER_LD=$LD
USER_LDFLAGS="$LDFLAGS"
@@ -3976,29 +4409,34 @@ USER_LDFLAGS="$LDFLAGS"
NEED_NPTL_PTHREAD_H=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
-$as_echo_n "checking for native win32 threads... " >&6; }
-if test "X$host_os" = "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
+printf %s "checking for native win32 threads... " >&6; }
+if test "X$host_os" = "Xwin32"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
THR_DEFS="-DWIN32_THREADS"
THR_LIBS=
THR_LIB_NAME=win32_threads
THR_LIB_TYPE=win32_threads
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
THR_DEFS=
THR_LIBS=
THR_LIB_NAME=
THR_LIB_TYPE=posix_unknown
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+printf %s "checking for pthread_create in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lpthread $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4007,40 +4445,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_pthread_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_pthread_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes
+then :
THR_LIBS="-lpthread"
fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
+printf %s "checking for pthread_create in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lc_r $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4049,96 +4489,112 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_c_r_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_c_r_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_create" = xyes
+then :
THR_LIBS="-lc_r"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
-if test "x$ac_cv_func_pthread_create" = xyes; then :
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
+if test "x$ac_cv_func_pthread_create" = xyes
+then :
THR_LIBS="none_needed"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
-$as_echo_n "checking if the '-pthread' switch can be used... " >&6; }
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
+printf %s "checking if the '-pthread' switch can be used... " >&6; }
saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -pthread"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_create((void*)0,(void*)0,(void*)0,(void*)0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
THR_DEFS="-pthread"
THR_LIBS="-pthread"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS=$saved_cflags
if test "x$THR_LIBS" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- fi
- if test "x$THR_LIBS" != "x"; then
+fi
+
+ if test "x$THR_LIBS" != "x"
+then :
+
THR_DEFS="$THR_DEFS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS"
THR_LIB_NAME=pthread
if test "x$THR_LIBS" = "xnone_needed"; then
THR_LIBS=
fi
- case $host_os in
- solaris*)
- THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;;
- linux*)
+ case $host_os in #(
+ solaris*) :
+
+ THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS"
+ ;; #(
+ linux*) :
+
THR_DEFS="$THR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS"
-if test "$cross_compiling" != "yes"; then
+if test "$cross_compiling" != "yes"
+then :
+
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -4146,11 +4602,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4162,23 +4622,26 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-else
+
+else $as_nop
+
host_getconf="$host_alias-getconf"
# Extract the first word of "$host_getconf", so it can be a program name with args.
set dummy $host_getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -4186,11 +4649,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="$host_getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4202,25 +4669,28 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""
+then :
+
GETCONF=
prfx="$erl_xcomp_sysroot"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
set dummy ${ac_tool_prefix}getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path.
@@ -4231,11 +4701,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4247,11 +4721,11 @@ esac
fi
GETCONF=$ac_cv_path_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4260,11 +4734,12 @@ if test -z "$ac_cv_path_GETCONF"; then
ac_pt_GETCONF=$GETCONF
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ac_pt_GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_GETCONF="$ac_pt_GETCONF" # Let the user override the test with a path.
@@ -4275,11 +4750,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4291,11 +4770,11 @@ esac
fi
ac_pt_GETCONF=$ac_cv_path_ac_pt_GETCONF
if test -n "$ac_pt_GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
-$as_echo "$ac_pt_GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
+printf "%s\n" "$ac_pt_GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_pt_GETCONF" = x; then
@@ -4303,8 +4782,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
GETCONF=$ac_pt_GETCONF
@@ -4313,11 +4792,13 @@ else
GETCONF="$ac_cv_path_GETCONF"
fi
- fi
+
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
-$as_echo_n "checking for Native POSIX Thread Library... " >&6; }
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
+printf %s "checking for Native POSIX Thread Library... " >&6; }
libpthr_vsn=`$GETCONF GNU_LIBPTHREAD_VERSION 2>/dev/null`
if test $? -eq 0; then
case "$libpthr_vsn" in
@@ -4333,24 +4814,28 @@ $as_echo_n "checking for Native POSIX Thread Library... " >&6; }
else
nptl=no
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
-$as_echo "$nptl" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
+printf "%s\n" "$nptl" >&6; }
if test $nptl = cross; then
nptl=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
- if test $nptl = yes; then
+ if test $nptl = yes
+then :
+
THR_LIB_TYPE=posix_nptl
need_nptl_incldir=no
- ac_fn_c_check_header_mongrel "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_nptl_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_nptl_pthread_h" = xyes
+then :
need_nptl_incldir=yes
NEED_NPTL_PTHREAD_H=yes
fi
+ if test $need_nptl_incldir = yes
+then :
- if test $need_nptl_incldir = yes; then
# Ahh...
nptl_path="$C_INCLUDE_PATH:$CPATH"
if test X$cross_compiling != Xyes; then
@@ -4371,13 +4856,13 @@ fi
IFS=$save_ifs
nptl_incldir=
for dir in $nptl_ws_path; do
- as_ac_Header=`$as_echo "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
nptl_incldir=$dir/nptl
fi
-
if test "x$nptl_incldir" != "x"; then
THR_DEFS="$THR_DEFS -isystem $nptl_incldir"
break
@@ -4386,38 +4871,43 @@ fi
if test "x$nptl_incldir" = "x"; then
as_fn_error $? "Failed to locate nptl system include directory" "$LINENO" 5
fi
- fi
- fi
- ;;
- *) ;;
- esac
+
+fi
+
+fi
+ ;; #(
+ *) :
+ ;;
+esac
saved_cppflags=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $THR_DEFS"
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes
+then :
\
-$as_echo "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
fi
-
CPPFLAGS=$saved_cppflags
- fi
+
+fi
+
fi
@@ -4449,133 +4939,157 @@ case "$host_cpu" in
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Wdeclaration-after-statement $DED_WARN_FLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WARN_FLAGS="-Wdeclaration-after-statement $DED_WARN_FLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=return-type $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=implicit $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=implicit $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=undef $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=undef $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
DED_SYS_INCLUDE="-I${ERL_TOP}/erts/emulator/beam -I${ERL_TOP}/erts/include -I${ERL_TOP}/erts/include/$host -I${ERL_TOP}/erts/include/internal -I${ERL_TOP}/erts/include/internal/$host -I${ERL_TOP}/erts/emulator/sys/$DED_OSTYPE -I${ERL_TOP}/erts/emulator/sys/common"
@@ -4588,48 +5102,57 @@ else
fi
# DED_EMU_THR_DEFS=$EMU_THR_DEFS
DED_CFLAGS="$CFLAGS $CPPFLAGS $DED_CFLAGS"
-if test "x$GCC" = xyes; then
+if test "x$GCC" = xyes
+then :
+
# Use -fno-common for gcc, that is link error if multiple definitions of
# global variables are encountered. This is ISO C compliant.
# Until version 10, gcc has had -fcommon as default, which allows and merges
# such dubious duplicates.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fno-common $DED_CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_CFLAGS="-fno-common $DED_CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
DED_STATIC_CFLAGS="$DED_CFLAGS"
DED_CFLAGS="$DED_CFLAGS -fPIC"
# Remove -fPIE and -fno-PIE
DED_CFLAGS=`echo $DED_CFLAGS | sed 's/-f\(no-\)\?PIE//g'`
+
fi
DED_EXT=so
@@ -4707,17 +5230,19 @@ case $host_os in
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4726,14 +5251,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
case "$ac_cv_sizeof_void_p" in
@@ -4800,11 +5323,12 @@ test "$DED_LDFLAGS_CONFTEST" != "" || DED_LDFLAGS_CONFTEST="$DED_LDFLAGS"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DED_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DED_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$DED_LD"; then
ac_cv_prog_DED_LD="$DED_LD" # Let the user override the test.
else
@@ -4812,11 +5336,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_DED_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4827,11 +5355,11 @@ fi
fi
DED_LD=$ac_cv_prog_DED_LD
if test -n "$DED_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
-$as_echo "$DED_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
+printf "%s\n" "$DED_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4840,11 +5368,12 @@ if test -z "$ac_cv_prog_DED_LD"; then
ac_ct_DED_LD=$DED_LD
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DED_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DED_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_DED_LD"; then
ac_cv_prog_ac_ct_DED_LD="$ac_ct_DED_LD" # Let the user override the test.
else
@@ -4852,11 +5381,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DED_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4867,11 +5400,11 @@ fi
fi
ac_ct_DED_LD=$ac_cv_prog_ac_ct_DED_LD
if test -n "$ac_ct_DED_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DED_LD" >&5
-$as_echo "$ac_ct_DED_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DED_LD" >&5
+printf "%s\n" "$ac_ct_DED_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_DED_LD" = x; then
@@ -4879,8 +5412,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
DED_LD=$ac_ct_DED_LD
@@ -4891,37 +5424,37 @@ fi
test "$DED_LD" != "false" || as_fn_error $? "No linker found" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for static compiler flags" >&5
-$as_echo_n "checking for static compiler flags... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static compiler flags" >&5
+printf %s "checking for static compiler flags... " >&6; }
DED_STATIC_CFLAGS="$DED_WERRORFLAGS $DED_WFLAGS $DED_THR_DEFS $DED_STATIC_CFLAGS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_STATIC_CFLAGS" >&5
-$as_echo "$DED_STATIC_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for basic compiler flags for loadable drivers" >&5
-$as_echo_n "checking for basic compiler flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_STATIC_CFLAGS" >&5
+printf "%s\n" "$DED_STATIC_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for basic compiler flags for loadable drivers" >&5
+printf %s "checking for basic compiler flags for loadable drivers... " >&6; }
DED_BASIC_CFLAGS=$DED_CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
-$as_echo "$DED_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler flags for loadable drivers" >&5
-$as_echo_n "checking for compiler flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
+printf "%s\n" "$DED_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler flags for loadable drivers" >&5
+printf %s "checking for compiler flags for loadable drivers... " >&6; }
DED_CFLAGS="$DED_WERRORFLAGS $DED_WARN_FLAGS $DED_THR_DEFS $DED_CFLAGS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
-$as_echo "$DED_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker for loadable drivers" >&5
-$as_echo_n "checking for linker for loadable drivers... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
-$as_echo "$DED_LD" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker flags for loadable drivers" >&5
-$as_echo_n "checking for linker flags for loadable drivers... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LDFLAGS" >&5
-$as_echo "$DED_LDFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for 'runtime library path' linker flag" >&5
-$as_echo_n "checking for 'runtime library path' linker flag... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
+printf "%s\n" "$DED_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linker for loadable drivers" >&5
+printf %s "checking for linker for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
+printf "%s\n" "$DED_LD" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linker flags for loadable drivers" >&5
+printf %s "checking for linker flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LDFLAGS" >&5
+printf "%s\n" "$DED_LDFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 'runtime library path' linker flag" >&5
+printf %s "checking for 'runtime library path' linker flag... " >&6; }
if test "x$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&5
-$as_echo "$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&5
+printf "%s\n" "$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+printf "%s\n" "not found" >&6; }
fi
@@ -4943,8 +5476,8 @@ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiarch directory" >&5
-$as_echo_n "checking for multiarch directory... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multiarch directory" >&5
+printf %s "checking for multiarch directory... " >&6; }
multiarch_dir=
if test "$GCC" = "yes"; then
multiarch_dir=`$CC $CFLAGS -print-multiarch 2>/dev/null`
@@ -4953,11 +5486,11 @@ if test "$GCC" = "yes"; then
fi
fi
if test "$multiarch_dir" = ""; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+printf "%s\n" "not found" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $multiarch_dir" >&5
-$as_echo "$multiarch_dir" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $multiarch_dir" >&5
+printf "%s\n" "$multiarch_dir" >&6; }
fi
@@ -4965,17 +5498,19 @@ fi
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4984,29 +5519,43 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
-std_ssl_locations="/usr/local /usr/sfw /usr /opt/local /usr/pkg /usr/local/openssl /usr/local/opt/openssl /usr/lib/openssl /usr/openssl /usr/local/ssl /usr/lib/ssl /usr/ssl /"
+std_ssl_locations="\
+/usr/local \
+/usr/sfw \
+/usr \
+/opt/local \
+/usr/pkg \
+/usr/local/openssl \
+/usr/local/opt/openssl \
+/opt/homebrew/opt/openssl \
+/usr/lib/openssl \
+/usr/openssl \
+/usr/local/ssl \
+/usr/lib/ssl \
+/usr/ssl \
+/"
# Check whether --with-ssl was given.
-if test "${with_ssl+set}" = set; then :
+if test ${with_ssl+y}
+then :
withval=$with_ssl;
fi
# Check whether --with-ssl-lib-subdir was given.
-if test "${with_ssl_lib_subdir+set}" = set; then :
+if test ${with_ssl_lib_subdir+y}
+then :
withval=$with_ssl_lib_subdir;
case "$with_ssl_lib_subdir" in
yes|no)
@@ -5016,77 +5565,83 @@ case "$with_ssl_lib_subdir" in
;;
esac
-else
+else $as_nop
with_ssl_lib_subdir=
fi
#default
# Check whether --with-ssl-incl was given.
-if test "${with_ssl_incl+set}" = set; then :
+if test ${with_ssl_incl+y}
+then :
withval=$with_ssl_incl;
case X$with_ssl in
X | Xyes | Xno) as_fn_error $? "--with-ssl-incl=PATH set without --with-ssl=PATH" "$LINENO" 5;;
esac
-else
+else $as_nop
with_ssl_incl=$with_ssl
fi
#default
# Check whether --with-ssl-zlib was given.
-if test "${with_ssl_zlib+set}" = set; then :
+if test ${with_ssl_zlib+y}
+then :
withval=$with_ssl_zlib;
-else
+else $as_nop
with_ssl_zlib=default
fi
#default
# Check whether --with-ssl-rpath was given.
-if test "${with_ssl_rpath+set}" = set; then :
+if test ${with_ssl_rpath+y}
+then :
withval=$with_ssl_rpath;
case X$with_ssl in
Xno) as_fn_error $? "--with-ssl-rpath set without --with-ssl" "$LINENO" 5;;
esac
-else
+else $as_nop
with_ssl_rpath=default
fi
#default
# Check whether --enable-dynamic-ssl-lib was given.
-if test "${enable_dynamic_ssl_lib+set}" = set; then :
+if test ${enable_dynamic_ssl_lib+y}
+then :
enableval=$enable_dynamic_ssl_lib; case "$enableval" in
no) enable_dynamic_ssl=no ;;
*) enable_dynamic_ssl=yes ;;
esac
-else
+else $as_nop
enable_dynamic_ssl=undefined
fi
# Check whether --enable-evp-dh was given.
-if test "${enable_evp_dh+set}" = set; then :
+if test ${enable_evp_dh+y}
+then :
enableval=$enable_evp_dh; case "$enableval" in
no) DISABLE_EVP_DH=1;;
*) DISABLE_EVP_DH=0;;
esac
-else
+else $as_nop
DISABLE_EVP_DH=0
fi
# Check whether --enable-evp-hmac was given.
-if test "${enable_evp_hmac+set}" = set; then :
+if test ${enable_evp_hmac+y}
+then :
enableval=$enable_evp_hmac; case "$enableval" in
no) DISABLE_EVP_HMAC=1;;
*) DISABLE_EVP_HMAC=0;;
esac
-else
+else $as_nop
DISABLE_EVP_HMAC=0
fi
@@ -5118,8 +5673,8 @@ case "$with_ssl_zlib" in
no)
;;
default | yes)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for static zlib" >&5
-$as_echo_n "checking for static zlib... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static zlib" >&5
+printf %s "checking for static zlib... " >&6; }
for dir in $std_ssl_locations; do
for sdir in $search_subdirs; do
if test -f "$erl_xcomp_sysroot$dir/$sdir/libz.a"; then
@@ -5129,8 +5684,8 @@ $as_echo_n "checking for static zlib... " >&6; }
done
test "$static_zlib" = "no" || break
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $static_zlib" >&5
-$as_echo "$static_zlib" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $static_zlib" >&5
+printf "%s\n" "$static_zlib" >&6; }
if test $with_ssl_zlib = yes; then
if test $static_zlib = no; then
as_fn_error $? "linking with zlib requested by user, but no such library was found" "$LINENO" 5
@@ -5139,8 +5694,8 @@ $as_echo "$static_zlib" >&6; }
static_zlib=no
fi;;
*) # PATH
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for static zlib" >&5
-$as_echo_n "checking for static zlib... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static zlib" >&5
+printf %s "checking for static zlib... " >&6; }
if test -f "$with_ssl_zlib/libz.a"; then
forced_static_zlib="$with_ssl_zlib/libz.a"
else
@@ -5154,8 +5709,8 @@ $as_echo_n "checking for static zlib... " >&6; }
if test "$forced_static_zlib" = ""; then
as_fn_error $? "linking with zlib requested by user, but no such library was found in $with_ssl_zlib" "$LINENO" 5
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $forced_static_zlib" >&5
-$as_echo "$forced_static_zlib" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $forced_static_zlib" >&5
+printf "%s\n" "$forced_static_zlib" >&6; }
;;
esac
@@ -5174,43 +5729,332 @@ case $enable_dynamic_ssl in
SSL_DYNAMIC_ONLY=no;;
esac
-case "$erl_xcomp_without_sysroot-$with_ssl" in
- yes-* | no-no)
- SSL_APP=
- CRYPTO_APP=
- SSH_APP=
- if test "$with_ssl" != "no"; then
- skip="Cannot search for ssl; missing cross system root (erl_xcomp_sysroot)."
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
fi
- for a in ssl crypto ssh; do
- echo "$skip" > $ERL_TOP/lib/$a/SKIP
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
done
- ;;
- no-yes | no- )
- # We search for OpenSSL in the common OS standard locations.
- SSL_APP=ssl
- CRYPTO_APP=crypto
- SSH_APP=ssh
-
- if test "$host_os" = "win32" ; then
- if test "x$ac_cv_sizeof_void_p" = "x8"; then
- std_win_ssl_locations="/mnt/c/OpenSSL-Win64 /c/OpenSSL-Win64 /mnt/c/opt/local64/pgm/OpenSSL /opt/local64/pgm/OpenSSL /cygdrive/c/OpenSSL-Win64"
- lib_bits=64
- else
- std_win_ssl_locations="/mnt/c/OpenSSL-Win32 /c/OpenSSL-Win32 /mnt/c/OpenSSL /c/OpenSSL /cygdrive/c/OpenSSL /opt/local/pgm/OpenSSL /opt/local32/pgm/OpenSSL /mnt/c/opt/local/pgm/OpenSSL /mnt/c/opt/local32/pgm/OpenSSL /cygdrive/c/OpenSSL-Win32"
- lib_bits=32
- fi
- else
- std_win_ssl_locations=""
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
- usable_crypto=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL crypto library with version >= 0.9.8c in standard locations" >&5
-$as_echo_n "checking for OpenSSL crypto library with version >= 0.9.8c in standard locations... " >&6; }
- for rdir in $std_win_ssl_locations $std_ssl_locations; do
- if test -f "$erl_xcomp_isysroot$rdir/include/openssl/opensslv.h"; then
- SSL_INCDIR="$erl_xcomp_isysroot$rdir"
- SSL_INCLUDE="-I$SSL_INCDIR/include"
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+case "$erl_xcomp_without_sysroot-$with_ssl" in #(
+ yes-* | no-no) :
+
+ SSL_APP=
+ CRYPTO_APP=
+ SSH_APP=
+ if test "$with_ssl" != "no"; then
+ skip="Cannot search for ssl; missing cross system root (erl_xcomp_sysroot)."
+ fi
+ for a in ssl crypto ssh; do
+ echo "$skip" > $ERL_TOP/lib/$a/SKIP
+ done
+ ;; #(
+ no-yes | no-) :
+
+ # We search for OpenSSL in the common OS standard locations.
+ SSL_APP=ssl
+ CRYPTO_APP=crypto
+ SSH_APP=ssh
+
+ if test "$host_os" != "win32"
+then :
+
+ std_win_ssl_locations=
+
+else $as_nop
+
+ if test "x$ac_cv_sizeof_void_p" = "x8"
+then :
+
+ std_win_ssl_locations="/mnt/c/OpenSSL-Win64 /c/OpenSSL-Win64 /mnt/c/opt/local64/pgm/OpenSSL /opt/local64/pgm/OpenSSL /cygdrive/c/OpenSSL-Win64"
+ lib_bits=64
+
+else $as_nop
+
+ std_win_ssl_locations="/mnt/c/OpenSSL-Win32 /c/OpenSSL-Win32 /mnt/c/OpenSSL /c/OpenSSL /cygdrive/c/OpenSSL /opt/local/pgm/OpenSSL /opt/local32/pgm/OpenSSL /mnt/c/opt/local/pgm/OpenSSL /mnt/c/opt/local32/pgm/OpenSSL /cygdrive/c/OpenSSL-Win32"
+ lib_bits=32
+
+fi
+
+fi
+
+ usable_crypto=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL crypto library with version >= 0.9.8c in standard locations" >&5
+printf %s "checking for OpenSSL crypto library with version >= 0.9.8c in standard locations... " >&6; }
+ for rdir in $std_win_ssl_locations $std_ssl_locations; do
+ if test -f "$erl_xcomp_isysroot$rdir/include/openssl/opensslv.h"
+then :
+
+ SSL_INCDIR="$erl_xcomp_isysroot$rdir"
+ SSL_INCLUDE="-I$SSL_INCDIR/include"
# Check for static and dynamic crypto library in the directory
# given as argument...
@@ -5244,72 +6088,103 @@ yes
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "^yes.?$" >/dev/null 2>&1; then :
+ $EGREP "^yes.?$" >/dev/null 2>&1
+then :
valid_include=yes
-else
+else $as_nop
valid_include=no
fi
-rm -f conftest*
+rm -rf conftest*
CPPFLAGS="$save_CPPFLAGS"
- if test $valid_include != yes; then
- static_crypto_lib_name=
- static_ssl_lib_name=
- static_extra_libs=
- static_lib_dir=
- dynamic_crypto_lib_name=
- dynamic_ssl_lib_name=
- dynamic_extra_libs=
- dynamic_lib_dir=
- dynamic_runtime_lib_dir=
- elif test "$host_os" = "win32" ; then
- if test -f "$dir/lib/VC/static/libcrypto${lib_bits}MD.lib"; then
- static_crypto_lib_name=libcrypto${lib_bits}MD
- static_ssl_lib_name="libssl${lib_bits}MD"
- static_extra_libs="$static_extra_libs -lCRYPT32 -lWS2_32"
- static_lib_dir="$dir/lib/VC/static"
- found_static_lib=yes
- fi
- if test -f "$dir/lib/VC/libcrypto${lib_bits}MD.lib"; then
- dynamic_crypto_lib_name=libcrypto${lib_bits}MD
- dynamic_ssl_lib_name="libssl${lib_bits}MD"
- dynamic_runtime_lib_dir="$rdir/lib/VC"
- dynamic_lib_dir="$dir/lib/VC"
- found_dynamic_lib=yes
- fi
- else # Non windows...
-
- case "$host_os" in
- darwin*)
- static_ext=.a
- dynamic_ext=.dylib;;
- *)
- static_ext=.a
- dynamic_ext=.so;;
- esac
- for sdir in $search_subdirs; do
- if test -f "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"; then
- found_dynlib=yes
- else
- found_dynlib=no
- case $host_os in
- openbsd*)
- # libcrypto.so got a suffix on (at least some) openbsd.
- # If we find libcrypto.so with suffix, we try to link
- # to it using -lcrypto ...
- for f in "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"*; do
- test -f "$f" && found_dynlib=yes
- break
- done;;
- *)
- ;;
- esac
- fi
- if test $found_dynlib = yes; then
- # Found dynamic library; check if it links...
- dynamic_lib_dir="$dir/$sdir"
- dynamic_runtime_lib_dir="$rdir/$sdir"
+ if test $valid_include != yes
+then :
+
+ # Not a valid include...
+ static_crypto_lib_name=
+ static_ssl_lib_name=
+ static_extra_libs=
+ static_lib_dir=
+ dynamic_crypto_lib_name=
+ dynamic_ssl_lib_name=
+ dynamic_extra_libs=
+ dynamic_lib_dir=
+ dynamic_runtime_lib_dir=
+
+elif test "$host_os" = "win32"
+then :
+
+ # Windows...
+ if test -f "$dir/lib/VC/static/libcrypto${lib_bits}MD.lib"
+then :
+
+ static_crypto_lib_name=libcrypto${lib_bits}MD
+ static_ssl_lib_name="libssl${lib_bits}MD"
+ static_extra_libs="$static_extra_libs -lCRYPT32 -lWS2_32"
+ static_lib_dir="$dir/lib/VC/static"
+ found_static_lib=yes
+
+fi
+ if test -f "$dir/lib/VC/libcrypto${lib_bits}MD.lib"
+then :
+
+ dynamic_crypto_lib_name=libcrypto${lib_bits}MD
+ dynamic_ssl_lib_name="libssl${lib_bits}MD"
+ dynamic_runtime_lib_dir="$rdir/lib/VC"
+ dynamic_lib_dir="$dir/lib/VC"
+ found_dynamic_lib=yes
+
+fi
+
+else $as_nop
+
+ # Not windows...
+ case "$host_os" in #(
+ darwin*) :
+
+ static_ext=.a
+ dynamic_ext=.dylib
+ ;; #(
+ *) :
+
+ static_ext=.a
+ dynamic_ext=.so
+ ;;
+esac
+ for sdir in $search_subdirs; do
+ if test -f "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"
+then :
+
+ found_dynlib=yes
+
+else $as_nop
+
+ found_dynlib=no
+ case $host_os in #(
+ openbsd*) :
+
+ # libcrypto.so got a suffix on (at least some) openbsd.
+ # If we find libcrypto.so with suffix, we try to link
+ # to it using -lcrypto ...
+ for f in "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"*; do
+ if test -f "$f"
+then :
+ found_dynlib=yes; break
+fi
+ done
+ ;; #(
+ *) :
+ ;;
+esac
+
+fi
+ if test $found_dynlib = yes
+then :
+
+ # Found dynamic library; check if it links...
+ dynamic_lib_dir="$dir/$sdir"
+ dynamic_runtime_lib_dir="$rdir/$sdir"
test_cflags="-I$idir/include"
test_ldflags="-L$dynamic_lib_dir"
@@ -5329,7 +6204,7 @@ rm -f conftest*
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5338,25 +6213,28 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_dynamic_lib=yes
-else
+else $as_nop
found_dynamic_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- if test $found_dynamic_lib = no -a $static_zlib != no; then
- # No, but linking with zlib as well might help...
- dynamic_extra_libs="$dynamic_extra_libs $static_zlib"
+ if test $found_dynamic_lib = no -a $static_zlib != no
+then :
+
+ # No, but linking with zlib as well might help...
+ dynamic_extra_libs="$dynamic_extra_libs $static_zlib"
test_cflags="-I$idir/include"
test_ldflags="-L$dynamic_lib_dir"
@@ -5376,7 +6254,7 @@ rm -f core conftest.err conftest.$ac_objext \
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5385,27 +6263,32 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_dynamic_lib=yes
-else
+else $as_nop
found_dynamic_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- fi
- fi
- if test -f "$dir/$sdir/lib$static_crypto_lib_name$static_ext"; then
- # Found static library; check if it links...
- static_lib_dir="$dir/$sdir"
+
+fi
+
+fi
+ if test -f "$dir/$sdir/lib$static_crypto_lib_name$static_ext"
+then :
+
+ # Found static library; check if it links...
+ static_lib_dir="$dir/$sdir"
test_cflags="-I$idir/include"
test_ldflags=
@@ -5425,7 +6308,7 @@ rm -f core conftest.err conftest.$ac_objext \
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5434,25 +6317,28 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_static_lib=yes
-else
+else $as_nop
found_static_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- if test $found_static_lib = no -a $static_zlib != no; then
- # No, but inking with zlib as well might help...
- static_extra_libs="$static_extra_libs $static_zlib"
+ if test $found_static_lib = no -a $static_zlib != no
+then :
+
+ # No, but inking with zlib as well might help...
+ static_extra_libs="$static_extra_libs $static_zlib"
test_cflags="-I$idir/include"
test_ldflags=
@@ -5472,7 +6358,7 @@ rm -f core conftest.err conftest.$ac_objext \
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5481,124 +6367,156 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_static_lib=yes
-else
+else $as_nop
found_static_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- fi
- fi
- if test $found_static_lib = yes -o $found_dynamic_lib = yes; then
- break
- fi
- done
- fi
- case $enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib in
- no-*-no)
- ;; # Dynamic linking against ssl library disabled by user, and no static library found
- yes-no-*)
- ;; # Static linking against ssl library disabled by user, and no dynamic library found
- *-no-no)
- ;; # Neither static nor dynamic ssl library found
- no-*-yes | default_no-*-yes | default_yes-no-yes)
- # Link statically...
- SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
- SSL_SSL_LIBNAME=$static_ssl_lib_name
- SSL_LIBDIR="$static_lib_dir"
- SSL_EXTRA_LIBS="$static_extra_libs"
- SSL_RUNTIME_LIBDIR=
- SSL_DYNAMIC_ONLY=no
- usable_crypto=yes
- break;;
- *-yes-*)
- # Link dynamically...
- SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
- SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
- SSL_EXTRA_LIBS="$dynamic_extra_libs"
- SSL_LIBDIR="$dynamic_lib_dir"
- SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
- SSL_DYNAMIC_ONLY=yes
- usable_crypto=yes
- break;;
- esac
- fi
- done
+fi
- if test $usable_crypto = yes ; then
- if test $SSL_DYNAMIC_ONLY = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
-$as_echo "dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
-$as_echo "static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SSL_APP=
- CRYPTO_APP=
- SSH_APP=
-
- SSL_INCDIR=
- SSL_INCLUDE=
- SSL_CRYPTO_LIBNAME=
- SSL_SSL_LIBNAME=
- SSL_INCDIR=
- SSL_RUNTIME_LIBDIR=
- SSL_LIBDIR=
-
- case "$with_ssl-$enable_dynamic_ssl" in
- yes-yes)
- as_fn_error $? "crypto library with dynamic linking requested by user, but no such library was found" "$LINENO" 5
- ;;
- yes-no)
- as_fn_error $? "crypto library with static linking requested by user, but no such library was found" "$LINENO" 5
- ;;
- yes-*)
- as_fn_error $? "crypto library requested by user, but no such library was found" "$LINENO" 5
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No (usable) OpenSSL found, skipping ssl, ssh and crypto applications" >&5
-$as_echo "$as_me: WARNING: No (usable) OpenSSL found, skipping ssl, ssh and crypto applications" >&2;}
- ;;
- esac
+fi
+ if test $found_static_lib = yes -o $found_dynamic_lib = yes
+then :
+ break
+fi
+ done
+
+fi
+
+ case $enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib in #(
+ no-*-no) :
+
+ # Dynamic linking against ssl library disabled by user,
+ # and no static library found...
+ ;; #(
+ yes-no-*) :
+
+ # Static linking against ssl library disabled by user,
+ # and no dynamic library found...
+ ;; #(
+ *-no-no) :
+
+ # Neither static nor dynamic ssl library found...
+ ;; #(
+ no-*-yes | default_no-*-yes | default_yes-no-yes) :
+
+ # Link statically...
+ SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
+ SSL_SSL_LIBNAME=$static_ssl_lib_name
+ SSL_LIBDIR="$static_lib_dir"
+ SSL_EXTRA_LIBS="$static_extra_libs"
+ SSL_RUNTIME_LIBDIR=
+ SSL_DYNAMIC_ONLY=no
+ usable_crypto=yes
+ break
+ ;; #(
+ *-yes-*) :
+
+ # Link dynamically...
+ SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
+ SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
+ SSL_EXTRA_LIBS="$dynamic_extra_libs"
+ SSL_LIBDIR="$dynamic_lib_dir"
+ SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
+ SSL_DYNAMIC_ONLY=yes
+ usable_crypto=yes
+ break
+ ;; #(
+ *) :
+ ;;
+esac
- for a in ssl crypto ssh; do
- echo "No usable OpenSSL found" > $ERL_TOP/lib/$a/SKIP
- done
- fi
- ;;
- *)
- # Option given with PATH to package
- if test ! -d "$with_ssl" ; then
- as_fn_error $? "Invalid path to option --with-ssl=PATH" "$LINENO" 5
- fi
- if test ! -d "$with_ssl_incl" ; then
- as_fn_error $? "Invalid path to option --with-ssl-incl=PATH" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL header in $with_ssl_incl" >&5
-$as_echo_n "checking for OpenSSL header in $with_ssl_incl... " >&6; }
- if test -f "$with_ssl_incl/include/openssl/opensslv.h"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- as_fn_error $? "no OpenSSL header found in $with_ssl_incl" "$LINENO" 5
- fi
- SSL_INCDIR="$with_ssl_incl"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL in $with_ssl" >&5
-$as_echo_n "checking for OpenSSL in $with_ssl... " >&6; }
+fi
+ done
+
+ if test $usable_crypto = yes
+then :
+ if test $SSL_DYNAMIC_ONLY = yes
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
+printf "%s\n" "dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
+printf "%s\n" "static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
+fi
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ SSL_APP=
+ CRYPTO_APP=
+ SSH_APP=
+
+ SSL_INCDIR=
+ SSL_INCLUDE=
+ SSL_CRYPTO_LIBNAME=
+ SSL_SSL_LIBNAME=
+ SSL_INCDIR=
+ SSL_RUNTIME_LIBDIR=
+ SSL_LIBDIR=
+
+ case "$with_ssl-$enable_dynamic_ssl" in #(
+ yes-yes) :
+
+ as_fn_error $? "crypto library with dynamic linking requested by user, but no such library was found" "$LINENO" 5
+ ;; #(
+ yes-no) :
+
+ as_fn_error $? "crypto library with static linking requested by user, but no such library was found" "$LINENO" 5
+ ;; #(
+ yes-*) :
+
+ as_fn_error $? "crypto library requested by user, but no such library was found" "$LINENO" 5
+ ;; #(
+ *) :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: No (usable) OpenSSL found, skipping ssl, ssh and crypto applications" >&5
+printf "%s\n" "$as_me: WARNING: No (usable) OpenSSL found, skipping ssl, ssh and crypto applications" >&2;}
+ ;;
+esac
+
+ for a in ssl crypto ssh; do
+ echo "No usable OpenSSL found" > $ERL_TOP/lib/$a/SKIP
+ done
+
+fi
+ ;; #(
+ *) :
+
+ # Option given with PATH to package
+ if test ! -d "$with_ssl"
+then :
+ as_fn_error $? "Invalid path to option --with-ssl=PATH" "$LINENO" 5
+fi
+ if test ! -d "$with_ssl_incl"
+then :
+ as_fn_error $? "Invalid path to option --with-ssl-incl=PATH" "$LINENO" 5
+fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL header in $with_ssl_incl" >&5
+printf %s "checking for OpenSSL header in $with_ssl_incl... " >&6; }
+ if test -f "$with_ssl_incl/include/openssl/opensslv.h"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
+ as_fn_error $? "no OpenSSL header found in $with_ssl_incl" "$LINENO" 5
+fi
+ SSL_INCDIR="$with_ssl_incl"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL in $with_ssl" >&5
+printf %s "checking for OpenSSL in $with_ssl... " >&6; }
# Check for static and dynamic crypto library in the directory
# given as argument...
@@ -5632,72 +6550,103 @@ yes
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "^yes.?$" >/dev/null 2>&1; then :
+ $EGREP "^yes.?$" >/dev/null 2>&1
+then :
valid_include=yes
-else
+else $as_nop
valid_include=no
fi
-rm -f conftest*
+rm -rf conftest*
CPPFLAGS="$save_CPPFLAGS"
- if test $valid_include != yes; then
- static_crypto_lib_name=
- static_ssl_lib_name=
- static_extra_libs=
- static_lib_dir=
- dynamic_crypto_lib_name=
- dynamic_ssl_lib_name=
- dynamic_extra_libs=
- dynamic_lib_dir=
- dynamic_runtime_lib_dir=
- elif test "$host_os" = "win32" ; then
- if test -f "$dir/lib/VC/static/libcrypto${lib_bits}MD.lib"; then
- static_crypto_lib_name=libcrypto${lib_bits}MD
- static_ssl_lib_name="libssl${lib_bits}MD"
- static_extra_libs="$static_extra_libs -lCRYPT32 -lWS2_32"
- static_lib_dir="$dir/lib/VC/static"
- found_static_lib=yes
- fi
- if test -f "$dir/lib/VC/libcrypto${lib_bits}MD.lib"; then
- dynamic_crypto_lib_name=libcrypto${lib_bits}MD
- dynamic_ssl_lib_name="libssl${lib_bits}MD"
- dynamic_runtime_lib_dir="$rdir/lib/VC"
- dynamic_lib_dir="$dir/lib/VC"
- found_dynamic_lib=yes
- fi
- else # Non windows...
-
- case "$host_os" in
- darwin*)
- static_ext=.a
- dynamic_ext=.dylib;;
- *)
- static_ext=.a
- dynamic_ext=.so;;
- esac
- for sdir in $search_subdirs; do
- if test -f "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"; then
- found_dynlib=yes
- else
- found_dynlib=no
- case $host_os in
- openbsd*)
- # libcrypto.so got a suffix on (at least some) openbsd.
- # If we find libcrypto.so with suffix, we try to link
- # to it using -lcrypto ...
- for f in "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"*; do
- test -f "$f" && found_dynlib=yes
- break
- done;;
- *)
- ;;
- esac
- fi
- if test $found_dynlib = yes; then
- # Found dynamic library; check if it links...
- dynamic_lib_dir="$dir/$sdir"
- dynamic_runtime_lib_dir="$rdir/$sdir"
+ if test $valid_include != yes
+then :
+
+ # Not a valid include...
+ static_crypto_lib_name=
+ static_ssl_lib_name=
+ static_extra_libs=
+ static_lib_dir=
+ dynamic_crypto_lib_name=
+ dynamic_ssl_lib_name=
+ dynamic_extra_libs=
+ dynamic_lib_dir=
+ dynamic_runtime_lib_dir=
+
+elif test "$host_os" = "win32"
+then :
+
+ # Windows...
+ if test -f "$dir/lib/VC/static/libcrypto${lib_bits}MD.lib"
+then :
+
+ static_crypto_lib_name=libcrypto${lib_bits}MD
+ static_ssl_lib_name="libssl${lib_bits}MD"
+ static_extra_libs="$static_extra_libs -lCRYPT32 -lWS2_32"
+ static_lib_dir="$dir/lib/VC/static"
+ found_static_lib=yes
+
+fi
+ if test -f "$dir/lib/VC/libcrypto${lib_bits}MD.lib"
+then :
+
+ dynamic_crypto_lib_name=libcrypto${lib_bits}MD
+ dynamic_ssl_lib_name="libssl${lib_bits}MD"
+ dynamic_runtime_lib_dir="$rdir/lib/VC"
+ dynamic_lib_dir="$dir/lib/VC"
+ found_dynamic_lib=yes
+
+fi
+
+else $as_nop
+
+ # Not windows...
+ case "$host_os" in #(
+ darwin*) :
+
+ static_ext=.a
+ dynamic_ext=.dylib
+ ;; #(
+ *) :
+
+ static_ext=.a
+ dynamic_ext=.so
+ ;;
+esac
+ for sdir in $search_subdirs; do
+ if test -f "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"
+then :
+
+ found_dynlib=yes
+
+else $as_nop
+
+ found_dynlib=no
+ case $host_os in #(
+ openbsd*) :
+
+ # libcrypto.so got a suffix on (at least some) openbsd.
+ # If we find libcrypto.so with suffix, we try to link
+ # to it using -lcrypto ...
+ for f in "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"*; do
+ if test -f "$f"
+then :
+ found_dynlib=yes; break
+fi
+ done
+ ;; #(
+ *) :
+ ;;
+esac
+
+fi
+ if test $found_dynlib = yes
+then :
+
+ # Found dynamic library; check if it links...
+ dynamic_lib_dir="$dir/$sdir"
+ dynamic_runtime_lib_dir="$rdir/$sdir"
test_cflags="-I$idir/include"
test_ldflags="-L$dynamic_lib_dir"
@@ -5717,7 +6666,7 @@ rm -f conftest*
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5726,25 +6675,28 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_dynamic_lib=yes
-else
+else $as_nop
found_dynamic_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- if test $found_dynamic_lib = no -a $static_zlib != no; then
- # No, but linking with zlib as well might help...
- dynamic_extra_libs="$dynamic_extra_libs $static_zlib"
+ if test $found_dynamic_lib = no -a $static_zlib != no
+then :
+
+ # No, but linking with zlib as well might help...
+ dynamic_extra_libs="$dynamic_extra_libs $static_zlib"
test_cflags="-I$idir/include"
test_ldflags="-L$dynamic_lib_dir"
@@ -5764,7 +6716,7 @@ rm -f core conftest.err conftest.$ac_objext \
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5773,27 +6725,32 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_dynamic_lib=yes
-else
+else $as_nop
found_dynamic_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- fi
- fi
- if test -f "$dir/$sdir/lib$static_crypto_lib_name$static_ext"; then
- # Found static library; check if it links...
- static_lib_dir="$dir/$sdir"
+
+fi
+
+fi
+ if test -f "$dir/$sdir/lib$static_crypto_lib_name$static_ext"
+then :
+
+ # Found static library; check if it links...
+ static_lib_dir="$dir/$sdir"
test_cflags="-I$idir/include"
test_ldflags=
@@ -5813,7 +6770,7 @@ rm -f core conftest.err conftest.$ac_objext \
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5822,25 +6779,28 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_static_lib=yes
-else
+else $as_nop
found_static_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- if test $found_static_lib = no -a $static_zlib != no; then
- # No, but inking with zlib as well might help...
- static_extra_libs="$static_extra_libs $static_zlib"
+ if test $found_static_lib = no -a $static_zlib != no
+then :
+
+ # No, but inking with zlib as well might help...
+ static_extra_libs="$static_extra_libs $static_zlib"
test_cflags="-I$idir/include"
test_ldflags=
@@ -5860,7 +6820,7 @@ rm -f core conftest.err conftest.$ac_objext \
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -5869,191 +6829,280 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
found_static_lib=yes
-else
+else $as_nop
found_static_lib=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- fi
- fi
- if test $found_static_lib = yes -o $found_dynamic_lib = yes; then
- break
- fi
- done
- fi
- case $enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib in
- no-*-no)
- as_fn_error $? "dynamic linking against crypto library disabled by user, but no static library found in $with_ssl" "$LINENO" 5;;
- yes-no-*)
- as_fn_error $? "static linking against crypto library disabled by user, but no dynamic library found in $with_ssl" "$LINENO" 5;;
- *-no-no)
- as_fn_error $? "neither static nor dynamic crypto library found in $with_ssl" "$LINENO" 5;;
- no-*-yes | default_no-*-yes | default_yes-no-yes)
- # Link statically...
- SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
- SSL_SSL_LIBNAME=$static_ssl_lib_name
- SSL_LIBDIR="$static_lib_dir"
- SSL_EXTRA_LIBS="$static_extra_libs"
- SSL_RUNTIME_LIBDIR=
- SSL_DYNAMIC_ONLY=no;;
- *-yes-*)
- # Link dynamically...
- SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
- SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
- SSL_EXTRA_LIBS="$dynamic_extra_libs"
- SSL_LIBDIR="$dynamic_lib_dir"
- SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
- SSL_DYNAMIC_ONLY=yes;;
- esac
- if test $SSL_DYNAMIC_ONLY = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
-$as_echo "dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
-$as_echo "static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
- fi
- SSL_INCLUDE="-I$with_ssl_incl/include"
- SSL_APP=ssl
- CRYPTO_APP=crypto
- SSH_APP=ssh
- if test "$cross_compiling" = "yes"; then
- SSL_RUNTIME_LIBDIR=`echo "$SSL_LIBDIR" | sed -n "s|^$erl_xcomp_sysroot\(/*\)\(.*\)\$|/\2|p"`
- else
- SSL_RUNTIME_LIBDIR="$SSL_LIBDIR"
- fi
+fi
+
+fi
+ if test $found_static_lib = yes -o $found_dynamic_lib = yes
+then :
+ break
+fi
+ done
+
+fi
+
+ case $enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib in #(
+ no-*-no) :
+
+ as_fn_error $? "dynamic linking against crypto library disabled by user, but no static library found in $with_ssl" "$LINENO" 5
+ ;; #(
+ yes-no-*) :
+
+ as_fn_error $? "static linking against crypto library disabled by user, but no dynamic library found in $with_ssl" "$LINENO" 5
+ ;; #(
+ *-no-no) :
+
+ as_fn_error $? "neither static nor dynamic crypto library found in $with_ssl" "$LINENO" 5
+ ;; #(
+ no-*-yes | default_no-*-yes | default_yes-no-yes) :
+
+ # Link statically...
+ SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
+ SSL_SSL_LIBNAME=$static_ssl_lib_name
+ SSL_LIBDIR="$static_lib_dir"
+ SSL_EXTRA_LIBS="$static_extra_libs"
+ SSL_RUNTIME_LIBDIR=
+ SSL_DYNAMIC_ONLY=no
+ ;; #(
+ *-yes-*) :
+
+ # Link dynamically...
+ SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
+ SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
+ SSL_EXTRA_LIBS="$dynamic_extra_libs"
+ SSL_LIBDIR="$dynamic_lib_dir"
+ SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
+ SSL_DYNAMIC_ONLY=yes
+ ;; #(
+ *) :
+ ;;
esac
+ if test $SSL_DYNAMIC_ONLY = yes
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
+printf "%s\n" "dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&5
+printf "%s\n" "static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR" >&6; }
+fi
+ SSL_INCLUDE="-I$with_ssl_incl/include"
+ SSL_APP=ssl
+ CRYPTO_APP=crypto
+ SSH_APP=ssh
+ if test "$cross_compiling" = "yes"
+then :
+ SSL_RUNTIME_LIBDIR=`echo "$SSL_LIBDIR" | sed -n "s|^$erl_xcomp_sysroot\(/*\)\(.*\)\$|/\2|p"`
+
+else $as_nop
+
+ SSL_RUNTIME_LIBDIR="$SSL_LIBDIR"
+
+fi
+ ;;
+esac
SSL_DED_LD_RUNTIME_LIBRARY_PATH=
ded_ld_rflg="$DED_LD_FLAG_RUNTIME_LIBRARY_PATH"
+case "$with_ssl_rpath" in #(
+ no) :
-case "$with_ssl_rpath" in
+ # Use no ssl runtime library path
+ SSL_DED_LD_RUNTIME_LIBRARY_PATH=
+ ;; #(
+ yes | default) :
-yes | default) # Use standard lib locations for ssl runtime library path
+ # Use standard lib locations for ssl runtime library path
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for runtime library path to use" >&5
+printf %s "checking for runtime library path to use... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for runtime library path to use" >&5
-$as_echo_n "checking for runtime library path to use... " >&6; }
+ if test $enable_dynamic_ssl = no -a "$with_ssl_rpath" = yes; then
+ as_fn_error $? "requested by user, but user also requested static linking" "$LINENO" 5
+ fi
- if test $enable_dynamic_ssl = no -a "$with_ssl_rpath" = yes; then
- as_fn_error $? "requested by user, but user also requested static linking" "$LINENO" 5
- fi
+ if test "$CRYPTO_APP" = ""
+then :
- if test "$CRYPTO_APP" = ""; then
- if test "$with_ssl_rpath" = yes; then
- as_fn_error $? "requested by user, but could not be used since no crypto library was found" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
- elif test "$ded_ld_rflg" = ""; then
- if test "$with_ssl_rpath" = yes; then
- as_fn_error $? "requested by user, but cannot be set on this platform" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
- elif test "$SSL_DYNAMIC_ONLY" != "yes"; then
- if test "$with_ssl_rpath" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: requested by user, but dynamic linking will not be used" >&5
-$as_echo "$as_me: WARNING: requested by user, but dynamic linking will not be used" >&2;}
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
- fi
- else
+ if test "$with_ssl_rpath" = yes
+then :
+ as_fn_error $? "requested by user, but could not be used since no crypto library was found" "$LINENO" 5
+fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5
+printf "%s\n" "" >&6; }
- libdirs="/lib"
+elif test "$ded_ld_rflg" = ""
+then :
- dir_lib64=no
- dir_lib_64=no
- dir_lib32=no
- dir_lib_32=no
- dir_multiarch=no
- dir_with_ssl_lib_subdir=no
+ if test "$with_ssl_rpath" = yes
+then :
+ as_fn_error $? "requested by user, but cannot be set on this platform" "$LINENO" 5
+fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5
+printf "%s\n" "" >&6; }
- test "$multiarch_dir" = "" || dir_multiarch=yes
- test "$with_ssl_lib_subdir" = "" || dir_with_ssl_lib_subdir=yes
+elif test "$SSL_DYNAMIC_ONLY" != "yes"
+then :
- case "$SSL_RUNTIME_LIBDIR" in
- */lib/64 | */lib/64/ ) dir_lib_64=yes;;
- */lib64 | */lib64/ ) dir_lib64=yes;;
- */lib/32 | */lib/32/ ) dir_lib_32=yes;;
- */lib32 | */lib32/ ) dir_lib32=yes;;
- *) ;;
- esac
+ if test "$with_ssl_rpath" = yes
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: requested by user, but dynamic linking will not be used" >&5
+printf "%s\n" "$as_me: WARNING: requested by user, but dynamic linking will not be used" >&2;}
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5
+printf "%s\n" "" >&6; }
+fi
- for dir in $std_ssl_locations; do
- if test "$ac_cv_sizeof_void_p" = "8"; then
- test $dir_lib_64 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib/64" &&
- dir_lib_64=yes
- test $dir_lib64 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib64" &&
- dir_lib64=yes
- else
- test $dir_lib_32 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib/32" &&
- dir_lib_32=yes
- test $dir_lib32 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib32" &&
- dir_lib32=yes
- fi
- test $dir_multiarch = no &&
- test -d "$erl_xcomp_sysroot$dir/lib/$multiarch_dir" &&
- dir_multiarch=yes
- done
+else $as_nop
- test $dir_with_ssl_lib_subdir = yes && libdirs="/$with_ssl_lib_subdir $libdirs"
- test $dir_multiarch = yes && libdirs="/lib/$multiarch_dir $libdirs"
- test $dir_lib_64 = yes && libdirs="/lib/64 $libdirs"
- test $dir_lib64 = yes && libdirs="/lib64 $libdirs"
- test $dir_lib_32 = yes && libdirs="/lib/32 $libdirs"
- test $dir_lib32 = yes && libdirs="/lib32 $libdirs"
+ # Try to find a suitable rpath based on default install directories...
+ libdirs="/lib"
- #
- # We try the follwing runtime paths in the
- # following order:
- # 1. Standard ssl locations with all variations
- # of lib subdirectories that we know of
- # 2. Standard ssl locations with all variations
- # of lib subdirectories that we know of and
- # exist on this machine
- # 3. Determined $SSL_RUNTIME_LIBDIR
- # If none of the above links, we skip runtime
- # library path...
- #
- for type in std x_std curr; do
-
- ded_ld_rpath="$ded_ld_rflg$SSL_RUNTIME_LIBDIR"
- rpath="$SSL_RUNTIME_LIBDIR"
-
- if test $type != curr; then
- for ldir in $libdirs; do
- for dir in $std_ssl_locations; do
- test "$SSL_RUNTIME_LIBDIR" != "$dir$ldir" || continue
- test $type != x_std || test -d "$erl_xcomp_sysroot$dir$ldir" || continue
- if test "$dir" = "/"; then
- libdir="$ldir"
- else
- libdir="$dir$ldir"
- fi
- ded_ld_rpath="$ded_ld_rpath $ded_ld_rflg$libdir"
- rpath="$rpath:$libdir"
- done
- done
- fi
+ dir_lib64=no
+ dir_lib_64=no
+ dir_lib32=no
+ dir_lib_32=no
+ dir_multiarch=no
+ dir_with_ssl_lib_subdir=no
- # Check that it still links when we add the runtime path...
+ if test "$multiarch_dir" != ""
+then :
+ dir_multiarch=yes
+fi
+ if test "$with_ssl_lib_subdir" != ""
+then :
+ dir_with_ssl_lib_subdir=yes
+fi
+
+ case "$SSL_RUNTIME_LIBDIR" in #(
+ */lib/64 | */lib/64/) :
+ dir_lib_64=yes ;; #(
+ */lib64 | */lib64/) :
+ dir_lib64=yes ;; #(
+ */lib/32 | */lib/32/) :
+ dir_lib_32=yes ;; #(
+ */lib32 | */lib32/) :
+ dir_lib32=yes ;; #(
+ *) :
+ ;;
+esac
+
+ for dir in $std_ssl_locations; do
+ if test "$ac_cv_sizeof_void_p" = "8"
+then :
+
+ if test $dir_lib_64 = no && test -d "$erl_xcomp_sysroot$dir/lib/64"
+then :
+ dir_lib_64=yes
+fi
+ if test $dir_lib64 = no && test -d "$erl_xcomp_sysroot$dir/lib64"
+then :
+ dir_lib64=yes
+fi
+
+else $as_nop
+
+ if test $dir_lib_32 = no && test -d "$erl_xcomp_sysroot$dir/lib/32"
+then :
+ dir_lib_32=yes
+fi
+ if test $dir_lib32 = no && test -d "$erl_xcomp_sysroot$dir/lib32"
+then :
+ dir_lib32=yes
+fi
+
+fi
+ if test $dir_multiarch = no && test -d "$erl_xcomp_sysroot$dir/lib/$multiarch_dir"
+then :
+ dir_multiarch=yes
+fi
+ done
+
+ if test $dir_with_ssl_lib_subdir = yes
+then :
+ libdirs="/$with_ssl_lib_subdir $libdirs"
+fi
+ if test $dir_multiarch = yes
+then :
+ libdirs="/lib/$multiarch_dir $libdirs"
+fi
+ if test $dir_lib_64 = yes
+then :
+ libdirs="/lib/64 $libdirs"
+fi
+ if test $dir_lib64 = yes
+then :
+ libdirs="/lib64 $libdirs"
+fi
+ if test $dir_lib_32 = yes
+then :
+ libdirs="/lib/32 $libdirs"
+fi
+ if test $dir_lib32 = yes
+then :
+ libdirs="/lib32 $libdirs"
+fi
+
+ #
+ # We try the follwing runtime paths in the
+ # following order:
+ # 1. Standard ssl locations with all variations
+ # of lib subdirectories that we know of
+ # 2. Standard ssl locations with all variations
+ # of lib subdirectories that we know of and
+ # exist on this machine
+ # 3. Determined $SSL_RUNTIME_LIBDIR
+ # If none of the above links, we skip runtime
+ # library path...
+ #
+ for type in std x_std curr; do
+
+ ded_ld_rpath="$ded_ld_rflg$SSL_RUNTIME_LIBDIR"
+ rpath="$SSL_RUNTIME_LIBDIR"
+
+ if test $type != curr
+then :
+
+ for ldir in $libdirs; do
+ for dir in $std_ssl_locations; do
+ if test "$SSL_RUNTIME_LIBDIR" = "$dir$ldir"
+then :
+ continue
+fi
+ if test $type = x_std && test '!' -d "$erl_xcomp_sysroot$dir$ldir"
+then :
+ continue
+fi
+ if test "$dir" = "/"
+then :
+ libdir="$ldir"
+else $as_nop
+ libdir="$dir$ldir"
+fi
+ ded_ld_rpath="$ded_ld_rpath $ded_ld_rflg$libdir"
+ rpath="$rpath:$libdir"
+ done
+ done
+
+fi
+
+ # Check that it still links when we add the runtime path...
test_cflags="$SSL_INCLUDE"
test_ldflags="$ded_ld_rpath -L$SSL_LIBDIR"
@@ -6073,7 +7122,7 @@ $as_echo "" >&6; }
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -6082,16 +7131,17 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
rpath_success=yes
-else
+else $as_nop
rpath_success=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
@@ -6099,69 +7149,102 @@ rm -f core conftest.err conftest.$ac_objext \
LIBS="$saveLIBS"
- test "$rpath_success" = "yes" && break
- done
+ if test "$rpath_success" = "yes"
+then :
+ break
+fi
- test "$rpath_success" = "yes" || { ded_ld_rpath=; rpath=; }
+ done
- SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
+ if test "$rpath_success" != "yes"
+then :
- if test "$rpath" != ""; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rpath" >&5
-$as_echo "$rpath" >&6; }
- elif test "$with_ssl_rpath" = yes; then
- as_fn_error $? "requested by user, but could not be used" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to set run path during linking" >&5
-$as_echo "$as_me: WARNING: unable to set run path during linking" >&2;}
- fi
- fi
- ;;
+ ded_ld_rpath=
+ rpath=
-no) # Use no ssl runtime library path
- SSL_DED_LD_RUNTIME_LIBRARY_PATH=
- ;;
+fi
-*) # Use ssl runtime library paths set by --with-ssl-rpath (without any check)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether runtime library path can be set" >&5
-$as_echo_n "checking whether runtime library path can be set... " >&6; }
+ SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
- if test $enable_dynamic_ssl = no; then
- as_fn_error $? "runtime library path requested by user, but user also requested static linking" "$LINENO" 5
- elif test "$CRYPTO_APP" = ""; then
- if test "$with_ssl_rpath" = yes; then
- as_fn_error $? "runtime library path requested by user, but could not be set since no crypto library was found" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
- elif test "$ded_ld_rflg" = ""; then
- if test "$with_ssl_rpath" = yes; then
- as_fn_error $? "runtime library path requested by user, but cannot be set on this platform" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
- elif test "$SSL_DYNAMIC_ONLY" != "yes"; then
- if test "$with_ssl_rpath" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: runtime library path requested by user, but dynamic linking will not be used" >&5
-$as_echo "$as_me: WARNING: runtime library path requested by user, but dynamic linking will not be used" >&2;}
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
- fi
- else
- ded_ld_rpath=
- delimit=
- rpath=
- rpath_delimit=
- save_ifs="$IFS"; IFS=",:"
- for dir in $with_ssl_rpath; do
- ded_ld_rpath="$ded_ld_rpath$delimit$ded_ld_rflg$dir"
- delimit=" "
- rpath="$rpath$rpath_delimit$dir"
- rpath_delimit=":"
- done
- IFS="$save_ifs"
- SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
+ if test "$rpath" != ""
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $rpath" >&5
+printf "%s\n" "$rpath" >&6; }
+
+elif test "$with_ssl_rpath" = yes
+then :
+
+ as_fn_error $? "requested by user, but could not be used" "$LINENO" 5
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to set run path during linking" >&5
+printf "%s\n" "$as_me: WARNING: unable to set run path during linking" >&2;}
+
+fi
+
+fi
+ # end yes|default
+ ;; #(
+ *) :
+
+ # Use ssl runtime library paths set by --with-ssl-rpath
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether runtime library path can be set" >&5
+printf %s "checking whether runtime library path can be set... " >&6; }
+
+ if test $enable_dynamic_ssl = no
+then :
+
+ as_fn_error $? "runtime library path requested by user, but user also requested static linking" "$LINENO" 5
+
+elif test "$CRYPTO_APP" = ""
+then :
+
+ if test "$with_ssl_rpath" = yes
+then :
+ as_fn_error $? "runtime library path requested by user, but could not be set since no crypto library was found" "$LINENO" 5
+fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5
+printf "%s\n" "" >&6; }
+
+elif test "$ded_ld_rflg" = ""
+then :
+
+ if test "$with_ssl_rpath" = yes
+then :
+ as_fn_error $? "runtime library path requested by user, but cannot be set on this platform" "$LINENO" 5
+fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5
+printf "%s\n" "" >&6; }
+
+ test "$SSL_DYNAMIC_ONLY" != "yes"
+elif
+ if test "$with_ssl_rpath" = yes
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: runtime library path requested by user, but dynamic linking will not be used" >&5
+printf "%s\n" "$as_me: WARNING: runtime library path requested by user, but dynamic linking will not be used" >&2;}
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5
+printf "%s\n" "" >&6; }
+fi
+
+then :
+
+ # Check that it links...
+ ded_ld_rpath=
+ delimit=
+ rpath=
+ rpath_delimit=
+ save_ifs="$IFS"; IFS=",:"
+ for dir in $with_ssl_rpath; do
+ ded_ld_rpath="$ded_ld_rpath$delimit$ded_ld_rflg$dir"
+ delimit=" "
+ rpath="$rpath$rpath_delimit$dir"
+ rpath_delimit=":"
+ done
+ IFS="$save_ifs"
+ SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
test_cflags="$SSL_INCLUDE"
test_ldflags="$ded_ld_rpath -L$SSL_LIBDIR"
@@ -6181,7 +7264,7 @@ $as_echo "" >&6; }
#include <openssl/hmac.h>
int
-main ()
+main (void)
{
HMAC(0, 0, 0, 0, 0, 0, 0);
@@ -6190,74 +7273,238 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
rpath_success=yes
-else
+else $as_nop
rpath_success=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$saveCFLAGS"
LDFLAGS="$saveLDFLAGS"
LIBS="$saveLIBS"
- if test "$rpath_success" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; using $rpath" >&5
-$as_echo "yes; using $rpath" >&6; }
- else
- as_fn_error $? "runtime library path requested by user, but link failed" "$LINENO" 5
- fi
- fi
- ;;
+ if test "$rpath_success" = yes
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes; using $rpath" >&5
+printf "%s\n" "yes; using $rpath" >&6; }
+else $as_nop
+ as_fn_error $? "runtime library path requested by user, but link failed" "$LINENO" 5
+fi
+fi
+ ;;
esac
-
-
# Check whether --enable-fips was given.
-if test "${enable_fips+set}" = set; then :
+if test ${enable_fips+y}
+then :
enableval=$enable_fips; case "$enableval" in
yes) enable_fips_support=yes ;;
*) enable_fips_support=no ;;
esac
-else
+else $as_nop
enable_fips_support=no
fi
-if test "x$enable_fips_support" = "xyes" && test "$CRYPTO_APP" != ""; then
- saveCFLAGS="$CFLAGS"
- saveLDFLAGS="$LDFLAGS"
- saveLIBS="$LIBS"
- CFLAGS="$DED_BASIC_CFLAGS $SSL_INCLUDE"
- if test $SSL_DYNAMIC_ONLY = yes; then
- LDFLAGS="$DED_LDFLAGS_CONFTEST $ded_ld_rpath -L$SSL_LIBDIR"
- LIBS="$LIBS -l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"
- else
- LDFLAGS="$DED_LDFLAGS_CONFTEST"
- if test "$host_os" = "win32" ; then
- LIBS="$LIBS $SSL_LIBDIR/$SSL_CRYPTO_LIBNAME.lib $SSL_EXTRA_LIBS"
- else
- LIBS="$LIBS $SSL_LIBDIR/lib$SSL_CRYPTO_LIBNAME.a $SSL_EXTRA_LIBS"
- fi
- fi
- ac_fn_c_check_func "$LINENO" "FIPS_mode_set" "ac_cv_func_FIPS_mode_set"
-if test "x$ac_cv_func_FIPS_mode_set" = xyes; then :
+SSL_FLAGS=
+if test "$enable_fips_support" = "yes"
+then :
+
+ if test "$CRYPTO_APP" = ""
+then :
+ as_fn_error $? "FIPS support requested, but no crypto library found" "$LINENO" 5
+fi
+ saveCFLAGS="$CFLAGS"
+ saveLDFLAGS="$LDFLAGS"
+ saveLIBS="$LIBS"
+ CFLAGS="$DED_BASIC_CFLAGS $SSL_INCLUDE"
+ if test $SSL_DYNAMIC_ONLY = yes
+then :
+
+ LDFLAGS="$DED_LDFLAGS_CONFTEST $ded_ld_rpath -L$SSL_LIBDIR"
+ LIBS="$LIBS -l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"
+
+else $as_nop
+
+ LDFLAGS="$DED_LDFLAGS_CONFTEST"
+ if test "$host_os" = "win32"
+then :
+ LIBS="$LIBS $SSL_LIBDIR/$SSL_CRYPTO_LIBNAME.lib $SSL_EXTRA_LIBS"
+else $as_nop
+ LIBS="$LIBS $SSL_LIBDIR/lib$SSL_CRYPTO_LIBNAME.a $SSL_EXTRA_LIBS"
+fi
+
+fi
+ ac_fn_c_check_func "$LINENO" "FIPS_mode_set" "ac_cv_func_FIPS_mode_set"
+if test "x$ac_cv_func_FIPS_mode_set" = xyes
+then :
SSL_FLAGS="-DFIPS_SUPPORT"
-else
- SSL_FLAGS=
+else $as_nop
+ as_fn_error $? "FIPS support requested, but cannot be enabled" "$LINENO" 5
fi
- CFLAGS="$saveCFLAGS"
- LDFLAGS="$saveLDFLAGS"
- LIBS="$saveLIBS"
-else
- SSL_FLAGS=
+ CFLAGS="$saveCFLAGS"
+ LDFLAGS="$saveLDFLAGS"
+ LIBS="$saveLIBS"
+
+fi
+
+saveCFLAGS="$CFLAGS"
+saveLDFLAGS="$LDFLAGS"
+saveLIBS="$LIBS"
+CFLAGS="$DED_BASIC_CFLAGS $SSL_INCLUDE"
+if test $SSL_DYNAMIC_ONLY = yes
+then :
+
+ LDFLAGS="$DED_LDFLAGS_CONFTEST $ded_ld_rpath -L$SSL_LIBDIR"
+ LIBS="$LIBS -l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"
+
+else $as_nop
+
+ LDFLAGS="$DED_LDFLAGS_CONFTEST"
+ if test "$host_os" = "win32"
+then :
+ LIBS="$LIBS $SSL_LIBDIR/$SSL_CRYPTO_LIBNAME.lib $SSL_EXTRA_LIBS"
+else $as_nop
+ LIBS="$LIBS $SSL_LIBDIR/lib$SSL_CRYPTO_LIBNAME.a $SSL_EXTRA_LIBS"
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_CFLAGS=$CFLAGS
+ ac_cv_c_undeclared_builtin_options='cannot detect'
+ for ac_arg in '' -fno-builtin; do
+ CFLAGS="$ac_save_CFLAGS $ac_arg"
+ # This test program should *not* compile successfully.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+(void) strchr;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ # This test program should compile successfully.
+ # No library function is consistently available on
+ # freestanding implementations, so test against a dummy
+ # declaration. Include always-available headers on the
+ # off chance that they somehow elicit warnings.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
+
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+ (void) ac_decl;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if test x"$ac_arg" = x
+then :
+ ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+ ac_cv_c_undeclared_builtin_options=$ac_arg
+fi
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+ CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+ case $ac_cv_c_undeclared_builtin_options in #(
+ 'cannot detect') :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+ 'none needed') :
+ ac_c_undeclared_builtin_options='' ;; #(
+ *) :
+ ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
+
+ac_fn_check_decl "$LINENO" "CRYPTO_memcmp" "ac_cv_have_decl_CRYPTO_memcmp" "#include <openssl/crypto.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_CRYPTO_memcmp" = xyes
+then :
+ have_crypto_memcmp_decl=yes
+else $as_nop
+ have_crypto_memcmp_decl=no
+fi
+if test $have_crypto_memcmp_decl = yes
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether CRYPTO_memcmp can be linked" >&5
+printf %s "checking whether CRYPTO_memcmp can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <openssl/crypto.h>
+
+int
+main (void)
+{
+
+ CRYPTO_memcmp("a", "b", 1);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ SSL_FLAGS="-DHAVE_OPENSSL_CRYPTO_MEMCMP $SSL_FLAGS"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+CFLAGS="$saveCFLAGS"
+LDFLAGS="$saveLDFLAGS"
+LIBS="$saveLIBS"
@@ -6300,8 +7547,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -6331,15 +7578,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -6353,8 +7600,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -6407,7 +7654,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -6423,8 +7670,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -6447,14 +7694,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -6464,46 +7713,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -6512,13 +7761,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -6527,8 +7769,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -6540,30 +7786,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -6576,13 +7802,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -6609,18 +7836,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -6632,12 +7861,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -6668,7 +7898,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -6690,6 +7920,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -6703,6 +7937,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -6744,7 +7984,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -6753,7 +7993,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -6816,7 +8056,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -6865,14 +8105,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -6909,21 +8151,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -6951,7 +8193,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -6965,7 +8207,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -6990,7 +8232,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -7218,7 +8460,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -7226,17 +8468,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -7253,7 +8495,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -7277,9 +8519,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -7332,8 +8574,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -7375,9 +8617,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -7424,8 +8666,9 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/lib/crypto/configure.ac b/lib/crypto/configure.ac
new file mode 100644
index 0000000000..166d3e6587
--- /dev/null
+++ b/lib/crypto/configure.ac
@@ -0,0 +1,908 @@
+dnl Process this file with autoconf to produce a configure script. -*-Autoconf-*-
+dnl
+dnl %CopyrightBegin%
+dnl
+dnl Copyright Ericsson AB 2018-2020. All Rights Reserved.
+dnl
+dnl Licensed under the Apache License, Version 2.0 (the "License");
+dnl you may not use this file except in compliance with the License.
+dnl You may obtain a copy of the License at
+dnl
+dnl http://www.apache.org/licenses/LICENSE-2.0
+dnl
+dnl Unless required by applicable law or agreed to in writing, software
+dnl distributed under the License is distributed on an "AS IS" BASIS,
+dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+dnl See the License for the specific language governing permissions and
+dnl limitations under the License.
+dnl
+dnl %CopyrightEnd%
+dnl
+
+dnl define([AC_CACHE_LOAD], )dnl
+dnl define([AC_CACHE_SAVE], )dnl
+
+AC_INIT
+AC_CONFIG_SRCDIR([vsn.mk])
+AC_PREREQ([2.71])
+
+m4_include([otp.m4])
+
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
+
+ERL_CANONICAL_SYSTEM_TYPE
+
+AC_LANG(C)
+
+LM_PRECIOUS_VARS
+
+if test "$cross_compiling" = "yes"; then
+ CROSS_COMPILING=yes
+else
+ CROSS_COMPILING=no
+fi
+AC_SUBST(CROSS_COMPILING)
+
+ERL_XCOMP_SYSROOT_INIT
+
+AC_PROG_CC
+LM_WINDOWS_ENVIRONMENT
+
+ERL_DED
+
+AC_MSG_CHECKING([for multiarch directory])
+multiarch_dir=
+if test "$GCC" = "yes"; then
+ multiarch_dir=`$CC $CFLAGS -print-multiarch 2>/dev/null`
+ if test $? -ne 0; then
+ multiarch_dir=
+ fi
+fi
+if test "$multiarch_dir" = ""; then
+ AC_MSG_RESULT([not found])
+else
+ AC_MSG_RESULT([$multiarch_dir])
+fi
+
+dnl
+dnl SSL, SSH and CRYPTO need the OpenSSL libraries
+dnl
+dnl Check flags --with-ssl, --without-ssl --with-ssl=PATH.
+dnl If no option is given or --with-ssl is set without a path then we
+dnl search for OpenSSL libraries and header files in the standard locations.
+dnl If set to --without-ssl we disable the use of SSL, SSH and CRYPTO.
+dnl If set to --with-ssl=PATH we use that path as the prefix, i.e. we
+dnl use "PATH/include" and "PATH/lib".
+
+AC_CHECK_SIZEOF(void *)
+
+std_ssl_locations="\
+/usr/local \
+/usr/sfw \
+/usr \
+/opt/local \
+/usr/pkg \
+/usr/local/openssl \
+/usr/local/opt/openssl \
+/opt/homebrew/opt/openssl \
+/usr/lib/openssl \
+/usr/openssl \
+/usr/local/ssl \
+/usr/lib/ssl \
+/usr/ssl \
+/"
+
+AC_ARG_WITH(ssl,
+AS_HELP_STRING([--with-ssl=PATH], [base location of OpenSSL include and lib directories])
+AS_HELP_STRING([--with-ssl], [use SSL (default)])
+AS_HELP_STRING([--without-ssl], [don't use SSL]))
+
+AC_ARG_WITH(ssl-lib-subdir,
+AS_HELP_STRING([--with-ssl-lib-subdir=RELATIVE_PATH],
+ [specify extra OpenSSL lib sub-directory to search in (relative to base directory)]),
+[
+case "$with_ssl_lib_subdir" in
+ yes|no)
+ with_ssl_lib_subdir=
+ ;;
+ *)
+ ;;
+esac
+],
+[with_ssl_lib_subdir=]) #default
+
+AC_ARG_WITH(ssl-incl,
+AS_HELP_STRING([--with-ssl-incl=PATH],
+ [base location of OpenSSL include dir (if different than base location specified by --with-ssl=PATH)]),
+[
+case X$with_ssl in
+ X | Xyes | Xno) AC_MSG_ERROR([--with-ssl-incl=PATH set without --with-ssl=PATH]);;
+esac
+],
+[with_ssl_incl=$with_ssl]) #default
+
+AC_ARG_WITH(ssl-zlib,
+AS_HELP_STRING([--with-ssl-zlib=PATH], [Path to static zlib library to link the
+ crypto NIF with. This zlib library is most
+ often not necessary but might be needed in
+ order to link the NIF in some cases.]),
+[], [with_ssl_zlib=default]) #default
+
+AC_ARG_WITH(ssl-rpath,
+AS_HELP_STRING([--with-ssl-rpath=yes|no|PATHS],
+ [runtime library path for OpenSSL. Default is "yes", which equates to a
+ number of standard locations. If "no", then no runtime
+ library paths will be used. Anything else should be a
+ comma or colon separated list of paths.]),
+[
+case X$with_ssl in
+ Xno) AC_MSG_ERROR([--with-ssl-rpath set without --with-ssl]);;
+esac
+],
+[with_ssl_rpath=default]) #default
+
+
+AC_ARG_ENABLE(dynamic-ssl-lib,
+AS_HELP_STRING([--enable-dynamic-ssl-lib],
+ [enable using dynamic openssl libraries when linking the crypto NIF])
+AS_HELP_STRING([--disable-dynamic-ssl-lib],
+ [disable using dynamic openssl libraries when linking the crypto NIF]),
+[ case "$enableval" in
+ no) enable_dynamic_ssl=no ;;
+ *) enable_dynamic_ssl=yes ;;
+ esac ], enable_dynamic_ssl=undefined)
+
+AC_ARG_ENABLE(evp-dh,
+AS_HELP_STRING([--disable-evp-dh],
+ [intentionally undocumented workaround]),
+[ case "$enableval" in
+ no) DISABLE_EVP_DH=1;;
+ *) DISABLE_EVP_DH=0;;
+ esac ], DISABLE_EVP_DH=0)
+
+
+AC_ARG_ENABLE(evp-hmac,
+AS_HELP_STRING([--disable-evp-hmac],
+ [intentionally undocumented workaround]),
+[ case "$enableval" in
+ no) DISABLE_EVP_HMAC=1;;
+ *) DISABLE_EVP_HMAC=0;;
+ esac ], DISABLE_EVP_HMAC=0)
+
+AC_DEFUN([ERL_LINK_CRYPTO_IFELSE], [
+ test_cflags=$1
+ test_ldflags=$2
+ test_libs=$3
+
+ saveCFLAGS="$CFLAGS"
+ saveLDFLAGS="$LDFLAGS"
+ saveLIBS="$LIBS"
+ CFLAGS="$DED_BASIC_CFLAGS $test_cflags"
+ LDFLAGS="$DED_LDFLAGS_CONFTEST $test_ldflags"
+ LIBS="$LIBS $test_libs"
+
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <stdio.h>
+ #include <openssl/hmac.h>
+ ]],
+ [[
+ HMAC(0, 0, 0, 0, 0, 0, 0);
+ ]])],
+ [
+ $4
+ ],
+ [
+ $5
+ ])
+
+ CFLAGS="$saveCFLAGS"
+ LDFLAGS="$saveLDFLAGS"
+ LIBS="$saveLIBS"
+])
+
+AC_DEFUN([ERL_CRYPTO_CHECK_LIB], [
+ # Check for static and dynamic crypto library in the directory
+ # given as argument...
+ #
+ # Written as a macro in order to avoid writing the tests twice...
+ idir=$1
+ prfx=$2
+ rdir=$3
+ dir="$prfx$rdir"
+ static_crypto_lib_name=crypto
+ static_ssl_lib_name=ssl
+ static_extra_libs="$forced_static_zlib"
+ static_lib_dir=
+ dynamic_crypto_lib_name=crypto
+ dynamic_ssl_lib_name=ssl
+ dynamic_extra_libs="$forced_static_zlib"
+ dynamic_lib_dir=
+ dynamic_runtime_lib_dir=
+ found_static_lib=no
+ found_dynamic_lib=no
+
+ save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="-I$idir/include"
+ AC_EGREP_CPP(^yes.?$,[
+#include <openssl/opensslv.h>
+#if OPENSSL_VERSION_NUMBER >= 0x0090803fL
+yes
+#endif
+ ],
+ [valid_include=yes],
+ [valid_include=no])
+ CPPFLAGS="$save_CPPFLAGS"
+
+ AS_IF([test $valid_include != yes],
+ [
+ # Not a valid include...
+ static_crypto_lib_name=
+ static_ssl_lib_name=
+ static_extra_libs=
+ static_lib_dir=
+ dynamic_crypto_lib_name=
+ dynamic_ssl_lib_name=
+ dynamic_extra_libs=
+ dynamic_lib_dir=
+ dynamic_runtime_lib_dir=
+ ],
+ [test "$host_os" = "win32"],
+ [
+ # Windows...
+ AS_IF([test -f "$dir/lib/VC/static/libcrypto${lib_bits}MD.lib"],
+ [
+ static_crypto_lib_name=libcrypto${lib_bits}MD
+ static_ssl_lib_name="libssl${lib_bits}MD"
+ static_extra_libs="$static_extra_libs -lCRYPT32 -lWS2_32"
+ static_lib_dir="$dir/lib/VC/static"
+ found_static_lib=yes
+ ])
+ AS_IF([test -f "$dir/lib/VC/libcrypto${lib_bits}MD.lib"],
+ [
+ dynamic_crypto_lib_name=libcrypto${lib_bits}MD
+ dynamic_ssl_lib_name="libssl${lib_bits}MD"
+ dynamic_runtime_lib_dir="$rdir/lib/VC"
+ dynamic_lib_dir="$dir/lib/VC"
+ found_dynamic_lib=yes
+ ])
+ ],
+ [
+ # Not windows...
+ AS_CASE(["$host_os"],
+ [darwin*],
+ [
+ static_ext=.a
+ dynamic_ext=.dylib
+ ],
+ [
+ static_ext=.a
+ dynamic_ext=.so
+ ])
+ for sdir in $search_subdirs; do
+ AS_IF([test -f "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"],
+ [
+ found_dynlib=yes
+ ],
+ [
+ found_dynlib=no
+ AS_CASE([$host_os],
+ [openbsd*],
+ [
+ # libcrypto.so got a suffix on (at least some) openbsd.
+ # If we find libcrypto.so with suffix, we try to link
+ # to it using -lcrypto ...
+ for f in "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"*; do
+ AS_IF([test -f "$f"], [found_dynlib=yes; break])
+ done
+ ])
+ ])
+ AS_IF([test $found_dynlib = yes],
+ [
+ # Found dynamic library; check if it links...
+ dynamic_lib_dir="$dir/$sdir"
+ dynamic_runtime_lib_dir="$rdir/$sdir"
+ ERL_LINK_CRYPTO_IFELSE(["-I$idir/include"],
+ ["-L$dynamic_lib_dir"],
+ ["-l$dynamic_crypto_lib_name $dynamic_extra_libs"],
+ [found_dynamic_lib=yes],
+ [found_dynamic_lib=no])
+ AS_IF([test $found_dynamic_lib = no -a $static_zlib != no],
+ [
+ # No, but linking with zlib as well might help...
+ dynamic_extra_libs="$dynamic_extra_libs $static_zlib"
+ ERL_LINK_CRYPTO_IFELSE(["-I$idir/include"],
+ ["-L$dynamic_lib_dir"],
+ ["-l$dynamic_crypto_lib_name $dynamic_extra_libs"],
+ [found_dynamic_lib=yes],
+ [found_dynamic_lib=no])
+ ])
+ ])
+ AS_IF([test -f "$dir/$sdir/lib$static_crypto_lib_name$static_ext"],
+ [
+ # Found static library; check if it links...
+ static_lib_dir="$dir/$sdir"
+ ERL_LINK_CRYPTO_IFELSE(["-I$idir/include"],
+ [],
+ ["$dir/$sdir/lib$static_crypto_lib_name$static_ext $static_extra_libs"],
+ [found_static_lib=yes],
+ [found_static_lib=no])
+ AS_IF([test $found_static_lib = no -a $static_zlib != no],
+ [
+ # No, but inking with zlib as well might help...
+ static_extra_libs="$static_extra_libs $static_zlib"
+ ERL_LINK_CRYPTO_IFELSE(["-I$idir/include"],
+ [],
+ ["$dir/$sdir/lib$static_crypto_lib_name$static_ext $static_extra_libs"],
+ [found_static_lib=yes],
+ [found_static_lib=no])
+ ])
+ ])
+ AS_IF([test $found_static_lib = yes -o $found_dynamic_lib = yes],
+ [break])
+ done
+ ])
+])
+
+# Remove all SKIP files from previous runs
+for a in ssl crypto ssh; do
+ rm -f "$ERL_TOP/lib/$a/SKIP"
+done
+
+# Setup subdirectories to search in...
+search_subdirs="lib"
+if test "$ac_cv_sizeof_void_p" = "8"; then
+ search_subdirs="$search_subdirs lib64 lib/64"
+else
+ search_subdirs="$search_subdirs lib32 lib/32"
+fi
+test "$multiarch_dir" = "" || search_subdirs="lib/$multiarch_dir $search_subdirs"
+test "$with_ssl_lib_subdir" = "" || search_subdirs="$with_ssl_lib_subdir $search_subdirs"
+
+# We might need to link with zlib, so first check if we can find
+# a static zlib to use if needed...
+static_zlib=no
+forced_static_zlib=
+case "$with_ssl_zlib" in
+ no)
+ ;;
+ default | yes)
+ AC_MSG_CHECKING([for static zlib])
+ for dir in $std_ssl_locations; do
+ for sdir in $search_subdirs; do
+ if test -f "$erl_xcomp_sysroot$dir/$sdir/libz.a"; then
+ static_zlib="$erl_xcomp_sysroot$dir/$sdir/libz.a"
+ break
+ fi
+ done
+ test "$static_zlib" = "no" || break
+ done
+ AC_MSG_RESULT([$static_zlib])
+ if test $with_ssl_zlib = yes; then
+ if test $static_zlib = no; then
+ AC_MSG_ERROR([linking with zlib requested by user, but no such library was found])
+ fi
+ forced_static_zlib="$static_zlib"
+ static_zlib=no
+ fi;;
+ *) # PATH
+ AC_MSG_CHECKING([for static zlib])
+ if test -f "$with_ssl_zlib/libz.a"; then
+ forced_static_zlib="$with_ssl_zlib/libz.a"
+ else
+ for sdir in $search_subdirs; do
+ if test -f "$with_ssl_zlib/$sdir/libz.a"; then
+ forced_static_zlib="$with_ssl_zlib/$sdir/libz.a"
+ break
+ fi
+ done
+ fi
+ if test "$forced_static_zlib" = ""; then
+ AC_MSG_ERROR([linking with zlib requested by user, but no such library was found in $with_ssl_zlib])
+ fi
+ AC_MSG_RESULT([$forced_static_zlib])
+ ;;
+esac
+
+if test $enable_dynamic_ssl = undefined; then
+ if test "$host_os" = "win32" ; then
+ enable_dynamic_ssl=default_no
+ else
+ enable_dynamic_ssl=default_yes
+ fi
+fi
+
+case $enable_dynamic_ssl in
+ yes|default_yes)
+ SSL_DYNAMIC_ONLY=yes;;
+ *)
+ SSL_DYNAMIC_ONLY=no;;
+esac
+
+AS_CASE(["$erl_xcomp_without_sysroot-$with_ssl"],
+ [yes-* | no-no],
+ [
+ SSL_APP=
+ CRYPTO_APP=
+ SSH_APP=
+ if test "$with_ssl" != "no"; then
+ skip="Cannot search for ssl; missing cross system root (erl_xcomp_sysroot)."
+ fi
+ for a in ssl crypto ssh; do
+ echo "$skip" > $ERL_TOP/lib/$a/SKIP
+ done
+ ],
+ [no-yes | no-],
+ [
+ # We search for OpenSSL in the common OS standard locations.
+ SSL_APP=ssl
+ CRYPTO_APP=crypto
+ SSH_APP=ssh
+
+ AS_IF([test "$host_os" != "win32"],
+ [
+ std_win_ssl_locations=
+ ],
+ [
+ AS_IF([test "x$ac_cv_sizeof_void_p" = "x8"],
+ [
+ std_win_ssl_locations="/mnt/c/OpenSSL-Win64 /c/OpenSSL-Win64 /mnt/c/opt/local64/pgm/OpenSSL /opt/local64/pgm/OpenSSL /cygdrive/c/OpenSSL-Win64"
+ lib_bits=64
+ ],
+ [
+ std_win_ssl_locations="/mnt/c/OpenSSL-Win32 /c/OpenSSL-Win32 /mnt/c/OpenSSL /c/OpenSSL /cygdrive/c/OpenSSL /opt/local/pgm/OpenSSL /opt/local32/pgm/OpenSSL /mnt/c/opt/local/pgm/OpenSSL /mnt/c/opt/local32/pgm/OpenSSL /cygdrive/c/OpenSSL-Win32"
+ lib_bits=32
+ ])
+ ])
+
+ usable_crypto=no
+ AC_MSG_CHECKING([for OpenSSL crypto library with version >= 0.9.8c in standard locations])
+ for rdir in $std_win_ssl_locations $std_ssl_locations; do
+ AS_IF([test -f "$erl_xcomp_isysroot$rdir/include/openssl/opensslv.h"],
+ [
+ SSL_INCDIR="$erl_xcomp_isysroot$rdir"
+ SSL_INCLUDE="-I$SSL_INCDIR/include"
+ ERL_CRYPTO_CHECK_LIB(["$SSL_INCDIR"], ["$erl_xcomp_sysroot"], ["$rdir"])
+ AS_CASE([$enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib],
+ [no-*-no],
+ [
+ # Dynamic linking against ssl library disabled by user,
+ # and no static library found...
+ ],
+ [yes-no-*],
+ [
+ # Static linking against ssl library disabled by user,
+ # and no dynamic library found...
+ ],
+ [*-no-no],
+ [
+ # Neither static nor dynamic ssl library found...
+ ],
+ [no-*-yes | default_no-*-yes | default_yes-no-yes],
+ [
+ # Link statically...
+ SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
+ SSL_SSL_LIBNAME=$static_ssl_lib_name
+ SSL_LIBDIR="$static_lib_dir"
+ SSL_EXTRA_LIBS="$static_extra_libs"
+ SSL_RUNTIME_LIBDIR=
+ SSL_DYNAMIC_ONLY=no
+ usable_crypto=yes
+ break
+ ],
+ [*-yes-*],
+ [
+ # Link dynamically...
+ SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
+ SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
+ SSL_EXTRA_LIBS="$dynamic_extra_libs"
+ SSL_LIBDIR="$dynamic_lib_dir"
+ SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
+ SSL_DYNAMIC_ONLY=yes
+ usable_crypto=yes
+ break
+ ])
+ ])
+ done
+
+ AS_IF([test $usable_crypto = yes],
+ [AS_IF([test $SSL_DYNAMIC_ONLY = yes],
+ [AC_MSG_RESULT([dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])],
+ [AC_MSG_RESULT([static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])])],
+ [
+ AC_MSG_RESULT([no])
+ SSL_APP=
+ CRYPTO_APP=
+ SSH_APP=
+
+ SSL_INCDIR=
+ SSL_INCLUDE=
+ SSL_CRYPTO_LIBNAME=
+ SSL_SSL_LIBNAME=
+ SSL_INCDIR=
+ SSL_RUNTIME_LIBDIR=
+ SSL_LIBDIR=
+
+ AS_CASE(["$with_ssl-$enable_dynamic_ssl"],
+ [yes-yes],
+ [
+ AC_MSG_ERROR([crypto library with dynamic linking requested by user, but no such library was found])
+ ],
+ [yes-no],
+ [
+ AC_MSG_ERROR([crypto library with static linking requested by user, but no such library was found])
+ ],
+ [yes-*],
+ [
+ AC_MSG_ERROR([crypto library requested by user, but no such library was found])
+ ],
+ [
+ AC_MSG_WARN([No (usable) OpenSSL found, skipping ssl, ssh and crypto applications])
+ ])
+
+ for a in ssl crypto ssh; do
+ echo "No usable OpenSSL found" > $ERL_TOP/lib/$a/SKIP
+ done
+ ])
+ ],
+ [
+ # Option given with PATH to package
+ AS_IF([test ! -d "$with_ssl"],
+ [AC_MSG_ERROR(Invalid path to option --with-ssl=PATH)])
+ AS_IF([test ! -d "$with_ssl_incl"],
+ [AC_MSG_ERROR(Invalid path to option --with-ssl-incl=PATH)])
+ AC_MSG_CHECKING([for OpenSSL header in $with_ssl_incl])
+ AS_IF([test -f "$with_ssl_incl/include/openssl/opensslv.h"],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_ERROR([no OpenSSL header found in $with_ssl_incl])])
+ SSL_INCDIR="$with_ssl_incl"
+ AC_MSG_CHECKING([for OpenSSL in $with_ssl])
+ ERL_CRYPTO_CHECK_LIB(["$with_ssl_incl"], [""], ["$with_ssl"])
+ AS_CASE([$enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib],
+ [no-*-no],
+ [
+ AC_MSG_ERROR([dynamic linking against crypto library disabled by user, but no static library found in $with_ssl])
+ ],
+ [yes-no-*],
+ [
+ AC_MSG_ERROR([static linking against crypto library disabled by user, but no dynamic library found in $with_ssl])
+ ],
+ [*-no-no],
+ [
+ AC_MSG_ERROR([neither static nor dynamic crypto library found in $with_ssl])
+ ],
+ [no-*-yes | default_no-*-yes | default_yes-no-yes],
+ [
+ # Link statically...
+ SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
+ SSL_SSL_LIBNAME=$static_ssl_lib_name
+ SSL_LIBDIR="$static_lib_dir"
+ SSL_EXTRA_LIBS="$static_extra_libs"
+ SSL_RUNTIME_LIBDIR=
+ SSL_DYNAMIC_ONLY=no
+ ],
+ [*-yes-*],
+ [
+ # Link dynamically...
+ SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
+ SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
+ SSL_EXTRA_LIBS="$dynamic_extra_libs"
+ SSL_LIBDIR="$dynamic_lib_dir"
+ SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
+ SSL_DYNAMIC_ONLY=yes
+ ])
+ AS_IF([test $SSL_DYNAMIC_ONLY = yes],
+ [AC_MSG_RESULT([dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])],
+ [AC_MSG_RESULT([static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])])
+ SSL_INCLUDE="-I$with_ssl_incl/include"
+ SSL_APP=ssl
+ CRYPTO_APP=crypto
+ SSH_APP=ssh
+ AS_IF([test "$cross_compiling" = "yes"],
+ [
+ SSL_RUNTIME_LIBDIR=`echo "$SSL_LIBDIR" | sed -n "s|^$erl_xcomp_sysroot\(/*\)\(.*\)\$|/\2|p"`
+ ],
+ [
+ SSL_RUNTIME_LIBDIR="$SSL_LIBDIR"
+ ])
+ ])dnl AS_CASE
+
+SSL_DED_LD_RUNTIME_LIBRARY_PATH=
+ded_ld_rflg="$DED_LD_FLAG_RUNTIME_LIBRARY_PATH"
+
+AS_CASE(["$with_ssl_rpath"],
+ [no],
+ [
+ # Use no ssl runtime library path
+ SSL_DED_LD_RUNTIME_LIBRARY_PATH=
+ ],
+ [yes | default],
+ [
+ # Use standard lib locations for ssl runtime library path
+ AC_MSG_CHECKING([for runtime library path to use])
+
+ if test $enable_dynamic_ssl = no -a "$with_ssl_rpath" = yes; then
+ AC_MSG_ERROR([requested by user, but user also requested static linking])
+ fi
+
+ AS_IF([test "$CRYPTO_APP" = ""],
+ [
+ AS_IF([test "$with_ssl_rpath" = yes],
+ [AC_MSG_ERROR([requested by user, but could not be used since no crypto library was found])])
+ AC_MSG_RESULT([])
+ ],
+ [test "$ded_ld_rflg" = ""],
+ [
+ AS_IF([test "$with_ssl_rpath" = yes],
+ [AC_MSG_ERROR([requested by user, but cannot be set on this platform])])
+ AC_MSG_RESULT([])
+ ],
+ [test "$SSL_DYNAMIC_ONLY" != "yes"],
+ [
+ AS_IF([test "$with_ssl_rpath" = yes],
+ [AC_MSG_WARN([requested by user, but dynamic linking will not be used])],
+ [AC_MSG_RESULT([])])
+ ],
+ [
+ # Try to find a suitable rpath based on default install directories...
+ libdirs="/lib"
+
+ dir_lib64=no
+ dir_lib_64=no
+ dir_lib32=no
+ dir_lib_32=no
+ dir_multiarch=no
+ dir_with_ssl_lib_subdir=no
+
+ AS_IF([test "$multiarch_dir" != ""], [dir_multiarch=yes])
+ AS_IF([test "$with_ssl_lib_subdir" != ""], [dir_with_ssl_lib_subdir=yes])
+
+ AS_CASE(["$SSL_RUNTIME_LIBDIR"],
+ [*/lib/64 | */lib/64/], [dir_lib_64=yes],
+ [*/lib64 | */lib64/], [dir_lib64=yes],
+ [*/lib/32 | */lib/32/], [dir_lib_32=yes],
+ [*/lib32 | */lib32/], [dir_lib32=yes])
+
+ for dir in $std_ssl_locations; do
+ AS_IF([test "$ac_cv_sizeof_void_p" = "8"],
+ [
+ AS_IF([test $dir_lib_64 = no && test -d "$erl_xcomp_sysroot$dir/lib/64"],
+ [dir_lib_64=yes])
+ AS_IF([test $dir_lib64 = no && test -d "$erl_xcomp_sysroot$dir/lib64"],
+ [dir_lib64=yes])
+ ],
+ [
+ AS_IF([test $dir_lib_32 = no && test -d "$erl_xcomp_sysroot$dir/lib/32"],
+ [dir_lib_32=yes])
+ AS_IF([test $dir_lib32 = no && test -d "$erl_xcomp_sysroot$dir/lib32"],
+ [dir_lib32=yes])
+ ])
+ AS_IF([test $dir_multiarch = no && test -d "$erl_xcomp_sysroot$dir/lib/$multiarch_dir"],
+ [dir_multiarch=yes])
+ done
+
+ AS_IF([test $dir_with_ssl_lib_subdir = yes],
+ [libdirs="/$with_ssl_lib_subdir $libdirs"])
+ AS_IF([test $dir_multiarch = yes],
+ [libdirs="/lib/$multiarch_dir $libdirs"])
+ AS_IF([test $dir_lib_64 = yes],
+ [libdirs="/lib/64 $libdirs"])
+ AS_IF([test $dir_lib64 = yes],
+ [libdirs="/lib64 $libdirs"])
+ AS_IF([test $dir_lib_32 = yes],
+ [libdirs="/lib/32 $libdirs"])
+ AS_IF([test $dir_lib32 = yes],
+ [libdirs="/lib32 $libdirs"])
+
+ #
+ # We try the follwing runtime paths in the
+ # following order:
+ # 1. Standard ssl locations with all variations
+ # of lib subdirectories that we know of
+ # 2. Standard ssl locations with all variations
+ # of lib subdirectories that we know of and
+ # exist on this machine
+ # 3. Determined $SSL_RUNTIME_LIBDIR
+ # If none of the above links, we skip runtime
+ # library path...
+ #
+ for type in std x_std curr; do
+
+ ded_ld_rpath="$ded_ld_rflg$SSL_RUNTIME_LIBDIR"
+ rpath="$SSL_RUNTIME_LIBDIR"
+
+ AS_IF([test $type != curr],
+ [
+ for ldir in $libdirs; do
+ for dir in $std_ssl_locations; do
+ AS_IF([test "$SSL_RUNTIME_LIBDIR" = "$dir$ldir"],
+ [continue])
+ AS_IF([test $type = x_std && test '!' -d "$erl_xcomp_sysroot$dir$ldir"],
+ [continue])
+ AS_IF([test "$dir" = "/"],
+ [libdir="$ldir"],
+ [libdir="$dir$ldir"])
+ ded_ld_rpath="$ded_ld_rpath $ded_ld_rflg$libdir"
+ rpath="$rpath:$libdir"
+ done
+ done
+ ])
+
+ # Check that it still links when we add the runtime path...
+ ERL_LINK_CRYPTO_IFELSE(["$SSL_INCLUDE"],
+ ["$ded_ld_rpath -L$SSL_LIBDIR"],
+ ["-l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"],
+ [rpath_success=yes],
+ [rpath_success=no])
+
+ AS_IF([test "$rpath_success" = "yes"], [break])
+
+ done
+
+ AS_IF([test "$rpath_success" != "yes"],
+ [
+ ded_ld_rpath=
+ rpath=
+ ])
+
+ SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
+
+ AS_IF([test "$rpath" != ""],
+ [
+ AC_MSG_RESULT([$rpath])
+ ],
+ [test "$with_ssl_rpath" = yes],
+ [
+ AC_MSG_ERROR([requested by user, but could not be used])
+ ],
+ [
+ AC_MSG_WARN([unable to set run path during linking])
+ ])
+ ])
+ # end yes|default
+ ],
+ [
+ # Use ssl runtime library paths set by --with-ssl-rpath
+ AC_MSG_CHECKING([whether runtime library path can be set])
+
+ AS_IF([test $enable_dynamic_ssl = no],
+ [
+ AC_MSG_ERROR([runtime library path requested by user, but user also requested static linking])
+ ],
+ [test "$CRYPTO_APP" = ""],
+ [
+ AS_IF([test "$with_ssl_rpath" = yes],
+ [AC_MSG_ERROR([runtime library path requested by user, but could not be set since no crypto library was found])])
+ AC_MSG_RESULT([])
+ ],
+ [test "$ded_ld_rflg" = ""],
+ [
+ AS_IF([test "$with_ssl_rpath" = yes],
+ [AC_MSG_ERROR([runtime library path requested by user, but cannot be set on this platform])])
+ AC_MSG_RESULT([])
+ ]
+ [test "$SSL_DYNAMIC_ONLY" != "yes"],
+ [
+ AS_IF([test "$with_ssl_rpath" = yes],
+ [AC_MSG_WARN([runtime library path requested by user, but dynamic linking will not be used])],
+ [AC_MSG_RESULT([])])
+ ],
+ [
+ # Check that it links...
+ ded_ld_rpath=
+ delimit=
+ rpath=
+ rpath_delimit=
+ save_ifs="$IFS"; IFS=",:"
+ for dir in $with_ssl_rpath; do
+ ded_ld_rpath="$ded_ld_rpath$delimit$ded_ld_rflg$dir"
+ delimit=" "
+ rpath="$rpath$rpath_delimit$dir"
+ rpath_delimit=":"
+ done
+ IFS="$save_ifs"
+ SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
+ ERL_LINK_CRYPTO_IFELSE(["$SSL_INCLUDE"],
+ ["$ded_ld_rpath -L$SSL_LIBDIR"],
+ ["-l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"],
+ [rpath_success=yes],
+ [rpath_success=no])
+ AS_IF([test "$rpath_success" = yes],
+ [AC_MSG_RESULT([yes; using $rpath])],
+ [AC_MSG_ERROR([runtime library path requested by user, but link failed])])
+ ])
+ ])dnl AS_CASE
+
+AC_ARG_ENABLE(fips,
+AS_HELP_STRING([--enable-fips], [enable OpenSSL FIPS mode support])
+AS_HELP_STRING([--disable-fips], [disable OpenSSL FIPS mode support (default)]),
+[ case "$enableval" in
+ yes) enable_fips_support=yes ;;
+ *) enable_fips_support=no ;;
+ esac ], enable_fips_support=no)
+
+SSL_FLAGS=
+AS_IF([test "$enable_fips_support" = "yes"],
+ [
+ AS_IF([test "$CRYPTO_APP" = ""],
+ [AC_MSG_ERROR([FIPS support requested, but no crypto library found])])
+ saveCFLAGS="$CFLAGS"
+ saveLDFLAGS="$LDFLAGS"
+ saveLIBS="$LIBS"
+ CFLAGS="$DED_BASIC_CFLAGS $SSL_INCLUDE"
+ AS_IF([test $SSL_DYNAMIC_ONLY = yes],
+ [
+ LDFLAGS="$DED_LDFLAGS_CONFTEST $ded_ld_rpath -L$SSL_LIBDIR"
+ LIBS="$LIBS -l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"
+ ],
+ [
+ LDFLAGS="$DED_LDFLAGS_CONFTEST"
+ AS_IF([test "$host_os" = "win32"],
+ [LIBS="$LIBS $SSL_LIBDIR/$SSL_CRYPTO_LIBNAME.lib $SSL_EXTRA_LIBS"],
+ [LIBS="$LIBS $SSL_LIBDIR/lib$SSL_CRYPTO_LIBNAME.a $SSL_EXTRA_LIBS"])
+ ])
+ AC_CHECK_FUNC([FIPS_mode_set],
+ [SSL_FLAGS="-DFIPS_SUPPORT"],
+ [AC_MSG_ERROR([FIPS support requested, but cannot be enabled])])
+ CFLAGS="$saveCFLAGS"
+ LDFLAGS="$saveLDFLAGS"
+ LIBS="$saveLIBS"
+ ])
+
+saveCFLAGS="$CFLAGS"
+saveLDFLAGS="$LDFLAGS"
+saveLIBS="$LIBS"
+CFLAGS="$DED_BASIC_CFLAGS $SSL_INCLUDE"
+AS_IF([test $SSL_DYNAMIC_ONLY = yes],
+ [
+ LDFLAGS="$DED_LDFLAGS_CONFTEST $ded_ld_rpath -L$SSL_LIBDIR"
+ LIBS="$LIBS -l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"
+ ],
+ [
+ LDFLAGS="$DED_LDFLAGS_CONFTEST"
+ AS_IF([test "$host_os" = "win32"],
+ [LIBS="$LIBS $SSL_LIBDIR/$SSL_CRYPTO_LIBNAME.lib $SSL_EXTRA_LIBS"],
+ [LIBS="$LIBS $SSL_LIBDIR/lib$SSL_CRYPTO_LIBNAME.a $SSL_EXTRA_LIBS"])
+ ])
+AC_CHECK_DECL([CRYPTO_memcmp],
+ [have_crypto_memcmp_decl=yes],
+ [have_crypto_memcmp_decl=no],
+ [#include <openssl/crypto.h>])
+AS_IF([test $have_crypto_memcmp_decl = yes],
+ [
+ AC_MSG_CHECKING([whether CRYPTO_memcmp can be linked])
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <openssl/crypto.h>
+ ]],
+ [[
+ CRYPTO_memcmp("a", "b", 1);
+ ]])],
+ [
+ SSL_FLAGS="-DHAVE_OPENSSL_CRYPTO_MEMCMP $SSL_FLAGS"
+ AC_MSG_RESULT([yes])
+ ],
+ [
+ AC_MSG_RESULT([no])
+ ])
+ ])
+CFLAGS="$saveCFLAGS"
+LDFLAGS="$saveLDFLAGS"
+LIBS="$saveLIBS"
+
+AC_SUBST(SSL_INCLUDE)
+AC_SUBST(SSL_INCDIR)
+AC_SUBST(SSL_LIBDIR)
+AC_SUBST(SSL_FLAGS)
+AC_SUBST(SSL_CRYPTO_LIBNAME)
+AC_SUBST(SSL_SSL_LIBNAME)
+AC_SUBST(SSL_EXTRA_LIBS)
+AC_SUBST(SSL_DED_LD_RUNTIME_LIBRARY_PATH)
+AC_SUBST(SSL_DYNAMIC_ONLY)
+AC_SUBST(DISABLE_EVP_DH)
+AC_SUBST(DISABLE_EVP_HMAC)
+
+AC_CONFIG_FILES([c_src/$host/Makefile:c_src/Makefile.in])
+AC_OUTPUT
+
diff --git a/lib/crypto/configure.in b/lib/crypto/configure.in
deleted file mode 100644
index e71b2482c6..0000000000
--- a/lib/crypto/configure.in
+++ /dev/null
@@ -1,807 +0,0 @@
-dnl Process this file with autoconf to produce a configure script. -*-m4-*-
-dnl
-dnl %CopyrightBegin%
-dnl
-dnl Copyright Ericsson AB 2018-2020. All Rights Reserved.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
-dnl
-dnl http://www.apache.org/licenses/LICENSE-2.0
-dnl
-dnl Unless required by applicable law or agreed to in writing, software
-dnl distributed under the License is distributed on an "AS IS" BASIS,
-dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-dnl See the License for the specific language governing permissions and
-dnl limitations under the License.
-dnl
-dnl %CopyrightEnd%
-dnl
-
-dnl define([AC_CACHE_LOAD], )dnl
-dnl define([AC_CACHE_SAVE], )dnl
-
-
-AC_INIT(vsn.mk)
-
-AC_CONFIG_AUX_DIRS(${ERL_TOP}/erts/autoconf)
-
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=win32
-fi
-
-AC_LANG(C)
-
-LM_PRECIOUS_VARS
-
-if test "$cross_compiling" = "yes"; then
- CROSS_COMPILING=yes
-else
- CROSS_COMPILING=no
-fi
-AC_SUBST(CROSS_COMPILING)
-
-ERL_XCOMP_SYSROOT_INIT
-
-AC_PROG_CC
-LM_WINDOWS_ENVIRONMENT
-
-ERL_DED
-
-AC_MSG_CHECKING([for multiarch directory])
-multiarch_dir=
-if test "$GCC" = "yes"; then
- multiarch_dir=`$CC $CFLAGS -print-multiarch 2>/dev/null`
- if test $? -ne 0; then
- multiarch_dir=
- fi
-fi
-if test "$multiarch_dir" = ""; then
- AC_MSG_RESULT([not found])
-else
- AC_MSG_RESULT([$multiarch_dir])
-fi
-
-dnl
-dnl SSL, SSH and CRYPTO need the OpenSSL libraries
-dnl
-dnl Check flags --with-ssl, --without-ssl --with-ssl=PATH.
-dnl If no option is given or --with-ssl is set without a path then we
-dnl search for OpenSSL libraries and header files in the standard locations.
-dnl If set to --without-ssl we disable the use of SSL, SSH and CRYPTO.
-dnl If set to --with-ssl=PATH we use that path as the prefix, i.e. we
-dnl use "PATH/include" and "PATH/lib".
-
-AC_CHECK_SIZEOF(void *)
-
-std_ssl_locations="/usr/local /usr/sfw /usr /opt/local /usr/pkg /usr/local/openssl /usr/local/opt/openssl /usr/lib/openssl /usr/openssl /usr/local/ssl /usr/lib/ssl /usr/ssl /"
-
-AC_ARG_WITH(ssl,
-AS_HELP_STRING([--with-ssl=PATH], [base location of OpenSSL include and lib directories])
-AS_HELP_STRING([--with-ssl], [use SSL (default)])
-AS_HELP_STRING([--without-ssl], [don't use SSL]))
-
-AC_ARG_WITH(ssl-lib-subdir,
-AS_HELP_STRING([--with-ssl-lib-subdir=RELATIVE_PATH],
- [specify extra OpenSSL lib sub-directory to search in (relative to base directory)]),
-[
-case "$with_ssl_lib_subdir" in
- yes|no)
- with_ssl_lib_subdir=
- ;;
- *)
- ;;
-esac
-],
-[with_ssl_lib_subdir=]) #default
-
-AC_ARG_WITH(ssl-incl,
-AS_HELP_STRING([--with-ssl-incl=PATH],
- [base location of OpenSSL include dir (if different than base location specified by --with-ssl=PATH)]),
-[
-case X$with_ssl in
- X | Xyes | Xno) AC_MSG_ERROR([--with-ssl-incl=PATH set without --with-ssl=PATH]);;
-esac
-],
-[with_ssl_incl=$with_ssl]) #default
-
-AC_ARG_WITH(ssl-zlib,
-AS_HELP_STRING([--with-ssl-zlib=PATH], [Path to static zlib library to link the
- crypto NIF with. This zlib library is most
- often not necessary but might be needed in
- order to link the NIF in some cases.]),
-[], [with_ssl_zlib=default]) #default
-
-AC_ARG_WITH(ssl-rpath,
-AS_HELP_STRING([--with-ssl-rpath=yes|no|PATHS],
- [runtime library path for OpenSSL. Default is "yes", which equates to a
- number of standard locations. If "no", then no runtime
- library paths will be used. Anything else should be a
- comma or colon separated list of paths.]),
-[
-case X$with_ssl in
- Xno) AC_MSG_ERROR([--with-ssl-rpath set without --with-ssl]);;
-esac
-],
-[with_ssl_rpath=default]) #default
-
-
-AC_ARG_ENABLE(dynamic-ssl-lib,
-AS_HELP_STRING([--enable-dynamic-ssl-lib],
- [enable using dynamic openssl libraries when linking the crypto NIF])
-AS_HELP_STRING([--disable-dynamic-ssl-lib],
- [disable using dynamic openssl libraries when linking the crypto NIF]),
-[ case "$enableval" in
- no) enable_dynamic_ssl=no ;;
- *) enable_dynamic_ssl=yes ;;
- esac ], enable_dynamic_ssl=undefined)
-
-AC_ARG_ENABLE(evp-dh,
-AS_HELP_STRING([--disable-evp-dh],
- [intentionally undocumented workaround]),
-[ case "$enableval" in
- no) DISABLE_EVP_DH=1;;
- *) DISABLE_EVP_DH=0;;
- esac ], DISABLE_EVP_DH=0)
-
-
-AC_ARG_ENABLE(evp-hmac,
-AS_HELP_STRING([--disable-evp-hmac],
- [intentionally undocumented workaround]),
-[ case "$enableval" in
- no) DISABLE_EVP_HMAC=1;;
- *) DISABLE_EVP_HMAC=0;;
- esac ], DISABLE_EVP_HMAC=0)
-
-AC_DEFUN([ERL_LINK_CRYPTO_IFELSE], [
- test_cflags=$1
- test_ldflags=$2
- test_libs=$3
-
- saveCFLAGS="$CFLAGS"
- saveLDFLAGS="$LDFLAGS"
- saveLIBS="$LIBS"
- CFLAGS="$DED_BASIC_CFLAGS $test_cflags"
- LDFLAGS="$DED_LDFLAGS_CONFTEST $test_ldflags"
- LIBS="$LIBS $test_libs"
-
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[
- #include <stdio.h>
- #include <openssl/hmac.h>
- ]],
- [[
- HMAC(0, 0, 0, 0, 0, 0, 0);
- ]])],
- [
- $4
- ],
- [
- $5
- ])
-
- CFLAGS="$saveCFLAGS"
- LDFLAGS="$saveLDFLAGS"
- LIBS="$saveLIBS"
-])
-
-AC_DEFUN([ERL_CRYPTO_CHECK_LIB], [
- # Check for static and dynamic crypto library in the directory
- # given as argument...
- #
- # Written as a macro in order to avoid writing the tests twice...
- idir=$1
- prfx=$2
- rdir=$3
- dir="$prfx$rdir"
- static_crypto_lib_name=crypto
- static_ssl_lib_name=ssl
- static_extra_libs="$forced_static_zlib"
- static_lib_dir=
- dynamic_crypto_lib_name=crypto
- dynamic_ssl_lib_name=ssl
- dynamic_extra_libs="$forced_static_zlib"
- dynamic_lib_dir=
- dynamic_runtime_lib_dir=
- found_static_lib=no
- found_dynamic_lib=no
-
- save_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="-I$idir/include"
- AC_EGREP_CPP(^yes.?$,[
-#include <openssl/opensslv.h>
-#if OPENSSL_VERSION_NUMBER >= 0x0090803fL
-yes
-#endif
- ],
- [valid_include=yes],
- [valid_include=no])
- CPPFLAGS="$save_CPPFLAGS"
-
- if test $valid_include != yes; then
- static_crypto_lib_name=
- static_ssl_lib_name=
- static_extra_libs=
- static_lib_dir=
- dynamic_crypto_lib_name=
- dynamic_ssl_lib_name=
- dynamic_extra_libs=
- dynamic_lib_dir=
- dynamic_runtime_lib_dir=
- elif test "$host_os" = "win32" ; then
- if test -f "$dir/lib/VC/static/libcrypto${lib_bits}MD.lib"; then
- static_crypto_lib_name=libcrypto${lib_bits}MD
- static_ssl_lib_name="libssl${lib_bits}MD"
- static_extra_libs="$static_extra_libs -lCRYPT32 -lWS2_32"
- static_lib_dir="$dir/lib/VC/static"
- found_static_lib=yes
- fi
- if test -f "$dir/lib/VC/libcrypto${lib_bits}MD.lib"; then
- dynamic_crypto_lib_name=libcrypto${lib_bits}MD
- dynamic_ssl_lib_name="libssl${lib_bits}MD"
- dynamic_runtime_lib_dir="$rdir/lib/VC"
- dynamic_lib_dir="$dir/lib/VC"
- found_dynamic_lib=yes
- fi
- else # Non windows...
-
- case "$host_os" in
- darwin*)
- static_ext=.a
- dynamic_ext=.dylib;;
- *)
- static_ext=.a
- dynamic_ext=.so;;
- esac
- for sdir in $search_subdirs; do
- if test -f "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"; then
- found_dynlib=yes
- else
- found_dynlib=no
- case $host_os in
- openbsd*)
- # libcrypto.so got a suffix on (at least some) openbsd.
- # If we find libcrypto.so with suffix, we try to link
- # to it using -lcrypto ...
- for f in "$dir/$sdir/lib$dynamic_crypto_lib_name$dynamic_ext"*; do
- test -f "$f" && found_dynlib=yes
- break
- done;;
- *)
- ;;
- esac
- fi
- if test $found_dynlib = yes; then
- # Found dynamic library; check if it links...
- dynamic_lib_dir="$dir/$sdir"
- dynamic_runtime_lib_dir="$rdir/$sdir"
- ERL_LINK_CRYPTO_IFELSE(
- ["-I$idir/include"],
- ["-L$dynamic_lib_dir"],
- ["-l$dynamic_crypto_lib_name $dynamic_extra_libs"],
- [found_dynamic_lib=yes],
- [found_dynamic_lib=no])
- if test $found_dynamic_lib = no -a $static_zlib != no; then
- # No, but linking with zlib as well might help...
- dynamic_extra_libs="$dynamic_extra_libs $static_zlib"
- ERL_LINK_CRYPTO_IFELSE(
- ["-I$idir/include"],
- ["-L$dynamic_lib_dir"],
- ["-l$dynamic_crypto_lib_name $dynamic_extra_libs"],
- [found_dynamic_lib=yes],
- [found_dynamic_lib=no])
- fi
- fi
- if test -f "$dir/$sdir/lib$static_crypto_lib_name$static_ext"; then
- # Found static library; check if it links...
- static_lib_dir="$dir/$sdir"
- ERL_LINK_CRYPTO_IFELSE(
- ["-I$idir/include"],
- [],
- ["$dir/$sdir/lib$static_crypto_lib_name$static_ext $static_extra_libs"],
- [found_static_lib=yes],
- [found_static_lib=no])
- if test $found_static_lib = no -a $static_zlib != no; then
- # No, but inking with zlib as well might help...
- static_extra_libs="$static_extra_libs $static_zlib"
- ERL_LINK_CRYPTO_IFELSE(
- ["-I$idir/include"],
- [],
- ["$dir/$sdir/lib$static_crypto_lib_name$static_ext $static_extra_libs"],
- [found_static_lib=yes],
- [found_static_lib=no])
- fi
- fi
- if test $found_static_lib = yes -o $found_dynamic_lib = yes; then
- break
- fi
- done
- fi
-])
-
-# Remove all SKIP files from previous runs
-for a in ssl crypto ssh; do
- rm -f "$ERL_TOP/lib/$a/SKIP"
-done
-
-# Setup subdirectories to search in...
-search_subdirs="lib"
-if test "$ac_cv_sizeof_void_p" = "8"; then
- search_subdirs="$search_subdirs lib64 lib/64"
-else
- search_subdirs="$search_subdirs lib32 lib/32"
-fi
-test "$multiarch_dir" = "" || search_subdirs="lib/$multiarch_dir $search_subdirs"
-test "$with_ssl_lib_subdir" = "" || search_subdirs="$with_ssl_lib_subdir $search_subdirs"
-
-# We might need to link with zlib, so first check if we can find
-# a static zlib to use if needed...
-static_zlib=no
-forced_static_zlib=
-case "$with_ssl_zlib" in
- no)
- ;;
- default | yes)
- AC_MSG_CHECKING([for static zlib])
- for dir in $std_ssl_locations; do
- for sdir in $search_subdirs; do
- if test -f "$erl_xcomp_sysroot$dir/$sdir/libz.a"; then
- static_zlib="$erl_xcomp_sysroot$dir/$sdir/libz.a"
- break
- fi
- done
- test "$static_zlib" = "no" || break
- done
- AC_MSG_RESULT([$static_zlib])
- if test $with_ssl_zlib = yes; then
- if test $static_zlib = no; then
- AC_MSG_ERROR([linking with zlib requested by user, but no such library was found])
- fi
- forced_static_zlib="$static_zlib"
- static_zlib=no
- fi;;
- *) # PATH
- AC_MSG_CHECKING([for static zlib])
- if test -f "$with_ssl_zlib/libz.a"; then
- forced_static_zlib="$with_ssl_zlib/libz.a"
- else
- for sdir in $search_subdirs; do
- if test -f "$with_ssl_zlib/$sdir/libz.a"; then
- forced_static_zlib="$with_ssl_zlib/$sdir/libz.a"
- break
- fi
- done
- fi
- if test "$forced_static_zlib" = ""; then
- AC_MSG_ERROR([linking with zlib requested by user, but no such library was found in $with_ssl_zlib])
- fi
- AC_MSG_RESULT([$forced_static_zlib])
- ;;
-esac
-
-if test $enable_dynamic_ssl = undefined; then
- if test "$host_os" = "win32" ; then
- enable_dynamic_ssl=default_no
- else
- enable_dynamic_ssl=default_yes
- fi
-fi
-
-case $enable_dynamic_ssl in
- yes|default_yes)
- SSL_DYNAMIC_ONLY=yes;;
- *)
- SSL_DYNAMIC_ONLY=no;;
-esac
-
-case "$erl_xcomp_without_sysroot-$with_ssl" in
- yes-* | no-no)
- SSL_APP=
- CRYPTO_APP=
- SSH_APP=
- if test "$with_ssl" != "no"; then
- skip="Cannot search for ssl; missing cross system root (erl_xcomp_sysroot)."
- fi
- for a in ssl crypto ssh; do
- echo "$skip" > $ERL_TOP/lib/$a/SKIP
- done
- ;;
- no-yes | no- )
- # We search for OpenSSL in the common OS standard locations.
- SSL_APP=ssl
- CRYPTO_APP=crypto
- SSH_APP=ssh
-
- if test "$host_os" = "win32" ; then
- if test "x$ac_cv_sizeof_void_p" = "x8"; then
- std_win_ssl_locations="/mnt/c/OpenSSL-Win64 /c/OpenSSL-Win64 /mnt/c/opt/local64/pgm/OpenSSL /opt/local64/pgm/OpenSSL /cygdrive/c/OpenSSL-Win64"
- lib_bits=64
- else
- std_win_ssl_locations="/mnt/c/OpenSSL-Win32 /c/OpenSSL-Win32 /mnt/c/OpenSSL /c/OpenSSL /cygdrive/c/OpenSSL /opt/local/pgm/OpenSSL /opt/local32/pgm/OpenSSL /mnt/c/opt/local/pgm/OpenSSL /mnt/c/opt/local32/pgm/OpenSSL /cygdrive/c/OpenSSL-Win32"
- lib_bits=32
- fi
- else
- std_win_ssl_locations=""
- fi
-
- usable_crypto=no
- AC_MSG_CHECKING([for OpenSSL crypto library with version >= 0.9.8c in standard locations])
- for rdir in $std_win_ssl_locations $std_ssl_locations; do
- if test -f "$erl_xcomp_isysroot$rdir/include/openssl/opensslv.h"; then
- SSL_INCDIR="$erl_xcomp_isysroot$rdir"
- SSL_INCLUDE="-I$SSL_INCDIR/include"
- ERL_CRYPTO_CHECK_LIB(["$SSL_INCDIR"], ["$erl_xcomp_sysroot"], ["$rdir"])
- case $enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib in
- no-*-no)
- ;; # Dynamic linking against ssl library disabled by user, and no static library found
- yes-no-*)
- ;; # Static linking against ssl library disabled by user, and no dynamic library found
- *-no-no)
- ;; # Neither static nor dynamic ssl library found
- no-*-yes | default_no-*-yes | default_yes-no-yes)
- # Link statically...
- SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
- SSL_SSL_LIBNAME=$static_ssl_lib_name
- SSL_LIBDIR="$static_lib_dir"
- SSL_EXTRA_LIBS="$static_extra_libs"
- SSL_RUNTIME_LIBDIR=
- SSL_DYNAMIC_ONLY=no
- usable_crypto=yes
- break;;
- *-yes-*)
- # Link dynamically...
- SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
- SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
- SSL_EXTRA_LIBS="$dynamic_extra_libs"
- SSL_LIBDIR="$dynamic_lib_dir"
- SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
- SSL_DYNAMIC_ONLY=yes
- usable_crypto=yes
- break;;
- esac
- fi
- done
-
- if test $usable_crypto = yes ; then
- if test $SSL_DYNAMIC_ONLY = yes; then
- AC_MSG_RESULT([dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])
- else
- AC_MSG_RESULT([static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])
- fi
- else
- AC_MSG_RESULT([no])
- SSL_APP=
- CRYPTO_APP=
- SSH_APP=
-
- SSL_INCDIR=
- SSL_INCLUDE=
- SSL_CRYPTO_LIBNAME=
- SSL_SSL_LIBNAME=
- SSL_INCDIR=
- SSL_RUNTIME_LIBDIR=
- SSL_LIBDIR=
-
- case "$with_ssl-$enable_dynamic_ssl" in
- yes-yes)
- AC_MSG_ERROR([crypto library with dynamic linking requested by user, but no such library was found])
- ;;
- yes-no)
- AC_MSG_ERROR([crypto library with static linking requested by user, but no such library was found])
- ;;
- yes-*)
- AC_MSG_ERROR([crypto library requested by user, but no such library was found])
- ;;
- *)
- AC_MSG_WARN([No (usable) OpenSSL found, skipping ssl, ssh and crypto applications])
- ;;
- esac
-
- for a in ssl crypto ssh; do
- echo "No usable OpenSSL found" > $ERL_TOP/lib/$a/SKIP
- done
- fi
- ;;
- *)
- # Option given with PATH to package
- if test ! -d "$with_ssl" ; then
- AC_MSG_ERROR(Invalid path to option --with-ssl=PATH)
- fi
- if test ! -d "$with_ssl_incl" ; then
- AC_MSG_ERROR(Invalid path to option --with-ssl-incl=PATH)
- fi
- AC_MSG_CHECKING([for OpenSSL header in $with_ssl_incl])
- if test -f "$with_ssl_incl/include/openssl/opensslv.h"; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_ERROR([no OpenSSL header found in $with_ssl_incl])
- fi
- SSL_INCDIR="$with_ssl_incl"
- AC_MSG_CHECKING([for OpenSSL in $with_ssl])
- ERL_CRYPTO_CHECK_LIB(["$with_ssl_incl"], [""], ["$with_ssl"])
- case $enable_dynamic_ssl-$found_dynamic_lib-$found_static_lib in
- no-*-no)
- AC_MSG_ERROR([dynamic linking against crypto library disabled by user, but no static library found in $with_ssl]);;
- yes-no-*)
- AC_MSG_ERROR([static linking against crypto library disabled by user, but no dynamic library found in $with_ssl]);;
- *-no-no)
- AC_MSG_ERROR([neither static nor dynamic crypto library found in $with_ssl]);;
- no-*-yes | default_no-*-yes | default_yes-no-yes)
- # Link statically...
- SSL_CRYPTO_LIBNAME=$static_crypto_lib_name
- SSL_SSL_LIBNAME=$static_ssl_lib_name
- SSL_LIBDIR="$static_lib_dir"
- SSL_EXTRA_LIBS="$static_extra_libs"
- SSL_RUNTIME_LIBDIR=
- SSL_DYNAMIC_ONLY=no;;
- *-yes-*)
- # Link dynamically...
- SSL_CRYPTO_LIBNAME=$dynamic_crypto_lib_name
- SSL_SSL_LIBNAME=$dynamic_ssl_lib_name
- SSL_EXTRA_LIBS="$dynamic_extra_libs"
- SSL_LIBDIR="$dynamic_lib_dir"
- SSL_RUNTIME_LIBDIR="$dynamic_runtime_lib_dir"
- SSL_DYNAMIC_ONLY=yes;;
- esac
- if test $SSL_DYNAMIC_ONLY = yes; then
- AC_MSG_RESULT([dynamic $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])
- else
- AC_MSG_RESULT([static $SSL_CRYPTO_LIBNAME library in $SSL_LIBDIR])
- fi
- SSL_INCLUDE="-I$with_ssl_incl/include"
- SSL_APP=ssl
- CRYPTO_APP=crypto
- SSH_APP=ssh
- if test "$cross_compiling" = "yes"; then
- SSL_RUNTIME_LIBDIR=`echo "$SSL_LIBDIR" | sed -n "s|^$erl_xcomp_sysroot\(/*\)\(.*\)\$|/\2|p"`
- else
- SSL_RUNTIME_LIBDIR="$SSL_LIBDIR"
- fi
-esac
-
-SSL_DED_LD_RUNTIME_LIBRARY_PATH=
-ded_ld_rflg="$DED_LD_FLAG_RUNTIME_LIBRARY_PATH"
-
-
-case "$with_ssl_rpath" in
-
-yes | default) # Use standard lib locations for ssl runtime library path
-
- AC_MSG_CHECKING([for runtime library path to use])
-
- if test $enable_dynamic_ssl = no -a "$with_ssl_rpath" = yes; then
- AC_MSG_ERROR([requested by user, but user also requested static linking])
- fi
-
- if test "$CRYPTO_APP" = ""; then
- if test "$with_ssl_rpath" = yes; then
- AC_MSG_ERROR([requested by user, but could not be used since no crypto library was found])
- fi
- AC_MSG_RESULT([])
- elif test "$ded_ld_rflg" = ""; then
- if test "$with_ssl_rpath" = yes; then
- AC_MSG_ERROR([requested by user, but cannot be set on this platform])
- fi
- AC_MSG_RESULT([])
- elif test "$SSL_DYNAMIC_ONLY" != "yes"; then
- if test "$with_ssl_rpath" = yes; then
- AC_MSG_WARN([requested by user, but dynamic linking will not be used])
- else
- AC_MSG_RESULT([])
- fi
- else
-
- libdirs="/lib"
-
- dir_lib64=no
- dir_lib_64=no
- dir_lib32=no
- dir_lib_32=no
- dir_multiarch=no
- dir_with_ssl_lib_subdir=no
-
- test "$multiarch_dir" = "" || dir_multiarch=yes
- test "$with_ssl_lib_subdir" = "" || dir_with_ssl_lib_subdir=yes
-
- case "$SSL_RUNTIME_LIBDIR" in
- */lib/64 | */lib/64/ ) dir_lib_64=yes;;
- */lib64 | */lib64/ ) dir_lib64=yes;;
- */lib/32 | */lib/32/ ) dir_lib_32=yes;;
- */lib32 | */lib32/ ) dir_lib32=yes;;
- *) ;;
- esac
-
- for dir in $std_ssl_locations; do
- if test "$ac_cv_sizeof_void_p" = "8"; then
- test $dir_lib_64 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib/64" &&
- dir_lib_64=yes
- test $dir_lib64 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib64" &&
- dir_lib64=yes
- else
- test $dir_lib_32 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib/32" &&
- dir_lib_32=yes
- test $dir_lib32 = no &&
- test -d "$erl_xcomp_sysroot$dir/lib32" &&
- dir_lib32=yes
- fi
- test $dir_multiarch = no &&
- test -d "$erl_xcomp_sysroot$dir/lib/$multiarch_dir" &&
- dir_multiarch=yes
- done
-
- test $dir_with_ssl_lib_subdir = yes && libdirs="/$with_ssl_lib_subdir $libdirs"
- test $dir_multiarch = yes && libdirs="/lib/$multiarch_dir $libdirs"
- test $dir_lib_64 = yes && libdirs="/lib/64 $libdirs"
- test $dir_lib64 = yes && libdirs="/lib64 $libdirs"
- test $dir_lib_32 = yes && libdirs="/lib/32 $libdirs"
- test $dir_lib32 = yes && libdirs="/lib32 $libdirs"
-
- #
- # We try the follwing runtime paths in the
- # following order:
- # 1. Standard ssl locations with all variations
- # of lib subdirectories that we know of
- # 2. Standard ssl locations with all variations
- # of lib subdirectories that we know of and
- # exist on this machine
- # 3. Determined $SSL_RUNTIME_LIBDIR
- # If none of the above links, we skip runtime
- # library path...
- #
- for type in std x_std curr; do
-
- ded_ld_rpath="$ded_ld_rflg$SSL_RUNTIME_LIBDIR"
- rpath="$SSL_RUNTIME_LIBDIR"
-
- if test $type != curr; then
- for ldir in $libdirs; do
- for dir in $std_ssl_locations; do
- test "$SSL_RUNTIME_LIBDIR" != "$dir$ldir" || continue
- test $type != x_std || test -d "$erl_xcomp_sysroot$dir$ldir" || continue
- if test "$dir" = "/"; then
- libdir="$ldir"
- else
- libdir="$dir$ldir"
- fi
- ded_ld_rpath="$ded_ld_rpath $ded_ld_rflg$libdir"
- rpath="$rpath:$libdir"
- done
- done
- fi
-
- # Check that it still links when we add the runtime path...
- ERL_LINK_CRYPTO_IFELSE(
- ["$SSL_INCLUDE"],
- ["$ded_ld_rpath -L$SSL_LIBDIR"],
- ["-l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"],
- [rpath_success=yes],
- [rpath_success=no])
-
- test "$rpath_success" = "yes" && break
- done
-
- test "$rpath_success" = "yes" || { ded_ld_rpath=; rpath=; }
-
- SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
-
- if test "$rpath" != ""; then
- AC_MSG_RESULT([$rpath])
- elif test "$with_ssl_rpath" = yes; then
- AC_MSG_ERROR([requested by user, but could not be used])
- else
- AC_MSG_WARN([unable to set run path during linking])
- fi
- fi
- ;;
-
-no) # Use no ssl runtime library path
- SSL_DED_LD_RUNTIME_LIBRARY_PATH=
- ;;
-
-*) # Use ssl runtime library paths set by --with-ssl-rpath (without any check)
- AC_MSG_CHECKING([whether runtime library path can be set])
-
- if test $enable_dynamic_ssl = no; then
- AC_MSG_ERROR([runtime library path requested by user, but user also requested static linking])
- elif test "$CRYPTO_APP" = ""; then
- if test "$with_ssl_rpath" = yes; then
- AC_MSG_ERROR([runtime library path requested by user, but could not be set since no crypto library was found])
- fi
- AC_MSG_RESULT([])
- elif test "$ded_ld_rflg" = ""; then
- if test "$with_ssl_rpath" = yes; then
- AC_MSG_ERROR([runtime library path requested by user, but cannot be set on this platform])
- fi
- AC_MSG_RESULT([])
- elif test "$SSL_DYNAMIC_ONLY" != "yes"; then
- if test "$with_ssl_rpath" = yes; then
- AC_MSG_WARN([runtime library path requested by user, but dynamic linking will not be used])
- else
- AC_MSG_RESULT([])
- fi
- else
- ded_ld_rpath=
- delimit=
- rpath=
- rpath_delimit=
- save_ifs="$IFS"; IFS=",:"
- for dir in $with_ssl_rpath; do
- ded_ld_rpath="$ded_ld_rpath$delimit$ded_ld_rflg$dir"
- delimit=" "
- rpath="$rpath$rpath_delimit$dir"
- rpath_delimit=":"
- done
- IFS="$save_ifs"
- SSL_DED_LD_RUNTIME_LIBRARY_PATH="$ded_ld_rpath"
- ERL_LINK_CRYPTO_IFELSE(
- ["$SSL_INCLUDE"],
- ["$ded_ld_rpath -L$SSL_LIBDIR"],
- ["-l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"],
- [rpath_success=yes],
- [rpath_success=no])
- if test "$rpath_success" = yes; then
- AC_MSG_RESULT([yes; using $rpath])
- else
- AC_MSG_ERROR([runtime library path requested by user, but link failed])
- fi
- fi
- ;;
-
-esac
-
-
-AC_ARG_ENABLE(fips,
-AS_HELP_STRING([--enable-fips], [enable OpenSSL FIPS mode support])
-AS_HELP_STRING([--disable-fips], [disable OpenSSL FIPS mode support (default)]),
-[ case "$enableval" in
- yes) enable_fips_support=yes ;;
- *) enable_fips_support=no ;;
- esac ], enable_fips_support=no)
-
-if test "x$enable_fips_support" = "xyes" && test "$CRYPTO_APP" != ""; then
- saveCFLAGS="$CFLAGS"
- saveLDFLAGS="$LDFLAGS"
- saveLIBS="$LIBS"
- CFLAGS="$DED_BASIC_CFLAGS $SSL_INCLUDE"
- if test $SSL_DYNAMIC_ONLY = yes; then
- LDFLAGS="$DED_LDFLAGS_CONFTEST $ded_ld_rpath -L$SSL_LIBDIR"
- LIBS="$LIBS -l$SSL_CRYPTO_LIBNAME $SSL_EXTRA_LIBS"
- else
- LDFLAGS="$DED_LDFLAGS_CONFTEST"
- if test "$host_os" = "win32" ; then
- LIBS="$LIBS $SSL_LIBDIR/$SSL_CRYPTO_LIBNAME.lib $SSL_EXTRA_LIBS"
- else
- LIBS="$LIBS $SSL_LIBDIR/lib$SSL_CRYPTO_LIBNAME.a $SSL_EXTRA_LIBS"
- fi
- fi
- AC_CHECK_FUNC([FIPS_mode_set],
- [SSL_FLAGS="-DFIPS_SUPPORT"],
- [SSL_FLAGS=])
- CFLAGS="$saveCFLAGS"
- LDFLAGS="$saveLDFLAGS"
- LIBS="$saveLIBS"
-else
- SSL_FLAGS=
-fi
-
-AC_SUBST(SSL_INCLUDE)
-AC_SUBST(SSL_INCDIR)
-AC_SUBST(SSL_LIBDIR)
-AC_SUBST(SSL_FLAGS)
-AC_SUBST(SSL_CRYPTO_LIBNAME)
-AC_SUBST(SSL_SSL_LIBNAME)
-AC_SUBST(SSL_EXTRA_LIBS)
-AC_SUBST(SSL_DED_LD_RUNTIME_LIBRARY_PATH)
-AC_SUBST(SSL_DYNAMIC_ONLY)
-AC_SUBST(DISABLE_EVP_DH)
-AC_SUBST(DISABLE_EVP_HMAC)
-
-AC_OUTPUT(c_src/$host/Makefile:c_src/Makefile.in)
-
diff --git a/lib/crypto/doc/src/crypto.xml b/lib/crypto/doc/src/crypto.xml
index 9a38ec53f4..72e2c0d14e 100644
--- a/lib/crypto/doc/src/crypto.xml
+++ b/lib/crypto/doc/src/crypto.xml
@@ -1938,6 +1938,20 @@ FloatValue = rand:uniform(). % again
</desc>
</func>
+ <func>
+ <name name="hash_equals" arity="2" since="OTP 25.0"/>
+ <fsummary>Constant time memory comparison for fixed length binaries</fsummary>
+ <desc>
+ <p>
+ Constant time memory comparison for fixed length binaries, such as results of HMAC computations.
+ </p>
+ <p>
+ Returns true if the binaries are identical, false if they are of the same length but not identical.
+ The function raises an <c>error:badarg</c> exception if the binaries are of different size.
+ </p>
+ </desc>
+ </func>
+
</funcs>
</erlref>
diff --git a/lib/crypto/src/crypto.app.src b/lib/crypto/src/crypto.app.src
index 492aa10e51..202baaec6b 100644
--- a/lib/crypto/src/crypto.app.src
+++ b/lib/crypto/src/crypto.app.src
@@ -25,6 +25,6 @@
{registered, []},
{applications, [kernel, stdlib]},
{env, [{fips_mode, false}, {rand_cache_size, 896}]},
- {runtime_dependencies, ["erts-9.0","stdlib-3.4","kernel-5.3"]}]}.
+ {runtime_dependencies, ["erts-9.0","stdlib-3.9","kernel-5.3"]}]}.
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl
index 473be885c9..170fa98adf 100644
--- a/lib/crypto/src/crypto.erl
+++ b/lib/crypto/src/crypto.erl
@@ -96,6 +96,8 @@
crypto_final/1,
crypto_get_data/1,
+ hash_equals/2,
+
supports/1,
mac/3, mac/4, macN/4, macN/5,
mac_init/2, mac_init/3, mac_update/2, mac_final/1, mac_finalN/2
@@ -637,7 +639,6 @@ mac(Type, SubType, Key0, Data) ->
mac_nif(Type, alias(SubType,Key), Key, Data).
-
-spec macN(Type :: poly1305, Key, Data, MacLength) -> Mac | descriptive_error()
when Key :: iodata(),
Data :: iodata(),
@@ -2269,6 +2270,15 @@ exor(Data1, Data2, _Size, MaxByts, Acc) ->
do_exor(_A, _B) -> ?nif_stub.
+-spec hash_equals(BinA, BinB) -> Result
+ when BinA :: binary(),
+ BinB :: binary(),
+ Result :: boolean().
+hash_equals(A, B) ->
+ hash_equals_nif(A, B).
+
+hash_equals_nif(_A, _B) -> ?nif_stub.
+
hash_algorithms() -> ?nif_stub.
pubkey_algorithms() -> ?nif_stub.
cipher_algorithms() -> ?nif_stub.
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index 2f91f7037a..a977991bbb 100644
--- a/lib/crypto/test/crypto_SUITE.erl
+++ b/lib/crypto/test/crypto_SUITE.erl
@@ -104,6 +104,8 @@
rand_threads/1,
rand_uniform/0,
rand_uniform/1,
+ hash_equals/0,
+ hash_equals/1,
sign_verify/0,
sign_verify/1,
ec_key_padding/1,
@@ -191,7 +193,8 @@ all() ->
rand_plugin_s,
info,
cipher_info,
- hash_info
+ hash_info,
+ hash_equals
].
-define(NEW_CIPHER_TYPE_SCHEMA,
@@ -1222,6 +1225,18 @@ exor(Config) when is_list(Config) ->
do_exor(<<1, 2, 3, 4, 5, 6, 7, 8, 9, 10>>),
do_exor(term_to_binary(lists:seq(1, 1000000))).
%%--------------------------------------------------------------------
+hash_equals() ->
+ [{doc, "Test the hash_equals function"}].
+hash_equals(Config) when is_list(Config) ->
+ try
+ true = crypto:hash_equals(<<>>, <<>>),
+ true = crypto:hash_equals(<<"abc">>, <<"abc">>),
+ false = crypto:hash_equals(<<"abc">>, <<"abe">>)
+ catch
+ error:{notsup,{"hash_equals.c",_Line},"Unsupported CRYPTO_memcmp"} ->
+ {skip, "No CRYPTO_memcmp"}
+ end.
+%%--------------------------------------------------------------------
rand_uniform() ->
[{doc, "rand_uniform and random_bytes testing"}].
rand_uniform(Config) when is_list(Config) ->
diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml
index 66281b201b..1b111b73ba 100644
--- a/lib/dialyzer/doc/src/dialyzer.xml
+++ b/lib/dialyzer/doc/src/dialyzer.xml
@@ -316,6 +316,16 @@ dialyzer --plts plt_1 ... plt_n -- files_to_analyze</code>
<item>
<p>Include warnings for functions that only return by an exception.</p>
</item>
+ <tag><c>-Wextra_return</c> (***)</tag>
+ <item>
+ <p>Warn about functions that return values that are not part of the
+ specification.</p>
+ </item>
+ <tag><c>-Wmissing_return</c> (***)</tag>
+ <item>
+ <p>Warn about functions whose specification includes types that the
+ function cannot return.</p>
+ </item>
<tag><c>-Wno_behaviours</c></tag>
<item>
<p>Suppress warnings about behavior callbacks that drift from the
@@ -427,6 +437,16 @@ dialyzer --plts plt_1 ... plt_n -- files_to_analyze</code>
specification is strictly more allowing than the success typing).
</p>
</item>
+ <tag><c>-Wno_extra_return</c></tag>
+ <item>
+ <p>Suppress warnings about functions that return values that are not
+ part of the specification.</p>
+ </item>
+ <tag><c>-Wno_missing_return</c></tag>
+ <item>
+ <p>Suppress warnings about functions whose specification includes types
+ that the function cannot return.</p>
+ </item>
</taglist>
</section>
diff --git a/lib/dialyzer/src/Makefile b/lib/dialyzer/src/Makefile
index 0847da9d5a..5e69bd147e 100644
--- a/lib/dialyzer/src/Makefile
+++ b/lib/dialyzer/src/Makefile
@@ -47,11 +47,7 @@ DIALYZER_DIR = $(ERL_TOP)/lib/dialyzer
# Target Specs
# ----------------------------------------------------
MODULES = \
- cerl_closurean \
- cerl_lib \
- cerl_pmatch \
cerl_prettypr \
- cerl_typean \
dialyzer \
dialyzer_analysis_callgraph \
dialyzer_behaviours \
diff --git a/lib/dialyzer/src/cerl_closurean.erl b/lib/dialyzer/src/cerl_closurean.erl
deleted file mode 100644
index 55dcfeed1d..0000000000
--- a/lib/dialyzer/src/cerl_closurean.erl
+++ /dev/null
@@ -1,856 +0,0 @@
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% @copyright 2001-2002 Richard Carlsson
-%% @author Richard Carlsson <carlsson.richard@gmail.com>
-%% @doc Closure analysis of Core Erlang programs.
-
-%% TODO: might need a "top" (`any') element for any-length value lists.
-
--module(cerl_closurean).
-
--export([analyze/1, annotate/1]).
-%% The following functions are exported from this module since they
-%% are also used by Dialyzer (file dialyzer/src/dialyzer_dep.erl)
--export([is_escape_op/2, is_escape_op/3, is_literal_op/2, is_literal_op/3]).
-
--import(cerl, [ann_c_apply/3, ann_c_fun/3, ann_c_var/2, apply_args/1,
- apply_op/1, atom_val/1, bitstr_size/1, bitstr_val/1,
- binary_segments/1, c_letrec/2, c_seq/2, c_tuple/1,
- c_nil/0, call_args/1, call_module/1, call_name/1,
- case_arg/1, case_clauses/1, catch_body/1, clause_body/1,
- clause_guard/1, clause_pats/1, cons_hd/1, cons_tl/1,
- fun_body/1, fun_vars/1, get_ann/1, is_c_atom/1,
- let_arg/1, let_body/1, let_vars/1, letrec_body/1,
- letrec_defs/1, module_defs/1, module_defs/1,
- module_exports/1, pat_vars/1, primop_args/1,
- primop_name/1, receive_action/1, receive_clauses/1,
- receive_timeout/1, seq_arg/1, seq_body/1, set_ann/2,
- try_arg/1, try_body/1, try_vars/1, try_evars/1,
- try_handler/1, tuple_es/1, type/1, values_es/1]).
-
--import(cerl_trees, [get_label/1]).
-
-%% ===========================================================================
-
--type label() :: integer() | 'top' | 'external' | 'external_call'.
--type ordset(X) :: [X]. % XXX: TAKE ME OUT
--type labelset() :: ordset(label()).
--type outlist() :: [labelset()] | 'none'.
--type escapes() :: labelset().
-
-%% ===========================================================================
-%% annotate(Tree) -> {Tree1, OutList, Outputs, Escapes, Dependencies, Parents}
-%%
-%% Tree = cerl:cerl()
-%%
-%% Analyzes `Tree' (see `analyze') and appends terms `{callers,
-%% Labels}' and `{calls, Labels}' to the annotation list of each
-%% fun-expression node and apply-expression node of `Tree',
-%% respectively, where `Labels' is an ordered-set list of labels of
-%% fun-expressions in `Tree', possibly also containing the atom
-%% `external', corresponding to the dependency information derived
-%% by the analysis. Any previous such annotations are removed from
-%% `Tree'. `Tree1' is the modified tree; for details on `OutList',
-%% `Outputs' , `Dependencies', `Escapes' and `Parents', see
-%% `analyze'.
-%%
-%% Note: `Tree' must be annotated with labels in order to use this
-%% function; see `analyze' for details.
-
--spec annotate(cerl:cerl()) ->
- {cerl:cerl(), outlist(), dict:dict(),
- escapes(), dict:dict(), dict:dict()}.
-
-annotate(Tree) ->
- {Xs, Out, Esc, Deps, Par} = analyze(Tree),
- F = fun (T) ->
- case type(T) of
- 'fun' ->
- L = get_label(T),
- X = case dict:find(L, Deps) of
- {ok, X1} -> X1;
- error -> set__new()
- end,
- set_ann(T, append_ann(callers,
- set__to_list(X),
- get_ann(T)));
- apply ->
- L = get_label(T),
- X = case dict:find(L, Deps) of
- {ok, X1} -> X1;
- error -> set__new()
- end,
- set_ann(T, append_ann(calls,
- set__to_list(X),
- get_ann(T)));
- _ ->
-%%% set_ann(T, []) % debug
- T
- end
- end,
- {cerl_trees:map(F, Tree), Xs, Out, Esc, Deps, Par}.
-
-append_ann(Tag, Val, [X | Xs]) ->
- if tuple_size(X) >= 1, element(1, X) =:= Tag ->
- append_ann(Tag, Val, Xs);
- true ->
- [X | append_ann(Tag, Val, Xs)]
- end;
-append_ann(Tag, Val, []) ->
- [{Tag, Val}].
-
-%% =====================================================================
-%% analyze(Tree) -> {OutList, Outputs, Escapes, Dependencies, Parents}
-%%
-%% Tree = cerl()
-%% OutList = [LabelSet] | none
-%% Outputs = dict(Label, OutList)
-%% Escapes = LabelSet
-%% Dependencies = dict(Label, LabelSet)
-%% LabelSet = ordset(Label)
-%% Label = integer() | top | external | external_call
-%% Parents = dict(Label, Label)
-%%
-%% Analyzes a module or an expression represented by `Tree'.
-%%
-%% The returned `OutList' is a list of sets of labels of
-%% fun-expressions which correspond to the possible closures in the
-%% value list produced by `Tree' (viewed as an expression; the
-%% "value" of a module contains its exported functions). The atom
-%% `none' denotes missing or conflicting information.
-%%
-%% The atom `external' in any label set denotes any possible
-%% function outside `Tree', including those in `Escapes'. The atom
-%% `top' denotes the top-level expression `Tree'.
-%%
-%% `Outputs' is a mapping from the labels of fun-expressions in
-%% `Tree' to corresponding lists of sets of labels of
-%% fun-expressions (or the atom `none'), representing the possible
-%% closures in the value lists returned by the respective
-%% functions.
-%%
-%% `Dependencies' is a similar mapping from the labels of
-%% fun-expressions and apply-expressions in `Tree' to sets of
-%% labels of corresponding fun-expressions which may contain call
-%% sites of the functions or be called from the call sites,
-%% respectively. Any such label not defined in `Dependencies'
-%% represents an unreachable function or a dead or faulty
-%% application.
-%%
-%% `Escapes' is the set of labels of fun-expressions in `Tree' such
-%% that corresponding closures may be accessed from outside `Tree'.
-%%
-%% `Parents' is a mapping from labels of fun-expressions in `Tree'
-%% to the corresponding label of the nearest containing
-%% fun-expression or top-level expression. This can be used to
-%% extend the dependency graph, for certain analyses.
-%%
-%% Note: `Tree' must be annotated with labels (as done by the
-%% function `cerl_trees:label/1') in order to use this function.
-%% The label annotation `{label, L}' (where L should be an integer)
-%% must be the first element of the annotation list of each node in
-%% the tree. Instances of variables bound in `Tree' which denote
-%% the same variable must have the same label; apart from this,
-%% labels should be unique. Constant literals do not need to be
-%% labeled.
-
--record(state, {vars, out, dep, work, funs, par}).
-
-%% Note: In order to keep our domain simple, we assume that all remote
-%% calls and primops return a single value, if any.
-
-%% We use the terms `closure', `label', `lambda' and `fun-expression'
-%% interchangeably. The exact meaning in each case can be grasped from
-%% the context.
-%%
-%% Rules:
-%% 1) The implicit top level lambda escapes.
-%% 2) A lambda returned by an escaped lambda also escapes.
-%% 3) An escaped lambda can be passed an external lambda as argument.
-%% 4) A lambda passed as argument to an external lambda also escapes.
-%% 5) An argument passed to an unknown operation escapes.
-%% 6) A call to an unknown operation can return an external lambda.
-%%
-%% Escaped lambdas become part of the set of external lambdas, but this
-%% does not need to be represented explicitly.
-
-%% We wrap the given syntax tree T in a fun-expression labeled `top',
-%% which is initially in the set of escaped labels. `top' will be
-%% visited at least once.
-%%
-%% We create a separate function labeled `external', defined as:
-%% "'external'/1 = fun (Escape) -> do apply 'external'/1(apply Escape())
-%% 'external'/1", which will represent any and all functions outside T,
-%% and which returns itself, and contains a recursive call; this models
-%% rules 2 and 4 above. It will be revisited if the set of escaped
-%% labels changes, or at least once. Its parameter `Escape' is a
-%% variable labeled `escape', which will hold the set of escaped labels.
-%% initially it contains `top' and `external'.
-
--spec analyze(cerl:cerl()) ->
- {outlist(), dict:dict(), escapes(), dict:dict(), dict:dict()}.
-
-analyze(Tree) ->
- %% Note that we use different name spaces for variable labels and
- %% function/call site labels, so we can reuse some names here. We
- %% assume that the labeling of Tree only uses integers, not atoms.
- External = ann_c_var([{label, external}], {external, 1}),
- Escape = ann_c_var([{label, escape}], 'Escape'),
- ExtBody = c_seq(ann_c_apply([{label, loop}], External,
- [ann_c_apply([{label, external_call}],
- Escape, [])]),
- External),
- ExtFun = ann_c_fun([{label, external}], [Escape], ExtBody),
-%%% io:fwrite("external fun:\n~s.\n",
-%%% [cerl_prettypr:format(ExtFun, [noann])]),
- Top = ann_c_var([{label, top}], {top, 0}),
- TopFun = ann_c_fun([{label, top}], [], Tree),
-
- %% The "start fun" just makes the initialisation easier. It will not
- %% be marked as escaped, and thus cannot be called.
- StartFun = ann_c_fun([{label, start}], [],
- c_letrec([{External, ExtFun}, {Top, TopFun}],
- c_nil())),
-%%% io:fwrite("start fun:\n~s.\n",
-%%% [cerl_prettypr:format(StartFun, [noann])]),
-
- %% Gather a database of all fun-expressions in Tree and initialise
- %% all their outputs and parameter variables. Bind all module- and
- %% letrec-defined variables to their corresponding labels.
- Funs0 = dict:new(),
- Vars0 = dict:new(),
- Out0 = dict:new(),
- Empty = empty(),
- F = fun (T, S = {Fs, Vs, Os}) ->
- case type(T) of
- 'fun' ->
- L = get_label(T),
- As = fun_vars(T),
- {dict:store(L, T, Fs),
- bind_vars_single(As, Empty, Vs),
- dict:store(L, none, Os)};
- letrec ->
- {Fs, bind_defs(letrec_defs(T), Vs), Os};
- module ->
- {Fs, bind_defs(module_defs(T), Vs), Os};
- _ ->
- S
- end
- end,
- {Funs, Vars, Out} = cerl_trees:fold(F, {Funs0, Vars0, Out0},
- StartFun),
-
- %% Initialise Escape to the minimal set of escaped labels.
- Vars1 = dict:store(escape, from_label_list([top, external]), Vars),
-
- %% Enter the fixpoint iteration at the StartFun.
- St = loop(StartFun, start, #state{vars = Vars1,
- out = Out,
- dep = dict:new(),
- work = init_work(),
- funs = Funs,
- par = dict:new()}),
-%%% io:fwrite("dependencies: ~p.\n",
-%%% [[{X, set__to_list(Y)}
-%%% || {X, Y} <- dict:to_list(St#state.dep)]]),
- {dict:fetch(top, St#state.out),
- tidy_dict([start, top, external], St#state.out),
- dict:fetch(escape, St#state.vars),
- tidy_dict([loop], St#state.dep),
- St#state.par}.
-
-tidy_dict([X | Xs], D) ->
- tidy_dict(Xs, dict:erase(X, D));
-tidy_dict([], D) ->
- D.
-
-loop(T, L, St0) ->
-%%% io:fwrite("analyzing: ~w.\n", [L]),
-%%% io:fwrite("work: ~w.\n", [St0#state.work]),
- Xs0 = dict:fetch(L, St0#state.out),
- {Xs, St1} = visit(fun_body(T), L, St0),
- {W, M} = case equal(Xs0, Xs) of
- true ->
- {St1#state.work, St1#state.out};
- false ->
-%%% io:fwrite("out (~w) changed: ~w <- ~w.\n",
-%%% [L, Xs, Xs0]),
- M1 = dict:store(L, Xs, St1#state.out),
- case dict:find(L, St1#state.dep) of
- {ok, S} ->
- {add_work(set__to_list(S), St1#state.work),
- M1};
- error ->
- {St1#state.work, M1}
- end
- end,
- St2 = St1#state{out = M},
- case take_work(W) of
- {ok, L1, W1} ->
- T1 = dict:fetch(L1, St2#state.funs),
- loop(T1, L1, St2#state{work = W1});
- none ->
- St2
- end.
-
-visit(T, L, St) ->
- case type(T) of
- literal ->
- {[empty()], St};
- var ->
- %% If a variable is not already in the store here, we
- %% initialize it to empty().
- L1 = get_label(T),
- Vars = St#state.vars,
- case dict:find(L1, Vars) of
- {ok, X} ->
- {[X], St};
- error ->
- X = empty(),
- St1 = St#state{vars = dict:store(L1, X, Vars)},
- {[X], St1}
- end;
- 'fun' ->
- %% Must revisit the fun also, because its environment might
- %% have changed. (We don't keep track of such dependencies.)
- L1 = get_label(T),
- St1 = St#state{work = add_work([L1], St#state.work),
- par = set_parent([L1], L, St#state.par)},
- {[singleton(L1)], St1};
- values ->
- visit_list(values_es(T), L, St);
- cons ->
- {Xs, St1} = visit_list([cons_hd(T), cons_tl(T)], L, St),
- {[join_single_list(Xs)], St1};
- tuple ->
- {Xs, St1} = visit_list(tuple_es(T), L, St),
- {[join_single_list(Xs)], St1};
- 'let' ->
- {Xs, St1} = visit(let_arg(T), L, St),
- Vars = bind_vars(let_vars(T), Xs, St1#state.vars),
- visit(let_body(T), L, St1#state{vars = Vars});
- seq ->
- {_, St1} = visit(seq_arg(T), L, St),
- visit(seq_body(T), L, St1);
- apply ->
- {Xs, St1} = visit(apply_op(T), L, St),
- {As, St2} = visit_list(apply_args(T), L, St1),
- case Xs of
- [X] ->
- %% We store the dependency from the call site to the
- %% called functions
- Ls = set__to_list(X),
- Out = St2#state.out,
- Xs1 = join_list([dict:fetch(Lx, Out) || Lx <- Ls]),
- St3 = call_site(Ls, L, As, St2),
- L1 = get_label(T),
- D = dict:store(L1, X, St3#state.dep),
- {Xs1, St3#state{dep = D}};
- none ->
- {none, St2}
- end;
- call ->
- M = call_module(T),
- F = call_name(T),
- {_, St1} = visit(M, L, St),
- {_, St2} = visit(F, L, St1),
- {Xs, St3} = visit_list(call_args(T), L, St2),
- remote_call(M, F, Xs, St3);
- primop ->
- As = primop_args(T),
- {Xs, St1} = visit_list(As, L, St),
- primop_call(atom_val(primop_name(T)), length(Xs), Xs, St1);
- 'case' ->
- {Xs, St1} = visit(case_arg(T), L, St),
- visit_clauses(Xs, case_clauses(T), L, St1);
- 'receive' ->
- X = singleton(external),
- {Xs1, St1} = visit_clauses([X], receive_clauses(T), L, St),
- {_, St2} = visit(receive_timeout(T), L, St1),
- {Xs2, St3} = visit(receive_action(T), L, St2),
- {join(Xs1, Xs2), St3};
- 'try' ->
- {Xs1, St1} = visit(try_arg(T), L, St),
- X = singleton(external),
- Vars = bind_vars(try_vars(T), [X], St1#state.vars),
- {Xs2, St2} = visit(try_body(T), L, St1#state{vars = Vars}),
- Evars = bind_vars(try_evars(T), [X, X, X], St2#state.vars),
- {Xs3, St3} = visit(try_handler(T), L, St2#state{vars = Evars}),
- {join(join(Xs1, Xs2), Xs3), St3};
- 'catch' ->
- {_, St1} = visit(catch_body(T), L, St),
- {[singleton(external)], St1};
- binary ->
- {_, St1} = visit_list(binary_segments(T), L, St),
- {[empty()], St1};
- bitstr ->
- %% The other fields are constant literals.
- {_, St1} = visit(bitstr_val(T), L, St),
- {_, St2} = visit(bitstr_size(T), L, St1),
- {none, St2};
- letrec ->
- %% All the bound funs should be revisited, because the
- %% environment might have changed.
- Ls = [get_label(F) || {_, F} <- letrec_defs(T)],
- St1 = St#state{work = add_work(Ls, St#state.work),
- par = set_parent(Ls, L, St#state.par)},
- visit(letrec_body(T), L, St1);
- module ->
- %% All the exported functions escape, and can thus be passed
- %% any external closures as arguments. We regard a module as
- %% a tuple of function variables in the body of a `letrec'.
- visit(c_letrec(module_defs(T), c_tuple(module_exports(T))),
- L, St)
- end.
-
-visit_clause(T, Xs, L, St) ->
- Vars = bind_pats(clause_pats(T), Xs, St#state.vars),
- {_, St1} = visit(clause_guard(T), L, St#state{vars = Vars}),
- visit(clause_body(T), L, St1).
-
-%% We assume correct value-list typing.
-
-visit_list([T | Ts], L, St) ->
- {Xs, St1} = visit(T, L, St),
- {Xs1, St2} = visit_list(Ts, L, St1),
- X = case Xs of
- [X1] -> X1;
- none -> none
- end,
- {[X | Xs1], St2};
-visit_list([], _L, St) ->
- {[], St}.
-
-visit_clauses(Xs, [T | Ts], L, St) ->
- {Xs1, St1} = visit_clause(T, Xs, L, St),
- {Xs2, St2} = visit_clauses(Xs, Ts, L, St1),
- {join(Xs1, Xs2), St2};
-visit_clauses(_, [], _L, St) ->
- {none, St}.
-
-bind_defs([{V, F} | Ds], Vars) ->
- bind_defs(Ds, dict:store(get_label(V), singleton(get_label(F)),
- Vars));
-bind_defs([], Vars) ->
- Vars.
-
-bind_pats(Ps, none, Vars) ->
- bind_pats_single(Ps, empty(), Vars);
-bind_pats(Ps, Xs, Vars) ->
- if length(Xs) =:= length(Ps) ->
- bind_pats_list(Ps, Xs, Vars);
- true ->
- bind_pats_single(Ps, empty(), Vars)
- end.
-
-bind_pats_list([P | Ps], [X | Xs], Vars) ->
- bind_pats_list(Ps, Xs, bind_vars_single(pat_vars(P), X, Vars));
-bind_pats_list([], [], Vars) ->
- Vars.
-
-bind_pats_single([P | Ps], X, Vars) ->
- bind_pats_single(Ps, X, bind_vars_single(pat_vars(P), X, Vars));
-bind_pats_single([], _X, Vars) ->
- Vars.
-
-bind_vars(Vs, none, Vars) ->
- bind_vars_single(Vs, empty(), Vars);
-bind_vars(Vs, Xs, Vars) ->
- if length(Vs) =:= length(Xs) ->
- bind_vars_list(Vs, Xs, Vars);
- true ->
- bind_vars_single(Vs, empty(), Vars)
- end.
-
-bind_vars_list([V | Vs], [X | Xs], Vars) ->
- bind_vars_list(Vs, Xs, dict:store(get_label(V), X, Vars));
-bind_vars_list([], [], Vars) ->
- Vars.
-
-bind_vars_single([V | Vs], X, Vars) ->
- bind_vars_single(Vs, X, dict:store(get_label(V), X, Vars));
-bind_vars_single([], _X, Vars) ->
- Vars.
-
-%% This handles a call site - adding dependencies and updating parameter
-%% variables with respect to the actual parameters. The 'external'
-%% function is handled specially, since it can get an arbitrary number
-%% of arguments, which must be unified into a single argument.
-
-call_site(Ls, L, Xs, St) ->
-%%% io:fwrite("call site: ~w -> ~w (~w).\n", [L, Ls, Xs]),
- {D, W, V} = call_site(Ls, L, Xs, St#state.dep, St#state.work,
- St#state.vars, St#state.funs),
- St#state{dep = D, work = W, vars = V}.
-
-call_site([external | Ls], T, Xs, D, W, V, Fs) ->
- D1 = add_dep(external, T, D),
- X = join_single_list(Xs),
- case bind_arg(escape, X, V) of
- {V1, true} ->
-%%% io:fwrite("escape changed: ~w <- ~w + ~w.\n",
-%%% [dict:fetch(escape, V1), dict:fetch(escape, V),
-%%% X]),
- {W1, V2} = update_esc(set__to_list(X), W, V1, Fs),
- call_site(Ls, T, Xs, D1, add_work([external], W1), V2, Fs);
- {V1, false} ->
- call_site(Ls, T, Xs, D1, W, V1, Fs)
- end;
-call_site([L | Ls], T, Xs, D, W, V, Fs) ->
- D1 = add_dep(L, T, D),
- Vs = fun_vars(dict:fetch(L, Fs)),
- case bind_args(Vs, Xs, V) of
- {V1, true} ->
- call_site(Ls, T, Xs, D1, add_work([L], W), V1, Fs);
- {V1, false} ->
- call_site(Ls, T, Xs, D1, W, V1, Fs)
- end;
-call_site([], _, _, D, W, V, _) ->
- {D, W, V}.
-
-%% Note that `visit' makes sure all lambdas are visited at least once.
-%% For every called function, we add a dependency from the *called*
-%% function to the function containing the call site.
-
-add_dep(Source, Target, Deps) ->
- case dict:find(Source, Deps) of
- {ok, X} ->
- case set__is_member(Target, X) of
- true ->
- Deps;
- false ->
-%%% io:fwrite("new dep: ~w <- ~w.\n", [Target, Source]),
- dict:store(Source, set__add(Target, X), Deps)
- end;
- error ->
-%%% io:fwrite("new dep: ~w <- ~w.\n", [Target, Source]),
- dict:store(Source, set__singleton(Target), Deps)
- end.
-
-%% If the arity does not match the call, nothing is done here.
-
-bind_args(Vs, Xs, Vars) ->
- if length(Vs) =:= length(Xs) ->
- bind_args(Vs, Xs, Vars, false);
- true ->
- {Vars, false}
- end.
-
-bind_args([V | Vs], [X | Xs], Vars, Ch) ->
- L = get_label(V),
- {Vars1, Ch1} = bind_arg(L, X, Vars, Ch),
- bind_args(Vs, Xs, Vars1, Ch1);
-bind_args([], [], Vars, Ch) ->
- {Vars, Ch}.
-
-bind_args_single(Vs, X, Vars) ->
- bind_args_single(Vs, X, Vars, false).
-
-bind_args_single([V | Vs], X, Vars, Ch) ->
- L = get_label(V),
- {Vars1, Ch1} = bind_arg(L, X, Vars, Ch),
- bind_args_single(Vs, X, Vars1, Ch1);
-bind_args_single([], _, Vars, Ch) ->
- {Vars, Ch}.
-
-bind_arg(L, X, Vars) ->
- bind_arg(L, X, Vars, false).
-
-bind_arg(L, X, Vars, Ch) ->
- X0 = dict:fetch(L, Vars),
- X1 = join_single(X, X0),
- case equal_single(X0, X1) of
- true ->
- {Vars, Ch};
- false ->
-%%% io:fwrite("arg (~w) changed: ~w <- ~w + ~w.\n",
-%%% [L, X1, X0, X]),
- {dict:store(L, X1, Vars), true}
- end.
-
-%% This handles escapes from things like primops and remote calls.
-
-%% escape(none, St) ->
-%% St;
-escape([X], St) ->
- Vars = St#state.vars,
- X0 = dict:fetch(escape, Vars),
- X1 = join_single(X, X0),
- case equal_single(X0, X1) of
- true ->
- St;
- false ->
-%%% io:fwrite("escape changed: ~w <- ~w + ~w.\n", [X1, X0, X]),
-%%% io:fwrite("updating escaping funs: ~w.\n", [set__to_list(X)]),
- Vars1 = dict:store(escape, X1, Vars),
- {W, Vars2} = update_esc(set__to_list(set__subtract(X, X0)),
- St#state.work, Vars1,
- St#state.funs),
- St#state{work = add_work([external], W), vars = Vars2}
- end.
-
-%% For all escaping lambdas, since they might be called from outside the
-%% program, all their arguments may be an external lambda. (Note that we
-%% only have to include the `external' label once per escaping lambda.)
-%% If the escape set has changed, we need to revisit the `external' fun.
-
-update_esc(Ls, W, V, Fs) ->
- update_esc(Ls, singleton(external), W, V, Fs).
-
-%% The external lambda is skipped here - the Escape variable is known to
-%% contain `external' from the start.
-
-update_esc([external | Ls], X, W, V, Fs) ->
- update_esc(Ls, X, W, V, Fs);
-update_esc([L | Ls], X, W, V, Fs) ->
- Vs = fun_vars(dict:fetch(L, Fs)),
- case bind_args_single(Vs, X, V) of
- {V1, true} ->
- update_esc(Ls, X, add_work([L], W), V1, Fs);
- {V1, false} ->
- update_esc(Ls, X, W, V1, Fs)
- end;
-update_esc([], _, W, V, _) ->
- {W, V}.
-
-set_parent([L | Ls], L1, D) ->
- set_parent(Ls, L1, dict:store(L, L1, D));
-set_parent([], _L1, D) ->
- D.
-
-%% Handle primop calls: (At present, we assume that all unknown primops
-%% yield exactly one value. This might have to be changed.)
-
-primop_call(F, A, Xs, St0) ->
- case is_pure_op(F, A) of
- %% XXX: this case is currently not possible -- commented out.
- %% true ->
- %% case is_literal_op(F, A) of
- %% true -> {[empty()], St0};
- %% false -> {[join_single_list(Xs)], St0}
- %% end;
- false ->
- St1 = case is_escape_op(F, A) of
- true -> escape([join_single_list(Xs)], St0);
- false -> St0
- end,
- case is_literal_op(F, A) of
- true -> {none, St1};
- false -> {[singleton(external)], St1}
- end
- end.
-
-%% Handle remote-calls: (At present, we assume that all unknown calls
-%% yield exactly one value. This might have to be changed.)
-
-remote_call(M, F, Xs, St) ->
- case is_c_atom(M) andalso is_c_atom(F) of
- true ->
- remote_call_1(atom_val(M), atom_val(F), length(Xs), Xs, St);
- false ->
- %% Unknown function
- {[singleton(external)], escape([join_single_list(Xs)], St)}
- end.
-
-remote_call_1(M, F, A, Xs, St0) ->
- case is_pure_op(M, F, A) of
- true ->
- case is_literal_op(M, F, A) of
- true -> {[empty()], St0};
- false -> {[join_single_list(Xs)], St0}
- end;
- false ->
- St1 = case is_escape_op(M, F, A) of
- true -> escape([join_single_list(Xs)], St0);
- false -> St0
- end,
- case is_literal_op(M, F, A) of
- true -> {[empty()], St1};
- false -> {[singleton(external)], St1}
- end
- end.
-
-%% Domain: none | [Vs], where Vs = set(integer()).
-
-join(none, Xs2) -> Xs2;
-join(Xs1, none) -> Xs1;
-join(Xs1, Xs2) ->
- if length(Xs1) =:= length(Xs2) ->
- join_1(Xs1, Xs2);
- true ->
- none
- end.
-
-join_1([X1 | Xs1], [X2 | Xs2]) ->
- [join_single(X1, X2) | join_1(Xs1, Xs2)];
-join_1([], []) ->
- [].
-
-empty() -> set__new().
-
-singleton(X) -> set__singleton(X).
-
-from_label_list(X) -> set__from_list(X).
-
-join_single(none, Y) -> Y;
-join_single(X, none) -> X;
-join_single(X, Y) -> set__union(X, Y).
-
-join_list([Xs | Xss]) ->
- join(Xs, join_list(Xss));
-join_list([]) ->
- none.
-
-join_single_list([X | Xs]) ->
- join_single(X, join_single_list(Xs));
-join_single_list([]) ->
- empty().
-
-equal(none, none) -> true;
-equal(none, _) -> false;
-equal(_, none) -> false;
-equal(X1, X2) -> equal_1(X1, X2).
-
-equal_1([X1 | Xs1], [X2 | Xs2]) ->
- equal_single(X1, X2) andalso equal_1(Xs1, Xs2);
-equal_1([], []) -> true;
-equal_1(_, _) -> false.
-
-equal_single(X, Y) -> set__equal(X, Y).
-
-%% Set abstraction for label sets in the domain.
-
-set__new() -> [].
-
-set__singleton(X) -> [X].
-
-set__to_list(S) -> S.
-
-set__from_list(S) -> ordsets:from_list(S).
-
-set__union(X, Y) -> ordsets:union(X, Y).
-
-set__add(X, S) -> ordsets:add_element(X, S).
-
-set__is_member(X, S) -> ordsets:is_element(X, S).
-
-set__subtract(X, Y) -> ordsets:subtract(X, Y).
-
-set__equal(X, Y) -> X =:= Y.
-
-%% A simple but efficient functional queue.
-
-queue__new() -> {[], []}.
-
-queue__put(X, {In, Out}) -> {[X | In], Out}.
-
-queue__get({In, [X | Out]}) -> {ok, X, {In, Out}};
-queue__get({[], _}) -> empty;
-queue__get({In, _}) ->
- [X | In1] = lists:reverse(In),
- {ok, X, {[], In1}}.
-
-%% The work list - a queue without repeated elements.
-
-init_work() ->
- {queue__new(), sets:new()}.
-
-add_work(Ls, {Q, Set}) ->
- add_work(Ls, Q, Set).
-
-%% Note that the elements are enqueued in order.
-
-add_work([L | Ls], Q, Set) ->
- case sets:is_element(L, Set) of
- true ->
- add_work(Ls, Q, Set);
- false ->
- add_work(Ls, queue__put(L, Q), sets:add_element(L, Set))
- end;
-add_work([], Q, Set) ->
- {Q, Set}.
-
-take_work({Queue0, Set0}) ->
- case queue__get(Queue0) of
- {ok, L, Queue1} ->
- Set1 = sets:del_element(L, Set0),
- {ok, L, {Queue1, Set1}};
- empty ->
- none
- end.
-
-%% Escape operators may let their arguments escape. Unless we know
-%% otherwise, and the function is not pure, we assume this is the case.
-%% Error-raising functions (fault/match_fail) are not considered as
-%% escapes (but throw/exit are). Zero-argument functions need not be
-%% listed.
-
--spec is_escape_op(atom(), arity()) -> boolean().
-
-is_escape_op(match_fail, 1) -> false;
-is_escape_op(recv_wait_timeout, 1) -> false;
-is_escape_op(F, A) when is_atom(F), is_integer(A) -> true.
-
--spec is_escape_op(atom(), atom(), arity()) -> boolean().
-
-is_escape_op(erlang, error, 1) -> false;
-is_escape_op(erlang, error, 2) -> false;
-is_escape_op(M, F, A) when is_atom(M), is_atom(F), is_integer(A) -> true.
-
-%% "Literal" operators will never return functional values even when
-%% found in their arguments. Unless we know otherwise, we assume this is
-%% not the case. (More functions can be added to this list, if needed
-%% for better precision. Note that the result of `term_to_binary' still
-%% contains an encoding of the closure.)
-
--spec is_literal_op(atom(), arity()) -> boolean().
-
-is_literal_op(recv_wait_timeout, 1) -> true;
-is_literal_op(match_fail, 1) -> true;
-is_literal_op(F, A) when is_atom(F), is_integer(A) -> false.
-
--spec is_literal_op(atom(), atom(), arity()) -> boolean().
-
-is_literal_op(erlang, '+', 2) -> true;
-is_literal_op(erlang, '-', 2) -> true;
-is_literal_op(erlang, '*', 2) -> true;
-is_literal_op(erlang, '/', 2) -> true;
-is_literal_op(erlang, '=:=', 2) -> true;
-is_literal_op(erlang, '==', 2) -> true;
-is_literal_op(erlang, '=/=', 2) -> true;
-is_literal_op(erlang, '/=', 2) -> true;
-is_literal_op(erlang, '<', 2) -> true;
-is_literal_op(erlang, '=<', 2) -> true;
-is_literal_op(erlang, '>', 2) -> true;
-is_literal_op(erlang, '>=', 2) -> true;
-is_literal_op(erlang, 'and', 2) -> true;
-is_literal_op(erlang, 'or', 2) -> true;
-is_literal_op(erlang, 'not', 1) -> true;
-is_literal_op(erlang, length, 1) -> true;
-is_literal_op(erlang, size, 1) -> true;
-is_literal_op(erlang, fun_info, 1) -> true;
-is_literal_op(erlang, fun_info, 2) -> true;
-is_literal_op(erlang, fun_to_list, 1) -> true;
-is_literal_op(erlang, throw, 1) -> true;
-is_literal_op(erlang, exit, 1) -> true;
-is_literal_op(erlang, error, 1) -> true;
-is_literal_op(erlang, error, 2) -> true;
-is_literal_op(M, F, A) when is_atom(M), is_atom(F), is_integer(A) -> false.
-
-%% Pure functions neither affect the state, nor depend on it.
-
-is_pure_op(F, A) when is_atom(F), is_integer(A) -> false.
-
-is_pure_op(M, F, A) -> erl_bifs:is_pure(M, F, A).
-
-%% =====================================================================
diff --git a/lib/dialyzer/src/cerl_lib.erl b/lib/dialyzer/src/cerl_lib.erl
deleted file mode 100644
index 3a6fb1cf51..0000000000
--- a/lib/dialyzer/src/cerl_lib.erl
+++ /dev/null
@@ -1,457 +0,0 @@
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% @copyright 1999-2002 Richard Carlsson
-%% @author Richard Carlsson <carlsson.richard@gmail.com>
-%% @doc Utility functions for Core Erlang abstract syntax trees.
-%%
-%% <p>Syntax trees are defined in the module <a
-%% href=""><code>cerl</code></a>.</p>
-%%
-%% @type cerl() = cerl:cerl()
-
--module(cerl_lib).
-
--define(NO_UNUSED, true).
-
--export([is_safe_expr/2, reduce_expr/1, is_simple_clause/1,
- is_bool_switch/1, bool_switch_cases/1]).
--ifndef(NO_UNUSED).
--export([is_safe_expr/1, is_pure_expr/1, is_pure_expr/2,
- make_bool_switch/3]).
--endif.
-
-
-%% Test if a clause has a single pattern and an always-true guard.
-
--spec is_simple_clause(cerl:c_clause()) -> boolean().
-
-is_simple_clause(C) ->
- case cerl:clause_pats(C) of
- [_P] ->
- G = cerl:clause_guard(C),
- case cerl_clauses:eval_guard(G) of
- {value, true} -> true;
- _ -> false
- end;
- _ -> false
- end.
-
-%% Creating an if-then-else construct that can be recognized as such.
-%% `Test' *must* be guaranteed to return a boolean.
-
--ifndef(NO_UNUSED).
-make_bool_switch(Test, True, False) ->
- Cs = [cerl:c_clause([cerl:c_atom(true)], True),
- cerl:c_clause([cerl:c_atom(false)], False)],
- cerl:c_case(Test, Cs).
--endif.
-
-%% A boolean switch cannot have a catch-all; only true/false branches.
-
--spec is_bool_switch([cerl:c_clause()]) -> boolean().
-
-is_bool_switch([C1, C2]) ->
- case is_simple_clause(C1) andalso is_simple_clause(C2) of
- true ->
- [P1] = cerl:clause_pats(C1),
- [P2] = cerl:clause_pats(C2),
- case cerl:is_c_atom(P1) andalso cerl:is_c_atom(P2) of
- true ->
- A1 = cerl:concrete(P1),
- A2 = cerl:concrete(P2),
- is_boolean(A1) andalso is_boolean(A2)
- andalso A1 =/= A2;
- false ->
- false
- end;
- false ->
- false
- end;
-is_bool_switch(_) ->
- false.
-
-%% Returns the true-body and the false-body for boolean switch clauses.
-
--spec bool_switch_cases([cerl:c_clause()]) -> {cerl:cerl(), cerl:cerl()}.
-
-bool_switch_cases([C1, C2]) ->
- B1 = cerl:clause_body(C1),
- B2 = cerl:clause_body(C2),
- [P1] = cerl:clause_pats(C1),
- case cerl:concrete(P1) of
- true ->
- {B1, B2};
- false ->
- {B2, B1}
- end.
-
-%%
-%% The type of the check functions like the default check below - XXX: refine
-%%
--type check_fun() :: fun((_, _) -> boolean()).
-
-%% The default function property check always returns `false':
-
-default_check(_Property, _Function) -> false.
-
-
-%% @spec is_safe_expr(Expr::cerl()) -> boolean()
-%%
-%% @doc Returns `true' if `Expr' represents a "safe" Core Erlang
-%% expression, otherwise `false'. An expression is safe if it always
-%% completes normally and does not modify the state (although the return
-%% value may depend on the state).
-%%
-%% Expressions of type `apply', `case', `receive' and `binary' are
-%% always considered unsafe by this function.
-
-%% TODO: update cerl_inline to use these functions instead.
-
--ifndef(NO_UNUSED).
-is_safe_expr(E) ->
- Check = fun default_check/2,
- is_safe_expr(E, Check).
--endif.
-%% @clear
-
--spec is_safe_expr(cerl:cerl(), check_fun()) -> boolean().
-
-is_safe_expr(E, Check) ->
- case cerl:type(E) of
- literal ->
- true;
- var ->
- true;
- 'fun' ->
- true;
- values ->
- is_safe_expr_list(cerl:values_es(E), Check);
- tuple ->
- is_safe_expr_list(cerl:tuple_es(E), Check);
- cons ->
- case is_safe_expr(cerl:cons_hd(E), Check) of
- true ->
- is_safe_expr(cerl:cons_tl(E), Check);
- false ->
- false
- end;
- 'let' ->
- case is_safe_expr(cerl:let_arg(E), Check) of
- true ->
- is_safe_expr(cerl:let_body(E), Check);
- false ->
- false
- end;
- letrec ->
- is_safe_expr(cerl:letrec_body(E), Check);
- seq ->
- case is_safe_expr(cerl:seq_arg(E), Check) of
- true ->
- is_safe_expr(cerl:seq_body(E), Check);
- false ->
- false
- end;
- 'catch' ->
- is_safe_expr(cerl:catch_body(E), Check);
- 'try' ->
- %% If the guarded expression is safe, the try-handler will
- %% never be evaluated, so we need only check the body. If
- %% the guarded expression is pure, but could fail, we also
- %% have to check the handler.
- case is_safe_expr(cerl:try_arg(E), Check) of
- true ->
- is_safe_expr(cerl:try_body(E), Check);
- false ->
- case is_pure_expr(cerl:try_arg(E), Check) of
- true ->
- case is_safe_expr(cerl:try_body(E), Check) of
- true ->
- is_safe_expr(cerl:try_handler(E), Check);
- false ->
- false
- end;
- false ->
- false
- end
- end;
- primop ->
- Name = cerl:atom_val(cerl:primop_name(E)),
- As = cerl:primop_args(E),
- case Check(safe, {Name, length(As)}) of
- true ->
- is_safe_expr_list(As, Check);
- false ->
- false
- end;
- call ->
- Module = cerl:call_module(E),
- Name = cerl:call_name(E),
- case cerl:is_c_atom(Module) and cerl:is_c_atom(Name) of
- true ->
- M = cerl:atom_val(Module),
- F = cerl:atom_val(Name),
- As = cerl:call_args(E),
- case Check(safe, {M, F, length(As)}) of
- true ->
- is_safe_expr_list(As, Check);
- false ->
- false
- end;
- false ->
- false % Call to unknown function
- end;
- _ ->
- false
- end.
-
-is_safe_expr_list([E | Es], Check) ->
- case is_safe_expr(E, Check) of
- true ->
- is_safe_expr_list(Es, Check);
- false ->
- false
- end;
-is_safe_expr_list([], _Check) ->
- true.
-
-
-%% @spec (Expr::cerl()) -> bool()
-%%
-%% @doc Returns `true' if `Expr' represents a "pure" Core Erlang
-%% expression, otherwise `false'. An expression is pure if it does not
-%% affect the state, nor depend on the state, although its evaluation is
-%% not guaranteed to complete normally for all input.
-%%
-%% Expressions of type `apply', `case', `receive' and `binary' are
-%% always considered impure by this function.
-
--ifndef(NO_UNUSED).
-is_pure_expr(E) ->
- Check = fun default_check/2,
- is_pure_expr(E, Check).
--endif.
-%% @clear
-
-is_pure_expr(E, Check) ->
- case cerl:type(E) of
- literal ->
- true;
- var ->
- true;
- 'fun' ->
- true;
- values ->
- is_pure_expr_list(cerl:values_es(E), Check);
- tuple ->
- is_pure_expr_list(cerl:tuple_es(E), Check);
- cons ->
- case is_pure_expr(cerl:cons_hd(E), Check) of
- true ->
- is_pure_expr(cerl:cons_tl(E), Check);
- false ->
- false
- end;
- 'let' ->
- case is_pure_expr(cerl:let_arg(E), Check) of
- true ->
- is_pure_expr(cerl:let_body(E), Check);
- false ->
- false
- end;
- letrec ->
- is_pure_expr(cerl:letrec_body(E), Check);
- seq ->
- case is_pure_expr(cerl:seq_arg(E), Check) of
- true ->
- is_pure_expr(cerl:seq_body(E), Check);
- false ->
- false
- end;
- 'catch' ->
- is_pure_expr(cerl:catch_body(E), Check);
- 'try' ->
- case is_pure_expr(cerl:try_arg(E), Check) of
- true ->
- case is_pure_expr(cerl:try_body(E), Check) of
- true ->
- is_pure_expr(cerl:try_handler(E), Check);
- false ->
- false
- end;
- false ->
- false
- end;
- primop ->
- Name = cerl:atom_val(cerl:primop_name(E)),
- As = cerl:primop_args(E),
- case Check(pure, {Name, length(As)}) of
- true ->
- is_pure_expr_list(As, Check);
- false ->
- false
- end;
- call ->
- Module = cerl:call_module(E),
- Name = cerl:call_name(E),
- case cerl:is_c_atom(Module) and cerl:is_c_atom(Name) of
- true ->
- M = cerl:atom_val(Module),
- F = cerl:atom_val(Name),
- As = cerl:call_args(E),
- case Check(pure, {M, F, length(As)}) of
- true ->
- is_pure_expr_list(As, Check);
- false ->
- false
- end;
- false ->
- false % Call to unknown function
- end;
- _ ->
- false
- end.
-
-is_pure_expr_list([E | Es], Check) ->
- case is_pure_expr(E, Check) of
- true ->
- is_pure_expr_list(Es, Check);
- false ->
- false
- end;
-is_pure_expr_list([], _Check) ->
- true.
-
-
-%% Peephole optimizations
-%%
-%% This is only intended to be a light-weight cleanup optimizer,
-%% removing small things that may e.g. have been generated by other
-%% optimization passes or in the translation from higher-level code.
-%% It is not recursive in general - it only descends until it can do no
-%% more work in the current context.
-%%
-%% To expose hidden cases of final expressions (enabling last call
-%% optimization), we try to remove all trivial let-bindings (`let X = Y
-%% in X', `let X = Y in Y', `let X = Y in let ... in ...', `let X = let
-%% ... in ... in ...', etc.). We do not, however, try to recognize any
-%% other similar cases, even for simple `case'-expressions like `case E
-%% of X -> X end', or simultaneous multiple-value bindings.
-
--spec reduce_expr(cerl:cerl()) -> cerl:cerl().
-
-reduce_expr(E) ->
- Check = fun default_check/2,
- reduce_expr(E, Check).
-
--spec reduce_expr(cerl:cerl(), check_fun()) -> cerl:cerl().
-
-reduce_expr(E, Check) ->
- case cerl:type(E) of
- values ->
- case cerl:values_es(E) of
- [E1] ->
- %% Not really an "optimization" in itself, but
- %% enables other rewritings by removing the wrapper.
- reduce_expr(E1, Check);
- _ ->
- E
- end;
- 'seq' ->
- A = reduce_expr(cerl:seq_arg(E), Check),
- B = reduce_expr(cerl:seq_body(E), Check),
- %% `do <E1> <E2>' is equivalent to `<E2>' if `<E1>' is
- %% "safe" (cannot effect the behaviour in any way).
- case is_safe_expr(A, Check) of
- true ->
- B;
- false ->
- case cerl:is_c_seq(B) of
- true ->
- %% Rewrite `do <E1> do <E2> <E3>' to `do do
- %% <E1> <E2> <E3>' so that the "body" of the
- %% outermost seq-operator is the expression
- %% which produces the final result (i.e.,
- %% E3). This can make other optimizations
- %% easier; see `let'.
- B1 = cerl:seq_arg(B),
- B2 = cerl:seq_body(B),
- cerl:c_seq(cerl:c_seq(A, B1), B2);
- false ->
- cerl:c_seq(A, B)
- end
- end;
- 'let' ->
- A = reduce_expr(cerl:let_arg(E), Check),
- case cerl:is_c_seq(A) of
- true ->
- %% `let X = do <E1> <E2> in Y' is equivalent to `do
- %% <E1> let X = <E2> in Y'. Note that `<E2>' cannot
- %% be a seq-operator, due to the `seq' optimization.
- A1 = cerl:seq_arg(A),
- A2 = cerl:seq_body(A),
- E1 = cerl:update_c_let(E, cerl:let_vars(E),
- A2, cerl:let_body(E)),
- cerl:c_seq(A1, reduce_expr(E1, Check));
- false ->
- B = reduce_expr(cerl:let_body(E), Check),
- Vs = cerl:let_vars(E),
- %% We give up if the body does not reduce to a
- %% single variable. This is not a generic copy
- %% propagation.
- case cerl:type(B) of
- var when length(Vs) =:= 1 ->
- %% We have `let <V1> = <E> in <V2>':
- [V] = Vs,
- N1 = cerl:var_name(V),
- N2 = cerl:var_name(B),
- if N1 =:= N2 ->
- %% `let X = <E> in X' equals `<E>'
- A;
- true ->
- %% `let X = <E> in Y' when X and Y
- %% are different variables is
- %% equivalent to `do <E> Y'.
- reduce_expr(cerl:c_seq(A, B), Check)
- end;
- literal ->
- %% `let X = <E> in T' when T is a literal
- %% term is equivalent to `do <E> T'.
- reduce_expr(cerl:c_seq(A, B), Check);
- _ ->
- cerl:update_c_let(E, Vs, A, B)
- end
- end;
- 'try' ->
- %% Get rid of unnecessary try-expressions.
- A = reduce_expr(cerl:try_arg(E), Check),
- B = reduce_expr(cerl:try_body(E), Check),
- case is_safe_expr(A, Check) of
- true ->
- B;
- false ->
- cerl:update_c_try(E, A, cerl:try_vars(E), B,
- cerl:try_evars(E),
- cerl:try_handler(E))
- end;
- 'catch' ->
- %% Just a simpler form of try-expressions.
- B = reduce_expr(cerl:catch_body(E), Check),
- case is_safe_expr(B, Check) of
- true ->
- B;
- false ->
- cerl:update_c_catch(E, B)
- end;
- _ ->
- E
- end.
diff --git a/lib/dialyzer/src/cerl_pmatch.erl b/lib/dialyzer/src/cerl_pmatch.erl
deleted file mode 100644
index 66fce3c8eb..0000000000
--- a/lib/dialyzer/src/cerl_pmatch.erl
+++ /dev/null
@@ -1,620 +0,0 @@
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% @copyright 2000-2006 Richard Carlsson
-%% @author Richard Carlsson <carlsson.richard@gmail.com>
-%%
-%% @doc Core Erlang pattern matching compiler.
-%%
-%% <p>For reference, see Simon L. Peyton Jones "The Implementation of
-%% Functional Programming Languages", chapter 5 (by Phil Wadler).</p>
-%%
-%% @type cerl() = cerl:cerl().
-%% Abstract Core Erlang syntax trees.
-%% @type cerl_records() = cerl:cerl_records().
-%% An explicit record representation of Core Erlang syntax trees.
-
--module(cerl_pmatch).
-
-%%-define(NO_UNUSED, true).
-
--export([clauses/2]).
--ifndef(NO_UNUSED).
--export([transform/2, core_transform/2, expr/2]).
--endif.
-
--import(lists, [all/2, splitwith/2, foldr/3, keysort/2, foldl/3,
- mapfoldl/3]).
-
--define(binary_id, {binary}).
--define(cons_id, {cons}).
--define(tuple_id, {tuple}).
--define(literal_id(V), V).
-
-
-%% @spec core_transform(Module::cerl_records(), Options::[term()]) ->
-%% cerl_records()
-%%
-%% @doc Transforms a module represented by records. See
-%% <code>transform/2</code> for details.
-%%
-%% <p>Use the compiler option <code>{core_transform, cerl_pmatch}</code>
-%% to insert this function as a compilation pass.</p>
-%%
-%% @see transform/2
-
--ifndef(NO_UNUSED).
--spec core_transform(cerl:c_module(), [_]) -> cerl:c_module().
-
-core_transform(M, Opts) ->
- cerl:to_records(transform(cerl:from_records(M), Opts)).
--endif. % NO_UNUSED
-%% @clear
-
-
-%% @spec transform(Module::cerl(), Options::[term()]) -> cerl()
-%%
-%% @doc Rewrites all <code>case</code>-clauses in <code>Module</code>.
-%% <code>receive</code>-clauses are not affected. Currently, no options
-%% are available.
-%%
-%% @see clauses/2
-%% @see expr/2
-%% @see core_transform/2
-
--ifndef(NO_UNUSED).
--spec transform(cerl:cerl(), [_]) -> cerl:cerl().
-
-transform(M, _Opts) ->
- expr(M, env__empty()).
--endif. % NO_UNUSED
-%% @clear
-
-
-%% @spec clauses(Clauses::[Clause], Env) -> {Expr, Vars}
-%% Clause = cerl()
-%% Expr = cerl()
-%% Vars = [cerl()]
-%% Env = rec_env:environment()
-%%
-%% @doc Rewrites a sequence of clauses to an equivalent expression,
-%% removing as much repeated testing as possible. Returns a pair
-%% <code>{Expr, Vars}</code>, where <code>Expr</code> is the resulting
-%% expression, and <code>Vars</code> is a list of new variables (i.e.,
-%% not already in the given environment) to be bound to the arguments to
-%% the switch. The following is a typical example (assuming
-%% <code>E</code> is a Core Erlang case expression):
-%% <pre>
-%% handle_case(E, Env) ->
-%% Cs = case_clauses(E),
-%% {E1, Vs} = cerl_pmatch(Cs, Env),
-%% c_let(Vs, case_arg(E), E1).
-%% </pre>
-%%
-%% <p>The environment is used for generating new variables which do not
-%% shadow existing bindings.</p>
-%%
-%% @see rec_env
-%% @see expr/2
-%% @see transform/2
-
--spec clauses([cerl:cerl(),...], rec_env:environment()) ->
- {cerl:cerl(), [cerl:cerl()]}.
-
-clauses(Cs, Env) ->
- clauses(Cs, none, Env).
-
-clauses([C | _] = Cs, Else, Env) ->
- Vs = new_vars(cerl:clause_arity(C), Env),
- E = match(Vs, Cs, Else, add_vars(Vs, Env)),
- {E, Vs}.
-
-%% The implementation very closely follows that described in the book.
-
-match([], Cs, Else, _Env) ->
- %% If the "default action" is the atom 'none', it is simply not
- %% added; otherwise it is put in the body of a final catch-all
- %% clause (which is often removed by the below optimization).
- Cs1 = if Else =:= none -> Cs;
- true -> Cs ++ [cerl:c_clause([], Else)]
- end,
- %% This clause reduction is an important optimization. It selects a
- %% clause body if possible, and otherwise just removes dead clauses.
- case cerl_clauses:reduce(Cs1) of
- {true, {C, []}} -> % if we get bindings, something is wrong!
- cerl:clause_body(C);
- {false, Cs2} ->
- %% This happens when guards are nontrivial.
- cerl:c_case(cerl:c_values([]), Cs2)
- end;
-match([V | _] = Vs, Cs, Else, Env) ->
- foldr(fun (CsF, ElseF) ->
- match_var_con(Vs, CsF, ElseF, Env)
- end,
- Else,
- group([unalias(C, V) || C <- Cs], fun is_var_clause/1)).
-
-group([], _F) ->
- [];
-group([X | _] = Xs, F) ->
- group(Xs, F, F(X)).
-
-group(Xs, F, P) ->
- {First, Rest} = splitwith(fun (X) -> F(X) =:= P end, Xs),
- [First | group(Rest, F)].
-
-is_var_clause(C) ->
- cerl:is_c_var(hd(cerl:clause_pats(C))).
-
-%% To avoid code duplication, if the 'Else' expression is too big, we
-%% put it in a local function definition instead, and replace it with a
-%% call. (Note that it is important that 'is_lightweight' does not yield
-%% 'true' for a simple function application, or we will create a lot of
-%% unnecessary extra functions.)
-
-match_var_con(Vs, Cs, none = Else, Env) ->
- match_var_con_1(Vs, Cs, Else, Env);
-match_var_con(Vs, Cs, Else, Env) ->
- case is_lightweight(Else) of
- true ->
- match_var_con_1(Vs, Cs, Else, Env);
- false ->
- F = new_fvar("match_", 0, Env),
- Else1 = cerl:c_apply(F, []),
- Env1 = add_vars([F], Env),
- cerl:c_letrec([{F, cerl:c_fun([], Else)}],
- match_var_con_1(Vs, Cs, Else1, Env1))
- end.
-
-match_var_con_1(Vs, Cs, Else, Env) ->
- case is_var_clause(hd(Cs)) of
- true ->
- match_var(Vs, Cs, Else, Env);
- false ->
- match_con(Vs, Cs, Else, Env)
- end.
-
-match_var([V | Vs], Cs, Else, Env) ->
- Cs1 = [begin
- [P | Ps] = cerl:clause_pats(C),
- G = make_let([P], V, cerl:clause_guard(C)),
- B = make_let([P], V, cerl:clause_body(C)),
- cerl:update_c_clause(C, Ps, G, B)
- end
- || C <- Cs],
- match(Vs, Cs1, Else, Env).
-
-%% Since Erlang is dynamically typed, we must include the possibility
-%% that none of the constructors in the group will match, and in that
-%% case the "Else" code will be executed (unless it is 'none'), in the
-%% body of a final catch-all clause.
-
-match_con([V | Vs], Cs, Else, Env) ->
- case group_con(Cs) of
- [{_, _, Gs}] ->
- %% Don't create a group type switch if there is only one
- %% such group
- make_switch(V, [match_congroup(DG, Vs, CsG, Else, Env)
- || {DG, _, CsG} <- Gs],
- Else, Env);
- Ts ->
- Cs1 = [match_typegroup(T, V, Vs, Gs, Else, Env)
- || {T, _, Gs} <- Ts],
- make_switch(V, Cs1, Else, Env)
- end.
-
-
-match_typegroup(_T, _V, Vs, [{D, _, Cs}], Else, Env) when element(1, D) /= ?binary_id ->
- %% Don't create a group type switch if there is only one constructor
- %% in the group. (Note that this always happens for '[]'.)
- %% Special case for binaries which always get a group switch
- match_congroup(D, Vs, Cs, Else, Env);
-match_typegroup(T, V, Vs, Gs, Else, Env) ->
- Body = make_switch(V, [match_congroup(D, Vs, Cs, Else, Env)
- || {D, _, Cs} <- Gs],
- Else, Env),
- typetest_clause(T, V, Body, Env).
-
-match_congroup({?binary_id, Segs}, Vs, Cs, Else, Env) ->
- Body = match(Vs, Cs, Else, Env),
- cerl:c_clause([make_pat(?binary_id, Segs)], Body);
-
-match_congroup({D, A}, Vs, Cs, Else, Env) ->
- Vs1 = new_vars(A, Env),
- Body = match(Vs1 ++ Vs, Cs, Else, add_vars(Vs1, Env)),
- cerl:c_clause([make_pat(D, Vs1)], Body).
-
-make_switch(V, Cs, Else, Env) ->
- cerl:c_case(V, if Else =:= none -> Cs;
- true -> Cs ++ [cerl:c_clause([new_var(Env)],
- Else)]
- end).
-
-%% We preserve the relative order of different-type constructors as they
-%% were originally listed. This is done by tracking the clause numbers.
-
-group_con(Cs) ->
- {Cs1, _} = mapfoldl(fun (C, N) ->
- [P | Ps] = cerl:clause_pats(C),
- Ps1 = sub_pats(P) ++ Ps,
- G = cerl:clause_guard(C),
- B = cerl:clause_body(C),
- C1 = cerl:update_c_clause(C, Ps1, G, B),
- D = con_desc(P),
- {{D, N, C1}, N + 1}
- end,
- 0, Cs),
- %% Sort and group constructors.
- Css = group(keysort(1, Cs1), fun ({D,_,_}) -> D end),
- %% Sort each group "back" by line number, and move the descriptor
- %% and line number to the wrapper for the group.
- Gs = [finalize_congroup(C) || C <- Css],
- %% Group by type only (put e.g. different-arity tuples together).
- Gss = group(Gs, fun ({D,_,_}) -> con_desc_type(D) end),
- %% Sort and wrap the type groups.
- Ts = [finalize_typegroup(G) || G <- Gss],
- %% Sort type-groups by first clause order
- keysort(2, Ts).
-
-finalize_congroup(Cs) ->
- [{D,N,_}|_] = Cs1 = keysort(2, Cs),
- {D, N, [C || {_,_,C} <- Cs1]}.
-
-finalize_typegroup(Gs) ->
- [{D,N,_}|_] = Gs1 = keysort(2, Gs),
- {con_desc_type(D), N, Gs1}.
-
-%% Since Erlang clause patterns can contain "alias patterns", we must
-%% eliminate these, by turning them into let-definitions in the guards
-%% and bodies of the clauses.
-
-unalias(C, V) ->
- [P | Ps] = cerl:clause_pats(C),
- B = cerl:clause_body(C),
- G = cerl:clause_guard(C),
- unalias(P, V, Ps, B, G, C).
-
-unalias(P, V, Ps, B, G, C) ->
- case cerl:type(P) of
- alias ->
- V1 = cerl:alias_var(P),
- B1 = make_let([V1], V, B),
- G1 = make_let([V1], V, G),
- unalias(cerl:alias_pat(P), V, Ps, B1, G1, C);
- _ ->
- cerl:update_c_clause(C, [P | Ps], G, B)
- end.
-
-%% Generating a type-switch clause
-
-typetest_clause([], _V, E, _Env) ->
- cerl:c_clause([cerl:c_nil()], E);
-typetest_clause(atom, V, E, _Env) ->
- typetest_clause_1(is_atom, V, E);
-typetest_clause(integer, V, E, _Env) ->
- typetest_clause_1(is_integer, V, E);
-typetest_clause(float, V, E, _Env) ->
- typetest_clause_1(is_float, V, E);
-typetest_clause(cons, _V, E, Env) ->
- [V1, V2] = new_vars(2, Env),
- cerl:c_clause([cerl:c_cons(V1, V2)], E); % there is no 'is cons'
-typetest_clause(tuple, V, E, _Env) ->
- typetest_clause_1(is_tuple, V, E);
-typetest_clause(binary, V, E, _Env) ->
- typetest_clause_1(is_binary, V, E).
-
-typetest_clause_1(T, V, E) ->
- cerl:c_clause([V], cerl:c_call(cerl:c_atom('erlang'),
- cerl:c_atom(T), [V]), E).
-
-%% This returns a constructor descriptor, to be used for grouping and
-%% pattern generation. It consists of an identifier term and the arity.
-
-con_desc(E) ->
- case cerl:type(E) of
- cons -> {?cons_id, 2};
- tuple -> {?tuple_id, cerl:tuple_arity(E)};
- binary -> {?binary_id, cerl:binary_segments(E)};
- literal ->
- case cerl:concrete(E) of
- [_|_] -> {?cons_id, 2};
- T when is_tuple(T) -> {?tuple_id, tuple_size(T)};
- V -> {?literal_id(V), 0}
- end;
- _ ->
- throw({bad_constructor, E})
- end.
-
-%% This returns the type class for a constructor descriptor, for
-%% grouping of clauses. It does not distinguish between tuples of
-%% different arity, nor between different values of atoms, integers and
-%% floats.
-
-con_desc_type({?literal_id([]), _}) -> [];
-con_desc_type({?literal_id(V), _}) when is_atom(V) -> atom;
-con_desc_type({?literal_id(V), _}) when is_integer(V) -> integer;
-con_desc_type({?literal_id(V), _}) when is_float(V) -> float;
-con_desc_type({?cons_id, 2}) -> cons;
-con_desc_type({?tuple_id, _}) -> tuple;
-con_desc_type({?binary_id, _}) -> binary.
-
-%% This creates a new constructor pattern from a type descriptor and a
-%% list of variables.
-
-make_pat(?cons_id, [V1, V2]) -> cerl:c_cons(V1, V2);
-make_pat(?tuple_id, Vs) -> cerl:c_tuple(Vs);
-make_pat(?binary_id, Segs) -> cerl:c_binary(Segs);
-make_pat(?literal_id(Val), []) -> cerl:abstract(Val).
-
-%% This returns the list of subpatterns of a constructor pattern.
-
-sub_pats(E) ->
- case cerl:type(E) of
- cons ->
- [cerl:cons_hd(E), cerl:cons_tl(E)];
- tuple ->
- cerl:tuple_es(E);
- binary ->
- [];
- literal ->
- case cerl:concrete(E) of
- [H|T] -> [cerl:abstract(H), cerl:abstract(T)];
- T when is_tuple(T) -> [cerl:abstract(X)
- || X <- tuple_to_list(T)];
- _ -> []
- end;
- _ ->
- throw({bad_constructor_pattern, E})
- end.
-
-%% This avoids generating stupid things like "let X = ... in 'true'",
-%% and "let X = Y in X", keeping the generated code cleaner. It also
-%% prevents expressions from being considered "non-lightweight" when
-%% code duplication is disallowed (see is_lightweight for details).
-
-make_let(Vs, A, B) ->
- cerl_lib:reduce_expr(cerl:c_let(Vs, A, B)).
-
-%% ---------------------------------------------------------------------
-%% Rewriting a module or other expression:
-
-%% @spec expr(Expression::cerl(), Env) -> cerl()
-%% Env = rec_env:environment()
-%%
-%% @doc Rewrites all <code>case</code>-clauses in
-%% <code>Expression</code>. <code>receive</code>-clauses are not
-%% affected.
-%%
-%% <p>The environment is used for generating new variables which do not
-%% shadow existing bindings.</p>
-%%
-%% @see clauses/2
-%% @see rec_env
-
--ifndef(NO_UNUSED).
--spec expr(cerl:cerl(), rec_env:environment()) -> cerl:cerl().
-
-expr(E, Env) ->
- case cerl:type(E) of
- binary ->
- Es = expr_list(cerl:binary_segments(E), Env),
- cerl:update_c_binary(E, Es);
- bitstr ->
- V = expr(cerl:bitstr_val(E), Env),
- Sz = expr(cerl:bitstr_size(E), Env),
- Unit = expr(cerl:bitstr_unit(E), Env),
- Type = expr(cerl:bitstr_type(E), Env),
- cerl:update_c_bitstr(E, V, Sz, Unit, Type, cerl:bitstr_flags(E));
- literal ->
- E;
- var ->
- E;
- values ->
- Es = expr_list(cerl:values_es(E), Env),
- cerl:update_c_values(E, Es);
- cons ->
- H = expr(cerl:cons_hd(E), Env),
- T = expr(cerl:cons_tl(E), Env),
- cerl:update_c_cons(E, H, T);
- tuple ->
- Es = expr_list(cerl:tuple_es(E), Env),
- cerl:update_c_tuple(E, Es);
- 'let' ->
- A = expr(cerl:let_arg(E), Env),
- Vs = cerl:let_vars(E),
- Env1 = add_vars(Vs, Env),
- B = expr(cerl:let_body(E), Env1),
- cerl:update_c_let(E, Vs, A, B);
- seq ->
- A = expr(cerl:seq_arg(E), Env),
- B = expr(cerl:seq_body(E), Env),
- cerl:update_c_seq(E, A, B);
- apply ->
- Op = expr(cerl:apply_op(E), Env),
- As = expr_list(cerl:apply_args(E), Env),
- cerl:update_c_apply(E, Op, As);
- call ->
- M = expr(cerl:call_module(E), Env),
- N = expr(cerl:call_name(E), Env),
- As = expr_list(cerl:call_args(E), Env),
- cerl:update_c_call(E, M, N, As);
- primop ->
- As = expr_list(cerl:primop_args(E), Env),
- cerl:update_c_primop(E, cerl:primop_name(E), As);
- 'case' ->
- A = expr(cerl:case_arg(E), Env),
- Cs = expr_list(cerl:case_clauses(E), Env),
- {E1, Vs} = clauses(Cs, Env),
- make_let(Vs, A, E1);
- clause ->
- Vs = cerl:clause_vars(E),
- Env1 = add_vars(Vs, Env),
- G = expr(cerl:clause_guard(E), Env1),
- B = expr(cerl:clause_body(E), Env1),
- cerl:update_c_clause(E, cerl:clause_pats(E), G, B);
- 'fun' ->
- Vs = cerl:fun_vars(E),
- Env1 = add_vars(Vs, Env),
- B = expr(cerl:fun_body(E), Env1),
- cerl:update_c_fun(E, Vs, B);
- 'receive' ->
- %% NOTE: No pattern matching compilation is done here! The
- %% receive-clauses and patterns cannot be staged as long as
- %% we are working with "normal" Core Erlang.
- Cs = expr_list(cerl:receive_clauses(E), Env),
- T = expr(cerl:receive_timeout(E), Env),
- A = expr(cerl:receive_action(E), Env),
- cerl:update_c_receive(E, Cs, T, A);
- 'try' ->
- A = expr(cerl:try_arg(E), Env),
- Vs = cerl:try_vars(E),
- B = expr(cerl:try_body(E), add_vars(Vs, Env)),
- Evs = cerl:try_evars(E),
- H = expr(cerl:try_handler(E), add_vars(Evs, Env)),
- cerl:update_c_try(E, A, Vs, B, Evs, H);
- 'catch' ->
- B = expr(cerl:catch_body(E), Env),
- cerl:update_c_catch(E, B);
- letrec ->
- Ds = cerl:letrec_defs(E),
- Env1 = add_defs(Ds, Env),
- Ds1 = defs(Ds, Env1),
- B = expr(cerl:letrec_body(E), Env1),
- cerl:update_c_letrec(E, Ds1, B);
- module ->
- Ds = cerl:module_defs(E),
- Env1 = add_defs(Ds, Env),
- Ds1 = defs(Ds, Env1),
- cerl:update_c_module(E, cerl:module_name(E),
- cerl:module_exports(E),
- cerl:module_attrs(E), Ds1)
- end.
-
-expr_list(Es, Env) ->
- [expr(E, Env) || E <- Es].
-
-defs(Ds, Env) ->
- [{V, expr(F, Env)} || {V, F} <- Ds].
--endif. % NO_UNUSED
-%% @clear
-
-%% ---------------------------------------------------------------------
-%% Support functions
-
-new_var(Env) ->
- Name = env__new_vname(Env),
- cerl:c_var(Name).
-
-new_vars(N, Env) ->
- [cerl:c_var(V) || V <- env__new_vnames(N, Env)].
-
-new_fvar(A, N, Env) ->
- Name = env__new_fname(A, N, Env),
- cerl:c_var(Name).
-
-add_vars(Vs, Env) ->
- foldl(fun (V, E) -> env__bind(cerl:var_name(V), [], E) end, Env, Vs).
-
--ifndef(NO_UNUSED).
-add_defs(Ds, Env) ->
- foldl(fun ({V, _F}, E) ->
- env__bind(cerl:var_name(V), [], E)
- end, Env, Ds).
--endif. % NO_UNUSED
-
-%% This decides whether an expression is worth lifting out to a separate
-%% function instead of duplicating the code. In other words, whether its
-%% cost is about the same or smaller than that of a local function call.
-%% Note that variables must always be "lightweight"; otherwise, they may
-%% get lifted out of the case switch that introduces them.
-
-is_lightweight(E) ->
- case get('cerl_pmatch_duplicate_code') of
- never -> cerl:type(E) =:= var; % Avoids all code duplication
- always -> true; % Does not lift code to new functions
- _ -> is_lightweight_1(E)
- end.
-
-is_lightweight_1(E) ->
- case cerl:type(E) of
- var -> true;
- literal -> true;
- 'fun' -> true;
- values -> all(fun is_simple/1, cerl:values_es(E));
- cons -> is_simple(cerl:cons_hd(E))
- andalso is_simple(cerl:cons_tl(E));
- tuple -> all(fun is_simple/1, cerl:tuple_es(E));
- 'let' -> (is_simple(cerl:let_arg(E)) andalso
- is_lightweight_1(cerl:let_body(E)));
- seq -> (is_simple(cerl:seq_arg(E)) andalso
- is_lightweight_1(cerl:seq_body(E)));
- primop ->
- all(fun is_simple/1, cerl:primop_args(E));
- apply ->
- is_simple(cerl:apply_op(E))
- andalso all(fun is_simple/1, cerl:apply_args(E));
- call ->
- is_simple(cerl:call_module(E))
- andalso is_simple(cerl:call_name(E))
- andalso all(fun is_simple/1, cerl:call_args(E));
- _ ->
- %% The default is to lift the code to a new function.
- false
- end.
-
-%% "Simple" things have no (or negligible) runtime cost and are free
-%% from side effects.
-
-is_simple(E) ->
- case cerl:type(E) of
- var -> true;
- literal -> true;
- values -> all(fun is_simple/1, cerl:values_es(E));
- _ -> false
- end.
-
-
-%% ---------------------------------------------------------------------
-%% Abstract datatype: environment()
-
-env__bind(Key, Val, Env) ->
- rec_env:bind(Key, Val, Env).
-
--ifndef(NO_UNUSED).
-%% env__bind_recursive(Ks, Vs, F, Env) ->
-%% rec_env:bind_recursive(Ks, Vs, F, Env).
-
-%% env__lookup(Key, Env) ->
-%% rec_env:lookup(Key, Env).
-
-%% env__get(Key, Env) ->
-%% rec_env:get(Key, Env).
-
-%% env__is_defined(Key, Env) ->
-%% rec_env:is_defined(Key, Env).
-
-env__empty() ->
- rec_env:empty().
--endif. % NO_UNUSED
-
-env__new_vname(Env) ->
- rec_env:new_key(Env).
-
-env__new_vnames(N, Env) ->
- rec_env:new_keys(N, Env).
-
-env__new_fname(F, A, Env) ->
- rec_env:new_key(fun (X) ->
- S = integer_to_list(X),
- {list_to_atom(F ++ S), A}
- end,
- Env).
diff --git a/lib/dialyzer/src/cerl_typean.erl b/lib/dialyzer/src/cerl_typean.erl
deleted file mode 100644
index 3deb4af3e1..0000000000
--- a/lib/dialyzer/src/cerl_typean.erl
+++ /dev/null
@@ -1,994 +0,0 @@
-%% -*- erlang-indent-level: 4 -*-
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% @copyright 2001-2002 Richard Carlsson
-%% @author Richard Carlsson <carlsson.richard@gmail.com>
-%% @doc Type analysis of Core Erlang programs.
-
-%% TODO: filters must handle conjunctions for better precision!
-%% TODO: should get filters from patterns as well as guards.
-%% TODO: unused functions are being included in the analysis.
-
--module(cerl_typean).
-
--export([core_transform/2, analyze/1, pp_hook/0]).
-%%-export([analyze/2, analyze/5, annotate/1, annotate/2, annotate/5]).
-
--import(erl_types, [t_any/0, t_atom/0, t_atom_vals/1, t_binary/0,
- t_cons/2, t_cons_hd/1, t_cons_tl/1, t_float/0,
- t_fun/0, t_fun/2, t_from_range/2, t_from_term/1,
- t_inf/2, t_integer/0,
- t_is_any/1, t_is_atom/1, t_is_cons/1, t_is_list/1,
- t_is_maybe_improper_list/1, t_is_none/1, t_is_tuple/1,
- t_limit/2, t_list_elements/1, t_maybe_improper_list/0,
- t_none/0, t_number/0, t_pid/0, t_port/0, t_product/1,
- t_reference/0, t_sup/2, t_to_tlist/1, t_tuple/0, t_tuple/1,
- t_tuple_args/1, t_tuple_size/1, t_tuple_subtypes/1]).
-
--import(cerl, [ann_c_fun/3, ann_c_var/2, alias_pat/1, alias_var/1,
- apply_args/1, apply_op/1, atom_val/1, bitstr_size/1,
- bitstr_val/1, bitstr_type/1, bitstr_flags/1, binary_segments/1,
- c_letrec/2, c_nil/0,
- c_values/1, call_args/1, call_module/1, call_name/1,
- case_arg/1, case_clauses/1, catch_body/1, clause_body/1,
- clause_guard/1, clause_pats/1, concrete/1, cons_hd/1,
- cons_tl/1, fun_body/1, fun_vars/1, get_ann/1, int_val/1,
- is_c_atom/1, is_c_int/1, let_arg/1, let_body/1, let_vars/1,
- letrec_body/1, letrec_defs/1, module_defs/1,
- module_defs/1, module_exports/1, pat_vars/1,
- primop_args/1, primop_name/1, receive_action/1,
- receive_clauses/1, receive_timeout/1, seq_arg/1,
- seq_body/1, set_ann/2, try_arg/1, try_body/1,
- try_evars/1, try_handler/1, try_vars/1, tuple_arity/1,
- tuple_es/1, type/1, values_es/1, var_name/1]).
-
--import(cerl_trees, [get_label/1]).
-
--ifdef(DEBUG).
--define(ANNOTATE(X), case erl_types:t_to_string(X) of Q when length(Q) < 255 -> list_to_atom(Q); Q -> Q end).
--else.
--define(ANNOTATE(X), X).
--endif.
-
-%% Limit for type representation depth.
--define(DEF_LIMIT, 3).
-
-
-%% @spec core_transform(Module::cerl_records(), Options::[term()]) ->
-%% cerl_records()
-%%
-%% @doc Annotates a module represented by records with type
-%% information. See <code>annotate/1</code> for details.
-%%
-%% <p>Use the compiler option <code>{core_transform, cerl_typean}</code>
-%% to insert this function as a compilation pass.</p>
-%%
-%% @see module/2
-
--spec core_transform(cerl:cerl(), [term()]) -> cerl:cerl().
-
-core_transform(Code, _Opts) ->
- {Code1, _} = cerl_trees:label(cerl:from_records(Code)),
- %% io:fwrite("Running type analysis..."),
- %% {T1,_} = statistics(runtime),
- {Code2, _, _} = annotate(Code1),
- %% {T2,_} = statistics(runtime),
- %% io:fwrite("(~w ms).\n", [T2 - T1]),
- cerl:to_records(Code2).
-
-
-%% =====================================================================
-%% annotate(Tree) -> {Tree1, Type, Vars}
-%%
-%% Tree = cerl:cerl()
-%%
-%% Analyzes `Tree' (see `analyze') and appends terms `{type, Type}'
-%% to the annotation list of each fun-expression node and
-%% apply-expression node of `Tree', respectively, where `Labels' is
-%% an ordered-set list of labels of fun-expressions in `Tree',
-%% possibly also containing the atom `external', corresponding to
-%% the dependency information derived by the analysis. Any previous
-%% such annotations are removed from `Tree'. `Tree1' is the
-%% modified tree; for details on `OutList', `Outputs' ,
-%% `Dependencies' and `Escapes', see `analyze'.
-%%
-%% Note: `Tree' must be annotated with labels in order to use this
-%% function; see `analyze' for details.
-
-annotate(Tree) ->
- annotate(Tree, ?DEF_LIMIT).
-
-annotate(Tree, Limit) ->
- {_, _, Esc, Dep, Par} = cerl_closurean:analyze(Tree),
- annotate(Tree, Limit, Esc, Dep, Par).
-
-annotate(Tree, Limit, Esc, Dep, Par) ->
- {Type, Out, Vars} = analyze(Tree, Limit, Esc, Dep, Par),
- DelAnn = fun (T) -> set_ann(T, delete_ann(type, get_ann(T))) end,
- SetType = fun (T, Dict) ->
- case dict:find(get_label(T), Dict) of
- {ok, X} ->
- case t_is_any(X) of
- true ->
- DelAnn(T);
- false ->
- set_ann(T, append_ann(type,
- ?ANNOTATE(X),
- get_ann(T)))
- end;
- error ->
- DelAnn(T)
- end
- end,
- F = fun (T) ->
- case type(T) of
- var ->
- SetType(T, Vars);
- apply ->
- SetType(T, Out);
- call ->
- SetType(T, Out);
- primop ->
- SetType(T, Out);
- 'fun' ->
- SetType(T, Out);
- _ ->
- DelAnn(T)
- end
- end,
- {cerl_trees:map(F, Tree), Type, Vars}.
-
-append_ann(Tag, Val, [X | Xs]) ->
- if tuple_size(X) >= 1, element(1, X) =:= Tag ->
- append_ann(Tag, Val, Xs);
- true ->
- [X | append_ann(Tag, Val, Xs)]
- end;
-append_ann(Tag, Val, []) ->
- [{Tag, Val}].
-
-delete_ann(Tag, [X | Xs]) ->
- if tuple_size(X) >= 1, element(1, X) =:= Tag ->
- delete_ann(Tag, Xs);
- true ->
- [X | delete_ann(Tag, Xs)]
- end;
-delete_ann(_, []) ->
- [].
-
-
-%% =====================================================================
-%% analyze(Tree) -> {OutList, Outputs, Dependencies}
-%%
-%% Tree = cerl:cerl()
-%% OutList = [LabelSet] | none
-%% Outputs = dict(integer(), OutList)
-%% Dependencies = dict(integer(), LabelSet)
-%% LabelSet = ordset(Label)
-%% Label = integer() | external
-%%
-%% Analyzes a module or an expression represented by `Tree'.
-%%
-%% The returned `OutList' is a list of sets of labels of
-%% fun-expressions which correspond to the possible closures in the
-%% value list produced by `Tree' (viewed as an expression; the
-%% "value" of a module contains its exported functions). The atom
-%% `none' denotes missing or conflicting information.
-%%
-%% The atom `external' in any label set denotes any possible
-%% function outside `Tree', including those in `Escapes'.
-%%
-%% `Outputs' is a mapping from the labels of fun-expressions in
-%% `Tree' to corresponding lists of sets of labels of
-%% fun-expressions (or the atom `none'), representing the possible
-%% closures in the value lists returned by the respective
-%% functions.
-%%
-%% `Dependencies' is a similar mapping from the labels of
-%% fun-expressions and apply-expressions in `Tree' to sets of
-%% labels of corresponding fun-expressions which may contain call
-%% sites of the functions or be called from the call sites,
-%% respectively. Any such label not defined in `Dependencies'
-%% represents an unreachable function or a dead or faulty
-%% application.
-%%
-%% `Escapes' is the set of labels of fun-expressions in `Tree' such
-%% that corresponding closures may be accessed from outside `Tree'.
-%%
-%% Note: `Tree' must be annotated with labels (as done by the
-%% function `cerl_trees:label/1') in order to use this function.
-%% The label annotation `{label, L}' (where L should be an integer)
-%% must be the first element of the annotation list of each node in
-%% the tree. Instances of variables bound in `Tree' which denote
-%% the same variable must have the same label; apart from this,
-%% labels should be unique. Constant literals do not need to be
-%% labeled.
-
--record(state, {k, vars, out, dep, work, funs, envs}).
-
-%% Note: In order to keep our domain simple, we assume that all remote
-%% calls and primops return a single value, if any.
-
-%% We wrap the given syntax tree T in a fun-expression labeled `top',
-%% which is initially in the set of escaped labels. `top' will be
-%% visited at least once.
-%%
-%% We create a separate function labeled `external', defined as:
-%% "External = fun () -> Any", which will represent any and all
-%% functions outside T, and whose return value has unknown type.
-
--type label() :: integer() | 'external' | 'top'.
--type ordset(X) :: [X]. % XXX: TAKE ME OUT
--type labelset() :: ordset(label()).
--type outlist() :: [labelset()] | 'none'.
-
--spec analyze(cerl:cerl()) -> {outlist(), dict:dict(), dict:dict()}.
-
-analyze(Tree) ->
- analyze(Tree, ?DEF_LIMIT).
-
-analyze(Tree, Limit) ->
- {_, _, Esc, Dep, Par} = cerl_closurean:analyze(Tree),
- analyze(Tree, Limit, Esc, Dep, Par).
-
-analyze(Tree, Limit, Esc0, Dep0, Par) ->
- %% Note that we use different name spaces for variable labels and
- %% function/call site labels. We assume that the labeling of Tree
- %% only uses integers, not atoms.
- LabelExtL = [{label, external}],
- External = ann_c_var(LabelExtL, {external, 1}),
- ExtFun = ann_c_fun(LabelExtL, [], ann_c_var([{label, any}], 'Any')),
-%%% io:fwrite("external fun:\n~s.\n",
-%%% [cerl_prettypr:format(ExtFun, [noann, {paper, 80}])]),
- LabelTopL = [{label, top}],
- Top = ann_c_var(LabelTopL, {top, 0}),
- TopFun = ann_c_fun(LabelTopL, [], Tree),
-
- %% The "start fun" just makes the initialisation easier. It is not
- %% itself in the call graph.
- StartFun = ann_c_fun([{label, start}], [],
- c_letrec([{External, ExtFun}, {Top, TopFun}],
- c_nil())),
-%%% io:fwrite("start fun:\n~s.\n",
-%%% [cerl_prettypr:format(StartFun, [{paper, 80}])]),
-
- %% Gather a database of all fun-expressions in Tree and initialise
- %% their outputs and parameter variables. All escaping functions can
- %% receive any values as inputs. Also add an extra dependency edge
- %% from each fun-expression label to its parent fun-expression.
-%%% io:fwrite("Escape: ~p.\n",[Esc0]),
- Esc = sets:from_list(Esc0),
- Any = t_any(),
- None = t_none(),
- Funs0 = dict:new(),
- Vars0 = dict:store(any, Any, dict:new()),
- Out0 = dict:store(top, None,
- dict:store(external, None, dict:new())),
- Envs0 = dict:store(top, dict:new(),
- dict:store(external, dict:new(), dict:new())),
- F = fun (T, S = {Fs, Vs, Os, Es}) ->
- case type(T) of
- 'fun' ->
- L = get_label(T),
- As = fun_vars(T),
- X = case sets:is_element(L, Esc) of
- true -> Any;
- false -> None
- end,
- {dict:store(L, T, Fs),
- bind_vars_single(As, X, Vs),
- dict:store(L, None, Os),
- dict:store(L, dict:new(), Es)};
- _ ->
- S
- end
- end,
- {Funs, Vars, Out, Envs} = cerl_trees:fold(F, {Funs0, Vars0, Out0,
- Envs0}, StartFun),
-
- %% Add dependencies from funs to their parent funs.
- Dep = lists:foldl(fun ({L, L1}, D) -> add_dep(L, L1, D) end,
- Dep0, dict:to_list(Par)),
-
- %% Enter the fixpoint iteration at the StartFun.
- St = loop(TopFun, top, #state{vars = Vars,
- out = Out,
- dep = Dep,
- work = init_work(),
- funs = Funs,
- envs = Envs,
- k = Limit}),
- {dict:fetch(top, St#state.out),
- tidy_dict([top, external], St#state.out),
- tidy_dict([any], St#state.vars)}.
-
-tidy_dict([X | Xs], D) ->
- tidy_dict(Xs, dict:erase(X, D));
-tidy_dict([], D) ->
- D.
-
-loop(T, L, St0) ->
-%%% io:fwrite("analyzing: ~w.\n",[L]),
-%%% io:fwrite("work: ~w.\n", [Queue0]),
- Env = dict:fetch(L, St0#state.envs),
- X0 = dict:fetch(L, St0#state.out),
- {X1, St1} = visit(fun_body(T), Env, St0),
- X = limit(X1, St1#state.k),
- {W, M} = case equal(X0, X) of
- true ->
- {St1#state.work, St1#state.out};
- false ->
-%%% io:fwrite("out (~w) changed: ~s <- ~s.\n",
-%%% [L, erl_types:t_to_string(X),
-%%% erl_types:t_to_string(X0)]),
- M1 = dict:store(L, X, St1#state.out),
- case dict:find(L, St1#state.dep) of
- {ok, S} ->
-%%% io:fwrite("adding work: ~w.\n", [S]),
- {add_work(S, St1#state.work), M1};
- error ->
- {St1#state.work, M1}
- end
- end,
- St2 = St1#state{out = M},
- case take_work(W) of
- {ok, L1, W1} ->
- T1 = dict:fetch(L1, St2#state.funs),
- loop(T1, L1, St2#state{work = W1});
- none ->
- St2
- end.
-
-visit(T, Env, St) ->
- case type(T) of
- literal ->
- {t_from_term(concrete(T)), St};
- var ->
- %% If a variable is not already in the store at this point,
- %% we initialize it to 'none()'.
- L = get_label(T),
- Vars = St#state.vars,
- case dict:find(L, Vars) of
- {ok, X} ->
- case dict:find(var_name(T), Env) of
- {ok, X1} ->
-%%% io:fwrite("filtered variable reference: ~w:~s.\n",
-%%% [var_name(T), erl_types:t_to_string(X1)]),
- {meet(X, X1), St};
- error ->
- {X, St}
- end;
- error ->
- X = t_none(),
- Vars1 = dict:store(L, X, Vars),
- St1 = St#state{vars = Vars1},
- {X, St1}
- end;
- 'fun' ->
- %% Must revisit the fun also, because its environment might
- %% have changed. (We don't keep track of such dependencies.)
- L = get_label(T),
- Xs = [dict:fetch(get_label(V), St#state.vars)
- || V <- fun_vars(T)],
- X = dict:fetch(L, St#state.out),
- St1 = St#state{work = add_work([L], St#state.work),
- envs = dict:store(L, Env, St#state.envs)},
- {t_fun(Xs, X), St1};
- values ->
- {Xs, St1} = visit_list(values_es(T), Env, St),
- {t_product(Xs), St1};
- cons ->
- {[X1, X2], St1} = visit_list([cons_hd(T), cons_tl(T)], Env, St),
- {t_cons(X1, X2), St1};
- tuple ->
- {Xs, St1} = visit_list(tuple_es(T), Env, St),
- {t_tuple(Xs), St1};
- 'let' ->
- {X, St1} = visit(let_arg(T), Env, St),
- LetVars = let_vars(T),
- St1Vars = St1#state.vars,
- Vars = case t_is_any(X) orelse t_is_none(X) of
- true ->
- bind_vars_single(LetVars, X, St1Vars);
- false ->
- bind_vars(LetVars, t_to_tlist(X), St1Vars)
- end,
- visit(let_body(T), Env, St1#state{vars = Vars});
- seq ->
- {_, St1} = visit(seq_arg(T), Env, St),
- visit(seq_body(T), Env, St1);
- apply ->
- {_F, St1} = visit(apply_op(T), Env, St),
- {As, St2} = visit_list(apply_args(T), Env, St1),
- L = get_label(T),
- Ls = get_deps(L, St#state.dep),
- Out = St2#state.out,
- X = join_list([dict:fetch(L1, Out) || L1 <- Ls]),
- Out1 = dict:store(L, X, Out),
- {X, call_site(Ls, As, St2#state{out = Out1})};
- call ->
- M = call_module(T),
- F = call_name(T),
- As = call_args(T),
- {[X1, X2], St1} = visit_list([M, F], Env, St),
- {Xs, St2} = visit_list(As, Env, St1),
-%%% io:fwrite("call: ~w:~w(~w).\n",[X1,X2,Xs]),
- X = case {t_atom_vals(X1), t_atom_vals(X2)} of
- {[M1], [F1]} ->
- A = length(As),
-%%% io:fwrite("known call: ~w:~w/~w.\n",
-%%% [M1, F1, A]),
- call_type(M1, F1, A, Xs);
- _ ->
- t_any()
- end,
- L = get_label(T),
- {X, St2#state{out = dict:store(L, X, St2#state.out)}};
- primop ->
- As = primop_args(T),
- {Xs, St1} = visit_list(As, Env, St),
- F = atom_val(primop_name(T)),
- A = length(As),
- L = get_label(T),
- X = primop_type(F, A, Xs),
- {X, St1#state{out = dict:store(L, X, St1#state.out)}};
- 'case' ->
- {X, St1} = visit(case_arg(T), Env, St),
- Xs = case t_is_any(X) orelse t_is_none(X) of
- true ->
- [X || _ <- cerl:case_clauses(T)];
- false ->
- t_to_tlist(X)
- end,
- join_visit_clauses(Xs, case_clauses(T), Env, St1);
- 'receive' ->
- Any = t_any(),
- {X1, St1} = join_visit_clauses([Any], receive_clauses(T),
- Env, St),
- {X2, St2} = visit(receive_timeout(T), Env, St1),
- case t_is_atom(X2) andalso (t_atom_vals(X2) =:= [infinity]) of
- true ->
- {X1, St2};
- false ->
- {X3, St3} = visit(receive_action(T), Env, St2),
- {join(X1, X3), St3}
- end;
- 'try' ->
- {X, St1} = visit(try_arg(T), Env, St),
- Any = t_any(),
- Atom = t_atom(),
- TryVars = try_vars(T),
- St1Vars = St1#state.vars,
- Vars = case t_is_any(X) orelse t_is_none(X) of
- true ->
- bind_vars_single(TryVars, X, St1Vars);
- false ->
- bind_vars(TryVars, t_to_tlist(X), St1Vars)
- end,
- {X1, St2} = visit(try_body(T), Env, St1#state{vars = Vars}),
- EVars = bind_vars(try_evars(T), [Atom, Any, Any], St2#state.vars),
- {X2, St3} = visit(try_handler(T), Env, St2#state{vars = EVars}),
- {join(X1, X2), St3};
- 'catch' ->
- {_, St1} = visit(catch_body(T), Env, St),
- {t_any(), St1};
- binary ->
- {_, St1} = visit_list(binary_segments(T), Env, St),
- {t_binary(), St1};
- bitstr ->
- %% The other fields are constant literals.
- {_, St1} = visit(bitstr_val(T), Env, St),
- {_, St2} = visit(bitstr_size(T), Env, St1),
- {t_none(), St2};
- letrec ->
- %% All the bound funs should be revisited, because the
- %% environment might have changed.
- Vars = bind_defs(letrec_defs(T), St#state.vars,
- St#state.out),
- Ls = [get_label(F) || {_, F} <- letrec_defs(T)],
- St1 = St#state{work = add_work(Ls, St#state.work),
- vars = Vars},
- visit(letrec_body(T), Env, St1);
- module ->
- %% We handle a module as a sequence of function variables in
- %% the body of a `letrec'.
- {_, St1} = visit(c_letrec(module_defs(T),
- c_values(module_exports(T))),
- Env, St),
- {t_none(), St1}
- end.
-
-visit_clause(T, Xs, Env, St) ->
- Env1 = Env,
- Vars = bind_pats(clause_pats(T), Xs, St#state.vars),
- G = clause_guard(T),
- {_, St1} = visit(G, Env1, St#state{vars = Vars}),
- Env2 = guard_filters(G, Env1),
- visit(clause_body(T), Env2, St1).
-
-%% We assume correct value-list typing.
-
-visit_list([T | Ts], Env, St) ->
- {X, St1} = visit(T, Env, St),
- {Xs, St2} = visit_list(Ts, Env, St1),
- {[X | Xs], St2};
-visit_list([], _Env, St) ->
- {[], St}.
-
-join_visit_clauses(Xs, [T | Ts], Env, St) ->
- {X1, St1} = visit_clause(T, Xs, Env, St),
- {X2, St2} = join_visit_clauses(Xs, Ts, Env, St1),
- {join(X1, X2), St2};
-join_visit_clauses(_, [], _Env, St) ->
- {t_none(), St}.
-
-bind_defs([{V, F} | Ds], Vars, Out) ->
- Xs = [dict:fetch(get_label(V1), Vars) || V1 <- fun_vars(F)],
- X = dict:fetch(get_label(F), Out),
- bind_defs(Ds, dict:store(get_label(V), t_fun(Xs, X), Vars), Out);
-bind_defs([], Vars, _Out) ->
- Vars.
-
-bind_pats(Ps, Xs, Vars) ->
- if length(Xs) =:= length(Ps) ->
- bind_pats_list(Ps, Xs, Vars);
- true ->
- bind_pats_single(Ps, t_none(), Vars)
- end.
-
-bind_pats_list([P | Ps], [X | Xs], Vars) ->
- Vars1 = bind_pat_vars(P, X, Vars),
- bind_pats_list(Ps, Xs, Vars1);
-bind_pats_list([], [], Vars) ->
- Vars.
-
-bind_pats_single([P | Ps], X, Vars) ->
- bind_pats_single(Ps, X, bind_pat_vars(P, X, Vars));
-bind_pats_single([], _X, Vars) ->
- Vars.
-
-bind_pat_vars(P, X, Vars) ->
- case type(P) of
- var ->
- dict:store(get_label(P), X, Vars);
- literal ->
- Vars;
- cons ->
- case t_is_cons(X) of
- true ->
- %% If X is "nonempty proper list of X1", then the
- %% head has type X1 and the tail has type "proper
- %% list of X1". (If X is just "cons cell of X1",
- %% then both head and tail have type X1.)
- Vars1 = bind_pat_vars(cons_hd(P), t_cons_hd(X),
- Vars),
- bind_pat_vars(cons_tl(P), t_cons_tl(X), Vars1);
- false ->
- case t_is_list(X) of
- true ->
- %% If X is "proper list of X1", then the
- %% head has type X1 and the tail has type
- %% "proper list of X1", i.e., type X.
- Vars1 = bind_pat_vars(cons_hd(P),
- t_list_elements(X),
- Vars),
- bind_pat_vars(cons_tl(P), X, Vars1);
- false ->
- case t_is_maybe_improper_list(X) of
- true ->
- %% If X is "cons cell of X1", both
- %% the head and tail have type X1.
- X1 = t_list_elements(X),
- Vars1 = bind_pat_vars(cons_hd(P),
- X1, Vars),
- bind_pat_vars(cons_tl(P), X1,
- Vars1);
- false ->
- bind_vars_single(pat_vars(P),
- top_or_bottom(X),
- Vars)
- end
- end
- end;
- tuple ->
- case t_is_tuple(X) of
- true ->
- case t_tuple_subtypes(X) of
- unknown ->
- bind_vars_single(pat_vars(P), top_or_bottom(X),
- Vars);
- [Tuple] ->
- case t_tuple_size(Tuple) =:= tuple_arity(P) of
- true ->
- bind_pats_list(tuple_es(P),
- t_tuple_args(Tuple), Vars);
-
- false ->
- bind_vars_single(pat_vars(P),
- top_or_bottom(X), Vars)
- end;
- List when is_list(List) ->
- bind_vars_single(pat_vars(P), top_or_bottom(X),
- Vars)
- end;
- false ->
- bind_vars_single(pat_vars(P), top_or_bottom(X), Vars)
- end;
- binary ->
- bind_pats_single(binary_segments(P), t_none(), Vars);
- bitstr ->
- %% Only the Value field is a new binding. Size is already
- %% bound, and the other fields are constant literals.
- %% We could create a filter for Size being an integer().
- Size = bitstr_size(P),
- ValType =
- case concrete(bitstr_type(P)) of
- float -> t_float();
- binary -> t_binary();
- integer ->
- case is_c_int(Size) of
- false -> t_integer();
- true ->
- SizeVal = int_val(Size),
- Flags = concrete(bitstr_flags(P)),
- case lists:member(signed, Flags) of
- true ->
- t_from_range(-(1 bsl (SizeVal - 1)),
- 1 bsl (SizeVal - 1) - 1);
- false ->
- t_from_range(0,1 bsl SizeVal - 1)
- end
- end
- end,
- bind_pat_vars(bitstr_val(P), ValType, Vars);
- alias ->
- P1 = alias_pat(P),
- Vars1 = bind_pat_vars(P1, X, Vars),
- dict:store(get_label(alias_var(P)), pat_type(P1, Vars1),
- Vars1)
- end.
-
-pat_type(P, Vars) ->
- case type(P) of
- var ->
- dict:fetch(get_label(P), Vars);
- literal ->
- t_from_term(concrete(P));
- cons ->
- t_cons(pat_type(cons_hd(P), Vars),
- pat_type(cons_tl(P), Vars));
- tuple ->
- t_tuple([pat_type(E, Vars) || E <- tuple_es(P)]);
- binary ->
- t_binary();
- alias ->
- pat_type(alias_pat(P), Vars)
- end.
-
-bind_vars(Vs, Xs, Vars) ->
- if length(Vs) =:= length(Xs) ->
- bind_vars_list(Vs, Xs, Vars);
- true ->
- bind_vars_single(Vs, t_none(), Vars)
- end.
-
-bind_vars_list([V | Vs], [X | Xs], Vars) ->
- bind_vars_list(Vs, Xs, dict:store(get_label(V), X, Vars));
-bind_vars_list([], [], Vars) ->
- Vars.
-
-bind_vars_single([V | Vs], X, Vars) ->
- bind_vars_single(Vs, X, dict:store(get_label(V), X, Vars));
-bind_vars_single([], _X, Vars) ->
- Vars.
-
-add_dep(Source, Target, Deps) ->
- case dict:find(Source, Deps) of
- {ok, X} ->
- case set__is_member(Target, X) of
- true ->
- Deps;
- false ->
-%%% io:fwrite("new dep: ~w <- ~w.\n", [Target, Source]),
- dict:store(Source, set__add(Target, X), Deps)
- end;
- error ->
-%%% io:fwrite("new dep: ~w <- ~w.\n", [Target, Source]),
- dict:store(Source, set__singleton(Target), Deps)
- end.
-
-%% This handles a call site, updating parameter variables with respect
-%% to the actual parameters.
-
-call_site(Ls, Xs, St) ->
-%% io:fwrite("call site: ~w ~s.\n",
-%% [Ls, erl_types:t_to_string(erl_types:t_product(Xs))]),
- {W, V} = call_site(Ls, Xs, St#state.work, St#state.vars,
- St#state.funs, St#state.k),
- St#state{work = W, vars = V}.
-
-call_site([L | Ls], Xs, W, V, Fs, Limit) ->
- Vs = fun_vars(dict:fetch(L, Fs)),
- case bind_args(Vs, Xs, V, Limit) of
- {V1, true} ->
- call_site(Ls, Xs, add_work([L], W), V1, Fs, Limit);
- {V1, false} ->
- call_site(Ls, Xs, W, V1, Fs, Limit)
- end;
-call_site([], _, W, V, _, _) ->
- {W, V}.
-
-%% If the arity does not match the call, nothing is done here.
-
-bind_args(Vs, Xs, Vars, Limit) ->
- if length(Vs) =:= length(Xs) ->
- bind_args(Vs, Xs, Vars, Limit, false);
- true ->
- {Vars, false}
- end.
-
-bind_args([V | Vs], [X | Xs], Vars, Limit, Ch) ->
- L = get_label(V),
- {Vars1, Ch1} = bind_arg(L, X, Vars, Limit, Ch),
- bind_args(Vs, Xs, Vars1, Limit, Ch1);
-bind_args([], [], Vars, _Limit, Ch) ->
- {Vars, Ch}.
-
-%% bind_arg(L, X, Vars, Limit) ->
-%% bind_arg(L, X, Vars, Limit, false).
-
-bind_arg(L, X, Vars, Limit, Ch) ->
- X0 = dict:fetch(L, Vars),
- X1 = limit(join(X, X0), Limit),
- case equal(X0, X1) of
- true ->
- {Vars, Ch};
- false ->
-%%% io:fwrite("arg (~w) changed: ~s <- ~s + ~s.\n",
-%%% [L, erl_types:t_to_string(X1),
-%%% erl_types:t_to_string(X0),
-%%% erl_types:t_to_string(X)]),
- {dict:store(L, X1, Vars), true}
- end.
-
-%% Domain: type(), defined in module `erl_types'.
-
-meet(X, Y) -> t_inf(X, Y).
-
-join(X, Y) -> t_sup(X, Y).
-
-join_list([Xs | Xss]) ->
- join(Xs, join_list(Xss));
-join_list([]) ->
- t_none().
-
-equal(X, Y) -> X =:= Y.
-
-limit(X, K) -> t_limit(X, K).
-
-top_or_bottom(T) ->
- case t_is_none(T) of
- true ->
- T;
- false ->
- t_any()
- end.
-
-strict(Xs, T) ->
- case erl_types:any_none(Xs) of
- true ->
- t_none();
- false ->
- T
- end.
-
-%% Set abstraction for label sets.
-
-%% set__new() -> [].
-
-set__singleton(X) -> [X].
-
-%% set__to_list(S) -> S.
-
-%% set__from_list(S) -> ordsets:from_list(S).
-
-%% set__union(X, Y) -> ordsets:union(X, Y).
-
-set__add(X, S) -> ordsets:add_element(X, S).
-
-set__is_member(X, S) -> ordsets:is_element(X, S).
-
-%% set__subtract(X, Y) -> ordsets:subtract(X, Y).
-
-%% set__equal(X, Y) -> X =:= Y.
-
-%% A simple but efficient functional queue.
-
-queue__new() -> {[], []}.
-
-queue__put(X, {In, Out}) -> {[X | In], Out}.
-
-queue__get({In, [X | Out]}) -> {ok, X, {In, Out}};
-queue__get({[], _}) -> empty;
-queue__get({In, _}) ->
- [X | In1] = lists:reverse(In),
- {ok, X, {[], In1}}.
-
-%% The work list - a queue without repeated elements.
-
-init_work() ->
- {queue__put(external, queue__new()), sets:new()}.
-
-add_work(Ls, {Q, Set}) ->
- add_work(Ls, Q, Set).
-
-%% Note that the elements are enqueued in order.
-
-add_work([L | Ls], Q, Set) ->
- case sets:is_element(L, Set) of
- true ->
- add_work(Ls, Q, Set);
- false ->
- add_work(Ls, queue__put(L, Q), sets:add_element(L, Set))
- end;
-add_work([], Q, Set) ->
- {Q, Set}.
-
-take_work({Queue0, Set0}) ->
- case queue__get(Queue0) of
- {ok, L, Queue1} ->
- Set1 = sets:del_element(L, Set0),
- {ok, L, {Queue1, Set1}};
- empty ->
- none
- end.
-
-get_deps(L, Dep) ->
- case dict:find(L, Dep) of
- {ok, Ls} -> Ls;
- error -> []
- end.
-
-%% Type information for built-in functions. We do not check that the
-%% arguments have the correct type; if the call would actually fail,
-%% rather than return a value, this is a safe overapproximation.
-
-primop_type(match_fail, 1, _) -> t_none();
-primop_type(_, _, Xs) -> strict(Xs, t_any()).
-
-call_type(M, F, A, Xs) ->
- erl_bif_types:type(M, F, A, Xs).
-
-guard_filters(T, Env) ->
- guard_filters(T, Env, dict:new()).
-
-guard_filters(T, Env, Vars) ->
- case type(T) of
- call ->
- M = call_module(T),
- F = call_name(T),
- case is_c_atom(M) andalso is_c_atom(F) of
- true ->
- As = call_args(T),
- case {atom_val(M), atom_val(F), length(As)} of
- {erlang, 'and', 2} ->
- [A1, A2] = As,
- guard_filters(A1, guard_filters(A2, Env));
- {erlang, is_atom, 1} ->
- filter(As, t_atom(), Env);
- {erlang, is_binary, 1} ->
- filter(As, t_binary(), Env);
- {erlang, is_float, 1} ->
- filter(As, t_float(), Env);
- {erlang, is_function, 1} ->
- filter(As, t_fun(), Env);
- {erlang, is_integer, 1} ->
- filter(As, t_integer(), Env);
- {erlang, is_list, 1} ->
- filter(As, t_maybe_improper_list(), Env);
- {erlang, is_number, 1} ->
- filter(As, t_number(), Env);
- {erlang, is_pid, 1} ->
- filter(As, t_pid(), Env);
- {erlang, is_port, 1} ->
- filter(As, t_port(), Env);
- {erlang, is_reference, 1} ->
- filter(As, t_reference(), Env);
- {erlang, is_tuple, 1} ->
- filter(As, t_tuple(), Env);
- _ ->
- Env
- end;
- false ->
- Env
- end;
- var ->
- case dict:find(var_name(T), Vars) of
- {ok, T1} ->
- guard_filters(T1, Env, Vars);
- error ->
- Env
- end;
- 'let' ->
- case let_vars(T) of
- [V] ->
- guard_filters(let_body(T), Env,
- dict:store(var_name(V), let_arg(T),
- Vars));
- _ ->
- Env
- end;
- values ->
- case values_es(T) of
- [T1] ->
- guard_filters(T1, Env, Vars);
- _ ->
- Env
- end;
- _ ->
- Env
- end.
-
-filter(As, X, Env) ->
- [A] = As,
- case type(A) of
- var ->
- V = var_name(A),
- case dict:find(V, Env) of
- {ok, X1} ->
- dict:store(V, meet(X, X1), Env);
- error ->
- dict:store(V, X, Env)
- end;
- _ ->
- Env
- end.
-
-%% Callback hook for cerl_prettypr:
-
--spec pp_hook() -> fun((cerl:cerl(), _, fun((_,_) -> any())) -> any()).
-
-pp_hook() ->
- fun pp_hook/3.
-
-pp_hook(Node, Ctxt, Cont) ->
- As = cerl:get_ann(Node),
- As1 = proplists:delete(type, proplists:delete(label, As)),
- As2 = proplists:delete(typesig, proplists:delete(file, As1)),
- D = Cont(cerl:set_ann(Node, []), Ctxt),
- T = case proplists:lookup(type, As) of
- {type, T0} -> T0;
- none ->
- case proplists:lookup(typesig, As) of
- {typesig, T0} -> T0;
- none -> t_any()
- end
- end,
- D1 = case erl_types:t_is_any(T) of
- true ->
- D;
- false ->
- case cerl:is_literal(Node) of
- true ->
- D;
- false ->
- S = erl_types:t_to_string(T),
- Q = prettypr:beside(prettypr:text("::"),
- prettypr:text(S)),
- prettypr:beside(D, Q)
- end
- end,
- cerl_prettypr:annotate(D1, As2, Ctxt).
-
-%% =====================================================================
diff --git a/lib/dialyzer/src/dialyzer.app.src b/lib/dialyzer/src/dialyzer.app.src
index 721eda0644..93d004d2e7 100644
--- a/lib/dialyzer/src/dialyzer.app.src
+++ b/lib/dialyzer/src/dialyzer.app.src
@@ -22,11 +22,7 @@
{application, dialyzer,
[{description, "DIscrepancy AnaLYZer of ERlang programs, version %VSN%"},
{vsn, "%VSN%"},
- {modules, [cerl_closurean,
- cerl_lib,
- cerl_pmatch,
- cerl_prettypr,
- cerl_typean,
+ {modules, [cerl_prettypr,
dialyzer,
dialyzer_analysis_callgraph,
dialyzer_behaviours,
@@ -57,6 +53,6 @@
{registered, []},
{applications, [compiler, kernel, stdlib]},
{env, []},
- {runtime_dependencies, ["wx-1.2","syntax_tools-2.0","stdlib-3.4",
- "kernel-5.3","erts-9.0",
- "compiler-7.0"]}]}.
+ {runtime_dependencies, ["wx-2.0","syntax_tools-2.0","stdlib-3.15",
+ "kernel-8.0","erts-12.0",
+ "compiler-8.0"]}]}.
diff --git a/lib/dialyzer/src/dialyzer.hrl b/lib/dialyzer/src/dialyzer.hrl
index 3ca63881d3..26ba0afea4 100644
--- a/lib/dialyzer/src/dialyzer.hrl
+++ b/lib/dialyzer/src/dialyzer.hrl
@@ -46,7 +46,9 @@
-define(WARN_CONTRACT_SYNTAX, warn_contract_syntax).
-define(WARN_CONTRACT_NOT_EQUAL, warn_contract_not_equal).
-define(WARN_CONTRACT_SUBTYPE, warn_contract_subtype).
+-define(WARN_CONTRACT_MISSING_RETURN, warn_contract_missing_return).
-define(WARN_CONTRACT_SUPERTYPE, warn_contract_supertype).
+-define(WARN_CONTRACT_EXTRA_RETURN, warn_contract_extra_return).
-define(WARN_CONTRACT_RANGE, warn_contract_range).
-define(WARN_CALLGRAPH, warn_callgraph).
-define(WARN_UNMATCHED_RETURN, warn_umatched_return).
diff --git a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
index 898ed26daf..de03192c47 100644
--- a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
+++ b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
@@ -143,7 +143,7 @@ analysis_start(Parent, Analysis, LegalWarnings) ->
Plt1 = dialyzer_plt:insert_callbacks(Plt1_a, NewCServer),
State1 = State#analysis_state{codeserver = NewCServer, plt = Plt1},
Exports = dialyzer_codeserver:get_exports(NewCServer),
- NonExports = sets:subtract(sets:from_list(AllNodes), Exports),
+ NonExports = sets:subtract(sets:from_list(AllNodes, [{version, 2}]), Exports),
NonExportsList = sets:to_list(NonExports),
NewCallgraph =
case Analysis#analysis.race_detection of
@@ -234,19 +234,18 @@ analyze_callgraph(Callgraph, #analysis_state{codeserver = Codeserver,
doc_plt = DocPlt,
plt = Plt,
timing_server = TimingServer,
- parent = Parent,
solvers = Solvers} = State) ->
case State#analysis_state.analysis_type of
plt_build ->
NewPlt =
dialyzer_succ_typings:analyze_callgraph(Callgraph, Plt, Codeserver,
- TimingServer, Solvers, Parent),
+ TimingServer, Solvers),
dialyzer_callgraph:delete(Callgraph),
State#analysis_state{plt = NewPlt, doc_plt = DocPlt};
succ_typings ->
{Warnings, NewPlt, NewDocPlt} =
dialyzer_succ_typings:get_warnings(Callgraph, Plt, DocPlt, Codeserver,
- TimingServer, Solvers, Parent),
+ TimingServer, Solvers),
dialyzer_callgraph:delete(Callgraph),
Warnings1 = filter_warnings(Warnings, Codeserver),
send_warnings(State#analysis_state.parent, Warnings1),
@@ -382,7 +381,7 @@ cleanup_callgraph(#analysis_state{plt = InitPlt, parent = Parent,
{BadCalls1, RealExtCalls} =
if ExtCalls1 =:= [] -> {[], []};
true ->
- ModuleSet = sets:from_list(Modules),
+ ModuleSet = sets:from_list(Modules, [{version, 2}]),
PltModuleSet = dialyzer_plt:all_modules(InitPlt),
AllModules = sets:union(ModuleSet, PltModuleSet),
Pred = fun({_From, {M, _F, _A}}) -> sets:is_element(M, AllModules) end,
@@ -475,7 +474,7 @@ get_exported_types_from_core(Core) ->
cerl:concrete(L1) =:= 'export_type'],
ExpTypes2 = lists:flatten(ExpTypes1),
M = cerl:atom_val(cerl:module_name(Core)),
- sets:from_list([{M, F, A} || {F, A} <- ExpTypes2]).
+ sets:from_list([{M, F, A} || {F, A} <- ExpTypes2], [{version, 2}]).
get_exports_from_core(Core) ->
Tree = cerl:from_records(Core),
diff --git a/lib/dialyzer/src/dialyzer_callgraph.erl b/lib/dialyzer/src/dialyzer_callgraph.erl
index f858a81e63..506a785885 100644
--- a/lib/dialyzer/src/dialyzer_callgraph.erl
+++ b/lib/dialyzer/src/dialyzer_callgraph.erl
@@ -222,7 +222,7 @@ remove_external(#callgraph{digraph = DG} = CG) ->
non_local_calls(#callgraph{digraph = DG}) ->
Edges = digraph_edges(DG),
- find_non_local_calls(Edges, sets:new()).
+ find_non_local_calls(Edges, sets:new([{version, 2}])).
-type call_tab() :: sets:set(mfa_call()).
@@ -281,10 +281,10 @@ modules(#callgraph{digraph = DG}) ->
-spec module_postorder(callgraph()) -> {[module()], {'d', digraph:graph()}}.
module_postorder(#callgraph{digraph = DG}) ->
- Edges = lists:foldl(fun edge_fold/2, sets:new(), digraph_edges(DG)),
- Nodes = sets:from_list([M || {M,_F,_A} <- digraph_vertices(DG)]),
+ Edges = lists:foldl(fun edge_fold/2, sets:new([{version, 2}]), digraph_edges(DG)),
+ Modules = ordsets:from_list([M || {M,_F,_A} <- digraph_vertices(DG)]),
MDG = digraph:new([acyclic]),
- digraph_confirm_vertices(sets:to_list(Nodes), MDG),
+ digraph_confirm_vertices(Modules, MDG),
Foreach = fun({M1,M2}) -> _ = digraph:add_edge(MDG, M1, M2) end,
lists:foreach(Foreach, sets:to_list(Edges)),
%% The out-neighbors of a vertex are the vertices called directly.
@@ -303,14 +303,14 @@ edge_fold(_, Set) -> Set.
-spec module_deps(callgraph()) -> mod_deps().
module_deps(#callgraph{digraph = DG}) ->
- Edges = lists:foldl(fun edge_fold/2, sets:new(), digraph_edges(DG)),
- Nodes = sets:from_list([M || {M,_F,_A} <- digraph_vertices(DG)]),
+ Edges = lists:foldl(fun edge_fold/2, sets:new([{version, 2}]), digraph_edges(DG)),
+ Modules = ordsets:from_list([M || {M,_F,_A} <- digraph_vertices(DG)]),
MDG = digraph:new(),
- digraph_confirm_vertices(sets:to_list(Nodes), MDG),
+ digraph_confirm_vertices(Modules, MDG),
Foreach = fun({M1,M2}) -> check_add_edge(MDG, M1, M2) end,
lists:foreach(Foreach, sets:to_list(Edges)),
Deps = [{N, ordsets:from_list(digraph:in_neighbours(MDG, N))}
- || N <- sets:to_list(Nodes)],
+ || N <- Modules],
digraph_delete(MDG),
dict:from_list(Deps).
diff --git a/lib/dialyzer/src/dialyzer_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl
index 2dd56ebb08..39c4634d74 100644
--- a/lib/dialyzer/src/dialyzer_cl.erl
+++ b/lib/dialyzer/src/dialyzer_cl.erl
@@ -452,8 +452,8 @@ clean_plt(PltFile, RemovedMods) ->
Plt, RemovedMods).
expand_dependent_modules(Md5, DiffMd5, ModDeps) ->
- ChangedMods = sets:from_list([M || {differ, M} <- DiffMd5]),
- RemovedMods = sets:from_list([M || {removed, M} <- DiffMd5]),
+ ChangedMods = sets:from_list([M || {differ, M} <- DiffMd5], [{version, 2}]),
+ RemovedMods = sets:from_list([M || {removed, M} <- DiffMd5], [{version, 2}]),
BigSet = sets:union(ChangedMods, RemovedMods),
BigList = sets:to_list(BigSet),
ExpandedSet = expand_dependent_modules_1(BigList, BigSet, ModDeps),
diff --git a/lib/dialyzer/src/dialyzer_clean_core.erl b/lib/dialyzer/src/dialyzer_clean_core.erl
index d591ad3473..071e2eccad 100644
--- a/lib/dialyzer/src/dialyzer_clean_core.erl
+++ b/lib/dialyzer/src/dialyzer_clean_core.erl
@@ -72,11 +72,6 @@ clean(Tree) ->
Args = clean_list(cerl:primop_args(Tree)),
Name = cerl:primop_name(Tree),
cerl:update_c_primop(Tree, Name, Args);
- 'receive' ->
- Clauses = clean_clauses(cerl:receive_clauses(Tree)),
- Timeout = clean(cerl:receive_timeout(Tree)),
- Action = clean(cerl:receive_action(Tree)),
- cerl:update_c_receive(Tree, Clauses, Timeout, Action);
seq ->
Arg = clean(cerl:seq_arg(Tree)),
Body = clean(cerl:seq_body(Tree)),
diff --git a/lib/dialyzer/src/dialyzer_codeserver.erl b/lib/dialyzer/src/dialyzer_codeserver.erl
index 0472e2c128..9b8a165dd0 100644
--- a/lib/dialyzer/src/dialyzer_codeserver.erl
+++ b/lib/dialyzer/src/dialyzer_codeserver.erl
@@ -29,7 +29,7 @@
finalize_records/1,
get_contracts/1,
get_callbacks/1,
- get_exported_types/1,
+ get_exported_types_table/1,
extract_exported_types/1,
get_exports/1,
get_records_table/1,
@@ -122,7 +122,7 @@ ets_set_insert_list(List, Table) ->
ets_set_to_set(Table) ->
Fold = fun({E}, Set) -> sets:add_element(E, Set) end,
- ets:foldl(Fold, sets:new(), Table).
+ ets:foldl(Fold, sets:new([{version, 2}]), Table).
%%--------------------------------------------------------------------
@@ -132,12 +132,15 @@ new() ->
CodeOptions = [compressed, public, {read_concurrency, true}],
Code = ets:new(dialyzer_codeserver_code, CodeOptions),
ReadOptions = [compressed, {read_concurrency, true}],
- [Contracts, Callbacks, Records, ExportedTypes] =
+ [Records, ExportedTypes] =
[ets:new(Name, ReadOptions) ||
- Name <- [dialyzer_codeserver_contracts,
- dialyzer_codeserver_callbacks,
- dialyzer_codeserver_records,
+ Name <- [dialyzer_codeserver_records,
dialyzer_codeserver_exported_types]],
+ ReadWriteOptions = [public | ReadOptions],
+ [Contracts, Callbacks] =
+ [ets:new(Name, ReadWriteOptions) ||
+ Name <- [dialyzer_codeserver_contracts,
+ dialyzer_codeserver_callbacks]],
TempOptions = [public, {write_concurrency, true}],
[Exports, FunMetaInfo, TempExportedTypes, TempRecords, TempContracts,
TempCallbacks] =
@@ -211,10 +214,10 @@ insert_fun_meta_info(List, #codeserver{fun_meta_info = FunMetaInfo} = CS) ->
is_exported(MFA, #codeserver{exports = Exports}) ->
ets_set_is_element(MFA, Exports).
--spec get_exported_types(codeserver()) -> sets:set(mfa()).
+-spec get_exported_types_table(codeserver()) -> map_ets().
-get_exported_types(#codeserver{exported_types = ExpTypes}) ->
- ets_set_to_set(ExpTypes).
+get_exported_types_table(#codeserver{exported_types = ExpTypes}) ->
+ ExpTypes.
-spec extract_exported_types(codeserver()) -> {codeserver(), set_ets()}.
diff --git a/lib/dialyzer/src/dialyzer_contracts.erl b/lib/dialyzer/src/dialyzer_contracts.erl
index 2b296e1668..2fda1255f6 100644
--- a/lib/dialyzer/src/dialyzer_contracts.erl
+++ b/lib/dialyzer/src/dialyzer_contracts.erl
@@ -27,12 +27,23 @@
process_contract_remote_types/1,
store_tmp_contract/6]).
--export_type([file_contract/0, plt_contracts/0]).
+%% For dialyzer_worker.
+-export([process_contract_remote_types_module/2]).
+
+-export_type([file_contract/0, plt_contracts/0,
+ contract_remote_types_init_data/0,
+ contract_remote_types_result/0]).
%%-----------------------------------------------------------------------
-include("dialyzer.hrl").
+-type ext_types_message() :: {pid(), 'ext_types',
+ {mfa(), {file:filename(), erl_anno:location()}}}
+ | {'error', io_lib:chars()}.
+-type contract_remote_types_init_data() :: dialyzer_codeserver:codeserver().
+-type contract_remote_types_result() :: [ext_types_message()].
+
%%-----------------------------------------------------------------------
%% Types used in other parts of the system below
%%-----------------------------------------------------------------------
@@ -143,37 +154,78 @@ sequence([H|T], Delimiter) -> H ++ Delimiter ++ sequence(T, Delimiter).
dialyzer_codeserver:codeserver().
process_contract_remote_types(CodeServer) ->
- Mods = dialyzer_codeserver:all_temp_modules(CodeServer),
+ case dialyzer_codeserver:all_temp_modules(CodeServer) of
+ [] ->
+ CodeServer;
+ Mods ->
+ %% CodeServer is updated by each worker, but is still valid
+ %% after updates. Workers call
+ %% process_contract_remote_types_module/2 below.
+ Return =
+ dialyzer_coordinator:parallel_job(contract_remote_types,
+ Mods,
+ _InitData=CodeServer,
+ _Timing=none),
+ %% We need to pass on messages and thrown errors from erl_types:
+ _ = [self() ! {self(), ext_types, ExtType} ||
+ {_, ext_types, ExtType} <- Return],
+ case [Error || {error, _} = Error <- Return] of
+ [] ->
+ dialyzer_codeserver:finalize_contracts(CodeServer);
+ [Error | _] ->
+ throw(Error)
+ end
+ end.
+
+-spec process_contract_remote_types_module(module(),
+ dialyzer_codeserver:codeserver()) -> [ext_types_message()].
+
+process_contract_remote_types_module(ModuleName, CodeServer) ->
RecordTable = dialyzer_codeserver:get_records_table(CodeServer),
- ExpTypes = dialyzer_codeserver:get_exported_types(CodeServer),
- ModuleFun =
- fun(ModuleName) ->
- ContractFun =
- fun({MFA, {File, TmpContract, Xtra}}, C0) ->
- #tmp_contract{contract_funs = CFuns, forms = Forms} = TmpContract,
- {NewCs, C2} = lists:mapfoldl(fun(CFun, C1) ->
- CFun(ExpTypes, RecordTable, C1)
- end, C0, CFuns),
- Args = general_domain(NewCs),
- Contract = #contract{contracts = NewCs, args = Args, forms = Forms},
- {{MFA, {File, Contract, Xtra}}, C2}
- end,
- Cache = erl_types:cache__new(),
- {ContractMap, CallbackMap} =
- dialyzer_codeserver:get_temp_contracts(ModuleName, CodeServer),
- {NewContractList, Cache1} =
- lists:mapfoldl(ContractFun, Cache, maps:to_list(ContractMap)),
- {NewCallbackList, _NewCache} =
- lists:mapfoldl(ContractFun, Cache1, maps:to_list(CallbackMap)),
- dialyzer_codeserver:store_contracts(ModuleName,
- maps:from_list(NewContractList),
- maps:from_list(NewCallbackList),
- CodeServer)
+ ExpTypes = dialyzer_codeserver:get_exported_types_table(CodeServer),
+ ContractFun =
+ fun({MFA, {File, TmpContract, Xtra}}, C0) ->
+ #tmp_contract{contract_funs = CFuns, forms = Forms} = TmpContract,
+ {NewCs, C2} = lists:mapfoldl(fun(CFun, C1) ->
+ CFun(ExpTypes, RecordTable, C1)
+ end, C0, CFuns),
+ Args = general_domain(NewCs),
+ Contract = #contract{contracts = NewCs, args = Args, forms = Forms},
+ {{MFA, {File, Contract, Xtra}}, C2}
end,
- lists:foreach(ModuleFun, Mods),
- dialyzer_codeserver:finalize_contracts(CodeServer).
+ Cache = erl_types:cache__new(),
+ {ContractMap, CallbackMap} =
+ dialyzer_codeserver:get_temp_contracts(ModuleName, CodeServer),
+ try
+ {NewContractList, Cache1} =
+ lists:mapfoldl(ContractFun, Cache, maps:to_list(ContractMap)),
+ {NewCallbackList, _NewCache} =
+ lists:mapfoldl(ContractFun, Cache1, maps:to_list(CallbackMap)),
+ _NewCodeServer =
+ dialyzer_codeserver:store_contracts(ModuleName,
+ maps:from_list(NewContractList),
+ maps:from_list(NewCallbackList),
+ CodeServer),
+ rcv_ext_types()
+ catch
+ throw:{error, _}=Error ->
+ [Error] ++ rcv_ext_types()
+ end.
+
+rcv_ext_types() ->
+ Self = self(),
+ Self ! {Self, done},
+ rcv_ext_types(Self, []).
+
+rcv_ext_types(Self, ExtTypes) ->
+ receive
+ {Self, ext_types, _} = ExtType ->
+ rcv_ext_types(Self, [ExtType | ExtTypes]);
+ {Self, done} ->
+ lists:usort(ExtTypes)
+ end.
--type fun_types() :: orddict:orddict(label(), erl_types:type_table()).
+-type fun_types() :: orddict:orddict(label(), erl_types:erl_type()).
-spec check_contracts(orddict:orddict(mfa(), #contract{}),
dialyzer_callgraph:callgraph(), fun_types(),
@@ -846,13 +898,13 @@ overlapping_contract_warning({M, F, A}, WarningInfo) ->
extra_range_warning({M, F, A}, WarningInfo, ExtraRanges, STRange) ->
ERangesStr = erl_types:t_to_string(ExtraRanges),
STRangeStr = erl_types:t_to_string(STRange),
- {?WARN_CONTRACT_SUPERTYPE, WarningInfo,
+ {?WARN_CONTRACT_EXTRA_RETURN, WarningInfo,
{extra_range, [M, F, A, ERangesStr, STRangeStr]}}.
missing_range_warning({M, F, A}, WarningInfo, ExtraRanges, CRange) ->
ERangesStr = erl_types:t_to_string(ExtraRanges),
CRangeStr = erl_types:t_to_string(CRange),
- {?WARN_CONTRACT_SUBTYPE, WarningInfo,
+ {?WARN_CONTRACT_MISSING_RETURN, WarningInfo,
{missing_range, [M, F, A, ERangesStr, CRangeStr]}}.
picky_contract_check(CSig0, Sig0, MFA, WarningInfo, Contract, RecDict,
diff --git a/lib/dialyzer/src/dialyzer_coordinator.erl b/lib/dialyzer/src/dialyzer_coordinator.erl
index 7c1bc1de5a..2ca3acc4cb 100644
--- a/lib/dialyzer/src/dialyzer_coordinator.erl
+++ b/lib/dialyzer/src/dialyzer_coordinator.erl
@@ -11,22 +11,21 @@
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
-
-%%%-------------------------------------------------------------------
-%%% File : dialyzer_coordinator.erl
-%%% Authors : Stavros Aronis <aronisstav@gmail.com>
-%%%-------------------------------------------------------------------
+%%
+%% Original author: Stavros Aronis <aronisstav@gmail.com>
+%%
+%% Purpose: Spawn and coordinate parallel jobs.
-module(dialyzer_coordinator).
%%% Export for dialyzer main process
-export([parallel_job/4]).
-%%% Export for all possible workers
--export([job_done/3]).
+%%% Exports for all workers
+-export([request_activation/1, job_done/3]).
%%% Exports for the typesig and dataflow analysis workers
--export([sccs_to_pids/2, request_activation/1]).
+-export([wait_for_success_typings/2]).
%%% Exports for the compilation workers
-export([get_next_label/2]).
@@ -37,40 +36,59 @@
-type collector() :: pid().
-type regulator() :: pid().
--type scc_to_pid() :: ets:tid() | 'unused'.
+-type scc_to_pid() :: ets:tid() | 'none'.
-opaque coordinator() :: {collector(), regulator(), scc_to_pid()}.
-type timing() :: dialyzer_timing:timing_server().
-type scc() :: [mfa_or_funlbl()].
--type mode() :: 'typesig' | 'dataflow' | 'compile' | 'warnings'.
+-type mode() :: 'typesig' | 'dataflow' | 'compile' | 'warnings' |
+ 'contract_remote_types' | 'record_remote_types'.
-type compile_job() :: file:filename().
-type typesig_job() :: scc().
-type dataflow_job() :: module().
-type warnings_job() :: module().
+-type contract_remote_types_job() :: module().
+-type record_remote_types_job() :: module().
--type job() :: compile_job() | typesig_job() | dataflow_job() | warnings_job().
+-type job() :: compile_job() | typesig_job() | dataflow_job() |
+ warnings_job() | contract_remote_types_job() |
+ record_remote_types_job().
-type compile_init_data() :: dialyzer_analysis_callgraph:compile_init_data().
-type typesig_init_data() :: dialyzer_succ_typings:typesig_init_data().
-type dataflow_init_data() :: dialyzer_succ_typings:dataflow_init_data().
-type warnings_init_data() :: dialyzer_succ_typings:warnings_init_data().
+-type contract_remote_types_init_data() ::
+ dialyzer_contracts:contract_remote_types_init_data().
+-type record_remote_types_init_data() ::
+ dialyzer_utils:record_remote_types_init_data().
-type compile_result() :: dialyzer_analysis_callgraph:compile_result().
-type typesig_result() :: [mfa_or_funlbl()].
-type dataflow_result() :: [mfa_or_funlbl()].
-type warnings_result() :: [dial_warning()].
+-type contract_remote_types_result() ::
+ dialyzer_contracts:contract_remote_types_result().
+-type record_remote_types_result() ::
+ dialyzer_utils:record_remote_types_result().
-type init_data() :: compile_init_data() | typesig_init_data() |
- dataflow_init_data() | warnings_init_data().
+ dataflow_init_data() | warnings_init_data() |
+ contract_remote_types_init_data() |
+ record_remote_types_init_data().
-type result() :: compile_result() | typesig_result() |
- dataflow_result() | warnings_result().
+ dataflow_result() | warnings_result() |
+ contract_remote_types_result() |
+ record_remote_types_result().
-type job_result() :: dialyzer_analysis_callgraph:one_file_mid_error() |
dialyzer_analysis_callgraph:one_file_result_ok() |
- typesig_result() | dataflow_result() | warnings_result().
+ typesig_result() | dataflow_result() |
+ warnings_result() | contract_remote_types_result() |
+ record_remote_types_result().
-record(state, {mode :: mode(),
active = 0 :: integer(),
@@ -86,6 +104,7 @@
-include("dialyzer.hrl").
%%--------------------------------------------------------------------
+%% API functions for the main dialyzer process.
-spec parallel_job('compile', [compile_job()], compile_init_data(), timing()) ->
{compile_result(), integer()};
@@ -94,76 +113,155 @@
('dataflow', [dataflow_job()], dataflow_init_data(),
timing()) -> dataflow_result();
('warnings', [warnings_job()], warnings_init_data(),
- timing()) -> warnings_result().
+ timing()) -> warnings_result();
+ ('contract_remote_types', [contract_remote_types_job()],
+ contract_remote_types_init_data(), timing()) ->
+ contract_remote_types_result();
+ ('record_remote_types', [record_remote_types_job()],
+ record_remote_types_init_data(), timing()) ->
+ record_remote_types_result().
parallel_job(Mode, Jobs, InitData, Timing) ->
State = spawn_jobs(Mode, Jobs, InitData, Timing),
collect_result(State).
+%%--------------------------------------------------------------------
+%% API functions for workers (dialyzer_worker).
+
+-spec request_activation(coordinator()) -> ok.
+
+request_activation({_Collector, Regulator, _SCCtoPid}) ->
+ Regulator ! {req, self()},
+ wait_activation().
+
+-spec job_done(job(), job_result(), coordinator()) -> ok.
+
+job_done(Job, Result, {Collector, Regulator, _SCCtoPid}) ->
+ Regulator ! done,
+ Collector ! {done, Job, Result},
+ ok.
+
+-spec get_next_label(integer(), coordinator()) -> integer().
+
+%% For the 'compile' worker.
+get_next_label(EstimatedSize, {Collector, _Regulator, _SCCtoPid}) ->
+ Collector ! {next_label_request, EstimatedSize, self()},
+ receive
+ {next_label_reply, NextLabel} -> NextLabel
+ end.
+
+-spec wait_for_success_typings([scc() | module()], coordinator()) ->
+ 'ok'.
+
+%% Helper for 'sigtype' and 'dataflow' workers.
+wait_for_success_typings(SCCs, {_Collector, _Regulator, SCCtoPid}) ->
+ F = fun(SCC) ->
+ %% The SCCs that SCC depends on have always been started.
+ try ets:lookup_element(SCCtoPid, SCC, 2) of
+ Pid when is_pid(Pid) ->
+ Ref = erlang:monitor(process, Pid),
+ receive
+ {'DOWN', Ref, process, Pid, _Info} ->
+ ok
+ end
+ catch
+ _:_ ->
+ %% Already finished.
+ ok
+ end
+ end,
+ lists:foreach(F, SCCs).
+
+
+%%--------------------------------------------------------------------
+%% Local functions.
+
spawn_jobs(Mode, Jobs, InitData, Timing) ->
Collector = self(),
Regulator = spawn_regulator(),
- TypesigOrDataflow = (Mode =:= 'typesig') orelse (Mode =:= 'dataflow'),
- SCCtoPID =
- case TypesigOrDataflow of
- true -> ets:new(scc_to_pid, [{read_concurrency, true}]);
- false -> unused
- end,
- Coordinator = {Collector, Regulator, SCCtoPID},
- JobFun =
- fun(Job) ->
- Pid = dialyzer_worker:launch(Mode, Job, InitData, Coordinator),
- case TypesigOrDataflow of
- true -> true = ets:insert(SCCtoPID, {Job, Pid});
- false -> true
- end
+
+ SCCtoPid =
+ if
+ Mode =:= 'typesig'; Mode =:= 'dataflow' ->
+ ets:new(scc_to_pid, [{read_concurrency, true}]);
+ true ->
+ none
end,
- JobCount = length(Jobs),
- NumberOfInitJobs = min(JobCount, 20 * dialyzer_utils:parallelism()),
- {InitJobs, RestJobs} = lists:split(NumberOfInitJobs, Jobs),
- lists:foreach(JobFun, InitJobs),
+
+ Coordinator = {Collector, Regulator, SCCtoPid},
+
+ JobFun = job_fun(SCCtoPid, Mode, InitData, Coordinator),
+
+ %% Limit the number of processes we start in order to save memory.
+ MaxNumberOfInitJobs = 20 * dialyzer_utils:parallelism(),
+ RestJobs = launch_jobs(Jobs, JobFun, MaxNumberOfInitJobs),
+
Unit =
case Mode of
'typesig' -> "SCCs";
_ -> "modules"
end,
+ JobCount = length(Jobs),
dialyzer_timing:send_size_info(Timing, JobCount, Unit),
+
InitResult =
case Mode of
'compile' -> dialyzer_analysis_callgraph:compile_init_result();
_ -> []
end,
+
#state{mode = Mode, active = JobCount, result = InitResult,
next_label = 0, job_fun = JobFun, jobs = RestJobs,
- init_data = InitData, regulator = Regulator, scc_to_pid = SCCtoPID}.
+ init_data = InitData, regulator = Regulator, scc_to_pid = SCCtoPid}.
+
+launch_jobs(Jobs, _JobFun, 0) ->
+ Jobs;
+launch_jobs([Job|Jobs], JobFun, N) ->
+ JobFun(Job),
+ launch_jobs(Jobs, JobFun, N - 1);
+launch_jobs([], _JobFun, _) ->
+ [].
+
+job_fun(none, Mode, InitData, Coordinator) ->
+ fun(Job) ->
+ _ = dialyzer_worker:launch(Mode, Job, InitData, Coordinator),
+ ok
+ end;
+job_fun(SCCtoPid, Mode, InitData, Coordinator) ->
+ fun(Job) ->
+ Pid = dialyzer_worker:launch(Mode, Job, InitData, Coordinator),
+ true = ets:insert(SCCtoPid, {Job, Pid}),
+ ok
+ end.
collect_result(#state{mode = Mode, active = Active, result = Result,
next_label = NextLabel, init_data = InitData,
jobs = JobsLeft, job_fun = JobFun,
- regulator = Regulator, scc_to_pid = SCCtoPID} = State) ->
+ regulator = Regulator, scc_to_pid = SCCtoPid} = State) ->
receive
{next_label_request, Estimation, Pid} ->
Pid ! {next_label_reply, NextLabel},
collect_result(State#state{next_label = NextLabel + Estimation});
{done, Job, Data} ->
NewResult = update_result(Mode, InitData, Job, Data, Result),
- TypesigOrDataflow = (Mode =:= 'typesig') orelse (Mode =:= 'dataflow'),
case Active of
1 ->
+ %% This was the last running job. Clean up and return the result.
kill_regulator(Regulator),
case Mode of
'compile' ->
{NewResult, NextLabel};
- _ when TypesigOrDataflow ->
- ets:delete(SCCtoPID),
- NewResult;
- 'warnings' ->
+ _ ->
+ if
+ SCCtoPid =:= none -> ok;
+ true -> ets:delete(SCCtoPid)
+ end,
NewResult
end;
N ->
- case TypesigOrDataflow of
- true -> true = ets:delete(SCCtoPID, Job);
- false -> true
+ if
+ SCCtoPid =:= none -> ok;
+ true -> true = ets:delete(SCCtoPid, Job)
end,
NewJobsLeft =
case JobsLeft of
@@ -180,46 +278,23 @@ collect_result(#state{mode = Mode, active = Active, result = Result,
end.
update_result(Mode, InitData, Job, Data, Result) ->
- case Mode of
- 'compile' ->
+ if
+ Mode =:= 'compile' ->
dialyzer_analysis_callgraph:add_to_result(Job, Data, Result,
InitData);
- X when X =:= 'typesig'; X =:= 'dataflow' ->
- dialyzer_succ_typings:lookup_names(Data, InitData) ++ Result;
- 'warnings' ->
+ Mode =:= 'typesig'; Mode =:= 'dataflow' ->
+ dialyzer_succ_typings:add_to_result(Data, Result, InitData);
+ true ->
Data ++ Result
end.
--spec sccs_to_pids([scc() | module()], coordinator()) ->
- [dialyzer_worker:worker()].
-
-sccs_to_pids(SCCs, {_Collector, _Regulator, SCCtoPID}) ->
- Fold =
- fun(SCC, Pids) ->
- %% The SCCs that SCC depends on have always been started.
- try ets:lookup_element(SCCtoPID, SCC, 2) of
- Pid when is_pid(Pid) ->
- [Pid|Pids]
- catch
- _:_ -> Pids
- end
- end,
- lists:foldl(Fold, [], SCCs).
-
--spec job_done(job(), job_result(), coordinator()) -> ok.
-
-job_done(Job, Result, {Collector, Regulator, _SCCtoPID}) ->
- Regulator ! done,
- Collector ! {done, Job, Result},
- ok.
-
--spec get_next_label(integer(), coordinator()) -> integer().
-
-get_next_label(EstimatedSize, {Collector, _Regulator, _SCCtoPID}) ->
- Collector ! {next_label_request, EstimatedSize, self()},
- receive
- {next_label_reply, NextLabel} -> NextLabel
- end.
+%%--------------------------------------------------------------------
+%% The regulator server
+%%
+%% The regulator limits the number of simultaneous running jobs to the
+%% number of schedulers. Note that there are usually many more worker
+%% processes started, but they are only allowed to do light work (such
+%% as monitoring other processes) when they have not been activated.
-spec wait_activation() -> ok.
@@ -229,12 +304,6 @@ wait_activation() ->
activate_pid(Pid) ->
Pid ! activate.
--spec request_activation(coordinator()) -> ok.
-
-request_activation({_Collector, Regulator, _SCCtoPID}) ->
- Regulator ! {req, self()},
- wait_activation().
-
spawn_regulator() ->
InitTickets = dialyzer_utils:parallelism(),
spawn_link(fun() -> regulator_loop(InitTickets, queue:new()) end).
@@ -250,15 +319,13 @@ regulator_loop(Tickets, Queue) ->
regulator_loop(N-1, Queue)
end;
done ->
- {Waiting, NewQueue} = queue:out(Queue),
- NewTickets =
- case Waiting of
- empty -> Tickets + 1;
- {value, Pid} ->
- activate_pid(Pid),
- Tickets
- end,
- regulator_loop(NewTickets, NewQueue);
+ case queue:out(Queue) of
+ {empty, NewQueue} ->
+ regulator_loop(Tickets + 1, NewQueue);
+ {{value, Pid}, NewQueue} ->
+ activate_pid(Pid),
+ regulator_loop(Tickets, NewQueue)
+ end;
stop -> ok
end.
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 2323889a51..63b430671c 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -85,8 +85,6 @@
-type curr_fun() :: 'undefined' | 'top' | mfa_or_funlbl().
--define(no_arg, no_arg).
-
-define(TYPE_LIMIT, 3).
-define(BITS, 128).
@@ -295,8 +293,6 @@ traverse(Tree, Map, State) ->
literal ->
Type = literal_type(Tree),
{State, Map, Type};
- module ->
- handle_module(Tree, Map, State);
primop ->
case cerl:atom_val(cerl:primop_name(Tree)) of
match_fail ->
@@ -328,8 +324,6 @@ traverse(Tree, Map, State) ->
{State, Map, t_any()};
Other -> erlang:error({'Unsupported primop', Other})
end;
- 'receive' ->
- handle_receive(Tree, Map, State);
seq ->
Arg = cerl:seq_arg(Tree),
Body = cerl:seq_body(Tree),
@@ -1097,60 +1091,6 @@ handle_let(Tree, Map, State) ->
%%----------------------------------------
-handle_module(Tree, Map, State) ->
- %% By not including the variables in scope we can assure that we
- %% will get the current function type when using the variables.
- Defs = cerl:module_defs(Tree),
- PartFun = fun({_Var, Fun}) ->
- state__is_escaping(get_label(Fun), State)
- end,
- {Defs1, Defs2} = lists:partition(PartFun, Defs),
- Letrec = cerl:c_letrec(Defs1, cerl:c_int(42)),
- {State1, Map1, _FunTypes} = traverse(Letrec, Map, State),
- %% Also add environments for the other top-level functions.
- VarTypes = [{Var, state__fun_type(Fun, State1)} || {Var, Fun} <- Defs],
- EnvMap = enter_type_list(VarTypes, Map),
- FoldFun = fun({_Var, Fun}, AccState) ->
- state__update_fun_env(Fun, EnvMap, AccState)
- end,
- State2 = lists:foldl(FoldFun, State1, Defs2),
- {State2, Map1, t_any()}.
-
-%%----------------------------------------
-
-handle_receive(Tree, Map, State) ->
- Clauses = cerl:receive_clauses(Tree),
- Timeout = cerl:receive_timeout(Tree),
- State1 =
- case is_race_analysis_enabled(State) of
- true ->
- {RaceList, RaceListSize} = get_race_list_and_size(State),
- state__renew_race_list([beg_case|RaceList],
- RaceListSize + 1, State);
- false -> State
- end,
- {MapList, State2, ReceiveType, Warns} =
- handle_clauses(Clauses, ?no_arg, t_any(), t_any(), State1, [], Map,
- [], [], []),
- State3 = lists:foldl(fun({T,R,M,F}, S) -> state__add_warning(S,T,R,M,F) end,
- State2, Warns),
- Map1 = join_maps(MapList, Map),
- {State4, Map2, TimeoutType} = traverse(Timeout, Map1, State3),
- Opaques = State4#state.opaques,
- case (t_is_atom(TimeoutType, Opaques) andalso
- (t_atom_vals(TimeoutType, Opaques) =:= ['infinity'])) of
- true ->
- {State4, Map2, ReceiveType};
- false ->
- Action = cerl:receive_action(Tree),
- {State5, Map3, ActionType} = traverse(Action, Map, State4),
- Map4 = join_maps([Map3, Map1], Map),
- Type = t_sup(ReceiveType, ActionType),
- {State5, Map4, Type}
- end.
-
-%%----------------------------------------
-
handle_try(Tree, Map, State) ->
Arg = cerl:try_arg(Tree),
EVars = cerl:try_evars(Tree),
@@ -1380,9 +1320,7 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State, Warns) ->
false -> State
end,
Map0 = mark_as_fresh(Pats, Map),
- Map1 = if Arg =:= ?no_arg -> Map0;
- true -> bind_subst(Arg, Pats, Map0)
- end,
+ Map1 = bind_subst(Arg, Pats, Map0),
BindRes =
case t_is_none(ArgType0) of
true ->
@@ -1492,25 +1430,16 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State, Warns) ->
{State1, Map, t_none(), ArgType0, [{WarnType, C, Msg, Force}|Warns]}
end;
{Map2, PatTypes} ->
+ %% Try to bind the argument. Will only succeed if
+ %% it is a simple structured term.
Map3 =
- case Arg =:= ?no_arg of
- true -> Map2;
- false ->
- %% Try to bind the argument. Will only succeed if
- %% it is a simple structured term.
- case bind_pat_vars_reverse([Arg], [t_product(PatTypes)],
- [], Map2, State1) of
- {error, _, _, _, _} -> Map2;
- {NewMap, _} -> NewMap
- end
- end,
- NewArgType =
- case Arg =:= ?no_arg of
- true -> ArgType0;
- false ->
- GenType = dialyzer_typesig:get_safe_underapprox(Pats, Guard),
- t_subtract(t_product(t_to_tlist(ArgType0)), GenType)
+ case bind_pat_vars_reverse([Arg], [t_product(PatTypes)],
+ [], Map2, State1) of
+ {error, _, _, _, _} -> Map2;
+ {NewMap, _} -> NewMap
end,
+ GenType = dialyzer_typesig:get_safe_underapprox(Pats, Guard),
+ NewArgType = t_subtract(t_product(t_to_tlist(ArgType0)), GenType),
case bind_guard(Guard, Map3, State1) of
{error, Reason} ->
?debug("Failed guard: ~ts\n",
@@ -2880,12 +2809,6 @@ enter_type_lists([Key|KeyTail], [Val|ValTail], Map) ->
enter_type_lists([], [], Map) ->
Map.
-enter_type_list([{Key, Val}|Left], Map) ->
- Map1 = enter_type(Key, Val, Map),
- enter_type_list(Left, Map1);
-enter_type_list([], Map) ->
- Map.
-
enter_type(Key, Val, MS) ->
case cerl:is_literal(Key) of
true -> MS;
@@ -3093,7 +3016,7 @@ state__new(Callgraph, Codeserver, Tree, Plt, Module, Records) ->
envs = Env, fun_tab = FunTab, fun_homes = FunHomes, opaques = Opaques,
plt = Plt, races = dialyzer_races:new(), records = Records,
warning_mode = false, warnings = [], work = Work, tree_map = TreeMap,
- module = Module, reachable_funs = sets:new()}.
+ module = Module, reachable_funs = sets:new([{version, 2}])}.
state__warning_mode(#state{warning_mode = WM}) ->
WM.
@@ -3628,7 +3551,7 @@ renew_race_public_tables([Var], #state{races = Races, callgraph = Callgraph,
%%% ===========================================================================
init_work(List) ->
- {List, [], sets:from_list(List)}.
+ {List, [], sets:from_list(List, [{version, 2}])}.
get_work({[], [], _Set}) ->
none;
diff --git a/lib/dialyzer/src/dialyzer_dep.erl b/lib/dialyzer/src/dialyzer_dep.erl
index 1880e1ee5c..c565a0a612 100644
--- a/lib/dialyzer/src/dialyzer_dep.erl
+++ b/lib/dialyzer/src/dialyzer_dep.erl
@@ -279,7 +279,7 @@ remote_call(Tree, ArgFuns, State) ->
true ->
M1 = cerl:atom_val(M),
F1 = cerl:atom_val(F),
- Literal = cerl_closurean:is_literal_op(M1, F1, A),
+ Literal = is_literal_op(M1, F1, A),
case erl_bifs:is_pure(M1, F1, A) of
true ->
case Literal of
@@ -289,7 +289,7 @@ remote_call(Tree, ArgFuns, State) ->
{output(set__singleton(external)), state__add_esc(ArgFuns, State)}
end;
false ->
- State1 = case cerl_closurean:is_escape_op(M1, F1, A) of
+ State1 = case is_escape_op(M1, F1, A) of
true -> state__add_esc(ArgFuns, State);
false -> State
end,
@@ -303,26 +303,86 @@ remote_call(Tree, ArgFuns, State) ->
primop(Tree, ArgFuns, State) ->
F = cerl:atom_val(cerl:primop_name(Tree)),
A = length(cerl:primop_args(Tree)),
- State1 = case cerl_closurean:is_escape_op(F, A) of
+ State1 = case is_escape_op(F, A) of
true -> state__add_esc(ArgFuns, State);
false -> State
end,
- case cerl_closurean:is_literal_op(F, A) of
+ case is_literal_op(F, A) of
true -> {output(none), State1};
false -> {ArgFuns, State1}
end.
%%------------------------------------------------------------
+
+%% Escape operators may let their arguments escape. Unless we know
+%% otherwise, and the function is not pure, we assume this is the case.
+%% Error-raising functions (fault/match_fail) are not considered as
+%% escapes (but throw/exit are). Zero-argument functions need not be
+%% listed.
+
+-spec is_escape_op(atom(), arity()) -> boolean().
+
+is_escape_op(match_fail, 1) -> false;
+is_escape_op(recv_wait_timeout, 1) -> false;
+is_escape_op(F, A) when is_atom(F), is_integer(A) -> true.
+
+-spec is_escape_op(atom(), atom(), arity()) -> boolean().
+
+is_escape_op(erlang, error, 1) -> false;
+is_escape_op(erlang, error, 2) -> false;
+is_escape_op(M, F, A) when is_atom(M), is_atom(F), is_integer(A) -> true.
+
+%% "Literal" operators will never return functional values even when
+%% found in their arguments. Unless we know otherwise, we assume this is
+%% not the case. (More functions can be added to this list, if needed
+%% for better precision. Note that the result of `term_to_binary' still
+%% contains an encoding of the closure.)
+
+-spec is_literal_op(atom(), arity()) -> boolean().
+
+is_literal_op(recv_wait_timeout, 1) -> true;
+is_literal_op(match_fail, 1) -> true;
+is_literal_op(F, A) when is_atom(F), is_integer(A) -> false.
+
+-spec is_literal_op(atom(), atom(), arity()) -> boolean().
+
+is_literal_op(erlang, '+', 2) -> true;
+is_literal_op(erlang, '-', 2) -> true;
+is_literal_op(erlang, '*', 2) -> true;
+is_literal_op(erlang, '/', 2) -> true;
+is_literal_op(erlang, '=:=', 2) -> true;
+is_literal_op(erlang, '==', 2) -> true;
+is_literal_op(erlang, '=/=', 2) -> true;
+is_literal_op(erlang, '/=', 2) -> true;
+is_literal_op(erlang, '<', 2) -> true;
+is_literal_op(erlang, '=<', 2) -> true;
+is_literal_op(erlang, '>', 2) -> true;
+is_literal_op(erlang, '>=', 2) -> true;
+is_literal_op(erlang, 'and', 2) -> true;
+is_literal_op(erlang, 'or', 2) -> true;
+is_literal_op(erlang, 'not', 1) -> true;
+is_literal_op(erlang, length, 1) -> true;
+is_literal_op(erlang, size, 1) -> true;
+is_literal_op(erlang, fun_info, 1) -> true;
+is_literal_op(erlang, fun_info, 2) -> true;
+is_literal_op(erlang, fun_to_list, 1) -> true;
+is_literal_op(erlang, throw, 1) -> true;
+is_literal_op(erlang, exit, 1) -> true;
+is_literal_op(erlang, error, 1) -> true;
+is_literal_op(erlang, error, 2) -> true;
+is_literal_op(M, F, A) when is_atom(M), is_atom(F), is_integer(A) -> false.
+
+%%------------------------------------------------------------
%% Set
%%
-record(set, {set :: sets:set()}).
set__singleton(Val) ->
- #set{set = sets:add_element(Val, sets:new())}.
+ #set{set = sets:add_element(Val, sets:new([{version, 2}]))}.
set__from_list(List) ->
- #set{set = sets:from_list(List)}.
+ #set{set = sets:from_list(List, [{version, 2}])}.
set__is_element(_El, none) ->
false;
diff --git a/lib/dialyzer/src/dialyzer_options.erl b/lib/dialyzer/src/dialyzer_options.erl
index 44c75d60c1..dd90630b4b 100644
--- a/lib/dialyzer/src/dialyzer_options.erl
+++ b/lib/dialyzer/src/dialyzer_options.erl
@@ -338,20 +338,34 @@ build_warnings([Opt|Opts], Warnings) ->
no_missing_calls ->
ordsets:del_element(?WARN_CALLGRAPH, Warnings);
specdiffs ->
- S = ordsets:from_list([?WARN_CONTRACT_SUBTYPE,
- ?WARN_CONTRACT_SUPERTYPE,
- ?WARN_CONTRACT_NOT_EQUAL]),
- ordsets:union(S, Warnings);
+ S = ordsets:from_list([?WARN_CONTRACT_SUBTYPE,
+ ?WARN_CONTRACT_SUPERTYPE,
+ ?WARN_CONTRACT_NOT_EQUAL,
+ ?WARN_CONTRACT_MISSING_RETURN,
+ ?WARN_CONTRACT_EXTRA_RETURN]),
+ ordsets:union(S, Warnings);
overspecs ->
- ordsets:add_element(?WARN_CONTRACT_SUBTYPE, Warnings);
+ S = ordsets:from_list([?WARN_CONTRACT_SUBTYPE,
+ ?WARN_CONTRACT_MISSING_RETURN]),
+ ordsets:union(S, Warnings);
underspecs ->
- ordsets:add_element(?WARN_CONTRACT_SUPERTYPE, Warnings);
+ S = ordsets:from_list([?WARN_CONTRACT_SUPERTYPE,
+ ?WARN_CONTRACT_EXTRA_RETURN]),
+ ordsets:union(S, Warnings);
no_underspecs ->
- ordsets:del_element(?WARN_CONTRACT_SUPERTYPE, Warnings);
+ ordsets:del_element(?WARN_CONTRACT_SUPERTYPE, Warnings);
+ extra_return ->
+ ordsets:add_element(?WARN_CONTRACT_EXTRA_RETURN, Warnings);
+ no_extra_return ->
+ ordsets:del_element(?WARN_CONTRACT_EXTRA_RETURN, Warnings);
+ missing_return ->
+ ordsets:add_element(?WARN_CONTRACT_MISSING_RETURN, Warnings);
+ no_missing_return ->
+ ordsets:del_element(?WARN_CONTRACT_MISSING_RETURN, Warnings);
unknown ->
- ordsets:add_element(?WARN_UNKNOWN, Warnings);
+ ordsets:add_element(?WARN_UNKNOWN, Warnings);
OtherAtom ->
- bad_option("Unknown dialyzer warning option", OtherAtom)
+ bad_option("Unknown dialyzer warning option", OtherAtom)
end,
build_warnings(Opts, NewWarnings);
build_warnings([], Warnings) ->
diff --git a/lib/dialyzer/src/dialyzer_succ_typings.erl b/lib/dialyzer/src/dialyzer_succ_typings.erl
index c53ea15ae1..248f78a43f 100644
--- a/lib/dialyzer/src/dialyzer_succ_typings.erl
+++ b/lib/dialyzer/src/dialyzer_succ_typings.erl
@@ -11,28 +11,25 @@
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
+%%
+%% Original author: Tobias Lindahl <tobiasl@it.uu.se>
+%%
+%% Purpose: Orchestrate calculation of success typings.
+%%
-%%%-------------------------------------------------------------------
-%%% File : dialyzer_succ_typings.erl
-%%% Author : Tobias Lindahl <tobiasl@it.uu.se>
-%%% Description :
-%%%
-%%% Created : 11 Sep 2006 by Tobias Lindahl <tobiasl@it.uu.se>
-%%%-------------------------------------------------------------------
-module(dialyzer_succ_typings).
--export([analyze_callgraph/3,
- analyze_callgraph/6,
- get_warnings/7
+%% Main entry points.
+-export([analyze_callgraph/5,
+ get_warnings/6
]).
--export([
- find_succ_types_for_scc/2,
+%% Entry points for dialyzer_worker.
+-export([find_succ_types_for_scc/2,
refine_one_module/2,
- %% find_required_by/2,
+ add_to_result/3,
find_depends_on/2,
- collect_warnings/2,
- lookup_names/2
+ collect_warnings/2
]).
-export_type([typesig_init_data/0, dataflow_init_data/0, warnings_init_data/0]).
@@ -54,7 +51,6 @@
%%--------------------------------------------------------------------
%% State record -- local to this module
--type parent() :: 'none' | pid().
-type typesig_init_data() :: term().
-type dataflow_init_data() :: term().
-type warnings_init_data() :: term().
@@ -65,80 +61,33 @@
-record(st, {callgraph :: dialyzer_callgraph:callgraph(),
codeserver :: dialyzer_codeserver:codeserver(),
- parent = none :: parent(),
timing_server :: dialyzer_timing:timing_server(),
solvers :: [solver()],
plt :: dialyzer_plt:plt()}).
-%%--------------------------------------------------------------------
-
--spec analyze_callgraph(dialyzer_callgraph:callgraph(), dialyzer_plt:plt(),
- dialyzer_codeserver:codeserver()) ->
- dialyzer_plt:plt().
-
-analyze_callgraph(Callgraph, Plt, Codeserver) ->
- analyze_callgraph(Callgraph, Plt, Codeserver, none, [], none).
+%% --------------------------------------------------------------------
+%% The main entry points.
-spec analyze_callgraph(dialyzer_callgraph:callgraph(), dialyzer_plt:plt(),
dialyzer_codeserver:codeserver(),
dialyzer_timing:timing_server(),
- [solver()], parent()) ->
+ [solver()]) ->
dialyzer_plt:plt().
-analyze_callgraph(Callgraph, Plt, Codeserver, TimingServer, Solvers, Parent) ->
- NewState =
- init_state_and_get_success_typings(Callgraph, Plt, Codeserver,
- TimingServer, Solvers, Parent),
- NewState#st.plt.
-
-%%--------------------------------------------------------------------
-
-init_state_and_get_success_typings(Callgraph, Plt, Codeserver,
- TimingServer, Solvers, Parent) ->
- {SCCs, Callgraph1} =
- ?timing(TimingServer, "order", dialyzer_callgraph:finalize(Callgraph)),
- State = #st{callgraph = Callgraph1, plt = Plt,
- codeserver = Codeserver, parent = Parent,
- timing_server = TimingServer, solvers = Solvers},
- get_refined_success_typings(SCCs, State).
-
-get_refined_success_typings(SCCs, #st{callgraph = Callgraph,
- timing_server = TimingServer} = State) ->
- case find_succ_typings(SCCs, State) of
- {fixpoint, State1} -> State1;
- {not_fixpoint, NotFixpoint1, State1} ->
- {ModulePostorder, ModCallgraph} =
- ?timing(
- TimingServer, "order", _C1,
- dialyzer_callgraph:module_postorder_from_funs(NotFixpoint1,
- Callgraph)),
- ModState = State1#st{callgraph = ModCallgraph},
- case refine_succ_typings(ModulePostorder, ModState) of
- {fixpoint, State2} ->
- State2;
- {not_fixpoint, NotFixpoint2, State2} ->
- %% Need to reset the callgraph.
- {NewSCCs, Callgraph2} =
- ?timing(TimingServer, "order", _C2,
- dialyzer_callgraph:reset_from_funs(NotFixpoint2,
- ModCallgraph)),
- NewState = State2#st{callgraph = Callgraph2},
- get_refined_success_typings(NewSCCs, NewState)
- end
- end.
+analyze_callgraph(Callgraph, Plt, Codeserver, TimingServer, Solvers) ->
+ _ = get_success_typings(Callgraph, Plt, Codeserver, TimingServer, Solvers),
+ Plt.
-spec get_warnings(dialyzer_callgraph:callgraph(), dialyzer_plt:plt(),
doc_plt(), dialyzer_codeserver:codeserver(),
- dialyzer_timing:timing_server(), [solver()], pid()) ->
+ dialyzer_timing:timing_server(), [solver()]) ->
{[raw_warning()], dialyzer_plt:plt(), doc_plt()}.
get_warnings(Callgraph, Plt, DocPlt, Codeserver,
- TimingServer, Solvers, Parent) ->
- InitState =
- init_state_and_get_success_typings(Callgraph, Plt, Codeserver,
- TimingServer, Solvers, Parent),
+ TimingServer, Solvers) ->
+ InitState = get_success_typings(Callgraph, Plt, Codeserver,
+ TimingServer, Solvers),
Mods = dialyzer_callgraph:modules(InitState#st.callgraph),
- Plt = InitState#st.plt,
CWarns =
dialyzer_contracts:get_invalid_contract_warnings(Mods, Codeserver, Plt),
ModWarns =
@@ -148,18 +97,89 @@ get_warnings(Callgraph, Plt, DocPlt, Codeserver,
Plt,
DocPlt}.
-get_warnings_from_modules(Mods, State, DocPlt) ->
- #st{callgraph = Callgraph, codeserver = Codeserver,
- plt = Plt, timing_server = TimingServer} = State,
- Init = {Codeserver, Callgraph, Plt, DocPlt},
- dialyzer_coordinator:parallel_job(warnings, Mods, Init, TimingServer).
+%% --------------------------------------------------------------------
+%% Callback functions called from dialyzer_worker.
+
+-spec find_succ_types_for_scc(scc(), typesig_init_data()) -> [mfa_or_funlbl()].
+
+find_succ_types_for_scc(SCC0, {Codeserver, Callgraph, Plt, Solvers}) ->
+ SCC = [MFA || {_, _, _} = MFA <- SCC0],
+ Label = dialyzer_codeserver:get_next_core_label(Codeserver),
+ F = fun(MFA) ->
+ {_Var, Fun} = dialyzer_codeserver:lookup_mfa_code(MFA, Codeserver),
+ collect_fun_info(Fun)
+ end,
+ AllFuns = lists:flatmap(F, SCC),
+ PropTypes = get_fun_types_from_plt(AllFuns, Callgraph, Plt),
+
+ %% Assume that the PLT contains the current propagated types
+ FunTypes = dialyzer_typesig:analyze_scc(SCC, Label, Callgraph,
+ Codeserver, Plt, PropTypes,
+ Solvers),
+
+ %% FunTypes may now have picked up funs outside of the SCC. Get rid of them.
+ AllFunKeys = [X || {X, _} <- AllFuns],
+ Set = sofs:set(AllFunKeys, [id]),
+ BinRel = sofs:from_external(FunTypes, [{id,type}]), %Already sorted.
+ FilteredFunTypes = sofs:to_external(sofs:restriction(BinRel, Set)),
+
+ FunMFAContracts = get_contracts(FilteredFunTypes, Callgraph, Codeserver),
+ ModOpaques = get_module_opaques(FunMFAContracts, Codeserver),
+ DecoratedFunTypes = decorate_succ_typings(FunMFAContracts, ModOpaques),
+
+ %% Check contracts
+ Contracts = orddict:from_list([{MFA, Contract} ||
+ {_, {MFA, Contract}} <- FunMFAContracts]),
+ PltContracts =
+ dialyzer_contracts:check_contracts(Contracts, Callgraph,
+ DecoratedFunTypes,
+ ModOpaques),
+ debug_pp_functions("SCC", FilteredFunTypes, DecoratedFunTypes, Callgraph),
+ NewPltContracts = [MC ||
+ {MFA, _C}=MC <- PltContracts,
+ %% Check the non-deleted PLT
+ not dialyzer_plt:is_contract(Plt, MFA)],
+ _ = insert_into_plt(DecoratedFunTypes, Callgraph, Plt),
+ _ = dialyzer_plt:insert_contract_list(Plt, NewPltContracts),
+
+ %% Check whether we have reached a fixpoint.
+ case NewPltContracts =:= [] andalso
+ reached_fixpoint_strict(PropTypes, DecoratedFunTypes) of
+ true -> [];
+ false ->
+ ?debug("Not fixpoint for: ~tw\n", [AllFuns]),
+ AllFunKeys
+ end.
+
+-spec refine_one_module(module(), dataflow_init_data()) -> [mfa_or_funlbl()].
+
+refine_one_module(M, {CodeServer, Callgraph, Plt, _Solvers}) ->
+ ModCode = dialyzer_codeserver:lookup_mod_code(M, CodeServer),
+ AllFuns = collect_fun_info(ModCode),
+ FunTypes = get_fun_types_from_plt(AllFuns, Callgraph, Plt),
+ Records = dialyzer_codeserver:lookup_mod_records(M, CodeServer),
+ NewFunTypes =
+ dialyzer_dataflow:get_fun_types(ModCode, Plt, Callgraph, CodeServer, Records),
+
+ FunMFAContracts = get_contracts(NewFunTypes, Callgraph, CodeServer),
+ ModOpaques = get_module_opaques(FunMFAContracts, CodeServer),
+ DecoratedFunTypes = decorate_succ_typings(FunMFAContracts, ModOpaques),
+ debug_pp_functions("Refine", NewFunTypes, DecoratedFunTypes, Callgraph),
+
+ case updated_types(FunTypes, DecoratedFunTypes) of
+ [] -> [];
+ [_|_]=NotFixpoint ->
+ ?debug("Not fixpoint\n", []),
+ _ = insert_into_plt(NotFixpoint, Callgraph, Plt),
+ [FunLbl || {FunLbl,_Type} <- NotFixpoint]
+ end.
-spec collect_warnings(module(), warnings_init_data()) -> [raw_warning()].
collect_warnings(M, {Codeserver, Callgraph, Plt, DocPlt}) ->
ModCode = dialyzer_codeserver:lookup_mod_code(M, Codeserver),
Contracts = dialyzer_codeserver:lookup_mod_contracts(M, Codeserver),
- AllFuns = collect_fun_info([ModCode]),
+ AllFuns = collect_fun_info(ModCode),
%% Check if there are contracts for functions that do not exist
Warnings1 =
dialyzer_contracts:contracts_without_fun(Contracts, AllFuns, Callgraph),
@@ -173,6 +193,97 @@ collect_warnings(M, {Codeserver, Callgraph, Plt, DocPlt}) ->
DocPlt = insert_into_doc_plt(FunTypes, Callgraph, DocPlt),
lists:flatten([Warnings1, Warnings2, Warnings3]).
+-spec find_depends_on(scc() | module(), fixpoint_init_data()) -> [scc()].
+
+find_depends_on(SCC, {_Codeserver, Callgraph, _Plt, _Solvers}) ->
+ dialyzer_callgraph:get_depends_on(SCC, Callgraph).
+
+-spec add_to_result([label()], [mfa()], fixpoint_init_data()) -> [mfa()].
+
+add_to_result(Labels, Result, {_Codeserver, Callgraph, _Plt, _Solver}) ->
+ [lookup_name(Label, Callgraph) || Label <- Labels] ++ Result.
+
+%% --------------------------------------------------------------------
+%% Local functions.
+%% --------------------------------------------------------------------
+
+%%--------------------------------------------------------------------
+%% Calculate success typings.
+
+get_success_typings(Callgraph, Plt, Codeserver, TimingServer, Solvers) ->
+ %% Condense the call graph to its strongly connected components (SCCs).
+ {SCCs, Callgraph1} =
+ ?timing(TimingServer, "order", dialyzer_callgraph:finalize(Callgraph)),
+ State = #st{callgraph = Callgraph1, plt = Plt,
+ codeserver = Codeserver,
+ timing_server = TimingServer, solvers = Solvers},
+ get_refined_success_typings(SCCs, State).
+
+get_refined_success_typings(SCCs, #st{callgraph = Callgraph,
+ timing_server = TimingServer} = State) ->
+ %% Find the success types for the SCCs.
+ case find_succ_typings(SCCs, State) of
+ [] ->
+ %% No new type information was discovered. We are done.
+ State;
+ NotFixpoint1 ->
+ %% New type information was discovered. Refine the type
+ %% information in each module using a dataflow analysis.
+ {ModulePostorder, ModCallgraph} =
+ ?timing(TimingServer, "order", _C1,
+ dialyzer_callgraph:module_postorder_from_funs(NotFixpoint1,
+ Callgraph)),
+ ?debug("Module postorder: ~p\n", [Modules]),
+
+ ModState = State#st{callgraph = ModCallgraph},
+ case refine_succ_typings(ModulePostorder, ModState) of
+ [] ->
+ %% No new type information was found. We are done.
+ ModState;
+ NotFixpoint2 ->
+ %% Need to reset the callgraph before repeating.
+ {NewSCCs, Callgraph2} =
+ ?timing(TimingServer, "order", _C2,
+ dialyzer_callgraph:reset_from_funs(NotFixpoint2,
+ ModCallgraph)),
+ NewState = ModState#st{callgraph = Callgraph2},
+ get_refined_success_typings(NewSCCs, NewState)
+ end
+ end.
+
+find_succ_typings(SCCs, State) ->
+ {Init, Timing} = init_pass_data(State),
+ Updated =
+ ?timing(Timing, "typesig",
+ dialyzer_coordinator:parallel_job(typesig, SCCs, Init, Timing)),
+ ?debug("==================== Typesig done ====================\n\n", []),
+ Updated.
+
+refine_succ_typings(Modules, State) ->
+ {Init, Timing} = init_pass_data(State),
+ Updated =
+ ?timing(Timing, "refine",
+ dialyzer_coordinator:parallel_job(dataflow, Modules, Init, Timing)),
+ ?debug("==================== Dataflow done ====================\n\n", []),
+ Updated.
+
+init_pass_data(#st{codeserver = Codeserver,
+ callgraph = Callgraph,
+ plt = Plt,
+ timing_server = Timing,
+ solvers = Solvers}) ->
+ Init = {Codeserver, Callgraph, Plt, Solvers},
+ {Init, Timing}.
+
+%%--------------------------------------------------------------------
+%% Produce warnings.
+
+get_warnings_from_modules(Mods, State, DocPlt) ->
+ #st{callgraph = Callgraph, codeserver = Codeserver,
+ plt = Plt, timing_server = TimingServer} = State,
+ Init = {Codeserver, Callgraph, Plt, DocPlt},
+ dialyzer_coordinator:parallel_job(warnings, Mods, Init, TimingServer).
+
postprocess_warnings(RawWarnings, Codeserver) ->
Pred =
fun({?WARN_CONTRACT_RANGE, _, _}) -> true;
@@ -210,177 +321,53 @@ postprocess_dataflow_warns([{?WARN_CONTRACT_RANGE, WarningInfo, Msg}|Rest],
W = {?WARN_CONTRACT_RANGE, WarningInfo, NewMsg},
postprocess_dataflow_warns(Rest, Codeserver, WAcc, [W|Acc])
end.
-
-refine_succ_typings(Modules, #st{codeserver = Codeserver,
- callgraph = Callgraph,
- plt = Plt,
- timing_server = Timing,
- solvers = Solvers} = State) ->
- ?debug("Module postorder: ~p\n", [Modules]),
- Init = {Codeserver, Callgraph, Plt, Solvers},
- NotFixpoint =
- ?timing(Timing, "refine",
- dialyzer_coordinator:parallel_job(dataflow, Modules, Init, Timing)),
- ?debug("==================== Dataflow done ====================\n\n", []),
- case NotFixpoint =:= [] of
- true -> {fixpoint, State};
- false -> {not_fixpoint, NotFixpoint, State}
- end.
-
--spec find_depends_on(scc() | module(), fixpoint_init_data()) -> [scc()].
-
-find_depends_on(SCC, {_Codeserver, Callgraph, _Plt, _Solvers}) ->
- dialyzer_callgraph:get_depends_on(SCC, Callgraph).
-
-%% -spec find_required_by(scc() | module(), fixpoint_init_data()) -> [scc()].
-%% find_required_by(SCC, {_Codeserver, Callgraph, _Plt, _Solvers}) ->
-%% dialyzer_callgraph:get_required_by(SCC, Callgraph).
-
--spec lookup_names([label()], fixpoint_init_data()) -> [mfa_or_funlbl()].
-
-lookup_names(Labels, {_Codeserver, Callgraph, _Plt, _Solvers}) ->
- [lookup_name(F, Callgraph) || F <- Labels].
-
--spec refine_one_module(module(), dataflow_init_data()) -> [label()]. % ordset
-
-refine_one_module(M, {CodeServer, Callgraph, Plt, _Solvers}) ->
- ModCode = dialyzer_codeserver:lookup_mod_code(M, CodeServer),
- AllFuns = collect_fun_info([ModCode]),
- FunTypes = get_fun_types_from_plt(AllFuns, Callgraph, Plt),
- Records = dialyzer_codeserver:lookup_mod_records(M, CodeServer),
- NewFunTypes =
- dialyzer_dataflow:get_fun_types(ModCode, Plt, Callgraph, CodeServer, Records),
- {FunMFAContracts, ModOpaques} =
- prepare_decoration(NewFunTypes, Callgraph, CodeServer),
- DecoratedFunTypes = decorate_succ_typings(FunMFAContracts, ModOpaques),
- %% ?Debug("NewFunTypes ~tp\n ~n", [NewFunTypes]),
- %% ?debug("refine DecoratedFunTypes ~tp\n ~n", [DecoratedFunTypes]),
- debug_pp_functions("Refine", NewFunTypes, DecoratedFunTypes, Callgraph),
-
- case reached_fixpoint(FunTypes, DecoratedFunTypes) of
- true -> [];
- {false, NotFixpoint} ->
- ?debug("Not fixpoint\n", []),
- Plt = insert_into_plt(orddict:from_list(NotFixpoint), Callgraph, Plt),
- [FunLbl || {FunLbl,_Type} <- NotFixpoint]
- end.
-
-reached_fixpoint(OldTypes, NewTypes) ->
- reached_fixpoint(OldTypes, NewTypes, false).
-
-reached_fixpoint_strict(OldTypes, NewTypes) ->
- case reached_fixpoint(OldTypes, NewTypes, true) of
- true -> true;
- {false, _} -> false
- end.
+%%--------------------------------------------------------------------
+%% Helpers.
-reached_fixpoint(OldTypes0, NewTypes0, Strict) ->
- MapFun = fun({Key, Type}) ->
- case is_failed_or_not_called_fun(Type) of
- true -> {Key, failed_fun};
- false -> {Key, erl_types:t_limit(Type, ?TYPE_LIMIT)}
- end
- end,
- OldTypes = lists:map(MapFun, orddict:to_list(OldTypes0)),
- NewTypes = lists:map(MapFun, orddict:to_list(NewTypes0)),
- compare_types(OldTypes, NewTypes, Strict).
+reached_fixpoint_strict([{Key,Type1}|Types1], [{Key,Type2}|Types2]) ->
+ case is_failed_or_not_called_fun(Type2) of
+ true ->
+ reached_fixpoint_strict(Types1, Types2);
+ false ->
+ LimitedType1 = erl_types:t_limit(Type1, ?TYPE_LIMIT),
+ LimitedType2 = erl_types:t_limit(Type2, ?TYPE_LIMIT),
+ erl_types:t_is_equal(LimitedType1, LimitedType2) andalso
+ reached_fixpoint_strict(Types1, Types2)
+ end;
+reached_fixpoint_strict([{Key1,_}|Types1], [{Key2,_}|_]=Types2)
+ when Key1 < Key2 ->
+ %% The function was never called.
+ reached_fixpoint_strict(Types1, Types2);
+reached_fixpoint_strict([], []) ->
+ true.
+
+updated_types(OldTypes, NewTypes) ->
+ updated_types_1(OldTypes, NewTypes, []).
+
+updated_types_1([{Key,Type1}|Types1], [{Key,Type2}|Types2], Acc) ->
+ case is_failed_or_not_called_fun(Type2) of
+ true ->
+ updated_types_1(Types1, Types2, Acc);
+ false ->
+ LimitedType1 = erl_types:t_limit(Type1, ?TYPE_LIMIT),
+ LimitedType2 = erl_types:t_limit(Type2, ?TYPE_LIMIT),
+ case erl_types:t_is_subtype(LimitedType1, LimitedType2) of
+ true ->
+ updated_types_1(Types1, Types2, Acc);
+ false ->
+ ?debug("Failed fixpoint for ~w: ~ts =/= ~ts\n",
+ [Key, erl_types:t_to_string(Type1), erl_types:t_to_string(Type2)]),
+ updated_types_1(Types1, Types2, [{Key, Type2}|Acc])
+ end
+ end;
+updated_types_1([], [], Acc) ->
+ Acc.
is_failed_or_not_called_fun(Type) ->
erl_types:any_none([erl_types:t_fun_range(Type)|erl_types:t_fun_args(Type)]).
-compare_types(List1, List2, Strict) ->
- compare_types_1(List1, List2, Strict, []).
-
-compare_types_1([{X, _Type1}|Left1], [{X, failed_fun}|Left2],
- Strict, NotFixpoint) ->
- compare_types_1(Left1, Left2, Strict, NotFixpoint);
-compare_types_1([{X, failed_fun}|Left1], [{X, _Type2}|Left2],
- Strict, NotFixpoint) ->
- compare_types_1(Left1, Left2, Strict, NotFixpoint);
-compare_types_1([{X, Type1}|Left1], [{X, Type2}|Left2], Strict, NotFixpoint) ->
- Res = case Strict of
- true -> erl_types:t_is_equal(Type1, Type2);
- false -> erl_types:t_is_subtype(Type1, Type2)
- end,
- case Res of
- true -> compare_types_1(Left1, Left2, Strict, NotFixpoint);
- false ->
- ?debug("Failed fixpoint for ~w: ~ts =/= ~ts\n",
- [X, erl_types:t_to_string(Type1), erl_types:t_to_string(Type2)]),
- compare_types_1(Left1, Left2, Strict, [{X, Type2}|NotFixpoint])
- end;
-compare_types_1([_|Left1], List2, Strict, NotFixpoint) ->
- %% If the function was not called.
- compare_types_1(Left1, List2, Strict, NotFixpoint);
-compare_types_1([], [], _Strict, NotFixpoint) ->
- case NotFixpoint =:= [] of
- true -> true;
- false -> {false, NotFixpoint}
- end.
-
-find_succ_typings(SCCs, #st{codeserver = Codeserver, callgraph = Callgraph,
- plt = Plt, timing_server = Timing,
- solvers = Solvers} = State) ->
- Init = {Codeserver, Callgraph, Plt, Solvers},
- NotFixpoint =
- ?timing(Timing, "typesig",
- dialyzer_coordinator:parallel_job(typesig, SCCs, Init, Timing)),
- ?debug("==================== Typesig done ====================\n\n", []),
- case NotFixpoint =:= [] of
- true -> {fixpoint, State};
- false -> {not_fixpoint, NotFixpoint, State}
- end.
-
--spec find_succ_types_for_scc(scc(), typesig_init_data()) -> [mfa_or_funlbl()].
-
-find_succ_types_for_scc(SCC0, {Codeserver, Callgraph, Plt, Solvers}) ->
- SCC = [MFA || {_, _, _} = MFA <- SCC0],
- Label = dialyzer_codeserver:get_next_core_label(Codeserver),
- AllFuns = lists:append(
- [begin
- {_Var, Fun} =
- dialyzer_codeserver:lookup_mfa_code(MFA, Codeserver),
- collect_fun_info([Fun])
- end || MFA <- SCC]),
- PropTypes = get_fun_types_from_plt(AllFuns, Callgraph, Plt),
- %% Assume that the PLT contains the current propagated types
- FunTypes = dialyzer_typesig:analyze_scc(SCC, Label, Callgraph,
- Codeserver, Plt, PropTypes,
- Solvers),
- AllFunSet = sets:from_list([X || {X, _} <- AllFuns]),
- FilteredFunTypes =
- orddict:filter(fun(F, _T) -> sets:is_element(F, AllFunSet)
- end, FunTypes),
- {FunMFAContracts, ModOpaques} =
- prepare_decoration(FilteredFunTypes, Callgraph, Codeserver),
- DecoratedFunTypes = decorate_succ_typings(FunMFAContracts, ModOpaques),
- %% Check contracts
- Contracts = orddict:from_list([{MFA, Contract} ||
- {_, {MFA, Contract}} <- FunMFAContracts]),
- PltContracts =
- dialyzer_contracts:check_contracts(Contracts, Callgraph,
- DecoratedFunTypes,
- ModOpaques),
- %% ?debug("FilteredFunTypes ~tp\n ~n", [FilteredFunTypes]),
- %% ?debug("SCC DecoratedFunTypes ~tp\n ~n", [DecoratedFunTypes]),
- debug_pp_functions("SCC", FilteredFunTypes, DecoratedFunTypes, Callgraph),
- NewPltContracts = [MC ||
- {MFA, _C}=MC <- PltContracts,
- %% Check the non-deleted PLT
- not dialyzer_plt:is_contract(Plt, MFA)],
- ContractFixpoint = NewPltContracts =:= [],
- Plt = insert_into_plt(DecoratedFunTypes, Callgraph, Plt),
- Plt = dialyzer_plt:insert_contract_list(Plt, NewPltContracts),
- case (ContractFixpoint andalso
- reached_fixpoint_strict(PropTypes, DecoratedFunTypes)) of
- true -> [];
- false ->
- ?debug("Not fixpoint for: ~tw\n", [AllFuns]),
- [Fun || {Fun, _Arity} <- AllFuns]
- end.
-
-prepare_decoration(FunTypes, Callgraph, Codeserver) ->
+get_contracts(FunTypes, Callgraph, Codeserver) ->
F = fun({Label, _Type}=LabelType, Acc) ->
case dialyzer_callgraph:lookup_name(Label, Callgraph) of
{ok, MFA} ->
@@ -392,24 +379,28 @@ prepare_decoration(FunTypes, Callgraph, Codeserver) ->
error -> [{LabelType, no}|Acc]
end
end,
- Contracts = lists:foldl(F, [], orddict:to_list(FunTypes)),
- ModOpaques =
- [{M, lookup_opaques(M, Codeserver)} ||
- M <- lists:usort([M || {_LabelType, {{M, _, _}, _Con}} <- Contracts])],
- {Contracts, orddict:from_list(ModOpaques)}.
+ lists:foldl(F, [], FunTypes).
+
+get_module_opaques(Contracts, Codeserver) ->
+ OpaqueModules = ordsets:from_list([M || {_LabelType, {{M, _, _}, _Con}} <- Contracts]),
+ [{M, lookup_opaques(M, Codeserver)} || M <- OpaqueModules].
decorate_succ_typings(FunTypesContracts, ModOpaques) ->
- F = fun({{Label, Type}, {{M, _, _}, Contract}}) ->
- Args = dialyzer_contracts:get_contract_args(Contract),
- Ret = dialyzer_contracts:get_contract_return(Contract),
- C = erl_types:t_fun(Args, Ret),
- {M, Opaques} = lists:keyfind(M, 1, ModOpaques),
- R = erl_types:t_decorate_with_opaque(Type, C, Opaques),
- {Label, R};
- ({LabelType, no}) ->
- LabelType
+ F = fun({{Label, Type}, {{M, _, _}, Contract}}, Acc) ->
+ case lists:keyfind(M, 1, ModOpaques) of
+ {M, []} ->
+ [{Label, Type}|Acc];
+ {M, Opaques} ->
+ Args = dialyzer_contracts:get_contract_args(Contract),
+ Ret = dialyzer_contracts:get_contract_return(Contract),
+ C = erl_types:t_fun(Args, Ret),
+ R = erl_types:t_decorate_with_opaque(Type, C, Opaques),
+ [{Label, R}|Acc]
+ end;
+ ({LabelType, no}, Acc) ->
+ [LabelType|Acc]
end,
- orddict:from_list(lists:map(F, FunTypesContracts)).
+ orddict:from_list(lists:foldl(F, [], FunTypesContracts)).
lookup_opaques(Module, Codeserver) ->
Records = dialyzer_codeserver:lookup_mod_records(Module, Codeserver),
@@ -424,10 +415,7 @@ get_fun_types_from_plt([{FunLabel, Arity}|Left], Callgraph, Plt, Map) ->
get_fun_types_from_plt([], _Callgraph, _Plt, Map) ->
orddict:from_list(Map).
-collect_fun_info(Trees) ->
- collect_fun_info(Trees, []).
-
-collect_fun_info([Tree|Trees], List) ->
+collect_fun_info(Tree) ->
Fun = fun(SubTree, Acc) ->
case cerl:is_c_fun(SubTree) of
true ->
@@ -435,9 +423,7 @@ collect_fun_info([Tree|Trees], List) ->
false -> Acc
end
end,
- collect_fun_info(Trees, cerl_trees:fold(Fun, List, Tree));
-collect_fun_info([], List) ->
- List.
+ cerl_trees:fold(Fun, [], Tree).
lookup_fun_type(Label, Arity, Callgraph, Plt) ->
ID = lookup_name(Label, Callgraph),
@@ -468,6 +454,15 @@ format_succ_types([{Label, Type0}|Left], Callgraph, Acc) ->
format_succ_types([], _Callgraph, Acc) ->
Acc.
+lookup_name(F, CG) ->
+ case dialyzer_callgraph:lookup_name(F, CG) of
+ error -> F;
+ {ok, Name} -> Name
+ end.
+
+%%--------------------------------------------------------------------
+%% Debugging.
+
-ifdef(DEBUG).
debug_pp_succ_typings(SuccTypes) ->
?debug("Succ typings:\n", []),
@@ -503,9 +498,3 @@ debug_pp_succ_typings(_) ->
debug_pp_functions(_, _, _, _) ->
ok.
-endif.
-
-lookup_name(F, CG) ->
- case dialyzer_callgraph:lookup_name(F, CG) of
- error -> F;
- {ok, Name} -> Name
- end.
diff --git a/lib/dialyzer/src/dialyzer_typesig.erl b/lib/dialyzer/src/dialyzer_typesig.erl
index 62ab852fae..3fd4e59e4a 100644
--- a/lib/dialyzer/src/dialyzer_typesig.erl
+++ b/lib/dialyzer/src/dialyzer_typesig.erl
@@ -28,12 +28,13 @@
%%-import(helper, %% 'helper' could be any module doing sanity checks...
-import(erl_types,
[t_has_var/1, t_inf/2, t_is_equal/2, t_is_subtype/2,
- t_subtract/2, t_subtract_list/2, t_sup/1, t_sup/2,t_unify/2]).
+ t_subtract/2, t_subtract_list/2, t_sup/1, t_sup/2,
+ t_unify_table_only/2]).
-import(erl_types,
[t_any/0, t_atom/0, t_atom_vals/1,
t_binary/0, t_bitstr/0, t_bitstr/2, t_bitstr_concat/1, t_boolean/0,
- t_collect_vars/1, t_cons/2, t_cons_hd/1, t_cons_tl/1,
+ t_collect_var_names/1, t_cons/2, t_cons_hd/1, t_cons_tl/1,
t_float/0, t_from_range/2, t_from_term/1,
t_fun/0, t_fun/2, t_fun_args/1, t_fun_range/1,
t_integer/0,
@@ -97,7 +98,7 @@
-type typesig_funmap() :: #{type_var() => type_var()}.
-type prop_types() :: orddict:orddict(label(), erl_types:erl_type()).
--type dict_prop_types() :: dict:dict(label(), erl_types:erl_type()).
+-type dict_prop_types() :: #{label() => erl_types:erl_type()}.
-record(state, {callgraph :: dialyzer_callgraph:callgraph()
| 'undefined',
@@ -114,7 +115,7 @@
self_rec :: 'false' | erl_types:erl_type(),
plt :: dialyzer_plt:plt()
| 'undefined',
- prop_types = dict:new() :: dict_prop_types(),
+ prop_types = #{} :: dict_prop_types(),
mod_records = [] :: [{module(), types()}],
scc = [] :: ordsets:ordset(type_var()),
mfas :: [mfa()],
@@ -132,10 +133,8 @@
%%-define(DEBUG_CONSTRAINTS, true).
-ifdef(DEBUG).
-define(DEBUG_NAME_MAP, true).
--define(DEBUG_LOOP_DETECTION, true).
-endif.
%%-define(DEBUG_NAME_MAP, true).
-%%-define(DEBUG_LOOP_DETECTION, true).
-ifdef(DEBUG).
-define(debug(__String, __Args), io:format(__String, __Args)).
@@ -180,7 +179,7 @@ analyze_scc(SCC, NextLabel, CallGraph, CServer, Plt, PropTypes, Solvers0) ->
Solvers = solvers(Solvers0),
State1 = new_state(SCC, NextLabel, CallGraph, CServer, Plt, PropTypes,
Solvers),
- DefSet = add_def_list(maps:values(State1#state.name_map), sets:new()),
+ DefSet = add_def_list(maps:values(State1#state.name_map), sets:new([{version, 2}])),
State2 = traverse_scc(SCC, CServer, DefSet, State1),
State3 = state__finalize(State2),
Funs = state__scc(State3),
@@ -308,7 +307,7 @@ traverse(Tree, DefinedVars, State) ->
Hd = cerl:cons_hd(Tree),
Tl = cerl:cons_tl(Tree),
{State1, [HdVar, TlVar]} = traverse_list([Hd, Tl], DefinedVars, State),
- case cerl:is_literal(fold_literal_maybe_match(Tree, State)) of
+ case is_foldable(Tree, State) of
true ->
%% We do not need to do anything more here.
{State, t_cons(HdVar, TlVar)};
@@ -350,10 +349,7 @@ traverse(Tree, DefinedVars, State) ->
TreeVar = mk_var(Tree),
State2 =
try
- State1 = case state__add_prop_constrs(Tree, State0) of
- not_called -> State0;
- PropState -> PropState
- end,
+ State1 = state__add_prop_constrs(Tree, State0),
{BodyState, BodyVar} = traverse(Body, DefinedVars1, State1),
state__store_conj(TreeVar, eq,
t_fun(mk_var_list(Vars), BodyVar), BodyState)
@@ -401,18 +397,6 @@ traverse(Tree, DefinedVars, State) ->
end;
_ -> {State, t_from_term(cerl:concrete(Tree))}
end;
- module ->
- Defs = cerl:module_defs(Tree),
- Funs = [Fun || {_Var, Fun} <- Defs],
- Vars = [Var || {Var, _Fun} <- Defs],
- DefinedVars1 = add_def_list(Vars, DefinedVars),
- State1 = state__store_funs(Vars, Funs, State),
- FoldFun = fun(Fun, AccState) ->
- {S, _} = traverse(Fun, DefinedVars1,
- state__new_constraint_context(AccState)),
- S
- end,
- lists:foldl(FoldFun, State1, Funs);
primop ->
case cerl:atom_val(cerl:primop_name(Tree)) of
match_fail -> throw(error);
@@ -446,19 +430,6 @@ traverse(Tree, DefinedVars, State) ->
{State, t_any()};
Other -> erlang:error({'Unsupported primop', Other})
end;
- 'receive' ->
- Clauses = cerl:receive_clauses(Tree),
- Timeout = cerl:receive_timeout(Tree),
- case (cerl:is_c_atom(Timeout) andalso
- (cerl:atom_val(Timeout) =:= infinity)) of
- true ->
- handle_clauses(Clauses, mk_var(Tree), [], DefinedVars, State);
- false ->
- Action = cerl:receive_action(Tree),
- {State1, TimeoutVar} = traverse(Timeout, DefinedVars, State),
- State2 = state__store_conj(TimeoutVar, sub, t_timeout(), State1),
- handle_clauses(Clauses, mk_var(Tree), [], Action, DefinedVars, State2)
- end;
seq ->
Body = cerl:seq_body(Tree),
Arg = cerl:seq_arg(Tree),
@@ -470,7 +441,7 @@ traverse(Tree, DefinedVars, State) ->
Elements = cerl:tuple_es(Tree),
{State1, EVars} = traverse_list(Elements, DefinedVars, State),
{State2, TupleType} =
- case cerl:is_literal(fold_literal_maybe_match(Tree, State1)) of
+ case is_foldable(Tree, State) of
true ->
%% We do not need to do anything more here.
{State, t_tuple(EVars)};
@@ -667,13 +638,14 @@ add_def_list([], Set) ->
Set.
add_def_from_tree(T, DefinedVars) ->
- Vars = cerl_trees:fold(fun(X, Acc) ->
- case cerl:is_c_var(X) of
- true -> [X|Acc];
- false -> Acc
- end
- end, [], T),
- add_def_list(Vars, DefinedVars).
+ cerl_trees:fold(fun(X, Set) ->
+ case cerl:is_c_var(X) of
+ true ->
+ add_def(X, Set);
+ false ->
+ Set
+ end
+ end, DefinedVars, T).
add_def_from_tree_list([H|T], DefinedVars) ->
add_def_from_tree_list(T, add_def_from_tree(H, DefinedVars));
@@ -858,12 +830,6 @@ get_contract_return(C, ArgTypes) ->
-define(MAX_NOF_CLAUSES, 15).
handle_clauses(Clauses, TopVar, Arg, DefinedVars, State) ->
- handle_clauses(Clauses, TopVar, Arg, none, DefinedVars, State).
-
-handle_clauses([], _, _, Action, DefinedVars, State) when Action =/= none ->
- %% Can happen when a receive has no clauses, see filter_match_fail.
- traverse(Action, DefinedVars, State);
-handle_clauses(Clauses, TopVar, Arg, Action, DefinedVars, State) ->
SubtrTypeList =
if length(Clauses) > ?MAX_NOF_CLAUSES -> overflow;
true -> []
@@ -871,23 +837,8 @@ handle_clauses(Clauses, TopVar, Arg, Action, DefinedVars, State) ->
{State1, CList} = handle_clauses_1(Clauses, TopVar, Arg, DefinedVars,
State, SubtrTypeList, []),
{NewCs, NewState} =
- case Action of
- none ->
- if CList =:= [] -> throw(error);
- true -> {CList, State1}
- end;
- _ ->
- try
- {State2, ActionVar} = traverse(Action, DefinedVars, State1),
- TmpC = mk_constraint(TopVar, eq, ActionVar),
- ActionCs = mk_conj_constraint_list([state__cs(State2),TmpC]),
- {[ActionCs|CList], State2}
- catch
- throw:error ->
- if CList =:= [] -> throw(error);
- true -> {CList, State1}
- end
- end
+ if CList =:= [] -> throw(error);
+ true -> {CList, State1}
end,
OldCs = state__cs(State),
NewCList = mk_disj_constraint_list(NewCs),
@@ -901,29 +852,27 @@ handle_clauses_1([Clause|Tail], TopVar, Arg, DefinedVars,
Guard = cerl:clause_guard(Clause),
Body = cerl:clause_body(Clause),
NewSubtrTypes =
- case SubtrTypes =:= overflow of
- true -> overflow;
- false ->
+ case SubtrTypes of
+ overflow ->
+ overflow;
+ _ ->
ordsets:add_element(get_safe_underapprox(Pats, Guard), SubtrTypes)
end,
try
DefinedVars1 = add_def_from_tree_list(Pats, DefinedVars),
State1 = state__set_in_match(State0, true),
{State2, PatVars} = traverse_list(Pats, DefinedVars1, State1),
+ S = state__store_conj(Arg, eq, t_product(PatVars), State2),
State3 =
- case Arg =:= [] of
- true -> State2;
- false ->
- S = state__store_conj(Arg, eq, t_product(PatVars), State2),
- case SubtrTypes =:= overflow of
- true -> S;
- false ->
- SubtrPatVar = ?mk_fun_var(fun(Map) ->
- TmpType = lookup_type(Arg, Map),
- t_subtract_list(TmpType, SubtrTypes)
- end, [Arg]),
- state__store_conj(Arg, sub, SubtrPatVar, S)
- end
+ case SubtrTypes of
+ overflow ->
+ S;
+ _ ->
+ SubtrPatVar = ?mk_fun_var(fun(Map) ->
+ TmpType = lookup_type(Arg, Map),
+ t_subtract_list(TmpType, SubtrTypes)
+ end, [Arg]),
+ state__store_conj(Arg, sub, SubtrPatVar, S)
end,
State4 = handle_guard(Guard, DefinedVars1, State3),
{State5, BodyVar} = traverse(Body, DefinedVars1,
@@ -1800,12 +1749,12 @@ get_bif_test_constr(Dst, Arg, Type, _State) ->
solve([Fun], State) ->
?debug("============ Analyzing Fun: ~tw ===========\n",
[debug_lookup_name(Fun)]),
- solve_fun(Fun, map_new(), State);
+ solve_fun(Fun, #{}, State);
solve([_|_] = SCC, State) ->
?debug("============ Analyzing SCC: ~tw ===========\n",
[[debug_lookup_name(F) || F <- SCC]]),
Users = comp_users(SCC, State),
- solve_scc(SCC, map_new(), State, Users, _ToSolve=SCC, false).
+ solve_scc(SCC, #{}, State, Users, _ToSolve=SCC, false).
comp_users(SCC, State) ->
Vars0 = [{Fun, state__get_rec_var(Fun, State)} || Fun <- SCC],
@@ -1816,11 +1765,8 @@ comp_users(SCC, State) ->
Vars)]).
solve_fun(Fun, FunMap, State) ->
- Cs = state__get_cs(Fun, State),
- Deps = get_deps(Cs),
- Ref = mk_constraint_ref(Fun, Deps),
%% Note that functions are always considered to succeed.
- NewMap = solve(Fun, Ref, FunMap, State),
+ NewMap = solve(Fun, FunMap, State),
NewType = lookup_type(Fun, NewMap),
NewFunMap1 = case state__get_rec_var(Fun, State) of
error -> FunMap;
@@ -1872,10 +1818,8 @@ affected(Updated, Users) ->
end || V <- Updated]).
scc_fold_fun(F, FunMap, State) ->
- Deps = get_deps(state__get_cs(F, State)),
- Cs = mk_constraint_ref(F, Deps),
%% Note that functions are always considered to succeed.
- Map = solve(F, Cs, FunMap, State),
+ Map = solve(F, FunMap, State),
NewType0 = unsafe_lookup_type(F, Map),
NewType = t_limit(NewType0, ?TYPE_LIMIT),
NewFunMap = case state__get_rec_var(F, State) of
@@ -1888,75 +1832,23 @@ scc_fold_fun(F, FunMap, State) ->
format_type(NewType)]),
NewFunMap.
-solve(Fun, Cs, FunMap, State) ->
- Solvers = State#state.solvers,
- R = [solver(S, solve_fun(S, Fun, Cs, FunMap, State)) || S <- Solvers],
- check_solutions(R, Fun, no_solver, no_map).
-
-solver(Solver, SolveFun) ->
- ?debug("Start solver ~w\n", [Solver]),
- try timer:tc(SolveFun) of
- {Time, {ok, Map}} ->
- ?debug("End solver ~w (~w microsecs)\n", [Solver, Time]),
- {Solver, Map, Time};
- {_, _R} ->
- ?debug("Solver ~w returned unexpected result:\n ~P\n",
- [Solver, _R, 60]),
- throw(error)
- catch E:R:S ->
- io:format("Solver ~w failed: ~w:~p\n ~tp\n", [Solver, E, R, S]),
- throw(error)
- end.
-
-solve_fun(v1, _Fun, Cs, FunMap, State) ->
- fun() ->
- {ok, _MapDict, NewMap} = solve_ref_or_list(Cs, FunMap, map_new(), State),
- {ok, NewMap}
- end;
-solve_fun(v2, Fun, _Cs, FunMap, State) ->
- fun() -> v2_solve_ref(Fun, FunMap, State) end.
-
-check_solutions([], _Fun, _S, Map) ->
- Map;
-check_solutions([{S1,Map1,_Time1}|Maps], Fun, S, Map) ->
- ?debug("Solver ~w needed ~w microsecs\n", [S1, _Time1]),
- case Map =:= no_map orelse sane_maps(Map, Map1, [Fun], S, S1) of
- true ->
- check_solutions(Maps, Fun, S1, Map1);
- false ->
- ?debug("Constraint solvers do not agree on ~w\n", [Fun]),
- ?pp_map(atom_to_list(S), Map),
- ?pp_map(atom_to_list(S1), Map1),
- io:format("A bug was found. Please report it, and use the option "
- "`--solver v1' until the bug has been fixed.\n"),
- throw(error)
- end.
-
-sane_maps(Map1, Map2, Keys, _S1, _S2) ->
- lists:all(fun(Key) ->
- V1 = unsafe_lookup_type(Key, Map1),
- V2 = unsafe_lookup_type(Key, Map2),
- case t_is_equal(V1, V2) of
- true -> true;
- false ->
- ?debug("Constraint solvers do not agree on ~w\n", [Key]),
- ?debug("~w: ~ts\n",
- [_S1, format_type(unsafe_lookup_type(Key, Map1))]),
- ?debug("~w: ~ts\n",
- [_S2, format_type(unsafe_lookup_type(Key, Map2))]),
- false
- end
- end, Keys).
-
%% Solver v2
-record(v2_state, {constr_data = maps:new() :: map(),
state :: state()}).
-v2_solve_ref(Fun, Map, State) ->
+solve(Fun, FunMap, State) ->
V2State = #v2_state{state = State},
- {ok, NewMap, _, _} = v2_solve_reference(Fun, Map, V2State),
- {ok, NewMap}.
+ try v2_solve_reference(Fun, FunMap, V2State) of
+ {ok, NewMap, _, _} -> NewMap
+ catch
+ throw:infinite_loop:Stack ->
+ erlang:raise(error,
+ {"Infinite loop detected, please report this bug.",
+ Fun,
+ State#state.module},
+ Stack)
+ end.
v2_solve(#constraint{}=C, Map, V2State) ->
case solve_one_c(C, Map) of
@@ -2117,33 +2009,34 @@ v2_solve_disj(Is, [C|Cs], I, Map, V2State, UL, MapL, Eval, Uneval0, Failed) ->
not is_failed_list(C, V2State)] ++ Uneval0,
v2_solve_disj(Is, Cs, I+1, Map, V2State, UL, MapL, Eval, Uneval, Failed).
-save_local_map(#v2_state{constr_data = ConData}=V2State, Id, U, Map) ->
- Part0 = [{V,maps:get(V, Map)} || V <- U],
- Part1 =
- case maps:find(Id, ConData) of
- error -> []; % cannot happen
- {ok, {Part2,[]}} -> Part2
- end,
+save_local_map(#v2_state{constr_data = ConData0}=V2State, Id, U, Map) ->
?debug("save local map Id=~w:\n", [Id]),
- Part = lists:ukeymerge(1, lists:keysort(1, Part0), Part1),
- ?pp_map("New Part", maps:from_list(Part0)),
- ?pp_map("Old Part", maps:from_list(Part1)),
- ?pp_map(" => Part", maps:from_list(Part)),
- V2State#v2_state{constr_data = maps:put(Id, {Part,[]}, ConData)}.
+
+ {Part0, []} = maps:get(Id, ConData0, {#{}, []}),
+ ?pp_map("Old Part", Part0),
+
+ Part = maps:merge(Part0, maps:with(U, Map)),
+ ?pp_map(" => Part", Part),
+
+ ConData = ConData0#{ Id => {Part,[]} },
+ V2State#v2_state{constr_data = ConData}.
restore_local_map(#v2_state{constr_data = ConData}, Id, Map0) ->
- case maps:find(Id, ConData) of
- error -> Map0;
- {ok, failed} -> Map0;
- {ok, {[],_}} -> Map0;
- {ok, {Part0,U}} ->
- Part = [KV || {K,_V} = KV <- Part0, not lists:member(K, U)],
+ case ConData of
+ #{ Id := {Part0, U} } when map_size(Part0) =/= 0 ->
?debug("restore local map Id=~w U=~w\n", [Id, U]),
- ?pp_map("Part", maps:from_list(Part)),
+
?pp_map("Map0", Map0),
- Map = lists:foldl(fun({K,V}, D) -> maps:put(K, V, D) end, Map0, Part),
+
+ Part = maps:without(U, Part0),
+ ?pp_map("Part", Part0),
+
+ Map = maps:merge(Map0, Part),
?pp_map("Map", Map),
- Map
+
+ Map;
+ #{} ->
+ Map0
end.
v2_solve_conjunct(Conj, Map, V2State0) ->
@@ -2189,18 +2082,19 @@ v2_solve_conj([I|Is], [Cs|Tail], I, Map0, Conj, IsFlat, V2State0,
[U|UL], NewFs, VarsUp, LastMap, LastFlags)
end;
v2_solve_conj([], _Cs, _I, Map, Conj, IsFlat, V2State, UL, NewFs, VarsUp,
- LastMap, LastFlags) ->
+ LastMap, LastFlags) ->
U = lists:umerge(UL),
case lists:umerge(NewFs) of
[] ->
?debug("conjunct finished Id=~w\n", [Conj#constraint_list.id]),
{ok, Map, V2State, lists:umerge([U|VarsUp])};
NewFlags when NewFlags =:= LastFlags, Map =:= LastMap ->
- %% A loop was detected! The cause is some bug, possibly in erl_types.
- %% The evaluation continues, but the results can be wrong.
- report_detected_loop(Conj),
- {ok, Map, V2State, lists:umerge([U|VarsUp])};
+ %% We're stuck in an infinite loop, so we'll crash in the hopes of
+ %% getting a report. Trying to return anyway will yield potentially
+ %% misleading results.
+ throw(infinite_loop);
NewFlags ->
+ ?debug("conjunct restart Id=~w\n", [Conj#constraint_list.id]),
#constraint_list{type = conj, list = Cs} = Conj,
v2_solve_conj(NewFlags, Cs, 1, Map, Conj, IsFlat, V2State,
[], [], [U|VarsUp], Map, NewFlags)
@@ -2218,14 +2112,6 @@ v2_solve_conj(Is, [_|Tail], I, Map, Conj, IsFlat, V2State, UL, NewFs, VarsUp,
v2_solve_conj(Is, Tail, I+1, Map, Conj, IsFlat, V2State, UL, NewFs, VarsUp,
LastMap, LastFlags).
--ifdef(DEBUG_LOOP_DETECTION).
-report_detected_loop(Conj) ->
- io:format("A loop was detected in ~w\n", [Conj#constraint_list.id]).
--else.
-report_detected_loop(_) ->
- ok.
--endif.
-
add_mask_to_flags(Flags, [Im|M], I, L) when I > Im ->
add_mask_to_flags(Flags, M, I, [Im|L]);
add_mask_to_flags(Flags, [_|M], _I, L) ->
@@ -2237,24 +2123,27 @@ umerge_mask(Is, F) ->
lists:umerge(Is, F).
get_mask(V, Masks) ->
- case maps:find(V, Masks) of
- error -> [];
- {ok, M} -> M
+ case Masks of
+ #{ V := M } -> M;
+ #{} -> []
end.
-get_flags(#v2_state{constr_data = ConData}=V2State0, C) ->
+get_flags(#v2_state{constr_data = ConData0}=V2State0, C) ->
#constraint_list{id = Id, list = Cs, masks = Masks} = C,
- case maps:find(Id, ConData) of
- error ->
- ?debug("get_flags Id=~w Flags=all ~w\n", [Id, length(Cs)]),
- V2State = V2State0#v2_state{constr_data = maps:put(Id, {[],[]}, ConData)},
- {V2State, [every_i]};
- {ok, failed} ->
- {V2State0, failed_list};
- {ok, {Part,U}} when U =/= [] ->
+ case ConData0 of
+ #{ Id := {Part, U} } ->
+ true = U =/= [], %Assertion.
?debug("get_flags Id=~w U=~w\n", [Id, U]),
- V2State = V2State0#v2_state{constr_data = maps:put(Id, {Part,[]}, ConData)},
- save_updated_vars_list(Cs, vars_per_child(U, Masks), V2State)
+ ConData = ConData0#{ Id => {Part, []}},
+ V2State = V2State0#v2_state{constr_data = ConData},
+ save_updated_vars_list(Cs, vars_per_child(U, Masks), V2State);
+ #{ Id := failed } ->
+ {V2State0, failed_list};
+ #{} ->
+ ?debug("get_flags Id=~w Flags=all ~w\n", [Id, length(Cs)]),
+ ConData = ConData0#{ Id => {#{}, []}},
+ V2State = V2State0#v2_state{constr_data = ConData},
+ {V2State, [every_i]}
end.
vars_per_child(U, Masks) ->
@@ -2279,16 +2168,16 @@ save_updated_vars(#constraint_ref{id = Id}, U, V2State) ->
Cs = state__get_cs(Id, V2State#v2_state.state),
save_updated_vars(Cs, U, V2State).
-save_updated_vars1(V2State, C, U) ->
- #v2_state{constr_data = ConData} = V2State,
- #constraint_list{id = Id} = C,
- case maps:find(Id, ConData) of
- error -> V2State; % error means everything is flagged
- {ok, failed} -> V2State;
- {ok, {Part,U0}} ->
+save_updated_vars1(#v2_state{constr_data = ConData0} = V2State,
+ #constraint_list{id = Id}, U) ->
+ case ConData0 of
+ #{ Id := {Part, U0} } ->
%% Duplicates are not so common; let masks/2 remove them.
- U1 = U ++ U0,
- V2State#v2_state{constr_data = maps:put(Id, {Part,U1}, ConData)}
+ ConData = ConData0#{ Id => {Part, U ++ U0}},
+ V2State#v2_state{constr_data = ConData};
+ #{} ->
+ %% Everything is flagged
+ V2State
end.
-ifdef(DEBUG).
@@ -2298,7 +2187,7 @@ pp_constr_data(_Tag, #v2_state{constr_data = D}) ->
case _PartU of
{_Part, _U} ->
io:format("Id: ~w Vars: ~w\n", [_Id, _U]),
- [?pp_map("Part", maps:from_list(_Part)) || _Part =/= []];
+ [?pp_map("Part", _Part) || _Part =/= #{}];
failed ->
io:format("Id: ~w failed list\n", [_Id])
end
@@ -2311,168 +2200,17 @@ pp_constr_data(_Tag, _V2State) ->
ok.
-endif.
-failed_list(#constraint_list{id = Id}, #v2_state{constr_data = D}=V2State) ->
+failed_list(#constraint_list{id = Id}, #v2_state{constr_data = D0}=V2State) ->
?debug("error list ~w~n", [Id]),
- V2State#v2_state{constr_data = maps:put(Id, failed, D)}.
+ D = D0#{ Id => failed },
+ V2State#v2_state{constr_data = D}.
is_failed_list(#constraint_list{id = Id}, #v2_state{constr_data = D}) ->
- maps:find(Id, D) =:= {ok, failed}.
-
-%% Solver v1
-
-solve_ref_or_list(#constraint_ref{id = Id, deps = Deps},
- Map, MapDict, State) ->
- {OldLocalMap, Check} =
- case maps:find(Id, MapDict) of
- error -> {map_new(), false};
- {ok, M} -> {M, true}
- end,
- ?debug("Checking ref to fun: ~tw\n", [debug_lookup_name(Id)]),
- %% Note: mk_constraint_ref() has already removed Id from Deps. The
- %% reason for doing it there is that it makes it easy for
- %% calculate_masks() to make the corresponding adjustment for
- %% version v2.
- CheckDeps = ordsets:del_element(t_var_name(Id), Deps),
- true = CheckDeps =:= Deps,
- case Check andalso maps_are_equal(OldLocalMap, Map, CheckDeps) of
- true ->
- ?debug("Equal\n", []),
- {ok, MapDict, Map};
- false ->
- ?debug("Not equal. Solving\n", []),
- Cs = state__get_cs(Id, State),
- Res =
- case state__is_self_rec(Id, State) of
- true -> solve_self_recursive(Cs, Map, MapDict, Id, t_none(), State);
- false -> solve_ref_or_list(Cs, Map, MapDict, State)
- end,
- {NewMapDict, FunType} =
- case Res of
- {error, NewMapDict0} ->
- ?debug("Error solving for function ~tp\n", [debug_lookup_name(Id)]),
- Arity = state__fun_arity(Id, State),
- FunType0 =
- case state__prop_domain(t_var_name(Id), State) of
- error -> t_fun(Arity, t_none());
- {ok, Dom} -> t_fun(Dom, t_none())
- end,
- {NewMapDict0, FunType0};
- {ok, NewMapDict0, NewMap} ->
- ?debug("Done solving fun: ~tp\n", [debug_lookup_name(Id)]),
- FunType0 = lookup_type(Id, NewMap),
- {NewMapDict0, FunType0}
- end,
- ?debug(" Id=~w Assigned ~ts\n", [Id, format_type(FunType)]),
- NewMap1 = enter_type(Id, FunType, Map),
- NewMap2 =
- case state__get_rec_var(Id, State) of
- {ok, Var} -> enter_type(Var, FunType, NewMap1);
- error -> NewMap1
- end,
- {ok, maps:put(Id, NewMap2, NewMapDict), NewMap2}
- end;
-solve_ref_or_list(#constraint_list{type=Type, list = Cs, deps = Deps, id = Id},
- Map, MapDict, State) ->
- {OldLocalMap, Check} =
- case maps:find(Id, MapDict) of
- error -> {map_new(), false};
- {ok, M} -> {M, true}
- end,
- ?debug("Checking ref to list: ~w\n", [Id]),
- if
- OldLocalMap =:= error -> {error, MapDict};
- true ->
- case Check andalso maps_are_equal(OldLocalMap, Map, Deps) of
- true ->
- ?debug("~tw equal ~w\n", [Type, Id]),
- {ok, MapDict, Map};
- false ->
- ?debug("~tw not equal: ~w. Solving\n", [Type, Id]),
- solve_clist(Cs, Type, Id, Deps, MapDict, Map, State)
- end
+ case D of
+ #{ Id := failed } -> true;
+ #{} -> false
end.
-solve_self_recursive(Cs, Map, MapDict, Id, RecType0, State) ->
- ?debug("Solving self recursive ~tw\n", [debug_lookup_name(Id)]),
- {ok, RecVar} = state__get_rec_var(Id, State),
- ?debug("OldRecType ~ts\n", [format_type(RecType0)]),
- RecType = t_limit(RecType0, ?TYPE_LIMIT),
- Map1 = enter_type(RecVar, RecType, erase_type(t_var_name(Id), Map)),
- ?pp_map("Map1", Map1),
- case solve_ref_or_list(Cs, Map1, MapDict, State) of
- {error, _} = Error ->
- case t_is_none(RecType0) of
- true ->
- %% Try again and assume that this is a non-terminating function.
- Arity = state__fun_arity(Id, State),
- NewRecType = t_fun(lists:duplicate(Arity, t_any()), t_unit()),
- solve_self_recursive(Cs, Map, MapDict, Id, NewRecType, State);
- false ->
- Error
- end;
- {ok, NewMapDict, NewMap} ->
- ?pp_map("NewMap", NewMap),
- NewRecType = unsafe_lookup_type(Id, NewMap),
- case is_equal(NewRecType, RecType0) of
- true ->
- {ok, NewMapDict, enter_type(RecVar, NewRecType, NewMap)};
- false ->
- solve_self_recursive(Cs, Map, MapDict, Id, NewRecType, State)
- end
- end.
-
-solve_clist(Cs, conj, Id, Deps, MapDict, Map, State) ->
- case solve_cs(Cs, Map, MapDict, State) of
- {error, NewMapDict} ->
- {error, maps:put(Id, error, NewMapDict)};
- {ok, NewMapDict, NewMap} = Ret ->
- case Cs of
- [_] ->
- %% Just a special case for one conjunctive constraint.
- Ret;
- _ ->
- case maps_are_equal(Map, NewMap, Deps) of
- true -> {ok, maps:put(Id, NewMap, NewMapDict), NewMap};
- false -> solve_clist(Cs, conj, Id, Deps, NewMapDict, NewMap, State)
- end
- end
- end;
-solve_clist(Cs, disj, Id, _Deps, MapDict, Map, State) ->
- Fun = fun(C, Dict) ->
- case solve_ref_or_list(C, Map, Dict, State) of
- {ok, NewDict, NewMap} -> {{ok, NewMap}, NewDict};
- {error, _NewDict} = Error -> Error
- end
- end,
- {Maps, NewMapDict} = lists:mapfoldl(Fun, MapDict, Cs),
- case [X || {ok, X} <- Maps] of
- [] -> {error, maps:put(Id, error, NewMapDict)};
- MapList ->
- NewMap = join_maps(MapList),
- {ok, maps:put(Id, NewMap, NewMapDict), NewMap}
- end.
-
-solve_cs([#constraint_ref{} = C|Tail], Map, MapDict, State) ->
- case solve_ref_or_list(C, Map, MapDict, State) of
- {ok, NewMapDict, Map1} -> solve_cs(Tail, Map1, NewMapDict, State);
- {error, _NewMapDict} = Error -> Error
- end;
-solve_cs([#constraint_list{} = C|Tail], Map, MapDict, State) ->
- case solve_ref_or_list(C, Map, MapDict, State) of
- {ok, NewMapDict, Map1} -> solve_cs(Tail, Map1, NewMapDict, State);
- {error, _NewMapDict} = Error -> Error
- end;
-solve_cs([#constraint{} = C|Tail], Map, MapDict, State) ->
- case solve_one_c(C, Map) of
- error ->
- report_failed_constraint(C, Map),
- {error, MapDict};
- {ok, {NewMap, _U}} ->
- solve_cs(Tail, NewMap, MapDict, State)
- end;
-solve_cs([], Map, MapDict, _State) ->
- {ok, MapDict, Map}.
-
solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map) ->
LhsType = lookup_type(Lhs, Map),
RhsType = lookup_type(Rhs, Map),
@@ -2498,22 +2236,50 @@ solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map) ->
end.
solve_subtype(Type, Inf, Map) ->
- %% case cerl:is_literal(Type) of
- %% true ->
- %% case t_is_subtype(t_from_term(cerl:concrete(Type)), Inf) of
- %% true -> {ok, Map};
- %% false -> error
- %% end;
- %% false ->
- try t_unify(Type, Inf) of
- {_, List} -> {ok, enter_type_list(List, Map)}
- catch
- throw:{mismatch, _T1, _T2} ->
- ?debug("Mismatch between ~ts and ~ts\n",
- [format_type(_T1), format_type(_T2)]),
- error
- end.
- %% end.
+ try t_unify_table_only(Type, Inf) of
+ Bindings ->
+ refine_bindings(maps:to_list(Bindings), Map, [])
+ catch
+ throw:{mismatch, _T1, _T2} ->
+ ?debug("Mismatch between ~ts and ~ts\n",
+ [format_type(_T1), format_type(_T2)]),
+ error
+ end.
+
+%% Similar to enter_type/3 over a list, but refines known types rather than
+%% replaces them.
+refine_bindings([{Key, Val} | Tail], Map, U0) ->
+ ?debug("Unifying ~ts :: ~ts\n",
+ [format_type(t_var(Key)), format_type(Val)]),
+ %% It's important to keep opaque types whose internal structure is any(),
+ %% hence the equality check on t_any() rather than t_is_any/1.
+ case t_is_equal(Val, t_any()) of
+ true ->
+ refine_bindings(Tail, maps:remove(Key, Map), U0);
+ false ->
+ LimitedVal = t_limit(Val, ?INTERNAL_TYPE_LIMIT),
+ case Map of
+ #{ Key := Old } ->
+ LimitedInf = t_inf(Old, LimitedVal),
+ case t_is_none(LimitedInf) of
+ true ->
+ error;
+ false ->
+ case t_is_equal(Old, LimitedInf) of
+ true ->
+ refine_bindings(Tail, Map, U0);
+ false ->
+ U = ordsets:add_element(Key, U0),
+ refine_bindings(Tail, Map#{ Key => LimitedInf }, U)
+ end
+ end;
+ #{} ->
+ U = ordsets:add_element(Key, U0),
+ refine_bindings(Tail, Map#{ Key => LimitedVal }, U)
+ end
+ end;
+refine_bindings([], Map, U) ->
+ {ok, {Map, U}}.
report_failed_constraint(_C, _Map) ->
?debug("+++++++++++\nFailed: ~ts :: ~ts ~w ~ts :: ~ts\n+++++++++++\n",
@@ -2529,15 +2295,6 @@ report_failed_constraint(_C, _Map) ->
%%
%% ============================================================================
-map_new() ->
- maps:new().
-
-join_maps([Map]) ->
- Map;
-join_maps(Maps) ->
- Keys = constrained_keys(Maps),
- join_maps(Keys, Maps, map_new()).
-
constrained_keys(Maps) ->
lists:foldl(fun(TmpMap, AccKeys) ->
[Key || Key <- AccKeys, maps:is_key(Key, TmpMap)]
@@ -2564,43 +2321,6 @@ join_one_key(Key, [Map|Maps], Type) ->
join_one_key(_Key, [], Type) ->
Type.
-maps_are_equal(Map1, Map2, Deps) ->
- NewDeps = prune_keys(Map1, Map2, Deps),
- maps_are_equal_1(Map1, Map2, NewDeps).
-
-maps_are_equal_1(Map1, Map2, [H|Tail]) ->
- T1 = lookup_type(H, Map1),
- T2 = lookup_type(H, Map2),
- case is_equal(T1, T2) of
- true -> maps_are_equal_1(Map1, Map2, Tail);
- false ->
- ?debug("~w: ~ts =/= ~ts\n", [H, format_type(T1), format_type(T2)]),
- false
- end;
-maps_are_equal_1(_Map1, _Map2, []) ->
- true.
-
--define(PRUNE_LIMIT, 100).
-
-prune_keys(Map1, Map2, Deps) ->
- %% This is only worthwhile if the number of deps is reasonably large,
- %% and also bigger than the number of elements in the maps.
- NofDeps = length(Deps),
- case NofDeps > ?PRUNE_LIMIT of
- true ->
- Keys1 = maps:keys(Map1),
- case length(Keys1) > NofDeps of
- true ->
- Set1 = lists:sort(Keys1),
- Set2 = lists:sort(maps:keys(Map2)),
- ordsets:intersection(ordsets:union(Set1, Set2), Deps);
- false ->
- Deps
- end;
- false ->
- Deps
- end.
-
enter_type(Key, Val, Map) when is_integer(Key) ->
?debug("Entering ~ts :: ~ts\n", [format_type(t_var(Key)), format_type(Val)]),
%% Keep any() in the map if it is opaque:
@@ -2632,15 +2352,6 @@ enter_type_lists([Key|KeyTail], [Val|ValTail], Map) ->
enter_type_lists([], [], Map) ->
Map.
-enter_type_list(KeyVals, Map) ->
- enter_type_list(KeyVals, Map, []).
-
-enter_type_list([{Key, Val}|Tail], Map, U0) ->
- {Map1,U1} = enter_type2(Key, Val, Map),
- enter_type_list(Tail, Map1, U1++U0);
-enter_type_list([], Map, U) ->
- {Map, ordsets:from_list(U)}.
-
enter_type2(Key, Val, Map) ->
Map1 = enter_type(Key, Val, Map),
{Map1, [Key || not is_same(Key, Map, Map1)]}.
@@ -2734,7 +2445,7 @@ new_state(MFAs, NextLabel, CallGraph, CServer, Plt, PropTypes0, Solvers) ->
end;
_Many -> false
end,
- PropTypes = dict:from_list(PropTypes0),
+ PropTypes = maps:from_list(PropTypes0),
#state{callgraph = CallGraph, name_map = NameMap, next_label = NextLabel,
prop_types = PropTypes, plt = Plt, scc = ordsets:from_list(SCC),
mfas = MFAs, self_rec = SelfRec, solvers = Solvers,
@@ -2834,29 +2545,29 @@ state__new_constraint_context(State) ->
State#state{cs = []}.
state__prop_domain(FunLabel, #state{prop_types = PropTypes}) ->
- case dict:find(FunLabel, PropTypes) of
- error -> error;
- {ok, {_Range_Fun, Dom}} -> {ok, Dom};
- {ok, FunType} -> {ok, t_fun_args(FunType)}
+ case PropTypes of
+ #{FunLabel := FunType} -> {ok, t_fun_args(FunType)};
+ #{} -> error
end.
state__add_prop_constrs(Tree, #state{prop_types = PropTypes} = State) ->
Label = cerl_trees:get_label(Tree),
- case dict:find(Label, PropTypes) of
- error -> State;
- {ok, FunType} ->
+ case PropTypes of
+ #{Label := FunType} ->
case t_fun_args(FunType) of
unknown -> State;
ArgTypes ->
case erl_types:any_none(ArgTypes) of
- true -> not_called;
+ true -> State;
false ->
?debug("Adding propagated constr: ~ts for function ~tw\n",
[format_type(FunType), debug_lookup_name(mk_var(Tree))]),
FunVar = mk_var(Tree),
state__store_conj(FunVar, sub, FunType, State)
end
- end
+ end;
+ #{} ->
+ State
end.
state__cs(#state{cs = Cs}) ->
@@ -2947,7 +2658,7 @@ mk_constraint(Lhs, Op, Rhs) ->
case Deps =:= [] of
true ->
%% This constraint is constant. Solve it immediately.
- case solve_one_c(C, map_new()) of
+ case solve_one_c(C, #{}) of
error -> throw(error);
_R ->
%% This is always true, keep it anyway for logistic reasons
@@ -2977,8 +2688,8 @@ constraint_opnd_is_any(Type) -> t_is_any(Type).
[erl_types:erl_type()]) -> #fun_var{}.
mk_fun_var(Line, Fun, Types) ->
- Deps = [t_var_name(Var) || Var <- t_collect_vars(t_product(Types))],
- #fun_var{'fun' = Fun, deps = ordsets:from_list(Deps), origin = Line}.
+ Deps = t_collect_var_names(t_product(Types)),
+ #fun_var{'fun' = Fun, deps = Deps, origin = Line}.
pp_map(S, Map) ->
?debug("\t~s: ~p\n",
@@ -2990,8 +2701,8 @@ pp_map(S, Map) ->
-spec mk_fun_var(fun((_) -> erl_types:erl_type()), [erl_types:erl_type()]) -> #fun_var{}.
mk_fun_var(Fun, Types) ->
- Deps = [t_var_name(Var) || Var <- t_collect_vars(t_product(Types))],
- #fun_var{'fun' = Fun, deps = ordsets:from_list(Deps)}.
+ Deps = t_collect_var_names(t_product(Types)),
+ #fun_var{'fun' = Fun, deps = Deps}.
-endif.
@@ -3004,15 +2715,15 @@ get_deps(#constraint_ref{deps = D}) -> D.
-spec find_constraint_deps([fvar_or_type()]) -> deps().
find_constraint_deps(List) ->
- ordsets:from_list(find_constraint_deps(List, [])).
+ find_constraint_deps(List, []).
find_constraint_deps([#fun_var{deps = Deps}|Tail], Acc) ->
- find_constraint_deps(Tail, [Deps|Acc]);
-find_constraint_deps([Type|Tail], Acc) ->
- NewAcc = [[t_var_name(D) || D <- t_collect_vars(Type)]|Acc],
- find_constraint_deps(Tail, NewAcc);
+ find_constraint_deps(Tail, ordsets:union(Deps, Acc));
+find_constraint_deps([Type | Tail], Acc0) ->
+ Acc = ordsets:union(t_collect_var_names(Type), Acc0),
+ find_constraint_deps(Tail, Acc);
find_constraint_deps([], Acc) ->
- lists:append(Acc).
+ Acc.
mk_constraint_1(Lhs, eq, Rhs, Deps) when Lhs < Rhs ->
#constraint{lhs = Lhs, op = eq, rhs = Rhs, deps = Deps};
@@ -3349,14 +3060,12 @@ find_constraint(Tuple, [#constraint_list{list = List}|Cs]) ->
find_constraint(Tuple, [_|Cs]) ->
find_constraint(Tuple, Cs).
--spec fold_literal_maybe_match(cerl:cerl(), state()) -> cerl:cerl().
+%% Test whether the term can be folded into a literal. If `State`
+%% indicates that we are in a match, folding is not possible if any
+%% literal in the term contains a map.
-fold_literal_maybe_match(Tree0, State) ->
- Tree1 = cerl:fold_literal(Tree0),
- case state__is_in_match(State) of
- false -> Tree1;
- true -> dialyzer_utils:refold_pattern(Tree1)
- end.
+is_foldable(Tree, State) ->
+ dialyzer_utils:is_foldable(Tree, state__is_in_match(State)).
lookup_record(State, Tag, Arity) ->
#state{module = M, mod_records = ModRecs, cserver = CServer} = State,
diff --git a/lib/dialyzer/src/dialyzer_utils.erl b/lib/dialyzer/src/dialyzer_utils.erl
index c4ac96c9dc..292c01f7aa 100644
--- a/lib/dialyzer/src/dialyzer_utils.erl
+++ b/lib/dialyzer/src/dialyzer_utils.erl
@@ -31,6 +31,7 @@
get_record_and_type_info/1,
get_spec_info/3,
get_fun_meta_info/3,
+ is_foldable/2,
is_suppressed_fun/2,
is_suppressed_tag/3,
is_compiler_generated/1,
@@ -47,9 +48,21 @@
family/1
]).
+%% For dialyzer_worker.
+-export([process_record_remote_types_module/2]).
+
+-export_type([record_remote_types_init_data/0,
+ record_remote_types_result/0]).
+
-include("dialyzer.hrl").
-include("../../compiler/src/core_parse.hrl").
+-type ext_types_message() :: {pid(), 'ext_types',
+ {mfa(), {file:filename(), erl_anno:location()}}}
+ | {'error', io_lib:chars()}.
+-type record_remote_types_init_data() :: codeserver().
+-type record_remote_types_result() :: [ext_types_message()].
+
%%-define(DEBUG, true).
-ifdef(DEBUG).
@@ -233,60 +246,104 @@ get_record_fields([], _RecDict, Acc) ->
%% The field types are cached. Used during analysis when handling records.
process_record_remote_types(CServer) ->
- ExpTypes = dialyzer_codeserver:get_exported_types(CServer),
- Mods = dialyzer_codeserver:all_temp_modules(CServer),
- process_opaque_types0(Mods, CServer, ExpTypes),
+ case dialyzer_codeserver:all_temp_modules(CServer) of
+ [] ->
+ CServer;
+ Mods ->
+ ExpTypes = dialyzer_codeserver:get_exported_types_table(CServer),
+ process_opaque_types0(Mods, CServer, ExpTypes),
+ %% CodeServer is updated by each worker, but is still valid
+ %% after updates. Workers call
+ %% process_record_remote_types_module/2 below.
+ Return =
+ dialyzer_coordinator:parallel_job(record_remote_types,
+ Mods,
+ _InitData=CServer,
+ _Timing=none),
+ %% We need to pass on messages and thrown errors from erl_types:
+ _ = [self() ! {self(), ext_types, ExtType} ||
+ {_, ext_types, ExtType} <- Return],
+ case [Error || {error, _} = Error <- Return] of
+ [] ->
+ check_record_fields(Mods, CServer, ExpTypes),
+ dialyzer_codeserver:finalize_records(CServer);
+ [Error | _] ->
+ throw(Error)
+ end
+ end.
+
+-spec process_record_remote_types_module(module(),
+ dialyzer_codeserver:codeserver()) ->
+ [ext_types_message()].
+
+process_record_remote_types_module(Module, CServer) ->
+
+ ExpTypes = dialyzer_codeserver:get_exported_types_table(CServer),
VarTable = erl_types:var_table__new(),
RecordTable = dialyzer_codeserver:get_temp_records_table(CServer),
- ModuleFun =
- fun(Module) ->
- RecordMap = dialyzer_codeserver:lookup_temp_mod_records(Module, CServer),
- RecordFun =
- fun({Key, Value}, C2) ->
- case Key of
- {record, Name} ->
- {FileLocation, Fields} = Value,
- {File, _Location} = FileLocation,
- FieldFun =
- fun({Arity, Fields0}, C4) ->
- MRA = {Module, Name, Arity},
- Site = {record, MRA, File},
- {Fields1, C7} =
- lists:mapfoldl(fun({FieldName, Field, _}, C5) ->
- check_remote(Field, ExpTypes, MRA,
- File, RecordTable),
- {FieldT, C6} =
- erl_types:t_from_form
- (Field, ExpTypes, Site,
- RecordTable, VarTable,
- C5),
- {{FieldName, Field, FieldT}, C6}
- end, C4, Fields0),
- {{Arity, Fields1}, C7}
- end,
- {FieldsList, C3} =
- lists:mapfoldl(FieldFun, C2, orddict:to_list(Fields)),
- {{Key, {FileLocation, orddict:from_list(FieldsList)}}, C3};
- {_TypeOrOpaque, Name, NArgs} ->
- %% Make sure warnings about unknown types are output
- %% also for types unused by specs.
- MTA = {Module, Name, NArgs},
- {{_Module, FileLocation, Form, _ArgNames}, _Type} = Value,
- {File, _Location} = FileLocation,
- check_remote(Form, ExpTypes, MTA, File, RecordTable),
- {{Key, Value}, C2}
- end
- end,
- Cache = erl_types:cache__new(),
- {RecordList, _NewCache} =
- lists:mapfoldl(RecordFun, Cache, maps:to_list(RecordMap)),
- dialyzer_codeserver:store_temp_records(Module,
- maps:from_list(RecordList),
- CServer)
+ RecordMap = dialyzer_codeserver:lookup_temp_mod_records(Module, CServer),
+ RecordFun =
+ fun({Key, Value}, C2) ->
+ case Key of
+ {record, Name} ->
+ {FileLocation, Fields} = Value,
+ {File, _Location} = FileLocation,
+ FieldFun =
+ fun({Arity, Fields0}, C4) ->
+ MRA = {Module, Name, Arity},
+ Site = {record, MRA, File},
+ {Fields1, C7} =
+ lists:mapfoldl(fun({FieldName, Field, _}, C5) ->
+ check_remote(Field, ExpTypes, MRA,
+ File, RecordTable),
+ {FieldT, C6} =
+ erl_types:t_from_form
+ (Field, ExpTypes, Site,
+ RecordTable, VarTable,
+ C5),
+ {{FieldName, Field, FieldT}, C6}
+ end, C4, Fields0),
+ {{Arity, Fields1}, C7}
+ end,
+ {FieldsList, C3} =
+ lists:mapfoldl(FieldFun, C2, orddict:to_list(Fields)),
+ {{Key, {FileLocation, orddict:from_list(FieldsList)}}, C3};
+ {_TypeOrOpaque, Name, NArgs} ->
+ %% Make sure warnings about unknown types are output
+ %% also for types unused by specs.
+ MTA = {Module, Name, NArgs},
+ {{_Module, FileLocation, Form, _ArgNames}, _Type} = Value,
+ {File, _Location} = FileLocation,
+ check_remote(Form, ExpTypes, MTA, File, RecordTable),
+ {{Key, Value}, C2}
+ end
end,
- lists:foreach(ModuleFun, Mods),
- check_record_fields(Mods, CServer, ExpTypes),
- dialyzer_codeserver:finalize_records(CServer).
+ Cache = erl_types:cache__new(),
+ try
+ {RecordList, _NewCache} =
+ lists:mapfoldl(RecordFun, Cache, maps:to_list(RecordMap)),
+ _NewCodeServer =
+ dialyzer_codeserver:store_temp_records(Module,
+ maps:from_list(RecordList),
+ CServer),
+ rcv_ext_types()
+ catch
+ throw:{error, _}=Error ->
+ [Error] ++ rcv_ext_types()
+ end.
+
+rcv_ext_types() ->
+ Self = self(),
+ Self ! {Self, done},
+ rcv_ext_types(Self, []).
+
+rcv_ext_types(Self, ExtTypes) ->
+ receive
+ {Self, ext_types, _} = ExtType ->
+ rcv_ext_types(Self, [ExtType | ExtTypes]);
+ {Self, done} ->
+ lists:usort(ExtTypes)
+ end.
%% erl_types:t_from_form() substitutes the declaration of opaque types
%% for the expanded type in some cases. To make sure the initial type,
@@ -934,6 +991,32 @@ segs_from_bitstring(Bitstring) ->
%%------------------------------------------------------------------------------
+
+%% Test whether the term can be folded into a literal.
+%% If the boolean `InMatch` indicates that the term is used in a
+%% match, folding is not possible if any literal in the term
+%% contains a map.
+
+-spec is_foldable(cerl:cerl(), boolean()) -> boolean().
+
+is_foldable(Tree, InMatch) ->
+ case cerl:type(Tree) of
+ cons ->
+ is_foldable(cerl:cons_hd(Tree), InMatch) andalso
+ is_foldable(cerl:cons_tl(Tree), InMatch);
+ tuple ->
+ is_foldable_list(cerl:tuple_es(Tree), InMatch);
+ literal ->
+ not (InMatch andalso find_map(cerl:concrete(Tree)));
+ _ ->
+ false
+ end.
+
+is_foldable_list([E|Es], InMatch) ->
+ is_foldable(E, InMatch) andalso is_foldable_list(Es, InMatch);
+is_foldable_list([], _InMatch) ->
+ true.
+
-spec refold_pattern(cerl:cerl()) -> cerl:cerl().
refold_pattern(Pat) ->
diff --git a/lib/dialyzer/src/dialyzer_worker.erl b/lib/dialyzer/src/dialyzer_worker.erl
index af0f2e9e08..c9ceb75a40 100644
--- a/lib/dialyzer/src/dialyzer_worker.erl
+++ b/lib/dialyzer/src/dialyzer_worker.erl
@@ -12,6 +12,8 @@
%% See the License for the specific language governing permissions and
%% limitations under the License.
+%% Purpose: Run individual jobs in separate processes.
+
-module(dialyzer_worker).
-export([launch/4]).
@@ -29,12 +31,9 @@
mode :: mode(),
job :: job(),
coordinator :: coordinator(),
- init_data :: init_data(),
- depends_on = [] :: list()
+ init_data :: init_data()
}).
--include("dialyzer.hrl").
-
%% -define(DEBUG, true).
-ifdef(DEBUG).
@@ -55,85 +54,46 @@ launch(Mode, Job, InitData, Coordinator) ->
spawn_link(fun() -> init(State) end).
%%--------------------------------------------------------------------
+%% Local functions.
-init(#state{job = SCC, mode = Mode, init_data = InitData,
- coordinator = Coordinator} = State) when
- Mode =:= 'typesig'; Mode =:= 'dataflow' ->
- DependsOnSCCs = dialyzer_succ_typings:find_depends_on(SCC, InitData),
- ?debug("~w: Deps ~p: ~p\n", [self(), SCC, DependsOnSCCs]),
- Pids = dialyzer_coordinator:sccs_to_pids(DependsOnSCCs, Coordinator),
- ?debug("~w: PidsDeps ~p\n", [self(), Pids]),
- DependsOn = [{Pid, erlang:monitor(process, Pid)} || Pid <- Pids],
- loop(updating, State#state{depends_on = DependsOn});
+init(#state{job = SCC, mode = Mode, init_data = InitData} = State)
+ when Mode =:= 'typesig'; Mode =:= 'dataflow' ->
+ wait_for_success_typings(SCC, InitData, State),
+ run(State);
init(#state{mode = Mode} = State) when
- Mode =:= 'compile'; Mode =:= 'warnings' ->
- loop(running, State).
-
-loop(updating, #state{mode = Mode} = State) when
- Mode =:= 'typesig'; Mode =:= 'dataflow' ->
- ?debug("~w: Update: ~p\n", [self(), State#state.job]),
- NextStatus =
- case waits_more_success_typings(State) of
- true -> waiting;
- false -> running
- end,
- loop(NextStatus, State);
-loop(waiting, #state{mode = Mode} = State) when
- Mode =:= 'typesig'; Mode =:= 'dataflow' ->
- ?debug("~w: Wait: ~p\n", [self(), State#state.job]),
- NewState = wait_for_success_typings(State),
- loop(updating, NewState);
-loop(running, #state{mode = 'compile'} = State) ->
- request_activation(State),
- ?debug("Compile: ~s\n",[State#state.job]),
- Result =
- case start_compilation(State) of
- {ok, EstimatedSize, Data} ->
- Label = ask_coordinator_for_label(EstimatedSize, State),
- continue_compilation(Label, Data);
- {error, _Reason} = Error ->
- Error
- end,
- report_to_coordinator(Result, State);
-loop(running, #state{mode = 'warnings'} = State) ->
- request_activation(State),
- ?debug("Warning: ~s\n",[State#state.job]),
- Result = collect_warnings(State),
- report_to_coordinator(Result, State);
-loop(running, #state{mode = Mode} = State) when
- Mode =:= 'typesig'; Mode =:= 'dataflow' ->
- request_activation(State),
- ?debug("~w: Run: ~p\n", [self(), State#state.job]),
- NotFixpoint = do_work(State),
- report_to_coordinator(NotFixpoint, State).
-
-waits_more_success_typings(#state{depends_on = Depends}) ->
- Depends =/= [].
-
-wait_for_success_typings(#state{depends_on = DependsOn} = State) ->
- receive
- {'DOWN', Ref, process, Pid, _Info} ->
- ?debug("~w: ~p got DOWN: ~p\n", [self(), State#state.job, Pid]),
- State#state{depends_on = DependsOn -- [{Pid, Ref}]}
- after
- 5000 ->
- ?debug("~w: Still Waiting ~p:\n ~p\n", [self(), State#state.job, DependsOn]),
- State
- end.
+ Mode =:= 'compile'; Mode =:= 'warnings';
+ Mode =:= 'contract_remote_types'; Mode =:= 'record_remote_types' ->
+ run(State).
-request_activation(#state{coordinator = Coordinator}) ->
- dialyzer_coordinator:request_activation(Coordinator).
+run(#state{coordinator = Coordinator, job = Job} = State) ->
+ dialyzer_coordinator:request_activation(Coordinator),
+ Result = run_job(State),
+ ?debug("~w: Done: ~p\n",[self(), Job]),
+ dialyzer_coordinator:job_done(Job, Result, Coordinator).
-do_work(#state{mode = Mode, job = Job, init_data = InitData}) ->
+run_job(#state{mode = Mode, job = Job, init_data = InitData} = State) ->
+ ?debug("~w: ~p: ~p\n", [self(), Mode, Job]),
case Mode of
- typesig -> dialyzer_succ_typings:find_succ_types_for_scc(Job, InitData);
- dataflow -> dialyzer_succ_typings:refine_one_module(Job, InitData)
+ compile ->
+ case start_compilation(State) of
+ {ok, EstimatedSize, Data} ->
+ Label = ask_coordinator_for_label(EstimatedSize, State),
+ continue_compilation(Label, Data);
+ {error, _Reason} = Error ->
+ Error
+ end;
+ typesig ->
+ dialyzer_succ_typings:find_succ_types_for_scc(Job, InitData);
+ dataflow ->
+ dialyzer_succ_typings:refine_one_module(Job, InitData);
+ contract_remote_types ->
+ dialyzer_contracts:process_contract_remote_types_module(Job, InitData);
+ record_remote_types ->
+ dialyzer_utils:process_record_remote_types_module(Job, InitData);
+ warnings ->
+ dialyzer_succ_typings:collect_warnings(Job, InitData)
end.
-report_to_coordinator(Result, #state{job = Job, coordinator = Coordinator}) ->
- ?debug("~w: Done: ~p\n",[self(), Job]),
- dialyzer_coordinator:job_done(Job, Result, Coordinator).
-
start_compilation(#state{job = Job, init_data = InitData}) ->
dialyzer_analysis_callgraph:start_compilation(Job, InitData).
@@ -143,5 +103,8 @@ ask_coordinator_for_label(EstimatedSize, #state{coordinator = Coordinator}) ->
continue_compilation(Label, Data) ->
dialyzer_analysis_callgraph:continue_compilation(Label, Data).
-collect_warnings(#state{job = Job, init_data = InitData}) ->
- dialyzer_succ_typings:collect_warnings(Job, InitData).
+%% Wait for the results of success typings of modules or SCCs that we
+%% depend on. ('typesig' or 'dataflow' mode)
+wait_for_success_typings(SCC, InitData, #state{coordinator = Coordinator}) ->
+ DependsOnSCCs = dialyzer_succ_typings:find_depends_on(SCC, InitData),
+ dialyzer_coordinator:wait_for_success_typings(DependsOnSCCs, Coordinator).
diff --git a/lib/dialyzer/src/erl_types.erl b/lib/dialyzer/src/erl_types.erl
index 7eab54ab60..f82251d1f0 100644
--- a/lib/dialyzer/src/erl_types.erl
+++ b/lib/dialyzer/src/erl_types.erl
@@ -55,7 +55,7 @@
t_boolean/0,
t_byte/0,
t_char/0,
- t_collect_vars/1,
+ t_collect_var_names/1,
t_cons/0,
t_cons/2,
t_cons_hd/1, t_cons_hd/2,
@@ -186,7 +186,6 @@
t_reference/0,
t_singleton_to_term/2,
t_string/0,
- t_struct_from_opaque/2,
t_subst/2,
t_subtract/2,
t_subtract_list/2,
@@ -203,7 +202,7 @@
t_tuple_sizes/1,
t_tuple_subtypes/1,
t_tuple_subtypes/2,
- t_unify/2,
+ t_unify_table_only/2,
t_unit/0,
t_unopaque/1, t_unopaque/2,
t_var/1,
@@ -320,11 +319,9 @@
-record(int_set, {set :: [integer()]}).
-record(int_rng, {from :: rng_elem(), to :: rng_elem()}).
-%% Note: the definition of #opaque{} was changed to 'mod' and 'name';
-%% it used to be an ordsets of {Mod, Name} pairs. The Dialyzer version
-%% was updated to 2.7 due to this change.
+
-record(opaque, {mod :: module(), name :: atom(),
- args = [] :: [erl_type()], struct :: erl_type()}).
+ arity = 0 :: arity(), struct :: erl_type()}).
-define(atom(Set), #c{tag=?atom_tag, elements=Set}).
-define(bitstr(Unit, Base), #c{tag=?binary_tag, elements=[Unit,Base]}).
@@ -373,7 +370,8 @@
-type type_table() :: #{record_key() | type_key() =>
record_value() | type_value()}.
--opaque var_table() :: #{atom() => erl_type()}.
+-type var_name() :: atom() | integer().
+-type var_table() :: #{ var_name() => erl_type() }.
%%-----------------------------------------------------------------------------
%% Unions
@@ -436,7 +434,7 @@ t_is_none(_) -> false.
-spec t_opaque(module(), atom(), [_], erl_type()) -> erl_type().
t_opaque(Mod, Name, Args, Struct) ->
- O = #opaque{mod = Mod, name = Name, args = Args, struct = Struct},
+ O = #opaque{mod = Mod, name = Name, arity = length(Args), struct = Struct},
?opaque(set_singleton(O)).
-spec t_is_opaque(erl_type(), [erl_type()]) -> boolean().
@@ -747,7 +745,7 @@ decorate_tuples_in_sets([?tuple(Elements, Arity, Tag1) = T1|Tuples] = L1,
if
Tag1 < Tag2 -> decorate_tuples_in_sets(Tuples, L2, Opaques, [T1|Acc]);
Tag1 > Tag2 -> decorate_tuples_in_sets(L1, Ts, Opaques, Acc);
- Tag1 =:= Tag2 ->
+ Tag1 == Tag2 ->
NewElements = list_decorate(Elements, Es, Opaques),
NewAcc = [?tuple(NewElements, Arity, Tag1)|Acc],
decorate_tuples_in_sets(Tuples, Ts, Opaques, NewAcc)
@@ -780,37 +778,6 @@ t_opaque_from_records(RecMap) ->
end, OpaqueRecMap),
[OpaqueType || {_Key, OpaqueType} <- maps:to_list(OpaqueTypeMap)].
-%% Decompose opaque instances of type arg2 to structured types, in arg1
-%% XXX: Same as t_unopaque
--spec t_struct_from_opaque(erl_type(), [erl_type()]) -> erl_type().
-
-t_struct_from_opaque(?function(Domain, Range), Opaques) ->
- ?function(t_struct_from_opaque(Domain, Opaques),
- t_struct_from_opaque(Range, Opaques));
-t_struct_from_opaque(?list(Types, Term, Size), Opaques) ->
- ?list(t_struct_from_opaque(Types, Opaques),
- t_struct_from_opaque(Term, Opaques), Size);
-t_struct_from_opaque(?opaque(_) = T, Opaques) ->
- case is_opaque_type(T, Opaques) of
- true -> t_opaque_structure(T);
- false -> T
- end;
-t_struct_from_opaque(?product(Types), Opaques) ->
- ?product(list_struct_from_opaque(Types, Opaques));
-t_struct_from_opaque(?tuple(?any, _, _) = T, _Opaques) -> T;
-t_struct_from_opaque(?tuple(Types, Arity, Tag), Opaques) ->
- ?tuple(list_struct_from_opaque(Types, Opaques), Arity, Tag);
-t_struct_from_opaque(?tuple_set(Set), Opaques) ->
- NewSet = [{Sz, [t_struct_from_opaque(T, Opaques) || T <- Tuples]}
- || {Sz, Tuples} <- Set],
- ?tuple_set(NewSet);
-t_struct_from_opaque(?union(List), Opaques) ->
- t_sup(list_struct_from_opaque(List, Opaques));
-t_struct_from_opaque(Type, _Opaques) -> Type.
-
-list_struct_from_opaque(Types, Opaques) ->
- [t_struct_from_opaque(Type, Opaques) || Type <- Types].
-
%%-----------------------------------------------------------------------------
%% Unit type. Signals non termination.
%%
@@ -2359,7 +2326,6 @@ t_has_var(?map(_, DefK, _)= Map) ->
t_has_var_list(map_all_values(Map)) orelse
t_has_var(DefK);
t_has_var(?opaque(Set)) ->
- %% Assume variables in 'args' are also present i 'struct'
t_has_var_list([O#opaque.struct || O <- set_to_list(Set)]);
t_has_var(?union(List)) ->
t_has_var_list(List);
@@ -2371,45 +2337,42 @@ t_has_var_list([T|Ts]) ->
t_has_var(T) orelse t_has_var_list(Ts);
t_has_var_list([]) -> false.
--spec t_collect_vars(erl_type()) -> [erl_type()].
+-spec t_collect_var_names(erl_type()) -> any().
-t_collect_vars(T) ->
- Vs = t_collect_vars(T, maps:new()),
- [V || {V, _} <- maps:to_list(Vs)].
+t_collect_var_names(T) ->
+ t_collect_var_names(T, []).
--type ctab() :: #{erl_type() => 'any'}.
+-spec t_collect_var_names(erl_type(), ordsets:ordset(term())) ->
+ ordsets:ordset(term()).
--spec t_collect_vars(erl_type(), ctab()) -> ctab().
-
-t_collect_vars(?var(_) = Var, Acc) ->
- maps:put(Var, any, Acc);
-t_collect_vars(?function(Domain, Range), Acc) ->
- Acc1 = t_collect_vars(Domain, Acc),
- t_collect_vars(Range, Acc1);
-t_collect_vars(?list(Contents, Termination, _), Acc) ->
- Acc1 = t_collect_vars(Contents, Acc),
- t_collect_vars(Termination, Acc1);
-t_collect_vars(?product(Types), Acc) ->
+t_collect_var_names(?var(Id), Acc) ->
+ ordsets:add_element(Id, Acc);
+t_collect_var_names(?function(Domain, Range), Acc) ->
+ Acc1 = t_collect_var_names(Domain, Acc),
+ t_collect_var_names(Range, Acc1);
+t_collect_var_names(?list(Contents, Termination, _), Acc) ->
+ Acc1 = t_collect_var_names(Contents, Acc),
+ t_collect_var_names(Termination, Acc1);
+t_collect_var_names(?product(Types), Acc) ->
t_collect_vars_list(Types, Acc);
-t_collect_vars(?tuple(?any, ?any, ?any), Acc) ->
+t_collect_var_names(?tuple(?any, ?any, ?any), Acc) ->
Acc;
-t_collect_vars(?tuple(Types, _, _), Acc) ->
+t_collect_var_names(?tuple(Types, _, _), Acc) ->
t_collect_vars_list(Types, Acc);
-t_collect_vars(?tuple_set(_) = TS, Acc) ->
+t_collect_var_names(?tuple_set(_) = TS, Acc) ->
t_collect_vars_list(t_tuple_subtypes(TS), Acc);
-t_collect_vars(?map(_, DefK, _) = Map, Acc0) ->
+t_collect_var_names(?map(_, DefK, _) = Map, Acc0) ->
Acc = t_collect_vars_list(map_all_values(Map), Acc0),
- t_collect_vars(DefK, Acc);
-t_collect_vars(?opaque(Set), Acc) ->
- %% Assume variables in 'args' are also present i 'struct'
+ t_collect_var_names(DefK, Acc);
+t_collect_var_names(?opaque(Set), Acc) ->
t_collect_vars_list([O#opaque.struct || O <- set_to_list(Set)], Acc);
-t_collect_vars(?union(List), Acc) ->
+t_collect_var_names(?union(List), Acc) ->
t_collect_vars_list(List, Acc);
-t_collect_vars(_, Acc) ->
+t_collect_var_names(_, Acc) ->
Acc.
t_collect_vars_list([T|Ts], Acc0) ->
- Acc = t_collect_vars(T, Acc0),
+ Acc = t_collect_var_names(T, Acc0),
t_collect_vars_list(Ts, Acc);
t_collect_vars_list([], Acc) -> Acc.
@@ -2630,7 +2593,7 @@ t_sup(Ts) ->
t_sup1([H1, H2|T], L) ->
t_sup1(T, [t_sup(H1, H2)|L]);
-t_sup1([T], []) -> subst_all_vars_to_any(T);
+t_sup1([T], []) -> do_not_subst_all_vars_to_any(T);
t_sup1(Ts, L) ->
t_sup1(Ts++L, []).
@@ -2642,7 +2605,7 @@ t_sup(?none, T) -> T;
t_sup(T, ?none) -> T;
t_sup(?unit, T) -> T;
t_sup(T, ?unit) -> T;
-t_sup(T, T) -> subst_all_vars_to_any(T);
+t_sup(T, T) -> do_not_subst_all_vars_to_any(T);
t_sup(?var(_), _) -> ?any;
t_sup(_, ?var(_)) -> ?any;
t_sup(?atom(Set1), ?atom(Set2)) ->
@@ -2716,9 +2679,9 @@ t_sup(?tuple(?any, ?any, ?any) = T, ?tuple_set(_)) -> T;
t_sup(?tuple_set(_), ?tuple(?any, ?any, ?any) = T) -> T;
t_sup(?tuple(Elements1, Arity, Tag1) = T1,
?tuple(Elements2, Arity, Tag2) = T2) ->
- if Tag1 =:= Tag2 -> t_tuple(t_sup_lists(Elements1, Elements2));
- Tag1 =:= ?any -> t_tuple(t_sup_lists(Elements1, Elements2));
- Tag2 =:= ?any -> t_tuple(t_sup_lists(Elements1, Elements2));
+ if Tag1 == Tag2 -> t_tuple(t_sup_lists(Elements1, Elements2));
+ Tag1 == ?any -> t_tuple(t_sup_lists(Elements1, Elements2));
+ Tag2 == ?any -> t_tuple(t_sup_lists(Elements1, Elements2));
Tag1 < Tag2 -> ?tuple_set([{Arity, [T1, T2]}]);
Tag1 > Tag2 -> ?tuple_set([{Arity, [T2, T1]}])
end;
@@ -2748,8 +2711,8 @@ sup_opaque(List) ->
?opaque(ordsets:from_list(L)).
sup_opaq(L0) ->
- L1 = [{{Mod,Name,Args}, T} ||
- #opaque{mod = Mod, name = Name, args = Args}=T <- L0],
+ L1 = [{{Mod,Name,Arity}, T} ||
+ #opaque{mod = Mod, name = Name, arity = Arity}=T <- L0],
F = dialyzer_utils:family(L1),
[supl(Ts) || {_, Ts} <- F].
@@ -2824,9 +2787,10 @@ sup_tuples_in_set([?tuple(Elements1, Arity, Tag1) = T1|Left1] = L1,
if
Tag1 < Tag2 -> sup_tuples_in_set(Left1, L2, [T1|Acc]);
Tag1 > Tag2 -> sup_tuples_in_set(L1, Left2, [T2|Acc]);
- Tag2 =:= Tag2 -> NewElements = t_sup_lists(Elements1, Elements2),
- NewAcc = [?tuple(NewElements, Arity, Tag1)|Acc],
- sup_tuples_in_set(Left1, Left2, NewAcc)
+ Tag1 == Tag2 ->
+ NewElements = t_sup_lists(Elements1, Elements2),
+ NewAcc = [?tuple(NewElements, Arity, Tag1)|Acc],
+ sup_tuples_in_set(Left1, Left2, NewAcc)
end;
sup_tuples_in_set([], L2, Acc) -> lists:reverse(Acc, L2);
sup_tuples_in_set(L1, [], Acc) -> lists:reverse(Acc, L1).
@@ -2944,15 +2908,15 @@ t_inf(T1, T2) ->
-spec t_inf(erl_type(), erl_type(), t_inf_opaques()) -> erl_type().
t_inf(?var(_), ?var(_), _Opaques) -> ?any;
-t_inf(?var(_), T, _Opaques) -> subst_all_vars_to_any(T);
-t_inf(T, ?var(_), _Opaques) -> subst_all_vars_to_any(T);
-t_inf(?any, T, _Opaques) -> subst_all_vars_to_any(T);
-t_inf(T, ?any, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(?var(_), T, _Opaques) -> do_not_subst_all_vars_to_any(T);
+t_inf(T, ?var(_), _Opaques) -> do_not_subst_all_vars_to_any(T);
+t_inf(?any, T, _Opaques) -> do_not_subst_all_vars_to_any(T);
+t_inf(T, ?any, _Opaques) -> do_not_subst_all_vars_to_any(T);
t_inf(?none, _, _Opaques) -> ?none;
t_inf(_, ?none, _Opaques) -> ?none;
t_inf(?unit, _, _Opaques) -> ?unit; % ?unit cases should appear below ?none
t_inf(_, ?unit, _Opaques) -> ?unit;
-t_inf(T, T, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(T, T, _Opaques) -> do_not_subst_all_vars_to_any(T);
t_inf(?atom(Set1), ?atom(Set2), _) ->
case set_intersection(Set1, Set2) of
?none -> ?none;
@@ -2988,7 +2952,7 @@ t_inf(?map(_, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B, _Opaques) ->
%% result in a none result.
Pairs =
map_pairwise_merge(
- %% For optional keys in both maps, when the infinimum is none, we have
+ %% For optional keys in both maps, when the infimum is none, we have
%% essentially concluded that K must not be a key in the map.
fun(K, ?opt, V1, ?opt, V2) -> {K, ?opt, t_inf(V1, V2)};
%% When a key is optional in one map, but mandatory in another, it
@@ -3072,13 +3036,13 @@ t_inf(?product(_), _, _Opaques) ->
t_inf(_, ?product(_), _Opaques) ->
?none;
t_inf(?tuple(?any, ?any, ?any), ?tuple(_, _, _) = T, _Opaques) ->
- subst_all_vars_to_any(T);
+ do_not_subst_all_vars_to_any(T);
t_inf(?tuple(_, _, _) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
- subst_all_vars_to_any(T);
+ do_not_subst_all_vars_to_any(T);
t_inf(?tuple(?any, ?any, ?any), ?tuple_set(_) = T, _Opaques) ->
- subst_all_vars_to_any(T);
+ do_not_subst_all_vars_to_any(T);
t_inf(?tuple_set(_) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
- subst_all_vars_to_any(T);
+ do_not_subst_all_vars_to_any(T);
t_inf(?tuple(Elements1, Arity, _Tag1), ?tuple(Elements2, Arity, _Tag2), Opaques) ->
case t_inf_lists_strict(Elements1, Elements2, Opaques) of
bottom -> ?none;
@@ -3196,121 +3160,13 @@ compatible_opaque_types(?opaque(Es1), ?opaque(Es2)) ->
[{O1, O2} || O1 <- Es1, O2 <- Es2, is_compat_opaque_names(O1, O2)].
is_compat_opaque_names(Opaque1, Opaque2) ->
- #opaque{mod = Mod1, name = Name1, args = Args1} = Opaque1,
- #opaque{mod = Mod2, name = Name2, args = Args2} = Opaque2,
- case {{Mod1, Name1, Args1}, {Mod2, Name2, Args2}} of
- {ModNameArgs, ModNameArgs} -> true;
- {{Mod, Name, Args1}, {Mod, Name, Args2}} ->
- is_compat_args(Args1, Args2);
+ #opaque{mod = Mod1, name = Name1, arity = Arity1} = Opaque1,
+ #opaque{mod = Mod2, name = Name2, arity = Arity2} = Opaque2,
+ case {{Mod1, Name1, Arity1}, {Mod2, Name2, Arity2}} of
+ {ModNameArity, ModNameArity} -> true;
_ -> false
end.
-is_compat_args([A1|Args1], [A2|Args2]) ->
- is_compat_arg(A1, A2) andalso is_compat_args(Args1, Args2);
-is_compat_args([], []) -> true;
-is_compat_args(_, _) -> false.
-
--spec is_compat_arg(erl_type(), erl_type()) -> boolean().
-
-%% The intention is that 'true' is to be returned iff one of the
-%% arguments is a specialization of the other argument in the sense
-%% that every type is a specialization of any(). For example, {_,_} is
-%% a specialization of any(), but not of tuple(). Does not handle
-%% variables, but any() and unions (sort of). However, the
-%% implementation is more relaxed as any() is compatible to anything.
-
-is_compat_arg(T, T) -> true;
-is_compat_arg(_, ?any) -> true;
-is_compat_arg(?any, _) -> true;
-is_compat_arg(?function(Domain1, Range1), ?function(Domain2, Range2)) ->
- (is_compat_arg(Domain1, Domain2) andalso
- is_compat_arg(Range1, Range2));
-is_compat_arg(?list(Contents1, Termination1, Size1),
- ?list(Contents2, Termination2, Size2)) ->
- (Size1 =:= Size2 andalso
- is_compat_arg(Contents1, Contents2) andalso
- is_compat_arg(Termination1, Termination2));
-is_compat_arg(?product(Types1), ?product(Types2)) ->
- is_compat_list(Types1, Types2);
-is_compat_arg(?map(Pairs1, DefK1, DefV1), ?map(Pairs2, DefK2, DefV2)) ->
- {Ks1, _, Vs1} = lists:unzip3(Pairs1),
- {Ks2, _, Vs2} = lists:unzip3(Pairs2),
- Key1 = t_sup([DefK1 | Ks1]),
- Key2 = t_sup([DefK2 | Ks2]),
- case is_compat_arg(Key1, Key2) of
- true ->
- Value1 = t_sup([DefV1 | Vs1]),
- Value2 = t_sup([DefV2 | Vs2]),
- is_compat_arg(Value1, Value2);
- false ->
- false
- end;
-is_compat_arg(?tuple(?any, ?any, ?any), ?tuple(_, _, _)) -> false;
-is_compat_arg(?tuple(_, _, _), ?tuple(?any, ?any, ?any)) -> false;
-is_compat_arg(?tuple(Elements1, Arity, _),
- ?tuple(Elements2, Arity, _)) when Arity =/= ?any ->
- is_compat_list(Elements1, Elements2);
-is_compat_arg(?tuple_set([{Arity, List}]),
- ?tuple(Elements2, Arity, _)) when Arity =/= ?any ->
- is_compat_list(sup_tuple_elements(List), Elements2);
-is_compat_arg(?tuple(Elements1, Arity, _),
- ?tuple_set([{Arity, List}])) when Arity =/= ?any ->
- is_compat_list(Elements1, sup_tuple_elements(List));
-is_compat_arg(?tuple_set(List1), ?tuple_set(List2)) ->
- try
- is_compat_list_list([sup_tuple_elements(T) || {_Arity, T} <- List1],
- [sup_tuple_elements(T) || {_Arity, T} <- List2])
- catch _:_ -> false
- end;
-is_compat_arg(?opaque(_) = T1, T2) ->
- is_compat_arg(t_opaque_structure(T1), T2);
-is_compat_arg(T1, ?opaque(_) = T2) ->
- is_compat_arg(T1, t_opaque_structure(T2));
-is_compat_arg(?union(List1)=T1, ?union(List2)=T2) ->
- case is_compat_union2(T1, T2) of
- {yes, Type1, Type2} -> is_compat_arg(Type1, Type2);
- no -> is_compat_list(List1, List2)
- end;
-is_compat_arg(?union(List), T2) ->
- case unify_union(List) of
- {yes, Type} -> is_compat_arg(Type, T2);
- no -> false
- end;
-is_compat_arg(T1, ?union(List)) ->
- case unify_union(List) of
- {yes, Type} -> is_compat_arg(T1, Type);
- no -> false
- end;
-is_compat_arg(?var(_), _) -> exit(error);
-is_compat_arg(_, ?var(_)) -> exit(error);
-is_compat_arg(?none, _) -> false;
-is_compat_arg(_, ?none) -> false;
-is_compat_arg(?unit, _) -> false;
-is_compat_arg(_, ?unit) -> false;
-is_compat_arg(#c{}, #c{}) -> false.
-
-is_compat_list_list(LL1, LL2) ->
- length(LL1) =:= length(LL2) andalso is_compat_list_list1(LL1, LL2).
-
-is_compat_list_list1([], []) -> true;
-is_compat_list_list1([L1|LL1], [L2|LL2]) ->
- is_compat_list(L1, L2) andalso is_compat_list_list1(LL1, LL2).
-
-is_compat_list(L1, L2) ->
- length(L1) =:= length(L2) andalso is_compat_list1(L1, L2).
-
-is_compat_list1([], []) -> true;
-is_compat_list1([T1|L1], [T2|L2]) ->
- is_compat_arg(T1, T2) andalso is_compat_list1(L1, L2).
-
-is_compat_union2(?union(List1)=T1, ?union(List2)=T2) ->
- case {unify_union(List1), unify_union(List2)} of
- {{yes, Type1}, {yes, Type2}} -> {yes, Type1, Type2};
- {{yes, Type1}, no} -> {yes, Type1, T2};
- {no, {yes, Type2}} -> {yes, T1, Type2};
- {no, no} -> no
- end.
-
-spec t_inf_lists([erl_type()], [erl_type()]) -> [erl_type()].
t_inf_lists(L1, L2) ->
@@ -3459,11 +3315,20 @@ findfirst(N1, N2, U1, B1, U2, B2) ->
if Val1 =:= Val2 ->
Val1;
Val1 > Val2 ->
- findfirst(N1, N2+1, U1, B1, U2, B2);
+ N2_1 = N2 + max((Val1 - Val2) div U2, 1),
+ findfirst(N1, N2_1, U1, B1, U2, B2);
Val1 < Val2 ->
- findfirst(N1+1, N2, U1, B1, U2, B2)
+ N1_1 = N1 + max((Val2 - Val1) div U1, 1),
+ findfirst(N1_1, N2, U1, B1, U2, B2)
end.
+%% Optimization. Before Erlang/OTP 25, subst_all_vars_to_any() was
+%% called. It turned out that variables are not to be substituted for
+%% any() since either there are no variables, or variables are
+%% substituted for any() afterwards.
+do_not_subst_all_vars_to_any(T) ->
+ T.
+
%%-----------------------------------------------------------------------------
%% Substitution of variables
%%
@@ -3516,9 +3381,8 @@ t_subst_aux(?map(Pairs, DefK, DefV), Map) ->
t_map([{K, MNess, t_subst_aux(V, Map)} || {K, MNess, V} <- Pairs],
t_subst_aux(DefK, Map), t_subst_aux(DefV, Map));
t_subst_aux(?opaque(Es), Map) ->
- List = [Opaque#opaque{args = [t_subst_aux(Arg, Map) || Arg <- Args],
- struct = t_subst_aux(S, Map)} ||
- Opaque = #opaque{args = Args, struct = S} <- set_to_list(Es)],
+ List = [Opaque#opaque{struct = t_subst_aux(S, Map)} ||
+ Opaque = #opaque{struct = S} <- set_to_list(Es)],
?opaque(ordsets:from_list(List));
t_subst_aux(?union(List), Map) ->
?union([t_subst_aux(E, Map) || E <- List]);
@@ -3529,106 +3393,116 @@ t_subst_aux(T, _Map) ->
%% Unification
%%
--type t_unify_ret() :: {erl_type(), [{_, erl_type()}]}.
-
--spec t_unify(erl_type(), erl_type()) -> t_unify_ret().
-
-t_unify(T1, T2) ->
- {T, VarMap} = t_unify(T1, T2, #{}),
- {t_subst(T, VarMap), lists:keysort(1, maps:to_list(VarMap))}.
-
-t_unify(?var(Id) = T, ?var(Id), VarMap) ->
- {T, VarMap};
-t_unify(?var(Id1) = T, ?var(Id2), VarMap) ->
- case maps:find(Id1, VarMap) of
- error ->
- case maps:find(Id2, VarMap) of
- error -> {T, VarMap#{Id2 => T}};
- {ok, Type} -> t_unify(T, Type, VarMap)
- end;
- {ok, Type1} ->
- case maps:find(Id2, VarMap) of
- error -> {Type1, VarMap#{Id2 => T}};
- {ok, Type2} -> t_unify(Type1, Type2, VarMap)
- end
+-spec t_unify_table_only(erl_type(), erl_type()) -> var_table().
+
+%% A simplified version of t_unify/2 which returns the variable
+%% bindings only. It is faster, mostly because t_subst() is not
+%% called.
+
+t_unify_table_only(T1, T2) ->
+ t_unify_table_only(T1, T2, #{}).
+
+t_unify_table_only(?var(Id), ?var(Id), VarMap) ->
+ VarMap;
+t_unify_table_only(?var(Id1) = LHS, ?var(Id2) = RHS, VarMap) ->
+ case VarMap of
+ #{ Id1 := Type1, Id2 := Type2} ->
+ t_unify_table_only(Type1, Type2, VarMap);
+ #{ Id1 := Type } ->
+ t_unify_table_only(Type, RHS, VarMap);
+ #{ Id2 := Type } ->
+ t_unify_table_only(LHS, Type, VarMap);
+ #{} ->
+ VarMap#{ Id1 => LHS, Id2 => RHS }
end;
-t_unify(?var(Id), Type, VarMap) ->
+t_unify_table_only(?var(Id), Type, VarMap) ->
case maps:find(Id, VarMap) of
- error -> {Type, VarMap#{Id => Type}};
- {ok, VarType} -> t_unify(VarType, Type, VarMap)
+ error -> VarMap#{Id => Type};
+ {ok, VarType} -> t_unify_table_only(VarType, Type, VarMap)
end;
-t_unify(Type, ?var(Id), VarMap) ->
+t_unify_table_only(Type, ?var(Id), VarMap) ->
case maps:find(Id, VarMap) of
- error -> {Type, VarMap#{Id => Type}};
- {ok, VarType} -> t_unify(VarType, Type, VarMap)
+ error -> VarMap#{Id => Type};
+ {ok, VarType} -> t_unify_table_only(VarType, Type, VarMap)
end;
-t_unify(?function(Domain1, Range1), ?function(Domain2, Range2), VarMap) ->
- {Domain, VarMap1} = t_unify(Domain1, Domain2, VarMap),
- {Range, VarMap2} = t_unify(Range1, Range2, VarMap1),
- {?function(Domain, Range), VarMap2};
-t_unify(?list(Contents1, Termination1, Size),
+t_unify_table_only(?function(Domain1, Range1), ?function(Domain2, Range2), VarMap) ->
+ VarMap1 = t_unify_table_only(Domain1, Domain2, VarMap),
+ t_unify_table_only(Range1, Range2, VarMap1);
+t_unify_table_only(?list(Contents1, Termination1, Size),
?list(Contents2, Termination2, Size), VarMap) ->
- {Contents, VarMap1} = t_unify(Contents1, Contents2, VarMap),
- {Termination, VarMap2} = t_unify(Termination1, Termination2, VarMap1),
- {?list(Contents, Termination, Size), VarMap2};
-t_unify(?product(Types1), ?product(Types2), VarMap) ->
- {Types, VarMap1} = unify_lists(Types1, Types2, VarMap),
- {?product(Types), VarMap1};
-t_unify(?tuple(?any, ?any, ?any) = T, ?tuple(?any, ?any, ?any), VarMap) ->
- {T, VarMap};
-t_unify(?tuple(Elements1, Arity, _),
+ VarMap1 = t_unify_table_only(Contents1, Contents2, VarMap),
+ t_unify_table_only(Termination1, Termination2, VarMap1);
+t_unify_table_only(?product(Types1), ?product(Types2), VarMap) ->
+ unify_lists_table_only(Types1, Types2, VarMap);
+t_unify_table_only(?tuple(?any, ?any, ?any), ?tuple(?any, ?any, ?any), VarMap) ->
+ VarMap;
+t_unify_table_only(?tuple(Elements1, Arity, _),
?tuple(Elements2, Arity, _), VarMap) when Arity =/= ?any ->
- {NewElements, VarMap1} = unify_lists(Elements1, Elements2, VarMap),
- {t_tuple(NewElements), VarMap1};
-t_unify(?tuple_set([{Arity, _}]) = T1,
+ unify_lists_table_only(Elements1, Elements2, VarMap);
+t_unify_table_only(?tuple_set([{Arity, _}]) = T1,
?tuple(_, Arity, _) = T2, VarMap) when Arity =/= ?any ->
- unify_tuple_set_and_tuple1(T1, T2, VarMap);
-t_unify(?tuple(_, Arity, _) = T1,
+ unify_tuple_set_and_tuple1_table_only(T1, T2, VarMap);
+t_unify_table_only(?tuple(_, Arity, _) = T1,
?tuple_set([{Arity, _}]) = T2, VarMap) when Arity =/= ?any ->
- unify_tuple_set_and_tuple2(T1, T2, VarMap);
-t_unify(?tuple_set(List1) = T1, ?tuple_set(List2) = T2, VarMap) ->
+ unify_tuple_set_and_tuple2_table_only(T1, T2, VarMap);
+t_unify_table_only(?tuple_set(List1) = T1, ?tuple_set(List2) = T2, VarMap) ->
try
- unify_lists(lists:append([T || {_Arity, T} <- List1]),
- lists:append([T || {_Arity, T} <- List2]), VarMap)
- of
- {Tuples, NewVarMap} -> {t_sup(Tuples), NewVarMap}
+ unify_lists_table_only(lists:append([T || {_Arity, T} <- List1]),
+ lists:append([T || {_Arity, T} <- List2]), VarMap)
catch _:_ -> throw({mismatch, T1, T2})
end;
-t_unify(?map(_, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B, VarMap0) ->
- {DefK, VarMap1} = t_unify(ADefK, BDefK, VarMap0),
- {DefV, VarMap2} = t_unify(ADefV, BDefV, VarMap1),
- {Pairs, VarMap} =
+t_unify_table_only(?map(_, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B, VarMap0) ->
+ VarMap1 = t_unify_table_only(ADefK, BDefK, VarMap0),
+ VarMap2 = t_unify_table_only(ADefV, BDefV, VarMap1),
+ {[], VarMap} =
map_pairwise_merge_foldr(
- fun(K, MNess, V1, MNess, V2, {Pairs0, VarMap3}) ->
+ fun(_K, MNess, V1, MNess, V2, {Pairs0, VarMap3}) ->
%% We know that the keys unify and do not contain variables, or they
%% would not be singletons
%% TODO: Should V=?none (known missing keys) be handled special?
- {V, VarMap4} = t_unify(V1, V2, VarMap3),
- {[{K,MNess,V}|Pairs0], VarMap4};
- (K, _, V1, _, V2, {Pairs0, VarMap3}) ->
+ VarMap4 = t_unify_table_only(V1, V2, VarMap3),
+ {Pairs0, VarMap4};
+ (_K, _, V1, _, V2, {Pairs0, VarMap3}) ->
%% One mandatory and one optional; what should be done in this case?
- {V, VarMap4} = t_unify(V1, V2, VarMap3),
- {[{K,?mand,V}|Pairs0], VarMap4}
+ VarMap4 = t_unify_table_only(V1, V2, VarMap3),
+ {Pairs0, VarMap4}
end, {[], VarMap2}, A, B),
- {t_map(Pairs, DefK, DefV), VarMap};
-t_unify(?opaque(_) = T1, ?opaque(_) = T2, VarMap) ->
- t_unify(t_opaque_structure(T1), t_opaque_structure(T2), VarMap);
-t_unify(T1, ?opaque(_) = T2, VarMap) ->
- t_unify(T1, t_opaque_structure(T2), VarMap);
-t_unify(?opaque(_) = T1, T2, VarMap) ->
- t_unify(t_opaque_structure(T1), T2, VarMap);
-t_unify(T, T, VarMap) ->
- {T, VarMap};
-t_unify(?union(_)=T1, ?union(_)=T2, VarMap) ->
+ VarMap;
+t_unify_table_only(?opaque(_) = T1, ?opaque(_) = T2, VarMap) ->
+ t_unify_table_only(t_opaque_structure(T1), t_opaque_structure(T2), VarMap);
+t_unify_table_only(T1, ?opaque(_) = T2, VarMap) ->
+ t_unify_table_only(T1, t_opaque_structure(T2), VarMap);
+t_unify_table_only(?opaque(_) = T1, T2, VarMap) ->
+ t_unify_table_only(t_opaque_structure(T1), T2, VarMap);
+t_unify_table_only(T, T, VarMap) ->
+ VarMap;
+t_unify_table_only(?union(_)=T1, ?union(_)=T2, VarMap) ->
{Type1, Type2} = unify_union2(T1, T2),
- t_unify(Type1, Type2, VarMap);
-t_unify(?union(_)=T1, T2, VarMap) ->
- t_unify(unify_union1(T1, T1, T2), T2, VarMap);
-t_unify(T1, ?union(_)=T2, VarMap) ->
- t_unify(T1, unify_union1(T2, T1, T2), VarMap);
-t_unify(T1, T2, _) ->
+ t_unify_table_only(Type1, Type2, VarMap);
+t_unify_table_only(?union(_)=T1, T2, VarMap) ->
+ t_unify_table_only(unify_union1(T1, T1, T2), T2, VarMap);
+t_unify_table_only(T1, ?union(_)=T2, VarMap) ->
+ t_unify_table_only(T1, unify_union1(T2, T1, T2), VarMap);
+t_unify_table_only(T1, T2, _) ->
throw({mismatch, T1, T2}).
+%% Two functions since t_unify_table_only is not symmetric.
+unify_tuple_set_and_tuple1_table_only(?tuple_set([{Arity, List}]),
+ ?tuple(Elements2, Arity, _), VarMap) ->
+ %% Can only work if the single tuple has variables at correct places.
+ unify_lists_table_only(sup_tuple_elements(List), Elements2, VarMap).
+
+unify_tuple_set_and_tuple2_table_only(?tuple(Elements2, Arity, _),
+ ?tuple_set([{Arity, List}]), VarMap) ->
+ %% Can only work if the single tuple has variables at correct places.
+ unify_lists_table_only(Elements2, sup_tuple_elements(List), VarMap).
+
+unify_lists_table_only([T1|Left1], [T2|Left2], VarMap) ->
+ NewVarMap = t_unify_table_only(T1, T2, VarMap),
+ unify_lists_table_only(Left1, Left2, NewVarMap);
+unify_lists_table_only([], [], VarMap) ->
+ VarMap.
+
unify_union2(?union(List1)=T1, ?union(List2)=T2) ->
case {unify_union(List1), unify_union(List2)} of
{{yes, Type1}, {yes, Type2}} -> {Type1, Type2};
@@ -3659,46 +3533,20 @@ unify_union(List) ->
is_opaque_type(?opaque(Elements), Opaques) ->
lists:any(fun(Opaque) -> is_opaque_type2(Opaque, Opaques) end, Elements).
-is_opaque_type2(#opaque{mod = Mod1, name = Name1, args = Args1}, Opaques) ->
+is_opaque_type2(#opaque{mod = Mod1, name = Name1, arity = Arity1}, Opaques) ->
F1 = fun(?opaque(Es)) ->
- F2 = fun(#opaque{mod = Mod, name = Name, args = Args}) ->
- is_type_name(Mod1, Name1, Args1, Mod, Name, Args)
+ F2 = fun(#opaque{mod = Mod, name = Name, arity = Arity}) ->
+ is_type_name(Mod1, Name1, Arity1, Mod, Name, Arity)
end,
lists:any(F2, Es)
end,
lists:any(F1, Opaques).
-is_type_name(Mod, Name, Args1, Mod, Name, Args2) ->
- length(Args1) =:= length(Args2);
-is_type_name(_Mod1, _Name1, _Args1, _Mod2, _Name2, _Args2) ->
+is_type_name(Mod, Name, Arity, Mod, Name, Arity) ->
+ true;
+is_type_name(_Mod1, _Name1, _Arity1, _Mod2, _Name2, _Arity2) ->
false.
-%% Two functions since t_unify is not symmetric.
-unify_tuple_set_and_tuple1(?tuple_set([{Arity, List}]),
- ?tuple(Elements2, Arity, _), VarMap) ->
- %% Can only work if the single tuple has variables at correct places.
- %% Collapse the tuple set.
- {NewElements, VarMap1} =
- unify_lists(sup_tuple_elements(List), Elements2, VarMap),
- {t_tuple(NewElements), VarMap1}.
-
-unify_tuple_set_and_tuple2(?tuple(Elements2, Arity, _),
- ?tuple_set([{Arity, List}]), VarMap) ->
- %% Can only work if the single tuple has variables at correct places.
- %% Collapse the tuple set.
- {NewElements, VarMap1} =
- unify_lists(Elements2, sup_tuple_elements(List), VarMap),
- {t_tuple(NewElements), VarMap1}.
-
-unify_lists(L1, L2, VarMap) ->
- unify_lists(L1, L2, VarMap, []).
-
-unify_lists([T1|Left1], [T2|Left2], VarMap, Acc) ->
- {NewT, NewVarMap} = t_unify(T1, T2, VarMap),
- unify_lists(Left1, Left2, NewVarMap, [NewT|Acc]);
-unify_lists([], [], VarMap, Acc) ->
- {lists:reverse(Acc), VarMap}.
-
%%t_assign_variables_to_subtype(T1, T2) ->
%% try
%% Dict = assign_vars(T1, T2, dict:new()),
@@ -3981,7 +3829,7 @@ t_subtract(?map(APairs, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B) ->
%% * The arguments constrain A at least as much as B, i.e. that A so far
%% is a subtype of B. In that case they return false
%% * That for the particular arguments, A being a subtype of B does not
- %% hold, but the infinimum of A and B is nonempty, and by narrowing a
+ %% hold, but the infimum of A and B is nonempty, and by narrowing a
%% pair in A, we can create a type that excludes some elements in the
%% infinumum. In that case, they will return that pair.
%% * That for the particular arguments, A being a subtype of B does not
@@ -4200,7 +4048,44 @@ t_unopaque(T, _) ->
-spec t_limit(erl_type(), integer()) -> erl_type().
t_limit(Term, K) when is_integer(K) ->
- t_limit_k(Term, K).
+ case is_limited(Term, K) of
+ true -> Term;
+ false -> t_limit_k(Term, K)
+ end.
+
+is_limited(?any, _) -> true;
+is_limited(_, K) when K =< 0 -> false;
+is_limited(?tuple(?any, ?any, ?any), _K) -> true;
+is_limited(?tuple(Elements, _Arity, _), K) ->
+ if K =:= 1 -> false;
+ true ->
+ K1 = K-1,
+ lists:all(fun(E) -> is_limited(E, K1) end, Elements)
+ end;
+is_limited(?tuple_set(_) = T, K) ->
+ lists:all(fun(Tuple) -> is_limited(Tuple, K) end, t_tuple_subtypes(T));
+is_limited(?list(Elements, Termination, _Size), K) ->
+ if K =:= 1 -> is_limited(Termination, K);
+ true -> is_limited(Termination, K - 1)
+ end
+ andalso is_limited(Elements, K - 1);
+is_limited(?function(Domain, Range), K) ->
+ is_limited(Domain, K) andalso is_limited(Range, K-1);
+is_limited(?product(Elements), K) ->
+ K1 = K-1,
+ lists:all(fun(X) -> is_limited(X, K1) end, Elements);
+is_limited(?union(Elements), K) ->
+ lists:all(fun(X) -> is_limited(X, K) end, Elements);
+is_limited(?opaque(Es), K) ->
+ lists:all(fun(#opaque{struct = S}) -> is_limited(S, K) end, set_to_list(Es));
+is_limited(?map(Pairs, DefK, DefV), K) ->
+ %% Use the fact that t_sup() does not increase the depth.
+ K1 = K - 1,
+ lists:all(fun({Key, _, Value}) ->
+ is_limited(Key, K1) andalso is_limited(Value, K1)
+ end, Pairs)
+ andalso is_limited(DefK, K1) andalso is_limited(DefV, K1);
+is_limited(_, _K) -> true.
t_limit_k(_, K) when K =< 0 -> ?any;
t_limit_k(?tuple(?any, ?any, ?any) = T, _K) -> T;
@@ -4350,8 +4235,8 @@ t_to_string(?identifier(Set), _RecDict) ->
flat_join([flat_format("~w()", [T]) || T <- set_to_list(Set)], " | ")
end;
t_to_string(?opaque(Set), RecDict) ->
- flat_join([opaque_type(Mod, Name, Args, S, RecDict) ||
- #opaque{mod = Mod, name = Name, struct = S, args = Args}
+ flat_join([opaque_type(Mod, Name, Arity, S, RecDict) ||
+ #opaque{mod = Mod, name = Name, struct = S, arity = Arity}
<- set_to_list(Set)],
" | ");
t_to_string(?matchstate(Pres, Slots), RecDict) ->
@@ -4524,19 +4409,18 @@ union_sequence(Types, RecDict) ->
flat_join(List, " | ").
-ifdef(DEBUG).
-opaque_type(Mod, Name, _Args, S, RecDict) ->
- ArgsString = comma_sequence(_Args, RecDict),
+opaque_type(Mod, Name, Arity, S, RecDict) ->
String = t_to_string(S, RecDict),
- opaque_name(Mod, Name, ArgsString) ++ "[" ++ String ++ "]".
+ opaque_name(Mod, Name, Arity) ++ "[" ++ String ++ "]".
-else.
-opaque_type(Mod, Name, Args, _S, RecDict) ->
- ArgsString = comma_sequence(Args, RecDict),
- opaque_name(Mod, Name, ArgsString).
+opaque_type(Mod, Name, Arity, _S, _RecDict) ->
+ opaque_name(Mod, Name, Arity).
-endif.
-opaque_name(Mod, Name, Extra) ->
+opaque_name(Mod, Name, Arity) ->
S = mod_name(Mod, Name),
- flat_format("~ts(~ts)", [S, Extra]).
+ Args = lists:join($,, lists:duplicate(Arity, $_)),
+ flat_format("~ts(~ts)", [S, Args]).
mod_name(Mod, Name) ->
flat_format("~w:~tw", [Mod, Name]).
@@ -4559,6 +4443,7 @@ mod_name(Mod, Name) ->
[erl_type()], type_names()}.
-type mod_type_table() :: ets:tid().
-type mod_records() :: dict:dict(module(), type_table()).
+-type exported_type_table() :: ets:tid().
-record(cache,
{
types = maps:new() :: #{cache_key() => {erl_type(), expand_limit()}},
@@ -4567,7 +4452,7 @@ mod_name(Mod, Name) ->
-opaque cache() :: #cache{}.
--spec t_from_form(parse_form(), sets:set(mfa()), site(), mod_type_table(),
+-spec t_from_form(parse_form(), exported_type_table(), site(), mod_type_table(),
var_table(), cache()) -> {erl_type(), cache()}.
t_from_form(Form, ExpTypes, Site, RecDict, VarTab, Cache) ->
@@ -4592,12 +4477,12 @@ t_from_form_without_remote(Form, Site, TypeTable) ->
-type expand_depth() :: integer().
-record(from_form, {site :: site(),
- xtypes :: sets:set(mfa()) | 'replace_by_none',
+ xtypes :: exported_type_table() | 'replace_by_none',
mrecs :: 'undefined' | mod_type_table(),
vtab :: var_table(),
tnames :: type_names()}).
--spec t_from_form_check_remote(parse_form(), sets:set(mfa()), site(),
+-spec t_from_form_check_remote(parse_form(), exported_type_table(), site(),
mod_type_table()) -> 'ok'.
t_from_form_check_remote(Form, ExpTypes, Site, RecDict) ->
State = #from_form{site = Site,
@@ -4618,7 +4503,7 @@ t_from_form_check_remote(Form, ExpTypes, Site, RecDict) ->
%% types balanced (unions will otherwise collapse to any()) by limiting
%% the depth the same way as t_limit/2 does.
--spec t_from_form1(parse_form(), sets:set(mfa()) | 'replace_by_none',
+-spec t_from_form1(parse_form(), exported_type_table() | 'replace_by_none',
site(), 'undefined' | mod_type_table(), var_table(),
cache()) -> {erl_type(), cache()}.
@@ -4647,6 +4532,10 @@ initial_typenames({type, MTA, _File}) -> [{type, MTA}];
initial_typenames({spec, _MFA, _File}) -> [];
initial_typenames({record, _MRA, _File}) -> [].
+%% 4 is the maximal depth used by any Dialyzer module
+%% (5 is used internally).
+-define(TYPE_LIMIT, 4).
+
from_form_loop(Form, State, D, Limit, C, T0) ->
{T1, L1, C1} = from_form(Form, State, D, Limit, C),
Delta = Limit - L1,
@@ -4656,6 +4545,9 @@ from_form_loop(Form, State, D, Limit, C, T0) ->
Delta * 8 > Limit ->
%% Save some time by assuming next depth will exceed the limit.
{T1, C1};
+ D =:= ?TYPE_LIMIT ->
+ %% No need to go deeper than necessary.
+ {T1, C1};
true ->
D1 = D + 1,
from_form_loop(Form, State, D1, Limit, C1, T1)
@@ -4963,7 +4855,7 @@ remote_from_form(Anno, RemMod, Name, Args, S, D, L, C) ->
self() ! {self(), ext_types, ext_types_message(MFA, Anno, Site)},
{t_any(), L, C};
{RemDict, C1} ->
- case sets:is_element(MFA, ET) of
+ case ets:member(ET, MFA) of
true ->
RemType = {type, MFA},
case can_unfold_more(RemType, TypeNames) of
@@ -5234,7 +5126,7 @@ recur_limit(Fun, D, L, TypeName, TypeNames) ->
Fun(D, L)
end.
--spec t_check_record_fields(parse_form(), sets:set(mfa()), site(),
+-spec t_check_record_fields(parse_form(), exported_type_table(), site(),
mod_type_table(), var_table(), cache()) -> cache().
t_check_record_fields(Form, ExpTypes, Site, RecDict, VarTable, Cache) ->
@@ -5465,7 +5357,7 @@ t_form_to_string({type, _Anno, Name, []} = T) ->
V = var_table__new(),
C = cache__new(),
State = #from_form{site = Site,
- xtypes = sets:new(),
+ xtypes = replace_by_none,
mrecs = 'undefined',
vtab = V,
tnames = []},
diff --git a/lib/dialyzer/src/typer.erl b/lib/dialyzer/src/typer.erl
index 69a622db2d..7f597f146e 100644
--- a/lib/dialyzer/src/typer.erl
+++ b/lib/dialyzer/src/typer.erl
@@ -161,7 +161,8 @@ get_type_info(#analysis{callgraph = CallGraph,
try
NewPlt = dialyzer_succ_typings:analyze_callgraph(StrippedCallGraph,
TrustPLT,
- CodeServer),
+ CodeServer,
+ none, []),
Analysis#analysis{callgraph = StrippedCallGraph, trust_plt = NewPlt}
catch
error:What:Stacktrace ->
diff --git a/lib/dialyzer/test/Makefile b/lib/dialyzer/test/Makefile
index d5e975453f..60c5ea5c2e 100644
--- a/lib/dialyzer/test/Makefile
+++ b/lib/dialyzer/test/Makefile
@@ -33,7 +33,7 @@ release_tests_spec:
$(INSTALL_DIR) "$(RELSYSDIR)"
chmod -R u+w "$(RELSYSDIR)"
$(INSTALL_DATA) $(AUXILIARY_FILES) "$(RELSYSDIR)"
- @tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
+ @tar cf - *_SUITE_data property_test | (cd "$(RELSYSDIR)"; tar xf -)
cd "$(RELSYSDIR)";\
erlc dialyzer_common.erl file_utils.erl;\
erl -noshell -run dialyzer_common create_all_suites -s erlang halt
diff --git a/lib/dialyzer/test/erl_types_SUITE.erl b/lib/dialyzer/test/erl_types_SUITE.erl
index bc735d3a60..5674ffd1cb 100644
--- a/lib/dialyzer/test/erl_types_SUITE.erl
+++ b/lib/dialyzer/test/erl_types_SUITE.erl
@@ -14,8 +14,11 @@
%%
-module(erl_types_SUITE).
--export([all/0,
- consistency_and_to_string/1, map_multiple_representations/1]).
+-export([all/0,groups/0,init_per_group/2,end_per_group/2,
+ consistency_and_to_string/1,misc/1,map_multiple_representations/1,
+ absorption/1,associativity/1,commutativity/1,idempotence/1,
+ identity/1,limit/1
+ ]).
%% Simplify calls into erl_types and avoid importing the entire module.
-define(M, erl_types).
@@ -23,7 +26,39 @@
-include_lib("common_test/include/ct.hrl").
all() ->
- [consistency_and_to_string, map_multiple_representations].
+ [consistency_and_to_string,
+ misc,
+ map_multiple_representations,
+ {group,property_tests}
+ ].
+
+groups() ->
+ [{property_tests,[parallel],
+ [absorption,
+ associativity,
+ commutativity,
+ idempotence,
+ identity,
+ limit]}].
+
+init_per_group(property_tests, Config0) ->
+ case ct_property_test:init_per_suite(Config0) of
+ [_|_]=Config ->
+ try proper_erlang_abstract_code:module() of
+ _ ->
+ Config
+ catch
+ error:undef ->
+ {skip, "No proper_erlang_abstract_code module"}
+ end;
+ Other ->
+ Other
+ end;
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
consistency_and_to_string(_Config) ->
%% Check consistency of types
@@ -196,6 +231,16 @@ consistency_and_to_string(_Config) ->
"{'false',_} | {'true',_}" = ?M:t_to_string(Union10),
"{'true',integer()}" = ?M:t_to_string(?M:t_inf(Union10, ?M:t_tuple([?M:t_atom(true), ?M:t_integer()]))).
+misc(_Config) ->
+ %% Miscellaneous cases which have been fixed.
+
+ %% Used to take "forever".
+ B1_1 = ?M:t_bitstr(6442450944, 1456),
+ B1_2 = ?M:t_bitstr(85, 7),
+ R1_R = ?M:t_bitstr(547608330240, 347892352432),
+ R1_R = ?M:t_inf(B1_1, B1_2),
+ ok.
+
%% OTP-17537.
map_multiple_representations(_Config) ->
DefV = erl_types:t_atom(),
@@ -311,3 +356,27 @@ map_multiple_representations(_Config) ->
"#{'a'=>atom(), 'b'=>atom()}" = erl_types:t_to_string(T)
end(),
ok.
+
+absorption(Config) ->
+ %% manual test: proper:quickcheck(erl_types_prop:absorption()).
+ true = ct_property_test:quickcheck(erl_types_prop:absorption(), Config).
+
+associativity(Config) ->
+ %% manual test: proper:quickcheck(erl_types_prop:associativity()).
+ true = ct_property_test:quickcheck(erl_types_prop:associativity(), Config).
+
+commutativity(Config) ->
+ %% manual test: proper:quickcheck(erl_types_prop:commutativity()).
+ true = ct_property_test:quickcheck(erl_types_prop:commutativity(), Config).
+
+idempotence(Config) ->
+ %% manual test: proper:quickcheck(erl_types_prop:idempotence()).
+ true = ct_property_test:quickcheck(erl_types_prop:idempotence(), Config).
+
+identity(Config) ->
+ %% manual test: proper:quickcheck(erl_types_prop:identity()).
+ true = ct_property_test:quickcheck(erl_types_prop:identity(), Config).
+
+limit(Config) ->
+ %% manual test: proper:quickcheck(erl_types_prop:limit()).
+ true = ct_property_test:quickcheck(erl_types_prop:limit(), Config).
diff --git a/lib/dialyzer/test/map_SUITE_data/results/opaque_key b/lib/dialyzer/test/map_SUITE_data/results/opaque_key
index b3a2d2b78c..b70157f1af 100644
--- a/lib/dialyzer/test/map_SUITE_data/results/opaque_key
+++ b/lib/dialyzer/test/map_SUITE_data/results/opaque_key
@@ -4,8 +4,8 @@ opaque_key_adt.erl:41:2: Invalid type specification for function opaque_key_adt:
opaque_key_adt.erl:44:2: Invalid type specification for function opaque_key_adt:s5/0. The success typing is () -> #{2:=3}
opaque_key_adt.erl:56:2: Invalid type specification for function opaque_key_adt:smt1/0. The success typing is () -> #{3:='a'}
opaque_key_adt.erl:59:2: Invalid type specification for function opaque_key_adt:smt2/0. The success typing is () -> #{1:='a'}
-opaque_key_use.erl:13:5: The test opaque_key_use:t() =:= opaque_key_use:t(integer()) can never evaluate to 'true'
-opaque_key_use.erl:24:5: Attempt to test for equality between a term of type opaque_key_adt:t(integer()) and a term of opaque type opaque_key_adt:t()
+opaque_key_use.erl:13:5: The test opaque_key_use:t() =:= opaque_key_use:t(_) can never evaluate to 'true'
+opaque_key_use.erl:24:5: Attempt to test for equality between a term of type opaque_key_adt:t(_) and a term of opaque type opaque_key_adt:t()
opaque_key_use.erl:37:1: Function adt_mm1/0 has no local return
opaque_key_use.erl:40:5: The attempt to match a term of type opaque_key_adt:m() against the pattern #{A:=R} breaks the opacity of the term
opaque_key_use.erl:48:1: Function adt_mu1/0 has no local return
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/para b/lib/dialyzer/test/opaque_SUITE_data/results/para
index d0ddab7b66..0ba2a24996 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/para
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/para
@@ -1,34 +1,24 @@
-para1.erl:18:5: The test para1:t(atom()) =:= para1:t(integer()) can never evaluate to 'true'
-para1.erl:23:5: The test para1:t(atom()) =:= para1:t() can never evaluate to 'true'
-para1.erl:28:5: The test para1:t() =:= para1:t(integer()) can never evaluate to 'true'
+para1.erl:18:5: The test para1:t(_) =:= para1:t(_) can never evaluate to 'true'
+para1.erl:23:5: The test para1:t(_) =:= para1:t() can never evaluate to 'true'
+para1.erl:28:5: The test para1:t() =:= para1:t(_) can never evaluate to 'true'
para1.erl:33:5: The test {3,2} =:= {'a','b'} can never evaluate to 'true'
-para1.erl:38:5: Attempt to test for equality between a term of type para1_adt:t(integer()) and a term of opaque type para1_adt:t(atom())
-para1.erl:43:5: Attempt to test for equality between a term of type para1_adt:t() and a term of opaque type para1_adt:t(atom())
-para1.erl:48:5: Attempt to test for equality between a term of type para1_adt:t(integer()) and a term of opaque type para1_adt:t()
+para1.erl:38:5: The test para1_adt:t(_) =:= para1_adt:t(_) can never evaluate to 'true'
+para1.erl:43:5: Attempt to test for equality between a term of type para1_adt:t() and a term of opaque type para1_adt:t(_)
+para1.erl:48:5: Attempt to test for equality between a term of type para1_adt:t(_) and a term of opaque type para1_adt:t()
para1.erl:53:5: The test {3,2} =:= {'a','b'} can never evaluate to 'true'
-para2.erl:103:5: Attempt to test for equality between a term of type para2_adt:circ(integer(),integer()) and a term of opaque type para2_adt:circ(integer())
-para2.erl:117:5: Attempt to test for equality between a term of type para2_adt:un(atom(),integer()) and a term of opaque type para2_adt:un(integer(),atom())
+para2.erl:103:5: Attempt to test for equality between a term of type para2_adt:circ(_,_) and a term of opaque type para2_adt:circ(_)
para2.erl:31:5: The test 'a' =:= 'b' can never evaluate to 'true'
para2.erl:61:5: Attempt to test for equality between a term of type para2_adt:c2() and a term of opaque type para2_adt:c1()
para2.erl:66:5: The test 'a' =:= 'b' can never evaluate to 'true'
-para2.erl:88:5: The test para2:circ(integer()) =:= para2:circ(integer(),integer()) can never evaluate to 'true'
+para2.erl:88:5: The test para2:circ(_) =:= para2:circ(_,_) can never evaluate to 'true'
para3.erl:28:2: Invalid type specification for function para3:ot2/0. The success typing is () -> 'foo'
para3.erl:36:5: The pattern {{{17}}} can never match the type {{{{{{_,_,_,_,_}}}}}}
para3.erl:55:2: Invalid type specification for function para3:t2/0. The success typing is () -> 'foo'
para3.erl:65:5: The attempt to match a term of type {{{{{para3_adt:ot1(_,_,_,_,_)}}}}} against the pattern {{{{{17}}}}} breaks the opacity of para3_adt:ot1(_,_,_,_,_)
para3.erl:68:5: The pattern {{{{17}}}} can never match the type {{{{{para3_adt:ot1(_,_,_,_,_)}}}}}
-para3.erl:74:2: The specification for para3:exp_adt/0 has an opaque subtype para3_adt:exp1(para3_adt:exp2()) which is violated by the success typing () -> 3
-para4.erl:21:2: Invalid type specification for function para4:a/1. The success typing is (para4:d_all() | para4:d_atom()) -> [{atom() | integer(),atom() | integer()}]
-para4.erl:26:2: Invalid type specification for function para4:i/1. The success typing is (para4:d_all() | para4:d_integer()) -> [{atom() | integer(),atom() | integer()}]
+para3.erl:74:2: The specification for para3:exp_adt/0 has an opaque subtype para3_adt:exp1(_) which is violated by the success typing () -> 3
para4.erl:31:2: Invalid type specification for function para4:t/1. The success typing is (para4:d_all() | para4:d_tuple()) -> [{atom() | integer(),atom() | integer()}]
-para4.erl:59:5: Attempt to test for equality between a term of type para4_adt:t(atom() | integer()) and a term of opaque type para4_adt:t(integer())
-para4.erl:64:5: Attempt to test for equality between a term of type para4_adt:t(atom() | integer()) and a term of opaque type para4_adt:t(atom())
-para4.erl:69:5: Attempt to test for equality between a term of type para4_adt:int(1 | 2 | 3 | 4) and a term of opaque type para4_adt:int(1 | 2)
-para4.erl:74:5: Attempt to test for equality between a term of type para4_adt:int(2 | 3 | 4) and a term of opaque type para4_adt:int(1 | 2)
-para4.erl:79:5: Attempt to test for equality between a term of type para4_adt:int(2 | 3 | 4) and a term of opaque type para4_adt:int(5 | 6 | 7)
-para4.erl:84:5: Attempt to test for equality between a term of type para4_adt:un(3 | 4) and a term of opaque type para4_adt:un(1 | 2)
-para4.erl:89:5: Attempt to test for equality between a term of type para4_adt:tup({_,_}) and a term of opaque type para4_adt:tup(tuple())
-para4.erl:94:5: Attempt to test for equality between a term of type para4_adt:t(#{1=>'a'}) and a term of opaque type para4_adt:t(#{2=>'b'})
-para5.erl:13:5: Attempt to test for inequality between a term of type para5_adt:dd(atom()) and a term of opaque type para5_adt:d()
+para4.erl:79:5: The test para4_adt:int(_) =:= para4_adt:int(_) can never evaluate to 'true'
+para5.erl:13:5: Attempt to test for inequality between a term of type para5_adt:dd(_) and a term of opaque type para5_adt:d()
para5.erl:8:5: The test para5_adt:d() =:= para5_adt:d() can never evaluate to 'true'
diff --git a/lib/dialyzer/test/property_test/erl_types_prop.erl b/lib/dialyzer/test/property_test/erl_types_prop.erl
new file mode 100644
index 0000000000..ea5043a2c9
--- /dev/null
+++ b/lib/dialyzer/test/property_test/erl_types_prop.erl
@@ -0,0 +1,229 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2020. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(erl_types_prop).
+-compile([export_all, nowarn_export_all]).
+
+%% This module only supports proper, as we use features of PropEr's
+%% module erlang_abstract_code not available in quickcheck.
+
+-proptest([proper]).
+
+-ifdef(PROPER).
+
+-include_lib("proper/include/proper.hrl").
+
+-define(REPETITIONS, 5000).
+
+absorption() ->
+ numtests(?REPETITIONS, absorption_1()).
+
+absorption_1() ->
+ ?FORALL({TypeA, TypeB},
+ ?LET(TypeA, type(),
+ ?LET(TypeB, type(), {TypeA, TypeB})),
+ ?WHENFAIL(
+ begin
+ io:format("TypeA = ~p,\n", [TypeA]),
+ io:format("TypeB = ~p,\n", [TypeB]),
+ io:format("~p:absorption_check(TypeA, TypeB).\n",
+ [?MODULE])
+ end,
+ absorption_check(TypeA, TypeB))).
+
+absorption_check(A, B) ->
+ %% a ∨ (a ∧ b) = a
+ R1 = sup(A, inf(A, B)),
+ %% a ∧ (a ∨ b) = a
+ R2 = inf(A, sup(A, B)),
+ equal(A, R1) andalso equal(A, R2).
+
+associativity() ->
+ numtests(?REPETITIONS, associativity_1()).
+
+associativity_1() ->
+ ?FORALL({TypeA, TypeB, TypeC},
+ ?LET(TypeA, type_without_no_return(),
+ ?LET(TypeB, type_without_no_return(),
+ ?LET(TypeC, type_without_no_return(), {TypeA, TypeB, TypeC}))),
+ ?WHENFAIL(
+ begin
+ io:format("TypeA = ~p,\n", [TypeA]),
+ io:format("TypeB = ~p,\n", [TypeB]),
+ io:format("TypeC = ~p,\n", [TypeC]),
+ io:format("~p:associativity_check(TypeA, TypeB, TypeC).\n",
+ [?MODULE])
+ end,
+ associativity_check(TypeA, TypeB, TypeC))).
+
+associativity_check(A, B, C) ->
+ %% a ∨ (b ∨ c) = (a ∨ b) ∨ c
+ LHS_Sup = sup(A, sup(B, C)),
+ RHS_Sup = sup(sup(A, B), C),
+ Test1 = equal(LHS_Sup, RHS_Sup),
+ %% a ∧ (b ∧ c) = (a ∧ b) ∧ c
+ LHS_Inf = inf(A, inf(B, C)),
+ RHS_Inf = inf(inf(A, B), C),
+ Test2 = equal(LHS_Inf, RHS_Inf),
+ Test1 and Test2.
+
+commutativity() ->
+ numtests(?REPETITIONS, commutativity_1()).
+
+commutativity_1() ->
+ ?FORALL({TypeA, TypeB},
+ ?LET(TypeA, type(),
+ ?LET(TypeB, type(), {TypeA, TypeB})),
+ ?WHENFAIL(
+ begin
+ io:format("TypeA = ~p,\n", [TypeA]),
+ io:format("TypeB = ~p,\n", [TypeB]),
+ io:format("~p:commutativity_check(TypeA, TypeB).\n",
+ [?MODULE])
+ end,
+ commutativity_check(TypeA, TypeB))).
+
+commutativity_check(A, B) ->
+ %% a ∨ b = b ∨ a
+ Sup_AB = sup(A, B),
+ Sup_BA = sup(B, A),
+ true = sup(A, B) =:= sup(B, A),
+ Test1 = equal(Sup_AB, Sup_BA),
+ %% a ∧ b = b ∧ a
+ Inf_AB = inf(A, B),
+ Inf_BA = inf(B, A),
+ Test2 = equal(Inf_AB, Inf_BA),
+ Test1 and Test2.
+
+idempotence() ->
+ numtests(?REPETITIONS, idempotence_1()).
+
+idempotence_1() ->
+ ?FORALL(Type,
+ type(),
+ ?WHENFAIL(
+ begin
+ io:format("Type = ~p,\n", [Type]),
+ io:format("~p:idempotence_check(Type).\n", [?MODULE])
+ end,
+ idempotence_check(Type))).
+
+idempotence_check(Type) ->
+ %% a ∨ a = a
+ Sup = sup(Type, Type),
+ Test1 = equal(Sup, Type),
+ %% a ∧ a = a
+ Inf = inf(Type, Type),
+ Test2 = equal(Inf, Type),
+ Test1 and Test2.
+
+identity() ->
+ numtests(?REPETITIONS, identity_1()).
+
+identity_1() ->
+ ?FORALL(Type, type(), identity_check(Type)).
+
+identity_check(Type) ->
+ %% a ∨ [bottom element] = a
+ Sup = sup(Type, none),
+ Test1 = equal(Sup, Type),
+ %% a ∧ [top element] = a
+ Inf = inf(Type, any),
+ Test2 = equal(Inf, Type),
+ Test1 and Test2.
+
+limit() ->
+ numtests(?REPETITIONS, limit_1()).
+
+limit_1() ->
+ ?FORALL(Type,
+ type(),
+ ?WHENFAIL(
+ begin
+ io:format("Type = ~p,\n", [Type]),
+ io:format("~p:limit_check(Type).\n", [?MODULE])
+ end,
+ limit_check(Type))).
+
+limit_check(Type1) ->
+ equal(erl_types:t_limit(Type1, 1000), Type1).
+
+inf(A, B) ->
+ erl_types:t_inf(A, B).
+
+sup(A, B) ->
+ erl_types:t_sup(A, B).
+
+equal(A, B) ->
+ erl_types:t_is_equal(A, B).
+
+type_without_no_return() ->
+ ?SUCHTHAT(Type, type(), not has_no_return(Type)).
+
+has_no_return(unit) ->
+ true;
+has_no_return(Tuple) when is_tuple(Tuple) ->
+ has_no_return(tuple_to_list(Tuple));
+has_no_return([T|Ts]) ->
+ has_no_return(T) orelse has_no_return(Ts);
+has_no_return(_) ->
+ false.
+
+type() ->
+ ?LET(Forms,
+ abstr(),
+ begin
+ [F | _] = [T || {attribute, _, K, {_, T, []}} <- Forms,
+ K =:= type orelse K =:= opaque],
+ form_to_type(F)
+ end).
+
+abstr() ->
+ Opts = [{types, [{Type, 0} || Type <- types()]},
+ {weight, {atom, 10}},
+ {weight, {type_decl, 1}},
+ {weight, {record_decl, 0}},
+ {weight, {function_spec, 0}},
+ {weight, {function_decl, 0}},
+ {weight, {type_variable, 0}}],
+ proper_erlang_abstract_code:module(Opts).
+
+form_to_type(Form) ->
+ Types = [SiteType | _] = types(),
+ TableTypes = [{{type, Type, 0},
+ {{m, "file", {type, 0, any, []}, []}, any}} ||
+ Type <- Types],
+ TypeTable = maps:from_list(TableTypes),
+ CodeTable = ets:new(table, [set]),
+ try
+ true = ets:insert(CodeTable, {m, TypeTable}),
+ Site = {type, {m, SiteType, 0}, ""},
+ C = erl_types:cache__new(),
+ ETypes = sets:from_list([]),
+ {T, _} = erl_types:t_from_form(Form, ETypes, Site, CodeTable, #{}, C),
+ T
+ after
+ true = ets:delete(CodeTable)
+ end.
+
+types() ->
+ [t, tt].
+
+-endif.
diff --git a/lib/dialyzer/test/small_SUITE_data/src/binary_redef.erl b/lib/dialyzer/test/small_SUITE_data/src/binary_redef.erl
deleted file mode 100644
index 851b8180d3..0000000000
--- a/lib/dialyzer/test/small_SUITE_data/src/binary_redef.erl
+++ /dev/null
@@ -1,22 +0,0 @@
--module(binary_redef).
-
--export([t/0]).
-
--export_type([nonempty_binary/0, nonempty_bitstring/0]).
-
--type nonempty_binary() :: integer().
--type nonempty_bitstring() :: integer().
-
-t() ->
- I = new(),
- t1(I).
-
--spec t1(nonempty_bitstring()) -> nonempty_bitstring().
-
-t1(A) ->
- A + A.
-
--spec new() -> nonempty_binary().
-
-new() ->
- 3.
diff --git a/lib/diameter/src/diameter.app.src b/lib/diameter/src/diameter.app.src
index 18202f033e..8819608dc4 100644
--- a/lib/diameter/src/diameter.app.src
+++ b/lib/diameter/src/diameter.app.src
@@ -38,7 +38,7 @@
{mod, {diameter_app, []}},
{runtime_dependencies, [
"erts-10.0",
- "stdlib-2.4",
+ "stdlib-3.0",
"kernel-3.2",
"ssl-9.0"
%, "syntax-tools-1.6.18"
diff --git a/lib/edoc/src/edoc.app.src b/lib/edoc/src/edoc.app.src
index 0edee67fce..079be93e9e 100644
--- a/lib/edoc/src/edoc.app.src
+++ b/lib/edoc/src/edoc.app.src
@@ -26,6 +26,6 @@
{registered,[]},
{applications, [compiler, kernel, stdlib, syntax_tools]},
{env, []},
- {runtime_dependencies, ["xmerl-1.3.7", "syntax_tools-1.6.14", "stdlib-3.15",
+ {runtime_dependencies, ["xmerl-1.3.7", "syntax_tools-2.0", "stdlib-3.15",
"kernel-3.0", "inets-5.10", "erts-6.0"]}
]}.
diff --git a/lib/edoc/src/edoc_layout_chunks.erl b/lib/edoc/src/edoc_layout_chunks.erl
index 570511c754..927b85bf07 100644
--- a/lib/edoc/src/edoc_layout_chunks.erl
+++ b/lib/edoc/src/edoc_layout_chunks.erl
@@ -155,9 +155,9 @@ doc_visibility(_XPath, Doc, Opts) ->
end.
doc_contents_(_XPath, Doc, Opts) ->
- Equiv = xpath_to_chunk("./equiv", Doc),
- Desc = xpath_to_chunk("./description/fullDescription", Doc),
- See = xpath_to_chunk("./see", Doc),
+ Equiv = xpath_to_chunk("./equiv", Doc, Opts),
+ Desc = xpath_to_chunk("./description/fullDescription", Doc, Opts),
+ See = xpath_to_chunk("./see", Doc, Opts),
doc_content(Equiv ++ Desc ++ See, Opts).
meta_deprecated(Doc, Opts) ->
@@ -226,7 +226,7 @@ callback(Cb = #tag{name = callback, origin = code}, Opts) ->
form = Form} = Cb,
EntryDoc = case MaybeDoc of
none -> none;
- _ -> doc_content([xmerl_to_binary(MaybeDoc)], Opts)
+ _ -> doc_content([xmerl_to_binary(MaybeDoc, Opts)], Opts)
end,
{source, File} = lists:keyfind(source, 1, Opts),
Anno = erl_anno:set_file(File, erl_anno:new(Line)),
@@ -477,13 +477,13 @@ xpath_to_text(XPath, Doc, Opts) ->
{_ , Value} = format_attribute(Attr),
hd(shell_docs:normalize([Value]));
[#xmlElement{}] = Elements ->
- xmerl_to_binary(Elements);
+ xmerl_to_binary(Elements, Opts);
[_|_] ->
erlang:error(multiple_nodes, [XPath, Doc, Opts])
end.
-xmerl_to_binary(XML) ->
- iolist_to_binary(chunk_to_text(xmerl_to_chunk(XML))).
+xmerl_to_binary(XML, Opts) ->
+ iolist_to_binary(chunk_to_text(xmerl_to_chunk(XML, Opts))).
chunk_to_text([]) -> [];
chunk_to_text([Node | Nodes]) ->
@@ -498,53 +498,53 @@ xpath_to_atom(XPath, Doc, Opts) ->
xpath_to_integer(XPath, Doc, Opts) ->
binary_to_integer(xpath_to_text(XPath, Doc, Opts)).
-xpath_to_chunk(XPath, Doc) ->
+xpath_to_chunk(XPath, Doc, Opts) ->
XmerlDoc = xmerl_xpath:string(XPath, Doc),
- xmerl_to_chunk(XmerlDoc).
+ xmerl_to_chunk(XmerlDoc, Opts).
%%.
%%' Xmerl to chunk format
%%
--spec xmerl_to_chunk([xmerl_doc_node()]) -> shell_docs:chunk_elements().
-xmerl_to_chunk(Contents) ->
- shell_docs:normalize(format_content(Contents)).
+-spec xmerl_to_chunk([xmerl_doc_node()], proplists:proplist()) -> shell_docs:chunk_elements().
+xmerl_to_chunk(Contents, Opts) ->
+ shell_docs:normalize(format_content(Contents, Opts)).
--spec format_content([xmerl_doc_node()]) -> shell_docs:chunk_elements().
-format_content(Contents) ->
+-spec format_content([xmerl_doc_node()], proplists:proplist()) -> shell_docs:chunk_elements().
+format_content(Contents, Opts) ->
{SeeTags, OtherTags} = lists:partition(fun (#xmlElement{name = see}) -> true;
(_) -> false end,
Contents),
- lists:flatten([ format_content_(T) || T <- OtherTags ] ++ rewrite_see_tags(SeeTags)).
+ lists:flatten([ format_content_(T, Opts) || T <- OtherTags ] ++ rewrite_see_tags(SeeTags, Opts)).
--spec format_content_(xmerl_doc_node()) -> shell_docs:chunk_elements().
-format_content_(#xmlPI{}) -> [];
-format_content_(#xmlComment{}) -> [];
+-spec format_content_(xmerl_doc_node(), proplists:proplist()) -> shell_docs:chunk_elements().
+format_content_(#xmlPI{}, _) -> [];
+format_content_(#xmlComment{}, _) -> [];
-format_content_(#xmlText{} = T) ->
+format_content_(#xmlText{} = T, _) ->
Text = T#xmlText.value,
case edoc_lib:is_space(Text) of
true -> [];
false -> [unicode:characters_to_binary(Text)]
end;
-format_content_(#xmlElement{name = equiv} = E) ->
- format_element(rewrite_equiv_tag(E));
-format_content_(#xmlElement{name = a} = E) ->
- format_element(rewrite_a_tag(E));
-format_content_(#xmlElement{} = E) ->
- format_element(E).
+format_content_(#xmlElement{name = equiv} = E, Opts) ->
+ format_element(rewrite_equiv_tag(E), Opts);
+format_content_(#xmlElement{name = a} = E, Opts) ->
+ format_element(rewrite_a_tag(E), Opts);
+format_content_(#xmlElement{} = E, Opts) ->
+ format_element(E, Opts).
-format_element(#xmlElement{} = E) ->
+format_element(#xmlElement{} = E, Opts) ->
#xmlElement{name = Name, content = Content, attributes = Attributes} = E,
case {is_edoc_tag(Name), is_html_tag(Name)} of
{true, _} ->
- format_content(Content);
+ format_content(Content, Opts);
{_, false} ->
- edoc_report:warning("'~s' is not allowed - skipping tag, extracting content", [Name]),
- format_content(Content);
+ edoc_report:warning(0, source_file(Opts), "'~s' is not allowed - skipping tag, extracting content", [Name]),
+ format_content(Content, Opts);
_ ->
- [{Name, format_attributes(Attributes), format_content(Content)}]
+ [{Name, format_attributes(Attributes), format_content(Content, Opts)}]
end.
-spec format_attributes([xmerl_attribute()]) -> [shell_docs:chunk_element_attr()].
@@ -575,12 +575,12 @@ rewrite_a_tag(#xmlElement{name = a} = E) ->
SimpleE = xmerl_lib:simplify_element(E),
xmerl_lib:normalize_element(rewrite_docgen_link(SimpleE)).
-rewrite_see_tags([]) -> [];
-rewrite_see_tags([#xmlElement{name = see} | _] = SeeTags) ->
+rewrite_see_tags([], _Opts) -> [];
+rewrite_see_tags([#xmlElement{name = see} | _] = SeeTags, Opts) ->
Grouped = [ rewrite_see_tag(T) || T <- SeeTags ],
NewXML = {p, [], [{em,[],["See also: "]}] ++ lists:join(", ", Grouped) ++ ["."]},
%% Convert strings to binaries in the entire new tree:
- [format_content_(xmerl_lib:normalize_element(NewXML))].
+ [format_content_(xmerl_lib:normalize_element(NewXML), Opts)].
rewrite_see_tag(#xmlElement{name = see} = E) ->
%% TODO: this is not formatted nicely by shell_docs...
diff --git a/lib/edoc/src/edoc_tags.erl b/lib/edoc/src/edoc_tags.erl
index 005c062e23..e467b98a00 100644
--- a/lib/edoc/src/edoc_tags.erl
+++ b/lib/edoc/src/edoc_tags.erl
@@ -340,6 +340,7 @@ parse_contact(Data, Line, _Env, _Where) ->
Info
end.
+-dialyzer({no_match, parse_typedef/4}).
parse_typedef(Data, Line, _Env, Where) ->
edoc_report:warning(Line, Where,
"EDoc @type tags are deprecated. "
diff --git a/lib/edoc/src/edoc_types.erl b/lib/edoc/src/edoc_types.erl
index 9da447bec5..05e321bcee 100644
--- a/lib/edoc/src/edoc_types.erl
+++ b/lib/edoc/src/edoc_types.erl
@@ -39,9 +39,9 @@
-include("edoc_types.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-%-type t_spec() :: #t_spec{name :: t_name(),
-% type :: t_type(),
-% defs :: [t_def()]}.
+-type t_spec() :: #t_spec{name :: t_name(),
+ type :: t_fun(),
+ defs :: [t_def()]}.
%% Function specification.
-type type() :: t_atom() | t_binary() | t_float() | t_fun() | t_integer()
@@ -49,18 +49,18 @@
| t_record() | t_tuple() | t_type() | t_union() | t_var()
| t_paren().
-%-type t_typedef() :: #t_typedef{name :: t_name(),
-% args :: [type()],
-% type :: type() | undefined,
-% defs :: [t_def()]}.
+-type t_typedef() :: #t_typedef{name :: t_name(),
+ args :: [type()],
+ type :: type() | undefined,
+ defs :: [t_def()]}.
%% Type declaration/definition.
-%-type t_throws() :: #t_throws{type :: type(),
-% defs :: [t_def()]}.
+-type t_throws() :: #t_throws{type :: type(),
+ defs :: [t_def()]}.
%% Exception declaration.
-%-type t_def() :: #t_def{name :: t_type() | t_var(),
-% type :: type()}.
+-type t_def() :: #t_def{name :: t_type() | t_var(),
+ type :: type()}.
%% Local definition `name = type'.
-type t_name() :: #t_name{app :: [] | atom(),
@@ -137,11 +137,9 @@ is_predefined(cons, 2) -> true;
is_predefined(deep_string, 0) -> true;
is_predefined(F, A) -> erl_internal:is_type(F, A).
-is_new_predefined(nonempty_binary, 0) -> true;
-is_new_predefined(nonempty_bitstring, 0) -> true;
-is_new_predefined(map, 0) -> true;
is_new_predefined(_, _) -> false.
+-spec to_ref(t_typedef() | t_def() | t_type() | t_name()) -> edoc_refs:t().
to_ref(#t_typedef{name = N}) ->
to_ref(N);
to_ref(#t_def{name = N}) ->
@@ -172,6 +170,7 @@ infer_module_app(#t_name{app = [], module = M} = TName) when is_atom(M) ->
infer_module_app(Other) ->
Other.
+-spec to_xml(type() | t_spec() | t_typedef() | t_def() | t_throws(), term()) -> term().
to_xml(#t_var{name = N}, _Env) ->
{typevar, [{name, atom_to_list(N)}], []};
to_xml(#t_name{module = [], name = N}, _Env) ->
diff --git a/lib/eldap/src/eldap.app.src b/lib/eldap/src/eldap.app.src
index 03a7d7c562..032a391936 100644
--- a/lib/eldap/src/eldap.app.src
+++ b/lib/eldap/src/eldap.app.src
@@ -5,6 +5,6 @@
{registered, []},
{applications, [kernel, stdlib]},
{env, []},
- {runtime_dependencies, ["stdlib-2.0","ssl-5.3.4","kernel-3.0","erts-6.0",
+ {runtime_dependencies, ["stdlib-3.4","ssl-5.3.4","kernel-3.0","erts-6.0",
"asn1-3.0"]}
]}.
diff --git a/lib/erl_docgen/src/docgen_xml_to_chunk.erl b/lib/erl_docgen/src/docgen_xml_to_chunk.erl
index 2d34350618..7b08a7904a 100644
--- a/lib/erl_docgen/src/docgen_xml_to_chunk.erl
+++ b/lib/erl_docgen/src/docgen_xml_to_chunk.erl
@@ -31,14 +31,24 @@
main([_Application, FromBeam, _Escript, ToChunk]) ->
%% The given module is not documented, generate a hidden beam chunk file
Name = filename:basename(filename:rootname(FromBeam)) ++ ".erl",
+ {ok, {_Module, [{exports, Exports}]}} = beam_lib:chunks(FromBeam, [exports]),
- EmptyDocs = #docs_v1{ anno = erl_anno:set_file(Name, erl_anno:new(0)),
- module_doc = hidden, docs = []},
+ Anno = erl_anno:set_file(Name, erl_anno:new(0)),
+
+ EmptyDocs = add_hidden_docs(
+ Exports,
+ #docs_v1{ anno = Anno,
+ module_doc = hidden,
+ docs = []}),
ok = file:write_file(ToChunk, term_to_binary(EmptyDocs,[compressed])),
ok;
-main([Application, FromXML, FromBeam, _Escript, ToChunk]) ->
+main([Application, FromXML, FromBeam, Escript, ToChunk]) ->
_ = erlang:process_flag(max_heap_size,20 * 1000 * 1000),
case docs(Application, FromXML, FromBeam) of
+ {error, not_erlref} ->
+ %% The XML files was not a erlref, so we generate
+ %% a hidden entry for this module.
+ main([Application, FromBeam, Escript, ToChunk]);
{error, Reason} ->
io:format("Failed to create chunks: ~p~n",[Reason]),
erlang:halt(1);
@@ -68,7 +78,7 @@ main([Application, FromXML, FromBeam, _Escript, ToChunk]) ->
erlang:halt(1),
ok;
Docs ->
- ok = file:write_file(ToChunk, term_to_binary(Docs,[compressed]))
+ ok = file:write_file(ToChunk, term_to_binary(Docs, [compressed]))
end.
%% Error handling
@@ -269,17 +279,34 @@ docs(Application, OTPXml, FromBEAM)->
{event_state,initial_state()}]) of
{ok,Tree,_} ->
{ok, {Module, Chunks}} = beam_lib:chunks(FromBEAM,[exports,abstract_code]),
- Dom = get_dom(Tree),
- put(application, Application),
- put(module, filename:basename(filename:rootname(FromBEAM))),
- NewDom = transform(Dom,[]),
- Chunk = to_chunk(NewDom, OTPXml, Module, proplists:get_value(abstract_code, Chunks)),
- verify_chunk(Module,proplists:get_value(exports, Chunks), Chunk),
- Chunk;
+ case get_dom(Tree) of
+ [{erlref,_,_}] = Dom ->
+ put(application, Application),
+ put(module, filename:basename(filename:rootname(FromBEAM))),
+ NewDom = transform(Dom, []),
+ Chunk = add_hidden_docs(
+ proplists:get_value(exports, Chunks),
+ to_chunk(NewDom, OTPXml, Module,
+ proplists:get_value(abstract_code, Chunks))),
+ verify_chunk(Module, proplists:get_value(exports, Chunks), Chunk),
+ Chunk;
+ _Else ->
+ {error,not_erlref}
+ end;
Else ->
{error,Else}
end.
+%% Create hidden function entries for any exported functions that
+%% does not have any documentation.
+add_hidden_docs(Exports, #docs_v1{ anno = Anno, docs = Docs } = Chunk) ->
+ HiddenFuncs =
+ [{{function, F, A}, Anno,
+ [iolist_to_binary(io_lib:format("~p/~p", [F, A]))],
+ hidden, #{}} || {F, A} <- Exports, F =/= module_info,
+ lists:keysearch({function, F, A}, 1, Docs) == false ],
+ Chunk#docs_v1{ docs = HiddenFuncs ++ Docs }.
+
verify_chunk(M, Exports, #docs_v1{ docs = Docs } = Doc) ->
%% Make sure that each documented function actually is exported
diff --git a/lib/erl_docgen/src/erl_docgen.app.src b/lib/erl_docgen/src/erl_docgen.app.src
index c7b7967a3d..5a6b48bd26 100644
--- a/lib/erl_docgen/src/erl_docgen.app.src
+++ b/lib/erl_docgen/src/erl_docgen.app.src
@@ -10,6 +10,6 @@
{registered,[]},
{applications, [kernel,stdlib]},
{env, []},
- {runtime_dependencies, ["xmerl-1.3.7","kernel-8.0","stdlib-3.15","edoc-1.0","erts-9.0"]}
+ {runtime_dependencies, ["xmerl-1.3.7","kernel-8.0","stdlib-3.15","edoc-1.0","erts-11.0"]}
]
}.
diff --git a/lib/erl_interface/config.h.in b/lib/erl_interface/config.h.in
index 2ec4f66c3b..a0e4efe262 100644
--- a/lib/erl_interface/config.h.in
+++ b/lib/erl_interface/config.h.in
@@ -1,11 +1,6 @@
-/* config.h.in. Generated from configure.in by autoheader. */
+/* config.h.in. Generated from configure.ac by autoheader. */
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
- systems. This function is required for `alloca.c' support on those systems.
- */
-#undef CRAY_STACKSEG_END
-
-/* Define to 1 if using `alloca.c'. */
+/* Define to 1 if using 'alloca.c'. */
#undef C_ALLOCA
/* Define if 'errno' should not be exposed as is in 'erl_errno' */
@@ -74,11 +69,10 @@
__sync_val_compare_and_swap() can handle on your system */
#undef ETHR_HAVE___sync_val_compare_and_swap
-/* Define to 1 if you have `alloca', as a function or macro. */
+/* Define to 1 if you have 'alloca', as a function or macro. */
#undef HAVE_ALLOCA
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
- */
+/* Define to 1 if <alloca.h> works. */
#undef HAVE_ALLOCA_H
/* Define to 1 if you have the <arpa/inet.h> header file. */
@@ -147,9 +141,6 @@
/* Define to 1 if you have the `memmove' function. */
#undef HAVE_MEMMOVE
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
@@ -180,6 +171,9 @@
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
@@ -284,16 +278,15 @@
STACK_DIRECTION = 0 => direction of growth unknown */
#undef STACK_DIRECTION
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
#undef STDC_HEADERS
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
/* Define to `int' if <sys/types.h> doesn't define. */
#undef gid_t
-/* Define to `int' if <sys/types.h> does not define. */
+/* Define as a signed integer type capable of holding a process identifier. */
#undef pid_t
/* Define to `unsigned int' if <sys/types.h> does not define. */
diff --git a/lib/erl_interface/configure b/lib/erl_interface/configure
index bc5aa490d7..abf5d85587 100755
--- a/lib/erl_interface/configure
+++ b/lib/erl_interface/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +221,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +253,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +292,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +310,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +332,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +380,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +398,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +430,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +459,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +503,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +517,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +534,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,49 +606,46 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="include/ei.h"
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIB_CFLAGS
WFLAGS
@@ -635,10 +663,10 @@ INSTALL_SCRIPT
INSTALL_PROGRAM
AR
ARCH
-EGREP
-GREP
LD
RANLIB
+EGREP
+GREP
CPP
OBJEXT
EXEEXT
@@ -648,6 +676,10 @@ LDFLAGS
CFLAGS
CC
TARGET
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -780,8 +812,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -822,9 +852,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -848,9 +878,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1061,9 +1091,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1077,9 +1107,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1123,9 +1153,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1141,7 +1171,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1205,7 +1235,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1323,6 +1353,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1374,9 +1405,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1404,7 +1435,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1412,7 +1444,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1422,9 +1454,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1441,14 +1473,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1456,14 +1488,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1485,7 +1518,7 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1493,14 +1526,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } > conftest.i && {
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
test ! -s conftest.err
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1512,8 +1546,8 @@ fi
# ac_fn_c_try_run LINENO
# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
ac_fn_c_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1523,25 +1557,26 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
@@ -1566,7 +1601,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0;
@@ -1576,14 +1611,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=0 ac_mid=0
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1593,9 +1629,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid; break
-else
+else $as_nop
as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
@@ -1603,14 +1640,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0;
@@ -1620,14 +1657,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=-1 ac_mid=-1
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0;
@@ -1637,9 +1675,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=$ac_mid; break
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
@@ -1647,14 +1686,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
ac_lo= ac_hi=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -1662,7 +1701,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1672,12 +1711,13 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
case $ac_lo in #((
?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -1687,12 +1727,12 @@ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.val", "w");
@@ -1720,9 +1760,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
ac_retval=1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -1742,26 +1783,28 @@ rm -f conftest.val
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
@@ -1772,14 +1815,14 @@ $as_echo "$ac_res" >&6; }
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1787,17 +1830,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1812,93 +1856,6 @@ fi
} # ac_fn_c_try_link
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
# -------------------------------------------
# Tests whether TYPE exists after having included INCLUDES, setting cache
@@ -1906,17 +1863,18 @@ fi
ac_fn_c_check_type ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
eval "$3=no"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof ($2))
return 0;
@@ -1924,12 +1882,13 @@ if (sizeof ($2))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof (($2)))
return 0;
@@ -1937,18 +1896,19 @@ if (sizeof (($2)))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
eval "$3=yes"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_type
@@ -1959,11 +1919,12 @@ $as_echo "$ac_res" >&6; }
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -1971,16 +1932,9 @@ else
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ which can conflict with char $2 (); below. */
+#include <limits.h>
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -1998,35 +1952,56 @@ choke me
#endif
int
-main ()
+main (void)
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -2059,8 +2034,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2095,7 +2074,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2130,11 +2109,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2145,8 +2126,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2170,7 +2151,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2178,14 +2159,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2193,15 +2174,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2209,8 +2190,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2224,63 +2205,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2290,19 +2256,435 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="install-sh config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2313,12 +2695,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2327,24 +2709,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2354,11 +2736,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2372,6 +2755,97 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#### Make srcdir absolute, if it isn't already. It's important to
#### avoid running the path through pwd unnecessary, since pwd can
#### give you automounter prefixes, which can go away.
@@ -2392,57 +2866,32 @@ case "${srcdir}" in
* ) srcdir="`(cd ${srcdir}; pwd)`" ;;
esac
-ac_aux_dir=
-for ac_dir in $srcdir/src/auxdir "$srcdir"/$srcdir/src/auxdir; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in $srcdir/src/auxdir \"$srcdir\"/$srcdir/src/auxdir" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2461,21 +2910,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2494,9 +2944,107 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=win32
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
+fi
+
fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
+fi
+
TARGET=$host
@@ -2508,29 +3056,40 @@ ac_config_headers="$ac_config_headers src/$host/config.h:config.h.in"
# Use --disable-threads to force building single threaded libs even
# if pthreads exists (for test purposes).
# Check whether --enable-threads was given.
-if test "${enable_threads+set}" = set; then :
+if test ${enable_threads+y}
+then :
enableval=$enable_threads; case "$enableval" in
no) threads_disabled=yes ;;
*) threads_disabled=no ;;
esac
-else
+else $as_nop
threads_disabled=maybe
fi
# Check whether --enable-mask-real-errno was given.
-if test "${enable_mask_real_errno+set}" = set; then :
+if test ${enable_mask_real_errno+y}
+then :
enableval=$enable_mask_real_errno; case "$enableval" in
no) mask_real_errno=no ;;
*) mask_real_errno=yes ;;
esac
-else
+else $as_nop
mask_real_errno=yes
fi
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2539,11 +3098,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2551,11 +3111,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2566,11 +3130,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2579,11 +3143,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2591,11 +3156,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2606,11 +3175,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2618,8 +3187,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2632,11 +3201,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2644,11 +3214,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2659,11 +3233,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2672,11 +3246,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2685,15 +3260,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2709,18 +3288,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2731,11 +3310,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2743,11 +3323,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2758,11 +3342,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2775,11 +3359,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2787,11 +3372,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2802,11 +3391,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2818,8 +3407,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2827,25 +3416,129 @@ esac
fi
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -2855,7 +3548,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -2863,7 +3556,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -2875,9 +3568,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -2898,11 +3591,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -2919,7 +3613,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -2935,44 +3629,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2986,15 +3682,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -3003,7 +3699,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -3015,8 +3711,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -3024,10 +3720,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -3035,39 +3731,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3081,11 +3778,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -3094,31 +3792,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3128,29 +3827,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3159,57 +3862,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3224,94 +3930,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3325,40 +4081,36 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
do
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
Syntax error
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
-else
+else $as_nop
# Broken: fails on valid input.
continue
fi
@@ -3370,10 +4122,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
# Broken: success on invalid input.
continue
-else
+else $as_nop
# Passes both tests.
ac_preproc_ok=:
break
@@ -3383,7 +4136,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
break
fi
@@ -3395,29 +4149,24 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
Syntax error
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
-else
+else $as_nop
# Broken: fails on valid input.
continue
fi
@@ -3429,10 +4178,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
# Broken: success on invalid input.
continue
-else
+else $as_nop
# Passes both tests.
ac_preproc_ok=:
break
@@ -3442,11 +4192,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -3457,14 +4208,157 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
@@ -3472,11 +4366,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3487,11 +4385,11 @@ fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3500,11 +4398,12 @@ if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
@@ -3512,11 +4411,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3527,11 +4430,11 @@ fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_RANLIB" = x; then
@@ -3539,8 +4442,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
RANLIB=$ac_ct_RANLIB
@@ -3553,11 +4456,12 @@ for ac_prog in ld.sh
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
@@ -3565,11 +4469,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_LD="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3580,11 +4488,11 @@ fi
fi
LD=$ac_cv_prog_LD
if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3594,11 +4502,12 @@ done
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
@@ -3606,11 +4515,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3621,11 +4534,11 @@ fi
fi
LD=$ac_cv_prog_LD
if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3634,11 +4547,12 @@ if test -z "$ac_cv_prog_LD"; then
ac_ct_LD=$LD
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_LD"; then
ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test.
else
@@ -3646,11 +4560,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3661,11 +4579,11 @@ fi
fi
ac_ct_LD=$ac_cv_prog_ac_ct_LD
if test -n "$ac_ct_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
-$as_echo "$ac_ct_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
+printf "%s\n" "$ac_ct_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_LD" = x; then
@@ -3673,8 +4591,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
LD=$ac_ct_LD
@@ -3686,281 +4604,52 @@ fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
+done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+printf %s "checking size of short... " >&6; }
+if test ${ac_cv_sizeof_short+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (short)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -3969,31 +4658,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+printf "%s\n" "$ac_cv_sizeof_short" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
+printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+printf %s "checking size of int... " >&6; }
+if test ${ac_cv_sizeof_int+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (int)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4002,31 +4691,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+printf "%s\n" "$ac_cv_sizeof_int" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
+printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4035,31 +4724,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4068,31 +4757,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+printf %s "checking size of long long... " >&6; }
+if test ${ac_cv_sizeof_long_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4101,20 +4790,18 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h
if test $mask_real_errno = yes; then
-$as_echo "#define EI_HIDE_REAL_ERRNO 1" >>confdefs.h
+printf "%s\n" "#define EI_HIDE_REAL_ERRNO 1" >>confdefs.h
fi
@@ -4123,8 +4810,8 @@ if test $ac_cv_sizeof_long = 8; then
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking target hardware architecture" >&5
-$as_echo_n "checking target hardware architecture... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target hardware architecture" >&5
+printf %s "checking target hardware architecture... " >&6; }
if test "x$host_alias" != "x" -a "x$host_cpu" != "x"; then
chk_arch_=$host_cpu
else
@@ -4166,80 +4853,81 @@ $as_echo_n "checking target hardware architecture... " >&6; }
e2k) ARCH=e2k;;
*) ARCH=noarch;;
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH" >&5
-$as_echo "$ARCH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ARCH" >&5
+printf "%s\n" "$ARCH" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compilation mode forces ARCH adjustment" >&5
-$as_echo_n "checking whether compilation mode forces ARCH adjustment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compilation mode forces ARCH adjustment" >&5
+printf %s "checking whether compilation mode forces ARCH adjustment... " >&6; }
case "$ARCH-$ac_cv_sizeof_void_p" in
x86-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=x86 to ARCH=amd64" >&5
-$as_echo "yes: adjusting ARCH=x86 to ARCH=amd64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=x86 to ARCH=amd64" >&5
+printf "%s\n" "yes: adjusting ARCH=x86 to ARCH=amd64" >&6; }
ARCH=amd64
;;
amd64-4)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=amd64 to ARCH=x86" >&5
-$as_echo "yes: adjusting ARCH=amd64 to ARCH=x86" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=amd64 to ARCH=x86" >&5
+printf "%s\n" "yes: adjusting ARCH=amd64 to ARCH=x86" >&6; }
ARCH=x86
;;
ultrasparc-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&5
-$as_echo "yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&5
+printf "%s\n" "yes: adjusting ARCH=ultrasparc to ARCH=sparc64" >&6; }
ARCH=sparc64
;;
sparc64-4)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&5
-$as_echo "yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&5
+printf "%s\n" "yes: adjusting ARCH=sparc64 to ARCH=ultrasparc" >&6; }
ARCH=ultrasparc
;;
ppc64-4)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc64 to ARCH=ppc" >&5
-$as_echo "yes: adjusting ARCH=ppc64 to ARCH=ppc" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc64 to ARCH=ppc" >&5
+printf "%s\n" "yes: adjusting ARCH=ppc64 to ARCH=ppc" >&6; }
ARCH=ppc
;;
ppc-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc to ARCH=ppc64" >&5
-$as_echo "yes: adjusting ARCH=ppc to ARCH=ppc64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=ppc to ARCH=ppc64" >&5
+printf "%s\n" "yes: adjusting ARCH=ppc to ARCH=ppc64" >&6; }
ARCH=ppc64
;;
arm-8)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=arm to ARCH=arm64" >&5
-$as_echo "yes: adjusting ARCH=arm to ARCH=arm64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: adjusting ARCH=arm to ARCH=arm64" >&5
+printf "%s\n" "yes: adjusting ARCH=arm to ARCH=arm64" >&6; }
ARCH=arm64
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no: ARCH is $ARCH" >&5
-$as_echo "no: ARCH is $ARCH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no: ARCH is $ARCH" >&5
+printf "%s\n" "no: ARCH is $ARCH" >&6; }
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unaligned word access" >&5
-$as_echo_n "checking for unaligned word access... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unaligned word access" >&5
+printf %s "checking for unaligned word access... " >&6; }
case "$ARCH" in
x86|amd64)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: x86 or amd64" >&5
-$as_echo "yes: x86 or amd64" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes: x86 or amd64" >&5
+printf "%s\n" "yes: x86 or amd64" >&6; }
-$as_echo "#define HAVE_UNALIGNED_WORD_ACCESS 1" >>confdefs.h
+printf "%s\n" "#define HAVE_UNALIGNED_WORD_ACCESS 1" >>confdefs.h
;;
*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
;;
esac
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
@@ -4247,11 +4935,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4262,11 +4954,11 @@ fi
fi
AR=$ac_cv_prog_AR
if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4275,11 +4967,12 @@ if test -z "$ac_cv_prog_AR"; then
ac_ct_AR=$AR
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_AR"; then
ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
@@ -4287,11 +4980,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4302,11 +4999,11 @@ fi
fi
ac_ct_AR=$ac_cv_prog_ac_ct_AR
if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_AR" = x; then
@@ -4314,8 +5011,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
AR=$ac_ct_AR
@@ -4338,7 +5035,8 @@ case $host in
;;
esac
-# Find a good install program. We prefer a C program (faster),
+
+ # Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
@@ -4352,20 +5050,25 @@ esac
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test ${ac_cv_path_install+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+ ./ | /[cC]/* | \
/etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
/usr/ucb/* ) ;;
@@ -4375,13 +5078,13 @@ case $as_dir/ in #((
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# program-specific install script used by HP pwplus--don't use.
:
else
@@ -4389,12 +5092,12 @@ case $as_dir/ in #((
echo one > conftest.one
echo two > conftest.two
mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
test -s conftest.one && test -s conftest.two &&
test -s conftest.dir/conftest.one &&
test -s conftest.dir/conftest.two
then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
break 3
fi
fi
@@ -4410,7 +5113,7 @@ IFS=$as_save_IFS
rm -rf conftest.one conftest.two conftest.dir
fi
- if test "${ac_cv_path_install+set}" = set; then
+ if test ${ac_cv_path_install+y}; then
INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. Don't cache a
@@ -4420,8 +5123,8 @@ fi
INSTALL=$ac_install_sh
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
@@ -4431,11 +5134,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a directory including parents" >&5
-$as_echo_n "checking how to create a directory including parents... " >&6; }
-if ${ac_cv_prog_mkdir_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a directory including parents" >&5
+printf %s "checking how to create a directory including parents... " >&6; }
+if test ${ac_cv_prog_mkdir_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
temp_name_base=config.$$
temp_name=$temp_name_base/x/y/z
@@ -4452,8 +5156,8 @@ fi
rm -fr $temp_name_base
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_mkdir_p" >&5
-$as_echo "$ac_cv_prog_mkdir_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_mkdir_p" >&5
+printf "%s\n" "$ac_cv_prog_mkdir_p" >&6; }
case "${ac_cv_prog_mkdir_p}" in
none) as_fn_error $? "don't know how create directories with parents" "$LINENO" 5 ;;
@@ -4470,11 +5174,12 @@ case $host_os in
esac
# Checks for libraries.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
-$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+printf %s "checking for gethostbyname in -lnsl... " >&6; }
+if test ${ac_cv_lib_nsl_gethostbyname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lnsl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4483,43 +5188,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char gethostbyname ();
int
-main ()
+main (void)
{
return gethostbyname ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_nsl_gethostbyname=yes
-else
+else $as_nop
ac_cv_lib_nsl_gethostbyname=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
-$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBNSL 1" >>confdefs.h
LIBS="-lnsl $LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5
-$as_echo_n "checking for getpeername in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_getpeername+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5
+printf %s "checking for getpeername in -lsocket... " >&6; }
+if test ${ac_cv_lib_socket_getpeername+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsocket $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4528,33 +5231,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char getpeername ();
int
-main ()
+main (void)
{
return getpeername ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_socket_getpeername=yes
-else
+else $as_nop
ac_cv_lib_socket_getpeername=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_getpeername" >&5
-$as_echo "$ac_cv_lib_socket_getpeername" >&6; }
-if test "x$ac_cv_lib_socket_getpeername" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSOCKET 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_getpeername" >&5
+printf "%s\n" "$ac_cv_lib_socket_getpeername" >&6; }
+if test "x$ac_cv_lib_socket_getpeername" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBSOCKET 1" >>confdefs.h
LIBS="-lsocket $LIBS"
@@ -4562,301 +5262,275 @@ fi
# Checks for header files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if test ${ac_cv_header_sys_wait_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
int
-main ()
+main (void)
{
-
+ int s;
+ wait (&s);
+ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_header_sys_wait_h=yes
+else $as_nop
+ ac_cv_header_sys_wait_h=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f conftest*
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
+printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
-fi
+printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
+fi
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
+ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default"
+if test "x$ac_cv_header_arpa_inet_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h
-else
- ac_cv_header_stdc=no
fi
-rm -f conftest*
+ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
+if test "x$ac_cv_header_limits_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
+if test "x$ac_cv_header_malloc_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h
+
fi
+ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default"
+if test "x$ac_cv_header_netdb_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default"
+if test "x$ac_cv_header_netinet_in_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+ac_fn_c_check_header_compile "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
+if test "x$ac_cv_header_stddef_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STDDEF_H 1" >>confdefs.h
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
-$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
-if ${ac_cv_header_sys_wait_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h
-int
-main ()
-{
- int s;
- wait (&s);
- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_sys_wait_h=yes
-else
- ac_cv_header_sys_wait_h=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
-$as_echo "$ac_cv_header_sys_wait_h" >&6; }
-if test $ac_cv_header_sys_wait_h = yes; then
+ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h
-$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
-for ac_header in arpa/inet.h fcntl.h limits.h malloc.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/param.h sys/socket.h sys/select.h sys/time.h unistd.h sys/types.h sys/uio.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_types_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_uio_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_UIO_H 1" >>confdefs.h
-done
+fi
# Checks for typedefs, structures, and compiler characteristics.
# fixme AC_C_CONST & AC_C_VOLATILE needed for Windows?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
-$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
-if ${ac_cv_type_uid_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+printf %s "checking for uid_t in sys/types.h... " >&6; }
+if test ${ac_cv_type_uid_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "uid_t" >/dev/null 2>&1; then :
+ $EGREP "uid_t" >/dev/null 2>&1
+then :
ac_cv_type_uid_t=yes
-else
+else $as_nop
ac_cv_type_uid_t=no
fi
-rm -f conftest*
+rm -rf conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
-$as_echo "$ac_cv_type_uid_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+printf "%s\n" "$ac_cv_type_uid_t" >&6; }
if test $ac_cv_type_uid_t = no; then
-$as_echo "#define uid_t int" >>confdefs.h
+printf "%s\n" "#define uid_t int" >>confdefs.h
-$as_echo "#define gid_t int" >>confdefs.h
+printf "%s\n" "#define gid_t int" >>confdefs.h
fi
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = xyes; then :
-
-else
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
+ ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default
+"
+if test "x$ac_cv_type_pid_t" = xyes
+then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
+
+ #if defined _WIN64 && !defined __CYGWIN__
+ LLP64
+ #endif
int
-main ()
+main (void)
{
-if ((struct tm *) 0)
-return 0;
+
;
return 0;
}
+
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_time=yes
-else
- ac_cv_header_time=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_pid_type='int'
+else $as_nop
+ ac_pid_type='__int64'
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
+
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t usability" >&5
-$as_echo_n "checking for socklen_t usability... " >&6; }
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t usability" >&5
+printf %s "checking for socklen_t usability... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/socket.h>
int
-main ()
+main (void)
{
socklen_t mylen;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
-$as_echo "#define HAVE_SOCKLEN_T /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_SOCKLEN_T /**/" >>confdefs.h
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Checks for library functions.
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
-$as_echo_n "checking for working alloca.h... " >&6; }
-if ${ac_cv_working_alloca_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+printf %s "checking for working alloca.h... " >&6; }
+if test ${ac_cv_working_alloca_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <alloca.h>
int
-main ()
+main (void)
{
char *p = (char *) alloca (2 * sizeof (int));
if (p) return 0;
@@ -4864,52 +5538,52 @@ char *p = (char *) alloca (2 * sizeof (int));
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_working_alloca_h=yes
-else
+else $as_nop
ac_cv_working_alloca_h=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
-$as_echo "$ac_cv_working_alloca_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+printf "%s\n" "$ac_cv_working_alloca_h" >&6; }
if test $ac_cv_working_alloca_h = yes; then
-$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-$as_echo_n "checking for alloca... " >&6; }
-if ${ac_cv_func_alloca_works+:} false; then :
- $as_echo_n "(cached) " >&6
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+printf %s "checking for alloca... " >&6; }
+if test ${ac_cv_func_alloca_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test $ac_cv_working_alloca_h = yes; then
+ ac_cv_func_alloca_works=yes
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
+#include <stdlib.h>
+#include <stddef.h>
+#ifndef alloca
+# ifdef __GNUC__
+# define alloca __builtin_alloca
+# elif defined _MSC_VER
# include <malloc.h>
# define alloca _alloca
# else
-# ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca (size_t);
-# endif
-# endif
+# ifdef __cplusplus
+extern "C"
# endif
+void *alloca (size_t);
# endif
#endif
int
-main ()
+main (void)
{
char *p = (char *) alloca (1);
if (p) return 0;
@@ -4917,20 +5591,22 @@ char *p = (char *) alloca (1);
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_func_alloca_works=yes
-else
+else $as_nop
ac_cv_func_alloca_works=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
-$as_echo "$ac_cv_func_alloca_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+printf "%s\n" "$ac_cv_func_alloca_works" >&6; }
+fi
if test $ac_cv_func_alloca_works = yes; then
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h
else
# The SVR3 libPW and SVR4 libucb both contain incompatible functions
@@ -4940,58 +5616,19 @@ else
ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
-$as_echo "#define C_ALLOCA 1" >>confdefs.h
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
-$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if ${ac_cv_os_cray+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#if defined CRAY && ! defined CRAY2
-webecray
-#else
-wenotbecray
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "webecray" >/dev/null 2>&1; then :
- ac_cv_os_cray=yes
-else
- ac_cv_os_cray=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-if test $ac_cv_os_cray = yes; then
- for ac_func in _getb67 GETB67 getb67; do
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
-
- break
-fi
+printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h
- done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
-$as_echo_n "checking stack direction for C alloca... " >&6; }
-if ${ac_cv_c_stack_direction+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+printf %s "checking stack direction for C alloca... " >&6; }
+if test ${ac_cv_c_stack_direction+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
ac_cv_c_stack_direction=0
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
@@ -5012,9 +5649,10 @@ main (int argc, char **argv)
return find_stack_direction (0, argc + !argv + 20) < 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
ac_cv_c_stack_direction=1
-else
+else $as_nop
ac_cv_c_stack_direction=-1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -5022,22 +5660,21 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+printf "%s\n" "$ac_cv_c_stack_direction" >&6; }
+printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h
fi
# FIXME check that this isn't set in normal cases
if test $ac_cv_c_compiler_gnu = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
-$as_echo_n "checking whether $CC needs -traditional... " >&6; }
-if ${ac_cv_prog_gcc_traditional+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+printf %s "checking whether $CC needs -traditional... " >&6; }
+if test ${ac_cv_prog_gcc_traditional+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_pattern="Autoconf.*'x'"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5045,12 +5682,13 @@ else
Autoconf TIOCGETP
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+ $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
ac_cv_prog_gcc_traditional=yes
-else
+else $as_nop
ac_cv_prog_gcc_traditional=no
fi
-rm -f conftest*
+rm -rf conftest*
if test $ac_cv_prog_gcc_traditional = no; then
@@ -5060,34 +5698,37 @@ rm -f conftest*
Autoconf TCGETA
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+ $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
ac_cv_prog_gcc_traditional=yes
fi
-rm -f conftest*
+rm -rf conftest*
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
-$as_echo "$ac_cv_prog_gcc_traditional" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
+printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; }
if test $ac_cv_prog_gcc_traditional = yes; then
CC="$CC -traditional"
fi
fi
# Check if malloc(0) is ok
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
-$as_echo_n "checking for working memcmp... " >&6; }
-if ${ac_cv_func_memcmp_working+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
+printf %s "checking for working memcmp... " >&6; }
+if test ${ac_cv_func_memcmp_working+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
ac_cv_func_memcmp_working=no
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
int
-main ()
+main (void)
{
/* Some versions of memcmp are not 8-bit clean. */
@@ -5118,9 +5759,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
ac_cv_func_memcmp_working=yes
-else
+else $as_nop
ac_cv_func_memcmp_working=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -5128,8 +5770,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
-$as_echo "$ac_cv_func_memcmp_working" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
+printf "%s\n" "$ac_cv_func_memcmp_working" >&6; }
test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
*" memcmp.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS memcmp.$ac_objext"
@@ -5137,31 +5779,145 @@ test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
esac
-for ac_func in dup2 gethostbyaddr gethostbyname \
- gethostbyaddr_r \
- gethostbyname_r gethostname writev \
- gethrtime gettimeofday inet_ntoa memchr memmove memset select \
- socket strchr strerror strrchr strstr uname sysconf
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+
+ac_fn_c_check_func "$LINENO" "dup2" "ac_cv_func_dup2"
+if test "x$ac_cv_func_dup2" = xyes
+then :
+ printf "%s\n" "#define HAVE_DUP2 1" >>confdefs.h
fi
-done
+ac_fn_c_check_func "$LINENO" "gethostbyaddr" "ac_cv_func_gethostbyaddr"
+if test "x$ac_cv_func_gethostbyaddr" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHOSTBYADDR 1" >>confdefs.h
-ac_fn_c_check_func "$LINENO" "res_gethostbyname" "ac_cv_func_res_gethostbyname"
-if test "x$ac_cv_func_res_gethostbyname" = xyes; then :
+fi
+ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_gethostbyname in -lresolv" >&5
-$as_echo_n "checking for res_gethostbyname in -lresolv... " >&6; }
-if ${ac_cv_lib_resolv_res_gethostbyname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+ac_fn_c_check_func "$LINENO" "gethostbyaddr_r" "ac_cv_func_gethostbyaddr_r"
+if test "x$ac_cv_func_gethostbyaddr_r" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHOSTBYADDR_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gethostbyname_r" "ac_cv_func_gethostbyname_r"
+if test "x$ac_cv_func_gethostbyname_r" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
+if test "x$ac_cv_func_gethostname" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHOSTNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "writev" "ac_cv_func_writev"
+if test "x$ac_cv_func_writev" = xyes
+then :
+ printf "%s\n" "#define HAVE_WRITEV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "inet_ntoa" "ac_cv_func_inet_ntoa"
+if test "x$ac_cv_func_inet_ntoa" = xyes
+then :
+ printf "%s\n" "#define HAVE_INET_NTOA 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memchr" "ac_cv_func_memchr"
+if test "x$ac_cv_func_memchr" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
+if test "x$ac_cv_func_memmove" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset"
+if test "x$ac_cv_func_memset" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select"
+if test "x$ac_cv_func_select" = xyes
+then :
+ printf "%s\n" "#define HAVE_SELECT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket"
+if test "x$ac_cv_func_socket" = xyes
+then :
+ printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr"
+if test "x$ac_cv_func_strchr" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr"
+if test "x$ac_cv_func_strrchr" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRRCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr"
+if test "x$ac_cv_func_strstr" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRSTR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname"
+if test "x$ac_cv_func_uname" = xyes
+then :
+ printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf"
+if test "x$ac_cv_func_sysconf" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "res_gethostbyname" "ac_cv_func_res_gethostbyname"
+if test "x$ac_cv_func_res_gethostbyname" = xyes
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for res_gethostbyname in -lresolv" >&5
+printf %s "checking for res_gethostbyname in -lresolv... " >&6; }
+if test ${ac_cv_lib_resolv_res_gethostbyname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lresolv $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5170,33 +5926,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char res_gethostbyname ();
int
-main ()
+main (void)
{
return res_gethostbyname ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_resolv_res_gethostbyname=yes
-else
+else $as_nop
ac_cv_lib_resolv_res_gethostbyname=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_gethostbyname" >&5
-$as_echo "$ac_cv_lib_resolv_res_gethostbyname" >&6; }
-if test "x$ac_cv_lib_resolv_res_gethostbyname" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBRESOLV 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_gethostbyname" >&5
+printf "%s\n" "$ac_cv_lib_resolv_res_gethostbyname" >&6; }
+if test "x$ac_cv_lib_resolv_res_gethostbyname" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBRESOLV 1" >>confdefs.h
LIBS="-lresolv $LIBS"
@@ -5206,14 +5959,16 @@ fi
fi
ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
-if test "x$ac_cv_func_clock_gettime" = xyes; then :
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "x$ac_cv_func_clock_gettime" = xyes
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+printf %s "checking for clock_gettime in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lrt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5222,33 +5977,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char clock_gettime ();
int
-main ()
+main (void)
{
return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_rt_clock_gettime=yes
-else
+else $as_nop
ac_cv_lib_rt_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBRT 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; }
+if test "x$ac_cv_lib_rt_clock_gettime" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBRT 1" >>confdefs.h
LIBS="-lrt $LIBS"
@@ -5265,7 +6017,8 @@ fi
# Check whether --with-gmp was given.
-if test "${with_gmp+set}" = set; then :
+if test ${with_gmp+y}
+then :
withval=$with_gmp;
fi
@@ -5273,21 +6026,23 @@ fi
# We don't just want any GNU MP version, we want 4.1 or later
# that contain the import/export functions we need.
-if test "x$with_gmp" = "xyes" ;then
+if test "x$with_gmp" = "xyes"
+then :
+
for dir in /usr /usr/pkg /usr/local /usr/local/gmp /usr/lib/gmp /usr/gmp; do
- as_ac_Header=`$as_echo "ac_cv_header_$dir/include/gmp.h" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$dir/include/gmp.h" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$dir/include/gmp.h" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$dir/include/gmp.h" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
ac_cv_gmp=yes
-else
+else $as_nop
ac_cv_gmp=no
fi
-
if test $ac_cv_gmp = yes ; then
CFLAGS="$CFLAGS -I$dir/include -L$dir/lib"
-$as_echo "#define HAVE_GMP_H /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_GMP_H /**/" >>confdefs.h
break
fi
@@ -5295,11 +6050,12 @@ $as_echo "#define HAVE_GMP_H /**/" >>confdefs.h
if test $ac_cv_gmp = no ; then
as_fn_error $? "No GNU MP installation found" "$LINENO" 5
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmpz_export in -lgmp" >&5
-$as_echo_n "checking for __gmpz_export in -lgmp... " >&6; }
-if ${ac_cv_lib_gmp___gmpz_export+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __gmpz_export in -lgmp" >&5
+printf %s "checking for __gmpz_export in -lgmp... " >&6; }
+if test ${ac_cv_lib_gmp___gmpz_export+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgmp $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5308,33 +6064,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char __gmpz_export ();
int
-main ()
+main (void)
{
return __gmpz_export ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_gmp___gmpz_export=yes
-else
+else $as_nop
ac_cv_lib_gmp___gmpz_export=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_export" >&5
-$as_echo "$ac_cv_lib_gmp___gmpz_export" >&6; }
-if test "x$ac_cv_lib_gmp___gmpz_export" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBGMP 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_export" >&5
+printf "%s\n" "$ac_cv_lib_gmp___gmpz_export" >&6; }
+if test "x$ac_cv_lib_gmp___gmpz_export" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBGMP 1" >>confdefs.h
LIBS="-lgmp $LIBS"
@@ -5343,22 +6096,23 @@ fi
# FIXME return ERROR if no lib
elif test "x$with_gmp" != "xno" -a -n "$with_gmp" ;then
# Option given with PATH to package
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU MP" >&5
-$as_echo_n "checking for GNU MP... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU MP" >&5
+printf %s "checking for GNU MP... " >&6; }
if test ! -d "$with_gmp" ; then
as_fn_error $? "Invalid path to option --with-gmp=PATH" "$LINENO" 5
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CFLAGS="$CFLAGS -I$with_gmp/include -L$with_gmp/lib"
-$as_echo "#define HAVE_GMP_H /**/" >>confdefs.h
+printf "%s\n" "#define HAVE_GMP_H /**/" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmpz_export in -lgmp" >&5
-$as_echo_n "checking for __gmpz_export in -lgmp... " >&6; }
-if ${ac_cv_lib_gmp___gmpz_export+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __gmpz_export in -lgmp" >&5
+printf %s "checking for __gmpz_export in -lgmp... " >&6; }
+if test ${ac_cv_lib_gmp___gmpz_export+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgmp $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5367,39 +6121,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char __gmpz_export ();
int
-main ()
+main (void)
{
return __gmpz_export ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_gmp___gmpz_export=yes
-else
+else $as_nop
ac_cv_lib_gmp___gmpz_export=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_export" >&5
-$as_echo "$ac_cv_lib_gmp___gmpz_export" >&6; }
-if test "x$ac_cv_lib_gmp___gmpz_export" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBGMP 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_export" >&5
+printf "%s\n" "$ac_cv_lib_gmp___gmpz_export" >&6; }
+if test "x$ac_cv_lib_gmp___gmpz_export" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBGMP 1" >>confdefs.h
LIBS="-lgmp $LIBS"
fi
# FIXME return ERROR if no lib
+
fi
@@ -5413,111 +6165,111 @@ MIXED_VSL=no
MIXED_VC=no
MIXED_MINGW=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
-$as_echo_n "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
+printf %s "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
-$as_echo "MSYS and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
+printf "%s\n" "MSYS and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
-$as_echo "Cygwin and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
+printf "%s\n" "Cygwin and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /bin/wslpath; then
CFLAGS="$CFLAGS -O2"
MIXED_WSL=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
-$as_echo "WSL and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
+printf "%s\n" "WSL and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not within any known env" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$MIXED_MSYS" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
-$as_echo_n "checking for mixed cygwin and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
+printf %s "checking for mixed cygwin and native MinGW environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with cygwin" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
-$as_echo_n "checking for mixed MSYS and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
+printf %s "checking for mixed MSYS and native MinGW environment... " >&6; }
if test "x$GCC" = x"yes"; then
if test -x /usr/bin/msys-=.0.dll; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with msys" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
-$as_echo_n "checking if we mix cygwin with any native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
+printf %s "checking if we mix cygwin with any native compiler... " >&6; }
if test "X$MIXED_CYGWIN" = "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
-$as_echo_n "checking if we mix msys with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
+printf %s "checking if we mix msys with another native compiler... " >&6; }
if test "X$MIXED_MSYS" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
-$as_echo_n "checking if we mix WSL with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
+printf %s "checking if we mix WSL with another native compiler... " >&6; }
if test "X$MIXED_WSL" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
@@ -5530,35 +6282,41 @@ THR_DEFS=
-case "$threads_disabled" in
- no|maybe)
+case "$threads_disabled" in #(
+ no|maybe) :
+
NEED_NPTL_PTHREAD_H=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
-$as_echo_n "checking for native win32 threads... " >&6; }
-if test "X$host_os" = "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
+printf %s "checking for native win32 threads... " >&6; }
+if test "X$host_os" = "Xwin32"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
THR_DEFS="-DWIN32_THREADS"
THR_LIBS=
THR_LIB_NAME=win32_threads
THR_LIB_TYPE=win32_threads
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
THR_DEFS=
THR_LIBS=
THR_LIB_NAME=
THR_LIB_TYPE=posix_unknown
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+printf %s "checking for pthread_create in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lpthread $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5567,40 +6325,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_pthread_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_pthread_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes
+then :
THR_LIBS="-lpthread"
fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
+printf %s "checking for pthread_create in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lc_r $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5609,96 +6369,112 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_c_r_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_c_r_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_create" = xyes
+then :
THR_LIBS="-lc_r"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
-if test "x$ac_cv_func_pthread_create" = xyes; then :
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
+if test "x$ac_cv_func_pthread_create" = xyes
+then :
THR_LIBS="none_needed"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
-$as_echo_n "checking if the '-pthread' switch can be used... " >&6; }
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
+printf %s "checking if the '-pthread' switch can be used... " >&6; }
saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -pthread"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_create((void*)0,(void*)0,(void*)0,(void*)0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
THR_DEFS="-pthread"
THR_LIBS="-pthread"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS=$saved_cflags
if test "x$THR_LIBS" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- fi
- if test "x$THR_LIBS" != "x"; then
+fi
+
+ if test "x$THR_LIBS" != "x"
+then :
+
THR_DEFS="$THR_DEFS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS"
THR_LIB_NAME=pthread
if test "x$THR_LIBS" = "xnone_needed"; then
THR_LIBS=
fi
- case $host_os in
- solaris*)
- THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;;
- linux*)
+ case $host_os in #(
+ solaris*) :
+
+ THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS"
+ ;; #(
+ linux*) :
+
THR_DEFS="$THR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS"
-if test "$cross_compiling" != "yes"; then
+if test "$cross_compiling" != "yes"
+then :
+
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -5706,11 +6482,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5722,23 +6502,26 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-else
+
+else $as_nop
+
host_getconf="$host_alias-getconf"
# Extract the first word of "$host_getconf", so it can be a program name with args.
set dummy $host_getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -5746,11 +6529,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="$host_getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5762,25 +6549,28 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""
+then :
+
GETCONF=
prfx="$erl_xcomp_sysroot"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
set dummy ${ac_tool_prefix}getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path.
@@ -5791,11 +6581,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5807,11 +6601,11 @@ esac
fi
GETCONF=$ac_cv_path_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5820,11 +6614,12 @@ if test -z "$ac_cv_path_GETCONF"; then
ac_pt_GETCONF=$GETCONF
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ac_pt_GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_GETCONF="$ac_pt_GETCONF" # Let the user override the test with a path.
@@ -5835,11 +6630,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5851,11 +6650,11 @@ esac
fi
ac_pt_GETCONF=$ac_cv_path_ac_pt_GETCONF
if test -n "$ac_pt_GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
-$as_echo "$ac_pt_GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
+printf "%s\n" "$ac_pt_GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_pt_GETCONF" = x; then
@@ -5863,8 +6662,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
GETCONF=$ac_pt_GETCONF
@@ -5873,11 +6672,13 @@ else
GETCONF="$ac_cv_path_GETCONF"
fi
- fi
+
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
-$as_echo_n "checking for Native POSIX Thread Library... " >&6; }
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
+printf %s "checking for Native POSIX Thread Library... " >&6; }
libpthr_vsn=`$GETCONF GNU_LIBPTHREAD_VERSION 2>/dev/null`
if test $? -eq 0; then
case "$libpthr_vsn" in
@@ -5893,24 +6694,28 @@ $as_echo_n "checking for Native POSIX Thread Library... " >&6; }
else
nptl=no
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
-$as_echo "$nptl" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
+printf "%s\n" "$nptl" >&6; }
if test $nptl = cross; then
nptl=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
- if test $nptl = yes; then
+ if test $nptl = yes
+then :
+
THR_LIB_TYPE=posix_nptl
need_nptl_incldir=no
- ac_fn_c_check_header_mongrel "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_nptl_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_nptl_pthread_h" = xyes
+then :
need_nptl_incldir=yes
NEED_NPTL_PTHREAD_H=yes
fi
+ if test $need_nptl_incldir = yes
+then :
- if test $need_nptl_incldir = yes; then
# Ahh...
nptl_path="$C_INCLUDE_PATH:$CPATH"
if test X$cross_compiling != Xyes; then
@@ -5931,13 +6736,13 @@ fi
IFS=$save_ifs
nptl_incldir=
for dir in $nptl_ws_path; do
- as_ac_Header=`$as_echo "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
nptl_incldir=$dir/nptl
fi
-
if test "x$nptl_incldir" != "x"; then
THR_DEFS="$THR_DEFS -isystem $nptl_incldir"
break
@@ -5946,38 +6751,43 @@ fi
if test "x$nptl_incldir" = "x"; then
as_fn_error $? "Failed to locate nptl system include directory" "$LINENO" 5
fi
- fi
- fi
- ;;
- *) ;;
- esac
+
+fi
+
+fi
+ ;; #(
+ *) :
+ ;;
+esac
saved_cppflags=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $THR_DEFS"
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes
+then :
\
-$as_echo "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
fi
-
CPPFLAGS=$saved_cppflags
- fi
+
+fi
+
fi
@@ -5986,17 +6796,19 @@ fi
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+printf %s "checking size of short... " >&6; }
+if test ${ac_cv_sizeof_short+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (short)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -6005,31 +6817,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+printf "%s\n" "$ac_cv_sizeof_short" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
+printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+printf %s "checking size of int... " >&6; }
+if test ${ac_cv_sizeof_int+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (int)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -6038,31 +6850,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+printf "%s\n" "$ac_cv_sizeof_int" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
+printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -6071,31 +6883,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+printf %s "checking size of long long... " >&6; }
+if test ${ac_cv_sizeof_long_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_long_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (long long)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -6104,31 +6916,31 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long_long" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of __int128_t" >&5
-$as_echo_n "checking size of __int128_t... " >&6; }
-if ${ac_cv_sizeof___int128_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int128_t))" "ac_cv_sizeof___int128_t" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of __int128_t" >&5
+printf %s "checking size of __int128_t... " >&6; }
+if test ${ac_cv_sizeof___int128_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int128_t))" "ac_cv_sizeof___int128_t" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type___int128_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (__int128_t)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -6137,14 +6949,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int128_t" >&5
-$as_echo "$ac_cv_sizeof___int128_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int128_t" >&5
+printf "%s\n" "$ac_cv_sizeof___int128_t" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF___INT128_T $ac_cv_sizeof___int128_t
-_ACEOF
+printf "%s\n" "#define SIZEOF___INT128_T $ac_cv_sizeof___int128_t" >>confdefs.h
@@ -6173,28 +6983,30 @@ _ACEOF
else
gcc_atomic_type128="#error "
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working __sync_synchronize()" >&5
-$as_echo_n "checking for a working __sync_synchronize()... " >&6; }
-if ${ethr_cv___sync_synchronize+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working __sync_synchronize()" >&5
+printf %s "checking for a working __sync_synchronize()... " >&6; }
+if test ${ethr_cv___sync_synchronize+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv___sync_synchronize=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__sync_synchronize();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv___sync_synchronize=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
if test $ethr_cv___sync_synchronize = yes; then
#
@@ -6239,8 +7051,8 @@ EOF
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv___sync_synchronize" >&5
-$as_echo "$ethr_cv___sync_synchronize" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv___sync_synchronize" >&5
+printf "%s\n" "$ethr_cv___sync_synchronize" >&6; }
if test "$ethr_cv___sync_synchronize" = "yes"; then
have_sync_synchronize_value="~0"
@@ -6248,9 +7060,7 @@ $as_echo "$ethr_cv___sync_synchronize" >&6; }
have_sync_synchronize_value="0"
fi
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_synchronize $have_sync_synchronize_value
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_synchronize $have_sync_synchronize_value" >>confdefs.h
@@ -6289,87 +7099,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_add_and_fetch()" >&5
-$as_echo_n "checking for 32-bit __sync_add_and_fetch()... " >&6; }
-if ${ethr_cv_32bit___sync_add_and_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_add_and_fetch()" >&5
+printf %s "checking for 32-bit __sync_add_and_fetch()... " >&6; }
+if test ${ethr_cv_32bit___sync_add_and_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_add_and_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_add_and_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_add_and_fetch" >&5
-$as_echo "$ethr_cv_32bit___sync_add_and_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_add_and_fetch()" >&5
-$as_echo_n "checking for 64-bit __sync_add_and_fetch()... " >&6; }
-if ${ethr_cv_64bit___sync_add_and_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_add_and_fetch" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_add_and_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_add_and_fetch()" >&5
+printf %s "checking for 64-bit __sync_add_and_fetch()... " >&6; }
+if test ${ethr_cv_64bit___sync_add_and_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_add_and_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_add_and_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_add_and_fetch" >&5
-$as_echo "$ethr_cv_64bit___sync_add_and_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_add_and_fetch()" >&5
-$as_echo_n "checking for 128-bit __sync_add_and_fetch()... " >&6; }
-if ${ethr_cv_128bit___sync_add_and_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_add_and_fetch" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_add_and_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_add_and_fetch()" >&5
+printf %s "checking for 128-bit __sync_add_and_fetch()... " >&6; }
+if test ${ethr_cv_128bit___sync_add_and_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_add_and_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_add_and_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_add_and_fetch" >&5
-$as_echo "$ethr_cv_128bit___sync_add_and_fetch" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_add_and_fetch" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_add_and_fetch" >&6; }
case $ethr_cv_128bit___sync_add_and_fetch-$ethr_cv_64bit___sync_add_and_fetch-$ethr_cv_32bit___sync_add_and_fetch in
no-no-no)
@@ -6390,9 +7206,7 @@ $as_echo "$ethr_cv_128bit___sync_add_and_fetch" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_add_and_fetch $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_add_and_fetch $have_atomic_ops" >>confdefs.h
@@ -6431,87 +7245,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_and()" >&5
-$as_echo_n "checking for 32-bit __sync_fetch_and_and()... " >&6; }
-if ${ethr_cv_32bit___sync_fetch_and_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_and()" >&5
+printf %s "checking for 32-bit __sync_fetch_and_and()... " >&6; }
+if test ${ethr_cv_32bit___sync_fetch_and_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_fetch_and_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_fetch_and_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_and" >&5
-$as_echo "$ethr_cv_32bit___sync_fetch_and_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_and()" >&5
-$as_echo_n "checking for 64-bit __sync_fetch_and_and()... " >&6; }
-if ${ethr_cv_64bit___sync_fetch_and_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_and" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_fetch_and_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_and()" >&5
+printf %s "checking for 64-bit __sync_fetch_and_and()... " >&6; }
+if test ${ethr_cv_64bit___sync_fetch_and_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_fetch_and_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_fetch_and_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_and" >&5
-$as_echo "$ethr_cv_64bit___sync_fetch_and_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_and()" >&5
-$as_echo_n "checking for 128-bit __sync_fetch_and_and()... " >&6; }
-if ${ethr_cv_128bit___sync_fetch_and_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_and" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_fetch_and_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_and()" >&5
+printf %s "checking for 128-bit __sync_fetch_and_and()... " >&6; }
+if test ${ethr_cv_128bit___sync_fetch_and_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_fetch_and_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_fetch_and_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_and" >&5
-$as_echo "$ethr_cv_128bit___sync_fetch_and_and" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_and" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_fetch_and_and" >&6; }
case $ethr_cv_128bit___sync_fetch_and_and-$ethr_cv_64bit___sync_fetch_and_and-$ethr_cv_32bit___sync_fetch_and_and in
no-no-no)
@@ -6532,9 +7352,7 @@ $as_echo "$ethr_cv_128bit___sync_fetch_and_and" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_fetch_and_and $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_fetch_and_and $have_atomic_ops" >>confdefs.h
@@ -6573,87 +7391,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_or()" >&5
-$as_echo_n "checking for 32-bit __sync_fetch_and_or()... " >&6; }
-if ${ethr_cv_32bit___sync_fetch_and_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_fetch_and_or()" >&5
+printf %s "checking for 32-bit __sync_fetch_and_or()... " >&6; }
+if test ${ethr_cv_32bit___sync_fetch_and_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_fetch_and_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_fetch_and_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_or" >&5
-$as_echo "$ethr_cv_32bit___sync_fetch_and_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_or()" >&5
-$as_echo_n "checking for 64-bit __sync_fetch_and_or()... " >&6; }
-if ${ethr_cv_64bit___sync_fetch_and_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_fetch_and_or" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_fetch_and_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_fetch_and_or()" >&5
+printf %s "checking for 64-bit __sync_fetch_and_or()... " >&6; }
+if test ${ethr_cv_64bit___sync_fetch_and_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_fetch_and_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_fetch_and_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_or" >&5
-$as_echo "$ethr_cv_64bit___sync_fetch_and_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_or()" >&5
-$as_echo_n "checking for 128-bit __sync_fetch_and_or()... " >&6; }
-if ${ethr_cv_128bit___sync_fetch_and_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_fetch_and_or" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_fetch_and_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_fetch_and_or()" >&5
+printf %s "checking for 128-bit __sync_fetch_and_or()... " >&6; }
+if test ${ethr_cv_128bit___sync_fetch_and_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_fetch_and_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_fetch_and_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_or" >&5
-$as_echo "$ethr_cv_128bit___sync_fetch_and_or" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_fetch_and_or" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_fetch_and_or" >&6; }
case $ethr_cv_128bit___sync_fetch_and_or-$ethr_cv_64bit___sync_fetch_and_or-$ethr_cv_32bit___sync_fetch_and_or in
no-no-no)
@@ -6674,9 +7498,7 @@ $as_echo "$ethr_cv_128bit___sync_fetch_and_or" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_fetch_and_or $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_fetch_and_or $have_atomic_ops" >>confdefs.h
@@ -6715,87 +7537,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_val_compare_and_swap()" >&5
-$as_echo_n "checking for 32-bit __sync_val_compare_and_swap()... " >&6; }
-if ${ethr_cv_32bit___sync_val_compare_and_swap+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __sync_val_compare_and_swap()" >&5
+printf %s "checking for 32-bit __sync_val_compare_and_swap()... " >&6; }
+if test ${ethr_cv_32bit___sync_val_compare_and_swap+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___sync_val_compare_and_swap=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___sync_val_compare_and_swap=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_val_compare_and_swap" >&5
-$as_echo "$ethr_cv_32bit___sync_val_compare_and_swap" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_val_compare_and_swap()" >&5
-$as_echo_n "checking for 64-bit __sync_val_compare_and_swap()... " >&6; }
-if ${ethr_cv_64bit___sync_val_compare_and_swap+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___sync_val_compare_and_swap" >&5
+printf "%s\n" "$ethr_cv_32bit___sync_val_compare_and_swap" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __sync_val_compare_and_swap()" >&5
+printf %s "checking for 64-bit __sync_val_compare_and_swap()... " >&6; }
+if test ${ethr_cv_64bit___sync_val_compare_and_swap+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___sync_val_compare_and_swap=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___sync_val_compare_and_swap=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_val_compare_and_swap" >&5
-$as_echo "$ethr_cv_64bit___sync_val_compare_and_swap" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_val_compare_and_swap()" >&5
-$as_echo_n "checking for 128-bit __sync_val_compare_and_swap()... " >&6; }
-if ${ethr_cv_128bit___sync_val_compare_and_swap+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___sync_val_compare_and_swap" >&5
+printf "%s\n" "$ethr_cv_64bit___sync_val_compare_and_swap" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __sync_val_compare_and_swap()" >&5
+printf %s "checking for 128-bit __sync_val_compare_and_swap()... " >&6; }
+if test ${ethr_cv_128bit___sync_val_compare_and_swap+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___sync_val_compare_and_swap=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___sync_val_compare_and_swap=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_val_compare_and_swap" >&5
-$as_echo "$ethr_cv_128bit___sync_val_compare_and_swap" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___sync_val_compare_and_swap" >&5
+printf "%s\n" "$ethr_cv_128bit___sync_val_compare_and_swap" >&6; }
case $ethr_cv_128bit___sync_val_compare_and_swap-$ethr_cv_64bit___sync_val_compare_and_swap-$ethr_cv_32bit___sync_val_compare_and_swap in
no-no-no)
@@ -6816,9 +7644,7 @@ $as_echo "$ethr_cv_128bit___sync_val_compare_and_swap" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___sync_val_compare_and_swap $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___sync_val_compare_and_swap $have_atomic_ops" >>confdefs.h
@@ -6858,87 +7684,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_store_n()" >&5
-$as_echo_n "checking for 32-bit __atomic_store_n()... " >&6; }
-if ${ethr_cv_32bit___atomic_store_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_store_n()" >&5
+printf %s "checking for 32-bit __atomic_store_n()... " >&6; }
+if test ${ethr_cv_32bit___atomic_store_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_store_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_store_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_store_n" >&5
-$as_echo "$ethr_cv_32bit___atomic_store_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_store_n()" >&5
-$as_echo_n "checking for 64-bit __atomic_store_n()... " >&6; }
-if ${ethr_cv_64bit___atomic_store_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_store_n" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_store_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_store_n()" >&5
+printf %s "checking for 64-bit __atomic_store_n()... " >&6; }
+if test ${ethr_cv_64bit___atomic_store_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_store_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_store_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_store_n" >&5
-$as_echo "$ethr_cv_64bit___atomic_store_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_store_n()" >&5
-$as_echo_n "checking for 128-bit __atomic_store_n()... " >&6; }
-if ${ethr_cv_128bit___atomic_store_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_store_n" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_store_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_store_n()" >&5
+printf %s "checking for 128-bit __atomic_store_n()... " >&6; }
+if test ${ethr_cv_128bit___atomic_store_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_store_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_store_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_store_n" >&5
-$as_echo "$ethr_cv_128bit___atomic_store_n" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_store_n" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_store_n" >&6; }
case $ethr_cv_128bit___atomic_store_n-$ethr_cv_64bit___atomic_store_n-$ethr_cv_32bit___atomic_store_n in
no-no-no)
@@ -6959,9 +7791,7 @@ $as_echo "$ethr_cv_128bit___atomic_store_n" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_store_n $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_store_n $have_atomic_ops" >>confdefs.h
@@ -7000,87 +7830,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_load_n()" >&5
-$as_echo_n "checking for 32-bit __atomic_load_n()... " >&6; }
-if ${ethr_cv_32bit___atomic_load_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_load_n()" >&5
+printf %s "checking for 32-bit __atomic_load_n()... " >&6; }
+if test ${ethr_cv_32bit___atomic_load_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_load_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_load_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_load_n" >&5
-$as_echo "$ethr_cv_32bit___atomic_load_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_load_n()" >&5
-$as_echo_n "checking for 64-bit __atomic_load_n()... " >&6; }
-if ${ethr_cv_64bit___atomic_load_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_load_n" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_load_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_load_n()" >&5
+printf %s "checking for 64-bit __atomic_load_n()... " >&6; }
+if test ${ethr_cv_64bit___atomic_load_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_load_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_load_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_load_n" >&5
-$as_echo "$ethr_cv_64bit___atomic_load_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_load_n()" >&5
-$as_echo_n "checking for 128-bit __atomic_load_n()... " >&6; }
-if ${ethr_cv_128bit___atomic_load_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_load_n" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_load_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_load_n()" >&5
+printf %s "checking for 128-bit __atomic_load_n()... " >&6; }
+if test ${ethr_cv_128bit___atomic_load_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_load_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_load_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_load_n" >&5
-$as_echo "$ethr_cv_128bit___atomic_load_n" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_load_n" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_load_n" >&6; }
case $ethr_cv_128bit___atomic_load_n-$ethr_cv_64bit___atomic_load_n-$ethr_cv_32bit___atomic_load_n in
no-no-no)
@@ -7101,9 +7937,7 @@ $as_echo "$ethr_cv_128bit___atomic_load_n" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_load_n $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_load_n $have_atomic_ops" >>confdefs.h
@@ -7142,87 +7976,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_add_fetch()" >&5
-$as_echo_n "checking for 32-bit __atomic_add_fetch()... " >&6; }
-if ${ethr_cv_32bit___atomic_add_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_add_fetch()" >&5
+printf %s "checking for 32-bit __atomic_add_fetch()... " >&6; }
+if test ${ethr_cv_32bit___atomic_add_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_add_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_add_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_add_fetch" >&5
-$as_echo "$ethr_cv_32bit___atomic_add_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_add_fetch()" >&5
-$as_echo_n "checking for 64-bit __atomic_add_fetch()... " >&6; }
-if ${ethr_cv_64bit___atomic_add_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_add_fetch" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_add_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_add_fetch()" >&5
+printf %s "checking for 64-bit __atomic_add_fetch()... " >&6; }
+if test ${ethr_cv_64bit___atomic_add_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_add_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_add_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_add_fetch" >&5
-$as_echo "$ethr_cv_64bit___atomic_add_fetch" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_add_fetch()" >&5
-$as_echo_n "checking for 128-bit __atomic_add_fetch()... " >&6; }
-if ${ethr_cv_128bit___atomic_add_fetch+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_add_fetch" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_add_fetch" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_add_fetch()" >&5
+printf %s "checking for 128-bit __atomic_add_fetch()... " >&6; }
+if test ${ethr_cv_128bit___atomic_add_fetch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_add_fetch=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_add_fetch=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_add_fetch" >&5
-$as_echo "$ethr_cv_128bit___atomic_add_fetch" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_add_fetch" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_add_fetch" >&6; }
case $ethr_cv_128bit___atomic_add_fetch-$ethr_cv_64bit___atomic_add_fetch-$ethr_cv_32bit___atomic_add_fetch in
no-no-no)
@@ -7243,9 +8083,7 @@ $as_echo "$ethr_cv_128bit___atomic_add_fetch" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_add_fetch $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_add_fetch $have_atomic_ops" >>confdefs.h
@@ -7284,87 +8122,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_and()" >&5
-$as_echo_n "checking for 32-bit __atomic_fetch_and()... " >&6; }
-if ${ethr_cv_32bit___atomic_fetch_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_and()" >&5
+printf %s "checking for 32-bit __atomic_fetch_and()... " >&6; }
+if test ${ethr_cv_32bit___atomic_fetch_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_fetch_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_fetch_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_and" >&5
-$as_echo "$ethr_cv_32bit___atomic_fetch_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_and()" >&5
-$as_echo_n "checking for 64-bit __atomic_fetch_and()... " >&6; }
-if ${ethr_cv_64bit___atomic_fetch_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_and" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_fetch_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_and()" >&5
+printf %s "checking for 64-bit __atomic_fetch_and()... " >&6; }
+if test ${ethr_cv_64bit___atomic_fetch_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_fetch_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_fetch_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_and" >&5
-$as_echo "$ethr_cv_64bit___atomic_fetch_and" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_and()" >&5
-$as_echo_n "checking for 128-bit __atomic_fetch_and()... " >&6; }
-if ${ethr_cv_128bit___atomic_fetch_and+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_and" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_fetch_and" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_and()" >&5
+printf %s "checking for 128-bit __atomic_fetch_and()... " >&6; }
+if test ${ethr_cv_128bit___atomic_fetch_and+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_fetch_and=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_fetch_and=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_and" >&5
-$as_echo "$ethr_cv_128bit___atomic_fetch_and" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_and" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_fetch_and" >&6; }
case $ethr_cv_128bit___atomic_fetch_and-$ethr_cv_64bit___atomic_fetch_and-$ethr_cv_32bit___atomic_fetch_and in
no-no-no)
@@ -7385,9 +8229,7 @@ $as_echo "$ethr_cv_128bit___atomic_fetch_and" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_fetch_and $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_fetch_and $have_atomic_ops" >>confdefs.h
@@ -7426,87 +8268,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_or()" >&5
-$as_echo_n "checking for 32-bit __atomic_fetch_or()... " >&6; }
-if ${ethr_cv_32bit___atomic_fetch_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_fetch_or()" >&5
+printf %s "checking for 32-bit __atomic_fetch_or()... " >&6; }
+if test ${ethr_cv_32bit___atomic_fetch_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_fetch_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_fetch_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_or" >&5
-$as_echo "$ethr_cv_32bit___atomic_fetch_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_or()" >&5
-$as_echo_n "checking for 64-bit __atomic_fetch_or()... " >&6; }
-if ${ethr_cv_64bit___atomic_fetch_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_fetch_or" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_fetch_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_fetch_or()" >&5
+printf %s "checking for 64-bit __atomic_fetch_or()... " >&6; }
+if test ${ethr_cv_64bit___atomic_fetch_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_fetch_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_fetch_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_or" >&5
-$as_echo "$ethr_cv_64bit___atomic_fetch_or" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_or()" >&5
-$as_echo_n "checking for 128-bit __atomic_fetch_or()... " >&6; }
-if ${ethr_cv_128bit___atomic_fetch_or+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_fetch_or" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_fetch_or" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_fetch_or()" >&5
+printf %s "checking for 128-bit __atomic_fetch_or()... " >&6; }
+if test ${ethr_cv_128bit___atomic_fetch_or+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_fetch_or=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_fetch_or=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_or" >&5
-$as_echo "$ethr_cv_128bit___atomic_fetch_or" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_fetch_or" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_fetch_or" >&6; }
case $ethr_cv_128bit___atomic_fetch_or-$ethr_cv_64bit___atomic_fetch_or-$ethr_cv_32bit___atomic_fetch_or in
no-no-no)
@@ -7527,9 +8375,7 @@ $as_echo "$ethr_cv_128bit___atomic_fetch_or" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_fetch_or $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_fetch_or $have_atomic_ops" >>confdefs.h
@@ -7568,87 +8414,93 @@ _ACEOF
eval atomic${atomic_bit_size}_call=\"$atomic_call\"
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_compare_exchange_n()" >&5
-$as_echo_n "checking for 32-bit __atomic_compare_exchange_n()... " >&6; }
-if ${ethr_cv_32bit___atomic_compare_exchange_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 32-bit __atomic_compare_exchange_n()" >&5
+printf %s "checking for 32-bit __atomic_compare_exchange_n()... " >&6; }
+if test ${ethr_cv_32bit___atomic_compare_exchange_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_32bit___atomic_compare_exchange_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic32_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_32bit___atomic_compare_exchange_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_compare_exchange_n" >&5
-$as_echo "$ethr_cv_32bit___atomic_compare_exchange_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_compare_exchange_n()" >&5
-$as_echo_n "checking for 64-bit __atomic_compare_exchange_n()... " >&6; }
-if ${ethr_cv_64bit___atomic_compare_exchange_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_32bit___atomic_compare_exchange_n" >&5
+printf "%s\n" "$ethr_cv_32bit___atomic_compare_exchange_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit __atomic_compare_exchange_n()" >&5
+printf %s "checking for 64-bit __atomic_compare_exchange_n()... " >&6; }
+if test ${ethr_cv_64bit___atomic_compare_exchange_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_64bit___atomic_compare_exchange_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic64_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_64bit___atomic_compare_exchange_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_compare_exchange_n" >&5
-$as_echo "$ethr_cv_64bit___atomic_compare_exchange_n" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_compare_exchange_n()" >&5
-$as_echo_n "checking for 128-bit __atomic_compare_exchange_n()... " >&6; }
-if ${ethr_cv_128bit___atomic_compare_exchange_n+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_64bit___atomic_compare_exchange_n" >&5
+printf "%s\n" "$ethr_cv_64bit___atomic_compare_exchange_n" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 128-bit __atomic_compare_exchange_n()" >&5
+printf %s "checking for 128-bit __atomic_compare_exchange_n()... " >&6; }
+if test ${ethr_cv_128bit___atomic_compare_exchange_n+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_128bit___atomic_compare_exchange_n=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
$atomic128_call
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_128bit___atomic_compare_exchange_n=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_compare_exchange_n" >&5
-$as_echo "$ethr_cv_128bit___atomic_compare_exchange_n" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_128bit___atomic_compare_exchange_n" >&5
+printf "%s\n" "$ethr_cv_128bit___atomic_compare_exchange_n" >&6; }
case $ethr_cv_128bit___atomic_compare_exchange_n-$ethr_cv_64bit___atomic_compare_exchange_n-$ethr_cv_32bit___atomic_compare_exchange_n in
no-no-no)
@@ -7669,9 +8521,7 @@ $as_echo "$ethr_cv_128bit___atomic_compare_exchange_n" >&6; }
have_atomic_ops=28;;
esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE___atomic_compare_exchange_n $have_atomic_ops
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE___atomic_compare_exchange_n $have_atomic_ops" >>confdefs.h
@@ -7679,20 +8529,22 @@ _ACEOF
ethr_arm_dbm_sy_instr_val=0
ethr_arm_dbm_st_instr_val=0
ethr_arm_dbm_ld_instr_val=0
- case "$GCC-$host_cpu" in
- yes-arm*|yes-aarch*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb sy' instruction" >&5
-$as_echo_n "checking for ARM 'dmb sy' instruction... " >&6; }
-if ${ethr_cv_arm_dbm_sy_instr+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ case "$GCC-$host_cpu" in #(
+ yes-arm*|yes-aarch*) :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb sy' instruction" >&5
+printf %s "checking for ARM 'dmb sy' instruction... " >&6; }
+if test ${ethr_cv_arm_dbm_sy_instr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_arm_dbm_sy_instr=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__asm__ __volatile__("dmb sy" : : : "memory");
@@ -7701,32 +8553,34 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_arm_dbm_sy_instr=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_sy_instr" >&5
-$as_echo "$ethr_cv_arm_dbm_sy_instr" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_sy_instr" >&5
+printf "%s\n" "$ethr_cv_arm_dbm_sy_instr" >&6; }
if test $ethr_cv_arm_dbm_sy_instr = yes; then
ethr_arm_dbm_sy_instr_val=1
test $ethr_cv_64bit___atomic_compare_exchange_n = yes &&
ethr_have_gcc_native_atomics=yes
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb st' instruction" >&5
-$as_echo_n "checking for ARM 'dmb st' instruction... " >&6; }
-if ${ethr_cv_arm_dbm_st_instr+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb st' instruction" >&5
+printf %s "checking for ARM 'dmb st' instruction... " >&6; }
+if test ${ethr_cv_arm_dbm_st_instr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_arm_dbm_st_instr=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__asm__ __volatile__("dmb st" : : : "memory");
@@ -7735,30 +8589,32 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_arm_dbm_st_instr=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_st_instr" >&5
-$as_echo "$ethr_cv_arm_dbm_st_instr" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_st_instr" >&5
+printf "%s\n" "$ethr_cv_arm_dbm_st_instr" >&6; }
if test $ethr_cv_arm_dbm_st_instr = yes; then
ethr_arm_dbm_st_instr_val=1
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb ld' instruction" >&5
-$as_echo_n "checking for ARM 'dmb ld' instruction... " >&6; }
-if ${ethr_cv_arm_dbm_ld_instr+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ARM 'dmb ld' instruction" >&5
+printf %s "checking for ARM 'dmb ld' instruction... " >&6; }
+if test ${ethr_cv_arm_dbm_ld_instr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ethr_cv_arm_dbm_ld_instr=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
__asm__ __volatile__("dmb ld" : : : "memory");
@@ -7767,35 +8623,32 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ethr_cv_arm_dbm_ld_instr=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_ld_instr" >&5
-$as_echo "$ethr_cv_arm_dbm_ld_instr" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ethr_cv_arm_dbm_ld_instr" >&5
+printf "%s\n" "$ethr_cv_arm_dbm_ld_instr" >&6; }
if test $ethr_cv_arm_dbm_ld_instr = yes; then
ethr_arm_dbm_ld_instr_val=1
- fi;;
- *)
- ;;
- esac
+ fi
+ ;; #(
+ *) :
+ ;;
+esac
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC_ASM_ARM_DMB_INSTRUCTION $ethr_arm_dbm_sy_instr_val
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE_GCC_ASM_ARM_DMB_INSTRUCTION $ethr_arm_dbm_sy_instr_val" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC_ASM_ARM_DMB_ST_INSTRUCTION $ethr_arm_dbm_st_instr_val
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE_GCC_ASM_ARM_DMB_ST_INSTRUCTION $ethr_arm_dbm_st_instr_val" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC_ASM_ARM_DMB_LD_INSTRUCTION $ethr_arm_dbm_ld_instr_val
-_ACEOF
+
+printf "%s\n" "#define ETHR_HAVE_GCC_ASM_ARM_DMB_LD_INSTRUCTION $ethr_arm_dbm_ld_instr_val" >>confdefs.h
test $ethr_cv_32bit___sync_val_compare_and_swap = yes &&
ethr_have_gcc_native_atomics=yes
@@ -7815,9 +8668,7 @@ _ACEOF
test $ethr_have_gcc_atomic_builtins = 1 && ethr_native_atomic_implementation=gcc_atomic_sync
fi
-cat >>confdefs.h <<_ACEOF
-#define ETHR_HAVE_GCC___ATOMIC_BUILTINS $ethr_have_gcc_atomic_builtins
-_ACEOF
+printf "%s\n" "#define ETHR_HAVE_GCC___ATOMIC_BUILTINS $ethr_have_gcc_atomic_builtins" >>confdefs.h
test $ethr_have_gcc_native_atomics = yes && ethr_have_native_atomics=yes
@@ -7839,15 +8690,18 @@ _ACEOF
;;
*)
EI_THREADS="true"
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unexpected thread library: $THR_LIB_NAME" >&5
-$as_echo "$as_me: WARNING: Unexpected thread library: $THR_LIB_NAME" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Unexpected thread library: $THR_LIB_NAME" >&5
+printf "%s\n" "$as_me: WARNING: Unexpected thread library: $THR_LIB_NAME" >&2;}
;;
esac
- ;;
- yes)
+ ;; #(
+ yes) :
+
# Threads disabled
EI_THREADS="false"
- ;;
+ ;; #(
+ *) :
+ ;;
esac
# ---------------------------------------------------------------------------
@@ -7855,39 +8709,47 @@ esac
# ---------------------------------------------------------------------------
-if test "x$GCC" = xyes; then
+if test "x$GCC" = xyes
+then :
+
# Treat certain GCC warnings as errors
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
WERRORFLAGS="-Werror=return-type $WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
WFLAGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
# check which GCC version
@@ -7910,40 +8772,49 @@ $as_echo "no" >&6; }
# Until version 10, gcc has had -fcommon as default, which allows and merges
# such dubious duplicates.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -fno-common to CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -fno-common to CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fno-common $CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CFLAGS="-fno-common $CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
-else
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+
+
+else $as_nop
+
WFLAGS=""
WERRORFLAGS=""
+
fi
# ---------------------------------------------------------------------------
@@ -7969,7 +8840,8 @@ fi
# Check whether --enable-sanitizers was given.
-if test "${enable_sanitizers+set}" = set; then :
+if test ${enable_sanitizers+y}
+then :
enableval=$enable_sanitizers;
case "$enableval" in
no) sanitizers= ;;
@@ -8016,8 +8888,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -8047,15 +8919,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -8069,8 +8941,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -8087,7 +8959,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -8103,8 +8975,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -8127,14 +8999,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -8144,46 +9018,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -8192,13 +9066,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -8207,8 +9074,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -8220,30 +9091,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -8256,13 +9107,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -8289,18 +9141,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -8312,12 +9166,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -8348,7 +9203,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -8370,6 +9225,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -8383,6 +9242,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -8424,7 +9289,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -8433,7 +9298,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -8496,7 +9361,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -8554,14 +9419,16 @@ $config_headers
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -8599,15 +9466,15 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
@@ -8615,7 +9482,7 @@ do
--header | --heade | --head | --hea )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
as_fn_append CONFIG_HEADERS " '$ac_optarg'"
ac_need_defaults=false;;
@@ -8624,7 +9491,7 @@ do
as_fn_error $? "ambiguous option: \`$1'
Try \`$0 --help' for more information.";;
--help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -8652,7 +9519,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -8666,7 +9533,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -8693,8 +9560,8 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+ test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -9030,7 +9897,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -9038,17 +9905,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -9065,7 +9932,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -9089,9 +9956,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -9148,8 +10015,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -9192,9 +10059,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -9210,20 +10077,20 @@ which seems to be undefined. Please make sure it is defined" >&2;}
#
if test x"$ac_file" != x-; then
{
- $as_echo "/* $configure_input */" \
+ printf "%s\n" "/* $configure_input */" >&1 \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
} >"$ac_tmp/config.h" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
else
rm -f "$ac_file"
mv "$ac_tmp/config.h" "$ac_file" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
fi
else
- $as_echo "/* $configure_input */" \
+ printf "%s\n" "/* $configure_input */" >&1 \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
|| as_fn_error $? "could not create -" "$LINENO" 5
fi
@@ -9264,7 +10131,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/lib/erl_interface/configure.in b/lib/erl_interface/configure.ac
index fa07048424..e929073d88 100644
--- a/lib/erl_interface/configure.in
+++ b/lib/erl_interface/configure.ac
@@ -27,7 +27,11 @@
dnl m4_define(EI_VERSION,`grep EI_VSN ../vsn.mk | sed 's/^.*=[ ]*//'`)
dnl m4_define(EI_VERSION,regexp(m4_include(VERSION),[version \([-.0-9A-Za-z]+\)],[\1]))
-AC_INIT()
+AC_INIT
+AC_CONFIG_SRCDIR([include/ei.h])
+AC_PREREQ([2.71])
+
+m4_include([otp.m4])
dnl How to set srcdir absolute is taken from the GNU Emacs distribution
#### Make srcdir absolute, if it isn't already. It's important to
@@ -50,18 +54,14 @@ case "${srcdir}" in
* ) srcdir="`(cd ${srcdir}; pwd)`" ;;
esac
-AC_CONFIG_AUX_DIR([$srcdir/src/auxdir])
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=win32
-fi
+ERL_CANONICAL_SYSTEM_TYPE
TARGET=$host
AC_SUBST(TARGET)
-AC_CONFIG_HEADER([src/$host/config.h:config.h.in])
+AC_CONFIG_HEADERS([src/$host/config.h:config.h.in])
dnl ----------------------------------------------------------------------
dnl Optional features
@@ -92,6 +92,7 @@ dnl ----------------------------------------------------------------------
AC_PROG_CC
AC_PROG_CPP
+AC_PROG_EGREP
dnl AC_PROG_LIBTOOL
AC_PROG_RANLIB
AC_CHECK_PROGS(LD, ld.sh)
@@ -164,7 +165,8 @@ AC_CHECK_LIB([nsl], [gethostbyname])
AC_CHECK_LIB([socket], [getpeername])
# Checks for header files.
-AC_HEADER_STDC
+AC_CHECK_INCLUDES_DEFAULT
+
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h malloc.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/param.h sys/socket.h sys/select.h sys/time.h unistd.h sys/types.h sys/uio.h])
@@ -175,14 +177,12 @@ dnl AC_C_VOLATILE
AC_TYPE_UID_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
-AC_HEADER_TIME
+AC_CHECK_HEADERS_ONCE([sys/time.h])
+
AC_MSG_CHECKING([for socklen_t usability])
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/socket.h>],
-[socklen_t mylen;],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOCKLEN_T, [], [Define if you have the `socklen_t' type])],
-[AC_MSG_RESULT(no)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <sys/socket.h>]], [[socklen_t mylen;]])],[AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOCKLEN_T, [], [Define if you have the `socklen_t' type])],[AC_MSG_RESULT(no)])
# Checks for library functions.
AC_FUNC_ALLOCA
@@ -194,7 +194,7 @@ dnl AC_FUNC_MALLOC
dnl AC_FUNC_REALLOC
AC_FUNC_MEMCMP
dnl AC_FUNC_SELECT_ARGTYPES
-dnl AC_TYPE_SIGNAL
+
dnl AC_FUNC_STRERROR_R
dnl AC_FUNC_VPRINTF
AC_CHECK_FUNCS([dup2 gethostbyaddr gethostbyname \
@@ -221,7 +221,8 @@ AC_ARG_WITH(gmp,
# We don't just want any GNU MP version, we want 4.1 or later
# that contain the import/export functions we need.
-if test "x$with_gmp" = "xyes" ;then
+AS_IF([test "x$with_gmp" = "xyes"],
+ [
for dir in /usr /usr/pkg /usr/local /usr/local/gmp /usr/lib/gmp /usr/gmp; do
AC_CHECK_HEADER($dir/include/gmp.h, ac_cv_gmp=yes, ac_cv_gmp=no)
if test $ac_cv_gmp = yes ; then
@@ -246,7 +247,7 @@ elif test "x$with_gmp" != "xno" -a -n "$with_gmp" ;then
AC_DEFINE(HAVE_GMP_H, [], [Define if you have "gmp.h"])
AC_CHECK_LIB(gmp, __gmpz_export)
# FIXME return ERROR if no lib
-fi
+ ])
LM_WINDOWS_ENVIRONMENT
@@ -260,8 +261,10 @@ AC_SUBST(THR_LIBS)
AC_SUBST(THR_DEFS)
AC_SUBST(EI_THREADS)
-case "$threads_disabled" in
- no|maybe)
+AS_CASE(["$threads_disabled"],
+
+ [no|maybe],
+ [
LM_CHECK_THR_LIB
ETHR_CHK_GCC_ATOMIC_OPS([])
@@ -270,7 +273,7 @@ case "$threads_disabled" in
EI_THREADS="false"
# Fail if --enable-threads given and no threads found
if test "x$threads_disabled" = "xno"; then
- AC_MSG_ERROR(No threads support found)
+ AC_MSG_ERROR([No threads support found])
fi
;;
win32_threads)
@@ -285,19 +288,21 @@ case "$threads_disabled" in
AC_MSG_WARN([Unexpected thread library: $THR_LIB_NAME])
;;
esac
- ;;
- yes)
+ ],
+
+ [yes],
+ [
# Threads disabled
EI_THREADS="false"
- ;;
-esac
+ ])
# ---------------------------------------------------------------------------
# Warning flags to the C compiler
# ---------------------------------------------------------------------------
AC_SUBST(WFLAGS)
-if test "x$GCC" = xyes; then
+AS_IF([test "x$GCC" = xyes],
+ [
# Treat certain GCC warnings as errors
LM_TRY_ENABLE_CFLAG([-Werror=return-type], [WERRORFLAGS])
WFLAGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
@@ -321,10 +326,11 @@ if test "x$GCC" = xyes; then
# Until version 10, gcc has had -fcommon as default, which allows and merges
# such dubious duplicates.
LM_TRY_ENABLE_CFLAG([-fno-common], [CFLAGS])
-else
+ ],
+ [
WFLAGS=""
WERRORFLAGS=""
-fi
+ ])
# ---------------------------------------------------------------------------
# FIXME We want to use libtool but until then....
@@ -371,7 +377,7 @@ LDFLAGS="$LDFLAGS $sanitizers"
# ---------------------------------------------------------------------------
-AC_OUTPUT(
- src/$host/Makefile:src/Makefile.in
+AC_CONFIG_FILES([src/$host/Makefile:src/Makefile.in
src/$host/eidefs.mk:src/eidefs.mk.in
- )
+ ])
+AC_OUTPUT
diff --git a/lib/erl_interface/src/auxdir/config.guess b/lib/erl_interface/src/auxdir/config.guess
deleted file mode 100755
index 1972fda8eb..0000000000
--- a/lib/erl_interface/src/auxdir/config.guess
+++ /dev/null
@@ -1,1700 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright 1992-2021 Free Software Foundation, Inc.
-
-timestamp='2021-01-25'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
-#
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
-#
-# Please send patches to <config-patches@gnu.org>.
-
-
-me=$(echo "$0" | sed -e 's,.*/,,')
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Options:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2021 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-tmp=
-# shellcheck disable=SC2172
-trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
-
-set_cc_for_build() {
- # prevent multiple calls if $tmp is already set
- test "$tmp" && return 0
- : "${TMPDIR=/tmp}"
- # shellcheck disable=SC2039
- { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
- dummy=$tmp/dummy
- case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
- ,,) echo "int x;" > "$dummy.c"
- for driver in cc gcc c89 c99 ; do
- if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$driver"
- break
- fi
- done
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
- esac
-}
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if test -f /.attbin/uname ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown
-UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown
-UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown
-UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
-
-case "$UNAME_SYSTEM" in
-Linux|GNU|GNU/*)
- LIBC=unknown
-
- set_cc_for_build
- cat <<-EOF > "$dummy.c"
- #include <features.h>
- #if defined(__UCLIBC__)
- LIBC=uclibc
- #elif defined(__dietlibc__)
- LIBC=dietlibc
- #elif defined(__GLIBC__)
- LIBC=gnu
- #else
- #include <stdarg.h>
- /* First heuristic to detect musl libc. */
- #ifdef __DEFINED_va_list
- LIBC=musl
- #endif
- #endif
- EOF
- eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
-
- # Second heuristic to detect musl libc.
- if [ "$LIBC" = unknown ] &&
- command -v ldd >/dev/null &&
- ldd --version 2>&1 | grep -q ^musl; then
- LIBC=musl
- fi
-
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- if [ "$LIBC" = unknown ]; then
- LIBC=gnu
- fi
- ;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
- /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
- /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
- echo unknown))
- case "$UNAME_MACHINE_ARCH" in
- aarch64eb) machine=aarch64_be-unknown ;;
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- earmv*)
- arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,')
- endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p')
- machine="${arch}${endian}"-unknown
- ;;
- *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently (or will in the future) and ABI.
- case "$UNAME_MACHINE_ARCH" in
- earm*)
- os=netbsdelf
- ;;
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # Determine ABI tags.
- case "$UNAME_MACHINE_ARCH" in
- earm*)
- expr='s/^earmv[0-9]/-eabi/;s/eb$//'
- abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "$UNAME_VERSION" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi-}"
- exit ;;
- *:Bitrig:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
- exit ;;
- *:LibertyBSD:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
- exit ;;
- *:MidnightBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
- exit ;;
- *:ekkoBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
- exit ;;
- *:SolidBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
- exit ;;
- *:OS108:*:*)
- echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
- *:MirBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
- *:Sortix:*:*)
- echo "$UNAME_MACHINE"-unknown-sortix
- exit ;;
- *:Twizzler:*:*)
- echo "$UNAME_MACHINE"-unknown-twizzler
- exit ;;
- *:Redox:*:*)
- echo "$UNAME_MACHINE"-unknown-redox
- exit ;;
- mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
- ;;
- *5.*)
- UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1)
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE=alpha ;;
- "EV4.5 (21064)")
- UNAME_MACHINE=alpha ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE=alpha ;;
- "EV5 (21164)")
- UNAME_MACHINE=alphaev5 ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE=alphaev56 ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE=alphapca56 ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE=alphapca57 ;;
- "EV6 (21264)")
- UNAME_MACHINE=alphaev6 ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE=alphaev67 ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE=alphaev69 ;;
- "EV7 (21364)")
- UNAME_MACHINE=alphaev7 ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE=alphaev79 ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)"
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix"$UNAME_RELEASE"
- exit ;;
- arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "$( (/bin/universe) 2>/dev/null)" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case $(/usr/bin/uname -p) in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
- exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
- exit ;;
- i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux"$UNAME_RELEASE"
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- set_cc_for_build
- SUN_ARCH=i386
- # If there is a compiler, see if it is configured for 64-bit objects.
- # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- # This test works for both compilers.
- if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- SUN_ARCH=x86_64
- fi
- fi
- echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- sun4*:SunOS:*:*)
- case "$(/usr/bin/arch -k)" in
- Series*|S4*)
- UNAME_RELEASE=$(uname -v)
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null)
- test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "$(/bin/arch)" in
- sun3)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- ;;
- sun4)
- echo sparc-sun-sunos"$UNAME_RELEASE"
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos"$UNAME_RELEASE"
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint"$UNAME_RELEASE"
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint"$UNAME_RELEASE"
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint"$UNAME_RELEASE"
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten"$UNAME_RELEASE"
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten"$UNAME_RELEASE"
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix"$UNAME_RELEASE"
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix"$UNAME_RELEASE"
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix"$UNAME_RELEASE"
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
- dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') &&
- SYSTEM_NAME=$("$dummy" "$dummyarg") &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos"$UNAME_RELEASE"
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=$(/usr/bin/uname -p)
- if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
- then
- if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
- test "$TARGET_BINARY_INTERFACE"x = x
- then
- echo m88k-dg-dgux"$UNAME_RELEASE"
- else
- echo m88k-dg-dguxbcs"$UNAME_RELEASE"
- fi
- else
- echo i586-dg-dgux"$UNAME_RELEASE"
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if test -x /usr/bin/oslevel ; then
- IBM_REV=$(/usr/bin/oslevel)
- else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
- fi
- echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[4567])
- IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }')
- if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if test -x /usr/bin/lslpp ; then
- IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc |
- awk -F: '{ print $3 }' | sed s/[0-9]*$/0/)
- else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
- fi
- echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
- case "$UNAME_MACHINE" in
- 9000/31?) HP_ARCH=m68000 ;;
- 9000/[34]??) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if test -x /usr/bin/getconf; then
- sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null)
- sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null)
- case "$sc_cpu_version" in
- 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
- 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "$sc_kernel_bits" in
- 32) HP_ARCH=hppa2.0n ;;
- 64) HP_ARCH=hppa2.0w ;;
- '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if test "$HP_ARCH" = ""; then
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy")
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if test "$HP_ARCH" = hppa2.0w
- then
- set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
- grep -q __LP64__
- then
- HP_ARCH=hppa2.0w
- else
- HP_ARCH=hppa64
- fi
- fi
- echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
- echo ia64-hp-hpux"$HPUX_REV"
- exit ;;
- 3050*:HI-UX:*:*)
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if test -x /usr/sbin/sysversion ; then
- echo "$UNAME_MACHINE"-unknown-osf1mk
- else
- echo "$UNAME_MACHINE"-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
- FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
- FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/')
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
- FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/')
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
- *:BSD/OS:*:*)
- echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
- arm:FreeBSD:*:*)
- UNAME_PROCESSOR=$(uname -p)
- set_cc_for_build
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
- else
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
- fi
- exit ;;
- *:FreeBSD:*:*)
- UNAME_PROCESSOR=$(/usr/bin/uname -p)
- case "$UNAME_PROCESSOR" in
- amd64)
- UNAME_PROCESSOR=x86_64 ;;
- i386)
- UNAME_PROCESSOR=i586 ;;
- esac
- echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
- exit ;;
- i*:CYGWIN*:*)
- echo "$UNAME_MACHINE"-pc-cygwin
- exit ;;
- *:MINGW64*:*)
- echo "$UNAME_MACHINE"-pc-mingw64
- exit ;;
- *:MINGW*:*)
- echo "$UNAME_MACHINE"-pc-mingw32
- exit ;;
- *:MSYS*:*)
- echo "$UNAME_MACHINE"-pc-msys
- exit ;;
- i*:PW*:*)
- echo "$UNAME_MACHINE"-pc-pw32
- exit ;;
- *:Interix*:*)
- case "$UNAME_MACHINE" in
- x86)
- echo i586-pc-interix"$UNAME_RELEASE"
- exit ;;
- authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix"$UNAME_RELEASE"
- exit ;;
- IA64)
- echo ia64-unknown-interix"$UNAME_RELEASE"
- exit ;;
- esac ;;
- i*:UWIN*:*)
- echo "$UNAME_MACHINE"-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-pc-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
- exit ;;
- *:Minix:*:*)
- echo "$UNAME_MACHINE"-unknown-minix
- exit ;;
- aarch64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- aarch64_be:Linux:*:*)
- UNAME_MACHINE=aarch64_be
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- alpha:Linux:*:*)
- case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arm*:Linux:*:*)
- set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- else
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
- else
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
- fi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- cris:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
- crisv32:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
- e2k:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- frv:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- hexagon:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- i*86:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
- ia64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- k1om:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- m32r*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- m68*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- mips:Linux:*:* | mips64:Linux:*:*)
- set_cc_for_build
- IS_GLIBC=0
- test x"${LIBC}" = xgnu && IS_GLIBC=1
- sed 's/^ //' << EOF > "$dummy.c"
- #undef CPU
- #undef mips
- #undef mipsel
- #undef mips64
- #undef mips64el
- #if ${IS_GLIBC} && defined(_ABI64)
- LIBCABI=gnuabi64
- #else
- #if ${IS_GLIBC} && defined(_ABIN32)
- LIBCABI=gnuabin32
- #else
- LIBCABI=${LIBC}
- #endif
- #endif
-
- #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
- CPU=mipsisa64r6
- #else
- #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
- CPU=mipsisa32r6
- #else
- #if defined(__mips64)
- CPU=mips64
- #else
- CPU=mips
- #endif
- #endif
- #endif
-
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- MIPS_ENDIAN=el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- MIPS_ENDIAN=
- #else
- MIPS_ENDIAN=
- #endif
- #endif
-EOF
- eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
- test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
- ;;
- mips64el:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- openrisc*:Linux:*:*)
- echo or1k-unknown-linux-"$LIBC"
- exit ;;
- or32:Linux:*:* | or1k*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-"$LIBC"
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-"$LIBC"
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in
- PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
- PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
- *) echo hppa-unknown-linux-"$LIBC" ;;
- esac
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-"$LIBC"
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-"$LIBC"
- exit ;;
- ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-"$LIBC"
- exit ;;
- ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-"$LIBC"
- exit ;;
- riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
- exit ;;
- sh64*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- sh*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- tile*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- vax:Linux:*:*)
- echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
- exit ;;
- x86_64:Linux:*:*)
- set_cc_for_build
- LIBCABI=$LIBC
- if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_X32 >/dev/null
- then
- LIBCABI="$LIBC"x32
- fi
- fi
- echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
- exit ;;
- xtensa*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo "$UNAME_MACHINE"-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo "$UNAME_MACHINE"-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo "$UNAME_MACHINE"-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo "$UNAME_MACHINE"-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- i*86:*DOS:*:*)
- echo "$UNAME_MACHINE"-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:*)
- UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//')
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
- else
- echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case $(/bin/uname -X | grep "^Machine") in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
- echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
- else
- echo "$UNAME_MACHINE"-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
- # Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configure will decide that
- # this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv"$UNAME_RELEASE"
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=$( (uname -p) 2>/dev/null)
- echo "$UNAME_MACHINE"-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo "$UNAME_MACHINE"-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux"$UNAME_RELEASE"
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if test -d /usr/nec; then
- echo mips-nec-sysv"$UNAME_RELEASE"
- else
- echo mips-unknown-sysv"$UNAME_RELEASE"
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-ACE:SUPER-UX:*:*)
- echo sxace-nec-superux"$UNAME_RELEASE"
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
- *:Rhapsody:*:*)
- echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
- arm64:Darwin:*:*)
- echo aarch64-apple-darwin"$UNAME_RELEASE"
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=$(uname -p)
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- if command -v xcode-select > /dev/null 2> /dev/null && \
- ! xcode-select --print-path > /dev/null 2> /dev/null ; then
- # Avoid executing cc if there is no toolchain installed as
- # cc will be a stub that puts up a graphical alert
- # prompting the user to install developer tools.
- CC_FOR_BUILD=no_compiler_found
- else
- set_cc_for_build
- fi
- if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
- fi
- elif test "$UNAME_PROCESSOR" = i386 ; then
- # uname -m returns i386 or x86_64
- UNAME_PROCESSOR=$UNAME_MACHINE
- fi
- echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=$(uname -p)
- if test "$UNAME_PROCESSOR" = x86; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NEO-*:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSR-*:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSV-*:NONSTOP_KERNEL:*:*)
- echo nsv-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSX-*:NONSTOP_KERNEL:*:*)
- echo nsx-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- # shellcheck disable=SC2154
- if test "$cputype" = 386; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo "$UNAME_MACHINE"-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux"$UNAME_RELEASE"
- exit ;;
- *:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=$( (uname -p) 2>/dev/null)
- case "$UNAME_MACHINE" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
- exit ;;
- i*86:rdos:*:*)
- echo "$UNAME_MACHINE"-pc-rdos
- exit ;;
- *:AROS:*:*)
- echo "$UNAME_MACHINE"-unknown-aros
- exit ;;
- x86_64:VMkernel:*:*)
- echo "$UNAME_MACHINE"-unknown-esx
- exit ;;
- amd64:Isilon\ OneFS:*:*)
- echo x86_64-unknown-onefs
- exit ;;
- *:Unleashed:*:*)
- echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
- exit ;;
-esac
-
-# No uname command or uname output not recognized.
-set_cc_for_build
-cat > "$dummy.c" <<EOF
-#ifdef _SEQUENT_
-#include <sys/types.h>
-#include <sys/utsname.h>
-#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#include <signal.h>
-#if defined(_SIZE_T_) || defined(SIGLOST)
-#include <sys/utsname.h>
-#endif
-#endif
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-#endif
-
-#if defined (vax)
-#if !defined (ultrix)
-#include <sys/param.h>
-#if defined (BSD)
-#if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-#else
-#if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#else
- printf ("vax-dec-bsd\n"); exit (0);
-#endif
-#endif
-#else
- printf ("vax-dec-bsd\n"); exit (0);
-#endif
-#else
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname un;
- uname (&un);
- printf ("vax-dec-ultrix%s\n", un.release); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
-#endif
-#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname *un;
- uname (&un);
- printf ("mips-dec-ultrix%s\n", un.release); exit (0);
-#else
- printf ("mips-dec-ultrix\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
-
-echo "$0: unable to guess system type" >&2
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
- mips:Linux | mips64:Linux)
- # If we got here on MIPS GNU/Linux, output extra information.
- cat >&2 <<EOF
-
-NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
-the system type. Please install a C compiler and try again.
-EOF
- ;;
-esac
-
-cat >&2 <<EOF
-
-This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite *all*
-copies of config.guess and config.sub with the latest versions from:
-
- https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
-and
- https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
-EOF
-
-year=$(echo $timestamp | sed 's,-.*,,')
-# shellcheck disable=SC2003
-if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then
- cat >&2 <<EOF
-
-If $0 has already been updated, send the following data and any
-information you think might be pertinent to config-patches@gnu.org to
-provide the necessary information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = $( (uname -m) 2>/dev/null || echo unknown)
-uname -r = $( (uname -r) 2>/dev/null || echo unknown)
-uname -s = $( (uname -s) 2>/dev/null || echo unknown)
-uname -v = $( (uname -v) 2>/dev/null || echo unknown)
-
-/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
-/bin/uname -X = $( (/bin/uname -X) 2>/dev/null)
-
-hostinfo = $( (hostinfo) 2>/dev/null)
-/bin/universe = $( (/bin/universe) 2>/dev/null)
-/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null)
-/bin/arch = $( (/bin/arch) 2>/dev/null)
-/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null)
-/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
-
-UNAME_MACHINE = "$UNAME_MACHINE"
-UNAME_RELEASE = "$UNAME_RELEASE"
-UNAME_SYSTEM = "$UNAME_SYSTEM"
-UNAME_VERSION = "$UNAME_VERSION"
-EOF
-fi
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/lib/erl_interface/src/auxdir/config.sub b/lib/erl_interface/src/auxdir/config.sub
deleted file mode 100755
index 63c1f1c8b5..0000000000
--- a/lib/erl_interface/src/auxdir/config.sub
+++ /dev/null
@@ -1,1860 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright 1992-2021 Free Software Foundation, Inc.
-
-timestamp='2021-01-08'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=$(echo "$0" | sed -e 's,.*/,,')
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
-
-Canonicalize a configuration name.
-
-Options:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2021 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo "$1"
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Split fields of configuration type
-# shellcheck disable=SC2162
-IFS="-" read field1 field2 field3 field4 <<EOF
-$1
-EOF
-
-# Separate into logical components for further validation
-case $1 in
- *-*-*-*-*)
- echo Invalid configuration \`"$1"\': more than four components >&2
- exit 1
- ;;
- *-*-*-*)
- basic_machine=$field1-$field2
- basic_os=$field3-$field4
- ;;
- *-*-*)
- # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
- # parts
- maybe_os=$field2-$field3
- case $maybe_os in
- nto-qnx* | linux-* | uclinux-uclibc* \
- | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
- | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
- | storm-chaos* | os2-emx* | rtmk-nova*)
- basic_machine=$field1
- basic_os=$maybe_os
- ;;
- android-linux)
- basic_machine=$field1-unknown
- basic_os=linux-android
- ;;
- *)
- basic_machine=$field1-$field2
- basic_os=$field3
- ;;
- esac
- ;;
- *-*)
- # A lone config we happen to match not fitting any pattern
- case $field1-$field2 in
- decstation-3100)
- basic_machine=mips-dec
- basic_os=
- ;;
- *-*)
- # Second component is usually, but not always the OS
- case $field2 in
- # Prevent following clause from handling this valid os
- sun*os*)
- basic_machine=$field1
- basic_os=$field2
- ;;
- # Manufacturers
- dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
- | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
- | unicom* | ibm* | next | hp | isi* | apollo | altos* \
- | convergent* | ncr* | news | 32* | 3600* | 3100* \
- | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
- | ultra | tti* | harris | dolphin | highlevel | gould \
- | cbm | ns | masscomp | apple | axis | knuth | cray \
- | microblaze* | sim | cisco \
- | oki | wec | wrs | winbond)
- basic_machine=$field1-$field2
- basic_os=
- ;;
- *)
- basic_machine=$field1
- basic_os=$field2
- ;;
- esac
- ;;
- esac
- ;;
- *)
- # Convert single-component short-hands not valid as part of
- # multi-component configurations.
- case $field1 in
- 386bsd)
- basic_machine=i386-pc
- basic_os=bsd
- ;;
- a29khif)
- basic_machine=a29k-amd
- basic_os=udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- basic_os=scout
- ;;
- alliant)
- basic_machine=fx80-alliant
- basic_os=
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- basic_os=
- ;;
- am29k)
- basic_machine=a29k-none
- basic_os=bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- basic_os=sysv
- ;;
- amiga)
- basic_machine=m68k-unknown
- basic_os=
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- basic_os=amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- basic_os=sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- basic_os=sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- basic_os=bsd
- ;;
- aros)
- basic_machine=i386-pc
- basic_os=aros
- ;;
- aux)
- basic_machine=m68k-apple
- basic_os=aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- basic_os=dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- basic_os=linux
- ;;
- cegcc)
- basic_machine=arm-unknown
- basic_os=cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- basic_os=bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- basic_os=bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- basic_os=bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- basic_os=bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- basic_os=bsd
- ;;
- cray)
- basic_machine=j90-cray
- basic_os=unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- basic_os=
- ;;
- da30)
- basic_machine=m68k-da30
- basic_os=
- ;;
- decstation | pmax | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- basic_os=
- ;;
- delta88)
- basic_machine=m88k-motorola
- basic_os=sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- basic_os=dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- basic_os=msdosdjgpp
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- basic_os=ebmon
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- basic_os=ose
- ;;
- gmicro)
- basic_machine=tron-gmicro
- basic_os=sysv
- ;;
- go32)
- basic_machine=i386-pc
- basic_os=go32
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- basic_os=hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- basic_os=xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- basic_os=hms
- ;;
- harris)
- basic_machine=m88k-harris
- basic_os=sysv3
- ;;
- hp300 | hp300hpux)
- basic_machine=m68k-hp
- basic_os=hpux
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- basic_os=bsd
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- basic_os=osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- basic_os=proelf
- ;;
- i386mach)
- basic_machine=i386-mach
- basic_os=mach
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- basic_os=sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- basic_os=linux
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- basic_os=sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- basic_os=sysv
- ;;
- mingw64)
- basic_machine=x86_64-pc
- basic_os=mingw64
- ;;
- mingw32)
- basic_machine=i686-pc
- basic_os=mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- basic_os=mingw32ce
- ;;
- monitor)
- basic_machine=m68k-rom68k
- basic_os=coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- basic_os=morphos
- ;;
- moxiebox)
- basic_machine=moxie-unknown
- basic_os=moxiebox
- ;;
- msdos)
- basic_machine=i386-pc
- basic_os=msdos
- ;;
- msys)
- basic_machine=i686-pc
- basic_os=msys
- ;;
- mvs)
- basic_machine=i370-ibm
- basic_os=mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- basic_os=nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- basic_os=sysv4
- ;;
- netbsd386)
- basic_machine=i386-pc
- basic_os=netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- basic_os=linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- basic_os=newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- basic_os=newsos
- ;;
- necv70)
- basic_machine=v70-nec
- basic_os=sysv
- ;;
- nh3000)
- basic_machine=m68k-harris
- basic_os=cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- basic_os=cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- basic_os=nindy
- ;;
- mon960)
- basic_machine=i960-intel
- basic_os=mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- basic_os=nonstopux
- ;;
- os400)
- basic_machine=powerpc-ibm
- basic_os=os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- basic_os=ose
- ;;
- os68k)
- basic_machine=m68k-none
- basic_os=os68k
- ;;
- paragon)
- basic_machine=i860-intel
- basic_os=osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- basic_os=linux
- ;;
- psp)
- basic_machine=mipsallegrexel-sony
- basic_os=psp
- ;;
- pw32)
- basic_machine=i586-unknown
- basic_os=pw32
- ;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- basic_os=rdos
- ;;
- rdos32)
- basic_machine=i386-pc
- basic_os=rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- basic_os=coff
- ;;
- sa29200)
- basic_machine=a29k-amd
- basic_os=udi
- ;;
- sei)
- basic_machine=mips-sei
- basic_os=seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- basic_os=
- ;;
- sps7)
- basic_machine=m68k-bull
- basic_os=sysv2
- ;;
- st2000)
- basic_machine=m68k-tandem
- basic_os=
- ;;
- stratus)
- basic_machine=i860-stratus
- basic_os=sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- basic_os=
- ;;
- sun2os3)
- basic_machine=m68000-sun
- basic_os=sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- basic_os=sunos4
- ;;
- sun3)
- basic_machine=m68k-sun
- basic_os=
- ;;
- sun3os3)
- basic_machine=m68k-sun
- basic_os=sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- basic_os=sunos4
- ;;
- sun4)
- basic_machine=sparc-sun
- basic_os=
- ;;
- sun4os3)
- basic_machine=sparc-sun
- basic_os=sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- basic_os=sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- basic_os=solaris2
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- basic_os=
- ;;
- sv1)
- basic_machine=sv1-cray
- basic_os=unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- basic_os=dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- basic_os=unicos
- ;;
- t90)
- basic_machine=t90-cray
- basic_os=unicos
- ;;
- toad1)
- basic_machine=pdp10-xkl
- basic_os=tops20
- ;;
- tpf)
- basic_machine=s390x-ibm
- basic_os=tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- basic_os=udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- basic_os=sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- basic_os=none
- ;;
- vaxv)
- basic_machine=vax-dec
- basic_os=sysv
- ;;
- vms)
- basic_machine=vax-dec
- basic_os=vms
- ;;
- vsta)
- basic_machine=i386-pc
- basic_os=vsta
- ;;
- vxworks960)
- basic_machine=i960-wrs
- basic_os=vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- basic_os=vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- basic_os=vxworks
- ;;
- xbox)
- basic_machine=i686-pc
- basic_os=mingw32
- ;;
- ymp)
- basic_machine=ymp-cray
- basic_os=unicos
- ;;
- *)
- basic_machine=$1
- basic_os=
- ;;
- esac
- ;;
-esac
-
-# Decode 1-component or ad-hoc basic machines
-case $basic_machine in
- # Here we handle the default manufacturer of certain CPU types. It is in
- # some cases the only manufacturer, in others, it is the most popular.
- w89k)
- cpu=hppa1.1
- vendor=winbond
- ;;
- op50n)
- cpu=hppa1.1
- vendor=oki
- ;;
- op60c)
- cpu=hppa1.1
- vendor=oki
- ;;
- ibm*)
- cpu=i370
- vendor=ibm
- ;;
- orion105)
- cpu=clipper
- vendor=highlevel
- ;;
- mac | mpw | mac-mpw)
- cpu=m68k
- vendor=apple
- ;;
- pmac | pmac-mpw)
- cpu=powerpc
- vendor=apple
- ;;
-
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- cpu=m68000
- vendor=att
- ;;
- 3b*)
- cpu=we32k
- vendor=att
- ;;
- bluegene*)
- cpu=powerpc
- vendor=ibm
- basic_os=cnk
- ;;
- decsystem10* | dec10*)
- cpu=pdp10
- vendor=dec
- basic_os=tops10
- ;;
- decsystem20* | dec20*)
- cpu=pdp10
- vendor=dec
- basic_os=tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- cpu=m68k
- vendor=motorola
- ;;
- dpx2*)
- cpu=m68k
- vendor=bull
- basic_os=sysv3
- ;;
- encore | umax | mmax)
- cpu=ns32k
- vendor=encore
- ;;
- elxsi)
- cpu=elxsi
- vendor=elxsi
- basic_os=${basic_os:-bsd}
- ;;
- fx2800)
- cpu=i860
- vendor=alliant
- ;;
- genix)
- cpu=ns32k
- vendor=ns
- ;;
- h3050r* | hiux*)
- cpu=hppa1.1
- vendor=hitachi
- basic_os=hiuxwe2
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- cpu=m68000
- vendor=hp
- ;;
- hp9k3[2-9][0-9])
- cpu=m68k
- vendor=hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
- ;;
- i*86v32)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=sysv32
- ;;
- i*86v4*)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=sysv4
- ;;
- i*86v)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=sysv
- ;;
- i*86sol2)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=solaris2
- ;;
- j90 | j90-cray)
- cpu=j90
- vendor=cray
- basic_os=${basic_os:-unicos}
- ;;
- iris | iris4d)
- cpu=mips
- vendor=sgi
- case $basic_os in
- irix*)
- ;;
- *)
- basic_os=irix4
- ;;
- esac
- ;;
- miniframe)
- cpu=m68000
- vendor=convergent
- ;;
- *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
- cpu=m68k
- vendor=atari
- basic_os=mint
- ;;
- news-3600 | risc-news)
- cpu=mips
- vendor=sony
- basic_os=newsos
- ;;
- next | m*-next)
- cpu=m68k
- vendor=next
- case $basic_os in
- openstep*)
- ;;
- nextstep*)
- ;;
- ns2*)
- basic_os=nextstep2
- ;;
- *)
- basic_os=nextstep3
- ;;
- esac
- ;;
- np1)
- cpu=np1
- vendor=gould
- ;;
- op50n-* | op60c-*)
- cpu=hppa1.1
- vendor=oki
- basic_os=proelf
- ;;
- pa-hitachi)
- cpu=hppa1.1
- vendor=hitachi
- basic_os=hiuxwe2
- ;;
- pbd)
- cpu=sparc
- vendor=tti
- ;;
- pbb)
- cpu=m68k
- vendor=tti
- ;;
- pc532)
- cpu=ns32k
- vendor=pc532
- ;;
- pn)
- cpu=pn
- vendor=gould
- ;;
- power)
- cpu=power
- vendor=ibm
- ;;
- ps2)
- cpu=i386
- vendor=ibm
- ;;
- rm[46]00)
- cpu=mips
- vendor=siemens
- ;;
- rtpc | rtpc-*)
- cpu=romp
- vendor=ibm
- ;;
- sde)
- cpu=mipsisa32
- vendor=sde
- basic_os=${basic_os:-elf}
- ;;
- simso-wrs)
- cpu=sparclite
- vendor=wrs
- basic_os=vxworks
- ;;
- tower | tower-32)
- cpu=m68k
- vendor=ncr
- ;;
- vpp*|vx|vx-*)
- cpu=f301
- vendor=fujitsu
- ;;
- w65)
- cpu=w65
- vendor=wdc
- ;;
- w89k-*)
- cpu=hppa1.1
- vendor=winbond
- basic_os=proelf
- ;;
- none)
- cpu=none
- vendor=none
- ;;
- leon|leon[3-9])
- cpu=sparc
- vendor=$basic_machine
- ;;
- leon-*|leon[3-9]-*)
- cpu=sparc
- vendor=$(echo "$basic_machine" | sed 's/-.*//')
- ;;
-
- *-*)
- # shellcheck disable=SC2162
- IFS="-" read cpu vendor <<EOF
-$basic_machine
-EOF
- ;;
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- cpu=$basic_machine
- vendor=pc
- ;;
- # These rules are duplicated from below for sake of the special case above;
- # i.e. things that normalized to x86 arches should also default to "pc"
- pc98)
- cpu=i386
- vendor=pc
- ;;
- x64 | amd64)
- cpu=x86_64
- vendor=pc
- ;;
- # Recognize the basic CPU types without company name.
- *)
- cpu=$basic_machine
- vendor=unknown
- ;;
-esac
-
-unset -v basic_machine
-
-# Decode basic machines in the full and proper CPU-Company form.
-case $cpu-$vendor in
- # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
- # some cases the only manufacturer, in others, it is the most popular.
- craynv-unknown)
- vendor=cray
- basic_os=${basic_os:-unicosmp}
- ;;
- c90-unknown | c90-cray)
- vendor=cray
- basic_os=${Basic_os:-unicos}
- ;;
- fx80-unknown)
- vendor=alliant
- ;;
- romp-unknown)
- vendor=ibm
- ;;
- mmix-unknown)
- vendor=knuth
- ;;
- microblaze-unknown | microblazeel-unknown)
- vendor=xilinx
- ;;
- rs6000-unknown)
- vendor=ibm
- ;;
- vax-unknown)
- vendor=dec
- ;;
- pdp11-unknown)
- vendor=dec
- ;;
- we32k-unknown)
- vendor=att
- ;;
- cydra-unknown)
- vendor=cydrome
- ;;
- i370-ibm*)
- vendor=ibm
- ;;
- orion-unknown)
- vendor=highlevel
- ;;
- xps-unknown | xps100-unknown)
- cpu=xps100
- vendor=honeywell
- ;;
-
- # Here we normalize CPU types with a missing or matching vendor
- dpx20-unknown | dpx20-bull)
- cpu=rs6000
- vendor=bull
- basic_os=${basic_os:-bosx}
- ;;
-
- # Here we normalize CPU types irrespective of the vendor
- amd64-*)
- cpu=x86_64
- ;;
- blackfin-*)
- cpu=bfin
- basic_os=linux
- ;;
- c54x-*)
- cpu=tic54x
- ;;
- c55x-*)
- cpu=tic55x
- ;;
- c6x-*)
- cpu=tic6x
- ;;
- e500v[12]-*)
- cpu=powerpc
- basic_os=${basic_os}"spe"
- ;;
- mips3*-*)
- cpu=mips64
- ;;
- ms1-*)
- cpu=mt
- ;;
- m68knommu-*)
- cpu=m68k
- basic_os=linux
- ;;
- m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
- cpu=s12z
- ;;
- openrisc-*)
- cpu=or32
- ;;
- parisc-*)
- cpu=hppa
- basic_os=linux
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- cpu=i586
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
- cpu=i686
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- cpu=i686
- ;;
- pentium4-*)
- cpu=i786
- ;;
- pc98-*)
- cpu=i386
- ;;
- ppc-* | ppcbe-*)
- cpu=powerpc
- ;;
- ppcle-* | powerpclittle-*)
- cpu=powerpcle
- ;;
- ppc64-*)
- cpu=powerpc64
- ;;
- ppc64le-* | powerpc64little-*)
- cpu=powerpc64le
- ;;
- sb1-*)
- cpu=mipsisa64sb1
- ;;
- sb1el-*)
- cpu=mipsisa64sb1el
- ;;
- sh5e[lb]-*)
- cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
- ;;
- spur-*)
- cpu=spur
- ;;
- strongarm-* | thumb-*)
- cpu=arm
- ;;
- tx39-*)
- cpu=mipstx39
- ;;
- tx39el-*)
- cpu=mipstx39el
- ;;
- x64-*)
- cpu=x86_64
- ;;
- xscale-* | xscalee[bl]-*)
- cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
- ;;
- arm64-*)
- cpu=aarch64
- ;;
-
- # Recognize the canonical CPU Types that limit and/or modify the
- # company names they are paired with.
- cr16-*)
- basic_os=${basic_os:-elf}
- ;;
- crisv32-* | etraxfs*-*)
- cpu=crisv32
- vendor=axis
- ;;
- cris-* | etrax*-*)
- cpu=cris
- vendor=axis
- ;;
- crx-*)
- basic_os=${basic_os:-elf}
- ;;
- neo-tandem)
- cpu=neo
- vendor=tandem
- ;;
- nse-tandem)
- cpu=nse
- vendor=tandem
- ;;
- nsr-tandem)
- cpu=nsr
- vendor=tandem
- ;;
- nsv-tandem)
- cpu=nsv
- vendor=tandem
- ;;
- nsx-tandem)
- cpu=nsx
- vendor=tandem
- ;;
- mipsallegrexel-sony)
- cpu=mipsallegrexel
- vendor=sony
- ;;
- tile*-*)
- basic_os=${basic_os:-linux-gnu}
- ;;
-
- *)
- # Recognize the canonical CPU types that are allowed with any
- # company name.
- case $cpu in
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | abacus \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
- | alphapca5[67] | alpha64pca5[67] \
- | am33_2.0 \
- | amdgcn \
- | arc | arceb \
- | arm | arm[lb]e | arme[lb] | armv* \
- | avr | avr32 \
- | asmjs \
- | ba \
- | be32 | be64 \
- | bfin | bpf | bs2000 \
- | c[123]* | c30 | [cjt]90 | c4x \
- | c8051 | clipper | craynv | csky | cydra \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | elxsi | epiphany \
- | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
- | h8300 | h8500 \
- | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i*86 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | loongarch32 | loongarch64 | loongarchx32 \
- | m32c | m32r | m32rle \
- | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
- | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
- | m88110 | m88k | maxq | mb | mcore | mep | metag \
- | microblaze | microblazeel \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64eb | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mmix \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nfp \
- | nios | nios2 | nios2eb | nios2el \
- | none | np1 | ns16k | ns32k | nvptx \
- | open8 \
- | or1k* \
- | or32 \
- | orion \
- | picochip \
- | pdp10 | pdp11 | pj | pjl | pn | power \
- | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
- | pru \
- | pyramid \
- | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
- | rl78 | romp | rs6000 | rx \
- | s390 | s390x \
- | score \
- | sh | shl \
- | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
- | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
- | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
- | spu \
- | tahoe \
- | thumbv7* \
- | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
- | tron \
- | ubicom32 \
- | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
- | vax \
- | visium \
- | w65 \
- | wasm32 | wasm64 \
- | we32k \
- | x86 | x86_64 | xc16x | xgate | xps100 \
- | xstormy16 | xtensa* \
- | ymp \
- | z8k | z80)
- ;;
-
- *)
- echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
- exit 1
- ;;
- esac
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $vendor in
- digital*)
- vendor=dec
- ;;
- commodore*)
- vendor=cbm
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if test x$basic_os != x
-then
-
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
-# set os.
-case $basic_os in
- gnu/linux*)
- kernel=linux
- os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
- ;;
- os2-emx)
- kernel=os2
- os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
- ;;
- nto-qnx*)
- kernel=nto
- os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
- ;;
- *-*)
- # shellcheck disable=SC2162
- IFS="-" read kernel os <<EOF
-$basic_os
-EOF
- ;;
- # Default OS when just kernel was specified
- nto*)
- kernel=nto
- os=$(echo $basic_os | sed -e 's|nto|qnx|')
- ;;
- linux*)
- kernel=linux
- os=$(echo $basic_os | sed -e 's|linux|gnu|')
- ;;
- *)
- kernel=
- os=$basic_os
- ;;
-esac
-
-# Now, normalize the OS (knowing we just have one component, it's not a kernel,
-# etc.)
-case $os in
- # First match some system type aliases that might get confused
- # with valid system types.
- # solaris* is a basic system type, with this one exception.
- auroraux)
- os=auroraux
- ;;
- bluegene*)
- os=cnk
- ;;
- solaris1 | solaris1.*)
- os=$(echo $os | sed -e 's|solaris1|sunos4|')
- ;;
- solaris)
- os=solaris2
- ;;
- unixware*)
- os=sysv4.2uw
- ;;
- # es1800 is here to avoid being matched by es* (a different OS)
- es1800*)
- os=ose
- ;;
- # Some version numbers need modification
- chorusos*)
- os=chorusos
- ;;
- isc)
- os=isc2.2
- ;;
- sco6)
- os=sco5v6
- ;;
- sco5)
- os=sco3.2v5
- ;;
- sco4)
- os=sco3.2v4
- ;;
- sco3.2.[4-9]*)
- os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
- ;;
- sco*v* | scout)
- # Don't match below
- ;;
- sco*)
- os=sco3.2v2
- ;;
- psos*)
- os=psos
- ;;
- qnx*)
- os=qnx
- ;;
- hiux*)
- os=hiuxwe2
- ;;
- lynx*178)
- os=lynxos178
- ;;
- lynx*5)
- os=lynxos5
- ;;
- lynxos*)
- # don't get caught up in next wildcard
- ;;
- lynx*)
- os=lynxos
- ;;
- mac[0-9]*)
- os=$(echo "$os" | sed -e 's|mac|macos|')
- ;;
- opened*)
- os=openedition
- ;;
- os400*)
- os=os400
- ;;
- sunos5*)
- os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
- ;;
- sunos6*)
- os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
- ;;
- wince*)
- os=wince
- ;;
- utek*)
- os=bsd
- ;;
- dynix*)
- os=bsd
- ;;
- acis*)
- os=aos
- ;;
- atheos*)
- os=atheos
- ;;
- syllable*)
- os=syllable
- ;;
- 386bsd)
- os=bsd
- ;;
- ctix* | uts*)
- os=sysv
- ;;
- nova*)
- os=rtmk-nova
- ;;
- ns2)
- os=nextstep2
- ;;
- # Preserve the version number of sinix5.
- sinix5.*)
- os=$(echo $os | sed -e 's|sinix|sysv|')
- ;;
- sinix*)
- os=sysv4
- ;;
- tpf*)
- os=tpf
- ;;
- triton*)
- os=sysv3
- ;;
- oss*)
- os=sysv3
- ;;
- svr4*)
- os=sysv4
- ;;
- svr3)
- os=sysv3
- ;;
- sysvr4)
- os=sysv4
- ;;
- ose*)
- os=ose
- ;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
- os=mint
- ;;
- dicos*)
- os=dicos
- ;;
- pikeos*)
- # Until real need of OS specific support for
- # particular features comes up, bare metal
- # configurations are quite functional.
- case $cpu in
- arm*)
- os=eabi
- ;;
- *)
- os=elf
- ;;
- esac
- ;;
- *)
- # No normalization, but not necessarily accepted, that comes below.
- ;;
-esac
-
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-kernel=
-case $cpu-$vendor in
- score-*)
- os=elf
- ;;
- spu-*)
- os=elf
- ;;
- *-acorn)
- os=riscix1.2
- ;;
- arm*-rebel)
- kernel=linux
- os=gnu
- ;;
- arm*-semi)
- os=aout
- ;;
- c4x-* | tic4x-*)
- os=coff
- ;;
- c8051-*)
- os=elf
- ;;
- clipper-intergraph)
- os=clix
- ;;
- hexagon-*)
- os=elf
- ;;
- tic54x-*)
- os=coff
- ;;
- tic55x-*)
- os=coff
- ;;
- tic6x-*)
- os=coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=tops20
- ;;
- pdp11-*)
- os=none
- ;;
- *-dec | vax-*)
- os=ultrix4.2
- ;;
- m68*-apollo)
- os=domain
- ;;
- i386-sun)
- os=sunos4.0.2
- ;;
- m68000-sun)
- os=sunos3
- ;;
- m68*-cisco)
- os=aout
- ;;
- mep-*)
- os=elf
- ;;
- mips*-cisco)
- os=elf
- ;;
- mips*-*)
- os=elf
- ;;
- or32-*)
- os=coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=sysv3
- ;;
- sparc-* | *-sun)
- os=sunos4.1.1
- ;;
- pru-*)
- os=elf
- ;;
- *-be)
- os=beos
- ;;
- *-ibm)
- os=aix
- ;;
- *-knuth)
- os=mmixware
- ;;
- *-wec)
- os=proelf
- ;;
- *-winbond)
- os=proelf
- ;;
- *-oki)
- os=proelf
- ;;
- *-hp)
- os=hpux
- ;;
- *-hitachi)
- os=hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=sysv
- ;;
- *-cbm)
- os=amigaos
- ;;
- *-dg)
- os=dgux
- ;;
- *-dolphin)
- os=sysv3
- ;;
- m68k-ccur)
- os=rtu
- ;;
- m88k-omron*)
- os=luna
- ;;
- *-next)
- os=nextstep
- ;;
- *-sequent)
- os=ptx
- ;;
- *-crds)
- os=unos
- ;;
- *-ns)
- os=genix
- ;;
- i370-*)
- os=mvs
- ;;
- *-gould)
- os=sysv
- ;;
- *-highlevel)
- os=bsd
- ;;
- *-encore)
- os=bsd
- ;;
- *-sgi)
- os=irix
- ;;
- *-siemens)
- os=sysv4
- ;;
- *-masscomp)
- os=rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=uxpv
- ;;
- *-rom68k)
- os=coff
- ;;
- *-*bug)
- os=coff
- ;;
- *-apple)
- os=macos
- ;;
- *-atari*)
- os=mint
- ;;
- *-wrs)
- os=vxworks
- ;;
- *)
- os=none
- ;;
-esac
-
-fi
-
-# Now, validate our (potentially fixed-up) OS.
-case $os in
- # Sometimes we do "kernel-libc", so those need to count as OSes.
- musl* | newlib* | uclibc*)
- ;;
- # Likewise for "kernel-abi"
- eabi* | gnueabi*)
- ;;
- # VxWorks passes extra cpu info in the 4th filed.
- simlinux | simwindows | spe)
- ;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
- | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
- | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
- | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
- | hiux* | abug | nacl* | netware* | windows* \
- | os9* | macos* | osx* | ios* \
- | mpw* | magic* | mmixware* | mon960* | lnews* \
- | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
- | aos* | aros* | cloudabi* | sortix* | twizzler* \
- | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
- | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
- | mirbsd* | netbsd* | dicos* | openedition* | ose* \
- | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
- | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
- | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
- | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
- | udi* | lites* | ieee* | go32* | aux* | hcos* \
- | chorusrdb* | cegcc* | glidix* \
- | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
- | midipix* | mingw32* | mingw64* | mint* \
- | uxpv* | beos* | mpeix* | udk* | moxiebox* \
- | interix* | uwin* | mks* | rhapsody* | darwin* \
- | openstep* | oskit* | conix* | pw32* | nonstopux* \
- | storm-chaos* | tops10* | tenex* | tops20* | its* \
- | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
- | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
- | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
- | skyos* | haiku* | rdos* | toppers* | drops* | es* \
- | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
- | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
- | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
- ;;
- # This one is extra strict with allowed versions
- sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- ;;
- none)
- ;;
- *)
- echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# As a final step for OS-related things, validate the OS-kernel combination
-# (given a valid OS), if there is a kernel.
-case $kernel-$os in
- linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
- ;;
- uclinux-uclibc* )
- ;;
- -dietlibc* | -newlib* | -musl* | -uclibc* )
- # These are just libc implementations, not actual OSes, and thus
- # require a kernel.
- echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
- exit 1
- ;;
- kfreebsd*-gnu* | kopensolaris*-gnu*)
- ;;
- vxworks-simlinux | vxworks-simwindows | vxworks-spe)
- ;;
- nto-qnx*)
- ;;
- os2-emx)
- ;;
- *-eabi* | *-gnueabi*)
- ;;
- -*)
- # Blank kernel with real OS is always fine.
- ;;
- *-*)
- echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
- exit 1
- ;;
-esac
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-case $vendor in
- unknown)
- case $cpu-$os in
- *-riscix*)
- vendor=acorn
- ;;
- *-sunos*)
- vendor=sun
- ;;
- *-cnk* | *-aix*)
- vendor=ibm
- ;;
- *-beos*)
- vendor=be
- ;;
- *-hpux*)
- vendor=hp
- ;;
- *-mpeix*)
- vendor=hp
- ;;
- *-hiux*)
- vendor=hitachi
- ;;
- *-unos*)
- vendor=crds
- ;;
- *-dgux*)
- vendor=dg
- ;;
- *-luna*)
- vendor=omron
- ;;
- *-genix*)
- vendor=ns
- ;;
- *-clix*)
- vendor=intergraph
- ;;
- *-mvs* | *-opened*)
- vendor=ibm
- ;;
- *-os400*)
- vendor=ibm
- ;;
- s390-* | s390x-*)
- vendor=ibm
- ;;
- *-ptx*)
- vendor=sequent
- ;;
- *-tpf*)
- vendor=ibm
- ;;
- *-vxsim* | *-vxworks* | *-windiss*)
- vendor=wrs
- ;;
- *-aux*)
- vendor=apple
- ;;
- *-hms*)
- vendor=hitachi
- ;;
- *-mpw* | *-macos*)
- vendor=apple
- ;;
- *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
- vendor=atari
- ;;
- *-vos*)
- vendor=stratus
- ;;
- esac
- ;;
-esac
-
-echo "$cpu-$vendor-${kernel:+$kernel-}$os"
-exit
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/lib/erl_interface/src/auxdir/install-sh b/lib/erl_interface/src/auxdir/install-sh
deleted file mode 100755
index ec298b5374..0000000000
--- a/lib/erl_interface/src/auxdir/install-sh
+++ /dev/null
@@ -1,541 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2020-11-14.01; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab=' '
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-# Create dirs (including intermediate dirs) using mode 755.
-# This is like GNU 'install' as of coreutils 8.32 (2020).
-mkdir_umask=22
-
-backupsuffix=
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -p pass -p to $cpprog.
- -s $stripprog installed files.
- -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-
-By default, rm is invoked with -f; when overridden with RMPROG,
-it's up to you to specify -f if you want it.
-
-If -S is not specified, no backups are attempted.
-
-Email bug reports to bug-automake@gnu.org.
-Automake home page: https://www.gnu.org/software/automake/
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -p) cpprog="$cpprog -p";;
-
- -s) stripcmd=$stripprog;;
-
- -S) backupsuffix="$2"
- shift;;
-
- -t)
- is_target_a_directory=always
- dst_arg=$2
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- shift;;
-
- -T) is_target_a_directory=never;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
- if test -n "$dst_arg"; then
- echo "$0: target directory not allowed when installing a directory." >&2
- exit 1
- fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call 'install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- if test $# -gt 1 || test "$is_target_a_directory" = always; then
- if test ! -d "$dst_arg"; then
- echo "$0: $dst_arg: Is not a directory." >&2
- exit 1
- fi
- fi
-fi
-
-if test -z "$dir_arg"; then
- do_exit='(exit $ret); exit $ret'
- trap "ret=129; $do_exit" 1
- trap "ret=130; $do_exit" 2
- trap "ret=141; $do_exit" 13
- trap "ret=143; $do_exit" 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names problematic for 'test' and other utilities.
- case $src in
- -* | [=\(\)!]) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- # Don't chown directories that already exist.
- if test $dstdir_status = 0; then
- chowncmd=""
- fi
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
- dst=$dst_arg
-
- # If destination is a directory, append the input filename.
- if test -d "$dst"; then
- if test "$is_target_a_directory" = never; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dstbase=`basename "$src"`
- case $dst in
- */) dst=$dst$dstbase;;
- *) dst=$dst/$dstbase;;
- esac
- dstdir_status=0
- else
- dstdir=`dirname "$dst"`
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- case $dstdir in
- */) dstdirslash=$dstdir;;
- *) dstdirslash=$dstdir/;;
- esac
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- # The $RANDOM variable is not portable (e.g., dash). Use it
- # here however when possible just to lower collision chance.
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
- trap '
- ret=$?
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
- exit $ret
- ' 0
-
- # Because "mkdir -p" follows existing symlinks and we likely work
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
- # directory is successfully created first before we actually test
- # 'mkdir -p'.
- if (umask $mkdir_umask &&
- $mkdirprog $mkdir_mode "$tmpdir" &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- test_tmpdir="$tmpdir/a"
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
- fi
- trap '' 0;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- [-=\(\)!]*) prefix='./';;
- *) prefix='';;
- esac
-
- oIFS=$IFS
- IFS=/
- set -f
- set fnord $dstdir
- shift
- set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test X"$d" = X && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=${dstdirslash}_inst.$$_
- rmtmp=${dstdirslash}_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask &&
- { test -z "$stripcmd" || {
- # Create $dsttmp read-write so that cp doesn't create it read-only,
- # which would cause strip to fail.
- if test -z "$doit"; then
- : >"$dsttmp" # No need to fork-exec 'touch'.
- else
- $doit touch "$dsttmp"
- fi
- }
- } &&
- $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
- set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- set +f &&
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # If $backupsuffix is set, and the file being installed
- # already exists, attempt a backup. Don't worry if it fails,
- # e.g., if mv doesn't support -f.
- if test -n "$backupsuffix" && test -f "$dst"; then
- $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
- fi
-
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c
index fede6606e2..d15fed23b3 100644
--- a/lib/erl_interface/src/connect/ei_connect.c
+++ b/lib/erl_interface/src/connect/ei_connect.c
@@ -36,15 +36,9 @@
#include <unistd.h>
#include <sys/times.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
+#include <time.h>
+#if HAVE_SYS_TIME_H
# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
#include <sys/socket.h>
@@ -2270,7 +2264,8 @@ error:
static DistFlags preferred_flags(void)
{
DistFlags flags =
- DFLAG_EXTENDED_REFERENCES
+ DFLAG_MANDATORY_25_DIGEST
+ | DFLAG_EXTENDED_REFERENCES
| DFLAG_DIST_MONITOR
| DFLAG_EXTENDED_PIDS_PORTS
| DFLAG_FUN_TAGS
@@ -2285,10 +2280,6 @@ static DistFlags preferred_flags(void)
| DFLAG_HANDSHAKE_23
| DFLAG_V4_NC
| DFLAG_UNLINK_ID;
- if (ei_internal_use_21_bitstr_expfun()) {
- flags &= ~(DFLAG_EXPORT_PTR_TAG
- | DFLAG_BIT_BINARIES);
- }
return flags;
}
@@ -2518,22 +2509,13 @@ static int recv_challenge(ei_socket_callbacks *cbs, void *ctx,
goto error;
}
- if (!(*flags & DFLAG_EXTENDED_REFERENCES)) {
- EI_TRACE_ERR0("recv_challenge","<- RECV_CHALLENGE peer cannot "
- "handle extended references");
- goto error;
+ if (*flags & DFLAG_MANDATORY_25_DIGEST) {
+ *flags |= DFLAG_DIST_MANDATORY_25;
}
- if (!(*flags & DFLAG_EXTENDED_PIDS_PORTS)) {
+ if ((*flags & DFLAG_DIST_MANDATORY) != DFLAG_DIST_MANDATORY) {
EI_TRACE_ERR0("recv_challenge","<- RECV_CHALLENGE peer cannot "
- "handle extended pids and ports");
- erl_errno = EIO;
- goto error;
- }
-
- if (!(*flags & DFLAG_NEW_FLOATS)) {
- EI_TRACE_ERR0("recv_challenge","<- RECV_CHALLENGE peer cannot "
- "handle binary float encoding");
+ "handle all mandatory capabilities");
goto error;
}
@@ -2924,15 +2906,13 @@ static int recv_name(ei_socket_callbacks *cbs, void *ctx,
namelen = get16be(s);
}
- if (!(*flags & DFLAG_EXTENDED_REFERENCES)) {
- EI_TRACE_ERR0("recv_name","<- RECV_NAME peer cannot handle"
- "extended references");
- goto error;
+ if (*flags & DFLAG_MANDATORY_25_DIGEST) {
+ *flags |= DFLAG_DIST_MANDATORY_25;
}
- if (!(*flags & DFLAG_EXTENDED_PIDS_PORTS)) {
+ if ((*flags & DFLAG_DIST_MANDATORY) != DFLAG_DIST_MANDATORY) {
EI_TRACE_ERR0("recv_name","<- RECV_NAME peer cannot "
- "handle extended pids and ports");
+ "handle all mandatory capabilities");
erl_errno = EIO;
goto error;
}
diff --git a/lib/erl_interface/src/connect/ei_connect_int.h b/lib/erl_interface/src/connect/ei_connect_int.h
index 2f9838769c..56cdb5811a 100644
--- a/lib/erl_interface/src/connect/ei_connect_int.h
+++ b/lib/erl_interface/src/connect/ei_connect_int.h
@@ -43,15 +43,9 @@
#include <sys/types.h>
#include <sys/times.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
+#include <time.h>
+#if HAVE_SYS_TIME_H
# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
#include <sys/socket.h>
@@ -90,14 +84,35 @@ typedef EI_ULONGLONG DistFlags;
#define DFLAG_BIG_CREATION 0x40000
#define DFLAG_HANDSHAKE_23 0x1000000
#define DFLAG_UNLINK_ID 0x2000000
-#define DFLAG_RESERVED 0xfc000000
-#define DFLAG_NAME_ME ((DistFlags)0x2 << 32)
+#define DFLAG_MANDATORY_25_DIGEST 0x4000000
+#define DFLAG_RESERVED 0xf8000000
+#define DFLAG_NAME_ME (((DistFlags)0x2) << 32)
#define DFLAG_V4_NC (((DistFlags)0x4) << 32)
/* Control message tags not exposed to user... */
#define ERL_UNLINK_ID 35
#define ERL_UNLINK_ID_ACK 36
+/* Mandatory flags for distribution in OTP 25. */
+#define DFLAG_DIST_MANDATORY_25 (DFLAG_EXTENDED_REFERENCES \
+ | DFLAG_FUN_TAGS \
+ | DFLAG_EXTENDED_PIDS_PORTS \
+ | DFLAG_UTF8_ATOMS \
+ | DFLAG_NEW_FUN_TAGS \
+ | DFLAG_BIG_CREATION \
+ | DFLAG_NEW_FLOATS \
+ | DFLAG_MAP_TAG \
+ | DFLAG_EXPORT_PTR_TAG \
+ | DFLAG_BIT_BINARIES)
+
+/* Mandatory flags for distribution. */
+
+/*
+ * Mandatory flags for distribution. Keep them in sync with
+ * erts/emulator/beam/dist.h.
+ */
+#define DFLAG_DIST_MANDATORY DFLAG_DIST_MANDATORY_25
+
ei_cnode *ei_fd_to_cnode(int fd);
int ei_distversion(int fd);
diff --git a/lib/erl_interface/src/misc/ei_compat.c b/lib/erl_interface/src/misc/ei_compat.c
index e25a1a015d..99d6567a06 100644
--- a/lib/erl_interface/src/misc/ei_compat.c
+++ b/lib/erl_interface/src/misc/ei_compat.c
@@ -35,9 +35,3 @@ ei_set_compat_rel(unsigned rel)
{
compat_rel = rel;
}
-
-int ei_internal_use_21_bitstr_expfun(void)
-{
- return compat_rel < 22;
-}
-
diff --git a/lib/erl_interface/src/misc/ei_internal.h b/lib/erl_interface/src/misc/ei_internal.h
index 5b39e3dc37..781faed556 100644
--- a/lib/erl_interface/src/misc/ei_internal.h
+++ b/lib/erl_interface/src/misc/ei_internal.h
@@ -157,8 +157,6 @@ int ei_init_connect(void);
void ei_trace_printf(const char *name, int level, const char *format, ...);
-int ei_internal_use_21_bitstr_expfun(void);
-
int ei_get_cbs_ctx__(ei_socket_callbacks **cbs, void **ctx, int fd);
#endif /* _EI_INTERNAL_H */
diff --git a/lib/erl_interface/src/misc/show_msg.c b/lib/erl_interface/src/misc/show_msg.c
index db1a386496..336d387113 100644
--- a/lib/erl_interface/src/misc/show_msg.c
+++ b/lib/erl_interface/src/misc/show_msg.c
@@ -29,19 +29,9 @@
#include "eidef.h"
-#ifndef __WIN32__
-# ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-# else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-# endif
-#else
-# include <time.h>
+#include <time.h>
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
#endif
#include "eiext.h"
diff --git a/lib/erl_interface/src/prog/erl_call.c b/lib/erl_interface/src/prog/erl_call.c
index b8e11c3f86..3bebd92474 100644
--- a/lib/erl_interface/src/prog/erl_call.c
+++ b/lib/erl_interface/src/prog/erl_call.c
@@ -61,15 +61,9 @@
#include <time.h>
#include <unistd.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
+#include <time.h>
+#if HAVE_SYS_TIME_H
# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
#endif
diff --git a/lib/erl_interface/test/ei_accept_SUITE.erl b/lib/erl_interface/test/ei_accept_SUITE.erl
index 612d6e1b81..9e72d0af79 100644
--- a/lib/erl_interface/test/ei_accept_SUITE.erl
+++ b/lib/erl_interface/test/ei_accept_SUITE.erl
@@ -43,9 +43,7 @@ init_per_testcase(Case, Config) ->
runner:init_per_testcase(?MODULE, Case, Config).
ei_accept(Config) when is_list(Config) ->
- [ei_accept_do(Config, CR, SI)
- || CR <- [0,21],
- SI <- [default, ussi]],
+ _ = [ei_accept_do(Config, 0, SI) || SI <- [default, ussi]],
ok.
ei_accept_do(Config, CompatRel, SockImpl) ->
@@ -58,34 +56,28 @@ ei_accept_do(Config, CompatRel, SockImpl) ->
EINode = list_to_atom("c42@"++Myname),
io:format("EINode ~p ~n", [EINode]),
- %% We take this opportunity to also test export-funs and bit-strings
- %% with (ugly) tuple fallbacks in OTP 21 and older.
+ %% We take this opportunity to also test export-funs and bit-strings.
%% Test both toward pending connection and established connection.
- RealTerms = [<<1:1>>, fun lists:map/2],
- EncTerms = case CompatRel of
- 0 -> RealTerms;
- 21 -> [{<<128>>,1}, {lists,map}]
- end,
+ RealTerms = [<<1:1>>, fun lists:map/2],
Self = self(),
Funny = fun() -> hello end,
- TermToSend = {call, Self, "Test", Funny, RealTerms},
- TermToGet = {call, Self, "Test", Funny, EncTerms},
+ Terms = {call, Self, "Test", Funny, RealTerms},
Port = 6543,
{ok, ListenFd} = ei_publish(P, Port),
- {any, EINode} ! TermToSend,
+ {any, EINode} ! Terms,
{ok, Fd, Node} = ei_accept(P, ListenFd),
Node = node(),
Got1 = ei_receive(P, Fd),
%% Send again, now without auto-connect
- {any, EINode} ! TermToSend,
+ {any, EINode} ! Terms,
Got2 = ei_receive(P, Fd),
- io:format("Sent ~p~nExp. ~p~nGot1 ~p~nGot2 ~p~n", [TermToSend, TermToGet, Got1, Got2]),
- TermToGet = Got1,
- TermToGet = Got2,
+ io:format("Sent ~p~nExp. ~p~nGot1 ~p~nGot2 ~p~n", [Terms, Terms, Got1, Got2]),
+ Terms = Got1,
+ Terms = Got2,
runner:finish(P),
ok.
diff --git a/lib/erl_interface/test/ei_tmo_SUITE.erl b/lib/erl_interface/test/ei_tmo_SUITE.erl
index 8d8776949c..2db002b5f8 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE.erl
+++ b/lib/erl_interface/test/ei_tmo_SUITE.erl
@@ -31,7 +31,8 @@
ei_send_tmo/1,
ei_send_failure_tmo/1,
ei_connect_unreachable_tmo/0, ei_connect_unreachable_tmo/1,
- ei_recv_tmo/1]).
+ ei_recv_tmo/1,
+ ei_dflags/1]).
suite() ->
[{ct_hooks,[ts_install_cth]},
@@ -48,7 +49,8 @@ groups() ->
Members = [ei_recv_tmo,
ei_accept_tmo,
ei_connect_tmo,
- ei_send_tmo],
+ ei_send_tmo,
+ ei_dflags],
[{default, [], Members},
{ussi, [], Members}].
@@ -61,6 +63,40 @@ init_per_testcase(Case, Config) ->
end_per_testcase(_Case, _Config) ->
ok.
+-define(DFLAG_PUBLISHED, 16#01).
+-define(DFLAG_ATOM_CACHE, 16#02).
+-define(DFLAG_EXTENDED_REFERENCES, 16#04).
+-define(DFLAG_DIST_MONITOR, 16#08).
+-define(DFLAG_FUN_TAGS, 16#10).
+-define(DFLAG_NEW_FUN_TAGS, 16#80).
+-define(DFLAG_EXTENDED_PIDS_PORTS, 16#100).
+-define(DFLAG_EXPORT_PTR_TAG, 16#200).
+-define(DFLAG_BIT_BINARIES, 16#400).
+-define(DFLAG_NEW_FLOATS, 16#800).
+-define(DFLAG_UTF8_ATOMS, 16#10000).
+-define(DFLAG_MAP_TAG, 16#20000).
+-define(DFLAG_BIG_CREATION, 16#40000).
+-define(DFLAG_HANDSHAKE_23, 16#1000000).
+-define(DFLAG_MANDATORY_25_DIGEST, 16#4000000).
+
+%% From OTP R9 extended references are compulsory.
+%% From OTP R10 extended pids and ports are compulsory.
+%% From OTP 20 UTF8 atoms are compulsory.
+%% From OTP 21 NEW_FUN_TAGS is compulsory (no more tuple fallback {fun, ...}).
+%% From OTP 23 BIG_CREATION is compulsory.
+%% From OTP 25 NEW_FLOATS, MAP_TAG, EXPORT_PTR_TAG, and BIT_BINARIES are compulsory.
+-define(COMPULSORY_DFLAGS,
+ (?DFLAG_EXTENDED_REFERENCES bor
+ ?DFLAG_FUN_TAGS bor
+ ?DFLAG_EXTENDED_PIDS_PORTS bor
+ ?DFLAG_UTF8_ATOMS bor
+ ?DFLAG_NEW_FUN_TAGS bor
+ ?DFLAG_BIG_CREATION bor
+ ?DFLAG_NEW_FLOATS bor
+ ?DFLAG_MAP_TAG bor
+ ?DFLAG_EXPORT_PTR_TAG bor
+ ?DFLAG_BIT_BINARIES)).
+
%% Check the framework.
framework_check(Config) when is_list(Config) ->
%%dbg:tracer(),
@@ -221,14 +257,19 @@ ei_connect_unreachable_tmo(Config) when is_list(Config) ->
ei_connect_tmo(Config) when is_list(Config) ->
[begin
- io:format("Test dist version ~p published as ~p\n", [OurVer,OurEpmdVer]),
+ io:format("Test dist version ~p published as ~p\n",
+ [OurVer,OurEpmdVer]),
do_ei_connect_tmo(Config, OurVer, OurEpmdVer)
end
|| OurVer <- lists:seq(?EI_DIST_LOW, ?EI_DIST_HIGH),
OurEpmdVer <- lists:seq(?EI_DIST_LOW, ?EI_DIST_HIGH),
- OurVer >= OurEpmdVer].
+ OurVer >= OurEpmdVer],
+
+ ok.
do_ei_connect_tmo(Config, OurVer, OurEpmdVer) ->
+ Flags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
+
P2 = runner:start(Config, ?connect_tmo),
runner:send_term(P2,{c_nod_connect_tmo_2,
erlang:get_cookie(),
@@ -237,6 +278,7 @@ do_ei_connect_tmo(Config, OurVer, OurEpmdVer) ->
{term, X} = runner:get_term(P2, 10000),
runner:recv_eot(P2),
true = is_integer(X),
+
%% Aborted handshake test...
{_,Host} = split(node()),
OurName = join(cccc,Host),
@@ -263,7 +305,7 @@ do_ei_connect_tmo(Config, OurVer, OurEpmdVer) ->
{hidden,Node} = recv_name(SocketB, OurEpmdVer), % See 1)
send_status(SocketB, ok),
MyChallengeB = gen_challenge(),
- send_challenge(SocketB, OurName, MyChallengeB, OurVer),
+ send_challenge(SocketB, OurName, MyChallengeB, OurVer, Flags),
recv_complement(SocketB, OurVer, OurEpmdVer),
_HisChallengeB = recv_challenge_reply(SocketB,
MyChallengeB,
@@ -288,12 +330,15 @@ ei_accept_tmo(Config) when is_list(Config) ->
ok.
do_ei_accept_tmo(Config, OurVer, AssumedVer) ->
+ Flags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
+
P = runner:start(Config, ?accept_tmo),
runner:send_term(P,{c_nod_som_ingen_kontaktar_1,
kaksmula_som_ingen_bryr_sig_om,
get_group(Config)}),
{term,{-1,ETimedout,ETimedout}} = runner:get_term(P, 10000),
runner:recv_eot(P),
+
P2 = runner:start(Config, ?accept_tmo),
runner:send_term(P2,{c_nod_som_vi_kontaktar_1,
erlang:get_cookie(),
@@ -304,8 +349,14 @@ do_ei_accept_tmo(Config, OurVer, AssumedVer) ->
{term, X} = runner:get_term(P2, 10000),
runner:recv_eot(P2),
true = is_integer(X),
- P3 = runner:start(Config, ?accept_tmo),
- runner:send_term(P3,{c_nod_som_vi_kontaktar_2,
+
+ normal_accept(Config, OurVer, AssumedVer, Flags),
+
+ ok.
+
+normal_accept(Config, OurVer, AssumedVer, Flags) ->
+ P = runner:start(Config, ?accept_tmo),
+ runner:send_term(P,{c_nod_som_vi_kontaktar_2,
erlang:get_cookie(),
get_group(Config)}),
receive after 1000 -> ok end,
@@ -317,7 +368,7 @@ do_ei_accept_tmo(Config, OurVer, AssumedVer) ->
{ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
[{active,false},
{packet,2}]),
- send_name(SocketA,OurName,OurVer,AssumedVer),
+ send_name(SocketA, OurName, OurVer, AssumedVer, Flags),
ok = recv_status(SocketA),
{hidden,_Node,HisChallengeA} = recv_challenge(SocketA,OurVer), % See 1)
_OurChallengeA = gen_challenge(),
@@ -325,9 +376,40 @@ do_ei_accept_tmo(Config, OurVer, AssumedVer) ->
%% Dont do the last two steps of the connection setup...
%% send_challenge_reply(SocketA, OurChallengeA, OurDigestA),
%% ok = recv_challenge_ack(SocketA, OurChallengeA, erlang:get_cookie()),
- {term, {-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000),
- runner:recv_eot(P3),
- gen_tcp:close(SocketA),
+ {term, {-1,ETimedout,ETimedout}} = runner:get_term(P, 10000),
+ runner:recv_eot(P),
+ gen_tcp:close(SocketA).
+
+normal_connect(Config, OurVer, Flags) ->
+ {_,Host} = split(node()),
+ OurName = join(cccc,Host),
+ Node = join(c_nod_connect_tmo_3,Host),
+ LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
+ {ok, Socket} ->
+ Socket;
+ Else ->
+ exit(Else)
+ end,
+ EpmdSocket = epmd_register(OurName, LSocket, OurVer),
+ P3 = runner:start(Config, ?connect_tmo),
+ Cookie = kaksmula_som_ingen_bryr_sig_om,
+ runner:send_term(P3, {c_nod_connect_tmo_3,
+ Cookie,
+ OurName,
+ get_group(Config)}),
+ SocketB = case gen_tcp:accept(LSocket) of
+ {ok, Socket1} ->
+ Socket1;
+ Else2 ->
+ exit(Else2)
+ end,
+ {hidden,Node} = recv_name(SocketB, OurVer),
+ send_status(SocketB, ok),
+ MyChallengeB = gen_challenge(),
+ send_challenge(SocketB, OurName, MyChallengeB, OurVer, Flags),
+ recv_complement(SocketB, OurVer, OurVer),
+ gen_tcp:close(SocketB),
+ gen_tcp:close(EpmdSocket),
ok.
make_node(X) ->
@@ -345,6 +427,25 @@ make_and_check_dummy() ->
list_to_atom("dummy@"++HostNotReachable).
+%% Test that erl_interface sets the appropriate distributions flags.
+ei_dflags(Config) ->
+ AssumedVer = 5,
+ OurVer = 6,
+
+ %% Test compatibility with OTP 24 and earlier.
+ normal_connect(Config, AssumedVer, ?COMPULSORY_DFLAGS),
+ normal_connect(Config, OurVer, ?COMPULSORY_DFLAGS),
+ normal_accept(Config, OurVer, AssumedVer, ?COMPULSORY_DFLAGS),
+ normal_accept(Config, OurVer, OurVer, ?COMPULSORY_DFLAGS),
+
+ %% Test compatibility with future versions.
+ normal_connect(Config, AssumedVer, ?DFLAG_MANDATORY_25_DIGEST),
+ normal_connect(Config, OurVer, ?DFLAG_MANDATORY_25_DIGEST),
+ normal_accept(Config, OurVer, AssumedVer, ?DFLAG_MANDATORY_25_DIGEST),
+ normal_accept(Config, OurVer, OurVer, ?DFLAG_MANDATORY_25_DIGEST),
+
+ ok.
+
%%
%% Stolen from the erl_distribution_wb_test in kernel
%% To be able to do partial handshakes...
@@ -359,18 +460,6 @@ make_and_check_dummy() ->
R
end).
--define(DFLAG_PUBLISHED,1).
--define(DFLAG_ATOM_CACHE,2).
--define(DFLAG_EXTENDED_REFERENCES,4).
--define(DFLAG_EXTENDED_PIDS_PORTS,16#100).
--define(DFLAG_NEW_FLOATS,16#800).
--define(DFLAG_DIST_MONITOR,8).
--define(DFLAG_HANDSHAKE_23,16#1000000).
-
-%% From R9 and forward extended references is compulsory
-%% From 14 and forward new float is compulsory
--define(COMPULSORY_DFLAGS, (?DFLAG_EXTENDED_REFERENCES bor ?DFLAG_EXTENDED_PIDS_PORTS bor ?DFLAG_NEW_FLOATS)).
-
-define(shutdown(X), exit(X)).
-define(int16(X), [((X) bsr 8) band 16#ff, (X) band 16#ff]).
@@ -430,7 +519,8 @@ recv_status(Socket) ->
end.
send_challenge(Socket, Node, Challenge, OurVer) ->
- send_challenge(Socket, Node, Challenge, OurVer, ?COMPULSORY_DFLAGS).
+ DefaultFlags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
+ send_challenge(Socket, Node, Challenge, OurVer, DefaultFlags).
send_challenge(Socket, Node, Challenge, OurVer, Flags) ->
if OurVer =:= 5 ->
@@ -463,6 +553,7 @@ recv_challenge(Socket, OurVer) ->
_Cr3,_Cr2,_Cr1,_Cr0, NL1,NL0 | Rest]} ->
true = (OurVer >= 6),
<<Flags:64>> = <<F7,F6,F5,F4,F3,F2,F1,F0>>,
+ verify_flags(Flags),
Type = flags_to_type(Flags),
NameLen = ?u16(NL1,NL0),
{NodeName,_} = lists:split(NameLen, Rest),
@@ -517,14 +608,11 @@ send_challenge_ack(Socket, Digest) ->
% ?shutdown(bad_challenge_ack)
% end.
-send_name(Socket, MyNode, OurVer, AssumedVer) ->
- Flags = ?COMPULSORY_DFLAGS bor (case OurVer of
- 5 -> 0;
- 6 -> ?DFLAG_HANDSHAKE_23
- end),
- send_name(Socket, MyNode, OurVer, AssumedVer, Flags).
-
-send_name(Socket, MyNode, OurVer, AssumedVer, Flags) ->
+send_name(Socket, MyNode, OurVer, AssumedVer, Flags0) ->
+ Flags = Flags0 bor case OurVer of
+ 5 -> 0;
+ 6 -> ?DFLAG_HANDSHAKE_23
+ end,
NodeName = atom_to_binary(MyNode, latin1),
if AssumedVer =:= 5 ->
?to_port(Socket, [$n,?int16(OurVer),?int32(Flags),NodeName]);
@@ -542,12 +630,15 @@ recv_name(Socket, OurEpmdVer) ->
{ok,[$n, V1,V0, F3,F2,F1,F0 | OtherNode]} ->
5 = OurEpmdVer,
5 = ?u16(V1,V0),
- Type = flags_to_type(?u32(F3,F2,F1,F0)),
+ Flags = ?u32(F3, F2, F1, F0),
+ verify_flags(Flags),
+ Type = flags_to_type(Flags),
{Type, list_to_atom(OtherNode)};
{ok,[$N, F7,F6,F5,F4,F3,F2,F1,F0, _Cr3,_Cr2,_Cr1,_Cr0, NL1, NL0 | Rest]} ->
true = (OurEpmdVer >= 6),
{OtherNode, _Residue} = lists:split(?u16(NL1,NL0), Rest),
<<Flags:64>> = <<F7,F6,F5,F4,F3,F2,F1,F0>>,
+ verify_flags(Flags),
Type = flags_to_type(Flags),
{Type, list_to_atom(OtherNode)};
Res ->
@@ -634,6 +725,16 @@ epmd_register(NodeName, ListenSocket, OurVer) ->
exit(Other)
end.
+verify_flags(Flags) ->
+ RequiredFlags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
+ if
+ Flags band RequiredFlags =:= RequiredFlags ->
+ ok;
+ true ->
+ io:format("Given flags: ~.16.0B\n", [Flags]),
+ io:format("Required flags: ~.16.0B\n", [RequiredFlags]),
+ ct:fail(missing_dflags)
+ end.
%%
%% Utilities
diff --git a/lib/inets/src/inets_app/inets.app.src b/lib/inets/src/inets_app/inets.app.src
index 04158ca1b6..c6a43d4a7b 100644
--- a/lib/inets/src/inets_app/inets.app.src
+++ b/lib/inets/src/inets_app/inets.app.src
@@ -97,5 +97,5 @@
%% If the "new" ssl is used then 'crypto' must be started before inets.
{applications,[kernel,stdlib]},
{mod,{inets_app,[]}},
- {runtime_dependencies, ["stdlib-3.5","ssl-5.3.4","runtime_tools-1.8.14",
- "mnesia-4.12","kernel-3.0","erts-6.0"]}]}.
+ {runtime_dependencies, ["stdlib-3.14","ssl-9.0","runtime_tools-1.8.14",
+ "mnesia-4.12","kernel-6.0","erts-6.0"]}]}.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
index 7ea5d52da7..db56478667 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
@@ -1283,14 +1283,13 @@ public abstract class AbstractConnection extends Thread {
throw new IOException("Unknown remote node type");
}
- if ((apeer.flags & AbstractNode.dFlagExtendedReferences) == 0) {
- throw new IOException(
- "Handshake failed - peer cannot handle extended references");
+ if ((apeer.flags & AbstractNode.dFlagMandatory25Digest) != 0) {
+ apeer.flags |= AbstractNode.mandatoryFlags25;
}
- if ((apeer.flags & AbstractNode.dFlagExtendedPidsPorts) == 0) {
+ if ((apeer.flags & AbstractNode.mandatoryFlags) != AbstractNode.mandatoryFlags) {
throw new IOException(
- "Handshake failed - peer cannot handle extended pids and ports");
+ "Handshake failed - peer cannot handle all mandatory capabilities");
}
} catch (final OtpErlangDecodeException e) {
@@ -1349,14 +1348,13 @@ public abstract class AbstractConnection extends Thread {
"Handshake failed - peer has wrong name: " + hisname);
}
- if ((peer.flags & AbstractNode.dFlagExtendedReferences) == 0) {
- throw new IOException(
- "Handshake failed - peer cannot handle extended references");
+ if ((peer.flags & AbstractNode.dFlagMandatory25Digest) != 0) {
+ peer.flags |= AbstractNode.mandatoryFlags25;
}
- if ((peer.flags & AbstractNode.dFlagExtendedPidsPorts) == 0) {
+ if ((peer.flags & AbstractNode.mandatoryFlags) != AbstractNode.mandatoryFlags) {
throw new IOException(
- "Handshake failed - peer cannot handle extended pids and ports");
+ "Handshake failed - peer cannot handle all mandatory capabilities");
}
} catch (final OtpErlangDecodeException e) {
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
index ce924e4d84..13ee63cb42 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
@@ -95,21 +95,35 @@ public class AbstractNode implements OtpTransportFactory {
static final int dFlagBigCreation = 0x40000;
static final int dFlagHandshake23 = 0x1000000;
static final int dFlagUnlinkId = 0x2000000;
+ static final int dFlagMandatory25Digest = 0x4000000;
static final long dFlagV4PidsRefs = 0x4L << 32;
+ /* Mandatory flags in OTP 25. */
+ static final long mandatoryFlags25 = dFlagExtendedReferences
+ | dFlagFunTags
+ | dFlagExtendedPidsPorts
+ | dFlagUtf8Atoms
+ | dflagNewFunTags
+ | dFlagBigCreation
+ | dFlagNewFloats
+ | dFlagMapTag
+ | dFlagExportPtrTag
+ | dFlagBitBinaries;
+
+ /* Mandatory flags for distribution. Keep them in sync with
+ DFLAG_DIST_MANDATORY in erts/emulator/beam/dist.h. */
+ static final long mandatoryFlags = mandatoryFlags25;
+
int ntype = NTYPE_R6;
int proto = 0; // tcp/ip
int distHigh = 6;
int distLow = 5; // Cannot talk to nodes before R6
int creation = 0;
- long flags = dFlagExtendedReferences | dFlagExtendedPidsPorts
- | dFlagBitBinaries | dFlagNewFloats | dFlagFunTags
- | dflagNewFunTags | dFlagUtf8Atoms | dFlagMapTag
- | dFlagExportPtrTag
- | dFlagBigCreation
- | dFlagHandshake23
- | dFlagUnlinkId
- | dFlagV4PidsRefs;
+ long flags = mandatoryFlags
+ | dFlagHandshake23
+ | dFlagUnlinkId
+ | dFlagV4PidsRefs
+ | dFlagMandatory25Digest;
/* initialize hostname and default cookie */
static {
diff --git a/lib/kernel/doc/src/kernel_app.xml b/lib/kernel/doc/src/kernel_app.xml
index c17b327f32..e659d50ffc 100644
--- a/lib/kernel/doc/src/kernel_app.xml
+++ b/lib/kernel/doc/src/kernel_app.xml
@@ -293,6 +293,22 @@
other distributed Erlang nodes.
See <seemfa marker="gen_tcp#connect/4"><c>gen_tcp:connect/4</c></seemfa>.</p>
</item>
+ <tag><c>{net_ticker_spawn_options, Opts}</c></tag>
+ <item>
+ <marker id="net_ticker_spawn_options"></marker>
+ <p>
+ Defines a list of extra spawn options for net ticker processes. There exist
+ one such process for each connection to another node. A net ticker process is
+ responsible for supervising the connection it is associated with. These
+ processes also execute the distribution handshake protocol when setting up
+ connections. When there is a large number of distribution connections,
+ setting up garbage collection options can be helpful to reduce memory usage.
+ Default is <c>[link, {priority, max}]</c>, and these two options cannot be
+ changed. See the documentation of the
+ <seemfa marker="erts:erlang#spawn_opt/4"><c>erlang:spawn_opt/4</c></seemfa>
+ BIF for information about valid options.
+ </p>
+ </item>
<tag><c>inet_parse_error_log = silent</c></tag>
<item>
<p>If set, no log events are issued when erroneous lines are
diff --git a/lib/kernel/examples/erl_uds_dist/src/erl_uds_dist.erl b/lib/kernel/examples/erl_uds_dist/src/erl_uds_dist.erl
index 44035e8e42..af7a577b20 100644
--- a/lib/kernel/examples/erl_uds_dist/src/erl_uds_dist.erl
+++ b/lib/kernel/examples/erl_uds_dist/src/erl_uds_dist.erl
@@ -432,8 +432,7 @@ accept_loop(Kernel, ListeningSocket) ->
accept_connection(AcceptPid, DistCtrl, MyNode, Allowed, SetupTime) ->
spawn_opt(?MODULE, accept_supervisor,
[self(), AcceptPid, DistCtrl, MyNode, Allowed, SetupTime],
- %% Spawn on max priority
- [link, {priority, max}]).
+ net_ticker_spawn_options()).
accept_supervisor(Kernel, AcceptPid, DistCtrl, MyNode, Allowed, SetupTime) ->
?trace("~p~n", [{?MODULE, accept_connection, self()}]),
@@ -475,6 +474,17 @@ accept_supervisor(Kernel, AcceptPid, DistCtrl, MyNode, Allowed, SetupTime) ->
%% ---------------------------------------------------------------------
+%% Allow to set different spawn options for dist_util processes using
+%% the net_ticker_spawn_options configuration parameter. Default is
+%% [link, {priority, max}] and these two options cannot be changed.
+%% ---------------------------------------------------------------------
+net_ticker_spawn_options() ->
+ Opts = application:get_env(kernel, net_ticker_spawn_options, []),
+ Opts1 = [{priority, max} | proplists:delete(priority, Opts)],
+ [link | proplists:delete(link, Opts1)].
+
+
+%% ---------------------------------------------------------------------
%% Define common values of the handshake data record, defined in
%% kernel/include/dist_util.hrl
%% ---------------------------------------------------------------------
@@ -666,8 +676,7 @@ getopts(ListeningSocket, Options) ->
setup(Node, Type, MyNode, _LongOrShortNames, SetupTime) ->
spawn_opt(?MODULE, setup_supervisor,
[self(), Node, Type, MyNode, SetupTime],
- %% Spawn on max priority
- [link, {priority, max}]).
+ net_ticker_spawn_options()).
setup_supervisor(Kernel, Node, Type, MyNode, SetupTime) ->
?trace("~p~n", [{?MODULE, setup, self(), Node}]),
diff --git a/lib/kernel/include/dist.hrl b/lib/kernel/include/dist.hrl
index 05beaf9a48..7080b60f2e 100644
--- a/lib/kernel/include/dist.hrl
+++ b/lib/kernel/include/dist.hrl
@@ -22,35 +22,54 @@
%% Distribution capabilities flags (corresponds with dist.h).
%%
--define(DFLAG_PUBLISHED,1).
--define(DFLAG_ATOM_CACHE,2).
--define(DFLAG_EXTENDED_REFERENCES,4).
--define(DFLAG_DIST_MONITOR,8).
--define(DFLAG_FUN_TAGS,16#10).
--define(DFLAG_DIST_MONITOR_NAME,16#20).
--define(DFLAG_HIDDEN_ATOM_CACHE,16#40).
--define(DFLAG_NEW_FUN_TAGS,16#80).
--define(DFLAG_EXTENDED_PIDS_PORTS,16#100).
--define(DFLAG_EXPORT_PTR_TAG,16#200).
--define(DFLAG_BIT_BINARIES,16#400).
--define(DFLAG_NEW_FLOATS,16#800).
--define(DFLAG_UNICODE_IO,16#1000).
--define(DFLAG_DIST_HDR_ATOM_CACHE,16#2000).
--define(DFLAG_SMALL_ATOM_TAGS, 16#4000).
--define(DFLAG_UTF8_ATOMS, 16#10000).
--define(DFLAG_MAP_TAG, 16#20000).
--define(DFLAG_BIG_CREATION, 16#40000).
--define(DFLAG_SEND_SENDER, 16#80000).
--define(DFLAG_BIG_SEQTRACE_LABELS, 16#100000).
-%% -define(DFLAG_NO_MAGIC, 16#200000). %% Used internally only
--define(DFLAG_EXIT_PAYLOAD, 16#400000).
--define(DFLAG_FRAGMENTS, 16#00800000).
--define(DFLAG_HANDSHAKE_23, 16#01000000).
--define(DFLAG_RESERVED, 16#fe000000).
--define(DFLAG_SPAWN, 16#100000000).
--define(DFLAG_NAME_ME, 16#200000000).
--define(DFLAG_V4_NC, 16#400000000).
--define(DFLAG_ALIAS, 16#800000000).
+-define(DFLAG_PUBLISHED, 16#01).
+-define(DFLAG_ATOM_CACHE, 16#02).
+-define(DFLAG_EXTENDED_REFERENCES, 16#04).
+-define(DFLAG_DIST_MONITOR, 16#08).
+-define(DFLAG_FUN_TAGS, 16#10).
+-define(DFLAG_DIST_MONITOR_NAME, 16#20).
+-define(DFLAG_HIDDEN_ATOM_CACHE, 16#40).
+-define(DFLAG_NEW_FUN_TAGS, 16#80).
+-define(DFLAG_EXTENDED_PIDS_PORTS, 16#100).
+-define(DFLAG_EXPORT_PTR_TAG, 16#200).
+-define(DFLAG_BIT_BINARIES, 16#400).
+-define(DFLAG_NEW_FLOATS, 16#800).
+-define(DFLAG_UNICODE_IO, 16#1000).
+-define(DFLAG_DIST_HDR_ATOM_CACHE, 16#2000).
+-define(DFLAG_SMALL_ATOM_TAGS, 16#4000).
+-define(DFLAG_UTF8_ATOMS, 16#10000).
+-define(DFLAG_MAP_TAG, 16#20000).
+-define(DFLAG_BIG_CREATION, 16#40000).
+-define(DFLAG_SEND_SENDER, 16#80000).
+-define(DFLAG_BIG_SEQTRACE_LABELS, 16#100000).
+%% -define(DFLAG_NO_MAGIC, 16#200000). %% Used internally only
+-define(DFLAG_EXIT_PAYLOAD, 16#400000).
+-define(DFLAG_FRAGMENTS, 16#00800000).
+-define(DFLAG_HANDSHAKE_23, 16#01000000).
+-define(DFLAG_UNLINK_ID, 16#02000000).
+-define(DFLAG_MANDATORY_25_DIGEST, 16#04000000).
+-define(DFLAG_RESERVED, 16#f8000000).
+
+%% Second 32-bit flag word.
+-define(DFLAG_SPAWN, (16#01 bsl 32)).
+-define(DFLAG_NAME_ME, (16#02 bsl 32)).
+-define(DFLAG_V4_NC, (16#04 bsl 32)).
+-define(DFLAG_ALIAS, (16#08 bsl 32)).
+
+%% The following flags are mandatory in OTP 25. OTP 25 and higher
+%% will accept ?DFLAG_MANDATORY_25_DIGEST as a shorthand for all those
+%% flags.
+-define(MANDATORY_DFLAGS_25,
+ (?DFLAG_EXTENDED_REFERENCES bor
+ ?DFLAG_FUN_TAGS bor
+ ?DFLAG_EXTENDED_PIDS_PORTS bor
+ ?DFLAG_NEW_FUN_TAGS bor
+ ?DFLAG_EXPORT_PTR_TAG bor
+ ?DFLAG_BIT_BINARIES bor
+ ?DFLAG_NEW_FLOATS bor
+ ?DFLAG_UTF8_ATOMS bor
+ ?DFLAG_MAP_TAG bor
+ ?DFLAG_BIG_CREATION)).
%% Also update dflag2str() in ../src/dist_util.erl
%% when adding flags...
@@ -62,3 +81,32 @@
-define(ERL_DIST_VER_LOW, ?ERL_DIST_VER_5).
-define(ERL_DIST_VER_HIGH, ?ERL_DIST_VER_6).
+%%%
+%%% To avoid having to extend the number of distribution flags from 64
+%%% to 128, a scheme for garbage collection of the flags was
+%%% introduced in OTP 25.
+%%%
+%%% In OTP 25, ?DFLAG_MANDATORY_25_DIGEST was introduced as a synonym
+%%% for the flags defined by ?MANDATORY_DFLAGS_25. OTP 25/26 will
+%%% accept the old flags to support communication with 24 and earlier,
+%%% as well as ?DFLAG_MANDATORY_25_DIGEST.
+%%%
+%%% OTP 27 will make ?DFLAG_MANDATORY_25_DIGEST mandatory, meaning that an
+%%% OTP 27 node can only communicate with OTP 25 and higher.
+%%%
+%%% An OTP 27 node will also introduce the new flag
+%%% ?DFLAG_MANDATORY_27_DIGEST:
+%%%
+%%% * If ?DFLAG_MANDATORY_27_DIGEST is set, it means that all bit
+%%% numbers defined by ?MANDATORY_DFLAGS_25, as well as the bit
+%%% number defined by ?DFLAG_MANDATORY_25_DIGEST and any other bits
+%%% made mandatory in OTP 26/27, lose their previous meanings. New
+%%% meanings can then be assigned to those bit numbers as
+%%% needed. (This is for communication between nodes from OTP 27 and
+%%% up.)
+%%%
+%%% * If ?DFLAG_MANDATORY_27_DIGEST is not set, then
+%%% ?DFLAG_MANDATORY_25_DIGEST must be set and all bit numbers
+%%% defined by ?MANDATORY_DFLAGS_25 are ignored. (This is for
+%%% communication between an OTP 27 node and an OTP 25/26 node.)
+%%%
diff --git a/lib/kernel/src/auth.erl b/lib/kernel/src/auth.erl
index 6fb4267eb4..8298175f9f 100644
--- a/lib/kernel/src/auth.erl
+++ b/lib/kernel/src/auth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2018. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/dist_util.erl b/lib/kernel/src/dist_util.erl
index 5930300747..ae2cb9b977 100644
--- a/lib/kernel/src/dist_util.erl
+++ b/lib/kernel/src/dist_util.erl
@@ -124,6 +124,10 @@ dflag2str(?DFLAG_FRAGMENTS) ->
"FRAGMENTS";
dflag2str(?DFLAG_HANDSHAKE_23) ->
"HANDSHAKE_23";
+dflag2str(?DFLAG_UNLINK_ID) ->
+ "UNLINK_ID";
+dflag2str(?DFLAG_MANDATORY_25_DIGEST) ->
+ "MANDATORY_25_DIGEST";
dflag2str(?DFLAG_SPAWN) ->
"SPAWN";
dflag2str(?DFLAG_NAME_ME) ->
@@ -132,8 +136,8 @@ dflag2str(?DFLAG_V4_NC) ->
"V4_NC";
dflag2str(?DFLAG_ALIAS) ->
"ALIAS";
-dflag2str(_) ->
- "UNKNOWN".
+dflag2str(Other) ->
+ lists:flatten(io_lib:format("UNKNOWN<~.16.0B>", [Other])).
adjust_flags(ThisFlags, OtherFlags) ->
@@ -200,7 +204,8 @@ handshake_other_started(#hs_data{request_type=ReqType,
AddFlgs = convert_flags(AddFlgs0),
RejFlgs = convert_flags(RejFlgs0),
ReqFlgs = convert_flags(ReqFlgs0),
- {PreOtherFlags,NodeOrHost,Creation,SendNameVersion} = recv_name(HSData0),
+ {PreOtherFlags0,NodeOrHost,Creation,SendNameVersion} = recv_name(HSData0),
+ PreOtherFlags = expand_mandatory_25_flag(PreOtherFlags0),
EDF = erts_internal:get_dflags(),
PreThisFlags = make_this_flags(ReqType, AddFlgs, RejFlgs, NodeOrHost, EDF,
PreOtherFlags),
@@ -235,6 +240,15 @@ handshake_other_started(#hs_data{request_type=ReqType,
handshake_other_started(OldHsData) when element(1,OldHsData) =:= hs_data ->
handshake_other_started(convert_old_hsdata(OldHsData)).
+expand_mandatory_25_flag(Flags) ->
+ if
+ Flags band ?DFLAG_MANDATORY_25_DIGEST =/= 0 ->
+ %% From OTP 25, the single flag ?DFLAG_MANDATORY_25_DIGEST can
+ %% replace all the flags in ?MANDATORY_DFLAGS_25.
+ Flags bor ?MANDATORY_DFLAGS_25;
+ true ->
+ Flags
+ end.
%%
%% Check mandatory flags...
diff --git a/lib/kernel/src/inet_db.erl b/lib/kernel/src/inet_db.erl
index e2d9b25868..01912fdb57 100644
--- a/lib/kernel/src/inet_db.erl
+++ b/lib/kernel/src/inet_db.erl
@@ -67,11 +67,11 @@
-export([res_option/1, res_option/2, res_check_option/2]).
-export([socks_option/1]).
-export([getbyname/2, get_searchlist/0]).
--export([gethostbyaddr/1]).
--export([res_gethostbyaddr/2,res_hostent_by_domain/3]).
+-export([gethostbyaddr/2]).
+-export([res_gethostbyaddr/3,res_hostent_by_domain/3]).
-export([res_update_conf/0, res_update_hosts/0]).
%% inet help functions
--export([tolower/1]).
+-export([tolower/1, eq_domains/2]).
-ifdef(DEBUG).
-define(dbg(Fmt, Args), io:format(Fmt, Args)).
-else.
@@ -584,19 +584,35 @@ db_get(Name) ->
end.
add_rr(RR) ->
- call({add_rr, RR}).
+ %% Questionable if we need to support this;
+ %% not used by OTP
+ %%
+ res_cache_answer([RR]).
add_rr(Domain, Class, Type, TTL, Data) ->
- call({add_rr, dns_rr_add(Domain, Class, Type, TTL, Data)}).
+ %% Only used from a test suite within OTP,
+ %% can be optimized to create the whole record inline
+ %% and call {add_rrs, [RR]} directly
+ RR =
+ #dns_rr{
+ domain = Domain, class = Class, type = Type,
+ ttl = TTL, data = Data},
+ res_cache_answer([RR]).
del_rr(Domain, Class, Type, Data) ->
- call({del_rr, dns_rr_match(Domain, Class, Type, Data)}).
-
-res_cache_answer(Rec) ->
- lists:foreach( fun(RR) -> add_rr(RR) end, Rec#dns_rec.anlist).
+ call({del_rr, dns_rr_match(tolower(Domain), Class, Type, Data)}).
-
+res_cache_answer(RRs) ->
+ TM = times(),
+ call(
+ {add_rrs,
+ [RR#dns_rr{
+ bm = tolower(RR#dns_rr.domain), tm = TM, cnt = TM}
+ || #dns_rr{ttl = TTL} = RR <- RRs,
+ %% Do not cache TTL 0 entries - they are only used
+ %% to resolve the current lookup
+ 0 < TTL]}).
%%
%% getbyname (cache version)
@@ -638,6 +654,34 @@ get_searchlist() ->
end.
+%%
+%% hostent_by_domain (cache version)
+%%
+hostent_by_domain(Domain, Type) ->
+ ?dbg("hostent_by_domain: ~p~n", [Domain]),
+ case resolve_cnames(stripdot(Domain), Type, fun lookup_cache_data/2) of
+ {error, _} = Error ->
+ Error;
+ {D, Addrs, Aliases} ->
+ {ok, make_hostent(D, Addrs, Aliases, Type)}
+ end.
+
+%%
+%% hostent_by_domain (newly resolved version)
+%% match data field directly and cache RRs.
+%%
+res_hostent_by_domain(Domain, Type, Rec) ->
+ RRs = res_filter_rrs(Type, Rec#dns_rec.anlist),
+ ?dbg("res_hostent_by_domain: ~p - ~p~n", [Domain, RRs]),
+ LookupFun = res_lookup_fun(RRs),
+ case resolve_cnames(stripdot(Domain), Type, LookupFun) of
+ {error, _} = Error ->
+ Error;
+ {D, Addrs, Aliases} ->
+ res_cache_answer(RRs),
+ {ok, make_hostent(D, Addrs, Aliases, Type)}
+ end.
+
make_hostent(Name, Addrs, Aliases, ?S_A) ->
#hostent {
h_name = Name,
@@ -664,149 +708,114 @@ make_hostent(Name, Datas, Aliases, Type) ->
h_aliases = Aliases
}.
-hostent_by_domain(Domain, Type) ->
- ?dbg("hostent_by_domain: ~p~n", [Domain]),
- hostent_by_domain(stripdot(Domain), [], [], Type).
-hostent_by_domain(Domain, Aliases, LAliases, Type) ->
- case lookup_type(Domain, Type) of
- [] ->
- case lookup_cname(Domain) of
- [] ->
- {error, nxdomain};
- [CName | _] ->
- LDomain = tolower(Domain),
- case lists:member(CName, [LDomain | LAliases]) of
- true ->
- {error, nxdomain};
- false ->
- hostent_by_domain(CName, [Domain | Aliases],
- [LDomain | LAliases], Type)
- end
- end;
- Addrs ->
- {ok, make_hostent(Domain, Addrs, Aliases, Type)}
- end.
-
-%% lookup address record
-lookup_type(Domain, Type) ->
- [R#dns_rr.data || R <- lookup_rr(Domain, in, Type) ].
-%% lookup canonical name
-lookup_cname(Domain) ->
- [R#dns_rr.data || R <- lookup_rr(Domain, in, ?S_CNAME) ].
+res_filter_rrs(Type, RRs) ->
+ [RR#dns_rr{bm = tolower(N)} ||
+ #dns_rr{
+ domain = N,
+ class = in,
+ type = T} = RR <- RRs,
+ T =:= Type orelse T =:= ?S_CNAME].
-lookup_cname(Domain, Type) ->
- case Type of
- a -> [];
- aaaa -> [];
- cname -> lookup_cname(Domain);
- _ -> []
+res_lookup_fun(RRs) ->
+ fun (LcDomain, Type) ->
+ [Data
+ || #dns_rr{bm = LcD, type = T, data = Data}
+ <- RRs,
+ LcD =:= LcDomain,
+ T =:= Type]
end.
-%% lookup resource record
-lookup_rr(Domain, Class, Type) ->
- match_rr(dns_rr_match(tolower(Domain), Class, Type)).
-
-%%
-%% hostent_by_domain (newly resolved version)
-%% match data field directly and cache RRs.
-%%
-res_hostent_by_domain(Domain, Type, Rec) ->
- RRs = lists:map(fun lower_rr/1, Rec#dns_rec.anlist),
- res_cache_answer(Rec#dns_rec{anlist = RRs}),
- ?dbg("res_hostent_by_domain: ~p - ~p~n", [Domain, RRs]),
- res_hostent_by_domain(stripdot(Domain), [], [], Type, RRs).
-
-res_hostent_by_domain(Domain, Aliases, LAliases, Type, RRs) ->
- LDomain = tolower(Domain),
- case res_lookup_type(LDomain, Type, RRs) of
- [] ->
- case res_lookup_type(LDomain, ?S_CNAME, RRs) of
- [] ->
- {error, nxdomain};
- [CName | _] ->
- case lists:member(tolower(CName), [LDomain | LAliases]) of
- true ->
- {error, nxdomain};
- false ->
- res_hostent_by_domain(CName, [Domain | Aliases],
- [LDomain | LAliases], Type,
- RRs)
- end
- end;
- Addrs ->
- {ok, make_hostent(Domain, Addrs, Aliases, Type)}
+resolve_cnames(Domain, Type, LookupFun) ->
+ resolve_cnames(Domain, Type, LookupFun, tolower(Domain), [], []).
+
+resolve_cnames(Domain, Type, LookupFun, LcDomain, Aliases, LcAliases) ->
+ case LookupFun(LcDomain, Type) of
+ [] ->
+ case LookupFun(LcDomain, ?S_CNAME) of
+ [] ->
+ %% Did not find neither Type nor CNAME record
+ {error, nxdomain};
+ [CName] ->
+ LcCname = tolower(CName),
+ case lists:member(LcCname, [LcDomain | LcAliases]) of
+ true ->
+ %% CNAME loop
+ {error, nxdomain};
+ false ->
+ %% Repeat with the (more) canonical domain name
+ resolve_cnames(
+ CName, Type, LookupFun, LcCname,
+ [Domain | Aliases], [LcDomain, LcAliases])
+ end;
+ [_ | _] = _CNames ->
+ ?dbg("resolve_cnames duplicate cnames=~p~n", [_CNames]),
+ {error, nxdomain}
+ end;
+ [_ | _] = Results ->
+ {Domain, Results, Aliases}
end.
-%% newly resolved lookup address record
-res_lookup_type(Domain,Type,RRs) ->
- [R#dns_rr.data || R <- RRs,
- R#dns_rr.domain =:= Domain,
- R#dns_rr.type =:= Type].
%%
%% gethostbyaddr (cache version)
%% match data field directly
%%
-gethostbyaddr(IP) ->
- case dnip(IP) of
- {ok, {IP1, HType, HLen, DnIP}} ->
- RRs = match_rr(dns_rr_match(DnIP, in, ptr)),
- ent_gethostbyaddr(RRs, IP1, HType, HLen);
- Error -> Error
+gethostbyaddr(Domain, IP) ->
+ ?dbg("gethostbyaddr: ~p~n", [IP]),
+ case resolve_cnames(Domain, ?S_PTR, fun lookup_cache_data/2) of
+ {error, _} = Error ->
+ Error;
+ {_D, Domains, _Aliases} ->
+ ent_gethostbyaddr(Domains, IP)
end.
%%
%% res_gethostbyaddr (newly resolved version)
%% match data field directly and cache RRs.
%%
-res_gethostbyaddr(IP, Rec) ->
- {ok, {IP1, HType, HLen}} = dnt(IP),
- RRs = lists:map(fun lower_rr/1, Rec#dns_rec.anlist),
- res_cache_answer(Rec#dns_rec{anlist = RRs}),
- ent_gethostbyaddr(Rec#dns_rec.anlist, IP1, HType, HLen).
-
-ent_gethostbyaddr(RRs, IP, AddrType, Length) ->
- case RRs of
- [] -> {error, nxdomain};
- [RR|TR] ->
- %% debug
- if TR =/= [] ->
- ?dbg("gethostbyaddr found extra=~p~n", [TR]);
- true -> ok
- end,
- Type = RR#dns_rr.type,
- Domain = RR#dns_rr.data,
- H = #hostent { h_name = Domain,
- h_aliases = lookup_cname(Domain, Type),
- h_addr_list = [IP],
- h_addrtype = AddrType,
- h_length = Length },
- {ok, H}
- end.
-
-dnip(IP) ->
- case dnt(IP) of
- {ok,{IP1 = {A,B,C,D}, inet, HLen}} ->
- {ok,{IP1, inet, HLen, dn_in_addr_arpa(A,B,C,D)}};
- {ok,{IP1 = {A,B,C,D,E,F,G,H}, inet6, HLen}} ->
- {ok,{IP1, inet6, HLen, dn_ip6_int(A,B,C,D,E,F,G,H)}};
- _ ->
- {error, formerr}
+res_gethostbyaddr(Domain, IP, Rec) ->
+ RRs = res_filter_rrs(?S_PTR, Rec#dns_rec.anlist),
+ ?dbg("res_gethostbyaddr: ~p - ~p~n", [IP, RRs]),
+ LookupFun = res_lookup_fun(RRs),
+ case resolve_cnames(Domain, ?S_PTR, LookupFun) of
+ {error, _} = Error ->
+ Error;
+ {_D, Domains, _Aliases} ->
+ case ent_gethostbyaddr(Domains, IP) of
+ {ok, _HEnt} = Result ->
+ res_cache_answer(RRs),
+ Result;
+ {error, _} = Error ->
+ Error
+ end
end.
+ent_gethostbyaddr([Domain], IP) ->
+ HEnt =
+ if
+ tuple_size(IP) =:= 4 ->
+ #hostent{
+ h_name = Domain,
+ h_aliases = [],
+ h_addr_list = [IP],
+ h_addrtype = inet,
+ h_length = 4};
+ tuple_size(IP) =:= 8 ->
+ #hostent{
+ h_name = Domain,
+ h_aliases = [],
+ h_addr_list = [IP],
+ h_addrtype = inet6,
+ h_length = 16}
+ end,
+ {ok, HEnt};
+ent_gethostbyaddr([_ | _] = _Domains, _IP) ->
+ ?dbg("gethostbyaddr duplicate domains=~p~n", [_Domains]),
+ {error, nxdomain}.
-dnt(IP = {A,B,C,D}) when ?ip(A,B,C,D) ->
- {ok, {IP, inet, 4}};
-dnt({0,0,0,0,0,16#ffff,G,H}) when is_integer(G+H) ->
- A = G div 256, B = G rem 256, C = H div 256, D = H rem 256,
- {ok, {{A,B,C,D}, inet, 4}};
-dnt(IP = {A,B,C,D,E,F,G,H}) when ?ip6(A,B,C,D,E,F,G,H) ->
- {ok, {IP, inet6, 16}};
-dnt(_) ->
- {error, formerr}.
%%
%% Register socket Modules
@@ -911,7 +920,7 @@ init([]) ->
end,
Db = ets:new(inet_db, [public, named_table]),
reset_db(Db),
- CacheOpts = [public, bag, {keypos,#dns_rr.domain}, named_table],
+ CacheOpts = [public, bag, {keypos,#dns_rr.bm}, named_table],
Cache = ets:new(inet_cache, CacheOpts),
HostsByname = ets:new(inet_hosts_byname, [named_table]),
HostsByaddr = ets:new(inet_hosts_byaddr, [named_table]),
@@ -999,10 +1008,9 @@ handle_call(Request, From, #state{db=Db}=State) ->
IP),
{reply, ok, State};
- {add_rr, RR} when is_record(RR, dns_rr) ->
- ?dbg("add_rr: ~p~n", [RR]),
- do_add_rr(RR, Db, State),
- {reply, ok, State};
+ {add_rrs, RRs} ->
+ ?dbg("add_rrs: ~p~n", [RRs]),
+ {reply, do_add_rrs(RRs, Db, State), State};
{del_rr, RR} when is_record(RR, dns_rr) ->
Cache = State#state.cache,
@@ -1646,35 +1654,40 @@ is_reqname(_) -> false.
%% #dns_rr.cnt is used to store the access time
%% instead of number of accesses.
%%
-do_add_rr(RR, Db, State) ->
+do_add_rrs(RRs, Db, State) ->
CacheDb = State#state.cache,
- TM = times(),
- case alloc_entry(Db, CacheDb, TM) of
+ do_add_rrs(RRs, Db, State, CacheDb).
+
+do_add_rrs([], _Db, _State, _CacheDb) ->
+ ok;
+do_add_rrs([RR | RRs], Db, State, CacheDb) ->
+ case alloc_entry(Db, CacheDb, #dns_rr.tm) of
true ->
%% Add to cache
+ %%
#dns_rr{
- domain = Domain, class = Class, type = Type,
+ bm = LcDomain, class = Class, type = Type,
data = Data} = RR,
DeleteRRs =
ets:match_object(
- CacheDb, dns_rr_match(Domain, Class, Type, Data)),
- InsertRR = RR#dns_rr{tm = TM, cnt = TM},
+ CacheDb, dns_rr_match(LcDomain, Class, Type, Data)),
%% Insert before delete to always have an RR present.
%% Watch out to not delete what we insert.
- case lists:member(InsertRR, DeleteRRs) of
+ case lists:member(RR, DeleteRRs) of
true ->
_ = [ets:delete_object(CacheDb, DelRR) ||
DelRR <- DeleteRRs,
- DelRR =/= InsertRR],
- true;
+ DelRR =/= RR],
+ ok;
false ->
- ets:insert(CacheDb, InsertRR),
+ ets:insert(CacheDb, RR),
_ = [ets:delete_object(CacheDb, DelRR) ||
DelRR <- DeleteRRs],
- true
- end;
+ ok
+ end,
+ do_add_rrs(RRs, Db, State, CacheDb);
false ->
- false
+ ok
end.
@@ -1698,24 +1711,21 @@ dns_rr_match_cnt(Cnt) ->
domain = '_', class = '_', type = '_', data = '_',
cnt = Cnt, tm = '_', ttl = '_', bm = '_', func = '_'}.
%%
-dns_rr_match(Domain, Class, Type) ->
+dns_rr_match(LcDomain, Class, Type) ->
#dns_rr{
- domain = Domain, class = Class, type = Type, data = '_',
- cnt = '_', tm = '_', ttl = '_', bm = '_', func = '_'}.
+ domain = '_', class = Class, type = Type, data = '_',
+ cnt = '_', tm = '_', ttl = '_', bm = LcDomain, func = '_'}.
%%
-dns_rr_match(Domain, Class, Type, Data) ->
+dns_rr_match(LcDomain, Class, Type, Data) ->
#dns_rr{
- domain = Domain, class = Class, type = Type, data = Data,
- cnt = '_', tm = '_', ttl = '_', bm = '_', func = '_'}.
+ domain = '_', class = Class, type = Type, data = Data,
+ cnt = '_', tm = '_', ttl = '_', bm = LcDomain, func = '_'}.
-%% RR creation
--compile({inline, [dns_rr_add/5]}).
-%%
-dns_rr_add(Domain, Class, Type, TTL, Data) ->
- #dns_rr{
- domain = Domain, class = Class, type = Type,
- ttl = TTL, data = Data}.
+lookup_cache_data(LcDomain, Type) ->
+ [Data
+ || #dns_rr{data = Data}
+ <- match_rr(dns_rr_match(LcDomain, in, Type))].
%% We are simultaneously updating the table from all clients
%% and the server, so we might get duplicate recource records
@@ -1724,8 +1734,7 @@ dns_rr_add(Domain, Class, Type, TTL, Data) ->
%%
%% Look up all matching objects. The still valid ones
%% should be returned, and updated with a new cnt time.
-%% All expired ones should be deleted. We count TTL 0
-%% RRs as valid but immediately expired.
+%% All expired ones should be deleted.
%%
match_rr(MatchRR) ->
CacheDb = inet_cache,
@@ -1742,12 +1751,6 @@ match_rr(CacheDb, [RR | RRs], Time, ResultRRs, InsertRRs, DeleteRRs) ->
%%
#dns_rr{ttl = TTL, tm = TM, cnt = Cnt} = RR,
if
- TTL =:= 0 ->
- %% Valid, immediately expired; return and delete
- Key = match_rr_key(RR),
- match_rr(
- CacheDb, RRs, Time,
- ResultRRs#{Key => RR}, InsertRRs, [RR | DeleteRRs]);
TM + TTL < Time ->
%% Expired, delete
match_rr(
@@ -1774,16 +1777,10 @@ match_rr(CacheDb, [RR | RRs], Time, ResultRRs, InsertRRs, DeleteRRs) ->
-compile({inline, [match_rr_key/1]}).
match_rr_key(
- #dns_rr{domain = Domain, class = Class, type = Type, data = Data}) ->
- {Domain, Class, Type, Data}.
+ #dns_rr{bm = LcDomain, class = Class, type = Type, data = Data}) ->
+ {LcDomain, Class, Type, Data}.
-%% Lowercase the domain name before storage.
-%%
-lower_rr(#dns_rr{domain=Domain}=RR) when is_list(Domain) ->
- RR#dns_rr { domain = tolower(Domain) };
-lower_rr(RR) -> RR.
-
%%
%% Case fold upper-case to lower-case according to RFC 4343
%% "Domain Name System (DNS) Case Insensitivity Clarification".
@@ -1792,32 +1789,70 @@ lower_rr(RR) -> RR.
%% to much on stdlib. Furthermore string:to_lower/1
%% does not follow RFC 4343.
%%
-tolower([]) -> [];
-tolower([C|Cs]) when is_integer(C) ->
- if C >= $A, C =< $Z ->
- [(C-$A)+$a|tolower(Cs)];
- true ->
- [C|tolower(Cs)]
+tolower(Domain) ->
+ case rfc_4343_lc(Domain) of
+ ok ->
+ %% Optimization for already lowercased domain
+ Domain;
+ LcDomain ->
+ LcDomain
end.
-dn_ip6_int(A,B,C,D,E,F,G,H) ->
- dnib(H) ++ dnib(G) ++ dnib(F) ++ dnib(E) ++
- dnib(D) ++ dnib(C) ++ dnib(B) ++ dnib(A) ++ "ip6.int".
+rfc_4343_lc([]) -> ok; % Optimization for already lowercased domain
+rfc_4343_lc([C | Cs]) when is_integer(C), 0 =< C, C =< 16#10FFFF ->
+ if
+ $A =< C, C =< $Z ->
+ [(C - $A) + $a |
+ case rfc_4343_lc(Cs) of
+ ok ->
+ Cs;
+ LCs ->
+ LCs
+ end];
+ true ->
+ case rfc_4343_lc(Cs) of
+ ok ->
+ ok;
+ LCs ->
+ [C | LCs]
+ end
+ end.
-dn_in_addr_arpa(A,B,C,D) ->
- integer_to_list(D) ++ "." ++
- integer_to_list(C) ++ "." ++
- integer_to_list(B) ++ "." ++
- integer_to_list(A) ++ ".in-addr.arpa".
-dnib(X) ->
- [hex(X), $., hex(X bsr 4), $., hex(X bsr 8), $., hex(X bsr 12), $.].
+%% Case insensitive domain name comparison according to RFC 4343
+%% "Domain Name System (DNS) Case Insensitivity Clarification",
+%% i.e regard $a through $z as equal to $A through $Z.
+%%
+eq_domains([A | As], [B | Bs]) ->
+ if
+ is_integer(A), 0 =< A, A =< 16#10FFFF,
+ is_integer(B), 0 =< B, B =< 16#10FFFF ->
+ %% An upper bound of 255 would be right right now,
+ %% but this algorithm works for any integer. That
+ %% guard just gives the compiler the opportuinity
+ %% to optimize bit operations for machine word size,
+ %% so we might as well use the Unicode upper bound instead.
+ Xor = (A bxor B),
+ if
+ Xor =:= 0 ->
+ eq_domains(As, Bs);
+ Xor =:= ($A bxor $a) ->
+ And = (A band B),
+ if
+ ($A band $a) =< And, And =< ($Z band $z) ->
+ eq_domains(As, Bs);
+ true ->
+ false
+ end;
+ true ->
+ false
+ end
+ end;
+eq_domains([], []) ->
+ true;
+eq_domains(As, Bs) when is_list(As), is_list(Bs) ->
+ false.
-hex(X) ->
- X4 = (X band 16#f),
- if X4 < 10 -> X4 + $0;
- true -> (X4-10) + $a
- end.
%% Strip trailing dot, do not produce garbage unless necessary.
%%
diff --git a/lib/kernel/src/inet_dns.hrl b/lib/kernel/src/inet_dns.hrl
index 04ccb15b93..0b313f3bef 100644
--- a/lib/kernel/src/inet_dns.hrl
+++ b/lib/kernel/src/inet_dns.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2020. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -190,9 +190,11 @@
cnt = 0, %% access count
ttl = 0, %% time to live
data = [], %% raw data
- %%
+ %%
tm, %% creation time
- bm = [], %% Bitmap storing domain character case information.
+ bm = "", %% Used to be defined as:
+ %% Bitmap storing domain character case information
+ %% but now; Case normalized domain
func = false %% Optional function calculating the data field.
}).
diff --git a/lib/kernel/src/inet_res.erl b/lib/kernel/src/inet_res.erl
index 4e71944492..fda656831e 100644
--- a/lib/kernel/src/inet_res.erl
+++ b/lib/kernel/src/inet_res.erl
@@ -355,40 +355,42 @@ gethostbyaddr(IP,Timeout) ->
_ = inet:stop_timer(Timer),
Res.
-gethostbyaddr_tm({A,B,C,D} = IP, Timer) when ?ip(A,B,C,D) ->
- inet_db:res_update_conf(),
- case inet_db:gethostbyaddr(IP) of
- {ok, HEnt} -> {ok, HEnt};
- _ -> res_gethostbyaddr(dn_in_addr_arpa(A,B,C,D), IP, Timer)
- end;
-gethostbyaddr_tm({A,B,C,D,E,F,G,H} = IP, Timer) when ?ip6(A,B,C,D,E,F,G,H) ->
- inet_db:res_update_conf(),
- case inet_db:gethostbyaddr(IP) of
- {ok, HEnt} -> {ok, HEnt};
- _ -> res_gethostbyaddr(dn_ip6_int(A,B,C,D,E,F,G,H), IP, Timer)
- end;
-gethostbyaddr_tm(Addr,Timer) when is_list(Addr) ->
+gethostbyaddr_tm(Addr, Timer) when is_atom(Addr) ->
+ gethostbyaddr_tm(atom_to_list(Addr), Timer);
+gethostbyaddr_tm(Addr, Timer) when is_list(Addr) ->
case inet_parse:address(Addr) of
- {ok, IP} -> gethostbyaddr_tm(IP,Timer);
+ {ok, IP} -> gethostbyaddr_tm(IP, Timer);
_Error -> {error, formerr}
end;
-gethostbyaddr_tm(Addr,Timer) when is_atom(Addr) ->
- gethostbyaddr_tm(atom_to_list(Addr),Timer);
-gethostbyaddr_tm(_,_) -> {error, formerr}.
-
-%%
-%% Send the gethostbyaddr query to:
-%% 1. the list of normal names servers
-%% 2. the list of alternative name servers
-%%
-res_gethostbyaddr(Addr, IP, Timer) ->
- case res_query(Addr, in, ptr, [], Timer) of
- {ok, Rec} ->
- inet_db:res_gethostbyaddr(IP, Rec);
- {error,{qfmterror,_}} -> {error,einval};
- {error,{Reason,_}} -> {error,Reason};
- Error ->
- Error
+gethostbyaddr_tm(IP, Timer) ->
+ %% The call to norm_ip/1 here translates a lookup of
+ %% ::ffff:A.B.C.D (AAAA in ...ip6.arpa) into a plain
+ %% A.B.C.D (A in ...in-addr.arpa) lookup, and pretends
+ %% the result as if it was from the original IPv6 lookup
+ %%
+ case dn_ip(norm_ip(IP)) of
+ {error, _} = Error ->
+ Error;
+ Name ->
+ %% Try cached first
+ inet_db:res_update_conf(),
+ case inet_db:gethostbyaddr(Name, IP) of
+ {ok, _HEnt} = Result ->
+ Result;
+ {error, nxdomain} ->
+ %% Do a resolver lookup
+ case res_query(Name, in, ?S_PTR, [], Timer) of
+ {ok, Rec} ->
+ %% Process and cache DNS Record
+ inet_db:res_gethostbyaddr(Name, IP, Rec);
+ {error,{qfmterror,_}} ->
+ {error,einval};
+ {error,{Reason,_}} ->
+ {error,Reason};
+ Error ->
+ Error
+ end
+ end
end.
%% --------------------------------------------------------------------------
@@ -479,12 +481,17 @@ getbyname_tm(Name, Type, Timer) when is_list(Name) ->
case type_p(Type) of
true ->
case inet_parse:visible_string(Name) of
- false -> {error, formerr};
+ false ->
+ {error, formerr};
true ->
+ %% Try cached first
inet_db:res_update_conf(),
case inet_db:getbyname(Name, Type) of
- {ok, HEnt} -> {ok, HEnt};
- _ -> res_getbyname(Name, Type, Timer)
+ {ok, HEnt} ->
+ {ok, HEnt};
+ _ ->
+ %% Do a resolver lookup
+ res_getbyname(Name, Type, Timer)
end
end;
false ->
@@ -577,6 +584,7 @@ res_getby_search(_Name, [], Reason,_,_) ->
res_getby_query(Name, Type, Timer) ->
case res_query(Name, in, Type, [], Timer) of
{ok, Rec} ->
+ %% Process and cache DNS Record
inet_db:res_hostent_by_domain(Name, Type, Rec);
{error,{qfmterror,_}} -> {error,einval};
{error,{Reason,_}} -> {error,Reason};
@@ -586,6 +594,7 @@ res_getby_query(Name, Type, Timer) ->
res_getby_query(Name, Type, Timer, NSs) ->
case res_query(Name, in, Type, [], Timer, NSs) of
{ok, Rec} ->
+ %% Process and cache DNS Record
inet_db:res_hostent_by_domain(Name, Type, Rec);
{error,{qfmterror,_}} -> {error,einval};
{error,{Reason,_}} -> {error,Reason};
@@ -649,6 +658,7 @@ make_query(Dname, Class, Type, Opts) ->
make_query(Dname, Class, Type, Options, Edns) ->
Id = inet_db:res_option(next_id),
Recurse = Options#options.recurse,
+ RD = Recurse =:= 1 orelse Recurse =:= true, % (0 | 1 | true | false)
ARList = case Edns of
false -> [];
_ ->
@@ -656,17 +666,18 @@ make_query(Dname, Class, Type, Options, Edns) ->
[#dns_rr_opt{udp_payload_size=PSz,
version=Edns}]
end,
- Msg = #dns_rec{header=#dns_header{id=Id,
+ Msg = #dns_rec{header=#dns_header{id=Id,
+ qr=false,
opcode='query',
- rd=Recurse,
+ rd=RD,
rcode=?NOERROR},
- qdlist=[#dns_query{domain=Dname,
- type=Type,
- class=Class}],
+ qdlist=[#dns_query{domain=Dname,
+ type=Type,
+ class=Class}],
arlist=ARList},
?verbose(Options#options.verbose, "Query: ~p~n", [dns_msg(Msg)]),
Buffer = inet_dns:encode(Msg),
- {Id, Buffer}.
+ {Msg, Buffer}.
%% --------------------------------------------------------------------------
%% socket helpers
@@ -820,13 +831,13 @@ query_nss_edns(
#q{options =
#options{
udp_payload_size = PSz}=Options,
- edns = {Id,Buffer}}=Q,
+ edns = EDNSQuery}=Q,
[NsSpec|NSs], Timer, Retry, I, S_0, Reason, RetryNSs) ->
%%
{IP,Port} = NS = servfail_retry_wait(NsSpec),
{S,Result} =
query_ns(
- S_0, Id, Buffer, IP, Port, Timer, Retry, I, Options, PSz),
+ S_0, EDNSQuery, IP, Port, Timer, Retry, I, Options, PSz),
case Result of
{error,{E,_}}
when E =:= qfmterror;
@@ -848,19 +859,21 @@ query_nss_edns(
end.
query_nss_dns(
- #q{dns = Qdns}=Q_0,
+ #q{dns = DNSQuery_0}=Q_0,
[NsSpec|NSs], Timer, Retry, I, S_0, Reason, RetryNSs) ->
%%
{IP,Port} = NS = servfail_retry_wait(NsSpec),
#q{options = Options,
- dns = {Id,Buffer}}=Q =
+ dns = DNSQuery}=Q =
if
- is_function(Qdns, 0) -> Q_0#q{dns=Qdns()};
- true -> Q_0
+ is_function(DNSQuery_0, 0) ->
+ Q_0#q{dns=DNSQuery_0()};
+ true ->
+ Q_0
end,
{S,Result} =
query_ns(
- S_0, Id, Buffer, IP, Port, Timer, Retry, I, Options, ?PACKETSZ),
+ S_0, DNSQuery, IP, Port, Timer, Retry, I, Options, ?PACKETSZ),
query_nss_result(
Q, NSs, Timer, Retry, I, S, Reason, RetryNSs, NS, Result).
@@ -952,14 +965,14 @@ query_retries_error(#q{options=#options{nxdomain_reply=NxReply}}, S, Reason) ->
end.
-query_ns(S0, Id, Buffer, IP, Port, Timer, Retry, I,
+query_ns(S0, {Msg, Buffer}, IP, Port, Timer, Retry, I,
#options{timeout=Tm,usevc=UseVC,verbose=Verbose},
PSz) ->
case UseVC orelse iolist_size(Buffer) > PSz of
true ->
TcpTimeout = inet:timeout(Tm*5, Timer),
{S0,
- query_tcp(TcpTimeout, Id, Buffer, IP, Port, Verbose)};
+ query_tcp(TcpTimeout, Msg, Buffer, IP, Port, Verbose)};
false ->
case udp_open(S0, IP) of
{ok,S} ->
@@ -967,13 +980,13 @@ query_ns(S0, Id, Buffer, IP, Port, Timer, Retry, I,
inet:timeout( (Tm * (1 bsl I)) div Retry, Timer),
case
query_udp(
- S, Id, Buffer, IP, Port, UdpTimeout, Verbose)
+ S, Msg, Buffer, IP, Port, UdpTimeout, Verbose)
of
{ok,#dns_rec{header=H}} when H#dns_header.tc ->
TcpTimeout = inet:timeout(Tm*5, Timer),
{S,
query_tcp(
- TcpTimeout, Id, Buffer, IP, Port, Verbose)};
+ TcpTimeout, Msg, Buffer, IP, Port, Verbose)};
{error, econnrefused} = Err ->
ok = udp_close(S),
{#sock{}, Err};
@@ -984,9 +997,9 @@ query_ns(S0, Id, Buffer, IP, Port, Timer, Retry, I,
end
end.
-query_udp(_S, _Id, _Buffer, _IP, _Port, 0, _Verbose) ->
+query_udp(_S, _Msg, _Buffer, _IP, _Port, 0, _Verbose) ->
timeout;
-query_udp(S, Id, Buffer, IP, Port, Timeout, Verbose) ->
+query_udp(S, Msg, Buffer, IP, Port, Timeout, Verbose) ->
?verbose(Verbose, "Try UDP server : ~p:~p (timeout=~w)\n",
[IP,Port,Timeout]),
case
@@ -999,7 +1012,7 @@ query_udp(S, Id, Buffer, IP, Port, Timeout, Verbose) ->
Decode =
fun ({RecIP,RecPort,Answer})
when RecIP =:= IP, RecPort =:= Port ->
- case decode_answer(Answer, Id, Verbose) of
+ case decode_answer(Answer, Msg, Verbose) of
{error,badid} ->
false;
Reply ->
@@ -1020,9 +1033,9 @@ query_udp(S, Id, Buffer, IP, Port, Timeout, Verbose) ->
{error,econnrefused}
end.
-query_tcp(0, _Id, _Buffer, _IP, _Port, _Verbose) ->
+query_tcp(0, _Msg, _Buffer, _IP, _Port, _Verbose) ->
timeout;
-query_tcp(Timeout, Id, Buffer, IP, Port, Verbose) ->
+query_tcp(Timeout, Msg, Buffer, IP, Port, Verbose) ->
?verbose(Verbose, "Try TCP server : ~p:~p (timeout=~w)\n",
[IP, Port, Timeout]),
Family = case IP of
@@ -1038,7 +1051,7 @@ query_tcp(Timeout, Id, Buffer, IP, Port, Verbose) ->
case gen_tcp:recv(S, 0, Timeout) of
{ok, Answer} ->
gen_tcp:close(S),
- case decode_answer(Answer, Id, Verbose) of
+ case decode_answer(Answer, Msg, Verbose) of
{ok, _} = OK -> OK;
{error, badid} -> {error, servfail};
Error -> Error
@@ -1062,96 +1075,147 @@ query_tcp(Timeout, Id, Buffer, IP, Port, Verbose) ->
_:_ -> {error, einval}
end.
-decode_answer(Answer, Id, Verbose) ->
+decode_answer(Answer, Q_Msg, Verbose) ->
case inet_dns:decode(Answer) of
- {ok, Msg} ->
+ {ok, #dns_rec{header = H, arlist = ARList} = Msg} ->
?verbose(Verbose, "Got reply: ~p~n", [dns_msg(Msg)]),
- E = case lists:keyfind(dns_rr_opt, 1, Msg#dns_rec.arlist) of
+ E = case lists:keyfind(dns_rr_opt, 1, ARList) of
false -> 0;
#dns_rr_opt{ext_rcode=ExtRCode} -> ExtRCode
end,
- H = Msg#dns_rec.header,
RCode = (E bsl 4) bor H#dns_header.rcode,
case RCode of
- ?NOERROR ->
- if H#dns_header.id =/= Id ->
- {error,badid};
- length(Msg#dns_rec.qdlist) =/= 1 ->
- {error,{noquery,Msg}};
- true ->
- {ok, Msg}
- end;
+ ?NOERROR -> decode_answer_noerror(Q_Msg, Msg, H);
?FORMERR -> {error,{qfmterror,Msg}};
?SERVFAIL -> {error,{servfail,Msg}};
?NXDOMAIN -> {error,{nxdomain,Msg}};
?NOTIMP -> {error,{notimp,Msg}};
?REFUSED -> {error,{refused,Msg}};
?BADVERS -> {error,{badvers,Msg}};
- _ -> {error,{unknown,Msg}}
+ _ -> {error,{unknown,Msg}}
end;
{error, formerr} = Error ->
?verbose(Verbose, "Got reply: decode format error~n", []),
Error
end.
+decode_answer_noerror(
+ #dns_rec{header = Q_H, qdlist = [Q_RR]},
+ #dns_rec{qdlist = QDList} = Msg,
+ H) ->
+ %% Validate the reply
+ if
+ H#dns_header.id =/= Q_H#dns_header.id ->
+ {error,badid};
+ H#dns_header.qr =/= true;
+ H#dns_header.opcode =/= Q_H#dns_header.opcode;
+ H#dns_header.rd =/= Q_H#dns_header.rd ->
+ {error,{unknown,Msg}};
+ true ->
+ case QDList of
+ [RR] ->
+ case
+ (RR#dns_query.class =:= Q_RR#dns_query.class)
+ andalso
+ (RR#dns_query.type =:= Q_RR#dns_query.type)
+ andalso
+ inet_db:eq_domains(
+ RR#dns_query.domain, Q_RR#dns_query.domain)
+ of
+ true ->
+ {ok, Msg};
+ false ->
+ {error,{noquery,Msg}}
+ end;
+ _ when is_list(QDList) ->
+ {error,{noquery,Msg}}
+ end
+ end.
+
%%
%% Transform domain name or address
%% 1. "a.b.c" =>
%% "a.b.c"
%% 2. "1.2.3.4" =>
-%% "4.3.2.1.IN-ADDR.ARPA"
+%% "4.3.2.1.in-addr.arpa"
%% 3. "4321:0:1:2:3:4:567:89ab" =>
-%% "b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.1.2.3.4.IP6.ARPA"
+%% "b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.1.2.3.4.ip6.arpa"
%% 4. {1,2,3,4} => as 2.
%% 5. {1,2,3,4,5,6,7,8} => as 3.
+%% 6. Atom -> Recurse(String(Atom))
+%% 7. Term => {error, formerr}
%%
-nsdname({A,B,C,D}) ->
- {ok, dn_in_addr_arpa(A,B,C,D)};
-nsdname({A,B,C,D,E,F,G,H}) ->
- {ok, dn_ip6_int(A,B,C,D,E,F,G,H)};
+nsdname(Name) when is_atom(Name) ->
+ nsdname(atom_to_list(Name));
nsdname(Name) when is_list(Name) ->
case inet_parse:visible_string(Name) of
true ->
case inet_parse:address(Name) of
- {ok, Addr} ->
- nsdname(Addr);
+ {ok, IP} ->
+ dn_ip(IP);
_ ->
{ok, Name}
end;
_ -> {error, formerr}
end;
-nsdname(Name) when is_atom(Name) ->
- nsdname(atom_to_list(Name));
-nsdname(_) -> {error, formerr}.
-
-dn_in_addr_arpa(A,B,C,D) ->
- integer_to_list(D) ++
- ("." ++ integer_to_list(C) ++
- ("." ++ integer_to_list(B) ++
- ("." ++ integer_to_list(A) ++ ".IN-ADDR.ARPA"))).
-
-dn_ip6_int(A,B,C,D,E,F,G,H) ->
- dnib(H) ++
- (dnib(G) ++
- (dnib(F) ++
- (dnib(E) ++
- (dnib(D) ++
- (dnib(C) ++
- (dnib(B) ++
- (dnib(A) ++ "IP6.ARPA"))))))).
-
-
-
--compile({inline, [dnib/1, dnib/3]}).
-dnib(X) ->
- L = erlang:integer_to_list(X, 16),
- dnib(4-length(L), L, []).
+nsdname(IP) ->
+ dn_ip(IP).
+
+%% Return the domain name for a PTR lookup of
+%% the argument IP address
+%%
+dn_ip({A,B,C,D}) when ?ip(A,B,C,D) ->
+ dn_ipv4([A,B,C,D], "in-addr.arpa");
+dn_ip({A,B,C,D,E,F,G,H}) when ?ip6(A,B,C,D,E,F,G,H) ->
+ dn_ipv6([A,B,C,D,E,F,G,H], "ip6.arpa");
+dn_ip(_) ->
+ {error, formerr}.
+
+dn_ipv4([], Dn) ->
+ Dn;
+dn_ipv4([A | As], Dn_0) when is_integer(A), A =< 255 ->
+ Dn = [$. | Dn_0],
+ if
+ A < 10 ->
+ dn_ipv4(As, dn_dec(A, Dn));
+ A < 100 ->
+ dn_ipv4(As, dn_dec(A div 10, dn_dec(A rem 10, Dn)));
+ true ->
+ B = A rem 100,
+ dn_ipv4(
+ As,
+ dn_dec(A div 100, dn_dec(B div 10, dn_dec(B rem 10, Dn))))
+ end.
+
+dn_ipv6([], Dn) ->
+ Dn;
+dn_ipv6([W | Ws], Dn) when is_integer(W), W =< 16#ffff ->
+ D = W band 16#f, W_1 = W bsr 4,
+ C = W_1 band 16#f, W_2 = W_1 bsr 4,
+ B = W_2 band 16#f,
+ A = W_2 bsr 4,
+ dn_ipv6(Ws, dn_hex(D, dn_hex(C, dn_hex(B, dn_hex(A, Dn))))).
+
+-compile({inline, [dn_dec/2, dn_hex/2]}).
+dn_dec(N, Tail) when is_integer(N) ->
+ [N + $0 | Tail].
+
+dn_hex(N, Tail) when is_integer(N) ->
+ if
+ N < 10 ->
+ [N + $0, $. | Tail];
+ true ->
+ [(N - 10) + $a, $. | Tail]
+end.
+
+%% Normalize an IPv4-compatible IPv6 address
+%% into a plain IPv4 address
%%
-dnib(0, [], Acc) -> Acc;
-dnib(0, [C|Cs], Acc) ->
- dnib(0, Cs, [C,$.|Acc]);
-dnib(N, Cs, Acc) ->
- dnib(N-1, Cs, [$0,$.|Acc]).
+norm_ip({0,0,0,0,0,16#ffff,G,H}) ->
+ A = G bsr 8, B = G band 16#ff, C = H bsr 8, D = H band 16#ff,
+ {A,B,C,D};
+norm_ip(IP) ->
+ IP.
diff --git a/lib/kernel/src/inet_tcp_dist.erl b/lib/kernel/src/inet_tcp_dist.erl
index ef0f06aef7..1a12d758ff 100644
--- a/lib/kernel/src/inet_tcp_dist.erl
+++ b/lib/kernel/src/inet_tcp_dist.erl
@@ -208,7 +208,7 @@ accept_connection(AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
gen_accept_connection(Driver, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
spawn_opt(?MODULE, do_accept,
[Driver, self(), AcceptPid, Socket, MyNode, Allowed, SetupTime],
- [link, {priority, max}]).
+ net_ticker_spawn_options()).
do_accept(Driver, Kernel, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
receive
@@ -275,6 +275,14 @@ nodelay() ->
end.
+% we may want different spawn options for dist_util processes
+
+net_ticker_spawn_options() ->
+ Opts = application:get_env(kernel, net_ticker_spawn_options, []),
+ Opts1 = [{priority, max} | proplists:delete(priority, Opts)],
+ [link | proplists:delete(link, Opts1)].
+
+
%% ------------------------------------------------------------
%% Get remote information about a Socket.
%% ------------------------------------------------------------
@@ -304,7 +312,7 @@ setup(Node, Type, MyNode, LongOrShortNames,SetupTime) ->
gen_setup(Driver, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
spawn_opt(?MODULE, do_setup,
[Driver, self(), Node, Type, MyNode, LongOrShortNames, SetupTime],
- [link, {priority, max}]).
+ net_ticker_spawn_options()).
do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
?trace("~p~n",[{inet_tcp_dist,self(),setup,Node}]),
diff --git a/lib/kernel/src/kernel.app.src b/lib/kernel/src/kernel.app.src
index 4b35dd1f46..4f86cf98a8 100644
--- a/lib/kernel/src/kernel.app.src
+++ b/lib/kernel/src/kernel.app.src
@@ -155,6 +155,6 @@
{shell_docs_ansi,auto}
]},
{mod, {kernel, []}},
- {runtime_dependencies, ["erts-12.0", "stdlib-3.13", "sasl-3.0", "crypto-5.0"]}
+ {runtime_dependencies, ["erts-12.0", "stdlib-3.15", "sasl-3.0", "crypto-5.0"]}
]
}.
diff --git a/lib/kernel/src/logger.erl b/lib/kernel/src/logger.erl
index 9107bf0e61..3727fe63cb 100644
--- a/lib/kernel/src/logger.erl
+++ b/lib/kernel/src/logger.erl
@@ -1145,12 +1145,13 @@ log_fun_allowed(Location, Level, FunRes, Meta, FunCall) ->
Meta)
end.
-do_log_allowed(Level,{Format,Args}=Msg,Meta,Tid,Config)
+do_log_allowed(Level,{Format,Args},Meta,Tid,Config)
when ?IS_LEVEL(Level),
?IS_FORMAT(Format),
is_list(Args),
is_map(Meta) ->
- logger_backend:log_allowed(#{level=>Level,msg=>Msg,meta=>Meta},Tid,Config);
+ logger_backend:log_allowed(#{level=>Level,msg=>{deatomize(Format),Args},meta=>Meta},
+ Tid,Config);
do_log_allowed(Level,Report,Meta,Tid,Config)
when ?IS_LEVEL(Level),
?IS_REPORT(Report),
@@ -1166,6 +1167,9 @@ do_log_allowed(Level,String,Meta,Tid,Config)
tid() ->
ets:whereis(?LOGGER_TABLE).
+deatomize(Atom) when is_atom(Atom) -> atom_to_list(Atom);
+deatomize(Other) -> Other.
+
log_remote(Node,Level,{Format,Args},Meta) ->
log_remote(Node,{log,Level,Format,Args,Meta});
log_remote(Node,Level,Msg,Meta) ->
diff --git a/lib/kernel/src/logger_disk_log_h.erl b/lib/kernel/src/logger_disk_log_h.erl
index 8be6b5e69c..2f386acbf3 100644
--- a/lib/kernel/src/logger_disk_log_h.erl
+++ b/lib/kernel/src/logger_disk_log_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2017-2020. All Rights Reserved.
+%% Copyright Ericsson AB 2017-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -58,8 +58,8 @@ adding_handler(Config) ->
%%%-----------------------------------------------------------------
%%% Updating handler config
-changing_config(SetOrUpdate, OldConfig, NewConfig) ->
- logger_h_common:changing_config(SetOrUpdate, OldConfig, NewConfig).
+changing_config(SetOrUpdate,OldConfig,NewConfig) ->
+ logger_h_common:changing_config(SetOrUpdate,OldConfig,NewConfig).
%%%-----------------------------------------------------------------
%%% Handler being removed
@@ -68,12 +68,12 @@ removing_handler(Config) ->
%%%-----------------------------------------------------------------
%%% Log a string or report
--spec log(LogEvent, Config) -> ok when
+-spec log(LogEvent,Config) -> ok when
LogEvent :: logger:log_event(),
Config :: logger:handler_config().
-log(LogEvent, Config) ->
- logger_h_common:log(LogEvent, Config).
+log(LogEvent,Config) ->
+ logger_h_common:log(LogEvent,Config).
%%%-----------------------------------------------------------------
%%% Remove internal fields from configuration
@@ -86,19 +86,19 @@ filter_config(Config) ->
init(Name, #{file:=File,type:=Type,max_no_bytes:=MNB,max_no_files:=MNF}) ->
case open_disk_log(Name, File, Type, MNB, MNF) of
ok ->
- {ok,#{log_opts => #{file => File,
- type => Type,
- max_no_bytes => MNB,
- max_no_files => MNF},
- prev_log_result => ok,
- prev_sync_result => ok,
- prev_disk_log_info => undefined}};
+ {ok,#{log_opts=>#{file=>File,
+ type=>Type,
+ max_no_bytes=>MNB,
+ max_no_files=>MNF},
+ prev_log_result=>ok,
+ prev_sync_result=>ok,
+ prev_disk_log_info=>undefined}};
Error ->
Error
end.
check_config(Name,set,undefined,HConfig0) ->
- HConfig=merge_default_logopts(Name,maps:merge(get_default_config(),HConfig0)),
+ HConfig=merge_default_logopts(Name,HConfig0),
check_config(HConfig);
check_config(_Name,SetOrUpdate,OldHConfig,NewHConfig0) ->
WriteOnce = maps:with([type,file,max_no_files,max_no_bytes],OldHConfig),
@@ -106,7 +106,7 @@ check_config(_Name,SetOrUpdate,OldHConfig,NewHConfig0) ->
case SetOrUpdate of
set ->
%% Do not reset write-once fields to defaults
- maps:merge(get_default_config(),WriteOnce);
+ WriteOnce;
update ->
OldHConfig
end,
@@ -147,60 +147,57 @@ check_h_config([Other | _]) ->
check_h_config([]) ->
ok.
-get_default_config() ->
- #{}.
-
-merge_default_logopts(Name, HConfig) ->
- Type = maps:get(type, HConfig, wrap),
+merge_default_logopts(Name,HConfig) ->
+ Type = maps:get(type,HConfig,wrap),
{DefaultNoFiles,DefaultNoBytes} =
case Type of
halt -> {undefined,infinity};
_wrap -> {10,1048576}
end,
{ok,Dir} = file:get_cwd(),
- Defaults = #{file => filename:join(Dir,Name),
- max_no_files => DefaultNoFiles,
- max_no_bytes => DefaultNoBytes,
- type => Type},
- maps:merge(Defaults, HConfig).
+ Defaults = #{file=>filename:join(Dir,Name),
+ max_no_files=>DefaultNoFiles,
+ max_no_bytes=>DefaultNoBytes,
+ type=>Type},
+ maps:merge(Defaults,HConfig).
filesync(Name,_Mode,State) ->
Result = ?disk_log_sync(Name),
- maybe_notify_error(Name, filesync, Result, prev_sync_result, State).
+ maybe_notify_error(Name,filesync,Result,prev_sync_result,State).
-write(Name, Mode, Bin, State) ->
- Result = ?disk_log_write(Name, Mode, Bin),
- maybe_notify_error(Name, log, Result, prev_log_result, State).
+write(Name,Mode,Bin,State) ->
+ Result = ?disk_log_write(Name,Mode,Bin),
+ maybe_notify_error(Name,log,Result,prev_log_result,State).
-reset_state(_Name, State) ->
- State#{prev_log_result => ok,
- prev_sync_result => ok,
- prev_disk_log_info => undefined}.
+reset_state(_Name,State) ->
+ State#{prev_log_result=>ok,
+ prev_sync_result=>ok,
+ prev_disk_log_info=>undefined}.
%% The disk log owner must handle status messages from disk_log.
-handle_info(Name, {disk_log, _Node, Log, Info={truncated,_NoLostItems}}, State) ->
- maybe_notify_status(Name, Log, Info, prev_disk_log_info, State);
-handle_info(Name, {disk_log, _Node, Log, Info = {blocked_log,_Items}}, State) ->
- maybe_notify_status(Name, Log, Info, prev_disk_log_info, State);
-handle_info(Name, {disk_log, _Node, Log, Info = full}, State) ->
- maybe_notify_status(Name, Log, Info, prev_disk_log_info, State);
-handle_info(Name, {disk_log, _Node, Log, Info = {error_status,_Status}}, State) ->
- maybe_notify_status(Name, Log, Info, prev_disk_log_info, State);
-handle_info(_, _, State) ->
+handle_info(Name,{disk_log,_Node,Log,Info={truncated,_NoLostItems}},State) ->
+ maybe_notify_status(Name,Log,Info,prev_disk_log_info,State);
+handle_info(Name,{disk_log,_Node,Log,Info={blocked_log,_Items}},State) ->
+ maybe_notify_status(Name,Log,Info,prev_disk_log_info,State);
+handle_info(Name,{disk_log,_Node,Log,Info=full}, State) ->
+ maybe_notify_status(Name,Log,Info,prev_disk_log_info,State);
+handle_info(Name,{disk_log,_Node,Log,Info={error_status,_Status}},State) ->
+ maybe_notify_status(Name,Log,Info,prev_disk_log_info,State);
+handle_info(_,_,State) ->
State.
-terminate(Name, _Reason, _State) ->
- _ = close_disk_log(Name, normal),
+terminate(Name,_Reason,_State) ->
+ _ = close_disk_log(Name,normal),
ok.
%%%-----------------------------------------------------------------
%%% Internal functions
-open_disk_log(Name, File, Type, MaxNoBytes, MaxNoFiles) ->
+open_disk_log(Name,File,Type,MaxNoBytes,MaxNoFiles) ->
case filelib:ensure_dir(File) of
ok ->
Size =
- if Type == halt -> MaxNoBytes;
- Type == wrap -> {MaxNoBytes,MaxNoFiles}
+ if Type==halt -> MaxNoBytes;
+ Type==wrap -> {MaxNoBytes,MaxNoFiles}
end,
Opts = [{name, Name},
{file, File},
@@ -222,27 +219,27 @@ open_disk_log(Name, File, Type, MaxNoBytes, MaxNoFiles) ->
Error
end.
-close_disk_log(Name, _) ->
+close_disk_log(Name,_) ->
_ = ?disk_log_sync(Name),
_ = disk_log:close(Name),
ok.
-disk_log_write(Name, sync, Bin) ->
- disk_log:blog(Name, Bin);
-disk_log_write(Name, async, Bin) ->
- disk_log:balog(Name, Bin).
+disk_log_write(Name,sync,Bin) ->
+ disk_log:blog(Name,Bin);
+disk_log_write(Name,async,Bin) ->
+ disk_log:balog(Name,Bin).
%%%-----------------------------------------------------------------
%%% Print error messages, but don't repeat the same message
-maybe_notify_error(Name, Op, Result, Key, #{log_opts:=LogOpts}=State) ->
- {Result,error_notify_new({Name, Op, LogOpts, Result}, Result, Key, State)}.
+maybe_notify_error(Name,Op,Result,Key,#{log_opts:=LogOpts}=State) ->
+ {Result,error_notify_new({Name,Op,LogOpts,Result},Result,Key,State)}.
-maybe_notify_status(Name, Log, Info, Key, State) ->
- error_notify_new({disk_log, Name, Log, Info}, Info, Key, State).
+maybe_notify_status(Name,Log,Info,Key,State) ->
+ error_notify_new({disk_log,Name,Log,Info},Info,Key,State).
-error_notify_new(Term, What, Key, State) ->
- error_notify_new(What, maps:get(Key,State), Term),
- State#{Key => What}.
+error_notify_new(Term,What,Key,State) ->
+ error_notify_new(What,maps:get(Key,State),Term),
+ State#{Key=>What}.
error_notify_new(ok,_Prev,_Term) ->
ok;
diff --git a/lib/kernel/src/os.erl b/lib/kernel/src/os.erl
index 96b5da9881..f4c5d01b05 100644
--- a/lib/kernel/src/os.erl
+++ b/lib/kernel/src/os.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2018. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -313,7 +313,22 @@ mk_cmd(_,Cmd) ->
%% We use an absolute path here because we do not want the path to be
%% searched in case a stale NFS handle is somewhere in the path before
%% the sh command.
- {"/bin/sh -s unix:cmd", [out],
+ %%
+ %% Check if the default shell is located in /bin/sh as expected usually
+ %% or in /system/bin/sh as implemented on Android. The raw option is
+ %% used to bypass the file server and speed up the file access.
+ Shell = case file:read_file_info("/bin/sh",[raw]) of
+ {ok,#file_info{type=regular}} ->
+ "/bin/sh";
+ _ ->
+ case file:read_file_info("/system/bin/sh",[raw]) of
+ {ok,#file_info{type=regular}} ->
+ "/system/bin/sh";
+ _ ->
+ "/bin/sh"
+ end
+ end,
+ {Shell ++ " -s unix:cmd", [out],
%% We insert a new line after the command, in case the command
%% contains a comment character.
%%
diff --git a/lib/kernel/test/erl_distribution_SUITE.erl b/lib/kernel/test/erl_distribution_SUITE.erl
index aa1a6d6a27..d254bc2789 100644
--- a/lib/kernel/test/erl_distribution_SUITE.erl
+++ b/lib/kernel/test/erl_distribution_SUITE.erl
@@ -34,6 +34,7 @@
setopts/1,
table_waste/1, net_setuptime/1,
inet_dist_options_options/1,
+ net_ticker_spawn_options/1,
monitor_nodes_nodedown_reason/1,
monitor_nodes_complex_nodedown_reason/1,
@@ -54,6 +55,7 @@
%% Performs the test at another node.
-export([get_socket_priorities/0,
+ get_net_ticker_fullsweep_option/1,
tick_cli_test/1, tick_cli_test1/1,
tick_serv_test/2, tick_serv_test1/1,
run_remote_test/1,
@@ -95,6 +97,7 @@ all() ->
epmd_reconnect,
hidden_node, setopts,
table_waste, net_setuptime, inet_dist_options_options,
+ net_ticker_spawn_options,
{group, monitor_nodes},
erl_uds_dist_smoke_test,
erl_1424,
@@ -1076,6 +1079,48 @@ get_socket_priorities() ->
+%% check net_ticker_spawn_options
+net_ticker_spawn_options(Config) when is_list(Config) ->
+ FullsweepString0 = "[{fullsweep_after,0}]",
+ FullsweepString =
+ case os:cmd("echo [{a,1}]") of
+ "[{a,1}]"++_ ->
+ FullsweepString0;
+ _ ->
+ %% Some shells need quoting of [{}]
+ "'"++FullsweepString0++"'"
+ end,
+ InetDistOptions =
+ "-hidden "
+ "-kernel net_ticker_spawn_options "++FullsweepString,
+ {ok,Node1} =
+ start_node("", net_ticker_spawn_options_1, InetDistOptions),
+ {ok,Node2} =
+ start_node("", net_ticker_spawn_options_2, InetDistOptions),
+ %%
+ pong =
+ rpc:call(Node1, net_adm, ping, [Node2]),
+ FullsweepOptionNode1 =
+ rpc:call(Node1, ?MODULE, get_net_ticker_fullsweep_option, [Node2]),
+ FullsweepOptionNode2 =
+ rpc:call(Node2, ?MODULE, get_net_ticker_fullsweep_option, [Node1]),
+ io:format("FullsweepOptionNode1 = ~p", [FullsweepOptionNode1]),
+ io:format("FullsweepOptionNode2 = ~p", [FullsweepOptionNode2]),
+ 0 = FullsweepOptionNode1,
+ 0 = FullsweepOptionNode2,
+ %%
+ stop_node(Node2),
+ stop_node(Node1),
+ ok.
+
+get_net_ticker_fullsweep_option(Node) ->
+ Port = proplists:get_value(Node, erlang:system_info(dist_ctrl)),
+ {links, [DistUtilPid, _NetKernelPid]} = erlang:port_info(Port, links),
+ {garbage_collection, GCOpts} = erlang:process_info(DistUtilPid, garbage_collection),
+ proplists:get_value(fullsweep_after, GCOpts).
+
+
+
%%
%% Testcase:
%% monitor_nodes_nodedown_reason
diff --git a/lib/kernel/test/erl_distribution_wb_SUITE.erl b/lib/kernel/test/erl_distribution_wb_SUITE.erl
index 3f45860a7e..12c8d0afef 100644
--- a/lib/kernel/test/erl_distribution_wb_SUITE.erl
+++ b/lib/kernel/test/erl_distribution_wb_SUITE.erl
@@ -26,7 +26,8 @@
init_per_group/2,end_per_group/2]).
-export([init_per_testcase/2, end_per_testcase/2, whitebox/1,
- switch_options/1, missing_compulsory_dflags/1]).
+ switch_options/1, missing_compulsory_dflags/1,
+ dflag_mandatory_25/1]).
-define(to_port(Socket, Data),
@@ -41,29 +42,39 @@
-define(DIST_VER_HIGH, 6).
-define(DIST_VER_LOW, 5).
--define(DFLAG_PUBLISHED,1).
--define(DFLAG_ATOM_CACHE,2).
--define(DFLAG_EXTENDED_REFERENCES,4).
--define(DFLAG_DIST_MONITOR,8).
--define(DFLAG_FUN_TAGS,16#10).
--define(DFLAG_DIST_MONITOR_NAME,16#20).
--define(DFLAG_HIDDEN_ATOM_CACHE,16#40).
--define(DFLAG_NEW_FUN_TAGS,16#80).
--define(DFLAG_EXTENDED_PIDS_PORTS,16#100).
--define(DFLAG_UTF8_ATOMS, 16#10000).
--define(DFLAG_BIG_CREATION, 16#40000).
--define(DFLAG_HANDSHAKE_23, 16#01000000).
-
-%% From R9 and forward extended references is compulsory
-%% From R10 and forward extended pids and ports are compulsory
-%% From R20 and forward UTF8 atoms are compulsory
-%% From R21 and forward NEW_FUN_TAGS is compulsory (no more tuple fallback {fun, ...})
-%% From R23 and forward BIG_CREATION is compulsory
--define(COMPULSORY_DFLAGS, (?DFLAG_EXTENDED_REFERENCES bor
- ?DFLAG_EXTENDED_PIDS_PORTS bor
- ?DFLAG_UTF8_ATOMS bor
- ?DFLAG_NEW_FUN_TAGS bor
- ?DFLAG_BIG_CREATION)).
+-define(DFLAG_PUBLISHED, 16#01).
+-define(DFLAG_ATOM_CACHE, 16#02).
+-define(DFLAG_EXTENDED_REFERENCES, 16#04).
+-define(DFLAG_DIST_MONITOR, 16#08).
+-define(DFLAG_FUN_TAGS, 16#10).
+-define(DFLAG_NEW_FUN_TAGS, 16#80).
+-define(DFLAG_EXTENDED_PIDS_PORTS, 16#100).
+-define(DFLAG_EXPORT_PTR_TAG, 16#200).
+-define(DFLAG_BIT_BINARIES, 16#400).
+-define(DFLAG_NEW_FLOATS, 16#800).
+-define(DFLAG_UTF8_ATOMS, 16#10000).
+-define(DFLAG_MAP_TAG, 16#20000).
+-define(DFLAG_BIG_CREATION, 16#40000).
+-define(DFLAG_HANDSHAKE_23, 16#1000000).
+-define(DFLAG_MANDATORY_25_DIGEST, 16#4000000).
+
+%% From OTP R9 extended references are compulsory.
+%% From OTP R10 extended pids and ports are compulsory.
+%% From OTP 20 UTF8 atoms are compulsory.
+%% From OTP 21 NEW_FUN_TAGS is compulsory (no more tuple fallback {fun, ...}).
+%% From OTP 23 BIG_CREATION is compulsory.
+%% From OTP 25 NEW_FLOATS, MAP_TAG, EXPORT_PTR_TAG, and BIT_BINARIES are compulsory.
+-define(COMPULSORY_DFLAGS,
+ (?DFLAG_EXTENDED_REFERENCES bor
+ ?DFLAG_FUN_TAGS bor
+ ?DFLAG_EXTENDED_PIDS_PORTS bor
+ ?DFLAG_UTF8_ATOMS bor
+ ?DFLAG_NEW_FUN_TAGS bor
+ ?DFLAG_BIG_CREATION bor
+ ?DFLAG_NEW_FLOATS bor
+ ?DFLAG_MAP_TAG bor
+ ?DFLAG_EXPORT_PTR_TAG bor
+ ?DFLAG_BIT_BINARIES)).
-define(PASS_THROUGH, $p).
@@ -89,7 +100,7 @@ suite() ->
{timetrap,{minutes,1}}].
all() ->
- [whitebox, switch_options, missing_compulsory_dflags].
+ [whitebox, switch_options, missing_compulsory_dflags, dflag_mandatory_25].
groups() ->
[].
@@ -408,6 +419,23 @@ missing_compulsory_dflags(Config) when is_list(Config) ->
stop_node(Node),
ok.
+%% Test that instead of passing all compulsory flags, we can instead
+%% pass only ?DFLAG_MANDATORY_25_DIGEST to ensure that we will be able to communicate
+%% with a future release where ?DFLAG_MANDATORY_25_DIGEST is mandatory.
+dflag_mandatory_25(_Config) ->
+ [Name1, Name2] = get_nodenames(2, ?FUNCTION_NAME),
+ {ok, Node} = start_node(Name1, ""),
+ {NA,NB} = split(Node),
+ {port,PortNo,_} = erl_epmd:port_please(NA, NB),
+ {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),
+ PortNo,
+ [{active,false},{packet,2}]),
+ OtherNode = list_to_atom(atom_to_list(Name2)++"@"++atom_to_list(NB)),
+ send_name(SocketA, OtherNode, ?DIST_VER_HIGH, ?DIST_VER_HIGH, ?DFLAG_MANDATORY_25_DIGEST),
+ ok = recv_status(SocketA),
+ gen_tcp:close(SocketA),
+ ok.
+
%%
%% Here comes the utilities
%%
@@ -517,7 +545,8 @@ recv_status(Socket) ->
end.
send_challenge(Socket, Node, Challenge, Version, GotFlags) ->
- send_challenge(Socket, Node, Challenge, Version, GotFlags, ?COMPULSORY_DFLAGS).
+ Flags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
+ send_challenge(Socket, Node, Challenge, Version, GotFlags, Flags).
send_challenge(Socket, Node, Challenge, ?DIST_VER_LOW, _GotFlags, Flags) ->
{ok, {{_Ip1,_Ip2,_Ip3,_Ip4}, _}} = inet:sockname(Socket),
@@ -541,8 +570,8 @@ recv_challenge(Socket, OurVersion) ->
{?DIST_VER_LOW,
[$n,V1,V0,Fl1,Fl2,Fl3,Fl4,CA3,CA2,CA1,CA0 | Ns]} ->
Flags = ?u32(Fl1,Fl2,Fl3,Fl4),
- true = (Flags band ?COMPULSORY_DFLAGS) =:= ?COMPULSORY_DFLAGS,
- Node =list_to_atom(Ns),
+ verify_flags(Flags),
+ Node = list_to_atom(Ns),
?DIST_VER_LOW = ?u16(V1,V0),
Challenge = ?u32(CA3,CA2,CA1,CA0),
{Node,$n,Challenge};
@@ -551,7 +580,7 @@ recv_challenge(Socket, OurVersion) ->
[$N, F7,F6,F5,F4,F3,F2,F1,F0, CA3,CA2,CA1,CA0,
Cr3,Cr2,Cr1,Cr0, NL1,NL0 | Ns]} ->
<<Flags:64>> = <<F7,F6,F5,F4,F3,F2,F1,F0>>,
- true = (Flags band ?COMPULSORY_DFLAGS) =:= ?COMPULSORY_DFLAGS,
+ verify_flags(Flags),
<<Creation:32>> = <<Cr3,Cr2,Cr1,Cr0>>,
true = (Creation =/= 0),
<<NameLen:16>> = <<NL1,NL0>>,
@@ -564,6 +593,17 @@ recv_challenge(Socket, OurVersion) ->
?shutdown(no_node)
end.
+verify_flags(Flags) ->
+ RequiredFlags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
+ if
+ Flags band RequiredFlags =:= RequiredFlags ->
+ ok;
+ true ->
+ io:format("Given flags: ~.16.0B\n", [Flags]),
+ io:format("Required flags: ~.16.0B\n", [RequiredFlags]),
+ ct:fail(missing_dflags)
+ end.
+
send_complement(Socket, SentNameMsg, ChallengeMsg, OurVersion) ->
case {SentNameMsg,ChallengeMsg} of
{$n,$N} ->
@@ -618,7 +658,8 @@ recv_challenge_ack(Socket, ChallengeB, CookieA) ->
end.
send_name(Socket, MyNode0, OurVersion, AssumedVersion) ->
- send_name(Socket, MyNode0, OurVersion, AssumedVersion, ?COMPULSORY_DFLAGS).
+ Flags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
+ send_name(Socket, MyNode0, OurVersion, AssumedVersion, Flags).
send_name(Socket, MyNode0, OurVersion, AssumedVersion, Flags) ->
MyNode = atom_to_list(MyNode0),
diff --git a/lib/kernel/test/file_name_SUITE.erl b/lib/kernel/test/file_name_SUITE.erl
index 7166064558..41f5d37678 100644
--- a/lib/kernel/test/file_name_SUITE.erl
+++ b/lib/kernel/test/file_name_SUITE.erl
@@ -634,9 +634,9 @@ hopeless_darwin() ->
case {os:type(),os:version()} of
{{unix,darwin},{Major,_,_}} ->
%% icky file names worked between 10 and 17, but started returning
- %% EILSEQ in 18. The check against 18..19 is exact in case newer
+ %% EILSEQ in 18. The check against 18..20 is exact in case newer
%% versions of Darwin support them again.
- Major < 9 orelse (Major >= 18 andalso Major =< 19);
+ Major < 9 orelse (Major >= 18 andalso Major =< 20);
_ ->
false
end.
diff --git a/lib/kernel/test/global_SUITE.erl b/lib/kernel/test/global_SUITE.erl
index 0c3e56741b..74dab9b1cc 100644
--- a/lib/kernel/test/global_SUITE.erl
+++ b/lib/kernel/test/global_SUITE.erl
@@ -44,7 +44,8 @@
lost_unregister/1,
mass_death/1,
garbage_messages/1,
- ring_line/1
+ ring_line/1,
+ flaw1/1
]).
%% Not used
@@ -141,7 +142,7 @@ all() ->
simple_resolve2, simple_resolve3, leftover_name,
re_register_name, name_exit, external_nodes, many_nodes,
sync_0, global_groups_change, register_1, both_known_1,
- lost_unregister, mass_death, garbage_messages
+ lost_unregister, mass_death, garbage_messages, flaw1
]
end.
@@ -490,8 +491,9 @@ write_high_level_trace(Nodes, Config) ->
Node <- Nodes],
Dir = proplists:get_value(priv_dir, Config),
DataFile = filename:join([Dir, lists:concat(["global_", ?testcase])]),
- ?P("High-level trace on:"
- "~n ~p", [DataFile]),
+ io:format("\n\nAnalyze high level trace like this:\n"),
+ io:format("global_trace:dd(~p, [{show_state, 0, 10}]). % 10 seconds\n",
+ [DataFile]),
file:write_file(DataFile, term_to_binary({high_level_trace, When, Data})).
lock_global2(Id, Parent) ->
@@ -4281,6 +4283,84 @@ garbage_messages(Config) when is_list(Config) ->
init_condition(Config),
ok.
+%% This is scenario outlined in
+%% https://erlang.org/pipermail/erlang-questions/2020-October/100034.html.
+%% It illustrates that the algorithm of Global is flawed.
+flaw1(Config) ->
+ Timeout = 360,
+ ct:timetrap({seconds,Timeout}),
+ init_high_level_trace(Timeout),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
+
+ [A, B, C, D] = OtherNodes = start_nodes([a, b, c, d], peer, Config),
+ Nodes = lists:sort([node() | OtherNodes]),
+ wait_for_ready_net(Config),
+
+ F1 =
+ fun(S0) ->
+ ct:sleep(100),
+ Str = "************",
+ S = Str ++ " " ++ lists:flatten(S0) ++ " " ++ Str,
+ io:format("~s\n", [S]),
+ [begin
+ RNs = rpc:call(N, global, registered_names, []),
+ W = rpc:call(N, global, whereis_name, [x]),
+ io:format(" === ~w ===\n", [N]),
+ io:format(" registered names: ~p", [RNs]),
+ io:format(" where is x: ~p", [W])
+ end || N <- OtherNodes]
+ end,
+ F1("start"),
+
+ true = rpc:call(A, erlang, disconnect_node, [C]),
+ F1("after disconnecting c from a"),
+
+ Pid = self(),
+ yes = rpc:call(A, global, register_name, [x, Pid]),
+ F1(io_lib:format("after registering x as ~p on a", [Pid])),
+
+ true = rpc:call(B, erlang, disconnect_node, [D]),
+ F1("after disconnecting d from b"),
+
+ Pid2 = whereis(global_name_server),
+ yes = rpc:call(B, global, re_register_name, [x, Pid2]),
+ F1(io_lib:format("after re_register_name x as ~p on b", [Pid2])),
+
+ pong = rpc:call(A, net_adm, ping, [C]),
+ F1("finished after ping c from a"),
+
+ pong = rpc:call(B, net_adm, ping, [D]),
+
+ timer:sleep(1000),
+
+ %% "You have all 4 nodes connected again, but A, B & C believe the
+ %% name belongs to Y, while D believes it belongs to X."
+ Pid2 = rpc:call(A, global, whereis_name, [x]),
+ Pid2 = rpc:call(B, global, whereis_name, [x]),
+ Pid2 = rpc:call(C, global, whereis_name, [x]),
+ Pid = rpc:call(D, global, whereis_name, [x]),
+
+ lists:foreach(fun(N) ->
+ rpc:call(N, ?MODULE, stop_tracer, [])
+ end, Nodes),
+ _ = rpc:call(A, global, unregister_name, [x]),
+
+ F1("after unregistering x on node a"),
+
+ %% _ = rpc:call(B, global, unregister_name, [y]),
+ %% F1("after unregistering y on node b"),
+
+ _ = rpc:call(C, global, unregister_name, [x]),
+ F1("after unregistering x on node c"),
+
+ ct:sleep(100),
+ OrigNames = global:registered_names(),
+ write_high_level_trace(Config),
+ stop_nodes(OtherNodes),
+ init_condition(Config),
+ ok.
+
wait_for_ready_net(Config) ->
{Pid, MRef} = spawn_monitor(fun() ->
wait_for_ready_net(?NODES, Config)
diff --git a/lib/kernel/test/global_SUITE_data/global_trace.erl b/lib/kernel/test/global_SUITE_data/global_trace.erl
index b4af4ed76e..e69bac2dd5 100644
--- a/lib/kernel/test/global_SUITE_data/global_trace.erl
+++ b/lib/kernel/test/global_SUITE_data/global_trace.erl
@@ -73,42 +73,17 @@ logdir() ->
%%% For one thing, the trace from all nodes are written onto the file
%%% as one single term. One term per node would be better. &c.
--compile(export_all).
+-compile([export_all, nowarn_export_all]).
-record(state, {connect_all, known = [], synced = [],
resolvers = [], syncers = [], node_name = node(),
- the_locker, the_deleter, the_registrar, trace = [],
+ the_locker, the_registrar, trace = [],
global_lock_down
}).
%% Compatible with different versions.
state(#state{}=S) ->
- S;
-state({state, ConnectAll, Known, Synced, LockersResolvers, Syncers,
- NodeName, TheLocker, TheDeleter}) ->
- %% r10b: Lockers, r10b_patched, r11b: Resolvers
- #state{connect_all = ConnectAll, known = Known, synced = Synced,
- resolvers = LockersResolvers, syncers = Syncers,
- node_name = NodeName, the_locker = TheLocker,
- the_deleter = TheDeleter, the_registrar = undefined, trace = []};
-state({state, ConnectAll, Known, Synced, Resolvers, Syncers,
- NodeName, TheLocker, TheDeleter, Trace}) ->
- %% r11b, some time before r11b-3
- #state{connect_all = ConnectAll, known = Known, synced = Synced,
- resolvers = Resolvers, syncers = Syncers,
- node_name = NodeName, the_locker = TheLocker,
- the_deleter = TheDeleter, the_registrar = undefined,
- trace = Trace};
-state({state, ConnectAll, Known, Synced, Resolvers, Syncers,
- NodeName, TheLocker, TheDeleter, TheRegistrar, Trace}) ->
- %% r11b, some time after r11b-3
- #state{connect_all = ConnectAll, known = Known, synced = Synced,
- resolvers = Resolvers, syncers = Syncers,
- node_name = NodeName, the_locker = TheLocker,
- the_deleter = TheDeleter, the_registrar = TheRegistrar,
- trace = Trace, global_lock_down = false};
-state(Else) ->
- Else.
+ S.
%%% Trace tuples look like {Node, Now, Message, Nodes, Extra}.
%%% Nodes is the list as returned by nodes().
@@ -123,12 +98,11 @@ state(Else) ->
%%% {ops,Ops}]
%%% NewKnown = Known ++ AddedNodes
%%% AddedNodes = NewNodes -- Known
-%%% NewNodes är här den man förhandlat med plus de noder den känner till.
+%%% NewNodes is the other node and the nodes known to that node.
%%% {added, AddedNodes}, Extra = [{ops,Ops}]
%%% NewKnown = Known ++ AddedNodes
-%%% Den (passiva) noden får Nodes som är NewNodes
-%%% hos den förhandlande. Sedan: AddedNodes = (Nodes -- Known) -- [node()].
-%%% Det är som hos förhandlaren.
+%%% The (passive) node gets Nodes which is NewNodes on the other node.
+%%% Then: AddedNodes = (Nodes -- Known) -- [node()].
%%% {nodes_changed, {New,Old}}
%%% Every now and then the list [node() | nodes()] is checked for updates.
%%% New are the nodes that global does not know of (yet).
@@ -187,7 +161,7 @@ t(File) ->
%% {show_state, From, To}
%% From = To = integer() | {integer(), integer()}
%% Examples: {7, 8} (show states between seconds 7.0 and 8.0);
-%% {{1,431234},{2,432}} (between 1.431234 and 2.000432)
+%% {{1,431234},{2,432}} (between 1.431234 and 2.432)
%% The state of a node includes locks, names, nodes, known, ...
%% Default is {{0,0}, {0,0}}, that is, do not show state.
%% show_state
@@ -226,7 +200,7 @@ t(File, Options) ->
{high_level_trace, ET, D3} ->
{D3, ET};
_ ->
- {D1, now()}
+ {D1, erlang:timestamp()}
end,
D = adjust_nodes(D2),
{NodeNodeTrace, _NodeTrace, Trace, Base} = get_trace(D, End),
@@ -320,13 +294,12 @@ adjust_times(Ts, Base) ->
[setelement(2, adj_tag(T, Base), adjust_time(element(2, T), Base)) ||
T <- Ts].
-adj_tag({Node, Time, {M, Node2}, Nodes, Extra}=T, Base) ->
+adj_tag({Node, Time, {M, Node2}, Nodes, Extra}=T, _Base) ->
if
M =:= new_resolver;
M =:= kill_resolver;
M =:= exit_resolver ->
- {Node, Time, {M, Node2}, Nodes,
- [adjust_time(hd(Extra), Base) | tl(Extra)]};
+ {Node, Time, {M, Node2}, Nodes, Extra};
true ->
T
end.
@@ -356,10 +329,16 @@ adjust_node(Node) ->
z_2;
"z_" ++ _ ->
z;
- "b_" ++ _ ->
- b;
"c_external_nodes" ++ _ ->
c_external_nodes;
+ "a_" ++ _ ->
+ a;
+ "b_" ++ _ ->
+ b;
+ "c_" ++ _ ->
+ c;
+ "d_" ++ _ ->
+ d;
_ ->
Node
end.
@@ -381,7 +360,7 @@ eval([T | Ts], Time0, S0, Fun) ->
end,
case time_diff(Time1, Time0) > 0 of
true ->
- display_nodes("PAUS", Time1, S0#w.nodes, T);
+ display_nodes("PAUSE", Time1, S0#w.nodes, T);
false ->
ok
end,
@@ -800,9 +779,9 @@ ms(syncers) ->
no_info(D) ->
[{Node,no_info} || {Node, no_info} <- D].
-resolvers(D, Base, End) ->
+resolvers(D, _Base, End) ->
[{Node,
- [{N,adjust_time(T, Base),P} || {N, T, P} <- Rs, T < End]} ||
+ [{N,T,P} || {N, T, P} <- Rs, T < End]} ||
{Node, {info,State}} <- D,
is_record(State, state),
[] =/= (Rs = (state(State))#state.resolvers)].
@@ -834,16 +813,21 @@ negotiations(Trace) ->
{Node,T,Added,[{new_nodes,[Other|_]=NewNodes},_Abcast,_Ops]} <- Ns],
Act ++ Pass.
-show_spurious(NodeTrace, Spurious) ->
- Pairs = [{Node,ActionNode} || {{Node,ActionNode}, _Time} <- Spurious],
- S = sofs:restriction(sofs:relation(NodeTrace), sofs:set(Pairs)),
+show_spurious(NodeTraceL, SpuriousL) ->
+ TraceDomL = [{Node,ActionNode} ||
+ {{Node,ActionNode}, _Ts} <- NodeTraceL],
+ SpuriousDomL = [{Node,ActionNode} ||
+ {{Node,ActionNode}, _Times} <- SpuriousL],
+ S = sofs:restriction(sofs:relation(NodeTraceL), sofs:set(SpuriousDomL)),
+ %% Some spurious lost:
+ Spurious = sofs:restriction(sofs:relation(SpuriousL), sofs:set(TraceDomL)),
[foo ||
{{{Node,ANode},Times},
- {{Node,ANode},Ts}} <- lists:zip(family(Spurious),
+ {{Node,ANode},Ts}} <- lists:zip(family(sofs:to_external(Spurious)),
sofs:to_external(S)),
- show_spurious(Node, ANode, Times, lists:keysort(2, Ts))].
+ show_spurious2(Node, ANode, Times, lists:keysort(2, Ts))].
-show_spurious(Node, ActionNode, Times, Ts) ->
+show_spurious2(Node, ActionNode, Times, Ts) ->
io:format("** Actions for ~p on node ~p **~n", [ActionNode, Node]),
lists:map(fun(T) -> spurious(Node, T, Times) end, Ts),
io:format("-- End of actions for ~p on node ~p --~n", [ActionNode, Node]),
diff --git a/lib/kernel/test/inet_res_SUITE.erl b/lib/kernel/test/inet_res_SUITE.erl
index 5ac88f2e4a..7bacddd603 100644
--- a/lib/kernel/test/inet_res_SUITE.erl
+++ b/lib/kernel/test/inet_res_SUITE.erl
@@ -27,11 +27,12 @@
-include("kernel_test_lib.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
+-export([all/0, suite/0, groups/0, init_per_suite/1, end_per_suite/1,
+ init_per_group/2, end_per_group/2,
init_per_testcase/2, end_per_testcase/2
]).
--export([basic/1, resolve/1, edns0/1, txt_record/1, files_monitor/1,
+-export([basic/1, name_addr_and_cached/1, resolve/1,
+ edns0/1, txt_record/1, files_monitor/1,
nxdomain_reply/1, last_ms_answer/1, intermediate_error/1,
servfail_retry_timeout_default/1, servfail_retry_timeout_1000/1,
label_compression_limit/1
@@ -71,7 +72,8 @@ suite() ->
{timetrap,{minutes,1}}].
all() ->
- [basic, resolve, edns0, txt_record, files_monitor,
+ [basic, resolve, name_addr_and_cached,
+ edns0, txt_record, files_monitor,
nxdomain_reply, last_ms_answer,
intermediate_error,
servfail_retry_timeout_default, servfail_retry_timeout_1000,
@@ -123,13 +125,14 @@ end_per_group(_GroupName, Config) ->
zone_dir(TC) ->
case TC of
- basic -> otptest;
- resolve -> otptest;
- edns0 -> otptest;
- files_monitor -> otptest;
- nxdomain_reply -> otptest;
- last_ms_answer -> otptest;
- intermediate_error ->
+ basic -> otptest;
+ name_addr_and_cached -> otptest;
+ resolve -> otptest;
+ edns0 -> otptest;
+ files_monitor -> otptest;
+ nxdomain_reply -> otptest;
+ last_ms_answer -> otptest;
+ intermediate_error ->
{internal,
#{rcode => ?REFUSED}};
servfail_retry_timeout_default ->
@@ -511,68 +514,341 @@ basic(Config) when is_list(Config) ->
NS = ns(Config),
Name = "ns.otptest",
NameC = caseflip(Name),
- IP = {127,0,0,254},
+ IP1 = {127,0,0,253},
+ IP2 = {127,0,0,254},
%%
%% nslookup
{ok,Msg1} = inet_res:nslookup(Name, in, a, [NS]),
?P("nslookup with ~p: ~n ~p", [Name, Msg1]),
- [RR1] = inet_dns:msg(Msg1, anlist),
- IP = inet_dns:rr(RR1, data),
+ [RR1, RR2] = lists:sort(inet_dns:msg(Msg1, anlist)),
+ IP1 = inet_dns:rr(RR1, data),
+ IP2 = inet_dns:rr(RR2, data),
Bin1 = inet_dns:encode(Msg1),
%%io:format("Bin1 = ~w~n", [Bin1]),
{ok,Msg1} = inet_dns:decode(Bin1),
%% Now with scrambled case
{ok,Msg1b} = inet_res:nslookup(NameC, in, a, [NS]),
?P("nslookup with ~p: ~n ~p", [NameC, Msg1b]),
- [RR1b] = inet_dns:msg(Msg1b, anlist),
- IP = inet_dns:rr(RR1b, data),
+ [RR1b, RR2b] = lists:sort(inet_dns:msg(Msg1b, anlist)),
+ IP1 = inet_dns:rr(RR1b, data),
+ IP2 = inet_dns:rr(RR2b, data),
Bin1b = inet_dns:encode(Msg1b),
%%io:format("Bin1b = ~w~n", [Bin1b]),
{ok,Msg1b} = inet_dns:decode(Bin1b),
true =
(tolower(inet_dns:rr(RR1, domain))
=:= tolower(inet_dns:rr(RR1b, domain))),
+ true =
+ (tolower(inet_dns:rr(RR2, domain))
+ =:= tolower(inet_dns:rr(RR2b, domain))),
%%
%% resolve
{ok,Msg2} = inet_res:resolve(Name, in, a, [{nameservers,[NS]},verbose]),
?P("resolve with ~p: ~n ~p", [Name, Msg2]),
- [RR2] = inet_dns:msg(Msg2, anlist),
- IP = inet_dns:rr(RR2, data),
+ [RR1c, RR2c] = lists:sort(inet_dns:msg(Msg2, anlist)),
+ IP1 = inet_dns:rr(RR1c, data),
+ IP2 = inet_dns:rr(RR2c, data),
Bin2 = inet_dns:encode(Msg2),
%%io:format("Bin2 = ~w~n", [Bin2]),
{ok,Msg2} = inet_dns:decode(Bin2),
%% Now with scrambled case
{ok,Msg2b} = inet_res:resolve(NameC, in, a, [{nameservers,[NS]},verbose]),
?P("resolve with ~p: ~n ~p", [NameC, Msg2b]),
- [RR2b] = inet_dns:msg(Msg2b, anlist),
- IP = inet_dns:rr(RR2b, data),
+ [RR1d, RR2d] = lists:sort(inet_dns:msg(Msg2b, anlist)),
+ IP1 = inet_dns:rr(RR1d, data),
+ IP2 = inet_dns:rr(RR2d, data),
Bin2b = inet_dns:encode(Msg2b),
%%io:format("Bin2b = ~w~n", [Bin2b]),
{ok,Msg2b} = inet_dns:decode(Bin2b),
true =
- (tolower(inet_dns:rr(RR2, domain))
- =:= tolower(inet_dns:rr(RR2b, domain))),
+ (tolower(inet_dns:rr(RR1c, domain))
+ =:= tolower(inet_dns:rr(RR1d, domain))),
+ true =
+ (tolower(inet_dns:rr(RR2c, domain))
+ =:= tolower(inet_dns:rr(RR2d, domain))),
%%
%% lookup
?P("lookup"),
- [IP] = inet_res:lookup(Name, in, a, [{nameservers,[NS]},verbose]),
- [IP] = inet_res:lookup(NameC, in, a, [{nameservers,[NS]},verbose]),
+ [IP1, IP2] =
+ lists:sort(
+ inet_res:lookup(Name, in, a, [{nameservers,[NS]},verbose])),
+ [IP1, IP2] =
+ lists:sort(
+ inet_res:lookup(NameC, in, a, [{nameservers,[NS]},verbose])),
%%
%% gethostbyname
?P("gethostbyname"),
- {ok,#hostent{h_addr_list=[IP]}} = inet_res:gethostbyname(Name),
- {ok,#hostent{h_addr_list=[IP]}} = inet_res:gethostbyname(NameC),
+ {ok,#hostent{h_addr_list=IPs1}} = inet_res:gethostbyname(Name),
+ [IP1, IP2] = lists:sort(IPs1),
+ {ok,#hostent{h_addr_list=IPs2}} = inet_res:gethostbyname(NameC),
+ [IP1, IP2] = lists:sort(IPs2),
%%
%% getbyname
?P("getbyname"),
- {ok,#hostent{h_addr_list=[IP]}} = inet_res:getbyname(Name, a),
- {ok,#hostent{h_addr_list=[IP]}} = inet_res:getbyname(NameC, a),
+ {ok,#hostent{h_addr_list=IPs3}} = inet_res:getbyname(Name, a),
+ [IP1, IP2] = lists:sort(IPs3),
+ {ok,#hostent{h_addr_list=IPs4}} = inet_res:getbyname(NameC, a),
+ [IP1, IP2] = lists:sort(IPs4),
?P("end"),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check that lookup of names and addresses works the same
+%% also when cached, by simply repeating the lookups
+
+name_addr_and_cached(Config) when is_list(Config) ->
+ ?P("begin"),
+
+%%% dbg:tracer(),
+%%% dbg:p(all, c),
+%%% dbg:tpl(inet_res, do_query, cx),
+
+ NS = ns(Config),
+ Domain = "otptest",
+ Options =
+ [{lookup, [dns]},
+ {resolv_conf, []},
+ {hosts_file, []},
+ {domain, Domain},
+ {nameservers, [NS]},
+ {search, [Domain]},
+ {alt_nameservers, []},
+ {inet6, false},
+ {usevc, false},
+ {edns, 0}],
+ SavedOptions =
+ [{Option, inet_db:res_option(Option)}
+ || {Option, _Value} <- Options],
+ [inet_db:res_option(Option, Value)
+ || {Option, Value} <- Options],
+ try
+ ?P("first pass"),
+ %% Flip character case randomly
+ name_addr(Domain, fun caseflip/1),
+ %%
+ ?P("second pass"),
+ %% Use only character upper case,
+ %% should get identical results from the cache
+ name_addr(Domain, fun toupper/1)
+ after
+ [inet_db:res_option(Option, Value)
+ || {Option, Value} <- SavedOptions]
+ end,
+ ?P("done"),
+ ok.
+
+name_addr(Domain, CFlip) ->
+%% RDomain4 = "0.0.127.in-addr.arpa",
+%% RDomain6 = "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa",
+ H4 =
+ #hostent{
+ h_addrtype = inet,
+ h_length = 4},
+ H6 =
+ #hostent{
+ h_addrtype = inet6,
+ h_length = 16},
+ H_mx = CFlip("mx"),
+ H_mx_ = CFlip("mx."),
+ IP4_mx = {127,0,0,10},
+ %%
+ H_resolve = CFlip("resolve"),
+ H_resolve_ = CFlip("resolve."),
+ H_cname_resolve = CFlip("cname.resolve"),
+ H_cname_resolve_ = CFlip("cname.resolve."),
+ %%
+ IP4_resolve = {127,0,0,28},
+ IP6_resolve = {0,0,0,0,0,0,127 bsl 8,28},
+ IP64_resolve = {0,0,0,0,0,16#ffff,127 bsl 8,28},
+ %%
+ H_ns = CFlip("ns"),
+ H_ns_ = CFlip("ns."),
+ IP4_ns_1 = {127,0,0,253},
+ IP4_ns_2 = {127,0,0,254},
+ IP6_ns_1 = {0,0,0,0,0,0,127 bsl 8,253},
+ IP6_ns_2 = {0,0,0,0,0,0,127 bsl 8,254},
+ IP64_ns_1 = {0,0,0,0,0,16#ffff,127 bsl 8,253},
+ IP64_ns_2 = {0,0,0,0,0,16#ffff,127 bsl 8,254},
+ Lookups =
+ %% The search list is [Domain] so a lookup of a short
+ %% name should return the fully qualified name with
+ %% Domain appended.
+ %%
+ %% Lookup results should have the same character case
+ %% as the query. Both for short (search) lookups and
+ %% for full name lookups.
+ %%
+ %% Lookup via a CNAME record should return the
+ %% result as stored in DNS but the CNAME should be
+ %% returned as an alias with the query character case
+ %% preserved.
+ %%
+ %% Address lookups (reverse/PTR lookups) can only
+ %% return the one address we looked up and the
+ %% fully qualified name as in DNS, and no aliases.
+ %%
+ %% IPv6 address lookups in ::ffff.A.B.C.D
+ %% (IPv4-compatible IPv6 addresses) should be
+ %% internally done as IPv4 lookups by the client,
+ %% without the caller noticing.
+ %%
+ [{{H_mx, inet}, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = H_mx++[$.|Domain],
+ h_addr_list = [IP4_mx]}},
+ {{H_mx_++Domain, inet}, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = H_mx_++Domain,
+ h_addr_list = [IP4_mx]}},
+ {{H_resolve, inet}, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = H_resolve++[$.|Domain],
+ h_addr_list = [IP4_resolve]}},
+ {{H_resolve_++Domain, inet}, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = H_resolve_++Domain,
+ h_addr_list = [IP4_resolve]}},
+ {{H_cname_resolve, inet}, fun lower_h_name/1, ?LINE,
+ H4#hostent{
+ h_name = "resolve."++Domain,
+ h_aliases = [H_cname_resolve++[$.|Domain]],
+ h_addr_list = [IP4_resolve]}},
+ {{H_cname_resolve_++Domain, inet}, fun lower_h_name/1, ?LINE,
+ H4#hostent{
+ h_name = "resolve."++Domain,
+ h_aliases = [H_cname_resolve_++Domain],
+ h_addr_list = [IP4_resolve]}},
+ %%
+ {{H_ns, inet}, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = H_ns++[$.|Domain],
+ h_addr_list = [IP4_ns_1,IP4_ns_2]}},
+ {{H_ns_++Domain, inet}, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = H_ns_++Domain,
+ h_addr_list = [IP4_ns_1,IP4_ns_2]}},
+ %%
+ {IP4_ns_2, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = "ns."++Domain,
+ h_addr_list = [IP4_ns_2]}},
+ {IP4_ns_1, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = "ns."++Domain,
+ h_addr_list = [IP4_ns_1]}},
+ {IP4_mx, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = "mx."++Domain,
+ h_addr_list = [IP4_mx]}},
+ {IP4_mx, fun norm/1, ?LINE,
+ H4#hostent{
+ h_name = "mx."++Domain,
+ h_addr_list = [IP4_mx]}},
+ %%
+ %%
+ %%
+ {{H_resolve_++Domain, inet6}, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = H_resolve_++Domain,
+ h_addr_list = [IP6_resolve]}},
+ {{H_resolve, inet6}, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = H_resolve++[$.|Domain],
+ h_addr_list = [IP6_resolve]}},
+ {{H_cname_resolve, inet6}, fun lower_h_name/1, ?LINE,
+ H6#hostent{
+ h_name = "resolve."++Domain,
+ h_aliases = [H_cname_resolve++[$.|Domain]],
+ h_addr_list = [IP6_resolve]}},
+ {{H_cname_resolve_++Domain, inet6}, fun lower_h_name/1, ?LINE,
+ H6#hostent{
+ h_name = "resolve."++Domain,
+ h_aliases = [H_cname_resolve_++Domain],
+ h_addr_list = [IP6_resolve]}},
+ {IP6_resolve, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = "resolve."++Domain,
+ h_addr_list = [IP6_resolve]}},
+ {IP64_resolve, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = "resolve."++Domain,
+ h_addr_list = [IP64_resolve]}},
+ %%
+ {{H_ns, inet6}, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = H_ns++[$.|Domain],
+ h_addr_list =
+ [IP6_ns_1,
+ IP6_ns_2]}},
+ {{H_ns_++Domain, inet6}, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = H_ns_++Domain,
+ h_addr_list =
+ [IP6_ns_1,
+ IP6_ns_2]}},
+ {IP6_ns_1, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = "ns."++Domain,
+ h_addr_list = [IP6_ns_1]}},
+ {IP6_ns_2, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = "ns."++Domain,
+ h_addr_list = [IP6_ns_2]}},
+ {IP64_ns_1, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = "ns."++Domain,
+ h_addr_list = [IP64_ns_1]}},
+ {IP64_ns_2, fun norm/1, ?LINE,
+ H6#hostent{
+ h_name = "ns."++Domain,
+ h_addr_list = [IP64_ns_2]}}
+ %%
+ %%
+ %%
+ ],
+ Results =
+ [case Target of
+ {H, T} ->
+ inet_res:gethostbyname(H, T);
+ Addr ->
+ inet_res:gethostbyaddr(Addr)
+ end || {Target, _TFun, _Line, _HE} <- Lookups],
+ ?P("inet_cache: ~p~n", [ets:tab2list(inet_cache)]),
+ [] = merge_results(Lookups, Results),
+ ok.
+
+lower_h_name(#hostent{h_name = HName} = HE) ->
+ norm(HE#hostent{h_name = tolower(HName)}).
+
+%%%lower_h_aliases(#hostent{h_aliases = HAliases} = HE) ->
+%%% HE#hostent{
+%%% h_aliases = [tolower(HAlias) || HAlias <- HAliases]}.
+
+norm(#hostent{h_addr_list = Addrs} = HE) ->
+ HE#hostent{h_addr_list = lists:sort(Addrs)}.
+
+merge_results([], []) ->
+ [];
+merge_results([{H_T, TFun, Line, HE} | Lookups], [Result | Results]) ->
+ case
+ case Result of
+ {ok, ResultHE} ->
+ {ok, TFun(ResultHE)};
+ _ ->
+ Result
+ end
+ of
+ {ok, HE} ->
+ merge_results(Lookups, Results);
+ Other ->
+ [{{Line, H_T, HE}, Other} | merge_results(Lookups, Results)]
+ end.
+
+
+%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
%% Lookup different records using resolve/2..4.
resolve(Config) when is_list(Config) ->
?P("begin"),
@@ -1128,42 +1404,53 @@ timestamp() ->
erlang:monotonic_time(milli_seconds).
-%% Case flip helper
+%% Case flip helper, randomly flips the case of about every second [a-zA-Z]
+
+-compile({inline, [caseflip/3]}).
-caseflip([C|Cs]) when is_integer(C), $a =< C, C =< $z ->
- [(C - $a + $A)|caseflip_skip(Cs)];
-caseflip([C|Cs]) when is_integer(C), $A =< C, C =< $Z ->
- [(C - $A + $a)|caseflip_skip(Cs)];
-caseflip([C|Cs]) ->
- [C|caseflip(Cs)];
+caseflip([C | Cs]) when is_integer(C), $a =< C, C =< $z ->
+ caseflip(Cs, C, $a - $A);
+caseflip([C | Cs]) when is_integer(C), $A =< C, C =< $Z ->
+ caseflip(Cs, C, $A - $a);
+caseflip([C | Cs]) ->
+ [C | caseflip(Cs)];
caseflip([]) ->
[].
+%%
+caseflip(Cs, C, Diff) ->
+ [case 0.5 =< rand:uniform() of
+ true ->
+ C - Diff;
+ false ->
+ C
+ end | caseflip(Cs)].
-caseflip_skip([C|Cs]) when is_integer(C), $a =< C, C =< $z ->
- [C|caseflip(Cs)];
-caseflip_skip([C|Cs]) when is_integer(C), $A =< C, C =< $Z ->
- [C|caseflip(Cs)];
-caseflip_skip([C|Cs]) ->
- [C|caseflip_skip(Cs)];
-caseflip_skip([]) ->
- [].
-tolower_email([$.|Cs]) ->
- [$.|tolower(Cs)];
-tolower_email([C|Cs]) ->
- [C|tolower_email(Cs)].
+tolower_email([$. | Cs]) ->
+ [$. | tolower(Cs)];
+tolower_email([C | Cs]) ->
+ [C | tolower_email(Cs)].
-%% Case fold to lower case according to RFC 4343
+%% Case fold according to RFC 4343
%%
-tolower([C|Cs]) when is_integer(C) ->
+tolower([C | Cs]) when is_integer(C) ->
if $A =< C, C =< $Z ->
- [(C - $A + $a)|tolower(Cs)];
+ [(C - $A + $a) | tolower(Cs)];
true ->
- [C|tolower(Cs)]
+ [C | tolower(Cs)]
end;
tolower([]) ->
[].
+toupper([C | Cs]) when is_integer(C) ->
+ if $a =< C, C =< $z ->
+ [(C - $a + $A) | toupper(Cs)];
+ true ->
+ [C | toupper(Cs)]
+ end;
+toupper([]) ->
+ [].
+
-compile({inline,[ok/1]}).
ok(ok) -> ok;
ok({ok,X}) -> X;
diff --git a/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.zone b/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.zone
index 81e14217ba..73812abda9 100644
--- a/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.zone
+++ b/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.zone
@@ -10,3 +10,5 @@ $TTL 3600
IN MX 10 mx.otptest.
c.1 IN PTR resolve.otptest.
+d.f IN CNAME e.f
+e.f IN PTR ns.otptest.
diff --git a/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.127.in-addr.arpa.zone b/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.127.in-addr.arpa.zone
index bae50a9eec..7a09e4bff8 100644
--- a/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.127.in-addr.arpa.zone
+++ b/lib/kernel/test/inet_res_SUITE_data/otptest/0.0.127.in-addr.arpa.zone
@@ -24,4 +24,5 @@ $TTL 3600
28 IN PTR resolve.otptest.
+253 IN CNAME 254
254 IN PTR ns.otptest.
diff --git a/lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone b/lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone
index 51268f49ae..9e4a3513f8 100644
--- a/lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone
+++ b/lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone
@@ -32,6 +32,9 @@ mx6-5678901234567890123456789012345678 IN A 127.0.0.26
mx7-5678901234567890123456789012345678 IN A 127.0.0.27
ns IN A 127.0.0.254
+ns IN AAAA ::127.0.0.254
+ns IN A 127.0.0.253
+ns IN AAAA ::127.0.0.253
resolve IN A 127.0.0.28
resolve IN AAAA ::127.0.0.28
cname.resolve IN CNAME resolve
diff --git a/lib/kernel/test/interactive_shell_SUITE.erl b/lib/kernel/test/interactive_shell_SUITE.erl
index bd0fa755ac..14b48313b6 100644
--- a/lib/kernel/test/interactive_shell_SUITE.erl
+++ b/lib/kernel/test/interactive_shell_SUITE.erl
@@ -18,11 +18,12 @@
%% %CopyrightEnd%
%%
-module(interactive_shell_SUITE).
--include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- get_columns_and_rows/1, exit_initial/1, job_control_local/1,
+
+-export([all/0, suite/0, groups/0, init_per_suite/1, end_per_suite/1,
+ init_per_group/2, end_per_group/2,
+ init_per_testcase/2, end_per_testcase/2,
+ get_columns_and_rows/1, exit_initial/1, job_control_local/1,
job_control_remote/1,stop_during_init/1,
shell_history/1, shell_history_resize/1, shell_history_eaccess/1,
shell_history_repair/1, shell_history_repair_corrupt/1,
@@ -30,32 +31,26 @@
shell_history_custom/1, shell_history_custom_errors/1,
job_control_remote_noshell/1,ctrl_keys/1,
get_columns_and_rows_escript/1,
- remsh/1, remsh_longnames/1, remsh_no_epmd/1]).
+ remsh_basic/1, remsh_longnames/1, remsh_no_epmd/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
%% For spawn
-export([toerl_server/3]).
%% Exports for custom shell history module
-export([load/0, add/1]).
-init_per_testcase(_Func, Config) ->
- Config.
-
-end_per_testcase(_Func, _Config) ->
- ok.
-
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,3}}].
-all() ->
+all() ->
[get_columns_and_rows_escript,get_columns_and_rows,
exit_initial, job_control_local,
job_control_remote, job_control_remote_noshell,
- ctrl_keys, stop_during_init, {group, shell_history},
- remsh, remsh_longnames, remsh_no_epmd].
+ ctrl_keys, stop_during_init,
+ {group, shell_history},
+ {group, remsh}].
-groups() ->
+groups() ->
[{shell_history, [],
[shell_history,
shell_history_resize,
@@ -63,32 +58,77 @@ groups() ->
shell_history_repair,
shell_history_repair_corrupt,
shell_history_corrupt,
- shell_history_custom,
- shell_history_custom_errors
- ]}].
+ {group, sh_custom}
+ ]},
+ {sh_custom, [],
+ [shell_history_custom,
+ shell_history_custom_errors]},
+ {remsh, [],
+ [remsh_basic,
+ remsh_longnames,
+ remsh_no_epmd]}
+ ].
init_per_suite(Config) ->
- Term = os:getenv("TERM", "dumb"),
- os:putenv("TERM","vt100"),
- DefShell = get_default_shell(),
- [{default_shell,DefShell},{term,Term}|Config].
+ case get_progs() of
+ {error, Error} ->
+ {skip, Error};
+ _ ->
+ Term = os:getenv("TERM", "dumb"),
+ os:putenv("TERM", "vt100"),
+ DefShell = get_default_shell(),
+ [{default_shell,DefShell},{term,Term}|Config]
+ end.
end_per_suite(Config) ->
Term = proplists:get_value(term,Config),
os:putenv("TERM",Term),
ok.
+init_per_group(remsh, Config) ->
+ case proplists:get_value(default_shell, Config) of
+ old -> {skip, "Not supported in old shell"};
+ new -> Config
+ end;
init_per_group(shell_history, Config) ->
case proplists:get_value(default_shell, Config) of
old -> {skip, "Not supported in old shell"};
new -> Config
end;
+init_per_group(sh_custom, Config) ->
+ %% Ensure that ERL_AFLAGS will not override the value of the
+ %% shell_history variable.
+ Name = interactive_shell_sh_custom,
+ Args = "-noshell -kernel shell_history not_overridden",
+ {ok, Node} = test_server:start_node(Name, slave, [{args,Args}]),
+ try erpc:call(Node, application, get_env, [kernel, shell_history], timeout(normal)) of
+ {ok, not_overridden} ->
+ Config;
+ _ ->
+ SkipText = "shell_history variable is overridden (probably by ERL_AFLAGS)",
+ {skip, SkipText}
+ catch
+ C:R:Stk ->
+ io:format("~p\n~p\n~p\n", [C,R,Stk]),
+ {skip, "Unexpected error"}
+ after
+ test_server:stop_node(Node)
+ end;
init_per_group(_GroupName, Config) ->
Config.
end_per_group(_GroupName, Config) ->
Config.
+init_per_testcase(_Func, Config) ->
+ Config.
+
+end_per_testcase(_Case, _Config) ->
+ %% Terminate any connected nodes. They may disturb test cases that follow.
+ lists:foreach(fun(Node) ->
+ catch erpc:call(Node, erlang, halt, [])
+ end, nodes()),
+ ok.
%%-define(DEBUG,1).
-ifdef(DEBUG).
@@ -153,98 +193,107 @@ get_columns_and_rows_escript(Config) when is_list(Config) ->
%% Test that the shell can access columns and rows.
get_columns_and_rows(Config) when is_list(Config) ->
- case proplists:get_value(default_shell,Config) of
+ case proplists:get_value(default_shell, Config) of
old ->
- %% Old shell tests
- ?dbg(old_shell),
- rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- {getline_re,".*{error,enotsup}"},
- {putline,"io:rows()."},
- {getline_re,".*{error,enotsup}"}
-
- ],[]),
- rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- {getline_re,".*{ok,90}"},
- {putline,"io:rows()."},
- {getline_re,".*{ok,40}"}],
- [],
- "stty rows 40; stty columns 90; ");
+ test_columns_and_rows(old, []);
new ->
- %% New shell tests
- ?dbg(new_shell),
- rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- %% Behaviour change in R12B-5, returns 80
- %% {getline,"{error,enotsup}"},
- {getline,"{ok,80}"},
- {putline,"io:rows()."},
- %% Behaviour change in R12B-5, returns 24
- %% {getline,"{error,enotsup}"}
- {getline,"{ok,24}"}
- ],[]),
- rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- {getline,"{ok,90}"},
- {putline,"io:rows()."},
- {getline,"{ok,40}"}],
- [],
- "stty rows 40; stty columns 90; ")
- end.
-
+ test_columns_and_rows(old, ["-oldshell"]),
+ test_columns_and_rows(new, [])
+ end,
+ ok.
+test_columns_and_rows(old, Args) ->
+ rtnode([{putline, ""},
+ {putline, "2."},
+ {expect, "2\r\n"},
+ {putline, "io:columns()."},
+ {expect, "{error,enotsup}\r\n"},
+ {putline, "io:rows()."},
+ {expect, "{error,enotsup}\r\n"}
+ ], [], [], Args),
+
+ rtnode([{putline, ""},
+ {putline, "2."},
+ {expect, "2\r\n"},
+ {putline, "io:columns()."},
+ {expect, "{ok,90}\r\n"},
+ {putline,"io:rows()."},
+ {expect, "{ok,40}\r\n"}],
+ [],
+ "stty rows 40; stty columns 90; ",
+ Args);
+test_columns_and_rows(new, _Args) ->
+ rtnode([{putline, ""},
+ {expect, "1> $"},
+ {putline, "2."},
+ {expect, "\r\n2\r\n"},
+ {expect, "> $"},
+ {putline, "io:columns()."},
+ {expect, "{ok,80}\r\n"},
+ {expect, "> $"},
+ {putline, "io:rows()."},
+ {expect, "\r\n{ok,24}\r\n"}
+ ]),
+
+ rtnode([{putline, ""},
+ {expect, "1> $"},
+ {putline, "2."},
+ {expect, "\r\n2\r\n"},
+ {expect, "> $"},
+ {putline, "io:columns()."},
+ {expect, "\r\n{ok,90}\r\n"},
+ {expect, "> $"},
+ {putline, "io:rows()."},
+ {expect, "\r\n{ok,40}\r\n"}],
+ [],
+ "stty rows 40; stty columns 90; ").
%% Tests that exit of initial shell restarts shell.
exit_initial(Config) when is_list(Config) ->
- case proplists:get_value(default_shell,Config) of
+ case proplists:get_value(default_shell, Config) of
old ->
- rtnode([{putline,""},
- {putline, "2."},
- {getline_re, ".*2"},
- {putline,"exit()."},
- {getline,""},
- {getline,"Eshell"},
- {putline,""},
- {putline,"35."},
- {getline_re,".*35"}],[]);
- new ->
- rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"exit()."},
- {getline,""},
- {getline,"Eshell"},
- {putline,""},
- {putline,"35."},
- {getline_re,"35"}],[])
- end.
+ test_exit_initial(old);
+ new ->
+ test_exit_initial(old),
+ test_exit_initial(new)
+ end,
+ ok.
+
+test_exit_initial(old) ->
+ rtnode([{putline, ""},
+ {putline, "2."},
+ {expect, "2\r\n"},
+ {putline, "exit()."},
+ {expect, "Eshell"},
+ {putline, ""},
+ {putline, "35."},
+ {expect, "35\r\n"}],
+ [], [], ["-oldshell"]);
+test_exit_initial(new) ->
+ rtnode([{putline, ""},
+ {expect, "1> $"},
+ {putline, "2."},
+ {expect, "2"},
+ {putline,"exit()."},
+ {expect, "Eshell"},
+ {expect, "1> $"},
+ {putline, "35."},
+ {expect, "35\r\n"}]).
stop_during_init(Config) when is_list(Config) ->
- case get_progs() of
- {error,_Reason} ->
- {skip,"No runerl present"};
- {RunErl,_ToErl,Erl} ->
- case create_tempdir() of
- {error, Reason2} ->
- {skip, Reason2};
- Tempdir ->
- XArg = " -kernel shell_history enabled -s init stop",
- start_runerl_command(RunErl, Tempdir, "\\\""++Erl++"\\\""++XArg),
- Logs = rtnode_read_logs(Tempdir),
- rtnode_dump_logs(Logs),
- nomatch = binary:match(maps:get("erlang.log.1",Logs),
- <<"*** ERROR: Shell process terminated! ***">>)
- end
- end.
+ {RunErl,_ToErl,Erl} = get_progs(),
+ case create_tempdir() of
+ {error, Reason} ->
+ {skip, Reason};
+ Tempdir ->
+ XArg = " -kernel shell_history enabled -s init stop",
+ start_runerl_command(RunErl, Tempdir, "\\\""++Erl++"\\\""++XArg),
+ Logs = rtnode_read_logs(Tempdir),
+ rtnode_dump_logs(Logs),
+ nomatch = binary:match(map_get("erlang.log.1", Logs),
+ <<"*** ERROR: Shell process terminated! ***">>),
+ ok
+ end.
%% This testcase tests that shell_history works as it should.
%% We use Ctrl + P = Cp=[$\^p] in order to navigate up
@@ -257,50 +306,52 @@ shell_history(Config) when is_list(Config) ->
Path = shell_history_path(Config, "basic"),
rtnode([
{putline, "echo1."},
- {getline, "echo1"},
+ {expect, "echo1\r\n"},
{putline, "echo2."},
- {getline, "echo2"},
+ {expect, "echo2\r\n"},
{putline, "echo3."},
- {getline, "echo3"},
+ {expect, "echo3\r\n"},
{putline, "echo4."},
- {getline, "echo4"},
+ {expect, "echo4\r\n"},
{putline, "echo5."},
- {getline, "echo5"}
+ {expect, "echo5\r\n"}
], [], [], " -kernel shell_history enabled " ++
"-kernel shell_history_drop '[\\\"init:stop().\\\"]' " ++
mk_sh_param(Path)),
+ receive after 1000 -> ok end,
rtnode([
{putline, ""},
%% the init:stop that stopped the node is dropped
- {putdata, [$\^p]}, {getdata, "echo5."},
+ {putdata, [$\^p]}, {expect, "echo5[.]$"},
{putdata, [$\n]},
- {getline, "echo5"},
- {putdata, [$\^p]}, {getdata,"echo5."},
- {putdata, [$\^p]}, {getdata,"echo4."},
- {putdata, [$\^p]}, {getdata,"echo3."},
- {putdata, [$\^p]}, {getdata,"echo2."},
- {putdata, [$\^n]}, {getdata,"echo3."},
- {putdata, [$\^n]}, {getdata,"echo4."},
+ {expect, "echo5\r\n"},
+ {putdata, [$\^p]}, {expect, "echo5[.]$"},
+ {putdata, [$\^p]}, {expect, "echo4[.]$"},
+ {putdata, [$\^p]}, {expect, "echo3[.]$"},
+ {putdata, [$\^p]}, {expect, "echo2[.]$"},
+ {putdata, [$\^n]}, {expect, "echo3[.]$"},
+ {putdata, [$\^n]}, {expect, "echo4[.]$"},
{putdata, [$\^b]}, {sleep,50}, %% the echo4. (cursor moved one left)
- {putline, ["echo"]},
- {getline, "echo4echo"}
- ], [], [], " -kernel shell_history enabled " ++ mk_sh_param(Path)).
+ {putline, ["ECHO"]},
+ {expect, "echo4ECHO\r\n"}
+ ], [], [], " -kernel shell_history enabled " ++ mk_sh_param(Path)),
+ ok.
shell_history_resize(Config) ->
Path = shell_history_path(Config, "resize"),
rtnode([
{putline, "echo."},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], " -kernel shell_history_file_bytes 123456 " ++
"-kernel shell_history enabled " ++ mk_sh_param(Path)),
{ok, Logs} =
rtnode([
{putline, ""},
- {putdata, [$\^p]}, {getdata,"init:stop()."},
- {putdata, [$\^p]}, {getdata,"echo."},
+ {putdata, [$\^p]}, {expect, "init:stop\\(\\)[.]$"},
+ {putdata, [$\^p]}, {expect, "echo[.]$"},
{putdata, [$\n]},
- {getline, "echo"}
+ {expect, "echo"}
], [], [], " -kernel shell_history_file_bytes 654321 " ++
"-kernel shell_history enabled " ++ mk_sh_param(Path)),
@@ -324,7 +375,7 @@ shell_history_eaccess(Config) ->
{ok, Logs1} =
rtnode([
{putline, "echo."},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)),
rtnode_check_logs("erlang.log.1", "Error handling file", Logs1),
@@ -332,10 +383,10 @@ shell_history_eaccess(Config) ->
%% shell_docs recursively creates the folder to store the
%% logs. This test checks that erlang still starts if we
%% cannot create the folders to the path.
- {ok, Logs2} =
+ {ok, Logs2} =
rtnode([
{putline, "echo."},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], "-kernel shell_history enabled " ++
mk_sh_param(filename:join(Path,"logs"))),
@@ -343,34 +394,25 @@ shell_history_eaccess(Config) ->
after
file:write_file_info(Path, Info)
- end.
+ end,
+ ok.
shell_history_repair(Config) ->
Path = shell_history_path(Config, "repair"),
%% We stop a node without closing the log
- try rtnode([
- {putline, "echo."},
- {getline, "echo"},
- {sleep, 2500}, %% disk_log internal cache timer is 2000 ms
- {putline, "erlang:halt(0)."}
- ], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)) of
- _ ->
- ok
- catch _:_ ->
- ok
- end,
+ shell_history_halt(Path),
{ok, Logs} =
rtnode([
{putline, ""},
- {putdata, [$\^p]}, {getdata,"echo."},
+ {putdata, [$\^p]}, {expect, "echo[.]$"},
{putdata, [$\n]},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)),
%% The regexp below checks that he string is NOT part of the log
- rtnode_check_logs("erlang.log.1",
+ rtnode_check_logs("erlang.log.1",
"The shell history log file was corrupted and was repaired",
false,
Logs),
@@ -380,17 +422,7 @@ shell_history_repair_corrupt(Config) ->
Path = shell_history_path(Config, "repair_corrupt"),
%% We stop a node without closing the log
- try rtnode([
- {putline, "echo."},
- {getline, "echo"},
- {sleep, 2500}, %% disk_log internal cache timer is 2000 ms
- {putline, "erlang:halt(0)."}
- ], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)) of
- _ ->
- ok
- catch _:_ ->
- ok
- end,
+ shell_history_halt(Path),
%% We corrupt the disklog
{ok, D} = file:open(filename:join(Path,"erlang-shell-log.1"), [read,append]),
@@ -400,12 +432,12 @@ shell_history_repair_corrupt(Config) ->
{ok, Logs} =
rtnode([
{putline, ""},
- {putdata, [$\^p]}, {getdata,"echo."},
+ {putdata, [$\^p]}, {expect, "echo[.]$"},
{putdata, [$\n]},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)),
- rtnode_check_logs("erlang.log.1",
+ rtnode_check_logs("erlang.log.1",
"The shell history log file was corrupted and was repaired.",
Logs),
ok.
@@ -413,18 +445,12 @@ shell_history_repair_corrupt(Config) ->
shell_history_corrupt(Config) ->
Path = shell_history_path(Config, "corrupt"),
- %% We stop a node without closing the log
- try rtnode([
- {putline, "echo."},
- {getline, "echo"}
- ], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)) of
- _ ->
- ok
- catch _:_ ->
- ok
- end,
+ %% We initialize the shell history log with a known value.
+ rtnode([{putline, "echo."},
+ {expect, "echo\r\n"}
+ ], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)),
- %% We corrupt the disklog
+ %% We corrupt the disklog.
{ok, D} = file:open(filename:join(Path,"erlang-shell-log.1"), [read, append]),
ok = file:write(D, [10, 10]),
ok = file:close(D),
@@ -432,16 +458,29 @@ shell_history_corrupt(Config) ->
{ok, Logs} =
rtnode([
{putline, ""},
- {putdata, [$\^p]}, {getdata,"init:stop()."},
- {putdata, [$\^p]}, {getdata,"echo."},
+ {putdata, [$\^p]}, {expect, "init:stop\\(\\)[.]$"},
+ {putdata, [$\^p]}, {expect, "echo[.]$"},
{putdata, [$\n]},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path)),
- rtnode_check_logs("erlang.log.1", "Invalid chunk in the file", Logs),
+ rtnode_check_logs("erlang.log.1", "Invalid chunk in the file", Logs),
ok.
-
+%% Stop the node without closing the log.
+shell_history_halt(Path) ->
+ try
+ rtnode([
+ {putline, "echo."},
+ {expect, "echo\r\n"},
+ {sleep, 2500}, % disk_log internal cache timer is 2000 ms
+ {putline, "halt(0)."}
+ ], [], [], "-kernel shell_history enabled " ++ mk_sh_param(Path))
+ catch
+ _:_ ->
+ ok
+ end.
+
shell_history_path(Config, TestCase) ->
filename:join([proplists:get_value(priv_dir, Config),
"shell_history", TestCase]).
@@ -451,63 +490,66 @@ mk_sh_param(Path) ->
shell_history_custom(_Config) ->
%% Up key: Ctrl + P = Cp=[$\^p]
- rtnode([
- {putline, ""},
- {putdata, [$\^p]}, {getdata,"0."},
+ rtnode([{expect, "1> $"},
+ %% {putline, ""},
+ {putdata, [$\^p]}, {expect, "0[.]"},
{putdata, [$\n]},
- {getline, "0"},
+ {expect, "0\r\n"},
{putline, "echo."},
- {getline, "!echo"} %% exclamation sign is printed by custom history module
+ {expect, "!echo\r\n"} % exclamation mark is printed by custom history module
], [], [], " -kernel shell_history " ++ atom_to_list(?MODULE) ++
- " -pz " ++ filename:dirname(code:which(?MODULE))).
+ " -pz " ++ filename:dirname(code:which(?MODULE))),
+ ok.
shell_history_custom_errors(_Config) ->
%% Check that we can start with a node with an undefined
%% provider module.
- rtnode([
+ rtnode([{expect, "1> $"},
{putline, "echo."},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], " -kernel shell_history very_broken " ++
" -pz " ++ filename:dirname(code:which(?MODULE))),
%% Check that we can start with a node with a provider module
- %% that crashes in load/0
+ %% that crashes in load/0.
rtnode([
{putline, "echo."},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], " -kernel shell_history " ++ atom_to_list(?MODULE) ++
" -kernel provider_load crash" ++
" -pz " ++ filename:dirname(code:which(?MODULE))),
%% Check that we can start with a node with a provider module
- %% that return incorrect in load/0
+ %% that return incorrect in load/0.
rtnode([
{putline, "echo."},
- {getline, "echo"}
+ {expect, "echo\r\n"}
], [], [], " -kernel shell_history " ++ atom_to_list(?MODULE) ++
" -kernel provider_load badreturn" ++
" -pz " ++ filename:dirname(code:which(?MODULE))),
%% Check that we can start with a node with a provider module
- %% that crashes in load/0
+ %% that crashes in load/0.
rtnode([
{putline, "echo."},
- {getline, "Disabling shell history logging."},
- {getline, "echo"}
+ {expect, "Disabling shell history logging.\r\n"},
+ {expect, "echo\r\n"}
], [], [], " -kernel shell_history " ++ atom_to_list(?MODULE) ++
" -kernel provider_add crash" ++
" -pz " ++ filename:dirname(code:which(?MODULE))),
%% Check that we can start with a node with a provider module
- %% that return incorrect in load/0
+ %% that return incorrect in load/0.
rtnode([
{putline, "echo."},
- {getline, "It returned {error,badreturn}."},
- {getline, "echo"}
+ {expect, "It returned {error,badreturn}.\r\n"},
+ {expect, "echo\r\n"}
], [], [], " -kernel shell_history " ++ atom_to_list(?MODULE) ++
" -kernel provider_add badreturn" ++
- " -pz " ++ filename:dirname(code:which(?MODULE))).
+ " -pz " ++ filename:dirname(code:which(?MODULE))),
+
+ ok.
load() ->
case application:get_env(kernel,provider_load) of
@@ -533,298 +575,273 @@ add(_Line) ->
%% Tests that local shell can be started by means of job control.
job_control_local(Config) when is_list(Config) ->
- case proplists:get_value(default_shell,Config) of
+ case proplists:get_value(default_shell, Config) of
old ->
%% Old shell tests
{skip,"No new shell found"};
new ->
%% New shell tests
- rtnode([{putline,""},
+ rtnode([{putline, ""},
+ {expect, "1> $"},
{putline, "2."},
- {getline, "2"},
- {putline,[7]},
- {sleep,timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"s"},
- {putline,"c"},
- {putline_raw,""},
- {getline,"Eshell"},
- {putline_raw,""},
- {getline,"1>"},
- {putline,"35."},
- {getline,"35"}],[])
+ {expect, "\r\n2\r\n"},
+ {putline, "\^g"},
+ {expect, ["--> $"]},
+ {putline, "s"},
+ {expect, ["--> $"]},
+ {putline, "c"},
+ {expect, ["\r\nEshell"]},
+ {expect, ["1> $"]},
+ {putline, "35."},
+ {expect, "\r\n35\r\n2> $"}],
+ []),
+ ok
end.
-job_control_remote(doc) -> [ "Tests that remote shell can be "
- "started by means of job control" ];
+%% Tests that remote shell can be started by means of job control.
job_control_remote(Config) when is_list(Config) ->
- case {node(),proplists:get_value(default_shell,Config)} of
- {nonode@nohost,_} ->
- exit(not_distributed);
- {_,old} ->
+ case proplists:get_value(default_shell, Config) of
+ old ->
{skip,"No new shell found"};
_ ->
- RNode = create_nodename(),
- MyNode = atom2list(node()),
- Pid = spawn_link(fun() ->
- receive die ->
- ok
- end
- end),
- PidStr = pid_to_list(Pid),
- register(kalaskula,Pid),
- CookieString = lists:flatten(
- io_lib:format("~w",
- [erlang:get_cookie()])),
- Res = rtnode([{putline,""},
- {putline, "erlang:get_cookie()."},
- {getline, CookieString},
- {putline,[7]},
- {sleep,timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"r '"++MyNode++"'"},
- {putline,"c"},
- {putline_raw,""},
- {getline,"Eshell"},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++MyNode++")1>"},
- {putline,"whereis(kalaskula)."},
- {getline,PidStr},
- {sleep,timeout(short)}, % Race, known bug.
- {putline_raw,"exit()."},
- {getline,"***"},
- {putline,[7]},
- {putline,""},
- {getline," -->"},
- {putline,"c 1"},
- {putline,""},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++RNode++")"}],RNode),
- Pid ! die,
- Res
+ NSNode = start_node(?FUNCTION_NAME, []),
+ try
+ test_remote_job_control(NSNode)
+ after
+ test_server:stop_node(NSNode)
+ end
end.
-%% Tests that remote shell can be
-%% started by means of job control to -noshell node.
+%% Tests that remote shell can be started by means of job control to
+%% -noshell node.
job_control_remote_noshell(Config) when is_list(Config) ->
- case {node(),proplists:get_value(default_shell,Config)} of
- {nonode@nohost,_} ->
- exit(not_distributed);
- {_,old} ->
+ case proplists:get_value(default_shell, Config) of
+ old ->
{skip,"No new shell found"};
_ ->
- RNode = create_nodename(),
- NSNode = start_noshell_node(interactive_shell_noshell),
- Pid = spawn_link(NSNode, fun() ->
- receive die ->
- ok
- end
- end),
- PidStr = rpc:call(NSNode,erlang,pid_to_list,[Pid]),
- true = rpc:call(NSNode,erlang,register,[kalaskula,Pid]),
- NSNodeStr = atom2list(NSNode),
- CookieString = lists:flatten(
- io_lib:format("~w",
- [erlang:get_cookie()])),
- Res = rtnode([{putline,""},
- {putline, "erlang:get_cookie()."},
- {getline, CookieString},
- {putline,[7]},
- {sleep,timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"r '"++NSNodeStr++"'"},
- {putline,"c"},
- {putline_raw,""},
- {getline,"Eshell"},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++NSNodeStr++")1>"},
- {putline,"whereis(kalaskula)."},
- {getline,PidStr},
- {sleep,timeout(short)}, % Race, known bug.
- {putline_raw,"exit()."},
- {getline,"***"},
- {putline,[7]},
- {putline,""},
- {getline," -->"},
- {putline,"c 1"},
- {putline,""},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++RNode++")"}],RNode),
- Pid ! die,
- stop_noshell_node(NSNode),
- Res
+ NSNode = start_node(?FUNCTION_NAME, ["-noshell"]),
+ try
+ test_remote_job_control(NSNode)
+ after
+ test_server:stop_node(NSNode)
+ end
end.
+test_remote_job_control(Node) ->
+ RemNode = create_nodename(),
+ Pid = spawn_link(Node, fun() ->
+ receive die ->
+ ok
+ end
+ end),
+ PidStr = erpc:call(Node, erlang, pid_to_list, [Pid]),
+ true = erpc:call(Node, erlang, register, [kalaskula,Pid]),
+ PrintedNode = printed_atom(Node),
+ CookieString = printed_atom(erlang:get_cookie()),
+
+ rtnode([{putline, ""},
+ {putline, "erlang:get_cookie()."},
+ {expect, "\r\n\\Q" ++ CookieString ++ "\\E"},
+ {putdata, "\^g"},
+ {expect, " --> $"},
+ {putline, "r " ++ PrintedNode},
+ {expect, "\r\n"},
+ {putline, "c"},
+ {expect, "\r\n"},
+ {expect, "Eshell"},
+ {expect, "\\Q(" ++ atom_to_list(Node) ++")1> \\E$"},
+ {putline, "whereis(kalaskula)."},
+ {expect, PidStr},
+ {putline, "exit()."},
+ {expect, "[*][*][*] Shell process terminated!"},
+ {putdata, "\^g"},
+ {expect, " --> $"},
+ {putline, "c 1"},
+ {expect, "\r\n"},
+ {putline, ""},
+ {expect, "\\Q("++RemNode++")\\E[12]> $"}
+ ], RemNode),
+ Pid ! die,
+ ok.
+
%% Tests various control keys.
-ctrl_keys(_Conf) when is_list(_Conf) ->
- Cu=[$\^u],
- Cw=[$\^w],
- Cy=[$\^y],
- Home=[27,$O,$H],
- End=[27,$O,$F],
+ctrl_keys(_Config) ->
+ Cu = [$\^u],
+ Cw = [$\^w],
+ Cy = [$\^y],
+ Home = [27,$O,$H],
+ End = [27,$O,$F],
rtnode([{putline,""},
{putline,"2."},
- {getline,"2"},
+ {expect,"2"},
{putline,"\"hello "++Cw++"world\"."}, % test <CTRL>+W
- {getline,"\"world\""},
+ {expect,"\"world\""},
{putline,"\"hello "++Cu++"\"world\"."}, % test <CTRL>+U
- {getline,"\"world\""},
+ {expect,"\"world\""},
{putline,"world\"."++Home++"\"hello "}, % test <HOME>
- {getline,"\"hello world\""},
+ {expect,"\"hello world\""},
{putline,"world"++Home++"\"hello "++End++"\"."}, % test <END>
- {getline,"\"hello world\""},
+ {expect,"\"hello world\""},
{putline,"\"hello world\""++Cu++Cy++"."},
- {getline,"\"hello world\""}]
- ++wordLeft()++wordRight(),[]).
-
+ {expect,"\"hello world\""}] ++
+ wordLeft() ++ wordRight(), []),
+ ok.
wordLeft() ->
- L1=[27,27,$[,$D],
- L2=[27]++"[5D",
- L3=[27]++"[1;5D",
- wordLeft(L1)++wordLeft(L2)++wordLeft(L3).
+ L1 = "\e\e[D",
+ L2 = "\e[5D",
+ L3 = "\e[1;5D",
+ wordLeft(L1) ++ wordLeft(L2) ++ wordLeft(L3).
wordLeft(Chars) ->
- End=[27,$O,$F],
+ End = "\eOF",
[{putline,"\"world\""++Chars++"hello "++End++"."},
- {getline,"\"hello world\""}].
+ {expect,"\"hello world\""}].
wordRight() ->
- R1=[27,27,$[,$C],
- R2=[27]++"[5C",
- R3=[27]++"[1;5C",
- wordRight(R1)++wordRight(R2)++wordRight(R3).
+ R1 = "\e\e[C",
+ R2 = "\e[5C",
+ R3 = "\e[1;5C",
+ wordRight(R1) ++ wordRight(R2) ++ wordRight(R3).
wordRight(Chars) ->
- Home=[27,$O,$H],
+ Home = "\eOH",
[{putline,"world"++Home++"\"hello "++Chars++"\"."},
- {getline,"\"hello world\""}].
+ {expect,"\"hello world\""}].
%% Test that -remsh works
-remsh(Config) when is_list(Config) ->
- case proplists:get_value(default_shell,Config) of
- old -> {skip,"Not supported in old shell"};
- new ->
- NodeStr = lists:flatten(io_lib:format("~p",[node()])),
- [_Name,Host] = string:split(atom_to_list(node()),"@"),
- Cmds = [{kill_emulator_command,sigint},
- {putline,""},
- {putline,"node()."},
- {getline,NodeStr}],
+remsh_basic(Config) when is_list(Config) ->
+ TargetNode = start_node(?FUNCTION_NAME, []),
+ TargetNodeStr = printed_atom(TargetNode),
+ [_Name,Host] = string:split(atom_to_list(node()), "@"),
- %% Test that remsh works with explicit -sname
- rtnode(Cmds ++ [{putline,"nodes()."},
- {getline,"['Remshtest@"++Host++"']"}],
- "Remshtest", [], "-remsh " ++ NodeStr),
+ PreCmds = [{putline,""},
+ {putline,"node()."},
+ {expect, "\\Q" ++ TargetNodeStr ++ "\\E\r\n"}],
- %% Test that remsh works without -sname
- rtnode(Cmds, [], [], " -remsh " ++ NodeStr)
+ PostCmds = quit_hosting_node(),
+ %% Test that remsh works with explicit -sname.
+ HostNode = atom_to_list(?FUNCTION_NAME) ++ "_host",
+ HostNodeStr = printed_atom(list_to_atom(HostNode ++ "@" ++ Host)),
+ rtnode(PreCmds ++
+ [{putline,"nodes()."},
+ {expect, "\\Q" ++ HostNodeStr ++ "\\E"}] ++
+ PostCmds,
+ HostNode, [], "-remsh " ++ TargetNodeStr),
- end.
+ %% Test that remsh works without -sname.
+ rtnode(PreCmds ++ PostCmds, [], [], " -remsh " ++ TargetNodeStr),
-%% Test that -remsh works with long names
-remsh_longnames(Config) when is_list(Config) ->
+ test_server:stop_node(TargetNode),
- case proplists:get_value(default_shell,Config) of
- old -> {skip,"Not supported in old shell"};
- new ->
- %% If we cannot resolve the domain, we need to add localhost to the longname
- Domain =
- case inet_db:res_option(domain) of
- [] ->
- "@127.0.0.1";
- _ -> ""
- end,
- case rtstart(" -name " ++ atom_to_list(?FUNCTION_NAME)++Domain) of
- {ok, _SRPid, _STPid, SState} ->
- {ok, _CRPid, CTPid, CState} =
- rtstart("-name undefined" ++ Domain ++
- " -remsh " ++ atom_to_list(?FUNCTION_NAME)),
- try
- ok = get_and_put(
- CTPid,
- [{kill_emulator_command,sigint},
- {putline,""},
- {putline,"node()."},
- {getline_re,atom_to_list(?FUNCTION_NAME)}], 1)
- after
- rtstop(CState), %% Stop client before server
- rtstop(SState)
- end;
- Else ->
- Else
- end
+ ok.
+
+quit_hosting_node() ->
+ %% Command sequence for entering a shell on the hosting node.
+ [{putdata, "\^g"},
+ {expect, "--> $"},
+ {putline, "s"},
+ {expect, "--> $"},
+ {putline, "c"},
+ {expect, ["Eshell"]},
+ {expect, ["1> $"]}].
+
+%% Test that -remsh works with long names.
+remsh_longnames(Config) when is_list(Config) ->
+ %% If we cannot resolve the domain, we need to add localhost to the longname
+ Domain =
+ case inet_db:res_option(domain) of
+ [] ->
+ "@127.0.0.1";
+ _ -> ""
+ end,
+ case rtstart(" -name " ++ atom_to_list(?FUNCTION_NAME)++Domain) of
+ {ok, _SRPid, STPid, SState} ->
+ {ok, _CRPid, CTPid, CState} =
+ rtstart("-name undefined" ++ Domain ++
+ " -remsh " ++ atom_to_list(?FUNCTION_NAME)),
+ ok = send_commands(
+ STPid,
+ [{putline, ""},
+ {putline, "node()."},
+ {expect, "\\Q" ++ atom_to_list(?FUNCTION_NAME) ++ "\\E"}], 1),
+ try
+ ok = send_commands(
+ CTPid,
+ [{putline, ""},
+ {putline, "node()."},
+ {expect, "\\Q" ++ atom_to_list(?FUNCTION_NAME) ++ "\\E"} | quit_hosting_node()], 1)
+ after
+ rtstop(CState), %% Stop client before server
+ rtstop(SState)
+ end;
+ Else ->
+ Else
end.
-%% Test that -remsh works without epmd
+%% Test that -remsh works without epmd.
remsh_no_epmd(Config) when is_list(Config) ->
-
- case proplists:get_value(default_shell,Config) of
- old -> {skip,"Not supported in old shell"};
- new ->
- EPMD_ARGS = "-start_epmd false -erl_epmd_port 12345 ",
- case rtstart([],"ERL_EPMD_PORT=12345 ",
- EPMD_ARGS ++ " -sname " ++ atom_to_list(?FUNCTION_NAME)) of
- {ok, _SRPid, STPid, SState} ->
- try
- ok = get_and_put(
- STPid,
- [{putline,""},
- {putline,"node()."},
- {getline_re,atom_to_list(?FUNCTION_NAME)}], 1),
- {ok, _CRPid, CTPid, CState} =
- rtstart([],"ERL_EPMD_PORT=12345 ",
- EPMD_ARGS ++ " -remsh "++atom_to_list(?FUNCTION_NAME)),
- try
- ok = get_and_put(
- CTPid,
- [{kill_emulator_command,sigint},
- {putline,""},
- {putline,"node()."},
- {getline_re,atom_to_list(?FUNCTION_NAME)}], 1)
- after
- rtstop(CState)
- end
- after
- rtstop(SState)
- end;
- Else ->
- Else
- end
+ EPMD_ARGS = "-start_epmd false -erl_epmd_port 12345 ",
+ case rtstart([],"ERL_EPMD_PORT=12345 ",
+ EPMD_ARGS ++ " -sname " ++ atom_to_list(?FUNCTION_NAME)) of
+ {ok, _SRPid, STPid, SState} ->
+ try
+ ok = send_commands(
+ STPid,
+ [{putline, ""},
+ {putline, "node()."},
+ {expect, "\\Q" ++ atom_to_list(?FUNCTION_NAME) ++ "\\E"}], 1),
+ {ok, _CRPid, CTPid, CState} =
+ rtstart([],"ERL_EPMD_PORT=12345 ",
+ EPMD_ARGS ++ " -remsh "++atom_to_list(?FUNCTION_NAME)),
+ try
+ ok = send_commands(
+ CTPid,
+ [{putline, ""},
+ {putline, "node()."},
+ {expect, "\\Q" ++ atom_to_list(?FUNCTION_NAME) ++ "\\E"} | quit_hosting_node()], 1)
+ after
+ rtstop(CState)
+ end
+ after
+ rtstop(SState)
+ end;
+ Else ->
+ Else
end.
-rtnode(C,N) ->
- rtnode(C,N,[]).
-rtnode(Commands,Nodename,ErlPrefix) ->
- rtnode(Commands,Nodename,ErlPrefix,[]).
-rtnode(Commands,Nodename,ErlPrefix,Args) ->
- case rtstart(Nodename,ErlPrefix,Args) of
+rtnode(C) ->
+ rtnode(C, []).
+
+rtnode(C, N) ->
+ rtnode(C, N, []).
+
+rtnode(Commands, Nodename, ErlPrefix) ->
+ rtnode(Commands, Nodename, ErlPrefix, []).
+
+rtnode(Commands, Nodename, ErlPrefix, Args) ->
+ case rtstart(Nodename, ErlPrefix, Args) of
{ok, _SPid, CPid, RTState} ->
- erase(getline_skipped),
- Res = (catch get_and_put(CPid, Commands, 1)),
+ Res = catch send_commands(CPid, Commands, 1),
Logs = rtstop(RTState),
case Res of
ok ->
- {Res, Logs};
- _Else ->
+ rtnode_dump_logs(Logs),
+ ok;
+ _ ->
rtnode_dump_logs(Logs),
ok = Res
- end;
+ end,
+ {ok, Logs};
Skip ->
Skip
end.
rtstart(Args) ->
- rtstart([],[],Args).
-rtstart(Nodename,ErlPrefix,Args) ->
+ rtstart([], [], Args).
+
+rtstart(Nodename, ErlPrefix, Args) ->
case get_progs() of
{error,_Reason} ->
{skip,"No runerl present"};
@@ -844,20 +861,7 @@ rtstart(Nodename,ErlPrefix,Args) ->
rtstop({CPid, SPid, ToErl, Tempdir}) ->
case stop_runerl_node(CPid) of
{error,_} ->
- CPid2 =
- start_toerl_server(ToErl,Tempdir),
- erase(getline_skipped),
- ok = get_and_put
- (CPid2,
- [{putline,[7]},
- {sleep,
- timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"s"},
- {putline,"c"},
- {putline,""}],1),
- stop_runerl_node(CPid2);
+ catch rtstop_try_harder(ToErl, Tempdir);
_ ->
ok
end,
@@ -866,6 +870,18 @@ rtstop({CPid, SPid, ToErl, Tempdir}) ->
file:del_dir_r(Tempdir),
Logs.
+rtstop_try_harder(ToErl, Tempdir) ->
+ CPid = start_toerl_server(ToErl, Tempdir),
+ ok = send_commands(CPid,
+ [{putline,[7]},
+ {expect, " --> $"},
+ {putline, "s"},
+ {putline, "c"},
+ {putline, ""}], 1),
+ stop_runerl_node(CPid).
+
+timeout(longest) ->
+ timeout(long) + timeout(normal);
timeout(long) ->
2 * timeout(normal);
timeout(short) ->
@@ -873,154 +889,72 @@ timeout(short) ->
timeout(normal) ->
10000 * test_server:timetrap_scale_factor().
-
-start_noshell_node(Name) ->
- PADir = filename:dirname(code:which(?MODULE)),
- {ok, Node} = test_server:start_node(Name,slave,[{args," -noshell -pa "++
- PADir++" "}]),
+start_node(Name, Args0) ->
+ PaDir = filename:dirname(code:which(?MODULE)),
+ Args1 = ["-pa",PaDir|Args0],
+ Args = lists:append(lists:join(" ", Args1)),
+ {ok, Node} = test_server:start_node(Name, slave, [{args,Args}]),
Node.
-stop_noshell_node(Node) ->
- test_server:stop_node(Node).
-get_and_put(_CPid,[],_) ->
- ok;
-get_and_put(CPid, [{sleep, X}|T],N) ->
+send_commands(CPid, [{sleep, X}|T], N) ->
?dbg({sleep, X}),
receive
after X ->
- get_and_put(CPid,T,N+1)
+ send_commands(CPid, T, N+1)
end;
-get_and_put(CPid, [{kill_emulator_command, Cmd}|T],N) ->
- ?dbg({kill_emulator_command, Cmd}),
- CPid ! {self(), {kill_emulator_command, Cmd}},
- receive
- {kill_emulator_command,_Res} ->
- get_and_put(CPid,T,N)
- end;
-get_and_put(CPid, [{getline, Match}|T],N) ->
- ?dbg({getline, Match}),
- CPid ! {self(), {get_line, timeout(normal)}},
- receive
- {get_line, timeout} ->
- error_logger:error_msg("~p: getline timeout waiting for \"~s\" "
- "(command number ~p, skipped: ~p)~n",
- [?MODULE, Match,N,get(getline_skipped)]),
- {error, timeout};
- {get_line, Data} ->
- ?dbg({data,Data}),
- case lists:prefix(Match, Data) of
- true ->
- erase(getline_skipped),
- get_and_put(CPid, T,N+1);
- false ->
- case get(getline_skipped) of
- undefined ->
- put(getline_skipped,[Data]);
- List ->
- put(getline_skipped,List ++ [Data])
- end,
- get_and_put(CPid, [{getline, Match}|T],N)
- end
- end;
-
-%% Hey ho copy paste from stdlib/io_proto_SUITE
-get_and_put(CPid, [{getline_re, Match}|T],N) ->
- ?dbg({getline_re, Match}),
- CPid ! {self(), {get_line, timeout(normal)}},
- receive
- {get_line, timeout} ->
- error_logger:error_msg("~p: getline_re timeout waiting for \"~s\" "
- "(command number ~p, skipped: ~p)~n",
- [?MODULE, Match,N,get(getline_skipped)]),
- {error, timeout};
- {get_line, Data} ->
- ?dbg({data,Data}),
- case re:run(Data, Match,[{capture,none}]) of
- match ->
- erase(getline_skipped),
- get_and_put(CPid, T,N+1);
- _ ->
- case get(getline_skipped) of
- undefined ->
- put(getline_skipped,[Data]);
- List ->
- put(getline_skipped,List ++ [Data])
- end,
- get_and_put(CPid, [{getline_re, Match}|T],N)
- end
+send_commands(CPid, [{expect, Expect}|T], N) when is_list(Expect) ->
+ ?dbg(Exp),
+ case command(CPid, {expect, [Expect], timeout(normal)}) of
+ ok ->
+ send_commands(CPid, T, N + 1);
+ {expect_timeout, Got} ->
+ ct:pal("expect timed out waiting for ~p\ngot: ~p\n", [Expect,Got]),
+ {error, timeout};
+ Other ->
+ Other
end;
-
-get_and_put(CPid, [{getdata, Match}|T],N) ->
- ?dbg({getdata, Match}),
- CPid ! {self(), {get_data, timeout(normal), Match}},
- receive
- {get_data, timeout} ->
- error_logger:error_msg("~p: getdata timeout waiting for \"~s\" "
- "(command number ~p, skipped: ~p)~n",
- [?MODULE, Match,N,get(getline_skipped)]),
- {error, timeout};
- {get_data, _Data} ->
- ?dbg({CPid,data,_Data}),
- get_and_put(CPid, T, N+1)
- end;
-
-get_and_put(CPid, [{putline_raw, Line}|T],N) ->
- ?dbg({putline_raw, Line}),
- CPid ! {self(), {send_line, Line}},
- Timeout = timeout(normal),
- receive
- {send_line, ok} ->
- get_and_put(CPid, T,N+1)
- after Timeout ->
- error_logger:error_msg("~p: putline_raw timeout (~p) sending "
- "\"~s\" (command number ~p)~n",
- [?MODULE, Timeout, Line, N]),
- {error, timeout}
+send_commands(CPid, [{putline, Line}|T], N) ->
+ send_commands(CPid, [{putdata, Line ++ "\n"}|T], N);
+send_commands(CPid, [{putdata, Data}|T], N) ->
+ ?dbg({putdata, Data}),
+ case command(CPid, {send_data, Data}) of
+ ok ->
+ send_commands(CPid, T, N+1);
+ Error ->
+ Error
end;
+send_commands(_CPid, [], _) ->
+ ok.
-get_and_put(CPid, [{putline, Line}|T],N) ->
- ?dbg({putline, Line}),
- CPid ! {self(), {send_line, Line}},
- Timeout = timeout(normal),
+command(Pid, Req) ->
+ Timeout = timeout(longest),
+ Ref = erlang:monitor(process, Pid),
+ Pid ! {self(), Ref, Req},
receive
- {send_line, ok} ->
- get_and_put(CPid, [{getline, []}|T],N)
+ {Ref, Reply} ->
+ erlang:demonitor(Ref, [flush]),
+ Reply;
+ {'DOWN', Ref, _, _, Reason} ->
+ {error, Reason}
after Timeout ->
- error_logger:error_msg("~p: putline timeout (~p) sending "
- "\"~s\" (command number ~p)~n[~p]~n",
- [?MODULE, Timeout, Line, N,get()]),
- {error, timeout}
- end;
-get_and_put(CPid, [{putdata, Data}|T],N) ->
- ?dbg({putdata, Data}),
- CPid ! {self(), {send_data, Data}},
- Timeout = timeout(normal),
- receive
- {send_data, ok} ->
- get_and_put(CPid, T,N+1)
- after Timeout ->
- error_logger:error_msg("~p: putline_raw timeout (~p) sending "
- "\"~s\" (command number ~p)~n",
- [?MODULE, Timeout, Data, N]),
- {error, timeout}
+ io:format("timeout while executing ~p\n", [Req]),
+ {error, timeout}
end.
wait_for_runerl_server(SPid) ->
- Ref = erlang:monitor(process, SPid),
+ Ref = erlang:monitor(process, SPid),
Timeout = timeout(long),
receive
- {'DOWN', Ref, process, SPid, _} ->
+ {'DOWN', Ref, process, SPid, _Reason} ->
ok
after Timeout ->
- {error, timeout}
+ {error, runerl_server_timeout}
end.
-
-
stop_runerl_node(CPid) ->
Ref = erlang:monitor(process, CPid),
CPid ! {self(), kill_emulator},
- Timeout = timeout(long),
+ Timeout = timeout(longest),
receive
{'DOWN', Ref, process, CPid, noproc} ->
ok;
@@ -1029,34 +963,38 @@ stop_runerl_node(CPid) ->
{'DOWN', Ref, process, CPid, {error, Reason}} ->
{error, Reason}
after Timeout ->
- {error, timeout}
+ {error, toerl_server_timeout}
end.
get_progs() ->
+ try
+ do_get_progs()
+ catch
+ throw:Thrown ->
+ {error, Thrown}
+ end.
+
+do_get_progs() ->
case os:type() of
{unix,freebsd} ->
- {error,"cant use run_erl on freebsd"};
+ throw("Can't use run_erl on FreeBSD");
{unix,openbsd} ->
- {error,"cant use run_erl on openbsd"};
+ throw("Can't use run_erl on OpenBSD");
{unix,_} ->
- case os:find_executable("run_erl") of
- RE when is_list(RE) ->
- case os:find_executable("to_erl") of
- TE when is_list(TE) ->
- case os:find_executable("erl") of
- E when is_list(E) ->
- {RE,TE,E};
- _ ->
- {error, "Could not find erl command"}
- end;
- _ ->
- {error, "Could not find to_erl command"}
- end;
- _ ->
- {error, "Could not find run_erl command"}
- end;
+ RunErl = find_executable("run_erl"),
+ ToErl = find_executable("to_erl"),
+ Erl = find_executable("erl"),
+ {RunErl, ToErl, Erl};
_ ->
- {error, "Not a unix OS"}
+ throw("Not a Unix OS")
+ end.
+
+find_executable(Name) ->
+ case os:find_executable(Name) of
+ Prog when is_list(Prog) ->
+ Prog;
+ false ->
+ throw("Could not find " ++ Name)
end.
create_tempdir() ->
@@ -1143,8 +1081,8 @@ try_to_erl(Command, N) ->
Port
end.
-toerl_server(Parent,ToErl,Tempdir) ->
- Port = try_to_erl("\""++ToErl++"\" "++Tempdir++"/ 2>/dev/null", 8),
+toerl_server(Parent, ToErl, TempDir) ->
+ Port = try_to_erl("\""++ToErl++"\" "++TempDir++"/ 2>/dev/null", 8),
case Port of
P when is_port(P) ->
Parent ! {self(),started};
@@ -1152,7 +1090,9 @@ toerl_server(Parent,ToErl,Tempdir) ->
Parent ! {self(),error,Other},
exit(Other)
end,
- case toerl_loop(#{ port => Port}) of
+
+ State = #{port => Port, acc => [], kill_emulator_command => init_stop},
+ case toerl_loop(State) of
normal ->
ok;
{error, Reason} ->
@@ -1161,100 +1101,133 @@ toerl_server(Parent,ToErl,Tempdir) ->
exit(Reason)
end.
-toerl_loop(#{ port := Port } = State0) ->
- ?dbg({toerl_loop, Port, maps:get(acc,State0,[]),
- maps:get(match,State0,nomatch)}),
+toerl_loop(#{port := Port} = State0) ->
+ ?dbg({toerl_loop, Port, map_get(acc, State0),
+ maps:get(match, State0, nomatch)}),
- State = handle_match(State0),
+ State = handle_expect(State0),
receive
{Port,{data,Data}} when is_port(Port) ->
?dbg({?LINE,Port,{data,Data}}),
- toerl_loop(State#{ acc => lists:flatten([maps:get(acc,State,[]),Data])});
- {Pid, {get_data, Timeout, Match}} ->
- toerl_loop(
- State#{ get =>
- #{ match => Match,
- timer => erlang:start_timer(Timeout, self(), timeout),
- tag => get_data,
- from => Pid }
- });
- {Pid, {get_line, Timeout}} ->
- toerl_loop(
- State#{ get =>
- #{ match => "\r\n",
- timer => erlang:start_timer(Timeout, self(), timeout),
- tag => get_line,
- from => Pid }
- });
- {Pid, {send_line, Data7}} ->
- Port ! {self(),{command, Data7++"\n"}},
- Pid ! {send_line, ok},
- toerl_loop(State);
- {Pid, {send_data, Data}} ->
- Port ! {self(),{command, Data}},
- Pid ! {send_data, ok},
- toerl_loop(State);
- {Pid, {kill_emulator_command, Cmd}} ->
- put(kill_emulator_command, Cmd),
- Pid ! {kill_emulator_command, ok},
+ toerl_loop(State#{acc => map_get(acc, State) ++ Data});
+ {Pid, Ref, {expect, Expect, Timeout}} ->
+ toerl_loop(init_expect(Pid, Ref, Expect, Timeout, State));
+ {Pid, Ref, {send_data, Data}} ->
+ Port ! {self(), {command, Data}},
+ Pid ! {Ref, ok},
toerl_loop(State);
{_Pid, kill_emulator} ->
- case get(kill_emulator_command) of
- undefined ->
- Port ! {self(),{command, "init:stop().\n"}};
- sigint ->
- ?dbg({putdata,[$\^c]}),
- Port ! {self(),{command, [$\^c]}},
- receive
- {Port,{data,_Data}} ->
- ?dbg({exit_data, _Data}),
- ok
- after 2000 ->
- ok
- end,
- ?dbg({putdata,"a\n"}),
- Port ! {self(),{command, "a\n"}}
- end,
- Timeout1 = timeout(long),
- receive
- {Port,eof} ->
- normal
- after Timeout1 ->
- {error, kill_timeout}
- end;
- {timeout,Timer,timeout} ->
- #{ get := #{ tag := Tag, from := Pid, timer := Timer } } = State,
- Pid ! {Tag, timeout},
- toerl_loop(maps:remove(get, State));
+ kill_emulator(State);
+ {timeout,Timer,expect_timeout} ->
+ toerl_loop(handle_expect_timeout(Timer, State));
{Port, eof} ->
{error, unexpected_eof};
Other ->
{error, {unexpected, Other}}
end.
-handle_match(#{ acc := Acc, get := #{ tag := Tag,
- match := Match,
- from := From,
- timer := Timer}} = State) ->
- case string:split(Acc, Match) of
- [Pre,Post] ->
- ?dbg({match,Pre}),
- From ! {Tag, Pre},
- erlang:cancel_timer(Timer),
- receive
- {timeout,Timer,timeout} ->
- ok
- after 0 ->
- ok
- end,
- maps:put(acc, Post, maps:remove(get, State));
- [Acc] ->
- State
+kill_emulator(#{port := Port}) ->
+ %% If the line happens to end in a ".", issuing "init:stop()."
+ %% will result in a syntax error. To avoid that, issue a "\n"
+ %% before "init:stop().".
+ Port ! {self(),{command, "\ninit:stop().\n"}},
+ wait_for_eof(Port).
+
+wait_for_eof(Port) ->
+ receive
+ {Port,eof} ->
+ normal;
+ _Other ->
+ wait_for_eof(Port)
+ after
+ timeout(long) ->
+ {error, kill_timeout}
+ end.
+
+init_expect(Pid, Ref, ExpectList, Timeout, State) ->
+ try compile_expect(ExpectList) of
+ Expect ->
+ Exp = #{expect => Expect,
+ ref => Ref,
+ source => ExpectList,
+ timer => erlang:start_timer(Timeout, self(), expect_timeout),
+ from => Pid},
+ State#{expect => Exp}
+ catch
+ Class:Reason:Stk ->
+ io:put_chars("Compilation of expect pattern failed:"),
+ io:format("~p\n", [ExpectList]),
+ io:put_chars(erl_error:format_exception(Class, Reason, Stk)),
+ exit(expect_pattern_error)
+ end.
+
+handle_expect(#{acc := Acc, expect := Exp} = State) ->
+ #{expect := Expect, from := Pid, ref := Ref} = Exp,
+ case Expect(Acc) of
+ nomatch ->
+ State;
+ {matched, Eaten, Result} ->
+ Pid ! {Ref, Result},
+ finish_expect(Eaten, State)
end;
-handle_match(State) ->
+handle_expect(State) ->
State.
+handle_expect_timeout(Timer, State) ->
+ #{acc := Acc, expect := Exp} = State,
+ #{expect := Expect, timer := Timer, from := Pid, ref := Ref} = Exp,
+ case Expect({timeout, Acc}) of
+ nomatch ->
+ Result = {expect_timeout, Acc},
+ Pid ! {Ref, Result},
+ finish_expect(0, State);
+ {matched, Eaten, Result} ->
+ Pid ! {Ref, Result},
+ finish_expect(Eaten, State)
+ end.
+
+finish_expect(Eaten, #{acc := Acc0,
+ expect := #{timer := Timer}}=State) ->
+ erlang:cancel_timer(Timer),
+ receive
+ {timeout,Timer,timeout} ->
+ ok
+ after 0 ->
+ ok
+ end,
+ Acc = lists:nthtail(Eaten, Acc0),
+ maps:remove(expect, State#{acc := Acc}).
+
+compile_expect([{timeout,Action}|T]) when is_function(Action, 1) ->
+ Next = compile_expect(T),
+ fun({timeout, _}=Tm) ->
+ {matched, 0, Action(Tm)};
+ (Subject) ->
+ Next(Subject)
+ end;
+compile_expect([{{re,RE0},Action}|T]) when is_binary(RE0), is_function(Action, 1) ->
+ {ok, RE} = re:compile(RE0),
+ Next = compile_expect(T),
+ fun({timeout, _}=Subject) ->
+ Next(Subject);
+ (Subject) ->
+ case re:run(Subject, RE, [{capture,first,index}]) of
+ nomatch ->
+ Next(Subject);
+ {match, [{Pos,Len}]} ->
+ Matched = binary:part(list_to_binary(Subject), Pos, Len),
+ {matched, Pos+Len, Action(Matched)}
+ end
+ end;
+compile_expect([RE|T]) when is_list(RE) ->
+ Ok = fun(_) -> ok end,
+ compile_expect([{{re,list_to_binary(RE)},Ok}|T]);
+compile_expect([]) ->
+ fun(_) ->
+ nomatch
+ end.
+
rtnode_check_logs(Logname, Pattern, Logs) ->
rtnode_check_logs(Logname, Pattern, true, Logs).
rtnode_check_logs(Logname, Pattern, Match, Logs) ->
@@ -1275,7 +1248,15 @@ rtnode_dump_logs(Logs) ->
end, Logs).
rtnode_read_logs(Tempdir) ->
- {ok, LogFiles} = file:list_dir(Tempdir),
+ {ok, LogFiles0} = file:list_dir(Tempdir),
+
+ %% Make sure that we only read log files and not any named pipes.
+ LogFiles = [F || F <- LogFiles0,
+ case F of
+ "erlang.log" ++ _ -> true;
+ _ -> false
+ end],
+
lists:foldl(
fun(File, Acc) ->
case file:read_file(filename:join(Tempdir, File)) of
@@ -1289,13 +1270,13 @@ rtnode_read_logs(Tempdir) ->
get_default_shell() ->
try
rtnode([{putline,""},
- {putline, "whereis(user_drv)."},
- {getline, "undefined"}],[]),
- old
+ {putline, "is_pid(whereis(user_drv))."},
+ {expect, "true\r\n"}], []),
+ new
catch _E:_R ->
?dbg({_E,_R}),
- new
+ old
end.
-atom2list(A) ->
- lists:flatten(io_lib:format("~s", [A])).
+printed_atom(A) ->
+ lists:flatten(io_lib:format("~w", [A])).
diff --git a/lib/kernel/test/kernel_SUITE.erl b/lib/kernel/test/kernel_SUITE.erl
index 1a88c70963..a5fce3ad32 100644
--- a/lib/kernel/test/kernel_SUITE.erl
+++ b/lib/kernel/test/kernel_SUITE.erl
@@ -23,7 +23,7 @@
-module(kernel_SUITE).
-include_lib("common_test/include/ct.hrl").
--compile(r21).
+-compile(r22).
%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl
index 5545759b5d..bdb90b8d13 100644
--- a/lib/kernel/test/logger_SUITE.erl
+++ b/lib/kernel/test/logger_SUITE.erl
@@ -77,7 +77,7 @@ end_per_testcase(Case, Config) ->
groups() ->
[].
-all() ->
+all() ->
[start_stop,
add_remove_handler,
multiple_handlers,
@@ -103,7 +103,8 @@ all() ->
process_metadata,
app_config,
kernel_config,
- pretty_print].
+ pretty_print,
+ pathological].
start_stop(_Config) ->
S = whereis(logger),
@@ -1204,6 +1205,21 @@ pretty_print(_Config) ->
IHs = ["Handler configuration: \n"|IHs2],
ok.
+pathological(cleanup,_Config) ->
+ logger:remove_handler(p1),
+ logger:set_primary_config(level,notice),
+ logger:unset_module_level(?MODULE),
+ ok.
+
+pathological(_Config) ->
+ ok = logger:set_primary_config(level,all),
+ ok = logger:add_handler(p1,?MODULE,#{level=>all,filter_default=>log}),
+ logger:notice(string, []),
+ check_logged(notice,"string",[],#{}),
+ logger:notice(report, []),
+ check_logged(notice,"report",[],#{}),
+ ok.
+
%%%-----------------------------------------------------------------
%%% Internal
check_logged(Level,Format,Args,Meta) ->
@@ -1284,7 +1300,7 @@ test_api(Level) ->
logger:Level("~w: ~w",[Level,fa]),
ok = check_logged(Level,"~w: ~w",[Level,fa],#{}),
logger:Level('~w: ~w',[Level,fa]),
- ok = check_logged(Level,'~w: ~w',[Level,fa],#{}),
+ ok = check_logged(Level,"~w: ~w",[Level,fa],#{}),
logger:Level(<<"~w: ~w">>,[Level,fa]),
ok = check_logged(Level,<<"~w: ~w">>,[Level,fa],#{}),
logger:Level("~w: ~w ~w",[Level,fa,meta],#{my=>meta}),
@@ -1297,7 +1313,7 @@ test_api(Level) ->
ok = check_logged(Level,<<"~w: ~w ~w">>,[Level,fun_to_fa,meta],#{my=>meta}),
logger:Level(fun(x) -> {'~w: ~w ~w',[Level,fun_to_fa,meta]} end,x,
#{my=>meta}),
- ok = check_logged(Level,'~w: ~w ~w',[Level,fun_to_fa,meta],#{my=>meta}),
+ ok = check_logged(Level,"~w: ~w ~w",[Level,fun_to_fa,meta],#{my=>meta}),
logger:Level(fun(x) -> #{Level=>fun_to_r,meta=>true} end,x,
#{my=>meta}),
ok = check_logged(Level,#{Level=>fun_to_r,meta=>true},#{my=>meta}),
@@ -1328,7 +1344,7 @@ test_log_function(Level) ->
ok = check_logged(Level,<<"~w: ~w ~w">>,[Level,fun_to_fa,meta],#{my=>meta}),
logger:log(Level,fun(x) -> {'~w: ~w ~w',[Level,fun_to_fa,meta]} end,
x, #{my=>meta}),
- ok = check_logged(Level,'~w: ~w ~w',[Level,fun_to_fa,meta],#{my=>meta}),
+ ok = check_logged(Level,"~w: ~w ~w",[Level,fun_to_fa,meta],#{my=>meta}),
logger:log(Level,fun(x) -> #{Level=>fun_to_r,meta=>true} end,
x, #{my=>meta}),
ok = check_logged(Level,#{Level=>fun_to_r,meta=>true},#{my=>meta}),
diff --git a/lib/kernel/test/seq_trace_SUITE.erl b/lib/kernel/test/seq_trace_SUITE.erl
index 506ea7bbec..64fd4c52ac 100644
--- a/lib/kernel/test/seq_trace_SUITE.erl
+++ b/lib/kernel/test/seq_trace_SUITE.erl
@@ -19,9 +19,6 @@
%%
-module(seq_trace_SUITE).
-%% label_capability_mismatch needs to run a part of the test on an OTP 20 node.
--compile(r20).
-
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
init_per_testcase/2,end_per_testcase/2]).
@@ -30,7 +27,7 @@
send/1, distributed_send/1, recv/1, distributed_recv/1,
trace_exit/1, distributed_exit/1, call/1, port/1,
port_clean_token/1,
- match_set_seq_token/1, gc_seq_token/1, label_capability_mismatch/1,
+ match_set_seq_token/1, gc_seq_token/1,
send_literal/1,inherit_on_spawn/1,inherit_on_dist_spawn/1,
dist_spawn_error/1]).
@@ -57,7 +54,7 @@ all() ->
old_heap_token, mature_heap_token,
distributed_exit, call, port, match_set_seq_token,
port_clean_token,
- gc_seq_token, label_capability_mismatch,
+ gc_seq_token,
inherit_on_spawn, inherit_on_dist_spawn, dist_spawn_error].
groups() ->
@@ -417,74 +414,6 @@ do_distributed_exit(TsType) ->
{'EXIT', Receiver, {exit, {before, exit}}}}, Ts}] = Result,
check_ts(TsType, Ts).
-label_capability_mismatch(Config) when is_list(Config) ->
- Releases = ["20_latest"],
- Available = [Rel || Rel <- Releases, test_server:is_release_available(Rel)],
- case Available of
- [] -> {skipped, "No incompatible releases available"};
- _ ->
- lists:foreach(fun do_incompatible_labels/1, Available),
- lists:foreach(fun do_compatible_labels/1, Available),
- ok
- end.
-
-do_incompatible_labels(Rel) ->
- Cookie = atom_to_list(erlang:get_cookie()),
- {ok, Node} = test_server:start_node(
- list_to_atom(atom_to_list(?MODULE)++"_"++Rel), peer,
- [{args, " -setcookie "++Cookie}, {erl, [{release, Rel}]}]),
-
- {_,Dir} = code:is_loaded(?MODULE),
- Mdir = filename:dirname(Dir),
- true = rpc:call(Node,code,add_patha,[Mdir]),
- seq_trace:reset_trace(),
- true = is_pid(rpc:call(Node,?MODULE,start_tracer,[])),
- Receiver = spawn(Node,?MODULE,one_time_receiver,[]),
-
- %% This node does not support arbitrary labels, so it must fail with a
- %% timeout as the token is dropped silently.
- seq_trace:set_token(label,make_ref()),
- seq_trace:set_token('receive',true),
-
- Receiver ! 'receive',
- %% let the other process receive the message:
- receive after 10 -> ok end,
- seq_trace:reset_trace(),
-
- {error,timeout} = rpc:call(Node,?MODULE,stop_tracer,[1]),
- stop_node(Node),
- ok.
-
-do_compatible_labels(Rel) ->
- Cookie = atom_to_list(erlang:get_cookie()),
- {ok, Node} = test_server:start_node(
- list_to_atom(atom_to_list(?MODULE)++"_"++Rel), peer,
- [{args, " -setcookie "++Cookie}, {erl, [{release, Rel}]}]),
-
- {_,Dir} = code:is_loaded(?MODULE),
- Mdir = filename:dirname(Dir),
- true = rpc:call(Node,code,add_patha,[Mdir]),
- seq_trace:reset_trace(),
- true = is_pid(rpc:call(Node,?MODULE,start_tracer,[])),
- Receiver = spawn(Node,?MODULE,one_time_receiver,[]),
-
- %% This node does not support arbitrary labels, but small integers should
- %% still work.
- Label = 1234,
- seq_trace:set_token(label,Label),
- seq_trace:set_token('receive',true),
-
- Receiver ! 'receive',
- %% let the other process receive the message:
- receive after 10 -> ok end,
- Self = self(),
- seq_trace:reset_trace(),
- Result = rpc:call(Node,?MODULE,stop_tracer,[1]),
- stop_node(Node),
- ok = io:format("~p~n",[Result]),
- [{Label,{'receive',_,Self,Receiver,'receive'}, _}] = Result,
- ok.
-
call(doc) ->
"Tests special forms {is_seq_trace} and {get_seq_token} "
"in trace match specs.";
diff --git a/lib/megaco/configure b/lib/megaco/configure
index 6471979298..9773942ae7 100755
--- a/lib/megaco/configure
+++ b/lib/megaco/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +221,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +253,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +292,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +310,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +332,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +380,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +398,35 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +438,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +467,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +511,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +525,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +542,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,50 +614,46 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
ac_unique_file="vsn.mk"
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
PERL
@@ -638,9 +673,6 @@ DED_EXT
DED_GCC
DED_CC
DED_LD
-EGREP
-GREP
-CPP
GETCONF
OTP_EXTRA_FLAGS
ERLANG_OSTYPE
@@ -659,6 +691,10 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -720,8 +756,7 @@ CC
CFLAGS
LDFLAGS
LIBS
-CPPFLAGS
-CPP'
+CPPFLAGS'
# Initialize some variables set by options.
@@ -790,8 +825,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -832,9 +865,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -858,9 +891,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1071,9 +1104,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1087,9 +1120,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1133,9 +1166,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1151,7 +1184,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1215,7 +1248,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1333,6 +1366,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1359,7 +1393,6 @@ Some influential environment variables:
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1380,9 +1413,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1410,7 +1443,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1418,7 +1452,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1428,9 +1462,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1447,14 +1481,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1462,14 +1496,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1485,14 +1520,14 @@ fi
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1500,17 +1535,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1531,11 +1567,12 @@ fi
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -1543,16 +1580,9 @@ else
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ which can conflict with char $2 (); below. */
+#include <limits.h>
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -1570,156 +1600,66 @@ choke me
#endif
int
-main ()
+main (void)
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-} # ac_fn_c_check_header_mongrel
+} # ac_fn_c_check_header_compile
# ac_fn_c_try_run LINENO
# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
ac_fn_c_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1729,25 +1669,26 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
@@ -1758,37 +1699,6 @@ fi
} # ac_fn_c_try_run
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
# --------------------------------------------
# Tries to find the compile-time value of EXPR in a program that includes
@@ -1803,7 +1713,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0;
@@ -1813,14 +1723,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=0 ac_mid=0
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1830,9 +1741,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid; break
-else
+else $as_nop
as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
@@ -1840,14 +1752,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0;
@@ -1857,14 +1769,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=-1 ac_mid=-1
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0;
@@ -1874,9 +1787,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=$ac_mid; break
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
@@ -1884,14 +1798,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
ac_lo= ac_hi=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -1899,7 +1813,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1909,12 +1823,13 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
case $ac_lo in #((
?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -1924,12 +1839,12 @@ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.val", "w");
@@ -1957,9 +1872,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
ac_retval=1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -1971,14 +1887,34 @@ rm -f conftest.val
as_fn_set_status $ac_retval
} # ac_fn_c_compute_int
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -2011,8 +1947,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2047,7 +1987,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2082,11 +2022,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2097,8 +2039,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2122,7 +2064,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2130,14 +2072,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2145,15 +2087,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2161,8 +2103,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2176,63 +2118,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2242,19 +2169,434 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2265,12 +2607,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2279,24 +2621,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2306,11 +2648,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2324,57 +2667,123 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_aux_dir=
-for ac_dir in ${ERL_TOP}/erts/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ${ERL_TOP}/erts/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2393,21 +2802,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2426,10 +2836,117 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=win32
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
+fi
+
+
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -2439,11 +2956,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2451,11 +2969,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2466,11 +2988,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2479,11 +3001,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2491,11 +3014,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2506,11 +3033,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2518,8 +3045,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2532,11 +3059,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2544,11 +3072,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2559,11 +3091,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2572,11 +3104,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2585,15 +3118,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2609,18 +3146,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2631,11 +3168,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2643,11 +3181,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2658,11 +3200,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2675,11 +3217,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2687,11 +3230,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2702,11 +3249,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2718,8 +3265,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2727,25 +3274,129 @@ esac
fi
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -2755,7 +3406,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -2763,7 +3414,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -2775,9 +3426,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -2798,11 +3449,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -2819,7 +3471,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -2835,44 +3487,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2886,15 +3540,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -2903,7 +3557,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -2915,8 +3569,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -2924,10 +3578,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -2935,39 +3589,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -2981,11 +3636,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -2994,31 +3650,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3028,29 +3685,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3059,57 +3720,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3124,94 +3788,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3232,111 +3946,111 @@ MIXED_VSL=no
MIXED_VC=no
MIXED_MINGW=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
-$as_echo_n "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
+printf %s "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
-$as_echo "MSYS and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
+printf "%s\n" "MSYS and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
-$as_echo "Cygwin and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
+printf "%s\n" "Cygwin and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /bin/wslpath; then
CFLAGS="$CFLAGS -O2"
MIXED_WSL=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
-$as_echo "WSL and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
+printf "%s\n" "WSL and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not within any known env" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$MIXED_MSYS" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
-$as_echo_n "checking for mixed cygwin and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
+printf %s "checking for mixed cygwin and native MinGW environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with cygwin" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
-$as_echo_n "checking for mixed MSYS and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
+printf %s "checking for mixed MSYS and native MinGW environment... " >&6; }
if test "x$GCC" = x"yes"; then
if test -x /usr/bin/msys-=.0.dll; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with msys" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
-$as_echo_n "checking if we mix cygwin with any native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
+printf %s "checking if we mix cygwin with any native compiler... " >&6; }
if test "X$MIXED_CYGWIN" = "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
-$as_echo_n "checking if we mix msys with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
+printf %s "checking if we mix msys with another native compiler... " >&6; }
if test "X$MIXED_MSYS" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
-$as_echo_n "checking if we mix WSL with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
+printf %s "checking if we mix WSL with another native compiler... " >&6; }
if test "X$MIXED_WSL" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
@@ -3346,13 +4060,14 @@ fi
# Check whether --enable-megaco_reentrant_flex_scanner was given.
-if test "${enable_megaco_reentrant_flex_scanner+set}" = set; then :
+if test ${enable_megaco_reentrant_flex_scanner+y}
+then :
enableval=$enable_megaco_reentrant_flex_scanner; if test x${enable_megaco_reentrant_flex_scanner} = xno ; then
ENABLE_REENTRANT_MEGACO_FLEX_SCANNER=false
else
ENABLE_REENTRANT_MEGACO_FLEX_SCANNER=true
fi
-else
+else $as_nop
ENABLE_REENTRANT_MEGACO_FLEX_SCANNER=true
fi
@@ -3364,11 +4079,12 @@ for ac_prog in flex lex
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LEX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$LEX"; then
ac_cv_prog_LEX="$LEX" # Let the user override the test.
else
@@ -3376,11 +4092,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_LEX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3391,11 +4111,11 @@ fi
fi
LEX=$ac_cv_prog_LEX
if test -n "$LEX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
-$as_echo "$LEX" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+printf "%s\n" "$LEX" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3403,15 +4123,26 @@ fi
done
test -n "$LEX" || LEX=":"
-if test "x$LEX" != "x:"; then
- cat >conftest.l <<_ACEOF
+ if test "x$LEX" != "x:"; then
+ cat >conftest.l <<_ACEOF
+%{
+#ifdef __cplusplus
+extern "C"
+#endif
+int yywrap(void);
+%}
%%
a { ECHO; }
b { REJECT; }
c { yymore (); }
d { yyless (1); }
e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */
- yyless ((input () != 0)); }
+#ifdef __cplusplus
+ yyless ((yyinput () != 0));
+#else
+ yyless ((input () != 0));
+#endif
+ }
f { unput (yytext[0]); }
. { BEGIN INITIAL; }
%%
@@ -3419,101 +4150,144 @@ f { unput (yytext[0]); }
extern char *yytext;
#endif
int
+yywrap (void)
+{
+ return 1;
+}
+int
main (void)
{
- return ! yylex () + ! yywrap ();
+ return ! yylex ();
}
_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex output file root" >&5
+printf %s "checking for lex output file root... " >&6; }
+if test ${ac_cv_prog_lex_root+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ac_cv_prog_lex_root=unknown
{ { ac_try="$LEX conftest.l"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$LEX conftest.l") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
-$as_echo_n "checking lex output file root... " >&6; }
-if ${ac_cv_prog_lex_root+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
if test -f lex.yy.c; then
ac_cv_prog_lex_root=lex.yy
elif test -f lexyy.c; then
ac_cv_prog_lex_root=lexyy
-else
- as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
-$as_echo "$ac_cv_prog_lex_root" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+printf "%s\n" "$ac_cv_prog_lex_root" >&6; }
+if test "$ac_cv_prog_lex_root" = unknown
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot find output from $LEX; giving up on $LEX" >&5
+printf "%s\n" "$as_me: WARNING: cannot find output from $LEX; giving up on $LEX" >&2;}
+ LEX=: LEXLIB=
+fi
LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
-if test -z "${LEXLIB+set}"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
-$as_echo_n "checking lex library... " >&6; }
-if ${ac_cv_lib_lex+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test ${LEXLIB+y}
+then :
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex library" >&5
+printf %s "checking for lex library... " >&6; }
+if test ${ac_cv_lib_lex+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ac_save_LIBS="$LIBS"
+ ac_found=false
+ for ac_cv_lib_lex in 'none needed' -lfl -ll 'not found'; do
+ case $ac_cv_lib_lex in #(
+ 'none needed') :
+ ;; #(
+ 'not found') :
+ break ;; #(
+ *) :
+ LIBS="$ac_cv_lib_lex $ac_save_LIBS" ;; #(
+ *) :
+ ;;
+esac
- ac_save_LIBS=$LIBS
- ac_cv_lib_lex='none needed'
- for ac_lib in '' -lfl -ll; do
- LIBS="$ac_lib $ac_save_LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
`cat $LEX_OUTPUT_ROOT.c`
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_lex=$ac_lib
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_found=:
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- test "$ac_cv_lib_lex" != 'none needed' && break
+ if $ac_found; then
+ break
+ fi
done
- LIBS=$ac_save_LIBS
+ LIBS="$ac_save_LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
-$as_echo "$ac_cv_lib_lex" >&6; }
- test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+printf "%s\n" "$ac_cv_lib_lex" >&6; }
+ if test "$ac_cv_lib_lex" = 'not found'
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: required lex library not found; giving up on $LEX" >&5
+printf "%s\n" "$as_me: WARNING: required lex library not found; giving up on $LEX" >&2;}
+ LEX=: LEXLIB=
+elif test "$ac_cv_lib_lex" = 'none needed'
+then :
+ LEXLIB=''
+else $as_nop
+ LEXLIB=$ac_cv_lib_lex
+fi
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
-$as_echo_n "checking whether yytext is a pointer... " >&6; }
-if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "$LEX" != :
+then :
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+printf %s "checking whether yytext is a pointer... " >&6; }
+if test ${ac_cv_prog_lex_yytext_pointer+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
# POSIX says lex can declare yytext either as a pointer or an array; the
# default is implementation-dependent. Figure out which it is, since
# not all implementations provide the %pointer and %array declarations.
ac_cv_prog_lex_yytext_pointer=no
-ac_save_LIBS=$LIBS
-LIBS="$LEXLIB $ac_save_LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define YYTEXT_POINTER 1
`cat $LEX_OUTPUT_ROOT.c`
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_lex_yytext_pointer=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_save_LIBS
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
-$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+printf "%s\n" "$ac_cv_prog_lex_yytext_pointer" >&6; }
if test $ac_cv_prog_lex_yytext_pointer = yes; then
-$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
+printf "%s\n" "#define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
fi
rm -f conftest.l $LEX_OUTPUT_ROOT.c
@@ -3553,25 +4327,25 @@ int main ( int argc, char * argv[] )
return 0;
}
EOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for reentrant capable flex" >&5
-$as_echo_n "checking for reentrant capable flex... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for reentrant capable flex" >&5
+printf %s "checking for reentrant capable flex... " >&6; }
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$flex_compile\""; } >&5
(eval $flex_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && test -s conftest.c; then
ENABLE_REENTRANT_MEGACO_FLEX_SCANNER=true
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
echo "configure: failed program was:" 1>&5
cat conftest.flex 1>&5
echo "configure: PATH was $PATH" 1>&5
ENABLE_REENTRANT_MEGACO_FLEX_SCANNER=false
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
@@ -3582,13 +4356,14 @@ fi
# Check whether --enable-megaco_flex_scanner_lineno was given.
-if test "${enable_megaco_flex_scanner_lineno+set}" = set; then :
+if test ${enable_megaco_flex_scanner_lineno+y}
+then :
enableval=$enable_megaco_flex_scanner_lineno; if test x${enable_megaco_flex_scanner_lineno} = xno ; then
ENABLE_MEGACO_FLEX_SCANNER_LINENO=false
else
ENABLE_MEGACO_FLEX_SCANNER_LINENO=true
fi
-else
+else $as_nop
ENABLE_MEGACO_FLEX_SCANNER_LINENO=true
fi
@@ -3613,43 +4388,50 @@ fi
if test "x$GCC" = xyes; then
# Treat certain GCC warnings as errors
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CFLAGS="-Werror=return-type $CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
fi
# Check whether --enable-sanitizers was given.
-if test "${enable_sanitizers+set}" = set; then :
+if test ${enable_sanitizers+y}
+then :
enableval=$enable_sanitizers;
case "$enableval" in
no) sanitizers= ;;
@@ -3662,403 +4444,35 @@ LDFLAGS="$LDFLAGS $sanitizers"
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-fi
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
-else
- ac_cv_header_stdc=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
USER_LD=$LD
@@ -4068,29 +4482,34 @@ USER_LDFLAGS="$LDFLAGS"
NEED_NPTL_PTHREAD_H=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
-$as_echo_n "checking for native win32 threads... " >&6; }
-if test "X$host_os" = "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
+printf %s "checking for native win32 threads... " >&6; }
+if test "X$host_os" = "Xwin32"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
THR_DEFS="-DWIN32_THREADS"
THR_LIBS=
THR_LIB_NAME=win32_threads
THR_LIB_TYPE=win32_threads
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
THR_DEFS=
THR_LIBS=
THR_LIB_NAME=
THR_LIB_TYPE=posix_unknown
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+printf %s "checking for pthread_create in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lpthread $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4099,40 +4518,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_pthread_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_pthread_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes
+then :
THR_LIBS="-lpthread"
fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
+printf %s "checking for pthread_create in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lc_r $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4141,96 +4562,112 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_c_r_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_c_r_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_create" = xyes
+then :
THR_LIBS="-lc_r"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
-if test "x$ac_cv_func_pthread_create" = xyes; then :
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
+if test "x$ac_cv_func_pthread_create" = xyes
+then :
THR_LIBS="none_needed"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
-$as_echo_n "checking if the '-pthread' switch can be used... " >&6; }
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
+printf %s "checking if the '-pthread' switch can be used... " >&6; }
saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -pthread"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_create((void*)0,(void*)0,(void*)0,(void*)0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
THR_DEFS="-pthread"
THR_LIBS="-pthread"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS=$saved_cflags
if test "x$THR_LIBS" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- fi
- if test "x$THR_LIBS" != "x"; then
+fi
+
+ if test "x$THR_LIBS" != "x"
+then :
+
THR_DEFS="$THR_DEFS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS"
THR_LIB_NAME=pthread
if test "x$THR_LIBS" = "xnone_needed"; then
THR_LIBS=
fi
- case $host_os in
- solaris*)
- THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;;
- linux*)
+ case $host_os in #(
+ solaris*) :
+
+ THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS"
+ ;; #(
+ linux*) :
+
THR_DEFS="$THR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS"
-if test "$cross_compiling" != "yes"; then
+if test "$cross_compiling" != "yes"
+then :
+
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -4238,11 +4675,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4254,23 +4695,26 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-else
+
+else $as_nop
+
host_getconf="$host_alias-getconf"
# Extract the first word of "$host_getconf", so it can be a program name with args.
set dummy $host_getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -4278,11 +4722,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="$host_getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4294,25 +4742,28 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""
+then :
+
GETCONF=
prfx="$erl_xcomp_sysroot"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
set dummy ${ac_tool_prefix}getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path.
@@ -4323,11 +4774,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4339,11 +4794,11 @@ esac
fi
GETCONF=$ac_cv_path_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4352,11 +4807,12 @@ if test -z "$ac_cv_path_GETCONF"; then
ac_pt_GETCONF=$GETCONF
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ac_pt_GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_GETCONF="$ac_pt_GETCONF" # Let the user override the test with a path.
@@ -4367,11 +4823,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4383,11 +4843,11 @@ esac
fi
ac_pt_GETCONF=$ac_cv_path_ac_pt_GETCONF
if test -n "$ac_pt_GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
-$as_echo "$ac_pt_GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
+printf "%s\n" "$ac_pt_GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_pt_GETCONF" = x; then
@@ -4395,8 +4855,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
GETCONF=$ac_pt_GETCONF
@@ -4405,11 +4865,13 @@ else
GETCONF="$ac_cv_path_GETCONF"
fi
- fi
+
+fi
+
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
-$as_echo_n "checking for Native POSIX Thread Library... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
+printf %s "checking for Native POSIX Thread Library... " >&6; }
libpthr_vsn=`$GETCONF GNU_LIBPTHREAD_VERSION 2>/dev/null`
if test $? -eq 0; then
case "$libpthr_vsn" in
@@ -4425,24 +4887,28 @@ $as_echo_n "checking for Native POSIX Thread Library... " >&6; }
else
nptl=no
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
-$as_echo "$nptl" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
+printf "%s\n" "$nptl" >&6; }
if test $nptl = cross; then
nptl=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
- if test $nptl = yes; then
+ if test $nptl = yes
+then :
+
THR_LIB_TYPE=posix_nptl
need_nptl_incldir=no
- ac_fn_c_check_header_mongrel "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_nptl_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_nptl_pthread_h" = xyes
+then :
need_nptl_incldir=yes
NEED_NPTL_PTHREAD_H=yes
fi
+ if test $need_nptl_incldir = yes
+then :
- if test $need_nptl_incldir = yes; then
# Ahh...
nptl_path="$C_INCLUDE_PATH:$CPATH"
if test X$cross_compiling != Xyes; then
@@ -4463,13 +4929,13 @@ fi
IFS=$save_ifs
nptl_incldir=
for dir in $nptl_ws_path; do
- as_ac_Header=`$as_echo "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
nptl_incldir=$dir/nptl
fi
-
if test "x$nptl_incldir" != "x"; then
THR_DEFS="$THR_DEFS -isystem $nptl_incldir"
break
@@ -4478,38 +4944,43 @@ fi
if test "x$nptl_incldir" = "x"; then
as_fn_error $? "Failed to locate nptl system include directory" "$LINENO" 5
fi
- fi
- fi
- ;;
- *) ;;
- esac
+
+fi
+
+fi
+ ;; #(
+ *) :
+ ;;
+esac
saved_cppflags=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $THR_DEFS"
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes
+then :
\
-$as_echo "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
fi
-
CPPFLAGS=$saved_cppflags
- fi
+
+fi
+
fi
@@ -4541,133 +5012,157 @@ case "$host_cpu" in
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Wdeclaration-after-statement $DED_WARN_FLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WARN_FLAGS="-Wdeclaration-after-statement $DED_WARN_FLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=return-type $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=implicit $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=implicit $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=undef $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=undef $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
DED_SYS_INCLUDE="-I${ERL_TOP}/erts/emulator/beam -I${ERL_TOP}/erts/include -I${ERL_TOP}/erts/include/$host -I${ERL_TOP}/erts/include/internal -I${ERL_TOP}/erts/include/internal/$host -I${ERL_TOP}/erts/emulator/sys/$DED_OSTYPE -I${ERL_TOP}/erts/emulator/sys/common"
@@ -4680,48 +5175,57 @@ else
fi
# DED_EMU_THR_DEFS=$EMU_THR_DEFS
DED_CFLAGS="$CFLAGS $CPPFLAGS $DED_CFLAGS"
-if test "x$GCC" = xyes; then
+if test "x$GCC" = xyes
+then :
+
# Use -fno-common for gcc, that is link error if multiple definitions of
# global variables are encountered. This is ISO C compliant.
# Until version 10, gcc has had -fcommon as default, which allows and merges
# such dubious duplicates.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fno-common $DED_CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_CFLAGS="-fno-common $DED_CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
DED_STATIC_CFLAGS="$DED_CFLAGS"
DED_CFLAGS="$DED_CFLAGS -fPIC"
# Remove -fPIE and -fno-PIE
DED_CFLAGS=`echo $DED_CFLAGS | sed 's/-f\(no-\)\?PIE//g'`
+
fi
DED_EXT=so
@@ -4799,17 +5303,19 @@ case $host_os in
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4818,14 +5324,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
case "$ac_cv_sizeof_void_p" in
@@ -4892,11 +5396,12 @@ test "$DED_LDFLAGS_CONFTEST" != "" || DED_LDFLAGS_CONFTEST="$DED_LDFLAGS"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DED_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DED_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$DED_LD"; then
ac_cv_prog_DED_LD="$DED_LD" # Let the user override the test.
else
@@ -4904,11 +5409,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_DED_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4919,11 +5428,11 @@ fi
fi
DED_LD=$ac_cv_prog_DED_LD
if test -n "$DED_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
-$as_echo "$DED_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
+printf "%s\n" "$DED_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4932,11 +5441,12 @@ if test -z "$ac_cv_prog_DED_LD"; then
ac_ct_DED_LD=$DED_LD
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DED_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DED_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_DED_LD"; then
ac_cv_prog_ac_ct_DED_LD="$ac_ct_DED_LD" # Let the user override the test.
else
@@ -4944,11 +5454,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DED_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4959,11 +5473,11 @@ fi
fi
ac_ct_DED_LD=$ac_cv_prog_ac_ct_DED_LD
if test -n "$ac_ct_DED_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DED_LD" >&5
-$as_echo "$ac_ct_DED_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DED_LD" >&5
+printf "%s\n" "$ac_ct_DED_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_DED_LD" = x; then
@@ -4971,8 +5485,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
DED_LD=$ac_ct_DED_LD
@@ -4983,37 +5497,37 @@ fi
test "$DED_LD" != "false" || as_fn_error $? "No linker found" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for static compiler flags" >&5
-$as_echo_n "checking for static compiler flags... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static compiler flags" >&5
+printf %s "checking for static compiler flags... " >&6; }
DED_STATIC_CFLAGS="$DED_WERRORFLAGS $DED_WFLAGS $DED_THR_DEFS $DED_STATIC_CFLAGS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_STATIC_CFLAGS" >&5
-$as_echo "$DED_STATIC_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for basic compiler flags for loadable drivers" >&5
-$as_echo_n "checking for basic compiler flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_STATIC_CFLAGS" >&5
+printf "%s\n" "$DED_STATIC_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for basic compiler flags for loadable drivers" >&5
+printf %s "checking for basic compiler flags for loadable drivers... " >&6; }
DED_BASIC_CFLAGS=$DED_CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
-$as_echo "$DED_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler flags for loadable drivers" >&5
-$as_echo_n "checking for compiler flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
+printf "%s\n" "$DED_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler flags for loadable drivers" >&5
+printf %s "checking for compiler flags for loadable drivers... " >&6; }
DED_CFLAGS="$DED_WERRORFLAGS $DED_WARN_FLAGS $DED_THR_DEFS $DED_CFLAGS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
-$as_echo "$DED_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker for loadable drivers" >&5
-$as_echo_n "checking for linker for loadable drivers... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
-$as_echo "$DED_LD" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker flags for loadable drivers" >&5
-$as_echo_n "checking for linker flags for loadable drivers... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LDFLAGS" >&5
-$as_echo "$DED_LDFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for 'runtime library path' linker flag" >&5
-$as_echo_n "checking for 'runtime library path' linker flag... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
+printf "%s\n" "$DED_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linker for loadable drivers" >&5
+printf %s "checking for linker for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
+printf "%s\n" "$DED_LD" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linker flags for loadable drivers" >&5
+printf %s "checking for linker flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LDFLAGS" >&5
+printf "%s\n" "$DED_LDFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 'runtime library path' linker flag" >&5
+printf %s "checking for 'runtime library path' linker flag... " >&6; }
if test "x$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&5
-$as_echo "$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&5
+printf "%s\n" "$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+printf "%s\n" "not found" >&6; }
fi
@@ -5037,11 +5551,12 @@ fi
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PERL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$PERL"; then
ac_cv_prog_PERL="$PERL" # Let the user override the test.
else
@@ -5049,11 +5564,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_PERL="perl"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5065,11 +5584,11 @@ fi
fi
PERL=$ac_cv_prog_PERL
if test -n "$PERL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+printf "%s\n" "$PERL" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5106,8 +5625,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -5137,15 +5656,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -5159,8 +5678,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -5213,7 +5732,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -5229,8 +5748,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -5253,14 +5772,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -5270,46 +5791,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -5318,13 +5839,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -5333,8 +5847,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -5346,30 +5864,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -5382,13 +5880,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -5415,18 +5914,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -5438,12 +5939,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -5474,7 +5976,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -5496,6 +5998,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -5509,6 +6015,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -5550,7 +6062,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -5559,7 +6071,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -5622,7 +6134,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -5671,14 +6183,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -5715,21 +6229,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -5757,7 +6271,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -5771,7 +6285,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -5796,7 +6310,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -6024,7 +6538,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -6032,17 +6546,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -6059,7 +6573,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -6083,9 +6597,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -6138,8 +6652,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -6181,9 +6695,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -6230,8 +6744,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
ac_config_files="$ac_config_files src/flex/$host/Makefile:src/flex/Makefile.in"
@@ -6263,8 +6777,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -6294,15 +6808,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -6316,8 +6830,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -6370,7 +6884,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -6386,8 +6900,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -6410,14 +6924,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -6427,46 +6943,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -6475,13 +6991,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -6490,8 +6999,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -6503,30 +7016,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -6539,13 +7032,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -6572,18 +7066,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -6595,12 +7091,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -6631,7 +7128,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -6653,6 +7150,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -6666,6 +7167,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -6707,7 +7214,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -6716,7 +7223,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -6779,7 +7286,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -6828,14 +7335,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -6872,21 +7381,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -6914,7 +7423,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -6928,7 +7437,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -6954,7 +7463,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -7182,7 +7691,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -7190,17 +7699,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -7217,7 +7726,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -7241,9 +7750,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -7296,8 +7805,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -7339,9 +7848,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -7388,8 +7897,9 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/lib/megaco/configure.in b/lib/megaco/configure.ac
index 789fbbed04..8d9772e748 100644
--- a/lib/megaco/configure.in
+++ b/lib/megaco/configure.ac
@@ -23,15 +23,15 @@ dnl define([AC_CACHE_LOAD], )dnl
dnl define([AC_CACHE_SAVE], )dnl
-AC_INIT(vsn.mk)
+AC_INIT
+AC_CONFIG_SRCDIR([vsn.mk])
+AC_PREREQ([2.71])
-AC_CONFIG_AUX_DIRS(${ERL_TOP}/erts/autoconf)
+m4_include([otp.m4])
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=win32
-fi
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
+
+ERL_CANONICAL_SYSTEM_TYPE
dnl ----------------------------------------------------------------------
dnl Checks for programs.
@@ -42,7 +42,7 @@ AC_PROG_CC
LM_WINDOWS_ENVIRONMENT
AC_DEFUN(ERL_REENTRANT_FLEX,
-[flex_compile='$LEX -R -Pconftest -oconftest.c conftest.flex 1>&AC_FD_CC'
+[flex_compile='$LEX -R -Pconftest -oconftest.c conftest.flex 1>&AS_MESSAGE_LOG_FD'
changequote(253, 273)dnl
cat > conftest.flex <<EOF
/*
@@ -79,9 +79,9 @@ if AC_TRY_EVAL(flex_compile) && test -s conftest.c; then
$1])
AC_MSG_RESULT([yes])
else
- echo "configure: failed program was:" 1>&AC_FD_CC
- cat conftest.flex 1>&AC_FD_CC
- echo "configure: PATH was $PATH" 1>&AC_FD_CC
+ echo "configure: failed program was:" 1>&AS_MESSAGE_LOG_FD
+ cat conftest.flex 1>&AS_MESSAGE_LOG_FD
+ echo "configure: PATH was $PATH" 1>&AS_MESSAGE_LOG_FD
ifelse([$2], , , [
$2
])dnl
@@ -108,7 +108,7 @@ dnl
dnl flex is needed by megaco. lex wont do!
dnl
-AC_PROG_LEX
+AC_PROG_LEX([noyywrap])
if test "$LEX" != flex; then
ENABLE_MEGACO_FLEX_SCANNER=false
else
@@ -189,6 +189,8 @@ if test "$PERL" = no_perl; then
AC_MSG_ERROR([Perl is required to build the flex scanner!])
fi
-AC_OUTPUT(examples/meas/Makefile:examples/meas/Makefile.in)
-AC_OUTPUT(src/flex/$host/Makefile:src/flex/Makefile.in)
+AC_CONFIG_FILES([examples/meas/Makefile:examples/meas/Makefile.in])
+AC_OUTPUT
+AC_CONFIG_FILES([src/flex/$host/Makefile:src/flex/Makefile.in])
+AC_OUTPUT
diff --git a/lib/mnesia/src/mnesia_bup.erl b/lib/mnesia/src/mnesia_bup.erl
index 4b4be695d2..60f978c31c 100644
--- a/lib/mnesia/src/mnesia_bup.erl
+++ b/lib/mnesia/src/mnesia_bup.erl
@@ -809,7 +809,7 @@ restore_tables(Recs, Header, Schema, Ext, {start, LocalTabs}) ->
restore_tables([], _Header, _Schema, _Ext, State) ->
State.
-%% Creates all neccessary dat files and inserts
+%% Creates all necessary dat files and inserts
%% the table definitions in the schema table
%%
%% Returns a list of local_tab tuples for all local tables
diff --git a/lib/mnesia/src/mnesia_dumper.erl b/lib/mnesia/src/mnesia_dumper.erl
index 1264efeb68..df84b9f3f1 100644
--- a/lib/mnesia/src/mnesia_dumper.erl
+++ b/lib/mnesia/src/mnesia_dumper.erl
@@ -1436,7 +1436,7 @@ chunk_from_log(eof, _, _, _) ->
%% costly BIF invokations and must pay for this. But since the
%% Emulator does not handle this properly we must compensate for
%% this with some form of load regulation of ourselves in order to
-%% not steal all computation power in the Erlang Emulator ans make
+%% not steal all computation power in the Erlang Emulator and make
%% other processes starve. Hopefully this is a temporary solution.
start_regulator() ->
diff --git a/lib/mnesia/src/mnesia_frag.erl b/lib/mnesia/src/mnesia_frag.erl
index 8f7dd321b0..184254b384 100644
--- a/lib/mnesia/src/mnesia_frag.erl
+++ b/lib/mnesia/src/mnesia_frag.erl
@@ -1103,7 +1103,7 @@ make_add_node(Tab, Node) ->
mnesia:abort({bad_type, Tab, Node}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Delet a node from the node pool of a fragmented table
+%% Delete a node from the node pool of a fragmented table
make_multi_del_node(Tab, Node) ->
verify_multi(Tab),
diff --git a/lib/mnesia/src/mnesia_monitor.erl b/lib/mnesia/src/mnesia_monitor.erl
index 5c1c0395d6..7083b65c2a 100644
--- a/lib/mnesia/src/mnesia_monitor.erl
+++ b/lib/mnesia/src/mnesia_monitor.erl
@@ -136,7 +136,7 @@ unsafe_create_external(Tab, Alias, Mod, Cs) ->
disconnect(Node) ->
cast({disconnect, Node}).
-%% Returns GoodNoodes
+%% Returns GoodNodes
%% Creates a link to each compatible monitor and
%% protocol_version to agreed version upon success
diff --git a/lib/mnesia/src/mnesia_recover.erl b/lib/mnesia/src/mnesia_recover.erl
index 8749b625a1..846e032515 100644
--- a/lib/mnesia/src/mnesia_recover.erl
+++ b/lib/mnesia/src/mnesia_recover.erl
@@ -130,7 +130,7 @@ allow_garb() ->
cast(allow_garb).
-%% The transaction log has either been swiched (latest -> previous) or
+%% The transaction log has either been switched (latest -> previous) or
%% there is nothing to be dumped. This means that the previous
%% transaction log only may contain commit records which refers to
%% transactions noted in the last two of the 'Prev' tables. All other
@@ -428,7 +428,7 @@ check_what_happened([H | T], Aborts, Commits) ->
check_what_happened([], Aborts, Commits) ->
if
Aborts == 0, Commits == 0 -> aborted; % None of the active nodes knows
- Aborts > 0 -> aborted; % Someody has aborted
+ Aborts > 0 -> aborted; % Somebody has aborted
Aborts == 0, Commits > 0 -> committed % All has committed
end.
@@ -674,7 +674,7 @@ handle_call({connect_nodes, Ns}, From, State) ->
erlang:send_after(2, self(), {connect_nodes,Ns,From}),
{noreply, State};
[] ->
- %% No good noodes to connect to!
+ %% No good nodes to connect to!
%% We can't use reply here because this function can be
%% called from handle_info
gen_server:reply(From, {[], AlreadyConnected}),
diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src
index 09f959dabf..4cc1e870e5 100644
--- a/lib/observer/src/observer.app.src
+++ b/lib/observer/src/observer.app.src
@@ -69,5 +69,3 @@
{env, []},
{runtime_dependencies, ["wx-1.2","stdlib-3.13","runtime_tools-1.17",
"kernel-8.1","et-1.5","erts-11.0"]}]}.
-
-
diff --git a/lib/observer/test/crashdump_helper.erl b/lib/observer/test/crashdump_helper.erl
index cb1e1fba8a..d94c4e5370 100644
--- a/lib/observer/test/crashdump_helper.erl
+++ b/lib/observer/test/crashdump_helper.erl
@@ -25,7 +25,7 @@
dump_persistent_terms/0,
create_persistent_terms/0,
dump_global_literals/0]).
--compile(r20).
+-compile(r22).
-include_lib("common_test/include/ct.hrl").
n1_proc(N2,Creator) ->
diff --git a/lib/observer/test/observer_SUITE.erl b/lib/observer/test/observer_SUITE.erl
index 7d5e90d2ce..4d577c66fc 100644
--- a/lib/observer/test/observer_SUITE.erl
+++ b/lib/observer/test/observer_SUITE.erl
@@ -152,7 +152,7 @@ basic(Config) when is_list(Config) ->
wx:new(),
?P("basic -> try wx destroy"),
wx:destroy(),
- timer:send_after(100, "foobar"),
+ timer:start(),
?P("basic -> try start distribution"),
{foo, node@machine} ! dummy_msg, %% start distribution stuff
%% Otherwise ever lasting servers gets added to procs
diff --git a/lib/odbc/configure b/lib/odbc/configure
index a167f1b0ec..a9b2c80b09 100755
--- a/lib/odbc/configure
+++ b/lib/odbc/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +221,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +253,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +292,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +310,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +332,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +380,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +398,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +430,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +459,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +503,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +517,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +534,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,50 +606,46 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
ac_unique_file="c_src/odbcserver.c"
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
ODBC_INCLUDE
@@ -629,7 +656,6 @@ THR_DEFS
GETCONF
EGREP
GREP
-CPP
RM
LD
SET_MAKE
@@ -642,6 +668,10 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -702,8 +732,7 @@ CC
CFLAGS
LDFLAGS
LIBS
-CPPFLAGS
-CPP'
+CPPFLAGS'
# Initialize some variables set by options.
@@ -772,8 +801,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -814,9 +841,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -840,9 +867,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1053,9 +1080,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1069,9 +1096,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1115,9 +1142,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1133,7 +1160,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1197,7 +1224,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1315,6 +1342,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1344,7 +1372,6 @@ Some influential environment variables:
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1365,9 +1392,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1395,7 +1422,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1403,7 +1431,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1413,9 +1441,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1432,14 +1460,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1447,14 +1475,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1470,14 +1499,14 @@ fi
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1485,17 +1514,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1516,11 +1546,12 @@ fi
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -1528,16 +1559,9 @@ else
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ which can conflict with char $2 (); below. */
+#include <limits.h>
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -1555,194 +1579,29 @@ choke me
#endif
int
-main ()
+main (void)
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
@@ -1750,26 +1609,28 @@ fi
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
@@ -1781,17 +1642,18 @@ $as_echo "$ac_res" >&6; }
ac_fn_c_check_type ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
eval "$3=no"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof ($2))
return 0;
@@ -1799,12 +1661,13 @@ if (sizeof ($2))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof (($2)))
return 0;
@@ -1812,18 +1675,19 @@ if (sizeof (($2)))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
eval "$3=yes"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_type
@@ -1835,16 +1699,17 @@ $as_echo "$ac_res" >&6; }
ac_fn_c_check_member ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+printf %s "checking for $2.$3... " >&6; }
+if eval test \${$4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$5
int
-main ()
+main (void)
{
static $2 ac_aggr;
if (ac_aggr.$3)
@@ -1853,14 +1718,15 @@ return 0;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$4=yes"
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$5
int
-main ()
+main (void)
{
static $2 ac_aggr;
if (sizeof ac_aggr.$3)
@@ -1869,22 +1735,66 @@ return 0;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$4=yes"
-else
+else $as_nop
eval "$4=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$4
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_member
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
# --------------------------------------------
# Tries to find the compile-time value of EXPR in a program that includes
@@ -1899,7 +1809,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0;
@@ -1909,14 +1819,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=0 ac_mid=0
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1926,9 +1837,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid; break
-else
+else $as_nop
as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
@@ -1936,14 +1848,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0;
@@ -1953,14 +1865,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=-1 ac_mid=-1
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0;
@@ -1970,9 +1883,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=$ac_mid; break
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
@@ -1980,14 +1894,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
ac_lo= ac_hi=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -1995,7 +1909,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -2005,12 +1919,13 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
case $ac_lo in #((
?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -2020,12 +1935,12 @@ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.val", "w");
@@ -2053,9 +1968,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
ac_retval=1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -2067,14 +1983,34 @@ rm -f conftest.val
as_fn_set_status $ac_retval
} # ac_fn_c_compute_int
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -2107,8 +2043,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2143,7 +2083,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2178,11 +2118,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2193,8 +2135,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2218,7 +2160,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2226,14 +2168,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2241,15 +2183,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2257,8 +2199,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2272,63 +2214,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2338,19 +2265,434 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2361,12 +2703,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2375,24 +2717,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2402,11 +2744,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2420,57 +2763,123 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_aux_dir=
-for ac_dir in ${ERL_TOP}/erts/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ${ERL_TOP}/erts/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2489,21 +2898,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2522,22 +2932,116 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=win32
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
-# Check whether --with-odbc was given.
-if test "${with_odbc+set}" = set; then :
- withval=$with_odbc;
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
fi
-if test "$with_odbc" = "no"; then
- rm -f "$ERL_TOP/lib/odbc/SKIP"
+# Check whether --with-odbc was given.
+if test ${with_odbc+y}
+then :
+ withval=$with_odbc;
+fi
+
-else
erl_xcomp_without_sysroot=no
if test "$cross_compiling" = "yes"; then
@@ -2549,6 +3053,15 @@ else
fi
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2557,11 +3070,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2569,11 +3083,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2584,11 +3102,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2597,11 +3115,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2609,11 +3128,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2624,11 +3147,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2636,8 +3159,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2650,11 +3173,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2662,11 +3186,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2677,11 +3205,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2690,11 +3218,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2703,15 +3232,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2727,18 +3260,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2749,11 +3282,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2761,11 +3295,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2776,11 +3314,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2793,11 +3331,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2805,11 +3344,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2820,11 +3363,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2836,8 +3379,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2845,25 +3388,129 @@ esac
fi
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -2873,7 +3520,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -2881,7 +3528,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -2893,9 +3540,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -2916,11 +3563,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -2937,7 +3585,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -2953,44 +3601,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3004,15 +3654,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -3021,7 +3671,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -3033,8 +3683,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -3042,10 +3692,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -3053,39 +3703,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3099,11 +3750,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -3112,31 +3764,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3146,29 +3799,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3177,57 +3834,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3242,94 +3902,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3350,123 +4060,124 @@ MIXED_VSL=no
MIXED_VC=no
MIXED_MINGW=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
-$as_echo_n "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
+printf %s "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
-$as_echo "MSYS and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
+printf "%s\n" "MSYS and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
-$as_echo "Cygwin and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
+printf "%s\n" "Cygwin and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /bin/wslpath; then
CFLAGS="$CFLAGS -O2"
MIXED_WSL=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
-$as_echo "WSL and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
+printf "%s\n" "WSL and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not within any known env" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$MIXED_MSYS" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
-$as_echo_n "checking for mixed cygwin and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
+printf %s "checking for mixed cygwin and native MinGW environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with cygwin" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
-$as_echo_n "checking for mixed MSYS and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
+printf %s "checking for mixed MSYS and native MinGW environment... " >&6; }
if test "x$GCC" = x"yes"; then
if test -x /usr/bin/msys-=.0.dll; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with msys" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
-$as_echo_n "checking if we mix cygwin with any native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
+printf %s "checking if we mix cygwin with any native compiler... " >&6; }
if test "X$MIXED_CYGWIN" = "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
-$as_echo_n "checking if we mix msys with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
+printf %s "checking if we mix msys with another native compiler... " >&6; }
if test "X$MIXED_MSYS" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
-$as_echo_n "checking if we mix WSL with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
+printf %s "checking if we mix WSL with another native compiler... " >&6; }
if test "X$MIXED_WSL" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat >conftest.make <<\_ACEOF
SHELL = /bin/sh
all:
@@ -3482,12 +4193,12 @@ esac
rm -f conftest.make
fi
if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
SET_MAKE=
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
SET_MAKE="MAKE=${MAKE-make}"
fi
@@ -3496,11 +4207,12 @@ for ac_prog in ld.sh
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
@@ -3508,11 +4220,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_LD="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3523,11 +4239,11 @@ fi
fi
LD=$ac_cv_prog_LD
if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3537,11 +4253,12 @@ done
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
@@ -3549,11 +4266,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3564,11 +4285,11 @@ fi
fi
LD=$ac_cv_prog_LD
if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3577,11 +4298,12 @@ if test -z "$ac_cv_prog_LD"; then
ac_ct_LD=$LD
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_LD"; then
ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test.
else
@@ -3589,11 +4311,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3604,11 +4330,11 @@ fi
fi
ac_ct_LD=$ac_cv_prog_ac_ct_LD
if test -n "$ac_ct_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
-$as_echo "$ac_ct_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
+printf "%s\n" "$ac_ct_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_LD" = x; then
@@ -3616,8 +4342,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
LD=$ac_ct_LD
@@ -3633,11 +4359,12 @@ _search_path=/bin:/usr/bin:/usr/local/bin:$PATH
# Extract the first word of "rm", so it can be a program name with args.
set dummy rm; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_RM+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_RM+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $RM in
[\\/]* | ?:[\\/]*)
ac_cv_path_RM="$RM" # Let the user override the test with a path.
@@ -3647,11 +4374,15 @@ else
for as_dir in $_search_path
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_RM="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3664,11 +4395,11 @@ esac
fi
RM=$ac_cv_path_RM
if test -n "$RM"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5
-$as_echo "$RM" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RM" >&5
+printf "%s\n" "$RM" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3679,6 +4410,115 @@ fi
_search_path=
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
+do
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
+ fi
+done
+
+
+
+
+
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+if test "$with_odbc" = "no"
+then :
+
+
+ rm -f "$ERL_TOP/lib/odbc/SKIP"
+
+
+else $as_nop
+
+
+
# Sockets
#--------------------------------------------------------------------
# Check for the existence of the -lsocket and -lnsl libraries.
@@ -3698,20 +4538,23 @@ _search_path=
# if -lsocket doesn't work by itself.
#--------------------------------------------------------------------
erl_checkBoth=0
-
ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
+if test "x$ac_cv_func_connect" = xyes
+then :
erl_checkSocket=0
-else
+else $as_nop
erl_checkSocket=1
fi
-if test "$erl_checkSocket" = 1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
-$as_echo_n "checking for socket in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "$erl_checkSocket" = 1
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
+printf %s "checking for socket in -lsocket... " >&6; }
+if test ${ac_cv_lib_socket_socket+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsocket $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3720,56 +4563,62 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char socket ();
int
-main ()
+main (void)
{
return socket ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_socket_socket=yes
-else
+else $as_nop
ac_cv_lib_socket_socket=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
-$as_echo "$ac_cv_lib_socket_socket" >&6; }
-if test "x$ac_cv_lib_socket_socket" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
+printf "%s\n" "$ac_cv_lib_socket_socket" >&6; }
+if test "x$ac_cv_lib_socket_socket" = xyes
+then :
LIBS="$LIBS -lsocket"
-else
+else $as_nop
erl_checkBoth=1
fi
+
fi
-if test "$erl_checkBoth" = 1; then
+if test "$erl_checkBoth" = 1
+then :
+
tk_oldLibs=$LIBS
LIBS="$LIBS -lsocket -lnsl"
ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept"
-if test "x$ac_cv_func_accept" = xyes; then :
+if test "x$ac_cv_func_accept" = xyes
+then :
odbc_erl_checkNsl=0
-else
+else $as_nop
LIBS=$tk_oldLibs
fi
+
fi
ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5
-$as_echo_n "checking for main in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test "x$ac_cv_func_gethostbyname" = xyes
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5
+printf %s "checking for main in -lnsl... " >&6; }
+if test ${ac_cv_lib_nsl_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lnsl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3777,37 +4626,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_nsl_main=yes
-else
+else $as_nop
ac_cv_lib_nsl_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5
-$as_echo "$ac_cv_lib_nsl_main" >&6; }
-if test "x$ac_cv_lib_nsl_main" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5
+printf "%s\n" "$ac_cv_lib_nsl_main" >&6; }
+if test "x$ac_cv_lib_nsl_main" = xyes
+then :
LIBS="$LIBS -lnsl"
fi
fi
-case "$host_os" in
- haiku*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lnetwork" >&5
-$as_echo_n "checking for socket in -lnetwork... " >&6; }
-if ${ac_cv_lib_network_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+case "$host_os" in #(
+ haiku*) :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket in -lnetwork" >&5
+printf %s "checking for socket in -lnetwork... " >&6; }
+if test ${ac_cv_lib_network_socket+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lnetwork $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3816,247 +4669,47 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char socket ();
int
-main ()
+main (void)
{
return socket ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_network_socket=yes
-else
+else $as_nop
ac_cv_lib_network_socket=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_socket" >&5
-$as_echo "$ac_cv_lib_network_socket" >&6; }
-if test "x$ac_cv_lib_network_socket" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNETWORK 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_socket" >&5
+printf "%s\n" "$ac_cv_lib_network_socket" >&6; }
+if test "x$ac_cv_lib_network_socket" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBNETWORK 1" >>confdefs.h
LIBS="-lnetwork $LIBS"
fi
- ;;
-esac
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+ ;; #(
+ *) :
+ ;;
esac
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
then ac_cv_path_EGREP="$GREP -E"
else
@@ -4067,10 +4720,15 @@ else
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_EGREP" || continue
# Check for GNU ac_path_EGREP and select it if it is found.
# Check for GNU $ac_path_EGREP
@@ -4079,13 +4737,13 @@ case `"$ac_path_EGREP" --version 2>&1` in
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
*)
ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
+ printf %s 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
"$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -4114,195 +4772,87 @@ fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
EGREP="$ac_cv_path_EGREP"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-int
-main ()
-{
+ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default"
+if test "x$ac_cv_header_netdb_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
fi
-rm -f conftest*
+ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
fi
-rm -f conftest*
+ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
fi
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in fcntl.h netdb.h stdlib.h string.h sys/socket.h winsock2.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in windows.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
-if test "x$ac_cv_header_windows_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_WINDOWS_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
+if test "x$ac_cv_header_windows_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h
fi
-done
-
-for ac_header in sql.h sqlext.h
+ for ac_header in sql.h sqlext.h
do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
odbc_required_headers=yes
-else
+else $as_nop
odbc_required_headers=no
fi
done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __cplusplus
@@ -4315,7 +4865,7 @@ main ()
/* NEC SVR4.0.2 mips cc rejects this. */
struct point {int x, y;};
static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
+ /* IBM XL C 1.02.0.0 rejects this.
It does not let you subtract one const X* pointer from another in
an arm of an if-expression whose if-part is not a constant
expression */
@@ -4343,7 +4893,7 @@ main ()
iptr p = 0;
++p;
}
- { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+ { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
"k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
struct s { int j; const int *ap[3]; } bx;
struct s *b = &bx; b->j = 5;
@@ -4359,29 +4909,29 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_c_const=yes
-else
+else $as_nop
ac_cv_c_const=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
if test $ac_cv_c_const = no; then
-$as_echo "#define const /**/" >>confdefs.h
+printf "%s\n" "#define const /**/" >>confdefs.h
fi
ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
+if test "x$ac_cv_type_size_t" = xyes
+then :
-else
+else $as_nop
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
fi
@@ -4392,27 +4942,27 @@ ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_addr" "ac_cv_member_s
#include <netinet/in.h>
#endif
"
-if test "x$ac_cv_member_struct_sockaddr_in6_sin6_addr" = xyes; then :
+if test "x$ac_cv_member_struct_sockaddr_in6_sin6_addr" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_ADDR 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_ADDR 1" >>confdefs.h
fi
-for ac_func in memset socket
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset"
+if test "x$ac_cv_func_memset" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket"
+if test "x$ac_cv_func_socket" = xyes
+then :
+ printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h
fi
-done
# ODBC
@@ -4422,29 +4972,34 @@ $RM -f "$ERL_TOP/lib/odbc/SKIP"
NEED_NPTL_PTHREAD_H=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
-$as_echo_n "checking for native win32 threads... " >&6; }
-if test "X$host_os" = "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
+printf %s "checking for native win32 threads... " >&6; }
+if test "X$host_os" = "Xwin32"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
THR_DEFS="-DWIN32_THREADS"
THR_LIBS=
THR_LIB_NAME=win32_threads
THR_LIB_TYPE=win32_threads
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
THR_DEFS=
THR_LIBS=
THR_LIB_NAME=
THR_LIB_TYPE=posix_unknown
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+printf %s "checking for pthread_create in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lpthread $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4453,40 +5008,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_pthread_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_pthread_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes
+then :
THR_LIBS="-lpthread"
fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
+printf %s "checking for pthread_create in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lc_r $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4495,96 +5052,112 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_c_r_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_c_r_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_create" = xyes
+then :
THR_LIBS="-lc_r"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
-if test "x$ac_cv_func_pthread_create" = xyes; then :
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
+if test "x$ac_cv_func_pthread_create" = xyes
+then :
THR_LIBS="none_needed"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
-$as_echo_n "checking if the '-pthread' switch can be used... " >&6; }
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
+printf %s "checking if the '-pthread' switch can be used... " >&6; }
saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -pthread"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_create((void*)0,(void*)0,(void*)0,(void*)0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
THR_DEFS="-pthread"
THR_LIBS="-pthread"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS=$saved_cflags
if test "x$THR_LIBS" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- fi
- if test "x$THR_LIBS" != "x"; then
+fi
+
+ if test "x$THR_LIBS" != "x"
+then :
+
THR_DEFS="$THR_DEFS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS"
THR_LIB_NAME=pthread
if test "x$THR_LIBS" = "xnone_needed"; then
THR_LIBS=
fi
- case $host_os in
- solaris*)
- THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;;
- linux*)
+ case $host_os in #(
+ solaris*) :
+
+ THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS"
+ ;; #(
+ linux*) :
+
THR_DEFS="$THR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS"
-if test "$cross_compiling" != "yes"; then
+if test "$cross_compiling" != "yes"
+then :
+
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -4592,11 +5165,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4608,23 +5185,26 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-else
+
+else $as_nop
+
host_getconf="$host_alias-getconf"
# Extract the first word of "$host_getconf", so it can be a program name with args.
set dummy $host_getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -4632,11 +5212,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="$host_getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4648,25 +5232,28 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""
+then :
+
GETCONF=
prfx="$erl_xcomp_sysroot"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
set dummy ${ac_tool_prefix}getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path.
@@ -4677,11 +5264,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4693,11 +5284,11 @@ esac
fi
GETCONF=$ac_cv_path_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4706,11 +5297,12 @@ if test -z "$ac_cv_path_GETCONF"; then
ac_pt_GETCONF=$GETCONF
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ac_pt_GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_GETCONF="$ac_pt_GETCONF" # Let the user override the test with a path.
@@ -4721,11 +5313,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4737,11 +5333,11 @@ esac
fi
ac_pt_GETCONF=$ac_cv_path_ac_pt_GETCONF
if test -n "$ac_pt_GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
-$as_echo "$ac_pt_GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
+printf "%s\n" "$ac_pt_GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_pt_GETCONF" = x; then
@@ -4749,8 +5345,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
GETCONF=$ac_pt_GETCONF
@@ -4759,11 +5355,13 @@ else
GETCONF="$ac_cv_path_GETCONF"
fi
- fi
+
+fi
+
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
-$as_echo_n "checking for Native POSIX Thread Library... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
+printf %s "checking for Native POSIX Thread Library... " >&6; }
libpthr_vsn=`$GETCONF GNU_LIBPTHREAD_VERSION 2>/dev/null`
if test $? -eq 0; then
case "$libpthr_vsn" in
@@ -4779,24 +5377,28 @@ $as_echo_n "checking for Native POSIX Thread Library... " >&6; }
else
nptl=no
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
-$as_echo "$nptl" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
+printf "%s\n" "$nptl" >&6; }
if test $nptl = cross; then
nptl=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
- if test $nptl = yes; then
+ if test $nptl = yes
+then :
+
THR_LIB_TYPE=posix_nptl
need_nptl_incldir=no
- ac_fn_c_check_header_mongrel "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_nptl_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_nptl_pthread_h" = xyes
+then :
need_nptl_incldir=yes
NEED_NPTL_PTHREAD_H=yes
fi
+ if test $need_nptl_incldir = yes
+then :
- if test $need_nptl_incldir = yes; then
# Ahh...
nptl_path="$C_INCLUDE_PATH:$CPATH"
if test X$cross_compiling != Xyes; then
@@ -4817,13 +5419,13 @@ fi
IFS=$save_ifs
nptl_incldir=
for dir in $nptl_ws_path; do
- as_ac_Header=`$as_echo "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
nptl_incldir=$dir/nptl
fi
-
if test "x$nptl_incldir" != "x"; then
THR_DEFS="$THR_DEFS -isystem $nptl_incldir"
break
@@ -4832,38 +5434,43 @@ fi
if test "x$nptl_incldir" = "x"; then
as_fn_error $? "Failed to locate nptl system include directory" "$LINENO" 5
fi
- fi
- fi
- ;;
- *) ;;
- esac
+
+fi
+
+fi
+ ;; #(
+ *) :
+ ;;
+esac
saved_cppflags=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $THR_DEFS"
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes
+then :
\
-$as_echo "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
fi
-
CPPFLAGS=$saved_cppflags
- fi
+
+fi
+
fi
@@ -4872,8 +5479,9 @@ fi
odbc_lib_link_success=no
- case $host_os in
- darwin1[0-9].*)
+case $host_os in #(
+ darwin1[0-9].*) :
+
TARGET_FLAGS="-DUNIX"
if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
ODBC_LIB= -L"/usr/local/lib"
@@ -4883,11 +5491,12 @@ odbc_lib_link_success=no
ODBC_INCLUDE="-I$with_odbc/include"
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -liodbc" >&5
-$as_echo_n "checking for SQLAllocHandle in -liodbc... " >&6; }
-if ${ac_cv_lib_iodbc_SQLAllocHandle+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -liodbc" >&5
+printf %s "checking for SQLAllocHandle in -liodbc... " >&6; }
+if test ${ac_cv_lib_iodbc_SQLAllocHandle+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-liodbc $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4896,43 +5505,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char SQLAllocHandle ();
int
-main ()
+main (void)
{
return SQLAllocHandle ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_iodbc_SQLAllocHandle=yes
-else
+else $as_nop
ac_cv_lib_iodbc_SQLAllocHandle=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iodbc_SQLAllocHandle" >&5
-$as_echo "$ac_cv_lib_iodbc_SQLAllocHandle" >&6; }
-if test "x$ac_cv_lib_iodbc_SQLAllocHandle" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iodbc_SQLAllocHandle" >&5
+printf "%s\n" "$ac_cv_lib_iodbc_SQLAllocHandle" >&6; }
+if test "x$ac_cv_lib_iodbc_SQLAllocHandle" = xyes
+then :
ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes
fi
- ;;
- haiku*)
+ ;; #(
+ haiku*) :
+
TARGET_FLAGS="-DUNIX"
ODBC_LIB= -L"/system/lib"
ODBC_INCLUDE="-I/system/develop/headers"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5
-$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; }
-if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5
+printf %s "checking for SQLAllocHandle in -lodbc... " >&6; }
+if test ${ac_cv_lib_odbc_SQLAllocHandle+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lodbc $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4941,41 +5551,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char SQLAllocHandle ();
int
-main ()
+main (void)
{
return SQLAllocHandle ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_odbc_SQLAllocHandle=yes
-else
+else $as_nop
ac_cv_lib_odbc_SQLAllocHandle=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5
-$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; }
-if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5
+printf "%s\n" "$ac_cv_lib_odbc_SQLAllocHandle" >&6; }
+if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes
+then :
ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes
fi
- ;;
- win32|cygwin)
+ ;; #(
+ win32|cygwin) :
+
TARGET_FLAGS="-DWIN32"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lws2_32" >&5
-$as_echo_n "checking for main in -lws2_32... " >&6; }
-if ${ac_cv_lib_ws2_32_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lws2_32" >&5
+printf %s "checking for main in -lws2_32... " >&6; }
+if test ${ac_cv_lib_ws2_32_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lws2_32 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4983,28 +5594,28 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_ws2_32_main=yes
-else
+else $as_nop
ac_cv_lib_ws2_32_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32_main" >&5
-$as_echo "$ac_cv_lib_ws2_32_main" >&6; }
-if test "x$ac_cv_lib_ws2_32_main" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBWS2_32 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32_main" >&5
+printf "%s\n" "$ac_cv_lib_ws2_32_main" >&6; }
+if test "x$ac_cv_lib_ws2_32_main" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBWS2_32 1" >>confdefs.h
LIBS="-lws2_32 $LIBS"
@@ -5017,11 +5628,12 @@ fi
ODBC_LIB=-L"$with_odbc/lib"
ODBC_INCLUDE="-I$with_odbc/include"
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lodbc32" >&5
-$as_echo_n "checking for main in -lodbc32... " >&6; }
-if ${ac_cv_lib_odbc32_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lodbc32" >&5
+printf %s "checking for main in -lodbc32... " >&6; }
+if test ${ac_cv_lib_odbc32_main+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lodbc32 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5029,55 +5641,62 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
-main ()
+main (void)
{
return main ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_odbc32_main=yes
-else
+else $as_nop
ac_cv_lib_odbc32_main=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc32_main" >&5
-$as_echo "$ac_cv_lib_odbc32_main" >&6; }
-if test "x$ac_cv_lib_odbc32_main" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc32_main" >&5
+printf "%s\n" "$ac_cv_lib_odbc32_main" >&6; }
+if test "x$ac_cv_lib_odbc32_main" = xyes
+then :
ODBC_LIB="$ODBC_LIB -lodbc32"; odbc_lib_link_success=yes
fi
- ;;
- *)
+ ;; #(
+ *) :
+
TARGET_FLAGS="-DUNIX"
- case "$erl_xcomp_without_sysroot-$with_odbc" in
- yes-yes | yes- )
+ case "$erl_xcomp_without_sysroot-$with_odbc" in #(
+ yes-yes | yes-) :
+
msg="Dont know where to search for odbc (setting erl_xcomp_sysroot will help)"
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $msg" >&5
-$as_echo "$as_me: WARNING: $msg" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $msg" >&5
+printf "%s\n" "$as_me: WARNING: $msg" >&2;}
echo "$msg" > "$ERL_TOP/lib/odbc/SKIP"
odbc_lib_link_success=wont_try
- ;;
- no-yes | no- )
+ ;; #(
+ no-yes | no-) :
+
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -5086,18 +5705,16 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for odbc in standard locations" >&5
-$as_echo_n "checking for odbc in standard locations... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for odbc in standard locations" >&5
+printf %s "checking for odbc in standard locations... " >&6; }
for rdir in /usr/local/odbc /usr/local /usr/odbc \
/usr /opt/local/pgm/odbc /usr/local/pgm/odbc \
"$with_odbc"; do
@@ -5116,19 +5733,20 @@ $as_echo_n "checking for odbc in standard locations... " >&6; }
break
done
if test "x$is_odbc_std_location" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No odbc library found skipping odbc" >&5
-$as_echo "$as_me: WARNING: No odbc library found skipping odbc" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: No odbc library found skipping odbc" >&5
+printf "%s\n" "$as_me: WARNING: No odbc library found skipping odbc" >&2;}
echo "No odbc library found" > "$ERL_TOP/lib/odbc/SKIP"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ODBC_LIB" >&5
-$as_echo "$ODBC_LIB" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5
-$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; }
-if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ODBC_LIB" >&5
+printf "%s\n" "$ODBC_LIB" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5
+printf %s "checking for SQLAllocHandle in -lodbc... " >&6; }
+if test ${ac_cv_lib_odbc_SQLAllocHandle+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lodbc $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5137,44 +5755,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char SQLAllocHandle ();
int
-main ()
+main (void)
{
return SQLAllocHandle ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_odbc_SQLAllocHandle=yes
-else
+else $as_nop
ac_cv_lib_odbc_SQLAllocHandle=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5
-$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; }
-if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5
+printf "%s\n" "$ac_cv_lib_odbc_SQLAllocHandle" >&6; }
+if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes
+then :
ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes
fi
fi
- ;;
+ ;; #(
+ *) :
- *)
ODBC_LIB=-L"$with_odbc/lib"
ODBC_INCLUDE="-I$with_odbc/include"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5
-$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; }
-if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5
+printf %s "checking for SQLAllocHandle in -lodbc... " >&6; }
+if test ${ac_cv_lib_odbc_SQLAllocHandle+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lodbc $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5183,93 +5801,103 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char SQLAllocHandle ();
int
-main ()
+main (void)
{
return SQLAllocHandle ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_odbc_SQLAllocHandle=yes
-else
+else $as_nop
ac_cv_lib_odbc_SQLAllocHandle=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5
-$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; }
-if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5
+printf "%s\n" "$ac_cv_lib_odbc_SQLAllocHandle" >&6; }
+if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes
+then :
ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes
fi
- ;;
- esac
- ;;
+ ;;
+esac
+ ;;
esac
if test $odbc_required_headers = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"ODBC library - header check failed\"" >&5
-$as_echo "$as_me: WARNING: \"ODBC library - header check failed\"" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"ODBC library - header check failed\"" >&5
+printf "%s\n" "$as_me: WARNING: \"ODBC library - header check failed\"" >&2;}
echo "ODBC library - header check failed" > $ERL_TOP/lib/odbc/SKIP
fi
if test $odbc_lib_link_success = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"ODBC library - link check failed\"" >&5
-$as_echo "$as_me: WARNING: \"ODBC library - link check failed\"" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"ODBC library - link check failed\"" >&5
+printf "%s\n" "$as_me: WARNING: \"ODBC library - link check failed\"" >&2;}
echo "ODBC library - link check failed" > $ERL_TOP/lib/odbc/SKIP
fi
+
fi
-if test "x$GCC" = xyes; then
+if test "x$GCC" = xyes
+then :
+
# Treat certain GCC warnings as errors
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CFLAGS="-Werror=return-type $CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+
fi
# Check whether --enable-sanitizers was given.
-if test "${enable_sanitizers+set}" = set; then :
+if test ${enable_sanitizers+y}
+then :
enableval=$enable_sanitizers;
case "$enableval" in
no) sanitizers= ;;
@@ -5311,8 +5939,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -5342,15 +5970,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -5364,8 +5992,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -5418,7 +6046,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -5434,8 +6062,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -5458,14 +6086,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -5475,46 +6105,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -5523,13 +6153,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -5538,8 +6161,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -5551,30 +6178,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -5587,13 +6194,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -5620,18 +6228,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -5643,12 +6253,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -5679,7 +6290,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -5701,6 +6312,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -5714,6 +6329,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -5755,7 +6376,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -5764,7 +6385,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -5827,7 +6448,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -5876,14 +6497,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -5920,21 +6543,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -5962,7 +6585,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -5976,7 +6599,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -6001,7 +6624,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -6229,7 +6852,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -6237,17 +6860,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -6264,7 +6887,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -6288,9 +6911,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -6343,8 +6966,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -6386,9 +7009,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -6435,7 +7058,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/lib/odbc/configure.in b/lib/odbc/configure.ac
index 0c7769b10d..ce96db8acc 100644
--- a/lib/odbc/configure.in
+++ b/lib/odbc/configure.ac
@@ -23,27 +23,21 @@ dnl define([AC_CACHE_SAVE], )dnl
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(c_src/odbcserver.c)
+AC_INIT
+AC_CONFIG_SRCDIR([c_src/odbcserver.c])
+AC_PREREQ([2.71])
-AC_CONFIG_AUX_DIRS(${ERL_TOP}/erts/autoconf)
+m4_include([otp.m4])
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=win32
-fi
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
+
+ERL_CANONICAL_SYSTEM_TYPE
AC_ARG_WITH(odbc,
[ --with-odbc=PATH specify location of ODBC include and lib
--with-odbc use ODBC (default)
--without-odbc don't use ODBC])
-if test "$with_odbc" = "no"; then
-
- rm -f "$ERL_TOP/lib/odbc/SKIP"
-
-else dnl "$with_odbc" != "no"
-
ERL_XCOMP_SYSROOT_INIT
dnl Checks for programs.
@@ -70,6 +64,15 @@ fi
_search_path=
+AS_IF([test "$with_odbc" = "no"],
+ [
+
+ rm -f "$ERL_TOP/lib/odbc/SKIP"
+
+ ],
+ [
+ dnl "$with_odbc" != "no"
+
# Sockets
#--------------------------------------------------------------------
@@ -91,23 +94,27 @@ _search_path=
#--------------------------------------------------------------------
erl_checkBoth=0
AC_CHECK_FUNC(connect, erl_checkSocket=0, erl_checkSocket=1)
-if test "$erl_checkSocket" = 1; then
+AS_IF([test "$erl_checkSocket" = 1],
+ [
AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket", erl_checkBoth=1)
-fi
-if test "$erl_checkBoth" = 1; then
+ ])
+AS_IF([test "$erl_checkBoth" = 1],
+ [
tk_oldLibs=$LIBS
LIBS="$LIBS -lsocket -lnsl"
AC_CHECK_FUNC(accept, odbc_erl_checkNsl=0, [LIBS=$tk_oldLibs])
-fi
+ ])
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"]))
-case "$host_os" in
- haiku*)
+AS_CASE(["$host_os"],
+ [haiku*],
+ [
AC_CHECK_LIB(network, socket)
- ;;
-esac
+ ])
dnl Checks for header files.
-AC_HEADER_STDC
+AC_CHECK_INCLUDES_DEFAULT
+AC_PROG_EGREP
+
AC_CHECK_HEADERS([fcntl.h netdb.h stdlib.h string.h sys/socket.h winsock2.h])
AC_CHECK_HEADERS([windows.h])
AC_CHECK_HEADERS([sql.h sqlext.h], [odbc_required_headers=yes], [odbc_required_headers=no],
@@ -139,8 +146,10 @@ AC_SUBST(THR_LIBS)
odbc_lib_link_success=no
AC_SUBST(TARGET_FLAGS)
- case $host_os in
- darwin1[[0-9]].*)
+AS_CASE([$host_os],
+
+ [darwin1[[0-9]].*],
+ [
TARGET_FLAGS="-DUNIX"
if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
ODBC_LIB= -L"/usr/local/lib"
@@ -151,15 +160,19 @@ AC_SUBST(TARGET_FLAGS)
fi
AC_CHECK_LIB(iodbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes])
- ;;
- haiku*)
+ ],
+
+ [haiku*],
+ [
TARGET_FLAGS="-DUNIX"
ODBC_LIB= -L"/system/lib"
ODBC_INCLUDE="-I/system/develop/headers"
dnl Haiku's package manager will deal with this for us
AC_CHECK_LIB(odbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes])
- ;;
- win32|cygwin)
+ ],
+
+ [win32|cygwin],
+ [
TARGET_FLAGS="-DWIN32"
AC_CHECK_LIB(ws2_32, main)
if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
@@ -170,17 +183,22 @@ AC_SUBST(TARGET_FLAGS)
ODBC_INCLUDE="-I$with_odbc/include"
fi
AC_CHECK_LIB(odbc32, main, [ODBC_LIB="$ODBC_LIB -lodbc32"; odbc_lib_link_success=yes])
- ;;
- *)
+ ],
+
+ [
TARGET_FLAGS="-DUNIX"
- case "$erl_xcomp_without_sysroot-$with_odbc" in
- yes-yes | yes- )
+ AS_CASE(["$erl_xcomp_without_sysroot-$with_odbc"],
+
+ [yes-yes | yes-],
+ [
msg="Dont know where to search for odbc (setting erl_xcomp_sysroot will help)"
AC_MSG_WARN([$msg])
echo "$msg" > "$ERL_TOP/lib/odbc/SKIP"
odbc_lib_link_success=wont_try
- ;;
- no-yes | no- )
+ ],
+
+ [no-yes | no-],
+ [
AC_CHECK_SIZEOF(void *)
AC_MSG_CHECKING([for odbc in standard locations])
for rdir in /usr/local/odbc /usr/local /usr/odbc \
@@ -209,16 +227,14 @@ AC_SUBST(TARGET_FLAGS)
AC_MSG_RESULT($ODBC_LIB)
AC_CHECK_LIB(odbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes])
fi
- ;;
+ ],
- *)
+ [
ODBC_LIB=-L"$with_odbc/lib"
ODBC_INCLUDE="-I$with_odbc/include"
AC_CHECK_LIB(odbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes])
- ;;
- esac
- ;;
-esac
+ ])
+ ])
if test $odbc_required_headers = no; then
AC_MSG_WARN(["ODBC library - header check failed"])
@@ -232,12 +248,13 @@ fi
AC_SUBST(ODBC_LIB)
AC_SUBST(ODBC_INCLUDE)
-fi dnl "$with_odbc" != "no"
+ ]) dnl "$with_odbc" != "no"
-if test "x$GCC" = xyes; then
+AS_IF([test "x$GCC" = xyes],
+ [
# Treat certain GCC warnings as errors
LM_TRY_ENABLE_CFLAG([-Werror=return-type], [CFLAGS])
-fi
+ ])
dnl ----------------------------------------------------------------------
dnl Enable -fsanitize= flags.
@@ -259,4 +276,5 @@ CFLAGS="$CFLAGS $sanitizers"
LDFLAGS="$LDFLAGS $sanitizers"
])
-AC_OUTPUT(c_src/$host/Makefile:c_src/Makefile.in)
+AC_CONFIG_FILES([c_src/$host/Makefile:c_src/Makefile.in])
+AC_OUTPUT
diff --git a/lib/os_mon/src/os_mon.app.src b/lib/os_mon/src/os_mon.app.src
index 894f63e227..1d462e614e 100644
--- a/lib/os_mon/src/os_mon.app.src
+++ b/lib/os_mon/src/os_mon.app.src
@@ -31,4 +31,4 @@
{start_memsup, true},
{start_os_sup, false}]},
{mod, {os_mon, []}},
- {runtime_dependencies, ["stdlib-2.0","sasl-2.4","kernel-3.0","erts-6.0"]}]}.
+ {runtime_dependencies, ["stdlib-3.4","sasl-2.4","kernel-3.0","erts-6.0"]}]}.
diff --git a/lib/parsetools/src/parsetools.app.src b/lib/parsetools/src/parsetools.app.src
index a7b258820a..e67e3e38f2 100644
--- a/lib/parsetools/src/parsetools.app.src
+++ b/lib/parsetools/src/parsetools.app.src
@@ -12,7 +12,7 @@
{env, [{file_util_search_methods,[{"", ""}, {"ebin", "esrc"}, {"ebin", "src"}]}
]
},
- {runtime_dependencies, ["stdlib-2.5","kernel-3.0","erts-6.0"]}
+ {runtime_dependencies, ["stdlib-3.4","kernel-3.0","erts-6.0"]}
]
}.
diff --git a/lib/public_key/src/public_key.app.src b/lib/public_key/src/public_key.app.src
index 6be7cd3bc4..74d7a28354 100644
--- a/lib/public_key/src/public_key.app.src
+++ b/lib/public_key/src/public_key.app.src
@@ -15,7 +15,7 @@
{applications, [asn1, crypto, kernel, stdlib]},
{registered, []},
{env, []},
- {runtime_dependencies, ["stdlib-3.5","kernel-3.0","erts-6.0","crypto-3.8",
+ {runtime_dependencies, ["stdlib-3.5","kernel-3.0","erts-6.0","crypto-4.6",
"asn1-3.0"]}
]
}.
diff --git a/lib/sasl/src/release_handler.erl b/lib/sasl/src/release_handler.erl
index 48feac1a21..b60603c7d0 100644
--- a/lib/sasl/src/release_handler.erl
+++ b/lib/sasl/src/release_handler.erl
@@ -134,9 +134,9 @@
%%
%% It is configurable where the start file is located, and what it
%% is called.
-%% The paramater is {sasl, start_prg} = File
+%% The parameter is {sasl, start_prg} = File
%% It is also configurable where the releases directory is located.
-%% Default is $ROOT/releases. $RELDIR overrids, and
+%% Default is $ROOT/releases. $RELDIR overrides, and
%% {sasl, releases_dir} overrides both.
%%-----------------------------------------------------------------
start_link() ->
@@ -162,7 +162,7 @@ unpack_release(ReleaseName) ->
%% Purpose: Checks the relup script for the specified version.
%% The release must be unpacked.
%% Options = [purge] - all old code that can be soft purged
-%% will be purged if all checks succeeds. This can be usefull
+%% will be purged if all checks succeeds. This can be useful
%% in order to reduce time needed in the following call to
%% install_release.
%% Returns: {ok, FromVsn, Descr} | {error, Reason}
@@ -298,7 +298,7 @@ remove_release(Vsn) ->
%% .rel.
%% The release dir will be created. The necessary files can
%% be installed by calling install_file/2.
-%% The release_handler remebers where all libs are located.
+%% The release_handler remembers where all libs are located.
%% If remove_release is called later,
%% those libs are removed as well (if no other releases uses
%% them).
@@ -1168,7 +1168,7 @@ new_emulator_rm_tmp_release(?tmp_vsn(_)=TmpVsn,EVsn,NewVsn,
new_emulator_rm_tmp_release(_,_,_,_,Releases,_) ->
Releases.
-%% Rename the tempoarary service (for erts ugprade) to the real ToVsn
+%% Rename the temporary service (for erts ugprade) to the real ToVsn
rename_tmp_service(EVsn,TmpVsn,NewVsn) ->
FromName = hd(string:lexemes(atom_to_list(node()),"@")) ++ "_" ++ TmpVsn,
ToName = hd(string:lexemes(atom_to_list(node()),"@")) ++ "_" ++ NewVsn,
diff --git a/lib/sasl/src/sasl.app.src b/lib/sasl/src/sasl.app.src
index 293af504df..6b9b921daf 100644
--- a/lib/sasl/src/sasl.app.src
+++ b/lib/sasl/src/sasl.app.src
@@ -42,6 +42,6 @@
{applications, [kernel, stdlib]},
{env, []},
{mod, {sasl, []}},
- {runtime_dependencies, ["tools-2.6.14","stdlib-3.4","kernel-5.3",
+ {runtime_dependencies, ["tools-2.6.14","stdlib-3.4","kernel-6.0",
"erts-10.2"]}]}.
diff --git a/lib/sasl/test/sasl_SUITE.erl b/lib/sasl/test/sasl_SUITE.erl
index 950ac0320d..dfb2199771 100644
--- a/lib/sasl/test/sasl_SUITE.erl
+++ b/lib/sasl/test/sasl_SUITE.erl
@@ -32,7 +32,7 @@
log_file/1,
utc_log/1]).
--compile(r21).
+-compile(r22).
all() ->
[log_mf_h_env, log_file, app_test, appup_test, utc_log].
diff --git a/lib/snmp/configure b/lib/snmp/configure
index 65d95918cc..5544786437 100755
--- a/lib/snmp/configure
+++ b/lib/snmp/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,41 +167,52 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -227,14 +220,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -252,18 +252,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -290,6 +291,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -307,6 +309,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -321,7 +331,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -330,7 +340,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -369,12 +379,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -386,18 +397,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -409,9 +429,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -438,7 +458,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -482,7 +502,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -496,6 +516,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -509,6 +533,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -574,17 +605,21 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="vsn.mk"
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="src/app/snmp.app.src"
ac_subst_vars='LTLIBOBJS
LIBOBJS
PERL
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -707,8 +742,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -749,9 +782,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -775,9 +808,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -988,9 +1021,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1004,9 +1037,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1050,9 +1083,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1068,7 +1101,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1132,7 +1165,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1250,6 +1283,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1273,9 +1307,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1303,7 +1337,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1311,7 +1346,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1321,9 +1356,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1333,14 +1368,34 @@ fi
## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -1373,8 +1428,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -1409,7 +1468,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -1444,11 +1503,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -1459,8 +1520,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -1484,7 +1545,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -1492,14 +1553,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -1507,15 +1568,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -1523,8 +1584,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -1538,69 +1599,152 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
done
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -1611,12 +1755,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -1625,24 +1769,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -1652,11 +1796,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -1670,57 +1815,124 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_aux_dir=
-for ac_dir in ${ERL_TOP}/erts/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ${ERL_TOP}/erts/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -1739,21 +1951,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -1772,20 +1985,116 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=win32
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
+fi
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PERL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$PERL"; then
ac_cv_prog_PERL="$PERL" # Let the user override the test.
else
@@ -1793,11 +2102,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_PERL="perl"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -1809,11 +2122,11 @@ fi
fi
PERL=$ac_cv_prog_PERL
if test -n "$PERL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+printf "%s\n" "$PERL" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -1874,7 +2187,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -1890,8 +2203,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -1914,14 +2227,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -1931,46 +2246,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -1979,13 +2294,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -1994,8 +2302,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -2007,30 +2319,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -2043,13 +2335,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -2076,18 +2369,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -2099,12 +2394,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -2135,7 +2431,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -2157,6 +2453,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -2170,6 +2470,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -2211,7 +2517,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -2220,7 +2526,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -2283,7 +2589,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -2332,14 +2638,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -2376,21 +2684,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -2418,7 +2726,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -2432,7 +2740,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -2457,7 +2765,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -2685,7 +2993,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -2693,17 +3001,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -2720,7 +3028,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -2744,9 +3052,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -2799,8 +3107,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -2842,9 +3150,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -2891,8 +3199,9 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/lib/snmp/configure.in b/lib/snmp/configure.ac
index bac042ccca..c87c38dc68 100644
--- a/lib/snmp/configure.in
+++ b/lib/snmp/configure.ac
@@ -2,21 +2,19 @@
define([AC_CACHE_LOAD], )dnl
define([AC_CACHE_SAVE], )dnl
-AC_INIT(vsn.mk)
+AC_INIT
+AC_CONFIG_SRCDIR([src/app/snmp.app.src])
+AC_PREREQ([2.71])
-AC_CONFIG_AUX_DIRS(${ERL_TOP}/erts/autoconf)
-
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=win32
-fi
+m4_include([otp.m4])
+AC_CONFIG_AUX_DIRS([${ERL_TOP}/make/autoconf])
dnl ----------------------------------------------------------------------
dnl Checks for programs.
dnl ----------------------------------------------------------------------
+ERL_CANONICAL_SYSTEM_TYPE
AC_CHECK_PROG(PERL, perl, perl, no_perl)
if test "$PERL" = no_perl; then
@@ -24,5 +22,6 @@ if test "$PERL" = no_perl; then
fi
-AC_OUTPUT(mibs/Makefile:mibs/Makefile.in)
+AC_CONFIG_FILES([mibs/Makefile:mibs/Makefile.in])
+AC_OUTPUT
diff --git a/lib/snmp/doc/src/snmpm.xml b/lib/snmp/doc/src/snmpm.xml
index 7b755c457a..961702c261 100644
--- a/lib/snmp/doc/src/snmpm.xml
+++ b/lib/snmp/doc/src/snmpm.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2020</year>
+ <year>2004</year><year>2021</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -554,59 +554,10 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
<p>For <c>SnmpInfo</c>, see the user callback function
<seeerl marker="snmpm_user#handle_report">handle_report</seeerl>.</p>
- <!-- <marker id="sync_get"></marker> -->
<marker id="async_get2"></marker>
</desc>
</func>
- <!-- DEPRECATED
- <func>
- <name since="">sync_get(UserId, TargetName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get(UserId, TargetName, ContextName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get(UserId, TargetName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get(UserId, TargetName, ContextName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get(UserId, TargetName, ContextName, Oids, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <fsummary>Synchronous <c>get-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>ContextName = string()</v>
- <v>Oids = [oid()]</v>
- <v>Timeout = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>SnmpReply = snmp_reply()</v>
- <v>Remaining = integer()</v>
- <v>Reason = {send_failed, ReqId, R} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v>
- <v>R = term()</v>
- <v>SecInfo = [sec_info()]</v>
- <v>sec_info() = {sec_tag(), ExpectedValue, ReceivedValue}</v>
- <v>sec_tag() = atom()</v>
- <v>ExpectedValue = ReceivedValue = term()</v>
- <v>SnmpInfo = term()</v>
- </type>
- <desc>
- <p>Synchronous <c>get-request</c>. </p>
- <p><c>Remaining</c> is the remaining time of the given or
- default timeout time.</p>
- <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that
- the net_if process failed to send the message. This could happen
- because of any number of reasons, i.e. encoding error. <em>R</em>
- is the actual reason in this case. </p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
- <p>For <c>SnmpInfo</c>, see the user callback function
- <seeerl marker="snmpm_user#handle_report">handle_report</seeerl>.</p>
-
- <marker id="async_get2"></marker>
- </desc>
- </func>
- -->
-
<func>
<name since="OTP R14B03">async_get2(UserId, TargetName, Oids) -> {ok, ReqId} | {error, Reason}</name>
<name since="OTP R14B03">async_get2(UserId, TargetName, Oids, SendOpts) -> {ok, ReqId} | {error, Reason}</name>
@@ -645,49 +596,10 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
for <em>this</em> request, they override any configuration done
when the agent was registered. </p>
- <!-- <marker id="async_get"></marker> -->
<marker id="sync_get_next2"></marker>
</desc>
</func>
- <!-- DEPRECATED
- <func>
- <name since="">async_get(UserId, TargetName, Oids) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get(UserId, TargetName, ContextName, Oids) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get(UserId, TargetName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get(UserId, TargetName, ContextName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get(UserId, TargetName, ContextName, Oids, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name>
- <fsummary>Asynchronous <c>get-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>ContextName = string()</v>
- <v>Oids = [oid()]</v>
- <v>Expire = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>ReqId = term()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
- <p>Asynchronous <c>get-request</c>.</p>
- <p>The reply, if it arrives, will be delivered to the user
- through a call to the snmpm_user callback function
- <c>handle_pdu</c>.</p>
- <p>The <c>Expire</c> time indicates for how long the request is
- valid (after which the manager is free to delete it).</p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
-
- <marker id="sync_get_next2"></marker>
- </desc>
- </func>
- -->
-
<func>
<name since="OTP R14B03">sync_get_next2(UserId, TargetName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
<name since="OTP R14B03">sync_get_next2(UserId, TargetName, Oids, SendOpts) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
@@ -738,50 +650,9 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
<p>For <c>SnmpInfo</c>, see the user callback function
<seeerl marker="snmpm_user#handle_report">handle_report</seeerl>.</p>
- <!-- <marker id="sync_get_next"></marker> -->
- <marker id="async_get_next2"></marker>
- </desc>
- </func>
-
- <!-- DEPRECATED
- <func>
- <name since="">sync_get_next(UserId, TargetName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_next(UserId, TargetName, ContextName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_next(UserId, TargetName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_next(UserId, TargetName, ContextName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_next(UserId, TargetName, ContextName, Oids, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <fsummary>Synchronous <c>get-next-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>ContextName = string()</v>
- <v>Oids = [oid()]</v>
- <v>Timeout = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>SnmpReply = snmp_reply()</v>
- <v>Remaining = integer()</v>
- <v>Reason = {send_failed, ReqId, R} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v>
- <v>R = term()</v>
- </type>
- <desc>
- <p>Synchronous <c>get-next-request</c>. </p>
- <p><c>Remaining</c> time of the given or default timeout time.</p>
- <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that
- the net_if process failed to send the message. This could happen
- because of any number of reasons, i.e. encoding error. <em>R</em>
- is the actual reason in this case. </p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
-
<marker id="async_get_next2"></marker>
</desc>
</func>
- -->
<func>
<name since="OTP R14B03">async_get_next2(UserId, TargetName, Oids) -> {ok, ReqId} | {error, Reason}</name>
@@ -818,48 +689,10 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
for <em>this</em> request, they override any configuration done
when the agent was registered. </p>
- <!-- <marker id="async_get_next"></marker> -->
<marker id="sync_set2"></marker>
</desc>
</func>
- <!-- DEPRECATED
- <func>
- <name since="">async_get_next(UserId, TargetName, Oids) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_next(UserId, TargetName, ContextName, Oids) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_next(UserId, TargetName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_next(UserId, TargetName, ContextName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_next(UserId, TargetName, ContextName, Oids, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name>
- <fsummary>Asynchronous <c>get-next-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>ContextName = string()</v>
- <v>Oids = [oid()]</v>
- <v>Expire = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>ReqId = integer()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
- <p>Asynchronous <c>get-next-request</c>. </p>
- <p>The reply will be delivered to the user through a call
- to the snmpm_user callback function <c>handle_pdu</c>.</p>
- <p>The <c>Expire</c> time indicates for how long the request is
- valid (after which the manager is free to delete it).</p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
-
- <marker id="sync_set2"></marker>
- </desc>
- </func>
- -->
-
<func>
<name since="OTP R14B03">sync_set2(UserId, TargetName, VarsAndVals) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
<name since="OTP R14B03">sync_set2(UserId, TargetName, VarsAndVals, SendOpts) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
@@ -913,52 +746,9 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
<p>For <c>SnmpInfo</c>, see the user callback function
<seeerl marker="snmpm_user#handle_report">handle_report</seeerl>.</p>
- <!-- <marker id="sync_set"></marker> -->
- <marker id="async_set2"></marker>
- </desc>
- </func>
-
- <!-- DEPRECATED
- <func>
- <name since="">sync_set(UserId, TargetName, VarsAndVals) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_set(UserId, TargetName, ContextName, VarsAndVals) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_set(UserId, TargetName, VarsAndVals, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_set(UserId, TargetName, ContextName, VarsAndVals, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_set(UserId, TargetName, ContextName, VarsAndVals, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <fsummary>Synchronous <c>set-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>ContextName = string()</v>
- <v>VarsAndVals = vars_and_vals()</v>
- <v>Timeout = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>SnmpReply = snmp_reply()</v>
- <v>Remaining = integer()</v>
- <v>Reason = {send_failed, ReqId, ActualReason} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v>
- <v>ActualReason = term()</v>
- </type>
- <desc>
- <p>Synchronous <c>set-request</c>. </p>
- <p><c>Remaining</c> time of the given or default timeout time.</p>
- <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that
- the net_if process failed to send the message. This could happen
- because of any number of reasons, i.e. encoding error. <em>R</em>
- is the actual reason in this case. </p>
- <p>When <em>var_and_val()</em> is <em>{oid(), value()}</em>, the
- manager makes an educated guess based on the loaded mibs. </p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
-
<marker id="async_set2"></marker>
</desc>
</func>
- -->
<func>
<name since="OTP R14B03">async_set2(UserId, TargetName, VarsAndVals) -> {ok, ReqId} | {error, Reason}</name>
@@ -1000,48 +790,9 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
for <em>this</em> request, they override any configuration done
when the agent was registered. </p>
- <!-- <marker id="async_set"></marker> -->
- <marker id="sync_get_bulk2"></marker>
- </desc>
- </func>
-
- <!-- DEPRECATED
- <func>
- <name since="">async_set(UserId, TargetName, VarsAndVals) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_set(UserId, TargetName, ContextName, VarsAndVals) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_set(UserId, TargetName, VarsAndVals, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_set(UserId, TargetName, ContextName, VarsAndVals, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_set(UserId, TargetName, ContextName, VarsAndVals, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name>
- <fsummary>Asynchronous <c>set-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>VarsAndVals = vars_and_vals()</v>
- <v>Expire = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>ReqId = term()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
- <p>Asynchronous <c>set-request</c>. </p>
- <p>The reply will be delivered to the user through a call
- to the snmpm_user callback function <c>handle_pdu</c>.</p>
- <p>The <c>Expire</c> time indicates for how long the request is
- valid (after which the manager is free to delete it).</p>
- <p>When <em>var_and_val()</em> is <em>{oid(), value()}</em>, the
- manager makes an educated guess based on the loaded mibs. </p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
-
<marker id="sync_get_bulk2"></marker>
</desc>
</func>
- -->
<func>
<name since="OTP R14B03">sync_get_bulk2(UserId, TragetName, NonRep, MaxRep, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
@@ -1095,52 +846,10 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
<p>For <c>SnmpInfo</c>, see the user callback function
<seeerl marker="snmpm_user#handle_report">handle_report</seeerl>.</p>
- <!-- <marker id="sync_get_bulk"></marker> -->
<marker id="async_get_bulk2"></marker>
</desc>
</func>
- <!-- DEPRECATED
- <func>
- <name since="">sync_get_bulk(UserId, TragetName, NonRep, MaxRep, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_bulk(UserId, TragetName, NonRep, MaxRep, ContextName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_bulk(UserId, TragetName, NonRep, MaxRep, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_bulk(UserId, TragetName, NonRep, MaxRep, ContextName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <name since="">sync_get_bulk(UserId, TragetName, NonRep, MaxRep, ContextName, Oids, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name>
- <fsummary>Synchronous <c>get-bulk-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>NonRep = integer()</v>
- <v>MaxRep = integer()</v>
- <v>ContextName = string()</v>
- <v>Oids = [oid()]</v>
- <v>Timeout = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>SnmpReply = snmp_reply()</v>
- <v>Remaining = integer()</v>
- <v>Reason = {send_failed, ReqId, R} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v>
- </type>
- <desc>
- <p>Synchronous <c>get-bulk-request</c> (See RFC1905).</p>
- <p><c>Remaining</c> time of the given or default timeout time.</p>
- <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that
- the net_if process failed to send the message. This could happen
- because of any number of reasons, i.e. encoding error. <em>R</em>
- is the actual reason in this case. </p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
-
- <marker id="async_get_bulk2"></marker>
- </desc>
- </func>
- -->
-
<func>
<name since="OTP R14B03">async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids) -> {ok, ReqId} | {error, Reason}</name>
<name since="OTP R14B03">async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts) -> {ok, ReqId} | {error, Reason}</name>
@@ -1178,49 +887,9 @@ priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb1
for <em>this</em> request, they override any configuration done
when the agent was registered. </p>
- <!-- <marker id="async_get_bulk"></marker> -->
- <marker id="cancel_async_request"></marker>
- </desc>
- </func>
-
- <!-- DEPRECATED
- <func>
- <name since="">async_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_bulk(UserId, TargetName, NonRep, MaxRep, ContextName, Oids) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_bulk(UserId, TargetName, NonRep, MaxRep, ContextName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name>
- <name since="">async_get_bulk(UserId, TargetName, NonRep, MaxRep, ContextName, Oids, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name>
- <fsummary>Asynchronous <c>get-bulk-request</c></fsummary>
- <type>
- <v>UserId = term()</v>
- <v>TargetName = target_name()</v>
- <v>NonRep = integer()</v>
- <v>MaxRep = integer()</v>
- <v>ContextName = string()</v>
- <v>Oids = [oid()]</v>
- <v>Expire = integer()</v>
- <v>ExtraInfo = term()</v>
- <v>ReqId = integer()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
- <p>Asynchronous <c>get-bulk-request</c> (See RFC1905).</p>
- <p>The reply will be delivered to the user through a call
- to the snmpm_user callback function <c>handle_pdu</c>.</p>
- <p>The <c>Expire</c> time indicates for how long the request is
- valid (after which the manager is free to delete it).</p>
- <p><c>ExtraInfo</c> is an opaque data structure passed on to
- the net-if process. The net-if process included in this
- application makes, with one exception, no use of this info,
- so the only use for it in such a configuration (when using the
- built in net-if) would be tracing. The one usage exception is:
- <em>Any</em> tuple with <c>snmpm_extra_info_tag</c> as its first
- element is reserved for internal use. </p>
-
<marker id="cancel_async_request"></marker>
</desc>
</func>
- -->
<func>
<name since="">cancel_async_request(UserId, ReqId) -> ok | {error, Reason}</name>
diff --git a/lib/snmp/src/agent/snmpa.erl b/lib/snmp/src/agent/snmpa.erl
index 995e6d627d..74205e5716 100644
--- a/lib/snmp/src/agent/snmpa.erl
+++ b/lib/snmp/src/agent/snmpa.erl
@@ -149,6 +149,11 @@
%% Options specific to the above module
-type mib_storage_options() :: list().
+-type mib_module() :: atom().
+-type table_name() :: atom().
+-type variable_name() :: atom().
+-type mib_info() :: {mib_module(), [table_name()], [variable_name()]}.
+
%%-----------------------------------------------------------------
%% This utility function is used to convert an old SNMP application
@@ -340,11 +345,11 @@ unload_mib(Agent, Mib) ->
end.
unload_mibs(Mibs) ->
- unload_mibs(snmp_master_agent, Mibs, false).
+ unload_mibs(snmp_master_agent, Mibs).
unload_mibs(Agent, Mibs) when is_list(Mibs) ->
- snmpa_agent:unload_mibs(Agent, Mibs);
+ unload_mibs(Agent, Mibs, false);
unload_mibs(Mibs, Force)
- when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) ->
+ when is_list(Mibs) andalso is_boolean(Force) ->
unload_mibs(snmp_master_agent, Mibs, Force).
-spec unload_mibs(Agent :: pid() | atom(),
@@ -353,7 +358,7 @@ unload_mibs(Mibs, Force)
ok | {error, {'unload aborted at', MibName :: string(), InternalReason :: not_loaded | term()}}.
unload_mibs(Agent, Mibs, Force)
- when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) ->
+ when is_list(Mibs) andalso is_boolean(Force) ->
snmpa_agent:unload_mibs(Agent, Mibs, Force).
@@ -369,6 +374,8 @@ whereis_mib(Agent, Mib) when is_atom(Mib) ->
%% -
+-spec mibs_info() -> [mib_info()].
+
mibs_info() ->
[
{snmp_standard_mib,
diff --git a/lib/snmp/src/agent/snmpa_agent.erl b/lib/snmp/src/agent/snmpa_agent.erl
index 5039b08391..48630489fa 100644
--- a/lib/snmp/src/agent/snmpa_agent.erl
+++ b/lib/snmp/src/agent/snmpa_agent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2020. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -65,18 +65,11 @@
-export([increment_counter/3]).
-export([restart_worker/1, restart_set_worker/1, restart_notif_worker/1]).
-%% For backward compatibillity
--export([send_trap/6, send_trap/7]).
-
%% Internal exports
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3, tr_var/2, tr_varbind/1,
handle_pdu/8, worker/4, worker_loop/2,
do_send_trap/7, do_send_trap/8]).
-%% <BACKWARD-COMPAT>
--export([handle_pdu/7,
- load_mibs/2, unload_mibs/2]).
-%% </BACKWARD-COMPAT>
-include("snmpa_internal.hrl").
@@ -559,21 +552,9 @@ subagent_set(SubAgent, Arguments) ->
call(SubAgent, {subagent_set, Arguments, PduData}).
-%% Called by administrator (not agent; deadlock would occur)
-%% <BACKWARD-COMPAT>
-load_mibs(Agent, Mibs) ->
- load_mibs(Agent, Mibs, false).
-%% </BACKWARD-COMPAT>
-
load_mibs(Agent, Mibs, Force) ->
call(Agent, {load_mibs, Mibs, Force}).
-%% Called by administrator (not agent; deadlock would occur)
-%% <BACKWARD-COMPAT>
-unload_mibs(Agent, Mibs) ->
- unload_mibs(Agent, Mibs, false).
-%% </BACKWARD-COMPAT>
-
unload_mibs(Agent, Mibs, Force) ->
call(Agent, {unload_mibs, Mibs, Force}).
@@ -622,51 +603,6 @@ send_notification(Agent, Notification, SendOpts) ->
Msg = {send_notif, Notification, SendOpts},
maybe_call(Agent, Msg).
-%% <BACKWARD-COMPAT>
-send_trap(Agent, Trap, NotifyName, CtxName, Recv, Varbinds) ->
- ?d("send_trap -> entry with"
- "~n self(): ~p"
- "~n Agent: ~p [~p]"
- "~n Trap: ~p"
- "~n NotifyName: ~p"
- "~n CtxName: ~p"
- "~n Recv: ~p"
- "~n Varbinds: ~p",
- [self(), Agent, wis(Agent),
- Trap, NotifyName, CtxName, Recv, Varbinds]),
- SendOpts = [
- {receiver, Recv},
- {varbinds, Varbinds},
- {name, NotifyName},
- {context, CtxName},
- {extra, ?DEFAULT_NOTIF_EXTRA_INFO}
- ],
- send_notification(Agent, Trap, SendOpts).
-
-send_trap(Agent, Trap, NotifyName, CtxName, Recv, Varbinds, LocalEngineID) ->
- ?d("send_trap -> entry with"
- "~n self(): ~p"
- "~n Agent: ~p [~p]"
- "~n Trap: ~p"
- "~n NotifyName: ~p"
- "~n CtxName: ~p"
- "~n Recv: ~p"
- "~n Varbinds: ~p"
- "~n LocalEngineID: ~p",
- [self(), Agent, wis(Agent),
- Trap, NotifyName, CtxName, Recv, Varbinds, LocalEngineID]),
- SendOpts = [
- {receiver, Recv},
- {varbinds, Varbinds},
- {name, NotifyName},
- {context, CtxName},
- {extra, ?DEFAULT_NOTIF_EXTRA_INFO},
- {local_engine_id, LocalEngineID}
- ],
- send_notification(Agent, Trap, SendOpts).
-
-%% </BACKWARD-COMPAT>
-
%% -- Discovery functions --
@@ -863,51 +799,6 @@ handle_info({send_notif, Notification, SendOpts}, S) ->
{noreply, S}
end;
-%% <BACKWARD-COMPAT>
-handle_info({send_trap, Trap, NotifyName, ContextName, Recv, Varbinds}, S) ->
- ?vlog("[handle_info] send trap request:"
- "~n Trap: ~p"
- "~n NotifyName: ~p"
- "~n ContextName: ~p"
- "~n Recv: ~p"
- "~n Varbinds: ~p",
- [Trap, NotifyName, ContextName, Recv, Varbinds]),
- ExtraInfo = ?DEFAULT_NOTIF_EXTRA_INFO,
- LocalEngineID = local_engine_id(S),
- case (catch handle_send_trap(S, Trap, NotifyName, ContextName,
- Recv, Varbinds, LocalEngineID, ExtraInfo)) of
- {ok, NewS} ->
- {noreply, NewS};
- {'EXIT', R} ->
- ?vinfo("Trap not sent:~n ~p", [R]),
- {noreply, S};
- _ ->
- {noreply, S}
- end;
-
-handle_info({send_trap, Trap, NotifyName, ContextName, Recv, Varbinds,
- LocalEngineID}, S) ->
- ?vlog("[handle_info] send trap request:"
- "~n Trap: ~p"
- "~n NotifyName: ~p"
- "~n ContextName: ~p"
- "~n Recv: ~p"
- "~n Varbinds: ~p"
- "~n LocalEngineID: ~p",
- [Trap, NotifyName, ContextName, Recv, Varbinds, LocalEngineID]),
- ExtraInfo = ?DEFAULT_NOTIF_EXTRA_INFO,
- case (catch handle_send_trap(S, Trap, NotifyName, ContextName,
- Recv, Varbinds, LocalEngineID, ExtraInfo)) of
- {ok, NewS} ->
- {noreply, NewS};
- {'EXIT', R} ->
- ?vinfo("Trap not sent:~n ~p", [R]),
- {noreply, S};
- _ ->
- {noreply, S}
- end;
-%% </BACKWARD-COMPAT>
-
handle_info({forward_trap, TrapRecord, NotifyName, ContextName,
Recv, Varbinds, ExtraInfo}, S) ->
?vlog("[handle_info] forward trap request:"
@@ -929,30 +820,6 @@ handle_info({forward_trap, TrapRecord, NotifyName, ContextName,
{noreply, S}
end;
-%% <BACKWARD-COMPAT>
-handle_info({forward_trap, TrapRecord, NotifyName, ContextName,
- Recv, Varbinds}, S) ->
- ?vlog("[handle_info] forward trap request:"
- "~n TrapRecord: ~p"
- "~n NotifyName: ~p"
- "~n ContextName: ~p"
- "~n Recv: ~p"
- "~n Varbinds: ~p",
- [TrapRecord, NotifyName, ContextName, Recv, Varbinds]),
- ExtraInfo = ?DEFAULT_NOTIF_EXTRA_INFO,
- LocalEngineID = ?DEFAULT_LOCAL_ENGINE_ID,
- case (catch maybe_send_trap(S, TrapRecord, NotifyName, ContextName,
- Recv, Varbinds, LocalEngineID, ExtraInfo)) of
- {ok, NewS} ->
- {noreply, NewS};
- {'EXIT', R} ->
- ?vinfo("Trap not sent:~n ~p", [R]),
- {noreply, S};
- _ ->
- {noreply, S}
- end;
-%% </BACKWARD-COMPAT>
-
handle_info({backup_done, Reply}, #state{backup = {_, From}} = S) ->
?vlog("[handle_info] backup done:"
"~n Reply: ~p", [Reply]),
@@ -1075,55 +942,6 @@ handle_call({send_notif, Notification, SendOpts}, _From, S) ->
{reply, {error, send_failed}, S}
end;
-%% <BACKWARD-COMPAT>
-handle_call({send_trap, Trap, NotifyName, ContextName, Recv, Varbinds},
- _From, S) ->
- ?vlog("[handle_call] send trap request:"
- "~n Trap: ~p"
- "~n NotifyName: ~p"
- "~n ContextName: ~p"
- "~n Recv: ~p"
- "~n Varbinds: ~p",
- [Trap, NotifyName, ContextName, Recv, Varbinds]),
- ExtraInfo = ?DEFAULT_NOTIF_EXTRA_INFO,
- LocalEngineID = local_engine_id(S),
- case (catch handle_send_trap(S, Trap, NotifyName, ContextName,
- Recv, Varbinds, LocalEngineID, ExtraInfo)) of
- {ok, NewS} ->
- {reply, ok, NewS};
- {'EXIT', Reason} ->
- ?vinfo("Trap not sent:~n ~p", [Reason]),
- {reply, {error, {send_failed, Reason}}, S};
- _ ->
- ?vinfo("Trap not sent", []),
- {reply, {error, send_failed}, S}
- end;
-
-handle_call({send_trap, Trap, NotifyName,
- ContextName, Recv, Varbinds, LocalEngineID},
- _From, S) ->
- ?vlog("[handle_call] send trap request:"
- "~n Trap: ~p"
- "~n NotifyName: ~p"
- "~n ContextName: ~p"
- "~n Recv: ~p"
- "~n Varbinds: ~p"
- "~n LocalEngineID: ~p",
- [Trap, NotifyName, ContextName, Recv, Varbinds, LocalEngineID]),
- ExtraInfo = ?DEFAULT_NOTIF_EXTRA_INFO,
- case (catch handle_send_trap(S, Trap, NotifyName, ContextName,
- Recv, Varbinds, LocalEngineID, ExtraInfo)) of
- {ok, NewS} ->
- {reply, ok, NewS};
- {'EXIT', Reason} ->
- ?vinfo("Trap not sent:~n ~p", [Reason]),
- {reply, {error, {send_failed, Reason}}, S};
- _ ->
- ?vinfo("Trap not sent", []),
- {reply, {error, send_failed}, S}
- end;
-%% </BACKWARD-COMPAT>
-
handle_call({discovery,
TargetName, Notification, ContextName, Vbs, DiscoHandler,
ExtraInfo},
@@ -1262,22 +1080,10 @@ handle_call({unregister_subagent, SubTreeOid}, _From, S) ->
end,
{reply, Reply, S};
-%% <BACKWARD-COMPAT>
-handle_call({load_mibs, Mibs}, _From, S) ->
- ?vlog("load mibs ~p", [Mibs]),
- {reply, snmpa_mib:load_mibs(get(mibserver), Mibs), S};
-%% </BACKWARD-COMPAT>
-
handle_call({load_mibs, Mibs, Force}, _From, S) ->
?vlog("[~w] load mibs ~p", [Force, Mibs]),
{reply, snmpa_mib:load_mibs(get(mibserver), Mibs, Force), S};
-%% <BACKWARD-COMPAT>
-handle_call({unload_mibs, Mibs}, _From, S) ->
- ?vlog("unload mibs ~p", [Mibs]),
- {reply, snmpa_mib:unload_mibs(get(mibserver), Mibs), S};
-%% </BACKWARD-COMPAT>
-
handle_call({unload_mibs, Mibs, Force}, _From, S) ->
?vlog("[~w] unload mibs ~p", [Force, Mibs]),
{reply, snmpa_mib:unload_mibs(get(mibserver), Mibs, Force), S};
@@ -1876,46 +1682,6 @@ worker_loop(Master, Report) ->
exit(normal);
-
-
- %% *************************************************************
- %%
- %% Kept for backward compatibillity reasons
- %%
- %% *************************************************************
-
- {Vsn, Pdu, PduMS, ACMData, Address, Extra} ->
- ?vtrace("worker_loop -> received request", []),
- handle_pdu2(Vsn, Pdu, PduMS, ACMData, Address,
- ?DEFAULT_GB_MAX_VBS, Extra),
- Master ! worker_available;
-
- %% We don't trap exits!
- {TrapRec, NotifyName, ContextName, Recv, Vbs} ->
- ?vtrace("worker_loop -> send trap:"
- "~n ~p", [TrapRec]),
- snmpa_trap:send_trap(TrapRec, NotifyName,
- ContextName, Recv, Vbs, get(net_if)),
- Master ! worker_available;
-
- %% We don't trap exits!
- {send_trap,
- TrapRec, NotifyName, ContextName, Recv, Vbs, LocalEngineID,
- ExtraInfo} ->
- ?vtrace("worker_loop -> send trap:"
- "~n ~p", [TrapRec]),
- snmpa_trap:send_trap(TrapRec, NotifyName,
- ContextName, Recv, Vbs,
- LocalEngineID, ExtraInfo,
- get(net_if)),
- Master ! worker_available;
-
- {verbosity, Verbosity} ->
- put(verbosity, snmp_verbosity:validate(Verbosity));
-
- terminate ->
- exit(normal);
-
_X ->
%% ignore
ignore_unknown
@@ -1972,12 +1738,6 @@ handle_snmp_pdu(_, _Vsn, _Pdu, _PduMS, _ACMData, _Address, _Extra, S) ->
S.
-%% Called via the spawn_thread function
-%% <BACKWARD-COMPAT>
-handle_pdu(Vsn, Pdu, PduMS, ACMData, Address, Extra, Dict) ->
- handle_pdu(Vsn, Pdu, PduMS, ACMData, Address, ?DEFAULT_GB_MAX_VBS, Extra,
- Dict).
-%% </BACKWARD-COMPAT>
handle_pdu(Vsn, Pdu, PduMS, ACMData, Address, GbMaxVBs, Extra, Dict) ->
lists:foreach(fun({Key, Val}) -> put(Key, Val) end, Dict),
put(sname, pdu_handler_short_name(get(sname))),
diff --git a/lib/snmp/src/agent/snmpa_mib.erl b/lib/snmp/src/agent/snmpa_mib.erl
index 8e594213f9..5ac258b7c1 100644
--- a/lib/snmp/src/agent/snmpa_mib.erl
+++ b/lib/snmp/src/agent/snmpa_mib.erl
@@ -47,11 +47,6 @@
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
code_change/3]).
-%% <BACKWARD-COMPAT>
--export([load_mibs/2, unload_mibs/2]).
-%% </BACKWARD-COMPAT>
-
-
-include_lib("kernel/include/file.hrl").
-include("snmpa_internal.hrl").
-include("snmp_types.hrl").
@@ -204,11 +199,6 @@ next(MibServer, Oid, MibView) ->
%% Returns: ok | {error, Reason}
%%----------------------------------------------------------------------
-%% <BACKWARD-COMPAT>
-load_mibs(MibServer, Mibs) ->
- load_mibs(MibServer, Mibs, false).
-%% </BACKWARD-COMPAT>
-
load_mibs(MibServer, Mibs, Force) ->
call(MibServer, {load_mibs, Mibs, Force}).
@@ -219,10 +209,6 @@ load_mibs(MibServer, Mibs, Force) ->
%% Force is a boolean
%% Returns: ok | {error, Reason}
%%----------------------------------------------------------------------
-%% <BACKWARD-COMPAT>
-unload_mibs(MibServer, Mibs) ->
- unload_mibs(MibServer, Mibs, false).
-%% </BACKWARD-COMPAT>
unload_mibs(MibServer, Mibs, Force) ->
call(MibServer, {unload_mibs, Mibs, Force}).
@@ -514,11 +500,6 @@ handle_call({next, Oid, MibView}, _From,
?vdebug("next -> Reply: ~p", [Reply]),
{reply, Reply, NewState};
-%% <BACKWARD-COMPAT>
-handle_call({load_mibs, Mibs}, From, State) ->
- handle_call({load_mibs, Mibs, false}, From, State);
-%% </BACKWARD-COMPAT>
-
handle_call({load_mibs, Mibs, Force}, _From,
#state{data = Data,
teo = TeOverride,
@@ -540,11 +521,6 @@ handle_call({load_mibs, Mibs, Force}, _From,
Mod:sync(NData),
{reply, Reply, State#state{data = NData, cache = NewCache}};
-%% <BACKWARD-COMPAT>
-handle_call({unload_mibs, Mibs}, From, State) ->
- handle_call({unload_mibs, Mibs, false}, From, State);
-%% </BACKWARD-COMPAT>
-
handle_call({unload_mibs, Mibs, Force}, _From,
#state{data = Data,
teo = TeOverride,
diff --git a/lib/snmp/src/agent/snmpa_net_if.erl b/lib/snmp/src/agent/snmpa_net_if.erl
index c0ab7c9f8d..373b0e922f 100644
--- a/lib/snmp/src/agent/snmpa_net_if.erl
+++ b/lib/snmp/src/agent/snmpa_net_if.erl
@@ -679,18 +679,6 @@ loop(#state{transports = Transports,
loop(NewS);
%% Discovery Inform
- %% <BACKWARD-COMPAT>
- {send_discovery, Pdu, MsgData, To, From} ->
- ?vdebug("received send discovery request: "
- "~n Pdu: ~p"
- "~n To: ~p"
- "~n From: ~p",
- [Pdu, To, toname(From)]),
- NewS = handle_send_discovery(S, Pdu, MsgData, To, From),
- loop(NewS);
- %% </BACKWARD-COMPAT>
-
- %% Discovery Inform
{send_discovery, Pdu, MsgData, To, From, ExtraInfo} ->
?vdebug("received send discovery request: "
"~n Pdu: ~p"
diff --git a/lib/snmp/src/agent/snmpa_trap.erl b/lib/snmp/src/agent/snmpa_trap.erl
index 9ee854b67d..f0e1e20713 100644
--- a/lib/snmp/src/agent/snmpa_trap.erl
+++ b/lib/snmp/src/agent/snmpa_trap.erl
@@ -34,11 +34,6 @@
send_inform/6]).
-export([init_discovery_inform/13, send_discovery_inform/5]).
-%% <BACKWARD-COMPAT>
--export([send_discovery/5,
- init_discovery_inform/12]).
-%% </BACKWARD-COMPAT>
-
-include_lib("snmp/include/snmp_types.hrl").
-include_lib("snmp/src/agent/snmpa_internal.hrl").
-include_lib("snmp/include/SNMPv2-MIB.hrl").
@@ -438,9 +433,6 @@ do_send_trap(TrapRec, NotifyName, ContextName, Recv, Vbs,
send_trap_pdus(Dests, ContextName, {TrapRec, VarbindList}, [], [], [],
Recv, LocalEngineID, ExtraInfo, NetIf).
-send_discovery(TargetName, Record, ContextName, Vbs, NetIf) ->
- ExtraInfo = ?DEFAULT_NOTIF_EXTRA_INFO,
- send_discovery(TargetName, Record, ContextName, Vbs, NetIf, ExtraInfo).
send_discovery(TargetName, Record, ContextName, Vbs, NetIf, ExtraInfo) ->
case find_dest(TargetName) of
{ok, Dest} ->
@@ -718,16 +710,6 @@ send_discovery_pdu(Record, Dest, Vbs,
init_discovery_inform(Parent,
Dest,
SecModel, SecName, SecLevel, TargetName,
- ContextName, Timeout, Retry, Vbs, NetIf, Verbosity) ->
- ExtraInfo = ?DEFAULT_NOTIF_EXTRA_INFO,
- init_discovery_inform(Parent,
- Dest,
- SecModel, SecName, SecLevel, TargetName,
- ContextName, Timeout, Retry, Vbs, NetIf,
- Verbosity, ExtraInfo).
-init_discovery_inform(Parent,
- Dest,
- SecModel, SecName, SecLevel, TargetName,
ContextName, Timeout, Retry, Vbs, NetIf,
Verbosity, ExtraInfo) ->
put(verbosity, Verbosity),
diff --git a/lib/snmp/src/app/snmp.app.src b/lib/snmp/src/app/snmp.app.src
index 3c47af4a4c..3cb0b8f0eb 100644
--- a/lib/snmp/src/app/snmp.app.src
+++ b/lib/snmp/src/app/snmp.app.src
@@ -142,4 +142,4 @@
{applications, [kernel, stdlib]},
{mod, {snmp_app, []}},
{runtime_dependencies, ["stdlib-2.5","runtime_tools-1.8.14","mnesia-4.12",
- "kernel-8.0","erts-12.0","crypto-3.3"]}]}.
+ "kernel-8.0","erts-12.0","crypto-4.6"]}]}.
diff --git a/lib/snmp/src/manager/snmpm.erl b/lib/snmp/src/manager/snmpm.erl
index ffa6b0012c..76bea05cc9 100644
--- a/lib/snmp/src/manager/snmpm.erl
+++ b/lib/snmp/src/manager/snmpm.erl
@@ -96,18 +96,6 @@
-export([format_reason/1, format_reason/2]).
-%% Backward compatibility exports (API version "2")
--export([
- sync_get/3, sync_get/4, sync_get/5, sync_get/6,
- async_get/3, async_get/4, async_get/5, async_get/6,
- sync_get_next/3, sync_get_next/4, sync_get_next/5, sync_get_next/6,
- async_get_next/3, async_get_next/4, async_get_next/5, async_get_next/6,
- sync_set/3, sync_set/4, sync_set/5, sync_set/6,
- async_set/3, async_set/4, async_set/5, async_set/6,
- sync_get_bulk/5, sync_get_bulk/6, sync_get_bulk/7, sync_get_bulk/8,
- async_get_bulk/5, async_get_bulk/6, async_get_bulk/7, async_get_bulk/8
- ]).
-
%% Application internal export
-export([start_link/3, snmpm_start_verify/2, snmpm_start_verify/3]).
-export([target_name/1, target_name/2]).
@@ -119,49 +107,6 @@
]).
--deprecated(
- [
- {sync_get, 3, "use snmpm:sync_get2/3 instead."},
- {sync_get, 4, "use snmpm:sync_get2/4 instead."},
- {sync_get, 5, "use snmpm:sync_get2/4 instead."},
- {sync_get, 6, "use snmpm:sync_get2/4 instead."},
-
- {async_get, 3, "use snmpm:async_get2/3 instead."},
- {async_get, 4, "use snmpm:async_get2/4 instead."},
- {async_get, 5, "use snmpm:async_get2/4 instead."},
- {async_get, 6, "use snmpm:async_get2/4 instead."},
-
- {sync_get_next, 3, "use snmpm:sync_get_next2/3 instead."},
- {sync_get_next, 4, "use snmpm:sync_get_next2/4 instead."},
- {sync_get_next, 5, "use snmpm:sync_get_next2/4 instead."},
- {sync_get_next, 6, "use snmpm:sync_get_next2/4 instead."},
-
- {async_get_next, 3, "use snmpm:async_get_next2/3 instead."},
- {async_get_next, 4, "use snmpm:async_get_next2/4 instead."},
- {async_get_next, 5, "use snmpm:async_get_next2/4 instead."},
- {async_get_next, 6, "use snmpm:async_get_next2/4 instead."},
-
- {sync_set, 3, "use snmpm:sync_set2/3 instead."},
- {sync_set, 4, "use snmpm:sync_set2/4 instead."},
- {sync_set, 5, "use snmpm:sync_set2/4 instead."},
- {sync_set, 6, "use snmpm:sync_set2/4 instead."},
-
- {async_set, 3, "use snmpm:async_set2/3 instead."},
- {async_set, 4, "use snmpm:async_set2/4 instead."},
- {async_set, 5, "use snmpm:async_set2/4 instead."},
- {async_set, 6, "use snmpm:async_set2/4 instead."},
-
- {sync_get_bulk, 5, "use snmpm:sync_get_bulk2/5 instead."},
- {sync_get_bulk, 6, "use snmpm:sync_get_bulk2/6 instead."},
- {sync_get_bulk, 7, "use snmpm:sync_get_bulk2/6 instead."},
- {sync_get_bulk, 8, "use snmpm:sync_get_bulk2/6 instead."},
-
- {async_get_bulk, 5, "use snmpm:async_get_bulk2/5 instead."},
- {async_get_bulk, 6, "use snmpm:async_get_bulk2/6 instead."},
- {async_get_bulk, 7, "use snmpm:async_get_bulk2/6 instead."},
- {async_get_bulk, 8, "use snmpm:async_get_bulk2/6 instead."}
- ]).
-
-include_lib("snmp/src/misc/snmp_debug.hrl").
-include_lib("snmp/include/snmp_types.hrl").
-include("snmpm_atl.hrl").
@@ -206,14 +151,14 @@ simple_conf() ->
{ok, _} ->
ok;
_ ->
- ok = snmp_config:write_manager_config(Cwd, "",
+ ok = snmp_config:write_manager_config(Cwd, "",
[{port, 5000},
{engine_id, "mgrEngine"},
{max_message_size, 484}])
end,
Conf = [{dir, Cwd}, {db_dir, Cwd}],
[{versions, Vsns}, {config, Conf}].
-
+
%% Simple start. Start a manager with default values.
start_link() ->
start_link(simple_conf()).
@@ -559,29 +504,6 @@ sync_get2(UserId, TargetName, Oids, SendOpts)
when is_list(Oids) andalso is_list(SendOpts) ->
snmpm_server:sync_get(UserId, TargetName, Oids, SendOpts).
-%% <BACKWARD-COMPAT>
-sync_get(UserId, TargetName, Oids) ->
- sync_get2(UserId, TargetName, Oids).
-
-sync_get(UserId, TargetName, Oids, Timeout)
- when is_list(Oids) andalso is_integer(Timeout) ->
- SendOpts = [{timeout, Timeout}],
- sync_get2(UserId, TargetName, Oids, SendOpts);
-sync_get(UserId, TargetName, Context, [OH|_] = Oids)
- when is_list(Context) andalso is_list(OH) ->
- SendOpts = [{context, Context}],
- sync_get2(UserId, TargetName, Oids, SendOpts).
-
-sync_get(UserId, TargetName, Context, Oids, Timeout) ->
- SendOpts = [{context, Context}, {timeout, Timeout}],
- sync_get2(UserId, TargetName, Oids, SendOpts).
-
-sync_get(UserId, TargetName, Context, Oids, Timeout, ExtraInfo) ->
- SendOpts = [{context, Context}, {timeout, Timeout}, {extra, ExtraInfo}],
- sync_get2(UserId, TargetName, Oids, SendOpts).
-%% </BACKWARD-COMPAT>
-
-
%% --- asynchronous get-request ---
%%
@@ -596,27 +518,6 @@ async_get2(UserId, TargetName, Oids, SendOpts)
when is_list(Oids) andalso is_list(SendOpts) ->
snmpm_server:async_get(UserId, TargetName, Oids, SendOpts).
-%% <BACKWARD-COMPAT>
-async_get(UserId, TargetName, Oids) ->
- async_get2(UserId, TargetName, Oids).
-
-async_get(UserId, TargetName, Oids, Expire) when is_integer(Expire) ->
- SendOpts = [{timeout, Expire}],
- async_get2(UserId, TargetName, Oids, SendOpts);
-async_get(UserId, TargetName, Context, Oids)
- when is_list(Context) andalso is_list(Oids) ->
- SendOpts = [{context, Context}],
- async_get2(UserId, TargetName, Oids, SendOpts).
-
-async_get(UserId, TargetName, Context, Oids, Expire) ->
- SendOpts = [{timeout, Expire}, {context, Context}],
- async_get2(UserId, TargetName, Oids, SendOpts).
-
-async_get(UserId, TargetName, Context, Oids, Expire, ExtraInfo) ->
- SendOpts = [{timeout, Expire}, {context, Context}, {extra, ExtraInfo}],
- async_get2(UserId, TargetName, Oids, SendOpts).
-%% </BACKWARD-COMPAT>
-
%% --- synchroneous get_next-request ---
%%
@@ -628,28 +529,6 @@ sync_get_next2(UserId, TargetName, Oids, SendOpts)
when is_list(Oids) andalso is_list(SendOpts) ->
snmpm_server:sync_get_next(UserId, TargetName, Oids, SendOpts).
-%% <BACKWARD-COMPAT>
-sync_get_next(UserId, TargetName, Oids) ->
- sync_get_next2(UserId, TargetName, Oids).
-
-sync_get_next(UserId, TargetName, Oids, Timeout)
- when is_list(Oids) andalso is_integer(Timeout) ->
- SendOpts = [{timeout, Timeout}],
- sync_get_next2(UserId, TargetName, Oids, SendOpts);
-sync_get_next(UserId, TargetName, Context, Oids)
- when is_list(Context) andalso is_list(Oids) ->
- SendOpts = [{context, Context}],
- sync_get_next2(UserId, TargetName, Oids, SendOpts).
-
-sync_get_next(UserId, TargetName, Context, Oids, Timeout) ->
- SendOpts = [{timeout, Timeout}, {context, Context}],
- sync_get_next2(UserId, TargetName, Oids, SendOpts).
-
-sync_get_next(UserId, TargetName, Context, Oids, Timeout, ExtraInfo) ->
- SendOpts = [{timeout, Timeout}, {context, Context}, {extra, ExtraInfo}],
- sync_get_next2(UserId, TargetName, Oids, SendOpts).
-%% </BACKWARD-COMPAT>
-
%% --- asynchronous get_next-request ---
%%
@@ -661,28 +540,6 @@ async_get_next2(UserId, TargetName, Oids, SendOpts)
when is_list(Oids) andalso is_list(SendOpts) ->
snmpm_server:async_get_next(UserId, TargetName, Oids, SendOpts).
-%% <BACKWARD-COMPAT>
-async_get_next(UserId, TargetName, Oids) ->
- async_get_next2(UserId, TargetName, Oids).
-
-async_get_next(UserId, TargetName, Oids, Expire)
- when is_list(Oids) andalso is_integer(Expire) ->
- SendOpts = [{timeout, Expire}],
- async_get_next2(UserId, TargetName, Oids, SendOpts);
-async_get_next(UserId, TargetName, Context, Oids)
- when is_list(Context) andalso is_list(Oids) ->
- SendOpts = [{context, Context}],
- async_get_next2(UserId, TargetName, Oids, SendOpts).
-
-async_get_next(UserId, TargetName, Context, Oids, Expire) ->
- SendOpts = [{timeout, Expire}, {context, Context}],
- async_get_next2(UserId, TargetName, Oids, SendOpts).
-
-async_get_next(UserId, TargetName, Context, Oids, Expire, ExtraInfo) ->
- SendOpts = [{timeout, Expire}, {context, Context}, {extra, ExtraInfo}],
- async_get_next2(UserId, TargetName, Oids, SendOpts).
-%% </BACKWARD-COMPAT>
-
%% --- synchroneous set-request ---
%%
@@ -694,28 +551,6 @@ sync_set2(UserId, TargetName, VarsAndVals, SendOpts)
when is_list(VarsAndVals) andalso is_list(SendOpts) ->
snmpm_server:sync_set(UserId, TargetName, VarsAndVals, SendOpts).
-%% <BACKWARD-COMPAT>
-sync_set(UserId, TargetName, VarsAndVals) ->
- sync_set2(UserId, TargetName, VarsAndVals).
-
-sync_set(UserId, TargetName, VarsAndVals, Timeout)
- when is_list(VarsAndVals) andalso is_integer(Timeout) ->
- SendOpts = [{timeout, Timeout}],
- sync_set2(UserId, TargetName, VarsAndVals, SendOpts);
-sync_set(UserId, TargetName, Context, VarsAndVals)
- when is_list(Context) andalso is_list(VarsAndVals) ->
- SendOpts = [{context, Context}],
- sync_set2(UserId, TargetName, VarsAndVals, SendOpts).
-
-sync_set(UserId, TargetName, Context, VarsAndVals, Timeout) ->
- SendOpts = [{timeout, Timeout}, {context, Context}],
- sync_set2(UserId, TargetName, VarsAndVals, SendOpts).
-
-sync_set(UserId, TargetName, Context, VarsAndVals, Timeout, ExtraInfo) ->
- SendOpts = [{timeout, Timeout}, {context, Context}, {extra, ExtraInfo}],
- sync_set2(UserId, TargetName, VarsAndVals, SendOpts).
-%% </BACKWARD-COMPAT>
-
%% --- asynchronous set-request ---
%%
@@ -727,28 +562,6 @@ async_set2(UserId, TargetName, VarsAndVals, SendOpts)
when is_list(VarsAndVals) andalso is_list(SendOpts) ->
snmpm_server:async_set(UserId, TargetName, VarsAndVals, SendOpts).
-%% <BACKWARD-COMPAT>
-async_set(UserId, TargetName, VarsAndVals) ->
- async_set2(UserId, TargetName, VarsAndVals).
-
-async_set(UserId, TargetName, VarsAndVals, Expire)
- when is_list(VarsAndVals) andalso is_integer(Expire) ->
- SendOpts = [{timeout, Expire}],
- async_set2(UserId, TargetName, VarsAndVals, SendOpts);
-async_set(UserId, TargetName, Context, VarsAndVals)
- when is_list(Context) andalso is_list(VarsAndVals) ->
- SendOpts = [{context, Context}],
- async_set2(UserId, TargetName, VarsAndVals, SendOpts).
-
-async_set(UserId, TargetName, Context, VarsAndVals, Expire) ->
- SendOpts = [{timeout, Expire}, {context, Context}],
- async_set2(UserId, TargetName, VarsAndVals, SendOpts).
-
-async_set(UserId, TargetName, Context, VarsAndVals, Expire, ExtraInfo) ->
- SendOpts = [{timeout, Expire}, {context, Context}, {extra, ExtraInfo}],
- async_set2(UserId, TargetName, VarsAndVals, SendOpts).
-%% </BACKWARD-COMPAT>
-
%% --- synchroneous get-bulk ---
%%
@@ -764,35 +577,6 @@ sync_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts)
snmpm_server:sync_get_bulk(UserId, TargetName,
NonRep, MaxRep, Oids, SendOpts).
-%% <BACKWARD-COMPAT>
-sync_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids) ->
- sync_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids).
-
-sync_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids, Timeout)
- when is_integer(NonRep) andalso
- is_integer(MaxRep) andalso
- is_list(Oids) andalso
- is_integer(Timeout) ->
- SendOpts = [{timeout, Timeout}],
- sync_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts);
-sync_get_bulk(UserId, TargetName, NonRep, MaxRep, Context, Oids)
- when is_integer(NonRep) andalso
- is_integer(MaxRep) andalso
- is_list(Context) andalso
- is_list(Oids) ->
- SendOpts = [{context, Context}],
- sync_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts).
-
-sync_get_bulk(UserId, TargetName, NonRep, MaxRep, Context, Oids, Timeout) ->
- SendOpts = [{timeout, Timeout}, {context, Context}],
- sync_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts).
-
-sync_get_bulk(UserId, TargetName, NonRep, MaxRep, Context, Oids, Timeout,
- ExtraInfo) ->
- SendOpts = [{timeout, Timeout}, {context, Context}, {extra, ExtraInfo}],
- sync_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts).
-%% </BACKWARD-COMPAT>
-
%% --- asynchronous get-bulk ---
%%
@@ -808,35 +592,6 @@ async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts)
snmpm_server:async_get_bulk(UserId, TargetName,
NonRep, MaxRep, Oids, SendOpts).
-%% <BACKWARD-COMPAT>
-async_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids) ->
- async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids).
-
-async_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids, Expire)
- when is_integer(NonRep) andalso
- is_integer(MaxRep) andalso
- is_list(Oids) andalso
- is_integer(Expire) ->
- SendOpts = [{timeout, Expire}],
- async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts);
-async_get_bulk(UserId, TargetName, NonRep, MaxRep, Context, Oids)
- when is_integer(NonRep) andalso
- is_integer(MaxRep) andalso
- is_list(Context) andalso
- is_list(Oids) ->
- SendOpts = [{context, Context}],
- async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts).
-
-async_get_bulk(UserId, TargetName, NonRep, MaxRep, Context, Oids, Expire) ->
- SendOpts = [{timeout, Expire}, {context, Context}],
- async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts).
-
-async_get_bulk(UserId, TargetName, NonRep, MaxRep, Context, Oids, Expire,
- ExtraInfo) ->
- SendOpts = [{timeout, Expire}, {context, Context}, {extra, ExtraInfo}],
- async_get_bulk2(UserId, TargetName, NonRep, MaxRep, Oids, SendOpts).
-%% </BACKWARD-COMPAT>
-
cancel_async_request(UserId, ReqId) ->
diff --git a/lib/snmp/src/manager/snmpm_config.erl b/lib/snmp/src/manager/snmpm_config.erl
index 356ba44b08..06457d9167 100644
--- a/lib/snmp/src/manager/snmpm_config.erl
+++ b/lib/snmp/src/manager/snmpm_config.erl
@@ -38,7 +38,7 @@
register_agent/3, unregister_agent/2,
agent_info/0, agent_info/2, agent_info/3,
- update_agent_info/3, update_agent_info/4,
+ update_agent_info/3,
which_agents/0, which_agents/1,
is_known_engine_id/2,
@@ -94,9 +94,7 @@
%% Backward compatibillity exports
-export([
- register_user/3,
unregister_agent/3,
- update_agent_info/5,
is_known_engine_id/3,
get_agent_engine_id/2,
get_agent_engine_max_message_size/2,
@@ -109,12 +107,15 @@
check_manager_config/2,
check_user_config/1,
check_agent_config/1,
- check_usm_user_config/1]).
+ check_usm_user_config/1
+ ]).
%% gen_server callbacks
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- code_change/3, terminate/2]).
+-export([
+ init/1, handle_call/3, handle_cast/2, handle_info/2,
+ code_change/3, terminate/2
+ ]).
%% Includes:
@@ -191,10 +192,6 @@ is_started() ->
backup(BackupDir) when is_list(BackupDir) ->
call({backup, BackupDir}).
-%% Backward compatibillity
-register_user(UserId, UserMod, UserData) ->
- register_user(UserId, UserMod, UserData, []).
-
register_user(UserId, UserMod, UserData, DefaultAgentConfig)
when (UserId =/= ?DEFAULT_USER) andalso is_list(DefaultAgentConfig) ->
case (catch verify_user_behaviour(UserMod)) of
@@ -214,20 +211,6 @@ register_user(UserId, _UserMod, _UserData, DefaultAgentConfig)
register_user(UserId, _, _, _) ->
{error, {bad_user_id, UserId}}.
-%% default_agent_config(DefaultAgentConfig) ->
-%% {ok, SystemDefaultAgentConfig} = agent_info(),
-%% default_agent_config(SystemDefaultAgentConfig, DefaultAgentConfig).
-
-%% default_agent_config([], DefaultAgentConfig) ->
-%% DefaultAgentConfig;
-%% default_agent_config([{Key, _} = Entry|T], DefaultAgentConfig) ->
-%% case lists:keymember(Key, 1, DefaultAgentConfig) of
-%% true ->
-%% default_agent_config(T, DefaultAgentConfig);
-%% false ->
-%% default_agent_config(T, [Entry|DefaultAgentConfig])
-%% end.
-
verify_user_behaviour(UserMod) ->
case snmp_misc:verify_behaviour(snmpm_user, UserMod) of
@@ -546,23 +529,6 @@ which_agents(UserId) ->
update_agent_info(UserId, TargetName, Info) ->
call({update_agent_info, UserId, TargetName, Info}).
-%% <BACKWARD-COMPAT-2>
-%% This is wrapped in the interface module, so this function is
-%% only here to catch code-upgrade problems.
-update_agent_info(UserId, TargetName, Item, Val) ->
- update_agent_info(UserId, TargetName, [{Item, Val}]).
-%% </BACKWARD-COMPAT-2>
-
-%% <BACKWARD-COMPAT-1>
-update_agent_info(UserId, Addr, Port, Item, Val) ->
- case agent_info(Addr, Port, target_name) of
- {ok, TargetName} ->
- update_agent_info(UserId, TargetName, Item, Val);
- Error ->
- Error
- end.
-%% </BACKWARD-COMPAT-1>
-
is_known_engine_id(EngineID, TargetName) ->
case agent_info(TargetName, engine_id) of
{ok, EngineID} ->
@@ -2444,18 +2410,6 @@ handle_call({update_agent_info, UserId, TargetName, Info},
Reply = handle_update_agent_info(UserId, TargetName, Info),
{reply, Reply, State};
-%% <BACKWARD-COMPAT>
-handle_call({update_agent_info, UserId, TargetName, Item, Val},
- _From, State) ->
- ?vlog("received update_agent_info request: "
- "~n UserId: ~p"
- "~n TargetName: ~p"
- "~n Item: ~p"
- "~n Val: ~p", [UserId, TargetName, Item, Val]),
- Reply = handle_update_agent_info(UserId, TargetName, Item, Val),
- {reply, Reply, State};
-%% </BACKWARD-COMPAT>
-
handle_call({register_usm_user, User}, _From, State) ->
?vlog("received register_usm_user request: "
"~n User: ~p", [User]),
@@ -2828,6 +2782,7 @@ handle_register_agent(UserId, TargetName, Config) ->
" FixedConfig: ~p", [FixedConfig]),
do_handle_register_agent(
TargetName, [{user_id, UserId}|FixedConfig]),
+
%% <DIRTY-BACKWARD-COMPATIBILLITY>
%% And now for some (backward compatibillity)
%% dirty crossref stuff
@@ -2841,25 +2796,6 @@ handle_register_agent(UserId, TargetName, Config) ->
{{Domain, Address, target_name}, TargetName}),
%% </DIRTY-BACKWARD-COMPATIBILLITY>
-%% %% First, insert this users default config
-%% ?vtrace("handle_register_agent -> store default config", []),
-%% do_handle_register_agent(TargetName, DefConfig),
-%% %% Second, insert the config for this agent
-%% ?vtrace("handle_register_agent -> store config", []),
-%% do_handle_register_agent(TargetName,
-%% [{user_id, UserId}|Config]),
-%% %% <DIRTY-BACKWARD-COMPATIBILLITY>
-%% %% And now for some (backward compatibillity)
-%% %% dirty crossref stuff
-%% ?vtrace("handle_register_agent -> lookup taddress", []),
-%% {ok, {Addr, Port} = TAddress} =
-%% agent_info(TargetName, taddress),
-%% ?vtrace("handle_register_agent -> taddress: ~p",
-%% [TAddress]),
-%% ?vtrace("handle_register_agent -> register cross-ref fix", []),
-%% ets:insert(snmpm_agent_table,
-%% {{Addr, Port, target_name}, TargetName}),
-%% %% </DIRTY-BACKWARD-COMPATIBILLITY>
ok;
_ ->
{error, {not_found, UserId}}
@@ -2964,14 +2900,6 @@ handle_update_agent_info(TargetName, Info) ->
{error, {failed_info_verification, Info, T, E}}
end.
-handle_update_agent_info(UserId, TargetName, Item, Val) ->
- ?vdebug("handle_update_agent_info -> entry with"
- "~n UserId: ~p"
- "~n TargetName: ~p"
- "~n Item: ~p"
- "~n Val: ~p", [UserId, TargetName, Item, Val]),
- handle_update_agent_info(TargetName, [{Item, Val}]).
-
do_update_agent_info(TargetName, Info) ->
?vtrace("do_update_agent_info -> entry with~n"
" TargetName: ~p~n"
diff --git a/lib/snmp/src/manager/snmpm_server.erl b/lib/snmp/src/manager/snmpm_server.erl
index ca18637b8d..07c3a335d8 100644
--- a/lib/snmp/src/manager/snmpm_server.erl
+++ b/lib/snmp/src/manager/snmpm_server.erl
@@ -571,24 +571,6 @@ handle_call({sync_get, Pid, UserId, TargetName, Oids, SendOpts},
{reply, Error, State}
end;
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({sync_get,
- Pid, UserId, TargetName, CtxName, Oids, Timeout, ExtraInfo},
- From, State) ->
- ?vlog("[~p,~p,~p] received sync_get request for: "
- "~n ~p", [UserId, TargetName, CtxName, Oids]),
- case (catch handle_sync_get(Pid,
- UserId, TargetName, CtxName, Oids,
- Timeout, ExtraInfo, From, State)) of
- ok ->
- {noreply, State};
- Error ->
- {reply, Error, State}
- end;
-%% </BACKWARD-COMPAT>
-
-
handle_call({sync_get_next, Pid, UserId, TargetName, Oids, SendOpts},
From, State) ->
?vlog("[~p,~p] received sync_get_next request for: "
@@ -603,24 +585,6 @@ handle_call({sync_get_next, Pid, UserId, TargetName, Oids, SendOpts},
end;
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({sync_get_next,
- Pid, UserId, TargetName, CtxName, Oids, Timeout, ExtraInfo},
- From, State) ->
- ?vlog("[~p,~p,~p] received sync_get_next request for"
- "~n ~p", [UserId, TargetName, CtxName, Oids]),
- case (catch handle_sync_get_next(Pid,
- UserId, TargetName, CtxName, Oids,
- Timeout, ExtraInfo, From, State)) of
- ok ->
- {noreply, State};
- Error ->
- {reply, Error, State}
- end;
-%% </BACKWARD-COMPAT>
-
-
%% Check agent version? This op not in v1
handle_call({sync_get_bulk,
Pid, UserId, TargetName, NonRep, MaxRep, Oids, SendOpts},
@@ -636,24 +600,6 @@ handle_call({sync_get_bulk,
{reply, Error, State}
end;
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({sync_get_bulk, Pid, UserId, TargetName,
- NonRep, MaxRep, CtxName, Oids, Timeout, ExtraInfo},
- From, State) ->
- ?vlog("[~p,~p] received sync_get_bulk request for: ~p"
- "~n ~p", [UserId, TargetName, CtxName, Oids]),
- case (catch handle_sync_get_bulk(Pid,
- UserId, TargetName, CtxName,
- NonRep, MaxRep, Oids,
- Timeout, ExtraInfo, From, State)) of
- ok ->
- {noreply, State};
- Error ->
- {reply, Error, State}
- end;
-%% </BACKWARD-COMPAT>
-
handle_call({sync_set,
Pid, UserId, TargetName, VarsAndVals, SendOpts},
@@ -670,24 +616,6 @@ handle_call({sync_set,
end;
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({sync_set, Pid, UserId, TargetName,
- CtxName, VarsAndVals, Timeout, ExtraInfo},
- From, State) ->
- ?vlog("[~p,~p,~p] received sync_set request for: "
- "~n ~p", [UserId, TargetName, CtxName, VarsAndVals]),
- case (catch handle_sync_set(Pid,
- UserId, TargetName, CtxName, VarsAndVals,
- Timeout, ExtraInfo, From, State)) of
- ok ->
- {noreply, State};
- Error ->
- {reply, Error, State}
- end;
-%% </BACKWARD-COMPAT>
-
-
handle_call({async_get, Pid, UserId, TargetName, Oids, SendOpts},
_From, State) ->
?vlog("[~p,~p] received async_get request for: "
@@ -698,19 +626,6 @@ handle_call({async_get, Pid, UserId, TargetName, Oids, SendOpts},
{reply, Reply, State};
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({async_get, Pid, UserId, TargetName,
- CtxName, Oids, Expire, ExtraInfo},
- _From, State) ->
- ?vlog("[~p,~p,~p] received async_get request for: "
- "~n ~p", [UserId, TargetName, CtxName, Oids]),
- Reply = (catch handle_async_get(Pid, UserId, TargetName, CtxName, Oids,
- Expire, ExtraInfo, State)),
- {reply, Reply, State};
-%% </BACKWARD-COMPAT>
-
-
handle_call({async_get_next, Pid, UserId, TargetName, Oids, SendOpts},
_From, State) ->
?vlog("[~p,~p] received async_get_next request for: "
@@ -721,19 +636,6 @@ handle_call({async_get_next, Pid, UserId, TargetName, Oids, SendOpts},
{reply, Reply, State};
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({async_get_next, Pid, UserId, TargetName,
- CtxName, Oids, Expire, ExtraInfo},
- _From, State) ->
- ?vlog("[~p,~p,~p] received async_get_next request for: ",
- [UserId, TargetName, CtxName, Oids]),
- Reply = (catch handle_async_get_next(Pid, UserId, TargetName, CtxName,
- Oids, Expire, ExtraInfo, State)),
- {reply, Reply, State};
-%% </BACKWARD-COMPAT>
-
-
%% Check agent version? This op not in v1
handle_call({async_get_bulk,
Pid, UserId, TargetName, NonRep, MaxRep, Oids, SendOpts},
@@ -747,21 +649,6 @@ handle_call({async_get_bulk,
{reply, Reply, State};
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({async_get_bulk, Pid, UserId, TargetName,
- NonRep, MaxRep, CtxName, Oids, Expire, ExtraInfo},
- _From, State) ->
- ?vlog("[~p,~p,~p] received async_get_bulk request for: "
- "~n ~p", [UserId, TargetName, CtxName, Oids]),
- Reply = (catch handle_async_get_bulk(Pid,
- UserId, TargetName, CtxName,
- NonRep, MaxRep, Oids,
- Expire, ExtraInfo, State)),
- {reply, Reply, State};
-%% </BACKWARD-COMPAT>
-
-
handle_call({async_set,
Pid, UserId, TargetName, VarsAndVals, SendOpts},
_From, State) ->
@@ -773,19 +660,6 @@ handle_call({async_set,
{reply, Reply, State};
-%% <BACKWARD-COMPAT>
-%% The only case where this would be called is during code upgrade
-handle_call({async_set, Pid, UserId, TargetName,
- CtxName, VarsAndVals, Expire, ExtraInfo},
- _From, State) ->
- ?vlog("[~p,~p,~p] received async_set request for: "
- "~n ~p", [UserId, TargetName, CtxName, VarsAndVals]),
- Reply = (catch handle_async_set(Pid, UserId, TargetName, CtxName,
- VarsAndVals, Expire, ExtraInfo, State)),
- {reply, Reply, State};
-%% </BACKWARD-COMPAT>
-
-
handle_call({cancel_async_request, UserId, ReqId}, _From, State) ->
?vlog("received cancel_async_request request", []),
Reply = (catch handle_cancel_async_request(UserId, ReqId, State)),
@@ -1024,16 +898,6 @@ terminate(Reason, #state{nis_pid = NIS, gct = GCT, cbproxy = CBP}) ->
%%
%%----------------------------------------------------------------------
-handle_sync_get(Pid, UserId, TargetName, CtxName, Oids, Timeout, ExtraInfo,
- From, State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Timeout},
- {extra, ExtraInfo}
- ],
- handle_sync_get(Pid, UserId, TargetName, Oids, SendOpts, From, State).
-
handle_sync_get(Pid, UserId, TargetName, Oids, SendOpts, From, State) ->
?vtrace("handle_sync_get -> entry with"
"~n Pid: ~p"
@@ -1076,16 +940,6 @@ handle_sync_get(Pid, UserId, TargetName, Oids, SendOpts, From, State) ->
Error
end.
-handle_sync_get_next(Pid, UserId, TargetName, CtxName, Oids, Timeout,
- ExtraInfo, From, State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Timeout},
- {extra, ExtraInfo}
- ],
- handle_sync_get_next(Pid, UserId, TargetName, Oids, SendOpts, From, State).
-
handle_sync_get_next(Pid, UserId, TargetName, Oids, SendOpts,
From, State) ->
?vtrace("handle_sync_get_next -> entry with"
@@ -1131,18 +985,6 @@ handle_sync_get_next(Pid, UserId, TargetName, Oids, SendOpts,
end.
-handle_sync_get_bulk(Pid, UserId, TargetName, CtxName,
- NonRep, MaxRep, Oids, Timeout,
- ExtraInfo, From, State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Timeout},
- {extra, ExtraInfo}
- ],
- handle_sync_get_bulk(Pid, UserId, TargetName, NonRep, MaxRep, Oids,
- SendOpts, From, State).
-
handle_sync_get_bulk(Pid, UserId, TargetName, NonRep, MaxRep, Oids, SendOpts,
From, State) ->
?vtrace("handle_sync_get_bulk -> entry with"
@@ -1190,17 +1032,6 @@ handle_sync_get_bulk(Pid, UserId, TargetName, NonRep, MaxRep, Oids, SendOpts,
end.
-handle_sync_set(Pid, UserId, TargetName, CtxName, VarsAndVals, Timeout,
- ExtraInfo, From, State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Timeout},
- {extra, ExtraInfo}
- ],
- handle_sync_set(Pid, UserId, TargetName, VarsAndVals, SendOpts,
- From, State).
-
handle_sync_set(Pid, UserId, TargetName, VarsAndVals, SendOpts, From, State) ->
?vtrace("handle_sync_set -> entry with"
"~n Pid: ~p"
@@ -1245,16 +1076,6 @@ handle_sync_set(Pid, UserId, TargetName, VarsAndVals, SendOpts, From, State) ->
end.
-handle_async_get(Pid, UserId, TargetName, CtxName, Oids, Expire, ExtraInfo,
- State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Expire},
- {extra, ExtraInfo}
- ],
- handle_async_get(Pid, UserId, TargetName, Oids, SendOpts, State).
-
handle_async_get(Pid, UserId, TargetName, Oids, SendOpts, State) ->
?vtrace("handle_async_get -> entry with"
"~n Pid: ~p"
@@ -1294,16 +1115,6 @@ handle_async_get(Pid, UserId, TargetName, Oids, SendOpts, State) ->
end.
-handle_async_get_next(Pid, UserId, TargetName, CtxName, Oids, Expire,
- ExtraInfo, State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Expire},
- {extra, ExtraInfo}
- ],
- handle_async_get_next(Pid, UserId, TargetName, Oids, SendOpts, State).
-
handle_async_get_next(Pid, UserId, TargetName, Oids, SendOpts, State) ->
?vtrace("handle_async_get_next -> entry with"
"~n Pid: ~p"
@@ -1343,19 +1154,6 @@ handle_async_get_next(Pid, UserId, TargetName, Oids, SendOpts, State) ->
end.
-handle_async_get_bulk(Pid, UserId, TargetName, CtxName,
- NonRep, MaxRep, Oids, Expire,
- ExtraInfo, State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Expire},
- {extra, ExtraInfo}
- ],
- handle_async_get_bulk(Pid,
- UserId, TargetName, NonRep, MaxRep, Oids, SendOpts,
- State).
-
handle_async_get_bulk(Pid,
UserId, TargetName, NonRep, MaxRep, Oids, SendOpts,
State) ->
@@ -1398,16 +1196,6 @@ handle_async_get_bulk(Pid,
end.
-handle_async_set(Pid, UserId, TargetName, CtxName, VarsAndVals, Expire,
- ExtraInfo, State) ->
- SendOpts =
- [
- {context, CtxName},
- {timeout, Expire},
- {extra, ExtraInfo}
- ],
- handle_async_set(Pid, UserId, TargetName, VarsAndVals, SendOpts, State).
-
handle_async_set(Pid, UserId, TargetName, VarsAndVals, SendOpts, State) ->
?vtrace("handle_async_set -> entry with"
"~n Pid: ~p"
diff --git a/lib/snmp/test/snmp_agent_mibs_SUITE.erl b/lib/snmp/test/snmp_agent_mibs_SUITE.erl
index ce6ec80322..d5ee395b89 100644
--- a/lib/snmp/test/snmp_agent_mibs_SUITE.erl
+++ b/lib/snmp/test/snmp_agent_mibs_SUITE.erl
@@ -989,13 +989,13 @@ mibs_info(Pid) ->
load_mibs(Pid, Dir, Mibs0) ->
Mibs = [join(Dir, Mib) || Mib <- Mibs0],
- Res = snmpa_mib:load_mibs(Pid, Mibs),
+ Res = snmpa_mib:load_mibs(Pid, Mibs, false),
%% ?DBG("load_mibs -> "
%% "~n Res: ~p", [Res]),
Res.
unload_mibs(Pid, Mibs) ->
- Res = snmpa_mib:unload_mibs(Pid, Mibs),
+ Res = snmpa_mib:unload_mibs(Pid, Mibs, false),
%% ?DBG("unload_mibs -> "
%% "~n Res: ~p", [Res]),
Res.
diff --git a/lib/snmp/test/snmp_manager_config_SUITE.erl b/lib/snmp/test/snmp_manager_config_SUITE.erl
index f7f7fd6928..3eaf2d1af1 100644
--- a/lib/snmp/test/snmp_manager_config_SUITE.erl
+++ b/lib/snmp/test/snmp_manager_config_SUITE.erl
@@ -2037,18 +2037,18 @@ do_register_agent_using_file(Conf) ->
%% --
?IPRINT("EngineID (~p) for agent <~w,~w>", [EngineID2, AgentAddr2, AgentPort2]),
- ?line {ok, EngineID2} =
+ ?line {ok, EngineID2} =
snmpm_config:agent_info(AgentAddr2, AgentPort2, engine_id),
%% --
- ?line {ok, MMS2} =
+ ?line {ok, MMS2} =
snmpm_config:agent_info(AgentAddr2, AgentPort2, max_message_size),
NewMMS21 = 2048,
?IPRINT("try update agent info max-message-size to ~w for agent <~w,~w>",
[NewMMS21, AgentAddr2, AgentPort2]),
- ?line ok = snmpm_config:update_agent_info(UserId2, AgentAddr2, AgentPort2,
- max_message_size, NewMMS21),
- ?line {ok, NewMMS21} =
+ ?line ok = update_agent_info(UserId2, AgentAddr2, AgentPort2,
+ max_message_size, NewMMS21),
+ ?line {ok, NewMMS21} =
snmpm_config:agent_info(AgentAddr2, AgentPort2, max_message_size),
%% --
@@ -2057,8 +2057,8 @@ do_register_agent_using_file(Conf) ->
"with user ~w (not owner)",
[NewMMS21, AgentAddr2, AgentPort2, UserId1]),
?line {error, Reason01} =
- snmpm_config:update_agent_info(UserId1, AgentAddr2, AgentPort2,
- max_message_size, NewMMS21),
+ update_agent_info(UserId1, AgentAddr2, AgentPort2,
+ max_message_size, NewMMS21),
?IPRINT("expected failure. Reason01: ~p", [Reason01]),
?line {ok, NewMMS21} =
snmpm_config:agent_info(AgentAddr2, AgentPort2, max_message_size),
@@ -2069,9 +2069,9 @@ do_register_agent_using_file(Conf) ->
"for agent <~w,~w>",
[NewMMS22, AgentAddr2, AgentPort2]),
?line {error, Reason02} =
- snmpm_config:update_agent_info(UserId1, AgentAddr2, AgentPort2,
- max_message_size, NewMMS22),
- ?IPRINT("expected failure. Reason02: ~p", [Reason02]),
+ update_agent_info(UserId1, AgentAddr2, AgentPort2,
+ max_message_size, NewMMS22),
+ ?IPRINT("expected failre. Reason02: ~p", [Reason02]),
%% --
?IPRINT("done"),
@@ -2744,6 +2744,14 @@ otp8395_incr_counter(Counter, Initial, Increment, Max) ->
%% Internal functions
%%======================================================================
+update_agent_info(UserId, Addr, Port, Item, Val) ->
+ case snmpm_config:agent_info(Addr, Port, target_name) of
+ {ok, TargetName} ->
+ snmpm_config:update_agent_info(UserId, TargetName, [{Item, Val}]);
+ Error ->
+ Error
+ end.
+
config_start(Opts) ->
(catch snmpm_config:start_link(Opts)).
diff --git a/lib/ssh/src/ssh.app.src b/lib/ssh/src/ssh.app.src
index c7ad417bef..2cb8d80488 100644
--- a/lib/ssh/src/ssh.app.src
+++ b/lib/ssh/src/ssh.app.src
@@ -59,8 +59,8 @@
{mod, {ssh_app, []}},
{runtime_dependencies, [
"crypto-5.0",
- "erts-9.0",
- "kernel-5.3",
+ "erts-11.0",
+ "kernel-6.0",
"public_key-1.6.1",
"stdlib-3.15",
"runtime_tools-1.15.1"
diff --git a/lib/ssl/src/inet_tls_dist.erl b/lib/ssl/src/inet_tls_dist.erl
index 5cfbeff387..d413d7738b 100644
--- a/lib/ssl/src/inet_tls_dist.erl
+++ b/lib/ssl/src/inet_tls_dist.erl
@@ -448,7 +448,7 @@ gen_accept_connection(
Driver, AcceptPid, DistCtrl,
MyNode, Allowed, SetupTime, Kernel)
end,
- [link, {priority, max}])).
+ net_ticker_spawn_options())).
do_accept(
_Driver, AcceptPid, DistCtrl, MyNode, Allowed, SetupTime, Kernel) ->
@@ -540,7 +540,7 @@ gen_setup(Driver, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
Kernel = self(),
monitor_pid(
spawn_opt(setup_fun(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime),
- [link, {priority, max}])).
+ net_ticker_spawn_options())).
-spec setup_fun(_,_,_,_,_,_,_) -> fun(() -> no_return()).
setup_fun(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
@@ -808,6 +808,13 @@ nodelay() ->
end.
+% we may want different spawn options for dist_util processes
+
+net_ticker_spawn_options() ->
+ Opts = application:get_env(kernel, net_ticker_spawn_options, []),
+ Opts1 = [{priority, max} | proplists:delete(priority, Opts)],
+ [link | proplists:delete(link, Opts1)].
+
get_ssl_options(Type) ->
try ets:lookup(ssl_dist_opts, Type) of
[{Type, Opts0}] ->
diff --git a/lib/ssl/test/ssl_dist_SUITE.erl b/lib/ssl/test/ssl_dist_SUITE.erl
index 67be91196f..24698b7f56 100644
--- a/lib/ssl/test/ssl_dist_SUITE.erl
+++ b/lib/ssl/test/ssl_dist_SUITE.erl
@@ -53,6 +53,8 @@
listen_options/1,
connect_options/0,
connect_options/1,
+ net_ticker_spawn_options/0,
+ net_ticker_spawn_options/1,
use_interface/0,
use_interface/1,
verify_fun_fail/0,
@@ -70,6 +72,7 @@
listen_options_test/3,
do_connect_options/2,
connect_options_test/3,
+ net_ticker_spawn_options_test/3,
verify_fun_fail_test/3,
verify_fun_pass_test/3,
verify_pass_always/3,
@@ -100,6 +103,7 @@ all() ->
listen_port_options,
listen_options,
connect_options,
+ net_ticker_spawn_options,
use_interface,
verify_fun_fail,
verify_fun_pass
@@ -322,6 +326,22 @@ connect_options() ->
connect_options(Config) when is_list(Config) ->
try_setting_priority(fun do_connect_options/2, Config).
+%%--------------------------------------------------------------------
+net_ticker_spawn_options() ->
+ [{doc, "Test net_ticker_spawn_options"}].
+net_ticker_spawn_options(Config) when is_list(Config) ->
+ FullsweepString0 = "[{fullsweep_after,0}]",
+ FullsweepString =
+ case os:cmd("echo [{a,1}]") of
+ "[{a,1}]"++_ ->
+ FullsweepString0;
+ _ ->
+ %% Some shells need quoting of [{}]
+ "'"++FullsweepString0++"'"
+ end,
+ Options = "-kernel net_ticker_spawn_options "++FullsweepString,
+ gen_dist_test(net_ticker_spawn_options_test, [{tls_only_basic_opts, Options} | Config]).
+
%%--------------------------------------------------------------------
use_interface() ->
@@ -594,6 +614,23 @@ connect_options_test(NH1, NH2, Config) ->
%% Node 2 will not, since it only applies to outbound connections.
[] = Elevated2.
+net_ticker_spawn_options_test(NH1, NH2, _Config) ->
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ FullsweepOptionNode1 =
+ apply_on_ssl_node(NH1, fun () -> get_dist_util_fullsweep_option(Node2) end),
+ FullsweepOptionNode2 =
+ apply_on_ssl_node(NH2, fun () -> get_dist_util_fullsweep_option(Node1) end),
+
+ ct:pal("FullsweepOptionNode1: ~p~n", [FullsweepOptionNode1]),
+ ct:pal("FullsweepOptionNode2: ~p~n", [FullsweepOptionNode2]),
+
+ 0 = FullsweepOptionNode1,
+ 0 = FullsweepOptionNode2.
+
verify_fun_fail_test(NH1, NH2, _) ->
Node2 = NH2#node_handle.nodename,
@@ -635,6 +672,14 @@ get_socket_priorities() ->
{ok,[{priority,Priority}]} <-
[inet:getopts(Port, [priority]) || Port <- inet_ports()]].
+get_dist_util_fullsweep_option(Node) ->
+ SenderPid = proplists:get_value(Node, erlang:system_info(dist_ctrl)),
+ {links, Links1} = erlang:process_info(SenderPid, links),
+ {links, Links2} = erlang:process_info(whereis(net_kernel), links),
+ [DistUtilPid] = [X || X <- Links1, Y <- Links2, X =:= Y],
+ {garbage_collection, GCOpts} = erlang:process_info(DistUtilPid, garbage_collection),
+ proplists:get_value(fullsweep_after, GCOpts).
+
inet_ports() ->
[Port || Port <- erlang:ports(),
element(2, erlang:port_info(Port, name)) =:= "tcp_inet"].
diff --git a/lib/stdlib/doc/src/array.xml b/lib/stdlib/doc/src/array.xml
index 77ce4ad101..c15ddd4126 100644
--- a/lib/stdlib/doc/src/array.xml
+++ b/lib/stdlib/doc/src/array.xml
@@ -300,7 +300,7 @@ A3 = array:fix(A2).</pre>
<fsummary>Create a new array according to the specified options.
</fsummary>
<desc>
- <p>Creates a new array according to the specified otions. By default,
+ <p>Creates a new array according to the specified options. By default,
the array is extendible and has initial size zero. Array indices
start at <c>0</c>.</p>
<p><c><anno>Options</anno></c> is a single term or a list of terms,
diff --git a/lib/stdlib/doc/src/calendar.xml b/lib/stdlib/doc/src/calendar.xml
index 213bca365d..feb0a5784e 100644
--- a/lib/stdlib/doc/src/calendar.xml
+++ b/lib/stdlib/doc/src/calendar.xml
@@ -124,6 +124,13 @@
<datatype>
<name name="weeknum"/>
</datatype>
+ <datatype>
+ <name name="rfc3339_time_unit"/>
+ <desc><note><p>
+ The <c>native</c> time unit was added to <c>rfc3339_time_unit()</c>
+ in OTP 25.0.</p></note>
+ </desc>
+ </datatype>
</datatypes>
<funcs>
@@ -321,7 +328,6 @@
<name name="rfc3339_to_system_time" arity="2" since="OTP 21.0"/>
<fsummary>Convert from RFC 3339 timestamp to system time.</fsummary>
<type name="rfc3339_string"/>
- <type name="rfc3339_time_unit"/>
<desc>
<p>Converts an RFC 3339 timestamp into system time. The data format
of RFC 3339 timestamps is described by
@@ -378,7 +384,6 @@
<fsummary>Convert from system to RFC 3339 timestamp.</fsummary>
<type name="offset"/>
<type name="rfc3339_string"/>
- <type name="rfc3339_time_unit"/>
<desc>
<p>Converts a system time into an RFC 3339 timestamp. The data format
of RFC 3339 timestamps is described by
@@ -401,12 +406,13 @@
<tag><c>{unit, Unit}</c></tag>
<item><p>The time unit of <c><anno>Time</anno></c>. The
default is <c>second</c>. If some other unit is given
- (<c>millisecond</c>, <c>microsecond</c>, or
- <c>nanosecond</c>), the formatted string includes a
+ (<c>millisecond</c>, <c>microsecond</c>, <c>nanosecond</c>, or
+ <c>native</c>), the formatted string includes a
fraction of a second. The number of fractional second
digits is three, six, or nine depending on what time unit
- is chosen. Notice that trailing zeros are not removed from
- the fraction.
+ is chosen. For <c>native</c> three fractional digits are
+ included. Notice that trailing zeros are not removed from the
+ fraction.
</p>
</item>
</taglist>
diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml
index c6790c1d48..2d64680412 100644
--- a/lib/stdlib/doc/src/gen_statem.xml
+++ b/lib/stdlib/doc/src/gen_statem.xml
@@ -1452,7 +1452,8 @@ handle_event(_, _, State, Data) ->
</desc>
</datatype>
<datatype>
- <name name="init_result"/>
+ <name name="init_result" n_vars="1"/>
+ <name name="init_result" n_vars="2"/>
<desc>
<p>
For a succesful initialization,
@@ -1479,7 +1480,8 @@ handle_event(_, _, State, Data) ->
</desc>
</datatype>
<datatype>
- <name name="state_enter_result"/>
+ <name name="state_enter_result" n_vars="1"/>
+ <name name="state_enter_result" n_vars="2"/>
<desc>
<p>
<c><anno>State</anno></c> is the current state
@@ -1502,7 +1504,8 @@ handle_event(_, _, State, Data) ->
</desc>
</datatype>
<datatype>
- <name name="event_handler_result"/>
+ <name name="event_handler_result" n_vars="1"/>
+ <name name="event_handler_result" n_vars="2"/>
<desc>
<p>
<c><anno>StateType</anno></c> is
@@ -1532,7 +1535,8 @@ handle_event(_, _, State, Data) ->
</desc>
</datatype>
<datatype>
- <name name="state_callback_result"/>
+ <name name="state_callback_result" n_vars="1"/>
+ <name name="state_callback_result" n_vars="2"/>
<desc>
<p>
<c><anno>ActionType</anno></c> is
diff --git a/lib/stdlib/doc/src/lists.xml b/lib/stdlib/doc/src/lists.xml
index 5477f13d1e..ad60829e72 100644
--- a/lib/stdlib/doc/src/lists.xml
+++ b/lib/stdlib/doc/src/lists.xml
@@ -175,6 +175,48 @@
</func>
<func>
+ <name name="enumerate" arity="1" since="OTP @OTP-17523@"/>
+ <fsummary>Annotates elements with their index.</fsummary>
+ <desc>
+ <p>Returns <c><anno>List1</anno></c> with each element
+ <c>H</c> replaced by a tuple of form <c>{I, H}</c> where
+ <c>I</c> is the position of <c>H</c> in
+ <c><anno>List1</anno></c>. The enumeration starts with 1 and
+ increases by 1 in each step.</p>
+ <p>That is, <c>enumerate/1</c> behaves as if it had been defined as follows:</p>
+ <code type="erl">
+enumerate(List) ->
+ {List1, _ } = lists:mapfoldl(fun(T, Acc) -> {{Acc, T}, Acc+1} end, 1, List),
+ List1.</code>
+ <p><em>Example:</em></p>
+ <pre>
+> <input>lists:enumerate([a,b,c]).</input>
+[{1,a},{2,b},{3,c}]</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name name="enumerate" arity="2" since="OTP @OTP-17523@"/>
+ <fsummary>Annotates elements with their index.</fsummary>
+ <desc>
+ <p>Returns <c><anno>List1</anno></c> with each element
+ <c>H</c> replaced by a tuple of form <c>{I, H}</c> where
+ <c>I</c> is the position of <c>H</c> in
+ <c><anno>List1</anno></c>. The enumeration starts with
+ <c><anno>Index</anno></c> and increases by 1 in each step.</p>
+ <p>That is, <c>enumerate/2</c> behaves as if it had been defined as follows:</p>
+ <code type="erl">
+enumerate(I, List) ->
+ {List1, _ } = lists:mapfoldl(fun(T, Acc) -> {{Acc, T}, Acc+1} end, I, List),
+ List1.</code>
+ <p><em>Example:</em></p>
+ <pre>
+> <input>lists:enumerate(10, [a,b,c]).</input>
+[{10,a},{11,b},{12,c}]</pre>
+ </desc>
+ </func>
+
+ <func>
<name name="filter" arity="2" since=""/>
<fsummary>Select elements that satisfy a predicate.</fsummary>
<desc>
diff --git a/lib/stdlib/doc/src/ms_transform.xml b/lib/stdlib/doc/src/ms_transform.xml
index bde9223eb0..0339af04c4 100644
--- a/lib/stdlib/doc/src/ms_transform.xml
+++ b/lib/stdlib/doc/src/ms_transform.xml
@@ -389,8 +389,8 @@ ets:select(emp_tab, ets:fun2ms(
<item>
<p>The guard BIFs: <c>abs</c>, <c>element</c>,
<c>hd</c>, <c>length</c>,
- <c>node</c>, <c>round</c>, <c>size</c>, <c>tl</c>, <c>trunc</c>,
- <c>self</c></p>
+ <c>node</c>, <c>round</c>, <c>size</c>, <c>byte_size</c>, <c>tl</c>,
+ <c>trunc</c>, <c>binary_part</c>, <c>self</c></p>
</item>
</list>
diff --git a/lib/stdlib/doc/src/timer.xml b/lib/stdlib/doc/src/timer.xml
index 56342b94be..8eb3079a63 100644
--- a/lib/stdlib/doc/src/timer.xml
+++ b/lib/stdlib/doc/src/timer.xml
@@ -50,7 +50,9 @@
<p>Creating timers using
<seemfa marker="erts:erlang#send_after/3">erlang:send_after/3</seemfa> and
<seemfa marker="erts:erlang#start_timer/3">erlang:start_timer/3</seemfa>
- is much more efficient than using the timers provided by this module. See
+ is more efficient than using the timers provided by this module. However,
+ the timer module has been improved in OTP 25, making it more efficient and
+ less susceptible to being overloaded. See
<seeguide marker="system/efficiency_guide:commoncaveats#timer-module">the
Timer Module section in the Efficiency Guide</seeguide>.</p>
</description>
@@ -116,8 +118,9 @@
<c>exit_after(<anno>Time</anno>, self(),
<anno>Reason1</anno>)</c>.</p>
<p><c>exit_after/3</c> sends an exit signal with reason
- <c><anno>Reason1</anno></c> to
- pid <c><anno>Pid</anno></c>. Returns <c>{ok, <anno>TRef</anno>}</c>
+ <c><anno>Reason1</anno></c> to <c><anno>Target</anno></c>,
+ which can be a local process identifier or an atom of a registered
+ name. Returns <c>{ok, <anno>TRef</anno>}</c>
or <c>{error, <anno>Reason2</anno>}</c>.</p>
</desc>
</func>
@@ -149,7 +152,7 @@
<p><c>kill_after/1</c> is the same as
<c>exit_after(<anno>Time</anno>, self(), kill)</c>.</p>
<p><c>kill_after/2</c> is the same as
- <c>exit_after(<anno>Time</anno>, <anno>Pid</anno>, kill)</c>.</p>
+ <c>exit_after(<anno>Time</anno>, <anno>Target</anno>, kill)</c>.</p>
</desc>
</func>
@@ -190,15 +193,16 @@
<func>
<name name="send_after" arity="2" since=""/>
<name name="send_after" arity="3" since=""/>
- <fsummary>Send <c>Message</c> to <c>Pid</c> after a specified
+ <fsummary>Send <c>Message</c> to <c>Destination</c> after a specified
<c>Time</c>.</fsummary>
<desc>
<taglist>
<tag><c>send_after/3</c></tag>
<item>
- <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c> after
- <c><anno>Time</anno></c> milliseconds. (<c><anno>Pid</anno></c>
- can also be an atom of a registered name.)</p>
+ <p>Evaluates <c><anno>Destination</anno> ! <anno>Message</anno></c> after
+ <c><anno>Time</anno></c> milliseconds. (<c><anno>Destination</anno></c> can
+ be a remote or local process identifier, an atom of a registered name or
+ a tuple <c>{RegName, Node}</c> for a registered name at another node.)</p>
<p>Returns <c>{ok, <anno>TRef</anno>}</c> or
<c>{error, <anno>Reason</anno>}</c>.</p>
<p>See also
@@ -223,10 +227,11 @@
<taglist>
<tag><c>send_interval/3</c></tag>
<item>
- <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c>
+ <p>Evaluates <c><anno>Destination</anno> ! <anno>Message</anno></c>
repeatedly after <c><anno>Time</anno></c> milliseconds.
- (<c><anno>Pid</anno></c> can also be
- an atom of a registered name.)</p>
+ (<c><anno>Destination</anno></c> can be a remote or local process
+ identifier, an atom of a registered name or a tuple <c>{RegName, Node}</c>
+ for a registered name at another node.)</p>
<p>Returns <c>{ok, <anno>TRef</anno>}</c> or
<c>{error, <anno>Reason</anno>}</c>.</p>
</item>
@@ -249,6 +254,11 @@
or suspends the process forever if <c><anno>Time</anno></c> is the
atom <c>infinity</c>. Naturally, this
function does <em>not</em> return immediately.</p>
+ <note>
+ <p>Before OTP 25, <c>timer:sleep/1</c> did not accept integer
+ timeout values greater than <c>16#ffffffff</c>, that is, <c>2^32-1</c>.
+ Since OTP 25, arbitrarily high integer values are accepted.</p>
+ </note>
</desc>
</func>
@@ -350,4 +360,3 @@ timer:cancel(R),
<seemfa marker="#cancel/1"><c>cancel/1</c></seemfa>.</p>
</section>
</erlref>
-
diff --git a/lib/stdlib/scripts/generate_ryu_table.escript b/lib/stdlib/scripts/generate_ryu_table.escript
deleted file mode 100755
index 7191b64cd3..0000000000
--- a/lib/stdlib/scripts/generate_ryu_table.escript
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-%%! +A0
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2017-2019. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--mode(compile).
-
--define(MOD, "io_lib_format_ryu_table").
-
--define(TABLE_SIZE, 326).
--define(INV_TABLE_SIZE, 342).
-
--define(POW5_BITCOUNT, 125).
--define(POW5_INV_BITCOUNT, 125).
-
-main(_) ->
- Values = [ values(X) || X <- lists:seq(0, ?TABLE_SIZE - 1)],
- InvValues = [ inv_values(X) || X <- lists:seq(0, ?INV_TABLE_SIZE - 1)],
-
- %% Make module
- {ok, Out} = file:open("../src/" ++ ?MOD ++ ".erl", [write]),
- gen_file(Out, Values, InvValues),
- ok = file:close(Out),
- ok.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-inv_values(X) ->
- Pow = pow5(X),
- Pow5len = log2floor(Pow),
- J = Pow5len + ?POW5_INV_BITCOUNT - 1,
- Inv = ((1 bsl J) div Pow) + 1,
- {X, Inv}.
-
-values(X) ->
- Pow = pow5(X),
- Pow5len = log2floor(Pow),
- Pow5 = Pow bsr (Pow5len - ?POW5_BITCOUNT),
- {X, Pow5}.
-
-pow5(0) ->
- 1;
-pow5(1) ->
- 5;
-pow5(X) ->
- 5 * pow5(X - 1).
-
-log2floor(Int) when is_integer(Int), Int > 0 ->
- log2floor(Int, 0).
-
-log2floor(0, N) ->
- N;
-log2floor(Int, N) ->
- log2floor(Int bsr 1, 1 + N).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-gen_file(Fd, Values, InvValues) ->
- gen_header(Fd),
- gen_pow5_static(Fd),
- gen_table(Fd, Values),
- gen_inv_table(Fd, InvValues),
- ok.
-
-gen_header(Fd) ->
- io:put_chars(Fd, "%%\n%% this file is generated do not modify\n"),
- io:put_chars(Fd, "%% see ../script/generate_ryu_table.escript\n\n"),
- io:put_chars(Fd, "-module(" ++ ?MOD ++").\n"),
- io:put_chars(Fd, "-export([pow5_bitcount/0, pow5_inv_bitcount/0, value/1, inv_value/1]).\n\n"),
- ok.
-
-gen_pow5_static(Fd) ->
- io:put_chars(Fd, "-spec pow5_bitcount() -> integer().\n"),
- io:format(Fd, "pow5_bitcount() -> ~p.~n~n", [?POW5_BITCOUNT]),
- io:put_chars(Fd, "-spec pow5_inv_bitcount() -> integer().\n"),
- io:format(Fd, "pow5_inv_bitcount() -> ~p.~n~n", [?POW5_INV_BITCOUNT]),
- ok.
-
-gen_table(Fd, Values) ->
- io:put_chars(Fd, "-spec value(integer()) -> integer().\n"),
- [io:format(Fd, "value(~p) -> ~p;~n", [Key, Val]) || {Key,Val} <- Values],
- io:put_chars(Fd, "value(_) -> error(function_clause).\n\n"),
- ok.
-
-gen_inv_table(Fd, Values) ->
- io:put_chars(Fd, "-spec inv_value(integer()) -> integer().\n"),
- [io:format(Fd, "inv_value(~p) -> ~p;~n", [Key, Val]) || {Key,Val} <- Values],
- io:put_chars(Fd, "inv_value(_) -> error(function_clause).\n"),
- ok.
-
diff --git a/lib/stdlib/src/Makefile b/lib/stdlib/src/Makefile
index 509648cb2b..8a45b8e249 100644
--- a/lib/stdlib/src/Makefile
+++ b/lib/stdlib/src/Makefile
@@ -91,7 +91,6 @@ MODULES= \
io \
io_lib \
io_lib_format \
- io_lib_format_ryu_table \
io_lib_fread \
io_lib_pretty \
lists \
diff --git a/lib/stdlib/src/calendar.erl b/lib/stdlib/src/calendar.erl
index 2f95f54312..3a0aba1a44 100644
--- a/lib/stdlib/src/calendar.erl
+++ b/lib/stdlib/src/calendar.erl
@@ -94,11 +94,11 @@
-type yearweeknum() :: {year(),weeknum()}.
-type rfc3339_string() :: [byte(), ...].
-%% By design 'native' is not supported:
-type rfc3339_time_unit() :: 'microsecond'
| 'millisecond'
| 'nanosecond'
- | 'second'.
+ | 'second'
+ | 'native'.
%%----------------------------------------------------------------------
@@ -326,7 +326,7 @@ local_time_to_universal_time_dst(DateTime) ->
-spec now_to_datetime(Now) -> datetime1970() when
Now :: erlang:timestamp().
now_to_datetime({MSec, Sec, _uSec}) ->
- system_time_to_datetime(MSec*1000000 + Sec).
+ system_time_to_datetime(MSec*1_000_000 + Sec).
-spec now_to_universal_time(Now) -> datetime1970() when
Now :: erlang:timestamp().
@@ -444,7 +444,23 @@ system_time_to_rfc3339(Time) ->
system_time_to_rfc3339(Time, Options) ->
Unit = proplists:get_value(unit, Options, second),
- OffsetOption = proplists:get_value(offset, Options, ""),
+ OffsetOpt0 = proplists:get_value(offset, Options, ""),
+ case Unit of
+ native ->
+ TimeMS = erlang:convert_time_unit(Time, native, millisecond),
+ OffsetOpt1 =
+ if is_integer(OffsetOpt0) ->
+ erlang:convert_time_unit(OffsetOpt0, native,
+ millisecond);
+ true ->
+ OffsetOpt0
+ end,
+ system_time_to_rfc3339_do(TimeMS, Options, millisecond, OffsetOpt1);
+ _ ->
+ system_time_to_rfc3339_do(Time, Options, Unit, OffsetOpt0)
+ end.
+
+system_time_to_rfc3339_do(Time, Options, Unit, OffsetOption) ->
T = proplists:get_value(time_designator, Options, $T),
AdjustmentSecs = offset_adjustment(Time, Unit, OffsetOption),
Offset = offset(OffsetOption, AdjustmentSecs),
@@ -738,12 +754,13 @@ copy_sign(N1, _N2) -> N1.
factor(second) -> 1;
factor(millisecond) -> 1000;
-factor(microsecond) -> 1000000;
-factor(nanosecond) -> 1000000000.
+factor(microsecond) -> 1_000_000;
+factor(nanosecond) -> 1_000_000_000;
+factor(native) -> erlang:convert_time_unit(1, second, native).
log10(1000) -> 3;
-log10(1000000) -> 6;
-log10(1000000000) -> 9.
+log10(1_000_000) -> 6;
+log10(1_000_000_000) -> 9.
pad(0, S) ->
S;
diff --git a/lib/stdlib/src/erl_error.erl b/lib/stdlib/src/erl_error.erl
index ccfa4fb9bf..461f0a1c70 100644
--- a/lib/stdlib/src/erl_error.erl
+++ b/lib/stdlib/src/erl_error.erl
@@ -269,6 +269,8 @@ explain_reason(restricted_shell_started, exit, [], _PF, _S, _Enc, _CL) ->
<<"restricted shell starts now">>;
explain_reason(restricted_shell_stopped, exit, [], _PF, _S, _Enc, _CL) ->
<<"restricted shell stopped">>;
+explain_reason(calling_self, exit, [], _PF, _S, _Enc, _CL) ->
+ <<"the current process attempted to call itself">>;
%% Other exit code:
explain_reason(Reason, Class, [], PF, S, _Enc, CL) ->
{L, _} = PF(Reason, (iolist_size(S)+1) + exited_size(Class), CL),
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 7cafc9ce73..bc61c7b48e 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -93,6 +93,16 @@ value_option(Flag, Default, On, OnVal, Off, OffVal, Opts) ->
-record(typeinfo, {attr, anno}).
+-type type_id() :: {'export', []}
+ | {'record', atom()}
+ | {'spec', mfa()}
+ | {'type', ta()}.
+
+-record(used_type, {anno :: erl_anno:anno(),
+ at = {export, []} :: type_id()}).
+
+-type used_type() :: #used_type{}.
+
%% Usage of records, functions, and imports. The variable table, which
%% is passed on as an argument, holds the usage of variables.
-record(usage, {
@@ -101,7 +111,7 @@ value_option(Flag, Default, On, OnVal, Off, OffVal, Opts) ->
used_records = gb_sets:new() %Used record definitions
:: gb_sets:set(atom()),
used_types = maps:new() %Used type definitions
- :: #{ta() := anno()}
+ :: #{ta() := [used_type()]}
}).
@@ -130,6 +140,7 @@ value_option(Flag, Default, On, OnVal, Off, OffVal, Opts) ->
not_removed=gb_sets:empty() %Not considered removed
:: gb_sets:set(module_or_mfa()),
func=[], %Current function
+ type_id=[], %Current type id
warn_format=0, %Warn format calls
enabled_warnings=[], %All enabled warnings (ordset).
nowarn_bif_clash=[], %All no warn bif clashes (ordset).
@@ -1288,8 +1299,10 @@ check_undefined_types(#lint{usage=Usage,types=Def}=St0) ->
TA <- UTAs,
not is_map_key(TA, Def),
not is_default_type(TA)],
- foldl(fun ({TA,Anno}, St) ->
- add_error(Anno, {undefined_type,TA}, St)
+ foldl(fun ({TA,UsedTypeList}, St) ->
+ foldl( fun(#used_type{anno = Anno}, St1) ->
+ add_error(Anno, {undefined_type,TA}, St1)
+ end, St, UsedTypeList)
end, St0, Undef).
%% check_bif_clashes(Forms, State0) -> State
@@ -1423,21 +1436,21 @@ export(Anno, Es, #lint{exports = Es0, called = Called} = St0) ->
-spec export_type(anno(), [ta()], lint_state()) -> lint_state().
%% Mark types as exported; also mark them as used from the export line.
-export_type(Anno, ETs, #lint{usage = Usage, exp_types = ETs0} = St0) ->
- UTs0 = Usage#usage.used_types,
- try foldl(fun ({T,A}=TA, {E,U,St2}) when is_atom(T), is_integer(A) ->
+export_type(Anno, ETs, #lint{exp_types = ETs0} = St0) ->
+ try foldl(fun ({T,A}=TA, {E,St2}) when is_atom(T), is_integer(A) ->
St = case gb_sets:is_element(TA, E) of
true ->
Warn = {duplicated_export_type,TA},
add_warning(Anno, Warn, St2);
false ->
- St2
+ St3 = St2#lint{type_id = {export, []}},
+ used_type(TA, Anno, St3)
end,
- {gb_sets:add_element(TA, E), maps:put(TA, Anno, U), St}
+ {gb_sets:add_element(TA, E), St}
end,
- {ETs0,UTs0,St0}, ETs) of
- {ETs1,UTs1,St1} ->
- St1#lint{usage = Usage#usage{used_types = UTs1}, exp_types = ETs1}
+ {ETs0,St0}, ETs) of
+ {ETs1,St1} ->
+ St1#lint{exp_types = ETs1}
catch
error:_ ->
add_error(Anno, {bad_export_type, ETs}, St0)
@@ -2673,7 +2686,8 @@ record_def(Anno, Name, Fs0, St0) ->
St2 = St1#lint{records=maps:put(Name, {Anno,Fs1},
St1#lint.records)},
Types = [T || {typed_record_field, _, T} <- Fs0],
- check_type({type, nowarn(), product, Types}, St2)
+ St3 = St2#lint{type_id = {record, Name}},
+ check_type({type, nowarn(), product, Types}, St3)
end.
%% def_fields([RecDef], RecordName, State) -> {[DefField],State}.
@@ -2893,7 +2907,8 @@ type_def(Attr, Anno, TypeName, ProtoType, Args, St0) ->
fun(St) ->
NewDefs = maps:put(TypePair, Info, TypeDefs),
CheckType = {type, nowarn(), product, [ProtoType|Args]},
- check_type(CheckType, St#lint{types=NewDefs})
+ St1 = St#lint{types=NewDefs, type_id={type, TypePair}},
+ check_type(CheckType, St1)
end,
case is_default_type(TypePair) of
true ->
@@ -3087,16 +3102,15 @@ check_record_types([], _Name, _DefFields, SeenVars, St, _SeenFields) ->
{SeenVars, St}.
used_type(TypePair, Anno, #lint{usage = Usage, file = File} = St) ->
- OldUsed = Usage#usage.used_types,
- UsedTypes = maps:put(TypePair, erl_anno:set_file(File, Anno), OldUsed),
- St#lint{usage=Usage#usage{used_types=UsedTypes}}.
+ Used = Usage#usage.used_types,
+ UsedType = #used_type{anno = erl_anno:set_file(File, Anno),
+ at = St#lint.type_id},
+ NewUsed = maps_prepend(TypePair, UsedType, Used),
+ St#lint{usage=Usage#usage{used_types=NewUsed}}.
is_default_type({Name, NumberOfTypeVariables}) ->
erl_internal:is_type(Name, NumberOfTypeVariables).
-%% OTP 24.0
-is_newly_introduced_builtin_type({nonempty_binary, 0}) -> true;
-is_newly_introduced_builtin_type({nonempty_bitstring, 0}) -> true;
is_newly_introduced_builtin_type({Name, _}) when is_atom(Name) -> false.
is_obsolete_builtin_type(TypePair) ->
@@ -3119,12 +3133,12 @@ spec_decl(Anno, MFA0, TypeSpecs, St00 = #lint{specs = Specs, module = Mod}) ->
case is_map_key(MFA, Specs) of
true -> add_error(Anno, {redefine_spec, MFA0}, St1);
false ->
- case MFA of
- {Mod, _, _} ->
- check_specs(TypeSpecs, spec_wrong_arity, Arity, St1);
- _ ->
- add_error(Anno, {bad_module, MFA}, St1)
- end
+ St2 = case MFA of
+ {Mod, _, _} -> St1;
+ _ -> add_error(Anno, {bad_module, MFA}, St1)
+ end,
+ St3 = St2#lint{type_id = {spec, MFA}},
+ check_specs(TypeSpecs, spec_wrong_arity, Arity, St3)
end.
%% callback_decl(Anno, Fun, Types, State) -> State.
@@ -3140,8 +3154,9 @@ callback_decl(Anno, MFA0, TypeSpecs,
St1 = St0#lint{callbacks = maps:put(MFA, Anno, Callbacks)},
case is_map_key(MFA, Callbacks) of
true -> add_error(Anno, {redefine_callback, MFA0}, St1);
- false -> check_specs(TypeSpecs, callback_wrong_arity,
- Arity, St1)
+ false ->
+ St2 = St1#lint{type_id = {spec, MFA}},
+ check_specs(TypeSpecs, callback_wrong_arity, Arity, St2)
end
end.
@@ -3262,11 +3277,10 @@ check_unused_types(Forms, St) ->
false -> St
end.
-check_unused_types_1(Forms, #lint{usage=Usage, types=Ts, exp_types=ExpTs}=St) ->
+check_unused_types_1(Forms, #lint{types=Ts}=St) ->
case [File || {attribute,_A,file,{File,_Anno}} <- Forms] of
[FirstFile|_] ->
- D = Usage#usage.used_types,
- L = gb_sets:to_list(ExpTs) ++ maps:keys(D),
+ L = reached_types(St),
UsedTypes = gb_sets:from_list(L),
FoldFun =
fun({{record, _}=_Type, 0}, _, AccSt) ->
@@ -3290,6 +3304,19 @@ check_unused_types_1(Forms, #lint{usage=Usage, types=Ts, exp_types=ExpTs}=St) ->
St
end.
+reached_types(#lint{usage = Usage}) ->
+ Es = [{From, {type, To}} ||
+ {To, UsedTs} <- maps:to_list(Usage#usage.used_types),
+ #used_type{at = From} <- UsedTs],
+ Initial = initially_reached_types(Es),
+ G = sofs:family_to_digraph(sofs:rel2fam(sofs:relation(Es))),
+ R = digraph_utils:reachable(Initial, G),
+ true = digraph:delete(G),
+ [T || {type, T} <- R].
+
+initially_reached_types(Es) ->
+ [FromTypeId || {{T, _}=FromTypeId, _} <- Es, T =/= type].
+
check_local_opaque_types(St) ->
#lint{types=Ts, exp_types=ExpTs} = St,
FoldFun =
diff --git a/lib/stdlib/src/erl_posix_msg.erl b/lib/stdlib/src/erl_posix_msg.erl
index b9ed4a3a9d..931e502489 100644
--- a/lib/stdlib/src/erl_posix_msg.erl
+++ b/lib/stdlib/src/erl_posix_msg.erl
@@ -139,7 +139,7 @@ message_1(eprocunavail) -> <<"bad procedure for program">>;
message_1(eprogmismatch) -> <<"program version wrong">>;
message_1(eprogunavail) -> <<"RPC program not available">>;
message_1(eproto) -> <<"protocol error">>;
-message_1(eprotonosupport) -> <<"protocol not suppored">>;
+message_1(eprotonosupport) -> <<"protocol not supported">>;
message_1(eprototype) -> <<"protocol wrong type for socket">>;
message_1(erange) -> <<"math result unrepresentable">>;
message_1(erefused) -> <<"EREFUSED">>;
diff --git a/lib/stdlib/src/erl_pp.erl b/lib/stdlib/src/erl_pp.erl
index 9a0884fdba..d704d097c8 100644
--- a/lib/stdlib/src/erl_pp.erl
+++ b/lib/stdlib/src/erl_pp.erl
@@ -681,6 +681,12 @@ lexpr({match,_,Lhs,Rhs}, Prec, Opts) ->
Rl = lexpr(Rhs, R, Opts),
El = {list,[{cstep,[Pl,' ='],Rl}]},
maybe_paren(P, Prec, El);
+lexpr({op,_,Op,Arg}, Prec, Opts) when Op =:= '+';
+ Op =:= '-' ->
+ {P,R} = preop_prec(Op),
+ Ol = {reserved, leaf(atom_to_list(Op))},
+ El = [Ol,lexpr(Arg, R, Opts)],
+ maybe_paren(P, Prec, El);
lexpr({op,_,Op,Arg}, Prec, Opts) ->
{P,R} = preop_prec(Op),
Ol = {reserved, leaf(format("~s ", [Op]))},
diff --git a/lib/stdlib/src/erl_stdlib_errors.erl b/lib/stdlib/src/erl_stdlib_errors.erl
index 92518d058f..43ac352359 100644
--- a/lib/stdlib/src/erl_stdlib_errors.erl
+++ b/lib/stdlib/src/erl_stdlib_errors.erl
@@ -424,6 +424,11 @@ format_io_error(_, _, {io, arguments}, true) ->
[device_arguments];
format_io_error(_, _, {io, arguments}, false) ->
[{general,device_arguments}];
+%% calling_self, Io =:= self()
+format_io_error(_, _, {io, calling_self}, true) ->
+ [calling_self];
+format_io_error(_, _, {io, calling_self}, false) ->
+ [{general,calling_self}];
%% terminated, monitor(Io) failed
format_io_error(_, _, {io, terminated}, true) ->
[device_terminated];
@@ -995,6 +1000,8 @@ expand_error(bad_update_op) ->
<<"not a valid update operation">>;
expand_error(bitstring) ->
<<"is a bitstring (expected a binary)">>;
+expand_error(calling_self) ->
+ <<"the device is not allowed to be the current process">>;
expand_error(counter_not_integer) ->
<<"the value in the given position, in the object, is not an integer">>;
expand_error(dead_process) ->
diff --git a/lib/stdlib/src/gen.erl b/lib/stdlib/src/gen.erl
index 6a07eb34d8..604815d15a 100644
--- a/lib/stdlib/src/gen.erl
+++ b/lib/stdlib/src/gen.erl
@@ -201,6 +201,8 @@ call(Process, Label, Request, Timeout)
-dialyzer({no_improper_lists, do_call/4}).
+do_call(Process, _Label, _Request, _Timeout) when Process =:= self() ->
+ exit(calling_self);
do_call(Process, Label, Request, infinity)
when (is_pid(Process)
andalso (node(Process) == node()))
diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl
index e91a24fd53..e206a826ea 100644
--- a/lib/stdlib/src/gen_statem.erl
+++ b/lib/stdlib/src/gen_statem.erl
@@ -63,8 +63,11 @@
from/0,
callback_mode_result/0,
init_result/1,
+ init_result/2,
state_enter_result/1,
+ state_enter_result/2,
event_handler_result/1,
+ event_handler_result/2,
reply_action/0,
enter_action/0,
action/0
@@ -204,9 +207,10 @@
{'reply', % Reply to a caller
From :: from(), Reply :: term()}.
--type init_result(StateType) ::
- {ok, State :: StateType, Data :: data()} |
- {ok, State :: StateType, Data :: data(),
+-type init_result(StateType) :: init_result(StateType, term()).
+-type init_result(StateType, DataType) ::
+ {ok, State :: StateType, Data :: DataType} |
+ {ok, State :: StateType, Data :: DataType,
Actions :: [action()] | action()} |
'ignore' |
{'stop', Reason :: term()}.
@@ -217,38 +221,43 @@
-type handle_event_result() ::
event_handler_result(state()).
%%
--type state_enter_result(State) ::
- {'next_state', % {next_state,NextState,NewData,[]}
+-type state_enter_result(State) :: state_enter_result(State, term()).
+-type state_enter_result(State, DataType) ::
+ {'next_state', % {next_state,State,NewData,[]}
State,
- NewData :: data()} |
- {'next_state', % State transition, maybe to the same state
+ NewData :: DataType} |
+ {'next_state', % State entry for state State
State,
- NewData :: data(),
+ NewData :: DataType,
Actions :: [enter_action()] | enter_action()} |
state_callback_result(enter_action()).
-type event_handler_result(StateType) ::
+ event_handler_result(StateType, term()).
+-type event_handler_result(StateType, DataType) ::
{'next_state', % {next_state,NextState,NewData,[]}
NextState :: StateType,
- NewData :: data()} |
+ NewData :: DataType} |
{'next_state', % State transition, maybe to the same state
NextState :: StateType,
- NewData :: data(),
+ NewData :: DataType,
Actions :: [action()] | action()} |
state_callback_result(action()).
-type state_callback_result(ActionType) ::
+ state_callback_result(ActionType, term()).
+-type state_callback_result(ActionType, DataType) ::
{'keep_state', % {keep_state,NewData,[]}
- NewData :: data()} |
+ NewData :: DataType} |
{'keep_state', % Keep state, change data
- NewData :: data(),
+ NewData :: DataType,
Actions :: [ActionType] | ActionType} |
'keep_state_and_data' | % {keep_state_and_data,[]}
{'keep_state_and_data', % Keep state and data -> only actions
Actions :: [ActionType] | ActionType} |
%%
{'repeat_state', % {repeat_state,NewData,[]}
- NewData :: data()} |
+ NewData :: DataType} |
{'repeat_state', % Repeat state, change data
- NewData :: data(),
+ NewData :: DataType,
Actions :: [ActionType] | ActionType} |
'repeat_state_and_data' | % {repeat_state_and_data,[]}
{'repeat_state_and_data', % Repeat state and data -> only actions
@@ -259,7 +268,7 @@
Reason :: term()} |
{'stop', % Stop the server
Reason :: term(),
- NewData :: data()} |
+ NewData :: DataType} |
%%
{'stop_and_reply', % Reply then stop the server
Reason :: term(),
@@ -267,7 +276,7 @@
{'stop_and_reply', % Reply then stop the server
Reason :: term(),
Replies :: [reply_action()] | reply_action(),
- NewData :: data()}.
+ NewData :: DataType}.
-type request_id() :: term().
diff --git a/lib/stdlib/src/io.erl b/lib/stdlib/src/io.erl
index d93be2d997..956f1ad013 100644
--- a/lib/stdlib/src/io.erl
+++ b/lib/stdlib/src/io.erl
@@ -335,6 +335,7 @@ read(Io, Prompt, Pos0, Options) ->
conv_reason(arguments) -> badarg;
conv_reason(terminated) -> terminated;
+conv_reason(calling_self) -> calling_self;
conv_reason({no_translation,_,_}) -> no_translation;
conv_reason(_Reason) -> badarg.
@@ -596,6 +597,8 @@ request(Name, Request, ErrorTag) when is_atom(Name) ->
request(Pid, Request, ErrorTag)
end.
+execute_request(Pid, _Tuple, ErrorTag) when Pid =:= self() ->
+ {ErrorTag, calling_self};
execute_request(Pid, {Convert,Converted}, ErrorTag) ->
Mref = erlang:monitor(process, Pid),
Pid ! {io_request,self(),Mref,Converted},
diff --git a/lib/stdlib/src/io_lib_format.erl b/lib/stdlib/src/io_lib_format.erl
index 597ff4c2c5..58ed3b31f7 100644
--- a/lib/stdlib/src/io_lib_format.erl
+++ b/lib/stdlib/src/io_lib_format.erl
@@ -539,268 +539,10 @@ float_data([_|Cs], Ds) ->
%% Returns a correctly rounded string that converts to Float when
%% read back with list_to_float/1.
-%%
-%% When abs(Float) < float(1 bsl 53) the shortest such string is
-%% returned, and otherwise the shortest such string using scientific
-%% notation is returned. That is, scientific notation is used if and
-%% only if scientific notation results in a shorter string than
-%% normal notation when abs(Float) < float(1 bsl 53), and scientific
-%% notation is used unconditionally if abs(Float) >= float(1 bsl
-%% 53). See comment in insert_decimal/2 for an explanation for why
-%% float(1 bsl 53) is chosen as cutoff point.
-%%
-%% The algorithm that is used to find the decimal number that is
-%% represented by the returned String is described in "Ryu: Fast
-%% Float-to-String Conversion" in Proceedings of 39th ACM SIGPLAN
-%% Conference on Programming Language Design and Implementation.
-%% https://dl.acm.org/doi/pdf/10.1145/3192366.3192369
-spec fwrite_g(float()) -> string().
fwrite_g(Float) ->
- case sign_mantissa_exponent(Float) of
- {0, 0, 0} -> "0.0";
- {1, 0, 0} -> "-0.0";
- {S, M, E} when E < 2047 ->
- {Place, Digits} =
- case is_small_int(M, E) of
- {int, M1, E1} ->
- compute_shortest_int(M1, E1);
- not_int ->
- fwrite_g_1(M, E)
- end,
- DigitList = insert_decimal(Place, Digits, Float),
- insert_minus(S, DigitList)
- end.
-
--define(BIG_POW, (1 bsl 52)).
--define(DECODE_CORRECTION, 1075).
-
-sign_mantissa_exponent(F) ->
- <<S:1, BE:11, M:52>> = <<F:64/float>>,
- {S, M , BE}.
-
-is_small_int(M, E) ->
- M2 = ?BIG_POW bor M,
- E2 = E - ?DECODE_CORRECTION,
- case E2 > 0 orelse E2 < -52 of
- true ->
- %% f = m2 * 2^e2 >= 2^53 is an integer.
- %% Ignore this case for now.
- %% or f < 1
- not_int;
- _ ->
- %% Since 2^52 <= m2 < 2^53 and 0 <= -e2 <= 52: 1 <= f = m2 / 2^-e2 < 2^53.
- %% Test if the lower -e2 bits of the significand are 0, i.e. whether the fraction is 0.
- Mask = (1 bsl -E2) - 1,
- Fraction = M2 band Mask,
- case Fraction of
- 0 ->
- %% f is an integer in the range [1, 2^53).
- %% Note: mantissa might contain trailing (decimal) 0's.
- {int, M2 bsr -E2, 0};
- _ ->
- not_int
- end
- end.
-
-%% For small integers in the range [1, 2^53), v.mantissa might contain trailing (decimal) zeros.
-compute_shortest_int(M, E) when M rem 10 =:= 0 ->
- Q = M div 10,
- compute_shortest_int(Q, E + 1);
-compute_shortest_int(M, E) ->
- {E, integer_to_list(M)}.
-
-fwrite_g_1(M, E) ->
- {Mf, Ef} = decode(M, E),
- Shift = mmshift(M, E),
- Mv = 4 * Mf,
- {Q, Vm, Vr, Vp, E10} = convert_to_decimal(Ef, Mv, Shift),
- Accept = M rem 2 == 0,
- {VmIsTrailingZero, VrIsTrailingZero, Vp1} = bounds(Mv, Q, Vp, Accept, Ef, Shift),
- {D1, E1} = compute_shortest(Vm, Vr, Vp1, VmIsTrailingZero, VrIsTrailingZero, Accept),
- {E1 + E10, integer_to_list(D1)}.
-
-decode(Mantissa, 0) ->
- {Mantissa, 1 - ?DECODE_CORRECTION - 2};
-decode(Mantissa, Exponent) ->
- {Mantissa + ?BIG_POW, Exponent - ?DECODE_CORRECTION - 2}.
-
-mmshift(0, E) when E > 1 ->
- 0;
-mmshift(_M, _E) ->
- 1.
-
-convert_to_decimal(E2, Mv, Shift) when E2 >= 0 ->
- Q = max(0, ((E2 * 78913) bsr 18) - 1),
- Mul = io_lib_format_ryu_table:inv_value(Q),
- K = io_lib_format_ryu_table:pow5_inv_bitcount() + pow5bits(Q) - 1,
- I = -E2 + Q + K,
- {Vm, Vr, Vp} = mulShiftAll(Mv, Shift, I, Mul),
- {Q, Vm, Vr, Vp, Q};
-
-convert_to_decimal(E2, Mv, Shift) when E2 < 0 ->
- Q = max(0, ((-E2 * 732923) bsr 20) - 1),
- I = -E2 - Q,
- K = pow5bits(I) - io_lib_format_ryu_table:pow5_bitcount(),
- From_file = io_lib_format_ryu_table:value(I),
- J = Q - K,
- {Vm, Vr, Vp} = mulShiftAll(Mv, Shift, J, From_file),
- E10 = E2 + Q,
- {Q, Vm, Vr, Vp, E10}.
-
-pow5bits(E) ->
- ((E * 1217359) bsr 19) + 1.
-
-mulShiftAll(Mv, Shift, J, Mul) ->
- A = mulShift64(Mv - 1 - Shift, Mul, J),
- B = mulShift64(Mv, Mul, J),
- C = mulShift64(Mv + 2,Mul, J),
- {A, B, C}.
-
-mulShift64(M, Mul, J) ->
- (M * Mul) bsr J.
-
-bounds(Mv, Q, Vp, _Accept, E2, _Shift) when E2 >= 0, Q =< 21, Mv rem 5 =:= 0 ->
- {false, multipleOfPowerOf5(Mv, Q) , Vp};
-bounds(Mv, Q, Vp, true, E2, Shift) when E2 >= 0, Q =< 21 ->
- {multipleOfPowerOf5(Mv - 1 - Shift, Q), false , Vp};
-bounds(Mv, Q, Vp, _Accept, E2, _Shift) when E2 >= 0, Q =< 21 ->
- {false, false , Vp - vpmodifier(multipleOfPowerOf5(Mv + 2, Q))};
-bounds(_Mv, Q, Vp, true, E2, Shift) when E2 < 0, Q =< 1 ->
- {Shift =:= 1, true, Vp};
-bounds(_Mv, Q, Vp, false, E2, _Shift) when E2 < 0, Q =< 1 ->
- {false, true, Vp - 1};
-bounds(Mv, Q, Vp, _Accept, E2, _Shift) when E2 < 0, Q < 63 ->
- {false, (Mv band ((1 bsl Q) -1 )) =:= 0, Vp};
-bounds(_Mv, _Q, Vp, _Accept, _E2, _Shift) ->
- {false, false, Vp}.
-
-multipleOfPowerOf5(Value, Q) ->
- pow5factor(Value) >= Q.
-
-pow5factor(Val) ->
- pow5factor(Val div 5, 0).
-
-pow5factor(Val, Count) when (Val rem 5) /= 0->
- Count;
-pow5factor(Val, Count) ->
- pow5factor(Val div 5, Count + 1).
-
-vpmodifier(true) ->
- 1;
-vpmodifier(false) ->
- 0.
-
-compute_shortest(Vm, Vr, Vp, false, false, _Accept) ->
- {Vm1, Vr1, Removed, RoundUp} =
- general_case(Vm, Vr, Vp, 0, false),
- Output = Vr1 + handle_normal_output_mod(Vr1, Vm1, RoundUp),
- {Output, Removed};
-compute_shortest(Vm, Vr, Vp, VmIsTrailingZero, VrIsTrailingZero, Accept) ->
- {Vm1, Vr1, Removed, LastRemovedDigit} =
- handle_trailing_zeros(Vm, Vr, Vp, VmIsTrailingZero, VrIsTrailingZero, 0, 0),
- Output = Vr1 + handle_zero_output_mod(Vr1, Vm1, Accept, VmIsTrailingZero, LastRemovedDigit),
- {Output, Removed}.
-
-general_case(Vm, Vr, Vp, Removed, RoundUp) when (Vp div 100) =< (Vm div 100)->
- general_case_10(Vm, Vr, Vp, Removed, RoundUp);
-general_case(Vm, Vr, Vp, Removed, _RU) ->
- VmD100 = Vm div 100,
- VrD100 = Vr div 100,
- VpD100 = Vp div 100,
- RoundUp = ((Vr rem 100) >= 50),
- general_case_10(VmD100, VrD100, VpD100, 2 + Removed, RoundUp).
-
-general_case_10(Vm, Vr, Vp, Removed, RoundUp)
- when (Vp div 10) =< (Vm div 10)->
- {Vm, Vr, Removed, RoundUp};
-general_case_10(Vm, Vr, Vp, Removed, _RU) ->
- VmD10 = Vm div 10,
- VrD10 = Vr div 10,
- VpD10 = Vp div 10,
- RoundUp = ((Vr rem 10) >= 5),
- general_case_10(VmD10, VrD10, VpD10, 1 + Removed, RoundUp).
-
-handle_normal_output_mod(Vr, Vm, RoundUp) when (Vm =:= Vr) or RoundUp ->
- 1;
-handle_normal_output_mod(_Vr, _Vm, _RoundUp) ->
- 0.
-
-handle_trailing_zeros(Vm, Vr, Vp, VmTZ, VrTZ, Removed, LastRemovedDigit)
- when (Vp div 10) =< (Vm div 10)->
- vmIsTrailingZero(Vm, Vr, Vp, VmTZ, VrTZ, Removed, LastRemovedDigit);
-handle_trailing_zeros(Vm, Vr, Vp, VmIsTrailingZero, VrIsTrailingZero, Removed, LastRemovedDigit) ->
- VmTZ = VmIsTrailingZero and ((Vm rem 10) =:= 0),
- VrTZ = VrIsTrailingZero and (LastRemovedDigit =:= 0),
- handle_trailing_zeros(Vm div 10, Vr div 10, Vp div 10, VmTZ, VrTZ, 1 + Removed, Vr rem 10).
-
-vmIsTrailingZero(Vm, Vr, _Vp, false = _VmTZ, VrTZ, Removed, LastRemovedDigit) ->
- handle_50_dotdot_0(Vm, Vr, VrTZ, Removed, LastRemovedDigit);
-vmIsTrailingZero(Vm, Vr, _Vp, _VmTZ, VrTZ, Removed, LastRemovedDigit) when (Vm rem 10) /= 0 ->
- handle_50_dotdot_0(Vm, Vr, VrTZ, Removed, LastRemovedDigit);
-vmIsTrailingZero(Vm, Vr, Vp, VmTZ, VrTZ, Removed, LastRemovedDigit) ->
- vmIsTrailingZero(Vm div 10, Vr div 10, Vp div 10, VmTZ, LastRemovedDigit == 0 andalso VrTZ, 1 + Removed, Vr rem 10).
-
-handle_50_dotdot_0(Vm, Vr, true, Removed, 5) when (Vr rem 2) =:= 0 ->
- {Vm, Vr, Removed, 4};
-handle_50_dotdot_0(Vm, Vr, _VrTZ, Removed, LastRemovedDigit) ->
- {Vm, Vr, Removed, LastRemovedDigit}.
-
-handle_zero_output_mod(_Vr, _Vm, _Accept, _VmTZ, LastRemovedDigit) when LastRemovedDigit >= 5 ->
- 1;
-handle_zero_output_mod(Vr, Vm, Accept, VmTZ, _LastRemovedDigit) when Vr =:= Vm, ((not Accept) or (not VmTZ)) ->
- 1;
-handle_zero_output_mod(_Vr, _Vm, _Accept, _VmTZ, _LastRemovedDigit) ->
- 0.
-
-insert_decimal(Place, S, Float) ->
- L = length(S),
- Exp = Place + L - 1,
- ExpL = integer_to_list(Exp),
- ExpCost = length(ExpL) + 2,
- if
- Place < 0 ->
- if
- Exp >= 0 ->
- {S0, S1} = lists:split(L + Place, S),
- S0 ++ "." ++ S1;
- 2 - Place - L =< ExpCost ->
- "0." ++ lists:duplicate(-Place - L, $0) ++ S;
- true ->
- insert_exp(ExpL, S)
- end;
- true ->
- Dot = if L =:= 1 -> 1; true -> 0 end,
- if
- %% All integers in the range [-2^53, 2^53] can
- %% be stored without loss of precision in an
- %% IEEE 754 64-bit double but 2^53+1 cannot be
- %% stored in an IEEE 754 64-bit double without
- %% loss of precision (float((1 bsl 53)+1) =:=
- %% float(1 bsl 53)). It thus makes sense to
- %% show floats that are >= 2^53 or <= -2^53 in
- %% scientific notation to indicate that the
- %% number is so large that there could be loss
- %% in precion when adding or subtracting 1.
- %%
- %% https://stackoverflow.com/questions/1848700/biggest-integer-that-can-be-stored-in-a-double?answertab=votes#tab-top
- ExpCost + Dot >= Place + 2 andalso abs(Float) < float(1 bsl 53) ->
- S ++ lists:duplicate(Place, $0) ++ ".0";
- true ->
- insert_exp(ExpL, S)
- end
- end.
-
-
-insert_exp(ExpL, [C]) ->
- [C] ++ ".0e" ++ ExpL;
-insert_exp(ExpL, [C | S]) ->
- [C] ++ "." ++ S ++ "e" ++ ExpL.
-
-insert_minus(0, Digits) ->
- Digits;
-insert_minus(1, Digits) ->
- [$-] ++ Digits.
+ float_to_list(Float, [short]).
%% fwrite_g(Float, Field, Adjust, Precision, PadChar)
%% Use the f form if Float is >= 0.1 and < 1.0e4,
diff --git a/lib/stdlib/src/io_lib_format_ryu_table.erl b/lib/stdlib/src/io_lib_format_ryu_table.erl
deleted file mode 100644
index b20268a939..0000000000
--- a/lib/stdlib/src/io_lib_format_ryu_table.erl
+++ /dev/null
@@ -1,686 +0,0 @@
-%%
-%% this file is generated do not modify
-%% see ../script/generate_ryu_table.escript
-
--module(io_lib_format_ryu_table).
--export([pow5_bitcount/0, pow5_inv_bitcount/0, value/1, inv_value/1]).
-
--spec pow5_bitcount() -> integer().
-pow5_bitcount() -> 125.
-
--spec pow5_inv_bitcount() -> integer().
-pow5_inv_bitcount() -> 125.
-
--spec value(integer()) -> integer().
-value(0) -> 21267647932558653966460912964485513216;
-value(1) -> 26584559915698317458076141205606891520;
-value(2) -> 33230699894622896822595176507008614400;
-value(3) -> 41538374868278621028243970633760768000;
-value(4) -> 25961484292674138142652481646100480000;
-value(5) -> 32451855365842672678315602057625600000;
-value(6) -> 40564819207303340847894502572032000000;
-value(7) -> 25353012004564588029934064107520000000;
-value(8) -> 31691265005705735037417580134400000000;
-value(9) -> 39614081257132168796771975168000000000;
-value(10) -> 24758800785707605497982484480000000000;
-value(11) -> 30948500982134506872478105600000000000;
-value(12) -> 38685626227668133590597632000000000000;
-value(13) -> 24178516392292583494123520000000000000;
-value(14) -> 30223145490365729367654400000000000000;
-value(15) -> 37778931862957161709568000000000000000;
-value(16) -> 23611832414348226068480000000000000000;
-value(17) -> 29514790517935282585600000000000000000;
-value(18) -> 36893488147419103232000000000000000000;
-value(19) -> 23058430092136939520000000000000000000;
-value(20) -> 28823037615171174400000000000000000000;
-value(21) -> 36028797018963968000000000000000000000;
-value(22) -> 22517998136852480000000000000000000000;
-value(23) -> 28147497671065600000000000000000000000;
-value(24) -> 35184372088832000000000000000000000000;
-value(25) -> 21990232555520000000000000000000000000;
-value(26) -> 27487790694400000000000000000000000000;
-value(27) -> 34359738368000000000000000000000000000;
-value(28) -> 21474836480000000000000000000000000000;
-value(29) -> 26843545600000000000000000000000000000;
-value(30) -> 33554432000000000000000000000000000000;
-value(31) -> 41943040000000000000000000000000000000;
-value(32) -> 26214400000000000000000000000000000000;
-value(33) -> 32768000000000000000000000000000000000;
-value(34) -> 40960000000000000000000000000000000000;
-value(35) -> 25600000000000000000000000000000000000;
-value(36) -> 32000000000000000000000000000000000000;
-value(37) -> 40000000000000000000000000000000000000;
-value(38) -> 25000000000000000000000000000000000000;
-value(39) -> 31250000000000000000000000000000000000;
-value(40) -> 39062500000000000000000000000000000000;
-value(41) -> 24414062500000000000000000000000000000;
-value(42) -> 30517578125000000000000000000000000000;
-value(43) -> 38146972656250000000000000000000000000;
-value(44) -> 23841857910156250000000000000000000000;
-value(45) -> 29802322387695312500000000000000000000;
-value(46) -> 37252902984619140625000000000000000000;
-value(47) -> 23283064365386962890625000000000000000;
-value(48) -> 29103830456733703613281250000000000000;
-value(49) -> 36379788070917129516601562500000000000;
-value(50) -> 22737367544323205947875976562500000000;
-value(51) -> 28421709430404007434844970703125000000;
-value(52) -> 35527136788005009293556213378906250000;
-value(53) -> 22204460492503130808472633361816406250;
-value(54) -> 27755575615628913510590791702270507812;
-value(55) -> 34694469519536141888238489627838134765;
-value(56) -> 21684043449710088680149056017398834228;
-value(57) -> 27105054312137610850186320021748542785;
-value(58) -> 33881317890172013562732900027185678482;
-value(59) -> 42351647362715016953416125033982098102;
-value(60) -> 26469779601696885595885078146238811314;
-value(61) -> 33087224502121106994856347682798514142;
-value(62) -> 41359030627651383743570434603498142678;
-value(63) -> 25849394142282114839731521627186339173;
-value(64) -> 32311742677852643549664402033982923967;
-value(65) -> 40389678347315804437080502542478654959;
-value(66) -> 25243548967072377773175314089049159349;
-value(67) -> 31554436208840472216469142611311449186;
-value(68) -> 39443045261050590270586428264139311483;
-value(69) -> 24651903288156618919116517665087069677;
-value(70) -> 30814879110195773648895647081358837096;
-value(71) -> 38518598887744717061119558851698546370;
-value(72) -> 24074124304840448163199724282311591481;
-value(73) -> 30092655381050560203999655352889489352;
-value(74) -> 37615819226313200254999569191111861690;
-value(75) -> 23509887016445750159374730744444913556;
-value(76) -> 29387358770557187699218413430556141945;
-value(77) -> 36734198463196484624023016788195177431;
-value(78) -> 22958874039497802890014385492621985894;
-value(79) -> 28698592549372253612517981865777482368;
-value(80) -> 35873240686715317015647477332221852960;
-value(81) -> 22420775429197073134779673332638658100;
-value(82) -> 28025969286496341418474591665798322625;
-value(83) -> 35032461608120426773093239582247903282;
-value(84) -> 21895288505075266733183274738904939551;
-value(85) -> 27369110631344083416479093423631174439;
-value(86) -> 34211388289180104270598866779538968048;
-value(87) -> 21382117680737565169124291737211855030;
-value(88) -> 26727647100921956461405364671514818788;
-value(89) -> 33409558876152445576756705839393523485;
-value(90) -> 41761948595190556970945882299241904356;
-value(91) -> 26101217871994098106841176437026190222;
-value(92) -> 32626522339992622633551470546282737778;
-value(93) -> 40783152924990778291939338182853422223;
-value(94) -> 25489470578119236432462086364283388889;
-value(95) -> 31861838222649045540577607955354236111;
-value(96) -> 39827297778311306925722009944192795139;
-value(97) -> 24892061111444566828576256215120496962;
-value(98) -> 31115076389305708535720320268900621202;
-value(99) -> 38893845486632135669650400336125776503;
-value(100) -> 24308653429145084793531500210078610314;
-value(101) -> 30385816786431355991914375262598262893;
-value(102) -> 37982270983039194989892969078247828616;
-value(103) -> 23738919364399496868683105673904892885;
-value(104) -> 29673649205499371085853882092381116106;
-value(105) -> 37092061506874213857317352615476395133;
-value(106) -> 23182538441796383660823345384672746958;
-value(107) -> 28978173052245479576029181730840933698;
-value(108) -> 36222716315306849470036477163551167122;
-value(109) -> 22639197697066780918772798227219479451;
-value(110) -> 28298997121333476148465997784024349314;
-value(111) -> 35373746401666845185582497230030436643;
-value(112) -> 22108591501041778240989060768769022902;
-value(113) -> 27635739376302222801236325960961278627;
-value(114) -> 34544674220377778501545407451201598284;
-value(115) -> 21590421387736111563465879657000998927;
-value(116) -> 26988026734670139454332349571251248659;
-value(117) -> 33735033418337674317915436964064060824;
-value(118) -> 42168791772922092897394296205080076030;
-value(119) -> 26355494858076308060871435128175047519;
-value(120) -> 32944368572595385076089293910218809399;
-value(121) -> 41180460715744231345111617387773511748;
-value(122) -> 25737787947340144590694760867358444843;
-value(123) -> 32172234934175180738368451084198056053;
-value(124) -> 40215293667718975922960563855247570067;
-value(125) -> 25134558542324359951850352409529731292;
-value(126) -> 31418198177905449939812940511912164115;
-value(127) -> 39272747722381812424766175639890205143;
-value(128) -> 24545467326488632765478859774931378214;
-value(129) -> 30681834158110790956848574718664222768;
-value(130) -> 38352292697638488696060718398330278460;
-value(131) -> 23970182936024055435037948998956424037;
-value(132) -> 29962728670030069293797436248695530047;
-value(133) -> 37453410837537586617246795310869412559;
-value(134) -> 23408381773460991635779247069293382849;
-value(135) -> 29260477216826239544724058836616728561;
-value(136) -> 36575596521032799430905073545770910702;
-value(137) -> 22859747825645499644315670966106819189;
-value(138) -> 28574684782056874555394588707633523986;
-value(139) -> 35718355977571093194243235884541904982;
-value(140) -> 22323972485981933246402022427838690614;
-value(141) -> 27904965607477416558002528034798363267;
-value(142) -> 34881207009346770697503160043497954084;
-value(143) -> 21800754380841731685939475027186221303;
-value(144) -> 27250942976052164607424343783982776628;
-value(145) -> 34063678720065205759280429729978470785;
-value(146) -> 21289799200040753599550268581236544241;
-value(147) -> 26612249000050941999437835726545680301;
-value(148) -> 33265311250063677499297294658182100376;
-value(149) -> 41581639062579596874121618322727625471;
-value(150) -> 25988524414112248046326011451704765919;
-value(151) -> 32485655517640310057907514314630957399;
-value(152) -> 40607069397050387572384392893288696749;
-value(153) -> 25379418373156492232740245558305435468;
-value(154) -> 31724272966445615290925306947881794335;
-value(155) -> 39655341208057019113656633684852242919;
-value(156) -> 24784588255035636946035396053032651824;
-value(157) -> 30980735318794546182544245066290814780;
-value(158) -> 38725919148493182728180306332863518475;
-value(159) -> 24203699467808239205112691458039699047;
-value(160) -> 30254624334760299006390864322549623809;
-value(161) -> 37818280418450373757988580403187029761;
-value(162) -> 23636425261531483598742862751991893600;
-value(163) -> 29545531576914354498428578439989867001;
-value(164) -> 36931914471142943123035723049987333751;
-value(165) -> 23082446544464339451897326906242083594;
-value(166) -> 28853058180580424314871658632802604493;
-value(167) -> 36066322725725530393589573291003255616;
-value(168) -> 22541451703578456495993483306877034760;
-value(169) -> 28176814629473070619991854133596293450;
-value(170) -> 35221018286841338274989817666995366813;
-value(171) -> 22013136429275836421868636041872104258;
-value(172) -> 27516420536594795527335795052340130322;
-value(173) -> 34395525670743494409169743815425162903;
-value(174) -> 21497203544214684005731089884640726814;
-value(175) -> 26871504430268355007163862355800908518;
-value(176) -> 33589380537835443758954827944751135647;
-value(177) -> 41986725672294304698693534930938919559;
-value(178) -> 26241703545183940436683459331836824724;
-value(179) -> 32802129431479925545854324164796030906;
-value(180) -> 41002661789349906932317905205995038632;
-value(181) -> 25626663618343691832698690753746899145;
-value(182) -> 32033329522929614790873363442183623931;
-value(183) -> 40041661903662018488591704302729529914;
-value(184) -> 25026038689788761555369815189205956196;
-value(185) -> 31282548362235951944212268986507445245;
-value(186) -> 39103185452794939930265336233134306557;
-value(187) -> 24439490907996837456415835145708941598;
-value(188) -> 30549363634996046820519793932136176997;
-value(189) -> 38186704543745058525649742415170221247;
-value(190) -> 23866690339840661578531089009481388279;
-value(191) -> 29833362924800826973163861261851735349;
-value(192) -> 37291703656001033716454826577314669186;
-value(193) -> 23307314785000646072784266610821668241;
-value(194) -> 29134143481250807590980333263527085302;
-value(195) -> 36417679351563509488725416579408856627;
-value(196) -> 22761049594727193430453385362130535392;
-value(197) -> 28451311993408991788066731702663169240;
-value(198) -> 35564139991761239735083414628328961550;
-value(199) -> 22227587494850774834427134142705600969;
-value(200) -> 27784484368563468543033917678382001211;
-value(201) -> 34730605460704335678792397097977501514;
-value(202) -> 21706628412940209799245248186235938446;
-value(203) -> 27133285516175262249056560232794923058;
-value(204) -> 33916606895219077811320700290993653822;
-value(205) -> 42395758619023847264150875363742067278;
-value(206) -> 26497349136889904540094297102338792048;
-value(207) -> 33121686421112380675117871377923490061;
-value(208) -> 41402108026390475843897339222404362576;
-value(209) -> 25876317516494047402435837014002726610;
-value(210) -> 32345396895617559253044796267503408262;
-value(211) -> 40431746119521949066305995334379260328;
-value(212) -> 25269841324701218166441247083987037705;
-value(213) -> 31587301655876522708051558854983797131;
-value(214) -> 39484127069845653385064448568729746414;
-value(215) -> 24677579418653533365665280355456091509;
-value(216) -> 30846974273316916707081600444320114386;
-value(217) -> 38558717841646145883852000555400142982;
-value(218) -> 24099198651028841177407500347125089364;
-value(219) -> 30123998313786051471759375433906361705;
-value(220) -> 37654997892232564339699219292382952131;
-value(221) -> 23534373682645352712312012057739345082;
-value(222) -> 29417967103306690890390015072174181352;
-value(223) -> 36772458879133363612987518840217726691;
-value(224) -> 22982786799458352258117199275136079181;
-value(225) -> 28728483499322940322646499093920098977;
-value(226) -> 35910604374153675403308123867400123721;
-value(227) -> 22444127733846047127067577417125077326;
-value(228) -> 28055159667307558908834471771406346657;
-value(229) -> 35068949584134448636043089714257933322;
-value(230) -> 21918093490084030397526931071411208326;
-value(231) -> 27397616862605037996908663839264010407;
-value(232) -> 34247021078256297496135829799080013009;
-value(233) -> 21404388173910185935084893624425008131;
-value(234) -> 26755485217387732418856117030531260163;
-value(235) -> 33444356521734665523570146288164075204;
-value(236) -> 41805445652168331904462682860205094006;
-value(237) -> 26128403532605207440289176787628183753;
-value(238) -> 32660504415756509300361470984535229692;
-value(239) -> 40825630519695636625451838730669037115;
-value(240) -> 25516019074809772890907399206668148197;
-value(241) -> 31895023843512216113634249008335185246;
-value(242) -> 39868779804390270142042811260418981558;
-value(243) -> 24917987377743918838776757037761863473;
-value(244) -> 31147484222179898548470946297202329342;
-value(245) -> 38934355277724873185588682871502911677;
-value(246) -> 24333972048578045740992926794689319798;
-value(247) -> 30417465060722557176241158493361649748;
-value(248) -> 38021831325903196470301448116702062185;
-value(249) -> 23763644578689497793938405072938788865;
-value(250) -> 29704555723361872242423006341173486082;
-value(251) -> 37130694654202340303028757926466857602;
-value(252) -> 23206684158876462689392973704041786001;
-value(253) -> 29008355198595578361741217130052232502;
-value(254) -> 36260443998244472952176521412565290627;
-value(255) -> 22662777498902795595110325882853306642;
-value(256) -> 28328471873628494493887907353566633302;
-value(257) -> 35410589842035618117359884191958291628;
-value(258) -> 22131618651272261323349927619973932267;
-value(259) -> 27664523314090326654187409524967415334;
-value(260) -> 34580654142612908317734261906209269168;
-value(261) -> 21612908839133067698583913691380793230;
-value(262) -> 27016136048916334623229892114225991537;
-value(263) -> 33770170061145418279037365142782489422;
-value(264) -> 42212712576431772848796706428478111778;
-value(265) -> 26382945360269858030497941517798819861;
-value(266) -> 32978681700337322538122426897248524826;
-value(267) -> 41223352125421653172653033621560656033;
-value(268) -> 25764595078388533232908146013475410020;
-value(269) -> 32205743847985666541135182516844262526;
-value(270) -> 40257179809982083176418978146055328157;
-value(271) -> 25160737381238801985261861341284580098;
-value(272) -> 31450921726548502481577326676605725123;
-value(273) -> 39313652158185628101971658345757156403;
-value(274) -> 24571032598866017563732286466098222752;
-value(275) -> 30713790748582521954665358082622778440;
-value(276) -> 38392238435728152443331697603278473050;
-value(277) -> 23995149022330095277082311002049045656;
-value(278) -> 29993936277912619096352888752561307070;
-value(279) -> 37492420347390773870441110940701633838;
-value(280) -> 23432762717119233669025694337938521149;
-value(281) -> 29290953396399042086282117922423151436;
-value(282) -> 36613691745498802607852647403028939295;
-value(283) -> 22883557340936751629907904626893087059;
-value(284) -> 28604446676170939537384880783616358824;
-value(285) -> 35755558345213674421731100979520448530;
-value(286) -> 22347223965758546513581938112200280331;
-value(287) -> 27934029957198183141977422640250350414;
-value(288) -> 34917537446497728927471778300312938018;
-value(289) -> 21823460904061080579669861437695586261;
-value(290) -> 27279326130076350724587326797119482826;
-value(291) -> 34099157662595438405734158496399353533;
-value(292) -> 21311973539122149003583849060249595958;
-value(293) -> 26639966923902686254479811325311994947;
-value(294) -> 33299958654878357818099764156639993684;
-value(295) -> 41624948318597947272624705195799992106;
-value(296) -> 26015592699123717045390440747374995066;
-value(297) -> 32519490873904646306738050934218743833;
-value(298) -> 40649363592380807883422563667773429791;
-value(299) -> 25405852245238004927139102292358393619;
-value(300) -> 31757315306547506158923877865447992024;
-value(301) -> 39696644133184382698654847331809990030;
-value(302) -> 24810402583240239186659279582381243769;
-value(303) -> 31013003229050298983324099477976554711;
-value(304) -> 38766254036312873729155124347470693389;
-value(305) -> 24228908772695546080721952717169183368;
-value(306) -> 30286135965869432600902440896461479210;
-value(307) -> 37857669957336790751128051120576849012;
-value(308) -> 23661043723335494219455031950360530633;
-value(309) -> 29576304654169367774318789937950663291;
-value(310) -> 36970380817711709717898487422438329114;
-value(311) -> 23106488011069818573686554639023955696;
-value(312) -> 28883110013837273217108193298779944620;
-value(313) -> 36103887517296591521385241623474930775;
-value(314) -> 22564929698310369700865776014671831734;
-value(315) -> 28206162122887962126082220018339789668;
-value(316) -> 35257702653609952657602775022924737085;
-value(317) -> 22036064158506220411001734389327960678;
-value(318) -> 27545080198132775513752167986659950848;
-value(319) -> 34431350247665969392190209983324938560;
-value(320) -> 21519593904791230870118881239578086600;
-value(321) -> 26899492380989038587648601549472608250;
-value(322) -> 33624365476236298234560751936840760312;
-value(323) -> 42030456845295372793200939921050950390;
-value(324) -> 26269035528309607995750587450656843994;
-value(325) -> 32836294410387009994688234313321054992;
-value(_) -> error(function_clause).
-
--spec inv_value(integer()) -> integer().
-inv_value(0) -> 42535295865117307932921825928971026433;
-inv_value(1) -> 34028236692093846346337460743176821146;
-inv_value(2) -> 27222589353675077077069968594541456917;
-inv_value(3) -> 21778071482940061661655974875633165534;
-inv_value(4) -> 34844914372704098658649559801013064854;
-inv_value(5) -> 27875931498163278926919647840810451883;
-inv_value(6) -> 22300745198530623141535718272648361506;
-inv_value(7) -> 35681192317648997026457149236237378410;
-inv_value(8) -> 28544953854119197621165719388989902728;
-inv_value(9) -> 22835963083295358096932575511191922183;
-inv_value(10) -> 36537540933272572955092120817907075492;
-inv_value(11) -> 29230032746618058364073696654325660394;
-inv_value(12) -> 23384026197294446691258957323460528315;
-inv_value(13) -> 37414441915671114706014331717536845304;
-inv_value(14) -> 29931553532536891764811465374029476243;
-inv_value(15) -> 23945242826029513411849172299223580995;
-inv_value(16) -> 38312388521647221458958675678757729591;
-inv_value(17) -> 30649910817317777167166940543006183673;
-inv_value(18) -> 24519928653854221733733552434404946938;
-inv_value(19) -> 39231885846166754773973683895047915101;
-inv_value(20) -> 31385508676933403819178947116038332081;
-inv_value(21) -> 25108406941546723055343157692830665665;
-inv_value(22) -> 40173451106474756888549052308529065064;
-inv_value(23) -> 32138760885179805510839241846823252051;
-inv_value(24) -> 25711008708143844408671393477458601641;
-inv_value(25) -> 41137613933030151053874229563933762625;
-inv_value(26) -> 32910091146424120843099383651147010100;
-inv_value(27) -> 26328072917139296674479506920917608080;
-inv_value(28) -> 42124916667422874679167211073468172928;
-inv_value(29) -> 33699933333938299743333768858774538343;
-inv_value(30) -> 26959946667150639794667015087019630674;
-inv_value(31) -> 21567957333720511835733612069615704539;
-inv_value(32) -> 34508731733952818937173779311385127263;
-inv_value(33) -> 27606985387162255149739023449108101810;
-inv_value(34) -> 22085588309729804119791218759286481448;
-inv_value(35) -> 35336941295567686591665950014858370317;
-inv_value(36) -> 28269553036454149273332760011886696254;
-inv_value(37) -> 22615642429163319418666208009509357003;
-inv_value(38) -> 36185027886661311069865932815214971205;
-inv_value(39) -> 28948022309329048855892746252171976964;
-inv_value(40) -> 23158417847463239084714197001737581571;
-inv_value(41) -> 37053468555941182535542715202780130514;
-inv_value(42) -> 29642774844752946028434172162224104411;
-inv_value(43) -> 23714219875802356822747337729779283529;
-inv_value(44) -> 37942751801283770916395740367646853646;
-inv_value(45) -> 30354201441027016733116592294117482917;
-inv_value(46) -> 24283361152821613386493273835293986334;
-inv_value(47) -> 38853377844514581418389238136470378133;
-inv_value(48) -> 31082702275611665134711390509176302507;
-inv_value(49) -> 24866161820489332107769112407341042006;
-inv_value(50) -> 39785858912782931372430579851745667209;
-inv_value(51) -> 31828687130226345097944463881396533767;
-inv_value(52) -> 25462949704181076078355571105117227014;
-inv_value(53) -> 40740719526689721725368913768187563222;
-inv_value(54) -> 32592575621351777380295131014550050577;
-inv_value(55) -> 26074060497081421904236104811640040462;
-inv_value(56) -> 41718496795330275046777767698624064739;
-inv_value(57) -> 33374797436264220037422214158899251791;
-inv_value(58) -> 26699837949011376029937771327119401433;
-inv_value(59) -> 21359870359209100823950217061695521147;
-inv_value(60) -> 34175792574734561318320347298712833834;
-inv_value(61) -> 27340634059787649054656277838970267067;
-inv_value(62) -> 21872507247830119243725022271176213654;
-inv_value(63) -> 34996011596528190789960035633881941846;
-inv_value(64) -> 27996809277222552631968028507105553477;
-inv_value(65) -> 22397447421778042105574422805684442782;
-inv_value(66) -> 35835915874844867368919076489095108450;
-inv_value(67) -> 28668732699875893895135261191276086760;
-inv_value(68) -> 22934986159900715116108208953020869408;
-inv_value(69) -> 36695977855841144185773134324833391053;
-inv_value(70) -> 29356782284672915348618507459866712843;
-inv_value(71) -> 23485425827738332278894805967893370274;
-inv_value(72) -> 37576681324381331646231689548629392439;
-inv_value(73) -> 30061345059505065316985351638903513951;
-inv_value(74) -> 24049076047604052253588281311122811161;
-inv_value(75) -> 38478521676166483605741250097796497857;
-inv_value(76) -> 30782817340933186884593000078237198286;
-inv_value(77) -> 24626253872746549507674400062589758629;
-inv_value(78) -> 39402006196394479212279040100143613806;
-inv_value(79) -> 31521604957115583369823232080114891045;
-inv_value(80) -> 25217283965692466695858585664091912836;
-inv_value(81) -> 40347654345107946713373737062547060537;
-inv_value(82) -> 32278123476086357370698989650037648430;
-inv_value(83) -> 25822498780869085896559191720030118744;
-inv_value(84) -> 41315998049390537434494706752048189990;
-inv_value(85) -> 33052798439512429947595765401638551992;
-inv_value(86) -> 26442238751609943958076612321310841594;
-inv_value(87) -> 42307582002575910332922579714097346550;
-inv_value(88) -> 33846065602060728266338063771277877240;
-inv_value(89) -> 27076852481648582613070451017022301792;
-inv_value(90) -> 21661481985318866090456360813617841434;
-inv_value(91) -> 34658371176510185744730177301788546293;
-inv_value(92) -> 27726696941208148595784141841430837035;
-inv_value(93) -> 22181357552966518876627313473144669628;
-inv_value(94) -> 35490172084746430202603701557031471404;
-inv_value(95) -> 28392137667797144162082961245625177124;
-inv_value(96) -> 22713710134237715329666368996500141699;
-inv_value(97) -> 36341936214780344527466190394400226718;
-inv_value(98) -> 29073548971824275621972952315520181375;
-inv_value(99) -> 23258839177459420497578361852416145100;
-inv_value(100) -> 37214142683935072796125378963865832159;
-inv_value(101) -> 29771314147148058236900303171092665728;
-inv_value(102) -> 23817051317718446589520242536874132582;
-inv_value(103) -> 38107282108349514543232388058998612131;
-inv_value(104) -> 30485825686679611634585910447198889705;
-inv_value(105) -> 24388660549343689307668728357759111764;
-inv_value(106) -> 39021856878949902892269965372414578822;
-inv_value(107) -> 31217485503159922313815972297931663058;
-inv_value(108) -> 24973988402527937851052777838345330446;
-inv_value(109) -> 39958381444044700561684444541352528714;
-inv_value(110) -> 31966705155235760449347555633082022971;
-inv_value(111) -> 25573364124188608359478044506465618377;
-inv_value(112) -> 40917382598701773375164871210344989403;
-inv_value(113) -> 32733906078961418700131896968275991523;
-inv_value(114) -> 26187124863169134960105517574620793218;
-inv_value(115) -> 41899399781070615936168828119393269149;
-inv_value(116) -> 33519519824856492748935062495514615319;
-inv_value(117) -> 26815615859885194199148049996411692255;
-inv_value(118) -> 21452492687908155359318439997129353804;
-inv_value(119) -> 34323988300653048574909503995406966087;
-inv_value(120) -> 27459190640522438859927603196325572870;
-inv_value(121) -> 21967352512417951087942082557060458296;
-inv_value(122) -> 35147764019868721740707332091296733273;
-inv_value(123) -> 28118211215894977392565865673037386618;
-inv_value(124) -> 22494568972715981914052692538429909295;
-inv_value(125) -> 35991310356345571062484308061487854871;
-inv_value(126) -> 28793048285076456849987446449190283897;
-inv_value(127) -> 23034438628061165479989957159352227118;
-inv_value(128) -> 36855101804897864767983931454963563388;
-inv_value(129) -> 29484081443918291814387145163970850711;
-inv_value(130) -> 23587265155134633451509716131176680569;
-inv_value(131) -> 37739624248215413522415545809882688910;
-inv_value(132) -> 30191699398572330817932436647906151128;
-inv_value(133) -> 24153359518857864654345949318324920902;
-inv_value(134) -> 38645375230172583446953518909319873443;
-inv_value(135) -> 30916300184138066757562815127455898755;
-inv_value(136) -> 24733040147310453406050252101964719004;
-inv_value(137) -> 39572864235696725449680403363143550406;
-inv_value(138) -> 31658291388557380359744322690514840325;
-inv_value(139) -> 25326633110845904287795458152411872260;
-inv_value(140) -> 40522612977353446860472733043858995616;
-inv_value(141) -> 32418090381882757488378186435087196493;
-inv_value(142) -> 25934472305506205990702549148069757194;
-inv_value(143) -> 41495155688809929585124078636911611511;
-inv_value(144) -> 33196124551047943668099262909529289209;
-inv_value(145) -> 26556899640838354934479410327623431367;
-inv_value(146) -> 42491039425341367895167056524197490187;
-inv_value(147) -> 33992831540273094316133645219357992150;
-inv_value(148) -> 27194265232218475452906916175486393720;
-inv_value(149) -> 21755412185774780362325532940389114976;
-inv_value(150) -> 34808659497239648579720852704622583961;
-inv_value(151) -> 27846927597791718863776682163698067169;
-inv_value(152) -> 22277542078233375091021345730958453735;
-inv_value(153) -> 35644067325173400145634153169533525976;
-inv_value(154) -> 28515253860138720116507322535626820781;
-inv_value(155) -> 22812203088110976093205858028501456625;
-inv_value(156) -> 36499524940977561749129372845602330600;
-inv_value(157) -> 29199619952782049399303498276481864480;
-inv_value(158) -> 23359695962225639519442798621185491584;
-inv_value(159) -> 37375513539561023231108477793896786534;
-inv_value(160) -> 29900410831648818584886782235117429227;
-inv_value(161) -> 23920328665319054867909425788093943382;
-inv_value(162) -> 38272525864510487788655081260950309411;
-inv_value(163) -> 30618020691608390230924065008760247529;
-inv_value(164) -> 24494416553286712184739252007008198023;
-inv_value(165) -> 39191066485258739495582803211213116837;
-inv_value(166) -> 31352853188206991596466242568970493469;
-inv_value(167) -> 25082282550565593277172994055176394776;
-inv_value(168) -> 40131652080904949243476790488282231641;
-inv_value(169) -> 32105321664723959394781432390625785313;
-inv_value(170) -> 25684257331779167515825145912500628250;
-inv_value(171) -> 41094811730846668025320233460001005200;
-inv_value(172) -> 32875849384677334420256186768000804160;
-inv_value(173) -> 26300679507741867536204949414400643328;
-inv_value(174) -> 42081087212386988057927919063041029325;
-inv_value(175) -> 33664869769909590446342335250432823460;
-inv_value(176) -> 26931895815927672357073868200346258768;
-inv_value(177) -> 21545516652742137885659094560277007015;
-inv_value(178) -> 34472826644387420617054551296443211223;
-inv_value(179) -> 27578261315509936493643641037154568979;
-inv_value(180) -> 22062609052407949194914912829723655183;
-inv_value(181) -> 35300174483852718711863860527557848292;
-inv_value(182) -> 28240139587082174969491088422046278634;
-inv_value(183) -> 22592111669665739975592870737637022907;
-inv_value(184) -> 36147378671465183960948593180219236651;
-inv_value(185) -> 28917902937172147168758874544175389321;
-inv_value(186) -> 23134322349737717735007099635340311457;
-inv_value(187) -> 37014915759580348376011359416544498331;
-inv_value(188) -> 29611932607664278700809087533235598665;
-inv_value(189) -> 23689546086131422960647270026588478932;
-inv_value(190) -> 37903273737810276737035632042541566291;
-inv_value(191) -> 30322618990248221389628505634033253033;
-inv_value(192) -> 24258095192198577111702804507226602426;
-inv_value(193) -> 38812952307517723378724487211562563882;
-inv_value(194) -> 31050361846014178702979589769250051106;
-inv_value(195) -> 24840289476811342962383671815400040885;
-inv_value(196) -> 39744463162898148739813874904640065415;
-inv_value(197) -> 31795570530318518991851099923712052332;
-inv_value(198) -> 25436456424254815193480879938969641866;
-inv_value(199) -> 40698330278807704309569407902351426985;
-inv_value(200) -> 32558664223046163447655526321881141588;
-inv_value(201) -> 26046931378436930758124421057504913271;
-inv_value(202) -> 41675090205499089212999073692007861233;
-inv_value(203) -> 33340072164399271370399258953606288986;
-inv_value(204) -> 26672057731519417096319407162885031189;
-inv_value(205) -> 21337646185215533677055525730308024951;
-inv_value(206) -> 34140233896344853883288841168492839922;
-inv_value(207) -> 27312187117075883106631072934794271938;
-inv_value(208) -> 21849749693660706485304858347835417550;
-inv_value(209) -> 34959599509857130376487773356536668080;
-inv_value(210) -> 27967679607885704301190218685229334464;
-inv_value(211) -> 22374143686308563440952174948183467571;
-inv_value(212) -> 35798629898093701505523479917093548114;
-inv_value(213) -> 28638903918474961204418783933674838491;
-inv_value(214) -> 22911123134779968963535027146939870793;
-inv_value(215) -> 36657797015647950341656043435103793269;
-inv_value(216) -> 29326237612518360273324834748083034615;
-inv_value(217) -> 23460990090014688218659867798466427692;
-inv_value(218) -> 37537584144023501149855788477546284307;
-inv_value(219) -> 30030067315218800919884630782037027446;
-inv_value(220) -> 24024053852175040735907704625629621957;
-inv_value(221) -> 38438486163480065177452327401007395130;
-inv_value(222) -> 30750788930784052141961861920805916104;
-inv_value(223) -> 24600631144627241713569489536644732884;
-inv_value(224) -> 39361009831403586741711183258631572614;
-inv_value(225) -> 31488807865122869393368946606905258091;
-inv_value(226) -> 25191046292098295514695157285524206473;
-inv_value(227) -> 40305674067357272823512251656838730356;
-inv_value(228) -> 32244539253885818258809801325470984285;
-inv_value(229) -> 25795631403108654607047841060376787428;
-inv_value(230) -> 41273010244973847371276545696602859885;
-inv_value(231) -> 33018408195979077897021236557282287908;
-inv_value(232) -> 26414726556783262317616989245825830326;
-inv_value(233) -> 42263562490853219708187182793321328522;
-inv_value(234) -> 33810849992682575766549746234657062818;
-inv_value(235) -> 27048679994146060613239796987725650254;
-inv_value(236) -> 21638943995316848490591837590180520204;
-inv_value(237) -> 34622310392506957584946940144288832325;
-inv_value(238) -> 27697848314005566067957552115431065860;
-inv_value(239) -> 22158278651204452854366041692344852688;
-inv_value(240) -> 35453245841927124566985666707751764301;
-inv_value(241) -> 28362596673541699653588533366201411441;
-inv_value(242) -> 22690077338833359722870826692961129153;
-inv_value(243) -> 36304123742133375556593322708737806644;
-inv_value(244) -> 29043298993706700445274658166990245316;
-inv_value(245) -> 23234639194965360356219726533592196253;
-inv_value(246) -> 37175422711944576569951562453747514004;
-inv_value(247) -> 29740338169555661255961249962998011203;
-inv_value(248) -> 23792270535644529004768999970398408963;
-inv_value(249) -> 38067632857031246407630399952637454340;
-inv_value(250) -> 30454106285624997126104319962109963472;
-inv_value(251) -> 24363285028499997700883455969687970778;
-inv_value(252) -> 38981256045599996321413529551500753244;
-inv_value(253) -> 31185004836479997057130823641200602595;
-inv_value(254) -> 24948003869183997645704658912960482076;
-inv_value(255) -> 39916806190694396233127454260736771322;
-inv_value(256) -> 31933444952555516986501963408589417058;
-inv_value(257) -> 25546755962044413589201570726871533646;
-inv_value(258) -> 40874809539271061742722513162994453834;
-inv_value(259) -> 32699847631416849394178010530395563067;
-inv_value(260) -> 26159878105133479515342408424316450454;
-inv_value(261) -> 41855804968213567224547853478906320726;
-inv_value(262) -> 33484643974570853779638282783125056581;
-inv_value(263) -> 26787715179656683023710626226500045265;
-inv_value(264) -> 21430172143725346418968500981200036212;
-inv_value(265) -> 34288275429960554270349601569920057938;
-inv_value(266) -> 27430620343968443416279681255936046351;
-inv_value(267) -> 21944496275174754733023745004748837081;
-inv_value(268) -> 35111194040279607572837992007598139329;
-inv_value(269) -> 28088955232223686058270393606078511463;
-inv_value(270) -> 22471164185778948846616314884862809171;
-inv_value(271) -> 35953862697246318154586103815780494673;
-inv_value(272) -> 28763090157797054523668883052624395738;
-inv_value(273) -> 23010472126237643618935106442099516591;
-inv_value(274) -> 36816755401980229790296170307359226545;
-inv_value(275) -> 29453404321584183832236936245887381236;
-inv_value(276) -> 23562723457267347065789548996709904989;
-inv_value(277) -> 37700357531627755305263278394735847982;
-inv_value(278) -> 30160286025302204244210622715788678386;
-inv_value(279) -> 24128228820241763395368498172630942709;
-inv_value(280) -> 38605166112386821432589597076209508334;
-inv_value(281) -> 30884132889909457146071677660967606667;
-inv_value(282) -> 24707306311927565716857342128774085334;
-inv_value(283) -> 39531690099084105146971747406038536534;
-inv_value(284) -> 31625352079267284117577397924830829227;
-inv_value(285) -> 25300281663413827294061918339864663382;
-inv_value(286) -> 40480450661462123670499069343783461410;
-inv_value(287) -> 32384360529169698936399255475026769128;
-inv_value(288) -> 25907488423335759149119404380021415303;
-inv_value(289) -> 41451981477337214638591047008034264484;
-inv_value(290) -> 33161585181869771710872837606427411587;
-inv_value(291) -> 26529268145495817368698270085141929270;
-inv_value(292) -> 42446829032793307789917232136227086832;
-inv_value(293) -> 33957463226234646231933785708981669466;
-inv_value(294) -> 27165970580987716985547028567185335573;
-inv_value(295) -> 21732776464790173588437622853748268458;
-inv_value(296) -> 34772442343664277741500196565997229533;
-inv_value(297) -> 27817953874931422193200157252797783626;
-inv_value(298) -> 22254363099945137754560125802238226901;
-inv_value(299) -> 35606980959912220407296201283581163042;
-inv_value(300) -> 28485584767929776325836961026864930433;
-inv_value(301) -> 22788467814343821060669568821491944347;
-inv_value(302) -> 36461548502950113697071310114387110955;
-inv_value(303) -> 29169238802360090957657048091509688764;
-inv_value(304) -> 23335391041888072766125638473207751011;
-inv_value(305) -> 37336625667020916425801021557132401617;
-inv_value(306) -> 29869300533616733140640817245705921294;
-inv_value(307) -> 23895440426893386512512653796564737035;
-inv_value(308) -> 38232704683029418420020246074503579256;
-inv_value(309) -> 30586163746423534736016196859602863405;
-inv_value(310) -> 24468930997138827788812957487682290724;
-inv_value(311) -> 39150289595422124462100731980291665158;
-inv_value(312) -> 31320231676337699569680585584233332127;
-inv_value(313) -> 25056185341070159655744468467386665702;
-inv_value(314) -> 40089896545712255449191149547818665122;
-inv_value(315) -> 32071917236569804359352919638254932098;
-inv_value(316) -> 25657533789255843487482335710603945678;
-inv_value(317) -> 41052054062809349579971737136966313085;
-inv_value(318) -> 32841643250247479663977389709573050468;
-inv_value(319) -> 26273314600197983731181911767658440375;
-inv_value(320) -> 42037303360316773969891058828253504599;
-inv_value(321) -> 33629842688253419175912847062602803679;
-inv_value(322) -> 26903874150602735340730277650082242944;
-inv_value(323) -> 21523099320482188272584222120065794355;
-inv_value(324) -> 34436958912771501236134755392105270968;
-inv_value(325) -> 27549567130217200988907804313684216774;
-inv_value(326) -> 22039653704173760791126243450947373419;
-inv_value(327) -> 35263445926678017265801989521515797471;
-inv_value(328) -> 28210756741342413812641591617212637977;
-inv_value(329) -> 22568605393073931050113273293770110382;
-inv_value(330) -> 36109768628918289680181237270032176610;
-inv_value(331) -> 28887814903134631744144989816025741288;
-inv_value(332) -> 23110251922507705395315991852820593031;
-inv_value(333) -> 36976403076012328632505586964512948849;
-inv_value(334) -> 29581122460809862906004469571610359079;
-inv_value(335) -> 23664897968647890324803575657288287263;
-inv_value(336) -> 37863836749836624519685721051661259621;
-inv_value(337) -> 30291069399869299615748576841329007697;
-inv_value(338) -> 24232855519895439692598861473063206158;
-inv_value(339) -> 38772568831832703508158178356901129852;
-inv_value(340) -> 31018055065466162806526542685520903882;
-inv_value(341) -> 24814444052372930245221234148416723105;
-inv_value(_) -> error(function_clause).
diff --git a/lib/stdlib/src/lists.erl b/lib/stdlib/src/lists.erl
index f44ed726ca..b82732e0ca 100644
--- a/lib/stdlib/src/lists.erl
+++ b/lib/stdlib/src/lists.erl
@@ -32,7 +32,7 @@
concat/1, flatten/1, flatten/2, flatlength/1,
keydelete/3, keyreplace/4, keytake/3, keystore/4,
keysort/2, keymerge/3, rkeymerge/3, rukeymerge/3,
- ukeysort/2, ukeymerge/3, keymap/3]).
+ ukeysort/2, ukeymerge/3, keymap/3, enumerate/1, enumerate/2]).
-export([merge/3, rmerge/3, sort/2, umerge/3, rumerge/3, usort/2]).
@@ -957,6 +957,24 @@ keymap(Fun, Index, [Tup|Tail]) ->
keymap(Fun, Index, []) when is_integer(Index), Index >= 1,
is_function(Fun, 1) -> [].
+-spec enumerate(List1) -> List2 when
+ List1 :: [T],
+ List2 :: [{Index, T}],
+ Index :: integer(),
+ T :: term().
+enumerate(List1) ->
+ enumerate(1, List1).
+
+-spec enumerate(Index, List1) -> List2 when
+ List1 :: [T],
+ List2 :: [{Index, T}],
+ Index :: integer(),
+ T :: term().
+enumerate(Index, [H|T]) when is_integer(Index) ->
+ [{Index, H}|enumerate(Index + 1, T)];
+enumerate(Index, []) when is_integer(Index) ->
+ [].
+
%%% Suggestion from OTP-2948: sort and merge with Fun.
-spec sort(Fun, List1) -> List2 when
diff --git a/lib/stdlib/src/ms_transform.erl b/lib/stdlib/src/ms_transform.erl
index afa886be14..5bffb3c024 100644
--- a/lib/stdlib/src/ms_transform.erl
+++ b/lib/stdlib/src/ms_transform.erl
@@ -974,8 +974,11 @@ real_guard_function(node,1) -> true;
real_guard_function(round,1) -> true;
real_guard_function(size,1) -> true;
real_guard_function(bit_size,1) -> true;
+real_guard_function(byte_size,1) -> true;
real_guard_function(map_size,1) -> true;
real_guard_function(map_get,2) -> true;
+real_guard_function(binary_part,2) -> true;
+real_guard_function(binary_part,3) -> true;
real_guard_function(tl,1) -> true;
real_guard_function(trunc,1) -> true;
real_guard_function(self,0) -> true;
diff --git a/lib/stdlib/src/otp_internal.erl b/lib/stdlib/src/otp_internal.erl
index 86196d47d1..8e11732908 100644
--- a/lib/stdlib/src/otp_internal.erl
+++ b/lib/stdlib/src/otp_internal.erl
@@ -97,70 +97,6 @@ obsolete(public_key, ssh_hostkey_fingerprint, 2) ->
{deprecated, "use ssh:hostkey_fingerprint/2 instead", "OTP 26"};
obsolete(queue, lait, 1) ->
{deprecated, "use queue:liat/1 instead"};
-obsolete(snmpm, async_get, 3) ->
- {deprecated, "use snmpm:async_get2/3 instead.", "OTP 25"};
-obsolete(snmpm, async_get, 4) ->
- {deprecated, "use snmpm:async_get2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_get, 5) ->
- {deprecated, "use snmpm:async_get2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_get, 6) ->
- {deprecated, "use snmpm:async_get2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_get_bulk, 5) ->
- {deprecated, "use snmpm:async_get_bulk2/5 instead.", "OTP 25"};
-obsolete(snmpm, async_get_bulk, 6) ->
- {deprecated, "use snmpm:async_get_bulk2/6 instead.", "OTP 25"};
-obsolete(snmpm, async_get_bulk, 7) ->
- {deprecated, "use snmpm:async_get_bulk2/6 instead.", "OTP 25"};
-obsolete(snmpm, async_get_bulk, 8) ->
- {deprecated, "use snmpm:async_get_bulk2/6 instead.", "OTP 25"};
-obsolete(snmpm, async_get_next, 3) ->
- {deprecated, "use snmpm:async_get_next2/3 instead.", "OTP 25"};
-obsolete(snmpm, async_get_next, 4) ->
- {deprecated, "use snmpm:async_get_next2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_get_next, 5) ->
- {deprecated, "use snmpm:async_get_next2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_get_next, 6) ->
- {deprecated, "use snmpm:async_get_next2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_set, 3) ->
- {deprecated, "use snmpm:async_set2/3 instead.", "OTP 25"};
-obsolete(snmpm, async_set, 4) ->
- {deprecated, "use snmpm:async_set2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_set, 5) ->
- {deprecated, "use snmpm:async_set2/4 instead.", "OTP 25"};
-obsolete(snmpm, async_set, 6) ->
- {deprecated, "use snmpm:async_set2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_get, 3) ->
- {deprecated, "use snmpm:sync_get2/3 instead.", "OTP 25"};
-obsolete(snmpm, sync_get, 4) ->
- {deprecated, "use snmpm:sync_get2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_get, 5) ->
- {deprecated, "use snmpm:sync_get2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_get, 6) ->
- {deprecated, "use snmpm:sync_get2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_bulk, 5) ->
- {deprecated, "use snmpm:sync_get_bulk2/5 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_bulk, 6) ->
- {deprecated, "use snmpm:sync_get_bulk2/6 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_bulk, 7) ->
- {deprecated, "use snmpm:sync_get_bulk2/6 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_bulk, 8) ->
- {deprecated, "use snmpm:sync_get_bulk2/6 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_next, 3) ->
- {deprecated, "use snmpm:sync_get_next2/3 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_next, 4) ->
- {deprecated, "use snmpm:sync_get_next2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_next, 5) ->
- {deprecated, "use snmpm:sync_get_next2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_get_next, 6) ->
- {deprecated, "use snmpm:sync_get_next2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_set, 3) ->
- {deprecated, "use snmpm:sync_set2/3 instead.", "OTP 25"};
-obsolete(snmpm, sync_set, 4) ->
- {deprecated, "use snmpm:sync_set2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_set, 5) ->
- {deprecated, "use snmpm:sync_set2/4 instead.", "OTP 25"};
-obsolete(snmpm, sync_set, 6) ->
- {deprecated, "use snmpm:sync_set2/4 instead.", "OTP 25"};
obsolete(sys, get_debug, 3) ->
{deprecated, "incorrectly documented and only for internal use. Can often be replaced with sys:get_log/1"};
obsolete(wxCalendarCtrl, enableYearChange, 1) ->
diff --git a/lib/stdlib/src/proc_lib.erl b/lib/stdlib/src/proc_lib.erl
index 58e6faf950..3bd68646fe 100644
--- a/lib/stdlib/src/proc_lib.erl
+++ b/lib/stdlib/src/proc_lib.erl
@@ -1062,33 +1062,32 @@ stop(Process) ->
Reason :: term(),
Timeout :: timeout().
stop(Process, Reason, Timeout) ->
- {Pid, Mref} = erlang:spawn_monitor(do_stop(Process, Reason)),
+ Mref = erlang:monitor(process, Process),
+ T0 = erlang:monotonic_time(millisecond),
+ RemainingTimeout = try
+ sys:terminate(Process, Reason, Timeout)
+ of
+ ok when Timeout =:= infinity ->
+ infinity;
+ ok ->
+ Timeout - (((erlang:monotonic_time(microsecond) + 999) div 1000) - T0)
+ catch
+ exit:{noproc, {sys, terminate, _}} ->
+ demonitor(Mref, [flush]),
+ exit(noproc);
+ exit:{timeout, {sys, terminate, _}} ->
+ demonitor(Mref, [flush]),
+ exit(timeout);
+ exit:Reason1 ->
+ demonitor(Mref, [flush]),
+ exit(Reason1)
+ end,
receive
{'DOWN', Mref, _, _, Reason} ->
ok;
- {'DOWN', Mref, _, _, {noproc,{sys,terminate,_}}} ->
- exit(noproc);
- {'DOWN', Mref, _, _, CrashReason} ->
- exit(CrashReason)
- after Timeout ->
- exit(Pid, kill),
- receive
- {'DOWN', Mref, _, _, _} ->
- exit(timeout)
- end
- end.
-
--spec do_stop(Process, Reason) -> Fun when
- Process :: pid() | RegName | {RegName,node()},
- RegName :: atom(),
- Reason :: term(),
- Fun :: fun(() -> no_return()).
-do_stop(Process, Reason) ->
- fun() ->
- Mref = erlang:monitor(process, Process),
- ok = sys:terminate(Process, Reason, infinity),
- receive
- {'DOWN', Mref, _, _, ExitReason} ->
- exit(ExitReason)
- end
+ {'DOWN', Mref, _, _, Reason2} ->
+ exit(Reason2)
+ after RemainingTimeout ->
+ demonitor(Mref, [flush]),
+ exit(timeout)
end.
diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src
index f03aab50b6..f6a908a819 100644
--- a/lib/stdlib/src/stdlib.app.src
+++ b/lib/stdlib/src/stdlib.app.src
@@ -71,7 +71,6 @@
io,
io_lib,
io_lib_format,
- io_lib_format_ryu_table,
io_lib_fread,
io_lib_pretty,
lists,
@@ -111,6 +110,6 @@
dets]},
{applications, [kernel]},
{env, []},
- {runtime_dependencies, ["sasl-3.0","kernel-7.0","erts-12.0","crypto-3.3",
+ {runtime_dependencies, ["sasl-3.0","kernel-7.0","erts-12.0","crypto-4.5",
"compiler-5.0"]}
]}.
diff --git a/lib/stdlib/src/supervisor.erl b/lib/stdlib/src/supervisor.erl
index eea5b6a513..a622ab06b8 100644
--- a/lib/stdlib/src/supervisor.erl
+++ b/lib/stdlib/src/supervisor.erl
@@ -255,7 +255,7 @@ which_children(Supervisor) ->
Count :: {specs, ChildSpecCount :: non_neg_integer()}
| {active, ActiveProcessCount :: non_neg_integer()}
| {supervisors, ChildSupervisorCount :: non_neg_integer()}
- |{workers, ChildWorkerCount :: non_neg_integer()}.
+ | {workers, ChildWorkerCount :: non_neg_integer()}.
count_children(Supervisor) ->
call(Supervisor, count_children).
@@ -1508,7 +1508,7 @@ add_restart(State) ->
P = State#state.period,
R = State#state.restarts,
Now = erlang:monotonic_time(1),
- R1 = add_restart([Now|R], Now, P),
+ R1 = add_restart(R, Now, P),
State1 = State#state{restarts = R1},
case length(R1) of
CurI when CurI =< I ->
@@ -1517,18 +1517,13 @@ add_restart(State) ->
{terminate, State1}
end.
-add_restart([R|Restarts], Now, Period) ->
- case inPeriod(R, Now, Period) of
- true ->
- [R|add_restart(Restarts, Now, Period)];
- _ ->
- []
- end;
-add_restart([], _, _) ->
- [].
-
-inPeriod(Then, Now, Period) ->
- Now =< Then + Period.
+add_restart(Restarts0, Now, Period) ->
+ Treshold = Now - Period,
+ Restarts1 = lists:takewhile(
+ fun (R) -> R >= Treshold end,
+ Restarts0
+ ),
+ [Now | Restarts1].
%%% ------------------------------------------------------
%%% Error and progress reporting.
diff --git a/lib/stdlib/src/timer.erl b/lib/stdlib/src/timer.erl
index df10790ea0..8ae3ef03d7 100644
--- a/lib/stdlib/src/timer.erl
+++ b/lib/stdlib/src/timer.erl
@@ -26,129 +26,198 @@
cancel/1, sleep/1, tc/1, tc/2, tc/3, now_diff/2,
seconds/1, minutes/1, hours/1, hms/3]).
--export([start_link/0, start/0,
- handle_call/3, handle_info/2,
+-export([start_link/0, start/0,
+ handle_call/3, handle_info/2,
init/1,
code_change/3, handle_cast/2, terminate/2]).
-%% internal exports for test purposes only
--export([get_status/0]).
-
-%% types which can be used by other modules
+%% Types which can be used by other modules
-export_type([tref/0]).
-%% Max
--define(MAX_TIMEOUT, 16#0800000).
--define(TIMER_TAB, timer_tab).
--define(INTERVAL_TAB, timer_interval_tab).
+%% Max value for a receive's after clause.
+-define(MAX_RECEIVE_AFTER, 16#ffffffff).
+
+%% Validations
+-define(valid_time(T), is_integer(T), T >= 0).
+-define(valid_mfa(M, F, A), is_atom(M), is_atom(F), is_list(A)).
%%
%% Time is in milliseconds.
%%
--opaque tref() :: {integer(), reference()}.
+-opaque tref() :: {type(), reference()}.
+-type type() :: 'once' | 'interval' | 'instant' | 'send_local'.
-type time() :: non_neg_integer().
%%
%% Interface functions
%%
-spec apply_after(Time, Module, Function, Arguments) ->
- {'ok', TRef} | {'error', Reason} when
- Time :: time(),
- Module :: module(),
- Function :: atom(),
- Arguments :: [term()],
- TRef :: tref(),
- Reason :: term().
-
-apply_after(Time, M, F, A) ->
- req(apply_after, {Time, {M, F, A}}).
-
--spec send_after(Time, Pid, Message) -> {'ok', TRef} | {'error', Reason} when
- Time :: time(),
- Pid :: pid() | (RegName :: atom()),
- Message :: term(),
- TRef :: tref(),
- Reason :: term().
-send_after(Time, Pid, Message) ->
- req(apply_after, {Time, {?MODULE, send, [Pid, Message]}}).
-
--spec send_after(Time, Message) -> {'ok', TRef} | {'error', Reason} when
- Time :: time(),
- Message :: term(),
- TRef :: tref(),
- Reason :: term().
+ {'ok', TRef} | {'error', Reason}
+ when Time :: time(),
+ Module :: module(),
+ Function :: atom(),
+ Arguments :: [term()],
+ TRef :: tref(),
+ Reason :: term().
+apply_after(0, M, F, A)
+ when ?valid_mfa(M, F, A) ->
+ do_apply({M, F, A}),
+ {ok, {instant, make_ref()}};
+apply_after(Time, M, F, A)
+ when ?valid_time(Time),
+ ?valid_mfa(M, F, A) ->
+ req(apply_once, {system_time(), Time, {M, F, A}});
+apply_after(_Time, _M, _F, _A) ->
+ {error, badarg}.
+
+-spec send_after(Time, Destination, Message) -> {'ok', TRef} | {'error', Reason}
+ when Time :: time(),
+ Destination :: pid() | (RegName :: atom()) | {RegName :: atom(), Node :: node()},
+ Message :: term(),
+ TRef :: tref(),
+ Reason :: term().
+send_after(0, PidOrRegName, Message)
+ when is_pid(PidOrRegName);
+ is_atom(PidOrRegName) ->
+ PidOrRegName ! Message,
+ {ok, {instant, make_ref()}};
+send_after(0, {RegName, Node} = Dest, Message)
+ when is_atom(RegName),
+ is_atom(Node) ->
+ Dest ! Message,
+ {ok, {instant, make_ref()}};
+send_after(Time, Pid, Message)
+ when ?valid_time(Time),
+ is_pid(Pid),
+ node(Pid) =:= node() ->
+ TRef = erlang:send_after(Time, Pid, Message),
+ {ok, {send_local, TRef}};
+send_after(Time, Pid, Message)
+ when is_pid(Pid) ->
+ apply_after(Time, ?MODULE, send, [Pid, Message]);
+send_after(Time, RegName, Message)
+ when is_atom(RegName) ->
+ apply_after(Time, ?MODULE, send, [RegName, Message]);
+send_after(Time, {RegName, Node} = Dest, Message)
+ when is_atom(RegName),
+ is_atom(Node) ->
+ apply_after(Time, ?MODULE, send, [Dest, Message]);
+send_after(_Time, _PidOrRegName, _Message) ->
+ {error, badarg}.
+
+-spec send_after(Time, Message) -> {'ok', TRef} | {'error', Reason}
+ when Time :: time(),
+ Message :: term(),
+ TRef :: tref(),
+ Reason :: term().
send_after(Time, Message) ->
send_after(Time, self(), Message).
--spec exit_after(Time, Pid, Reason1) -> {'ok', TRef} | {'error', Reason2} when
- Time :: time(),
- Pid :: pid() | (RegName :: atom()),
- TRef :: tref(),
- Reason1 :: term(),
- Reason2 :: term().
+-spec exit_after(Time, Target, Reason1) -> {'ok', TRef} | {'error', Reason2}
+ when Time :: time(),
+ Target :: pid() | (RegName :: atom()),
+ TRef :: tref(),
+ Reason1 :: term(),
+ Reason2 :: term().
exit_after(Time, Pid, Reason) ->
- req(apply_after, {Time, {erlang, exit, [Pid, Reason]}}).
+ apply_after(Time, erlang, exit, [Pid, Reason]).
--spec exit_after(Time, Reason1) -> {'ok', TRef} | {'error', Reason2} when
- Time :: time(),
- TRef :: tref(),
- Reason1 :: term(),
- Reason2 :: term().
+-spec exit_after(Time, Reason1) -> {'ok', TRef} | {'error', Reason2}
+ when Time :: time(),
+ TRef :: tref(),
+ Reason1 :: term(),
+ Reason2 :: term().
exit_after(Time, Reason) ->
exit_after(Time, self(), Reason).
--spec kill_after(Time, Pid) -> {'ok', TRef} | {'error', Reason2} when
- Time :: time(),
- Pid :: pid() | (RegName :: atom()),
- TRef :: tref(),
- Reason2 :: term().
+-spec kill_after(Time, Target) -> {'ok', TRef} | {'error', Reason2}
+ when Time :: time(),
+ Target :: pid() | (RegName :: atom()),
+ TRef :: tref(),
+ Reason2 :: term().
kill_after(Time, Pid) ->
exit_after(Time, Pid, kill).
--spec kill_after(Time) -> {'ok', TRef} | {'error', Reason2} when
- Time :: time(),
- TRef :: tref(),
- Reason2 :: term().
+-spec kill_after(Time) -> {'ok', TRef} | {'error', Reason2}
+ when Time :: time(),
+ TRef :: tref(),
+ Reason2 :: term().
kill_after(Time) ->
exit_after(Time, self(), kill).
-spec apply_interval(Time, Module, Function, Arguments) ->
- {'ok', TRef} | {'error', Reason} when
- Time :: time(),
- Module :: module(),
- Function :: atom(),
- Arguments :: [term()],
- TRef :: tref(),
- Reason :: term().
-apply_interval(Time, M, F, A) ->
- req(apply_interval, {Time, self(), {M, F, A}}).
-
--spec send_interval(Time, Pid, Message) ->
- {'ok', TRef} | {'error', Reason} when
- Time :: time(),
- Pid :: pid() | (RegName :: atom()),
- Message :: term(),
- TRef :: tref(),
- Reason :: term().
-send_interval(Time, Pid, Message) ->
- req(apply_interval, {Time, Pid, {?MODULE, send, [Pid, Message]}}).
-
--spec send_interval(Time, Message) -> {'ok', TRef} | {'error', Reason} when
- Time :: time(),
- Message :: term(),
- TRef :: tref(),
- Reason :: term().
+ {'ok', TRef} | {'error', Reason}
+ when Time :: time(),
+ Module :: module(),
+ Function :: atom(),
+ Arguments :: [term()],
+ TRef :: tref(),
+ Reason :: term().
+apply_interval(Time, M, F, A)
+ when ?valid_time(Time),
+ ?valid_mfa(M, F, A) ->
+ req(apply_interval, {system_time(), Time, self(), {M, F, A}});
+apply_interval(_Time, _M, _F, _A) ->
+ {error, badarg}.
+
+-spec send_interval(Time, Destination, Message) -> {'ok', TRef} | {'error', Reason}
+ when Time :: time(),
+ Destination :: pid() | (RegName :: atom()) | {RegName :: atom(), Node :: node()},
+ Message :: term(),
+ TRef :: tref(),
+ Reason :: term().
+send_interval(Time, Pid, Message)
+ when ?valid_time(Time),
+ is_pid(Pid) ->
+ req(apply_interval, {system_time(), Time, Pid, {?MODULE, send, [Pid, Message]}});
+send_interval(Time, RegName, Message)
+ when ?valid_time(Time),
+ is_atom(RegName) ->
+ req(apply_interval, {system_time(), Time, RegName, {?MODULE, send, [RegName, Message]}});
+send_interval(Time, Dest = {RegName, Node}, Message)
+ when ?valid_time(Time),
+ is_atom(RegName),
+ is_atom(Node) ->
+ req(apply_interval, {system_time(), Time, Dest, {?MODULE, send, [Dest, Message]}});
+send_interval(_Time, _Pid, _Message) ->
+ {error, badarg}.
+
+-spec send_interval(Time, Message) -> {'ok', TRef} | {'error', Reason}
+ when Time :: time(),
+ Message :: term(),
+ TRef :: tref(),
+ Reason :: term().
send_interval(Time, Message) ->
send_interval(Time, self(), Message).
--spec cancel(TRef) -> {'ok', 'cancel'} | {'error', Reason} when
- TRef :: tref(),
- Reason :: term().
-cancel(BRef) ->
- req(cancel, BRef).
-
--spec sleep(Time) -> 'ok' when
- Time :: timeout().
+-spec cancel(TRef) -> {'ok', 'cancel'} | {'error', Reason}
+ when TRef :: tref(),
+ Reason :: term().
+cancel({instant, Ref})
+ when is_reference(Ref) ->
+ {ok, cancel};
+cancel({send_local, Ref})
+ when is_reference(Ref) ->
+ _ = erlang:cancel_timer(Ref),
+ {ok, cancel};
+cancel({once, Ref} = TRef)
+ when is_reference(Ref) ->
+ req(cancel, TRef);
+cancel({interval, Ref} = TRef)
+ when is_reference(Ref) ->
+ req(cancel, TRef);
+cancel(_TRef) ->
+ {error, badarg}.
+
+-spec sleep(Time) -> 'ok'
+ when Time :: timeout().
+sleep(T)
+ when is_integer(T),
+ T > ?MAX_RECEIVE_AFTER ->
+ receive
+ after ?MAX_RECEIVE_AFTER ->
+ sleep(T - ?MAX_RECEIVE_AFTER)
+ end;
sleep(T) ->
receive
after T -> ok
@@ -157,10 +226,10 @@ sleep(T) ->
%%
%% Measure the execution time (in microseconds) for Fun().
%%
--spec tc(Fun) -> {Time, Value} when
- Fun :: function(),
- Time :: integer(),
- Value :: term().
+-spec tc(Fun) -> {Time, Value}
+ when Fun :: function(),
+ Time :: integer(),
+ Value :: term().
tc(F) ->
T1 = erlang:monotonic_time(),
Val = F(),
@@ -171,11 +240,11 @@ tc(F) ->
%%
%% Measure the execution time (in microseconds) for Fun(Args).
%%
--spec tc(Fun, Arguments) -> {Time, Value} when
- Fun :: function(),
- Arguments :: [term()],
- Time :: integer(),
- Value :: term().
+-spec tc(Fun, Arguments) -> {Time, Value}
+ when Fun :: function(),
+ Arguments :: [term()],
+ Time :: integer(),
+ Value :: term().
tc(F, A) ->
T1 = erlang:monotonic_time(),
Val = apply(F, A),
@@ -186,12 +255,12 @@ tc(F, A) ->
%%
%% Measure the execution time (in microseconds) for an MFA.
%%
--spec tc(Module, Function, Arguments) -> {Time, Value} when
- Module :: module(),
- Function :: atom(),
- Arguments :: [term()],
- Time :: integer(),
- Value :: term().
+-spec tc(Module, Function, Arguments) -> {Time, Value}
+ when Module :: module(),
+ Function :: atom(),
+ Arguments :: [term()],
+ Time :: integer(),
+ Value :: term().
tc(M, F, A) ->
T1 = erlang:monotonic_time(),
Val = apply(M, F, A),
@@ -203,250 +272,245 @@ tc(M, F, A) ->
%% Calculate the time difference (in microseconds) of two
%% erlang:now() timestamps, T2-T1.
%%
--spec now_diff(T2, T1) -> Tdiff when
- T1 :: erlang:timestamp(),
- T2 :: erlang:timestamp(),
- Tdiff :: integer().
+-spec now_diff(T2, T1) -> Tdiff
+ when T1 :: erlang:timestamp(),
+ T2 :: erlang:timestamp(),
+ Tdiff :: integer().
now_diff({A2, B2, C2}, {A1, B1, C1}) ->
((A2-A1)*1000000 + B2-B1)*1000000 + C2-C1.
%%
-%% Convert seconds, minutes etc. to milliseconds.
+%% Convert seconds, minutes etc. to milliseconds.
%%
--spec seconds(Seconds) -> MilliSeconds when
- Seconds :: non_neg_integer(),
- MilliSeconds :: non_neg_integer().
+-spec seconds(Seconds) -> MilliSeconds
+ when Seconds :: non_neg_integer(),
+ MilliSeconds :: non_neg_integer().
seconds(Seconds) ->
1000*Seconds.
--spec minutes(Minutes) -> MilliSeconds when
- Minutes :: non_neg_integer(),
- MilliSeconds :: non_neg_integer().
+
+-spec minutes(Minutes) -> MilliSeconds
+ when Minutes :: non_neg_integer(),
+ MilliSeconds :: non_neg_integer().
minutes(Minutes) ->
1000*60*Minutes.
--spec hours(Hours) -> MilliSeconds when
- Hours :: non_neg_integer(),
- MilliSeconds :: non_neg_integer().
+
+-spec hours(Hours) -> MilliSeconds
+ when Hours :: non_neg_integer(),
+ MilliSeconds :: non_neg_integer().
hours(Hours) ->
1000*60*60*Hours.
--spec hms(Hours, Minutes, Seconds) -> MilliSeconds when
- Hours :: non_neg_integer(),
- Minutes :: non_neg_integer(),
- Seconds :: non_neg_integer(),
- MilliSeconds :: non_neg_integer().
+
+-spec hms(Hours, Minutes, Seconds) -> MilliSeconds
+ when Hours :: non_neg_integer(),
+ Minutes :: non_neg_integer(),
+ Seconds :: non_neg_integer(),
+ MilliSeconds :: non_neg_integer().
hms(H, M, S) ->
hours(H) + minutes(M) + seconds(S).
-%%
+%%
%% Start/init functions
%%
-%% Start is only included because of backward compatibility!
-spec start() -> 'ok'.
start() ->
- ensure_started().
+ {ok, _Pid} = do_start(),
+ ok.
+
+do_start() ->
+ case
+ supervisor:start_child(
+ kernel_sup,
+ #{
+ id => timer_server,
+ start => {?MODULE, start_link, []},
+ restart => permanent,
+ shutdown => 1000,
+ type => worker,
+ modules => [?MODULE]
+ }
+ )
+ of
+ {ok, Pid} ->
+ {ok, Pid};
+ {ok, Pid, _} ->
+ {ok, Pid};
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Error ->
+ Error
+ end.
-spec start_link() -> {'ok', pid()} | {'error', term()}.
start_link() ->
- gen_server:start_link({local, timer_server}, ?MODULE, [], []).
+ gen_server:start_link({local, timer_server}, ?MODULE, [], []).
--spec init([]) -> {'ok', [], 'infinity'}.
+-spec init([]) -> {'ok', ets:tid()}.
init([]) ->
process_flag(trap_exit, true),
- ?TIMER_TAB = ets:new(?TIMER_TAB, [named_table,ordered_set,protected]),
- ?INTERVAL_TAB = ets:new(?INTERVAL_TAB, [named_table,protected]),
- {ok, [], infinity}.
-
--spec ensure_started() -> 'ok'.
-ensure_started() ->
- case whereis(timer_server) of
- undefined ->
- C = {timer_server, {?MODULE, start_link, []}, permanent, 1000,
- worker, [?MODULE]},
- _ = supervisor:start_child(kernel_safe_sup, C),
- ok;
- _ -> ok
- end.
+ Tab = ets:new(?MODULE, []),
+ {ok, Tab}.
%% server calls
+%% Try sending a call. If it fails with reason noproc,
+%% try starting the timer server and try once again.
req(Req, Arg) ->
- SysTime = system_time(),
- ensure_started(),
- gen_server:call(timer_server, {Req, Arg, SysTime}, infinity).
+ try
+ maybe_req(Req, Arg)
+ catch
+ exit:{noproc, _} ->
+ {ok, _Pid} = do_start(),
+ maybe_req(Req, Arg)
+ end.
-%%
-%% handle_call(Request, From, Timers) ->
-%% {reply, Response, Timers, Timeout}
-%%
-%% Time and Timeout is in milliseconds. Started is in microseconds.
-%%
--type timers() :: term(). % XXX: refine?
-
--spec handle_call(term(), term(), timers()) ->
- {'reply', term(), timers(), timeout()} | {'noreply', timers(), timeout()}.
-handle_call({apply_after, {Time, Op}, Started}, _From, _Ts)
- when is_integer(Time), Time >= 0 ->
- BRef = {Started + 1000*Time, make_ref()},
- Timer = {BRef, timeout, Op},
- ets:insert(?TIMER_TAB, Timer),
- Timeout = timer_timeout(system_time()),
- {reply, {ok, BRef}, [], Timeout};
-handle_call({apply_interval, {Time, To, MFA}, Started}, _From, _Ts)
- when is_integer(Time), Time >= 0 ->
- %% To must be a pid or a registered name
- case get_pid(To) of
- Pid when is_pid(Pid) ->
- catch link(Pid),
- SysTime = system_time(),
- Ref = make_ref(),
- BRef1 = {interval, Ref},
- Interval = Time*1000,
- BRef2 = {Started + Interval, Ref},
- Timer = {BRef2, {repeat, Interval, Pid}, MFA},
- ets:insert(?INTERVAL_TAB, {BRef1,BRef2,Pid}),
- ets:insert(?TIMER_TAB, Timer),
- Timeout = timer_timeout(SysTime),
- {reply, {ok, BRef1}, [], Timeout};
- _ ->
- {reply, {error, badarg}, [], next_timeout()}
- end;
-handle_call({cancel, BRef = {_Time, Ref}, _}, _From, Ts)
- when is_reference(Ref) ->
- delete_ref(BRef),
- {reply, {ok, cancel}, Ts, next_timeout()};
-handle_call({cancel, _BRef, _}, _From, Ts) ->
- {reply, {error, badarg}, Ts, next_timeout()};
-handle_call({apply_after, _, _}, _From, Ts) ->
- {reply, {error, badarg}, Ts, next_timeout()};
-handle_call({apply_interval, _, _}, _From, Ts) ->
- {reply, {error, badarg}, Ts, next_timeout()};
-handle_call(_Else, _From, Ts) -> % Catch anything else
- {noreply, Ts, next_timeout()}.
-
--spec handle_info(term(), timers()) -> {'noreply', timers(), timeout()}.
-handle_info(timeout, Ts) -> % Handle timeouts
- Timeout = timer_timeout(system_time()),
- {noreply, Ts, Timeout};
-handle_info({'EXIT', Pid, _Reason}, Ts) -> % Oops, someone died
- pid_delete(Pid),
- {noreply, Ts, next_timeout()};
-handle_info(_OtherMsg, Ts) -> % Other Msg's
- {noreply, Ts, next_timeout()}.
-
--spec handle_cast(term(), timers()) -> {'noreply', timers(), timeout()}.
-handle_cast(_Req, Ts) -> % Not predicted but handled
- {noreply, Ts, next_timeout()}.
-
--spec terminate(term(), _State) -> 'ok'.
-terminate(_Reason, _State) ->
+maybe_req(Req, Arg) ->
+ gen_server:call(timer_server, {Req, Arg}, infinity).
+
+%% Call handling.
+-spec handle_call(term(), term(), Tab) ->
+ {'reply', term(), Tab} | {'noreply', Tab} when
+ Tab :: ets:tid().
+%% Start a one-shot timer.
+handle_call({apply_once, {Started, Time, MFA}}, _From, Tab) ->
+ Timeout = Started + Time,
+ Reply = try
+ erlang:start_timer(
+ Timeout,
+ self(),
+ {apply_once, MFA},
+ [{abs, true}]
+ )
+ of
+ SRef ->
+ ets:insert(Tab, {SRef, SRef}),
+ {ok, {once, SRef}}
+ catch
+ error:badarg ->
+ {error, badarg}
+ end,
+ {reply, Reply, Tab};
+%% Start an interval timer.
+handle_call({apply_interval, {Started, Time, Pid, MFA}}, _From, Tab) ->
+ NextTimeout = Started + Time,
+ TRef = monitor(process, Pid),
+ Reply = try
+ erlang:start_timer(
+ NextTimeout,
+ self(),
+ {apply_interval, NextTimeout, Time, TRef, MFA},
+ [{abs, true}]
+ )
+ of
+ SRef ->
+ ets:insert(Tab, {TRef, SRef}),
+ {ok, {interval, TRef}}
+ catch
+ error:badarg ->
+ demonitor(TRef, [flush]),
+ {error, badarg}
+ end,
+ {reply, Reply, Tab};
+%% Cancel a one-shot timer.
+handle_call({cancel, {once, TRef}}, _From, Tab) ->
+ _ = remove_timer(TRef, Tab),
+ {reply, {ok, cancel}, Tab};
+%% Cancel an interval timer.
+handle_call({cancel, {interval, TRef}}, _From, Tab) ->
+ _ = case remove_timer(TRef, Tab) of
+ true ->
+ demonitor(TRef, [flush]);
+ false ->
+ ok
+ end,
+ {reply, {ok, cancel}, Tab};
+%% Unexpected.
+handle_call(_Req, _From, Tab) ->
+ {noreply, Tab}.
+
+%% Info handling.
+-spec handle_info(term(), Tab) -> {'noreply', Tab}
+ when Tab :: ets:tid().
+%% One-shot timer timeout.
+handle_info({timeout, TRef, {apply_once, MFA}}, Tab) ->
+ case ets:take(Tab, TRef) of
+ [{TRef, _SRef}] ->
+ do_apply(MFA);
+ [] ->
+ ok
+ end,
+ {noreply, Tab};
+%% Interval timer timeout.
+handle_info({timeout, _, {apply_interval, CurTimeout, Time, TRef, MFA}}, Tab) ->
+ case ets:member(Tab, TRef) of
+ true ->
+ NextTimeout = CurTimeout + Time,
+ SRef = erlang:start_timer(
+ NextTimeout,
+ self(),
+ {apply_interval, NextTimeout, Time, TRef, MFA},
+ [{abs, true}]
+ ),
+ ets:update_element(Tab, TRef, {2, SRef}),
+ do_apply(MFA);
+ false ->
+ ok
+ end,
+ {noreply, Tab};
+%% A process related to an interval timer died.
+handle_info({'DOWN', TRef, process, _Pid, _Reason}, Tab) ->
+ _ = remove_timer(TRef, Tab),
+ {noreply, Tab};
+%% Unexpected.
+handle_info(_Req, Tab) ->
+ {noreply, Tab}.
+
+%% Cast handling.
+-spec handle_cast(term(), Tab) -> {'noreply', Tab}
+ when Tab :: ets:tid().
+%% Unexpected.
+handle_cast(_Req, Tab) ->
+ {noreply, Tab}.
+
+-spec terminate(term(), _Tab) -> 'ok'.
+terminate(_Reason, _Tab) ->
ok.
-spec code_change(term(), State, term()) -> {'ok', State}.
-code_change(_OldVsn, State, _Extra) ->
+code_change(_OldVsn, Tab, _Extra) ->
%% According to the man for gen server no timer can be set here.
- {ok, State}.
-
-%%
-%% timer_timeout(SysTime)
-%%
-%% Apply and remove already timed-out timers. A timer is a tuple
-%% {Time, BRef, Op, MFA}, where Time is in microseconds.
-%% Returns {Timeout, Timers}, where Timeout is in milliseconds.
-%%
-timer_timeout(SysTime) ->
- case ets:first(?TIMER_TAB) of
- '$end_of_table' ->
- infinity;
- {Time, _Ref} when Time > SysTime ->
- Timeout = (Time - SysTime + 999) div 1000,
- %% Returned timeout must fit in a small int
- erlang:min(Timeout, ?MAX_TIMEOUT);
- Key ->
- case ets:lookup(?TIMER_TAB, Key) of
- [{Key, timeout, MFA}] ->
- ets:delete(?TIMER_TAB,Key),
- do_apply(MFA),
- timer_timeout(SysTime);
- [{{Time, Ref}, Repeat = {repeat, Interv, To}, MFA}] ->
- ets:delete(?TIMER_TAB,Key),
- NewTime = Time + Interv,
- %% Update the interval entry (last in table)
- ets:insert(?INTERVAL_TAB,{{interval,Ref},{NewTime,Ref},To}),
- do_apply(MFA),
- ets:insert(?TIMER_TAB, {{NewTime, Ref}, Repeat, MFA}),
- timer_timeout(SysTime)
- end
- end.
-
-%%
-%% delete_ref
-%%
-
-delete_ref(BRef = {interval, _}) ->
- case ets:lookup(?INTERVAL_TAB, BRef) of
- [{_, BRef2, _Pid}] ->
- ets:delete(?INTERVAL_TAB, BRef),
- ets:delete(?TIMER_TAB, BRef2);
- _ -> % TimerReference does not exist, do nothing
- ok
- end;
-delete_ref(BRef) ->
- ets:delete(?TIMER_TAB, BRef).
-
-%%
-%% pid_delete
-%%
-
--spec pid_delete(pid()) -> 'ok'.
-pid_delete(Pid) ->
- IntervalTimerList =
- ets:select(?INTERVAL_TAB,
- [{{'_', '_','$1'},
- [{'==','$1',Pid}],
- ['$_']}]),
- lists:foreach(fun({IntKey, TimerKey, _ }) ->
- ets:delete(?INTERVAL_TAB, IntKey),
- ets:delete(?TIMER_TAB, TimerKey)
- end, IntervalTimerList).
-
-%% Calculate time to the next timeout. Returned timeout must fit in a
-%% small int.
-
--spec next_timeout() -> timeout().
-next_timeout() ->
- case ets:first(?TIMER_TAB) of
- '$end_of_table' ->
- infinity;
- {Time, _} ->
- erlang:min(positive((Time - system_time() + 999) div 1000), ?MAX_TIMEOUT)
+ {ok, Tab}.
+
+%% Remove a timer.
+remove_timer(TRef, Tab) ->
+ case ets:take(Tab, TRef) of
+ [{TRef, SRef}] ->
+ ok = erlang:cancel_timer(SRef, [{async, true}, {info, false}]),
+ true;
+ [] -> % TimerReference does not exist, do nothing
+ false
end.
%% Help functions
-do_apply({M,F,A}) ->
- case {M, F, A} of
- {?MODULE, send, A} ->
- %% If send op. send directly, (faster than spawn)
- catch send(A);
- {erlang, exit, [Name, Reason]} ->
- catch exit(get_pid(Name), Reason);
- _ ->
- %% else spawn process with the operation
- catch spawn(M,F,A)
- end.
-
-positive(X) ->
- erlang:max(X, 0).
+%% If send op. send directly (faster than spawn)
+do_apply({?MODULE, send, A}) ->
+ catch send(A);
+%% If exit op. resolve registered name
+do_apply({erlang, exit, [Name, Reason]}) ->
+ catch exit(get_pid(Name), Reason);
+do_apply({M,F,A}) ->
+ catch spawn(M, F, A).
-%%
-%% system_time() -> time in microseconds
-%%
+%% Get current time in milliseconds,
+%% ceil'ed to the next millisecond.
system_time() ->
- erlang:monotonic_time(1000000).
+ (erlang:monotonic_time(microsecond) + 999) div 1000.
send([Pid, Msg]) ->
Pid ! Msg.
+%% Resolve a registered name.
get_pid(Name) when is_pid(Name) ->
Name;
get_pid(undefined) ->
@@ -455,22 +519,3 @@ get_pid(Name) when is_atom(Name) ->
get_pid(whereis(Name));
get_pid(_) ->
undefined.
-
-%%
-%% get_status() ->
-%% {{TimerTabName,TotalNumTimers},{IntervalTabName,NumIntervalTimers}}
-%%
-%% This function is for test purposes only; it is used by the test suite.
-%% There is a small possibility that there is a mismatch of one entry
-%% between the 2 tables if this call is made when the timer server is
-%% in the middle of a transaction
-
--spec get_status() ->
- {{?TIMER_TAB,non_neg_integer()},{?INTERVAL_TAB,non_neg_integer()}}.
-
-get_status() ->
- Info1 = ets:info(?TIMER_TAB),
- {size,TotalNumTimers} = lists:keyfind(size, 1, Info1),
- Info2 = ets:info(?INTERVAL_TAB),
- {size,NumIntervalTimers} = lists:keyfind(size, 1, Info2),
- {{?TIMER_TAB,TotalNumTimers},{?INTERVAL_TAB,NumIntervalTimers}}.
diff --git a/lib/stdlib/test/beam_lib_SUITE.erl b/lib/stdlib/test/beam_lib_SUITE.erl
index d40258b930..2b9226dbc2 100644
--- a/lib/stdlib/test/beam_lib_SUITE.erl
+++ b/lib/stdlib/test/beam_lib_SUITE.erl
@@ -85,7 +85,6 @@ normal(Conf) when is_list(Conf) ->
P0 = pps(),
do_normal(Source, PrivDir, BeamFile, []),
- do_normal(Source, PrivDir, BeamFile, [no_utf8_atoms]),
{ok,_} = compile:file(Source, [{outdir,PrivDir}, no_debug_info]),
{ok, {simple, [{debug_info, {debug_info_v1, erl_abstract_code, {none, _}}}]}} =
@@ -392,14 +391,12 @@ strip(Conf) when is_list(Conf) ->
%% check that line number information is still present after stripping
{module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
- {'EXIT',{badarith,[{lines,t,1,Info}|_]}} =
- (catch lines:t(atom)),
+ Info = get_line_number_info(),
true = code:delete(lines),
false = code:purge(lines),
{ok, {lines,BeamFile5D1}} = beam_lib:strip(BeamFile5D1),
{module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
- {'EXIT',{badarith,[{lines,t,1,Info}|_]}} =
- (catch lines:t(atom)),
+ Info = get_line_number_info(),
true = (P0 == pps()),
NoOfTables = erlang:system_info(ets_count),
@@ -458,12 +455,12 @@ strip_add_chunks(Conf) when is_list(Conf) ->
%% check that line number information is still present after stripping
{module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
- {'EXIT',{badarith,[{lines,t,1,Info}|_]}} = (catch lines:t(atom)),
+ Info = get_line_number_info(),
false = code:purge(lines),
true = code:delete(lines),
{ok, {lines,BeamFile5D1}} = beam_lib:strip(BeamFile5D1),
{module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
- {'EXIT',{badarith,[{lines,t,1,Info}|_]}} = (catch lines:t(atom)),
+ Info = get_line_number_info(),
true = (P0 == pps()),
NoOfTables = erlang:system_info(ets_count),
@@ -964,3 +961,13 @@ run_if_crypto_works(Test) ->
{skip,"The crypto application is missing or broken"}
end.
+get_line_number_info() ->
+ %% The stacktrace for operators such a '+' can vary depending on
+ %% whether the JIT is used or not.
+ case catch lines:t(atom) of
+ {'EXIT',{badarith,[{erlang,'+',[atom,1],_},
+ {lines,t,1,Info}|_]}} ->
+ Info;
+ {'EXIT',{badarith,[{lines,t,1,Info}|_]}} ->
+ Info
+ end.
diff --git a/lib/stdlib/test/calendar_SUITE.erl b/lib/stdlib/test/calendar_SUITE.erl
index bea5a217db..c39da41ae9 100644
--- a/lib/stdlib/test/calendar_SUITE.erl
+++ b/lib/stdlib/test/calendar_SUITE.erl
@@ -192,15 +192,19 @@ rfc3339(Config) when is_list(Config) ->
Mys = [{unit, microsecond}],
Ns = [{unit, nanosecond}],
S = [{unit, second}],
+ Na = [{unit, native}],
D = [{time_designator, $\s}],
Z = [{offset, "Z"}],
"1985-04-12T23:20:50.520Z" = test_parse("1985-04-12T23:20:50.52Z", Ms),
- "1985-04-12T23:20:50.520Z" = test_parse("1985-04-12t23:20:50.52z", Ms),
+ "1985-04-12T23:20:50.520Z" = test_parse("1985-04-12t23:20:50.52z", Na),
"1985-04-12T21:20:50.520Z" =
test_parse("1985-04-12T23:20:50.52+02:00", Ms),
+ "1985-04-12T21:20:50.520Z" =
+ test_parse("1985-04-12T23:20:50.52+02:00", Na),
"1985-04-12T23:20:50Z" = test_parse("1985-04-12T23:20:50.52Z", S),
"1985-04-12T23:20:50.520Z" = test_parse("1985-04-12T23:20:50.52Z", Ms),
+ "1985-04-12T23:20:50.520Z" = test_parse("1985-04-12T23:20:50.52Z", Na),
"1985-04-12T23:20:50.520000Z" =
test_parse("1985-04-12t23:20:50.52z", Mys),
"1985-04-12 21:20:50.520000000Z" =
@@ -216,13 +220,15 @@ rfc3339(Config) when is_list(Config) ->
"9999-12-31T23:59:59Z" = do_format_z(253402300799, []),
"9999-12-31T23:59:59.999Z" = do_format_z(253402300799*1000+999, Ms),
+ NaPerSec = erlang:convert_time_unit(1, second, native),
+ "9999-12-31T23:59:59.999Z" = do_format_z(253402300799*NaPerSec+(NaPerSec-1), Na),
"9999-12-31T23:59:59.999999Z" =
- do_format_z(253402300799*1000000+999999, Mys),
+ do_format_z(253402300799*1_000_000+999_999, Mys),
"9999-12-31T23:59:59.999999999Z" =
- do_format_z(253402300799*1000000000+999999999, Ns),
+ do_format_z(253402300799*1_000_000_000+999_999_999, Ns),
{'EXIT', _} = (catch do_format_z(253402300799+1, [])),
{'EXIT', _} = (catch do_parse("9999-12-31T23:59:60Z", [])),
- {'EXIT', _} = (catch do_format_z(253402300799*1000000000+999999999+1, Ns)),
+ {'EXIT', _} = (catch do_format_z(253402300799*1_000_000_000+999_999_999+1, Ns)),
{'EXIT', _} = (catch do_parse("2010-04-11T22:35:41", [])), % OTP-16514
253402300799 = do_parse("9999-12-31T23:59:59Z", []),
@@ -236,6 +242,7 @@ rfc3339(Config) when is_list(Config) ->
"1970-01-02T00:00:00Z" = test_parse("1970-01-01T23:59:60.5Z"),
"1970-01-02T00:00:00Z" = test_parse("1970-01-01T23:59:60.55Z"),
"1970-01-02T00:00:00.550Z" = test_parse("1970-01-01T23:59:60.55Z", Ms),
+ "1970-01-02T00:00:00.550Z" = test_parse("1970-01-01T23:59:60.55Z", Na),
"1970-01-02T00:00:00.550000Z" =
test_parse("1970-01-01T23:59:60.55Z", Mys),
"1970-01-02T00:00:00.550000000Z" =
@@ -263,33 +270,42 @@ rfc3339(Config) when is_list(Config) ->
Str = "2000-01-01T10:02:00+00:02",
Str = do_format(TO, [{offset, 120}]),
"2000-01-01T10:02:00.000+00:02" =
- do_format(TO * 1000, [{offset, 120 * 1000}]++Ms),
+ do_format(TO * 1000, [{offset, 120_000}]++Ms),
"2000-01-01T10:02:00.000000+00:02" =
- do_format(TO * 1000 * 1000, [{offset, 120 * 1000 * 1000}]++Mys),
+ do_format(TO * 1_000_000, [{offset, 120_000_000}]++Mys),
"2000-01-01T10:02:00.000000000+00:02" =
- do_format(TO * 1000 * 1000 * 1000,
- [{offset, 120 * 1000 * 1000 * 1000}]++Ns),
+ do_format(TO * 1_000_000_000,
+ [{offset, 120_000_000_000}]++Ns),
+ "2000-01-01T10:02:00.000+00:02" =
+ do_format(TO * NaPerSec, [{offset, 120 * NaPerSec}]++Na),
+
NStr = "2000-01-01T09:58:00-00:02",
NStr = do_format(TO, [{offset, -120}]),
"2000-01-01T09:58:00.000-00:02" =
- do_format(TO * 1000, [{offset, -120 * 1000}]++Ms),
+ do_format(TO * 1000, [{offset, -120_000}]++Ms),
+ "2000-01-01T09:58:00.000-00:02" =
+ do_format(TO * NaPerSec, [{offset, -120 * NaPerSec}]++Na),
"2000-01-01T09:58:00.000000-00:02" =
- do_format(TO * 1000 * 1000, [{offset, -120 * 1000 * 1000}]++Mys),
+ do_format(TO * 1_000_000, [{offset, -120_000_000}]++Mys),
"2000-01-01T09:58:00.000000000-00:02" =
- do_format(TO * 1000 * 1000 * 1000,
- [{offset, -120 * 1000 * 1000 * 1000}]++Ns),
+ do_format(TO * 1_000_000_000,
+ [{offset, -120_000_000_000}]++Ns),
+ "2000-01-01T09:58:00.000-00:02" =
+ do_format(TO * 1000, [{offset, -120_000}]++Ms),
+ "2000-01-01T09:58:00.000-00:02" =
+ do_format(TO * NaPerSec, [{offset, -120 * NaPerSec}]++Na),
- 543210000 = do_parse("1970-01-01T00:00:00.54321Z", Ns),
- 54321000 = do_parse("1970-01-01T00:00:00.054321Z", Ns),
- 543210 = do_parse("1970-01-01T00:00:00.54321Z", Mys),
+ 543_210_000 = do_parse("1970-01-01T00:00:00.54321Z", Ns),
+ 543_210_00 = do_parse("1970-01-01T00:00:00.054321Z", Ns),
+ 543_210 = do_parse("1970-01-01T00:00:00.54321Z", Mys),
543 = do_parse("1970-01-01T00:00:00.54321Z", Ms),
0 = do_parse("1970-01-01T00:00:00.000001Z", Ms),
1 = do_parse("1970-01-01T00:00:00.000001Z", Mys),
1000 = do_parse("1970-01-01T00:00:00.000001Z", Ns),
0 = do_parse("1970-01-01Q00:00:00.00049Z", Ms),
1 = do_parse("1970-01-01Q00:00:00.0005Z", Ms),
- 6543210 = do_parse("1970-01-01T00:00:06.54321Z", Mys),
+ 6543_210 = do_parse("1970-01-01T00:00:06.54321Z", Mys),
298815132000000 = do_parse("1979-06-21T12:12:12Z", Mys),
-1613826000000000 = do_parse("1918-11-11T11:00:00Z", Mys),
-1613833200000000 = do_parse("1918-11-11T11:00:00+02:00", Mys),
@@ -300,11 +316,11 @@ rfc3339(Config) when is_list(Config) ->
"1970-01-01T00:00:00.001Z" = do_format_z(1, Ms),
"1970-01-01T00:00:00.000001Z" = do_format_z(1, Mys),
"1970-01-01T00:00:00.000000001Z" = do_format_z(1, Ns),
- "1970-01-01T00:00:01.000000Z" = do_format_z(1000000, Mys),
- "1970-01-01T00:00:00.543210Z" = do_format_z(543210, Mys),
+ "1970-01-01T00:00:01.000000Z" = do_format_z(1_000_000, Mys),
+ "1970-01-01T00:00:00.543210Z" = do_format_z(543_210, Mys),
"1970-01-01T00:00:00.543Z" = do_format_z(543, Ms),
- "1970-01-01T00:00:00.543210000Z" = do_format_z(543210000, Ns),
- "1970-01-01T00:00:06.543210Z" = do_format_z(6543210, Mys),
+ "1970-01-01T00:00:00.543210000Z" = do_format_z(543_210_000, Ns),
+ "1970-01-01T00:00:06.543210Z" = do_format_z(6_543_210, Mys),
"1979-06-21T12:12:12.000000Z" = do_format_z(298815132000000, Mys),
"1918-11-11T13:00:00.000000Z" = do_format_z(-1613818800000000, Mys),
ok.
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index cf43551692..7349b7a2e2 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -74,7 +74,8 @@
warn_missing_spec/1,
otp_16824/1,
underscore_match/1,
- unused_record/1]).
+ unused_record/1,
+ unused_type2/1]).
suite() ->
[{ct_hooks,[ts_install_cth]},
@@ -98,7 +99,7 @@ all() ->
stacktrace_syntax, otp_14285, otp_14378, external_funs,
otp_15456, otp_15563, unused_type, binary_types, removed, otp_16516,
inline_nifs, warn_missing_spec, otp_16824,
- underscore_match, unused_record].
+ underscore_match, unused_record, unused_type2].
groups() ->
[{unused_vars_warn, [],
@@ -958,14 +959,13 @@ binary_types(Config) when is_list(Config) ->
Ts = [{binary1,
<<"-type nonempty_binary() :: term().">>,
[nowarn_unused_type],
- {warnings,[{{1,22},erl_lint,
- {new_builtin_type,{nonempty_binary,0}}}]}},
-
+ {errors,[{{1,22},erl_lint,
+ {builtin_type,{nonempty_binary,0}}}],[]}},
{binary2,
<<"-type nonempty_bitstring() :: term().">>,
[nowarn_unused_type],
- {warnings,[{{1,22},erl_lint,
- {new_builtin_type,{nonempty_bitstring,0}}}]}}],
+ {errors,[{{1,22},erl_lint,
+ {builtin_type,{nonempty_bitstring,0}}}],[]}}],
[] = run(Config, Ts),
ok.
@@ -3725,7 +3725,10 @@ predef(Config) when is_list(Config) ->
%% dict(), digraph() and so on were removed in Erlang/OTP 18.0.
E2 = get_compilation_result(Config, "predef2", []),
Tag = undefined_type,
- {[{{7,13},erl_lint,{Tag,{array,0}}},
+ {[{{5,2},erl_lint,{Tag,{array,0}}},
+ {{5,2},erl_lint,{Tag,{digraph,0}}},
+ {{5,2},erl_lint,{Tag,{gb_set,0}}},
+ {{7,13},erl_lint,{Tag,{array,0}}},
{{12,12},erl_lint,{Tag,{dict,0}}},
{{17,15},erl_lint,{Tag,{digraph,0}}},
{{27,14},erl_lint,{Tag,{gb_set,0}}},
@@ -4631,6 +4634,63 @@ unused_record(Config) when is_list(Config) ->
ok.
+unused_type2(Config) when is_list(Config) ->
+ Ts = [{unused_type2_1,
+ <<"-type t() :: [t()].
+ t() ->
+ a.
+ ">>,
+ {[]},
+ {warnings,[{{1,22},erl_lint,{unused_type,{t,0}}},
+ {{2,15},erl_lint,{unused_function,{t,0}}}]}},
+ {unused_type2_2,
+ <<"-type t1() :: t2().
+ -type t2() :: t1().
+ t() ->
+ a.
+ ">>,
+ {[]},
+ {warnings,[{{1,22},erl_lint,{unused_type,{t1,0}}},
+ {{2,16},erl_lint,{unused_type,{t2,0}}},
+ {{3,16},erl_lint,{unused_function,{t,0}}}]}},
+ {unused_type2_3,
+ <<"-callback cb() -> t().
+ -type t() :: atom().
+ t() ->
+ a.
+ ">>,
+ {[]},
+ {warnings,[{{3,16},erl_lint,{unused_function,{t,0}}}]}},
+ {unused_type2_4,
+ <<"-spec t() -> t().
+ -type t() :: atom().
+ t() ->
+ a.
+ ">>,
+ {[]},
+ {warnings,[{{3,16},erl_lint,{unused_function,{t,0}}}]}},
+ {unused_type2_5,
+ <<"-export_type([t/0]).
+ -type t() :: atom().
+ t() ->
+ a.
+ ">>,
+ {[]},
+ {warnings,[{{3,16},erl_lint,{unused_function,{t,0}}}]}},
+ {unused_type2_6,
+ <<"-record(r, {f :: t()}).
+ -type t() :: atom().
+ t() ->
+ a.
+ ">>,
+ {[]},
+ {warnings,[{{1,22},erl_lint,{unused_record,r}},
+ {{3,16},erl_lint,{unused_function,{t,0}}}]}}
+ ],
+ [] = run(Config, Ts),
+
+ ok.
+
format_error(E) ->
lists:flatten(erl_lint:format_error(E)).
diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl
index ad49321aaa..b740ead730 100644
--- a/lib/stdlib/test/erl_pp_SUITE.erl
+++ b/lib/stdlib/test/erl_pp_SUITE.erl
@@ -48,13 +48,13 @@
neg_indent/1,
maps_syntax/1,
format_options/1,
- quoted_atom_types/1,
+ quoted_atom_types/1,
otp_6321/1, otp_6911/1, otp_6914/1, otp_8150/1, otp_8238/1,
otp_8473/1, otp_8522/1, otp_8567/1, otp_8664/1, otp_9147/1,
otp_10302/1, otp_10820/1, otp_11100/1, otp_11861/1, pr_1014/1,
otp_13662/1, otp_14285/1, otp_15592/1, otp_15751/1, otp_15755/1,
- otp_16435/1]).
+ otp_16435/1, gh_5093/1]).
%% Internal export.
-export([ehook/6]).
@@ -85,7 +85,8 @@ groups() ->
[otp_6321, otp_6911, otp_6914, otp_8150, otp_8238,
otp_8473, otp_8522, otp_8567, otp_8664, otp_9147,
otp_10302, otp_10820, otp_11100, otp_11861, pr_1014, otp_13662,
- otp_14285, otp_15592, otp_15751, otp_15755, otp_16435]}].
+ otp_14285, otp_15592, otp_15751, otp_15755, otp_16435,
+ gh_5093]}].
init_per_suite(Config) ->
Config.
@@ -1335,6 +1336,18 @@ otp_16435(_Config) ->
ok.
+gh_5093(_Config) ->
+ assert_same("f() ->\n -1.\n"),
+ assert_same("f() ->\n +1.\n"),
+ assert_same("f() ->\n +1.1.\n"),
+ assert_same("f() ->\n +(+1).\n"),
+ assert_same("f(X) ->\n -X.\n"),
+ assert_same("f(X) ->\n +X.\n"),
+ assert_same("f(X, Y) ->\n X + Y.\n"),
+ assert_same("f(X, Y) ->\n X + +Y.\n"),
+ assert_same("f(X, Y) ->\n X - Y.\n"),
+ ok.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
compile(Config, Tests) ->
@@ -1518,3 +1531,10 @@ fail() ->
start_node(Name, Xargs) ->
PA = filename:dirname(code:which(?MODULE)),
test_server:start_node(Name, peer, [{args, "-pa " ++ PA ++ " " ++ Xargs}]).
+
+assert_same(Expected) when is_list(Expected) ->
+ Actual = binary_to_list(iolist_to_binary(parse_and_pp_forms(Expected, []))),
+ case Expected == Actual of
+ true -> ok;
+ false -> error({Expected, Actual})
+ end.
diff --git a/lib/stdlib/test/ets_SUITE_data/visualize_throughput.html b/lib/stdlib/test/ets_SUITE_data/visualize_throughput.html
index 922a3790ea..c2241c39b5 100644
--- a/lib/stdlib/test/ets_SUITE_data/visualize_throughput.html
+++ b/lib/stdlib/test/ets_SUITE_data/visualize_throughput.html
@@ -240,10 +240,12 @@
function plotScenario(name, plotType) {
var data = scenarioDataMap[name];
var yAxisTitle = undefined;
+ var graphId = "graph" + nrOfGraphs;
+ var fullscreenButtonid = "fullscreenButton" + nrOfGraphs;
nrOfGraphs = nrOfGraphs + 1;
- $("<div class='added' id='graph" + nrOfGraphs + "'>")
+ $("<div class='added' id='" + graphId + "'>")
.insertBefore(insertPlaceholder);
- $("<button type='button' class='added' id='fullscreenButton" + nrOfGraphs + "'>Fill screen</button>")
+ $("<button type='button' class='added' id='" + fullscreenButtonid + "'>Fill screen</button>")
.insertBefore(insertPlaceholder);
$("<span class='added'><br><hr><br></span>")
.insertBefore(insertPlaceholder);
@@ -265,17 +267,17 @@
title: yAxisTitle
}
};
- $("#fullscreenButton" + nrOfGraphs).click(
+ $("#" + fullscreenButtonid).click(
function () {
- $('#graph' + nrOfGraphs).replaceWith(
- $("<div class='added' id='graph" + nrOfGraphs + "'>"));
+ $('#' + graphId).replaceWith(
+ $("<div class='added' id='" + graphId + "'>"));
layout = $.extend({}, layout, {
width: $(window).width() - 40,
height: $(window).height() - 40
});
- Plotly.newPlot('graph' + nrOfGraphs, data, layout);
+ Plotly.newPlot(graphId, data, layout);
});
- Plotly.newPlot('graph' + nrOfGraphs, data, layout);
+ Plotly.newPlot(graphId, data, layout);
}
$.each(scenarioList,
function (index, name) {
diff --git a/lib/stdlib/test/gen_server_SUITE.erl b/lib/stdlib/test/gen_server_SUITE.erl
index 0a7cf80923..1da9845731 100644
--- a/lib/stdlib/test/gen_server_SUITE.erl
+++ b/lib/stdlib/test/gen_server_SUITE.erl
@@ -28,7 +28,7 @@
init_per_group/2,end_per_group/2]).
-export([start/1, crash/1, call/1, send_request/1, cast/1, cast_fast/1,
continue/1, info/1, abcast/1, multicall/1, multicall_down/1,
- call_remote1/1, call_remote2/1, call_remote3/1,
+ call_remote1/1, call_remote2/1, call_remote3/1, calling_self/1,
call_remote_n1/1, call_remote_n2/1, call_remote_n3/1, spec_init/1,
spec_init_local_registered_parent/1,
spec_init_global_registered_parent/1,
@@ -65,7 +65,7 @@ suite() ->
all() ->
[start, {group,stop}, crash, call, send_request, cast, cast_fast, info, abcast,
- continue, multicall, multicall_down, call_remote1, call_remote2,
+ continue, multicall, multicall_down, call_remote1, call_remote2, calling_self,
call_remote3, call_remote_n1, call_remote_n2,
call_remote_n3, spec_init,
spec_init_local_registered_parent,
@@ -721,6 +721,15 @@ call_remote_n3(Config) when is_list(Config) ->
ok.
%% --------------------------------------
+%% Other bad calls
+%% --------------------------------------
+
+calling_self(Config) when is_list(Config) ->
+ {'EXIT', {calling_self, _}} = (catch gen_server:call(self(), oops)),
+ {'EXIT', {calling_self, _}} = (catch gen_server:call(self(), oops, infinity)),
+ ok.
+
+%% --------------------------------------
%% Test gen_server:cast and handle_cast.
%% Test all different return values from
%% handle_cast.
diff --git a/lib/stdlib/test/io_SUITE.erl b/lib/stdlib/test/io_SUITE.erl
index e7d0193669..81233799b2 100644
--- a/lib/stdlib/test/io_SUITE.erl
+++ b/lib/stdlib/test/io_SUITE.erl
@@ -28,7 +28,7 @@
io_fread_newlines/1, otp_8989/1, io_lib_fread_literal/1,
printable_range/1, bad_printable_range/1,
io_lib_print_binary_depth_one/1, otp_10302/1, otp_10755/1,
- otp_10836/1, io_lib_width_too_small/1,
+ otp_10836/1, io_lib_width_too_small/1, calling_self/1,
io_with_huge_message_queue/1, format_string/1, format_neg_zero/1,
maps/1, coverage/1, otp_14178_unicode_atoms/1, otp_14175/1,
otp_14285/1, limit_term/1, otp_14983/1, otp_15103/1, otp_15076/1,
@@ -63,7 +63,7 @@ all() ->
io_fread_newlines, otp_8989, io_lib_fread_literal,
printable_range, bad_printable_range, format_neg_zero,
io_lib_print_binary_depth_one, otp_10302, otp_10755, otp_10836,
- io_lib_width_too_small, io_with_huge_message_queue,
+ io_lib_width_too_small, io_with_huge_message_queue, calling_self,
format_string, maps, coverage, otp_14178_unicode_atoms, otp_14175,
otp_14285, limit_term, otp_14983, otp_15103, otp_15076, otp_15159,
otp_15639, otp_15705, otp_15847, otp_15875, github_4801, chars_limit,
@@ -210,6 +210,10 @@ float_w(Config) when is_list(Config) ->
ok.
+calling_self(Config) when is_list(Config) ->
+ {'EXIT', {calling_self, _}} = (catch io:format(self(), "~p", [oops])),
+ ok.
+
%% OTP-5403. ~s formats I/O lists and a single binary.
otp_5403(Config) when is_list(Config) ->
"atom" = fmt("~s", [atom]),
@@ -3034,6 +3038,8 @@ error_info(Config) ->
{put_chars,[a], [{1,"not valid character data"}]},
{put_chars,[UnknownDev(),"test"], [{general,"unknown error: 'Спутник-1'"}]},
{put_chars,["test"], [{gl,UnknownDev()},{general,"unknown error: 'Спутник-1'"}]},
+ {put_chars,[self(),"test"],[{1,"the device is not allowed to be the current process"}]},
+ {put_chars,["test"],[{gl,self()},{general,"the device is not allowed to be the current process"}]},
{write,[DeadDev,"test"],[{1,"terminated"}]},
{write,["test"],[{gl,DeadDev},{general,"terminated"}]},
diff --git a/lib/stdlib/test/lists_SUITE.erl b/lib/stdlib/test/lists_SUITE.erl
index 5a9d72e0e3..fb11cbba8b 100644
--- a/lib/stdlib/test/lists_SUITE.erl
+++ b/lib/stdlib/test/lists_SUITE.erl
@@ -58,7 +58,7 @@
join/1,
otp_5939/1, otp_6023/1, otp_6606/1, otp_7230/1,
suffix/1, subtract/1, droplast/1, search/1, hof/1,
- error_info/1]).
+ enumerate/1, error_info/1]).
%% Sort randomized lists until stopped.
%%
@@ -122,7 +122,7 @@ groups() ->
{zip, [parallel], [zip_unzip, zip_unzip3, zipwith, zipwith3]},
{misc, [parallel], [reverse, member, dropwhile, takewhile,
filter_partition, suffix, subtract, join,
- hof, droplast, search, error_info]}
+ hof, droplast, search, enumerate, error_info]}
].
init_per_suite(Config) ->
@@ -2743,6 +2743,22 @@ hof(Config) when is_list(Config) ->
ok.
+%% Test lists:enumerate/1 and lists:enumerate/2
+enumerate(Config) when is_list(Config) ->
+ [] = lists:enumerate([]),
+ [] = lists:enumerate(10, []),
+ [{1,a},{2,b},{3,c}] = lists:enumerate([a,b,c]),
+ [{10,a},{11,b},{12,c}] = lists:enumerate(10, [a,b,c]),
+ {'EXIT', {function_clause, _}} = catch lists:enumerate(0),
+ {'EXIT', {function_clause, _}} = catch lists:enumerate(0, 10),
+ {'EXIT', {function_clause, _}} = catch lists:enumerate(1.0, []),
+ {'EXIT', {function_clause, _}} = catch lists:enumerate(1.0, [a,b,c]),
+ {'EXIT', {function_clause, _}} = catch lists:enumerate(<<1>>, []),
+ {'EXIT', {function_clause, _}} = catch lists:enumerate(<<1>>, [a,b,c]),
+ {'EXIT', {function_clause, _}} = catch lists:enumerate(1, <<1,2,3>>),
+
+ ok.
+
error_info(_Config) ->
L = [{keyfind, [whatever, bad_position, bad_list], [{2,".*"},{3,".*"}]},
{keymember, [key, 0, bad_list], [{2,".*"}, {3,".*"}]},
diff --git a/lib/stdlib/test/ms_transform_SUITE.erl b/lib/stdlib/test/ms_transform_SUITE.erl
index 0aefda4724..c997691c43 100644
--- a/lib/stdlib/test/ms_transform_SUITE.erl
+++ b/lib/stdlib/test/ms_transform_SUITE.erl
@@ -36,6 +36,7 @@
-export([autoimported/1]).
-export([semicolon/1]).
-export([bitsyntax/1]).
+-export([binary_bifs/1]).
-export([record_defaults/1]).
-export([andalso_orelse/1]).
-export([float_1_function/1]).
@@ -59,7 +60,7 @@ suite() ->
all() ->
[from_shell, basic_ets, basic_dbg, records,
- record_index, multipass, bitsyntax, record_defaults,
+ record_index, multipass, bitsyntax, binary_bifs, record_defaults,
andalso_orelse, float_1_function, action_function,
warnings, no_warnings, top_match, old_guards, autoimported,
semicolon, eep37, otp_14454, otp_16824, unused_record].
@@ -257,6 +258,32 @@ bitsyntax(Config) when is_list(Config) ->
" end)">>),
ok.
+
+%% Test that binary BIFs byte_size/1, binary_part/2, binary_part/3 are accepted
+binary_bifs(Config) when is_list(Config) ->
+ setup(Config),
+ TestSet = [{<<"hello">>, <<"world">>}, {<<"souldn't">>, <<"match">>}],
+ RunMS = fun(MS) -> ets:match_spec_run(TestSet, ets:match_spec_compile(MS)) end,
+ % check byte_size/1
+ MS1 = compile_and_run(<<"ets:fun2ms(fun({A, B}) when byte_size(A) == 5 -> {A, byte_size(B)} end)">>),
+ [{{'$1','$2'},
+ [{'==',{byte_size,'$1'},5}],
+ [{{'$1',{byte_size,'$2'}}}]}] = MS1,
+ [{<<"hello">>, 5}] = RunMS(MS1),
+ % check binary_part/2
+ MS2 = compile_and_run(<<"ets:fun2ms(fun({A, B}) when binary_part(A, {1, 2}) == <<\"el\">> -> binary_part(B, {2, 3}) end)">>),
+ [{{'$1','$2'},
+ [{'==',{binary_part,'$1',{{1,2}}},<<"el">>}],
+ [{binary_part,'$2',{{2,3}}}]}] = MS2,
+ [<<"rld">>] = RunMS(MS2),
+ % check binary_part/3
+ MS3 = compile_and_run(<<"ets:fun2ms(fun({A, B}) when binary_part(A, 1, 2) == <<\"el\">> -> binary_part(B, 2, 3) end)">>),
+ [{{'$1','$2'},
+ [{'==',{binary_part,'$1',1,2},<<"el">>}],
+ [{binary_part,'$2',2,3}]}] = MS3,
+ [<<"rld">>] = RunMS(MS3),
+ ok.
+
%% Test that record defaults works.
record_defaults(Config) when is_list(Config) ->
setup(Config),
diff --git a/lib/stdlib/test/proc_lib_SUITE.erl b/lib/stdlib/test/proc_lib_SUITE.erl
index b3673efb5a..33109e93ad 100644
--- a/lib/stdlib/test/proc_lib_SUITE.erl
+++ b/lib/stdlib/test/proc_lib_SUITE.erl
@@ -668,34 +668,47 @@ stop(_Config) ->
Pid3 = proc_lib:spawn(HangProc),
{'EXIT',timeout} = (catch proc_lib:stop(Pid3,normal,1000)),
+ %% Ensure that a termination message is always sent to the
+ %% target process and that it eventually terminates.
+ Pid4 = proc_lib:spawn(HangProc),
+ Ref4 = monitor(process, Pid4),
+ {'EXIT', timeout} = (catch proc_lib:stop(Pid4, normal, 0)),
+ ok = receive
+ {'DOWN', Ref4, process, _, _} ->
+ ok;
+ M -> M
+ after 6000 ->
+ timeout
+ end,
+
%% Success case with other reason than 'normal'
- Pid4 = proc_lib:spawn(SysMsgProc),
- ok = proc_lib:stop(Pid4,other_reason,infinity),
- false = erlang:is_process_alive(Pid4),
+ Pid5 = proc_lib:spawn(SysMsgProc),
+ ok = proc_lib:stop(Pid5,other_reason,infinity),
+ false = erlang:is_process_alive(Pid5),
%% System message is handled, but process dies with other reason
%% than the given (in system_terminate/4 below)
- Pid5 = proc_lib:spawn(SysMsgProc),
- {'EXIT',{{badmatch,2},_Stacktrace}} = (catch proc_lib:stop(Pid5,crash,infinity)),
- false = erlang:is_process_alive(Pid5),
+ Pid6 = proc_lib:spawn(SysMsgProc),
+ {'EXIT',{{badmatch,2},_Stacktrace}} = (catch proc_lib:stop(Pid6,crash,infinity)),
+ false = erlang:is_process_alive(Pid6),
%% Local registered name
- Pid6 = proc_lib:spawn(SysMsgProc),
- register(to_stop,Pid6),
+ Pid7 = proc_lib:spawn(SysMsgProc),
+ register(to_stop,Pid7),
ok = proc_lib:stop(to_stop),
undefined = whereis(to_stop),
- false = erlang:is_process_alive(Pid6),
+ false = erlang:is_process_alive(Pid7),
%% Remote registered name
{ok,Node} = test_server:start_node(proc_lib_SUITE_stop,slave,[]),
Dir = filename:dirname(code:which(?MODULE)),
rpc:call(Node,code,add_path,[Dir]),
- Pid7 = spawn(Node,SysMsgProc),
- true = rpc:call(Node,erlang,register,[to_stop,Pid7]),
- Pid7 = rpc:call(Node,erlang,whereis,[to_stop]),
+ Pid8 = spawn(Node,SysMsgProc),
+ true = rpc:call(Node,erlang,register,[to_stop,Pid8]),
+ Pid8 = rpc:call(Node,erlang,whereis,[to_stop]),
ok = proc_lib:stop({to_stop,Node}),
undefined = rpc:call(Node,erlang,whereis,[to_stop]),
- false = rpc:call(Node,erlang,is_process_alive,[Pid7]),
+ false = rpc:call(Node,erlang,is_process_alive,[Pid8]),
%% Local and remote registered name, but non-existing
{'EXIT',noproc} = (catch proc_lib:stop(to_stop)),
diff --git a/lib/stdlib/test/shell_SUITE.erl b/lib/stdlib/test/shell_SUITE.erl
index 3736d19af3..adfb746be1 100644
--- a/lib/stdlib/test/shell_SUITE.erl
+++ b/lib/stdlib/test/shell_SUITE.erl
@@ -701,7 +701,7 @@ otp_5195(Config) when is_list(Config) ->
{'EXIT',{undef,_}} = (catch evaluate(Ugly, [])),
V_1 = <<"qlc:e(qlc:q([X || X <- qlc:append([[1,2,3],v(-1)])])).">>,
- "- 1: command not found" = comm_err(V_1),
+ "-1: command not found" = comm_err(V_1),
{'EXIT', {undef,_}} = (catch evaluate(V_1, [])),
"1\n2\n3\n3.\n" =
diff --git a/lib/stdlib/test/shell_docs_SUITE.erl b/lib/stdlib/test/shell_docs_SUITE.erl
index 4f83fb7047..5ac4bac785 100644
--- a/lib/stdlib/test/shell_docs_SUITE.erl
+++ b/lib/stdlib/test/shell_docs_SUITE.erl
@@ -70,7 +70,7 @@ end_per_group(_GroupName, Config) ->
%% tested.
%%
%% Currently the modules are:
--define(RENDER_MODULES, [sofs, re, file, erlang]).
+-define(RENDER_MODULES, [sofs, re, file, erlang, user_drv, ?MODULE]).
%% If you need to update the definition because this
%% testcase fails, just run update_render/0,1.
render(Config) ->
@@ -88,7 +88,12 @@ render(Config) ->
{ok, Original} ->
ct:log("Original: ~n~ts",[Original]),
ct:log("Current : ~n~ts",[Current]),
- ct:fail(output_changed)
+ ct:fail(output_changed);
+ {error, enoent} ->
+ %% All modules are not available on all
+ %% platforms. For instance socket is not
+ %% available on windows.
+ ok
end
end, render_module(Module, D))
end, ?RENDER_MODULES).
@@ -275,8 +280,8 @@ render_all(Dir) ->
docsmap(fun(Mod, D) ->
maps:map(
fun(FName, Value) ->
- file:write_file(filename:join(Dir, FName), Value) end,
- render_module(Mod, D))
+ file:write_file(filename:join(Dir, FName), Value)
+ end, render_module(Mod, D))
end).
render_module(Mod, #docs_v1{ docs = Docs } = D) ->
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/erlang.docs_v1 b/lib/stdlib/test/shell_docs_SUITE_data/erlang.docs_v1
index 71704fff5a..d938767e8f 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/erlang.docs_v1
+++ b/lib/stdlib/test/shell_docs_SUITE_data/erlang.docs_v1
@@ -1 +1 @@
-{docs_v1,[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<66,121,32,99,111,110,118,101,110,116,105,111,110,44,32,109,111,115,116,32,66,117,105,108,116,45,73,110,32,70,117,110,99,116,105,111,110,115,32,40,66,73,70,115,41,32,97,114,101,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,46,32,83,111,109,101,32,111,102,32,116,104,101,32,66,73,70,115,32,97,114,101,32,118,105,101,119,101,100,32,109,111,114,101,32,111,114,32,108,101,115,115,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,32,97,110,100,32,97,114,101,32>>,{em,[],[<<97,117,116,111,45,105,109,112,111,114,116,101,100>>]},<<46,32,84,104,117,115,44,32,105,116,32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,121,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,97,108,108,115,32>>,{code,[],[<<97,116,111,109,95,116,111,95,108,105,115,116,40,101,114,108,97,110,103,41>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,108,97,110,103,58,97,116,111,109,95,116,111,95,108,105,115,116,40,101,114,108,97,110,103,41>>]},<<32,97,114,101,32,105,100,101,110,116,105,99,97,108,46>>]},{p,[],[<<65,117,116,111,45,105,109,112,111,114,116,101,100,32,66,73,70,115,32,97,114,101,32,108,105,115,116,101,100,32,119,105,116,104,111,117,116,32,109,111,100,117,108,101,32,112,114,101,102,105,120,46,32,66,73,70,115,32,108,105,115,116,101,100,32,119,105,116,104,32,109,111,100,117,108,101,32,112,114,101,102,105,120,32,97,114,101,32,110,111,116,32,97,117,116,111,45,105,109,112,111,114,116,101,100,46>>]},{p,[],[<<66,73,70,115,32,99,97,110,32,102,97,105,108,32,102,111,114,32,118,97,114,105,111,117,115,32,114,101,97,115,111,110,115,46,32,65,108,108,32,66,73,70,115,32,102,97,105,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,121,32,97,114,101,32,99,97,108,108,101,100,32,119,105,116,104,32,97,114,103,117,109,101,110,116,115,32,111,102,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,46,32,84,104,101,32,111,116,104,101,114,32,114,101,97,115,111,110,115,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,101,97,99,104,32,105,110,100,105,118,105,100,117,97,108,32,66,73,70,46>>]},{p,[],[<<83,111,109,101,32,66,73,70,115,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,32,97,110,100,32,97,114,101,32,109,97,114,107,101,100,32,119,105,116,104,32,34,65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,34,46>>]}]},#{name => <<101,114,108,97,110,103>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,101,114,108,97,110,103,46,120,109,108],types => #{{time_unit,0} => {attribute,93,type,{time_unit,{type,94,union,[{type,94,pos_integer,[]},{atom,95,second},{atom,96,millisecond},{atom,97,microsecond},{atom,98,nanosecond},{atom,99,native},{atom,100,perf_counter},{user_type,101,deprecated_time_unit,[]}]},[]}},{prepared_code,0} => {attribute,110,opaque,{prepared_code,{type,110,reference,[]},[]}},{nif_resource,0} => {attribute,113,opaque,{nif_resource,{type,113,reference,[]},[]}},{system_monitor_option,0} => {attribute,274,type,{system_monitor_option,{type,275,union,[{atom,275,busy_port},{atom,276,busy_dist_port},{type,277,tuple,[{atom,277,long_gc},{type,277,non_neg_integer,[]}]},{type,278,tuple,[{atom,278,long_schedule},{type,278,non_neg_integer,[]}]},{type,279,tuple,[{atom,279,large_heap},{type,279,non_neg_integer,[]}]}]},[]}},{module_info_key,0} => {attribute,2123,type,{module_info_key,{type,2123,union,[{atom,2123,attributes},{atom,2123,compile},{atom,2123,exports},{atom,2123,functions},{atom,2123,md5},{atom,2124,module},{atom,2124,native},{atom,2124,native_addresses},{atom,2124,nifs}]},[]}},{trace_info_flag,0} => {attribute,327,type,{trace_info_flag,{type,328,union,[{atom,328,send},{atom,329,'receive'},{atom,330,set_on_spawn},{atom,331,call},{atom,332,return_to},{atom,333,procs},{atom,334,set_on_first_spawn},{atom,335,set_on_link},{atom,336,running},{atom,337,garbage_collection},{atom,338,timestamp},{atom,339,monotonic_timestamp},{atom,340,strict_monotonic_timestamp},{atom,341,arity}]},[]}},{ext_iovec,0} => {attribute,88,type,{ext_iovec,{user_type,88,iovec,[]},[]}},{trace_match_spec,0} => {attribute,2702,type,{trace_match_spec,{type,2703,list,[{type,2703,tuple,[{type,2703,union,[{type,2703,list,[{type,2703,term,[]}]},{atom,2703,'_'},{user_type,2703,match_variable,[]}]},{type,2703,list,[{type,2703,term,[]}]},{type,2703,list,[{type,2703,term,[]}]}]}]},[]}},{max_heap_size,0} => {attribute,2981,type,{max_heap_size,{ann_type,2982,[{var,2982,'Size'},{type,2982,union,[{type,2982,non_neg_integer,[]},{type,2984,map,[{type,2984,map_field_assoc,[{atom,2984,size},{type,2984,non_neg_integer,[]}]},{type,2985,map_field_assoc,[{atom,2985,kill},{type,2985,boolean,[]}]},{type,2986,map_field_assoc,[{atom,2986,error_logger},{type,2986,boolean,[]}]}]}]}]},[]}},{fun_info_item,0} => {attribute,247,type,{fun_info_item,{type,248,union,[{atom,248,arity},{atom,249,env},{atom,250,index},{atom,251,name},{atom,252,module},{atom,253,new_index},{atom,254,new_uniq},{atom,255,pid},{atom,256,type},{atom,257,uniq}]},[]}},{stack_item,0} => {attribute,2472,type,{stack_item,{type,2473,tuple,[{ann_type,2473,[{var,2473,'Module'},{type,2473,module,[]}]},{ann_type,2474,[{var,2474,'Function'},{type,2474,atom,[]}]},{ann_type,2475,[{var,2475,'Arity'},{type,2475,union,[{type,2475,arity,[]},{ann_type,2475,[{var,2475,'Args'},{type,2475,list,[{type,2475,term,[]}]}]}]}]},{ann_type,2476,[{var,2476,'Location'},{type,2476,list,[{type,2476,union,[{type,2476,tuple,[{atom,2476,file},{ann_type,2476,[{var,2476,'Filename'},{type,2476,string,[]}]}]},{type,2477,tuple,[{atom,2477,line},{ann_type,2477,[{var,2477,'Line'},{type,2477,pos_integer,[]}]}]}]}]}]}]},[]}},{monitor_option,0} => {attribute,1397,type,{monitor_option,{type,1397,union,[{type,1397,tuple,[{atom,1397,alias},{type,1397,union,[{atom,1397,explicit_unalias},{atom,1397,demonitor},{atom,1397,reply_demonitor}]}]},{type,1398,tuple,[{atom,1398,tag},{type,1398,term,[]}]}]},[]}},{trace_flag,0} => {attribute,291,type,{trace_flag,{type,292,union,[{atom,292,all},{atom,293,send},{atom,294,'receive'},{atom,295,procs},{atom,296,ports},{atom,297,call},{atom,298,arity},{atom,299,return_to},{atom,300,silent},{atom,301,running},{atom,302,exiting},{atom,303,running_procs},{atom,304,running_ports},{atom,305,garbage_collection},{atom,306,timestamp},{atom,307,cpu_timestamp},{atom,308,monotonic_timestamp},{atom,309,strict_monotonic_timestamp},{atom,310,set_on_spawn},{atom,311,set_on_first_spawn},{atom,312,set_on_link},{atom,313,set_on_first_link},{type,314,tuple,[{atom,314,tracer},{type,314,union,[{type,314,pid,[]},{type,314,port,[]}]}]},{type,315,tuple,[{atom,315,tracer},{type,315,module,[]},{type,315,term,[]}]}]},[]}},{sub_level,0} => {attribute,2760,type,{sub_level,{type,2760,union,[{type,2760,list,[{ann_type,2760,[{var,2760,'LevelEntry'},{user_type,2760,level_entry,[]}]}]},{ann_type,2761,[{var,2761,'LogicalCpuId'},{type,2761,tuple,[{atom,2761,logical},{type,2761,non_neg_integer,[]}]}]}]},[]}},{monitor_port_identifier,0} => {attribute,1396,type,{monitor_port_identifier,{type,1396,union,[{type,1396,port,[]},{user_type,1396,registered_name,[]}]},[]}},{iovec,0} => {attribute,119,type,{iovec,{type,119,list,[{type,119,binary,[]}]},[]}},{ext_binary,0} => {attribute,87,type,{ext_binary,{type,87,binary,[]},[]}},{registered_process_identifier,0} => {attribute,1394,type,{registered_process_identifier,{type,1394,union,[{user_type,1394,registered_name,[]},{type,1394,tuple,[{user_type,1394,registered_name,[]},{type,1394,node,[]}]}]},[]}},{process_info_result_item,0} => {attribute,2425,type,{process_info_result_item,{type,2426,union,[{type,2426,tuple,[{atom,2426,backtrace},{ann_type,2426,[{var,2426,'Bin'},{type,2426,binary,[]}]}]},{type,2427,tuple,[{atom,2427,binary},{ann_type,2427,[{var,2427,'BinInfo'},{type,2427,list,[{type,2427,tuple,[{type,2427,non_neg_integer,[]},{type,2428,non_neg_integer,[]},{type,2429,non_neg_integer,[]}]}]}]}]},{type,2430,tuple,[{atom,2430,catchlevel},{ann_type,2430,[{var,2430,'CatchLevel'},{type,2430,non_neg_integer,[]}]}]},{type,2431,tuple,[{atom,2431,current_function},{type,2432,union,[{type,2432,tuple,[{ann_type,2432,[{var,2432,'Module'},{type,2432,module,[]}]},{ann_type,2432,[{var,2432,'Function'},{type,2432,atom,[]}]},{ann_type,2432,[{var,2432,'Arity'},{type,2432,arity,[]}]}]},{atom,2432,undefined}]}]},{type,2433,tuple,[{atom,2433,current_location},{type,2434,tuple,[{ann_type,2434,[{var,2434,'Module'},{type,2434,module,[]}]},{ann_type,2434,[{var,2434,'Function'},{type,2434,atom,[]}]},{ann_type,2434,[{var,2434,'Arity'},{type,2434,arity,[]}]},{ann_type,2435,[{var,2435,'Location'},{type,2435,list,[{type,2435,union,[{type,2435,tuple,[{atom,2435,file},{ann_type,2435,[{var,2435,'Filename'},{type,2435,string,[]}]}]},{type,2436,tuple,[{atom,2436,line},{ann_type,2436,[{var,2436,'Line'},{type,2436,pos_integer,[]}]}]}]}]}]}]}]},{type,2437,tuple,[{atom,2437,current_stacktrace},{ann_type,2437,[{var,2437,'Stack'},{type,2437,list,[{user_type,2437,stack_item,[]}]}]}]},{type,2438,tuple,[{atom,2438,dictionary},{ann_type,2438,[{var,2438,'Dictionary'},{type,2438,list,[{type,2438,tuple,[{ann_type,2438,[{var,2438,'Key'},{type,2438,term,[]}]},{ann_type,2438,[{var,2438,'Value'},{type,2438,term,[]}]}]}]}]}]},{type,2439,tuple,[{atom,2439,error_handler},{ann_type,2439,[{var,2439,'Module'},{type,2439,module,[]}]}]},{type,2440,tuple,[{atom,2440,garbage_collection},{ann_type,2440,[{var,2440,'GCInfo'},{type,2440,list,[{type,2440,tuple,[{type,2440,atom,[]},{type,2440,non_neg_integer,[]}]}]}]}]},{type,2441,tuple,[{atom,2441,garbage_collection_info},{ann_type,2441,[{var,2441,'GCInfo'},{type,2441,list,[{type,2441,tuple,[{type,2441,atom,[]},{type,2441,non_neg_integer,[]}]}]}]}]},{type,2442,tuple,[{atom,2442,group_leader},{ann_type,2442,[{var,2442,'GroupLeader'},{type,2442,pid,[]}]}]},{type,2443,tuple,[{atom,2443,heap_size},{ann_type,2443,[{var,2443,'Size'},{type,2443,non_neg_integer,[]}]}]},{type,2444,tuple,[{atom,2444,initial_call},{type,2444,mfa,[]}]},{type,2445,tuple,[{atom,2445,links},{ann_type,2445,[{var,2445,'PidsAndPorts'},{type,2445,list,[{type,2445,union,[{type,2445,pid,[]},{type,2445,port,[]}]}]}]}]},{type,2446,tuple,[{atom,2446,last_calls},{type,2446,union,[{atom,2446,false},{ann_type,2446,[{var,2446,'Calls'},{type,2446,list,[{type,2446,mfa,[]}]}]}]}]},{type,2447,tuple,[{atom,2447,memory},{ann_type,2447,[{var,2447,'Size'},{type,2447,non_neg_integer,[]}]}]},{type,2448,tuple,[{atom,2448,message_queue_len},{ann_type,2448,[{var,2448,'MessageQueueLen'},{type,2448,non_neg_integer,[]}]}]},{type,2449,tuple,[{atom,2449,messages},{ann_type,2449,[{var,2449,'MessageQueue'},{type,2449,list,[{type,2449,term,[]}]}]}]},{type,2450,tuple,[{atom,2450,min_heap_size},{ann_type,2450,[{var,2450,'MinHeapSize'},{type,2450,non_neg_integer,[]}]}]},{type,2451,tuple,[{atom,2451,min_bin_vheap_size},{ann_type,2451,[{var,2451,'MinBinVHeapSize'},{type,2451,non_neg_integer,[]}]}]},{type,2452,tuple,[{atom,2452,max_heap_size},{ann_type,2452,[{var,2452,'MaxHeapSize'},{user_type,2452,max_heap_size,[]}]}]},{type,2453,tuple,[{atom,2453,monitored_by},{ann_type,2453,[{var,2453,'MonitoredBy'},{type,2453,list,[{type,2453,union,[{type,2453,pid,[]},{type,2453,port,[]},{user_type,2453,nif_resource,[]}]}]}]}]},{type,2454,tuple,[{atom,2454,monitors},{ann_type,2455,[{var,2455,'Monitors'},{type,2455,list,[{type,2455,tuple,[{type,2455,union,[{atom,2455,process},{atom,2455,port}]},{ann_type,2455,[{var,2455,'Pid'},{type,2455,union,[{type,2455,pid,[]},{type,2455,port,[]},{type,2456,tuple,[{ann_type,2456,[{var,2456,'RegName'},{type,2456,atom,[]}]},{ann_type,2456,[{var,2456,'Node'},{type,2456,node,[]}]}]}]}]}]}]}]}]},{type,2457,tuple,[{atom,2457,message_queue_data},{ann_type,2457,[{var,2457,'MQD'},{user_type,2457,message_queue_data,[]}]}]},{type,2458,tuple,[{atom,2458,priority},{ann_type,2458,[{var,2458,'Level'},{user_type,2458,priority_level,[]}]}]},{type,2459,tuple,[{atom,2459,reductions},{ann_type,2459,[{var,2459,'Number'},{type,2459,non_neg_integer,[]}]}]},{type,2460,tuple,[{atom,2460,registered_name},{type,2460,union,[{type,2460,nil,[]},{ann_type,2460,[{var,2460,'Atom'},{type,2460,atom,[]}]}]}]},{type,2461,tuple,[{atom,2461,sequential_trace_token},{type,2461,union,[{type,2461,nil,[]},{ann_type,2461,[{var,2461,'SequentialTraceToken'},{type,2461,term,[]}]}]}]},{type,2462,tuple,[{atom,2462,stack_size},{ann_type,2462,[{var,2462,'Size'},{type,2462,non_neg_integer,[]}]}]},{type,2463,tuple,[{atom,2463,status},{ann_type,2463,[{var,2463,'Status'},{type,2463,union,[{atom,2463,exiting},{atom,2463,garbage_collecting},{atom,2463,waiting},{atom,2463,running},{atom,2463,runnable},{atom,2463,suspended}]}]}]},{type,2464,tuple,[{atom,2464,suspending},{ann_type,2465,[{var,2465,'SuspendeeList'},{type,2465,list,[{type,2465,tuple,[{ann_type,2465,[{var,2465,'Suspendee'},{type,2465,pid,[]}]},{ann_type,2466,[{var,2466,'ActiveSuspendCount'},{type,2466,non_neg_integer,[]}]},{ann_type,2467,[{var,2467,'OutstandingSuspendCount'},{type,2467,non_neg_integer,[]}]}]}]}]}]},{type,2468,tuple,[{atom,2468,total_heap_size},{ann_type,2468,[{var,2468,'Size'},{type,2468,non_neg_integer,[]}]}]},{type,2469,tuple,[{atom,2469,trace},{ann_type,2469,[{var,2469,'InternalTraceFlags'},{type,2469,non_neg_integer,[]}]}]},{type,2470,tuple,[{atom,2470,trap_exit},{ann_type,2470,[{var,2470,'Boolean'},{type,2470,boolean,[]}]}]}]},[]}},{seq_trace_info_returns,0} => {attribute,259,type,{seq_trace_info_returns,{type,260,union,[{type,260,tuple,[{type,260,union,[{atom,260,send},{atom,260,'receive'},{atom,260,print},{atom,260,timestamp},{atom,260,monotonic_timestamp},{atom,260,strict_monotonic_timestamp}]},{type,260,boolean,[]}]},{type,261,tuple,[{atom,261,label},{type,261,term,[]}]},{type,262,tuple,[{atom,262,serial},{type,262,tuple,[{type,262,non_neg_integer,[]},{type,262,non_neg_integer,[]}]}]},{type,263,nil,[]}]},[]}},{process_info_item,0} => {attribute,2390,type,{process_info_item,{type,2391,union,[{atom,2391,backtrace},{atom,2392,binary},{atom,2393,catchlevel},{atom,2394,current_function},{atom,2395,current_location},{atom,2396,current_stacktrace},{atom,2397,dictionary},{atom,2398,error_handler},{atom,2399,garbage_collection},{atom,2400,garbage_collection_info},{atom,2401,group_leader},{atom,2402,heap_size},{atom,2403,initial_call},{atom,2404,links},{atom,2405,last_calls},{atom,2406,memory},{atom,2407,message_queue_len},{atom,2408,messages},{atom,2409,min_heap_size},{atom,2410,min_bin_vheap_size},{atom,2411,monitored_by},{atom,2412,monitors},{atom,2413,message_queue_data},{atom,2414,priority},{atom,2415,reductions},{atom,2416,registered_name},{atom,2417,sequential_trace_token},{atom,2418,stack_size},{atom,2419,status},{atom,2420,suspending},{atom,2421,total_heap_size},{atom,2422,trace},{atom,2423,trap_exit}]},[]}},{trace_info_return,0} => {attribute,343,type,{trace_info_return,{type,344,union,[{atom,344,undefined},{type,345,tuple,[{atom,345,flags},{type,345,list,[{user_type,345,trace_info_flag,[]}]}]},{type,346,tuple,[{atom,346,tracer},{type,346,union,[{type,346,pid,[]},{type,346,port,[]},{type,346,nil,[]}]}]},{type,347,tuple,[{atom,347,tracer},{type,347,module,[]},{type,347,term,[]}]},{user_type,348,trace_info_item_result,[]},{type,349,tuple,[{atom,349,all},{type,349,union,[{type,349,list,[{user_type,349,trace_info_item_result,[]}]},{atom,349,false},{atom,349,undefined}]}]}]},[]}},{trace_info_item_result,0} => {attribute,317,type,{trace_info_item_result,{type,318,union,[{type,318,tuple,[{atom,318,traced},{type,318,union,[{atom,318,global},{atom,318,local},{atom,318,false},{atom,318,undefined}]}]},{type,319,tuple,[{atom,319,match_spec},{type,319,union,[{user_type,319,trace_match_spec,[]},{atom,319,false},{atom,319,undefined}]}]},{type,320,tuple,[{atom,320,meta},{type,320,union,[{type,320,pid,[]},{type,320,port,[]},{atom,320,false},{atom,320,undefined},{type,320,nil,[]}]}]},{type,321,tuple,[{atom,321,meta},{type,321,module,[]},{type,321,term,[]}]},{type,322,tuple,[{atom,322,meta_match_spec},{type,322,union,[{user_type,322,trace_match_spec,[]},{atom,322,false},{atom,322,undefined}]}]},{type,323,tuple,[{atom,323,call_count},{type,323,union,[{type,323,non_neg_integer,[]},{type,323,boolean,[]},{atom,323,undefined}]}]},{type,324,tuple,[{atom,324,call_time},{type,324,union,[{type,324,list,[{type,324,tuple,[{type,324,pid,[]},{type,324,non_neg_integer,[]},{type,325,non_neg_integer,[]},{type,325,non_neg_integer,[]}]}]},{type,325,boolean,[]},{atom,325,undefined}]}]}]},[]}},{trace_pattern_mfa,0} => {attribute,2700,type,{trace_pattern_mfa,{type,2701,union,[{type,2701,tuple,[{type,2701,atom,[]},{type,2701,atom,[]},{type,2701,union,[{type,2701,arity,[]},{atom,2701,'_'}]}]},{atom,2701,on_load}]},[]}},{registered_name,0} => {attribute,1393,type,{registered_name,{type,1393,atom,[]},[]}},{dist_handle,0} => {attribute,116,opaque,{dist_handle,{type,116,atom,[]},[]}},{info_list,0} => {attribute,2762,type,{info_list,{type,2762,nil,[]},[]}},{cpu_topology,0} => {attribute,2752,type,{cpu_topology,{type,2753,union,[{type,2753,list,[{ann_type,2753,[{var,2753,'LevelEntry'},{user_type,2753,level_entry,[]}]}]},{atom,2753,undefined}]},[]}},{memory_type,0} => {attribute,3977,type,{memory_type,{type,3977,union,[{atom,3977,total},{atom,3977,processes},{atom,3977,processes_used},{atom,3977,system},{atom,3978,atom},{atom,3978,atom_used},{atom,3978,binary},{atom,3978,code},{atom,3978,ets}]},[]}},{level_tag,0} => {attribute,2759,type,{level_tag,{type,2759,union,[{atom,2759,core},{atom,2759,node},{atom,2759,processor},{atom,2759,thread}]},[]}},{timestamp,0} => {attribute,89,type,{timestamp,{type,89,tuple,[{ann_type,89,[{var,89,'MegaSecs'},{type,89,non_neg_integer,[]}]},{ann_type,90,[{var,90,'Secs'},{type,90,non_neg_integer,[]}]},{ann_type,91,[{var,91,'MicroSecs'},{type,91,non_neg_integer,[]}]}]},[]}},{deprecated_time_unit,0} => {attribute,104,type,{deprecated_time_unit,{type,105,union,[{atom,105,seconds},{atom,106,milli_seconds},{atom,107,micro_seconds},{atom,108,nano_seconds}]},[]}},{spawn_opt_option,0} => {attribute,2988,type,{spawn_opt_option,{type,2989,union,[{atom,2989,link},{atom,2990,monitor},{type,2991,tuple,[{atom,2991,monitor},{ann_type,2991,[{var,2991,'MonitorOpts'},{type,2991,list,[{user_type,2991,monitor_option,[]}]}]}]},{type,2992,tuple,[{atom,2992,priority},{ann_type,2992,[{var,2992,'Level'},{user_type,2992,priority_level,[]}]}]},{type,2993,tuple,[{atom,2993,fullsweep_after},{ann_type,2993,[{var,2993,'Number'},{type,2993,non_neg_integer,[]}]}]},{type,2994,tuple,[{atom,2994,min_heap_size},{ann_type,2994,[{var,2994,'Size'},{type,2994,non_neg_integer,[]}]}]},{type,2995,tuple,[{atom,2995,min_bin_vheap_size},{ann_type,2995,[{var,2995,'VSize'},{type,2995,non_neg_integer,[]}]}]},{type,2996,tuple,[{atom,2996,max_heap_size},{ann_type,2996,[{var,2996,'Size'},{user_type,2996,max_heap_size,[]}]}]},{type,2997,tuple,[{atom,2997,message_queue_data},{ann_type,2997,[{var,2997,'MQD'},{user_type,2997,message_queue_data,[]}]}]}]},[]}},{dst,0} => {attribute,3452,type,{dst,{type,3452,union,[{type,3452,pid,[]},{type,3453,reference,[]},{type,3454,port,[]},{ann_type,3455,[{var,3455,'RegName'},{type,3455,atom,[]}]},{type,3456,tuple,[{ann_type,3456,[{var,3456,'RegName'},{type,3456,atom,[]}]},{ann_type,3456,[{var,3456,'Node'},{type,3456,node,[]}]}]}]},[]}},{bitstring_list,0} => {attribute,288,type,{bitstring_list,{type,289,maybe_improper_list,[{type,289,union,[{type,289,byte,[]},{type,289,bitstring,[]},{user_type,289,bitstring_list,[]}]},{type,289,union,[{type,289,bitstring,[]},{type,289,nil,[]}]}]},[]}},{match_variable,0} => {attribute,2699,type,{match_variable,{type,2699,atom,[]},[]}},{monitor_process_identifier,0} => {attribute,1395,type,{monitor_process_identifier,{type,1395,union,[{type,1395,pid,[]},{user_type,1395,registered_process_identifier,[]}]},[]}},{scheduler_bind_type,0} => {attribute,2596,type,{scheduler_bind_type,{type,2597,union,[{atom,2597,no_node_processor_spread},{atom,2598,no_node_thread_spread},{atom,2599,no_spread},{atom,2600,processor_spread},{atom,2601,spread},{atom,2602,thread_spread},{atom,2603,thread_no_node_processor_spread},{atom,2604,unbound}]},[]}},{trace_pattern_flag,0} => {attribute,2718,type,{trace_pattern_flag,{type,2719,union,[{atom,2719,global},{atom,2719,local},{atom,2720,meta},{type,2720,tuple,[{atom,2720,meta},{ann_type,2720,[{var,2720,'Pid'},{type,2720,pid,[]}]}]},{type,2721,tuple,[{atom,2721,meta},{ann_type,2721,[{var,2721,'TracerModule'},{type,2721,module,[]}]},{ann_type,2721,[{var,2721,'TracerState'},{type,2721,term,[]}]}]},{atom,2722,call_count},{atom,2723,call_time}]},[]}},{system_profile_option,0} => {attribute,265,type,{system_profile_option,{type,266,union,[{atom,266,exclusive},{atom,267,runnable_ports},{atom,268,runnable_procs},{atom,269,scheduler},{atom,270,timestamp},{atom,271,monotonic_timestamp},{atom,272,strict_monotonic_timestamp}]},[]}},{message_queue_data,0} => {attribute,2353,type,{message_queue_data,{type,2354,union,[{atom,2354,off_heap},{atom,2354,on_heap}]},[]}},{raise_stacktrace,0} => {attribute,282,type,{raise_stacktrace,{type,283,union,[{type,283,list,[{type,283,union,[{type,283,tuple,[{type,283,module,[]},{type,283,atom,[]},{type,283,union,[{type,283,arity,[]},{type,283,list,[{type,283,term,[]}]}]}]},{type,284,tuple,[{type,284,function,[]},{type,284,list,[{type,284,term,[]}]}]}]}]},{type,285,list,[{type,285,union,[{type,285,tuple,[{type,285,module,[]},{type,285,atom,[]},{type,285,union,[{type,285,arity,[]},{type,285,list,[{type,285,term,[]}]}]},{type,285,list,[{type,285,tuple,[{type,285,atom,[]},{type,285,term,[]}]}]}]},{type,286,tuple,[{type,286,function,[]},{type,286,list,[{type,286,term,[]}]},{type,286,list,[{type,286,tuple,[{type,286,atom,[]},{type,286,term,[]}]}]}]}]}]}]},[]}},{priority_level,0} => {attribute,2350,type,{priority_level,{type,2351,union,[{atom,2351,low},{atom,2351,normal},{atom,2351,high},{atom,2351,max}]},[]}},{level_entry,0} => {attribute,2754,type,{level_entry,{type,2755,union,[{type,2755,tuple,[{ann_type,2755,[{var,2755,'LevelTag'},{user_type,2755,level_tag,[]}]},{ann_type,2755,[{var,2755,'SubLevel'},{user_type,2755,sub_level,[]}]}]},{type,2756,tuple,[{ann_type,2756,[{var,2756,'LevelTag'},{user_type,2756,level_tag,[]}]},{ann_type,2757,[{var,2757,'InfoList'},{user_type,2757,info_list,[]}]},{ann_type,2758,[{var,2758,'SubLevel'},{user_type,2758,sub_level,[]}]}]}]},[]}}}},[{{function,abs,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2100}],[<<97,98,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,111,114,32,102,108,111,97,116,32,116,104,97,116,32,105,115,32,116,104,101,32,97,114,105,116,104,109,101,116,105,99,97,108,32,97,98,115,111,108,117,116,101,32,118,97,108,117,101,32,111,102,32>>,{code,[],[<<70,108,111,97,116>>]},<<32,111,114,32>>,{code,[],[<<73,110,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,98,115,40,45,51,46,51,51,41,46,10,51,46,51,51,10,62,32,97,98,115,40,45,51,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,54>>,signature => [{attribute,2100,spec,{{abs,1},[{type,2100,bounded_fun,[{type,2100,'fun',[{type,2100,product,[{var,2100,'Float'}]},{type,2100,float,[]}]},[{type,2101,constraint,[{atom,2101,is_subtype},[{var,2101,'Float'},{type,2101,float,[]}]]}]]},{type,2102,bounded_fun,[{type,2102,'fun',[{type,2102,product,[{var,2102,'Int'}]},{type,2102,non_neg_integer,[]}]},[{type,2103,constraint,[{atom,2103,is_subtype},[{var,2103,'Int'},{type,2103,integer,[]}]]}]]}]}}]}},{{function,adler32,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,353}],[<<97,100,108,101,114,51,50,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,117,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,97,100,108,101,114,51,50,32,99,104,101,99,107,115,117,109,32,102,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,51>>,signature => [{attribute,353,spec,{{erlang,adler32,1},[{type,353,bounded_fun,[{type,353,'fun',[{type,353,product,[{var,353,'Data'}]},{type,353,non_neg_integer,[]}]},[{type,354,constraint,[{atom,354,is_subtype},[{var,354,'Data'},{type,354,iodata,[]}]]}]]}]}}]}},{{function,adler32,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,359}],[<<97,100,108,101,114,51,50,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,110,116,105,110,117,101,115,32,99,111,109,112,117,116,105,110,103,32,116,104,101,32,97,100,108,101,114,51,50,32,99,104,101,99,107,115,117,109,32,98,121,32,99,111,109,98,105,110,105,110,103,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,104,101,99,107,115,117,109,44,32>>,{code,[],[<<79,108,100,65,100,108,101,114>>]},<<44,32,119,105,116,104,32,116,104,101,32,99,104,101,99,107,115,117,109,32,111,102,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,88,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<89>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,91,68,97,116,97,49,44,68,97,116,97,50,93,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,50>>,signature => [{attribute,359,spec,{{erlang,adler32,2},[{type,359,bounded_fun,[{type,359,'fun',[{type,359,product,[{var,359,'OldAdler'},{var,359,'Data'}]},{type,359,non_neg_integer,[]}]},[{type,360,constraint,[{atom,360,is_subtype},[{var,360,'OldAdler'},{type,360,non_neg_integer,[]}]]},{type,361,constraint,[{atom,361,is_subtype},[{var,361,'Data'},{type,361,iodata,[]}]]}]]}]}}]}},{{function,adler32_combine,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,366}],[<<97,100,108,101,114,51,50,95,99,111,109,98,105,110,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32,116,119,111,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,117,116,101,100,32,97,100,108,101,114,51,50,32,99,104,101,99,107,115,117,109,115,46,32,84,104,105,115,32,99,111,109,112,117,116,97,116,105,111,110,32,114,101,113,117,105,114,101,115,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,100,97,116,97,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32,115,101,99,111,110,100,32,99,104,101,99,107,115,117,109,32,116,111,32,98,101,32,107,110,111,119,110,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,49,41,44,10,90,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,89,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<90>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,50,41,44,10,90,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,95,99,111,109,98,105,110,101,40,88,44,89,44,105,111,108,105,115,116,95,115,105,122,101,40,68,97,116,97,50,41,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,57>>,signature => [{attribute,366,spec,{{erlang,adler32_combine,3},[{type,366,bounded_fun,[{type,366,'fun',[{type,366,product,[{var,366,'FirstAdler'},{var,366,'SecondAdler'},{var,366,'SecondSize'}]},{type,366,non_neg_integer,[]}]},[{type,367,constraint,[{atom,367,is_subtype},[{var,367,'FirstAdler'},{type,367,non_neg_integer,[]}]]},{type,368,constraint,[{atom,368,is_subtype},[{var,368,'SecondAdler'},{type,368,non_neg_integer,[]}]]},{type,369,constraint,[{atom,369,is_subtype},[{var,369,'SecondSize'},{type,369,non_neg_integer,[]}]]}]]}]}}]}},{{function,alias,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,759}],[<<97,108,105,97,115,47,49>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,56>>,equiv => {function,alias,0},signature => [{attribute,759,spec,{{alias,1},[{type,759,bounded_fun,[{type,759,'fun',[{type,759,product,[{var,759,'Opts'}]},{var,759,'Alias'}]},[{type,760,constraint,[{atom,760,is_subtype},[{var,760,'Alias'},{type,760,reference,[]}]]},{type,761,constraint,[{atom,761,is_subtype},[{var,761,'Opts'},{type,761,list,[{type,761,union,[{atom,761,explicit_unalias},{atom,761,reply}]}]}]]}]]}]}}],since => <<79,84,80,32,64,79,84,80,45,49,54,55,49,56,64>>}},{{function,alias,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,753}],[<<97,108,105,97,115,47,48>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,32,97,110,32,97,108,105,97,115,32,119,104,105,99,104,32,99,97,110,32,98,101,32,117,115,101,100,32,119,104,101,110,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,97,108,105,97,115,46,32,87,104,101,110,32,116,104,101,32,97,108,105,97,115,32,104,97,115,32,98,101,101,110,32,100,101,97,99,116,105,118,97,116,101,100,44,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,117,115,105,110,103,32,116,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,100,114,111,112,112,101,100,46,32,65,110,32,97,108,105,97,115,32,99,97,110,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,97,108,105,97,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,97,108,105,97,115,47,49>>]}]},<<46,32,67,117,114,114,101,110,116,108,121,32,97,118,97,105,108,97,98,108,101,32,111,112,116,105,111,110,115,32,102,111,114,32>>,{code,[],[<<97,108,105,97,115,47,49>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,112,108,105,99,105,116,95,117,110,97,108,105,97,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,99,97,110,32,111,110,108,121,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46,32,84,104,105,115,32,105,115,32,97,108,115,111,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,117,114,32,105,102,32,110,111,32,111,112,116,105,111,110,115,32,97,114,101,32,112,97,115,115,101,100,32,111,114,32,105,102,32>>,{code,[],[<<97,108,105,97,115,47,48>>]},<<32,105,115,32,99,97,108,108,101,100,46>>]}]},{dt,[],[{code,[],[<<114,101,112,108,121>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,119,104,101,110,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,115,101,110,116,32,118,105,97,32,116,104,101,32,97,108,105,97,115,32,105,115,32,114,101,99,101,105,118,101,100,46,32,84,104,101,32,97,108,105,97,115,32,99,97,110,32,97,108,115,111,32,115,116,105,108,108,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,56>>,signature => [{attribute,753,spec,{{alias,0},[{type,753,bounded_fun,[{type,753,'fun',[{type,753,product,[]},{var,753,'Alias'}]},[{type,754,constraint,[{atom,754,is_subtype},[{var,754,'Alias'},{type,754,reference,[]}]]}]]}]}}],since => <<79,84,80,32,64,79,84,80,45,49,54,55,49,56,64>>}},{{function,append_element,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,374}],[<<97,112,112,101,110,100,95,101,108,101,109,101,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,101,119,32,116,117,112,108,101,32,116,104,97,116,32,104,97,115,32,111,110,101,32,101,108,101,109,101,110,116,32,109,111,114,101,32,116,104,97,110,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<44,32,97,110,100,32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,105,110,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<32,102,111,108,108,111,119,101,100,32,98,121,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,115,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,46,32,83,101,109,97,110,116,105,99,97,108,108,121,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<108,105,115,116,95,116,111,95,116,117,112,108,101,40,116,117,112,108,101,95,116,111,95,108,105,115,116,40,84,117,112,108,101,49,41,32,43,43,32,91,84,101,114,109,93,41>>]},<<44,32,98,117,116,32,109,117,99,104,32,102,97,115,116,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,97,112,112,101,110,100,95,101,108,101,109,101,110,116,40,123,111,110,101,44,32,116,119,111,125,44,32,116,104,114,101,101,41,46,10,123,111,110,101,44,116,119,111,44,116,104,114,101,101,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,48>>,signature => [{attribute,374,spec,{{erlang,append_element,2},[{type,374,bounded_fun,[{type,374,'fun',[{type,374,product,[{var,374,'Tuple1'},{var,374,'Term'}]},{var,374,'Tuple2'}]},[{type,375,constraint,[{atom,375,is_subtype},[{var,375,'Tuple1'},{type,375,tuple,any}]]},{type,376,constraint,[{atom,376,is_subtype},[{var,376,'Tuple2'},{type,376,tuple,any}]]},{type,377,constraint,[{atom,377,is_subtype},[{var,377,'Term'},{type,377,term,[]}]]}]]}]}}]}},{{function,apply,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2888}],[<<97,112,112,108,121,47,50>>],#{<<101,110>> => [{p,[],[<<67,97,108,108,115,32,97,32,102,117,110,44,32,112,97,115,115,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,105,110,32>>,{code,[],[<<65,114,103,115>>]},<<32,97,115,32,97,114,103,117,109,101,110,116,115,46>>]},{p,[],[<<73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,105,110,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,107,110,111,119,110,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,44,32,116,104,101,32,99,97,108,108,32,105,115,32,98,101,116,116,101,114,32,119,114,105,116,116,101,110,32,97,115,32>>,{code,[],[<<70,117,110,40,65,114,103,49,44,32,65,114,103,50,44,32,46,46,46,32,65,114,103,78,41>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<69,97,114,108,105,101,114,44,32>>,{code,[],[<<70,117,110>>]},<<32,99,111,117,108,100,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,125>>]},<<44,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<97,112,112,108,121,40,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,103,115,41>>]},<<46,32>>,{em,[],[<<84,104,105,115,32,117,115,101,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,119,105,108,108,32,115,116,111,112,32,119,111,114,107,105,110,103,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,55>>,signature => [{attribute,2888,spec,{{apply,2},[{type,2888,bounded_fun,[{type,2888,'fun',[{type,2888,product,[{var,2888,'Fun'},{var,2888,'Args'}]},{type,2888,term,[]}]},[{type,2889,constraint,[{atom,2889,is_subtype},[{var,2889,'Fun'},{type,2889,function,[]}]]},{type,2890,constraint,[{atom,2890,is_subtype},[{var,2890,'Args'},{type,2890,list,[{type,2890,term,[]}]}]]}]]}]}}]}},{{function,apply,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2895}],[<<97,112,112,108,121,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,110,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,84,104,101,32,97,112,112,108,105,101,100,32,102,117,110,99,116,105,111,110,32,109,117,115,116,32,98,101,32,101,120,112,111,114,116,101,100,32,102,114,111,109,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46,32,84,104,101,32,97,114,105,116,121,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,112,112,108,121,40,108,105,115,116,115,44,32,114,101,118,101,114,115,101,44,32,91,91,97,44,32,98,44,32,99,93,93,41,46,10,91,99,44,98,44,97,93,10,62,32,97,112,112,108,121,40,101,114,108,97,110,103,44,32,97,116,111,109,95,116,111,95,108,105,115,116,44,32,91,39,69,114,108,97,110,103,39,93,41,46,10,34,69,114,108,97,110,103,34>>]}]},{p,[],[<<73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,107,110,111,119,110,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,44,32,116,104,101,32,99,97,108,108,32,105,115,32,98,101,116,116,101,114,32,119,114,105,116,116,101,110,32,97,115,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,40,65,114,103,49,44,32,65,114,103,50,44,32,46,46,46,44,32,65,114,103,78,41>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{a,[{href,<<107,101,114,110,101,108,58,101,114,114,111,114,95,104,97,110,100,108,101,114,35,117,110,100,101,102,105,110,101,100,95,102,117,110,99,116,105,111,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114,58,117,110,100,101,102,105,110,101,100,95,102,117,110,99,116,105,111,110,47,51>>]}]},<<32,105,115,32,99,97,108,108,101,100,32,105,102,32,116,104,101,32,97,112,112,108,105,101,100,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,101,120,112,111,114,116,101,100,46,32,84,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,99,97,110,32,98,101,32,114,101,100,101,102,105,110,101,100,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<41,46,32,73,102,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,111,114,32,105,102,32,116,104,101,32,117,115,101,114,32,104,97,115,32,114,101,100,101,102,105,110,101,100,32,116,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,115,111,32,116,104,101,32,114,101,112,108,97,99,101,109,101,110,116,32,109,111,100,117,108,101,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,110,32,101,114,114,111,114,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<117,110,100,101,102>>]},<<32,105,115,32,103,101,110,101,114,97,116,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,53>>,signature => [{attribute,2895,spec,{{apply,3},[{type,2895,bounded_fun,[{type,2895,'fun',[{type,2895,product,[{var,2895,'Module'},{var,2895,'Function'},{var,2895,'Args'}]},{type,2895,term,[]}]},[{type,2896,constraint,[{atom,2896,is_subtype},[{var,2896,'Module'},{type,2896,module,[]}]]},{type,2897,constraint,[{atom,2897,is_subtype},[{var,2897,'Function'},{type,2897,atom,[]}]]},{type,2898,constraint,[{atom,2898,is_subtype},[{var,2898,'Args'},{type,2898,list,[{type,2898,term,[]}]}]]}]]}]}}]}},{{function,atom_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,382}],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,97,116,111,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121>>]},<<32>>]},{code,[],[<<40,65,116,111,109,44,32,117,116,102,56,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,49,53>>,signature => [{attribute,382,spec,{{atom_to_binary,1},[{type,382,bounded_fun,[{type,382,'fun',[{type,382,product,[{var,382,'Atom'}]},{type,382,binary,[]}]},[{type,383,constraint,[{atom,383,is_subtype},[{var,383,'Atom'},{type,383,atom,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,atom_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,393}],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<65,116,111,109>>]},<<46,32,73,102,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<32,105,115,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,111,110,101,32,98,121,116,101,32,101,120,105,115,116,115,32,102,111,114,32,101,97,99,104,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46,32,73,102,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,111,114,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,85,84,70,45,56,32,119,104,101,114,101,32,99,104,97,114,97,99,116,101,114,115,32,109,97,121,32,114,101,113,117,105,114,101,32,109,117,108,116,105,112,108,101,32,98,121,116,101,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,50,48,44,32,97,116,111,109,115,32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,97,110,100,32>>,{code,[],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121,40,65,116,111,109,44,32,108,97,116,105,110,49,41>>]},<<32,109,97,121,32,102,97,105,108,32,105,102,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,102,111,114,32>>,{code,[],[<<65,116,111,109>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,62,32,50,53,53,46>>]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,116,111,109,95,116,111,95,98,105,110,97,114,121,40,39,69,114,108,97,110,103,39,44,32,108,97,116,105,110,49,41,46,10,60,60,34,69,114,108,97,110,103,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,53>>,signature => [{attribute,393,spec,{{atom_to_binary,2},[{type,393,bounded_fun,[{type,393,'fun',[{type,393,product,[{var,393,'Atom'},{var,393,'Encoding'}]},{type,393,binary,[]}]},[{type,394,constraint,[{atom,394,is_subtype},[{var,394,'Atom'},{type,394,atom,[]}]]},{type,395,constraint,[{atom,395,is_subtype},[{var,395,'Encoding'},{type,395,union,[{atom,395,latin1},{atom,395,unicode},{atom,395,utf8}]}]]}]]}]}}]}},{{function,atom_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,400}],[<<97,116,111,109,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,117,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<65,116,111,109>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,116,111,109,95,116,111,95,108,105,115,116,40,39,69,114,108,97,110,103,39,41,46,10,34,69,114,108,97,110,103,34>>]}]},{pre,[],[{code,[],[<<62,32,97,116,111,109,95,116,111,95,108,105,115,116,40,39,228,189,160,229,165,189,39,41,46,10,91,50,48,51,50,48,44,50,50,57,48,57,93>>]}]},{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,100,108,105,98,58,117,110,105,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,105,99,111,100,101,40,51,41>>]}]},<<32,102,111,114,32,104,111,119,32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,32,116,111,32,100,105,102,102,101,114,101,110,116,32,102,111,114,109,97,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,53,48>>,signature => [{attribute,400,spec,{{atom_to_list,1},[{type,400,bounded_fun,[{type,400,'fun',[{type,400,product,[{var,400,'Atom'}]},{type,400,string,[]}]},[{type,401,constraint,[{atom,401,is_subtype},[{var,401,'Atom'},{type,401,atom,[]}]]}]]}]}}]}},{{function,binary_part,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,407}],[<<98,105,110,97,114,121,95,112,97,114,116,47,50>>],#{<<101,110>> => [{p,[],[<<69,120,116,114,97,99,116,115,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,100,101,115,99,114,105,98,101,100,32,98,121,32>>,{code,[],[<<80,111,115,76,101,110>>]},<<46>>]},{p,[],[<<78,101,103,97,116,105,118,101,32,108,101,110,103,116,104,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,101,120,116,114,97,99,116,32,98,121,116,101,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,97,32,98,105,110,97,114,121,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<49,62,32,66,105,110,32,61,32,60,60,49,44,50,44,51,44,52,44,53,44,54,44,55,44,56,44,57,44,49,48,62,62,46,10,50,62,32,98,105,110,97,114,121,95,112,97,114,116,40,66,105,110,44,123,98,121,116,101,95,115,105,122,101,40,66,105,110,41,44,32,45,53,125,41,46,10,60,60,54,44,55,44,56,44,57,44,49,48,62,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,115,76,101,110>>]},<<32,105,110,32,97,110,121,32,119,97,121,32,114,101,102,101,114,101,110,99,101,115,32,111,117,116,115,105,100,101,32,116,104,101,32,98,105,110,97,114,121,46>>]},{p,[],[{code,[],[<<83,116,97,114,116>>]},<<32,105,115,32,122,101,114,111,45,98,97,115,101,100,44,32,116,104,97,116,32,105,115,58>>]},{pre,[],[{code,[],[<<49,62,32,66,105,110,32,61,32,60,60,49,44,50,44,51,62,62,10,50,62,32,98,105,110,97,114,121,95,112,97,114,116,40,66,105,110,44,123,48,44,50,125,41,46,10,60,60,49,44,50,62,62>>]}]},{p,[],[<<70,111,114,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<80,111,115,76,101,110>>]},<<32,115,101,109,97,110,116,105,99,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,100,108,105,98,58,98,105,110,97,114,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<98,105,110,97,114,121,40,51,41>>]}]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,54,56>>,signature => [{attribute,407,spec,{{binary_part,2},[{type,407,bounded_fun,[{type,407,'fun',[{type,407,product,[{var,407,'Subject'},{var,407,'PosLen'}]},{type,407,binary,[]}]},[{type,408,constraint,[{atom,408,is_subtype},[{var,408,'Subject'},{type,408,binary,[]}]]},{type,409,constraint,[{atom,409,is_subtype},[{var,409,'PosLen'},{type,409,tuple,[{ann_type,409,[{var,409,'Start'},{type,409,non_neg_integer,[]}]},{ann_type,409,[{var,409,'Length'},{type,409,integer,[]}]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,binary_part,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,415}],[<<98,105,110,97,114,121,95,112,97,114,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<98,105,110,97,114,121,95,112,97,114,116,40,83,117,98,106,101,99,116,44,32,123,83,116,97,114,116,44,32,76,101,110,103,116,104,125,41>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,57,51>>,signature => [{attribute,415,spec,{{binary_part,3},[{type,415,bounded_fun,[{type,415,'fun',[{type,415,product,[{var,415,'Subject'},{var,415,'Start'},{var,415,'Length'}]},{type,415,binary,[]}]},[{type,416,constraint,[{atom,416,is_subtype},[{var,416,'Subject'},{type,416,binary,[]}]]},{type,417,constraint,[{atom,417,is_subtype},[{var,417,'Start'},{type,417,non_neg_integer,[]}]]},{type,418,constraint,[{atom,418,is_subtype},[{var,418,'Length'},{type,418,integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,binary_to_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,423}],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109>>]},<<32>>]},{code,[],[<<40,66,105,110,97,114,121,44,32,117,116,102,56,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,51>>,signature => [{attribute,423,spec,{{binary_to_atom,1},[{type,423,bounded_fun,[{type,423,'fun',[{type,423,product,[{var,423,'Binary'}]},{type,423,atom,[]}]},[{type,424,constraint,[{atom,424,is_subtype},[{var,424,'Binary'},{type,424,binary,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,binary_to_atom,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,433}],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46,32,73,102,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,111,114,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,116,104,101,32,98,105,110,97,114,121,32,109,117,115,116,32,99,111,110,116,97,105,110,32,118,97,108,105,100,32,85,84,70,45,56,32,115,101,113,117,101,110,99,101,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,50,48,44,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,40,66,105,110,97,114,121,44,32,117,116,102,56,41>>]},<<32,105,115,32,99,97,112,97,98,108,101,32,111,102,32,101,110,99,111,100,105,110,103,32,97,110,121,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,46,32,69,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,119,111,117,108,100,32,102,97,105,108,32,105,102,32,116,104,101,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,101,100,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,62,32,50,53,53,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,85,110,105,99,111,100,101,32,115,117,112,112,111,114,116,32,105,110,32,97,116,111,109,115,44,32,115,101,101,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116,35,117,116,102,56,95,97,116,111,109,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,116,101,32,111,110,32,85,84,70,45,56,32,101,110,99,111,100,101,100,32,97,116,111,109,115>>]},<<32,105,110,32,115,101,99,116,105,111,110,32,34,69,120,116,101,114,110,97,108,32,84,101,114,109,32,70,111,114,109,97,116,34,32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,97,110,32,97,116,111,109,32,110,97,109,101,32,105,115,32,108,105,109,105,116,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,99,111,110,102,105,103,117,114,97,98,108,101,32,108,105,109,105,116,32,111,110,32,104,111,119,32,109,97,110,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,101,120,105,115,116,32,97,110,100,32,97,116,111,109,115,32,97,114,101,32,110,111,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,99,111,110,115,105,100,101,114,32,119,104,101,116,104,101,114,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,50>>]},<<32,105,115,32,97,32,98,101,116,116,101,114,32,111,112,116,105,111,110,32,116,104,97,110,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,97,116,111,109,40,60,60,34,69,114,108,97,110,103,34,62,62,44,32,108,97,116,105,110,49,41,46,10,39,69,114,108,97,110,103,39>>]}]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,97,116,111,109,40,60,60,49,48,50,52,47,117,116,102,56,62,62,44,32,117,116,102,56,41,46,10,39,208,128,39>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,49,51>>,signature => [{attribute,433,spec,{{binary_to_atom,2},[{type,433,bounded_fun,[{type,433,'fun',[{type,433,product,[{var,433,'Binary'},{var,433,'Encoding'}]},{type,433,atom,[]}]},[{type,434,constraint,[{atom,434,is_subtype},[{var,434,'Binary'},{type,434,binary,[]}]]},{type,435,constraint,[{atom,435,is_subtype},[{var,435,'Encoding'},{type,435,union,[{atom,435,latin1},{atom,435,unicode},{atom,435,utf8}]}]]}]]}]}}]}},{{function,binary_to_existing_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,440}],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109>>]}]},<<32>>,{code,[],[<<40,66,105,110,97,114,121,44,32,117,116,102,56,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,54>>,signature => [{attribute,440,spec,{{binary_to_existing_atom,1},[{type,440,bounded_fun,[{type,440,'fun',[{type,440,product,[{var,440,'Binary'}]},{type,440,atom,[]}]},[{type,441,constraint,[{atom,441,is_subtype},[{var,441,'Binary'},{type,441,binary,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,binary_to_existing_atom,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,450}],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,50>>],#{<<101,110>> => [{p,[],[<<65,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]}]},<<44,32,98,117,116,32,116,104,101,32,97,116,111,109,32,109,117,115,116,32,101,120,105,115,116,46>>]},{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,104,97,115,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,111,110,102,105,103,117,114,97,98,108,101,32,108,105,109,105,116>>]},<<32,102,111,114,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,101,120,105,115,116,44,32,97,110,100,32,97,116,111,109,115,32,97,114,101,32,110,111,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32,105,115,32,110,111,116,32,115,97,102,101,32,116,111,32,99,114,101,97,116,101,32,109,97,110,121,32,97,116,111,109,115,32,102,114,111,109,32,98,105,110,97,114,105,101,115,32,116,104,97,116,32,99,111,109,101,32,102,114,111,109,32,97,110,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,105,108,101,32,102,101,116,99,104,101,100,32,102,114,111,109,32,116,104,101,32,73,110,116,101,114,110,101,116,41,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]}]},<<46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,104,117,115,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,111,112,116,105,111,110,32,119,104,101,110,32,116,104,101,32,105,110,112,117,116,32,98,105,110,97,114,121,32,99,111,109,101,115,32,102,114,111,109,32,97,110,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,46>>]},{p,[],[<<65,110,32,97,116,111,109,32,101,120,105,115,116,115,32,105,110,32,97,110,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,119,104,101,110,32,105,110,99,108,117,100,101,100,32,105,110,32,97,32,108,111,97,100,101,100,32,69,114,108,97,110,103,32,109,111,100,117,108,101,32,111,114,32,119,104,101,110,32,99,114,101,97,116,101,100,32,112,114,111,103,114,97,109,109,97,116,105,99,97,108,108,121,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,98,121,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]},<<41,46,32,83,101,101,32,116,104,101,32,110,101,120,116,32,110,111,116,101,32,102,111,114,32,97,110,32,101,120,97,109,112,108,101,32,111,102,32,119,104,101,110,32,97,110,32,97,116,111,109,32,101,120,105,115,116,115,32,105,110,32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,32,102,111,114,32,97,110,32,69,114,108,97,110,103,32,109,111,100,117,108,101,32,98,117,116,32,110,111,116,32,105,110,32,116,104,101,32,99,111,109,112,105,108,101,100,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,115,97,109,101,32,109,111,100,117,108,101,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,97,116,111,109,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,99,111,109,112,105,108,101,114,32,109,97,121,32,111,112,116,105,109,105,122,101,32,97,119,97,121,32,97,116,111,109,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,111,109,112,105,108,101,114,32,119,105,108,108,32,114,101,119,114,105,116,101,32>>,{code,[],[<<97,116,111,109,95,116,111,95,108,105,115,116,40,115,111,109,101,95,97,116,111,109,41>>]},<<32,116,111,32>>,{code,[],[<<34,115,111,109,101,95,97,116,111,109,34>>]},<<46,32,73,102,32,116,104,97,116,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,104,101,32,111,110,108,121,32,109,101,110,116,105,111,110,32,111,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,111,109,101,95,97,116,111,109>>]},<<32,105,110,32,116,104,101,32,99,111,110,116,97,105,110,105,110,103,32,109,111,100,117,108,101,44,32,116,104,101,32,97,116,111,109,32,119,105,108,108,32,110,111,116,32,98,101,32,99,114,101,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,108,111,97,100,101,100,44,32,97,110,100,32,97,32,115,117,98,115,101,113,117,101,110,116,32,99,97,108,108,32,116,111,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,40,60,60,34,115,111,109,101,95,97,116,111,109,34,62,62,44,32,117,116,102,56,41>>]},<<32,119,105,108,108,32,102,97,105,108,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,97,110,32,97,116,111,109,32,110,97,109,101,32,105,115,32,108,105,109,105,116,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,55>>,signature => [{attribute,450,spec,{{binary_to_existing_atom,2},[{type,450,bounded_fun,[{type,450,'fun',[{type,450,product,[{var,450,'Binary'},{var,450,'Encoding'}]},{type,450,atom,[]}]},[{type,451,constraint,[{atom,451,is_subtype},[{var,451,'Binary'},{type,451,binary,[]}]]},{type,452,constraint,[{atom,452,is_subtype},[{var,452,'Encoding'},{type,452,union,[{atom,452,latin1},{atom,452,unicode},{atom,452,utf8}]}]]}]]}]}}]}},{{function,binary_to_float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,457}],[<<98,105,110,97,114,121,95,116,111,95,102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,102,108,111,97,116,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,102,108,111,97,116,40,60,60,34,50,46,50,48,49,55,55,54,52,101,43,48,34,62,62,41,46,10,50,46,50,48,49,55,55,54,52>>]}]},{p,[],[<<84,104,101,32,102,108,111,97,116,32,115,116,114,105,110,103,32,102,111,114,109,97,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,102,111,114,109,97,116,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,102,108,111,97,116,32,108,105,116,101,114,97,108,115>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,97,116,32,117,110,100,101,114,115,99,111,114,101,115,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,102,108,111,97,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,49,51>>,signature => [{attribute,457,spec,{{binary_to_float,1},[{type,457,bounded_fun,[{type,457,'fun',[{type,457,product,[{var,457,'Binary'}]},{type,457,float,[]}]},[{type,458,constraint,[{atom,458,is_subtype},[{var,458,'Binary'},{type,458,binary,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,binary_to_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,463}],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,40,60,60,34,49,50,51,34,62,62,41,46,10,49,50,51>>]}]},{p,[],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,49>>]},<<32,97,99,99,101,112,116,115,32,116,104,101,32,115,97,109,101,32,115,116,114,105,110,103,32,102,111,114,109,97,116,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,49>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,51,49>>,signature => [{attribute,463,spec,{{binary_to_integer,1},[{type,463,bounded_fun,[{type,463,'fun',[{type,463,product,[{var,463,'Binary'}]},{type,463,integer,[]}]},[{type,464,constraint,[{atom,464,is_subtype},[{var,464,'Binary'},{type,464,binary,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,binary_to_integer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,469}],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,40,60,60,34,51,70,70,34,62,62,44,32,49,54,41,46,10,49,48,50,51>>]}]},{p,[],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,50>>]},<<32,97,99,99,101,112,116,115,32,116,104,101,32,115,97,109,101,32,115,116,114,105,110,103,32,102,111,114,109,97,116,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,50>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,56>>,signature => [{attribute,469,spec,{{binary_to_integer,2},[{type,469,bounded_fun,[{type,469,'fun',[{type,469,product,[{var,469,'Binary'},{var,469,'Base'}]},{type,469,integer,[]}]},[{type,470,constraint,[{atom,470,is_subtype},[{var,470,'Binary'},{type,470,binary,[]}]]},{type,471,constraint,[{atom,471,is_subtype},[{var,471,'Base'},{type,471,range,[{integer,471,2},{integer,471,36}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,binary_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,476}],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,121,116,101,115,32,111,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,54,54>>,signature => [{attribute,476,spec,{{binary_to_list,1},[{type,476,bounded_fun,[{type,476,'fun',[{type,476,product,[{var,476,'Binary'}]},{type,476,list,[{type,476,byte,[]}]}]},[{type,477,constraint,[{atom,477,is_subtype},[{var,477,'Binary'},{type,477,binary,[]}]]}]]}]}}]}},{{function,binary_to_list,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,482}],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<65,115,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,49>>]},<<44,32,98,117,116,32,114,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,121,116,101,115,32,102,114,111,109,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<83,116,97,114,116>>]},<<32,116,111,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<83,116,111,112>>]},<<32,105,110,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46,32,84,104,101,32,112,111,115,105,116,105,111,110,115,32,105,110,32,116,104,101,32,98,105,110,97,114,121,32,97,114,101,32,110,117,109,98,101,114,101,100,32,115,116,97,114,116,105,110,103,32,102,114,111,109,32,49,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{em,[],[<<84,104,101,32,111,110,101,45,98,97,115,101,100,32,105,110,100,101,120,105,110,103,32,102,111,114,32,98,105,110,97,114,105,101,115,32,117,115,101,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46>>]},<<32,78,101,119,32,99,111,100,101,32,105,115,32,116,111,32,117,115,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,98,105,110,97,114,121,35,98,105,110,95,116,111,95,108,105,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,58,98,105,110,95,116,111,95,108,105,115,116,47,51>>]}]},<<32,105,110,32,83,84,68,76,73,66,32,105,110,115,116,101,97,100,46,32,65,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,109,111,100,117,108,101,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,99,111,110,115,105,115,116,101,110,116,108,121,32,117,115,101,32,122,101,114,111,45,98,97,115,101,100,32,105,110,100,101,120,105,110,103,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,53>>,signature => [{attribute,482,spec,{{binary_to_list,3},[{type,482,bounded_fun,[{type,482,'fun',[{type,482,product,[{var,482,'Binary'},{var,482,'Start'},{var,482,'Stop'}]},{type,482,list,[{type,482,byte,[]}]}]},[{type,483,constraint,[{atom,483,is_subtype},[{var,483,'Binary'},{type,483,binary,[]}]]},{type,484,constraint,[{atom,484,is_subtype},[{var,484,'Start'},{type,484,pos_integer,[]}]]},{type,485,constraint,[{atom,485,is_subtype},[{var,485,'Stop'},{type,485,pos_integer,[]}]]}]]}]}}]}},{{function,binary_to_term,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,490}],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,69,114,108,97,110,103,32,116,101,114,109,32,116,104,97,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,100,101,99,111,100,105,110,103,32,98,105,110,97,114,121,32,111,98,106,101,99,116,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,119,104,105,99,104,32,109,117,115,116,32,98,101,32,101,110,99,111,100,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116>>]},<<46>>]},{pre,[],[{code,[],[<<62,32,66,105,110,32,61,32,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,104,101,108,108,111,41,46,10,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,62,62,10,62,32,104,101,108,108,111,32,61,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,66,105,110,41,46,10,104,101,108,108,111>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<87,104,101,110,32,100,101,99,111,100,105,110,103,32,98,105,110,97,114,105,101,115,32,102,114,111,109,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,115,44,32,99,111,110,115,105,100,101,114,32,117,115,105,110,103,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>]},<<32,116,111,32,112,114,101,118,101,110,116,32,68,101,110,105,97,108,32,111,102,32,83,101,114,118,105,99,101,32,97,116,116,97,99,107,115,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,55>>,signature => [{attribute,490,spec,{{binary_to_term,1},[{type,490,bounded_fun,[{type,490,'fun',[{type,490,product,[{var,490,'Binary'}]},{type,490,term,[]}]},[{type,491,constraint,[{atom,491,is_subtype},[{var,491,'Binary'},{user_type,491,ext_binary,[]}]]}]]}]}}]}},{{function,binary_to_term,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,496}],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>],#{<<101,110>> => [{p,[],[<<65,115,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]},<<44,32,98,117,116,32,116,97,107,101,115,32,116,104,101,115,101,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,97,102,101>>]}]},{dd,[],[{p,[],[<<85,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,119,104,101,110,32,114,101,99,101,105,118,105,110,103,32,98,105,110,97,114,105,101,115,32,102,114,111,109,32,97,110,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,46>>]},{p,[],[<<87,104,101,110,32,101,110,97,98,108,101,100,44,32,105,116,32,112,114,101,118,101,110,116,115,32,100,101,99,111,100,105,110,103,32,100,97,116,97,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,97,116,116,97,99,107,32,116,104,101,32,69,114,108,97,110,103,32,115,121,115,116,101,109,46,32,73,110,32,116,104,101,32,101,118,101,110,116,32,111,102,32,114,101,99,101,105,118,105,110,103,32,117,110,115,97,102,101,32,100,97,116,97,44,32,100,101,99,111,100,105,110,103,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,114,114,111,114,46>>]},{p,[],[<<84,104,105,115,32,112,114,101,118,101,110,116,115,32,99,114,101,97,116,105,111,110,32,111,102,32,110,101,119,32,97,116,111,109,115,32,100,105,114,101,99,116,108,121,44,32,99,114,101,97,116,105,111,110,32,111,102,32,110,101,119,32,97,116,111,109,115,32,105,110,100,105,114,101,99,116,108,121,32,40,97,115,32,116,104,101,121,32,97,114,101,32,101,109,98,101,100,100,101,100,32,105,110,32,99,101,114,116,97,105,110,32,115,116,114,117,99,116,117,114,101,115,44,32,115,117,99,104,32,97,115,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,44,32,114,101,102,115,44,32,97,110,100,32,102,117,110,115,41,44,32,97,110,100,32,99,114,101,97,116,105,111,110,32,111,102,32,110,101,119,32,101,120,116,101,114,110,97,108,32,102,117,110,99,116,105,111,110,32,114,101,102,101,114,101,110,99,101,115,46,32,78,111,110,101,32,111,102,32,116,104,111,115,101,32,114,101,115,111,117,114,99,101,115,32,97,114,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,44,32,115,111,32,117,110,99,104,101,99,107,101,100,32,99,114,101,97,116,105,111,110,32,111,102,32,116,104,101,109,32,99,97,110,32,101,120,104,97,117,115,116,32,97,118,97,105,108,97,98,108,101,32,109,101,109,111,114,121,46>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,60,60,49,51,49,44,49,48,48,44,48,44,53,44,34,104,101,108,108,111,34,62,62,44,32,91,115,97,102,101,93,41,46,10,42,42,32,101,120,99,101,112,116,105,111,110,32,101,114,114,111,114,58,32,98,97,100,32,97,114,103,117,109,101,110,116,10,62,32,104,101,108,108,111,46,10,104,101,108,108,111,10,62,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,60,60,49,51,49,44,49,48,48,44,48,44,53,44,34,104,101,108,108,111,34,62,62,44,32,91,115,97,102,101,93,41,46,10,104,101,108,108,111>>]}]}]},{dt,[],[{code,[],[<<117,115,101,100>>]}]},{dd,[],[{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<123,84,101,114,109,44,32,85,115,101,100,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<85,115,101,100>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,97,99,116,117,97,108,108,121,32,114,101,97,100,32,102,114,111,109,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46>>]},{pre,[],[{code,[],[<<62,32,73,110,112,117,116,32,61,32,60,60,49,51,49,44,49,48,48,44,48,44,53,44,34,104,101,108,108,111,34,44,34,119,111,114,108,100,34,62,62,46,10,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,44,49,49,57,44,49,49,49,44,49,49,52,44,49,48,56,44,49,48,48,62,62,10,62,32,123,84,101,114,109,44,32,85,115,101,100,125,32,61,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,73,110,112,117,116,44,32,91,117,115,101,100,93,41,46,10,123,104,101,108,108,111,44,32,57,125,10,62,32,115,112,108,105,116,95,98,105,110,97,114,121,40,73,110,112,117,116,44,32,85,115,101,100,41,46,10,123,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,62,62,44,32,60,60,34,119,111,114,108,100,34,62,62,125>>]}]}]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<115,97,102,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,110,100,32,117,110,115,97,102,101,32,100,97,116,97,32,105,115,32,100,101,99,111,100,101,100,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,51>>,signature => [{attribute,496,spec,{{binary_to_term,2},[{type,496,bounded_fun,[{type,496,'fun',[{type,496,product,[{var,496,'Binary'},{var,496,'Opts'}]},{type,496,union,[{type,496,term,[]},{type,496,tuple,[{type,496,term,[]},{var,496,'Used'}]}]}]},[{type,497,constraint,[{atom,497,is_subtype},[{var,497,'Binary'},{user_type,497,ext_binary,[]}]]},{type,498,constraint,[{atom,498,is_subtype},[{var,498,'Opt'},{type,498,union,[{atom,498,safe},{atom,498,used}]}]]},{type,499,constraint,[{atom,499,is_subtype},[{var,499,'Opts'},{type,499,list,[{var,499,'Opt'}]}]]},{type,500,constraint,[{atom,500,is_subtype},[{var,500,'Used'},{type,500,pos_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,51,66,48,52>>}},{{function,bit_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,506}],[<<98,105,116,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,116,104,97,116,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98,105,116,115,32,111,102,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,116,95,115,105,122,101,40,60,60,52,51,51,58,49,54,44,51,58,51,62,62,41,46,10,49,57,10,62,32,98,105,116,95,115,105,122,101,40,60,60,49,44,50,44,51,62,62,41,46,10,50,52>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,55,55>>,signature => [{attribute,506,spec,{{bit_size,1},[{type,506,bounded_fun,[{type,506,'fun',[{type,506,product,[{var,506,'Bitstring'}]},{type,506,non_neg_integer,[]}]},[{type,507,constraint,[{atom,507,is_subtype},[{var,507,'Bitstring'},{type,507,bitstring,[]}]]}]]}]}}]}},{{function,bitstring_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,512}],[<<98,105,116,115,116,114,105,110,103,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,121,116,101,115,32,111,102,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,105,116,115,32,105,110,32,116,104,101,32,98,105,110,97,114,121,32,105,115,32,110,111,116,32,100,105,118,105,115,105,98,108,101,32,98,121,32,56,44,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,108,105,115,116,32,105,115,32,97,32,98,105,116,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,49,45,55,32,98,105,116,115,46,32,69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,98,105,116,115,116,114,105,110,103,95,116,111,95,108,105,115,116,40,60,60,52,51,51,58,49,54,62,62,41,46,10,91,49,44,49,55,55,93>>]}]},{pre,[],[{code,[],[<<62,32,98,105,116,115,116,114,105,110,103,95,116,111,95,108,105,115,116,40,60,60,52,51,51,58,49,54,44,51,58,51,62,62,41,46,10,91,49,44,49,55,55,44,60,60,51,58,51,62,62,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,50>>,signature => [{attribute,512,spec,{{bitstring_to_list,1},[{type,512,bounded_fun,[{type,512,'fun',[{type,512,product,[{var,512,'Bitstring'}]},{type,512,list,[{type,512,union,[{type,512,byte,[]},{type,512,bitstring,[]}]}]}]},[{type,513,constraint,[{atom,513,is_subtype},[{var,513,'Bitstring'},{type,513,bitstring,[]}]]}]]}]}}]}},{{function,bump_reductions,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,518}],[<<98,117,109,112,95,114,101,100,117,99,116,105,111,110,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,105,115,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,32,102,117,110,99,116,105,111,110,32,105,110,99,114,101,109,101,110,116,115,32,116,104,101,32,114,101,100,117,99,116,105,111,110,32,99,111,117,110,116,101,114,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,73,110,32,116,104,101,32,66,101,97,109,32,101,109,117,108,97,116,111,114,44,32,116,104,101,32,114,101,100,117,99,116,105,111,110,32,99,111,117,110,116,101,114,32,105,115,32,110,111,114,109,97,108,108,121,32,105,110,99,114,101,109,101,110,116,101,100,32,98,121,32,111,110,101,32,102,111,114,32,101,97,99,104,32,102,117,110,99,116,105,111,110,32,97,110,100,32,66,73,70,32,99,97,108,108,46,32,65,32,99,111,110,116,101,120,116,32,115,119,105,116,99,104,32,105,115,32,102,111,114,99,101,100,32,119,104,101,110,32,116,104,101,32,99,111,117,110,116,101,114,32,114,101,97,99,104,101,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,114,101,100,117,99,116,105,111,110,115,32,102,111,114,32,97,32,112,114,111,99,101,115,115,32,40,52,48,48,48,32,114,101,100,117,99,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103,47,79,84,80,32,49,57,46,50,32,97,110,100,32,108,97,116,101,114,41,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,99,97,110,32,98,101,32,114,101,109,111,118,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,66,101,97,109,32,109,97,99,104,105,110,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,119,97,114,110,105,110,103,46,32,73,116,32,105,115,32,117,110,108,105,107,101,108,121,32,116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,32,105,110,32,111,116,104,101,114,32,69,114,108,97,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,48,57>>,signature => [{attribute,518,spec,{{erlang,bump_reductions,1},[{type,518,bounded_fun,[{type,518,'fun',[{type,518,product,[{var,518,'Reductions'}]},{atom,518,true}]},[{type,519,constraint,[{atom,519,is_subtype},[{var,519,'Reductions'},{type,519,pos_integer,[]}]]}]]}]}}]}},{{function,byte_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,525}],[<<98,121,116,101,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,116,104,97,116,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,110,101,101,100,101,100,32,116,111,32,99,111,110,116,97,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<46,32,84,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,105,116,115,32,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<32,105,115,32,110,111,116,32,100,105,118,105,115,105,98,108,101,32,98,121,32,56,44,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,115,32,114,111,117,110,100,101,100,32>>,{em,[],[<<117,112>>]},<<46,32,69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,98,121,116,101,95,115,105,122,101,40,60,60,52,51,51,58,49,54,44,51,58,51,62,62,41,46,10,51,10,62,32,98,121,116,101,95,115,105,122,101,40,60,60,49,44,50,44,51,62,62,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,55>>,signature => [{attribute,525,spec,{{byte_size,1},[{type,525,bounded_fun,[{type,525,'fun',[{type,525,product,[{var,525,'Bitstring'}]},{type,525,non_neg_integer,[]}]},[{type,526,constraint,[{atom,526,is_subtype},[{var,526,'Bitstring'},{type,526,bitstring,[]}]]}]]}]}}]}},{{function,cancel_timer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,537}],[<<99,97,110,99,101,108,95,116,105,109,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<67,97,110,99,101,108,115,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,40,84,105,109,101,114,82,101,102,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,52>>,signature => [{attribute,537,spec,{{erlang,cancel_timer,1},[{type,537,bounded_fun,[{type,537,'fun',[{type,537,product,[{var,537,'TimerRef'}]},{var,537,'Result'}]},[{type,538,constraint,[{atom,538,is_subtype},[{var,538,'TimerRef'},{type,538,reference,[]}]]},{type,539,constraint,[{atom,539,is_subtype},[{var,539,'Time'},{type,539,non_neg_integer,[]}]]},{type,540,constraint,[{atom,540,is_subtype},[{var,540,'Result'},{type,540,union,[{var,540,'Time'},{atom,540,false}]}]]}]]}]}}]}},{{function,cancel_timer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,546}],[<<99,97,110,99,101,108,95,116,105,109,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<67,97,110,99,101,108,115,32,97,32,116,105,109,101,114,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,99,114,101,97,116,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114>>]}]},<<46,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,105,100,101,110,116,105,102,105,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,119,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32,116,104,101,32,66,73,70,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,116,105,109,101,114,46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,65,115,121,110,99,125>>]}]},{dd,[],[{p,[],[<<65,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,99,97,110,99,101,108,108,97,116,105,111,110,46,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,119,104,105,99,104,32,99,97,117,115,101,115,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100,32,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,99,97,110,99,101,108,32,111,112,101,114,97,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,84,104,97,116,32,105,115,44,32>>,{code,[],[<<99,97,110,99,101,108,95,116,105,109,101,114,40,41>>]},<<32,115,101,110,100,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,99,97,110,99,101,108,108,97,116,105,111,110,32,116,111,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,116,104,101,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,105,110,102,111,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<82,101,113,117,101,115,116,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,111,102,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,119,104,105,99,104,32,109,101,97,110,115,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,103,105,118,101,110,46,32,87,104,101,110,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,32,105,115,32,103,105,118,101,110,46>>]},{ul,[],[{li,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<58,32,105,102,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,40,41>>]},<<46,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<111,107>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{li,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<58,32,105,102,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,99,97,110,99,101,108,95,116,105,109,101,114,44,32,84,105,109,101,114,82,101,102,44,32,82,101,115,117,108,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,40,41>>]},<<32,119,104,101,110,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,101,114,102,111,114,109,101,100,44,32,111,116,104,101,114,119,105,115,101,32,110,111,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,46>>]}]}]}]}]},{p,[],[<<77,111,114,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,109,97,121,32,98,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,105,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,32,108,101,102,116,32,117,110,116,105,108,32,116,104,101,32,99,97,110,99,101,108,101,100,32,116,105,109,101,114,32,119,111,117,108,100,32,104,97,118,101,32,101,120,112,105,114,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,97,32,116,105,109,101,114,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,99,111,117,108,100,32,110,111,116,32,98,101,32,102,111,117,110,100,46,32,84,104,105,115,32,99,97,110,32,98,101,32,101,105,116,104,101,114,32,98,101,99,97,117,115,101,32,116,104,101,32,116,105,109,101,114,32,104,97,100,32,101,120,112,105,114,101,100,44,32,97,108,114,101,97,100,121,32,104,97,100,32,98,101,101,110,32,99,97,110,99,101,108,101,100,44,32,111,114,32,98,101,99,97,117,115,101,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,110,101,118,101,114,32,99,111,114,114,101,115,112,111,110,100,101,100,32,116,111,32,97,32,116,105,109,101,114,46,32,69,118,101,110,32,105,102,32,116,104,101,32,116,105,109,101,114,32,104,97,100,32,101,120,112,105,114,101,100,44,32,105,116,32,100,111,101,115,32,110,111,116,32,116,101,108,108,32,121,111,117,32,105,102,32,116,104,101,32,116,105,109,101,45,111,117,116,32,109,101,115,115,97,103,101,32,104,97,115,32,97,114,114,105,118,101,100,32,97,116,32,105,116,115,32,100,101,115,116,105,110,97,116,105,111,110,32,121,101,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,32,99,97,110,32,98,101,32,99,111,45,108,111,99,97,116,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32,115,99,104,101,100,117,108,101,114,32,116,104,97,110,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32,73,102,32,115,111,44,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,97,107,101,115,32,109,117,99,104,32,108,111,110,103,101,114,32,116,105,109,101,32,116,104,97,110,32,105,102,32,105,116,32,105,115,32,108,111,99,97,116,101,100,32,108,111,99,97,108,108,121,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,105,110,32,99,114,105,116,105,99,97,108,32,112,97,116,104,44,32,97,110,100,32,99,97,110,32,100,111,32,111,116,104,101,114,32,116,104,105,110,103,115,32,119,104,105,108,101,32,119,97,105,116,105,110,103,32,102,111,114,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,44,32,111,114,32,105,115,32,110,111,116,32,105,110,116,101,114,101,115,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,44,32,121,111,117,32,119,97,110,116,32,116,111,32,117,115,101,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,116,114,117,101,125>>]},<<46,32,73,102,32,117,115,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,102,97,108,115,101,125>>]},<<44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,98,108,111,99,107,115,32,117,110,116,105,108,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,101,114,102,111,114,109,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,47,52>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,47,52>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,97,100,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,52>>,signature => [{attribute,546,spec,{{erlang,cancel_timer,2},[{type,546,bounded_fun,[{type,546,'fun',[{type,546,product,[{var,546,'TimerRef'},{var,546,'Options'}]},{type,546,union,[{var,546,'Result'},{atom,546,ok}]}]},[{type,547,constraint,[{atom,547,is_subtype},[{var,547,'TimerRef'},{type,547,reference,[]}]]},{type,548,constraint,[{atom,548,is_subtype},[{var,548,'Async'},{type,548,boolean,[]}]]},{type,549,constraint,[{atom,549,is_subtype},[{var,549,'Info'},{type,549,boolean,[]}]]},{type,550,constraint,[{atom,550,is_subtype},[{var,550,'Option'},{type,550,union,[{type,550,tuple,[{atom,550,async},{var,550,'Async'}]},{type,550,tuple,[{atom,550,info},{var,550,'Info'}]}]}]]},{type,551,constraint,[{atom,551,is_subtype},[{var,551,'Options'},{type,551,list,[{var,551,'Option'}]}]]},{type,552,constraint,[{atom,552,is_subtype},[{var,552,'Time'},{type,552,non_neg_integer,[]}]]},{type,553,constraint,[{atom,553,is_subtype},[{var,553,'Result'},{type,553,union,[{var,553,'Time'},{atom,553,false}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,ceil,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,560}],[<<99,101,105,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,105,110,116,101,103,101,114,32,110,111,116,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,99,101,105,108,40,53,46,53,41,46,10,54>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,51,54>>,signature => [{attribute,560,spec,{{ceil,1},[{type,560,bounded_fun,[{type,560,'fun',[{type,560,product,[{var,560,'Number'}]},{type,560,integer,[]}]},[{type,561,constraint,[{atom,561,is_subtype},[{var,561,'Number'},{type,561,number,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,check_old_code,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,566}],[<<99,104,101,99,107,95,111,108,100,95,99,111,100,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,104,97,115,32,111,108,100,32,99,111,100,101,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,52,57>>,signature => [{attribute,566,spec,{{check_old_code,1},[{type,566,bounded_fun,[{type,566,'fun',[{type,566,product,[{var,566,'Module'}]},{type,566,boolean,[]}]},[{type,567,constraint,[{atom,567,is_subtype},[{var,567,'Module'},{type,567,module,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66,48,52>>}},{{function,check_process_code,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,572}],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,40,80,105,100,44,32,77,111,100,117,108,101,44,32,91,93,41>>]},<<32>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,54,48>>,signature => [{attribute,572,spec,{{check_process_code,2},[{type,572,bounded_fun,[{type,572,'fun',[{type,572,product,[{var,572,'Pid'},{var,572,'Module'}]},{var,572,'CheckResult'}]},[{type,573,constraint,[{atom,573,is_subtype},[{var,573,'Pid'},{type,573,pid,[]}]]},{type,574,constraint,[{atom,574,is_subtype},[{var,574,'Module'},{type,574,module,[]}]]},{type,575,constraint,[{atom,575,is_subtype},[{var,575,'CheckResult'},{type,575,boolean,[]}]]}]]}]}}]}},{{function,check_process_code,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,584}],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,104,101,99,107,115,32,105,102,32,116,104,101,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,101,99,117,116,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,98,111,111,108,101,97,110,40,41,125>>]}]},{dd,[],[{p,[],[<<68,101,116,101,114,109,105,110,101,115,32,105,102,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,97,108,108,111,119,101,100,32,119,104,101,110,32,112,101,114,102,111,114,109,105,110,103,32,116,104,101,32,111,112,101,114,97,116,105,111,110,46,32,73,102,32>>,{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,102,97,108,115,101,125>>]},<<32,105,115,32,112,97,115,115,101,100,44,32,97,110,100,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,110,101,101,100,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,97,98,111,114,116,101,100,32,40,115,101,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32>>,{code,[],[<<67,104,101,99,107,82,101,115,117,108,116>>]},<<32,98,101,108,111,119,41,46,32,84,104,101,32,100,101,102,97,117,108,116,32,105,115,32,116,111,32,97,108,108,111,119,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,44,32,116,104,97,116,32,105,115,44,32>>,{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,116,114,117,101,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,82,101,113,117,101,115,116,73,100,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,51>>]},<<32,114,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,115,101,110,116,46,32,87,104,101,110,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,44,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,97,108,108,101,100,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,112,97,115,115,101,100,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,44,32,82,101,113,117,101,115,116,73,100,44,32,67,104,101,99,107,82,101,115,117,108,116,125>>]},<<46>>]}]}]},{p,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<115,101,108,102,40,41>>]},<<44,32,97,110,100,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,116,32,111,110,99,101,46,32,79,116,104,101,114,119,105,115,101,32,97,32,114,101,113,117,101,115,116,32,102,111,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,97,110,100,32,105,115,32,104,97,110,100,108,101,100,32,119,104,101,110,32,97,112,112,114,111,112,114,105,97,116,101,46,32,73,102,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,98,108,111,99,107,115,32,117,110,116,105,108,32>>,{code,[],[<<67,104,101,99,107,82,101,115,117,108,116>>]},<<32,105,115,32,97,118,97,105,108,97,98,108,101,32,97,110,100,32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<67,104,101,99,107,82,101,115,117,108,116>>]},<<32,105,110,102,111,114,109,115,32,97,98,111,117,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,114,101,113,117,101,115,116,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,101,99,117,116,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,99,97,108,108,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,101,99,117,116,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,99,111,110,116,97,105,110,115,32,102,117,110,115,32,116,104,97,116,32,114,101,102,101,114,101,110,99,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,101,99,117,116,101,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<97,98,111,114,116,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,101,114,97,116,105,111,110,32,119,97,115,32,97,98,111,114,116,101,100,44,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,110,101,101,100,101,100,32,116,111,32,98,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,114,101,115,117,108,116,44,32,97,110,100,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,119,97,115,32,114,101,113,117,101,115,116,101,100,32,98,121,32,112,97,115,115,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,102,97,108,115,101,125>>]},<<46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<85,112,32,117,110,116,105,108,32,69,82,84,83,32,118,101,114,115,105,111,110,32,56,46,42,44,32,116,104,101,32,99,104,101,99,107,32,112,114,111,99,101,115,115,32,99,111,100,101,32,111,112,101,114,97,116,105,111,110,32,99,104,101,99,107,115,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,116,104,101,32,111,108,100,32,99,111,100,101,46,32,84,104,97,116,32,105,115,44,32,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,40,101,46,103,46,32,114,101,116,117,114,110,32,97,100,100,114,101,115,115,101,115,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,41,44,32,105,110,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,40>>,{code,[],[<<102,117,110>>]},<<115,32,105,110,32,112,114,111,99,101,115,115,32,99,111,110,116,101,120,116,41,44,32,97,110,100,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,108,105,116,101,114,97,108,115,32,105,110,32,116,104,101,32,99,111,100,101,46>>]},{p,[],[<<65,115,32,111,102,32,69,82,84,83,32,118,101,114,115,105,111,110,32,57,46,48,44,32,116,104,101,32,99,104,101,99,107,32,112,114,111,99,101,115,115,32,99,111,100,101,32,111,112,101,114,97,116,105,111,110,32,111,110,108,121,32,99,104,101,99,107,115,32,102,111,114,32,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,116,104,101,32,99,111,100,101,46,32,73,110,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,118,105,97,32>>,{code,[],[<<102,117,110>>]},<<115,32,119,105,108,108,32,98,101,32,105,103,110,111,114,101,100,46,32,73,102,32,115,117,99,104,32>>,{code,[],[<<102,117,110>>]},<<115,32,101,120,105,115,116,32,97,110,100,32,97,114,101,32,117,115,101,100,32,97,102,116,101,114,32,97,32,112,117,114,103,101,32,111,102,32,116,104,101,32,111,108,100,32,99,111,100,101,44,32,97,110,32,101,120,99,101,112,116,105,111,110,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100,32,117,112,111,110,32,117,115,97,103,101,32,40,115,97,109,101,32,97,115,32,116,104,101,32,99,97,115,101,32,119,104,101,110,32,116,104,101,32>>,{code,[],[<<102,117,110>>]},<<32,105,115,32,114,101,99,101,105,118,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,97,102,116,101,114,32,116,104,101,32,112,117,114,103,101,41,46,32,76,105,116,101,114,97,108,115,32,119,105,108,108,32,98,101,32,116,97,107,101,110,32,99,97,114,101,32,111,102,32,40,99,111,112,105,101,100,41,32,97,116,32,97,32,108,97,116,101,114,32,115,116,97,103,101,46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,99,97,110,32,97,115,32,111,102,32,69,82,84,83,32,118,101,114,115,105,111,110,32,56,46,49,32,98,101,32,101,110,97,98,108,101,100,32,119,104,101,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,105,110,115,116,97,108,108,97,116,105,111,110,95,103,117,105,100,101,58,73,78,83,84,65,76,76,35,65,100,118,97,110,99,101,100,45,99,111,110,102,105,103,117,114,97,116,105,111,110,45,97,110,100,45,98,117,105,108,100,45,111,102,45,69,114,108,97,110,103,79,84,80,95,67,111,110,102,105,103,117,114,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<98,117,105,108,100,105,110,103,32,79,84,80>>]},<<44,32,97,110,100,32,119,105,108,108,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,98,101,32,101,110,97,98,108,101,100,32,105,102,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,32,115,117,112,112,111,114,116,32,105,115,32,101,110,97,98,108,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,55,49>>,signature => [{attribute,584,spec,{{check_process_code,3},[{type,584,bounded_fun,[{type,584,'fun',[{type,584,product,[{var,584,'Pid'},{var,584,'Module'},{var,584,'OptionList'}]},{type,584,union,[{var,584,'CheckResult'},{atom,584,async}]}]},[{type,585,constraint,[{atom,585,is_subtype},[{var,585,'Pid'},{type,585,pid,[]}]]},{type,586,constraint,[{atom,586,is_subtype},[{var,586,'Module'},{type,586,module,[]}]]},{type,587,constraint,[{atom,587,is_subtype},[{var,587,'RequestId'},{type,587,term,[]}]]},{type,588,constraint,[{atom,588,is_subtype},[{var,588,'Option'},{type,588,union,[{type,588,tuple,[{atom,588,async},{var,588,'RequestId'}]},{type,588,tuple,[{atom,588,allow_gc},{type,588,boolean,[]}]}]}]]},{type,589,constraint,[{atom,589,is_subtype},[{var,589,'OptionList'},{type,589,list,[{var,589,'Option'}]}]]},{type,590,constraint,[{atom,590,is_subtype},[{var,590,'CheckResult'},{type,590,union,[{type,590,boolean,[]},{atom,590,aborted}]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,convert_time_unit,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1556}],[<<99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,111,102,32,116,105,109,101,32,117,110,105,116,32>>,{code,[],[<<70,114,111,109,85,110,105,116>>]},<<32,116,111,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<67,111,110,118,101,114,116,101,100,84,105,109,101>>]},<<32,118,97,108,117,101,32,111,102,32,116,105,109,101,32,117,110,105,116,32>>,{code,[],[<<84,111,85,110,105,116>>]},<<46,32,84,104,101,32,114,101,115,117,108,116,32,105,115,32,114,111,117,110,100,101,100,32,117,115,105,110,103,32,116,104,101,32,102,108,111,111,114,32,102,117,110,99,116,105,111,110,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<89,111,117,32,99,97,110,32,108,111,115,101,32,97,99,99,117,114,97,99,121,32,97,110,100,32,112,114,101,99,105,115,105,111,110,32,119,104,101,110,32,99,111,110,118,101,114,116,105,110,103,32,98,101,116,119,101,101,110,32,116,105,109,101,32,117,110,105,116,115,46,32,84,111,32,109,105,110,105,109,105,122,101,32,115,117,99,104,32,108,111,115,115,44,32,99,111,108,108,101,99,116,32,97,108,108,32,100,97,116,97,32,97,116,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,97,110,100,32,100,111,32,116,104,101,32,99,111,110,118,101,114,115,105,111,110,32,111,110,32,116,104,101,32,101,110,100,32,114,101,115,117,108,116,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,55,52>>,signature => [{attribute,1556,spec,{{erlang,convert_time_unit,3},[{type,1556,bounded_fun,[{type,1556,'fun',[{type,1556,product,[{var,1556,'Time'},{var,1556,'FromUnit'},{var,1556,'ToUnit'}]},{var,1556,'ConvertedTime'}]},[{type,1557,constraint,[{atom,1557,is_subtype},[{var,1557,'Time'},{type,1557,integer,[]}]]},{type,1558,constraint,[{atom,1558,is_subtype},[{var,1558,'ConvertedTime'},{type,1558,integer,[]}]]},{type,1559,constraint,[{atom,1559,is_subtype},[{var,1559,'FromUnit'},{user_type,1559,time_unit,[]}]]},{type,1560,constraint,[{atom,1560,is_subtype},[{var,1560,'ToUnit'},{user_type,1560,time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,crc32,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,602}],[<<99,114,99,51,50,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,117,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,99,114,99,51,50,32,40,73,69,69,69,32,56,48,50,46,51,32,115,116,121,108,101,41,32,99,104,101,99,107,115,117,109,32,102,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,57,50>>,signature => [{attribute,602,spec,{{erlang,crc32,1},[{type,602,bounded_fun,[{type,602,'fun',[{type,602,product,[{var,602,'Data'}]},{type,602,non_neg_integer,[]}]},[{type,603,constraint,[{atom,603,is_subtype},[{var,603,'Data'},{type,603,iodata,[]}]]}]]}]}}]}},{{function,crc32,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,608}],[<<99,114,99,51,50,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,110,116,105,110,117,101,115,32,99,111,109,112,117,116,105,110,103,32,116,104,101,32,99,114,99,51,50,32,99,104,101,99,107,115,117,109,32,98,121,32,99,111,109,98,105,110,105,110,103,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,104,101,99,107,115,117,109,44,32>>,{code,[],[<<79,108,100,67,114,99>>]},<<44,32,119,105,116,104,32,116,104,101,32,99,104,101,99,107,115,117,109,32,111,102,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,88,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<89>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,91,68,97,116,97,49,44,68,97,116,97,50,93,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,48,49>>,signature => [{attribute,608,spec,{{erlang,crc32,2},[{type,608,bounded_fun,[{type,608,'fun',[{type,608,product,[{var,608,'OldCrc'},{var,608,'Data'}]},{type,608,non_neg_integer,[]}]},[{type,609,constraint,[{atom,609,is_subtype},[{var,609,'OldCrc'},{type,609,non_neg_integer,[]}]]},{type,610,constraint,[{atom,610,is_subtype},[{var,610,'Data'},{type,610,iodata,[]}]]}]]}]}}]}},{{function,crc32_combine,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,615}],[<<99,114,99,51,50,95,99,111,109,98,105,110,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32,116,119,111,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,117,116,101,100,32,99,114,99,51,50,32,99,104,101,99,107,115,117,109,115,46,32,84,104,105,115,32,99,111,109,112,117,116,97,116,105,111,110,32,114,101,113,117,105,114,101,115,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,100,97,116,97,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32,115,101,99,111,110,100,32,99,104,101,99,107,115,117,109,32,116,111,32,98,101,32,107,110,111,119,110,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,49,41,44,10,90,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,89,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<90>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,50,41,44,10,90,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,95,99,111,109,98,105,110,101,40,88,44,89,44,105,111,108,105,115,116,95,115,105,122,101,40,68,97,116,97,50,41,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,49,56>>,signature => [{attribute,615,spec,{{erlang,crc32_combine,3},[{type,615,bounded_fun,[{type,615,'fun',[{type,615,product,[{var,615,'FirstCrc'},{var,615,'SecondCrc'},{var,615,'SecondSize'}]},{type,615,non_neg_integer,[]}]},[{type,616,constraint,[{atom,616,is_subtype},[{var,616,'FirstCrc'},{type,616,non_neg_integer,[]}]]},{type,617,constraint,[{atom,617,is_subtype},[{var,617,'SecondCrc'},{type,617,non_neg_integer,[]}]]},{type,618,constraint,[{atom,618,is_subtype},[{var,618,'SecondSize'},{type,618,non_neg_integer,[]}]]}]]}]}}]}},{{function,date,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,623}],[<<100,97,116,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,100,97,116,101,32,97,115,32>>,{code,[],[<<123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125>>]},<<46>>]},{p,[],[<<84,104,101,32,116,105,109,101,32,122,111,110,101,32,97,110,100,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,99,111,114,114,101,99,116,105,111,110,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,100,97,116,101,40,41,46,10,123,49,57,57,53,44,50,44,49,57,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,51,55>>,signature => [{attribute,623,spec,{{date,0},[{type,623,bounded_fun,[{type,623,'fun',[{type,623,product,[]},{var,623,'Date'}]},[{type,624,constraint,[{atom,624,is_subtype},[{var,624,'Date'},{remote_type,624,[{atom,624,calendar},{atom,624,date},[]]}]]}]]}]}}]}},{{function,decode_packet,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,629}],[<<100,101,99,111,100,101,95,112,97,99,107,101,116,47,51>>],#{<<101,110>> => [{p,[],[<<68,101,99,111,100,101,115,32,116,104,101,32,98,105,110,97,114,121,32>>,{code,[],[<<66,105,110>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,112,97,99,107,101,116,32,112,114,111,116,111,99,111,108,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<84,121,112,101>>]},<<46,32,83,105,109,105,108,97,114,32,116,111,32,116,104,101,32,112,97,99,107,101,116,32,104,97,110,100,108,105,110,103,32,100,111,110,101,32,98,121,32,115,111,99,107,101,116,115,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<123,112,97,99,107,101,116,44,84,121,112,101,125,46>>]}]},{p,[],[<<73,102,32,97,110,32,101,110,116,105,114,101,32,112,97,99,107,101,116,32,105,115,32,99,111,110,116,97,105,110,101,100,32,105,110,32>>,{code,[],[<<66,105,110>>]},<<44,32,105,116,32,105,115,32,114,101,116,117,114,110,101,100,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,97,115,32>>,{code,[],[<<123,111,107,44,80,97,99,107,101,116,44,82,101,115,116,125>>]},<<46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,105,110>>]},<<32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,116,104,101,32,101,110,116,105,114,101,32,112,97,99,107,101,116,44,32>>,{code,[],[<<123,109,111,114,101,44,76,101,110,103,116,104,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32>>,{code,[],[<<76,101,110,103,116,104>>]},<<32,105,115,32,101,105,116,104,101,114,32,116,104,101,32,101,120,112,101,99,116,101,100,32>>,{em,[],[<<116,111,116,97,108,32,115,105,122,101>>]},<<32,111,102,32,116,104,101,32,112,97,99,107,101,116,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,101,120,112,101,99,116,101,100,32,112,97,99,107,101,116,32,115,105,122,101,32,105,115,32,117,110,107,110,111,119,110,46,32>>,{code,[],[<<100,101,99,111,100,101,95,112,97,99,107,101,116>>]},<<32,99,97,110,32,116,104,101,110,32,98,101,32,99,97,108,108,101,100,32,97,103,97,105,110,32,119,105,116,104,32,109,111,114,101,32,100,97,116,97,32,97,100,100,101,100,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,97,99,107,101,116,32,100,111,101,115,32,110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,116,104,101,32,112,114,111,116,111,99,111,108,32,102,111,114,109,97,116,44,32>>,{code,[],[<<123,101,114,114,111,114,44,82,101,97,115,111,110,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<84,121,112,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<114,97,119,32,124,32,48>>]}]},{dd,[],[{p,[],[<<78,111,32,112,97,99,107,101,116,32,104,97,110,100,108,105,110,103,32,105,115,32,100,111,110,101,46,32,84,104,101,32,101,110,116,105,114,101,32,98,105,110,97,114,121,32,105,115,32,114,101,116,117,114,110,101,100,32,117,110,108,101,115,115,32,105,116,32,105,115,32,101,109,112,116,121,46>>]}]},{dt,[],[{code,[],[<<49,32,124,32,50,32,124,32,52>>]}]},{dd,[],[{p,[],[<<80,97,99,107,101,116,115,32,99,111,110,115,105,115,116,32,111,102,32,97,32,104,101,97,100,101,114,32,115,112,101,99,105,102,121,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,110,32,116,104,101,32,112,97,99,107,101,116,44,32,102,111,108,108,111,119,101,100,32,98,121,32,116,104,97,116,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,46,32,84,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,104,101,97,100,101,114,32,99,97,110,32,98,101,32,111,110,101,44,32,116,119,111,44,32,111,114,32,102,111,117,114,32,98,121,116,101,115,59,32,116,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,98,121,116,101,115,32,105,115,32,98,105,103,45,101,110,100,105,97,110,46,32,84,104,101,32,104,101,97,100,101,114,32,105,115,32,115,116,114,105,112,112,101,100,32,111,102,102,32,119,104,101,110,32,116,104,101,32,112,97,99,107,101,116,32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{code,[],[<<108,105,110,101>>]}]},{dd,[],[{p,[],[<<65,32,112,97,99,107,101,116,32,105,115,32,97,32,108,105,110,101,45,116,101,114,109,105,110,97,116,101,100,32,98,121,32,97,32,100,101,108,105,109,105,116,101,114,32,98,121,116,101,44,32,100,101,102,97,117,108,116,32,105,115,32,116,104,101,32,108,97,116,105,110,45,49,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,100,101,108,105,109,105,116,101,114,32,98,121,116,101,32,105,115,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,112,97,99,107,101,116,32,117,110,108,101,115,115,32,116,104,101,32,108,105,110,101,32,119,97,115,32,116,114,117,110,99,97,116,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,111,112,116,105,111,110,32>>,{code,[],[<<108,105,110,101,95,108,101,110,103,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<97,115,110,49,32,124,32,99,100,114,32,124,32,115,117,110,114,109,32,124,32,102,99,103,105,32,124,32,116,112,107,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,104,101,97,100,101,114,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,115,116,114,105,112,112,101,100,32,111,102,102,46>>]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,116,104,101,32,112,97,99,107,101,116,32,116,121,112,101,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,115,110,49>>]},<<32,45,32,65,83,78,46,49,32,66,69,82>>]},{dd,[],[]},{dt,[],[{code,[],[<<115,117,110,114,109>>]},<<32,45,32,83,117,110,39,115,32,82,80,67,32,101,110,99,111,100,105,110,103>>]},{dd,[],[]},{dt,[],[{code,[],[<<99,100,114>>]},<<32,45,32,67,79,82,66,65,32,40,71,73,79,80,32,49,46,49,41>>]},{dd,[],[]},{dt,[],[{code,[],[<<102,99,103,105>>]},<<32,45,32,70,97,115,116,32,67,71,73>>]},{dd,[],[]},{dt,[],[{code,[],[<<116,112,107,116>>]},<<32,45,32,84,80,75,84,32,102,111,114,109,97,116,32,91,82,70,67,49,48,48,54,93>>]},{dd,[],[]}]}]},{dt,[],[{code,[],[<<104,116,116,112,32,124,32,104,116,116,112,104,32,124,32,104,116,116,112,95,98,105,110,32,124,32,104,116,116,112,104,95,98,105,110>>]}]},{dd,[],[{p,[],[<<84,104,101,32,72,121,112,101,114,116,101,120,116,32,84,114,97,110,115,102,101,114,32,80,114,111,116,111,99,111,108,46,32,84,104,101,32,112,97,99,107,101,116,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,119,105,116,104,32,116,104,101,32,102,111,114,109,97,116,32,97,99,99,111,114,100,105,110,103,32,116,111,32>>,{code,[],[<<72,116,116,112,80,97,99,107,101,116>>]},<<32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46,32,65,32,112,97,99,107,101,116,32,105,115,32,101,105,116,104,101,114,32,97,32,114,101,113,117,101,115,116,44,32,97,32,114,101,115,112,111,110,115,101,44,32,97,32,104,101,97,100,101,114,44,32,111,114,32,97,110,32,101,110,100,32,111,102,32,104,101,97,100,101,114,32,109,97,114,107,46,32,73,110,118,97,108,105,100,32,108,105,110,101,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32>>,{code,[],[<<72,116,116,112,69,114,114,111,114>>]},<<46>>]},{p,[],[<<82,101,99,111,103,110,105,122,101,100,32,114,101,113,117,101,115,116,32,109,101,116,104,111,100,115,32,97,110,100,32,104,101,97,100,101,114,32,102,105,101,108,100,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,97,116,111,109,115,46,32,79,116,104,101,114,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,115,116,114,105,110,103,115,46,32,83,116,114,105,110,103,115,32,111,102,32,117,110,114,101,99,111,103,110,105,122,101,100,32,104,101,97,100,101,114,32,102,105,101,108,100,115,32,97,114,101,32,102,111,114,109,97,116,116,101,100,32,119,105,116,104,32,111,110,108,121,32,99,97,112,105,116,97,108,32,108,101,116,116,101,114,115,32,102,105,114,115,116,32,97,110,100,32,97,102,116,101,114,32,104,121,112,104,101,110,32,99,104,97,114,97,99,116,101,114,115,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<34,83,101,99,45,87,101,98,115,111,99,107,101,116,45,75,101,121,34>>]},<<46,32,72,101,97,100,101,114,32,102,105,101,108,100,32,110,97,109,101,115,32,97,114,101,32,97,108,115,111,32,114,101,116,117,114,110,101,100,32,105,110,32>>,{code,[],[<<85,110,109,111,100,105,102,105,101,100,70,105,101,108,100>>]},<<32,97,115,32,115,116,114,105,110,103,115,44,32,119,105,116,104,111,117,116,32,97,110,121,32,99,111,110,118,101,114,115,105,111,110,32,111,114,32,102,111,114,109,97,116,116,105,110,103,46>>]},{p,[],[<<84,104,101,32,112,114,111,116,111,99,111,108,32,116,121,112,101,32>>,{code,[],[<<104,116,116,112>>]},<<32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,102,111,114,32,116,104,101,32,102,105,114,115,116,32,108,105,110,101,32,119,104,101,110,32,97,110,32>>,{code,[],[<<72,116,116,112,82,101,113,117,101,115,116>>]},<<32,111,114,32,97,110,32>>,{code,[],[<<72,116,116,112,82,101,115,112,111,110,115,101>>]},<<32,105,115,32,101,120,112,101,99,116,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,115,32,97,114,101,32,116,111,32,117,115,101,32>>,{code,[],[<<104,116,116,112,104>>]},<<32,116,111,32,103,101,116,32>>,{code,[],[<<72,116,116,112,72,101,97,100,101,114>>]},<<115,32,117,110,116,105,108,32>>,{code,[],[<<104,116,116,112,95,101,111,104>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,119,104,105,99,104,32,109,97,114,107,115,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,104,101,97,100,101,114,115,32,97,110,100,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,97,110,121,32,102,111,108,108,111,119,105,110,103,32,109,101,115,115,97,103,101,32,98,111,100,121,46>>]},{p,[],[<<84,104,101,32,118,97,114,105,97,110,116,115,32>>,{code,[],[<<104,116,116,112,95,98,105,110>>]},<<32,97,110,100,32>>,{code,[],[<<104,116,116,112,104,95,98,105,110>>]},<<32,114,101,116,117,114,110,32,115,116,114,105,110,103,115,32,40>>,{code,[],[<<72,116,116,112,83,116,114,105,110,103>>]},<<41,32,97,115,32,98,105,110,97,114,105,101,115,32,105,110,115,116,101,97,100,32,111,102,32,108,105,115,116,115,46>>]}]}]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,97,99,107,101,116,95,115,105,122,101,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,109,97,120,105,109,117,109,32,97,108,108,111,119,101,100,32,115,105,122,101,32,111,102,32,116,104,101,32,112,97,99,107,101,116,32,98,111,100,121,46,32,73,102,32,116,104,101,32,112,97,99,107,101,116,32,104,101,97,100,101,114,32,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,112,97,99,107,101,116,32,105,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,101,32,109,97,120,105,109,117,109,32,97,108,108,111,119,101,100,32,108,101,110,103,116,104,44,32,116,104,101,32,112,97,99,107,101,116,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,105,110,118,97,108,105,100,46,32,68,101,102,97,117,108,116,115,32,116,111,32,48,44,32,119,104,105,99,104,32,109,101,97,110,115,32,110,111,32,115,105,122,101,32,108,105,109,105,116,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,101,95,108,101,110,103,116,104,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<70,111,114,32,112,97,99,107,101,116,32,116,121,112,101,32>>,{code,[],[<<108,105,110,101>>]},<<44,32,108,105,110,101,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,101,32,105,110,100,105,99,97,116,101,100,32,108,101,110,103,116,104,32,97,114,101,32,116,114,117,110,99,97,116,101,100,46>>]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<108,105,110,101,95,108,101,110,103,116,104>>]},<<32,97,108,115,111,32,97,112,112,108,105,101,115,32,116,111,32>>,{code,[],[<<104,116,116,112,42>>]},<<32,112,97,99,107,101,116,32,116,121,112,101,115,32,97,115,32,97,110,32,97,108,105,97,115,32,102,111,114,32,111,112,116,105,111,110,32>>,{code,[],[<<112,97,99,107,101,116,95,115,105,122,101>>]},<<32,105,102,32>>,{code,[],[<<112,97,99,107,101,116,95,115,105,122,101>>]},<<32,105,116,115,101,108,102,32,105,115,32,110,111,116,32,115,101,116,46,32,84,104,105,115,32,117,115,101,32,105,115,32,111,110,108,121,32,105,110,116,101,110,100,101,100,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,101,95,100,101,108,105,109,105,116,101,114,44,32,48,32,61,60,32,98,121,116,101,40,41,32,61,60,32,50,53,53,125>>]}]},{dd,[],[{p,[],[<<70,111,114,32,112,97,99,107,101,116,32,116,121,112,101,32>>,{code,[],[<<108,105,110,101>>]},<<44,32,115,101,116,115,32,116,104,101,32,100,101,108,105,109,105,116,105,110,103,32,98,121,116,101,46,32,68,101,102,97,117,108,116,32,105,115,32,116,104,101,32,108,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32>>,{code,[],[<<36,92,110>>]},<<46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,100,101,99,111,100,101,95,112,97,99,107,101,116,40,49,44,60,60,51,44,34,97,98,99,100,34,62,62,44,91,93,41,46,10,123,111,107,44,60,60,34,97,98,99,34,62,62,44,60,60,34,100,34,62,62,125,10,62,32,101,114,108,97,110,103,58,100,101,99,111,100,101,95,112,97,99,107,101,116,40,49,44,60,60,53,44,34,97,98,99,100,34,62,62,44,91,93,41,46,10,123,109,111,114,101,44,54,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,53,50>>,signature => [{attribute,629,spec,{{erlang,decode_packet,3},[{type,629,bounded_fun,[{type,629,'fun',[{type,629,product,[{var,629,'Type'},{var,629,'Bin'},{var,629,'Options'}]},{type,630,union,[{type,630,tuple,[{atom,630,ok},{var,630,'Packet'},{var,630,'Rest'}]},{type,631,tuple,[{atom,631,more},{var,631,'Length'}]},{type,632,tuple,[{atom,632,error},{var,632,'Reason'}]}]}]},[{type,633,constraint,[{atom,633,is_subtype},[{var,633,'Type'},{type,633,union,[{atom,633,raw},{integer,633,0},{integer,633,1},{integer,633,2},{integer,633,4},{atom,633,asn1},{atom,633,cdr},{atom,633,sunrm},{atom,633,fcgi},{atom,634,tpkt},{atom,634,line},{atom,634,http},{atom,634,http_bin},{atom,634,httph},{atom,634,httph_bin}]}]]},{type,635,constraint,[{atom,635,is_subtype},[{var,635,'Bin'},{type,635,binary,[]}]]},{type,636,constraint,[{atom,636,is_subtype},[{var,636,'Options'},{type,636,list,[{var,636,'Opt'}]}]]},{type,637,constraint,[{atom,637,is_subtype},[{var,637,'Opt'},{type,637,union,[{type,637,tuple,[{atom,637,packet_size},{type,637,non_neg_integer,[]}]},{type,638,tuple,[{atom,638,line_length},{type,638,non_neg_integer,[]}]}]}]]},{type,639,constraint,[{atom,639,is_subtype},[{var,639,'Packet'},{type,639,union,[{type,639,binary,[]},{var,639,'HttpPacket'}]}]]},{type,640,constraint,[{atom,640,is_subtype},[{var,640,'Rest'},{type,640,binary,[]}]]},{type,641,constraint,[{atom,641,is_subtype},[{var,641,'Length'},{type,641,union,[{type,641,non_neg_integer,[]},{atom,641,undefined}]}]]},{type,642,constraint,[{atom,642,is_subtype},[{var,642,'Reason'},{type,642,term,[]}]]},{type,643,constraint,[{atom,643,is_subtype},[{var,643,'HttpPacket'},{type,643,union,[{var,643,'HttpRequest'},{var,644,'HttpResponse'},{var,645,'HttpHeader'},{atom,646,http_eoh},{var,647,'HttpError'}]}]]},{type,648,constraint,[{atom,648,is_subtype},[{var,648,'HttpRequest'},{type,648,tuple,[{atom,648,http_request},{var,648,'HttpMethod'},{var,648,'HttpUri'},{var,648,'HttpVersion'}]}]]},{type,649,constraint,[{atom,649,is_subtype},[{var,649,'HttpResponse'},{type,649,tuple,[{atom,649,http_response},{var,649,'HttpVersion'},{type,649,integer,[]},{var,649,'HttpString'}]}]]},{type,650,constraint,[{atom,650,is_subtype},[{var,650,'HttpHeader'},{type,650,tuple,[{atom,650,http_header},{type,651,integer,[]},{var,652,'HttpField'},{ann_type,653,[{var,653,'UnmodifiedField'},{var,653,'HttpString'}]},{ann_type,654,[{var,654,'Value'},{var,654,'HttpString'}]}]}]]},{type,655,constraint,[{atom,655,is_subtype},[{var,655,'HttpError'},{type,655,tuple,[{atom,655,http_error},{var,655,'HttpString'}]}]]},{type,656,constraint,[{atom,656,is_subtype},[{var,656,'HttpMethod'},{type,656,union,[{atom,656,'OPTIONS'},{atom,656,'GET'},{atom,656,'HEAD'},{atom,656,'POST'},{atom,656,'PUT'},{atom,656,'DELETE'},{atom,657,'TRACE'},{var,657,'HttpString'}]}]]},{type,658,constraint,[{atom,658,is_subtype},[{var,658,'HttpUri'},{type,658,union,[{atom,658,'*'},{type,659,tuple,[{atom,659,absoluteURI},{type,660,union,[{atom,660,http},{atom,660,https}]},{ann_type,661,[{var,661,'Host'},{var,661,'HttpString'}]},{ann_type,662,[{var,662,'Port'},{type,662,union,[{remote_type,662,[{atom,662,inet},{atom,662,port_number},[]]},{atom,662,undefined}]}]},{ann_type,663,[{var,663,'Path'},{var,663,'HttpString'}]}]},{type,664,tuple,[{atom,664,scheme},{ann_type,664,[{var,664,'Scheme'},{var,664,'HttpString'}]},{var,664,'HttpString'}]},{type,665,tuple,[{atom,665,abs_path},{var,665,'HttpString'}]},{var,666,'HttpString'}]}]]},{type,667,constraint,[{atom,667,is_subtype},[{var,667,'HttpVersion'},{type,667,tuple,[{ann_type,667,[{var,667,'Major'},{type,667,non_neg_integer,[]}]},{ann_type,667,[{var,667,'Minor'},{type,667,non_neg_integer,[]}]}]}]]},{type,668,constraint,[{atom,668,is_subtype},[{var,668,'HttpField'},{type,668,union,[{atom,668,'Cache-Control'},{atom,669,'Connection'},{atom,670,'Date'},{atom,671,'Pragma'},{atom,672,'Transfer-Encoding'},{atom,673,'Upgrade'},{atom,674,'Via'},{atom,675,'Accept'},{atom,676,'Accept-Charset'},{atom,677,'Accept-Encoding'},{atom,678,'Accept-Language'},{atom,679,'Authorization'},{atom,680,'From'},{atom,681,'Host'},{atom,682,'If-Modified-Since'},{atom,683,'If-Match'},{atom,684,'If-None-Match'},{atom,685,'If-Range'},{atom,686,'If-Unmodified-Since'},{atom,687,'Max-Forwards'},{atom,688,'Proxy-Authorization'},{atom,689,'Range'},{atom,690,'Referer'},{atom,691,'User-Agent'},{atom,692,'Age'},{atom,693,'Location'},{atom,694,'Proxy-Authenticate'},{atom,695,'Public'},{atom,696,'Retry-After'},{atom,697,'Server'},{atom,698,'Vary'},{atom,699,'Warning'},{atom,700,'Www-Authenticate'},{atom,701,'Allow'},{atom,702,'Content-Base'},{atom,703,'Content-Encoding'},{atom,704,'Content-Language'},{atom,705,'Content-Length'},{atom,706,'Content-Location'},{atom,707,'Content-Md5'},{atom,708,'Content-Range'},{atom,709,'Content-Type'},{atom,710,'Etag'},{atom,711,'Expires'},{atom,712,'Last-Modified'},{atom,713,'Accept-Ranges'},{atom,714,'Set-Cookie'},{atom,715,'Set-Cookie2'},{atom,716,'X-Forwarded-For'},{atom,717,'Cookie'},{atom,718,'Keep-Alive'},{atom,719,'Proxy-Connection'},{var,720,'HttpString'}]}]]},{type,721,constraint,[{atom,721,is_subtype},[{var,721,'HttpString'},{type,721,union,[{type,721,string,[]},{type,721,binary,[]}]}]]}]]}]}}]}},{{function,delete_element,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,726}],[<<100,101,108,101,116,101,95,101,108,101,109,101,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,101,119,32,116,117,112,108,101,32,119,105,116,104,32,101,108,101,109,101,110,116,32,97,116,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,100,101,108,101,116,101,95,101,108,101,109,101,110,116,40,50,44,32,123,111,110,101,44,32,116,119,111,44,32,116,104,114,101,101,125,41,46,10,123,111,110,101,44,116,104,114,101,101,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,54,52>>,signature => [{attribute,726,spec,{{erlang,delete_element,2},[{type,726,bounded_fun,[{type,726,'fun',[{type,726,product,[{var,726,'Index'},{var,726,'Tuple1'}]},{var,726,'Tuple2'}]},[{type,727,constraint,[{atom,727,is_subtype},[{var,727,'Index'},{type,727,pos_integer,[]}]]},{type,728,constraint,[{atom,728,is_subtype},[{var,728,'Tuple1'},{type,728,tuple,any}]]},{type,729,constraint,[{atom,729,is_subtype},[{var,729,'Tuple2'},{type,729,tuple,any}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,delete_module,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,734}],[<<100,101,108,101,116,101,95,109,111,100,117,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<77,97,107,101,115,32,116,104,101,32,99,117,114,114,101,110,116,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,98,101,99,111,109,101,32,111,108,100,32,99,111,100,101,32,97,110,100,32,100,101,108,101,116,101,115,32,97,108,108,32,114,101,102,101,114,101,110,99,101,115,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,32,102,114,111,109,32,116,104,101,32,101,120,112,111,114,116,32,116,97,98,108,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,114,101,32,97,108,114,101,97,100,121,32,105,115,32,97,110,32,111,108,100,32,118,101,114,115,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,55,55>>,signature => [{attribute,734,spec,{{delete_module,1},[{type,734,bounded_fun,[{type,734,'fun',[{type,734,product,[{var,734,'Module'}]},{type,734,union,[{atom,734,true},{atom,734,undefined}]}]},[{type,735,constraint,[{atom,735,is_subtype},[{var,735,'Module'},{type,735,module,[]}]]}]]}]}}]}},{{function,demonitor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,740}],[<<100,101,109,111,110,105,116,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,111,98,116,97,105,110,101,100,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,50>>]}]},<<44,32,116,104,105,115,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,102,102,46,32,73,102,32,116,104,101,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,97,108,114,101,97,100,121,32,116,117,114,110,101,100,32,111,102,102,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46>>]},{p,[],[<<79,110,99,101,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41>>]},<<32,104,97,115,32,114,101,116,117,114,110,101,100,44,32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,110,111,32>>,{code,[],[<<123,39,68,79,87,78,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,44,32,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,44,32,119,105,108,108,32,98,101,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46,32,72,111,119,101,118,101,114,44,32,97,32>>,{code,[],[<<123,39,68,79,87,78,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,32,99,97,110,32,104,97,118,101,32,98,101,101,110,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,98,101,102,111,114,101,32,116,104,101,32,99,97,108,108,46,32,73,116,32,105,115,32,116,104,101,114,101,102,111,114,101,32,117,115,117,97,108,108,121,32,97,100,118,105,115,97,98,108,101,32,116,111,32,114,101,109,111,118,101,32,115,117,99,104,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,102,114,111,109,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,102,116,101,114,32,109,111,110,105,116,111,114,105,110,103,32,104,97,115,32,98,101,101,110,32,115,116,111,112,112,101,100,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,44,32,91,102,108,117,115,104,93,41>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41>>]},<<32,105,102,32,116,104,105,115,32,99,108,101,97,110,117,112,32,105,115,32,119,97,110,116,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,32,40,69,82,84,83,32,53,46,53,41,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,47,49>>]},<<32,98,101,104,97,118,101,100,32,99,111,109,112,108,101,116,101,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,109,111,110,105,116,111,114,32,119,97,115,32,97,99,116,105,118,101,32,117,110,116,105,108,32,116,104,101,32,34,100,101,109,111,110,105,116,111,114,32,115,105,103,110,97,108,34,32,114,101,97,99,104,101,100,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,46,32,84,104,105,115,32,104,97,100,32,111,110,101,32,117,110,100,101,115,105,114,97,98,108,101,32,101,102,102,101,99,116,46,32,89,111,117,32,99,111,117,108,100,32,110,101,118,101,114,32,107,110,111,119,32,119,104,101,110,32,121,111,117,32,119,101,114,101,32,103,117,97,114,97,110,116,101,101,100,32>>,{em,[],[<<110,111,116>>]},<<32,116,111,32,114,101,99,101,105,118,101,32,97,32>>,{code,[],[<<68,79,87,78>>]},<<32,109,101,115,115,97,103,101,32,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,46>>]},{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,98,101,104,97,118,105,111,114,32,99,97,110,32,98,101,32,118,105,101,119,101,100,32,97,115,32,116,119,111,32,99,111,109,98,105,110,101,100,32,111,112,101,114,97,116,105,111,110,115,58,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,32,115,101,110,100,32,97,32,34,100,101,109,111,110,105,116,111,114,32,115,105,103,110,97,108,34,32,116,111,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,32,97,110,100,32,105,103,110,111,114,101,32,97,110,121,32,102,117,116,117,114,101,32,114,101,115,117,108,116,115,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32,73,116,32,105,115,32,97,110,32,101,114,114,111,114,32,105,102,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,109,111,110,105,116,111,114,105,110,103,32,115,116,97,114,116,101,100,32,98,121,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,78,111,116,32,97,108,108,32,115,117,99,104,32,99,97,115,101,115,32,97,114,101,32,99,104,101,97,112,32,116,111,32,99,104,101,99,107,46,32,73,102,32,99,104,101,99,107,105,110,103,32,105,115,32,99,104,101,97,112,44,32,116,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,32,105,102,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,105,115,32,97,32,114,101,109,111,116,101,32,114,101,102,101,114,101,110,99,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,57,53>>,signature => [{attribute,740,spec,{{demonitor,1},[{type,740,bounded_fun,[{type,740,'fun',[{type,740,product,[{var,740,'MonitorRef'}]},{atom,740,true}]},[{type,741,constraint,[{atom,741,is_subtype},[{var,741,'MonitorRef'},{type,741,reference,[]}]]}]]}]}}]}},{{function,demonitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,746}],[<<100,101,109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,117,110,108,101,115,115,32>>,{code,[],[<<105,110,102,111>>]},<<32,105,115,32,112,97,114,116,32,111,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<46>>]},{p,[],[{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,44,32,91,93,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41>>]}]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,108,117,115,104>>]}]},{dd,[],[{p,[],[<<82,101,109,111,118,101,115,32,40,111,110,101,41,32>>,{code,[],[<<123,95,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,44,32,105,102,32,116,104,101,114,101,32,105,115,32,111,110,101,44,32,102,114,111,109,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,102,116,101,114,32,109,111,110,105,116,111,114,105,110,103,32,104,97,115,32,98,101,101,110,32,115,116,111,112,112,101,100,46>>]},{p,[],[<<67,97,108,108,105,110,103,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,44,32,91,102,108,117,115,104,93,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41,44,10,114,101,99,101,105,118,101,10,32,32,32,32,123,95,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,97,102,116,101,114,32,48,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,101,110,100>>]}]}]},{dt,[],[{code,[],[<<105,110,102,111>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,119,97,115,32,102,111,117,110,100,32,97,110,100,32,114,101,109,111,118,101,100,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,110,111,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,105,115,32,109,111,110,105,116,111,114,32,104,97,115,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,32,97,110,100,32,119,105,108,108,32,110,111,116,32,98,101,32,100,101,108,105,118,101,114,101,100,46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,119,97,115,32,110,111,116,32,102,111,117,110,100,32,97,110,100,32,99,111,117,108,100,32,110,111,116,32,98,101,32,114,101,109,111,118,101,100,46,32,84,104,105,115,32,112,114,111,98,97,98,108,121,32,98,101,99,97,117,115,101,32,115,111,109,101,111,110,101,32,97,108,114,101,97,100,121,32,104,97,115,32,112,108,97,99,101,100,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,105,115,32,109,111,110,105,116,111,114,32,105,110,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]}]}]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<105,110,102,111>>]},<<32,105,115,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<102,108,117,115,104>>]},<<44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,102,32,97,32,102,108,117,115,104,32,119,97,115,32,110,101,101,100,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<77,111,114,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,111,112,116,105,111,110,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<84,104,101,32,115,97,109,101,32,102,97,105,108,117,114,101,32,97,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,47,49>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,51,51,55>>,signature => [{attribute,746,spec,{{demonitor,2},[{type,746,bounded_fun,[{type,746,'fun',[{type,746,product,[{var,746,'MonitorRef'},{var,746,'OptionList'}]},{type,746,boolean,[]}]},[{type,747,constraint,[{atom,747,is_subtype},[{var,747,'MonitorRef'},{type,747,reference,[]}]]},{type,748,constraint,[{atom,748,is_subtype},[{var,748,'OptionList'},{type,748,list,[{var,748,'Option'}]}]]},{type,749,constraint,[{atom,749,is_subtype},[{var,749,'Option'},{type,749,union,[{atom,749,flush},{atom,749,info}]}]]}]]}]}}]}},{{function,disconnect_node,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3429}],[<<100,105,115,99,111,110,110,101,99,116,95,110,111,100,101,47,49>>],#{<<101,110>> => [{p,[],[<<70,111,114,99,101,115,32,116,104,101,32,100,105,115,99,111,110,110,101,99,116,105,111,110,32,111,102,32,97,32,110,111,100,101,46,32,84,104,105,115,32,97,112,112,101,97,114,115,32,116,111,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<32,97,115,32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,104,97,115,32,99,114,97,115,104,101,100,46,32,84,104,105,115,32,66,73,70,32,105,115,32,109,97,105,110,108,121,32,117,115,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,110,101,116,119,111,114,107,32,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,112,114,111,116,111,99,111,108,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,100,105,115,99,111,110,110,101,99,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,73,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<105,103,110,111,114,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,109,97,121,32,114,101,116,117,114,110,32,98,101,102,111,114,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,95,110,111,100,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,109,101,115,115,97,103,101,115>>]},<<32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,52,48,53>>,signature => [{attribute,3429,spec,{{disconnect_node,1},[{type,3429,bounded_fun,[{type,3429,'fun',[{type,3429,product,[{var,3429,'Node'}]},{type,3429,union,[{type,3429,boolean,[]},{atom,3429,ignored}]}]},[{type,3430,constraint,[{atom,3430,is_subtype},[{var,3430,'Node'},{type,3430,node,[]}]]}]]}]}}]}},{{function,display,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,773}],[<<100,105,115,112,108,97,121,47,49>>],#{<<101,110>> => [{p,[],[<<80,114,105,110,116,115,32,97,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,111,110,32,116,104,101,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,52,50,52>>,signature => [{attribute,773,spec,{{erlang,display,1},[{type,773,bounded_fun,[{type,773,'fun',[{type,773,product,[{var,773,'Term'}]},{atom,773,true}]},[{type,774,constraint,[{atom,774,is_subtype},[{var,774,'Term'},{type,774,term,[]}]]}]]}]}}]}},{{function,dist_ctrl_get_data,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3713}],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,47,49>>],#{<<101,110>> => [{p,[],[<<71,101,116,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,100,97,116,97,32,102,114,111,109,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,116,104,97,116,32,105,115,32,116,111,32,98,101,32,112,97,115,115,101,100,32,116,111,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,46,32,84,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,73,102,32,110,111,32,100,97,116,97,32,105,115,32,97,118,97,105,108,97,98,108,101,44,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<110,111,110,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,110,101,32,99,97,110,32,114,101,113,117,101,115,116,32,116,111,32,98,101,32,105,110,102,111,114,109,101,100,32,98,121,32,97,32,109,101,115,115,97,103,101,32,119,104,101,110,32,109,111,114,101,32,100,97,116,97,32,105,115,32,97,118,97,105,108,97,98,108,101,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,40,68,72,97,110,100,108,101,41>>]}]},<<46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,119,104,101,110,32,116,104,101,114,101,32,97,114,101,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,99,111,110,102,105,103,117,114,101,100,32,111,110,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>]}]},<<32,102,117,110,99,116,105,111,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,52,51,54>>,signature => [{attribute,3713,spec,{{erlang,dist_ctrl_get_data,1},[{type,3713,bounded_fun,[{type,3713,'fun',[{type,3713,product,[{var,3713,'DHandle'}]},{type,3713,union,[{type,3713,tuple,[{var,3713,'Size'},{var,3713,'Data'}]},{var,3713,'Data'},{atom,3713,none}]}]},[{type,3714,constraint,[{atom,3714,is_subtype},[{var,3714,'Size'},{type,3714,non_neg_integer,[]}]]},{type,3715,constraint,[{atom,3715,is_subtype},[{var,3715,'DHandle'},{user_type,3715,dist_handle,[]}]]},{type,3716,constraint,[{atom,3716,is_subtype},[{var,3716,'Data'},{user_type,3716,iovec,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_get_opt,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3735}],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,111,112,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,111,110,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>]}]},<<32,102,117,110,99,116,105,111,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,52,55,55>>,signature => [{attribute,3735,spec,{{erlang,dist_ctrl_get_opt,2},[{type,3735,bounded_fun,[{type,3735,'fun',[{type,3735,product,[{var,3735,'DHandle'},{atom,3735,get_size}]},{var,3735,'Value'}]},[{type,3736,constraint,[{atom,3736,is_subtype},[{var,3736,'DHandle'},{user_type,3736,dist_handle,[]}]]},{type,3737,constraint,[{atom,3737,is_subtype},[{var,3737,'Value'},{type,3737,boolean,[]}]]}]]}]}}],since => <<79,84,80,32,50,50,46,48>>}},{{function,dist_ctrl_get_data_notification,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3721}],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,113,117,101,115,116,32,110,111,116,105,102,105,99,97,116,105,111,110,32,119,104,101,110,32,109,111,114,101,32,100,97,116,97,32,105,115,32,97,118,97,105,108,97,98,108,101,32,116,111,32,102,101,116,99,104,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]}]},<<32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,87,104,101,110,32,109,111,114,101,32,100,97,116,97,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<100,105,115,116,95,100,97,116,97>>]},<<46,32,79,110,99,101,32,97,32>>,{code,[],[<<100,105,115,116,95,100,97,116,97>>]},<<32,109,101,115,115,97,103,101,115,32,104,97,115,32,98,101,101,110,32,115,101,110,116,44,32,110,111,32,109,111,114,101,32>>,{code,[],[<<100,105,115,116,95,100,97,116,97>>]},<<32,109,101,115,115,97,103,101,115,32,119,105,108,108,32,98,101,32,115,101,110,116,32,117,110,116,105,108,32,116,104,101,32>>,{code,[],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,47,49>>]},<<32,102,117,110,99,116,105,111,110,32,104,97,115,32,98,101,101,110,32,99,97,108,108,101,100,32,97,103,97,105,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,53,48,54>>,signature => [{attribute,3721,spec,{{erlang,dist_ctrl_get_data_notification,1},[{type,3721,bounded_fun,[{type,3721,'fun',[{type,3721,product,[{var,3721,'DHandle'}]},{atom,3721,ok}]},[{type,3722,constraint,[{atom,3722,is_subtype},[{var,3722,'DHandle'},{user_type,3722,dist_handle,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_input_handler,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3699}],[<<100,105,115,116,95,99,116,114,108,95,105,110,112,117,116,95,104,97,110,100,108,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,103,105,115,116,101,114,32,97,110,32,97,108,116,101,114,110,97,116,101,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,112,114,111,99,101,115,115,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,79,110,99,101,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,104,97,115,32,98,101,101,110,32,99,97,108,108,101,100,44,32>>,{code,[],[<<73,110,112,117,116,72,97,110,100,108,101,114>>]},<<32,105,115,32,116,104,101,32,111,110,108,121,32,112,114,111,99,101,115,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,112,117,116,95,100,97,116,97,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,112,117,116,95,100,97,116,97,40,68,72,97,110,100,108,101,44,32,68,97,116,97,41>>]}]},<<32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,100,101,110,116,105,102,105,110,103,32,116,104,105,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,53,52,50>>,signature => [{attribute,3699,spec,{{erlang,dist_ctrl_input_handler,2},[{type,3699,bounded_fun,[{type,3699,'fun',[{type,3699,product,[{var,3699,'DHandle'},{var,3699,'InputHandler'}]},{atom,3699,ok}]},[{type,3700,constraint,[{atom,3700,is_subtype},[{var,3700,'DHandle'},{user_type,3700,dist_handle,[]}]]},{type,3701,constraint,[{atom,3701,is_subtype},[{var,3701,'InputHandler'},{type,3701,pid,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_put_data,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3706}],[<<100,105,115,116,95,99,116,114,108,95,112,117,116,95,100,97,116,97,47,50>>],#{<<101,110>> => [{p,[],[<<68,101,108,105,118,101,114,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,100,97,116,97,32,102,114,111,109,32,97,32,114,101,109,111,116,101,32,110,111,100,101,32,116,111,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,117,110,108,101,115,115,32,97,110,32,97,108,116,101,114,110,97,116,101,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,112,114,111,99,101,115,115,32,104,97,115,32,98,101,101,110,32,114,101,103,105,115,116,101,114,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,105,110,112,117,116,95,104,97,110,100,108,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,105,110,112,117,116,95,104,97,110,100,108,101,114,40,68,72,97,110,100,108,101,44,32,73,110,112,117,116,72,97,110,100,108,101,114,41>>]}]},<<46,32,73,102,32,97,110,32,97,108,116,101,114,110,97,116,101,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,104,97,115,32,98,101,101,110,32,114,101,103,105,115,116,101,114,101,100,44,32,111,110,108,121,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,112,114,111,99,101,115,115,32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,53,55,53>>,signature => [{attribute,3706,spec,{{erlang,dist_ctrl_put_data,2},[{type,3706,bounded_fun,[{type,3706,'fun',[{type,3706,product,[{var,3706,'DHandle'},{var,3706,'Data'}]},{atom,3706,ok}]},[{type,3707,constraint,[{atom,3707,is_subtype},[{var,3707,'DHandle'},{user_type,3707,dist_handle,[]}]]},{type,3708,constraint,[{atom,3708,is_subtype},[{var,3708,'Data'},{type,3708,iodata,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_set_opt,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3727}],[<<100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,111,110,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,84,104,105,115,32,111,112,116,105,111,110,32,99,111,110,116,114,111,108,115,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32,99,97,108,108,115,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,117,115,101,100,32,119,104,101,110,32,115,101,116,116,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,46,32,87,104,101,110,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,105,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[<<97,110,100,32,116,104,101,114,101,32,97,114,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,44,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]},<<32,119,105,108,108,32,106,117,115,116,32,114,101,116,117,114,110,32>>,{code,[],[<<68,97,116,97>>]},<<32,116,111,32,112,97,115,115,32,111,118,101,114,32,116,104,101,32,99,104,97,110,110,101,108,46,32,84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,46>>]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[<<97,110,100,32,116,104,101,114,101,32,97,114,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,44,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]},<<32,119,105,108,108,32,114,101,116,117,114,110,32>>,{code,[],[<<68,97,116,97>>]},<<32,116,111,32,112,97,115,115,32,111,118,101,114,32,116,104,101,32,99,104,97,110,110,101,108,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32>>,{code,[],[<<83,105,122,101>>]},<<32,111,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,110,32,98,121,116,101,115,46,32,84,104,105,115,32,105,115,32,114,101,116,117,114,110,101,100,32,97,115,32,97,32,116,117,112,108,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,83,105,122,101,44,32,68,97,116,97,125>>]},<<46>>]}]},{p,[],[<<65,108,108,32,111,112,116,105,111,110,115,32,97,114,101,32,115,101,116,32,116,111,32,100,101,102,97,117,108,116,32,119,104,101,110,32,97,32,99,104,97,110,110,101,108,32,105,115,32,99,108,111,115,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,54,48,56>>,signature => [{attribute,3727,spec,{{erlang,dist_ctrl_set_opt,3},[{type,3727,bounded_fun,[{type,3727,'fun',[{type,3727,product,[{var,3727,'DHandle'},{atom,3727,get_size},{var,3727,'Value'}]},{var,3727,'OldValue'}]},[{type,3728,constraint,[{atom,3728,is_subtype},[{var,3728,'DHandle'},{user_type,3728,dist_handle,[]}]]},{type,3729,constraint,[{atom,3729,is_subtype},[{var,3729,'Value'},{type,3729,boolean,[]}]]},{type,3730,constraint,[{atom,3730,is_subtype},[{var,3730,'OldValue'},{type,3730,boolean,[]}]]}]]}]}}],since => <<79,84,80,32,50,50,46,48>>}},{{function,element,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2116}],[<<101,108,101,109,101,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{code,[],[<<78>>]},<<116,104,32,101,108,101,109,101,110,116,32,40,110,117,109,98,101,114,105,110,103,32,102,114,111,109,32,49,41,32,111,102,32>>,{code,[],[<<84,117,112,108,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,108,101,109,101,110,116,40,50,44,32,123,97,44,32,98,44,32,99,125,41,46,10,98>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,54,53,55>>,signature => [{attribute,2116,spec,{{element,2},[{type,2116,bounded_fun,[{type,2116,'fun',[{type,2116,product,[{var,2116,'N'},{var,2116,'Tuple'}]},{type,2116,term,[]}]},[{type,2117,constraint,[{atom,2117,is_subtype},[{var,2117,'N'},{type,2117,pos_integer,[]}]]},{type,2118,constraint,[{atom,2118,is_subtype},[{var,2118,'Tuple'},{type,2118,tuple,any}]]}]]}]}}]}},{{function,erase,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,832}],[<<101,114,97,115,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,97,110,100,32,100,101,108,101,116,101,115,32,105,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,123,49,44,32,50,44,32,51,125,41,44,10,112,117,116,40,107,101,121,50,44,32,91,97,44,32,98,44,32,99,93,41,44,10,101,114,97,115,101,40,41,46,10,91,123,107,101,121,49,44,123,49,44,50,44,51,125,125,44,123,107,101,121,50,44,91,97,44,98,44,99,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,54,55,49>>,signature => [{attribute,832,spec,{{erase,0},[{type,832,bounded_fun,[{type,832,'fun',[{type,832,product,[]},{type,832,list,[{type,832,tuple,[{var,832,'Key'},{var,832,'Val'}]}]}]},[{type,833,constraint,[{atom,833,is_subtype},[{var,833,'Key'},{type,833,term,[]}]]},{type,834,constraint,[{atom,834,is_subtype},[{var,834,'Val'},{type,834,term,[]}]]}]]}]}}]}},{{function,erase,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,839}],[<<101,114,97,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<32,97,110,100,32,100,101,108,101,116,101,115,32,105,116,32,102,114,111,109,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,110,111,32,118,97,108,117,101,32,105,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<46,32,84,104,101,32,97,118,101,114,97,103,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,79,40>>,{code,[],[<<49>>]},<<41,32,97,110,100,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,105,115,32,79,40>>,{code,[],[<<78>>]},<<41,44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,116,101,109,115,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,123,109,101,114,114,121,44,32,108,97,109,98,115,44,32,97,114,101,44,32,112,108,97,121,105,110,103,125,41,44,10,88,32,61,32,101,114,97,115,101,40,107,101,121,49,41,44,10,123,88,44,32,101,114,97,115,101,40,107,101,121,49,41,125,46,10,123,123,109,101,114,114,121,44,108,97,109,98,115,44,97,114,101,44,112,108,97,121,105,110,103,125,44,117,110,100,101,102,105,110,101,100,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,54,56,53>>,signature => [{attribute,839,spec,{{erase,1},[{type,839,bounded_fun,[{type,839,'fun',[{type,839,product,[{var,839,'Key'}]},{type,839,union,[{var,839,'Val'},{atom,839,undefined}]}]},[{type,840,constraint,[{atom,840,is_subtype},[{var,840,'Key'},{type,840,term,[]}]]},{type,841,constraint,[{atom,841,is_subtype},[{var,841,'Val'},{type,841,term,[]}]]}]]}]}}]}},{{function,error,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,847}],[<<101,114,114,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,119,105,116,104,32,116,104,101,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,97,110,121,32,116,101,114,109,46,32,84,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,32,105,115,32>>,{code,[],[<<123,82,101,97,115,111,110,44,32,87,104,101,114,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<87,104,101,114,101>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,99,97,108,108,101,100,32,40,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,102,105,114,115,116,41,46,32,65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,116,104,114,111,119,110,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,101,32,105,110,116,101,110,116,32,111,102,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,105,115,32,116,111,32,115,105,103,110,97,108,32,116,104,97,116,32,97,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,104,97,115,32,104,97,112,112,101,110,101,100,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,119,105,116,104,32,97,32,112,97,114,97,109,101,116,101,114,32,116,104,97,116,32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,41,46,32,83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,99,97,116,99,104,32,101,114,114,111,114,40,102,111,111,98,97,114,41,46,10,123,39,69,88,73,84,39,44,123,102,111,111,98,97,114,44,91,123,115,104,101,108,108,44,97,112,112,108,121,95,102,117,110,44,51,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,57,48,54,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,101,114,108,95,101,118,97,108,44,100,111,95,97,112,112,108,121,44,54,44,91,123,102,105,108,101,44,34,101,114,108,95,101,118,97,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,55,55,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,101,114,108,95,101,118,97,108,44,101,120,112,114,44,53,44,91,123,102,105,108,101,44,34,101,114,108,95,101,118,97,108,46,101,114,108,34,125,44,123,108,105,110,101,44,52,51,48,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,115,104,101,108,108,44,101,120,112,114,115,44,55,44,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,56,55,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,115,104,101,108,108,44,101,118,97,108,95,101,120,112,114,115,44,55,44,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,52,50,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,115,104,101,108,108,44,101,118,97,108,95,108,111,111,112,44,51,44,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,50,55,125,93,125,93,125,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,48,54>>,signature => [{attribute,847,spec,{{error,1},[{type,847,bounded_fun,[{type,847,'fun',[{type,847,product,[{var,847,'Reason'}]},{type,847,no_return,[]}]},[{type,848,constraint,[{atom,848,is_subtype},[{var,848,'Reason'},{type,848,term,[]}]]}]]}]}}]}},{{function,error,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,854}],[<<101,114,114,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,119,105,116,104,32,116,104,101,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,97,110,121,32,116,101,114,109,46,32,84,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,32,105,115,32>>,{code,[],[<<123,82,101,97,115,111,110,44,32,87,104,101,114,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<87,104,101,114,101>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,99,97,108,108,101,100,32,40,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,102,105,114,115,116,41,46,32>>,{code,[],[<<65,114,103,115>>]},<<32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,116,104,101,32,108,105,115,116,32,111,102,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,59,32,105,116,32,105,115,32,117,115,101,100,32,116,111,32,112,114,111,118,105,100,101,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,105,110,32,116,104,101,32,116,101,114,109,32>>,{code,[],[<<87,104,101,114,101>>]},<<46,32,65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,101,32,105,110,116,101,110,116,32,111,102,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,105,115,32,116,111,32,115,105,103,110,97,108,32,116,104,97,116,32,97,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,104,97,115,32,104,97,112,112,101,110,101,100,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,119,105,116,104,32,97,32,112,97,114,97,109,101,116,101,114,32,116,104,97,116,32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,41,46,32,83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46,32,69,120,97,109,112,108,101,58>>]},{p,[],[{code,[],[<<116,101,115,116,46,101,114,108>>]},<<58>>]},{pre,[],[{code,[],[<<45,109,111,100,117,108,101,40,116,101,115,116,41,46,10,45,101,120,112,111,114,116,40,91,101,120,97,109,112,108,101,95,102,117,110,47,50,93,41,46,10,10,101,120,97,109,112,108,101,95,102,117,110,40,65,49,44,32,65,50,41,32,45,62,10,32,32,32,32,101,114,108,97,110,103,58,101,114,114,111,114,40,109,121,95,101,114,114,111,114,44,32,91,65,49,44,32,65,50,93,41,46>>]}]},{p,[],[<<69,114,108,97,110,103,32,115,104,101,108,108,58>>]},{pre,[],[{code,[],[<<54,62,32,99,40,116,101,115,116,41,46,10,123,111,107,44,116,101,115,116,125,10,55,62,32,116,101,115,116,58,101,120,97,109,112,108,101,95,102,117,110,40,97,114,103,49,44,34,116,104,105,115,32,105,115,32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,34,41,46,10,42,42,32,101,120,99,101,112,116,105,111,110,32,101,114,114,111,114,58,32,109,121,95,101,114,114,111,114,10,32,32,32,32,32,105,110,32,102,117,110,99,116,105,111,110,32,32,116,101,115,116,58,101,120,97,109,112,108,101,95,102,117,110,47,50,10,32,32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,97,115,32,116,101,115,116,58,101,120,97,109,112,108,101,95,102,117,110,40,97,114,103,49,44,34,116,104,105,115,32,105,115,32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,34,41,10,32>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,51,53>>,signature => [{attribute,854,spec,{{error,2},[{type,854,bounded_fun,[{type,854,'fun',[{type,854,product,[{var,854,'Reason'},{var,854,'Args'}]},{type,854,no_return,[]}]},[{type,855,constraint,[{atom,855,is_subtype},[{var,855,'Reason'},{type,855,term,[]}]]},{type,856,constraint,[{atom,856,is_subtype},[{var,856,'Args'},{type,856,list,[{type,856,term,[]}]}]]}]]}]}}]}},{{function,error,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,862}],[<<101,114,114,111,114,47,51>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,119,105,116,104,32,116,104,101,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,97,110,121,32,116,101,114,109,46,32>>,{code,[],[<<65,114,103,115>>]},<<32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,116,104,101,32,108,105,115,116,32,111,102,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,59,32,105,116,32,105,115,32,117,115,101,100,32,116,111,32,112,114,111,118,105,100,101,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,105,110,32,116,104,101,32,115,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,46,32,73,102,32,116,104,101,32>>,{code,[],[<<123,101,114,114,111,114,95,105,110,102,111,44,32,69,114,114,111,114,73,110,102,111,77,97,112,125>>]},<<32,111,112,116,105,111,110,32,105,115,32,103,105,118,101,110,44,32,105,116,32,119,105,108,108,32,98,101,32,105,110,106,101,99,116,101,100,32,105,110,116,111,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,46>>]},{p,[],[<<65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,101,32,105,110,116,101,110,116,32,111,102,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,105,115,32,116,111,32,115,105,103,110,97,108,32,116,104,97,116,32,97,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,104,97,115,32,104,97,112,112,101,110,101,100,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,119,105,116,104,32,97,32,112,97,114,97,109,101,116,101,114,32,116,104,97,116,32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,41,46,32,83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,55,53>>,signature => [{attribute,862,spec,{{error,3},[{type,862,bounded_fun,[{type,862,'fun',[{type,862,product,[{var,862,'Reason'},{var,862,'Args'},{var,862,'Options'}]},{type,862,no_return,[]}]},[{type,863,constraint,[{atom,863,is_subtype},[{var,863,'Reason'},{type,863,term,[]}]]},{type,864,constraint,[{atom,864,is_subtype},[{var,864,'Args'},{type,864,list,[{type,864,term,[]}]}]]},{type,865,constraint,[{atom,865,is_subtype},[{var,865,'Options'},{type,865,list,[{var,865,'Option'}]}]]},{type,866,constraint,[{atom,866,is_subtype},[{var,866,'Option'},{type,866,tuple,[{atom,866,error_info},{var,866,'ErrorInfoMap'}]}]]},{type,867,constraint,[{atom,867,is_subtype},[{var,867,'ErrorInfoMap'},{type,867,map,[{type,867,map_field_assoc,[{atom,867,cause},{type,867,term,[]}]},{type,868,map_field_assoc,[{atom,868,module},{type,868,module,[]}]},{type,869,map_field_assoc,[{atom,869,function},{type,869,atom,[]}]}]}]]}]]}]}}],since => <<50,52,46,48>>}},{{function,exit,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,875}],[<<101,120,105,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,120,105,116>>]},<<32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,97,110,121,32,116,101,114,109,46,32,65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,115,104,111,117,108,100,32,98,101,32,117,115,101,100,32,119,104,101,110,32,116,104,101,32,105,110,116,101,110,116,32,105,115,32,116,111,32,115,116,111,112,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,100,105,102,102,101,114,32,102,114,111,109,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,114,114,111,114,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,114,114,111,114,47,50>>]}]},<<32,98,121,32,99,97,117,115,105,110,103,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,97,32,100,105,102,102,101,114,101,110,116,32,99,108,97,115,115,32,97,110,100,32,98,121,32,104,97,118,105,110,103,32,97,32,114,101,97,115,111,110,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,116,104,101,32,108,105,115,116,32,111,102,32,102,117,110,99,116,105,111,110,115,32,102,114,111,109,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,46>>]},{p,[],[<<83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,120,105,116,40,102,111,111,98,97,114,41,46,10,42,42,32,101,120,99,101,112,116,105,111,110,32,101,120,105,116,58,32,102,111,111,98,97,114,10,62,32,99,97,116,99,104,32,101,120,105,116,40,102,111,111,98,97,114,41,46,10,123,39,69,88,73,84,39,44,102,111,111,98,97,114,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,99,97,108,108,115,32>>,{code,[],[<<101,120,105,116,40,107,105,108,108,41>>]},<<32,97,110,100,32,100,111,101,115,32,110,111,116,32,99,97,116,99,104,32,116,104,101,32,101,120,99,101,112,116,105,111,110,44,32,105,116,32,119,105,108,108,32,116,101,114,109,105,110,97,116,101,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,97,110,100,32,97,108,115,111,32,101,109,105,116,32,101,120,105,116,32,115,105,103,110,97,108,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,40,110,111,116,32>>,{code,[],[<<107,105,108,108,101,100>>]},<<41,32,116,111,32,97,108,108,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,46,32,83,117,99,104,32,101,120,105,116,32,115,105,103,110,97,108,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,99,97,110,32,98,101,32,116,114,97,112,112,101,100,32,98,121,32,116,104,101,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,46,32,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,115,105,103,110,97,108,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,98,101,104,97,118,101,32,100,105,102,102,101,114,101,110,116,108,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,121,32,97,114,101,32,115,101,110,116,32,98,101,99,97,117,115,101,32,116,104,101,32,115,105,103,110,97,108,32,119,105,108,108,32,98,101,32,117,110,116,114,97,112,112,97,98,108,101,32,105,102,32,97,32,112,114,111,99,101,115,115,32,115,101,110,100,115,32,115,117,99,104,32,97,32,115,105,103,110,97,108,32,116,111,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,57,55>>,signature => [{attribute,875,spec,{{exit,1},[{type,875,bounded_fun,[{type,875,'fun',[{type,875,product,[{var,875,'Reason'}]},{type,875,no_return,[]}]},[{type,876,constraint,[{atom,876,is_subtype},[{var,876,'Reason'},{type,876,term,[]}]]}]]}]}}]}},{{function,exit,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,881}],[<<101,120,105,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,98,101,104,97,118,105,111,114,32,97,112,112,108,105,101,115,32,105,102,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,97,110,121,32,116,101,114,109,44,32,101,120,99,101,112,116,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,111,114,32>>,{code,[],[<<107,105,108,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<80>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32,110,111,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32>>,{code,[],[<<80>>]},<<32,101,120,105,116,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,116,114,97,110,115,102,111,114,109,101,100,32,105,110,116,111,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,82,101,97,115,111,110,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,114,111,109>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,115,101,110,116,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,44,32,97,110,100,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,111,102,32>>,{code,[],[<<80>>]},<<46>>]}]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,98,101,104,97,118,105,111,114,32,97,112,112,108,105,101,115,32,105,102,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,116,104,101,32,116,101,114,109,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,110,100,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80>>]},<<32,119,104,105,99,104,32,105,115,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,105,110,118,111,107,101,100,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,40,80,105,100,44,32,110,111,114,109,97,108,41>>]},<<32,40,116,104,101,32,98,101,104,97,118,105,111,114,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32,115,101,110,100,115,32,97,32,115,105,103,110,97,108,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,114,101,97,115,111,110,32,116,111,32,105,116,115,101,108,102,32,105,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,119,97,114,110,105,110,103,41,58>>]},{ul,[],[{li,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,116,114,97,110,115,102,111,114,109,101,100,32,105,110,116,111,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,110,111,114,109,97,108,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,114,111,109>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,115,101,110,116,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,44,32,97,110,100,32,100,101,108,105,118,101,114,101,100,32,116,111,32>>,{code,[],[<<80>>]},<<39,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]},{li,[],[<<84,104,101,32,115,105,103,110,97,108,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,105,102,32>>,{code,[],[<<80>>]},<<32,105,115,32,110,111,116,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,46>>]}]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<107,105,108,108>>]},<<44,32,116,104,97,116,32,105,115,44,32,105,102,32>>,{code,[],[<<101,120,105,116,40,80,105,100,44,32,107,105,108,108,41>>]},<<32,105,115,32,99,97,108,108,101,100,44,32,97,110,32,117,110,116,114,97,112,112,97,98,108,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,105,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,119,104,105,99,104,32,117,110,99,111,110,100,105,116,105,111,110,97,108,108,121,32,101,120,105,116,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108,101,100>>]},<<46,32,84,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,105,115,32,99,104,97,110,103,101,100,32,102,114,111,109,32>>,{code,[],[<<107,105,108,108>>]},<<32,116,111,32>>,{code,[],[<<107,105,108,108,101,100>>]},<<32,116,111,32,104,105,110,116,32,116,111,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,116,104,101,32,107,105,108,108,101,100,32,112,114,111,99,101,115,115,32,103,111,116,32,107,105,108,108,101,100,32,98,121,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,120,105,116,40,80,105,100,44,32,107,105,108,108,41>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]}]},<<32,97,114,101,32,110,97,109,101,100,32,115,105,109,105,108,97,114,108,121,32,98,117,116,32,112,114,111,118,105,100,101,32,118,101,114,121,32,100,105,102,102,101,114,101,110,116,32,102,117,110,99,116,105,111,110,97,108,105,116,105,101,115,46,32,84,104,101,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,49>>]},<<32,102,117,110,99,116,105,111,110,32,115,104,111,117,108,100,32,98,101,32,117,115,101,100,32,119,104,101,110,32,116,104,101,32,105,110,116,101,110,116,32,105,115,32,116,111,32,115,116,111,112,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,119,104,105,108,101,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]},<<32,115,104,111,117,108,100,32,98,101,32,117,115,101,100,32,119,104,101,110,32,116,104,101,32,105,110,116,101,110,116,32,105,115,32,116,111,32,115,101,110,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,116,111,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,78,111,116,101,32,97,108,115,111,32,116,104,97,116,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,49>>]},<<32,114,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,104,97,116,32,99,97,110,32,98,101,32,99,97,117,103,104,116,32,119,104,105,108,101,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]},<<32,100,111,101,115,32,110,111,116,32,99,97,117,115,101,32,97,110,121,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,101,32,111,110,108,121,32,115,99,101,110,97,114,105,111,32,116,104,97,116,32,104,97,115,32,110,111,116,32,98,101,101,110,32,99,111,118,101,114,101,100,32,98,121,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,97,98,111,118,101,32,105,115,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80>>]},<<32,115,101,110,100,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,116,111,32,105,116,115,101,108,102,44,32,116,104,97,116,32,105,115,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,40,115,101,108,102,40,41,44,32,110,111,114,109,97,108,41>>]},<<46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,105,110,32,116,104,105,115,32,115,99,101,110,97,114,105,111,32,105,115,32,97,115,32,102,111,108,108,111,119,115,58>>]},{ul,[],[{li,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,116,114,97,110,115,102,111,114,109,101,100,32,105,110,116,111,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,110,111,114,109,97,108,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,114,111,109>>]},<<32,105,115,32>>,{code,[],[<<80>>]},<<39,115,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,97,110,100,32,100,101,108,105,118,101,114,101,100,32,116,111,32>>,{code,[],[<<80>>]},<<39,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]},{li,[],[{code,[],[<<80>>]},<<32,101,120,105,116,115,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,105,102,32>>,{code,[],[<<80>>]},<<32,105,115,32,110,111,116,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,46>>]}]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,98,101,104,97,118,105,111,114,32,100,101,115,99,114,105,98,101,100,32,97,98,111,118,101,32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32,115,101,110,100,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,116,111,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,115,32,97,114,103,117,97,98,108,121,32,115,116,114,97,110,103,101,32,98,117,116,32,116,104,105,115,32,98,101,104,97,118,105,111,114,32,105,115,32,107,101,112,116,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,114,101,97,115,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,56,51,57>>,signature => [{attribute,881,spec,{{exit,2},[{type,881,bounded_fun,[{type,881,'fun',[{type,881,product,[{var,881,'Pid'},{var,881,'Reason'}]},{atom,881,true}]},[{type,882,constraint,[{atom,882,is_subtype},[{var,882,'Pid'},{type,882,union,[{type,882,pid,[]},{type,882,port,[]}]}]]},{type,883,constraint,[{atom,883,is_subtype},[{var,883,'Reason'},{type,883,term,[]}]]}]]}]}}]}},{{function,external_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,895}],[<<101,120,116,101,114,110,97,108,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,97,108,99,117,108,97,116,101,115,44,32,119,105,116,104,111,117,116,32,100,111,105,110,103,32,116,104,101,32,101,110,99,111,100,105,110,103,44,32,116,104,101,32,109,97,120,105,109,117,109,32,98,121,116,101,32,115,105,122,101,32,102,111,114,32,97,32,116,101,114,109,32,101,110,99,111,100,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,32,97,112,112,108,105,101,115,32,97,108,119,97,121,115,58>>]},{pre,[],[{code,[],[<<62,32,83,105,122,101,49,32,61,32,98,121,116,101,95,115,105,122,101,40,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,41,41,44,10,62,32,83,105,122,101,50,32,61,32,101,114,108,97,110,103,58,101,120,116,101,114,110,97,108,95,115,105,122,101,40,84,101,114,109,41,44,10,62,32,116,114,117,101,32,61,32,83,105,122,101,49,32,61,60,32,83,105,122,101,50,46,10,116,114,117,101>>]}]},{p,[],[<<84,104,105,115,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,97,32,99,97,108,108,32,116,111,58>>]},{pre,[],[{code,[],[<<101,114,108,97,110,103,58,101,120,116,101,114,110,97,108,95,115,105,122,101,40,84,101,114,109,44,32,91,93,41>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,57,50,53>>,signature => [{attribute,895,spec,{{erlang,external_size,1},[{type,895,bounded_fun,[{type,895,'fun',[{type,895,product,[{var,895,'Term'}]},{type,895,non_neg_integer,[]}]},[{type,896,constraint,[{atom,896,is_subtype},[{var,896,'Term'},{type,896,term,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66,48,52>>}},{{function,external_size,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,901}],[<<101,120,116,101,114,110,97,108,95,115,105,122,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,97,108,99,117,108,97,116,101,115,44,32,119,105,116,104,111,117,116,32,100,111,105,110,103,32,116,104,101,32,101,110,99,111,100,105,110,103,44,32,116,104,101,32,109,97,120,105,109,117,109,32,98,121,116,101,32,115,105,122,101,32,102,111,114,32,97,32,116,101,114,109,32,101,110,99,111,100,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,32,97,112,112,108,105,101,115,32,97,108,119,97,121,115,58>>]},{pre,[],[{code,[],[<<62,32,83,105,122,101,49,32,61,32,98,121,116,101,95,115,105,122,101,40,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,44,32,79,112,116,105,111,110,115,41,41,44,10,62,32,83,105,122,101,50,32,61,32,101,114,108,97,110,103,58,101,120,116,101,114,110,97,108,95,115,105,122,101,40,84,101,114,109,44,32,79,112,116,105,111,110,115,41,44,10,62,32,116,114,117,101,32,61,32,83,105,122,101,49,32,61,60,32,83,105,122,101,50,46,10,116,114,117,101>>]}]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<123,109,105,110,111,114,95,118,101,114,115,105,111,110,44,32,86,101,114,115,105,111,110,125>>]},<<32,115,112,101,99,105,102,105,101,115,32,104,111,119,32,102,108,111,97,116,115,32,97,114,101,32,101,110,99,111,100,101,100,46,32,70,111,114,32,97,32,100,101,116,97,105,108,101,100,32,100,101,115,99,114,105,112,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,57,52,52>>,signature => [{attribute,901,spec,{{erlang,external_size,2},[{type,901,bounded_fun,[{type,901,'fun',[{type,901,product,[{var,901,'Term'},{var,901,'Options'}]},{type,901,non_neg_integer,[]}]},[{type,902,constraint,[{atom,902,is_subtype},[{var,902,'Term'},{type,902,term,[]}]]},{type,903,constraint,[{atom,903,is_subtype},[{var,903,'Options'},{type,903,list,[{type,903,tuple,[{atom,903,minor_version},{ann_type,903,[{var,903,'Version'},{type,903,non_neg_integer,[]}]}]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66,48,52>>}},{{function,float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,925}],[<<102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,102,108,111,97,116,32,98,121,32,99,111,110,118,101,114,116,105,110,103,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,97,32,102,108,111,97,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,97,116,40,53,53,41,46,10,53,53,46,48>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,117,115,101,100,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,105,110,32,97,32,103,117,97,114,100,44,32,105,116,32,116,101,115,116,115,32,119,104,101,116,104,101,114,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,110,117,109,98,101,114,59,32,102,111,114,32,99,108,97,114,105,116,121,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,115,95,102,108,111,97,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,102,108,111,97,116,47,49>>]}]},<<32,105,110,115,116,101,97,100,46>>]},{p,[],[<<87,104,101,110,32>>,{code,[],[<<102,108,111,97,116,47,49>>]},<<32,105,115,32,117,115,101,100,32,105,110,32,97,110,32,101,120,112,114,101,115,115,105,111,110,32,105,110,32,97,32,103,117,97,114,100,44,32,115,117,99,104,32,97,115,32,39>>,{code,[],[<<102,108,111,97,116,40,65,41,32,61,61,32,52,46,48>>]},<<39,44,32,105,116,32,99,111,110,118,101,114,116,115,32,97,32,110,117,109,98,101,114,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,57,54,52>>,signature => [{attribute,925,spec,{{float,1},[{type,925,bounded_fun,[{type,925,'fun',[{type,925,product,[{var,925,'Number'}]},{type,925,float,[]}]},[{type,926,constraint,[{atom,926,is_subtype},[{var,926,'Number'},{type,926,number,[]}]]}]]}]}}]}},{{function,float_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,931}],[<<102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,70,108,111,97,116,44,91,123,115,99,105,101,110,116,105,102,105,99,44,50,48,125,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,57,56,54>>,signature => [{attribute,931,spec,{{float_to_binary,1},[{type,931,bounded_fun,[{type,931,'fun',[{type,931,product,[{var,931,'Float'}]},{type,931,binary,[]}]},[{type,932,constraint,[{atom,932,is_subtype},[{var,932,'Float'},{type,932,float,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,float_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,937}],[<<102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,108,111,97,116>>]},<<32,117,115,105,110,103,32,102,105,120,101,100,32,100,101,99,105,109,97,108,32,112,111,105,110,116,32,102,111,114,109,97,116,116,105,110,103,46,32>>,{code,[],[<<79,112,116,105,111,110,115>>]},<<32,98,101,104,97,118,101,115,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,108,111,97,116,95,116,111,95,108,105,115,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,50>>]}]},<<46,32,69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,93,41,46,10,60,60,34,55,46,49,50,48,48,34,62,62,10,62,32,102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,44,32,99,111,109,112,97,99,116,93,41,46,10,60,60,34,55,46,49,50,34,62,62,10,62,32,102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,55,46,49,50,44,32,91,123,115,99,105,101,110,116,105,102,105,99,44,32,51,125,93,41,46,10,60,60,34,55,46,49,50,48,101,43,48,48,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,57,57,53>>,signature => [{attribute,937,spec,{{float_to_binary,2},[{type,937,bounded_fun,[{type,937,'fun',[{type,937,product,[{var,937,'Float'},{var,937,'Options'}]},{type,937,binary,[]}]},[{type,938,constraint,[{atom,938,is_subtype},[{var,938,'Float'},{type,938,float,[]}]]},{type,939,constraint,[{atom,939,is_subtype},[{var,939,'Options'},{type,939,list,[{var,939,'Option'}]}]]},{type,940,constraint,[{atom,940,is_subtype},[{var,940,'Option'},{type,940,union,[{type,940,tuple,[{atom,940,decimals},{ann_type,940,[{var,940,'Decimals'},{type,940,range,[{integer,940,0},{integer,940,253}]}]}]},{type,941,tuple,[{atom,941,scientific},{ann_type,941,[{var,941,'Decimals'},{type,941,range,[{integer,941,0},{integer,941,249}]}]}]},{atom,942,compact}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,float_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,947}],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,40,70,108,111,97,116,44,91,123,115,99,105,101,110,116,105,102,105,99,44,50,48,125,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,49,53>>,signature => [{attribute,947,spec,{{float_to_list,1},[{type,947,bounded_fun,[{type,947,'fun',[{type,947,product,[{var,947,'Float'}]},{type,947,string,[]}]},[{type,948,constraint,[{atom,948,is_subtype},[{var,948,'Float'},{type,948,float,[]}]]}]]}]}}]}},{{function,float_to_list,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,953}],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,108,111,97,116>>]},<<32,117,115,105,110,103,32,102,105,120,101,100,32,100,101,99,105,109,97,108,32,112,111,105,110,116,32,102,111,114,109,97,116,116,105,110,103,46>>]},{p,[],[<<65,118,97,105,108,97,98,108,101,32,111,112,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<100,101,99,105,109,97,108,115>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,99,111,110,116,97,105,110,115,32,97,116,32,109,111,115,116,32>>,{code,[],[<<68,101,99,105,109,97,108,115>>]},<<32,110,117,109,98,101,114,32,111,102,32,100,105,103,105,116,115,32,112,97,115,116,32,116,104,101,32,100,101,99,105,109,97,108,32,112,111,105,110,116,46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,100,111,101,115,32,110,111,116,32,102,105,116,32,105,110,32,116,104,101,32,105,110,116,101,114,110,97,108,32,115,116,97,116,105,99,32,98,117,102,102,101,114,32,111,102,32,50,53,54,32,98,121,116,101,115,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,116,104,114,111,119,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46>>]}]},{li,[],[{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,97,99,116>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,116,114,97,105,108,105,110,103,32,122,101,114,111,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,108,105,115,116,32,97,114,101,32,116,114,117,110,99,97,116,101,100,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,111,110,108,121,32,109,101,97,110,105,110,103,102,117,108,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<100,101,99,105,109,97,108,115>>]},<<46>>]}]},{li,[],[{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<115,99,105,101,110,116,105,102,105,99>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,102,108,111,97,116,32,105,115,32,102,111,114,109,97,116,116,101,100,32,117,115,105,110,103,32,115,99,105,101,110,116,105,102,105,99,32,110,111,116,97,116,105,111,110,32,119,105,116,104,32>>,{code,[],[<<68,101,99,105,109,97,108,115>>]},<<32,100,105,103,105,116,115,32,111,102,32,112,114,101,99,105,115,105,111,110,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,115>>]},<<32,105,115,32>>,{code,[],[<<91,93>>]},<<44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,98,101,104,97,118,101,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,108,111,97,116,95,116,111,95,108,105,115,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,49>>]}]},<<46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,93,41,46,10,34,55,46,49,50,48,48,34,10,62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,44,32,99,111,109,112,97,99,116,93,41,46,10,34,55,46,49,50,34,10,62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,55,46,49,50,44,32,91,123,115,99,105,101,110,116,105,102,105,99,44,32,51,125,93,41,46,10,34,55,46,49,50,48,101,43,48,48,34,10,62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,48,46,49,43,48,46,50,41,10,34,51,46,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,52,52,52,48,57,101,45,48,49,34>>]}]},{p,[],[<<73,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,40,48,46,49,43,48,46,50,41>>]},<<32,101,118,97,108,117,97,116,101,115,32,116,111,32>>,{code,[],[<<34,51,46,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,52,52,52,48,57,101,45,48,49,34>>]},<<46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,101,120,112,108,97,105,110,101,100,32,105,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115,35,102,108,111,97,116,95,114,101,112,114,101,115,101,110,116,97,116,105,111,110,95,112,114,111,98,108,101,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,70,108,111,97,116,105,110,103,32,80,111,105,110,116,32,78,117,109,98,101,114,115>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,50,52>>,signature => [{attribute,953,spec,{{float_to_list,2},[{type,953,bounded_fun,[{type,953,'fun',[{type,953,product,[{var,953,'Float'},{var,953,'Options'}]},{type,953,string,[]}]},[{type,954,constraint,[{atom,954,is_subtype},[{var,954,'Float'},{type,954,float,[]}]]},{type,955,constraint,[{atom,955,is_subtype},[{var,955,'Options'},{type,955,list,[{var,955,'Option'}]}]]},{type,956,constraint,[{atom,956,is_subtype},[{var,956,'Option'},{type,956,union,[{type,956,tuple,[{atom,956,decimals},{ann_type,956,[{var,956,'Decimals'},{type,956,range,[{integer,956,0},{integer,956,253}]}]}]},{type,957,tuple,[{atom,957,scientific},{ann_type,957,[{var,957,'Decimals'},{type,957,range,[{integer,957,0},{integer,957,249}]}]}]},{atom,958,compact}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,floor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,964}],[<<102,108,111,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,97,114,103,101,115,116,32,105,110,116,101,103,101,114,32,110,111,116,32,103,114,101,97,116,101,114,32,116,104,97,110,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,111,114,40,45,49,48,46,53,41,46,10,45,49,49>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,55,48>>,signature => [{attribute,964,spec,{{floor,1},[{type,964,bounded_fun,[{type,964,'fun',[{type,964,product,[{var,964,'Number'}]},{type,964,integer,[]}]},[{type,965,constraint,[{atom,965,is_subtype},[{var,965,'Number'},{type,965,number,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,fun_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3434}],[<<102,117,110,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,102,117,110,32>>,{code,[],[<<70,117,110>>]},<<46,32,69,97,99,104,32,108,105,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,116,117,112,108,101,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,110,100,32,109,111,114,101,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,109,97,105,110,108,121,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,44,32,98,117,116,32,105,116,32,99,97,110,32,115,111,109,101,116,105,109,101,115,32,98,101,32,117,115,101,102,117,108,32,105,110,32,108,105,98,114,97,114,121,32,102,117,110,99,116,105,111,110,115,32,116,104,97,116,32,110,101,101,100,32,116,111,32,118,101,114,105,102,121,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,114,105,116,121,32,111,102,32,97,32,102,117,110,46>>]}]},{p,[],[<<84,119,111,32,116,121,112,101,115,32,111,102,32,102,117,110,115,32,104,97,118,101,32,115,108,105,103,104,116,108,121,32,100,105,102,102,101,114,101,110,116,32,115,101,109,97,110,116,105,99,115,58>>]},{ul,[],[{li,[],[{p,[],[<<65,32,102,117,110,32,99,114,101,97,116,101,100,32,98,121,32>>,{code,[],[<<102,117,110,32,77,58,70,47,65>>]},<<32,105,115,32,99,97,108,108,101,100,32,97,110,32>>,{em,[],[<<101,120,116,101,114,110,97,108>>]},<<32,102,117,110,46,32,67,97,108,108,105,110,103,32,105,116,32,119,105,108,108,32,97,108,119,97,121,115,32,99,97,108,108,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<70>>]},<<32,119,105,116,104,32,97,114,105,116,121,32>>,{code,[],[<<65>>]},<<32,105,110,32,116,104,101,32,108,97,116,101,115,116,32,99,111,100,101,32,102,111,114,32,109,111,100,117,108,101,32>>,{code,[],[<<77>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,109,111,100,117,108,101,32>>,{code,[],[<<77>>]},<<32,100,111,101,115,32,110,111,116,32,101,118,101,110,32,110,101,101,100,32,116,111,32,98,101,32,108,111,97,100,101,100,32,119,104,101,110,32,116,104,101,32,102,117,110,32>>,{code,[],[<<102,117,110,32,77,58,70,47,65>>]},<<32,105,115,32,99,114,101,97,116,101,100,46>>]}]},{li,[],[{p,[],[<<65,108,108,32,111,116,104,101,114,32,102,117,110,115,32,97,114,101,32,99,97,108,108,101,100,32>>,{em,[],[<<108,111,99,97,108>>]},<<46,32,87,104,101,110,32,97,32,108,111,99,97,108,32,102,117,110,32,105,115,32,99,97,108,108,101,100,44,32,116,104,101,32,115,97,109,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,99,111,100,101,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,102,117,110,32,105,115,32,99,97,108,108,101,100,32,40,101,118,101,110,32,105,102,32,97,32,110,101,119,101,114,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,104,97,115,32,98,101,101,110,32,108,111,97,100,101,100,41,46>>]}]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,108,101,109,101,110,116,115,32,97,114,101,32,97,108,119,97,121,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,32,102,111,114,32,98,111,116,104,32,108,111,99,97,108,32,97,110,100,32,101,120,116,101,114,110,97,108,32,102,117,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,116,121,112,101,44,32,84,121,112,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,111,114,32>>,{code,[],[<<101,120,116,101,114,110,97,108>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,109,111,100,117,108,101,44,32,77,111,100,117,108,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<32,40,97,110,32,97,116,111,109,41,32,105,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,44,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,116,104,101,32,109,111,100,117,108,101,32,105,110,32,119,104,105,99,104,32,116,104,101,32,102,117,110,32,105,115,32,100,101,102,105,110,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,110,32,101,120,116,101,114,110,97,108,32,102,117,110,44,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,116,104,101,32,109,111,100,117,108,101,32,116,104,97,116,32,116,104,101,32,102,117,110,32,114,101,102,101,114,115,32,116,111,46>>]}]},{dt,[],[{code,[],[<<123,110,97,109,101,44,32,78,97,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<78,97,109,101>>]},<<32,40,97,110,32,97,116,111,109,41,32,105,115,32,97,32,102,117,110,99,116,105,111,110,32,110,97,109,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,44,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101,32,102,117,110,46,32,40,84,104,105,115,32,110,97,109,101,32,119,97,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,116,104,101,32,99,111,109,112,105,108,101,114,44,32,97,110,100,32,105,115,32,111,110,108,121,32,111,102,32,105,110,102,111,114,109,97,116,105,111,110,97,108,32,117,115,101,46,32,65,115,32,105,116,32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,44,32,105,116,32,99,97,110,110,111,116,32,98,101,32,99,97,108,108,101,100,32,100,105,114,101,99,116,108,121,46,41,32,73,102,32,110,111,32,99,111,100,101,32,105,115,32,99,117,114,114,101,110,116,108,121,32,108,111,97,100,101,100,32,102,111,114,32,116,104,101,32,102,117,110,44,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,32,111,102,32,97,110,32,97,116,111,109,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,110,32,101,120,116,101,114,110,97,108,32,102,117,110,44,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,112,111,114,116,101,100,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,116,104,101,32,102,117,110,32,114,101,102,101,114,115,32,116,111,46>>]}]},{dt,[],[{code,[],[<<123,97,114,105,116,121,44,32,65,114,105,116,121,125>>]}]},{dd,[],[{p,[],[{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,116,104,97,116,32,116,104,101,32,102,117,110,32,105,115,32,116,111,32,98,101,32,99,97,108,108,101,100,32,119,105,116,104,46>>]}]},{dt,[],[{code,[],[<<123,101,110,118,44,32,69,110,118,125>>]}]},{dd,[],[{p,[],[{code,[],[<<69,110,118>>]},<<32,40,97,32,108,105,115,116,41,32,105,115,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,111,114,32,102,114,101,101,32,118,97,114,105,97,98,108,101,115,32,102,111,114,32,116,104,101,32,102,117,110,46,32,70,111,114,32,101,120,116,101,114,110,97,108,32,102,117,110,115,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,105,115,32,97,108,119,97,121,115,32,101,109,112,116,121,46>>]}]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,108,101,109,101,110,116,115,32,97,114,101,32,111,110,108,121,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,32,105,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,108,111,99,97,108,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,105,100,44,32,80,105,100,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,111,114,105,103,105,110,97,108,108,121,32,99,114,101,97,116,101,100,32,116,104,101,32,102,117,110,46>>]},{p,[],[<<73,116,32,109,105,103,104,116,32,112,111,105,110,116,32,116,111,32,116,104,101,32>>,{code,[],[<<105,110,105,116>>]},<<32,112,114,111,99,101,115,115,32,105,102,32,116,104,101,32>>,{code,[],[<<70,117,110>>]},<<32,119,97,115,32,115,116,97,116,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,119,104,101,110,32,109,111,100,117,108,101,32,119,97,115,32,108,111,97,100,101,100,32,40,116,104,105,115,32,111,112,116,105,109,105,115,97,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,102,111,114,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,115,32,116,104,97,116,32,100,111,32,110,111,116,32,99,97,112,116,117,114,101,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,41,46>>]}]},{dt,[],[{code,[],[<<123,105,110,100,101,120,44,32,73,110,100,101,120,125>>]}]},{dd,[],[{p,[],[{code,[],[<<73,110,100,101,120>>]},<<32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,115,32,97,110,32,105,110,100,101,120,32,105,110,116,111,32,116,104,101,32,109,111,100,117,108,101,32,102,117,110,32,116,97,98,108,101,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,95,105,110,100,101,120,44,32,73,110,100,101,120,125>>]}]},{dd,[],[{p,[],[{code,[],[<<73,110,100,101,120>>]},<<32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,115,32,97,110,32,105,110,100,101,120,32,105,110,116,111,32,116,104,101,32,109,111,100,117,108,101,32,102,117,110,32,116,97,98,108,101,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,95,117,110,105,113,44,32,85,110,105,113,125>>]}]},{dd,[],[{p,[],[{code,[],[<<85,110,105,113>>]},<<32,40,97,32,98,105,110,97,114,121,41,32,105,115,32,97,32,117,110,105,113,117,101,32,118,97,108,117,101,32,102,111,114,32,116,104,105,115,32,102,117,110,46,32,73,116,32,105,115,32,99,97,108,99,117,108,97,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,109,112,105,108,101,100,32,99,111,100,101,32,102,111,114,32,116,104,101,32,101,110,116,105,114,101,32,109,111,100,117,108,101,46>>]}]},{dt,[],[{code,[],[<<123,117,110,105,113,44,32,85,110,105,113,125>>]}]},{dd,[],[{p,[],[{code,[],[<<85,110,105,113>>]},<<32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,115,32,97,32,117,110,105,113,117,101,32,118,97,108,117,101,32,102,111,114,32,116,104,105,115,32,102,117,110,46,32,65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,53,44,32,116,104,105,115,32,105,110,116,101,103,101,114,32,105,115,32,99,97,108,99,117,108,97,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,109,112,105,108,101,100,32,99,111,100,101,32,102,111,114,32,116,104,101,32,101,110,116,105,114,101,32,109,111,100,117,108,101,46,32,66,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,82,49,53,44,32,116,104,105,115,32,105,110,116,101,103,101,114,32,119,97,115,32,98,97,115,101,100,32,111,110,32,111,110,108,121,32,116,104,101,32,98,111,100,121,32,111,102,32,116,104,101,32,102,117,110,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,56,52>>,signature => [{attribute,3434,spec,{{erlang,fun_info,1},[{type,3434,bounded_fun,[{type,3434,'fun',[{type,3434,product,[{var,3434,'Fun'}]},{type,3434,list,[{type,3434,tuple,[{var,3434,'Item'},{var,3434,'Info'}]}]}]},[{type,3435,constraint,[{atom,3435,is_subtype},[{var,3435,'Fun'},{type,3435,function,[]}]]},{type,3436,constraint,[{atom,3436,is_subtype},[{var,3436,'Item'},{type,3436,union,[{atom,3436,arity},{atom,3436,env},{atom,3436,index},{atom,3436,name},{atom,3437,module},{atom,3437,new_index},{atom,3437,new_uniq},{atom,3437,pid},{atom,3437,type},{atom,3437,uniq}]}]]},{type,3438,constraint,[{atom,3438,is_subtype},[{var,3438,'Info'},{type,3438,term,[]}]]}]]}]}}]}},{{function,fun_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,970}],[<<102,117,110,95,105,110,102,111,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<102,117,110,95,105,110,102,111,95,105,116,101,109>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32>>,{code,[],[<<70,117,110>>]},<<32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<44,32,105,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,73,116,101,109,44,73,110,102,111,125>>]},<<46>>]},{p,[],[<<70,111,114,32,97,110,121,32,102,117,110,44,32>>,{code,[],[<<73,116,101,109>>]},<<32,99,97,110,32,98,101,32,97,110,121,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<109,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<110,97,109,101>>]},<<44,32>>,{code,[],[<<97,114,105,116,121>>]},<<44,32>>,{code,[],[<<101,110,118>>]},<<44,32,111,114,32>>,{code,[],[<<116,121,112,101>>]},<<46>>]},{p,[],[<<70,111,114,32,97,32,108,111,99,97,108,32,102,117,110,44,32>>,{code,[],[<<73,116,101,109>>]},<<32,99,97,110,32,97,108,115,111,32,98,101,32,97,110,121,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<105,110,100,101,120>>]},<<44,32>>,{code,[],[<<110,101,119,95,105,110,100,101,120>>]},<<44,32>>,{code,[],[<<110,101,119,95,117,110,105,113>>]},<<44,32>>,{code,[],[<<117,110,105,113>>]},<<44,32,97,110,100,32>>,{code,[],[<<112,105,100>>]},<<46,32,70,111,114,32,97,110,32,101,120,116,101,114,110,97,108,32,102,117,110,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,97,110,121,32,111,102,32,116,104,101,115,101,32,105,116,101,109,115,32,105,115,32,97,108,119,97,121,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,117,110,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,102,117,110,95,105,110,102,111,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,49,56,57>>,signature => [{attribute,970,spec,{{erlang,fun_info,2},[{type,970,bounded_fun,[{type,970,'fun',[{type,970,product,[{var,970,'Fun'},{var,970,'Item'}]},{type,970,tuple,[{var,970,'Item'},{var,970,'Info'}]}]},[{type,971,constraint,[{atom,971,is_subtype},[{var,971,'Fun'},{type,971,function,[]}]]},{type,972,constraint,[{atom,972,is_subtype},[{var,972,'Item'},{user_type,972,fun_info_item,[]}]]},{type,973,constraint,[{atom,973,is_subtype},[{var,973,'Info'},{type,973,term,[]}]]}]]}]}}]}},{{function,fun_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,987}],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,116,104,97,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,99,111,100,101,32,116,104,97,116,32,99,114,101,97,116,101,100,32>>,{code,[],[<<70,117,110>>]},<<46>>]},{p,[],[{code,[],[<<83,116,114,105,110,103>>]},<<32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,44,32,105,102,32>>,{code,[],[<<70,117,110>>]},<<32,119,97,115,32,99,114,101,97,116,101,100,32,98,121,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,102,117,110,45,101,120,112,114,101,115,115,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<102,117,110,32,101,120,112,114,101,115,115,105,111,110>>]},<<32,111,102,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<102,117,110,32,77,111,100,117,108,101,78,97,109,101,58,70,117,110,99,78,97,109,101,47,65,114,105,116,121>>]},<<58>>]},{p,[],[{code,[],[<<34,102,117,110,32,77,111,100,117,108,101,78,97,109,101,58,70,117,110,99,78,97,109,101,47,65,114,105,116,121,34>>]}]},{p,[],[<<84,104,101,32,102,111,114,109,32,111,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,119,104,101,110,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,99,114,101,97,116,101,100,32,102,114,111,109,32,111,116,104,101,114,32,116,121,112,101,115,32,111,102,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,102,117,110,45,101,120,112,114,101,115,115,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<102,117,110,32,101,120,112,114,101,115,115,105,111,110,115>>]},<<32,100,105,102,102,101,114,115,32,100,101,112,101,110,100,105,110,103,32,111,110,32,105,102,32,116,104,101,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,101,120,101,99,117,116,101,100,32,119,104,105,108,101,32,101,120,101,99,117,116,105,110,103,32,99,111,109,112,105,108,101,100,32,99,111,100,101,32,111,114,32,105,102,32,116,104,101,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,101,120,101,99,117,116,101,100,32,119,104,105,108,101,32,101,120,101,99,117,116,105,110,103,32,117,110,99,111,109,112,105,108,101,100,32,99,111,100,101,32,40,117,110,99,111,109,112,105,108,101,100,32,101,115,99,114,105,112,116,115,44,32,116,104,101,32,69,114,108,97,110,103,32,115,104,101,108,108,44,32,97,110,100,32,111,116,104,101,114,32,99,111,100,101,32,101,120,101,99,117,116,101,100,32,98,121,32,116,104,101,32,101,114,108,95,101,118,97,108,32,109,111,100,117,108,101,41,58>>]},{dl,[],[{dt,[],[<<99,111,109,112,105,108,101,100,32,99,111,100,101>>]},{dd,[],[{p,[],[{code,[],[<<34,35,70,117,110,60,77,46,73,46,85,62,34>>]},<<44,32,119,104,101,114,101,32,77,44,32,73,32,97,110,100,32,85,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101,32,118,97,108,117,101,115,32,110,97,109,101,100,32>>,{code,[],[<<109,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<105,110,100,101,120>>]},<<32,97,110,100,32>>,{code,[],[<<117,110,105,113>>]},<<32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,117,110,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,102,117,110,95,105,110,102,111,40,70,117,110,41>>]}]},<<46>>]}]},{dt,[],[<<117,110,99,111,109,112,105,108,101,100,32,99,111,100,101>>]},{dd,[],[<<65,108,108,32,102,117,110,115,32,99,114,101,97,116,101,100,32,102,114,111,109,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,117,110,99,111,109,112,105,108,101,100,32,99,111,100,101,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,97,114,105,116,121,32,97,114,101,32,109,97,112,112,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,108,105,115,116,32,98,121,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<71,101,110,101,114,97,108,108,121,44,32,111,110,101,32,99,97,110,32,110,111,116,32,117,115,101,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<32,116,111,32,99,104,101,99,107,32,105,102,32,116,119,111,32,102,117,110,115,32,97,114,101,32,101,113,117,97,108,32,97,115,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<32,100,111,101,115,32,110,111,116,32,116,97,107,101,32,116,104,101,32,102,117,110,39,115,32,101,110,118,105,114,111,110,109,101,110,116,32,105,110,116,111,32,97,99,99,111,117,110,116,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,117,110,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,102,117,110,95,105,110,102,111,47,49>>]}]},<<32,102,111,114,32,104,111,119,32,116,111,32,103,101,116,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,111,102,32,97,32,102,117,110,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,111,117,116,112,117,116,32,111,102,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,69,114,108,97,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,32,97,110,100,32,109,97,121,32,99,104,97,110,103,101,32,105,110,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,115,46>>]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<45,109,111,100,117,108,101,40,116,101,115,116,41,46,10,45,101,120,112,111,114,116,40,91,97,100,100,47,49,44,32,97,100,100,50,47,48,44,32,102,117,110,95,116,117,112,108,101,47,48,93,41,46,10,97,100,100,40,65,41,32,45,62,32,102,117,110,40,66,41,32,45,62,32,65,32,43,32,66,32,101,110,100,46,10,97,100,100,50,40,41,32,45,62,32,102,117,110,32,97,100,100,47,49,46,10,102,117,110,95,116,117,112,108,101,40,41,32,45,62,32,123,102,117,110,40,41,32,45,62,32,49,32,101,110,100,44,32,102,117,110,40,41,32,45,62,32,49,32,101,110,100,125,46,10,32,32,32,32,32,32,32,32>>]}]},{pre,[],[{code,[],[<<62,32,123,102,117,110,32,116,101,115,116,58,97,100,100,47,49,44,32,116,101,115,116,58,97,100,100,50,40,41,125,46,10,123,102,117,110,32,116,101,115,116,58,97,100,100,47,49,44,35,70,117,110,60,116,101,115,116,46,49,46,49,48,55,55,51,56,57,56,51,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32>>,{code,[],[<<102,117,110,32,116,101,115,116,58,97,100,100,47,49>>]},<<32,105,115,32,117,112,103,114,97,100,97,98,108,101,32,98,117,116,32>>,{code,[],[<<116,101,115,116,58,97,100,100,50,40,41>>]},<<32,105,115,32,110,111,116,32,117,112,103,114,97,100,97,98,108,101,46>>]},{pre,[],[{code,[],[<<62,32,123,116,101,115,116,58,97,100,100,40,49,41,44,32,116,101,115,116,58,97,100,100,40,52,50,41,125,46,10,123,35,70,117,110,60,116,101,115,116,46,48,46,49,48,55,55,51,56,57,56,51,62,44,35,70,117,110,60,116,101,115,116,46,48,46,49,48,55,55,51,56,57,56,51,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32>>,{code,[],[<<116,101,115,116,58,97,100,100,40,49,41>>]},<<32,97,110,100,32>>,{code,[],[<<116,101,115,116,58,97,100,100,40,52,50,41>>]},<<32,104,97,115,32,116,104,101,32,115,97,109,101,32,115,116,114,105,110,103,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,97,115,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,105,115,32,110,111,116,32,116,97,107,101,110,32,105,110,116,111,32,97,99,99,111,117,110,116,46>>]},{pre,[],[{code,[],[<<62,116,101,115,116,58,102,117,110,95,116,117,112,108,101,40,41,46,10,123,35,70,117,110,60,116,101,115,116,46,50,46,49,48,55,55,51,56,57,56,51,62,44,35,70,117,110,60,116,101,115,116,46,51,46,49,48,55,55,51,56,57,56,51,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32,84,104,101,32,115,116,114,105,110,103,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,115,32,100,105,102,102,101,114,32,98,101,99,97,117,115,101,32,116,104,101,32,102,117,110,115,32,99,111,109,101,32,102,114,111,109,32,100,105,102,102,101,114,101,110,116,32,102,117,110,32,101,120,112,101,114,115,115,105,111,110,115,46>>]},{pre,[],[{code,[],[<<62,32,123,102,117,110,40,41,32,45,62,32,49,32,101,110,100,44,32,102,117,110,40,41,32,45,62,32,49,32,101,110,100,125,46,32,62,32,10,123,35,70,117,110,60,101,114,108,95,101,118,97,108,46,52,53,46,57,55,50,56,51,48,57,53,62,44,35,70,117,110,60,101,114,108,95,101,118,97,108,46,52,53,46,57,55,50,56,51,48,57,53,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32,65,108,108,32,102,117,110,115,32,99,114,101,97,116,101,100,32,102,114,111,109,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,115,32,111,102,32,116,104,105,115,32,102,111,114,109,32,105,110,32,117,110,99,111,109,112,105,108,101,100,32,99,111,100,101,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,97,114,105,116,121,32,97,114,101,32,109,97,112,112,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,108,105,115,116,32,98,121,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,50,48,57>>,signature => [{attribute,987,spec,{{erlang,fun_to_list,1},[{type,987,bounded_fun,[{type,987,'fun',[{type,987,product,[{var,987,'Fun'}]},{ann_type,987,[{var,987,'String'},{type,987,string,[]}]}]},[{type,988,constraint,[{atom,988,is_subtype},[{var,988,'Fun'},{type,988,function,[]}]]}]]}]}}]}},{{function,function_exported,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,993}],[<<102,117,110,99,116,105,111,110,95,101,120,112,111,114,116,101,100,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,108,111,97,100,101,100,32,97,110,100,32,99,111,110,116,97,105,110,115,32,97,110,32,101,120,112,111,114,116,101,100,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<70,117,110,99,116,105,111,110,47,65,114,105,116,121>>]},<<44,32,111,114,32,105,102,32,116,104,101,114,101,32,105,115,32,97,32,66,73,70,32,40,97,32,98,117,105,108,116,45,105,110,32,102,117,110,99,116,105,111,110,32,105,109,112,108,101,109,101,110,116,101,100,32,105,110,32,67,41,32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,110,97,109,101,44,32,111,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,117,115,101,100,32,116,111,32,114,101,116,117,114,110,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,102,111,114,32,66,73,70,115,32,98,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,49,56,46,48,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,50,57,56>>,signature => [{attribute,993,spec,{{erlang,function_exported,3},[{type,993,bounded_fun,[{type,993,'fun',[{type,993,product,[{var,993,'Module'},{var,993,'Function'},{var,993,'Arity'}]},{type,993,boolean,[]}]},[{type,994,constraint,[{atom,994,is_subtype},[{var,994,'Module'},{type,994,module,[]}]]},{type,995,constraint,[{atom,995,is_subtype},[{var,995,'Function'},{type,995,atom,[]}]]},{type,996,constraint,[{atom,996,is_subtype},[{var,996,'Arity'},{type,996,arity,[]}]]}]]}]}}]}},{{function,garbage_collect,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1001}],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>],#{<<101,110>> => [{p,[],[<<70,111,114,99,101,115,32,97,110,32,105,109,109,101,100,105,97,116,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,116,104,101,32,101,120,101,99,117,116,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,117,110,108,101,115,115,32,105,116,32,104,97,115,32,98,101,101,110,32,110,111,116,105,99,101,100,32,40,111,114,32,116,104,101,114,101,32,97,114,101,32,103,111,111,100,32,114,101,97,115,111,110,115,32,116,111,32,115,117,115,112,101,99,116,41,32,116,104,97,116,32,116,104,101,32,115,112,111,110,116,97,110,101,111,117,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,119,105,108,108,32,111,99,99,117,114,32,116,111,111,32,108,97,116,101,32,111,114,32,110,111,116,32,97,116,32,97,108,108,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,109,112,114,111,112,101,114,32,117,115,101,32,99,97,110,32,115,101,114,105,111,117,115,108,121,32,100,101,103,114,97,100,101,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,51,49,52>>,signature => [{attribute,1001,spec,{{garbage_collect,0},[{type,1001,'fun',[{type,1001,product,[]},{atom,1001,true}]}]}}]}},{{function,garbage_collect,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1006}],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,40,80,105,100,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,51,51,48>>,signature => [{attribute,1006,spec,{{garbage_collect,1},[{type,1006,bounded_fun,[{type,1006,'fun',[{type,1006,product,[{var,1006,'Pid'}]},{var,1006,'GCResult'}]},[{type,1007,constraint,[{atom,1007,is_subtype},[{var,1007,'Pid'},{type,1007,pid,[]}]]},{type,1008,constraint,[{atom,1008,is_subtype},[{var,1008,'GCResult'},{type,1008,boolean,[]}]]}]]}]}}]}},{{function,garbage_collect,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1022}],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<71,97,114,98,97,103,101,32,99,111,108,108,101,99,116,115,32,116,104,101,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,82,101,113,117,101,115,116,73,100,125>>]}]},{dd,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,50>>]},<<32,114,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,115,101,110,116,46,32,87,104,101,110,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,44,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,97,108,108,101,100,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,112,97,115,115,101,100,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,44,32,82,101,113,117,101,115,116,73,100,44,32,71,67,82,101,115,117,108,116,125>>]},<<46>>]},{dt,[],[{code,[],[<<123,116,121,112,101,44,32,39,109,97,106,111,114,39,32,124,32,39,109,105,110,111,114,39,125>>]}]},{dd,[],[<<84,114,105,103,103,101,114,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,114,101,113,117,101,115,116,101,100,32,116,121,112,101,46,32,68,101,102,97,117,108,116,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<39,109,97,106,111,114,39>>]},<<44,32,119,104,105,99,104,32,119,111,117,108,100,32,116,114,105,103,103,101,114,32,97,32,102,117,108,108,115,119,101,101,112,32,71,67,46,32,84,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<39,109,105,110,111,114,39>>]},<<32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,104,105,110,116,32,97,110,100,32,109,97,121,32,108,101,97,100,32,116,111,32,101,105,116,104,101,114,32,109,105,110,111,114,32,111,114,32,109,97,106,111,114,32,71,67,32,114,117,110,46>>]}]},{p,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<115,101,108,102,40,41>>]},<<44,32,97,110,100,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,116,32,111,110,99,101,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>]}]},<<46,32,79,116,104,101,114,119,105,115,101,32,97,32,114,101,113,117,101,115,116,32,102,111,114,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,97,110,100,32,119,105,108,108,32,98,101,32,104,97,110,100,108,101,100,32,119,104,101,110,32,97,112,112,114,111,112,114,105,97,116,101,46,32,73,102,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,98,108,111,99,107,115,32,117,110,116,105,108,32>>,{code,[],[<<71,67,82,101,115,117,108,116>>]},<<32,105,115,32,97,118,97,105,108,97,98,108,101,32,97,110,100,32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<71,67,82,101,115,117,108,116>>]},<<32,105,110,102,111,114,109,115,32,97,98,111,117,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,114,101,113,117,101,115,116,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,104,97,115,32,98,101,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46>>]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[<<78,111,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,119,97,115,32,112,101,114,102,111,114,109,101,100,44,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,116,101,114,109,105,110,97,116,101,100,32,98,101,102,111,114,101,32,116,104,101,32,114,101,113,117,101,115,116,32,99,111,117,108,100,32,98,101,32,115,97,116,105,115,102,105,101,100,46>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,115,97,109,101,32,99,97,118,101,97,116,115,32,97,112,112,108,121,32,97,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,51,52,48>>,signature => [{attribute,1022,spec,{{garbage_collect,2},[{type,1022,bounded_fun,[{type,1022,'fun',[{type,1022,product,[{var,1022,'Pid'},{var,1022,'OptionList'}]},{type,1022,union,[{var,1022,'GCResult'},{atom,1022,async}]}]},[{type,1023,constraint,[{atom,1023,is_subtype},[{var,1023,'Pid'},{type,1023,pid,[]}]]},{type,1024,constraint,[{atom,1024,is_subtype},[{var,1024,'RequestId'},{type,1024,term,[]}]]},{type,1025,constraint,[{atom,1025,is_subtype},[{var,1025,'Option'},{type,1025,union,[{type,1025,tuple,[{atom,1025,async},{var,1025,'RequestId'}]},{type,1025,tuple,[{atom,1025,type},{type,1025,union,[{atom,1025,major},{atom,1025,minor}]}]}]}]]},{type,1026,constraint,[{atom,1026,is_subtype},[{var,1026,'OptionList'},{type,1026,list,[{var,1026,'Option'}]}]]},{type,1027,constraint,[{atom,1027,is_subtype},[{var,1027,'GCResult'},{type,1027,boolean,[]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,get,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1076}],[<<103,101,116,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,97,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,75,101,121,44,32,86,97,108,125>>]},<<32,116,117,112,108,101,115,46,32,84,104,101,32,105,116,101,109,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,105,110,32,97,110,121,32,111,114,100,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,109,101,114,114,121,41,44,10,112,117,116,40,107,101,121,50,44,32,108,97,109,98,115,41,44,10,112,117,116,40,107,101,121,51,44,32,123,97,114,101,44,32,112,108,97,121,105,110,103,125,41,44,10,103,101,116,40,41,46,10,91,123,107,101,121,49,44,109,101,114,114,121,125,44,123,107,101,121,50,44,108,97,109,98,115,125,44,123,107,101,121,51,44,123,97,114,101,44,112,108,97,121,105,110,103,125,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,48,53>>,signature => [{attribute,1076,spec,{{get,0},[{type,1076,bounded_fun,[{type,1076,'fun',[{type,1076,product,[]},{type,1076,list,[{type,1076,tuple,[{var,1076,'Key'},{var,1076,'Val'}]}]}]},[{type,1077,constraint,[{atom,1077,is_subtype},[{var,1077,'Key'},{type,1077,term,[]}]]},{type,1078,constraint,[{atom,1078,is_subtype},[{var,1078,'Val'},{type,1078,term,[]}]]}]]}]}}]}},{{function,get,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1083}],[<<103,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32>>,{code,[],[<<75,101,121>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,84,104,101,32,101,120,112,101,99,116,101,100,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,79,40>>,{code,[],[<<49>>]},<<41,32,97,110,100,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,105,115,32,79,40>>,{code,[],[<<78>>]},<<41,44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,116,101,109,115,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,109,101,114,114,121,41,44,10,112,117,116,40,107,101,121,50,44,32,108,97,109,98,115,41,44,10,112,117,116,40,123,97,110,121,44,32,91,118,97,108,105,100,44,32,116,101,114,109,93,125,44,32,123,97,114,101,44,32,112,108,97,121,105,110,103,125,41,44,10,103,101,116,40,123,97,110,121,44,32,91,118,97,108,105,100,44,32,116,101,114,109,93,125,41,46,10,123,97,114,101,44,112,108,97,121,105,110,103,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,50,50>>,signature => [{attribute,1083,spec,{{get,1},[{type,1083,bounded_fun,[{type,1083,'fun',[{type,1083,product,[{var,1083,'Key'}]},{type,1083,union,[{var,1083,'Val'},{atom,1083,undefined}]}]},[{type,1084,constraint,[{atom,1084,is_subtype},[{var,1084,'Key'},{type,1084,term,[]}]]},{type,1085,constraint,[{atom,1085,is_subtype},[{var,1085,'Val'},{type,1085,term,[]}]]}]]}]}}]}},{{function,get_cookie,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3794}],[<<103,101,116,95,99,111,111,107,105,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,103,105,99,32,99,111,111,107,105,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,102,32,116,104,101,32,110,111,100,101,32,105,115,32,97,108,105,118,101,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<110,111,99,111,111,107,105,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,52,50>>,signature => [{attribute,3794,spec,{{erlang,get_cookie,0},[{type,3794,bounded_fun,[{type,3794,'fun',[{type,3794,product,[]},{type,3794,union,[{var,3794,'Cookie'},{atom,3794,nocookie}]}]},[{type,3795,constraint,[{atom,3795,is_subtype},[{var,3795,'Cookie'},{type,3795,atom,[]}]]}]]}]}}]}},{{function,get_keys,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1090}],[<<103,101,116,95,107,101,121,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,108,108,32,107,101,121,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,84,104,101,32,105,116,101,109,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,105,110,32,97,110,121,32,111,114,100,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,100,111,103,44,32,123,97,110,105,109,97,108,44,49,125,41,44,10,112,117,116,40,99,111,119,44,32,123,97,110,105,109,97,108,44,50,125,41,44,10,112,117,116,40,108,97,109,98,44,32,123,97,110,105,109,97,108,44,51,125,41,44,10,103,101,116,95,107,101,121,115,40,41,46,10,91,100,111,103,44,99,111,119,44,108,97,109,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,53,49>>,signature => [{attribute,1090,spec,{{get_keys,0},[{type,1090,bounded_fun,[{type,1090,'fun',[{type,1090,product,[]},{type,1090,list,[{var,1090,'Key'}]}]},[{type,1091,constraint,[{atom,1091,is_subtype},[{var,1091,'Key'},{type,1091,term,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,get_keys,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1096}],[<<103,101,116,95,107,101,121,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,107,101,121,115,32,116,104,97,116,32,97,114,101,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,84,104,101,32,105,116,101,109,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,105,110,32,97,110,121,32,111,114,100,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,109,97,114,121,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,104,97,100,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,97,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,108,105,116,116,108,101,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,100,111,103,44,32,123,49,44,32,51,125,41,44,10,112,117,116,40,108,97,109,98,44,32,123,49,44,32,50,125,41,44,10,103,101,116,95,107,101,121,115,40,123,49,44,32,50,125,41,46,10,91,109,97,114,121,44,104,97,100,44,97,44,108,105,116,116,108,101,44,108,97,109,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,54,56>>,signature => [{attribute,1096,spec,{{get_keys,1},[{type,1096,bounded_fun,[{type,1096,'fun',[{type,1096,product,[{var,1096,'Val'}]},{type,1096,list,[{var,1096,'Key'}]}]},[{type,1097,constraint,[{atom,1097,is_subtype},[{var,1097,'Val'},{type,1097,term,[]}]]},{type,1098,constraint,[{atom,1098,is_subtype},[{var,1098,'Key'},{type,1098,term,[]}]]}]]}]}}]}},{{function,group_leader,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1110}],[<<103,114,111,117,112,95,108,101,97,100,101,114,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,46>>]},{p,[],[<<69,118,101,114,121,32,112,114,111,99,101,115,115,32,105,115,32,97,32,109,101,109,98,101,114,32,111,102,32,115,111,109,101,32,112,114,111,99,101,115,115,32,103,114,111,117,112,32,97,110,100,32,97,108,108,32,103,114,111,117,112,115,32,104,97,118,101,32,97,32>>,{em,[],[<<103,114,111,117,112,32,108,101,97,100,101,114>>]},<<46,32,65,108,108,32,73,47,79,32,102,114,111,109,32,116,104,101,32,103,114,111,117,112,32,105,115,32,99,104,97,110,110,101,108,101,100,32,116,111,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,46,32,87,104,101,110,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,112,97,119,110,101,100,44,32,105,116,32,103,101,116,115,32,116,104,101,32,115,97,109,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,97,115,32,116,104,101,32,115,112,97,119,110,105,110,103,32,112,114,111,99,101,115,115,46,32,73,110,105,116,105,97,108,108,121,44,32,97,116,32,115,121,115,116,101,109,32,115,116,97,114,116,117,112,44,32>>,{code,[],[<<105,110,105,116>>]},<<32,105,115,32,98,111,116,104,32,105,116,115,32,111,119,110,32,103,114,111,117,112,32,108,101,97,100,101,114,32,97,110,100,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,111,102,32,97,108,108,32,112,114,111,99,101,115,115,101,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,56,56>>,signature => [{attribute,1110,spec,{{group_leader,0},[{type,1110,'fun',[{type,1110,product,[]},{type,1110,pid,[]}]}]}}]}},{{function,group_leader,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1115}],[<<103,114,111,117,112,95,108,101,97,100,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<32,116,111,32>>,{code,[],[<<71,114,111,117,112,76,101,97,100,101,114>>]},<<46,32,84,121,112,105,99,97,108,108,121,44,32,116,104,105,115,32,105,115,32,117,115,101,100,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,102,114,111,109,32,97,32,99,101,114,116,97,105,110,32,115,104,101,108,108,32,105,115,32,116,111,32,104,97,118,101,32,97,110,111,116,104,101,114,32,103,114,111,117,112,32,108,101,97,100,101,114,32,116,104,97,110,32>>,{code,[],[<<105,110,105,116>>]},<<46>>]},{p,[],[<<84,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,115,104,111,117,108,100,32,98,101,32,114,97,114,101,108,121,32,99,104,97,110,103,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,115,32,119,105,116,104,32,97,32,115,117,112,101,114,118,105,115,105,111,110,32,116,114,101,101,44,32,98,101,99,97,117,115,101,32,79,84,80,32,97,115,115,117,109,101,115,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,111,102,32,116,104,101,105,114,32,112,114,111,99,101,115,115,101,115,32,105,115,32,116,104,101,105,114,32,97,112,112,108,105,99,97,116,105,111,110,32,109,97,115,116,101,114,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,114,111,117,112,95,108,101,97,100,101,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,114,111,117,112,95,108,101,97,100,101,114,47,48>>]}]},<<32,97,110,100,32>>,{a,[{href,<<115,121,115,116,101,109,47,100,101,115,105,103,110,95,112,114,105,110,99,105,112,108,101,115,58,97,112,112,108,105,99,97,116,105,111,110,115,35,115,116,111,112,112,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,84,80,32,100,101,115,105,103,110,32,112,114,105,110,99,105,112,108,101,115>>]},<<32,114,101,108,97,116,101,100,32,116,111,32,115,116,97,114,116,105,110,103,32,97,110,100,32,115,116,111,112,112,105,110,103,32,97,112,112,108,105,99,97,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,48,51>>,signature => [{attribute,1115,spec,{{group_leader,2},[{type,1115,bounded_fun,[{type,1115,'fun',[{type,1115,product,[{var,1115,'GroupLeader'},{var,1115,'Pid'}]},{atom,1115,true}]},[{type,1116,constraint,[{atom,1116,is_subtype},[{var,1116,'GroupLeader'},{type,1116,pid,[]}]]},{type,1117,constraint,[{atom,1117,is_subtype},[{var,1117,'Pid'},{type,1117,pid,[]}]]}]]}]}}]}},{{function,halt,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1135}],[<<104,97,108,116,47,48>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,104,97,108,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<104,97,108,116,40,48,44,32,91,93,41>>]}]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,104,97,108,116,40,41,46,10,111,115,95,112,114,111,109,112,116,37>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,50,52>>,signature => [{attribute,1135,spec,{{halt,0},[{type,1135,'fun',[{type,1135,product,[]},{type,1135,no_return,[]}]}]}}]}},{{function,halt,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1141}],[<<104,97,108,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,104,97,108,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<104,97,108,116,40,83,116,97,116,117,115,44,32,91,93,41>>]}]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,104,97,108,116,40,49,55,41,46,10,111,115,95,112,114,111,109,112,116,37,32,101,99,104,111,32,36,63,10,49,55,10,111,115,95,112,114,111,109,112,116,37>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,51,55>>,signature => [{attribute,1141,spec,{{halt,1},[{type,1141,bounded_fun,[{type,1141,'fun',[{type,1141,product,[{var,1141,'Status'}]},{type,1141,no_return,[]}]},[{type,1142,constraint,[{atom,1142,is_subtype},[{var,1142,'Status'},{type,1142,union,[{type,1142,non_neg_integer,[]},{atom,1142,abort},{type,1142,string,[]}]}]]}]]}]}}]}},{{function,halt,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1153}],[<<104,97,108,116,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<83,116,97,116,117,115>>]},<<32,109,117,115,116,32,98,101,32,97,32,110,111,110,45,110,101,103,97,116,105,118,101,32,105,110,116,101,103,101,114,44,32,97,32,115,116,114,105,110,103,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<97,98,111,114,116>>]},<<46,32,72,97,108,116,115,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,72,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,68,101,112,101,110,100,105,110,103,32,111,110,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,99,99,117,114,115,58>>]},{dl,[],[{dt,[],[<<105,110,116,101,103,101,114,40,41>>]},{dd,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,101,120,105,116,115,32,119,105,116,104,32,105,110,116,101,103,101,114,32,118,97,108,117,101,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<32,97,115,32,115,116,97,116,117,115,32,99,111,100,101,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,101,110,118,105,114,111,110,109,101,110,116,32,40,79,83,41,46>>,{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,32,109,97,110,121,32,112,108,97,116,102,111,114,109,115,44,32,116,104,101,32,79,83,32,115,117,112,112,111,114,116,115,32,111,110,108,121,32,115,116,97,116,117,115,32,99,111,100,101,115,32,48,45,50,53,53,46,32,65,32,116,111,111,32,108,97,114,103,101,32,115,116,97,116,117,115,32,99,111,100,101,32,105,115,32,116,114,117,110,99,97,116,101,100,32,98,121,32,99,108,101,97,114,105,110,103,32,116,104,101,32,104,105,103,104,32,98,105,116,115,46>>]}]}]},{dt,[],[<<115,116,114,105,110,103,40,41>>]},{dd,[],[<<65,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,32,105,115,32,112,114,111,100,117,99,101,100,32,119,105,116,104,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<32,97,115,32,115,108,111,103,97,110,46,32,84,104,101,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,101,120,105,116,115,32,119,105,116,104,32,115,116,97,116,117,115,32,99,111,100,101,32>>,{code,[],[<<49>>]},<<46,32,84,104,101,32,115,116,114,105,110,103,32,119,105,108,108,32,98,101,32,116,114,117,110,99,97,116,101,100,32,105,102,32,108,111,110,103,101,114,32,116,104,97,110,32,50,48,48,32,99,104,97,114,97,99,116,101,114,115,46>>,{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,101,102,111,114,101,32,69,82,84,83,32,57,46,49,32,40,79,84,80,45,50,48,46,49,41,32,111,110,108,121,32,99,111,100,101,32,112,111,105,110,116,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,48,45,50,53,53,32,119,97,115,32,97,99,99,101,112,116,101,100,32,105,110,32,116,104,101,32,115,116,114,105,110,103,46,32,78,111,119,32,97,110,121,32,117,110,105,99,111,100,101,32,115,116,114,105,110,103,32,105,115,32,118,97,108,105,100,46>>]}]}]},{dt,[],[{code,[],[<<97,98,111,114,116>>]}]},{dd,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,97,98,111,114,116,115,32,112,114,111,100,117,99,105,110,103,32,97,32,99,111,114,101,32,100,117,109,112,44,32,105,102,32,116,104,97,116,32,105,115,32,101,110,97,98,108,101,100,32,105,110,32,116,104,101,32,79,83,46>>]}]},{p,[],[<<70,111,114,32,105,110,116,101,103,101,114,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<44,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,99,108,111,115,101,115,32,97,108,108,32,112,111,114,116,115,32,97,110,100,32,97,108,108,111,119,115,32,97,115,121,110,99,32,116,104,114,101,97,100,115,32,116,111,32,102,105,110,105,115,104,32,116,104,101,105,114,32,111,112,101,114,97,116,105,111,110,115,32,98,101,102,111,114,101,32,101,120,105,116,105,110,103,46,32,84,111,32,101,120,105,116,32,119,105,116,104,111,117,116,32,115,117,99,104,32,102,108,117,115,104,105,110,103,44,32,117,115,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<32,97,115,32>>,{code,[],[<<123,102,108,117,115,104,44,102,97,108,115,101,125>>]},<<46>>]},{p,[],[<<70,111,114,32,115,116,97,116,117,115,101,115,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<32,97,110,100,32>>,{code,[],[<<97,98,111,114,116>>]},<<44,32,111,112,116,105,111,110,32>>,{code,[],[<<102,108,117,115,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,32,97,110,100,32,102,108,117,115,104,105,110,103,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,100,111,110,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,53,49>>,signature => [{attribute,1153,spec,{{halt,2},[{type,1153,bounded_fun,[{type,1153,'fun',[{type,1153,product,[{var,1153,'Status'},{var,1153,'Options'}]},{type,1153,no_return,[]}]},[{type,1154,constraint,[{atom,1154,is_subtype},[{var,1154,'Status'},{type,1154,union,[{type,1154,non_neg_integer,[]},{atom,1154,abort},{type,1154,string,[]}]}]]},{type,1155,constraint,[{atom,1155,is_subtype},[{var,1155,'Options'},{type,1155,list,[{var,1155,'Option'}]}]]},{type,1156,constraint,[{atom,1156,is_subtype},[{var,1156,'Option'},{type,1156,tuple,[{atom,1156,flush},{type,1156,boolean,[]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66,48,49>>}},{{function,hd,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2133}],[<<104,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,104,101,97,100,32,111,102,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,104,100,40,91,49,44,50,44,51,44,52,44,53,93,41,46,10,49>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,105,115,116>>]},<<32,105,115,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,57,51>>,signature => [{attribute,2133,spec,{{hd,1},[{type,2133,bounded_fun,[{type,2133,'fun',[{type,2133,product,[{var,2133,'List'}]},{type,2133,term,[]}]},[{type,2134,constraint,[{atom,2134,is_subtype},[{var,2134,'List'},{type,2134,nonempty_list,[{type,2134,term,[]}]}]]}]]}]}}]}},{{function,hibernate,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1167}],[<<104,105,98,101,114,110,97,116,101,47,51>>],#{<<101,110>> => [{p,[],[<<80,117,116,115,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,110,116,111,32,97,32,119,97,105,116,32,115,116,97,116,101,32,119,104,101,114,101,32,105,116,115,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,114,101,100,117,99,101,100,32,97,115,32,109,117,99,104,32,97,115,32,112,111,115,115,105,98,108,101,46,32,84,104,105,115,32,105,115,32,117,115,101,102,117,108,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,100,111,101,115,32,110,111,116,32,101,120,112,101,99,116,32,116,111,32,114,101,99,101,105,118,101,32,97,110,121,32,109,101,115,115,97,103,101,115,32,115,111,111,110,46>>]},{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,119,97,107,101,110,32,119,104,101,110,32,97,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,105,116,44,32,97,110,100,32,99,111,110,116,114,111,108,32,114,101,115,117,109,101,115,32,105,110,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,119,105,116,104,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<65,114,103,115>>]},<<32,119,105,116,104,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,32,101,109,112,116,105,101,100,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,116,104,101,32,112,114,111,99,101,115,115,32,116,101,114,109,105,110,97,116,101,115,32,119,104,101,110,32,116,104,97,116,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,46,32,84,104,117,115,32>>,{code,[],[<<101,114,108,97,110,103,58,104,105,98,101,114,110,97,116,101,47,51>>]},<<32,110,101,118,101,114,32,114,101,116,117,114,110,115,32,116,111,32,105,116,115,32,99,97,108,108,101,114,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,97,110,121,32,109,101,115,115,97,103,101,32,105,110,32,105,116,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,44,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,119,97,107,101,110,101,100,32,105,109,109,101,100,105,97,116,101,108,121,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46>>]},{p,[],[<<73,110,32,109,111,114,101,32,116,101,99,104,110,105,99,97,108,32,116,101,114,109,115,44,32>>,{code,[],[<<101,114,108,97,110,103,58,104,105,98,101,114,110,97,116,101,47,51>>]},<<32,100,105,115,99,97,114,100,115,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,97,110,100,32,116,104,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,115,32,116,104,101,32,112,114,111,99,101,115,115,46,32,65,102,116,101,114,32,116,104,105,115,44,32,97,108,108,32,108,105,118,101,32,100,97,116,97,32,105,115,32,105,110,32,111,110,101,32,99,111,110,116,105,110,117,111,117,115,32,104,101,97,112,46,32,84,104,101,32,104,101,97,112,32,105,115,32,116,104,101,110,32,115,104,114,117,110,107,101,110,32,116,111,32,116,104,101,32,101,120,97,99,116,32,115,97,109,101,32,115,105,122,101,32,97,115,32,116,104,101,32,108,105,118,101,32,100,97,116,97,32,116,104,97,116,32,105,116,32,104,111,108,100,115,32,40,101,118,101,110,32,105,102,32,116,104,97,116,32,115,105,122,101,32,105,115,32,108,101,115,115,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,41,46>>]},{p,[],[<<73,102,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,108,105,118,101,32,100,97,116,97,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,108,101,115,115,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,44,32,116,104,101,32,102,105,114,115,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,99,99,117,114,114,105,110,103,32,97,102,116,101,114,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,119,97,107,101,110,101,100,32,101,110,115,117,114,101,115,32,116,104,97,116,32,116,104,101,32,104,101,97,112,32,115,105,122,101,32,105,115,32,99,104,97,110,103,101,100,32,116,111,32,97,32,115,105,122,101,32,110,111,116,32,115,109,97,108,108,101,114,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,101,109,112,116,121,105,110,103,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,32,109,101,97,110,115,32,116,104,97,116,32,97,110,121,32,115,117,114,114,111,117,110,100,105,110,103,32>>,{code,[],[<<99,97,116,99,104>>]},<<32,105,115,32,114,101,109,111,118,101,100,32,97,110,100,32,109,117,115,116,32,98,101,32,114,101,45,105,110,115,101,114,116,101,100,32,97,102,116,101,114,32,104,105,98,101,114,110,97,116,105,111,110,46,32,79,110,101,32,101,102,102,101,99,116,32,111,102,32,116,104,105,115,32,105,115,32,116,104,97,116,32,112,114,111,99,101,115,115,101,115,32,115,116,97,114,116,101,100,32,117,115,105,110,103,32>>,{code,[],[<<112,114,111,99,95,108,105,98>>]},<<32,40,97,108,115,111,32,105,110,100,105,114,101,99,116,108,121,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<103,101,110,95,115,101,114,118,101,114>>]},<<32,112,114,111,99,101,115,115,101,115,41,44,32,97,114,101,32,116,111,32,117,115,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,112,114,111,99,95,108,105,98,35,104,105,98,101,114,110,97,116,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,95,108,105,98,58,104,105,98,101,114,110,97,116,101,47,51>>]}]},<<32,105,110,115,116,101,97,100,44,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,104,97,110,100,108,101,114,32,99,111,110,116,105,110,117,101,115,32,116,111,32,119,111,114,107,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,119,97,107,101,115,32,117,112,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,48,56>>,signature => [{attribute,1167,spec,{{erlang,hibernate,3},[{type,1167,bounded_fun,[{type,1167,'fun',[{type,1167,product,[{var,1167,'Module'},{var,1167,'Function'},{var,1167,'Args'}]},{type,1167,no_return,[]}]},[{type,1168,constraint,[{atom,1168,is_subtype},[{var,1168,'Module'},{type,1168,module,[]}]]},{type,1169,constraint,[{atom,1169,is_subtype},[{var,1169,'Function'},{type,1169,atom,[]}]]},{type,1170,constraint,[{atom,1170,is_subtype},[{var,1170,'Args'},{type,1170,list,[{type,1170,term,[]}]}]]}]]}]}}]}},{{function,insert_element,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1175}],[<<105,110,115,101,114,116,95,101,108,101,109,101,110,116,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,101,119,32,116,117,112,108,101,32,119,105,116,104,32,101,108,101,109,101,110,116,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,110,115,101,114,116,101,100,32,97,116,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,105,110,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<46,32,65,108,108,32,101,108,101,109,101,110,116,115,32,102,114,111,109,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,97,110,100,32,117,112,119,97,114,100,115,32,97,114,101,32,112,117,115,104,101,100,32,111,110,101,32,115,116,101,112,32,104,105,103,104,101,114,32,105,110,32,116,104,101,32,110,101,119,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,50>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,105,110,115,101,114,116,95,101,108,101,109,101,110,116,40,50,44,32,123,111,110,101,44,32,116,119,111,44,32,116,104,114,101,101,125,44,32,110,101,119,41,46,10,123,111,110,101,44,110,101,119,44,116,119,111,44,116,104,114,101,101,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,52,57>>,signature => [{attribute,1175,spec,{{erlang,insert_element,3},[{type,1175,bounded_fun,[{type,1175,'fun',[{type,1175,product,[{var,1175,'Index'},{var,1175,'Tuple1'},{var,1175,'Term'}]},{var,1175,'Tuple2'}]},[{type,1176,constraint,[{atom,1176,is_subtype},[{var,1176,'Index'},{type,1176,pos_integer,[]}]]},{type,1177,constraint,[{atom,1177,is_subtype},[{var,1177,'Tuple1'},{type,1177,tuple,any}]]},{type,1178,constraint,[{atom,1178,is_subtype},[{var,1178,'Tuple2'},{type,1178,tuple,any}]]},{type,1179,constraint,[{atom,1179,is_subtype},[{var,1179,'Term'},{type,1179,term,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,integer_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1184}],[<<105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,40,55,55,41,46,10,60,60,34,55,55,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,54,55>>,signature => [{attribute,1184,spec,{{integer_to_binary,1},[{type,1184,bounded_fun,[{type,1184,'fun',[{type,1184,product,[{var,1184,'Integer'}]},{type,1184,binary,[]}]},[{type,1185,constraint,[{atom,1185,is_subtype},[{var,1185,'Integer'},{type,1185,integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,integer_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3805}],[<<105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,40,49,48,50,51,44,32,49,54,41,46,10,60,60,34,51,70,70,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,55,57>>,signature => [{attribute,3805,spec,{{integer_to_binary,2},[{type,3805,bounded_fun,[{type,3805,'fun',[{type,3805,product,[{var,3805,'Integer'},{var,3805,'Base'}]},{type,3805,binary,[]}]},[{type,3806,constraint,[{atom,3806,is_subtype},[{var,3806,'Integer'},{type,3806,integer,[]}]]},{type,3807,constraint,[{atom,3807,is_subtype},[{var,3807,'Base'},{type,3807,range,[{integer,3807,2},{integer,3807,36}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,integer_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1190}],[<<105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,40,55,55,41,46,10,34,55,55,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,57,50>>,signature => [{attribute,1190,spec,{{integer_to_list,1},[{type,1190,bounded_fun,[{type,1190,'fun',[{type,1190,product,[{var,1190,'Integer'}]},{type,1190,string,[]}]},[{type,1191,constraint,[{atom,1191,is_subtype},[{var,1191,'Integer'},{type,1191,integer,[]}]]}]]}]}}]}},{{function,integer_to_list,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3799}],[<<105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,40,49,48,50,51,44,32,49,54,41,46,10,34,51,70,70,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,48,52>>,signature => [{attribute,3799,spec,{{integer_to_list,2},[{type,3799,bounded_fun,[{type,3799,'fun',[{type,3799,product,[{var,3799,'Integer'},{var,3799,'Base'}]},{type,3799,string,[]}]},[{type,3800,constraint,[{atom,3800,is_subtype},[{var,3800,'Integer'},{type,3800,integer,[]}]]},{type,3801,constraint,[{atom,3801,is_subtype},[{var,3801,'Base'},{type,3801,range,[{integer,3801,2},{integer,3801,36}]}]]}]]}]}}]}},{{function,iolist_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1196}],[<<105,111,108,105,115,116,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,44,32,116,104,97,116,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115,44,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,116,104,97,116,32,119,111,117,108,100,32,98,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{code,[],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,73,116,101,109,41>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,111,108,105,115,116,95,115,105,122,101,40,91,49,44,50,124,60,60,51,44,52,62,62,93,41,46,10,52>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,49,55>>,signature => [{attribute,1196,spec,{{iolist_size,1},[{type,1196,bounded_fun,[{type,1196,'fun',[{type,1196,product,[{var,1196,'Item'}]},{type,1196,non_neg_integer,[]}]},[{type,1197,constraint,[{atom,1197,is_subtype},[{var,1197,'Item'},{type,1197,union,[{type,1197,iolist,[]},{type,1197,binary,[]}]}]]}]]}]}}]}},{{function,iolist_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1202}],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,32,105,110,32>>,{code,[],[<<73,111,76,105,115,116,79,114,66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,105,110,49,32,61,32,60,60,49,44,50,44,51,62,62,46,10,60,60,49,44,50,44,51,62,62,10,62,32,66,105,110,50,32,61,32,60,60,52,44,53,62,62,46,10,60,60,52,44,53,62,62,10,62,32,66,105,110,51,32,61,32,60,60,54,62,62,46,10,60,60,54,62,62,10,62,32,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,91,66,105,110,49,44,49,44,91,50,44,51,44,66,105,110,50,93,44,52,124,66,105,110,51,93,41,46,10,60,60,49,44,50,44,51,44,49,44,50,44,51,44,52,44,53,44,52,44,54,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,51,48>>,signature => [{attribute,1202,spec,{{iolist_to_binary,1},[{type,1202,bounded_fun,[{type,1202,'fun',[{type,1202,product,[{var,1202,'IoListOrBinary'}]},{type,1202,binary,[]}]},[{type,1203,constraint,[{atom,1203,is_subtype},[{var,1203,'IoListOrBinary'},{type,1203,union,[{type,1203,iolist,[]},{type,1203,binary,[]}]}]]}]]}]}}]}},{{function,iolist_to_iovec,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1208}],[<<105,111,108,105,115,116,95,116,111,95,105,111,118,101,99,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,111,118,101,99,32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,32,105,110,32>>,{code,[],[<<73,111,76,105,115,116,79,114,66,105,110,97,114,121>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,52,56>>,signature => [{attribute,1208,spec,{{erlang,iolist_to_iovec,1},[{type,1208,bounded_fun,[{type,1208,'fun',[{type,1208,product,[{var,1208,'IoListOrBinary'}]},{user_type,1208,iovec,[]}]},[{type,1209,constraint,[{atom,1209,is_subtype},[{var,1209,'IoListOrBinary'},{type,1209,union,[{type,1209,iolist,[]},{type,1209,binary,[]}]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,49>>}},{{function,is_alive,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1214}],[<<105,115,95,97,108,105,118,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,97,108,105,118,101,32,40,116,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,110,111,100,101,32,99,97,110,32,98,101,32,112,97,114,116,32,111,102,32,97,32,100,105,115,116,114,105,98,117,116,101,100,32,115,121,115,116,101,109,41,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,65,32,110,111,100,101,32,105,115,32,97,108,105,118,101,32,105,102,32,105,116,32,105,115,32,115,116,97,114,116,101,100,32,119,105,116,104,58>>]},{ol,[],[{li,[],[{a,[{href,<<101,114,116,115,58,101,114,108,35,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<34,101,114,108,32,45,110,97,109,101,32,76,79,78,71,78,65,77,69,34>>]}]},<<32,111,114,44>>]},{li,[],[{a,[{href,<<101,114,116,115,58,101,114,108,35,115,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<34,101,114,108,32,45,115,110,97,109,101,32,83,72,79,82,84,78,65,77,69,34>>]}]},<<46>>]}]},{p,[],[<<65,32,110,111,100,101,32,99,97,110,32,97,108,115,111,32,98,101,32,97,108,105,118,101,32,105,102,32,105,116,32,104,97,115,32,103,111,116,32,97,32,110,97,109,101,32,102,114,111,109,32,97,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,110,101,116,95,107,101,114,110,101,108,35,115,116,97,114,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,101,116,95,107,101,114,110,101,108,58,115,116,97,114,116,47,49>>]}]},<<32,97,110,100,32,104,97,115,32,110,111,116,32,98,101,101,110,32,115,116,111,112,112,101,100,32,98,121,32,97,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,110,101,116,95,107,101,114,110,101,108,35,115,116,111,112,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,101,116,95,107,101,114,110,101,108,58,115,116,111,112,47,48>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,53,55>>,signature => [{attribute,1214,spec,{{is_alive,0},[{type,1214,'fun',[{type,1214,product,[]},{type,1214,boolean,[]}]}]}}]}},{{function,is_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2141}],[<<105,115,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32,97,116,111,109,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,55,54>>,signature => [{attribute,2141,spec,{{is_atom,1},[{type,2141,bounded_fun,[{type,2141,'fun',[{type,2141,product,[{var,2141,'Term'}]},{type,2141,boolean,[]}]},[{type,2142,constraint,[{atom,2142,is_subtype},[{var,2142,'Term'},{type,2142,term,[]}]]}]]}]}}]}},{{function,is_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2147}],[<<105,115,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,32,98,105,110,97,114,121,32,97,108,119,97,121,115,32,99,111,110,116,97,105,110,115,32,97,32,99,111,109,112,108,101,116,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,56,54>>,signature => [{attribute,2147,spec,{{is_binary,1},[{type,2147,bounded_fun,[{type,2147,'fun',[{type,2147,product,[{var,2147,'Term'}]},{type,2147,boolean,[]}]},[{type,2148,constraint,[{atom,2148,is_subtype},[{var,2148,'Term'},{type,2148,term,[]}]]}]]}]}}]}},{{function,is_bitstring,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2153}],[<<105,115,95,98,105,116,115,116,114,105,110,103,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,98,105,116,115,116,114,105,110,103,32,40,105,110,99,108,117,100,105,110,103,32,97,32,98,105,110,97,114,121,41,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,57,55>>,signature => [{attribute,2153,spec,{{is_bitstring,1},[{type,2153,bounded_fun,[{type,2153,'fun',[{type,2153,product,[{var,2153,'Term'}]},{type,2153,boolean,[]}]},[{type,2154,constraint,[{atom,2154,is_subtype},[{var,2154,'Term'},{type,2154,term,[]}]]}]]}]}}]}},{{function,is_boolean,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2159}],[<<105,115,95,98,111,111,108,101,97,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<116,114,117,101>>]},<<32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,40,116,104,97,116,32,105,115,44,32,97,32,98,111,111,108,101,97,110,41,46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,48,55>>,signature => [{attribute,2159,spec,{{is_boolean,1},[{type,2159,bounded_fun,[{type,2159,'fun',[{type,2159,product,[{var,2159,'Term'}]},{type,2159,boolean,[]}]},[{type,2160,constraint,[{atom,2160,is_subtype},[{var,2160,'Term'},{type,2160,term,[]}]]}]]}]}}]}},{{function,is_builtin,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1219}],[<<105,115,95,98,117,105,108,116,105,110,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,117,115,101,102,117,108,32,102,111,114,32,98,117,105,108,100,101,114,115,32,111,102,32,99,114,111,115,115,45,114,101,102,101,114,101,110,99,101,32,116,111,111,108,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,47,65,114,105,116,121>>]},<<32,105,115,32,97,32,66,73,70,32,105,109,112,108,101,109,101,110,116,101,100,32,105,110,32,67,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,49,56>>,signature => [{attribute,1219,spec,{{erlang,is_builtin,3},[{type,1219,bounded_fun,[{type,1219,'fun',[{type,1219,product,[{var,1219,'Module'},{var,1219,'Function'},{var,1219,'Arity'}]},{type,1219,boolean,[]}]},[{type,1220,constraint,[{atom,1220,is_subtype},[{var,1220,'Module'},{type,1220,module,[]}]]},{type,1221,constraint,[{atom,1221,is_subtype},[{var,1221,'Function'},{type,1221,atom,[]}]]},{type,1222,constraint,[{atom,1222,is_subtype},[{var,1222,'Arity'},{type,1222,arity,[]}]]}]]}]}}]}},{{function,is_float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2165}],[<<105,115,95,102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,110,117,109,98,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,50,57>>,signature => [{attribute,2165,spec,{{is_float,1},[{type,2165,bounded_fun,[{type,2165,'fun',[{type,2165,product,[{var,2165,'Term'}]},{type,2165,boolean,[]}]},[{type,2166,constraint,[{atom,2166,is_subtype},[{var,2166,'Term'},{type,2166,term,[]}]]}]]}]}}]}},{{function,is_function,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2171}],[<<105,115,95,102,117,110,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,102,117,110,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,51,57>>,signature => [{attribute,2171,spec,{{is_function,1},[{type,2171,bounded_fun,[{type,2171,'fun',[{type,2171,product,[{var,2171,'Term'}]},{type,2171,boolean,[]}]},[{type,2172,constraint,[{atom,2172,is_subtype},[{var,2172,'Term'},{type,2172,term,[]}]]}]]}]}}]}},{{function,is_function,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2177}],[<<105,115,95,102,117,110,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,102,117,110,32,116,104,97,116,32,99,97,110,32,98,101,32,97,112,112,108,105,101,100,32,119,105,116,104,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,52,57>>,signature => [{attribute,2177,spec,{{is_function,2},[{type,2177,bounded_fun,[{type,2177,'fun',[{type,2177,product,[{var,2177,'Term'},{var,2177,'Arity'}]},{type,2177,boolean,[]}]},[{type,2178,constraint,[{atom,2178,is_subtype},[{var,2178,'Term'},{type,2178,term,[]}]]},{type,2179,constraint,[{atom,2179,is_subtype},[{var,2179,'Arity'},{type,2179,arity,[]}]]}]]}]}}]}},{{function,is_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2184}],[<<105,115,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,54,49>>,signature => [{attribute,2184,spec,{{is_integer,1},[{type,2184,bounded_fun,[{type,2184,'fun',[{type,2184,product,[{var,2184,'Term'}]},{type,2184,boolean,[]}]},[{type,2185,constraint,[{atom,2185,is_subtype},[{var,2185,'Term'},{type,2185,term,[]}]]}]]}]}}]}},{{function,is_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2190}],[<<105,115,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,108,105,115,116,32,119,105,116,104,32,122,101,114,111,32,111,114,32,109,111,114,101,32,101,108,101,109,101,110,116,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,55,49>>,signature => [{attribute,2190,spec,{{is_list,1},[{type,2190,bounded_fun,[{type,2190,'fun',[{type,2190,product,[{var,2190,'Term'}]},{type,2190,boolean,[]}]},[{type,2191,constraint,[{atom,2191,is_subtype},[{var,2191,'Term'},{type,2191,term,[]}]]}]]}]}}]}},{{function,is_map,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2208}],[<<105,115,95,109,97,112,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,109,97,112,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,56,49>>,signature => [{attribute,2208,spec,{{is_map,1},[{type,2208,bounded_fun,[{type,2208,'fun',[{type,2208,product,[{var,2208,'Term'}]},{type,2208,boolean,[]}]},[{type,2209,constraint,[{atom,2209,is_subtype},[{var,2209,'Term'},{type,2209,term,[]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,is_map_key,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1227}],[<<105,115,95,109,97,112,95,107,101,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,109,97,112,32>>,{code,[],[<<77,97,112>>]},<<32,99,111,110,116,97,105,110,115,32>>,{code,[],[<<75,101,121>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,116,104,101,32>>,{code,[],[<<75,101,121>>]},<<46>>]},{p,[],[<<84,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<123,98,97,100,109,97,112,44,77,97,112,125>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32>>,{code,[],[<<77,97,112>>]},<<32,105,115,32,110,111,116,32,97,32,109,97,112,46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<62,32,77,97,112,32,61,32,35,123,34,52,50,34,32,61,62,32,118,97,108,117,101,125,46,10,35,123,34,52,50,34,32,61,62,32,118,97,108,117,101,125,10,62,32,105,115,95,109,97,112,95,107,101,121,40,34,52,50,34,44,77,97,112,41,46,10,116,114,117,101,10,62,32,105,115,95,109,97,112,95,107,101,121,40,118,97,108,117,101,44,77,97,112,41,46,10,102,97,108,115,101>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,57,49>>,signature => [{attribute,1227,spec,{{is_map_key,2},[{type,1227,bounded_fun,[{type,1227,'fun',[{type,1227,product,[{var,1227,'Key'},{var,1227,'Map'}]},{type,1227,boolean,[]}]},[{type,1228,constraint,[{atom,1228,is_subtype},[{var,1228,'Key'},{type,1228,term,[]}]]},{type,1229,constraint,[{atom,1229,is_subtype},[{var,1229,'Map'},{type,1229,map,any}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,is_number,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2196}],[<<105,115,95,110,117,109,98,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,111,114,32,97,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,110,117,109,98,101,114,46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,49,50>>,signature => [{attribute,2196,spec,{{is_number,1},[{type,2196,bounded_fun,[{type,2196,'fun',[{type,2196,product,[{var,2196,'Term'}]},{type,2196,boolean,[]}]},[{type,2197,constraint,[{atom,2197,is_subtype},[{var,2197,'Term'},{type,2197,term,[]}]]}]]}]}}]}},{{function,is_pid,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2202}],[<<105,115,95,112,105,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,50,50>>,signature => [{attribute,2202,spec,{{is_pid,1},[{type,2202,bounded_fun,[{type,2202,'fun',[{type,2202,product,[{var,2202,'Term'}]},{type,2202,boolean,[]}]},[{type,2203,constraint,[{atom,2203,is_subtype},[{var,2203,'Term'},{type,2203,term,[]}]]}]]}]}}]}},{{function,is_port,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2214}],[<<105,115,95,112,111,114,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,51,50>>,signature => [{attribute,2214,spec,{{is_port,1},[{type,2214,bounded_fun,[{type,2214,'fun',[{type,2214,product,[{var,2214,'Term'}]},{type,2214,boolean,[]}]},[{type,2215,constraint,[{atom,2215,is_subtype},[{var,2215,'Term'},{type,2215,term,[]}]]}]]}]}}]}},{{function,is_process_alive,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1234}],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,47,49>>],#{<<101,110>> => [{p,[],[{code,[],[<<80,105,100>>]},<<32,109,117,115,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,115,116,115,32,97,110,100,32,105,115,32,97,108,105,118,101,44,32,116,104,97,116,32,105,115,44,32,105,115,32,110,111,116,32,101,120,105,116,105,110,103,32,97,110,100,32,104,97,115,32,110,111,116,32,101,120,105,116,101,100,46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<73,102,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,49>>]},<<32,99,97,108,108,115,32>>,{code,[],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,40,80,50,80,105,100,41>>]},<<32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,97,108,108,32,115,105,103,110,97,108,115,44,32,115,101,110,116,32,102,114,111,109,32>>,{code,[],[<<80,49>>]},<<32,116,111,32>>,{code,[],[<<80,50>>]},<<32,40>>,{code,[],[<<80,50>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,105,100,101,110,116,105,102,105,101,114,32>>,{code,[],[<<80,50,80,105,100>>]},<<41,32,98,101,102,111,114,101,32,116,104,101,32,99,97,108,108,44,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32>>,{code,[],[<<80,50>>]},<<32,98,101,102,111,114,101,32,116,104,101,32,97,108,105,118,101,110,101,115,115,32,111,102,32>>,{code,[],[<<80,50>>]},<<32,105,115,32,99,104,101,99,107,101,100,46,32,84,104,105,115,32,103,117,97,114,97,110,116,101,101,32,109,101,97,110,115,32,116,104,97,116,32,111,110,101,32,99,97,110,32,117,115,101,32>>,{code,[],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,47,49>>]},<<32,116,111,32,108,101,116,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,49>>]},<<32,119,97,105,116,32,117,110,116,105,108,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,50>>]},<<44,32,119,104,105,99,104,32,104,97,115,32,103,111,116,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,102,114,111,109,32,80,49,44,32,105,115,32,107,105,108,108,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<101,120,105,116,40,80,50,80,105,100,44,32,107,105,108,108,41,44,10,37,32,80,50,32,109,105,103,104,116,32,110,111,116,32,98,101,32,107,105,108,108,101,100,10,105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,40,80,50,80,105,100,41,44,10,37,32,80,50,32,105,115,32,110,111,116,32,97,108,105,118,101,32,40,116,104,101,32,99,97,108,108,32,97,98,111,118,101,32,97,108,119,97,121,115,32,114,101,116,117,114,110,32,102,97,108,115,101,41>>]}]},{p,[],[<<83,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,99,111,109,109,117,110,105,99,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,111,109,109,117,110,105,99,97,116,105,111,110,32,105,110,32,69,114,108,97,110,103>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]},<<32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,105,103,110,97,108,115,32,97,110,100,32,101,120,105,116,32,115,105,110,103,110,97,108,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,52,50>>,signature => [{attribute,1234,spec,{{is_process_alive,1},[{type,1234,bounded_fun,[{type,1234,'fun',[{type,1234,product,[{var,1234,'Pid'}]},{type,1234,boolean,[]}]},[{type,1235,constraint,[{atom,1235,is_subtype},[{var,1235,'Pid'},{type,1235,pid,[]}]]}]]}]}}]}},{{function,is_record,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2220}],[<<105,115,95,114,101,99,111,114,100,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,32,97,110,100,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,114,109,97,108,108,121,32,116,104,101,32,99,111,109,112,105,108,101,114,32,116,114,101,97,116,115,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<105,115,95,114,101,99,111,114,100,47,50>>]},<<32,101,115,112,101,99,105,97,108,108,121,46,32,73,116,32,101,109,105,116,115,32,99,111,100,101,32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,44,32,116,104,97,116,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<44,32,97,110,100,32,116,104,97,116,32,116,104,101,32,115,105,122,101,32,105,115,32,99,111,114,114,101,99,116,46,32,72,111,119,101,118,101,114,44,32,105,102,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,105,115,32,110,111,116,32,97,32,108,105,116,101,114,97,108,32,97,116,111,109,44,32,116,104,101,32,66,73,70,32>>,{code,[],[<<105,115,95,114,101,99,111,114,100,47,50>>]},<<32,105,115,32,99,97,108,108,101,100,32,105,110,115,116,101,97,100,32,97,110,100,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,116,117,112,108,101,32,105,115,32,110,111,116,32,118,101,114,105,102,105,101,100,46>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,44,32,105,102,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,105,115,32,97,32,108,105,116,101,114,97,108,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,55,52>>,signature => [{attribute,2220,spec,{{is_record,2},[{type,2220,bounded_fun,[{type,2220,'fun',[{type,2220,product,[{var,2220,'Term'},{var,2220,'RecordTag'}]},{type,2220,boolean,[]}]},[{type,2221,constraint,[{atom,2221,is_subtype},[{var,2221,'Term'},{type,2221,term,[]}]]},{type,2222,constraint,[{atom,2222,is_subtype},[{var,2222,'RecordTag'},{type,2222,atom,[]}]]}]]}]}}]}},{{function,is_record,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2227}],[<<105,115,95,114,101,99,111,114,100,47,51>>],#{<<101,110>> => [{p,[],[{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,109,117,115,116,32,98,101,32,97,110,32,97,116,111,109,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,44,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<44,32,97,110,100,32,105,116,115,32,115,105,122,101,32,105,115,32>>,{code,[],[<<83,105,122,101>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,32,105,102,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,105,115,32,97,32,108,105,116,101,114,97,108,32,97,116,111,109,32,97,110,100,32>>,{code,[],[<<83,105,122,101>>]},<<32,105,115,32,97,32,108,105,116,101,114,97,108,32,105,110,116,101,103,101,114,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,100,111,99,117,109,101,110,116,101,100,32,102,111,114,32,99,111,109,112,108,101,116,101,110,101,115,115,46,32,85,115,117,97,108,108,121,32>>,{code,[],[<<105,115,95,114,101,99,111,114,100,47,50>>]},<<32,105,115,32,116,111,32,98,101,32,117,115,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,57,53>>,signature => [{attribute,2227,spec,{{is_record,3},[{type,2227,bounded_fun,[{type,2227,'fun',[{type,2227,product,[{var,2227,'Term'},{var,2227,'RecordTag'},{var,2227,'Size'}]},{type,2227,boolean,[]}]},[{type,2228,constraint,[{atom,2228,is_subtype},[{var,2228,'Term'},{type,2228,term,[]}]]},{type,2229,constraint,[{atom,2229,is_subtype},[{var,2229,'RecordTag'},{type,2229,atom,[]}]]},{type,2230,constraint,[{atom,2230,is_subtype},[{var,2230,'Size'},{type,2230,non_neg_integer,[]}]]}]]}]}}]}},{{function,is_reference,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2235}],[<<105,115,95,114,101,102,101,114,101,110,99,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,49,52>>,signature => [{attribute,2235,spec,{{is_reference,1},[{type,2235,bounded_fun,[{type,2235,'fun',[{type,2235,product,[{var,2235,'Term'}]},{type,2235,boolean,[]}]},[{type,2236,constraint,[{atom,2236,is_subtype},[{var,2236,'Term'},{type,2236,term,[]}]]}]]}]}}]}},{{function,is_tuple,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2241}],[<<105,115,95,116,117,112,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,50,52>>,signature => [{attribute,2241,spec,{{is_tuple,1},[{type,2241,bounded_fun,[{type,2241,'fun',[{type,2241,product,[{var,2241,'Term'}]},{type,2241,boolean,[]}]},[{type,2242,constraint,[{atom,2242,is_subtype},[{var,2242,'Term'},{type,2242,term,[]}]]}]]}]}}]}},{{function,length,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1241}],[<<108,101,110,103,116,104,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,101,110,103,116,104,40,91,49,44,50,44,51,44,52,44,53,44,54,44,55,44,56,44,57,93,41,46,10,57>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,51,52>>,signature => [{attribute,1241,spec,{{length,1},[{type,1241,bounded_fun,[{type,1241,'fun',[{type,1241,product,[{var,1241,'List'}]},{type,1241,non_neg_integer,[]}]},[{type,1242,constraint,[{atom,1242,is_subtype},[{var,1242,'List'},{type,1242,list,[{type,1242,term,[]}]}]]}]]}]}}]}},{{function,link,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1247}],[<<108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,108,105,110,107,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,40,111,114,32,112,111,114,116,41,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<46,32,73,102,32,116,104,101,32,108,105,110,107,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,32,111,114,32,97,32,112,114,111,99,101,115,115,32,97,116,116,101,109,112,116,115,32,116,111,32,99,114,101,97,116,101,32,97,32,108,105,110,107,32,116,111,32,105,116,115,101,108,102,44,32,110,111,116,104,105,110,103,32,105,115,32,100,111,110,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,108,105,110,107,32,105,115,32,115,101,116,32,117,112,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,97,110,100,32,99,104,101,99,107,105,110,103,32,105,116,32,105,115,32,99,104,101,97,112,44,32,97,32>>,{code,[],[<<110,111,112,114,111,99>>]},<<32,101,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,32,67,117,114,114,101,110,116,108,121,44,32,99,104,101,99,107,105,110,103,32,105,115,32,99,104,101,97,112,32,105,102,32,116,104,101,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,105,115,32,108,111,99,97,108,32,97,110,100,32,116,104,101,32,99,97,108,108,101,114,32,100,111,101,115,32,110,111,116,32,116,114,97,112,32,101,120,105,116,115,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50,32>>]}]},<<41,46>>]},{p,[],[<<65,112,97,114,116,32,102,114,111,109,32,97,110,121,32,101,120,105,116,32,115,105,103,110,97,108,115,32,102,114,111,109,32,116,104,101,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,32,105,116,115,101,108,102,44,32,116,119,111,32,115,112,101,99,105,97,108,32,101,120,105,116,32,115,105,103,110,97,108,115,32,109,97,121,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<110,111,112,114,111,99>>]},<<32,105,115,32,115,101,110,116,32,105,109,109,101,100,105,97,116,101,108,121,32,105,102,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,108,105,110,107,105,110,103,32,40,105,102,32,116,104,101,32,99,97,108,108,101,114,32,105,115,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,32,111,114,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,105,115,32,114,101,109,111,116,101,41,46>>]}]},{li,[],[{p,[],[{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,105,102,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,105,115,32,114,101,109,111,116,101,32,97,110,100,32,97,32,99,111,110,110,101,99,116,105,111,110,32,98,101,116,119,101,101,110,32,116,104,101,32,110,111,100,101,115,32,99,111,117,108,100,32,110,111,116,32,98,101,32,101,115,116,97,98,108,105,115,104,101,100,32,111,114,32,119,97,115,32,115,101,118,101,114,101,100,46>>]}]}]},{p,[],[<<83,101,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,108,105,110,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<80,114,111,99,101,115,115,101,115,32,226,158,156,32,76,105,110,107,115>>]},<<32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108,32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,52,54>>,signature => [{attribute,1247,spec,{{link,1},[{type,1247,bounded_fun,[{type,1247,'fun',[{type,1247,product,[{var,1247,'PidOrPort'}]},{atom,1247,true}]},[{type,1248,constraint,[{atom,1248,is_subtype},[{var,1248,'PidOrPort'},{type,1248,union,[{type,1248,pid,[]},{type,1248,port,[]}]}]]}]]}]}}]}},{{function,list_to_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1253}],[<<108,105,115,116,95,116,111,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,50,48,44,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,109,97,121,32,99,111,110,116,97,105,110,32,97,110,121,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,46,32,69,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,97,108,108,111,119,101,100,32,111,110,108,121,32,73,83,79,45,108,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,100,105,100,32,110,111,116,32,97,108,108,111,119,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,97,98,111,118,101,32,50,53,53,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,85,110,105,99,111,100,101,32,115,117,112,112,111,114,116,32,105,110,32,97,116,111,109,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116,35,117,116,102,56,95,97,116,111,109,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,116,101,32,111,110,32,85,84,70,45,56,32,101,110,99,111,100,101,100,32,97,116,111,109,115>>]},<<32,105,110,32,115,101,99,116,105,111,110,32,34,69,120,116,101,114,110,97,108,32,84,101,114,109,32,70,111,114,109,97,116,34,32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,97,110,32,97,116,111,109,32,110,97,109,101,32,105,115,32,108,105,109,105,116,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,99,111,110,102,105,103,117,114,97,98,108,101,32,108,105,109,105,116,32,111,110,32,104,111,119,32,109,97,110,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,101,120,105,115,116,32,97,110,100,32,97,116,111,109,115,32,97,114,101,32,110,111,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,99,111,110,115,105,100,101,114,32,105,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>]}]},<<32,105,115,32,97,32,98,101,116,116,101,114,32,111,112,116,105,111,110,32,116,104,97,110,32>>,{code,[],[<<108,105,115,116,95,116,111,95,97,116,111,109,47,49>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,97,116,111,109,40,34,69,114,108,97,110,103,34,41,46,10,39,69,114,108,97,110,103,39>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,56,52>>,signature => [{attribute,1253,spec,{{list_to_atom,1},[{type,1253,bounded_fun,[{type,1253,'fun',[{type,1253,product,[{var,1253,'String'}]},{type,1253,atom,[]}]},[{type,1254,constraint,[{atom,1254,is_subtype},[{var,1254,'String'},{type,1254,string,[]}]]}]]}]}}]}},{{function,list_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1259}],[<<108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,32,105,110,32>>,{code,[],[<<73,111,76,105,115,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,105,110,49,32,61,32,60,60,49,44,50,44,51,62,62,46,10,60,60,49,44,50,44,51,62,62,10,62,32,66,105,110,50,32,61,32,60,60,52,44,53,62,62,46,10,60,60,52,44,53,62,62,10,62,32,66,105,110,51,32,61,32,60,60,54,62,62,46,10,60,60,54,62,62,10,62,32,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,91,66,105,110,49,44,49,44,91,50,44,51,44,66,105,110,50,93,44,52,124,66,105,110,51,93,41,46,10,60,60,49,44,50,44,51,44,49,44,50,44,51,44,52,44,53,44,52,44,54,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,50,48>>,signature => [{attribute,1259,spec,{{list_to_binary,1},[{type,1259,bounded_fun,[{type,1259,'fun',[{type,1259,product,[{var,1259,'IoList'}]},{type,1259,binary,[]}]},[{type,1260,constraint,[{atom,1260,is_subtype},[{var,1260,'IoList'},{type,1260,iolist,[]}]]}]]}]}}]}},{{function,list_to_bitstring,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1265}],[<<108,105,115,116,95,116,111,95,98,105,116,115,116,114,105,110,103,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<98,105,116,115,116,114,105,110,103,95,108,105,115,116>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,116,115,116,114,105,110,103,32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,116,115,116,114,105,110,103,115,32,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103,76,105,115,116>>]},<<46,32,40,84,104,101,32,108,97,115,116,32,116,97,105,108,32,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103,76,105,115,116>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,97,32,98,105,116,115,116,114,105,110,103,46,41,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,105,110,49,32,61,32,60,60,49,44,50,44,51,62,62,46,10,60,60,49,44,50,44,51,62,62,10,62,32,66,105,110,50,32,61,32,60,60,52,44,53,62,62,46,10,60,60,52,44,53,62,62,10,62,32,66,105,110,51,32,61,32,60,60,54,44,55,58,52,62,62,46,10,60,60,54,44,55,58,52,62,62,10,62,32,108,105,115,116,95,116,111,95,98,105,116,115,116,114,105,110,103,40,91,66,105,110,49,44,49,44,91,50,44,51,44,66,105,110,50,93,44,52,124,66,105,110,51,93,41,46,10,60,60,49,44,50,44,51,44,49,44,50,44,51,44,52,44,53,44,52,44,54,44,55,58,52,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,51,56>>,signature => [{attribute,1265,spec,{{list_to_bitstring,1},[{type,1265,bounded_fun,[{type,1265,'fun',[{type,1265,product,[{var,1265,'BitstringList'}]},{type,1265,bitstring,[]}]},[{type,1266,constraint,[{atom,1266,is_subtype},[{var,1266,'BitstringList'},{user_type,1266,bitstring_list,[]}]]}]]}]}}]}},{{function,list_to_existing_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1271}],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,98,117,116,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,32,115,117,99,104,32,97,116,111,109,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,114,101,32,100,111,101,115,32,110,111,116,32,97,108,114,101,97,100,121,32,101,120,105,115,116,32,97,110,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,99,111,109,112,105,108,101,114,32,109,97,121,32,111,112,116,105,109,105,122,101,32,97,119,97,121,32,97,116,111,109,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,111,109,112,105,108,101,114,32,119,105,108,108,32,114,101,119,114,105,116,101,32>>,{code,[],[<<97,116,111,109,95,116,111,95,108,105,115,116,40,115,111,109,101,95,97,116,111,109,41>>]},<<32,116,111,32>>,{code,[],[<<34,115,111,109,101,95,97,116,111,109,34>>]},<<46,32,73,102,32,116,104,97,116,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,104,101,32,111,110,108,121,32,109,101,110,116,105,111,110,32,111,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,111,109,101,95,97,116,111,109>>]},<<32,105,110,32,116,104,101,32,99,111,110,116,97,105,110,105,110,103,32,109,111,100,117,108,101,44,32,116,104,101,32,97,116,111,109,32,119,105,108,108,32,110,111,116,32,98,101,32,99,114,101,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,108,111,97,100,101,100,44,32,97,110,100,32,97,32,115,117,98,115,101,113,117,101,110,116,32,99,97,108,108,32,116,111,32>>,{code,[],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,40,34,115,111,109,101,95,97,116,111,109,34,41>>]},<<32,119,105,108,108,32,102,97,105,108,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,53,57>>,signature => [{attribute,1271,spec,{{list_to_existing_atom,1},[{type,1271,bounded_fun,[{type,1271,'fun',[{type,1271,product,[{var,1271,'String'}]},{type,1271,atom,[]}]},[{type,1272,constraint,[{atom,1272,is_subtype},[{var,1272,'String'},{type,1272,string,[]}]]}]]}]}}]}},{{function,list_to_float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1277}],[<<108,105,115,116,95,116,111,95,102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,102,108,111,97,116,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,102,108,111,97,116,40,34,50,46,50,48,49,55,55,54,52,101,43,48,34,41,46,10,50,46,50,48,49,55,55,54,52>>]}]},{p,[],[<<84,104,101,32,102,108,111,97,116,32,115,116,114,105,110,103,32,102,111,114,109,97,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,102,111,114,109,97,116,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,102,108,111,97,116,32,108,105,116,101,114,97,108,115>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,97,116,32,117,110,100,101,114,115,99,111,114,101,115,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,102,108,111,97,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,56,48>>,signature => [{attribute,1277,spec,{{list_to_float,1},[{type,1277,bounded_fun,[{type,1277,'fun',[{type,1277,product,[{var,1277,'String'}]},{type,1277,float,[]}]},[{type,1278,constraint,[{atom,1278,is_subtype},[{var,1278,'String'},{type,1278,string,[]}]]}]]}]}}]}},{{function,list_to_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1283}],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,49,50,51,34,41,46,10,49,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,45,49,50,51,34,41,46,10,45,49,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,43,49,50,51,50,51,52,57,56,50,51,48,52,57,56,50,51,48,57,52,56,50,48,57,51,56,51,51,50,51,52,50,51,52,34,41,46,10,49,50,51,50,51,52,57,56,50,51,48,52,57,56,50,51,48,57,52,56,50,48,57,51,56,51,51,50,51,52,50,51,52>>]}]},{p,[],[{code,[],[<<83,116,114,105,110,103>>]},<<32,109,117,115,116,32,99,111,110,116,97,105,110,32,97,116,32,108,101,97,115,116,32,111,110,101,32,100,105,103,105,116,32,99,104,97,114,97,99,116,101,114,32,97,110,100,32,99,97,110,32,104,97,118,101,32,97,110,32,111,112,116,105,111,110,97,108,32,112,114,101,102,105,120,32,99,111,110,115,105,115,116,105,110,103,32,111,102,32,97,32,115,105,110,103,108,101,32,34>>,{code,[],[<<43>>]},<<34,32,111,114,32,34>>,{code,[],[<<45>>]},<<34,32,99,104,97,114,97,99,116,101,114,32,40,116,104,97,116,32,105,115,44,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,109,117,115,116,32,109,97,116,99,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32>>,{code,[],[<<34,94,91,43,45,93,63,91,48,45,57,93,43,36,34>>]},<<41,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,57,56>>,signature => [{attribute,1283,spec,{{list_to_integer,1},[{type,1283,bounded_fun,[{type,1283,'fun',[{type,1283,product,[{var,1283,'String'}]},{type,1283,integer,[]}]},[{type,1284,constraint,[{atom,1284,is_subtype},[{var,1284,'String'},{type,1284,string,[]}]]}]]}]}}]}},{{function,list_to_integer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1289}],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,51,70,70,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,43,51,70,70,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,51,102,102,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,51,102,70,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,45,51,70,70,34,44,32,49,54,41,46,10,45,49,48,50,51>>]}]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32>>,{code,[],[<<66,97,115,101>>]},<<32,105,115,32,49,54,44,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,109,117,115,116,32,109,97,116,99,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32>>,{code,[],[<<34,94,91,43,45,93,63,40,91,48,45,57,93,124,91,65,45,70,93,124,91,97,45,102,93,41,43,36,34>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,50,51>>,signature => [{attribute,1289,spec,{{list_to_integer,2},[{type,1289,bounded_fun,[{type,1289,'fun',[{type,1289,product,[{var,1289,'String'},{var,1289,'Base'}]},{type,1289,integer,[]}]},[{type,1290,constraint,[{atom,1290,is_subtype},[{var,1290,'String'},{type,1290,string,[]}]]},{type,1291,constraint,[{atom,1291,is_subtype},[{var,1291,'Base'},{type,1291,range,[{integer,1291,2},{integer,1291,36}]}]]}]]}]}}]}},{{function,list_to_pid,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1296}],[<<108,105,115,116,95,116,111,95,112,105,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,97,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,112,105,100,40,34,60,48,46,52,46,49,62,34,41,46,10,60,48,46,52,46,49,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,53,51>>,signature => [{attribute,1296,spec,{{list_to_pid,1},[{type,1296,bounded_fun,[{type,1296,'fun',[{type,1296,product,[{var,1296,'String'}]},{type,1296,pid,[]}]},[{type,1297,constraint,[{atom,1297,is_subtype},[{var,1297,'String'},{type,1297,string,[]}]]}]]}]}}]}},{{function,list_to_port,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1302}],[<<108,105,115,116,95,116,111,95,112,111,114,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,97,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,112,111,114,116,40,34,35,80,111,114,116,60,48,46,52,62,34,41,46,10,35,80,111,114,116,60,48,46,52,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,55,49>>,signature => [{attribute,1302,spec,{{list_to_port,1},[{type,1302,bounded_fun,[{type,1302,'fun',[{type,1302,product,[{var,1302,'String'}]},{type,1302,port,[]}]},[{type,1303,constraint,[{atom,1303,is_subtype},[{var,1303,'String'},{type,1303,string,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,list_to_ref,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1308}],[<<108,105,115,116,95,116,111,95,114,101,102,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,114,101,102,101,114,101,110,99,101,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,97,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,114,101,102,40,34,35,82,101,102,60,48,46,52,49,57,50,53,51,55,54,55,56,46,52,48,55,51,49,57,51,52,55,53,46,55,49,49,56,49,62,34,41,46,10,35,82,101,102,60,48,46,52,49,57,50,53,51,55,54,55,56,46,52,48,55,51,49,57,51,52,55,53,46,55,49,49,56,49,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,114,101,102,101,114,101,110,99,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,56,57>>,signature => [{attribute,1308,spec,{{list_to_ref,1},[{type,1308,bounded_fun,[{type,1308,'fun',[{type,1308,product,[{var,1308,'String'}]},{type,1308,reference,[]}]},[{type,1309,constraint,[{atom,1309,is_subtype},[{var,1309,'String'},{type,1309,string,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,list_to_tuple,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1314}],[<<108,105,115,116,95,116,111,95,116,117,112,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,116,117,112,108,101,40,91,115,104,97,114,101,44,32,91,39,69,114,105,99,115,115,111,110,95,66,39,44,32,49,54,51,93,93,41,46,10,123,115,104,97,114,101,44,32,91,39,69,114,105,99,115,115,111,110,95,66,39,44,32,49,54,51,93,125>>]}]},{p,[],[{code,[],[<<76,105,115,116>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,69,114,108,97,110,103,32,116,101,114,109,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,48,55>>,signature => [{attribute,1314,spec,{{list_to_tuple,1},[{type,1314,bounded_fun,[{type,1314,'fun',[{type,1314,product,[{var,1314,'List'}]},{type,1314,tuple,any}]},[{type,1315,constraint,[{atom,1315,is_subtype},[{var,1315,'List'},{type,1315,list,[{type,1315,term,[]}]}]]}]]}]}}]}},{{function,load_module,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2246}],[<<108,111,97,100,95,109,111,100,117,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,111,98,106,101,99,116,32,99,111,100,101,32,102,111,114,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<44,32,116,104,105,115,32,66,73,70,32,108,111,97,100,115,32,116,104,97,116,32,111,98,106,101,99,116,32,99,111,100,101,46,32,73,102,32,116,104,101,32,99,111,100,101,32,102,111,114,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,44,32,97,108,108,32,101,120,112,111,114,116,32,114,101,102,101,114,101,110,99,101,115,32,97,114,101,32,114,101,112,108,97,99,101,100,32,115,111,32,116,104,101,121,32,112,111,105,110,116,32,116,111,32,116,104,101,32,110,101,119,108,121,32,108,111,97,100,101,100,32,99,111,100,101,46,32,84,104,101,32,112,114,101,118,105,111,117,115,108,121,32,108,111,97,100,101,100,32,99,111,100,101,32,105,115,32,107,101,112,116,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,97,115,32,111,108,100,32,99,111,100,101,44,32,97,115,32,116,104,101,114,101,32,99,97,110,32,115,116,105,108,108,32,98,101,32,112,114,111,99,101,115,115,101,115,32,101,120,101,99,117,116,105,110,103,32,116,104,97,116,32,99,111,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,101,105,116,104,101,114,32>>,{code,[],[<<123,109,111,100,117,108,101,44,32,77,111,100,117,108,101,125>>]},<<44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,105,102,32,108,111,97,100,105,110,103,32,102,97,105,108,115,46,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,102,105,108,101>>]}]},{dd,[],[<<84,104,101,32,111,98,106,101,99,116,32,99,111,100,101,32,105,110,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,102,111,114,109,97,116,32>>,{em,[],[<<111,114>>]},<<32,116,104,101,32,111,98,106,101,99,116,32,99,111,100,101,32,99,111,110,116,97,105,110,115,32,99,111,100,101,32,102,111,114,32,97,110,111,116,104,101,114,32,109,111,100,117,108,101,32,116,104,97,110,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,116,95,112,117,114,103,101,100>>]}]},{dd,[],[{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,109,111,100,117,108,101,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,108,111,97,100,101,100,32,98,101,99,97,117,115,101,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,50,48>>,signature => [{attribute,2246,spec,{{load_module,2},[{type,2246,bounded_fun,[{type,2246,'fun',[{type,2246,product,[{var,2246,'Module'},{var,2246,'Binary'}]},{type,2246,union,[{type,2246,tuple,[{atom,2246,module},{var,2246,'Module'}]},{type,2246,tuple,[{atom,2246,error},{var,2246,'Reason'}]}]}]},[{type,2247,constraint,[{atom,2247,is_subtype},[{var,2247,'Module'},{type,2247,module,[]}]]},{type,2248,constraint,[{atom,2248,is_subtype},[{var,2248,'Binary'},{type,2248,binary,[]}]]},{type,2249,constraint,[{atom,2249,is_subtype},[{var,2249,'Reason'},{type,2249,union,[{atom,2249,badfile},{atom,2249,not_purged},{atom,2249,on_load}]}]]}]]}]}}]}},{{function,load_nif,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2267}],[<<108,111,97,100,95,110,105,102,47,50>>],#{<<101,110>> => [{p,[],[<<76,111,97,100,115,32,97,110,100,32,108,105,110,107,115,32,97,32,100,121,110,97,109,105,99,32,108,105,98,114,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,110,97,116,105,118,101,32,105,109,112,108,101,109,101,110,116,101,100,32,102,117,110,99,116,105,111,110,115,32,40,78,73,70,115,41,32,102,111,114,32,97,32,109,111,100,117,108,101,46,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,97,32,102,105,108,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115,104,97,114,101,97,98,108,101,32,111,98,106,101,99,116,47,100,121,110,97,109,105,99,32,108,105,98,114,97,114,121,32,102,105,108,101,32,109,105,110,117,115,32,116,104,101,32,79,83,45,100,101,112,101,110,100,101,110,116,32,102,105,108,101,32,101,120,116,101,110,115,105,111,110,32,40>>,{code,[],[<<46,115,111>>]},<<32,102,111,114,32,85,110,105,120,32,97,110,100,32>>,{code,[],[<<46,100,108,108>>]},<<32,102,111,114,32,87,105,110,100,111,119,115,41,46,32,78,111,116,105,99,101,32,116,104,97,116,32,111,110,32,109,111,115,116,32,79,83,115,32,116,104,101,32,108,105,98,114,97,114,121,32,104,97,115,32,116,111,32,104,97,118,101,32,97,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,32,111,110,32,100,105,115,99,32,119,104,101,110,32,97,110,32,117,112,103,114,97,100,101,32,111,102,32,116,104,101,32,110,105,102,32,105,115,32,100,111,110,101,46,32,73,102,32,116,104,101,32,110,97,109,101,32,105,115,32,116,104,101,32,115,97,109,101,44,32,98,117,116,32,116,104,101,32,99,111,110,116,101,110,116,115,32,100,105,102,102,101,114,44,32,116,104,101,32,111,108,100,32,108,105,98,114,97,114,121,32,109,97,121,32,98,101,32,108,111,97,100,101,100,32,105,110,115,116,101,97,100,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,32,78,73,70,32,108,105,98,114,97,114,121,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,108,95,110,105,102>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,108,95,110,105,102,40,51,41>>]}]},<<46>>]},{p,[],[{code,[],[<<76,111,97,100,73,110,102,111>>]},<<32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,46,32,73,116,32,105,115,32,112,97,115,115,101,100,32,111,110,32,116,111,32,116,104,101,32,108,105,98,114,97,114,121,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,32,65,32,103,111,111,100,32,112,114,97,99,116,105,99,101,32,105,115,32,116,111,32,105,110,99,108,117,100,101,32,97,32,109,111,100,117,108,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,116,111,32,115,117,112,112,111,114,116,32,102,117,116,117,114,101,32,99,111,100,101,32,117,112,103,114,97,100,101,32,115,99,101,110,97,114,105,111,115,46>>]},{p,[],[<<84,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<108,111,97,100,95,110,105,102,47,50>>]},<<32,109,117,115,116,32,98,101,32,109,97,100,101,32>>,{em,[],[<<100,105,114,101,99,116,108,121>>]},<<32,102,114,111,109,32,116,104,101,32,69,114,108,97,110,103,32,99,111,100,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,116,104,97,116,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,32,98,101,108,111,110,103,115,32,116,111,46,32,73,116,32,114,101,116,117,114,110,115,32,101,105,116,104,101,114,32>>,{code,[],[<<111,107>>]},<<44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,123,82,101,97,115,111,110,44,84,101,120,116,125,125>>]},<<32,105,102,32,108,111,97,100,105,110,103,32,102,97,105,108,115,46,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,97,116,111,109,115,32,119,104,105,108,101,32>>,{code,[],[<<84,101,120,116>>]},<<32,105,115,32,97,32,104,117,109,97,110,32,114,101,97,100,97,98,108,101,32,115,116,114,105,110,103,32,116,104,97,116,32,99,97,110,32,103,105,118,101,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,102,97,105,108,117,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,111,97,100,95,102,97,105,108,101,100>>]}]},{dd,[],[<<84,104,101,32,79,83,32,102,97,105,108,101,100,32,116,111,32,108,111,97,100,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,46>>]},{dt,[],[{code,[],[<<98,97,100,95,108,105,98>>]}]},{dd,[],[<<84,104,101,32,108,105,98,114,97,114,121,32,100,105,100,32,110,111,116,32,102,117,108,102,105,108,108,32,116,104,101,32,114,101,113,117,105,114,101,109,101,110,116,115,32,97,115,32,97,32,78,73,70,32,108,105,98,114,97,114,121,32,111,102,32,116,104,101,32,99,97,108,108,105,110,103,32,109,111,100,117,108,101,46>>]},{dt,[],[{code,[],[<<108,111,97,100,32,124,32,117,112,103,114,97,100,101>>]}]},{dd,[],[<<84,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,108,105,98,114,97,114,121,32,99,97,108,108,98,97,99,107,32,119,97,115,32,117,110,115,117,99,99,101,115,115,102,117,108,46>>]},{dt,[],[{code,[],[<<114,101,108,111,97,100>>]}]},{dd,[],[<<65,32,78,73,70,32,108,105,98,114,97,114,121,32,105,115,32,97,108,114,101,97,100,121,32,108,111,97,100,101,100,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,32,105,110,115,116,97,110,99,101,46,32,84,104,101,32,112,114,101,118,105,111,117,115,108,121,32,100,101,112,114,101,99,97,116,101,100,32>>,{code,[],[<<114,101,108,111,97,100>>]},<<32,102,101,97,116,117,114,101,32,119,97,115,32,114,101,109,111,118,101,100,32,105,110,32,79,84,80,32,50,48,46>>]},{dt,[],[{code,[],[<<111,108,100,95,99,111,100,101>>]}]},{dd,[],[<<84,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<108,111,97,100,95,110,105,102,47,50>>]},<<32,119,97,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,111,108,100,32,99,111,100,101,32,111,102,32,97,32,109,111,100,117,108,101,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,117,112,103,114,97,100,101,100,59,32,116,104,105,115,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,53,51>>,signature => [{attribute,2267,spec,{{erlang,load_nif,2},[{type,2267,bounded_fun,[{type,2267,'fun',[{type,2267,product,[{var,2267,'Path'},{var,2267,'LoadInfo'}]},{type,2267,union,[{atom,2267,ok},{var,2267,'Error'}]}]},[{type,2268,constraint,[{atom,2268,is_subtype},[{var,2268,'Path'},{type,2268,string,[]}]]},{type,2269,constraint,[{atom,2269,is_subtype},[{var,2269,'LoadInfo'},{type,2269,term,[]}]]},{type,2270,constraint,[{atom,2270,is_subtype},[{var,2270,'Error'},{type,2270,tuple,[{atom,2270,error},{type,2270,tuple,[{var,2270,'Reason'},{ann_type,2270,[{var,2270,'Text'},{type,2270,string,[]}]}]}]}]]},{type,2271,constraint,[{atom,2271,is_subtype},[{var,2271,'Reason'},{type,2271,union,[{atom,2271,load_failed},{atom,2271,bad_lib},{atom,2271,load},{atom,2271,reload},{atom,2271,upgrade},{atom,2271,old_code}]}]]}]]}]}}]}},{{function,loaded,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1320}],[<<108,111,97,100,101,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,108,108,32,108,111,97,100,101,100,32,69,114,108,97,110,103,32,109,111,100,117,108,101,115,32,40,99,117,114,114,101,110,116,32,97,110,100,32,111,108,100,32,99,111,100,101,41,44,32,105,110,99,108,117,100,105,110,103,32,112,114,101,108,111,97,100,101,100,32,109,111,100,117,108,101,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,48,50>>,signature => [{attribute,1320,spec,{{erlang,loaded,0},[{type,1320,bounded_fun,[{type,1320,'fun',[{type,1320,product,[]},{type,1320,list,[{var,1320,'Module'}]}]},[{type,1321,constraint,[{atom,1321,is_subtype},[{var,1321,'Module'},{type,1321,module,[]}]]}]]}]}}]}},{{function,localtime,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1326}],[<<108,111,99,97,108,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,44,32>>,{code,[],[<<123,123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125,44,32,123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125,125>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,40,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,122,111,110,101,32,97,110,100,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,99,111,114,114,101,99,116,105,111,110,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,49,51>>,signature => [{attribute,1326,spec,{{erlang,localtime,0},[{type,1326,bounded_fun,[{type,1326,'fun',[{type,1326,product,[]},{var,1326,'DateTime'}]},[{type,1327,constraint,[{atom,1327,is_subtype},[{var,1327,'DateTime'},{remote_type,1327,[{atom,1327,calendar},{atom,1327,datetime},[]]}]]}]]}]}}]}},{{function,localtime_to_universaltime,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3481}],[<<108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,116,111,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,44,32,105,102,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32,110,111,32,99,111,110,118,101,114,115,105,111,110,32,105,115,32,100,111,110,101,32,97,110,100,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,51,44,52,53,44,49,55,125,125>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,100,101,110,111,116,101,115,32,97,110,32,105,110,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,51,48>>,signature => [{attribute,3481,spec,{{erlang,localtime_to_universaltime,1},[{type,3481,bounded_fun,[{type,3481,'fun',[{type,3481,product,[{var,3481,'Localtime'}]},{var,3481,'Universaltime'}]},[{type,3482,constraint,[{atom,3482,is_subtype},[{var,3482,'Localtime'},{remote_type,3482,[{atom,3482,calendar},{atom,3482,datetime},[]]}]]},{type,3483,constraint,[{atom,3483,is_subtype},[{var,3483,'Universaltime'},{remote_type,3483,[{atom,3483,calendar},{atom,3483,datetime},[]]}]]}]]}]}}]}},{{function,localtime_to_universaltime,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2275}],[<<108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,116,111,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,32,97,115,32>>,{code,[],[<<101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,47,49>>]},<<44,32,98,117,116,32,116,104,101,32,99,97,108,108,101,114,32,100,101,99,105,100,101,115,32,105,102,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,105,115,32,97,99,116,105,118,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<73,115,68,115,116,32,61,61,32,116,114,117,101>>]},<<44,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,105,115,32,100,117,114,105,110,103,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,44,32,105,102,32>>,{code,[],[<<73,115,68,115,116,32,61,61,32,102,97,108,115,101>>]},<<32,105,116,32,105,115,32,110,111,116,46,32,73,102,32>>,{code,[],[<<73,115,68,115,116,32,61,61,32,117,110,100,101,102,105,110,101,100>>]},<<44,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,32,99,97,110,32,103,117,101,115,115,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,76,111,99,97,108,116,105,109,101,41>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,44,32,116,114,117,101,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,50,44,52,53,44,49,55,125,125,10,62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,44,32,102,97,108,115,101,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,51,44,52,53,44,49,55,125,125,10,62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,44,32,117,110,100,101,102,105,110,101,100,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,51,44,52,53,44,49,55,125,125>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,100,101,110,111,116,101,115,32,97,110,32,105,110,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,52,55>>,signature => [{attribute,2275,spec,{{erlang,localtime_to_universaltime,2},[{type,2275,bounded_fun,[{type,2275,'fun',[{type,2275,product,[{var,2275,'Localtime'},{var,2275,'IsDst'}]},{var,2275,'Universaltime'}]},[{type,2276,constraint,[{atom,2276,is_subtype},[{var,2276,'Localtime'},{remote_type,2276,[{atom,2276,calendar},{atom,2276,datetime},[]]}]]},{type,2277,constraint,[{atom,2277,is_subtype},[{var,2277,'Universaltime'},{remote_type,2277,[{atom,2277,calendar},{atom,2277,datetime},[]]}]]},{type,2278,constraint,[{atom,2278,is_subtype},[{var,2278,'IsDst'},{type,2278,union,[{atom,2278,true},{atom,2278,false},{atom,2278,undefined}]}]]}]]}]}}]}},{{function,make_ref,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1332}],[<<109,97,107,101,95,114,101,102,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100,35,117,110,105,113,117,101,95,114,101,102,101,114,101,110,99,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<117,110,105,113,117,101,32,114,101,102,101,114,101,110,99,101>>]},<<46,32,84,104,101,32,114,101,102,101,114,101,110,99,101,32,105,115,32,117,110,105,113,117,101,32,97,109,111,110,103,32,99,111,110,110,101,99,116,101,100,32,110,111,100,101,115,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<75,110,111,119,110,32,105,115,115,117,101,58,32,87,104,101,110,32,97,32,110,111,100,101,32,105,115,32,114,101,115,116,97,114,116,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,110,97,109,101,44,32,114,101,102,101,114,101,110,99,101,115,32,99,114,101,97,116,101,100,32,111,110,32,97,32,110,101,119,101,114,32,110,111,100,101,32,99,97,110,32,98,101,32,109,105,115,116,97,107,101,110,32,102,111,114,32,97,32,114,101,102,101,114,101,110,99,101,32,99,114,101,97,116,101,100,32,111,110,32,97,110,32,111,108,100,101,114,32,110,111,100,101,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,110,97,109,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,55,51>>,signature => [{attribute,1332,spec,{{make_ref,0},[{type,1332,'fun',[{type,1332,product,[]},{type,1332,reference,[]}]}]}}]}},{{function,make_tuple,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2294}],[<<109,97,107,101,95,116,117,112,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,110,101,119,32,116,117,112,108,101,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32>>,{code,[],[<<65,114,105,116,121>>]},<<44,32,119,104,101,114,101,32,97,108,108,32,101,108,101,109,101,110,116,115,32,97,114,101,32>>,{code,[],[<<73,110,105,116,105,97,108,86,97,108,117,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,109,97,107,101,95,116,117,112,108,101,40,52,44,32,91,93,41,46,10,123,91,93,44,91,93,44,91,93,44,91,93,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,57,48>>,signature => [{attribute,2294,spec,{{erlang,make_tuple,2},[{type,2294,bounded_fun,[{type,2294,'fun',[{type,2294,product,[{var,2294,'Arity'},{var,2294,'InitialValue'}]},{type,2294,tuple,any}]},[{type,2295,constraint,[{atom,2295,is_subtype},[{var,2295,'Arity'},{type,2295,arity,[]}]]},{type,2296,constraint,[{atom,2296,is_subtype},[{var,2296,'InitialValue'},{type,2296,term,[]}]]}]]}]}}]}},{{function,make_tuple,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2301}],[<<109,97,107,101,95,116,117,112,108,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,116,117,112,108,101,32,111,102,32,115,105,122,101,32>>,{code,[],[<<65,114,105,116,121>>]},<<44,32,119,104,101,114,101,32,101,97,99,104,32,101,108,101,109,101,110,116,32,104,97,115,32,118,97,108,117,101,32>>,{code,[],[<<68,101,102,97,117,108,116,86,97,108,117,101>>]},<<44,32,97,110,100,32,116,104,101,110,32,102,105,108,108,115,32,105,110,32,118,97,108,117,101,115,32,102,114,111,109,32>>,{code,[],[<<73,110,105,116,76,105,115,116>>]},<<46,32,69,97,99,104,32,108,105,115,116,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<73,110,105,116,76,105,115,116>>]},<<32,109,117,115,116,32,98,101,32,97,32,116,119,111,45,116,117,112,108,101,44,32,119,104,101,114,101,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,116,117,112,108,101,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,32,105,115,32,97,110,121,32,116,101,114,109,46,32,73,102,32,97,32,112,111,115,105,116,105,111,110,32,111,99,99,117,114,115,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,32,105,110,32,116,104,101,32,108,105,115,116,44,32,116,104,101,32,116,101,114,109,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,108,97,115,116,32,111,99,99,117,114,114,101,110,99,101,32,105,115,32,117,115,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,109,97,107,101,95,116,117,112,108,101,40,53,44,32,91,93,44,32,91,123,50,44,105,103,110,111,114,101,100,125,44,123,53,44,122,122,125,44,123,50,44,97,97,125,93,41,46,10,123,91,93,44,97,97,44,91,93,44,91,93,44,122,122,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,48,50>>,signature => [{attribute,2301,spec,{{erlang,make_tuple,3},[{type,2301,bounded_fun,[{type,2301,'fun',[{type,2301,product,[{var,2301,'Arity'},{var,2301,'DefaultValue'},{var,2301,'InitList'}]},{type,2301,tuple,any}]},[{type,2302,constraint,[{atom,2302,is_subtype},[{var,2302,'Arity'},{type,2302,arity,[]}]]},{type,2303,constraint,[{atom,2303,is_subtype},[{var,2303,'DefaultValue'},{type,2303,term,[]}]]},{type,2304,constraint,[{atom,2304,is_subtype},[{var,2304,'InitList'},{type,2304,list,[{type,2304,tuple,[{ann_type,2304,[{var,2304,'Position'},{type,2304,pos_integer,[]}]},{type,2304,term,[]}]}]}]]}]]}]}}]}},{{function,map_get,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1343}],[<<109,97,112,95,103,101,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<32,105,102,32>>,{code,[],[<<77,97,112>>]},<<32,99,111,110,116,97,105,110,115,32>>,{code,[],[<<75,101,121>>]},<<46>>]},{p,[],[<<84,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<123,98,97,100,109,97,112,44,77,97,112,125>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32>>,{code,[],[<<77,97,112>>]},<<32,105,115,32,110,111,116,32,97,32,109,97,112,44,32,111,114,32,119,105,116,104,32,97,32>>,{code,[],[<<123,98,97,100,107,101,121,44,75,101,121,125>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32,110,111,32,118,97,108,117,101,32,105,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<62,32,75,101,121,32,61,32,49,51,51,55,44,10,32,32,77,97,112,32,61,32,35,123,52,50,32,61,62,32,118,97,108,117,101,95,116,119,111,44,49,51,51,55,32,61,62,32,34,118,97,108,117,101,32,111,110,101,34,44,34,97,34,32,61,62,32,49,125,44,10,32,32,109,97,112,95,103,101,116,40,75,101,121,44,77,97,112,41,46,10,34,118,97,108,117,101,32,111,110,101,34>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,50,48>>,signature => [{attribute,1343,spec,{{map_get,2},[{type,1343,bounded_fun,[{type,1343,'fun',[{type,1343,product,[{var,1343,'Key'},{var,1343,'Map'}]},{var,1343,'Value'}]},[{type,1344,constraint,[{atom,1344,is_subtype},[{var,1344,'Map'},{type,1344,map,any}]]},{type,1345,constraint,[{atom,1345,is_subtype},[{var,1345,'Key'},{type,1345,any,[]}]]},{type,1346,constraint,[{atom,1346,is_subtype},[{var,1346,'Value'},{type,1346,any,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,map_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1337}],[<<109,97,112,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,107,101,121,45,118,97,108,117,101,32,112,97,105,114,115,32,105,110,32>>,{code,[],[<<77,97,112>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,109,97,112,95,115,105,122,101,40,35,123,97,61,62,49,44,32,98,61,62,50,44,32,99,61,62,51,125,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,52,48>>,signature => [{attribute,1337,spec,{{map_size,1},[{type,1337,bounded_fun,[{type,1337,'fun',[{type,1337,product,[{var,1337,'Map'}]},{type,1337,non_neg_integer,[]}]},[{type,1338,constraint,[{atom,1338,is_subtype},[{var,1338,'Map'},{type,1338,map,any}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,match_spec_test,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1351}],[<<109,97,116,99,104,95,115,112,101,99,95,116,101,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,101,115,116,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,117,115,101,100,32,105,110,32,99,97,108,108,115,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,116,115,35,115,101,108,101,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,116,115,58,115,101,108,101,99,116,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,101,115,116,115,32,98,111,116,104,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,34,115,121,110,116,97,99,116,105,99,34,32,99,111,114,114,101,99,116,110,101,115,115,32,97,110,100,32,114,117,110,115,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,103,97,105,110,115,116,32,116,104,101,32,111,98,106,101,99,116,46,32,73,102,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,99,111,110,116,97,105,110,115,32,101,114,114,111,114,115,44,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,69,114,114,111,114,115,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,119,104,101,114,101,32>>,{code,[],[<<69,114,114,111,114,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,110,97,116,117,114,97,108,32,108,97,110,103,117,97,103,101,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,119,104,97,116,32,119,97,115,32,119,114,111,110,103,32,119,105,116,104,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<116,97,98,108,101>>]},<<44,32,116,104,101,32,111,98,106,101,99,116,32,116,111,32,109,97,116,99,104,32,97,103,97,105,110,115,116,32,105,115,32,116,111,32,98,101,32,97,32,116,117,112,108,101,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,104,101,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,82,101,115,117,108,116,44,91,93,44,87,97,114,110,105,110,103,115,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,119,104,97,116,32,119,111,117,108,100,32,104,97,118,101,32,98,101,101,110,32,116,104,101,32,114,101,115,117,108,116,32,105,110,32,97,32,114,101,97,108,32>>,{code,[],[<<101,116,115,58,115,101,108,101,99,116,47,50>>]},<<32,99,97,108,108,44,32,111,114,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,111,98,106,101,99,116,32,116,117,112,108,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<116,114,97,99,101>>]},<<44,32,116,104,101,32,111,98,106,101,99,116,32,116,111,32,109,97,116,99,104,32,97,103,97,105,110,115,116,32,105,115,32,116,111,32,98,101,32,97,32,108,105,115,116,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,82,101,115,117,108,116,44,32,70,108,97,103,115,44,32,87,97,114,110,105,110,103,115,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{code,[],[<<116,114,117,101>>]},<<32,105,102,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,116,111,32,98,101,32,101,109,105,116,116,101,100>>]},{li,[],[{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,110,111,116,32,116,111,32,98,101,32,101,109,105,116,116,101,100>>]},{li,[],[<<84,104,101,32,109,101,115,115,97,103,101,32,116,101,114,109,32,116,111,32,98,101,32,97,112,112,101,110,100,101,100,32,116,111,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101>>]}]},{p,[],[{code,[],[<<70,108,97,103,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,97,108,108,32,116,104,101,32,116,114,97,99,101,32,102,108,97,103,115,32,116,111,32,98,101,32,101,110,97,98,108,101,100,44,32,99,117,114,114,101,110,116,108,121,32,116,104,105,115,32,105,115,32,111,110,108,121,32>>,{code,[],[<<114,101,116,117,114,110,95,116,114,97,99,101>>]},<<46>>]},{p,[],[<<84,104,105,115,32,105,115,32,97,32,117,115,101,102,117,108,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,116,101,115,116,32,116,111,111,108,44,32,101,115,112,101,99,105,97,108,108,121,32,119,104,101,110,32,119,114,105,116,105,110,103,32,99,111,109,112,108,105,99,97,116,101,100,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,116,115,35,116,101,115,116,95,109,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,116,115,58,116,101,115,116,95,109,115,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,53,51>>,signature => [{attribute,1351,spec,{{erlang,match_spec_test,3},[{type,1351,bounded_fun,[{type,1351,'fun',[{type,1351,product,[{var,1351,'MatchAgainst'},{var,1351,'MatchSpec'},{var,1351,'Type'}]},{var,1351,'TestResult'}]},[{type,1352,constraint,[{atom,1352,is_subtype},[{var,1352,'MatchAgainst'},{type,1352,union,[{type,1352,list,[{type,1352,term,[]}]},{type,1352,tuple,any}]}]]},{type,1353,constraint,[{atom,1353,is_subtype},[{var,1353,'MatchSpec'},{type,1353,term,[]}]]},{type,1354,constraint,[{atom,1354,is_subtype},[{var,1354,'Type'},{type,1354,union,[{atom,1354,table},{atom,1354,trace}]}]]},{type,1355,constraint,[{atom,1355,is_subtype},[{var,1355,'TestResult'},{type,1355,union,[{type,1355,tuple,[{atom,1355,ok},{type,1355,term,[]},{type,1355,list,[{atom,1355,return_trace}]},{type,1355,list,[{type,1355,tuple,[{type,1355,union,[{atom,1355,error},{atom,1355,warning}]},{type,1355,string,[]}]}]}]},{type,1355,tuple,[{atom,1355,error},{type,1355,list,[{type,1355,tuple,[{type,1355,union,[{atom,1355,error},{atom,1355,warning}]},{type,1355,string,[]}]}]}]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,max,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3962}],[<<109,97,120,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,97,114,103,101,115,116,32,111,102,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,97,110,100,32>>,{code,[],[<<84,101,114,109,50>>]},<<46,32,73,102,32,116,104,101,32,116,101,114,109,115,32,99,111,109,112,97,114,101,32,101,113,117,97,108,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,44,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,116,101,114,109,45,99,111,109,112,97,114,105,115,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,120,112,114,101,115,115,105,111,110,115,32,115,101,99,116,105,111,110>>]},<<32,99,111,110,116,97,105,110,115,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,32,97,110,100,32,104,111,119,32,116,101,114,109,115,32,97,114,101,32,111,114,100,101,114,101,100,46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,109,97,120,40,49,44,32,50,41,46,10,50>>]}]},{pre,[],[{code,[],[<<62,32,109,97,120,40,49,46,48,44,32,49,41,46,10,49,46,48>>]}]},{pre,[],[{code,[],[<<62,32,109,97,120,40,49,44,32,49,46,48,41,46,10,49>>]}]},{pre,[],[{code,[],[<<62,32,109,97,120,40,34,97,98,99,34,44,32,34,98,34,41,46,10,34,98,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,57,49>>,signature => [{attribute,3962,spec,{{max,2},[{type,3962,bounded_fun,[{type,3962,'fun',[{type,3962,product,[{var,3962,'Term1'},{var,3962,'Term2'}]},{var,3962,'Maximum'}]},[{type,3963,constraint,[{atom,3963,is_subtype},[{var,3963,'Term1'},{type,3963,term,[]}]]},{type,3964,constraint,[{atom,3964,is_subtype},[{var,3964,'Term2'},{type,3964,term,[]}]]},{type,3965,constraint,[{atom,3965,is_subtype},[{var,3965,'Maximum'},{type,3965,term,[]}]]}]]}]}}]}},{{function,md5,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1360}],[<<109,100,53,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,117,116,101,115,32,97,110,32,77,68,53,32,109,101,115,115,97,103,101,32,100,105,103,101,115,116,32,102,114,111,109,32>>,{code,[],[<<68,97,116,97>>]},<<44,32,119,104,101,114,101,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,100,105,103,101,115,116,32,105,115,32,49,50,56,32,98,105,116,115,32,40,49,54,32,98,121,116,101,115,41,46,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,111,114,32,97,32,108,105,115,116,32,111,102,32,115,109,97,108,108,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,77,68,53,44,32,115,101,101,32>>,{a,[{href,<<104,116,116,112,115,58,47,47,119,119,119,46,105,101,116,102,46,111,114,103,47,114,102,99,47,114,102,99,49,51,50,49,46,116,120,116>>}],[<<82,70,67,32,49,51,50,49,32,45,32,84,104,101,32,77,68,53,32,77,101,115,115,97,103,101,45,68,105,103,101,115,116,32,65,108,103,111,114,105,116,104,109>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,101,32,77,68,53,32,77,101,115,115,97,103,101,45,68,105,103,101,115,116,32,65,108,103,111,114,105,116,104,109,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,99,111,110,115,105,100,101,114,101,100,32,115,97,102,101,32,102,111,114,32,99,111,100,101,45,115,105,103,110,105,110,103,32,111,114,32,115,111,102,116,119,97,114,101,45,105,110,116,101,103,114,105,116,121,32,112,117,114,112,111,115,101,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,50,48>>,signature => [{attribute,1360,spec,{{erlang,md5,1},[{type,1360,bounded_fun,[{type,1360,'fun',[{type,1360,product,[{var,1360,'Data'}]},{var,1360,'Digest'}]},[{type,1361,constraint,[{atom,1361,is_subtype},[{var,1361,'Data'},{type,1361,iodata,[]}]]},{type,1362,constraint,[{atom,1362,is_subtype},[{var,1362,'Digest'},{type,1362,binary,[]}]]}]]}]}}]}},{{function,md5_final,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1367}],[<<109,100,53,95,102,105,110,97,108,47,49>>],#{<<101,110>> => [{p,[],[<<70,105,110,105,115,104,101,115,32,116,104,101,32,117,112,100,97,116,101,32,111,102,32,97,110,32,77,68,53,32>>,{code,[],[<<67,111,110,116,101,120,116>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,99,111,109,112,117,116,101,100,32>>,{code,[],[<<77,68,53>>]},<<32,109,101,115,115,97,103,101,32,100,105,103,101,115,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,51,56>>,signature => [{attribute,1367,spec,{{erlang,md5_final,1},[{type,1367,bounded_fun,[{type,1367,'fun',[{type,1367,product,[{var,1367,'Context'}]},{var,1367,'Digest'}]},[{type,1368,constraint,[{atom,1368,is_subtype},[{var,1368,'Context'},{type,1368,binary,[]}]]},{type,1369,constraint,[{atom,1369,is_subtype},[{var,1369,'Digest'},{type,1369,binary,[]}]]}]]}]}}]}},{{function,md5_init,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1374}],[<<109,100,53,95,105,110,105,116,47,48>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,110,32,77,68,53,32,99,111,110,116,101,120,116,44,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,100,53,95,117,112,100,97,116,101,47,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,52,56>>,signature => [{attribute,1374,spec,{{erlang,md5_init,0},[{type,1374,bounded_fun,[{type,1374,'fun',[{type,1374,product,[]},{var,1374,'Context'}]},[{type,1375,constraint,[{atom,1375,is_subtype},[{var,1375,'Context'},{type,1375,binary,[]}]]}]]}]}}]}},{{function,md5_update,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1380}],[<<109,100,53,95,117,112,100,97,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<85,112,100,97,116,101,32,97,110,32,77,68,53,32>>,{code,[],[<<67,111,110,116,101,120,116>>]},<<32,119,105,116,104,32>>,{code,[],[<<68,97,116,97>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32,97,32>>,{code,[],[<<78,101,119,67,111,110,116,101,120,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,53,55>>,signature => [{attribute,1380,spec,{{erlang,md5_update,2},[{type,1380,bounded_fun,[{type,1380,'fun',[{type,1380,product,[{var,1380,'Context'},{var,1380,'Data'}]},{var,1380,'NewContext'}]},[{type,1381,constraint,[{atom,1381,is_subtype},[{var,1381,'Context'},{type,1381,binary,[]}]]},{type,1382,constraint,[{atom,1382,is_subtype},[{var,1382,'Data'},{type,1382,iodata,[]}]]},{type,1383,constraint,[{atom,1383,is_subtype},[{var,1383,'NewContext'},{type,1383,binary,[]}]]}]]}]}}]}},{{function,memory,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3994}],[<<109,101,109,111,114,121,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,101,109,111,114,121,95,116,121,112,101>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,109,101,109,111,114,121,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,101,109,117,108,97,116,111,114,46,32,69,97,99,104,32,108,105,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,84,121,112,101,44,32,83,105,122,101,125>>]},<<46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,109,101,109,111,114,121,32,116,121,112,101,46,32,84,104,101,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,32>>,{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,109,101,109,111,114,121,32,115,105,122,101,32,105,110,32,98,121,116,101,115,46>>]},{p,[],[<<77,101,109,111,114,121,32,116,121,112,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,111,116,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,115,105,122,101,32,102,111,114,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<46>>]}]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,46>>]}]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,101,115,95,117,115,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,46,32,84,104,105,115,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,116,104,101,32,101,109,117,108,97,116,111,114,32,116,104,97,116,32,105,115,32,110,111,116,32,100,105,114,101,99,116,108,121,32,114,101,108,97,116,101,100,32,116,111,32,97,110,121,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,46,32,77,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,105,115,32,110,111,116,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,105,115,32,109,101,109,111,114,121,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,111,111,108,115,58,105,110,115,116,114,117,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,115,116,114,117,109,101,110,116,40,51,41>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,103,101,116,32,97,32,109,111,114,101,32,100,101,116,97,105,108,101,100,32,98,114,101,97,107,100,111,119,110,32,111,102,32,119,104,97,116,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,105,115,32,116,121,112,101,46>>]}]},{dt,[],[{code,[],[<<97,116,111,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,97,116,111,109,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<97,116,111,109,95,117,115,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,102,111,114,32,97,116,111,109,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<97,116,111,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,98,105,110,97,114,105,101,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<99,111,100,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,69,114,108,97,110,103,32,99,111,100,101,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<101,116,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,69,84,83,32,116,97,98,108,101,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<108,111,119>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,111,110,32,54,52,45,98,105,116,32,104,97,108,102,119,111,114,100,32,101,109,117,108,97,116,111,114,46,32,84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,101,100,32,105,110,32,108,111,119,32,109,101,109,111,114,121,32,97,114,101,97,115,32,116,104,97,116,32,97,114,101,32,114,101,115,116,114,105,99,116,101,100,32,116,111,32,60,32,52,32,71,66,44,32,97,108,116,104,111,117,103,104,32,116,104,101,32,115,121,115,116,101,109,32,99,97,110,32,104,97,118,101,32,109,111,114,101,32,109,101,109,111,114,121,46>>]},{p,[],[<<67,97,110,32,98,101,32,114,101,109,111,118,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,32,111,102,32,116,104,101,32,104,97,108,102,119,111,114,100,32,101,109,117,108,97,116,111,114,46>>]}]},{dt,[],[{code,[],[<<109,97,120,105,109,117,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,101,100,32,115,105,110,99,101,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,97,115,32,115,116,97,114,116,101,100,46,32,84,104,105,115,32,116,117,112,108,101,32,105,115,32,111,110,108,121,32,112,114,101,115,101,110,116,32,119,104,101,110,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,114,117,110,32,119,105,116,104,32,105,110,115,116,114,117,109,101,110,116,97,116,105,111,110,46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,114,117,110,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,105,116,104,32,105,110,115,116,114,117,109,101,110,116,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,111,111,108,115,58,105,110,115,116,114,117,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,115,116,114,117,109,101,110,116,40,51,41>>]}]},<<32,97,110,100,47,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<101,114,108,40,49,41>>]}]},<<46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,118,97,108,117,101,32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,46,32,83,111,109,101,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,116,104,97,116,32,105,115,32,116,111,32,98,101,32,112,97,114,116,32,111,102,32,116,104,105,115,32,118,97,108,117,101,32,105,115,32,110,111,116,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,114,117,110,32,119,105,116,104,32,105,110,115,116,114,117,109,101,110,116,97,116,105,111,110,44,32,116,104,101,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,118,97,108,117,101,32,105,115,32,109,111,114,101,32,97,99,99,117,114,97,116,101,44,32,98,117,116,32,109,101,109,111,114,121,32,100,105,114,101,99,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32>>,{code,[],[<<109,97,108,108,111,99>>]},<<32,40,97,110,100,32,102,114,105,101,110,100,115,41,32,105,115,32,115,116,105,108,108,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,118,97,108,117,101,46,32,68,105,114,101,99,116,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,97,108,108,111,99>>]},<<32,97,114,101,32,111,110,108,121,32,100,111,110,101,32,102,114,111,109,32,79,83,45,115,112,101,99,105,102,105,99,32,114,117,110,116,105,109,101,32,108,105,98,114,97,114,105,101,115,32,97,110,100,32,112,101,114,104,97,112,115,32,102,114,111,109,32,117,115,101,114,45,105,109,112,108,101,109,101,110,116,101,100,32,69,114,108,97,110,103,32,100,114,105,118,101,114,115,32,116,104,97,116,32,100,111,32,110,111,116,32,117,115,101,32,116,104,101,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32,100,114,105,118,101,114,32,105,110,116,101,114,102,97,99,101,46>>]},{p,[],[<<65,115,32,116,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,32,105,115,32,116,104,101,32,115,117,109,32,111,102,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<44,32,116,104,101,32,101,114,114,111,114,32,105,110,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,112,114,111,112,97,103,97,116,101,115,32,116,111,32,116,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,46>>]},{p,[],[<<84,104,101,32,100,105,102,102,101,114,101,110,116,32,97,109,111,117,110,116,115,32,111,102,32,109,101,109,111,114,121,32,116,104,97,116,32,97,114,101,32,115,117,109,109,101,100,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,44,32,119,104,105,99,104,32,105,110,116,114,111,100,117,99,101,115,32,97,110,32,101,114,114,111,114,32,105,110,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},{p,[],[<<84,104,101,32,100,105,102,102,101,114,101,110,116,32,118,97,108,117,101,115,32,104,97,118,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,101,108,97,116,105,111,110,32,116,111,32,101,97,99,104,32,111,116,104,101,114,46,32,86,97,108,117,101,115,32,98,101,103,105,110,110,105,110,103,32,119,105,116,104,32,97,110,32,117,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114,32,105,115,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<116,111,116,97,108,32,32,32,32,32,32,61,32,112,114,111,99,101,115,115,101,115,32,43,32,115,121,115,116,101,109,10,112,114,111,99,101,115,115,101,115,32,32,61,32,112,114,111,99,101,115,115,101,115,95,117,115,101,100,32,43,32,80,114,111,99,101,115,115,101,115,78,111,116,85,115,101,100,10,115,121,115,116,101,109,32,32,32,32,32,61,32,97,116,111,109,32,43,32,98,105,110,97,114,121,32,43,32,99,111,100,101,32,43,32,101,116,115,32,43,32,79,116,104,101,114,83,121,115,116,101,109,10,97,116,111,109,32,32,32,32,32,32,32,61,32,97,116,111,109,95,117,115,101,100,32,43,32,65,116,111,109,78,111,116,85,115,101,100,10,82,101,97,108,84,111,116,97,108,32,32,61,32,112,114,111,99,101,115,115,101,115,32,43,32,82,101,97,108,83,121,115,116,101,109,10,82,101,97,108,83,121,115,116,101,109,32,61,32,115,121,115,116,101,109,32,43,32,77,105,115,115,101,100,83,121,115,116,101,109>>]}]},{p,[],[<<77,111,114,101,32,116,117,112,108,101,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,32,105,115,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,116,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,104,97,114,101,100,32,108,105,98,114,97,114,105,101,115,44,32,116,104,101,32,99,111,100,101,32,111,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,116,115,101,108,102,44,32,97,110,100,32,116,104,101,32,101,109,117,108,97,116,111,114,32,115,116,97,99,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,105,110,99,108,117,100,101,100,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,101,113,117,97,108,32,116,111,32,116,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,97,108,108,32,112,97,103,101,115,32,109,97,112,112,101,100,32,116,111,32,116,104,101,32,101,109,117,108,97,116,111,114,46>>]},{p,[],[<<65,108,115,111,44,32,98,101,99,97,117,115,101,32,111,102,32,102,114,97,103,109,101,110,116,97,116,105,111,110,32,97,110,100,32,112,114,101,114,101,115,101,114,118,97,116,105,111,110,32,111,102,32,109,101,109,111,114,121,32,97,114,101,97,115,44,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,115,101,103,109,101,110,116,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,98,108,111,99,107,115,32,99,97,110,32,98,101,32,109,117,99,104,32,108,97,114,103,101,114,32,116,104,97,110,32,116,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,116,104,101,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,98,108,111,99,107,115,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,54,46,52,44,32>>,{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48>>]},<<32,114,101,113,117,105,114,101,115,32,116,104,97,116,32,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,115,32,97,114,101,32,101,110,97,98,108,101,100,32,40,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,41,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,105,102,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,32,104,97,115,32,98,101,101,110,32,100,105,115,97,98,108,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,54,56>>,signature => [{attribute,3994,spec,{{erlang,memory,0},[{type,3994,bounded_fun,[{type,3994,'fun',[{type,3994,product,[]},{type,3994,list,[{type,3994,tuple,[{var,3994,'Type'},{var,3994,'Size'}]}]}]},[{type,3995,constraint,[{atom,3995,is_subtype},[{var,3995,'Type'},{user_type,3995,memory_type,[]}]]},{type,3996,constraint,[{atom,3996,is_subtype},[{var,3996,'Size'},{type,3996,non_neg_integer,[]}]]}]]}]}}]}},{{function,memory,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,4013}],[<<109,101,109,111,114,121,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,101,109,111,114,121,95,116,121,112,101>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,101,109,111,114,121,32,115,105,122,101,32,105,110,32,98,121,116,101,115,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,109,101,109,111,114,121,32,111,102,32,116,121,112,101,32>>,{code,[],[<<84,121,112,101>>]},<<46,32,84,104,101,32,97,114,103,117,109,101,110,116,32,99,97,110,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<109,101,109,111,114,121,95,116,121,112,101,40,41>>]},<<32,97,116,111,109,115,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,97,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,109,101,109,111,114,121,95,116,121,112,101,40,41,44,32,83,105,122,101,32,58,58,32,105,110,116,101,103,101,114,32,62,61,32,48,125>>]},<<32,116,117,112,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,54,46,52,44,32>>,{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,49>>]},<<32,114,101,113,117,105,114,101,115,32,116,104,97,116,32,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,115,32,97,114,101,32,101,110,97,98,108,101,100,32,40,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,41,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,110,111,116,32,111,110,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,116,121,112,101,115,32,108,105,115,116,101,100,32,105,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,101,109,111,114,121,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48>>]}]},<<46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<109,97,120,105,109,117,109>>]},<<32,105,115,32,112,97,115,115,101,100,32,97,115,32>>,{code,[],[<<84,121,112,101>>]},<<32,97,110,100,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,110,111,116,32,114,117,110,32,105,110,32,105,110,115,116,114,117,109,101,110,116,101,100,32,109,111,100,101,46>>]},{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[<<73,102,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,32,104,97,115,32,98,101,101,110,32,100,105,115,97,98,108,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,101,109,111,114,121,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,49,50>>,signature => [{attribute,4013,spec,{{erlang,memory,1},[{type,4013,'fun',[{type,4013,product,[{ann_type,4013,[{var,4013,'Type'},{user_type,4013,memory_type,[]}]}]},{type,4013,non_neg_integer,[]}]},{type,4014,'fun',[{type,4014,product,[{ann_type,4014,[{var,4014,'TypeList'},{type,4014,list,[{user_type,4014,memory_type,[]}]}]}]},{type,4014,list,[{type,4014,tuple,[{user_type,4014,memory_type,[]},{type,4014,non_neg_integer,[]}]}]}]}]}}]}},{{function,min,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3955}],[<<109,105,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,111,102,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,97,110,100,32>>,{code,[],[<<84,101,114,109,50>>]},<<46,32,73,102,32,116,104,101,32,116,101,114,109,115,32,99,111,109,112,97,114,101,32,101,113,117,97,108,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,44,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,116,101,114,109,45,99,111,109,112,97,114,105,115,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,120,112,114,101,115,115,105,111,110,115,32,115,101,99,116,105,111,110>>]},<<32,99,111,110,116,97,105,110,115,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,32,97,110,100,32,104,111,119,32,116,101,114,109,115,32,97,114,101,32,111,114,100,101,114,101,100,46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,109,105,110,40,49,44,32,50,41,46,10,49>>]}]},{pre,[],[{code,[],[<<62,32,109,105,110,40,49,46,48,44,32,49,41,46,10,49,46,48>>]}]},{pre,[],[{code,[],[<<62,32,109,105,110,40,49,44,32,49,46,48,41,46,10,49>>]}]},{pre,[],[{code,[],[<<62,32,109,105,110,40,34,97,98,99,34,44,32,34,98,34,41,46,10,34,97,98,99,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,53,50>>,signature => [{attribute,3955,spec,{{min,2},[{type,3955,bounded_fun,[{type,3955,'fun',[{type,3955,product,[{var,3955,'Term1'},{var,3955,'Term2'}]},{var,3955,'Minimum'}]},[{type,3956,constraint,[{atom,3956,is_subtype},[{var,3956,'Term1'},{type,3956,term,[]}]]},{type,3957,constraint,[{atom,3957,is_subtype},[{var,3957,'Term2'},{type,3957,term,[]}]]},{type,3958,constraint,[{atom,3958,is_subtype},[{var,3958,'Minimum'},{type,3958,term,[]}]]}]]}]}}]}},{{function,module_loaded,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1388}],[<<109,111,100,117,108,101,95,108,111,97,100,101,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,108,111,97,100,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,73,116,32,100,111,101,115,32,110,111,116,32,97,116,116,101,109,112,116,32,116,111,32,108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,56,49>>,signature => [{attribute,1388,spec,{{module_loaded,1},[{type,1388,bounded_fun,[{type,1388,'fun',[{type,1388,product,[{var,1388,'Module'}]},{type,1388,boolean,[]}]},[{type,1389,constraint,[{atom,1389,is_subtype},[{var,1389,'Module'},{type,1389,module,[]}]]}]]}]}}]}},{{function,monitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1401}],[<<109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,111,110,105,116,111,114,95,112,111,114,116,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<109,111,110,105,116,111,114,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]}]},{p,[],[{a,[{id,<<109,111,110,105,116,111,114,95,109,101,115,115,97,103,101>>}],[]},<<83,101,110,100,115,32,97,32,109,111,110,105,116,111,114,32,114,101,113,117,101,115,116,32,111,102,32,116,121,112,101,32>>,{code,[],[<<84,121,112,101>>]},<<32,116,111,32,116,104,101,32,101,110,116,105,116,121,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<46,32,73,102,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,111,114,32,105,116,32,99,104,97,110,103,101,115,32,109,111,110,105,116,111,114,101,100,32,115,116,97,116,101,44,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,105,115,32,110,111,116,105,102,105,101,100,32,98,121,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,97,116,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<123,84,97,103,44,32,77,111,110,105,116,111,114,82,101,102,44,32,84,121,112,101,44,32,79,98,106,101,99,116,44,32,73,110,102,111,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,114,101,113,117,101,115,116,32,105,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,115,105,103,110,97,108,46,32,84,104,97,116,32,105,115,44,32,105,116,32,116,97,107,101,115,32,116,105,109,101,32,98,101,102,111,114,101,32,116,104,101,32,115,105,103,110,97,108,32,114,101,97,99,104,101,115,32,105,116,115,32,100,101,115,116,105,110,97,116,105,111,110,46>>]}]},{p,[],[{code,[],[<<84,121,112,101>>]},<<32,99,97,110,32,98,101,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,97,116,111,109,115,58,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<44,32>>,{code,[],[<<112,111,114,116>>]},<<32,111,114,32>>,{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]},<<46>>]},{p,[],[<<65,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116>>]},<<32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,111,110,108,121,32,111,110,99,101,44,32,97,102,116,101,114,32,116,104,97,116,32,105,116,32,105,115,32,114,101,109,111,118,101,100,32,102,114,111,109,32,98,111,116,104,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,46,32,77,111,110,105,116,111,114,115,32,97,114,101,32,102,105,114,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,116,101,114,109,105,110,97,116,101,115,44,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,97,116,32,116,104,101,32,109,111,109,101,110,116,32,111,102,32,99,114,101,97,116,105,111,110,44,32,111,114,32,105,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,105,116,32,105,115,32,108,111,115,116,46,32,73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,105,116,32,105,115,32,108,111,115,116,44,32,119,101,32,100,111,32,110,111,116,32,107,110,111,119,32,105,102,32,105,116,32,115,116,105,108,108,32,101,120,105,115,116,115,46,32,84,104,101,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,97,108,115,111,32,116,117,114,110,101,100,32,111,102,102,32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<100,101,109,111,110,105,116,111,114,47,49>>]},<<32,105,115,32,99,97,108,108,101,100,46>>]},{p,[],[<<65,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116>>]},<<32,109,111,110,105,116,111,114,32,98,121,32,110,97,109,101,32,114,101,115,111,108,118,101,115,32,116,104,101,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,116,111,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<32,111,110,108,121,32,111,110,99,101,32,97,116,32,116,104,101,32,109,111,109,101,110,116,32,111,102,32,109,111,110,105,116,111,114,32,105,110,115,116,97,110,116,105,97,116,105,111,110,44,32,108,97,116,101,114,32,99,104,97,110,103,101,115,32,116,111,32,116,104,101,32,110,97,109,101,32,114,101,103,105,115,116,114,97,116,105,111,110,32,119,105,108,108,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,101,120,105,115,116,105,110,103,32,109,111,110,105,116,111,114,46>>]},{p,[],[<<87,104,101,110,32,97,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116>>]},<<32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,44,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,104,97,116,32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<123,39,68,79,87,78,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,84,121,112,101,44,32,79,98,106,101,99,116,44,32,73,110,102,111,125>>]}]},{p,[],[<<73,110,32,116,104,101,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,97,110,100,32>>,{code,[],[<<84,121,112,101>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,44,32,97,110,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<79,98,106,101,99,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,44,32,119,104,105,99,104,32,116,114,105,103,103,101,114,101,100,32,116,104,101,32,101,118,101,110,116,46,32,87,104,101,110,32,109,111,110,105,116,111,114,105,110,103,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,44,32>>,{code,[],[<<79,98,106,101,99,116>>]},<<32,119,105,108,108,32,98,101,32,101,113,117,97,108,32,116,111,32,116,104,101,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<32,116,104,97,116,32,119,97,115,32,98,101,105,110,103,32,109,111,110,105,116,111,114,101,100,46,32,87,104,101,110,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,98,121,32,110,97,109,101,44,32>>,{code,[],[<<79,98,106,101,99,116>>]},<<32,119,105,108,108,32,104,97,118,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,82,101,103,105,115,116,101,114,101,100,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,119,104,105,99,104,32,104,97,115,32,98,101,101,110,32,117,115,101,100,32,119,105,116,104,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,99,97,108,108,32,97,110,100,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,108,111,99,97,108,32,111,114,32,114,101,109,111,116,101,32,110,111,100,101,32,110,97,109,101,32,40,102,111,114,32,112,111,114,116,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,110,97,109,101,44,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,97,108,119,97,121,115,32,108,111,99,97,108,32,110,111,100,101,32,110,97,109,101,41,46>>]}]},{dt,[],[{code,[],[<<73,110,102,111>>]}]},{dd,[],[{p,[],[<<69,105,116,104,101,114,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,44,32>>,{code,[],[<<110,111,112,114,111,99>>]},<<32,40,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,100,105,100,32,110,111,116,32,101,120,105,115,116,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,109,111,110,105,116,111,114,32,99,114,101,97,116,105,111,110,41,44,32,111,114,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,40,110,111,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,101,32,110,111,100,101,32,119,104,101,114,101,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,32,114,101,115,105,100,101,115,41,46>>]}]}]},{dl,[],[{dt,[],[<<77,111,110,105,116,111,114,105,110,103,32,97,32>>,{a,[{id,<<109,111,110,105,116,111,114,95,112,114,111,99,101,115,115>>}],[]},{code,[],[<<112,114,111,99,101,115,115>>]}]},{dd,[],[{p,[],[<<67,114,101,97,116,101,115,32,109,111,110,105,116,111,114,32,98,101,116,119,101,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,97,110,100,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,40,108,111,99,97,108,32,111,114,32,114,101,109,111,116,101,41,44,32,97,110,32,97,116,111,109,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,111,114,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,82,101,103,105,115,116,101,114,101,100,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,102,111,114,32,97,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,44,32,108,111,99,97,116,101,100,32,101,108,115,101,119,104,101,114,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,101,102,111,114,101,32,69,82,84,83,32,49,48,46,48,32,40,79,84,80,32,50,49,46,48,41,44,32,109,111,110,105,116,111,114,105,110,103,32,97,32,112,114,111,99,101,115,115,32,99,111,117,108,100,32,102,97,105,108,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,32,114,101,115,105,100,101,100,32,111,110,32,97,32,112,114,105,109,105,116,105,118,101,32,110,111,100,101,32,40,115,117,99,104,32,97,115,32,101,114,108,95,105,110,116,101,114,102,97,99,101,32,111,114,32,106,105,110,116,101,114,102,97,99,101,41,44,32,119,104,101,114,101,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,46>>]},{p,[],[<<78,111,119,44,32,115,117,99,104,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,119,105,108,108,32,105,110,115,116,101,97,100,32,115,117,99,99,101,101,100,32,97,110,100,32,97,32,109,111,110,105,116,111,114,32,105,115,32,99,114,101,97,116,101,100,46,32,66,117,116,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,111,110,108,121,32,115,117,112,101,114,118,105,115,101,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,46,32,84,104,97,116,32,105,115,44,32,97,32>>,{code,[],[<<123,39,68,79,87,78,39,44,32,95,44,32,112,114,111,99,101,115,115,44,32,95,44,32,110,111,99,111,110,110,101,99,116,105,111,110,125>>]},<<32,105,115,32,116,104,101,32,111,110,108,121,32,109,101,115,115,97,103,101,32,116,104,97,116,32,109,97,121,32,98,101,32,114,101,99,101,105,118,101,100,44,32,97,115,32,116,104,101,32,112,114,105,109,105,116,105,118,101,32,110,111,100,101,32,104,97,118,101,32,110,111,32,119,97,121,32,111,102,32,114,101,112,111,114,116,105,110,103,32,116,104,101,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,46>>]}]}]},{dt,[],[<<77,111,110,105,116,111,114,105,110,103,32,97,32>>,{a,[{id,<<109,111,110,105,116,111,114,95,112,111,114,116>>}],[]},{code,[],[<<112,111,114,116>>]}]},{dd,[],[{p,[],[<<67,114,101,97,116,101,115,32,109,111,110,105,116,111,114,32,98,101,116,119,101,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,97,110,100,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,97,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<32,40,111,110,108,121,32,108,111,99,97,108,41,44,32,97,110,32,97,116,111,109,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,111,114,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,82,101,103,105,115,116,101,114,101,100,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,102,111,114,32,97,32,114,101,103,105,115,116,101,114,101,100,32,112,111,114,116,44,32,108,111,99,97,116,101,100,32,111,110,32,116,104,105,115,32,110,111,100,101,46,32,78,111,116,101,44,32,116,104,97,116,32,97,116,116,101,109,112,116,32,116,111,32,109,111,110,105,116,111,114,32,97,32,114,101,109,111,116,101,32,112,111,114,116,32,119,105,108,108,32,114,101,115,117,108,116,32,105,110,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46>>]}]},{dt,[],[<<77,111,110,105,116,111,114,105,110,103,32,97,32>>,{a,[{id,<<109,111,110,105,116,111,114,95,116,105,109,101,95,111,102,102,115,101,116>>}],[]},{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]}]},{dd,[],[{p,[],[<<77,111,110,105,116,111,114,115,32,99,104,97,110,103,101,115,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,105,109,101,32,111,102,102,115,101,116>>]}]},<<32,98,101,116,119,101,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<46,32,79,110,101,32,118,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,101,120,105,115,116,115,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<116,105,109,101,95,111,102,102,115,101,116,32,84,121,112,101>>]},<<44,32,110,97,109,101,108,121,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<99,108,111,99,107,95,115,101,114,118,105,99,101>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<99,108,111,99,107,95,115,101,114,118,105,99,101>>]},<<32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,32,112,114,111,99,101,115,115,46,32,73,110,32,116,104,105,115,32,99,97,115,101,32,105,116,32,115,101,114,118,101,115,32,97,115,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,116,101,114,110,97,108,32,99,108,111,99,107,32,115,101,114,118,105,99,101,32,97,116,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,119,104,101,110,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,46,32,84,104,105,115,32,101,105,116,104,101,114,32,105,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,118,97,108,117,101,32,105,115,32,99,104,97,110,103,101,100,44,32,111,114,32,105,102,32,116,104,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,32,102,114,111,109,32,112,114,101,108,105,109,105,110,97,114,121,32,116,111,32,102,105,110,97,108,32,100,117,114,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,116,105,109,101,95,111,102,102,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,110,97,108,105,122,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116>>]},<<32,119,104,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46,32,87,104,101,110,32,97,32,99,104,97,110,103,101,32,102,114,111,109,32,112,114,101,108,105,109,105,110,97,114,121,32,116,111,32,102,105,110,97,108,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,109,97,100,101,44,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,111,110,99,101,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,118,97,108,117,101,32,119,97,115,32,99,104,97,110,103,101,100,32,111,114,32,110,111,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,32,119,104,101,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,101,116,101,99,116,115,32,116,104,97,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,104,97,115,32,99,104,97,110,103,101,100,46,32,84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,111,101,115,44,32,104,111,119,101,118,101,114,44,32,110,111,116,32,100,101,116,101,99,116,32,116,104,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,119,104,101,110,32,105,116,32,111,99,99,117,114,115,46,32,65,32,116,97,115,107,32,99,104,101,99,107,105,110,103,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,101,120,101,99,117,116,101,32,97,116,32,108,101,97,115,116,32,111,110,99,101,32,97,32,109,105,110,117,116,101,44,32,115,111,32,117,110,100,101,114,32,110,111,114,109,97,108,32,111,112,101,114,97,116,105,111,110,32,116,104,105,115,32,105,115,32,116,111,32,98,101,32,100,101,116,101,99,116,101,100,32,119,105,116,104,105,110,32,97,32,109,105,110,117,116,101,44,32,98,117,116,32,100,117,114,105,110,103,32,104,101,97,118,121,32,108,111,97,100,32,105,116,32,99,97,110,32,116,97,107,101,32,108,111,110,103,101,114,32,116,105,109,101,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,32,97,102,116,101,114,32,105,116,32,104,97,115,32,98,101,101,110,32,116,114,105,103,103,101,114,101,100,46,32,84,104,97,116,32,105,115,44,32,114,101,112,101,97,116,101,100,32,99,104,97,110,103,101,115,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,116,114,105,103,103,101,114,32,116,104,101,32,109,111,110,105,116,111,114,32,114,101,112,101,97,116,101,100,108,121,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,97,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,46,32,65,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<123,39,67,72,65,78,71,69,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,84,121,112,101,44,32,73,116,101,109,44,32,78,101,119,84,105,109,101,79,102,102,115,101,116,125>>]}]},{p,[],[<<119,104,101,114,101,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<44,32>>,{code,[],[<<84,121,112,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,100,101,115,99,114,105,98,101,100,32,97,98,111,118,101,44,32,97,110,100,32>>,{code,[],[<<78,101,119,84,105,109,101,79,102,102,115,101,116>>]},<<32,105,115,32,116,104,101,32,110,101,119,32,116,105,109,101,32,111,102,102,115,101,116,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,32,104,97,115,32,98,101,101,110,32,114,101,99,101,105,118,101,100,32,121,111,117,32,97,114,101,32,103,117,97,114,97,110,116,101,101,100,32,110,111,116,32,116,111,32,114,101,116,114,105,101,118,101,32,116,104,101,32,111,108,100,32,116,105,109,101,32,111,102,102,115,101,116,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]}]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,121,111,117,32,99,97,110,32,111,98,115,101,114,118,101,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]},<<32,98,101,102,111,114,101,32,121,111,117,32,103,101,116,32,116,104,101,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,46>>]}]}]},{p,[],[<<77,97,107,105,110,103,32,115,101,118,101,114,97,108,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,102,111,114,32,116,104,101,32,115,97,109,101,32>>,{code,[],[<<73,116,101,109>>]},<<32,97,110,100,47,111,114,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,114,114,111,114,59,32,105,116,32,114,101,115,117,108,116,115,32,105,110,32,97,115,32,109,97,110,121,32,105,110,100,101,112,101,110,100,101,110,116,32,109,111,110,105,116,111,114,105,110,103,32,105,110,115,116,97,110,99,101,115,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,101,120,116,101,110,100,101,100,46,32,84,104,97,116,32,105,115,44,32,111,116,104,101,114,32>>,{code,[],[<<84,121,112,101>>]},<<115,32,97,110,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,115,117,112,112,111,114,116,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,111,114,32,119,104,101,110,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,105,115,32,101,120,116,101,110,100,101,100,44,32,111,116,104,101,114,32,112,111,115,115,105,98,108,101,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<84,97,103>>]},<<44,32>>,{code,[],[<<79,98,106,101,99,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,110,32,116,104,101,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,105,110,116,114,111,100,117,99,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,57,54>>,signature => [{attribute,1401,spec,{{monitor,2},[{type,1402,bounded_fun,[{type,1402,'fun',[{type,1402,product,[{atom,1402,process},{user_type,1402,monitor_process_identifier,[]}]},{var,1402,'MonitorRef'}]},[{type,1403,constraint,[{atom,1403,is_subtype},[{var,1403,'MonitorRef'},{type,1403,reference,[]}]]}]]},{type,1404,bounded_fun,[{type,1404,'fun',[{type,1404,product,[{atom,1404,port},{user_type,1404,monitor_port_identifier,[]}]},{var,1404,'MonitorRef'}]},[{type,1405,constraint,[{atom,1405,is_subtype},[{var,1405,'MonitorRef'},{type,1405,reference,[]}]]}]]},{type,1406,bounded_fun,[{type,1406,'fun',[{type,1406,product,[{atom,1406,time_offset},{atom,1406,clock_service}]},{var,1406,'MonitorRef'}]},[{type,1407,constraint,[{atom,1407,is_subtype},[{var,1407,'MonitorRef'},{type,1407,reference,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48,44,79,84,80,32,49,57,46,48>>}},{{function,monitor,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1413}],[<<109,111,110,105,116,111,114,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,111,110,105,116,111,114,95,112,111,114,116,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<109,111,110,105,116,111,114,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]}]},{p,[],[<<80,114,111,118,105,100,101,115,32,97,110,32,111,112,116,105,111,110,32,108,105,115,116,32,102,111,114,32,109,111,100,105,102,105,99,97,116,105,111,110,32,111,102,32,109,111,110,105,116,111,114,105,110,103,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,112,114,111,118,105,100,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,50>>]}]},<<46,32,84,104,101,32>>,{code,[],[<<84,121,112,101>>]},<<32,97,110,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,97,114,103,117,109,101,110,116,115,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,109,101,97,110,105,110,103,32,97,115,32,119,104,101,110,32,112,97,115,115,101,100,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<46,32,67,117,114,114,101,110,116,108,121,32,97,118,97,105,108,97,98,108,101,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,108,105,97,115,44,32,85,110,97,108,105,97,115,79,112,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,109,111,110,105,116,111,114,32,114,101,102,101,114,101,110,99,101,32,119,105,108,108,32,97,108,115,111,32,98,101,99,111,109,101,32,97,110,32,97,108,105,97,115,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,97,108,105,97,115,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,108,105,97,115,47,48>>]}]},<<46,32,84,104,101,32>>,{code,[],[<<85,110,97,108,105,97,115,79,112,116>>]},<<32,100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,32,97,108,105,97,115,32,115,104,111,117,108,100,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,46>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,112,108,105,99,105,116,95,117,110,97,108,105,97,115>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,97,110,32,101,120,112,108,105,99,105,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,97,108,105,97,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,97,108,105,97,115,47,49>>]}]},<<32,119,105,108,108,32,100,101,97,99,116,105,118,97,116,101,32,116,104,101,32,97,108,105,97,115,46>>]}]},{dt,[],[{code,[],[<<100,101,109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,114,101,109,111,118,101,100,46,32,84,104,105,115,32,101,105,116,104,101,114,32,118,105,97,32,97,110,32,101,120,112,108,105,99,105,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,47,49>>]}]},<<32,111,114,32,119,104,101,110,32,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,32,97,115,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,100,101,108,105,118,101,114,101,100,32,100,117,101,32,116,111,32,116,104,101,32,109,111,110,105,116,111,114,46,32,84,104,101,32,97,108,105,97,115,32,99,97,110,32,97,108,115,111,32,115,116,105,108,108,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46>>]}]},{dt,[],[{code,[],[<<114,101,112,108,121,95,100,101,109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,114,101,109,111,118,101,100,32,40,115,101,101,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114>>]},<<32,111,112,116,105,111,110,32,97,98,111,118,101,41,32,111,114,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,115,101,110,116,32,118,105,97,32,116,104,101,32,97,108,105,97,115,32,105,115,32,114,101,99,101,105,118,101,100,46,32,87,104,101,110,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,105,115,32,114,101,99,101,105,118,101,100,32,118,105,97,32,116,104,101,32,97,108,105,97,115,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,97,108,115,111,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,46,32,84,104,105,115,32,105,115,32,117,115,101,102,117,108,32,105,110,32,99,108,105,101,110,116,47,115,101,114,118,101,114,32,115,99,101,110,97,114,105,111,115,32,119,104,101,110,32,97,32,99,108,105,101,110,116,32,109,111,110,105,116,111,114,115,32,116,104,101,32,115,101,114,118,101,114,32,97,110,100,32,119,105,108,108,32,103,101,116,32,116,104,101,32,114,101,112,108,121,32,118,105,97,32,116,104,101,32,97,108,105,97,115,46,32,79,110,99,101,32,116,104,101,32,114,101,115,112,111,110,115,101,32,105,115,32,114,101,99,101,105,118,101,100,32,98,111,116,104,32,116,104,101,32,97,108,105,97,115,32,97,110,100,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,114,101,115,112,111,110,115,101,32,105,115,32,97,32,114,101,112,108,121,32,111,114,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,46,32,84,104,101,32,97,108,105,97,115,32,99,97,110,32,97,108,115,111,32,115,116,105,108,108,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46,32,78,111,116,101,32,116,104,97,116,32,105,102,32,116,104,101,32,97,108,105,97,115,32,105,115,32,114,101,109,111,118,101,100,32,117,115,105,110,103,32,116,104,101,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<32,66,73,70,44,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,115,116,105,108,108,32,98,101,32,108,101,102,116,32,97,99,116,105,118,101,46>>]}]}]}]},{dt,[],[{code,[],[<<123,116,97,103,44,32,85,115,101,114,68,101,102,105,110,101,100,84,97,103,125>>]}]},{dd,[],[{p,[],[<<82,101,112,108,97,99,101,32,116,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<84,97,103>>]},<<32,119,105,116,104,32>>,{code,[],[<<85,115,101,114,68,101,102,105,110,101,100,84,97,103>>]},<<32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<109,111,110,105,116,111,114,32,109,101,115,115,97,103,101>>]},<<32,100,101,108,105,118,101,114,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32,109,111,110,105,116,111,114,105,110,103,32,97,32,112,114,111,99,101,115,115,44,32,116,104,101,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,116,97,103,32,105,110,32,116,104,101,32,100,111,119,110,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,114,101,112,108,97,99,101,100,32,98,121,32>>,{code,[],[<<85,115,101,114,68,101,102,105,110,101,100,84,97,103>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,48,55,50>>,signature => [{attribute,1413,spec,{{monitor,3},[{type,1414,bounded_fun,[{type,1414,'fun',[{type,1414,product,[{atom,1414,process},{user_type,1414,monitor_process_identifier,[]},{type,1414,list,[{user_type,1414,monitor_option,[]}]}]},{var,1414,'MonitorRef'}]},[{type,1415,constraint,[{atom,1415,is_subtype},[{var,1415,'MonitorRef'},{type,1415,reference,[]}]]}]]},{type,1416,bounded_fun,[{type,1416,'fun',[{type,1416,product,[{atom,1416,port},{user_type,1416,monitor_port_identifier,[]},{type,1416,list,[{user_type,1416,monitor_option,[]}]}]},{var,1416,'MonitorRef'}]},[{type,1417,constraint,[{atom,1417,is_subtype},[{var,1417,'MonitorRef'},{type,1417,reference,[]}]]}]]},{type,1418,bounded_fun,[{type,1418,'fun',[{type,1418,product,[{atom,1418,time_offset},{atom,1418,clock_service},{type,1418,list,[{user_type,1418,monitor_option,[]}]}]},{var,1418,'MonitorRef'}]},[{type,1419,constraint,[{atom,1419,is_subtype},[{var,1419,'MonitorRef'},{type,1419,reference,[]}]]}]]}]}}],since => <<79,84,80,32,64,79,84,80,45,49,54,55,49,56,64>>}},{{function,monitor_node,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1425}],[<<109,111,110,105,116,111,114,95,110,111,100,101,47,50>>],#{<<101,110>> => [{p,[],[<<77,111,110,105,116,111,114,32,116,104,101,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,108,97,103>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,110,46,32,73,102,32>>,{code,[],[<<70,108,97,103>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,102,102,46>>]},{p,[],[<<77,97,107,105,110,103,32,115,101,118,101,114,97,108,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,95,110,111,100,101,40,78,111,100,101,44,32,116,114,117,101,41>>]},<<32,102,111,114,32,116,104,101,32,115,97,109,101,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,114,114,111,114,59,32,105,116,32,114,101,115,117,108,116,115,32,105,110,32,97,115,32,109,97,110,121,32,105,110,100,101,112,101,110,100,101,110,116,32,109,111,110,105,116,111,114,105,110,103,32,105,110,115,116,97,110,99,101,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,102,97,105,108,115,32,111,114,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,110,111,100,101,100,111,119,110,44,32,78,111,100,101,125>>]},<<32,105,115,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,46,32,73,102,32,97,32,112,114,111,99,101,115,115,32,104,97,115,32,109,97,100,101,32,116,119,111,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,95,110,111,100,101,40,78,111,100,101,44,32,116,114,117,101,41>>]},<<32,97,110,100,32>>,{code,[],[<<78,111,100,101>>]},<<32,116,101,114,109,105,110,97,116,101,115,44,32,116,119,111,32>>,{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,109,101,115,115,97,103,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,101,114,101,32,105,115,32,110,111,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32>>,{code,[],[<<78,111,100,101>>]},<<44,32,97,110,32,97,116,116,101,109,112,116,32,105,115,32,109,97,100,101,32,116,111,32,99,114,101,97,116,101,32,111,110,101,46,32,73,102,32,116,104,105,115,32,102,97,105,108,115,44,32,97,32>>,{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,100,101,108,105,118,101,114,101,100,46>>]},{p,[],[<<78,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,104,114,111,117,103,104,32,104,105,100,100,101,110,32,99,111,110,110,101,99,116,105,111,110,115,32,99,97,110,32,98,101,32,109,111,110,105,116,111,114,101,100,32,97,115,32,97,110,121,32,111,116,104,101,114,32,110,111,100,101,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<110,111,116,97,108,105,118,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,49,53,52>>,signature => [{attribute,1425,spec,{{monitor_node,2},[{type,1425,bounded_fun,[{type,1425,'fun',[{type,1425,product,[{var,1425,'Node'},{var,1425,'Flag'}]},{atom,1425,true}]},[{type,1426,constraint,[{atom,1426,is_subtype},[{var,1426,'Node'},{type,1426,node,[]}]]},{type,1427,constraint,[{atom,1427,is_subtype},[{var,1427,'Flag'},{type,1427,boolean,[]}]]}]]}]}}]}},{{function,monitor_node,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1432}],[<<109,111,110,105,116,111,114,95,110,111,100,101,47,51>>],#{<<101,110>> => [{p,[],[<<66,101,104,97,118,101,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,95,110,111,100,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,95,110,111,100,101,47,50>>]}]},<<32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,97,108,108,111,119,115,32,97,110,32,101,120,116,114,97,32,111,112,116,105,111,110,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,44,32,110,97,109,101,108,121,32>>,{code,[],[<<97,108,108,111,119,95,112,97,115,115,105,118,101,95,99,111,110,110,101,99,116>>]},<<46,32,84,104,105,115,32,111,112,116,105,111,110,32,97,108,108,111,119,115,32,116,104,101,32,66,73,70,32,116,111,32,119,97,105,116,32,116,104,101,32,110,111,114,109,97,108,32,110,101,116,119,111,114,107,32,99,111,110,110,101,99,116,105,111,110,32,116,105,109,101,45,111,117,116,32,102,111,114,32,116,104,101,32>>,{em,[],[<<109,111,110,105,116,111,114,101,100,32,110,111,100,101>>]},<<32,116,111,32,99,111,110,110,101,99,116,32,105,116,115,101,108,102,44,32,101,118,101,110,32,105,102,32,105,116,32,99,97,110,110,111,116,32,98,101,32,97,99,116,105,118,101,108,121,32,99,111,110,110,101,99,116,101,100,32,102,114,111,109,32,116,104,105,115,32,110,111,100,101,32,40,116,104,97,116,32,105,115,44,32,105,116,32,105,115,32,98,108,111,99,107,101,100,41,46,32,84,104,101,32,115,116,97,116,101,32,119,104,101,114,101,32,116,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,99,97,110,32,111,110,108,121,32,98,101,32,97,99,104,105,101,118,101,100,32,98,121,32,117,115,105,110,103,32,116,104,101,32,75,101,114,110,101,108,32,111,112,116,105,111,110,32>>,{code,[],[<<100,105,115,116,95,97,117,116,111,95,99,111,110,110,101,99,116,32,111,110,99,101>>]},<<46,32,73,102,32,116,104,97,116,32,111,112,116,105,111,110,32,105,115,32,110,111,116,32,117,115,101,100,44,32,111,112,116,105,111,110,32>>,{code,[],[<<97,108,108,111,119,95,112,97,115,115,105,118,101,95,99,111,110,110,101,99,116>>]},<<32,104,97,115,32,110,111,32,101,102,102,101,99,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<97,108,108,111,119,95,112,97,115,115,105,118,101,95,99,111,110,110,101,99,116>>]},<<32,105,115,32,117,115,101,100,32,105,110,116,101,114,110,97,108,108,121,32,97,110,100,32,105,115,32,115,101,108,100,111,109,32,110,101,101,100,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,115,32,119,104,101,114,101,32,116,104,101,32,110,101,116,119,111,114,107,32,116,111,112,111,108,111,103,121,32,97,110,100,32,116,104,101,32,75,101,114,110,101,108,32,111,112,116,105,111,110,115,32,105,110,32,101,102,102,101,99,116,32,97,114,101,32,107,110,111,119,110,32,105,110,32,97,100,118,97,110,99,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,32,111,114,32,116,104,101,32,111,112,116,105,111,110,32,108,105,115,116,32,105,115,32,109,97,108,102,111,114,109,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,49,55,56>>,signature => [{attribute,1432,spec,{{erlang,monitor_node,3},[{type,1432,bounded_fun,[{type,1432,'fun',[{type,1432,product,[{var,1432,'Node'},{var,1432,'Flag'},{var,1432,'Options'}]},{atom,1432,true}]},[{type,1433,constraint,[{atom,1433,is_subtype},[{var,1433,'Node'},{type,1433,node,[]}]]},{type,1434,constraint,[{atom,1434,is_subtype},[{var,1434,'Flag'},{type,1434,boolean,[]}]]},{type,1435,constraint,[{atom,1435,is_subtype},[{var,1435,'Options'},{type,1435,list,[{var,1435,'Option'}]}]]},{type,1436,constraint,[{atom,1436,is_subtype},[{var,1436,'Option'},{atom,1436,allow_passive_connect}]]}]]}]}}]}},{{function,monotonic_time,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1534}],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46,32,84,104,105,115,32,105,115,32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,115,105,110,99,101,32,115,111,109,101,32,117,110,115,112,101,99,105,102,105,101,100,32,112,111,105,110,116,32,105,110,32,116,105,109,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,105,115,32,97,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,111,110,111,116,111,110,105,99,97,108,108,121,95,73,110,99,114,101,97,115,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103>>]},<<32,116,105,109,101,44,32,98,117,116,32>>,{em,[],[<<110,111,116>>]},<<32,97,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,116,114,105,99,116,108,121,95,77,111,110,111,116,111,110,105,99,97,108,108,121,95,73,110,99,114,101,97,115,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103>>]},<<32,116,105,109,101,46,32,84,104,97,116,32,105,115,44,32,99,111,110,115,101,99,117,116,105,118,101,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>]},<<32,99,97,110,32,112,114,111,100,117,99,101,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,46>>]},{p,[],[<<68,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,115,32,119,105,108,108,32,117,115,101,32,100,105,102,102,101,114,101,110,116,32,117,110,115,112,101,99,105,102,105,101,100,32,112,111,105,110,116,115,32,105,110,32,116,105,109,101,32,97,115,32,98,97,115,101,32,102,111,114,32,116,104,101,105,114,32,69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,99,108,111,99,107,115,46,32,84,104,97,116,32,105,115,44,32,105,116,32,105,115,32>>,{em,[],[<<112,111,105,110,116,108,101,115,115>>]},<<32,99,111,109,112,97,114,105,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,115,32,102,114,111,109,32,100,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,115,46,32,68,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,115,32,99,97,110,32,97,108,115,111,32,112,108,97,99,101,32,116,104,105,115,32,117,110,115,112,101,99,105,102,105,101,100,32,112,111,105,110,116,32,105,110,32,116,105,109,101,32,100,105,102,102,101,114,101,110,116,32,114,101,108,97,116,105,118,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,46,32,73,116,32,99,97,110,32,98,101,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,32,40,116,105,109,101,32,97,116,32,115,116,97,114,116,32,105,115,32,97,32,110,101,103,97,116,105,118,101,32,118,97,108,117,101,41,44,32,116,104,101,32,112,97,115,116,32,40,116,105,109,101,32,97,116,32,115,116,97,114,116,32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,118,97,108,117,101,41,44,32,111,114,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,32,40,116,105,109,101,32,97,116,32,115,116,97,114,116,32,105,115,32,122,101,114,111,41,46,32,84,104,101,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,97,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,116,97,114,116,95,116,105,109,101,41>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,48,52>>,signature => [{attribute,1534,spec,{{erlang,monotonic_time,0},[{type,1534,'fun',[{type,1534,product,[]},{type,1534,integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,monotonic_time,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1539}],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,99,111,110,118,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32>>,{code,[],[<<85,110,105,116>>]},<<32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{p,[],[<<83,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]}]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<32>>,{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,41>>]}]},{code,[],[<<44,32,110,97,116,105,118,101,44,32,85,110,105,116,41>>]},<<44,32,104,111,119,101,118,101,114,32,111,112,116,105,109,105,122,101,100,32,102,111,114,32,99,111,109,109,111,110,108,121,32,117,115,101,100,32>>,{code,[],[<<85,110,105,116>>]},<<115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,51,56>>,signature => [{attribute,1539,spec,{{erlang,monotonic_time,1},[{type,1539,bounded_fun,[{type,1539,'fun',[{type,1539,product,[{var,1539,'Unit'}]},{type,1539,integer,[]}]},[{type,1540,constraint,[{atom,1540,is_subtype},[{var,1540,'Unit'},{user_type,1540,time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,nif_error,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1442}],[<<110,105,102,95,101,114,114,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<87,111,114,107,115,32,101,120,97,99,116,108,121,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,47,49>>]}]},<<44,32,98,117,116,32,68,105,97,108,121,122,101,114,32,116,104,105,110,107,115,32,116,104,97,116,32,116,104,105,115,32,66,73,70,32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,97,114,98,105,116,114,97,114,121,32,116,101,114,109,46,32,87,104,101,110,32,117,115,101,100,32,105,110,32,97,32,115,116,117,98,32,102,117,110,99,116,105,111,110,32,102,111,114,32,97,32,78,73,70,32,116,111,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,32,119,104,101,110,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,32,105,115,32,110,111,116,32,108,111,97,100,101,100,44,32,68,105,97,108,121,122,101,114,32,100,111,101,115,32,110,111,116,32,103,101,110,101,114,97,116,101,32,102,97,108,115,101,32,119,97,114,110,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,53,54>>,signature => [{attribute,1442,spec,{{erlang,nif_error,1},[{type,1442,bounded_fun,[{type,1442,'fun',[{type,1442,product,[{var,1442,'Reason'}]},{type,1442,no_return,[]}]},[{type,1443,constraint,[{atom,1443,is_subtype},[{var,1443,'Reason'},{type,1443,term,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,nif_error,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1449}],[<<110,105,102,95,101,114,114,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<87,111,114,107,115,32,101,120,97,99,116,108,121,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,47,50>>]}]},<<44,32,98,117,116,32,68,105,97,108,121,122,101,114,32,116,104,105,110,107,115,32,116,104,97,116,32,116,104,105,115,32,66,73,70,32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,97,114,98,105,116,114,97,114,121,32,116,101,114,109,46,32,87,104,101,110,32,117,115,101,100,32,105,110,32,97,32,115,116,117,98,32,102,117,110,99,116,105,111,110,32,102,111,114,32,97,32,78,73,70,32,116,111,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,32,119,104,101,110,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,32,105,115,32,110,111,116,32,108,111,97,100,101,100,44,32,68,105,97,108,121,122,101,114,32,100,111,101,115,32,110,111,116,32,103,101,110,101,114,97,116,101,32,102,97,108,115,101,32,119,97,114,110,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,54,57>>,signature => [{attribute,1449,spec,{{erlang,nif_error,2},[{type,1449,bounded_fun,[{type,1449,'fun',[{type,1449,product,[{var,1449,'Reason'},{var,1449,'Args'}]},{type,1449,no_return,[]}]},[{type,1450,constraint,[{atom,1450,is_subtype},[{var,1450,'Reason'},{type,1450,term,[]}]]},{type,1451,constraint,[{atom,1451,is_subtype},[{var,1451,'Args'},{type,1451,list,[{type,1451,term,[]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,node,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1457}],[<<110,111,100,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,73,102,32,116,104,101,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<110,111,110,111,100,101,64,110,111,104,111,115,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,56,50>>,signature => [{attribute,1457,spec,{{node,0},[{type,1457,bounded_fun,[{type,1457,'fun',[{type,1457,product,[]},{var,1457,'Node'}]},[{type,1458,constraint,[{atom,1458,is_subtype},[{var,1458,'Node'},{type,1458,node,[]}]]}]]}]}}]}},{{function,node,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1464}],[<<110,111,100,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,111,100,101,32,119,104,101,114,101,32>>,{code,[],[<<65,114,103>>]},<<32,111,114,105,103,105,110,97,116,101,115,46,32>>,{code,[],[<<65,114,103>>]},<<32,99,97,110,32,98,101,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,97,32,114,101,102,101,114,101,110,99,101,44,32,111,114,32,97,32,112,111,114,116,46,32,73,102,32>>,{code,[],[<<65,114,103>>]},<<32,111,114,105,103,105,110,97,116,101,115,32,102,114,111,109,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,110,100,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<110,111,110,111,100,101,64,110,111,104,111,115,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,57,50>>,signature => [{attribute,1464,spec,{{node,1},[{type,1464,bounded_fun,[{type,1464,'fun',[{type,1464,product,[{var,1464,'Arg'}]},{var,1464,'Node'}]},[{type,1465,constraint,[{atom,1465,is_subtype},[{var,1465,'Arg'},{type,1465,union,[{type,1465,pid,[]},{type,1465,port,[]},{type,1465,reference,[]}]}]]},{type,1466,constraint,[{atom,1466,is_subtype},[{var,1466,'Node'},{type,1466,node,[]}]]}]]}]}}]}},{{function,nodes,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3424}],[<<110,111,100,101,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,108,108,32,110,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,32,116,104,114,111,117,103,104,32,110,111,114,109,97,108,32,99,111,110,110,101,99,116,105,111,110,115,32,40,116,104,97,116,32,105,115,44,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,105,115,116,114,105,98,117,116,101,100,35,104,105,100,100,101,110,45,110,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<104,105,100,100,101,110,32,110,111,100,101,115>>]},<<32,97,114,101,32,110,111,116,32,108,105,115,116,101,100,41,46,32,83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,110,111,100,101,115,95,118,105,115,105,98,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<110,111,100,101,115,40,118,105,115,105,98,108,101,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,51,48,53>>,signature => [{attribute,3424,spec,{{nodes,0},[{type,3424,bounded_fun,[{type,3424,'fun',[{type,3424,product,[]},{var,3424,'Nodes'}]},[{type,3425,constraint,[{atom,3425,is_subtype},[{var,3425,'Nodes'},{type,3425,list,[{type,3425,node,[]}]}]]}]]}]}}]}},{{function,nodes,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2308}],[<<110,111,100,101,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,110,111,100,101,115,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102,105,101,100,46,32,84,104,101,32,114,101,116,117,114,110,101,100,32,114,101,115,117,108,116,44,32,119,104,101,110,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,108,105,115,116,44,32,105,115,32,116,104,101,32,108,105,115,116,32,111,102,32,110,111,100,101,115,32,115,97,116,105,115,102,121,105,110,103,32,116,104,101,32,100,105,115,106,117,110,99,116,105,111,110,40,115,41,32,111,102,32,116,104,101,32,108,105,115,116,32,101,108,101,109,101,110,116,115,46>>]},{p,[],[{code,[],[<<78,111,100,101,84,121,112,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{a,[{id,<<110,111,100,101,115,95,118,105,115,105,98,108,101>>}],[]},{code,[],[<<118,105,115,105,98,108,101>>]}]},{dd,[],[{p,[],[<<78,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,32,116,104,114,111,117,103,104,32,110,111,114,109,97,108,32,99,111,110,110,101,99,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<104,105,100,100,101,110>>]}]},{dd,[],[{p,[],[<<78,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,32,116,104,114,111,117,103,104,32,104,105,100,100,101,110,32,99,111,110,110,101,99,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<99,111,110,110,101,99,116,101,100>>]}]},{dd,[],[{p,[],[<<65,108,108,32,110,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,46>>]}]},{dt,[],[{code,[],[<<116,104,105,115>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,110,111,100,101,46>>]}]},{dt,[],[{code,[],[<<107,110,111,119,110>>]}]},{dd,[],[{p,[],[<<78,111,100,101,115,32,116,104,97,116,32,97,114,101,32,107,110,111,119,110,32,116,111,32,116,104,105,115,32,110,111,100,101,46,32,84,104,97,116,32,105,115,44,32,99,111,110,110,101,99,116,101,100,32,110,111,100,101,115,32,97,110,100,32,110,111,100,101,115,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,44,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,44,32,97,110,100,32,114,101,102,101,114,101,110,99,101,115,32,108,111,99,97,116,101,100,32,111,110,32,116,104,105,115,32,110,111,100,101,46,32,84,104,101,32,115,101,116,32,111,102,32,107,110,111,119,110,32,110,111,100,101,115,32,105,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,99,97,110,32,98,101,32,100,101,108,97,121,101,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99,41>>]}]},<<46>>]}]}]},{p,[],[<<83,111,109,101,32,101,113,117,97,108,105,116,105,101,115,58,32>>,{code,[],[<<91,110,111,100,101,40,41,93,32,61,32,110,111,100,101,115,40,116,104,105,115,41>>]},<<44,32>>,{code,[],[<<110,111,100,101,115,40,99,111,110,110,101,99,116,101,100,41,32,61,32,110,111,100,101,115,40,91,118,105,115,105,98,108,101,44,32,104,105,100,100,101,110,93,41>>]},<<44,32,97,110,100,32>>,{code,[],[<<110,111,100,101,115,40,41,32,61,32,110,111,100,101,115,40,118,105,115,105,98,108,101,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,51,49,55>>,signature => [{attribute,2308,spec,{{nodes,1},[{type,2308,bounded_fun,[{type,2308,'fun',[{type,2308,product,[{var,2308,'Arg'}]},{var,2308,'Nodes'}]},[{type,2309,constraint,[{atom,2309,is_subtype},[{var,2309,'Arg'},{type,2309,union,[{var,2309,'NodeType'},{type,2309,list,[{var,2309,'NodeType'}]}]}]]},{type,2310,constraint,[{atom,2310,is_subtype},[{var,2310,'NodeType'},{type,2310,union,[{atom,2310,visible},{atom,2310,hidden},{atom,2310,connected},{atom,2310,this},{atom,2310,known}]}]]},{type,2311,constraint,[{atom,2311,is_subtype},[{var,2311,'Nodes'},{type,2311,list,[{type,2311,node,[]}]}]]}]]}]}}]}},{{function,now,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1471}],[<<110,111,119,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<116,105,109,101,115,116,97,109,112>>}],[]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[{em,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,68,111,32,110,111,116,32,117,115,101,32,105,116,46>>]}]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<84,105,109,101,32,97,110,100,32,84,105,109,101,32,67,111,114,114,101,99,116,105,111,110>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46,32,83,112,101,99,105,102,105,99,97,108,108,121,44,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,68,111,115,95,97,110,100,95,68,111,110,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<68,111,115,32,97,110,100,32,68,111,110,116,39,115>>]},<<32,100,101,115,99,114,105,98,101,115,32,119,104,97,116,32,116,111,32,117,115,101,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,47,48>>]},<<46>>]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,77,101,103,97,83,101,99,115,44,32,83,101,99,115,44,32,77,105,99,114,111,83,101,99,115,125>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,101,108,97,112,115,101,100,32,116,105,109,101,32,115,105,110,99,101,32,48,48,58,48,48,32,71,77,84,44,32,74,97,110,117,97,114,121,32,49,44,32,49,57,55,48,32,40,122,101,114,111,32,104,111,117,114,41,44,32,105,102,32,112,114,111,118,105,100,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32,115,111,109,101,32,111,116,104,101,114,32,112,111,105,110,116,32,105,110,32,116,105,109,101,32,105,115,32,99,104,111,115,101,110,46,32,73,116,32,105,115,32,97,108,115,111,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,115,32,116,111,32,116,104,105,115,32,66,73,70,32,114,101,116,117,114,110,32,99,111,110,116,105,110,117,111,117,115,108,121,32,105,110,99,114,101,97,115,105,110,103,32,118,97,108,117,101,115,46,32,72,101,110,99,101,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,102,114,111,109,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,47,48>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,103,101,110,101,114,97,116,101,32,117,110,105,113,117,101,32,116,105,109,101,32,115,116,97,109,112,115,46,32,73,102,32,105,116,32,105,115,32,99,97,108,108,101,100,32,105,110,32,97,32,116,105,103,104,116,32,108,111,111,112,32,111,110,32,97,32,102,97,115,116,32,109,97,99,104,105,110,101,44,32,116,104,101,32,116,105,109,101,32,111,102,32,116,104,101,32,110,111,100,101,32,99,97,110,32,98,101,99,111,109,101,32,115,107,101,119,101,100,46>>]},{p,[],[<<67,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,116,111,32,99,104,101,99,107,32,116,104,101,32,108,111,99,97,108,32,116,105,109,101,32,111,102,32,100,97,121,32,105,102,32,116,104,101,32,116,105,109,101,45,122,111,110,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,102,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,32,105,115,32,112,114,111,112,101,114,108,121,32,99,111,110,102,105,103,117,114,101,100,46>>]}]},#{deprecated => <<101,114,108,97,110,103,58,110,111,119,47,48,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32,115,101,101,32,116,104,101,32,34,84,105,109,101,32,97,110,100,32,84,105,109,101,32,67,111,114,114,101,99,116,105,111,110,32,105,110,32,69,114,108,97,110,103,34,32,99,104,97,112,116,101,114,32,111,102,32,116,104,101,32,69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110>>,edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,51,54,48>>,signature => [{attribute,1471,spec,{{now,0},[{type,1471,bounded_fun,[{type,1471,'fun',[{type,1471,product,[]},{var,1471,'Timestamp'}]},[{type,1472,constraint,[{atom,1472,is_subtype},[{var,1472,'Timestamp'},{user_type,1472,timestamp,[]}]]}]]}]}}]}},{{function,open_port,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2315}],[<<111,112,101,110,95,112,111,114,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,111,112,101,110,105,110,103,32,97,32,110,101,119,32,69,114,108,97,110,103,32,112,111,114,116,46,32,65,32,112,111,114,116,32,99,97,110,32,98,101,32,115,101,101,110,32,97,115,32,97,110,32,101,120,116,101,114,110,97,108,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<84,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,115,112,101,99,105,102,101,100,32,105,110,32>>,{code,[],[<<99,100>>]},<<44,32>>,{code,[],[<<101,110,118>>]},<<44,32>>,{code,[],[<<97,114,103,115>>]},<<44,32,97,110,100,32>>,{code,[],[<<97,114,103,48>>]},<<32,97,114,101,32,115,117,98,106,101,99,116,32,116,111,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,116,114,97,110,115,108,97,116,105,111,110,32,105,102,32,116,104,101,32,115,121,115,116,101,109,32,105,115,32,114,117,110,110,105,110,103,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,46,32,84,111,32,97,118,111,105,100,32,116,114,97,110,115,108,97,116,105,111,110,32,111,114,32,116,111,32,102,111,114,99,101,44,32,102,111,114,32,101,120,97,109,112,108,101,32,85,84,70,45,56,44,32,115,117,112,112,108,121,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,97,110,100,47,111,114,32,97,114,103,117,109,101,110,116,115,32,97,115,32,97,32,98,105,110,97,114,121,32,105,110,32,116,104,101,32,99,111,114,114,101,99,116,32,101,110,99,111,100,105,110,103,46,32,70,111,114,32,100,101,116,97,105,108,115,44,32,115,101,101,32,116,104,101,32,109,111,100,117,108,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,102,105,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,105,108,101,40,51,41>>]}]},<<44,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,105,108,101,58,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>]}]},<<32,105,110,32,75,101,114,110,101,108,44,32,97,110,100,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,100,108,105,98,58,117,110,105,99,111,100,101,95,117,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<85,115,105,110,103,32,85,110,105,99,111,100,101,32,105,110,32,69,114,108,97,110,103>>]}]},<<32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,110,97,109,101,32,40,105,102,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,108,105,115,116,41,32,99,97,110,32,111,110,108,121,32,98,101,32,62,32,50,53,53,32,105,102,32,116,104,101,32,69,114,108,97,110,103,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,105,115,32,115,116,97,114,116,101,100,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,116,114,97,110,115,108,97,116,105,111,110,32,109,111,100,101,46,32,79,116,104,101,114,119,105,115,101,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,105,115,32,108,105,109,105,116,101,100,32,116,111,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,46>>]}]},{p,[],[{code,[],[<<80,111,114,116,78,97,109,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,115,32,97,110,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,32,116,111,32,98,101,32,114,117,110,46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,114,117,110,115,32,111,117,116,115,105,100,101,32,116,104,101,32,69,114,108,97,110,103,32,119,111,114,107,32,115,112,97,99,101,32,117,110,108,101,115,115,32,97,110,32,69,114,108,97,110,103,32,100,114,105,118,101,114,32,119,105,116,104,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32,102,111,117,110,100,44,32,116,104,97,116,32,100,114,105,118,101,114,32,105,115,32,115,116,97,114,116,101,100,46,32,65,32,100,114,105,118,101,114,32,114,117,110,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,119,111,114,107,32,115,112,97,99,101,44,32,119,104,105,99,104,32,109,101,97,110,115,32,116,104,97,116,32,105,116,32,105,115,32,108,105,110,107,101,100,32,119,105,116,104,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<70,111,114,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,115,44,32>>,{code,[],[<<80,65,84,72>>]},<<32,105,115,32,115,101,97,114,99,104,101,100,32,40,111,114,32,97,110,32,101,113,117,105,118,97,108,101,110,116,32,109,101,116,104,111,100,32,105,115,32,117,115,101,100,32,116,111,32,102,105,110,100,32,112,114,111,103,114,97,109,115,44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,79,83,41,46,32,84,104,105,115,32,105,115,32,100,111,110,101,32,98,121,32,105,110,118,111,107,105,110,103,32,116,104,101,32,115,104,101,108,108,32,111,110,32,99,101,114,116,97,105,110,32,112,108,97,116,102,111,114,109,115,46,32,84,104,101,32,102,105,114,115,116,32,115,112,97,99,101,45,115,101,112,97,114,97,116,101,100,32,116,111,107,101,110,32,111,102,32,116,104,101,32,99,111,109,109,97,110,100,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,40,111,114,32,100,114,105,118,101,114,41,46,32,84,104,105,115,32,40,97,109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,41,32,109,97,107,101,115,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,115,117,105,116,97,98,108,101,32,102,111,114,32,114,117,110,110,105,110,103,32,112,114,111,103,114,97,109,115,32,119,105,116,104,32,115,112,97,99,101,115,32,105,110,32,102,105,108,101,110,97,109,101,115,32,111,114,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,46,32,73,102,32,115,112,97,99,101,115,32,105,110,32,101,120,101,99,117,116,97,98,108,101,32,102,105,108,101,110,97,109,101,115,32,97,114,101,32,100,101,115,105,114,101,100,44,32,117,115,101,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,67,111,109,109,97,110,100,125>>]},<<32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,115,112,97,119,110,95,100,114,105,118,101,114,44,32,67,111,109,109,97,110,100,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<44,32,98,117,116,32,100,101,109,97,110,100,115,32,116,104,101,32,102,105,114,115,116,32,40,115,112,97,99,101,45,115,101,112,97,114,97,116,101,100,41,32,116,111,107,101,110,32,111,102,32,116,104,101,32,99,111,109,109,97,110,100,32,116,111,32,98,101,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,108,111,97,100,101,100,32,100,114,105,118,101,114,46,32,73,102,32,110,111,32,100,114,105,118,101,114,32,119,105,116,104,32,116,104,97,116,32,110,97,109,101,32,105,115,32,108,111,97,100,101,100,44,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<123,115,112,97,119,110,44,32,70,105,108,101,78,97,109,101,125>>]},<<44,32,98,117,116,32,111,110,108,121,32,114,117,110,115,32,101,120,116,101,114,110,97,108,32,101,120,101,99,117,116,97,98,108,101,115,46,32>>,{code,[],[<<70,105,108,101,78,97,109,101>>]},<<32,105,110,32,105,116,115,32,119,104,111,108,101,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,44,32,105,110,99,108,117,100,105,110,103,32,97,110,121,32,115,112,97,99,101,115,46,32,73,102,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,116,111,32,98,101,32,112,97,115,115,101,100,44,32,116,104,101,32>>,{code,[],[<<80,111,114,116,83,101,116,116,105,110,103,115>>]},<<32>>,{code,[],[<<97,114,103,115>>]},<<32,97,110,100,32>>,{code,[],[<<97,114,103,48>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,115,104,101,108,108,32,105,115,32,117,115,117,97,108,108,121,32,110,111,116,32,105,110,118,111,107,101,100,32,116,111,32,115,116,97,114,116,32,116,104,101,32,112,114,111,103,114,97,109,44,32,105,116,32,105,115,32,101,120,101,99,117,116,101,100,32,100,105,114,101,99,116,108,121,46,32>>,{code,[],[<<80,65,84,72>>]},<<32,40,111,114,32,101,113,117,105,118,97,108,101,110,116,41,32,105,115,32,110,111,116,32,115,101,97,114,99,104,101,100,46,32,84,111,32,102,105,110,100,32,97,32,112,114,111,103,114,97,109,32,105,110,32>>,{code,[],[<<80,65,84,72>>]},<<32,116,111,32,101,120,101,99,117,116,101,44,32,117,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,102,105,110,100,95,101,120,101,99,117,116,97,98,108,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,102,105,110,100,95,101,120,101,99,117,116,97,98,108,101,47,49>>]}]},<<46>>]},{p,[],[<<79,110,108,121,32,105,102,32,97,32,115,104,101,108,108,32,115,99,114,105,112,116,32,111,114,32>>,{code,[],[<<46,98,97,116>>]},<<32,102,105,108,101,32,105,115,32,101,120,101,99,117,116,101,100,44,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,99,111,109,109,97,110,100,32,105,110,116,101,114,112,114,101,116,101,114,32,105,115,32,105,110,118,111,107,101,100,32,105,109,112,108,105,99,105,116,108,121,44,32,98,117,116,32,116,104,101,114,101,32,105,115,32,115,116,105,108,108,32,110,111,32,99,111,109,109,97,110,100,45,97,114,103,117,109,101,110,116,32,101,120,112,97,110,115,105,111,110,32,111,114,32,105,109,112,108,105,99,105,116,32>>,{code,[],[<<80,65,84,72>>]},<<32,115,101,97,114,99,104,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,105,108,101,78,97,109,101>>]},<<32,99,97,110,110,111,116,32,98,101,32,114,117,110,44,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,105,115,32,114,97,105,115,101,100,44,32,119,105,116,104,32,116,104,101,32,80,79,83,73,88,32,101,114,114,111,114,32,99,111,100,101,32,97,115,32,116,104,101,32,114,101,97,115,111,110,46,32,84,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,79,83,115,46,32,84,121,112,105,99,97,108,108,121,32,116,104,101,32,101,114,114,111,114,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,97,110,32,97,116,116,101,109,112,116,32,105,115,32,109,97,100,101,32,116,111,32,114,117,110,32,97,32,112,114,111,103,114,97,109,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,117,110,100,32,97,110,100,32>>,{code,[],[<<101,97,99,99,101,115>>]},<<32,105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,105,108,101,32,105,115,32,110,111,116,32,101,120,101,99,117,116,97,98,108,101,46>>]}]},{dt,[],[{code,[],[<<123,102,100,44,32,73,110,44,32,79,117,116,125>>]}]},{dd,[],[{p,[],[<<65,108,108,111,119,115,32,97,110,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,116,111,32,97,99,99,101,115,115,32,97,110,121,32,99,117,114,114,101,110,116,108,121,32,111,112,101,110,101,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,117,115,101,100,32,98,121,32,69,114,108,97,110,103,46,32,84,104,101,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32>>,{code,[],[<<73,110>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,44,32,97,110,100,32,116,104,101,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32>>,{code,[],[<<79,117,116>>]},<<32,102,111,114,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,46,32,73,116,32,105,115,32,111,110,108,121,32,117,115,101,100,32,102,111,114,32,118,97,114,105,111,117,115,32,115,101,114,118,101,114,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,79,83,32,40>>,{code,[],[<<115,104,101,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<117,115,101,114>>]},<<41,46,32,72,101,110,99,101,44,32,105,116,115,32,117,115,101,32,105,115,32,108,105,109,105,116,101,100,46>>]}]}]},{p,[],[{code,[],[<<80,111,114,116,83,101,116,116,105,110,103,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,115,101,116,116,105,110,103,115,32,102,111,114,32,116,104,101,32,112,111,114,116,46,32,84,104,101,32,118,97,108,105,100,32,115,101,116,116,105,110,103,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,97,99,107,101,116,44,32,78,125>>]}]},{dd,[],[{p,[],[<<77,101,115,115,97,103,101,115,32,97,114,101,32,112,114,101,99,101,100,101,100,32,98,121,32,116,104,101,105,114,32,108,101,110,103,116,104,44,32,115,101,110,116,32,105,110,32>>,{code,[],[<<78>>]},<<32,98,121,116,101,115,44,32,119,105,116,104,32,116,104,101,32,109,111,115,116,32,115,105,103,110,105,102,105,99,97,110,116,32,98,121,116,101,32,102,105,114,115,116,46,32,84,104,101,32,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<78>>]},<<32,97,114,101,32,49,44,32,50,44,32,97,110,100,32,52,46>>]}]},{dt,[],[{code,[],[<<115,116,114,101,97,109>>]}]},{dd,[],[{p,[],[<<79,117,116,112,117,116,32,109,101,115,115,97,103,101,115,32,97,114,101,32,115,101,110,116,32,119,105,116,104,111,117,116,32,112,97,99,107,101,116,32,108,101,110,103,116,104,115,46,32,65,32,117,115,101,114,45,100,101,102,105,110,101,100,32,112,114,111,116,111,99,111,108,32,109,117,115,116,32,98,101,32,117,115,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,101,120,116,101,114,110,97,108,32,111,98,106,101,99,116,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,101,44,32,76,125>>]}]},{dd,[],[{p,[],[<<77,101,115,115,97,103,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,111,110,32,97,32,112,101,114,32,108,105,110,101,32,98,97,115,105,115,46,32,69,97,99,104,32,108,105,110,101,32,40,100,101,108,105,109,105,116,101,100,32,98,121,32,116,104,101,32,79,83,45,100,101,112,101,110,100,101,110,116,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,41,32,105,115,32,100,101,108,105,118,101,114,101,100,32,105,110,32,97,32,115,105,110,103,108,101,32,109,101,115,115,97,103,101,46,32,84,104,101,32,109,101,115,115,97,103,101,32,100,97,116,97,32,102,111,114,109,97,116,32,105,115,32>>,{code,[],[<<123,70,108,97,103,44,32,76,105,110,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,108,97,103>>]},<<32,105,115,32>>,{code,[],[<<101,111,108>>]},<<32,111,114,32>>,{code,[],[<<110,111,101,111,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<76,105,110,101>>]},<<32,105,115,32,116,104,101,32,100,97,116,97,32,100,101,108,105,118,101,114,101,100,32,40,119,105,116,104,111,117,116,32,116,104,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,41,46>>]},{p,[],[{code,[],[<<76>>]},<<32,115,112,101,99,105,102,105,101,115,32,116,104,101,32,109,97,120,105,109,117,109,32,108,105,110,101,32,108,101,110,103,116,104,32,105,110,32,98,121,116,101,115,46,32,76,105,110,101,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,105,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,105,110,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,109,101,115,115,97,103,101,44,32,119,105,116,104,32>>,{code,[],[<<70,108,97,103>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<110,111,101,111,108>>]},<<32,102,111,114,32,97,108,108,32,98,117,116,32,116,104,101,32,108,97,115,116,32,109,101,115,115,97,103,101,46,32,73,102,32,101,110,100,32,111,102,32,102,105,108,101,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,32,97,110,121,119,104,101,114,101,32,101,108,115,101,32,116,104,97,110,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,105,110,103,32,97,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,44,32,116,104,101,32,108,97,115,116,32,108,105,110,101,32,105,115,32,97,108,115,111,32,100,101,108,105,118,101,114,101,100,32,119,105,116,104,32>>,{code,[],[<<70,108,97,103>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<110,111,101,111,108>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,108,105,110,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,119,105,116,104,32>>,{code,[],[<<70,108,97,103>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<101,111,108>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<123,112,97,99,107,101,116,44,32,78,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,108,105,110,101,44,32,76,125>>]},<<32,115,101,116,116,105,110,103,115,32,97,114,101,32,109,117,116,117,97,108,108,121,32,101,120,99,108,117,115,105,118,101,46>>]}]},{dt,[],[{code,[],[<<123,99,100,44,32,68,105,114,125>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46,32,84,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,32,115,116,97,114,116,115,32,117,115,105,110,103,32>>,{code,[],[<<68,105,114>>]},<<32,97,115,32,105,116,115,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,46,32>>,{code,[],[<<68,105,114>>]},<<32,109,117,115,116,32,98,101,32,97,32,115,116,114,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,101,110,118,44,32,69,110,118,125>>]}]},{dd,[],[{p,[],[<<84,121,112,101,115,58>>,{br,[],[]},<<194,160,194,160>>,{code,[],[<<78,97,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,111,115,35,101,110,118,95,118,97,114,95,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<111,115,58,101,110,118,95,118,97,114,95,110,97,109,101,40,41>>]}]},{br,[],[]},<<194,160,194,160>>,{code,[],[<<86,97,108,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,111,115,35,101,110,118,95,118,97,114,95,118,97,108,117,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<111,115,58,101,110,118,95,118,97,114,95,118,97,108,117,101,40,41>>]}]},{code,[],[<<32,124,32,102,97,108,115,101>>]},{br,[],[]},<<194,160,194,160>>,{code,[],[<<69,110,118,32,61,32,91,123,78,97,109,101,44,32,86,97,108,125,93>>]}]},{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<44,32,97,110,100,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46,32,84,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,111,102,32,116,104,101,32,115,116,97,114,116,101,100,32,112,114,111,99,101,115,115,32,105,115,32,101,120,116,101,110,100,101,100,32,117,115,105,110,103,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32>>,{code,[],[<<69,110,118>>]},<<46>>]},{p,[],[{code,[],[<<69,110,118>>]},<<32,105,115,32,116,111,32,98,101,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32>>,{code,[],[<<123,78,97,109,101,44,32,86,97,108,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,97,110,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,44,32,97,110,100,32>>,{code,[],[<<86,97,108>>]},<<32,105,115,32,116,104,101,32,118,97,108,117,101,32,105,116,32,105,115,32,116,111,32,104,97,118,101,32,105,110,32,116,104,101,32,115,112,97,119,110,101,100,32,112,111,114,116,32,112,114,111,99,101,115,115,46,32,66,111,116,104,32>>,{code,[],[<<78,97,109,101>>]},<<32,97,110,100,32>>,{code,[],[<<86,97,108>>]},<<32,109,117,115,116,32,98,101,32,115,116,114,105,110,103,115,46,32,84,104,101,32,111,110,101,32,101,120,99,101,112,116,105,111,110,32,105,115,32>>,{code,[],[<<86,97,108>>]},<<32,98,101,105,110,103,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,40,105,110,32,97,110,97,108,111,103,121,32,119,105,116,104,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,103,101,116,101,110,118,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,103,101,116,101,110,118,47,49>>]}]},<<44,32,119,104,105,99,104,32,114,101,109,111,118,101,115,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,101,110,99,111,100,105,110,103,32,114,101,113,117,105,114,101,109,101,110,116,115,44,32,115,101,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,121,112,101,115,32,102,111,114,32>>,{code,[],[<<78,97,109,101>>]},<<32,97,110,100,32>>,{code,[],[<<86,97,108>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,97,114,103,115,44,32,91,32,115,116,114,105,110,103,40,41,32,124,32,98,105,110,97,114,121,40,41,32,93,125>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<32,97,110,100,32,115,112,101,99,105,102,105,101,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,46,32,69,97,99,104,32,97,114,103,117,109,101,110,116,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,115,101,112,97,114,97,116,101,32,115,116,114,105,110,103,32,97,110,100,32,40,111,110,32,85,110,105,120,41,32,101,118,101,110,116,117,97,108,108,121,32,101,110,100,115,32,117,112,32,97,115,32,111,110,101,32,101,108,101,109,101,110,116,32,101,97,99,104,32,105,110,32,116,104,101,32,97,114,103,117,109,101,110,116,32,118,101,99,116,111,114,46,32,79,110,32,111,116,104,101,114,32,112,108,97,116,102,111,114,109,115,44,32,97,32,115,105,109,105,108,97,114,32,98,101,104,97,118,105,111,114,32,105,115,32,109,105,109,105,99,107,101,100,46>>]},{p,[],[<<84,104,101,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,110,111,116,32,101,120,112,97,110,100,101,100,32,98,121,32,116,104,101,32,115,104,101,108,108,32,98,101,102,111,114,101,32,116,104,101,121,32,97,114,101,32,115,117,112,112,108,105,101,100,32,116,111,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,46,32,77,111,115,116,32,110,111,116,97,98,108,121,32,116,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,102,105,108,101,32,119,105,108,100,99,97,114,100,32,101,120,112,97,110,115,105,111,110,32,100,111,101,115,32,110,111,116,32,111,99,99,117,114,46,32,84,111,32,101,120,112,97,110,100,32,119,105,108,100,99,97,114,100,115,32,102,111,114,32,116,104,101,32,97,114,103,117,109,101,110,116,115,44,32,117,115,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,102,105,108,101,108,105,98,35,119,105,108,100,99,97,114,100,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,105,108,101,108,105,98,58,119,105,108,100,99,97,114,100,47,49>>]}]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,101,118,101,110,32,105,102,32,116,104,101,32,112,114,111,103,114,97,109,32,105,115,32,97,32,85,110,105,120,32,115,104,101,108,108,32,115,99,114,105,112,116,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,116,104,101,32,115,104,101,108,108,32,117,108,116,105,109,97,116,101,108,121,32,105,115,32,105,110,118,111,107,101,100,44,32,119,105,108,100,99,97,114,100,32,101,120,112,97,110,115,105,111,110,32,100,111,101,115,32,110,111,116,32,111,99,99,117,114,44,32,97,110,100,32,116,104,101,32,115,99,114,105,112,116,32,105,115,32,112,114,111,118,105,100,101,100,32,119,105,116,104,32,116,104,101,32,117,110,116,111,117,99,104,101,100,32,97,114,103,117,109,101,110,116,115,46,32,79,110,32,87,105,110,100,111,119,115,44,32,119,105,108,100,99,97,114,100,32,101,120,112,97,110,115,105,111,110,32,105,115,32,97,108,119,97,121,115,32,117,112,32,116,111,32,116,104,101,32,112,114,111,103,114,97,109,32,105,116,115,101,108,102,44,32,116,104,101,114,101,102,111,114,101,32,116,104,105,115,32,105,115,32,110,111,116,32,97,110,32,105,115,115,117,101,46>>]},{p,[],[<<84,104,101,32,101,120,101,99,117,116,97,98,108,101,32,110,97,109,101,32,40,97,108,115,111,32,107,110,111,119,110,32,97,115,32>>,{code,[],[<<97,114,103,118,91,48,93>>]},<<41,32,105,115,32,110,111,116,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,105,115,32,108,105,115,116,46,32,84,104,101,32,112,114,111,112,101,114,32,101,120,101,99,117,116,97,98,108,101,32,110,97,109,101,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,117,115,101,100,32,97,115,32>>,{code,[],[<<97,114,103,118,91,48,93>>]},<<44,32,119,104,101,114,101,32,97,112,112,108,105,99,97,98,108,101,46>>]},{p,[],[<<73,102,32,121,111,117,32,101,120,112,108,105,99,105,116,108,121,32,119,97,110,116,32,116,111,32,115,101,116,32,116,104,101,32,112,114,111,103,114,97,109,32,110,97,109,101,32,105,110,32,116,104,101,32,97,114,103,117,109,101,110,116,32,118,101,99,116,111,114,44,32,111,112,116,105,111,110,32>>,{code,[],[<<97,114,103,48>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,97,114,103,48,44,32,115,116,114,105,110,103,40,41,32,124,32,98,105,110,97,114,121,40,41,125>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<32,97,110,100,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,115,32,116,104,101,32,112,114,111,103,114,97,109,32,110,97,109,101,32,97,114,103,117,109,101,110,116,32,119,104,101,110,32,114,117,110,110,105,110,103,32,97,110,32,101,120,101,99,117,116,97,98,108,101,46,32,84,104,105,115,32,99,97,110,32,105,110,32,115,111,109,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,44,32,111,110,32,115,111,109,101,32,79,83,115,44,32,98,101,32,100,101,115,105,114,97,98,108,101,46,32,72,111,119,32,116,104,101,32,112,114,111,103,114,97,109,32,114,101,115,112,111,110,100,115,32,116,111,32,116,104,105,115,32,105,115,32,104,105,103,104,108,121,32,115,121,115,116,101,109,45,100,101,112,101,110,100,101,110,116,32,97,110,100,32,110,111,32,115,112,101,99,105,102,105,99,32,101,102,102,101,99,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,46>>]}]},{dt,[],[{code,[],[<<101,120,105,116,95,115,116,97,116,117,115>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,110,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,44,32,97,110,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,99,101,115,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,101,32,112,111,114,116,32,101,120,105,116,115,44,32,97,32,109,101,115,115,97,103,101,32,111,102,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,80,111,114,116,44,123,101,120,105,116,95,115,116,97,116,117,115,44,83,116,97,116,117,115,125,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,114,111,99,101,115,115,44,32,119,104,101,114,101,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<32,105,115,32,116,104,101,32,101,120,105,116,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,101,32,112,114,111,103,114,97,109,32,97,98,111,114,116,115,32,111,110,32,85,110,105,120,44,32,116,104,101,32,115,97,109,101,32,99,111,110,118,101,110,116,105,111,110,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,115,104,101,108,108,115,32,100,111,32,40,116,104,97,116,32,105,115,44,32,49,50,56,43,115,105,103,110,97,108,41,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<101,111,102>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,108,115,111,44,32,116,104,101,32,109,101,115,115,97,103,101,115,32>>,{code,[],[<<101,111,102>>]},<<32,97,110,100,32>>,{code,[],[<<101,120,105,116,95,115,116,97,116,117,115>>]},<<32,97,112,112,101,97,114,32,105,110,32,97,110,32,117,110,115,112,101,99,105,102,105,101,100,32,111,114,100,101,114,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,32,99,108,111,115,101,115,32,105,116,115,32>>,{code,[],[<<115,116,100,111,117,116>>]},<<32,119,105,116,104,111,117,116,32,101,120,105,116,105,110,103,44,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,105,116,95,115,116,97,116,117,115>>]},<<32,100,111,101,115,32,110,111,116,32,119,111,114,107,46>>]}]},{dt,[],[{code,[],[<<117,115,101,95,115,116,100,105,111>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46,32,73,116,32,97,108,108,111,119,115,32,116,104,101,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,32,97,110,100,32,111,117,116,112,117,116,32,40,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,48,32,97,110,100,32,49,41,32,111,102,32,116,104,101,32,115,112,97,119,110,101,100,32,40,85,110,105,120,41,32,112,114,111,99,101,115,115,32,102,111,114,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,69,114,108,97,110,103,46>>]}]},{dt,[],[{code,[],[<<110,111,117,115,101,95,115,116,100,105,111>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,112,111,115,105,116,101,32,111,102,32>>,{code,[],[<<117,115,101,95,115,116,100,105,111>>]},<<46,32,73,116,32,117,115,101,115,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,51,32,97,110,100,32,52,32,102,111,114,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,69,114,108,97,110,103,46>>]}]},{dt,[],[{code,[],[<<115,116,100,101,114,114,95,116,111,95,115,116,100,111,117,116>>]}]},{dd,[],[{p,[],[<<65,102,102,101,99,116,115,32,112,111,114,116,115,32,116,111,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,115,46,32,84,104,101,32,101,120,101,99,117,116,101,100,32,112,114,111,103,114,97,109,32,103,101,116,115,32,105,116,115,32,115,116,97,110,100,97,114,100,32,101,114,114,111,114,32,102,105,108,101,32,114,101,100,105,114,101,99,116,101,100,32,116,111,32,105,116,115,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,32,102,105,108,101,46,32>>,{code,[],[<<115,116,100,101,114,114,95,116,111,95,115,116,100,111,117,116>>]},<<32,97,110,100,32>>,{code,[],[<<110,111,117,115,101,95,115,116,100,105,111>>]},<<32,97,114,101,32,109,117,116,117,97,108,108,121,32,101,120,99,108,117,115,105,118,101,46>>]}]},{dt,[],[{code,[],[<<111,118,101,114,108,97,112,112,101,100,95,105,111>>]}]},{dd,[],[{p,[],[<<65,102,102,101,99,116,115,32,112,111,114,116,115,32,116,111,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,115,32,111,110,32,87,105,110,100,111,119,115,32,111,110,108,121,46,32,84,104,101,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,32,97,110,100,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,32,104,97,110,100,108,101,115,32,111,102,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,32,97,114,101,44,32,105,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,117,112,112,108,105,101,100,44,32,111,112,101,110,101,100,32,119,105,116,104,32,102,108,97,103,32>>,{code,[],[<<70,73,76,69,95,70,76,65,71,95,79,86,69,82,76,65,80,80,69,68>>]},<<44,32,115,111,32,116,104,97,116,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,32,99,97,110,32,40,97,110,100,32,109,117,115,116,41,32,100,111,32,111,118,101,114,108,97,112,112,101,100,32,73,47,79,32,111,110,32,105,116,115,32,115,116,97,110,100,97,114,100,32,104,97,110,100,108,101,115,46,32,84,104,105,115,32,105,115,32,110,111,116,32,110,111,114,109,97,108,108,121,32,116,104,101,32,99,97,115,101,32,102,111,114,32,115,105,109,112,108,101,32,112,111,114,116,32,112,114,111,103,114,97,109,115,44,32,98,117,116,32,97,110,32,111,112,116,105,111,110,32,111,102,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,101,120,112,101,114,105,101,110,99,101,100,32,87,105,110,100,111,119,115,32,112,114,111,103,114,97,109,109,101,114,46,32>>,{em,[],[<<79,110,32,97,108,108,32,111,116,104,101,114,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,105,108,101,110,116,108,121,32,100,105,115,99,97,114,100,101,100,46>>]}]}]},{dt,[],[{code,[],[<<105,110>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,99,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,102,111,114,32,105,110,112,117,116,46>>]}]},{dt,[],[{code,[],[<<111,117,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,99,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,102,111,114,32,111,117,116,112,117,116,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<65,108,108,32,73,47,79,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,115,32,97,115,32,111,112,112,111,115,101,100,32,116,111,32,108,105,115,116,115,32,111,102,32,98,121,116,101,115,46>>]}]},{dt,[],[{code,[],[<<101,111,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,99,108,111,115,101,100,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,102,105,108,101,32,97,110,100,32,100,111,101,115,32,110,111,116,32,112,114,111,100,117,99,101,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,46,32,73,110,115,116,101,97,100,44,32,105,116,32,114,101,109,97,105,110,115,32,111,112,101,110,32,97,110,100,32,97,32>>,{code,[],[<<123,80,111,114,116,44,32,101,111,102,125>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,104,111,108,100,105,110,103,32,116,104,101,32,112,111,114,116,46>>]}]},{dt,[],[{code,[],[<<104,105,100,101>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32,114,117,110,110,105,110,103,32,111,110,32,87,105,110,100,111,119,115,44,32,115,117,112,112,114,101,115,115,101,115,32,99,114,101,97,116,105,111,110,32,111,102,32,97,32,110,101,119,32,99,111,110,115,111,108,101,32,119,105,110,100,111,119,32,119,104,101,110,32,115,112,97,119,110,105,110,103,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,46,32,40,84,104,105,115,32,111,112,116,105,111,110,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,111,110,32,111,116,104,101,114,32,112,108,97,116,102,111,114,109,115,46,41>>]}]},{dt,[],[{code,[],[<<123,112,97,114,97,108,108,101,108,105,115,109,44,32,66,111,111,108,101,97,110,125>>]}]},{dd,[],[{a,[{id,<<111,112,101,110,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>}],[]},{p,[],[<<83,101,116,115,32,115,99,104,101,100,117,108,101,114,32,104,105,110,116,32,102,111,114,32,112,111,114,116,32,112,97,114,97,108,108,101,108,105,115,109,46,32,73,102,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,115,99,104,101,100,117,108,101,115,32,112,111,114,116,32,116,97,115,107,115,59,32,119,104,101,110,32,100,111,105,110,103,32,115,111,44,32,105,116,32,105,109,112,114,111,118,101,115,32,112,97,114,97,108,108,101,108,105,115,109,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,73,102,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,116,114,105,101,115,32,116,111,32,112,101,114,102,111,114,109,32,112,111,114,116,32,116,97,115,107,115,32,105,109,109,101,100,105,97,116,101,108,121,44,32,105,109,112,114,111,118,105,110,103,32,108,97,116,101,110,99,121,32,97,116,32,116,104,101,32,101,120,112,101,110,115,101,32,111,102,32,112,97,114,97,108,108,101,108,105,115,109,46,32,84,104,101,32,100,101,102,97,117,108,116,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,121,115,116,101,109,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,112,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,112,112>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,98,117,115,121,95,108,105,109,105,116,115,95,112,111,114,116,44,32,123,76,111,119,44,32,72,105,103,104,125,32,124,32,100,105,115,97,98,108,101,100,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,108,105,109,105,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,99,111,110,116,114,111,108,108,105,110,103,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,32,111,102,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,112,111,114,116,115,32,105,110,116,101,114,110,97,108,32,111,117,116,112,117,116,32,113,117,101,117,101,32,115,105,122,101,32,98,101,99,111,109,101,115,32,108,97,114,103,101,114,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<72,105,103,104>>]},<<32,98,121,116,101,115,44,32,105,116,32,101,110,116,101,114,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,105,116,32,98,101,99,111,109,101,115,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<76,111,119>>]},<<32,98,121,116,101,115,32,105,116,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,116,104,101,32,112,111,114,116,32,105,115,32,105,110,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,44,32,112,114,111,99,101,115,115,101,115,32,115,101,110,100,105,110,103,32,99,111,109,109,97,110,100,115,32,116,111,32,105,116,32,119,105,108,108,32,98,101,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,67,111,109,109,97,110,100,115,32,97,114,101,32,105,110,32,116,104,105,115,32,99,111,110,116,101,120,116,32,101,105,116,104,101,114,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,91,50,44,51,93>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<76,111,119>>]},<<32,108,105,109,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,100,106,117,115,116,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,102,32,105,116,32,105,115,32,115,101,116,32,108,97,114,103,101,114,32,116,104,101,110,32>>,{code,[],[<<72,105,103,104>>]},<<46,32,86,97,108,105,100,32,114,97,110,103,101,32,111,102,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<76,111,119>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,115,32>>,{code,[],[<<91,49,44,32,40,49,32,98,115,108,32,40,56,42,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,119,111,114,100,115,105,122,101,41,41,41,45,50,93>>]},<<46,32,73,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<32,105,115,32,112,97,115,115,101,100,44,32,116,104,101,32,112,111,114,116,32,119,105,108,108,32,110,101,118,101,114,32,101,110,116,101,114,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,115,32,97,114,101,32>>,{code,[],[<<76,111,119,32,61,32,52,48,57,54>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104,32,61,32,56,49,57,50>>]},<<46>>]},{p,[],[{em,[],[<<78,111,116,101>>]},<<32,116,104,97,116,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,119,104,101,110,32,115,112,97,119,110,105,110,103,32,97,110,32,101,120,101,99,117,116,97,98,108,101,32,40,112,111,114,116,32,112,114,111,103,114,97,109,41,32,98,121,32,111,112,101,110,105,110,103,32,116,104,101,32,115,112,97,119,110,32,100,114,105,118,101,114,32,97,110,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32>>,{code,[],[<<102,100>>]},<<32,100,114,105,118,101,114,46,32,84,104,105,115,32,111,112,116,105,111,110,32,119,105,108,108,32,99,97,117,115,101,32,97,32,102,97,105,108,117,114,101,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,119,104,101,110,32,111,112,101,110,105,110,103,32,111,116,104,101,114,32,100,114,105,118,101,114,115,46>>]}]},{dt,[],[{code,[],[<<123,98,117,115,121,95,108,105,109,105,116,115,95,109,115,103,113,44,32,123,76,111,119,44,32,72,105,103,104,125,32,124,32,100,105,115,97,98,108,101,100,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,108,105,109,105,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,99,111,110,116,114,111,108,108,105,110,103,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,32,111,102,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,112,111,114,116,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,115,105,122,101,32,98,101,99,111,109,101,115,32,108,97,114,103,101,114,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<72,105,103,104>>]},<<32,98,121,116,101,115,32,105,116,32,101,110,116,101,114,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,105,116,32,98,101,99,111,109,101,115,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<76,111,119>>]},<<32,98,121,116,101,115,32,105,116,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,105,115,32,105,110,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,44,32,112,114,111,99,101,115,115,101,115,32,115,101,110,100,105,110,103,32,99,111,109,109,97,110,100,115,32,116,111,32,105,116,32,119,105,108,108,32,98,101,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,67,111,109,109,97,110,100,115,32,97,114,101,32,105,110,32,116,104,105,115,32,99,111,110,116,101,120,116,32,101,105,116,104,101,114,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,91,50,44,51,93>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<76,111,119>>]},<<32,108,105,109,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,100,106,117,115,116,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,102,32,105,116,32,105,115,32,115,101,116,32,108,97,114,103,101,114,32,116,104,101,110,32>>,{code,[],[<<72,105,103,104>>]},<<46,32,86,97,108,105,100,32,114,97,110,103,101,32,111,102,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<76,111,119>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,115,32>>,{code,[],[<<91,49,44,32,40,49,32,98,115,108,32,40,56,42,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,119,111,114,100,115,105,122,101,41,41,41,45,50,93>>]},<<46,32,73,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<32,105,115,32,112,97,115,115,101,100,44,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,110,101,118,101,114,32,101,110,116,101,114,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46>>]},{p,[],[{em,[],[<<78,111,116,101>>]},<<32,116,104,97,116,32,105,102,32,116,104,101,32,100,114,105,118,101,114,32,115,116,97,116,105,99,97,108,108,121,32,104,97,115,32,100,105,115,97,98,108,101,100,32,116,104,101,32,117,115,101,32,111,102,32,116,104,105,115,32,102,101,97,116,117,114,101,44,32,97,32,102,97,105,108,117,114,101,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100,32,117,110,108,101,115,115,32,116,104,105,115,32,111,112,116,105,111,110,32,97,108,115,111,32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<100,105,115,97,98,108,101>>]},<<32,111,114,32,110,111,116,32,112,97,115,115,101,100,32,97,116,32,97,108,108,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,115,32,97,114,101,32>>,{code,[],[<<76,111,119,32,61,32,52,48,57,54>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104,32,61,32,56,49,57,50>>]},<<32,117,110,108,101,115,115,32,116,104,101,32,100,114,105,118,101,114,32,105,116,115,101,108,102,32,100,111,101,115,32,109,111,100,105,102,105,99,97,116,105,111,110,115,32,111,102,32,116,104,101,115,101,32,118,97,108,117,101,115,46>>]},{p,[],[{em,[],[<<78,111,116,101>>]},<<32,116,104,97,116,32,116,104,101,32,100,114,105,118,101,114,32,109,105,103,104,116,32,102,97,105,108,32,105,102,32,105,116,32,97,108,115,111,32,97,100,106,117,115,116,32,116,104,101,115,101,32,108,105,109,105,116,115,32,98,121,32,105,116,115,101,108,102,32,97,110,100,32,121,111,117,32,104,97,118,101,32,100,105,115,97,98,108,101,100,32,116,104,105,115,32,102,101,97,116,117,114,101,46>>]},{p,[],[<<84,104,101,32,115,112,97,119,110,32,100,114,105,118,101,114,32,40,117,115,101,100,32,119,104,101,110,32,115,112,97,119,110,105,110,103,32,97,110,32,101,120,101,99,117,116,97,98,108,101,41,32,97,110,100,32,116,104,101,32>>,{code,[],[<<102,100>>]},<<32,100,114,105,118,101,114,32,100,111,32,110,111,116,32,100,105,115,97,98,108,101,32,116,104,105,115,32,102,101,97,116,117,114,101,32,97,110,100,32,100,111,32,110,111,116,32,97,100,106,117,115,116,32,116,104,101,115,101,32,108,105,109,105,116,115,32,98,121,32,116,104,101,109,115,101,108,118,101,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,114,105,118,101,114,35,101,114,108,95,100,114,118,95,98,117,115,121,95,109,115,103,113,95,108,105,109,105,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,108,95,100,114,118,95,98,117,115,121,95,109,115,103,113,95,108,105,109,105,116,115,40,41>>]}]},<<46>>]}]}]},{p,[],[<<68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<115,116,114,101,97,109>>]},<<32,102,111,114,32,97,108,108,32,112,111,114,116,32,116,121,112,101,115,32,97,110,100,32>>,{code,[],[<<117,115,101,95,115,116,100,105,111>>]},<<32,102,111,114,32,115,112,97,119,110,101,100,32,112,111,114,116,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32,105,102,32,116,104,101,32,112,111,114,116,32,99,97,110,110,111,116,32,98,101,32,111,112,101,110,101,100,44,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<44,32>>,{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]},<<44,32,111,114,32,116,104,101,32,80,79,83,73,88,32,101,114,114,111,114,32,99,111,100,101,32,116,104,97,116,32,109,111,115,116,32,99,108,111,115,101,108,121,32,100,101,115,99,114,105,98,101,115,32,116,104,101,32,101,114,114,111,114,44,32,111,114,32>>,{code,[],[<<101,105,110,118,97,108>>]},<<32,105,102,32,110,111,32,80,79,83,73,88,32,99,111,100,101,32,105,115,32,97,112,112,114,111,112,114,105,97,116,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<66,97,100,32,105,110,112,117,116,32,97,114,103,117,109,101,110,116,115,32,116,111,32>>,{code,[],[<<111,112,101,110,95,112,111,114,116>>]},<<46>>]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[<<65,108,108,32,97,118,97,105,108,97,98,108,101,32,112,111,114,116,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,101,109,117,108,97,116,111,114,32,97,114,101,32,105,110,32,117,115,101,46>>]},{dt,[],[{code,[],[<<101,110,111,109,101,109>>]}]},{dd,[],[<<78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,116,104,101,32,112,111,114,116,46>>]},{dt,[],[{code,[],[<<101,97,103,97,105,110>>]}]},{dd,[],[<<78,111,32,109,111,114,101,32,97,118,97,105,108,97,98,108,101,32,79,83,32,112,114,111,99,101,115,115,101,115,46>>]},{dt,[],[{code,[],[<<101,110,97,109,101,116,111,111,108,111,110,103>>]}]},{dd,[],[<<84,111,111,32,108,111,110,103,32,101,120,116,101,114,110,97,108,32,99,111,109,109,97,110,100,46>>]},{dt,[],[{code,[],[<<101,109,102,105,108,101>>]}]},{dd,[],[<<78,111,32,109,111,114,101,32,97,118,97,105,108,97,98,108,101,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,40,102,111,114,32,116,104,101,32,79,83,32,112,114,111,99,101,115,115,32,116,104,97,116,32,116,104,101,32,69,114,108,97,110,103,32,101,109,117,108,97,116,111,114,32,114,117,110,115,32,105,110,41,46>>]},{dt,[],[{code,[],[<<101,110,102,105,108,101>>]}]},{dd,[],[<<70,117,108,108,32,102,105,108,101,32,116,97,98,108,101,32,40,102,111,114,32,116,104,101,32,101,110,116,105,114,101,32,79,83,41,46>>]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{code,[],[<<67,111,109,109,97,110,100>>]},<<32,115,112,101,99,105,102,105,101,100,32,105,110,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,67,111,109,109,97,110,100,125>>]},<<32,100,111,101,115,32,110,111,116,32,112,111,105,110,116,32,111,117,116,32,97,110,32,101,120,101,99,117,116,97,98,108,101,32,102,105,108,101,46>>]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{code,[],[<<70,105,108,101,78,97,109,101>>]},<<32,115,112,101,99,105,102,105,101,100,32,105,110,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<32,100,111,101,115,32,110,111,116,32,112,111,105,110,116,32,111,117,116,32,97,110,32,101,120,105,115,116,105,110,103,32,102,105,108,101,46>>]}]},{p,[],[<<68,117,114,105,110,103,32,117,115,101,32,111,102,32,97,32,112,111,114,116,32,111,112,101,110,101,100,32,117,115,105,110,103,32>>,{code,[],[<<123,115,112,97,119,110,44,32,78,97,109,101,125>>]},<<44,32>>,{code,[],[<<123,115,112,97,119,110,95,100,114,105,118,101,114,44,32,78,97,109,101,125>>]},<<44,32,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,78,97,109,101,125>>]},<<44,32,101,114,114,111,114,115,32,97,114,105,115,105,110,103,32,119,104,101,110,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,116,111,32,105,116,32,97,114,101,32,114,101,112,111,114,116,101,100,32,116,111,32,116,104,101,32,111,119,110,105,110,103,32,112,114,111,99,101,115,115,32,117,115,105,110,103,32,115,105,103,110,97,108,115,32,111,102,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,80,111,114,116,44,32,80,111,115,105,120,67,111,100,101,125>>]},<<46,32,70,111,114,32,116,104,101,32,112,111,115,115,105,98,108,101,32,118,97,108,117,101,115,32,111,102,32>>,{code,[],[<<80,111,115,105,120,67,111,100,101>>]},<<44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,102,105,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,105,108,101,40,51,41>>]}]},<<46>>]},{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,111,114,116,115,32,116,104,97,116,32,99,97,110,32,98,101,32,111,112,101,110,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,109,97,120,95,112,111,114,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,81>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,51,56,57>>,signature => [{attribute,2315,spec,{{open_port,2},[{type,2315,bounded_fun,[{type,2315,'fun',[{type,2315,product,[{var,2315,'PortName'},{var,2315,'PortSettings'}]},{type,2315,port,[]}]},[{type,2316,constraint,[{atom,2316,is_subtype},[{var,2316,'PortName'},{type,2316,union,[{type,2316,tuple,[{atom,2316,spawn},{ann_type,2316,[{var,2316,'Command'},{type,2316,union,[{type,2316,string,[]},{type,2316,binary,[]}]}]}]},{type,2317,tuple,[{atom,2317,spawn_driver},{ann_type,2317,[{var,2317,'Command'},{type,2317,union,[{type,2317,string,[]},{type,2317,binary,[]}]}]}]},{type,2318,tuple,[{atom,2318,spawn_executable},{ann_type,2318,[{var,2318,'FileName'},{remote_type,2318,[{atom,2318,file},{atom,2318,name_all},[]]}]}]},{type,2319,tuple,[{atom,2319,fd},{ann_type,2319,[{var,2319,'In'},{type,2319,non_neg_integer,[]}]},{ann_type,2319,[{var,2319,'Out'},{type,2319,non_neg_integer,[]}]}]}]}]]},{type,2320,constraint,[{atom,2320,is_subtype},[{var,2320,'PortSettings'},{type,2320,list,[{var,2320,'Opt'}]}]]},{type,2321,constraint,[{atom,2321,is_subtype},[{var,2321,'Opt'},{type,2321,union,[{type,2321,tuple,[{atom,2321,packet},{ann_type,2321,[{var,2321,'N'},{type,2321,union,[{integer,2321,1},{integer,2321,2},{integer,2321,4}]}]}]},{atom,2322,stream},{type,2323,tuple,[{atom,2323,line},{ann_type,2323,[{var,2323,'L'},{type,2323,non_neg_integer,[]}]}]},{type,2324,tuple,[{atom,2324,cd},{ann_type,2324,[{var,2324,'Dir'},{type,2324,union,[{type,2324,string,[]},{type,2324,binary,[]}]}]}]},{type,2325,tuple,[{atom,2325,env},{ann_type,2325,[{var,2325,'Env'},{type,2325,list,[{type,2325,tuple,[{ann_type,2325,[{var,2325,'Name'},{remote_type,2325,[{atom,2325,os},{atom,2325,env_var_name},[]]}]},{ann_type,2325,[{var,2325,'Val'},{type,2325,union,[{remote_type,2325,[{atom,2325,os},{atom,2325,env_var_value},[]]},{atom,2325,false}]}]}]}]}]}]},{type,2326,tuple,[{atom,2326,args},{type,2326,list,[{type,2326,union,[{type,2326,string,[]},{type,2326,binary,[]}]}]}]},{type,2327,tuple,[{atom,2327,arg0},{type,2327,union,[{type,2327,string,[]},{type,2327,binary,[]}]}]},{atom,2328,exit_status},{atom,2329,use_stdio},{atom,2330,nouse_stdio},{atom,2331,stderr_to_stdout},{atom,2332,in},{atom,2333,out},{atom,2334,binary},{atom,2335,eof},{type,2336,tuple,[{atom,2336,parallelism},{ann_type,2336,[{var,2336,'Boolean'},{type,2336,boolean,[]}]}]},{atom,2337,hide},{type,2338,tuple,[{atom,2338,busy_limits_port},{type,2338,union,[{type,2338,tuple,[{type,2338,non_neg_integer,[]},{type,2338,non_neg_integer,[]}]},{atom,2338,disabled}]}]},{type,2339,tuple,[{atom,2339,busy_limits_msgq},{type,2339,union,[{type,2339,tuple,[{type,2339,non_neg_integer,[]},{type,2339,non_neg_integer,[]}]},{atom,2339,disabled}]}]}]}]]}]]}]}}]}},{{function,phash,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1477}],[<<112,104,97,115,104,47,50>>],#{<<101,110>> => [{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,104,97,115,104,50,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,112,104,97,115,104,50,47,50>>]}]},<<32,115,104,111,117,108,100,32,98,101,32,117,115,101,100,32,102,111,114,32,110,101,119,32,99,111,100,101,46,32,78,111,116,101,32,116,104,97,116,32>>,{code,[],[<<101,114,108,97,110,103,58,112,104,97,115,104,40,88,44,78,41>>]},<<32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,121,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,112,104,97,115,104,50,40,88,44,78,41>>]}]}]},{p,[],[<<80,111,114,116,97,98,108,101,32,104,97,115,104,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,104,97,115,104,32,102,111,114,32,116,104,101,32,115,97,109,101,32,69,114,108,97,110,103,32,116,101,114,109,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,109,97,99,104,105,110,101,32,97,114,99,104,105,116,101,99,116,117,114,101,32,97,110,100,32,69,82,84,83,32,118,101,114,115,105,111,110,32,40,116,104,101,32,66,73,70,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,82,84,83,32,52,46,57,46,49,46,49,41,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,97,32,104,97,115,104,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<84,101,114,109>>]},<<32,119,105,116,104,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<49,46,46,82,97,110,103,101>>]},<<46,32,84,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<82,97,110,103,101>>]},<<32,105,115,32,50,94,51,50,46>>]}]},#{deprecated => <<101,114,108,97,110,103,58,112,104,97,115,104,47,50,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32,117,115,101,32,101,114,108,97,110,103,58,112,104,97,115,104,50,47,50,32,105,110,115,116,101,97,100>>,edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,55,57,53>>,signature => [{attribute,1477,spec,{{erlang,phash,2},[{type,1477,bounded_fun,[{type,1477,'fun',[{type,1477,product,[{var,1477,'Term'},{var,1477,'Range'}]},{var,1477,'Hash'}]},[{type,1478,constraint,[{atom,1478,is_subtype},[{var,1478,'Term'},{type,1478,term,[]}]]},{type,1479,constraint,[{atom,1479,is_subtype},[{var,1479,'Range'},{type,1479,pos_integer,[]}]]},{type,1480,constraint,[{atom,1480,is_subtype},[{var,1480,'Hash'},{type,1480,pos_integer,[]}]]}]]}]}}]}},{{function,phash2,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1492}],[<<112,104,97,115,104,50,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,56,49,55>>,equiv => {function,phash2,1},signature => [{attribute,1492,spec,{{erlang,phash2,2},[{type,1492,bounded_fun,[{type,1492,'fun',[{type,1492,product,[{var,1492,'Term'},{var,1492,'Range'}]},{var,1492,'Hash'}]},[{type,1493,constraint,[{atom,1493,is_subtype},[{var,1493,'Term'},{type,1493,term,[]}]]},{type,1494,constraint,[{atom,1494,is_subtype},[{var,1494,'Range'},{type,1494,pos_integer,[]}]]},{type,1495,constraint,[{atom,1495,is_subtype},[{var,1495,'Hash'},{type,1495,non_neg_integer,[]}]]}]]}]}}]}},{{function,phash2,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1485}],[<<112,104,97,115,104,50,47,49>>],#{<<101,110>> => [{p,[],[<<80,111,114,116,97,98,108,101,32,104,97,115,104,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,104,97,115,104,32,102,111,114,32,116,104,101,32,115,97,109,101,32,69,114,108,97,110,103,32,116,101,114,109,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,109,97,99,104,105,110,101,32,97,114,99,104,105,116,101,99,116,117,114,101,32,97,110,100,32,69,82,84,83,32,118,101,114,115,105,111,110,32,40,116,104,101,32,66,73,70,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,82,84,83,32,53,46,50,41,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,97,32,104,97,115,104,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<84,101,114,109>>]},<<32,119,105,116,104,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<48,46,46,82,97,110,103,101,45,49>>]},<<46,32,84,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<82,97,110,103,101>>]},<<32,105,115,32,50,94,51,50,46,32,87,104,101,110,32,119,105,116,104,111,117,116,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<82,97,110,103,101>>]},<<44,32,97,32,118,97,108,117,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,48,46,46,50,94,50,55,45,49,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,97,108,119,97,121,115,32,116,111,32,98,101,32,117,115,101,100,32,102,111,114,32,104,97,115,104,105,110,103,32,116,101,114,109,115,46,32,73,116,32,100,105,115,116,114,105,98,117,116,101,115,32,115,109,97,108,108,32,105,110,116,101,103,101,114,115,32,98,101,116,116,101,114,32,116,104,97,110,32>>,{code,[],[<<112,104,97,115,104,47,50>>]},<<44,32,97,110,100,32,105,116,32,105,115,32,102,97,115,116,101,114,32,102,111,114,32,98,105,103,110,117,109,115,32,97,110,100,32,98,105,110,97,114,105,101,115,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<48,46,46,82,97,110,103,101,45,49>>]},<<32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,114,97,110,103,101,32,111,102,32>>,{code,[],[<<112,104,97,115,104,47,50>>]},<<44,32,119,104,105,99,104,32,105,115,32>>,{code,[],[<<49,46,46,82,97,110,103,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,56,49,55>>,signature => [{attribute,1485,spec,{{erlang,phash2,1},[{type,1485,bounded_fun,[{type,1485,'fun',[{type,1485,product,[{var,1485,'Term'}]},{var,1485,'Hash'}]},[{type,1486,constraint,[{atom,1486,is_subtype},[{var,1486,'Term'},{type,1486,term,[]}]]},{type,1487,constraint,[{atom,1487,is_subtype},[{var,1487,'Hash'},{type,1487,non_neg_integer,[]}]]}]]}]}}]}},{{function,pid_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1500}],[<<112,105,100,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,112,105,100,95,116,111,95,108,105,115,116,40,115,101,108,102,40,41,41,46,10,34,60,48,46,56,53,46,48,62,34>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,108,95,100,105,115,116,95,112,114,111,116,111,99,111,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,114,101,97,116,105,111,110>>]},<<32,102,111,114,32,116,104,101,32,110,111,100,101,32,105,115,32,110,111,116,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<46,32,84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,112,114,111,99,101,115,115,101,115,32,105,110,32,100,105,102,102,101,114,101,110,116,32,105,110,99,97,114,110,97,116,105,111,110,115,32,111,102,32,97,32,110,111,100,101,32,119,105,116,104,32,97,32,115,112,101,99,105,102,105,99,32,110,97,109,101,32,99,97,110,32,103,101,116,32,116,104,101,32,115,97,109,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,56,52,50>>,signature => [{attribute,1500,spec,{{pid_to_list,1},[{type,1500,bounded_fun,[{type,1500,'fun',[{type,1500,product,[{var,1500,'Pid'}]},{type,1500,string,[]}]},[{type,1501,constraint,[{atom,1501,is_subtype},[{var,1501,'Pid'},{type,1501,pid,[]}]]}]]}]}}]}},{{function,port_call,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3594}],[<<112,111,114,116,95,99,97,108,108,47,51>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,121,110,99,104,114,111,110,111,117,115,32,99,97,108,108,32,116,111,32,97,32,112,111,114,116,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,97,110,100,32>>,{code,[],[<<68,97,116,97>>]},<<32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,44,32,116,104,97,116,32,105,115,44,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46,32,78,111,116,32,97,108,108,32,112,111,114,116,32,100,114,105,118,101,114,115,32,115,117,112,112,111,114,116,32,116,104,105,115,32,102,101,97,116,117,114,101,46>>]},{p,[],[{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,114,101,102,101,114,114,105,110,103,32,116,111,32,97,32,100,114,105,118,101,114,46>>]},{p,[],[{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,119,104,105,99,104,32,105,115,32,112,97,115,115,101,100,32,111,110,32,116,111,32,116,104,101,32,100,114,105,118,101,114,46>>]},{p,[],[{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,121,32,69,114,108,97,110,103,32,116,101,114,109,46,32,84,104,105,115,32,100,97,116,97,32,105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,98,105,110,97,114,121,32,116,101,114,109,32,102,111,114,109,97,116,32,97,110,100,32,115,101,110,116,32,116,111,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,101,114,109,32,102,114,111,109,32,116,104,101,32,100,114,105,118,101,114,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,116,104,101,32,114,101,116,117,114,110,101,100,32,100,97,116,97,32,97,108,115,111,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,100,111,101,115,32,110,111,116,32,102,105,116,32,105,110,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,110,99,104,114,111,110,111,117,115,32,99,111,110,116,114,111,108,32,111,112,101,114,97,116,105,111,110,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,115,111,32,100,101,99,105,100,101,115,32,102,111,114,32,97,110,121,32,114,101,97,115,111,110,32,40,112,114,111,98,97,98,108,121,32,115,111,109,101,116,104,105,110,103,32,119,114,111,110,103,32,119,105,116,104,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<41,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,99,97,108,108,32>>,{code,[],[<<112,111,114,116,95,99,97,108,108>>]},<<32,119,105,116,104,32,97,110,32,117,110,107,110,111,119,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,101,120,112,101,99,116,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,115,117,112,112,108,105,101,100,32,97,114,103,117,109,101,110,116,115,46>>]}]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,56,54,49>>,signature => [{attribute,3594,spec,{{erlang,port_call,3},[{type,3594,bounded_fun,[{type,3594,'fun',[{type,3594,product,[{var,3594,'Port'},{var,3594,'Operation'},{var,3594,'Data'}]},{type,3594,term,[]}]},[{type,3595,constraint,[{atom,3595,is_subtype},[{var,3595,'Port'},{type,3595,union,[{type,3595,port,[]},{type,3595,atom,[]}]}]]},{type,3596,constraint,[{atom,3596,is_subtype},[{var,3596,'Operation'},{type,3596,integer,[]}]]},{type,3597,constraint,[{atom,3597,is_subtype},[{var,3597,'Data'},{type,3597,term,[]}]]}]]}]}}]}},{{function,port_close,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3555}],[<<112,111,114,116,95,99,108,111,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,108,111,115,101,115,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,82,111,117,103,104,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<80,111,114,116,32,33,32,123,115,101,108,102,40,41,44,32,99,108,111,115,101,125>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,32,40,115,101,101,32,98,101,108,111,119,41,44,32,98,101,105,110,103,32,115,121,110,99,104,114,111,110,111,117,115,44,32,97,110,100,32,116,104,97,116,32,116,104,101,32,112,111,114,116,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,114,101,112,108,121,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,32,99,108,111,115,101,100,125>>]},<<46,32,65,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,99,108,111,115,101,32,97,32,112,111,114,116,32,119,105,116,104,32>>,{code,[],[<<112,111,114,116,95,99,108,111,115,101,47,49>>]},<<44,32,110,111,116,32,111,110,108,121,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,40,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,114,111,99,101,115,115,41,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,99,108,111,115,101,47,49>>]},<<32,114,101,116,117,114,110,115,46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,114,105,115,111,110,58,32>>,{code,[],[<<80,111,114,116,32,33,32,123,115,101,108,102,40,41,44,32,99,108,111,115,101,125>>]},<<32,111,110,108,121,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,111,114,116,32,111,114,32,97,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,99,108,111,115,101,100,32,112,111,114,116,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,110,32,111,112,101,110,32,112,111,114,116,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32,112,111,114,116,32,114,101,112,108,105,101,115,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,32,99,108,111,115,101,100,125>>]},<<32,119,104,101,110,32,97,108,108,32,98,117,102,102,101,114,115,32,104,97,118,101,32,98,101,101,110,32,102,108,117,115,104,101,100,32,97,110,100,32,116,104,101,32,112,111,114,116,32,114,101,97,108,108,121,32,99,108,111,115,101,115,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32>>,{em,[],[<<112,111,114,116,32,111,119,110,101,114>>]},<<32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,99,108,111,115,101,32,97,32,112,111,114,116,32,117,115,105,110,103,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,99,108,111,115,101,125>>]},<<32,97,115,32,105,102,32,105,116,32,105,116,115,101,108,102,32,119,97,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,98,117,116,32,116,104,101,32,114,101,112,108,121,32,97,108,119,97,121,115,32,103,111,101,115,32,116,111,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,54,44,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,99,108,111,115,101,125>>]},<<32,105,115,32,116,114,117,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,97,108,119,97,121,115,32,98,101,101,110,32,100,111,99,117,109,101,110,116,101,100,32,97,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,108,101,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,121,110,99,104,114,111,110,111,117,115,46,32>>,{code,[],[<<112,111,114,116,95,99,108,111,115,101,47,49>>]},<<32,105,115,32,104,111,119,101,118,101,114,32,115,116,105,108,108,32,102,117,108,108,121,32,115,121,110,99,104,114,111,110,111,117,115,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,57,49,51>>,signature => [{attribute,3555,spec,{{port_close,1},[{type,3555,bounded_fun,[{type,3555,'fun',[{type,3555,product,[{var,3555,'Port'}]},{atom,3555,true}]},[{type,3556,constraint,[{atom,3556,is_subtype},[{var,3556,'Port'},{type,3556,union,[{type,3556,port,[]},{type,3556,atom,[]}]}]]}]]}]}}]}},{{function,port_command,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3513}],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,100,97,116,97,32,116,111,32,97,32,112,111,114,116,46,32,83,97,109,101,32,97,115,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,32,97,110,100,32,98,101,105,110,103,32,115,121,110,99,104,114,111,110,111,117,115,32,40,115,101,101,32,98,101,108,111,119,41,46,32,65,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,110,100,32,100,97,116,97,32,116,111,32,97,32,112,111,114,116,32,119,105,116,104,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>]},<<44,32,110,111,116,32,111,110,108,121,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,40,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,114,111,99,101,115,115,41,46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,114,105,115,111,110,58,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,111,110,108,121,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,111,114,116,32,111,114,32,97,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,99,108,111,115,101,100,32,112,111,114,116,44,32,116,104,101,32,100,97,116,97,32,109,101,115,115,97,103,101,32,100,105,115,97,112,112,101,97,114,115,32,119,105,116,104,111,117,116,32,97,32,115,111,117,110,100,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,111,112,101,110,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32>>,{em,[],[<<112,111,114,116,32,111,119,110,101,114>>]},<<32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<46,32,84,104,101,32,112,111,114,116,32,111,119,110,101,114,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<32,97,108,115,111,32,105,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,73,47,79,32,108,105,115,116,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,110,100,32,116,111,32,97,32,112,111,114,116,32,117,115,105,110,103,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,97,115,32,105,102,32,105,116,32,105,116,115,101,108,102,32,119,97,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,98,117,115,121,32,97,110,121,32,109,111,114,101,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,54,44,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,105,115,32,116,114,117,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,97,108,119,97,121,115,32,98,101,101,110,32,100,111,99,117,109,101,110,116,101,100,32,97,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,108,101,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,121,110,99,104,114,111,110,111,117,115,46,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>]},<<32,105,115,32,104,111,119,101,118,101,114,32,115,116,105,108,108,32,102,117,108,108,121,32,115,121,110,99,104,114,111,110,111,117,115,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]}]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,73,47,79,32,108,105,115,116,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,115,101,110,100,32,100,97,116,97,32,116,111,32,97,110,32,117,110,107,110,111,119,110,32,112,111,114,116,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,100,97,116,97,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,57,53,51>>,signature => [{attribute,3513,spec,{{port_command,2},[{type,3513,bounded_fun,[{type,3513,'fun',[{type,3513,product,[{var,3513,'Port'},{var,3513,'Data'}]},{atom,3513,true}]},[{type,3514,constraint,[{atom,3514,is_subtype},[{var,3514,'Port'},{type,3514,union,[{type,3514,port,[]},{type,3514,atom,[]}]}]]},{type,3515,constraint,[{atom,3515,is_subtype},[{var,3515,'Data'},{type,3515,iodata,[]}]]}]]}]}}]}},{{function,port_command,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3526}],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,100,97,116,97,32,116,111,32,97,32,112,111,114,116,46,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,40,80,111,114,116,44,32,68,97,116,97,44,32,91,93,41>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,40,80,111,114,116,44,32,68,97,116,97,41>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,99,111,109,109,97,110,100,32,105,115,32,97,98,111,114,116,101,100,44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,98,117,115,121,32,97,110,121,109,111,114,101,46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,111,114,99,101>>]}]},{dd,[],[<<84,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,115,117,115,112,101,110,100,101,100,32,105,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,105,110,115,116,101,97,100,32,116,104,101,32,112,111,114,116,32,99,111,109,109,97,110,100,32,105,115,32,102,111,114,99,101,100,32,116,104,114,111,117,103,104,46,32,84,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32,116,104,101,32,100,114,105,118,101,114,32,111,102,32,116,104,101,32,112,111,114,116,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,105,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,100,114,105,118,101,114,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,100,114,105,118,101,114,95,101,110,116,114,121,35,100,114,105,118,101,114,95,102,108,97,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<69,82,76,95,68,82,86,95,70,76,65,71,95,83,79,70,84,95,66,85,83,89>>]}]},<<46>>]},{dt,[],[{code,[],[<<110,111,115,117,115,112,101,110,100>>]}]},{dd,[],[<<84,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,115,117,115,112,101,110,100,101,100,32,105,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,105,110,115,116,101,97,100,32,116,104,101,32,112,111,114,116,32,99,111,109,109,97,110,100,32,105,115,32,97,98,111,114,116,101,100,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<77,111,114,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,73,47,79,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<102,111,114,99,101>>]},<<32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,98,117,116,32,116,104,101,32,100,114,105,118,101,114,32,111,102,32,116,104,101,32,112,111,114,116,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,102,111,114,99,105,110,103,32,116,104,114,111,117,103,104,32,97,32,98,117,115,121,32,112,111,114,116,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,115,101,110,100,32,100,97,116,97,32,116,111,32,97,110,32,117,110,107,110,111,119,110,32,112,111,114,116,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,100,97,116,97,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,48,53>>,signature => [{attribute,3526,spec,{{port_command,3},[{type,3526,bounded_fun,[{type,3526,'fun',[{type,3526,product,[{var,3526,'Port'},{var,3526,'Data'},{var,3526,'OptionList'}]},{type,3526,boolean,[]}]},[{type,3527,constraint,[{atom,3527,is_subtype},[{var,3527,'Port'},{type,3527,union,[{type,3527,port,[]},{type,3527,atom,[]}]}]]},{type,3528,constraint,[{atom,3528,is_subtype},[{var,3528,'Data'},{type,3528,iodata,[]}]]},{type,3529,constraint,[{atom,3529,is_subtype},[{var,3529,'Option'},{type,3529,union,[{atom,3529,force},{atom,3529,nosuspend}]}]]},{type,3530,constraint,[{atom,3530,is_subtype},[{var,3530,'OptionList'},{type,3530,list,[{var,3530,'Option'}]}]]}]]}]}}]}},{{function,port_connect,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3542}],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,40,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,111,114,116,41,32,116,111,32>>,{code,[],[<<80,105,100>>]},<<46,32,82,111,117,103,104,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{p,[],[<<84,104,101,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,32,100,105,102,102,101,114,115,44,32,115,101,101,32,98,101,108,111,119,46>>]}]},{li,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,114,101,112,108,121,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,99,111,110,110,101,99,116,101,100,125>>]},<<46>>]}]},{li,[],[{p,[],[{code,[],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,49>>]},<<32,105,115,32,115,121,110,99,104,114,111,110,111,117,115,44,32,115,101,101,32,98,101,108,111,119,46>>]}]},{li,[],[{p,[],[<<84,104,101,32,110,101,119,32,112,111,114,116,32,111,119,110,101,114,32,103,101,116,115,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,46>>]}]}]},{p,[],[<<84,104,101,32,111,108,100,32,112,111,114,116,32,111,119,110,101,114,32,115,116,97,121,115,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,32,97,110,100,32,109,117,115,116,32,99,97,108,108,32>>,{code,[],[<<117,110,108,105,110,107,40,80,111,114,116,41>>]},<<32,105,102,32,116,104,105,115,32,105,115,32,110,111,116,32,100,101,115,105,114,101,100,46,32,65,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,116,111,32,98,101,32,97,110,121,32,112,114,111,99,101,115,115,32,119,105,116,104,32>>,{code,[],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,50>>]},<<46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,114,105,115,111,110,58,32>>,{code,[],[<<80,111,114,116,32,33,32,123,115,101,108,102,40,41,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,111,110,108,121,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,111,114,116,32,111,114,32,97,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,99,108,111,115,101,100,32,112,111,114,116,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,110,32,111,112,101,110,32,112,111,114,116,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32,112,111,114,116,32,114,101,112,108,105,101,115,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,32,99,111,110,110,101,99,116,101,100,125>>]},<<32,116,111,32,116,104,101,32,111,108,100,32,112,111,114,116,32,111,119,110,101,114,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,111,108,100,32,112,111,114,116,32,111,119,110,101,114,32,105,115,32,115,116,105,108,108,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,119,104,105,108,101,32,116,104,101,32,110,101,119,32,105,115,32,110,111,116,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,110,32,111,112,101,110,32,112,111,114,116,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32>>,{em,[],[<<112,111,114,116,32,111,119,110,101,114>>]},<<32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<46,32,84,104,101,32,112,111,114,116,32,111,119,110,101,114,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<32,97,108,115,111,32,105,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,120,105,115,116,105,110,103,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,117,115,105,110,103,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,97,115,32,105,102,32,105,116,32,105,116,115,101,108,102,32,119,97,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,98,117,116,32,116,104,101,32,114,101,112,108,121,32,97,108,119,97,121,115,32,103,111,101,115,32,116,111,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,54,44,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,105,115,32,116,114,117,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,97,108,119,97,121,115,32,98,101,101,110,32,100,111,99,117,109,101,110,116,101,100,32,97,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,108,101,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,121,110,99,104,114,111,110,111,117,115,46,32>>,{code,[],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,50>>]},<<32,105,115,32,104,111,119,101,118,101,114,32,115,116,105,108,108,32,102,117,108,108,121,32,115,121,110,99,104,114,111,110,111,117,115,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,120,105,115,116,105,110,103,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,54,57>>,signature => [{attribute,3542,spec,{{port_connect,2},[{type,3542,bounded_fun,[{type,3542,'fun',[{type,3542,product,[{var,3542,'Port'},{var,3542,'Pid'}]},{atom,3542,true}]},[{type,3543,constraint,[{atom,3543,is_subtype},[{var,3543,'Port'},{type,3543,union,[{type,3543,port,[]},{type,3543,atom,[]}]}]]},{type,3544,constraint,[{atom,3544,is_subtype},[{var,3544,'Pid'},{type,3544,pid,[]}]]}]]}]}}]}},{{function,port_control,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3567}],[<<112,111,114,116,95,99,111,110,116,114,111,108,47,51>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,121,110,99,104,114,111,110,111,117,115,32,99,111,110,116,114,111,108,32,111,112,101,114,97,116,105,111,110,32,111,110,32,97,32,112,111,114,116,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,97,110,100,32>>,{code,[],[<<68,97,116,97>>]},<<32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,44,32,116,104,97,116,32,105,115,44,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46,32,78,111,116,32,97,108,108,32,112,111,114,116,32,100,114,105,118,101,114,115,32,115,117,112,112,111,114,116,32,116,104,105,115,32,99,111,110,116,114,111,108,32,102,101,97,116,117,114,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,48,46,46,50,53,53,44,32,111,114,32,97,32,98,105,110,97,114,121,44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,116,104,101,32,114,101,116,117,114,110,101,100,32,100,97,116,97,32,97,108,115,111,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,111,112,101,110,32,112,111,114,116,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,99,97,110,110,111,116,32,102,105,116,32,105,110,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,110,99,104,114,111,110,111,117,115,32,99,111,110,116,114,111,108,32,111,112,101,114,97,116,105,111,110,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,115,111,32,100,101,99,105,100,101,115,32,102,111,114,32,97,110,121,32,114,101,97,115,111,110,32,40,112,114,111,98,97,98,108,121,32,115,111,109,101,116,104,105,110,103,32,119,114,111,110,103,32,119,105,116,104,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<41,46>>,{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,99,97,108,108,32>>,{code,[],[<<112,111,114,116,95,99,111,110,116,114,111,108,47,51>>]},<<32,119,105,116,104,32,97,110,32,117,110,107,110,111,119,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,101,120,112,101,99,116,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,115,117,112,112,108,105,101,100,32,97,114,103,117,109,101,110,116,115,46>>]}]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,49,51,56>>,signature => [{attribute,3567,spec,{{port_control,3},[{type,3567,bounded_fun,[{type,3567,'fun',[{type,3567,product,[{var,3567,'Port'},{var,3567,'Operation'},{var,3567,'Data'}]},{type,3567,union,[{type,3567,iodata,[]},{type,3567,binary,[]}]}]},[{type,3568,constraint,[{atom,3568,is_subtype},[{var,3568,'Port'},{type,3568,union,[{type,3568,port,[]},{type,3568,atom,[]}]}]]},{type,3569,constraint,[{atom,3569,is_subtype},[{var,3569,'Operation'},{type,3569,integer,[]}]]},{type,3570,constraint,[{atom,3570,is_subtype},[{var,3570,'Data'},{type,3570,iodata,[]}]]}]]}]}}]}},{{function,port_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3608}],[<<112,111,114,116,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,116,117,112,108,101,115,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,111,112,101,110,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,110,100,32,97,108,108,32,116,104,101,32,116,117,112,108,101,115,32,97,114,101,32,110,111,116,32,109,97,110,100,97,116,111,114,121,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,49>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<84,104,101,32,114,101,115,117,108,116,32,99,111,110,116,97,105,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32>>,{code,[],[<<73,116,101,109>>]},<<115,58>>]},{ul,[],[{li,[],[{code,[],[<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,40,105,102,32,116,104,101,32,112,111,114,116,32,104,97,115,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,41>>]},{li,[],[{code,[],[<<105,100>>]}]},{li,[],[{code,[],[<<99,111,110,110,101,99,116,101,100>>]}]},{li,[],[{code,[],[<<108,105,110,107,115>>]}]},{li,[],[{code,[],[<<110,97,109,101>>]}]},{li,[],[{code,[],[<<105,110,112,117,116>>]}]},{li,[],[{code,[],[<<111,117,116,112,117,116>>]}]}]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,105,102,102,101,114,101,110,116,32>>,{code,[],[<<73,116,101,109>>]},<<115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,111,114,116,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,49,56,50>>,signature => [{attribute,3608,spec,{{erlang,port_info,1},[{type,3608,bounded_fun,[{type,3608,'fun',[{type,3608,product,[{var,3608,'Port'}]},{var,3608,'Result'}]},[{type,3609,constraint,[{atom,3609,is_subtype},[{var,3609,'Port'},{type,3609,union,[{type,3609,port,[]},{type,3609,atom,[]}]}]]},{type,3610,constraint,[{atom,3610,is_subtype},[{var,3610,'ResultItem'},{type,3610,union,[{type,3610,tuple,[{atom,3610,registered_name},{ann_type,3610,[{var,3610,'RegisteredName'},{type,3610,atom,[]}]}]},{type,3611,tuple,[{atom,3611,id},{ann_type,3611,[{var,3611,'Index'},{type,3611,non_neg_integer,[]}]}]},{type,3612,tuple,[{atom,3612,connected},{ann_type,3612,[{var,3612,'Pid'},{type,3612,pid,[]}]}]},{type,3613,tuple,[{atom,3613,links},{ann_type,3613,[{var,3613,'Pids'},{type,3613,list,[{type,3613,pid,[]}]}]}]},{type,3614,tuple,[{atom,3614,name},{ann_type,3614,[{var,3614,'String'},{type,3614,string,[]}]}]},{type,3615,tuple,[{atom,3615,input},{ann_type,3615,[{var,3615,'Bytes'},{type,3615,non_neg_integer,[]}]}]},{type,3616,tuple,[{atom,3616,output},{ann_type,3616,[{var,3616,'Bytes'},{type,3616,non_neg_integer,[]}]}]},{type,3617,tuple,[{atom,3617,os_pid},{ann_type,3617,[{var,3617,'OsPid'},{type,3617,union,[{type,3617,non_neg_integer,[]},{atom,3617,undefined}]}]}]}]}]]},{type,3618,constraint,[{atom,3618,is_subtype},[{var,3618,'Result'},{type,3618,union,[{type,3618,list,[{var,3618,'ResultItem'}]},{atom,3618,undefined}]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,50,49,51>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3629,bounded_fun,[{type,3629,'fun',[{type,3629,product,[{var,3629,'Port'},{atom,3629,connected}]},{type,3629,union,[{type,3629,tuple,[{atom,3629,connected},{var,3629,'Pid'}]},{atom,3629,undefined}]}]},[{type,3630,constraint,[{atom,3630,is_subtype},[{var,3630,'Port'},{type,3630,union,[{type,3630,port,[]},{type,3630,atom,[]}]}]]},{type,3631,constraint,[{atom,3631,is_subtype},[{var,3631,'Pid'},{type,3631,pid,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<73,110,100,101,120>>]},<<32,105,115,32,116,104,101,32,105,110,116,101,114,110,97,108,32,105,110,100,101,120,32,111,102,32,116,104,101,32,112,111,114,116,46,32,84,104,105,115,32,105,110,100,101,120,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,115,101,112,97,114,97,116,101,32,112,111,114,116,115,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,50,50,57>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3632,bounded_fun,[{type,3632,'fun',[{type,3632,product,[{var,3632,'Port'},{atom,3632,id}]},{type,3632,union,[{type,3632,tuple,[{atom,3632,id},{var,3632,'Index'}]},{atom,3632,undefined}]}]},[{type,3633,constraint,[{atom,3633,is_subtype},[{var,3633,'Port'},{type,3633,union,[{type,3633,port,[]},{type,3633,atom,[]}]}]]},{type,3634,constraint,[{atom,3634,is_subtype},[{var,3634,'Index'},{type,3634,non_neg_integer,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,50,52,53>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3635,bounded_fun,[{type,3635,'fun',[{type,3635,product,[{var,3635,'Port'},{atom,3635,input}]},{type,3635,union,[{type,3635,tuple,[{atom,3635,input},{var,3635,'Bytes'}]},{atom,3635,undefined}]}]},[{type,3636,constraint,[{atom,3636,is_subtype},[{var,3636,'Port'},{type,3636,union,[{type,3636,port,[]},{type,3636,atom,[]}]}]]},{type,3637,constraint,[{atom,3637,is_subtype},[{var,3637,'Bytes'},{type,3637,non_neg_integer,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<80,105,100,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,116,104,101,32,112,111,114,116,32,105,115,32,108,105,110,107,101,100,32,116,111,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,50,54,49>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3638,bounded_fun,[{type,3638,'fun',[{type,3638,product,[{var,3638,'Port'},{atom,3638,links}]},{type,3638,union,[{type,3638,tuple,[{atom,3638,links},{var,3638,'Pids'}]},{atom,3638,undefined}]}]},[{type,3639,constraint,[{atom,3639,is_subtype},[{var,3639,'Port'},{type,3639,union,[{type,3639,port,[]},{type,3639,atom,[]}]}]]},{type,3640,constraint,[{atom,3640,is_subtype},[{var,3640,'Pids'},{type,3640,list,[{type,3640,pid,[]}]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<76,111,99,107,105,110,103>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{code,[],[<<112,111,114,116,95,108,101,118,101,108>>]},<<32,40,112,111,114,116,45,115,112,101,99,105,102,105,99,32,108,111,99,107,105,110,103,41>>]},{li,[],[{code,[],[<<100,114,105,118,101,114,95,108,101,118,101,108>>]},<<32,40,100,114,105,118,101,114,45,115,112,101,99,105,102,105,99,32,108,111,99,107,105,110,103,41>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,115,101,32,114,101,115,117,108,116,115,32,97,114,101,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,115,112,101,99,105,102,105,99,32,97,110,100,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,50,55,55>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3641,bounded_fun,[{type,3641,'fun',[{type,3641,product,[{var,3641,'Port'},{atom,3641,locking}]},{type,3641,union,[{type,3641,tuple,[{atom,3641,locking},{var,3641,'Locking'}]},{atom,3641,undefined}]}]},[{type,3642,constraint,[{atom,3642,is_subtype},[{var,3642,'Port'},{type,3642,union,[{type,3642,port,[]},{type,3642,atom,[]}]}]]},{type,3643,constraint,[{atom,3643,is_subtype},[{var,3643,'Locking'},{type,3643,union,[{atom,3643,false},{atom,3643,port_level},{atom,3643,driver_level}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{a,[{id,<<112,111,114,116,95,105,110,102,111,95,109,101,109,111,114,121>>}],[]},{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,116,104,105,115,32,112,111,114,116,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,101,32,112,111,114,116,32,105,116,115,101,108,102,32,99,97,110,32,104,97,118,101,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,116,104,97,116,32,105,115,32,110,111,116,32,105,110,99,108,117,100,101,100,32,105,110,32>>,{code,[],[<<66,121,116,101,115>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,50,57,56>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3644,bounded_fun,[{type,3644,'fun',[{type,3644,product,[{var,3644,'Port'},{atom,3644,memory}]},{type,3644,union,[{type,3644,tuple,[{atom,3644,memory},{var,3644,'Bytes'}]},{atom,3644,undefined}]}]},[{type,3645,constraint,[{atom,3645,is_subtype},[{var,3645,'Port'},{type,3645,union,[{type,3645,port,[]},{type,3645,atom,[]}]}]]},{type,3646,constraint,[{atom,3646,is_subtype},[{var,3646,'Bytes'},{type,3646,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<77,111,110,105,116,111,114,115>>]},<<32,114,101,112,114,101,115,101,110,116,32,112,114,111,99,101,115,115,101,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,116,104,105,115,32,112,111,114,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,49,55>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3647,bounded_fun,[{type,3647,'fun',[{type,3647,product,[{var,3647,'Port'},{atom,3647,monitors}]},{type,3647,union,[{type,3647,tuple,[{atom,3647,monitors},{var,3647,'Monitors'}]},{atom,3647,undefined}]}]},[{type,3648,constraint,[{atom,3648,is_subtype},[{var,3648,'Port'},{type,3648,union,[{type,3648,port,[]},{type,3648,atom,[]}]}]]},{type,3649,constraint,[{atom,3649,is_subtype},[{var,3649,'Monitors'},{type,3649,list,[{type,3649,tuple,[{atom,3649,process},{type,3649,pid,[]}]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,108,105,115,116,32,111,102,32,112,105,100,115,32,116,104,97,116,32,97,114,101,32,109,111,110,105,116,111,114,105,110,103,32,103,105,118,101,110,32,112,111,114,116,32,97,116,32,116,104,101,32,109,111,109,101,110,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,51,51>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3650,bounded_fun,[{type,3650,'fun',[{type,3650,product,[{var,3650,'Port'},{atom,3650,monitored_by}]},{type,3650,union,[{type,3650,tuple,[{atom,3650,monitored_by},{var,3650,'MonitoredBy'}]},{atom,3650,undefined}]}]},[{type,3651,constraint,[{atom,3651,is_subtype},[{var,3651,'Port'},{type,3651,union,[{type,3651,port,[]},{type,3651,atom,[]}]}]]},{type,3652,constraint,[{atom,3652,is_subtype},[{var,3652,'MonitoredBy'},{type,3652,list,[{type,3652,pid,[]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,99,111,109,109,97,110,100,32,110,97,109,101,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,95,112,111,114,116,47,50>>]}]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,52,57>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3653,bounded_fun,[{type,3653,'fun',[{type,3653,product,[{var,3653,'Port'},{atom,3653,name}]},{type,3653,union,[{type,3653,tuple,[{atom,3653,name},{var,3653,'Name'}]},{atom,3653,undefined}]}]},[{type,3654,constraint,[{atom,3654,is_subtype},[{var,3654,'Port'},{type,3654,union,[{type,3654,port,[]},{type,3654,atom,[]}]}]]},{type,3655,constraint,[{atom,3655,is_subtype},[{var,3655,'Name'},{type,3655,string,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<79,115,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,111,114,32,101,113,117,105,118,97,108,101,110,116,41,32,111,102,32,97,110,32,79,83,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,95,112,111,114,116,40,123,115,112,97,119,110,32,124,32,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,67,111,109,109,97,110,100,125,44,32,79,112,116,105,111,110,115,41>>]}]},<<46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,112,97,119,110,105,110,103,32,97,110,32,79,83,32,112,114,111,99,101,115,115,44,32,116,104,101,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,54,53>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3656,bounded_fun,[{type,3656,'fun',[{type,3656,product,[{var,3656,'Port'},{atom,3656,os_pid}]},{type,3656,union,[{type,3656,tuple,[{atom,3656,os_pid},{var,3656,'OsPid'}]},{atom,3656,undefined}]}]},[{type,3657,constraint,[{atom,3657,is_subtype},[{var,3657,'Port'},{type,3657,union,[{type,3657,port,[]},{type,3657,atom,[]}]}]]},{type,3658,constraint,[{atom,3658,is_subtype},[{var,3658,'OsPid'},{type,3658,union,[{type,3658,non_neg_integer,[]},{atom,3658,undefined}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,119,114,105,116,116,101,110,32,116,111,32,116,104,101,32,112,111,114,116,32,102,114,111,109,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,111,114,116,95,99,111,109,109,97,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,111,114,116,95,99,111,109,109,97,110,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,51>>]}]},<<44,32,111,114,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,56,52>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3659,bounded_fun,[{type,3659,'fun',[{type,3659,product,[{var,3659,'Port'},{atom,3659,output}]},{type,3659,union,[{type,3659,tuple,[{atom,3659,output},{var,3659,'Bytes'}]},{atom,3659,undefined}]}]},[{type,3660,constraint,[{atom,3660,is_subtype},[{var,3660,'Port'},{type,3660,union,[{type,3660,port,[]},{type,3660,atom,[]}]}]]},{type,3661,constraint,[{atom,3661,is_subtype},[{var,3661,'Bytes'},{type,3661,non_neg_integer,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,111,111,108,101,97,110>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,112,111,114,116,32,112,97,114,97,108,108,101,108,105,115,109,32,104,105,110,116,32,117,115,101,100,32,98,121,32,116,104,105,115,32,112,111,114,116,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,111,112,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,97,114,97,108,108,101,108,105,115,109>>]}]},<<32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,95,112,111,114,116,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,48,51>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3662,bounded_fun,[{type,3662,'fun',[{type,3662,product,[{var,3662,'Port'},{atom,3662,parallelism}]},{type,3662,union,[{type,3662,tuple,[{atom,3662,parallelism},{var,3662,'Boolean'}]},{atom,3662,undefined}]}]},[{type,3663,constraint,[{atom,3663,is_subtype},[{var,3663,'Port'},{type,3663,union,[{type,3663,port,[]},{type,3663,atom,[]}]}]]},{type,3664,constraint,[{atom,3664,is_subtype},[{var,3664,'Boolean'},{type,3664,boolean,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,113,117,101,117,101,100,32,98,121,32,116,104,101,32,112,111,114,116,32,117,115,105,110,103,32,116,104,101,32,69,82,84,83,32,100,114,105,118,101,114,32,113,117,101,117,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,49,52>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3665,bounded_fun,[{type,3665,'fun',[{type,3665,product,[{var,3665,'Port'},{atom,3665,queue_size}]},{type,3665,union,[{type,3665,tuple,[{atom,3665,queue_size},{var,3665,'Bytes'}]},{atom,3665,undefined}]}]},[{type,3666,constraint,[{atom,3666,is_subtype},[{var,3666,'Port'},{type,3666,union,[{type,3666,port,[]},{type,3666,atom,[]}]}]]},{type,3667,constraint,[{atom,3667,is_subtype},[{var,3667,'Bytes'},{type,3667,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3629}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,116,104,101,32,112,111,114,116,46,32,73,102,32,116,104,101,32,112,111,114,116,32,104,97,115,32,110,111,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,51,49>>,signature => [{attribute,3629,spec,{{erlang,port_info,2},[{type,3668,bounded_fun,[{type,3668,'fun',[{type,3668,product,[{var,3668,'Port'},{atom,3668,registered_name}]},{type,3668,union,[{type,3668,tuple,[{atom,3668,registered_name},{var,3668,'RegisteredName'}]},{type,3668,nil,[]},{atom,3668,undefined}]}]},[{type,3669,constraint,[{atom,3669,is_subtype},[{var,3669,'Port'},{type,3669,union,[{type,3669,port,[]},{type,3669,atom,[]}]}]]},{type,3670,constraint,[{atom,3670,is_subtype},[{var,3670,'RegisteredName'},{type,3670,atom,[]}]]}]]}]}}]}},{{function,port_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1506}],[<<112,111,114,116,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32>>,{code,[],[<<80,111,114,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,52,56>>,signature => [{attribute,1506,spec,{{port_to_list,1},[{type,1506,bounded_fun,[{type,1506,'fun',[{type,1506,product,[{var,1506,'Port'}]},{type,1506,string,[]}]},[{type,1507,constraint,[{atom,1507,is_subtype},[{var,1507,'Port'},{type,1507,port,[]}]]}]]}]}}]}},{{function,ports,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1512}],[<<112,111,114,116,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,97,108,108,32,116,104,101,32,112,111,114,116,115,32,101,120,105,115,116,105,110,103,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,32,101,120,105,116,105,110,103,32,112,111,114,116,32,101,120,105,115,116,115,44,32,98,117,116,32,105,115,32,110,111,116,32,111,112,101,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,53,55>>,signature => [{attribute,1512,spec,{{erlang,ports,0},[{type,1512,'fun',[{type,1512,product,[]},{type,1512,list,[{type,1512,port,[]}]}]}]}}]}},{{function,pre_loaded,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1658}],[<<112,114,101,95,108,111,97,100,101,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,69,114,108,97,110,103,32,109,111,100,117,108,101,115,32,116,104,97,116,32,97,114,101,32,112,114,101,108,111,97,100,101,100,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,65,115,32,97,108,108,32,108,111,97,100,105,110,103,32,111,102,32,99,111,100,101,32,105,115,32,100,111,110,101,32,116,104,114,111,117,103,104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,44,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,109,117,115,116,32,104,97,118,101,32,98,101,101,110,32,108,111,97,100,101,100,32,112,114,101,118,105,111,117,115,108,121,46,32,72,101,110,99,101,44,32,97,116,32,108,101,97,115,116,32,116,104,101,32,109,111,100,117,108,101,32>>,{code,[],[<<105,110,105,116>>]},<<32,109,117,115,116,32,98,101,32,112,114,101,108,111,97,100,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,54,55>>,signature => [{attribute,1658,spec,{{pre_loaded,0},[{type,1658,'fun',[{type,1658,product,[]},{type,1658,list,[{type,1658,module,[]}]}]}]}}]}},{{function,process_display,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1663}],[<<112,114,111,99,101,115,115,95,100,105,115,112,108,97,121,47,50>>],#{<<101,110>> => [{p,[],[<<87,114,105,116,101,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<32,111,110,32,115,116,97,110,100,97,114,100,32,101,114,114,111,114,46,32,84,104,101,32,111,110,108,121,32,97,108,108,111,119,101,100,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<98,97,99,107,116,114,97,99,101>>]},<<44,32,119,104,105,99,104,32,115,104,111,119,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,44,32,105,110,99,108,117,100,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,97,108,108,32,99,104,97,105,110,44,32,119,105,116,104,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,112,114,105,110,116,101,100,32,102,105,114,115,116,46,32,84,104,101,32,102,111,114,109,97,116,32,111,102,32,116,104,101,32,111,117,116,112,117,116,32,105,115,32,110,111,116,32,102,117,114,116,104,101,114,32,100,101,102,105,110,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,55,56>>,signature => [{attribute,1663,spec,{{erlang,process_display,2},[{type,1663,bounded_fun,[{type,1663,'fun',[{type,1663,product,[{var,1663,'Pid'},{var,1663,'Type'}]},{atom,1663,true}]},[{type,1664,constraint,[{atom,1664,is_subtype},[{var,1664,'Pid'},{type,1664,pid,[]}]]},{type,1665,constraint,[{atom,1665,is_subtype},[{var,1665,'Type'},{atom,1665,backtrace}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<87,104,101,110,32>>,{code,[],[<<116,114,97,112,95,101,120,105,116>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,101,120,105,116,32,115,105,103,110,97,108,115,32,97,114,114,105,118,105,110,103,32,116,111,32,97,32,112,114,111,99,101,115,115,32,97,114,101,32,99,111,110,118,101,114,116,101,100,32,116,111,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,82,101,97,115,111,110,125>>]},<<32,109,101,115,115,97,103,101,115,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,114,101,99,101,105,118,101,100,32,97,115,32,111,114,100,105,110,97,114,121,32,109,101,115,115,97,103,101,115,46,32,73,102,32>>,{code,[],[<<116,114,97,112,95,101,120,105,116>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,32,105,102,32,105,116,32,114,101,99,101,105,118,101,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,111,116,104,101,114,32,116,104,97,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,110,100,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,112,114,111,112,97,103,97,116,101,100,32,116,111,32,105,116,115,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,46,32,65,112,112,108,105,99,97,116,105,111,110,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,110,111,114,109,97,108,108,121,32,110,111,116,32,116,111,32,116,114,97,112,32,101,120,105,116,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,120,105,116,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,57,50>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2356,bounded_fun,[{type,2356,'fun',[{type,2356,product,[{atom,2356,trap_exit},{var,2356,'Boolean'}]},{var,2356,'OldBoolean'}]},[{type,2357,constraint,[{atom,2357,is_subtype},[{var,2357,'Boolean'},{type,2357,boolean,[]}]]},{type,2358,constraint,[{atom,2358,is_subtype},[{var,2358,'OldBoolean'},{type,2358,boolean,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<85,115,101,100,32,98,121,32,97,32,112,114,111,99,101,115,115,32,116,111,32,114,101,100,101,102,105,110,101,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,102,111,114,32,117,110,100,101,102,105,110,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,110,100,32,117,110,100,101,102,105,110,101,100,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,101,115,46,32,73,110,101,120,112,101,114,105,101,110,99,101,100,32,117,115,101,114,115,32,97,114,101,32,110,111,116,32,116,111,32,117,115,101,32,116,104,105,115,32,102,108,97,103,44,32,97,115,32,99,111,100,101,32,97,117,116,111,45,108,111,97,100,105,110,103,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,99,111,114,114,101,99,116,32,111,112,101,114,97,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103,32,109,111,100,117,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,48,57>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2359,bounded_fun,[{type,2359,'fun',[{type,2359,product,[{atom,2359,error_handler},{var,2359,'Module'}]},{var,2359,'OldModule'}]},[{type,2360,constraint,[{atom,2360,is_subtype},[{var,2360,'Module'},{type,2360,atom,[]}]]},{type,2361,constraint,[{atom,2361,is_subtype},[{var,2361,'OldModule'},{type,2361,atom,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,50,51>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2362,bounded_fun,[{type,2362,'fun',[{type,2362,product,[{atom,2362,min_heap_size},{var,2362,'MinHeapSize'}]},{var,2362,'OldMinHeapSize'}]},[{type,2363,constraint,[{atom,2363,is_subtype},[{var,2363,'MinHeapSize'},{type,2363,non_neg_integer,[]}]]},{type,2364,constraint,[{atom,2364,is_subtype},[{var,2364,'OldMinHeapSize'},{type,2364,non_neg_integer,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,51,52>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2365,bounded_fun,[{type,2365,'fun',[{type,2365,product,[{atom,2365,min_bin_vheap_size},{var,2365,'MinBinVHeapSize'}]},{var,2365,'OldMinBinVHeapSize'}]},[{type,2366,constraint,[{atom,2366,is_subtype},[{var,2366,'MinBinVHeapSize'},{type,2366,non_neg_integer,[]}]]},{type,2367,constraint,[{atom,2367,is_subtype},[{var,2367,'OldMinBinVHeapSize'},{type,2367,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,51,66,48,52>>}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]}]},{p,[],[<<84,104,105,115,32,102,108,97,103,32,115,101,116,115,32,116,104,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<77,97,120,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<107,105,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,114,111,114,95,108,111,103,103,101,114>>]},<<32,97,114,101,32,117,115,101,100,46>>]},{dl,[],[{dt,[],[{code,[],[<<115,105,122,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,115,105,122,101,32,105,110,32,119,111,114,100,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,73,102,32,115,101,116,32,116,111,32,122,101,114,111,44,32,116,104,101,32,104,101,97,112,32,115,105,122,101,32,108,105,109,105,116,32,105,115,32,100,105,115,97,98,108,101,100,46,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,115,32,98,101,32,116,104,114,111,119,110,32,105,102,32,116,104,101,32,118,97,108,117,101,32,105,115,32,115,109,97,108,108,101,114,32,116,104,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,105,110,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]}]},<<46,32,84,104,101,32,115,105,122,101,32,99,104,101,99,107,32,105,115,32,111,110,108,121,32,100,111,110,101,32,119,104,101,110,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,116,114,105,103,103,101,114,101,100,46>>]},{p,[],[{code,[],[<<115,105,122,101>>]},<<32,105,115,32,116,104,101,32,101,110,116,105,114,101,32,104,101,97,112,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,119,104,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,116,114,105,103,103,101,114,101,100,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,32,97,108,108,32,103,101,110,101,114,97,116,105,111,110,97,108,32,104,101,97,112,115,44,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,44,32,97,110,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<109,101,115,115,97,103,101,115,32,116,104,97,116,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,104,101,97,112>>]},<<44,32,97,110,100,32,97,110,121,32,101,120,116,114,97,32,109,101,109,111,114,121,32,116,104,97,116,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,111,114,32,110,101,101,100,115,32,100,117,114,105,110,103,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[{code,[],[<<115,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,95,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,112,114,111,99,101,115,115,95,105,110,102,111,40,80,105,100,44,32,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101,41>>]}]},<<44,32,111,114,32,98,121,32,97,100,100,105,110,103,32>>,{code,[],[<<104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<111,108,100,95,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<32,97,110,100,32>>,{code,[],[<<109,98,117,102,95,115,105,122,101>>]},<<32,102,114,111,109,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,112,114,111,99,101,115,115,95,105,110,102,111,40,80,105,100,44,32,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<107,105,108,108>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,101,110,100,115,32,97,110,32,117,110,116,114,97,112,112,97,98,108,101,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,102,32,116,104,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,105,115,32,114,101,97,99,104,101,100,46,32,84,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,116,104,97,116,32,116,114,105,103,103,101,114,101,100,32,116,104,101,32>>,{code,[],[<<107,105,108,108>>]},<<32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,100,44,32,105,110,115,116,101,97,100,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,32,97,115,32,115,111,111,110,32,97,115,32,112,111,115,115,105,98,108,101,46,32,87,104,101,110,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,110,111,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,44,32,105,110,115,116,101,97,100,32,105,116,32,99,111,110,116,105,110,117,101,115,32,101,120,101,99,117,116,105,110,103,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<107,105,108,108>>]},<<32,105,115,32,110,111,116,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,109,97,112,44,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,101,105,116,104,101,114,32,111,112,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<43,104,109,97,120,107>>]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<101,114,114,111,114,95,108,111,103,103,101,114>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,108,111,103,115,32,97,110,32,101,114,114,111,114,32,101,118,101,110,116,32,118,105,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,108,111,103,103,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,103,103,101,114>>]}]},<<44,32,99,111,110,116,97,105,110,105,110,103,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,119,104,101,110,32,116,104,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,105,115,32,114,101,97,99,104,101,100,46,32,79,110,101,32,108,111,103,32,101,118,101,110,116,32,105,115,32,115,101,110,116,32,101,97,99,104,32,116,105,109,101,32,116,104,101,32,108,105,109,105,116,32,105,115,32,114,101,97,99,104,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<101,114,114,111,114,95,108,111,103,103,101,114>>]},<<32,105,115,32,110,111,116,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,109,97,112,44,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,105,115,32,117,115,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,101,105,116,104,101,114,32,116,104,101,32,111,112,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<43,104,109,97,120,101,108>>]},<<32,105,110,116,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46>>]}]}]},{p,[],[<<84,104,101,32,104,101,97,112,32,115,105,122,101,32,111,102,32,97,32,112,114,111,99,101,115,115,32,105,115,32,113,117,105,116,101,32,104,97,114,100,32,116,111,32,112,114,101,100,105,99,116,44,32,101,115,112,101,99,105,97,108,108,121,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,116,104,97,116,32,105,115,32,117,115,101,100,32,100,117,114,105,110,103,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,104,101,110,32,99,111,110,116,101,109,112,108,97,116,105,110,103,32,117,115,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,102,105,114,115,116,32,114,117,110,32,105,116,32,105,110,32,112,114,111,100,117,99,116,105,111,110,32,119,105,116,104,32>>,{code,[],[<<107,105,108,108>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,97,110,100,32,105,110,115,112,101,99,116,32,116,104,101,32,108,111,103,32,101,118,101,110,116,115,32,116,111,32,115,101,101,32,119,104,97,116,32,116,104,101,32,110,111,114,109,97,108,32,112,101,97,107,32,115,105,122,101,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,105,115,32,97,110,100,32,116,104,101,110,32,116,117,110,101,32,116,104,101,32,118,97,108,117,101,32,97,99,99,111,114,100,105,110,103,108,121,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,52,53>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2368,bounded_fun,[{type,2368,'fun',[{type,2368,product,[{atom,2368,max_heap_size},{var,2368,'MaxHeapSize'}]},{var,2368,'OldMaxHeapSize'}]},[{type,2369,constraint,[{atom,2369,is_subtype},[{var,2369,'MaxHeapSize'},{user_type,2369,max_heap_size,[]}]]},{type,2370,constraint,[{atom,2370,is_subtype},[{var,2370,'OldMaxHeapSize'},{user_type,2370,max_heap_size,[]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]}]},{p,[],[<<84,104,105,115,32,102,108,97,103,32,100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,114,101,32,115,116,111,114,101,100,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<111,102,102,95,104,101,97,112>>]}]},{dd,[],[{p,[],[{em,[],[<<65,108,108>>]},<<32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,98,101,32,115,116,111,114,101,100,32,111,117,116,115,105,100,101,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,104,101,97,112,46,32,84,104,105,115,32,105,109,112,108,105,101,115,32,116,104,97,116,32>>,{em,[],[<<110,111>>]},<<32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,98,101,32,112,97,114,116,32,111,102,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<111,110,95,104,101,97,112>>]}]},{dd,[],[{p,[],[<<65,108,108,32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,101,118,101,110,116,117,97,108,108,121,32,98,101,32,112,108,97,99,101,100,32,111,110,32,104,101,97,112,46,32,84,104,101,121,32,99,97,110,32,104,111,119,101,118,101,114,32,116,101,109,112,111,114,97,114,105,108,121,32,98,101,32,115,116,111,114,101,100,32,111,102,102,32,104,101,97,112,46,32,84,104,105,115,32,105,115,32,104,111,119,32,109,101,115,115,97,103,101,115,32,97,108,119,97,121,115,32,104,97,118,101,32,98,101,101,110,32,115,116,111,114,101,100,32,117,112,32,117,110,116,105,108,32,69,82,84,83,32,56,46,48,46>>]}]}]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,113,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,113,100>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,112,111,116,101,110,116,105,97,108,108,121,32,99,97,110,32,103,101,116,32,109,97,110,121,32,109,101,115,115,97,103,101,115,32,105,110,32,105,116,115,32,113,117,101,117,101,44,32,121,111,117,32,97,114,101,32,97,100,118,105,115,101,100,32,116,111,32,115,101,116,32,116,104,101,32,102,108,97,103,32,116,111,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<46,32,84,104,105,115,32,98,101,99,97,117,115,101,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,119,105,116,104,32,109,97,110,121,32,109,101,115,115,97,103,101,115,32,112,108,97,99,101,100,32,111,110,32,116,104,101,32,104,101,97,112,32,99,97,110,32,98,101,99,111,109,101,32,101,120,116,114,101,109,101,108,121,32,101,120,112,101,110,115,105,118,101,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,110,32,99,111,110,115,117,109,101,32,108,97,114,103,101,32,97,109,111,117,110,116,115,32,111,102,32,109,101,109,111,114,121,46,32,80,101,114,102,111,114,109,97,110,99,101,32,111,102,32,116,104,101,32,97,99,116,117,97,108,32,109,101,115,115,97,103,101,32,112,97,115,115,105,110,103,32,105,115,32,104,111,119,101,118,101,114,32,103,101,110,101,114,97,108,108,121,32,98,101,116,116,101,114,32,119,104,101,110,32,110,111,116,32,117,115,105,110,103,32,102,108,97,103,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<46>>]},{p,[],[<<87,104,101,110,32,99,104,97,110,103,105,110,103,32,116,104,105,115,32,102,108,97,103,32,109,101,115,115,97,103,101,115,32,119,105,108,108,32,98,101,32,109,111,118,101,100,46,32,84,104,105,115,32,119,111,114,107,32,104,97,115,32,98,101,101,110,32,105,110,105,116,105,97,116,101,100,32,98,117,116,32,110,111,116,32,99,111,109,112,108,101,116,101,100,32,119,104,101,110,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,114,101,116,117,114,110,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,49,57>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2371,bounded_fun,[{type,2371,'fun',[{type,2371,product,[{atom,2371,message_queue_data},{var,2371,'MQD'}]},{var,2371,'OldMQD'}]},[{type,2372,constraint,[{atom,2372,is_subtype},[{var,2372,'MQD'},{user_type,2372,message_queue_data,[]}]]},{type,2373,constraint,[{atom,2373,is_subtype},[{var,2373,'OldMQD'},{user_type,2373,message_queue_data,[]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,112,114,105,111,114,105,116,121,46,32>>,{code,[],[<<76,101,118,101,108>>]},<<32,105,115,32,97,110,32,97,116,111,109,46,32,70,111,117,114,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,115,32,101,120,105,115,116,58,32>>,{code,[],[<<108,111,119>>]},<<44,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<44,32>>,{code,[],[<<104,105,103,104>>]},<<44,32,97,110,100,32>>,{code,[],[<<109,97,120>>]},<<46,32,68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<80,114,105,111,114,105,116,121,32,108,101,118,101,108,32>>,{code,[],[<<109,97,120>>]},<<32,105,115,32,114,101,115,101,114,118,101,100,32,102,111,114,32,105,110,116,101,114,110,97,108,32,117,115,101,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,44,32,97,110,100,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,116,111,32,98,101,32,117,115,101,100,32,98,121,32,111,116,104,101,114,115,46>>]}]},{p,[],[<<73,110,116,101,114,110,97,108,108,121,32,105,110,32,101,97,99,104,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,44,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,115,99,104,101,100,117,108,101,100,32,105,110,32,97,32,114,111,117,110,100,32,114,111,98,105,110,32,102,97,115,104,105,111,110,46>>]},{p,[],[<<69,120,101,99,117,116,105,111,110,32,111,102,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,110,100,32>>,{code,[],[<<108,111,119>>]},<<32,97,114,101,32,105,110,116,101,114,108,101,97,118,101,100,46,32,80,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<32,97,114,101,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,32,108,101,115,115,32,102,114,101,113,117,101,110,116,108,121,32,116,104,97,110,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{p,[],[<<87,104,101,110,32,114,117,110,110,97,98,108,101,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<32,101,120,105,115,116,44,32,110,111,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<32,111,114,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,114,101,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,46,32,78,111,116,105,99,101,32,104,111,119,101,118,101,114,32,116,104,97,116,32,116,104,105,115,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,109,101,97,110,32,116,104,97,116,32,110,111,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<32,111,114,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,99,97,110,32,114,117,110,32,119,104,101,110,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,114,117,110,110,105,110,103,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<46,32,87,104,101,110,32,117,115,105,110,103,32,109,117,108,116,105,112,108,101,32,115,99,104,101,100,117,108,101,114,115,44,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,32,99,97,110,32,98,101,32,114,117,110,110,105,110,103,32,105,110,32,112,97,114,97,108,108,101,108,32,116,104,97,110,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<46,32,84,104,97,116,32,105,115,44,32,97,32>>,{code,[],[<<108,111,119>>]},<<32,97,110,100,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,99,97,110,32,101,120,101,99,117,116,101,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,46>>]},{p,[],[<<87,104,101,110,32,114,117,110,110,97,98,108,101,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<109,97,120>>]},<<32,101,120,105,115,116,44,32,110,111,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<44,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<44,32,111,114,32>>,{code,[],[<<104,105,103,104>>]},<<32,97,114,101,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,46,32,65,115,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<44,32,112,114,111,99,101,115,115,101,115,32,111,110,32,108,111,119,101,114,32,112,114,105,111,114,105,116,105,101,115,32,99,97,110,32,101,120,101,99,117,116,101,32,105,110,32,112,97,114,97,108,108,101,108,32,119,105,116,104,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<109,97,120>>]},<<46>>]},{p,[],[<<83,99,104,101,100,117,108,105,110,103,32,105,115,32,112,114,101,45,101,109,112,116,105,118,101,46,32,82,101,103,97,114,100,108,101,115,115,32,111,102,32,112,114,105,111,114,105,116,121,44,32,97,32,112,114,111,99,101,115,115,32,105,115,32,112,114,101,45,101,109,112,116,101,100,32,119,104,101,110,32,105,116,32,104,97,115,32,99,111,110,115,117,109,101,100,32,109,111,114,101,32,116,104,97,110,32,97,32,99,101,114,116,97,105,110,32,110,117,109,98,101,114,32,111,102,32,114,101,100,117,99,116,105,111,110,115,32,115,105,110,99,101,32,116,104,101,32,108,97,115,116,32,116,105,109,101,32,105,116,32,119,97,115,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<68,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,115,99,104,101,100,117,108,105,110,103,32,116,111,32,114,101,109,97,105,110,32,101,120,97,99,116,108,121,32,97,115,32,105,116,32,105,115,32,116,111,100,97,121,46,32,83,99,104,101,100,117,108,105,110,103,32,105,115,32,108,105,107,101,108,121,32,116,111,32,98,101,32,99,104,97,110,103,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,32,116,111,32,117,115,101,32,97,118,97,105,108,97,98,108,101,32,112,114,111,99,101,115,115,111,114,32,99,111,114,101,115,32,98,101,116,116,101,114,46>>]}]},{p,[],[<<84,104,101,114,101,32,105,115,32>>,{em,[],[<<110,111>>]},<<32,97,117,116,111,109,97,116,105,99,32,109,101,99,104,97,110,105,115,109,32,102,111,114,32,97,118,111,105,100,105,110,103,32,112,114,105,111,114,105,116,121,32,105,110,118,101,114,115,105,111,110,44,32,115,117,99,104,32,97,115,32,112,114,105,111,114,105,116,121,32,105,110,104,101,114,105,116,97,110,99,101,32,111,114,32,112,114,105,111,114,105,116,121,32,99,101,105,108,105,110,103,115,46,32,87,104,101,110,32,117,115,105,110,103,32,112,114,105,111,114,105,116,105,101,115,44,32,116,97,107,101,32,116,104,105,115,32,105,110,116,111,32,97,99,99,111,117,110,116,32,97,110,100,32,104,97,110,100,108,101,32,115,117,99,104,32,115,99,101,110,97,114,105,111,115,32,98,121,32,121,111,117,114,115,101,108,102,46>>]},{p,[],[<<77,97,107,105,110,103,32,99,97,108,108,115,32,102,114,111,109,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,105,110,116,111,32,99,111,100,101,32,116,104,97,116,32,121,111,117,32,104,97,115,32,110,111,32,99,111,110,116,114,111,108,32,111,118,101,114,32,99,97,110,32,99,97,117,115,101,32,116,104,101,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,116,111,32,119,97,105,116,32,102,111,114,32,97,32,112,114,111,99,101,115,115,32,119,105,116,104,32,108,111,119,101,114,32,112,114,105,111,114,105,116,121,46,32,84,104,97,116,32,105,115,44,32,101,102,102,101,99,116,105,118,101,108,121,32,100,101,99,114,101,97,115,105,110,103,32,116,104,101,32,112,114,105,111,114,105,116,121,32,111,102,32,116,104,101,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,100,117,114,105,110,103,32,116,104,101,32,99,97,108,108,46,32,69,118,101,110,32,105,102,32,116,104,105,115,32,105,115,32,110,111,116,32,116,104,101,32,99,97,115,101,32,119,105,116,104,32,111,110,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,99,111,100,101,32,116,104,97,116,32,121,111,117,32,104,97,118,101,32,110,111,32,99,111,110,116,114,111,108,32,111,118,101,114,44,32,105,116,32,99,97,110,32,98,101,32,116,104,101,32,99,97,115,101,32,105,110,32,97,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,32,111,102,32,105,116,46,32,84,104,105,115,32,99,97,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,111,99,99,117,114,32,105,102,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,116,114,105,103,103,101,114,115,32,99,111,100,101,32,108,111,97,100,105,110,103,44,32,97,115,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,114,117,110,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{p,[],[<<79,116,104,101,114,32,112,114,105,111,114,105,116,105,101,115,32,116,104,97,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,114,101,32,110,111,114,109,97,108,108,121,32,110,111,116,32,110,101,101,100,101,100,46,32,87,104,101,110,32,111,116,104,101,114,32,112,114,105,111,114,105,116,105,101,115,32,97,114,101,32,117,115,101,100,44,32,117,115,101,32,116,104,101,109,32,119,105,116,104,32,99,97,114,101,44,32>>,{em,[],[<<101,115,112,101,99,105,97,108,108,121>>]},<<32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<46,32,65,32,112,114,111,99,101,115,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<32,105,115,32,111,110,108,121,32,116,111,32,112,101,114,102,111,114,109,32,119,111,114,107,32,102,111,114,32,115,104,111,114,116,32,112,101,114,105,111,100,115,46,32,66,117,115,121,32,108,111,111,112,105,110,103,32,102,111,114,32,108,111,110,103,32,112,101,114,105,111,100,115,32,105,110,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,99,97,117,115,101,115,32,109,111,115,116,32,108,105,107,101,108,121,32,112,114,111,98,108,101,109,115,44,32,97,115,32,105,109,112,111,114,116,97,110,116,32,79,84,80,32,115,101,114,118,101,114,115,32,114,117,110,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,54,49>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2374,bounded_fun,[{type,2374,'fun',[{type,2374,product,[{atom,2374,priority},{var,2374,'Level'}]},{var,2374,'OldLevel'}]},[{type,2375,constraint,[{atom,2375,is_subtype},[{var,2375,'Level'},{user_type,2375,priority_level,[]}]]},{type,2376,constraint,[{atom,2376,is_subtype},[{var,2376,'OldLevel'},{user_type,2376,priority_level,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<78>>]},<<32,109,117,115,116,32,98,101,32,97,110,32,105,110,116,101,103,101,114,32,105,110,32,116,104,101,32,105,110,116,101,114,118,97,108,32,48,46,46,49,48,48,48,48,46,32,73,102,32>>,{code,[],[<<78>>]},<<32,62,32,48,44,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,109,97,100,101,32,97,99,116,105,118,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<78>>]},<<32,109,111,115,116,32,114,101,99,101,110,116,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32,66,73,70,32,99,97,108,108,115,44,32,115,101,110,100,115,44,32,97,110,100,32,114,101,99,101,105,118,101,115,32,109,97,100,101,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,97,114,101,32,115,97,118,101,100,32,105,110,32,97,32,108,105,115,116,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,119,105,116,104,32>>,{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,40,80,105,100,44,32,108,97,115,116,95,99,97,108,108,115,41>>]},<<46,32,65,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,105,115,32,111,110,101,32,105,110,32,119,104,105,99,104,32,116,104,101,32,109,111,100,117,108,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,109,101,110,116,105,111,110,101,100,46,32,79,110,108,121,32,97,32,102,105,120,101,100,32,97,109,111,117,110,116,32,111,102,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,115,97,118,101,100,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{ul,[],[{li,[],[{p,[],[<<65,32,116,117,112,108,101,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<32,102,111,114,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115>>]}]},{li,[],[{p,[],[<<84,104,101,32,97,116,111,109,115,32>>,{code,[],[<<115,101,110,100>>]},<<44,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<44,32,97,110,100,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,102,111,114,32,115,101,110,100,115,32,97,110,100,32,114,101,99,101,105,118,101,115,32,40>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,119,104,101,110,32,97,32,109,101,115,115,97,103,101,32,105,115,32,114,101,99,101,105,118,101,100,32,97,110,100,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,119,104,101,110,32,97,32,114,101,99,101,105,118,101,32,116,105,109,101,115,32,111,117,116,41>>]}]}]},{p,[],[<<73,102,32>>,{code,[],[<<78>>]},<<32,61,32,48,44,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,100,105,115,97,98,108,101,100,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46,32,87,104,101,110,101,118,101,114,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,99,97,108,108,32,115,97,118,105,110,103,32,108,105,115,116,32,105,115,32,115,101,116,44,32,105,116,115,32,99,111,110,116,101,110,116,115,32,97,114,101,32,114,101,115,101,116,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,51,52>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2377,bounded_fun,[{type,2377,'fun',[{type,2377,product,[{atom,2377,save_calls},{var,2377,'N'}]},{var,2377,'OldN'}]},[{type,2378,constraint,[{atom,2378,is_subtype},[{var,2378,'N'},{type,2378,range,[{integer,2378,0},{integer,2378,10000}]}]]},{type,2379,constraint,[{atom,2379,is_subtype},[{var,2379,'OldN'},{type,2379,range,[{integer,2379,0},{integer,2379,10000}]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,111,114,32,99,108,101,97,114,115,32,102,108,97,103,32>>,{code,[],[<<115,101,110,115,105,116,105,118,101>>]},<<32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,46,32,87,104,101,110,32,97,32,112,114,111,99,101,115,115,32,104,97,115,32,98,101,101,110,32,109,97,114,107,101,100,32,97,115,32,115,101,110,115,105,116,105,118,101,32,98,121,32,99,97,108,108,105,110,103,32>>,{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,115,101,110,115,105,116,105,118,101,44,32,116,114,117,101,41>>]},<<44,32,102,101,97,116,117,114,101,115,32,105,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,101,120,97,109,105,110,105,110,103,32,116,104,101,32,100,97,116,97,32,111,114,32,105,110,110,101,114,32,119,111,114,107,105,110,103,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,97,114,101,32,115,105,108,101,110,116,108,121,32,100,105,115,97,98,108,101,100,46>>]},{p,[],[<<70,101,97,116,117,114,101,115,32,116,104,97,116,32,97,114,101,32,100,105,115,97,98,108,101,100,32,105,110,99,108,117,100,101,32,40,98,117,116,32,97,114,101,32,110,111,116,32,108,105,109,105,116,101,100,32,116,111,41,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{p,[],[<<84,114,97,99,105,110,103,46,32,84,114,97,99,101,32,102,108,97,103,115,32,99,97,110,32,115,116,105,108,108,32,98,101,32,115,101,116,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,98,117,116,32,110,111,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,111,102,32,97,110,121,32,107,105,110,100,32,97,114,101,32,103,101,110,101,114,97,116,101,100,46,32,40,73,102,32,102,108,97,103,32>>,{code,[],[<<115,101,110,115,105,116,105,118,101>>]},<<32,105,115,32,116,117,114,110,101,100,32,111,102,102,44,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,97,103,97,105,110,32,103,101,110,101,114,97,116,101,100,32,105,102,32,97,110,121,32,116,114,97,99,101,32,102,108,97,103,115,32,97,114,101,32,115,101,116,46,41>>]}]},{li,[],[{p,[],[<<83,101,113,117,101,110,116,105,97,108,32,116,114,97,99,105,110,103,46,32,84,104,101,32,115,101,113,117,101,110,116,105,97,108,32,116,114,97,99,101,32,116,111,107,101,110,32,105,115,32,112,114,111,112,97,103,97,116,101,100,32,97,115,32,117,115,117,97,108,44,32,98,117,116,32,110,111,32,115,101,113,117,101,110,116,105,97,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,103,101,110,101,114,97,116,101,100,46>>]}]}]},{p,[],[{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,49,44,50>>]},<<32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,32,116,111,32,114,101,97,100,32,111,117,116,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,40,98,111,116,104,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,101,109,112,116,121,32,108,105,115,116,115,41,46>>]},{p,[],[<<83,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,115,32,99,97,110,110,111,116,32,98,101,32,100,105,115,112,108,97,121,101,100,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,110,32,99,114,97,115,104,32,100,117,109,112,115,44,32,116,104,101,32,115,116,97,99,107,44,32,109,101,115,115,97,103,101,115,44,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,97,114,101,32,111,109,105,116,116,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<123,115,97,118,101,95,99,97,108,108,115,44,78,125>>]},<<32,104,97,115,32,98,101,101,110,32,115,101,116,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,110,111,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,114,101,32,115,97,118,101,100,32,116,111,32,116,104,101,32,99,97,108,108,32,115,97,118,105,110,103,32,108,105,115,116,46,32,40,84,104,101,32,99,97,108,108,32,115,97,118,105,110,103,32,108,105,115,116,32,105,115,32,110,111,116,32,99,108,101,97,114,101,100,46,32,65,108,115,111,44,32,115,101,110,100,44,32,114,101,99,101,105,118,101,44,32,97,110,100,32,116,105,109,101,45,111,117,116,32,101,118,101,110,116,115,32,97,114,101,32,115,116,105,108,108,32,97,100,100,101,100,32,116,111,32,116,104,101,32,108,105,115,116,46,41>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,54,53>>,signature => [{attribute,2356,spec,{{process_flag,2},[{type,2380,bounded_fun,[{type,2380,'fun',[{type,2380,product,[{atom,2380,sensitive},{var,2380,'Boolean'}]},{var,2380,'OldBoolean'}]},[{type,2381,constraint,[{atom,2381,is_subtype},[{var,2381,'Boolean'},{type,2381,boolean,[]}]]},{type,2382,constraint,[{atom,2382,is_subtype},[{var,2382,'OldBoolean'},{type,2382,boolean,[]}]]}]]}]}}]}},{{function,process_flag,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1685}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,99,101,114,116,97,105,110,32,102,108,97,103,115,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<44,32,105,110,32,116,104,101,32,115,97,109,101,32,109,97,110,110,101,114,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46,32,82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46,32,84,104,101,32,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<70,108,97,103>>]},<<32,97,114,101,32,111,110,108,121,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,111,115,101,32,97,108,108,111,119,101,100,32,105,110,32>>,{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]},<<44,32,110,97,109,101,108,121,32>>,{code,[],[<<115,97,118,101,95,99,97,108,108,115>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,57,57>>,signature => [{attribute,1685,spec,{{process_flag,3},[{type,1685,bounded_fun,[{type,1685,'fun',[{type,1685,product,[{var,1685,'Pid'},{var,1685,'Flag'},{var,1685,'Value'}]},{var,1685,'OldValue'}]},[{type,1686,constraint,[{atom,1686,is_subtype},[{var,1686,'Pid'},{type,1686,pid,[]}]]},{type,1687,constraint,[{atom,1687,is_subtype},[{var,1687,'Flag'},{atom,1687,save_calls}]]},{type,1688,constraint,[{atom,1688,is_subtype},[{var,1688,'Value'},{type,1688,non_neg_integer,[]}]]},{type,1689,constraint,[{atom,1689,is_subtype},[{var,1689,'OldValue'},{type,1689,non_neg_integer,[]}]]}]]}]}}]}},{{function,process_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1702}],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<112,114,111,99,101,115,115,95,105,110,102,111,95,114,101,115,117,108,116,95,105,116,101,109>>}],[]},{li,[{name,<<115,116,97,99,107,95,105,116,101,109>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,119,105,116,104,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]},{p,[],[<<84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,105,115,32,117,110,100,101,102,105,110,101,100,32,97,110,100,32,97,108,108,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,97,114,101,32,110,111,116,32,109,97,110,100,97,116,111,114,121,46,32,84,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,119,105,116,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,116,101,109,115,32,97,114,101,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,58>>]},{ul,[],[{li,[],[{code,[],[<<99,117,114,114,101,110,116,95,102,117,110,99,116,105,111,110>>]}]},{li,[],[{code,[],[<<105,110,105,116,105,97,108,95,99,97,108,108>>]}]},{li,[],[{code,[],[<<115,116,97,116,117,115>>]}]},{li,[],[{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,108,101,110>>]}]},{li,[],[{code,[],[<<108,105,110,107,115>>]}]},{li,[],[{code,[],[<<100,105,99,116,105,111,110,97,114,121>>]}]},{li,[],[{code,[],[<<116,114,97,112,95,101,120,105,116>>]}]},{li,[],[{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]}]},{li,[],[{code,[],[<<112,114,105,111,114,105,116,121>>]}]},{li,[],[{code,[],[<<103,114,111,117,112,95,108,101,97,100,101,114>>]}]},{li,[],[{code,[],[<<116,111,116,97,108,95,104,101,97,112,95,115,105,122,101>>]}]},{li,[],[{code,[],[<<104,101,97,112,95,115,105,122,101>>]}]},{li,[],[{code,[],[<<115,116,97,99,107,95,115,105,122,101>>]}]},{li,[],[{code,[],[<<114,101,100,117,99,116,105,111,110,115>>]}]},{li,[],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]}]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,104,97,115,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32,97,108,115,111,32,97,110,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,119,105,116,104,32,105,116,101,109,32>>,{code,[],[<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,105,115,32,105,110,99,108,117,100,101,100,46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,112,101,99,105,102,105,99,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,50>>]}]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32>>,{em,[],[<<100,101,98,117,103,103,105,110,103,32,111,110,108,121>>]},<<46,32,70,111,114,32,97,108,108,32,111,116,104,101,114,32,112,117,114,112,111,115,101,115,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,50>>]}]},<<46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,56,49,52>>,signature => [{attribute,1702,spec,{{process_info,1},[{type,1702,bounded_fun,[{type,1702,'fun',[{type,1702,product,[{var,1702,'Pid'}]},{var,1702,'Info'}]},[{type,1703,constraint,[{atom,1703,is_subtype},[{var,1703,'Pid'},{type,1703,pid,[]}]]},{type,1704,constraint,[{atom,1704,is_subtype},[{var,1704,'Info'},{type,1704,union,[{type,1704,list,[{var,1704,'InfoTuple'}]},{atom,1704,undefined}]}]]},{type,1705,constraint,[{atom,1705,is_subtype},[{var,1705,'InfoTuple'},{user_type,1705,process_info_result_item,[]}]]}]]}]}}]}},{{function,process_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2479}],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<112,114,111,99,101,115,115,95,105,110,102,111,95,105,116,101,109>>}],[]},{li,[{name,<<112,114,111,99,101,115,115,95,105,110,102,111,95,114,101,115,117,108,116,95,105,116,101,109>>}],[]},{li,[{name,<<115,116,97,99,107,95,105,116,101,109>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<32,111,114,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,108,105,118,101,32,97,110,100,32,97,32,115,105,110,103,108,101,32>>,{code,[],[<<73,116,101,109>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<44,32,117,110,108,101,115,115,32>>,{code,[],[<<73,116,101,109,32,61,58,61,32,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,110,111,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,105,115,32,115,116,114,97,110,103,101,32,98,101,104,97,118,105,111,114,32,105,115,32,98,101,99,97,117,115,101,32,111,102,32,104,105,115,116,111,114,105,99,97,108,32,114,101,97,115,111,110,115,44,32,97,110,100,32,105,115,32,107,101,112,116,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101,76,105,115,116>>]},<<46,32,84,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,105,110,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101,76,105,115,116>>]},<<32,97,114,101,32,105,110,99,108,117,100,101,100,32,119,105,116,104,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,105,110,32,116,104,101,32,115,97,109,101,32,111,114,100,101,114,32,97,115,32,116,104,101,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,119,101,114,101,32,105,110,99,108,117,100,101,100,32,105,110,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<46,32,86,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,99,97,110,32,98,101,32,105,110,99,108,117,100,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,105,110,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32>>,{code,[],[<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,105,115,32,112,97,114,116,32,111,102,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,110,111,32,110,97,109,101,32,114,101,103,105,115,116,101,114,101,100,44,32,97,32>>,{code,[],[<<123,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101,44,32,91,93,125>>]},<<44,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32>>,{em,[],[<<119,105,108,108>>]},<<32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101,76,105,115,116>>]},<<46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,105,115,32,100,105,102,102,101,114,101,110,116,32,119,104,101,110,32,97,32,115,105,110,103,108,101,32>>,{code,[],[<<73,116,101,109,32,61,58,61,32,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,97,110,100,32,119,104,101,110,32>>,{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,49>>]},<<32,105,115,32,117,115,101,100,46>>]}]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,119,105,116,104,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<73,116,101,109>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,98,97,99,107,116,114,97,99,101,44,32,66,105,110,125>>]}]},{dd,[],[{p,[],[<<66,105,110,97,114,121,32>>,{code,[],[<<66,105,110>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,115,32,116,104,101,32,111,117,116,112,117,116,32,102,114,111,109,32>>,{code,[],[<<101,114,108,97,110,103,58,112,114,111,99,101,115,115,95,100,105,115,112,108,97,121,40,80,105,100,44,32,98,97,99,107,116,114,97,99,101,41>>]},<<46,32,85,115,101,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,49>>]},<<32,116,111,32,111,98,116,97,105,110,32,116,104,101,32,115,116,114,105,110,103,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,98,105,110,97,114,121,46>>]}]},{dt,[],[{code,[],[<<123,98,105,110,97,114,121,44,32,66,105,110,73,110,102,111,125>>]}]},{dd,[],[{p,[],[{code,[],[<<66,105,110,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,98,105,110,97,114,105,101,115,32,111,110,32,116,104,101,32,104,101,97,112,32,111,102,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46,32,73,110,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32>>,{code,[],[<<66,105,110,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,46,32,84,104,101,32,116,117,112,108,101,115,32,99,111,110,116,97,105,110,59,32>>,{code,[],[<<66,105,110,97,114,121,73,100>>]},<<44,32>>,{code,[],[<<66,105,110,97,114,121,83,105,122,101>>]},<<44,32>>,{code,[],[<<66,105,110,97,114,121,82,101,102,99,67,111,117,110,116>>]},<<46>>]},{p,[],[<<84,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,105,115,32,111,110,32,116,104,101,32,104,101,97,112,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,99,97,116,99,104,108,101,118,101,108,44,32,67,97,116,99,104,76,101,118,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<67,97,116,99,104,76,101,118,101,108>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,99,117,114,114,101,110,116,108,121,32,97,99,116,105,118,101,32,99,97,116,99,104,101,115,32,105,110,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,114,101,110,116,95,102,117,110,99,116,105,111,110,44,32,123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125,32,124,32,117,110,100,101,102,105,110,101,100,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,101,32,118,97,108,117,101,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,99,117,114,114,101,110,116,108,121,32,101,120,101,99,117,116,105,110,103,32,110,97,116,105,118,101,32,99,111,109,112,105,108,101,100,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,114,101,110,116,95,108,111,99,97,116,105,111,110,44,32,123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,44,32,76,111,99,97,116,105,111,110,125,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,116,117,112,108,101,115,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,108,111,99,97,116,105,111,110,32,105,110,32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,114,101,110,116,95,115,116,97,99,107,116,114,97,99,101,44,32,83,116,97,99,107,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,99,97,108,108,32,115,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,32,40>>,{em,[],[<<115,116,97,99,107,116,114,97,99,101>>]},<<41,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,101,32,115,116,97,99,107,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,115,32,105,110,32,116,104,101,32>>,{code,[],[<<99,97,116,99,104>>]},<<32,112,97,114,116,32,111,102,32,97,32>>,{code,[],[<<116,114,121>>]},<<46,32,83,101,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115,35,115,116,97,99,107,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<84,104,101,32,99,97,108,108,45,115,116,97,99,107,32,98,97,99,107,32,116,114,97,99,101,32,40,115,116,97,99,107,116,114,97,99,101,41>>]},<<46,32,84,104,101,32,100,101,112,116,104,32,111,102,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,32,105,115,32,116,114,117,110,99,97,116,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32>>,{code,[],[<<98,97,99,107,116,114,97,99,101,95,100,101,112,116,104>>]},<<32,115,121,115,116,101,109,32,102,108,97,103,32,115,101,116,116,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,100,105,99,116,105,111,110,97,114,121,44,32,68,105,99,116,105,111,110,97,114,121,125>>]}]},{dd,[],[{p,[],[{code,[],[<<68,105,99,116,105,111,110,97,114,121>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,95,104,97,110,100,108,101,114,44,32,77,111,100,117,108,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,109,111,100,117,108,101,32,117,115,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,40,102,111,114,32,117,110,100,101,102,105,110,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32,102,111,114,32,101,120,97,109,112,108,101,41,46>>]}]},{dt,[],[{code,[],[<<123,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,44,32,71,67,73,110,102,111,125>>]}]},{dd,[],[{p,[],[{code,[],[<<71,67,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,102,111,114,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,101,32,99,111,110,116,101,110,116,32,111,102,32>>,{code,[],[<<71,67,73,110,102,111>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{a,[{id,<<112,114,111,99,101,115,115,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111>>}],[]},{code,[],[<<123,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111,44,32,71,67,73,110,102,111,125>>]}]},{dd,[],[{p,[],[{code,[],[<<71,67,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,100,101,116,97,105,108,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,102,111,114,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,101,32,99,111,110,116,101,110,116,32,111,102,32>>,{code,[],[<<71,67,73,110,102,111>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46,32,70,111,114,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32,109,101,97,110,105,110,103,32,111,102,32,101,97,99,104,32,105,116,101,109,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]}]},<<32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,103,114,111,117,112,95,108,101,97,100,101,114,44,32,71,114,111,117,112,76,101,97,100,101,114,125>>]}]},{dd,[],[{p,[],[{code,[],[<<71,114,111,117,112,76,101,97,100,101,114>>]},<<32,105,115,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,102,111,114,32,116,104,101,32,73,47,79,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,119,111,114,100,115,32,111,102,32,116,104,101,32,121,111,117,110,103,101,115,116,32,104,101,97,112,32,103,101,110,101,114,97,116,105,111,110,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,103,101,110,101,114,97,116,105,111,110,32,105,110,99,108,117,100,101,115,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,46,32,84,104,105,115,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,44,32,97,110,100,32,99,97,110,32,99,104,97,110,103,101,32,105,102,32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,99,104,97,110,103,101,115,46>>]}]},{dt,[],[{code,[],[<<123,105,110,105,116,105,97,108,95,99,97,108,108,44,32,123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,105,110,105,116,105,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,119,105,116,104,32,119,104,105,99,104,32,116,104,101,32,112,114,111,99,101,115,115,32,119,97,115,32,115,112,97,119,110,101,100,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,107,115,44,32,80,105,100,115,65,110,100,80,111,114,116,115,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,105,100,115,65,110,100,80,111,114,116,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,32,97,110,100,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,44,32,119,105,116,104,32,112,114,111,99,101,115,115,101,115,32,111,114,32,112,111,114,116,115,32,116,111,32,119,104,105,99,104,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,97,32,108,105,110,107,46>>]}]},{dt,[],[{code,[],[<<123,108,97,115,116,95,99,97,108,108,115,44,32,102,97,108,115,101,124,67,97,108,108,115,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,110,111,116,32,97,99,116,105,118,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,51>>]}]},<<41,46,32,73,102,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,97,99,116,105,118,101,44,32,97,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,44,32,105,110,32,119,104,105,99,104,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,99,97,108,108,101,100,46>>]}]},{dt,[],[{code,[],[<<123,109,101,109,111,114,121,44,32,83,105,122,101,125>>]}]},{dd,[],[{a,[{id,<<112,114,111,99,101,115,115,95,105,110,102,111,95,109,101,109,111,114,121>>}],[]},{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,32,99,97,108,108,32,115,116,97,99,107,44,32,104,101,97,112,44,32,97,110,100,32,105,110,116,101,114,110,97,108,32,115,116,114,117,99,116,117,114,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,95,113,117,101,117,101,95,108,101,110,44,32,77,101,115,115,97,103,101,81,117,101,117,101,76,101,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,101,115,115,97,103,101,81,117,101,117,101,76,101,110>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,109,101,115,115,97,103,101,115,32,99,117,114,114,101,110,116,108,121,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<77,101,115,115,97,103,101,81,117,101,117,101>>]},<<32,114,101,116,117,114,110,101,100,32,97,115,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,116,101,109,32>>,{code,[],[<<109,101,115,115,97,103,101,115>>]},<<32,40,115,101,101,32,98,101,108,111,119,41,46>>]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,115,44,32,77,101,115,115,97,103,101,81,117,101,117,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,101,115,115,97,103,101,81,117,101,117,101>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,109,101,115,115,97,103,101,115,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,44,32,119,104,105,99,104,32,104,97,118,101,32,110,111,116,32,121,101,116,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,109,105,110,95,104,101,97,112,95,115,105,122,101,44,32,77,105,110,72,101,97,112,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,105,110,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101,44,32,77,105,110,66,105,110,86,72,101,97,112,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,105,110,66,105,110,86,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,101,100,95,98,121,44,32,77,111,110,105,116,111,114,101,100,66,121,125>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115,32,102,111,114,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,44,32,112,111,114,116,115,32,97,110,100,32,78,73,70,32,114,101,115,111,117,114,99,101,115,44,32,116,104,97,116,32,97,114,101,32,109,111,110,105,116,111,114,105,110,103,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,115,44,32,77,111,110,105,116,111,114,115,125>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,111,110,105,116,111,114,115,32,40,115,116,97,114,116,101,100,32,98,121,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<41,32,116,104,97,116,32,97,114,101,32,97,99,116,105,118,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,70,111,114,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,32,111,114,32,97,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,32,98,121,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,116,104,101,32,108,105,115,116,32,99,111,110,115,105,115,116,115,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,114,111,99,101,115,115,44,32,80,105,100,125>>]}]},{dd,[],[<<80,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,112,105,100,46>>]},{dt,[],[{code,[],[<<123,112,114,111,99,101,115,115,44,32,123,82,101,103,78,97,109,101,44,32,78,111,100,101,125,125>>]}]},{dd,[],[<<76,111,99,97,108,32,111,114,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,110,97,109,101,46>>]},{dt,[],[{code,[],[<<123,112,111,114,116,44,32,80,111,114,116,73,100,125>>]}]},{dd,[],[<<76,111,99,97,108,32,112,111,114,116,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,112,111,114,116,32,105,100,46>>]},{dt,[],[{code,[],[<<123,112,111,114,116,44,32,123,82,101,103,78,97,109,101,44,32,78,111,100,101,125,125>>]}]},{dd,[],[<<76,111,99,97,108,32,112,111,114,116,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,110,97,109,101,46,32,80,108,101,97,115,101,32,110,111,116,101,44,32,116,104,97,116,32,114,101,109,111,116,101,32,112,111,114,116,32,109,111,110,105,116,111,114,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,44,32,115,111,32>>,{code,[],[<<78,111,100,101>>]},<<32,119,105,108,108,32,97,108,119,97,121,115,32,98,101,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,110,97,109,101,46>>]}]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,116,101,32,111,102,32,112,114,111,99,101,115,115,32,102,108,97,103,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<46,32>>,{code,[],[<<77,81,68>>]},<<32,105,115,32,101,105,116,104,101,114,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<32,111,114,32>>,{code,[],[<<111,110,95,104,101,97,112>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<76,101,118,101,108>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,112,114,105,111,114,105,116,105,101,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,100,117,99,116,105,111,110,115,44,32,78,117,109,98,101,114,125>>]}]},{dd,[],[{p,[],[{code,[],[<<78,117,109,98,101,114>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,100,117,99,116,105,111,110,115,32,101,120,101,99,117,116,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101,44,32,65,116,111,109,125>>]}]},{dd,[],[{p,[],[{code,[],[<<65,116,111,109>>]},<<32,105,115,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,32,110,97,109,101,46,32,73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,110,111,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32,116,104,105,115,32,116,117,112,108,101,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,46>>]}]},{dt,[],[{code,[],[<<123,115,101,113,117,101,110,116,105,97,108,95,116,114,97,99,101,95,116,111,107,101,110,44,32,91,93,32,124,32,83,101,113,117,101,110,116,105,97,108,84,114,97,99,101,84,111,107,101,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,101,113,117,101,110,116,105,97,108,84,114,97,99,101,84,111,107,101,110>>]},<<32,105,115,32,116,104,101,32,115,101,113,117,101,110,116,105,97,108,32,116,114,97,99,101,32,116,111,107,101,110,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,115,116,97,99,107,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,116,97,99,107,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,44,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,115,116,97,116,117,115,44,32,83,116,97,116,117,115,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,116,97,116,117,115>>]},<<32,105,115,32,116,104,101,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,97,110,100,32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{code,[],[<<101,120,105,116,105,110,103>>]}]},{li,[],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,110,103>>]}]},{li,[],[{code,[],[<<119,97,105,116,105,110,103>>]},<<32,40,102,111,114,32,97,32,109,101,115,115,97,103,101,41>>]},{li,[],[{code,[],[<<114,117,110,110,105,110,103>>]}]},{li,[],[{code,[],[<<114,117,110,110,97,98,108,101>>]},<<32,40,114,101,97,100,121,32,116,111,32,114,117,110,44,32,98,117,116,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,105,115,32,114,117,110,110,105,110,103,41>>]},{li,[],[{code,[],[<<115,117,115,112,101,110,100,101,100>>]},<<32,40,115,117,115,112,101,110,100,101,100,32,111,110,32,97,32,34,98,117,115,121,34,32,112,111,114,116,32,111,114,32,98,121,32,116,104,101,32,66,73,70,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49,44,50>>]},<<41>>]}]}]},{dt,[],[{code,[],[<<123,115,117,115,112,101,110,100,105,110,103,44,32,83,117,115,112,101,110,100,101,101,76,105,115,116,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101,76,105,115,116>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,83,117,115,112,101,110,100,101,101,44,32,65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116,44,32,79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116,125>>]},<<32,116,117,112,108,101,115,46,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,115,32,98,101,101,110,44,32,111,114,32,105,115,32,116,111,32,98,101,44,32,115,117,115,112,101,110,100,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,116,104,114,111,117,103,104,32,116,104,101,32,66,73,70,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>]}]},<<46>>]},{p,[],[{code,[],[<<65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46,32>>,{code,[],[<<79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,110,111,116,32,121,101,116,32,99,111,109,112,108,101,116,101,100,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,115,32,115,101,110,116,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,116,104,97,116,32,105,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116,32,61,47,61,32,48>>]},<<44,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,99,117,114,114,101,110,116,108,121,32,105,110,32,116,104,101,32,115,117,115,112,101,110,100,101,100,32,115,116,97,116,101,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116,32,61,47,61,32,48>>]},<<44,32,111,112,116,105,111,110,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<32,104,97,115,32,98,101,101,110,32,117,115,101,100,32,97,110,100,32,116,104,101,32,115,117,115,112,101,110,100,101,101,32,104,97,115,32,110,111,116,32,121,101,116,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,97,114,101,32,110,111,116,32,116,104,101,32,116,111,116,97,108,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<44,32,111,110,108,121,32,116,104,101,32,112,97,114,116,115,32,99,111,110,116,114,105,98,117,116,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]},{dt,[],[{a,[{id,<<112,114,111,99,101,115,115,95,105,110,102,111,95,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<123,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,44,32,111,102,32,97,108,108,32,104,101,97,112,32,102,114,97,103,109,101,110,116,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,32,97,110,100,32,97,110,121,32,117,110,114,101,99,101,105,118,101,100,32,109,101,115,115,97,103,101,115,32,116,104,97,116,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,104,101,97,112,46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,99,101,44,32,73,110,116,101,114,110,97,108,84,114,97,99,101,70,108,97,103,115,125>>]}]},{dd,[],[{p,[],[{code,[],[<<73,110,116,101,114,110,97,108,84,114,97,99,101,70,108,97,103,115>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,114,101,112,114,101,115,101,110,116,105,110,103,32,116,104,101,32,105,110,116,101,114,110,97,108,32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,112,95,101,120,105,116,44,32,66,111,111,108,101,97,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<66,111,111,108,101,97,110>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,110,111,116,32,97,108,108,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,32,115,117,112,112,111,114,116,32,97,108,108,32,116,104,101,115,101,32>>,{code,[],[<<73,116,101,109>>]},<<115,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<73,116,101,109>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,105,116,101,109,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,56,54,53>>,signature => [{attribute,2479,spec,{{process_info,2},[{type,2479,bounded_fun,[{type,2479,'fun',[{type,2479,product,[{var,2479,'Pid'},{var,2479,'Item'}]},{type,2480,union,[{var,2480,'InfoTuple'},{type,2480,nil,[]},{atom,2480,undefined}]}]},[{type,2481,constraint,[{atom,2481,is_subtype},[{var,2481,'Pid'},{type,2481,pid,[]}]]},{type,2482,constraint,[{atom,2482,is_subtype},[{var,2482,'Item'},{user_type,2482,process_info_item,[]}]]},{type,2483,constraint,[{atom,2483,is_subtype},[{var,2483,'InfoTuple'},{user_type,2483,process_info_result_item,[]}]]}]]},{type,2484,bounded_fun,[{type,2484,'fun',[{type,2484,product,[{var,2484,'Pid'},{var,2484,'ItemList'}]},{type,2484,union,[{var,2484,'InfoTupleList'},{type,2484,nil,[]},{atom,2484,undefined}]}]},[{type,2485,constraint,[{atom,2485,is_subtype},[{var,2485,'Pid'},{type,2485,pid,[]}]]},{type,2486,constraint,[{atom,2486,is_subtype},[{var,2486,'ItemList'},{type,2486,list,[{var,2486,'Item'}]}]]},{type,2487,constraint,[{atom,2487,is_subtype},[{var,2487,'Item'},{user_type,2487,process_info_item,[]}]]},{type,2488,constraint,[{atom,2488,is_subtype},[{var,2488,'InfoTupleList'},{type,2488,list,[{var,2488,'InfoTuple'}]}]]},{type,2489,constraint,[{atom,2489,is_subtype},[{var,2489,'InfoTuple'},{user_type,2489,process_info_result_item,[]}]]}]]}]}}]}},{{function,processes,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1710}],[<<112,114,111,99,101,115,115,101,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,32,101,120,105,116,105,110,103,32,112,114,111,99,101,115,115,32,101,120,105,115,116,115,44,32,98,117,116,32,105,115,32,110,111,116,32,97,108,105,118,101,46,32,84,104,97,116,32,105,115,44,32>>,{code,[],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,47,49>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,102,111,114,32,97,110,32,101,120,105,116,105,110,103,32,112,114,111,99,101,115,115,44,32,98,117,116,32,105,116,115,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115,47,48>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,114,111,99,101,115,115,101,115,40,41,46,10,91,60,48,46,48,46,48,62,44,60,48,46,50,46,48,62,44,60,48,46,52,46,48,62,44,60,48,46,53,46,48,62,44,60,48,46,55,46,48,62,44,60,48,46,56,46,48,62,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,50,48,51>>,signature => [{attribute,1710,spec,{{processes,0},[{type,1710,'fun',[{type,1710,product,[]},{type,1710,list,[{type,1710,pid,[]}]}]}]}}]}},{{function,purge_module,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1715}],[<<112,117,114,103,101,95,109,111,100,117,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,109,111,118,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46,32,66,101,102,111,114,101,32,116,104,105,115,32,66,73,70,32,105,115,32,117,115,101,100,44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,50>>]}]},<<32,105,115,32,116,111,32,98,101,32,99,97,108,108,101,100,32,116,111,32,99,104,101,99,107,32,116,104,97,116,32,110,111,32,112,114,111,99,101,115,115,101,115,32,101,120,101,99,117,116,101,32,111,108,100,32,99,111,100,101,32,105,110,32,116,104,101,32,109,111,100,117,108,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,56,46,48,32,40,69,114,108,97,110,103,47,79,84,80,32,49,57,41,44,32,97,110,121,32,108,105,110,103,101,114,105,110,103,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,115,116,105,108,108,32,101,120,101,99,117,116,101,32,116,104,101,32,111,108,100,32,99,111,100,101,32,105,115,32,107,105,108,108,101,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,32,73,110,32,101,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,44,32,115,117,99,104,32,105,110,99,111,114,114,101,99,116,32,117,115,101,32,99,111,117,108,100,32,99,97,117,115,101,32,109,117,99,104,32,109,111,114,101,32,102,97,116,97,108,32,102,97,105,108,117,114,101,115,44,32,108,105,107,101,32,101,109,117,108,97,116,111,114,32,99,114,97,115,104,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,50,50,48>>,signature => [{attribute,1715,spec,{{purge_module,1},[{type,1715,bounded_fun,[{type,1715,'fun',[{type,1715,product,[{var,1715,'Module'}]},{atom,1715,true}]},[{type,1716,constraint,[{atom,1716,is_subtype},[{var,1716,'Module'},{type,1716,atom,[]}]]}]]}]}}]}},{{function,put,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1729}],[<<112,117,116,47,50>>],#{<<101,110>> => [{p,[],[<<65,100,100,115,32,97,32,110,101,119,32>>,{code,[],[<<75,101,121>>]},<<32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,44,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<44,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46,32,73,102,32>>,{code,[],[<<75,101,121>>]},<<32,101,120,105,115,116,115,44,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,105,115,32,100,101,108,101,116,101,100,32,97,110,100,32,114,101,112,108,97,99,101,100,32,98,121,32>>,{code,[],[<<86,97,108>>]},<<44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,46,32,84,104,101,32,97,118,101,114,97,103,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,79,40>>,{code,[],[<<49>>]},<<41,32,97,110,100,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,105,115,32,79,40>>,{code,[],[<<78>>]},<<41,44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,116,101,109,115,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,88,32,61,32,112,117,116,40,110,97,109,101,44,32,119,97,108,114,117,115,41,44,32,89,32,61,32,112,117,116,40,110,97,109,101,44,32,99,97,114,112,101,110,116,101,114,41,44,10,90,32,61,32,103,101,116,40,110,97,109,101,41,44,10,123,88,44,32,89,44,32,90,125,46,10,123,117,110,100,101,102,105,110,101,100,44,119,97,108,114,117,115,44,99,97,114,112,101,110,116,101,114,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,118,97,108,117,101,115,32,115,116,111,114,101,100,32,119,104,101,110,32>>,{code,[],[<<112,117,116>>]},<<32,105,115,32,101,118,97,108,117,97,116,101,100,32,119,105,116,104,105,110,32,116,104,101,32,115,99,111,112,101,32,111,102,32,97,32>>,{code,[],[<<99,97,116,99,104>>]},<<32,97,114,101,32,110,111,116,32,114,101,116,114,97,99,116,101,100,32,105,102,32,97,32>>,{code,[],[<<116,104,114,111,119>>]},<<32,105,115,32,101,118,97,108,117,97,116,101,100,44,32,111,114,32,105,102,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,50,52,53>>,signature => [{attribute,1729,spec,{{put,2},[{type,1729,bounded_fun,[{type,1729,'fun',[{type,1729,product,[{var,1729,'Key'},{var,1729,'Val'}]},{type,1729,term,[]}]},[{type,1730,constraint,[{atom,1730,is_subtype},[{var,1730,'Key'},{type,1730,term,[]}]]},{type,1731,constraint,[{atom,1731,is_subtype},[{var,1731,'Val'},{type,1731,term,[]}]]}]]}]}}]}},{{function,raise,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1736}],[<<114,97,105,115,101,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<114,97,105,115,101,95,115,116,97,99,107,116,114,97,99,101>>}],[]}]},{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,99,108,97,115,115,44,32,114,101,97,115,111,110,44,32,97,110,100,32,99,97,108,108,32,115,116,97,99,107,32,98,97,99,107,116,114,97,99,101,32,40>>,{em,[],[<<115,116,97,99,107,116,114,97,99,101>>]},<<41,46>>]},{p,[],[{code,[],[<<67,108,97,115,115>>]},<<32,105,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<44,32>>,{code,[],[<<101,120,105,116>>]},<<44,32,111,114,32>>,{code,[],[<<116,104,114,111,119>>]},<<46,32,83,111,44,32,105,102,32,105,116,32,119,101,114,101,32,110,111,116,32,102,111,114,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,44,32>>,{code,[],[<<101,114,108,97,110,103,58,114,97,105,115,101,40,67,108,97,115,115,44,32,82,101,97,115,111,110,44,32,83,116,97,99,107,116,114,97,99,101,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,67,108,97,115,115,40,82,101,97,115,111,110,41>>]},<<32,40,103,105,118,101,110,32,116,104,97,116,32>>,{code,[],[<<67,108,97,115,115>>]},<<32,105,115,32,97,32,118,97,108,105,100,32,99,108,97,115,115,41,46>>]},{p,[],[{code,[],[<<82,101,97,115,111,110>>]},<<32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,46>>]},{p,[],[{code,[],[<<83,116,97,99,107,116,114,97,99,101>>]},<<32,105,115,32,97,32,108,105,115,116,32,97,115,32,112,114,111,118,105,100,101,100,32,105,110,32,97,32,116,114,121,45,99,97,116,99,104,32,99,108,97,117,115,101,46>>]},{pre,[],[{code,[],[<<116,114,121,10,32,32,32,32,46,46,46,10,99,97,116,99,104,32,67,108,97,115,115,58,82,101,97,115,111,110,58,83,116,97,99,107,116,114,97,99,101,32,45,62,10,32,32,32,32,46,46,46,10,101,110,100>>]}]},{p,[],[<<84,104,97,116,32,105,115,44,32,97,32,108,105,115,116,32,111,102,32,102,111,117,114,45,116,117,112,108,101,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,32,124,32,65,114,103,115,44,32,76,111,99,97,116,105,111,110,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,97,110,100,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,97,114,101,32,97,116,111,109,115,44,32,97,110,100,32,116,104,101,32,116,104,105,114,100,32,101,108,101,109,101,110,116,32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,97,114,105,116,121,32,111,114,32,97,110,32,97,114,103,117,109,101,110,116,32,108,105,115,116,46,32,84,104,101,32,115,116,97,99,107,116,114,97,99,101,32,99,97,110,32,97,108,115,111,32,99,111,110,116,97,105,110,32>>,{code,[],[<<123,70,117,110,44,32,65,114,103,115,44,32,76,111,99,97,116,105,111,110,125>>]},<<32,116,117,112,108,101,115,44,32,119,104,101,114,101,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,32,97,110,100,32>>,{code,[],[<<65,114,103,115>>]},<<32,105,115,32,97,110,32,97,114,103,117,109,101,110,116,32,108,105,115,116,46>>]},{p,[],[<<69,108,101,109,101,110,116,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,97,116,32,116,104,101,32,101,110,100,32,105,115,32,111,112,116,105,111,110,97,108,46,32,79,109,105,116,116,105,110,103,32,105,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,112,101,99,105,102,121,105,110,103,32,97,110,32,101,109,112,116,121,32,108,105,115,116,46>>]},{p,[],[<<84,104,101,32,115,116,97,99,107,116,114,97,99,101,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,115,116,97,99,107,116,114,97,99,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,59,32,105,116,32,105,115,32,116,114,117,110,99,97,116,101,100,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,120,105,109,117,109,32,115,116,97,99,107,116,114,97,99,101,32,100,101,112,116,104,46>>]},{p,[],[<<65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,111,32,116,101,114,109,105,110,97,116,101,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,32,117,110,108,101,115,115,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,105,110,118,97,108,105,100,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{em,[],[<<114,101,116,117,114,110,115,32,116,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110>>]},<<32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,98,101,32,115,117,114,101,32,110,111,116,32,116,111,32,114,101,116,117,114,110,44,32,121,111,117,32,99,97,110,32,99,97,108,108,32>>,{code,[],[<<101,114,114,111,114,40,101,114,108,97,110,103,58,114,97,105,115,101,40,67,108,97,115,115,44,32,82,101,97,115,111,110,44,32,83,116,97,99,107,116,114,97,99,101,41,41>>]},<<32,97,110,100,32,104,111,112,101,32,116,111,32,100,105,115,116,105,110,103,117,105,115,104,32,101,120,99,101,112,116,105,111,110,115,32,108,97,116,101,114,46>>]},{p,[],[<<83,101,101,32,116,104,101,32,114,101,102,101,114,101,110,99,101,32,109,97,110,117,97,108,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,101,115,32,97,110,100,32,104,111,119,32,116,111,32,99,97,116,99,104,32,101,120,99,101,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,50,55,49>>,signature => [{attribute,1736,spec,{{erlang,raise,3},[{type,1736,bounded_fun,[{type,1736,'fun',[{type,1736,product,[{var,1736,'Class'},{var,1736,'Reason'},{var,1736,'Stacktrace'}]},{atom,1736,badarg}]},[{type,1737,constraint,[{atom,1737,is_subtype},[{var,1737,'Class'},{type,1737,union,[{atom,1737,error},{atom,1737,exit},{atom,1737,throw}]}]]},{type,1738,constraint,[{atom,1738,is_subtype},[{var,1738,'Reason'},{type,1738,term,[]}]]},{type,1739,constraint,[{atom,1739,is_subtype},[{var,1739,'Stacktrace'},{user_type,1739,raise_stacktrace,[]}]]}]]}]}}]}},{{function,read_timer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1744}],[<<114,101,97,100,95,116,105,109,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,116,104,101,32,115,116,97,116,101,32,111,102,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,97,100,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114,40,84,105,109,101,114,82,101,102,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,51,50,49>>,signature => [{attribute,1744,spec,{{erlang,read_timer,1},[{type,1744,bounded_fun,[{type,1744,'fun',[{type,1744,product,[{var,1744,'TimerRef'}]},{var,1744,'Result'}]},[{type,1745,constraint,[{atom,1745,is_subtype},[{var,1745,'TimerRef'},{type,1745,reference,[]}]]},{type,1746,constraint,[{atom,1746,is_subtype},[{var,1746,'Time'},{type,1746,non_neg_integer,[]}]]},{type,1747,constraint,[{atom,1747,is_subtype},[{var,1747,'Result'},{type,1747,union,[{var,1747,'Time'},{atom,1747,false}]}]]}]]}]}}]}},{{function,read_timer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1753}],[<<114,101,97,100,95,116,105,109,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,116,104,101,32,115,116,97,116,101,32,111,102,32,97,32,116,105,109,101,114,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,99,114,101,97,116,101,100,32,98,121,32,101,105,116,104,101,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114>>]}]},<<46,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,105,100,101,110,116,105,102,105,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,119,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32,116,104,101,32,66,73,70,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,116,105,109,101,114,46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110,115>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,65,115,121,110,99,125>>]}]},{dd,[],[{p,[],[<<65,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,115,116,97,116,101,32,105,110,102,111,114,109,97,116,105,111,110,46,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,119,104,105,99,104,32,99,97,117,115,101,115,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100,32,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114>>]},<<46,32,87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114>>]},<<32,115,101,110,100,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,116,104,101,32,115,116,97,116,101,32,105,110,102,111,114,109,97,116,105,111,110,32,116,111,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,116,104,101,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<46,32,65,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,114,101,97,100,95,116,105,109,101,114,44,32,84,105,109,101,114,82,101,102,44,32,82,101,115,117,108,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114>>]},<<32,119,104,101,110,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,46>>]}]}]},{p,[],[<<77,111,114,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,105,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,32,108,101,102,116,32,117,110,116,105,108,32,116,104,101,32,116,105,109,101,114,32,101,120,112,105,114,101,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,97,32,116,105,109,101,114,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,99,111,117,108,100,32,110,111,116,32,98,101,32,102,111,117,110,100,46,32,84,104,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,116,105,109,101,114,32,104,97,100,32,101,120,112,105,114,101,100,44,32,111,114,32,98,101,101,110,32,99,97,110,99,101,108,101,100,44,32,111,114,32,98,101,99,97,117,115,101,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,110,101,118,101,114,32,104,97,115,32,99,111,114,114,101,115,112,111,110,100,101,100,32,116,111,32,97,32,116,105,109,101,114,46,32,69,118,101,110,32,105,102,32,116,104,101,32,116,105,109,101,114,32,104,97,115,32,101,120,112,105,114,101,100,44,32,105,116,32,100,111,101,115,32,110,111,116,32,116,101,108,108,32,121,111,117,32,119,104,101,116,104,101,114,32,111,114,32,110,111,116,32,116,104,101,32,116,105,109,101,45,111,117,116,32,109,101,115,115,97,103,101,32,104,97,115,32,97,114,114,105,118,101,100,32,97,116,32,105,116,115,32,100,101,115,116,105,110,97,116,105,111,110,32,121,101,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,32,99,97,110,32,98,101,32,99,111,45,108,111,99,97,116,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32,115,99,104,101,100,117,108,101,114,32,116,104,97,110,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32,73,102,32,115,111,44,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,97,107,101,115,32,109,117,99,104,32,108,111,110,103,101,114,32,116,105,109,101,32,116,104,97,110,32,105,102,32,105,116,32,105,115,32,108,111,99,97,116,101,100,32,108,111,99,97,108,108,121,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,105,110,32,97,32,99,114,105,116,105,99,97,108,32,112,97,116,104,44,32,97,110,100,32,99,97,110,32,100,111,32,111,116,104,101,114,32,116,104,105,110,103,115,32,119,104,105,108,101,32,119,97,105,116,105,110,103,32,102,111,114,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,44,32,121,111,117,32,119,97,110,116,32,116,111,32,117,115,101,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,116,114,117,101,125>>]},<<46,32,73,102,32,117,115,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,102,97,108,115,101,125>>]},<<44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,98,108,111,99,107,101,100,32,117,110,116,105,108,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,101,114,102,111,114,109,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,47,52>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,47,52>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,51,51,49>>,signature => [{attribute,1753,spec,{{erlang,read_timer,2},[{type,1753,bounded_fun,[{type,1753,'fun',[{type,1753,product,[{var,1753,'TimerRef'},{var,1753,'Options'}]},{type,1753,union,[{var,1753,'Result'},{atom,1753,ok}]}]},[{type,1754,constraint,[{atom,1754,is_subtype},[{var,1754,'TimerRef'},{type,1754,reference,[]}]]},{type,1755,constraint,[{atom,1755,is_subtype},[{var,1755,'Async'},{type,1755,boolean,[]}]]},{type,1756,constraint,[{atom,1756,is_subtype},[{var,1756,'Option'},{type,1756,tuple,[{atom,1756,async},{var,1756,'Async'}]}]]},{type,1757,constraint,[{atom,1757,is_subtype},[{var,1757,'Options'},{type,1757,list,[{var,1757,'Option'}]}]]},{type,1758,constraint,[{atom,1758,is_subtype},[{var,1758,'Time'},{type,1758,non_neg_integer,[]}]]},{type,1759,constraint,[{atom,1759,is_subtype},[{var,1759,'Result'},{type,1759,union,[{var,1759,'Time'},{atom,1759,false}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,ref_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1765}],[<<114,101,102,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<82,101,102>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,51,56,55>>,signature => [{attribute,1765,spec,{{ref_to_list,1},[{type,1765,bounded_fun,[{type,1765,'fun',[{type,1765,product,[{var,1765,'Ref'}]},{type,1765,string,[]}]},[{type,1766,constraint,[{atom,1766,is_subtype},[{var,1766,'Ref'},{type,1766,reference,[]}]]}]]}]}}]}},{{function,register,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1771}],[<<114,101,103,105,115,116,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<65,115,115,111,99,105,97,116,101,115,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,119,105,116,104,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,114,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,46,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<44,32,119,104,105,99,104,32,109,117,115,116,32,98,101,32,97,110,32,97,116,111,109,44,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,112,105,100,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,105,110,32,115,101,110,100,32,111,112,101,114,97,116,111,114,32,40>>,{code,[],[<<82,101,103,78,97,109,101,32,33,32,77,101,115,115,97,103,101>>]},<<41,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,114,101,103,105,115,116,101,114,40,100,98,44,32,80,105,100,41,46,10,116,114,117,101>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,120,105,115,116,105,110,103,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,117,115,101,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,115,32,97,108,114,101,97,100,121,32,114,101,103,105,115,116,101,114,101,100,32,40,97,108,114,101,97,100,121,32,104,97,115,32,97,32,110,97,109,101,41,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,48,48>>,signature => [{attribute,1771,spec,{{register,2},[{type,1771,bounded_fun,[{type,1771,'fun',[{type,1771,product,[{var,1771,'RegName'},{var,1771,'PidOrPort'}]},{atom,1771,true}]},[{type,1772,constraint,[{atom,1772,is_subtype},[{var,1772,'RegName'},{type,1772,atom,[]}]]},{type,1773,constraint,[{atom,1773,is_subtype},[{var,1773,'PidOrPort'},{type,1773,union,[{type,1773,port,[]},{type,1773,pid,[]}]}]]}]]}]}}]}},{{function,registered,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1778}],[<<114,101,103,105,115,116,101,114,101,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,110,97,109,101,115,32,116,104,97,116,32,104,97,118,101,32,98,101,101,110,32,114,101,103,105,115,116,101,114,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,103,105,115,116,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,103,105,115,116,101,114,47,50>>]}]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,114,101,103,105,115,116,101,114,101,100,40,41,46,10,91,99,111,100,101,95,115,101,114,118,101,114,44,32,102,105,108,101,95,115,101,114,118,101,114,44,32,105,110,105,116,44,32,117,115,101,114,44,32,109,121,95,100,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,50,57>>,signature => [{attribute,1778,spec,{{registered,0},[{type,1778,bounded_fun,[{type,1778,'fun',[{type,1778,product,[]},{type,1778,list,[{var,1778,'RegName'}]}]},[{type,1779,constraint,[{atom,1779,is_subtype},[{var,1779,'RegName'},{type,1779,atom,[]}]]}]]}]}}]}},{{function,resume_process,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1784}],[<<114,101,115,117,109,101,95,112,114,111,99,101,115,115,47,49>>],#{<<101,110>> => [{p,[],[<<68,101,99,114,101,97,115,101,115,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,112,114,101,118,105,111,117,115,108,121,32,116,111,32,104,97,118,101,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,116,104,114,111,117,103,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>]}]},<<32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,115,117,109,101,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]},<<46,32,87,104,101,110,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,114,101,97,99,104,101,115,32,122,101,114,111,44,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,114,101,115,117,109,101,100,44,32,116,104,97,116,32,105,115,44,32,105,116,115,32,115,116,97,116,101,32,105,115,32,99,104,97,110,103,101,100,32,102,114,111,109,32,115,117,115,112,101,110,100,101,100,32,105,110,116,111,32,116,104,101,32,115,116,97,116,101,32,105,116,32,104,97,100,32,98,101,102,111,114,101,32,105,116,32,119,97,115,32,115,117,115,112,101,110,100,101,100,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,115,117,109,101,95,112,114,111,99,101,115,115,47,49>>]},<<32,104,97,100,32,110,111,116,32,112,114,101,118,105,111,117,115,108,121,32,105,110,99,114,101,97,115,101,100,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,52,50>>,signature => [{attribute,1784,spec,{{erlang,resume_process,1},[{type,1784,bounded_fun,[{type,1784,'fun',[{type,1784,product,[{var,1784,'Suspendee'}]},{atom,1784,true}]},[{type,1785,constraint,[{atom,1785,is_subtype},[{var,1785,'Suspendee'},{type,1785,pid,[]}]]}]]}]}}]}},{{function,round,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1791}],[<<114,111,117,110,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,98,121,32,114,111,117,110,100,105,110,103,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,111,117,110,100,40,52,50,46,49,41,46,10,52,50>>]}]},{pre,[],[{code,[],[<<114,111,117,110,100,40,53,46,53,41,46,10,54>>]}]},{pre,[],[{code,[],[<<114,111,117,110,100,40,45,53,46,53,41,46,10,45,54>>]}]},{pre,[],[{code,[],[<<114,111,117,110,100,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41,46,10,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]}]},{p,[],[<<73,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<114,111,117,110,100,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41>>]},<<32,101,118,97,108,117,97,116,101,115,32,116,111,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]},<<46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,116,104,97,116,32,116,104,101,32,110,117,109,98,101,114,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48>>]},<<32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,73,110,115,116,101,97,100,44,32,116,104,101,32,102,108,111,97,116,32,108,105,116,101,114,97,108,32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56,46,48>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,99,108,111,115,101,115,116,32,110,117,109,98,101,114,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,83,101,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115,35,102,108,111,97,116,95,114,101,112,114,101,115,101,110,116,97,116,105,111,110,95,112,114,111,98,108,101,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,70,108,111,97,116,105,110,103,32,80,111,105,110,116,32,78,117,109,98,101,114,115>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,56,51>>,signature => [{attribute,1791,spec,{{round,1},[{type,1791,bounded_fun,[{type,1791,'fun',[{type,1791,product,[{var,1791,'Number'}]},{type,1791,integer,[]}]},[{type,1792,constraint,[{atom,1792,is_subtype},[{var,1792,'Number'},{type,1792,number,[]}]]}]]}]}}]}},{{function,self,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1798}],[<<115,101,108,102,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,101,108,102,40,41,46,10,60,48,46,50,54,46,48,62>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,49,52>>,signature => [{attribute,1798,spec,{{self,0},[{type,1798,'fun',[{type,1798,product,[]},{type,1798,pid,[]}]}]}}]}},{{function,send,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2493}],[<<115,101,110,100,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<83,101,110,100,115,32,97,32,109,101,115,115,97,103,101,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<77,115,103>>]},<<46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,117,115,105,110,103,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,115,101,110,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,101,110,100,32,111,112,101,114,97,116,111,114>>]},<<58,32>>,{code,[],[<<68,101,115,116,32,33,32,77,115,103>>]},<<46>>]},{p,[],[{code,[],[<<68,101,115,116>>]},<<32,99,97,110,32,98,101,32,97,32,114,101,109,111,116,101,32,111,114,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,97,32,40,108,111,99,97,108,41,32,112,111,114,116,44,32,97,32,108,111,99,97,108,108,121,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32,111,114,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,82,101,103,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,102,111,114,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,97,116,32,97,110,111,116,104,101,114,32,110,111,100,101,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,114,117,110,45,116,105,109,101,32,101,114,114,111,114,32,105,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,110,32,97,116,111,109,32,110,97,109,101,44,32,98,117,116,32,116,104,105,115,32,110,97,109,101,32,105,115,32,110,111,116,32,114,101,103,105,115,116,101,114,101,100,46,32,84,104,105,115,32,105,115,32,116,104,101,32,111,110,108,121,32,99,97,115,101,32,119,104,101,110,32>>,{code,[],[<<115,101,110,100>>]},<<32,102,97,105,108,115,32,102,111,114,32,97,110,32,117,110,114,101,97,99,104,97,98,108,101,32,100,101,115,116,105,110,97,116,105,111,110,32>>,{code,[],[<<68,101,115,116>>]},<<32,40,111,102,32,99,111,114,114,101,99,116,32,116,121,112,101,41,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,50,55>>,signature => [{attribute,2493,spec,{{erlang,send,2},[{type,2493,bounded_fun,[{type,2493,'fun',[{type,2493,product,[{var,2493,'Dest'},{var,2493,'Msg'}]},{var,2493,'Msg'}]},[{type,2494,constraint,[{atom,2494,is_subtype},[{var,2494,'Dest'},{user_type,2494,dst,[]}]]},{type,2495,constraint,[{atom,2495,is_subtype},[{var,2495,'Msg'},{type,2495,term,[]}]]}]]}]}}]}},{{function,send,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2499}],[<<115,101,110,100,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<69,105,116,104,101,114,32,115,101,110,100,115,32,97,32,109,101,115,115,97,103,101,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<44,32,111,114,32,100,111,101,115,32,110,111,116,32,115,101,110,100,32,116,104,101,32,109,101,115,115,97,103,101,32,98,117,116,32,114,101,116,117,114,110,115,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,40,115,101,101,32,98,101,108,111,119,41,46,32,79,116,104,101,114,119,105,115,101,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,47,50>>]}]},<<46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,101,100,32,101,120,112,108,97,110,97,116,105,111,110,32,97,110,100,32,119,97,114,110,105,110,103,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50,44,51>>]}]},<<46>>]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<110,111,115,117,115,112,101,110,100>>]}]},{dd,[],[<<73,102,32,116,104,101,32,115,101,110,100,101,114,32,119,111,117,108,100,32,104,97,118,101,32,116,111,32,98,101,32,115,117,115,112,101,110,100,101,100,32,116,111,32,100,111,32,116,104,101,32,115,101,110,100,44,32>>,{code,[],[<<110,111,115,117,115,112,101,110,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]},{dt,[],[{code,[],[<<110,111,99,111,110,110,101,99,116>>]}]},{dd,[],[<<73,102,32,116,104,101,32,100,101,115,116,105,110,97,116,105,111,110,32,110,111,100,101,32,119,111,117,108,100,32,104,97,118,101,32,116,111,32,98,101,32,97,117,116,111,45,99,111,110,110,101,99,116,101,100,32,116,111,32,100,111,32,116,104,101,32,115,101,110,100,44,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<65,115,32,119,105,116,104,32>>,{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50,44,51>>]},<<58,32,117,115,101,32,119,105,116,104,32,101,120,116,114,101,109,101,32,99,97,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,52,55>>,signature => [{attribute,2499,spec,{{erlang,send,3},[{type,2499,bounded_fun,[{type,2499,'fun',[{type,2499,product,[{var,2499,'Dest'},{var,2499,'Msg'},{var,2499,'Options'}]},{var,2499,'Res'}]},[{type,2500,constraint,[{atom,2500,is_subtype},[{var,2500,'Dest'},{user_type,2500,dst,[]}]]},{type,2501,constraint,[{atom,2501,is_subtype},[{var,2501,'Msg'},{type,2501,term,[]}]]},{type,2502,constraint,[{atom,2502,is_subtype},[{var,2502,'Options'},{type,2502,list,[{type,2502,union,[{atom,2502,nosuspend},{atom,2502,noconnect}]}]}]]},{type,2503,constraint,[{atom,2503,is_subtype},[{var,2503,'Res'},{type,2503,union,[{atom,2503,ok},{atom,2503,nosuspend},{atom,2503,noconnect}]}]]}]]}]}}]}},{{function,send_after,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1803}],[<<115,101,110,100,95,97,102,116,101,114,47,51>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,40,84,105,109,101,44,32,68,101,115,116,44,32,77,115,103,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,55,57>>,signature => [{attribute,1803,spec,{{erlang,send_after,3},[{type,1803,bounded_fun,[{type,1803,'fun',[{type,1803,product,[{var,1803,'Time'},{var,1803,'Dest'},{var,1803,'Msg'}]},{var,1803,'TimerRef'}]},[{type,1804,constraint,[{atom,1804,is_subtype},[{var,1804,'Time'},{type,1804,non_neg_integer,[]}]]},{type,1805,constraint,[{atom,1805,is_subtype},[{var,1805,'Dest'},{type,1805,union,[{type,1805,pid,[]},{type,1805,atom,[]}]}]]},{type,1806,constraint,[{atom,1806,is_subtype},[{var,1806,'Msg'},{type,1806,term,[]}]]},{type,1807,constraint,[{atom,1807,is_subtype},[{var,1807,'TimerRef'},{type,1807,reference,[]}]]}]]}]}}]}},{{function,send_after,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1813}],[<<115,101,110,100,95,97,102,116,101,114,47,52>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,87,104,101,110,32,116,104,101,32,116,105,109,101,114,32,101,120,112,105,114,101,115,44,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,101,115,116>>]},<<46,32,65,112,97,114,116,32,102,114,111,109,32,116,104,101,32,102,111,114,109,97,116,32,111,102,32,116,104,101,32,116,105,109,101,45,111,117,116,32,109,101,115,115,97,103,101,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,119,111,114,107,115,32,101,120,97,99,116,108,121,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,47,52>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,57,48>>,signature => [{attribute,1813,spec,{{erlang,send_after,4},[{type,1813,bounded_fun,[{type,1813,'fun',[{type,1813,product,[{var,1813,'Time'},{var,1813,'Dest'},{var,1813,'Msg'},{var,1813,'Options'}]},{var,1813,'TimerRef'}]},[{type,1814,constraint,[{atom,1814,is_subtype},[{var,1814,'Time'},{type,1814,integer,[]}]]},{type,1815,constraint,[{atom,1815,is_subtype},[{var,1815,'Dest'},{type,1815,union,[{type,1815,pid,[]},{type,1815,atom,[]}]}]]},{type,1816,constraint,[{atom,1816,is_subtype},[{var,1816,'Msg'},{type,1816,term,[]}]]},{type,1817,constraint,[{atom,1817,is_subtype},[{var,1817,'Options'},{type,1817,list,[{var,1817,'Option'}]}]]},{type,1818,constraint,[{atom,1818,is_subtype},[{var,1818,'Abs'},{type,1818,boolean,[]}]]},{type,1819,constraint,[{atom,1819,is_subtype},[{var,1819,'Option'},{type,1819,tuple,[{atom,1819,abs},{var,1819,'Abs'}]}]]},{type,1820,constraint,[{atom,1820,is_subtype},[{var,1820,'TimerRef'},{type,1820,reference,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,send_nosuspend,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3458}],[<<115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,40,68,101,115,116,44,32,77,115,103,44,32,91,110,111,115,117,115,112,101,110,100,93,41>>]}]},<<44,32,98,117,116,32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,109,101,115,115,97,103,101,32,119,97,115,32,115,101,110,116,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,109,101,115,115,97,103,101,32,119,97,115,32,110,111,116,32,115,101,110,116,32,98,101,99,97,117,115,101,32,116,104,101,32,115,101,110,100,101,114,32,119,111,117,108,100,32,104,97,118,101,32,104,97,100,32,116,111,32,98,101,32,115,117,115,112,101,110,100,101,100,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,115,101,110,100,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,97,110,32,117,110,114,101,108,105,97,98,108,101,32,114,101,109,111,116,101,32,110,111,100,101,32,119,105,116,104,111,117,116,32,101,118,101,114,32,98,108,111,99,107,105,110,103,32,116,104,101,32,115,101,110,100,105,110,103,32,40,69,114,108,97,110,103,41,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,32,40,117,115,117,97,108,108,121,32,110,111,116,32,97,32,114,101,97,108,32,69,114,108,97,110,103,32,110,111,100,101,44,32,98,117,116,32,97,32,110,111,100,101,32,119,114,105,116,116,101,110,32,105,110,32,67,32,111,114,32,74,97,118,97,41,32,105,115,32,111,118,101,114,108,111,97,100,101,100,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32>>,{em,[],[<<100,111,101,115,32,110,111,116,32,115,101,110,100,32,116,104,101,32,109,101,115,115,97,103,101>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<84,104,101,32,115,97,109,101,32,111,99,99,117,114,115,32,105,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,108,111,99,97,108,32,112,111,114,116,32,116,104,97,116,32,105,115,32,98,117,115,121,46,32,70,111,114,32,97,108,108,32,111,116,104,101,114,32,100,101,115,116,105,110,97,116,105,111,110,115,32,40,97,108,108,111,119,101,100,32,102,111,114,32,116,104,101,32,111,114,100,105,110,97,114,121,32,115,101,110,100,32,111,112,101,114,97,116,111,114,32>>,{code,[],[<<39,33,39>>]},<<41,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,115,101,110,100,115,32,116,104,101,32,109,101,115,115,97,103,101,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,114,97,114,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,32,119,104,101,114,101,32,97,32,112,114,111,99,101,115,115,32,99,111,109,109,117,110,105,99,97,116,101,115,32,119,105,116,104,32,69,114,108,97,110,103,32,110,111,100,101,115,32,116,104,97,116,32,99,97,110,32,100,105,115,97,112,112,101,97,114,32,119,105,116,104,111,117,116,32,97,110,121,32,116,114,97,99,101,44,32,99,97,117,115,105,110,103,32,116,104,101,32,84,67,80,32,98,117,102,102,101,114,115,32,97,110,100,32,116,104,101,32,100,114,105,118,101,114,115,32,113,117,101,117,101,32,116,111,32,98,101,32,111,118,101,114,45,102,117,108,108,32,98,101,102,111,114,101,32,116,104,101,32,110,111,100,101,32,105,115,32,115,104,117,116,32,100,111,119,110,32,40,98,101,99,97,117,115,101,32,111,102,32,116,105,99,107,32,116,105,109,101,45,111,117,116,115,41,32,98,121,32>>,{code,[],[<<110,101,116,95,107,101,114,110,101,108>>]},<<46,32,84,104,101,32,110,111,114,109,97,108,32,114,101,97,99,116,105,111,110,32,116,111,32,116,97,107,101,32,119,104,101,110,32,116,104,105,115,32,111,99,99,117,114,115,32,105,115,32,115,111,109,101,32,107,105,110,100,32,111,102,32,112,114,101,109,97,116,117,114,101,32,115,104,117,116,100,111,119,110,32,111,102,32,116,104,101,32,111,116,104,101,114,32,110,111,100,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,105,103,110,111,114,105,110,103,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,102,114,111,109,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,119,111,117,108,100,32,114,101,115,117,108,116,32,105,110,32,97,110,32>>,{em,[],[<<117,110,114,101,108,105,97,98,108,101>>]},<<32,109,101,115,115,97,103,101,32,112,97,115,115,105,110,103,44,32,119,104,105,99,104,32,105,115,32,99,111,110,116,114,97,100,105,99,116,111,114,121,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,105,110,103,32,109,111,100,101,108,46,32,84,104,101,32,109,101,115,115,97,103,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,115,101,110,116,32,105,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<73,110,32,109,97,110,121,32,115,121,115,116,101,109,115,44,32,116,114,97,110,115,105,101,110,116,32,115,116,97,116,101,115,32,111,102,32,111,118,101,114,108,111,97,100,101,100,32,113,117,101,117,101,115,32,97,114,101,32,110,111,114,109,97,108,46,32,65,108,116,104,111,117,103,104,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,100,111,101,115,32,110,111,116,32,109,101,97,110,32,116,104,97,116,32,116,104,101,32,111,116,104,101,114,32,110,111,100,101,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,110,111,110,45,114,101,115,112,111,110,115,105,118,101,44,32,105,116,32,99,111,117,108,100,32,98,101,32,97,32,116,101,109,112,111,114,97,114,121,32,111,118,101,114,108,111,97,100,46,32,65,108,115,111,44,32,97,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32>>,{code,[],[<<116,114,117,101>>]},<<32,100,111,101,115,32,111,110,108,121,32,109,101,97,110,32,116,104,97,116,32,116,104,101,32,109,101,115,115,97,103,101,32,99,97,110,32,98,101,32,115,101,110,116,32,111,110,32,116,104,101,32,40,84,67,80,41,32,99,104,97,110,110,101,108,32,119,105,116,104,111,117,116,32,98,108,111,99,107,105,110,103,59,32,116,104,101,32,109,101,115,115,97,103,101,32,105,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,97,114,114,105,118,101,32,97,116,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,46,32,70,111,114,32,97,32,100,105,115,99,111,110,110,101,99,116,101,100,32,110,111,110,45,114,101,115,112,111,110,115,105,118,101,32,110,111,100,101,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,40,109,105,109,105,99,115,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,111,112,101,114,97,116,111,114,32>>,{code,[],[<<33>>]},<<41,46,32,84,104,101,32,101,120,112,101,99,116,101,100,32,98,101,104,97,118,105,111,114,32,97,110,100,32,116,104,101,32,97,99,116,105,111,110,115,32,116,111,32,116,97,107,101,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,97,114,101,32,97,112,112,108,105,99,97,116,105,111,110,45,32,97,110,100,32,104,97,114,100,119,97,114,101,45,115,112,101,99,105,102,105,99,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<85,115,101,32,119,105,116,104,32,101,120,116,114,101,109,101,32,99,97,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,54,48,51>>,signature => [{attribute,3458,spec,{{erlang,send_nosuspend,2},[{type,3458,bounded_fun,[{type,3458,'fun',[{type,3458,product,[{var,3458,'Dest'},{var,3458,'Msg'}]},{type,3458,boolean,[]}]},[{type,3459,constraint,[{atom,3459,is_subtype},[{var,3459,'Dest'},{user_type,3459,dst,[]}]]},{type,3460,constraint,[{atom,3460,is_subtype},[{var,3460,'Msg'},{type,3460,term,[]}]]}]]}]}}]}},{{function,send_nosuspend,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3468}],[<<115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,40,68,101,115,116,44,32,77,115,103,44,32,91,110,111,115,117,115,112,101,110,100,32,124,32,79,112,116,105,111,110,115,93,41>>]}]},<<44,32,98,117,116,32,119,105,116,104,32,97,32,66,111,111,108,101,97,110,32,114,101,116,117,114,110,32,118,97,108,117,101,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,98,101,104,97,118,101,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>]}]},<<44,32,98,117,116,32,116,97,107,101,115,32,97,32,116,104,105,114,100,32,112,97,114,97,109,101,116,101,114,44,32,97,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46,32,84,104,101,32,111,110,108,121,32,111,112,116,105,111,110,32,105,115,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<44,32,119,104,105,99,104,32,109,97,107,101,115,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,32,105,115,32,110,111,116,32,99,117,114,114,101,110,116,108,121,32,114,101,97,99,104,97,98,108,101,32,98,121,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,110,111,114,109,97,108,32,98,101,104,97,118,105,111,114,32,105,115,32,116,111,32,116,114,121,32,116,111,32,99,111,110,110,101,99,116,32,116,111,32,116,104,101,32,110,111,100,101,44,32,119,104,105,99,104,32,99,97,110,32,115,116,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,32,100,117,114,105,110,103,32,97,32,115,104,111,114,116,32,112,101,114,105,111,100,46,32,84,104,101,32,117,115,101,32,111,102,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,98,101,32,115,117,114,101,32,110,111,116,32,116,111,32,103,101,116,32,116,104,101,32,115,108,105,103,104,116,101,115,116,32,100,101,108,97,121,32,119,104,101,110,32,115,101,110,100,105,110,103,32,116,111,32,97,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,115,32,101,115,112,101,99,105,97,108,108,121,32,117,115,101,102,117,108,32,119,104,101,110,32,99,111,109,109,117,110,105,99,97,116,105,110,103,32,119,105,116,104,32,110,111,100,101,115,32,116,104,97,116,32,101,120,112,101,99,116,32,116,111,32,97,108,119,97,121,115,32,98,101,32,116,104,101,32,99,111,110,110,101,99,116,105,110,103,32,112,97,114,116,32,40,116,104,97,116,32,105,115,44,32,110,111,100,101,115,32,119,114,105,116,116,101,110,32,105,110,32,67,32,111,114,32,74,97,118,97,41,46>>]},{p,[],[<<87,104,101,110,101,118,101,114,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,40,101,105,116,104,101,114,32,119,104,101,110,32,97,32,115,117,115,112,101,110,100,32,119,111,117,108,100,32,111,99,99,117,114,32,111,114,32,119,104,101,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<32,119,97,115,32,115,112,101,99,105,102,105,101,100,32,97,110,100,32,116,104,101,32,110,111,100,101,32,119,97,115,32,110,111,116,32,97,108,114,101,97,100,121,32,99,111,110,110,101,99,116,101,100,41,44,32,116,104,101,32,109,101,115,115,97,103,101,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32>>,{em,[],[<<110,111,116>>]},<<32,116,111,32,104,97,118,101,32,98,101,101,110,32,115,101,110,116,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<85,115,101,32,119,105,116,104,32,101,120,116,114,101,109,101,32,99,97,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,54,53,51>>,signature => [{attribute,3468,spec,{{erlang,send_nosuspend,3},[{type,3468,bounded_fun,[{type,3468,'fun',[{type,3468,product,[{var,3468,'Dest'},{var,3468,'Msg'},{var,3468,'Options'}]},{type,3468,boolean,[]}]},[{type,3469,constraint,[{atom,3469,is_subtype},[{var,3469,'Dest'},{user_type,3469,dst,[]}]]},{type,3470,constraint,[{atom,3470,is_subtype},[{var,3470,'Msg'},{type,3470,term,[]}]]},{type,3471,constraint,[{atom,3471,is_subtype},[{var,3471,'Options'},{type,3471,list,[{atom,3471,noconnect}]}]]}]]}]}}]}},{{function,set_cookie,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3783}],[<<115,101,116,95,99,111,111,107,105,101,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,109,97,103,105,99,32,99,111,111,107,105,101,32,111,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,116,111,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<67,111,111,107,105,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,97,108,115,111,32,115,101,116,115,32,116,104,101,32,99,111,111,107,105,101,32,111,102,32,97,108,108,32,111,116,104,101,114,32,117,110,107,110,111,119,110,32,110,111,100,101,115,32,116,111,32>>,{code,[],[<<67,111,111,107,105,101>>]},<<32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,105,115,116,114,105,98,117,116,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<68,105,115,116,114,105,98,117,116,101,100,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108,32,105,110,32,83,121,115,116,101,109,32,68,111,99,117,109,101,110,116,97,116,105,111,110,41,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<102,117,110,99,116,105,111,110,95,99,108,97,117,115,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,54,56,54>>,signature => [{attribute,3783,spec,{{erlang,set_cookie,2},[{type,3783,bounded_fun,[{type,3783,'fun',[{type,3783,product,[{var,3783,'Node'},{var,3783,'Cookie'}]},{atom,3783,true}]},[{type,3784,constraint,[{atom,3784,is_subtype},[{var,3784,'Node'},{type,3784,node,[]}]]},{type,3785,constraint,[{atom,3785,is_subtype},[{var,3785,'Cookie'},{type,3785,atom,[]}]]}]]}]}}]}},{{function,setelement,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2520}],[<<115,101,116,101,108,101,109,101,110,116,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,116,104,97,116,32,105,115,32,97,32,99,111,112,121,32,111,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<32,119,105,116,104,32,116,104,101,32,101,108,101,109,101,110,116,32,115,112,101,99,105,102,105,101,100,32,98,121,32,105,110,116,101,103,101,114,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,40,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,116,104,101,32,101,108,101,109,101,110,116,32,119,105,116,104,32,105,110,100,101,120,32,49,41,32,114,101,112,108,97,99,101,100,32,98,121,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<86,97,108,117,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,101,116,101,108,101,109,101,110,116,40,50,44,32,123,49,48,44,32,103,114,101,101,110,44,32,98,111,116,116,108,101,115,125,44,32,114,101,100,41,46,10,123,49,48,44,114,101,100,44,98,111,116,116,108,101,115,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,48,51>>,signature => [{attribute,2520,spec,{{setelement,3},[{type,2520,bounded_fun,[{type,2520,'fun',[{type,2520,product,[{var,2520,'Index'},{var,2520,'Tuple1'},{var,2520,'Value'}]},{var,2520,'Tuple2'}]},[{type,2521,constraint,[{atom,2521,is_subtype},[{var,2521,'Index'},{type,2521,pos_integer,[]}]]},{type,2522,constraint,[{atom,2522,is_subtype},[{var,2522,'Tuple1'},{type,2522,tuple,any}]]},{type,2523,constraint,[{atom,2523,is_subtype},[{var,2523,'Tuple2'},{type,2523,tuple,any}]]},{type,2524,constraint,[{atom,2524,is_subtype},[{var,2524,'Value'},{type,2524,term,[]}]]}]]}]}}]}},{{function,size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1874}],[<<115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,105,110,32,97,32,116,117,112,108,101,32,111,114,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,110,32,97,32,98,105,110,97,114,121,32,111,114,32,98,105,116,115,116,114,105,110,103,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,105,122,101,40,123,109,111,114,110,105,44,32,109,117,108,108,101,44,32,98,119,97,110,103,101,125,41,46,10,51,10,62,32,115,105,122,101,40,60,60,49,49,44,32,50,50,44,32,51,51,62,62,41,46,10,51>>]}]},{p,[],[<<70,111,114,32,98,105,116,115,116,114,105,110,103,115,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,119,104,111,108,101,32,98,121,116,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,105,116,115,32,105,110,32,116,104,101,32,98,105,116,115,116,114,105,110,103,32,105,115,32,110,111,116,32,100,105,118,105,115,105,98,108,101,32,98,121,32,56,44,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,115,32,114,111,117,110,100,101,100,32>>,{em,[],[<<100,111,119,110>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,117,112,108,101,95,115,105,122,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,117,112,108,101,95,115,105,122,101,47,49>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,121,116,101,95,115,105,122,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,121,116,101,95,115,105,122,101,47,49>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,116,95,115,105,122,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,116,95,115,105,122,101,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,50,48>>,signature => [{attribute,1874,spec,{{size,1},[{type,1874,bounded_fun,[{type,1874,'fun',[{type,1874,product,[{var,1874,'Item'}]},{type,1874,non_neg_integer,[]}]},[{type,1875,constraint,[{atom,1875,is_subtype},[{var,1875,'Item'},{type,1875,union,[{type,1875,tuple,any},{type,1875,binary,[]}]}]]}]]}]}}]}},{{function,spawn,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2904}],[<<115,112,97,119,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,52,51>>,signature => [{attribute,2904,spec,{{spawn,1},[{type,2904,bounded_fun,[{type,2904,'fun',[{type,2904,product,[{var,2904,'Fun'}]},{type,2904,pid,[]}]},[{type,2905,constraint,[{atom,2905,is_subtype},[{var,2905,'Fun'},{type,2905,function,[]}]]}]]}]}}]}},{{function,spawn,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2913}],[<<115,112,97,119,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,53,52>>,signature => [{attribute,2913,spec,{{spawn,2},[{type,2913,bounded_fun,[{type,2913,'fun',[{type,2913,product,[{var,2913,'Node'},{var,2913,'Fun'}]},{type,2913,pid,[]}]},[{type,2914,constraint,[{atom,2914,is_subtype},[{var,2914,'Node'},{type,2914,node,[]}]]},{type,2915,constraint,[{atom,2915,is_subtype},[{var,2915,'Fun'},{type,2915,function,[]}]]}]]}]}}]}},{{function,spawn,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1880}],[<<115,112,97,119,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46>>]},{p,[],[{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114,58,117,110,100,101,102,105,110,101,100,95,102,117,110,99,116,105,111,110,40,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,103,115,41>>]},<<32,105,115,32,101,118,97,108,117,97,116,101,100,32,98,121,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,105,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,47,65,114,105,116,121>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,40,119,104,101,114,101,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32>>,{code,[],[<<65,114,103,115>>]},<<41,46,32,84,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,99,97,110,32,98,101,32,114,101,100,101,102,105,110,101,100,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<41,46,32,73,102,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,111,114,32,116,104,101,32,117,115,101,114,32,104,97,115,32,114,101,100,101,102,105,110,101,100,32,116,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,97,110,100,32,105,116,115,32,114,101,112,108,97,99,101,109,101,110,116,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,32,102,97,105,108,117,114,101,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<117,110,100,101,102>>]},<<32,111,99,99,117,114,115,46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,112,97,119,110,40,115,112,101,101,100,44,32,114,101,103,117,108,97,116,111,114,44,32,91,104,105,103,104,95,115,112,101,101,100,44,32,116,104,105,110,95,99,117,116,93,41,46,10,60,48,46,49,51,46,49,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,54,56>>,signature => [{attribute,1880,spec,{{spawn,3},[{type,1880,bounded_fun,[{type,1880,'fun',[{type,1880,product,[{var,1880,'Module'},{var,1880,'Function'},{var,1880,'Args'}]},{type,1880,pid,[]}]},[{type,1881,constraint,[{atom,1881,is_subtype},[{var,1881,'Module'},{type,1881,module,[]}]]},{type,1882,constraint,[{atom,1882,is_subtype},[{var,1882,'Function'},{type,1882,atom,[]}]]},{type,1883,constraint,[{atom,1883,is_subtype},[{var,1883,'Args'},{type,1883,list,[{type,1883,term,[]}]}]]}]]}]}}]}},{{function,spawn,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3042}],[<<115,112,97,119,110,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,57,51>>,signature => [{attribute,3042,spec,{{spawn,4},[{type,3042,bounded_fun,[{type,3042,'fun',[{type,3042,product,[{var,3042,'Node'},{var,3042,'Module'},{var,3042,'Function'},{var,3042,'Args'}]},{type,3042,pid,[]}]},[{type,3043,constraint,[{atom,3043,is_subtype},[{var,3043,'Node'},{type,3043,node,[]}]]},{type,3044,constraint,[{atom,3044,is_subtype},[{var,3044,'Module'},{type,3044,module,[]}]]},{type,3045,constraint,[{atom,3045,is_subtype},[{var,3045,'Function'},{type,3045,atom,[]}]]},{type,3046,constraint,[{atom,3046,is_subtype},[{var,3046,'Args'},{type,3046,list,[{type,3046,term,[]}]}]]}]]}]}}]}},{{function,spawn_link,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2925}],[<<115,112,97,119,110,95,108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,48,56>>,signature => [{attribute,2925,spec,{{spawn_link,1},[{type,2925,bounded_fun,[{type,2925,'fun',[{type,2925,product,[{var,2925,'Fun'}]},{type,2925,pid,[]}]},[{type,2926,constraint,[{atom,2926,is_subtype},[{var,2926,'Fun'},{type,2926,function,[]}]]}]]}]}}]}},{{function,spawn_link,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2934}],[<<115,112,97,119,110,95,108,105,110,107,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,32,97,110,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,50,50>>,signature => [{attribute,2934,spec,{{spawn_link,2},[{type,2934,bounded_fun,[{type,2934,'fun',[{type,2934,product,[{var,2934,'Node'},{var,2934,'Fun'}]},{type,2934,pid,[]}]},[{type,2935,constraint,[{atom,2935,is_subtype},[{var,2935,'Node'},{type,2935,node,[]}]]},{type,2936,constraint,[{atom,2936,is_subtype},[{var,2936,'Fun'},{type,2936,function,[]}]]}]]}]}}]}},{{function,spawn_link,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1888}],[<<115,112,97,119,110,95,108,105,110,107,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,51,57>>,signature => [{attribute,1888,spec,{{spawn_link,3},[{type,1888,bounded_fun,[{type,1888,'fun',[{type,1888,product,[{var,1888,'Module'},{var,1888,'Function'},{var,1888,'Args'}]},{type,1888,pid,[]}]},[{type,1889,constraint,[{atom,1889,is_subtype},[{var,1889,'Module'},{type,1889,module,[]}]]},{type,1890,constraint,[{atom,1890,is_subtype},[{var,1890,'Function'},{type,1890,atom,[]}]]},{type,1891,constraint,[{atom,1891,is_subtype},[{var,1891,'Args'},{type,1891,list,[{type,1891,term,[]}]}]]}]]}]}}]}},{{function,spawn_link,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3064}],[<<115,112,97,119,110,95,108,105,110,107,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,32,97,110,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,53,51>>,signature => [{attribute,3064,spec,{{spawn_link,4},[{type,3064,bounded_fun,[{type,3064,'fun',[{type,3064,product,[{var,3064,'Node'},{var,3064,'Module'},{var,3064,'Function'},{var,3064,'Args'}]},{type,3064,pid,[]}]},[{type,3065,constraint,[{atom,3065,is_subtype},[{var,3065,'Node'},{type,3065,node,[]}]]},{type,3066,constraint,[{atom,3066,is_subtype},[{var,3066,'Module'},{type,3066,module,[]}]]},{type,3067,constraint,[{atom,3067,is_subtype},[{var,3067,'Function'},{type,3067,atom,[]}]]},{type,3068,constraint,[{atom,3068,is_subtype},[{var,3068,'Args'},{type,3068,list,[{type,3068,term,[]}]}]]}]]}]}}]}},{{function,spawn_monitor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2948}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,44,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<44,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,97,32,109,111,110,105,116,111,114,32,99,114,101,97,116,101,100,32,116,111,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,55,49>>,signature => [{attribute,2948,spec,{{spawn_monitor,1},[{type,2948,bounded_fun,[{type,2948,'fun',[{type,2948,product,[{var,2948,'Fun'}]},{type,2948,tuple,[{type,2948,pid,[]},{type,2948,reference,[]}]}]},[{type,2949,constraint,[{atom,2949,is_subtype},[{var,2949,'Fun'},{type,2949,function,[]}]]}]]}]}}]}},{{function,spawn_monitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2955}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,44,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<44,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,97,32,109,111,110,105,116,111,114,32,99,114,101,97,116,101,100,32,116,111,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,100,105,115,116,114,105,98,117,116,101,100,32>>,{code,[],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,40,41>>]},<<44,32,116,104,101,32,99,97,108,108,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,101,120,99,101,112,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,56,53>>,signature => [{attribute,2955,spec,{{spawn_monitor,2},[{type,2955,bounded_fun,[{type,2955,'fun',[{type,2955,product,[{var,2955,'Node'},{var,2955,'Fun'}]},{type,2955,tuple,[{type,2955,pid,[]},{type,2955,reference,[]}]}]},[{type,2956,constraint,[{atom,2956,is_subtype},[{var,2956,'Node'},{type,2956,node,[]}]]},{type,2957,constraint,[{atom,2957,is_subtype},[{var,2957,'Fun'},{type,2957,function,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_monitor,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2969}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,51>>],#{<<101,110>> => [{p,[],[<<65,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,84,104,101,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,48,50>>,signature => [{attribute,2969,spec,{{spawn_monitor,3},[{type,2969,bounded_fun,[{type,2969,'fun',[{type,2969,product,[{var,2969,'Module'},{var,2969,'Function'},{var,2969,'Args'}]},{type,2969,tuple,[{type,2969,pid,[]},{type,2969,reference,[]}]}]},[{type,2970,constraint,[{atom,2970,is_subtype},[{var,2970,'Module'},{type,2970,module,[]}]]},{type,2971,constraint,[{atom,2971,is_subtype},[{var,2971,'Function'},{type,2971,atom,[]}]]},{type,2972,constraint,[{atom,2972,is_subtype},[{var,2972,'Args'},{type,2972,list,[{type,2972,term,[]}]}]]}]]}]}}]}},{{function,spawn_monitor,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3086}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,52>>],#{<<101,110>> => [{p,[],[<<65,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,84,104,101,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,100,105,115,116,114,105,98,117,116,101,100,32>>,{code,[],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,40,41>>]},<<44,32,116,104,101,32,99,97,108,108,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,101,120,99,101,112,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,49,54>>,signature => [{attribute,3086,spec,{{spawn_monitor,4},[{type,3086,bounded_fun,[{type,3086,'fun',[{type,3086,product,[{var,3086,'Node'},{var,3086,'Module'},{var,3086,'Function'},{var,3086,'Args'}]},{type,3086,tuple,[{type,3086,pid,[]},{type,3086,reference,[]}]}]},[{type,3087,constraint,[{atom,3087,is_subtype},[{var,3087,'Node'},{type,3087,node,[]}]]},{type,3088,constraint,[{atom,3088,is_subtype},[{var,3088,'Module'},{type,3088,module,[]}]]},{type,3089,constraint,[{atom,3089,is_subtype},[{var,3089,'Function'},{type,3089,atom,[]}]]},{type,3090,constraint,[{atom,3090,is_subtype},[{var,3090,'Args'},{type,3090,list,[{type,3090,term,[]}]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_opt,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2999}],[<<115,112,97,119,110,95,111,112,116,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<115,112,97,119,110,95,111,112,116,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,44,32,97,110,100,32,98,111,116,104,32,116,104,101,32,112,105,100,32,97,110,100,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,32,97,114,101,32,114,101,116,117,114,110,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,51,51>>,signature => [{attribute,2999,spec,{{spawn_opt,2},[{type,2999,bounded_fun,[{type,2999,'fun',[{type,2999,product,[{var,2999,'Fun'},{var,2999,'Options'}]},{type,2999,union,[{type,2999,pid,[]},{type,2999,tuple,[{type,2999,pid,[]},{type,2999,reference,[]}]}]}]},[{type,3000,constraint,[{atom,3000,is_subtype},[{var,3000,'Fun'},{type,3000,function,[]}]]},{type,3001,constraint,[{atom,3001,is_subtype},[{var,3001,'Options'},{type,3001,list,[{user_type,3001,spawn_opt_option,[]}]}]]}]]}]}}]}},{{function,spawn_opt,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3014}],[<<115,112,97,119,110,95,111,112,116,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]},{p,[],[<<86,97,108,105,100,32,111,112,116,105,111,110,115,32,100,101,112,101,110,100,115,32,111,110,32,119,104,97,116,32,111,112,116,105,111,110,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,102,111,114,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,111,102,32,99,117,114,114,101,110,116,32,79,84,80,32,118,101,114,115,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,53,49>>,signature => [{attribute,3014,spec,{{spawn_opt,3},[{type,3014,bounded_fun,[{type,3014,'fun',[{type,3014,product,[{var,3014,'Node'},{var,3014,'Fun'},{var,3014,'Options'}]},{type,3014,union,[{type,3014,pid,[]},{type,3014,tuple,[{type,3014,pid,[]},{type,3014,reference,[]}]}]}]},[{type,3015,constraint,[{atom,3015,is_subtype},[{var,3015,'Node'},{type,3015,node,[]}]]},{type,3016,constraint,[{atom,3016,is_subtype},[{var,3016,'Fun'},{type,3016,function,[]}]]},{type,3017,constraint,[{atom,3017,is_subtype},[{var,3017,'Options'},{type,3017,list,[{type,3017,union,[{atom,3017,monitor},{type,3018,tuple,[{atom,3018,monitor},{type,3018,list,[{user_type,3018,monitor_option,[]}]}]},{atom,3019,link},{var,3020,'OtherOption'}]}]}]]},{type,3021,constraint,[{atom,3021,is_subtype},[{var,3021,'OtherOption'},{type,3021,term,[]}]]}]]}]}}]}},{{function,spawn_opt,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3131}],[<<115,112,97,119,110,95,111,112,116,47,52>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<115,112,97,119,110,95,111,112,116,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<87,111,114,107,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,97,110,32,101,120,116,114,97,32,111,112,116,105,111,110,32,108,105,115,116,32,105,115,32,115,112,101,99,105,102,105,101,100,32,119,104,101,110,32,99,114,101,97,116,105,110,103,32,116,104,101,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,44,32,97,110,100,32,98,111,116,104,32,116,104,101,32,112,105,100,32,97,110,100,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,32,97,114,101,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,105,110,107>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,97,32,108,105,110,107,32,116,111,32,116,104,101,32,112,97,114,101,110,116,32,112,114,111,99,101,115,115,32,40,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,108,105,110,107,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,108,105,110,107,47,51>>]}]},<<32,100,111,101,115,41,46>>]}]},{dt,[],[{code,[],[<<109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<77,111,110,105,116,111,114,115,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,40,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,41>>]}]},<<32,100,111,101,115,41,46,32,65,32>>,{code,[],[<<123,80,105,100,44,32,77,111,110,105,116,111,114,82,101,102,125>>]},<<32,116,117,112,108,101,32,119,105,108,108,32,98,101,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,32,111,102,32,106,117,115,116,32,97,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,44,32,77,111,110,105,116,111,114,79,112,116,115,125>>]}]},{dd,[],[{p,[],[<<77,111,110,105,116,111,114,115,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,119,105,116,104,32,111,112,116,105,111,110,115,32,40,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,44,32,77,111,110,105,116,111,114,79,112,116,115,41>>]}]},<<32,100,111,101,115,41,46,32,65,32>>,{code,[],[<<123,80,105,100,44,32,77,111,110,105,116,111,114,82,101,102,125>>]},<<32,116,117,112,108,101,32,119,105,108,108,32,98,101,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,32,111,102,32,106,117,115,116,32,97,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,112,114,105,111,114,105,116,121,32,111,102,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,46,32,69,113,117,105,118,97,108,101,110,116,32,116,111,32,101,120,101,99,117,116,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]},<<32,105,110,32,116,104,101,32,115,116,97,114,116,32,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,101,120,99,101,112,116,32,116,104,97,116,32,116,104,101,32,112,114,105,111,114,105,116,121,32,105,115,32,115,101,116,32,98,101,102,111,114,101,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,32,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,112,114,105,111,114,105,116,105,101,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114,44,32,78,117,109,98,101,114,125>>]}]},{dd,[],[{p,[],[<<85,115,101,102,117,108,32,111,110,108,121,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,116,117,110,105,110,103,46,32,68,111,32,110,111,116,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,112,114,111,98,108,101,109,32,119,105,116,104,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,115,32,111,114,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,44,32,97,110,100,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,111,112,116,105,111,110,32,105,109,112,114,111,118,101,115,32,109,97,116,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,117,115,101,115,32,97,32,103,101,110,101,114,97,116,105,111,110,97,108,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,99,104,101,109,101,44,32,117,115,105,110,103,32,97,110,32,34,111,108,100,32,104,101,97,112,34,32,102,111,114,32,100,97,116,97,32,116,104,97,116,32,104,97,115,32,115,117,114,118,105,118,101,100,32,97,116,32,108,101,97,115,116,32,111,110,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,104,101,110,32,116,104,101,114,101,32,105,115,32,110,111,32,109,111,114,101,32,114,111,111,109,32,111,110,32,116,104,101,32,111,108,100,32,104,101,97,112,44,32,97,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,100,111,110,101,46>>]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,103,101,110,101,114,97,116,105,111,110,97,108,32,99,111,108,108,101,99,116,105,111,110,115,32,98,101,102,111,114,101,32,102,111,114,99,105,110,103,32,97,32,102,117,108,108,115,119,101,101,112,44,32,101,118,101,110,32,105,102,32,116,104,101,114,101,32,105,115,32,114,111,111,109,32,111,110,32,116,104,101,32,111,108,100,32,104,101,97,112,46,32,83,101,116,116,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,116,111,32,122,101,114,111,32,100,105,115,97,98,108,101,115,32,116,104,101,32,103,101,110,101,114,97,108,32,99,111,108,108,101,99,116,105,111,110,32,97,108,103,111,114,105,116,104,109,44,32,116,104,97,116,32,105,115,44,32,97,108,108,32,108,105,118,101,32,100,97,116,97,32,105,115,32,99,111,112,105,101,100,32,97,116,32,101,118,101,114,121,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[<<65,32,102,101,119,32,99,97,115,101,115,32,119,104,101,110,32,105,116,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,116,111,32,99,104,97,110,103,101,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,98,105,110,97,114,105,101,115,32,116,104,97,116,32,97,114,101,32,110,111,32,108,111,110,103,101,114,32,117,115,101,100,32,97,114,101,32,116,111,32,98,101,32,116,104,114,111,119,110,32,97,119,97,121,32,97,115,32,115,111,111,110,32,97,115,32,112,111,115,115,105,98,108,101,46,32,40,83,101,116,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,122,101,114,111,46,41>>]}]},{li,[],[{p,[],[<<65,32,112,114,111,99,101,115,115,32,116,104,97,116,32,109,111,115,116,108,121,32,104,97,118,101,32,115,104,111,114,116,45,108,105,118,101,100,32,100,97,116,97,32,105,115,32,102,117,108,108,115,119,101,101,112,101,100,32,115,101,108,100,111,109,32,111,114,32,110,101,118,101,114,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,111,108,100,32,104,101,97,112,32,99,111,110,116,97,105,110,115,32,109,111,115,116,108,121,32,103,97,114,98,97,103,101,46,32,84,111,32,101,110,115,117,114,101,32,97,32,102,117,108,108,115,119,101,101,112,32,111,99,99,97,115,105,111,110,97,108,108,121,44,32,115,101,116,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,97,32,115,117,105,116,97,98,108,101,32,118,97,108,117,101,44,32,115,117,99,104,32,97,115,32,49,48,32,111,114,32,50,48,46>>]}]},{li,[],[<<73,110,32,101,109,98,101,100,100,101,100,32,115,121,115,116,101,109,115,32,119,105,116,104,32,97,32,108,105,109,105,116,101,100,32,97,109,111,117,110,116,32,111,102,32,82,65,77,32,97,110,100,32,110,111,32,118,105,114,116,117,97,108,32,109,101,109,111,114,121,44,32,121,111,117,32,109,105,103,104,116,32,119,97,110,116,32,116,111,32,112,114,101,115,101,114,118,101,32,109,101,109,111,114,121,32,98,121,32,115,101,116,116,105,110,103,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,122,101,114,111,46,32,40,84,104,101,32,118,97,108,117,101,32,99,97,110,32,98,101,32,115,101,116,32,103,108,111,98,97,108,108,121,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,47,50>>]}]},<<46,41>>]}]}]},{dt,[],[{code,[],[<<123,109,105,110,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<85,115,101,102,117,108,32,111,110,108,121,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,116,117,110,105,110,103,46,32,68,111,32,110,111,116,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,112,114,111,98,108,101,109,32,119,105,116,104,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,115,32,111,114,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,44,32,97,110,100,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,111,112,116,105,111,110,32,105,109,112,114,111,118,101,115,32,109,97,116,116,101,114,115,46>>]},{p,[],[<<71,105,118,101,115,32,97,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,118,97,108,117,101,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,99,97,110,32,115,112,101,101,100,32,117,112,32,115,111,109,101,32,112,114,111,99,101,115,115,101,115,32,98,101,99,97,117,115,101,32,108,101,115,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,100,111,110,101,46,32,72,111,119,101,118,101,114,44,32,115,101,116,116,105,110,103,32,97,32,116,111,111,32,104,105,103,104,32,118,97,108,117,101,32,99,97,110,32,119,97,115,116,101,32,109,101,109,111,114,121,32,97,110,100,32,115,108,111,119,32,100,111,119,110,32,116,104,101,32,115,121,115,116,101,109,32,98,101,99,97,117,115,101,32,111,102,32,119,111,114,115,101,32,100,97,116,97,32,108,111,99,97,108,105,116,121,46,32,84,104,101,114,101,102,111,114,101,44,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,111,110,108,121,32,102,111,114,32,102,105,110,101,45,116,117,110,105,110,103,32,97,110,32,97,112,112,108,105,99,97,116,105,111,110,32,97,110,100,32,116,111,32,109,101,97,115,117,114,101,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,119,105,116,104,32,118,97,114,105,111,117,115,32>>,{code,[],[<<83,105,122,101>>]},<<32,118,97,108,117,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101,44,32,86,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<85,115,101,102,117,108,32,111,110,108,121,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,116,117,110,105,110,103,46,32,68,111,32,110,111,116,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,112,114,111,98,108,101,109,32,119,105,116,104,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,115,32,111,114,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,44,32,97,110,100,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,111,112,116,105,111,110,32,105,109,112,114,111,118,101,115,32,109,97,116,116,101,114,115,46>>]},{p,[],[<<71,105,118,101,115,32,97,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,118,97,108,117,101,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,99,97,110,32,115,112,101,101,100,32,117,112,32,115,111,109,101,32,112,114,111,99,101,115,115,101,115,32,98,101,99,97,117,115,101,32,108,101,115,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,100,111,110,101,46,32,72,111,119,101,118,101,114,44,32,115,101,116,116,105,110,103,32,97,32,116,111,111,32,104,105,103,104,32,118,97,108,117,101,32,99,97,110,32,119,97,115,116,101,32,109,101,109,111,114,121,46,32,84,104,101,114,101,102,111,114,101,44,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,111,110,108,121,32,102,111,114,32,102,105,110,101,45,116,117,110,105,110,103,32,97,110,32,97,112,112,108,105,99,97,116,105,111,110,32,97,110,100,32,116,111,32,109,101,97,115,117,114,101,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,119,105,116,104,32,118,97,114,105,111,117,115,32>>,{code,[],[<<86,83,105,122,101>>]},<<32,118,97,108,117,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,46,32,84,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,115,116,97,116,101,32,111,102,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,46,32>>,{code,[],[<<77,81,68>>]},<<32,105,115,32,116,111,32,98,101,32,101,105,116,104,101,114,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<32,111,114,32>>,{code,[],[<<111,110,95,104,101,97,112>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,113,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,113,100>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,55,52>>,signature => [{attribute,3131,spec,{{spawn_opt,4},[{type,3131,bounded_fun,[{type,3131,'fun',[{type,3131,product,[{var,3131,'Module'},{var,3131,'Function'},{var,3131,'Args'},{var,3131,'Options'}]},{type,3132,union,[{var,3132,'Pid'},{type,3132,tuple,[{var,3132,'Pid'},{var,3132,'MonitorRef'}]}]}]},[{type,3133,constraint,[{atom,3133,is_subtype},[{var,3133,'Module'},{type,3133,module,[]}]]},{type,3134,constraint,[{atom,3134,is_subtype},[{var,3134,'Function'},{type,3134,atom,[]}]]},{type,3135,constraint,[{atom,3135,is_subtype},[{var,3135,'Args'},{type,3135,list,[{type,3135,term,[]}]}]]},{type,3136,constraint,[{atom,3136,is_subtype},[{var,3136,'Options'},{type,3136,list,[{user_type,3136,spawn_opt_option,[]}]}]]},{type,3137,constraint,[{atom,3137,is_subtype},[{var,3137,'Pid'},{type,3137,pid,[]}]]},{type,3138,constraint,[{atom,3138,is_subtype},[{var,3138,'MonitorRef'},{type,3138,reference,[]}]]}]]}]}}]}},{{function,spawn_opt,5},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3143}],[<<115,112,97,119,110,95,111,112,116,47,53>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]},{p,[],[<<86,97,108,105,100,32,111,112,116,105,111,110,115,32,100,101,112,101,110,100,115,32,111,110,32,119,104,97,116,32,111,112,116,105,111,110,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,102,111,114,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,111,102,32,99,117,114,114,101,110,116,32,79,84,80,32,118,101,114,115,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,50,50>>,signature => [{attribute,3143,spec,{{spawn_opt,5},[{type,3143,bounded_fun,[{type,3143,'fun',[{type,3143,product,[{var,3143,'Node'},{var,3143,'Module'},{var,3143,'Function'},{var,3143,'Args'},{var,3143,'Options'}]},{type,3144,union,[{type,3144,pid,[]},{type,3144,tuple,[{type,3144,pid,[]},{type,3144,reference,[]}]}]}]},[{type,3145,constraint,[{atom,3145,is_subtype},[{var,3145,'Node'},{type,3145,node,[]}]]},{type,3146,constraint,[{atom,3146,is_subtype},[{var,3146,'Module'},{type,3146,module,[]}]]},{type,3147,constraint,[{atom,3147,is_subtype},[{var,3147,'Function'},{type,3147,atom,[]}]]},{type,3148,constraint,[{atom,3148,is_subtype},[{var,3148,'Args'},{type,3148,list,[{type,3148,term,[]}]}]]},{type,3149,constraint,[{atom,3149,is_subtype},[{var,3149,'Options'},{type,3149,list,[{type,3149,union,[{atom,3149,monitor},{type,3150,tuple,[{atom,3150,monitor},{type,3150,list,[{user_type,3150,monitor_option,[]}]}]},{atom,3151,link},{var,3152,'OtherOption'}]}]}]]},{type,3153,constraint,[{atom,3153,is_subtype},[{var,3153,'OtherOption'},{type,3153,term,[]}]]}]]}]}}]}},{{function,spawn_request,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3246}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,70,117,110,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,52,54>>,signature => [{attribute,3246,spec,{{spawn_request,1},[{type,3246,bounded_fun,[{type,3246,'fun',[{type,3246,product,[{var,3246,'Fun'}]},{var,3246,'ReqId'}]},[{type,3247,constraint,[{atom,3247,is_subtype},[{var,3247,'Fun'},{type,3247,function,[]}]]},{type,3248,constraint,[{atom,3248,is_subtype},[{var,3248,'ReqId'},{type,3248,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3264}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,70,117,110,44,79,112,116,105,111,110,115,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,53,56>>,signature => [{attribute,3264,spec,{{spawn_request,2},[{type,3264,bounded_fun,[{type,3264,'fun',[{type,3264,product,[{var,3264,'Fun'},{var,3264,'Options'}]},{var,3264,'ReqId'}]},[{type,3265,constraint,[{atom,3265,is_subtype},[{var,3265,'Fun'},{type,3265,function,[]}]]},{type,3266,constraint,[{atom,3266,is_subtype},[{var,3266,'Option'},{type,3266,union,[{type,3266,tuple,[{atom,3266,reply_tag},{var,3266,'ReplyTag'}]},{type,3267,tuple,[{atom,3267,reply},{var,3267,'Reply'}]},{user_type,3268,spawn_opt_option,[]}]}]]},{type,3269,constraint,[{atom,3269,is_subtype},[{var,3269,'ReplyTag'},{type,3269,term,[]}]]},{type,3270,constraint,[{atom,3270,is_subtype},[{var,3270,'Reply'},{type,3270,union,[{atom,3270,yes},{atom,3270,no},{atom,3270,error_only},{atom,3270,success_only}]}]]},{type,3271,constraint,[{atom,3271,is_subtype},[{var,3271,'Options'},{type,3271,list,[{var,3271,'Option'}]}]]},{type,3272,constraint,[{atom,3272,is_subtype},[{var,3272,'ReqId'},{type,3272,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3264}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,78,111,100,101,44,70,117,110,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,55,48>>,signature => [{attribute,3264,spec,{{spawn_request,2},[{type,3273,bounded_fun,[{type,3273,'fun',[{type,3273,product,[{var,3273,'Node'},{var,3273,'Fun'}]},{var,3273,'ReqId'}]},[{type,3274,constraint,[{atom,3274,is_subtype},[{var,3274,'Node'},{type,3274,node,[]}]]},{type,3275,constraint,[{atom,3275,is_subtype},[{var,3275,'Fun'},{type,3275,function,[]}]]},{type,3276,constraint,[{atom,3276,is_subtype},[{var,3276,'ReqId'},{type,3276,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3299}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,78,111,100,101,44,101,114,108,97,110,103,44,97,112,112,108,121,44,91,70,117,110,44,91,93,93,44,79,112,116,105,111,110,115,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,117,115,105,110,103,32,116,104,101,32,102,117,110,32>>,{code,[],[<<70,117,110>>]},<<32,111,102,32,97,114,105,116,121,32,122,101,114,111,32,97,115,32,101,110,116,114,121,32,112,111,105,110,116,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<78,111,100,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<70,117,110>>]},<<32,105,115,32,110,111,116,32,97,32,102,117,110,32,111,102,32,97,114,105,116,121,32,122,101,114,111,46>>]}]},{li,[],[{p,[],[{code,[],[<<79,112,116,105,111,110,115>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,116,101,114,109,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,56,50>>,signature => [{attribute,3299,spec,{{spawn_request,3},[{type,3299,bounded_fun,[{type,3299,'fun',[{type,3299,product,[{var,3299,'Node'},{var,3299,'Fun'},{var,3299,'Options'}]},{var,3299,'ReqId'}]},[{type,3300,constraint,[{atom,3300,is_subtype},[{var,3300,'Node'},{type,3300,node,[]}]]},{type,3301,constraint,[{atom,3301,is_subtype},[{var,3301,'Fun'},{type,3301,function,[]}]]},{type,3302,constraint,[{atom,3302,is_subtype},[{var,3302,'Options'},{type,3302,list,[{var,3302,'Option'}]}]]},{type,3303,constraint,[{atom,3303,is_subtype},[{var,3303,'Option'},{type,3303,union,[{atom,3303,monitor},{type,3304,tuple,[{atom,3304,monitor},{type,3304,list,[{user_type,3304,monitor_option,[]}]}]},{atom,3305,link},{type,3306,tuple,[{atom,3306,reply_tag},{var,3306,'ReplyTag'}]},{type,3307,tuple,[{atom,3307,reply},{var,3307,'Reply'}]},{var,3308,'OtherOption'}]}]]},{type,3309,constraint,[{atom,3309,is_subtype},[{var,3309,'ReplyTag'},{type,3309,term,[]}]]},{type,3310,constraint,[{atom,3310,is_subtype},[{var,3310,'Reply'},{type,3310,union,[{atom,3310,yes},{atom,3310,no},{atom,3310,error_only},{atom,3310,success_only}]}]]},{type,3311,constraint,[{atom,3311,is_subtype},[{var,3311,'OtherOption'},{type,3311,term,[]}]]},{type,3312,constraint,[{atom,3312,is_subtype},[{var,3312,'ReqId'},{type,3312,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3299}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,65,114,103,115,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,48,50>>,signature => [{attribute,3299,spec,{{spawn_request,3},[{type,3313,bounded_fun,[{type,3313,'fun',[{type,3313,product,[{var,3313,'Module'},{var,3313,'Function'},{var,3313,'Args'}]},{var,3314,'ReqId'}]},[{type,3315,constraint,[{atom,3315,is_subtype},[{var,3315,'Module'},{type,3315,module,[]}]]},{type,3316,constraint,[{atom,3316,is_subtype},[{var,3316,'Function'},{type,3316,atom,[]}]]},{type,3317,constraint,[{atom,3317,is_subtype},[{var,3317,'Args'},{type,3317,list,[{type,3317,term,[]}]}]]},{type,3318,constraint,[{atom,3318,is_subtype},[{var,3318,'ReqId'},{type,3318,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3339}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,52>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,78,111,100,101,44,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,65,114,103,115,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,49,52>>,signature => [{attribute,3339,spec,{{spawn_request,4},[{type,3339,bounded_fun,[{type,3339,'fun',[{type,3339,product,[{var,3339,'Node'},{var,3339,'Module'},{var,3339,'Function'},{var,3339,'Args'}]},{var,3340,'ReqId'}]},[{type,3341,constraint,[{atom,3341,is_subtype},[{var,3341,'Node'},{type,3341,node,[]}]]},{type,3342,constraint,[{atom,3342,is_subtype},[{var,3342,'Module'},{type,3342,module,[]}]]},{type,3343,constraint,[{atom,3343,is_subtype},[{var,3343,'Function'},{type,3343,atom,[]}]]},{type,3344,constraint,[{atom,3344,is_subtype},[{var,3344,'Args'},{type,3344,list,[{type,3344,term,[]}]}]]},{type,3345,constraint,[{atom,3345,is_subtype},[{var,3345,'ReqId'},{type,3345,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3339}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,52>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,65,114,103,115,44,79,112,116,105,111,110,115,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,50,54>>,signature => [{attribute,3339,spec,{{spawn_request,4},[{type,3346,bounded_fun,[{type,3346,'fun',[{type,3346,product,[{var,3346,'Module'},{var,3346,'Function'},{var,3346,'Args'},{var,3346,'Options'}]},{var,3347,'ReqId'}]},[{type,3348,constraint,[{atom,3348,is_subtype},[{var,3348,'Module'},{type,3348,module,[]}]]},{type,3349,constraint,[{atom,3349,is_subtype},[{var,3349,'Function'},{type,3349,atom,[]}]]},{type,3350,constraint,[{atom,3350,is_subtype},[{var,3350,'Args'},{type,3350,list,[{type,3350,term,[]}]}]]},{type,3351,constraint,[{atom,3351,is_subtype},[{var,3351,'Option'},{type,3351,union,[{type,3351,tuple,[{atom,3351,reply_tag},{var,3351,'ReplyTag'}]},{type,3352,tuple,[{atom,3352,reply},{var,3352,'Reply'}]},{user_type,3353,spawn_opt_option,[]}]}]]},{type,3354,constraint,[{atom,3354,is_subtype},[{var,3354,'ReplyTag'},{type,3354,term,[]}]]},{type,3355,constraint,[{atom,3355,is_subtype},[{var,3355,'Reply'},{type,3355,union,[{atom,3355,yes},{atom,3355,no},{atom,3355,error_only},{atom,3355,success_only}]}]]},{type,3356,constraint,[{atom,3356,is_subtype},[{var,3356,'Options'},{type,3356,list,[{var,3356,'Option'}]}]]},{type,3357,constraint,[{atom,3357,is_subtype},[{var,3357,'ReqId'},{type,3357,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,5},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3380}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>],#{<<101,110>> => [{p,[],[<<65,115,121,110,99,104,114,111,110,111,117,115,108,121,32,115,101,110,100,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46,32,82,101,116,117,114,110,115,32,97,32,114,101,113,117,101,115,116,32,105,100,101,110,116,105,102,105,101,114,32>>,{code,[],[<<82,101,113,73,100>>]},<<46>>]},{a,[{id,<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>}],[]},{p,[],[<<73,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,99,114,101,97,116,101,100,32,111,110,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,87,104,101,110,32,97,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,98,121,32,100,101,102,97,117,108,116,32,98,101,32,115,101,110,116,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,82,101,112,108,121,84,97,103,44,32,82,101,113,73,100,44,32,111,107,44,32,80,105,100,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,83,117,99,104,32,97,32,109,101,115,115,97,103,101,32,105,115,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,97,32>>,{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]},<<32,98,101,108,111,119,32,105,110,32,116,104,101,32,116,101,120,116,46,32>>,{code,[],[<<82,101,112,108,121,84,97,103>>]},<<32,105,115,32,98,121,32,100,101,102,97,117,108,116,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,112,97,119,110,95,114,101,112,108,121>>]},<<32,117,110,108,101,115,115,32,109,111,100,105,102,105,101,100,32,98,121,32,116,104,101,32>>,{code,[],[<<123,114,101,112,108,121,95,116,97,103,44,32,82,101,112,108,121,84,97,103,125>>]},<<32,111,112,116,105,111,110,46,32,84,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46>>]},{a,[{id,<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>}],[]},{p,[],[<<84,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,32,101,105,116,104,101,114,32,105,102,32,99,114,101,97,116,105,111,110,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,102,97,105,108,101,100,32,111,114,32,105,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,119,97,115,32,105,110,116,101,114,114,117,112,116,101,100,32,98,121,32,97,32,99,111,110,110,101,99,116,105,111,110,32,102,97,105,108,117,114,101,46,32,87,104,101,110,32,97,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,98,121,32,100,101,102,97,117,108,116,32,98,101,32,115,101,110,116,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,82,101,112,108,121,84,97,103,44,32,82,101,113,73,100,44,32,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,116,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,46,32,83,117,99,104,32,97,32,109,101,115,115,97,103,101,32,105,115,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,97,110,32>>,{i,[],[<<101,114,114,111,114,32,109,101,115,115,97,103,101>>]},<<32,98,101,108,111,119,32,105,110,32,116,104,101,32,116,101,120,116,46,32,67,117,114,114,101,110,116,108,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,112,97,119,110,32,101,114,114,111,114,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<115,32,97,114,101,32,100,101,102,105,110,101,100,44,32,98,117,116,32,111,116,104,101,114,32,114,101,97,115,111,110,115,32,99,97,110,32,97,112,112,101,97,114,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,111,112,116>>]}]},{dd,[],[{p,[],[<<65,110,32,105,110,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<32,119,97,115,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46,32,78,111,116,101,32,116,104,97,116,32,100,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,115,32,109,97,121,32,115,117,112,112,111,114,116,32,100,105,102,102,101,114,101,110,116,32,111,112,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,115,32,105,115,115,117,101,100,32,98,121,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<70,97,105,108,117,114,101,32,116,111,32,115,101,116,32,117,112,32,97,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,111,114,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,97,116,32,110,111,100,101,32,119,97,115,32,108,111,115,116,32,100,117,114,105,110,103,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,73,110,32,116,104,101,32,99,97,115,101,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,119,97,115,32,108,111,115,116,44,32,97,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,104,97,118,101,32,98,101,101,110,32,99,114,101,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<67,111,117,108,100,32,110,111,116,32,99,114,101,97,116,101,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,100,117,101,32,116,111,32,116,104,97,116,32,115,111,109,101,32,115,121,115,116,101,109,32,108,105,109,105,116,32,119,97,115,32,114,101,97,99,104,101,100,46,32,84,121,112,105,99,97,108,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,116,97,98,108,101,32,119,97,115,32,102,117,108,108,46>>]}]}]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<73,110,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,117,114,101,115,44,32,97,116,111,109,105,99,97,108,108,121,32,115,101,116,115,32,117,112,32,97,32,109,111,110,105,116,111,114,32,116,111,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,97,115,32,105,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,104,97,100,32,99,97,108,108,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,41>>]}]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,101,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<32,105,115,32,97,108,115,111,32,117,115,101,100,32,97,115,32,109,111,110,105,116,111,114,32,114,101,102,101,114,101,110,99,101,32,97,115,32,105,102,32,105,116,32,119,97,115,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,41>>]},<<46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,97,116,101,100,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,84,104,101,32,109,111,110,105,116,111,114,32,99,97,110,32,110,111,116,32,98,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<100,101,109,111,110,105,116,111,114,101,100>>]},<<32,98,101,102,111,114,101,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,65,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,102,111,114,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,109,111,110,105,116,111,114,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,110,111,116,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,116,104,97,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,73,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,110,111,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,46>>]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,98,101,116,119,101,101,110,32,116,104,101,32,110,111,100,101,115,32,105,110,118,111,108,118,101,100,32,105,110,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,105,115,32,108,111,115,116,32,100,117,114,105,110,103,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<46,32,65,32,110,101,119,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,104,97,118,101,32,98,101,101,110,32,99,114,101,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,44,32,77,111,110,105,116,111,114,79,112,116,115,125>>]}]},{dd,[],[{p,[],[<<73,110,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,117,114,101,115,44,32,97,116,111,109,105,99,97,108,108,121,32,115,101,116,115,32,117,112,32,97,32,109,111,110,105,116,111,114,32,116,111,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,97,115,32,105,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,104,97,100,32,99,97,108,108,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,44,32,77,111,110,105,116,111,114,79,112,116,115,41>>]}]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,83,101,101,32,116,104,101,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,111,112,116,105,111,110,32,97,98,111,118,101,32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,97,116,101,100,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,116,104,101,32,99,97,115,101,32,116,104,97,116,32,97,110,32,97,108,105,97,115,32,105,115,32,99,114,101,97,116,101,100,32,117,115,105,110,103,32,116,104,101,32,109,111,110,105,116,111,114,32,111,112,116,105,111,110,44,32,116,104,101,32,97,108,105,97,115,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,101,32,117,110,116,105,108,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,97,99,116,105,118,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<108,105,110,107>>]}]},{dd,[],[{p,[],[<<73,110,32,97,98,115,101,110,99,101,32,111,102,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,117,114,101,115,44,32,97,116,111,109,105,99,97,108,108,121,32,115,101,116,115,32,117,112,32,97,32,108,105,110,107,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,97,115,32,105,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,104,97,100,32,99,97,108,108,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,110,107,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,110,107,40,80,105,100,41>>]}]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<84,104,101,32,108,105,110,107,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,97,116,101,100,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,84,104,101,32,108,105,110,107,32,99,97,110,32,110,111,116,32,98,101,32,114,101,109,111,118,101,100,32,98,101,102,111,114,101,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,65,110,32,101,120,105,116,32,115,105,103,110,97,108,32,100,117,101,32,116,111,32,116,104,101,32,108,105,110,107,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,110,111,116,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,116,104,97,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,73,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,110,111,32,101,120,105,116,32,115,105,103,110,97,108,32,100,117,101,32,116,111,32,116,104,101,32,108,105,110,107,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,98,101,116,119,101,101,110,32,116,104,101,32,110,111,100,101,115,32,105,110,118,111,108,118,101,100,32,105,110,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,105,115,32,108,111,115,116,32,100,117,114,105,110,103,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<46,32,65,32,110,101,119,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,104,97,118,101,32,98,101,101,110,32,99,114,101,97,116,101,100,46,32,73,102,32,105,116,32,104,97,115,32,98,101,101,110,32,99,114,101,97,116,101,100,44,32,105,116,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,97,110,32,101,120,105,116,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,112,108,121,44,32,82,101,112,108,121,125>>]}]},{dd,[],[{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<82,101,112,108,121>>]},<<32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<121,101,115>>]}]},{dd,[],[{p,[],[<<65,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,32,111,114,32,110,111,116,46,32,73,102,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<32,114,101,116,117,114,110,115,32,119,105,116,104,111,117,116,32,114,97,105,115,105,110,103,32,97,110,32,101,120,99,101,112,116,105,111,110,32,97,110,100,32,116,104,101,32>>,{code,[],[<<114,101,112,108,121>>]},<<32,111,112,116,105,111,110,32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<121,101,115>>]},<<44,32,116,104,101,32,99,97,108,108,101,114,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,101,105,116,104,101,114,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,111,114,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<101,114,114,111,114,32,109,101,115,115,97,103,101>>]}]},<<46,32,84,104,101,32>>,{code,[],[<<114,101,112,108,121>>]},<<32,111,112,116,105,111,110,32,105,115,32,98,121,32,100,101,102,97,117,108,116,32,115,101,116,32,116,111,32>>,{code,[],[<<121,101,115>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,111>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,119,104,101,110,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,99,111,109,112,108,101,116,101,115,46,32,84,104,105,115,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,32,111,114,32,110,111,116,46>>]}]},{dt,[],[{code,[],[<<101,114,114,111,114,95,111,110,108,121>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,98,117,116,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<101,114,114,111,114,32,109,101,115,115,97,103,101>>]}]},<<32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,46>>]}]},{dt,[],[{code,[],[<<115,117,99,99,101,115,115,95,111,110,108,121>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,98,117,116,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,46>>]}]}]}]},{dt,[],[{code,[],[<<123,114,101,112,108,121,95,116,97,103,44,32,82,101,112,108,121,84,97,103,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,114,101,112,108,121,32,116,97,103,32,116,111,32>>,{code,[],[<<82,101,112,108,121,84,97,103>>]},<<32,105,110,32,116,104,101,32,114,101,112,108,121,32,109,101,115,115,97,103,101,46,32,84,104,97,116,32,105,115,44,32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<101,114,114,111,114>>]}]},<<32,109,101,115,115,97,103,101,32,116,104,97,116,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,100,117,101,32,116,111,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,84,104,101,32,100,101,102,97,117,108,116,32,114,101,112,108,121,32,116,97,103,32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,112,97,119,110,95,114,101,112,108,121>>]},<<46>>]}]},{dt,[],[{code,[],[<<79,116,104,101,114,79,112,116,105,111,110>>]}]},{dd,[],[{p,[],[<<79,116,104,101,114,32,118,97,108,105,100,32,111,112,116,105,111,110,115,32,100,101,112,101,110,100,115,32,111,110,32,119,104,97,116,32,111,112,116,105,111,110,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,111,116,104,101,114,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,102,111,114,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,111,102,32,99,117,114,114,101,110,116,32,79,84,80,32,118,101,114,115,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]}]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<78,111,100,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<65,114,103,115>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,116,101,114,109,115,46>>]}]},{li,[],[{p,[],[{code,[],[<<79,112,116,105,111,110,115>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,116,101,114,109,115,46>>]}]}]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,110,111,116,32,97,108,108,32,105,110,100,105,118,105,100,117,97,108,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,97,114,101,32,99,104,101,99,107,101,100,32,119,104,101,110,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,46,32,83,111,109,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,99,97,110,32,111,110,108,121,32,98,101,32,99,104,101,99,107,101,100,32,111,110,32,114,101,99,101,112,116,105,111,110,32,111,102,32,116,104,101,32,114,101,113,117,101,115,116,46,32,84,104,101,114,101,102,111,114,101,32,97,110,32,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,99,97,117,115,101,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,44,32,98,117,116,32,119,105,108,108,32,99,97,117,115,101,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,116,111,32,102,97,105,108,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<98,97,100,111,112,116>>]},<<46>>]},{p,[],[<<65,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,99,97,110,32,98,101,32,97,98,97,110,100,111,110,101,100,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,51,56>>,signature => [{attribute,3380,spec,{{spawn_request,5},[{type,3380,bounded_fun,[{type,3380,'fun',[{type,3380,product,[{var,3380,'Node'},{var,3380,'Module'},{var,3380,'Function'},{var,3380,'Args'},{var,3380,'Options'}]},{var,3381,'ReqId'}]},[{type,3382,constraint,[{atom,3382,is_subtype},[{var,3382,'Node'},{type,3382,node,[]}]]},{type,3383,constraint,[{atom,3383,is_subtype},[{var,3383,'Module'},{type,3383,module,[]}]]},{type,3384,constraint,[{atom,3384,is_subtype},[{var,3384,'Function'},{type,3384,atom,[]}]]},{type,3385,constraint,[{atom,3385,is_subtype},[{var,3385,'Args'},{type,3385,list,[{type,3385,term,[]}]}]]},{type,3386,constraint,[{atom,3386,is_subtype},[{var,3386,'Options'},{type,3386,list,[{var,3386,'Option'}]}]]},{type,3387,constraint,[{atom,3387,is_subtype},[{var,3387,'Option'},{type,3387,union,[{atom,3387,monitor},{type,3388,tuple,[{atom,3388,monitor},{type,3388,list,[{user_type,3388,monitor_option,[]}]}]},{atom,3389,link},{type,3390,tuple,[{atom,3390,reply_tag},{var,3390,'ReplyTag'}]},{type,3391,tuple,[{atom,3391,reply},{var,3391,'Reply'}]},{var,3392,'OtherOption'}]}]]},{type,3393,constraint,[{atom,3393,is_subtype},[{var,3393,'ReplyTag'},{type,3393,term,[]}]]},{type,3394,constraint,[{atom,3394,is_subtype},[{var,3394,'Reply'},{type,3394,union,[{atom,3394,yes},{atom,3394,no},{atom,3394,error_only},{atom,3394,success_only}]}]]},{type,3395,constraint,[{atom,3395,is_subtype},[{var,3395,'OtherOption'},{type,3395,term,[]}]]},{type,3396,constraint,[{atom,3396,is_subtype},[{var,3396,'ReqId'},{type,3396,reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request_abandon,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3413}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<65,98,97,110,100,111,110,32,97,32,112,114,101,118,105,111,117,115,108,121,32,105,115,115,117,101,100,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,97,32,114,101,113,117,101,115,116,32,105,100,101,110,116,105,102,105,101,114,32,112,114,101,118,105,111,117,115,108,121,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]}]},<<32,105,110,32,97,32,99,97,108,108,32,102,114,111,109,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,115,32,109,97,100,101,32,116,104,101,32,114,101,113,117,101,115,116,32,99,97,110,32,97,98,97,110,100,111,110,32,116,104,101,32,114,101,113,117,101,115,116,46>>]},{p,[],[<<65,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,99,97,110,32,111,110,108,121,32,98,101,32,115,117,99,99,101,115,115,102,117,108,108,121,32,97,98,97,110,100,111,110,101,100,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,104,97,115,32,99,111,109,112,108,101,116,101,100,46,32,87,104,101,110,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,115,117,99,99,101,115,115,102,117,108,108,121,32,97,98,97,110,100,111,110,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,110,111,116,32,98,101,32,101,102,102,101,99,116,101,100,32,98,121,32,102,117,116,117,114,101,32,100,105,114,101,99,116,32,101,102,102,101,99,116,115,32,111,102,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,116,115,101,108,102,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,119,105,108,108,32,110,111,116,32,114,101,99,101,105,118,101,32,97,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,46,32,84,104,101,32,114,101,113,117,101,115,116,32,105,115,32,104,111,119,101,118,101,114,32,110,111,116,32,119,105,116,104,100,114,97,119,110,44,32,115,111,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,98,101,32,99,114,101,97,116,101,100,32,100,117,101,32,116,111,32,116,104,101,32,114,101,113,117,101,115,116,46,32,73,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,99,114,101,97,116,101,100,32,97,102,116,101,114,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,97,115,32,97,98,97,110,100,111,110,101,100,44,32,110,111,32,109,111,110,105,116,111,114,115,32,110,111,114,32,108,105,110,107,115,32,119,105,108,108,32,98,101,32,115,101,116,32,117,112,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>]},<<32,100,117,101,32,116,111,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46,32,73,102,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,110,99,108,117,100,101,100,32,116,104,101,32>>,{code,[],[<<108,105,110,107>>]},<<32,111,112,116,105,111,110,44,32,116,104,101,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,100,117,101,32,116,111,32,116,104,105,115,32,114,101,113,117,101,115,116,32,119,105,108,108,32,98,101,32,115,101,110,116,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,105,116,115,32,112,97,114,101,110,116,32,119,105,116,104,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<97,98,97,110,100,111,110,101,100>>]},<<32,119,104,101,110,32,105,116,32,105,115,32,100,101,116,101,99,116,101,100,32,116,104,97,116,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,100,117,101,32,116,111,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,97,98,97,110,100,111,110,101,100,32,109,97,121,32,99,111,109,109,117,110,105,99,97,116,101,32,119,105,116,104,32,105,116,115,32,112,97,114,101,110,116,32,97,115,32,97,110,121,32,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,73,116,32,105,115,32>>,{em,[],[<<111,110,108,121>>]},<<32,116,104,101,32,100,105,114,101,99,116,32,101,102,102,101,99,116,115,32,111,110,32,116,104,101,32,112,97,114,101,110,116,32,111,102,32,116,104,101,32,97,99,116,117,97,108,32,115,112,97,119,110,32,114,101,113,117,101,115,116,44,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,97,110,99,101,108,101,100,32,98,121,32,97,98,97,110,100,111,110,105,110,103,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46>>]}]},{p,[],[<<82,101,116,117,114,110,32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,97,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,97,98,97,110,100,111,110,101,100,46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,97,115,32,97,98,97,110,100,111,110,101,100,46,32,84,104,101,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,114,101,113,117,101,115,116,32,105,100,101,110,116,105,102,105,101,114,32,100,105,100,32,110,111,116,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,97,110,32,111,117,116,115,116,97,110,100,105,110,103,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,115,115,117,101,100,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,101,105,116,104,101,114,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<82,101,113,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,112,114,101,118,105,111,117,108,115,121,32,109,97,100,101,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,99,111,109,112,108,101,116,101,100,32,97,110,100,32,97,32,115,112,97,119,110,32,114,101,112,108,121,32,104,97,115,32,97,108,114,101,97,100,121,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,108,101,115,115,32,116,104,101,32,115,112,97,119,110,32,114,101,112,108,121,32,119,97,115,32,100,105,115,97,98,108,101,100,32,105,110,32,116,104,101,32,114,101,113,117,101,115,116,46>>]}]},{li,[],[{p,[],[{code,[],[<<82,101,113,73,100>>]},<<32,100,111,101,115,32,110,111,116,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,109,97,100,101,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]}]}]}]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,105,115,32,110,111,116,32,97,32,114,101,102,101,114,101,110,99,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,57,53>>,signature => [{attribute,3413,spec,{{spawn_request_abandon,1},[{type,3413,'fun',[{type,3413,product,[{ann_type,3413,[{var,3413,'ReqId'},{type,3413,reference,[]}]}]},{type,3413,boolean,[]}]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,split_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1896}],[<<115,112,108,105,116,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,98,105,110,97,114,105,101,115,32,116,104,97,116,32,97,114,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,112,108,105,116,116,105,110,103,32>>,{code,[],[<<66,105,110>>]},<<32,105,110,116,111,32,116,119,111,32,112,97,114,116,115,32,97,116,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<80,111,115>>]},<<46,32,84,104,105,115,32,105,115,32,110,111,116,32,97,32,100,101,115,116,114,117,99,116,105,118,101,32,111,112,101,114,97,116,105,111,110,46,32,65,102,116,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,98,105,110,97,114,105,101,115,32,97,108,116,111,103,101,116,104,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,32,61,32,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,34,48,49,50,51,52,53,54,55,56,57,34,41,46,10,60,60,34,48,49,50,51,52,53,54,55,56,57,34,62,62,10,62,32,98,121,116,101,95,115,105,122,101,40,66,41,46,10,49,48,10,62,32,123,66,49,44,32,66,50,125,32,61,32,115,112,108,105,116,95,98,105,110,97,114,121,40,66,44,51,41,46,10,123,60,60,34,48,49,50,34,62,62,44,60,60,34,51,52,53,54,55,56,57,34,62,62,125,10,62,32,98,121,116,101,95,115,105,122,101,40,66,49,41,46,10,51,10,62,32,98,121,116,101,95,115,105,122,101,40,66,50,41,46,10,55>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,53,54,49>>,signature => [{attribute,1896,spec,{{split_binary,2},[{type,1896,bounded_fun,[{type,1896,'fun',[{type,1896,product,[{var,1896,'Bin'},{var,1896,'Pos'}]},{type,1896,tuple,[{type,1896,binary,[]},{type,1896,binary,[]}]}]},[{type,1897,constraint,[{atom,1897,is_subtype},[{var,1897,'Bin'},{type,1897,binary,[]}]]},{type,1898,constraint,[{atom,1898,is_subtype},[{var,1898,'Pos'},{type,1898,non_neg_integer,[]}]]}]]}]}}]}},{{function,start_timer,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1903}],[<<115,116,97,114,116,95,116,105,109,101,114,47,51>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,40,84,105,109,101,44,32,68,101,115,116,44,32,77,115,103,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,53,56,53>>,signature => [{attribute,1903,spec,{{erlang,start_timer,3},[{type,1903,bounded_fun,[{type,1903,'fun',[{type,1903,product,[{var,1903,'Time'},{var,1903,'Dest'},{var,1903,'Msg'}]},{var,1903,'TimerRef'}]},[{type,1904,constraint,[{atom,1904,is_subtype},[{var,1904,'Time'},{type,1904,non_neg_integer,[]}]]},{type,1905,constraint,[{atom,1905,is_subtype},[{var,1905,'Dest'},{type,1905,union,[{type,1905,pid,[]},{type,1905,atom,[]}]}]]},{type,1906,constraint,[{atom,1906,is_subtype},[{var,1906,'Msg'},{type,1906,term,[]}]]},{type,1907,constraint,[{atom,1907,is_subtype},[{var,1907,'TimerRef'},{type,1907,reference,[]}]]}]]}]}}]}},{{function,start_timer,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1913}],[<<115,116,97,114,116,95,116,105,109,101,114,47,52>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,87,104,101,110,32,116,104,101,32,116,105,109,101,114,32,101,120,112,105,114,101,115,44,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,84,105,109,101,114,82,101,102,44,32,77,115,103,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,101,115,116>>]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,98,115,44,32,102,97,108,115,101,125>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46,32,73,116,32,109,101,97,110,115,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,32>>,{em,[],[<<114,101,108,97,116,105,118,101>>]},<<32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,97,98,115,44,32,116,114,117,101,125>>]}]},{dd,[],[{p,[],[<<65,98,115,111,108,117,116,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,46,32,84,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,110,32,97,98,115,111,108,117,116,101,32,69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,46>>]}]}]},{p,[],[<<77,111,114,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{p,[],[<<84,104,101,32,97,98,115,111,108,117,116,101,32,112,111,105,110,116,32,105,110,32,116,105,109,101,44,32,116,104,101,32,116,105,109,101,114,32,105,115,32,115,101,116,32,116,111,32,101,120,112,105,114,101,32,111,110,44,32,109,117,115,116,32,98,101,32,105,110,32,116,104,101,32,105,110,116,101,114,118,97,108,32>>,{code,[],[<<91,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111>>]},{code,[],[<<40,115,116,97,114,116,95,116,105,109,101,41,44,32,110,97,116,105,118,101,44,32,109,105,108,108,105,115,101,99,111,110,100,41,44,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111>>]},{code,[],[<<40,101,110,100,95,116,105,109,101,41,44,32,110,97,116,105,118,101,44,32,109,105,108,108,105,115,101,99,111,110,100,41,32,93>>]},<<46,32,73,102,32,97,32,114,101,108,97,116,105,118,101,32,116,105,109,101,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,110,101,103,97,116,105,118,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<44,32,105,116,32,109,117,115,116,32,98,101,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,111,102,32,97,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,111,110,32,116,104,101,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,84,104,105,115,32,112,114,111,99,101,115,115,32,104,97,115,32,101,105,116,104,101,114,32,116,101,114,109,105,110,97,116,101,100,32,111,114,32,110,111,116,46,32,73,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,110,32>>,{code,[],[<<97,116,111,109,40,41>>]},<<44,32,105,116,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,108,111,99,97,108,108,121,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,46,32,84,104,101,32,112,114,111,99,101,115,115,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32,116,104,101,32,110,97,109,101,32,105,115,32,108,111,111,107,101,100,32,117,112,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,116,105,109,101,114,32,101,120,112,105,114,97,116,105,111,110,46,32,78,111,32,101,114,114,111,114,32,105,115,32,114,101,116,117,114,110,101,100,32,105,102,32,116,104,101,32,110,97,109,101,32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<44,32,116,104,101,32,116,105,109,101,114,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,97,110,99,101,108,101,100,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32,116,104,101,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,105,115,32,110,111,116,32,97,108,105,118,101,44,32,111,114,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,46,32,84,104,105,115,32,102,101,97,116,117,114,101,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,82,84,83,32,53,46,52,46,49,49,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,105,109,101,114,115,32,97,114,101,32,110,111,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,97,110,99,101,108,101,100,32,119,104,101,110,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,110,32>>,{code,[],[<<97,116,111,109,40,41>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,47,52>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,97,100,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114,47,50>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,100,111,32,110,111,116,32,115,97,116,105,115,102,121,32,116,104,101,32,114,101,113,117,105,114,101,109,101,110,116,115,32,115,112,101,99,105,102,105,101,100,32,104,101,114,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,53,57,54>>,signature => [{attribute,1913,spec,{{erlang,start_timer,4},[{type,1913,bounded_fun,[{type,1913,'fun',[{type,1913,product,[{var,1913,'Time'},{var,1913,'Dest'},{var,1913,'Msg'},{var,1913,'Options'}]},{var,1913,'TimerRef'}]},[{type,1914,constraint,[{atom,1914,is_subtype},[{var,1914,'Time'},{type,1914,integer,[]}]]},{type,1915,constraint,[{atom,1915,is_subtype},[{var,1915,'Dest'},{type,1915,union,[{type,1915,pid,[]},{type,1915,atom,[]}]}]]},{type,1916,constraint,[{atom,1916,is_subtype},[{var,1916,'Msg'},{type,1916,term,[]}]]},{type,1917,constraint,[{atom,1917,is_subtype},[{var,1917,'Options'},{type,1917,list,[{var,1917,'Option'}]}]]},{type,1918,constraint,[{atom,1918,is_subtype},[{var,1918,'Abs'},{type,1918,boolean,[]}]]},{type,1919,constraint,[{atom,1919,is_subtype},[{var,1919,'Option'},{type,1919,tuple,[{atom,1919,abs},{var,1919,'Abs'}]}]]},{type,1920,constraint,[{atom,1920,is_subtype},[{var,1920,'TimerRef'},{type,1920,reference,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},<<32,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,116,104,97,116,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,116,97,115,107,115,32,116,104,97,116,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,67,80,85,32,98,111,117,110,100,32,97,114,101,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,54,53,54>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2528,bounded_fun,[{type,2528,'fun',[{type,2528,product,[{atom,2528,active_tasks}]},{type,2528,list,[{var,2528,'ActiveTasks'}]}]},[{type,2529,constraint,[{atom,2529,is_subtype},[{var,2529,'ActiveTasks'},{type,2529,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,104,101,114,101,32,101,97,99,104,32,101,108,101,109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,97,99,116,105,118,101,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,111,110,32,101,97,99,104,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,115,99,104,101,100,117,108,101,114,115,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,116,104,97,116,32,97,114,101,32,114,101,97,100,121,32,116,111,32,114,117,110,44,32,111,114,32,97,114,101,32,99,117,114,114,101,110,116,108,121,32,114,117,110,110,105,110,103,46,32,86,97,108,117,101,115,32,102,111,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,97,110,100,32,116,104,101,105,114,32,97,115,115,111,99,105,97,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,108,111,99,97,116,101,100,32,102,105,114,115,116,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,115,99,104,101,100,117,108,101,114,32,110,117,109,98,101,114,32,49,32,97,110,100,32,115,111,32,111,110,46,32,73,102,32,115,117,112,112,111,114,116,32,102,111,114,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,101,120,105,115,116,44,32,97,110,32,101,108,101,109,101,110,116,32,119,105,116,104,32,116,104,101,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,102,111,108,108,111,119,32,97,110,100,32,116,104,101,110,32,97,115,32,108,97,115,116,32,101,108,101,109,101,110,116,32,116,104,101,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,100,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,102,111,108,108,111,119,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,105,108,121,32,97,32,99,111,110,115,105,115,116,101,110,116,32,115,110,97,112,115,104,111,116,32,111,102,32,116,104,101,32,115,116,97,116,101,44,32,98,117,116,32,105,110,115,116,101,97,100,32,113,117,105,116,101,32,101,102,102,105,99,105,101,110,116,108,121,32,103,97,116,104,101,114,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<69,97,99,104,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,104,97,115,32,111,110,101,32,114,117,110,32,113,117,101,117,101,32,116,104,97,116,32,105,116,32,109,97,110,97,103,101,115,46,32,73,102,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,44,32,97,108,108,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,44,32,97,110,100,32,97,108,108,32,100,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,46,32,84,104,97,116,32,105,115,44,32,119,101,32,104,97,118,101,32,109,117,108,116,105,112,108,101,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,44,32,111,110,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,111,110,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,46,32,87,111,114,107,32,99,97,110,32>>,{em,[],[<<110,111,116>>]},<<32,109,105,103,114,97,116,101,32,98,101,116,119,101,101,110,32,116,104,101,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,32,111,102,32,114,117,110,32,113,117,101,117,101,115,46,32,79,110,108,121,32,119,111,114,107,32,105,110,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,99,97,110,32,109,105,103,114,97,116,101,32,116,111,32,111,116,104,101,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,46,32,84,104,105,115,32,104,97,115,32,116,111,32,98,101,32,116,97,107,101,110,32,105,110,116,111,32,97,99,99,111,117,110,116,32,119,104,101,110,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,54,55,49>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2530,bounded_fun,[{type,2530,'fun',[{type,2530,product,[{atom,2530,active_tasks_all}]},{type,2530,list,[{var,2530,'ActiveTasks'}]}]},[{type,2531,constraint,[{atom,2531,is_subtype},[{var,2531,'ActiveTasks'},{type,2531,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,99,111,110,116,101,120,116,32,115,119,105,116,99,104,101,115,32,115,105,110,99,101,32,116,104,101,32,115,121,115,116,101,109,32,115,116,97,114,116,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,55,49,51>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2532,bounded_fun,[{type,2532,'fun',[{type,2532,product,[{atom,2532,context_switches}]},{type,2532,tuple,[{var,2532,'ContextSwitches'},{integer,2532,0}]}]},[{type,2533,constraint,[{atom,2533,is_subtype},[{var,2533,'ContextSwitches'},{type,2533,non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,120,97,99,116,32,114,101,100,117,99,116,105,111,110,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,101,120,97,99,116,95,114,101,100,117,99,116,105,111,110,115,41>>]},<<32,105,115,32,97,32,109,111,114,101,32,101,120,112,101,110,115,105,118,101,32,111,112,101,114,97,116,105,111,110,32,116,104,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,101,100,117,99,116,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,116,97,116,105,115,116,105,99,115,40,114,101,100,117,99,116,105,111,110,115,41>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,55,50,50>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2534,bounded_fun,[{type,2534,'fun',[{type,2534,product,[{atom,2534,exact_reductions}]},{type,2534,tuple,[{var,2534,'Total_Exact_Reductions'},{var,2535,'Exact_Reductions_Since_Last_Call'}]}]},[{type,2536,constraint,[{atom,2536,is_subtype},[{var,2536,'Total_Exact_Reductions'},{type,2536,non_neg_integer,[]}]]},{type,2537,constraint,[{atom,2537,is_subtype},[{var,2537,'Exact_Reductions_Since_Last_Call'},{type,2537,non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,116,97,116,105,115,116,105,99,115,40,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,41,46,10,123,56,53,44,50,51,57,54,49,44,48,125>>]}]},{p,[],[<<84,104,105,115,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,105,110,118,97,108,105,100,32,102,111,114,32,115,111,109,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,55,51,55>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2538,bounded_fun,[{type,2538,'fun',[{type,2538,product,[{atom,2538,garbage_collection}]},{type,2538,tuple,[{var,2538,'Number_of_GCs'},{var,2538,'Words_Reclaimed'},{integer,2538,0}]}]},[{type,2539,constraint,[{atom,2539,is_subtype},[{var,2539,'Number_of_GCs'},{type,2539,non_neg_integer,[]}]]},{type,2540,constraint,[{atom,2540,is_subtype},[{var,2540,'Words_Reclaimed'},{type,2540,non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<73,110,112,117,116>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,114,101,99,101,105,118,101,100,32,116,104,114,111,117,103,104,32,112,111,114,116,115,44,32,97,110,100,32>>,{code,[],[<<79,117,116,112,117,116>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,111,117,116,112,117,116,32,116,111,32,112,111,114,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,55,52,57>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2541,bounded_fun,[{type,2541,'fun',[{type,2541,product,[{atom,2541,io}]},{type,2541,tuple,[{type,2541,tuple,[{atom,2541,input},{var,2541,'Input'}]},{type,2541,tuple,[{atom,2541,output},{var,2541,'Output'}]}]}]},[{type,2542,constraint,[{atom,2542,is_subtype},[{var,2542,'Input'},{type,2542,non_neg_integer,[]}]]},{type,2543,constraint,[{atom,2543,is_subtype},[{var,2543,'Output'},{type,2543,non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<77,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,101,97,115,117,114,101,32,104,111,119,32,109,117,99,104,32,116,105,109,101,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,112,101,110,100,115,32,100,111,105,110,103,32,118,97,114,105,111,117,115,32,116,97,115,107,115,46,32,73,116,32,105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,98,101,32,97,115,32,108,105,103,104,116,119,101,105,103,104,116,32,97,115,32,112,111,115,115,105,98,108,101,44,32,98,117,116,32,115,111,109,101,32,111,118,101,114,104,101,97,100,32,101,120,105,115,116,115,32,119,104,101,110,32,116,104,105,115,32,105,115,32,101,110,97,98,108,101,100,46,32,77,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,105,115,32,109,101,97,110,116,32,116,111,32,98,101,32,97,32,112,114,111,102,105,108,105,110,103,32,116,111,111,108,32,116,111,32,104,101,108,112,32,102,105,110,100,105,110,103,32,112,101,114,102,111,114,109,97,110,99,101,32,98,111,116,116,108,101,110,101,99,107,115,46,32,84,111,32>>,{code,[],[<<115,116,97,114,116>>]},<<47>>,{code,[],[<<115,116,111,112>>]},<<47>>,{code,[],[<<114,101,115,101,116>>]},<<32,109,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,44,32,117,115,101,32,115,121,115,116,101,109,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>]}]},<<46>>]},{p,[],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41>>]},<<32,114,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,109,97,112,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,115,111,109,101,32,111,102,32,116,104,101,32,79,83,32,116,104,114,101,97,100,115,32,119,105,116,104,105,110,32,69,82,84,83,46,32,69,97,99,104,32,109,97,112,32,99,111,110,116,97,105,110,115,32>>,{code,[],[<<116,121,112,101>>]},<<32,97,110,100,32>>,{code,[],[<<105,100>>]},<<32,102,105,101,108,100,115,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,105,100,101,110,116,105,102,121,32,119,104,97,116,32,116,104,114,101,97,100,32,105,116,32,105,115,44,32,97,110,100,32,97,108,115,111,32,97,32,99,111,117,110,116,101,114,115,32,102,105,101,108,100,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,100,97,116,97,32,97,98,111,117,116,32,104,111,119,32,109,117,99,104,32,116,105,109,101,32,104,97,115,32,98,101,101,110,32,115,112,101,110,116,32,105,110,32,116,104,101,32,118,97,114,105,111,117,115,32,115,116,97,116,101,115,46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41,46,10,91,35,123,99,111,117,110,116,101,114,115,32,61,62,32,35,123,97,117,120,32,61,62,32,49,56,57,57,49,56,50,57,49,52,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,104,101,99,107,95,105,111,32,61,62,32,50,54,48,53,56,54,51,54,48,50,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,109,117,108,97,116,111,114,32,61,62,32,52,53,55,51,49,56,56,48,52,54,51,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,103,99,32,61,62,32,49,53,49,50,50,48,54,57,49,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,116,104,101,114,32,61,62,32,53,52,50,49,51,51,56,52,53,54,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,112,111,114,116,32,61,62,32,50,50,49,54,51,49,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,115,108,101,101,112,32,61,62,32,53,49,53,48,50,57,52,49,48,48,125,44,10,32,32,32,105,100,32,61,62,32,49,44,10,32,32,32,116,121,112,101,32,61,62,32,115,99,104,101,100,117,108,101,114,125,124,46,46,46,93>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,117,110,105,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>]}]},<<46,32,83,111,44,32,116,111,32,99,111,110,118,101,114,116,32,105,116,32,116,111,32,109,105,108,108,105,115,101,99,111,110,100,115,44,32,121,111,117,32,99,97,110,32,100,111,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<108,105,115,116,115,58,109,97,112,40,10,32,32,102,117,110,40,35,123,32,99,111,117,110,116,101,114,115,32,58,61,32,67,110,116,32,125,32,61,32,77,41,32,45,62,10,32,32,32,32,32,32,32,32,32,32,77,115,67,110,116,32,61,32,109,97,112,115,58,109,97,112,40,102,117,110,40,95,75,44,32,80,101,114,102,67,111,117,110,116,41,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,40,80,101,114,102,67,111,117,110,116,44,32,112,101,114,102,95,99,111,117,110,116,101,114,44,32,49,48,48,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,44,32,67,110,116,41,44,10,32,32,32,32,32,32,32,32,32,77,35,123,32,99,111,117,110,116,101,114,115,32,58,61,32,77,115,67,110,116,32,125,10,32,32,101,110,100,44,32,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41,41,46>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,115,101,32,118,97,108,117,101,115,32,97,114,101,32,110,111,116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,116,104,101,32,101,120,97,99,116,32,116,105,109,101,32,115,112,101,110,116,32,105,110,32,101,97,99,104,32,115,116,97,116,101,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,111,102,32,118,97,114,105,111,117,115,32,111,112,116,105,109,105,115,97,116,105,111,110,32,100,111,110,101,32,116,111,32,107,101,101,112,32,116,104,101,32,111,118,101,114,104,101,97,100,32,97,115,32,115,109,97,108,108,32,97,115,32,112,111,115,115,105,98,108,101,46>>]},{p,[],[{code,[],[<<77,83,65,99,99,95,84,104,114,101,97,100,95,84,121,112,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[<<84,104,101,32,109,97,105,110,32,101,120,101,99,117,116,105,111,110,32,116,104,114,101,97,100,115,32,116,104,97,116,32,100,111,32,109,111,115,116,32,111,102,32,116,104,101,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,83>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[<<84,104,101,32,116,104,114,101,97,100,115,32,102,111,114,32,108,111,110,103,32,114,117,110,110,105,110,103,32,99,112,117,32,105,110,116,101,110,115,105,118,101,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,83,68,99,112,117>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[<<84,104,101,32,116,104,114,101,97,100,115,32,102,111,114,32,108,111,110,103,32,114,117,110,110,105,110,103,32,73,47,79,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,83,68,105,111>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<97,115,121,110,99>>]}]},{dd,[],[<<65,115,121,110,99,32,116,104,114,101,97,100,115,32,97,114,101,32,117,115,101,100,32,98,121,32,118,97,114,105,111,117,115,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,115,32,40,109,97,105,110,108,121,32,116,104,101,32,102,105,108,101,32,100,114,105,118,101,114,115,41,32,100,111,32,111,102,102,108,111,97,100,32,110,111,110,45,67,80,85,32,105,110,116,101,110,115,105,118,101,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,97,115,121,110,99,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,65>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<97,117,120>>]}]},{dd,[],[<<84,97,107,101,115,32,99,97,114,101,32,111,102,32,97,110,121,32,119,111,114,107,32,116,104,97,116,32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,99,97,108,108,121,32,97,115,115,105,103,110,101,100,32,116,111,32,97,32,115,99,104,101,100,117,108,101,114,46>>]},{dt,[],[{code,[],[<<112,111,108,108>>]}]},{dd,[],[<<68,111,101,115,32,116,104,101,32,73,79,32,112,111,108,108,105,110,103,32,102,111,114,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,73,79,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,73,79,116>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32>>,{code,[],[<<77,83,65,99,99,95,84,104,114,101,97,100,95,83,116,97,116,101>>]},<<115,32,97,114,101,32,97,118,97,105,108,97,98,108,101,46,32,65,108,108,32,115,116,97,116,101,115,32,97,114,101,32,101,120,99,108,117,115,105,118,101,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,97,32,116,104,114,101,97,100,32,99,97,110,110,111,116,32,98,101,32,105,110,32,116,119,111,32,115,116,97,116,101,115,32,97,116,32,111,110,99,101,46,32,83,111,44,32,105,102,32,121,111,117,32,97,100,100,32,116,104,101,32,110,117,109,98,101,114,115,32,111,102,32,97,108,108,32,99,111,117,110,116,101,114,115,32,105,110,32,97,32,116,104,114,101,97,100,44,32,121,111,117,32,103,101,116,32,116,104,101,32,116,111,116,97,108,32,114,117,110,116,105,109,101,32,102,111,114,32,116,104,97,116,32,116,104,114,101,97,100,46>>]},{dl,[],[{dt,[],[{code,[],[<<97,117,120>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,104,97,110,100,108,105,110,103,32,97,117,120,105,108,105,97,114,121,32,106,111,98,115,46>>]},{dt,[],[{code,[],[<<99,104,101,99,107,95,105,111>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,99,104,101,99,107,105,110,103,32,102,111,114,32,110,101,119,32,73,47,79,32,101,118,101,110,116,115,46>>]},{dt,[],[{code,[],[<<101,109,117,108,97,116,111,114>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,101,120,101,99,117,116,105,110,103,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,46>>]},{dt,[],[{code,[],[<<103,99>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,104,101,110,32,101,120,116,114,97,32,115,116,97,116,101,115,32,97,114,101,32,101,110,97,98,108,101,100,32,116,104,105,115,32,105,115,32,116,104,101,32,116,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,110,111,110,45,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,46>>]},{dt,[],[{code,[],[<<111,116,104,101,114>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,117,110,97,99,99,111,117,110,116,101,100,32,116,104,105,110,103,115,46>>]},{dt,[],[{code,[],[<<112,111,114,116>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,101,120,101,99,117,116,105,110,103,32,112,111,114,116,115,46>>]},{dt,[],[{code,[],[<<115,108,101,101,112>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,115,108,101,101,112,105,110,103,46>>]}]},{p,[],[<<77,111,114,101,32,102,105,110,101,45,103,114,97,105,110,101,100,32>>,{code,[],[<<77,83,65,99,99,95,84,104,114,101,97,100,95,83,116,97,116,101>>]},<<115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,116,104,114,111,117,103,104,32,99,111,110,102,105,103,117,114,101,32,40,115,117,99,104,32,97,115,32>>,{code,[],[<<46,47,99,111,110,102,105,103,117,114,101,32,45,45,119,105,116,104,45,109,105,99,114,111,115,116,97,116,101,45,97,99,99,111,117,110,116,105,110,103,61,101,120,116,114,97>>]},<<41,46,32,69,110,97,98,108,105,110,103,32,116,104,101,115,101,32,115,116,97,116,101,115,32,99,97,117,115,101,115,32,112,101,114,102,111,114,109,97,110,99,101,32,100,101,103,114,97,100,97,116,105,111,110,32,119,104,101,110,32,109,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,102,102,32,97,110,100,32,105,110,99,114,101,97,115,101,115,32,116,104,101,32,111,118,101,114,104,101,97,100,32,119,104,101,110,32,105,116,32,105,115,32,116,117,114,110,101,100,32,111,110,46>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108,111,99>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,109,97,110,97,103,105,110,103,32,109,101,109,111,114,121,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,115,112,114,101,97,100,32,111,117,116,32,111,118,101,114,32,97,108,108,32,111,116,104,101,114,32,115,116,97,116,101,115,46>>]},{dt,[],[{code,[],[<<98,105,102>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,105,110,32,66,73,70,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<98,117,115,121,95,119,97,105,116>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,98,117,115,121,32,119,97,105,116,105,110,103,46,32,84,104,105,115,32,105,115,32,97,108,115,111,32,116,104,101,32,115,116,97,116,101,32,119,104,101,114,101,32,97,32,115,99,104,101,100,117,108,101,114,32,110,111,32,108,111,110,103,101,114,32,114,101,112,111,114,116,115,32,116,104,97,116,32,105,116,32,105,115,32,97,99,116,105,118,101,32,119,104,101,110,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41>>]}]},<<46,32,83,111,44,32,105,102,32,121,111,117,32,97,100,100,32,97,108,108,32,111,116,104,101,114,32,115,116,97,116,101,115,32,98,117,116,32,116,104,105,115,32,97,110,100,32,115,108,101,101,112,44,32,97,110,100,32,116,104,101,110,32,100,105,118,105,100,101,32,116,104,97,116,32,98,121,32,97,108,108,32,116,105,109,101,32,105,110,32,116,104,101,32,116,104,114,101,97,100,44,32,121,111,117,32,115,104,111,117,108,100,32,103,101,116,32,115,111,109,101,116,104,105,110,103,32,118,101,114,121,32,115,105,109,105,108,97,114,32,116,111,32,116,104,101,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,102,114,97,99,116,105,111,110,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<111,116,104,101,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<101,116,115>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,101,120,101,99,117,116,105,110,103,32,69,84,83,32,66,73,70,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<103,99,95,102,117,108,108>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<103,99>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<110,105,102>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,105,110,32,78,73,70,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<115,101,110,100>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,40,112,114,111,99,101,115,115,101,115,32,111,110,108,121,41,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<116,105,109,101,114,115>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,109,97,110,97,103,105,110,103,32,116,105,109,101,114,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<111,116,104,101,114>>]},<<32,115,116,97,116,101,46>>]}]},{p,[],[<<84,104,101,32,117,116,105,108,105,116,121,32,109,111,100,117,108,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,117,110,116,105,109,101,95,116,111,111,108,115,58,109,115,97,99,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,115,97,99,99,40,51,41>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,111,114,101,32,101,97,115,105,108,121,32,97,110,97,108,121,115,101,32,116,104,101,115,101,32,115,116,97,116,105,115,116,105,99,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,115,121,115,116,101,109,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>]}]},<<32,105,115,32,116,117,114,110,101,100,32,111,102,102,46>>]},{p,[],[<<84,104,101,32,108,105,115,116,32,111,102,32,116,104,114,101,97,100,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,117,110,115,111,114,116,101,100,32,97,110,100,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,100,105,102,102,101,114,101,110,116,32,111,114,100,101,114,32,98,101,116,119,101,101,110,32,99,97,108,108,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,116,104,114,101,97,100,115,32,97,110,100,32,115,116,97,116,101,115,32,97,114,101,32,115,117,98,106,101,99,116,32,116,111,32,99,104,97,110,103,101,32,119,105,116,104,111,117,116,32,97,110,121,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,55,54,48>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2544,bounded_fun,[{type,2544,'fun',[{type,2544,product,[{atom,2544,microstate_accounting}]},{type,2544,union,[{type,2544,list,[{var,2544,'MSAcc_Thread'}]},{atom,2544,undefined}]}]},[{type,2545,constraint,[{atom,2545,is_subtype},[{var,2545,'MSAcc_Thread'},{type,2545,map,[{type,2545,map_field_exact,[{atom,2545,type},{var,2545,'MSAcc_Thread_Type'}]},{type,2546,map_field_exact,[{atom,2546,id},{var,2546,'MSAcc_Thread_Id'}]},{type,2547,map_field_exact,[{atom,2547,counters},{var,2547,'MSAcc_Counters'}]}]}]]},{type,2548,constraint,[{atom,2548,is_subtype},[{var,2548,'MSAcc_Thread_Type'},{type,2548,union,[{atom,2548,async},{atom,2548,aux},{atom,2548,dirty_io_scheduler},{atom,2549,dirty_cpu_scheduler},{atom,2549,poll},{atom,2549,scheduler}]}]]},{type,2550,constraint,[{atom,2550,is_subtype},[{var,2550,'MSAcc_Thread_Id'},{type,2550,non_neg_integer,[]}]]},{type,2551,constraint,[{atom,2551,is_subtype},[{var,2551,'MSAcc_Counters'},{type,2551,map,[{type,2551,map_field_assoc,[{var,2551,'MSAcc_Thread_State'},{type,2551,non_neg_integer,[]}]}]}]]},{type,2552,constraint,[{atom,2552,is_subtype},[{var,2552,'MSAcc_Thread_State'},{type,2552,union,[{atom,2552,alloc},{atom,2552,aux},{atom,2552,bif},{atom,2552,busy_wait},{atom,2552,check_io},{atom,2553,emulator},{atom,2553,ets},{atom,2553,gc},{atom,2553,gc_fullsweep},{atom,2553,nif},{atom,2554,other},{atom,2554,port},{atom,2554,send},{atom,2554,sleep},{atom,2554,timers}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,114,101,100,117,99,116,105,111,110,115,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,116,97,116,105,115,116,105,99,115,40,114,101,100,117,99,116,105,111,110,115,41,46,10,123,50,48,52,54,44,49,49,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,53,32,40,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,41,44,32,116,104,105,115,32,118,97,108,117,101,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,114,101,100,117,99,116,105,111,110,115,32,112,101,114,102,111,114,109,101,100,32,105,110,32,99,117,114,114,101,110,116,32,116,105,109,101,32,115,108,105,99,101,115,32,111,102,32,99,117,114,114,101,110,116,108,121,32,115,99,104,101,100,117,108,101,100,32,112,114,111,99,101,115,115,101,115,46,32,73,102,32,97,110,32,101,120,97,99,116,32,118,97,108,117,101,32,105,115,32,119,97,110,116,101,100,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,101,120,97,99,116,95,114,101,100,117,99,116,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,101,120,97,99,116,95,114,101,100,117,99,116,105,111,110,115,41>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,48,51>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2555,bounded_fun,[{type,2555,'fun',[{type,2555,product,[{atom,2555,reductions}]},{type,2555,tuple,[{var,2555,'Total_Reductions'},{var,2556,'Reductions_Since_Last_Call'}]}]},[{type,2557,constraint,[{atom,2557,is_subtype},[{var,2557,'Total_Reductions'},{type,2557,non_neg_integer,[]}]]},{type,2558,constraint,[{atom,2558,is_subtype},[{var,2558,'Reductions_Since_Last_Call'},{type,2558,non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,111,116,97,108,32,108,101,110,103,116,104,32,111,102,32,97,108,108,32,110,111,114,109,97,108,32,97,110,100,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,115,46,32,84,104,97,116,32,105,115,44,32,113,117,101,117,101,100,32,119,111,114,107,32,116,104,97,116,32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,67,80,85,32,98,111,117,110,100,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,99,111,110,115,105,115,116,101,110,116,32,115,110,97,112,115,104,111,116,32,111,102,32,116,104,101,32,115,116,97,116,101,44,32,98,117,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,105,115,32,109,117,99,104,32,109,111,114,101,32,101,120,112,101,110,115,105,118,101,32,99,111,109,112,97,114,101,100,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32,101,115,112,101,99,105,97,108,108,121,32,119,104,101,110,32,97,32,108,97,114,103,101,32,97,109,111,117,110,116,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,105,115,32,117,115,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,50,50>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2559,'fun',[{type,2559,product,[{atom,2559,run_queue}]},{type,2559,non_neg_integer,[]}]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<32,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,116,104,97,116,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,114,117,110,32,113,117,101,117,101,115,32,119,105,116,104,32,119,111,114,107,32,116,104,97,116,32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,67,80,85,32,98,111,117,110,100,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,51,56>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2560,bounded_fun,[{type,2560,'fun',[{type,2560,product,[{atom,2560,run_queue_lengths}]},{type,2560,list,[{var,2560,'RunQueueLength'}]}]},[{type,2561,constraint,[{atom,2561,is_subtype},[{var,2561,'RunQueueLength'},{type,2561,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,104,101,114,101,32,101,97,99,104,32,101,108,101,109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,114,101,97,100,121,32,116,111,32,114,117,110,32,102,111,114,32,101,97,99,104,32,114,117,110,32,113,117,101,117,101,46,32,86,97,108,117,101,115,32,102,111,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,97,114,101,32,108,111,99,97,116,101,100,32,102,105,114,115,116,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,32,111,102,32,115,99,104,101,100,117,108,101,114,32,110,117,109,98,101,114,32,49,32,97,110,100,32,115,111,32,111,110,46,32,73,102,32,115,117,112,112,111,114,116,32,102,111,114,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,101,120,105,115,116,44,32,118,97,108,117,101,115,32,102,111,114,32,116,104,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,102,111,108,108,111,119,32,40,105,110,32,116,104,97,116,32,111,114,100,101,114,41,32,97,116,32,116,104,101,32,101,110,100,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,105,108,121,32,97,32,99,111,110,115,105,115,116,101,110,116,32,115,110,97,112,115,104,111,116,32,111,102,32,116,104,101,32,115,116,97,116,101,44,32,98,117,116,32,105,110,115,116,101,97,100,32,113,117,105,116,101,32,101,102,102,105,99,105,101,110,116,108,121,32,103,97,116,104,101,114,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<69,97,99,104,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,104,97,115,32,111,110,101,32,114,117,110,32,113,117,101,117,101,32,116,104,97,116,32,105,116,32,109,97,110,97,103,101,115,46,32,73,102,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,44,32,97,108,108,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,44,32,97,110,100,32,97,108,108,32,100,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,46,32,84,104,97,116,32,105,115,44,32,119,101,32,104,97,118,101,32,109,117,108,116,105,112,108,101,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,44,32,111,110,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,111,110,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,46,32,87,111,114,107,32,99,97,110,32>>,{em,[],[<<110,111,116>>]},<<32,109,105,103,114,97,116,101,32,98,101,116,119,101,101,110,32,116,104,101,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,32,111,102,32,114,117,110,32,113,117,101,117,101,115,46,32,79,110,108,121,32,119,111,114,107,32,105,110,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,99,97,110,32,109,105,103,114,97,116,101,32,116,111,32,111,116,104,101,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,46,32,84,104,105,115,32,104,97,115,32,116,111,32,98,101,32,116,97,107,101,110,32,105,110,116,111,32,97,99,99,111,117,110,116,32,119,104,101,110,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,53,51>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2562,bounded_fun,[{type,2562,'fun',[{type,2562,product,[{atom,2562,run_queue_lengths_all}]},{type,2562,list,[{var,2562,'RunQueueLength'}]}]},[{type,2563,constraint,[{atom,2563,is_subtype},[{var,2563,'RunQueueLength'},{type,2563,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,114,117,110,116,105,109,101,44,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,46>>]},{p,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,102,111,114,32,97,108,108,32,116,104,114,101,97,100,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,97,110,100,32,99,97,110,32,116,104,101,114,101,102,111,114,101,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,119,97,108,108,32,99,108,111,99,107,32,116,105,109,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,118,97,108,117,101,32,109,105,103,104,116,32,119,114,97,112,32,100,117,101,32,116,111,32,108,105,109,105,116,97,116,105,111,110,115,32,105,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,112,114,111,118,105,100,101,100,32,98,121,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,116,104,97,116,32,105,115,32,117,115,101,100,46>>]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,116,97,116,105,115,116,105,99,115,40,114,117,110,116,105,109,101,41,46,10,123,49,54,57,48,44,49,54,50,48,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,57,54>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2564,bounded_fun,[{type,2564,'fun',[{type,2564,product,[{atom,2564,runtime}]},{type,2564,tuple,[{var,2564,'Total_Run_Time'},{var,2564,'Time_Since_Last_Call'}]}]},[{type,2565,constraint,[{atom,2565,is_subtype},[{var,2565,'Total_Run_Time'},{type,2565,non_neg_integer,[]}]]},{type,2566,constraint,[{atom,2566,is_subtype},[{var,2566,'Time_Since_Last_Call'},{type,2566,non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32,119,105,116,104,32>>,{code,[],[<<123,83,99,104,101,100,117,108,101,114,73,100,44,32,65,99,116,105,118,101,84,105,109,101,44,32,84,111,116,97,108,84,105,109,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<83,99,104,101,100,117,108,101,114,73,100>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,73,68,32,111,102,32,116,104,101,32,115,99,104,101,100,117,108,101,114,44,32>>,{code,[],[<<65,99,116,105,118,101,84,105,109,101>>]},<<32,105,115,32,116,104,101,32,100,117,114,97,116,105,111,110,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,104,97,115,32,98,101,101,110,32,98,117,115,121,44,32,97,110,100,32>>,{code,[],[<<84,111,116,97,108,84,105,109,101>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,116,105,109,101,32,100,117,114,97,116,105,111,110,32,115,105,110,99,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]}]},<<32,97,99,116,105,118,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,99,32,115,99,104,101,100,117,108,101,114,46,32,78,111,116,101,32,116,104,97,116,32,97,99,116,105,118,97,116,105,111,110,32,116,105,109,101,32,99,97,110,32,100,105,102,102,101,114,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,98,101,116,119,101,101,110,32,115,99,104,101,100,117,108,101,114,115,46,32,67,117,114,114,101,110,116,108,121,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,99,116,105,118,97,116,101,100,32,97,116,32,115,121,115,116,101,109,32,115,116,97,114,116,32,119,104,105,108,101,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,99,116,105,118,97,116,101,100,32,115,111,109,101,32,116,105,109,101,32,97,102,116,101,114,32,116,104,101,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,105,115,32,101,110,97,98,108,101,100,46,32,84,104,101,32,116,105,109,101,32,117,110,105,116,32,105,115,32,117,110,100,101,102,105,110,101,100,32,97,110,100,32,99,97,110,32,98,101,32,115,117,98,106,101,99,116,32,116,111,32,99,104,97,110,103,101,32,98,101,116,119,101,101,110,32,114,101,108,101,97,115,101,115,44,32,79,83,115,44,32,97,110,100,32,115,121,115,116,101,109,32,114,101,115,116,97,114,116,115,46,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,116,111,32,99,97,108,99,117,108,97,116,101,32,114,101,108,97,116,105,118,101,32,118,97,108,117,101,115,32,102,111,114,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,46,32>>,{code,[],[<<65,99,116,105,118,101,84,105,109,101>>]},<<32,99,97,110,32,110,101,118,101,114,32,101,120,99,101,101,100,32>>,{code,[],[<<84,111,116,97,108,84,105,109,101>>]},<<46>>]},{p,[],[<<84,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,97,32,98,117,115,121,32,115,99,104,101,100,117,108,101,114,32,105,115,32,119,104,101,110,32,105,116,32,105,115,32,110,111,116,32,105,100,108,101,32,97,110,100,32,105,115,32,110,111,116,32,115,99,104,101,100,117,108,105,110,103,32,40,115,101,108,101,99,116,105,110,103,41,32,97,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,44,32,116,104,97,116,32,105,115,58>>]},{ul,[],[{li,[],[<<69,120,101,99,117,116,105,110,103,32,112,114,111,99,101,115,115,32,99,111,100,101>>]},{li,[],[<<69,120,101,99,117,116,105,110,103,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,111,114,32,78,73,70,32,99,111,100,101>>]},{li,[],[<<69,120,101,99,117,116,105,110,103,32,66,73,70,115,44,32,111,114,32,97,110,121,32,111,116,104,101,114,32,114,117,110,116,105,109,101,32,104,97,110,100,108,105,110,103>>]},{li,[],[<<71,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,110,103>>]},{li,[],[<<72,97,110,100,108,105,110,103,32,97,110,121,32,111,116,104,101,114,32,109,101,109,111,114,121,32,109,97,110,97,103,101,109,101,110,116>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,32,115,99,104,101,100,117,108,101,114,32,99,97,110,32,97,108,115,111,32,98,101,32,98,117,115,121,32,101,118,101,110,32,105,102,32,116,104,101,32,79,83,32,104,97,115,32,115,99,104,101,100,117,108,101,100,32,111,117,116,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,115,121,115,116,101,109,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]}]},<<32,105,115,32,116,117,114,110,101,100,32,111,102,102,46>>]},{p,[],[<<84,104,101,32,108,105,115,116,32,111,102,32,115,99,104,101,100,117,108,101,114,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,117,110,115,111,114,116,101,100,32,97,110,100,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,100,105,102,102,101,114,101,110,116,32,111,114,100,101,114,32,98,101,116,119,101,101,110,32,99,97,108,108,115,46>>]},{p,[],[<<65,115,32,111,102,32,69,82,84,83,32,118,101,114,115,105,111,110,32,57,46,48,44,32,97,108,115,111,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,119,105,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,46,32,84,104,97,116,32,105,115,44,32,97,108,108,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,116,104,97,116,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,104,97,110,100,108,101,32,67,80,85,32,98,111,117,110,100,32,119,111,114,107,46,32,73,102,32,121,111,117,32,97,108,115,111,32,119,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,95,97,108,108,41>>]}]},<<32,105,110,115,116,101,97,100,46>>]},{p,[],[<<78,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,119,105,108,108,32,104,97,118,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<49,32,61,60,32,83,99,104,101,100,117,108,101,114,73,100,32,61,60,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46,32,68,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,119,105,108,108,32,104,97,118,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,32,60,32,83,99,104,101,100,117,108,101,114,73,100,32,61,60,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,104,97,110,100,108,101,32,115,112,101,99,105,102,105,99,32,116,121,112,101,115,32,111,102,32,106,111,98,115,46,32,69,118,101,114,121,32,106,111,98,32,105,115,32,97,115,115,105,103,110,101,100,32,116,111,32,97,32,115,112,101,99,105,102,105,99,32,115,99,104,101,100,117,108,101,114,32,116,121,112,101,46,32,74,111,98,115,32,99,97,110,32,109,105,103,114,97,116,101,32,98,101,116,119,101,101,110,32,100,105,102,102,101,114,101,110,116,32,115,99,104,101,100,117,108,101,114,115,32,111,102,32,116,104,101,32,115,97,109,101,32,116,121,112,101,44,32,98,117,116,32,110,101,118,101,114,32,98,101,116,119,101,101,110,32,115,99,104,101,100,117,108,101,114,115,32,111,102,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,46,32,84,104,105,115,32,102,97,99,116,32,104,97,115,32,116,111,32,98,101,32,116,97,107,101,110,32,117,110,100,101,114,32,99,111,110,115,105,100,101,114,97,116,105,111,110,32,119,104,101,110,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,114,101,116,117,114,110,101,100,46>>]}]},{p,[],[<<85,115,105,110,103,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,116,111,32,99,97,108,99,117,108,97,116,101,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,44,32,116,114,117,101,41,46,10,102,97,108,115,101,10,62,32,84,115,48,32,61,32,108,105,115,116,115,58,115,111,114,116,40,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41,41,44,32,111,107,46,10,111,107>>]}]},{p,[],[<<83,111,109,101,32,116,105,109,101,32,108,97,116,101,114,32,116,104,101,32,117,115,101,114,32,116,97,107,101,115,32,97,110,111,116,104,101,114,32,115,110,97,112,115,104,111,116,32,97,110,100,32,99,97,108,99,117,108,97,116,101,115,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,112,101,114,32,115,99,104,101,100,117,108,101,114,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,84,115,49,32,61,32,108,105,115,116,115,58,115,111,114,116,40,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41,41,44,32,111,107,46,10,111,107,10,62,32,108,105,115,116,115,58,109,97,112,40,102,117,110,40,123,123,73,44,32,65,48,44,32,84,48,125,44,32,123,73,44,32,65,49,44,32,84,49,125,125,41,32,45,62,10,9,123,73,44,32,40,65,49,32,45,32,65,48,41,47,40,84,49,32,45,32,84,48,41,125,32,101,110,100,44,32,108,105,115,116,115,58,122,105,112,40,84,115,48,44,84,115,49,41,41,46,10,91,123,49,44,48,46,57,55,52,51,52,55,52,55,51,48,49,55,55,53,52,56,125,44,10,32,123,50,44,48,46,57,55,52,52,56,52,51,55,56,50,55,53,49,52,52,52,125,44,10,32,123,51,44,48,46,57,57,57,53,57,48,50,51,54,49,54,54,57,48,52,53,125,44,10,32,123,52,44,48,46,57,55,51,56,48,49,50,53,57,54,53,55,50,49,54,49,125,44,10,32,123,53,44,48,46,57,55,49,55,57,53,54,54,54,55,48,49,56,49,48,51,125,44,10,32,123,54,44,48,46,57,55,51,57,50,51,53,56,52,54,52,50,48,55,52,49,125,44,10,32,123,55,44,48,46,57,55,51,50,51,55,48,51,51,48,55,55,56,55,54,125,44,10,32,123,56,44,48,46,57,55,52,49,50,57,55,50,57,51,50,52,56,54,53,54,125,93>>]}]},{p,[],[<<85,115,105,110,103,32,116,104,101,32,115,97,109,101,32,115,110,97,112,115,104,111,116,115,32,116,111,32,99,97,108,99,117,108,97,116,101,32,97,32,116,111,116,97,108,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,58>>]},{pre,[],[{code,[],[<<62,32,123,65,44,32,84,125,32,61,32,108,105,115,116,115,58,102,111,108,100,108,40,102,117,110,40,123,123,95,44,32,65,48,44,32,84,48,125,44,32,123,95,44,32,65,49,44,32,84,49,125,125,44,32,123,65,105,44,84,105,125,41,32,45,62,10,9,123,65,105,32,43,32,40,65,49,32,45,32,65,48,41,44,32,84,105,32,43,32,40,84,49,32,45,32,84,48,41,125,32,101,110,100,44,32,123,48,44,32,48,125,44,32,108,105,115,116,115,58,122,105,112,40,84,115,48,44,84,115,49,41,41,44,10,9,84,111,116,97,108,83,99,104,101,100,117,108,101,114,85,116,105,108,105,122,97,116,105,111,110,32,61,32,65,47,84,46,10,48,46,57,55,54,57,49,51,54,56,48,51,55,54,52,56,50,53>>]}]},{p,[],[<<84,111,116,97,108,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,119,105,108,108,32,101,113,117,97,108,32>>,{code,[],[<<49,46,48>>]},<<32,119,104,101,110,32,97,108,108,32,115,99,104,101,100,117,108,101,114,115,32,104,97,118,101,32,98,101,101,110,32,97,99,116,105,118,101,32,97,108,108,32,116,104,101,32,116,105,109,101,32,98,101,116,119,101,101,110,32,116,104,101,32,116,119,111,32,109,101,97,115,117,114,101,109,101,110,116,115,46>>]},{p,[],[<<65,110,111,116,104,101,114,32,40,112,114,111,98,97,98,108,121,32,109,111,114,101,41,32,117,115,101,102,117,108,32,118,97,108,117,101,32,105,115,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,111,116,97,108,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,119,101,105,103,104,116,101,100,32,97,103,97,105,110,115,116,32,109,97,120,105,109,117,109,32,97,109,111,117,110,116,32,111,102,32,97,118,97,105,108,97,98,108,101,32,67,80,85,32,116,105,109,101,58>>]},{pre,[],[{code,[],[<<62,32,87,101,105,103,104,116,101,100,83,99,104,101,100,117,108,101,114,85,116,105,108,105,122,97,116,105,111,110,32,61,32,40,84,111,116,97,108,83,99,104,101,100,117,108,101,114,85,116,105,108,105,122,97,116,105,111,110,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,40,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41,41,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,47,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101,41,46,10,48,46,57,55,54,57,49,51,54,56,48,51,55,54,52,56,50,53>>]}]},{p,[],[<<84,104,105,115,32,119,101,105,103,104,116,101,100,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,119,105,108,108,32,114,101,97,99,104,32>>,{code,[],[<<49,46,48>>]},<<32,119,104,101,110,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,99,116,105,118,101,32,116,104,101,32,115,97,109,101,32,97,109,111,117,110,116,32,111,102,32,116,105,109,101,32,97,115,32,109,97,120,105,109,117,109,32,97,118,97,105,108,97,98,108,101,32,67,80,85,32,116,105,109,101,46,32,73,102,32,109,111,114,101,32,115,99,104,101,100,117,108,101,114,115,32,101,120,105,115,116,32,116,104,97,110,32,97,118,97,105,108,97,98,108,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,105,115,32,118,97,108,117,101,32,109,97,121,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32>>,{code,[],[<<49,46,48>>]},<<46>>]},{p,[],[<<65,115,32,111,102,32,69,82,84,83,32,118,101,114,115,105,111,110,32,57,46,48,44,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,119,105,108,108,32,97,115,32,100,101,102,97,117,108,116,32,104,97,118,101,32,109,111,114,101,32,115,99,104,101,100,117,108,101,114,115,32,116,104,97,110,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,84,104,105,115,32,100,117,101,32,116,111,32,116,104,101,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,105,115,32,98,121,32,100,101,102,97,117,108,116,32,100,105,115,97,98,108,101,100,46,32,84,111,32,101,110,97,98,108,101,32,105,116,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,44,32,116,114,117,101,41>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,48,49,52>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2567,bounded_fun,[{type,2567,'fun',[{type,2567,product,[{atom,2567,scheduler_wall_time}]},{type,2567,union,[{type,2567,list,[{type,2567,tuple,[{var,2567,'SchedulerId'},{var,2567,'ActiveTime'},{var,2567,'TotalTime'}]}]},{atom,2567,undefined}]}]},[{type,2568,constraint,[{atom,2568,is_subtype},[{var,2568,'SchedulerId'},{type,2568,pos_integer,[]}]]},{type,2569,constraint,[{atom,2569,is_subtype},[{var,2569,'ActiveTime'},{type,2569,non_neg_integer,[]}]]},{type,2570,constraint,[{atom,2570,is_subtype},[{var,2570,'TotalTime'},{type,2570,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66,48,49>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41>>]}]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,97,108,115,111,32,105,110,99,108,117,100,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,108,108,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,46>>]},{p,[],[<<68,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,119,105,108,108,32,104,97,118,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},{code,[],[<<32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},{code,[],[<<32,60,32,83,99,104,101,100,117,108,101,114,73,100,32,61,60,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,32,43,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41,32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,119,111,114,107,32,101,120,101,99,117,116,105,110,103,32,111,110,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,109,97,105,110,108,121,32,119,97,105,116,32,102,111,114,32,73,47,79,46,32,84,104,97,116,32,105,115,44,32,119,104,101,110,32,121,111,117,32,103,101,116,32,104,105,103,104,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,111,110,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,44,32,67,80,85,32,117,116,105,108,105,122,97,116,105,111,110,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,104,105,103,104,32,100,117,101,32,116,111,32,116,104,105,115,32,119,111,114,107,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,49,51,56>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2571,bounded_fun,[{type,2571,'fun',[{type,2571,product,[{atom,2571,scheduler_wall_time_all}]},{type,2571,union,[{type,2571,list,[{type,2571,tuple,[{var,2571,'SchedulerId'},{var,2571,'ActiveTime'},{var,2571,'TotalTime'}]}]},{atom,2571,undefined}]}]},[{type,2572,constraint,[{atom,2572,is_subtype},[{var,2572,'SchedulerId'},{type,2572,pos_integer,[]}]]},{type,2573,constraint,[{atom,2573,is_subtype},[{var,2573,'ActiveTime'},{type,2573,non_neg_integer,[]}]]},{type,2574,constraint,[{atom,2574,is_subtype},[{var,2574,'TotalTime'},{type,2574,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,49,54,54>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2575,bounded_fun,[{type,2575,'fun',[{type,2575,product,[{atom,2575,total_active_tasks}]},{var,2575,'ActiveTasks'}]},[{type,2576,constraint,[{atom,2576,is_subtype},[{var,2576,'ActiveTasks'},{type,2576,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,49,55,55>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2577,bounded_fun,[{type,2577,'fun',[{type,2577,product,[{atom,2577,total_active_tasks_all}]},{var,2577,'ActiveTasks'}]},[{type,2578,constraint,[{atom,2578,is_subtype},[{var,2578,'ActiveTasks'},{type,2578,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,49,56,56>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2579,bounded_fun,[{type,2579,'fun',[{type,2579,product,[{atom,2579,total_run_queue_lengths}]},{var,2579,'TotalRunQueueLengths'}]},[{type,2580,constraint,[{atom,2580,is_subtype},[{var,2580,'TotalRunQueueLengths'},{type,2580,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,49,57,57>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2581,bounded_fun,[{type,2581,'fun',[{type,2581,product,[{atom,2581,total_run_queue_lengths_all}]},{var,2581,'TotalRunQueueLengths'}]},[{type,2582,constraint,[{atom,2582,is_subtype},[{var,2582,'TotalRunQueueLengths'},{type,2582,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2528}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,119,97,108,108,32,99,108,111,99,107,46,32>>,{code,[],[<<119,97,108,108,95,99,108,111,99,107>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,32,116,104,101,32,115,97,109,101,32,109,97,110,110,101,114,32,97,115,32>>,{code,[],[<<114,117,110,116,105,109,101>>]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,114,101,97,108,32,116,105,109,101,32,105,115,32,109,101,97,115,117,114,101,100,32,97,115,32,111,112,112,111,115,101,100,32,116,111,32,114,117,110,116,105,109,101,32,111,114,32,67,80,85,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,49,48>>,signature => [{attribute,2528,spec,{{statistics,1},[{type,2583,bounded_fun,[{type,2583,'fun',[{type,2583,product,[{atom,2583,wall_clock}]},{type,2583,tuple,[{var,2583,'Total_Wallclock_Time'},{var,2584,'Wallclock_Time_Since_Last_Call'}]}]},[{type,2585,constraint,[{atom,2585,is_subtype},[{var,2585,'Total_Wallclock_Time'},{type,2585,non_neg_integer,[]}]]},{type,2586,constraint,[{atom,2586,is_subtype},[{var,2586,'Wallclock_Time_Since_Last_Call'},{type,2586,non_neg_integer,[]}]]}]]}]}}]}},{{function,suspend_process,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1942}],[<<115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>],#{<<101,110>> => [{p,[],[<<83,117,115,112,101,110,100,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,44,32,91,93,41>>]}]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,50,49>>,signature => [{attribute,1942,spec,{{erlang,suspend_process,1},[{type,1942,bounded_fun,[{type,1942,'fun',[{type,1942,product,[{var,1942,'Suspendee'}]},{atom,1942,true}]},[{type,1943,constraint,[{atom,1943,is_subtype},[{var,1943,'Suspendee'},{type,1943,pid,[]}]]}]]}]}}]}},{{function,suspend_process,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1926}],[<<115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>],#{<<101,110>> => [{p,[],[<<73,110,99,114,101,97,115,101,115,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,97,110,100,32,112,117,116,115,32,105,116,32,105,110,32,116,104,101,32,115,117,115,112,101,110,100,101,100,32,115,116,97,116,101,32,105,102,32,105,116,32,105,115,32,110,111,116,32,97,108,114,101,97,100,121,32,105,110,32,116,104,97,116,32,115,116,97,116,101,46,32,65,32,115,117,115,112,101,110,100,101,100,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,115,99,104,101,100,117,108,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,32,117,110,116,105,108,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,98,101,101,110,32,114,101,115,117,109,101,100,46>>]},{p,[],[<<65,32,112,114,111,99,101,115,115,32,99,97,110,32,98,101,32,115,117,115,112,101,110,100,101,100,32,98,121,32,109,117,108,116,105,112,108,101,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,99,97,110,32,98,101,32,115,117,115,112,101,110,100,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,98,121,32,97,32,115,105,110,103,108,101,32,112,114,111,99,101,115,115,46,32,65,32,115,117,115,112,101,110,100,101,100,32,112,114,111,99,101,115,115,32,100,111,101,115,32,110,111,116,32,108,101,97,118,101,32,116,104,101,32,115,117,115,112,101,110,100,101,100,32,115,116,97,116,101,32,117,110,116,105,108,32,105,116,115,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,114,101,97,99,104,101,115,32,122,101,114,111,46,32,84,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,102,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,100,101,99,114,101,97,115,101,100,32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,115,117,109,101,95,112,114,111,99,101,115,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,115,117,109,101,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]}]},<<32,105,115,32,99,97,108,108,101,100,32,98,121,32,116,104,101,32,115,97,109,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,97,108,108,101,100,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]},<<46,32,65,108,108,32,105,110,99,114,101,97,115,101,100,32,115,117,115,112,101,110,100,32,99,111,117,110,116,115,32,111,110,32,111,116,104,101,114,32,112,114,111,99,101,115,115,101,115,32,97,99,113,117,105,114,101,100,32,98,121,32,97,32,112,114,111,99,101,115,115,32,97,114,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,99,114,101,97,115,101,100,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,116,101,114,109,105,110,97,116,101,115,46>>]},{p,[],[<<79,112,116,105,111,110,115,32,40>>,{code,[],[<<79,112,116>>]},<<115,41,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]}]},{dd,[],[{p,[],[<<65,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,101,118,101,110,116,117,97,108,108,121,32,115,117,115,112,101,110,100,115,32,117,110,108,101,115,115,32,105,116,32,105,115,32,114,101,115,117,109,101,100,32,98,101,102,111,114,101,32,105,116,32,99,111,117,108,100,32,115,117,115,112,101,110,100,46,32,84,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<32,114,101,116,117,114,110,115,32,105,109,109,101,100,105,97,116,101,108,121,44,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,115,117,115,112,101,110,100,101,100,32,121,101,116,32,111,114,32,110,111,116,46,32,84,104,101,32,112,111,105,110,116,32,105,110,32,116,105,109,101,32,119,104,101,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,115,117,115,112,101,110,100,115,32,99,97,110,110,111,116,32,98,101,32,100,101,100,117,99,101,100,32,102,114,111,109,32,111,116,104,101,114,32,101,118,101,110,116,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,73,116,32,105,115,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32>>,{em,[],[<<101,118,101,110,116,117,97,108,108,121>>]},<<32,115,117,115,112,101,110,100,115,32,40,117,110,108,101,115,115,32,105,116,32,105,115,32,114,101,115,117,109,101,100,41,46,32,73,102,32,110,111,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,111,112,116,105,111,110,115,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<32,105,115,32,98,108,111,99,107,101,100,32,117,110,116,105,108,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,115,117,115,112,101,110,100,101,100,46>>]}]},{dt,[],[{code,[],[<<123,97,115,121,110,99,104,114,111,110,111,117,115,44,32,82,101,112,108,121,84,97,103,125>>]}]},{dd,[],[{p,[],[<<65,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32,87,104,101,110,32,116,104,101,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,44,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,32,84,104,101,32,114,101,112,108,121,32,105,115,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,82,101,112,108,121,84,97,103,44,32,83,116,97,116,101,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<83,116,97,116,101>>]},<<32,105,115,32,101,105,116,104,101,114,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,105,116,101,100>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,101,120,105,116,101,100,46>>]}]},{dt,[],[{code,[],[<<115,117,115,112,101,110,100,101,100>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,119,32,115,117,115,112,101,110,100,101,100,46>>]}]},{dt,[],[{code,[],[<<110,111,116,95,115,117,115,112,101,110,100,101,100>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,115,117,115,112,101,110,100,101,100,46,32,84,104,105,115,32,99,97,110,32,111,110,108,121,32,104,97,112,112,101,110,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,105,115,115,117,101,100,32,116,104,105,115,32,114,101,113,117,101,115,116,44,32,104,97,118,101,32,99,97,108,108,101,100,32>>,{code,[],[<<114,101,115,117,109,101,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]},<<32,98,101,102,111,114,101,32,103,101,116,116,105,110,103,32,116,104,101,32,114,101,112,108,121,46>>]}]}]},{p,[],[<<65,112,112,97,114,116,32,102,114,111,109,32,116,104,101,32,114,101,112,108,121,32,109,101,115,115,97,103,101,44,32,116,104,101,32>>,{code,[],[<<123,97,115,121,110,99,104,114,111,110,111,117,115,44,32,82,101,112,108,121,84,97,103,125>>]},<<32,111,112,116,105,111,110,32,98,101,104,97,118,101,115,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,111,112,116,105,111,110,32,119,105,116,104,111,117,116,32,114,101,112,108,121,32,116,97,103,46>>]}]},{dt,[],[{code,[],[<<117,110,108,101,115,115,95,115,117,115,112,101,110,100,105,110,103>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,115,117,115,112,101,110,100,101,100,32,117,110,108,101,115,115,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,108,114,101,97,100,121,32,105,115,32,115,117,115,112,101,110,100,105,110,103,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32,73,102,32>>,{code,[],[<<117,110,108,101,115,115,95,115,117,115,112,101,110,100,105,110,103>>]},<<32,105,115,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<44,32,97,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,32,117,110,108,101,115,115,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,108,114,101,97,100,121,32,105,115,32,115,117,115,112,101,110,100,105,110,103,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,111,114,32,105,102,32,97,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,97,108,114,101,97,100,121,32,104,97,115,32,98,101,101,110,32,115,101,110,116,32,97,110,100,32,105,115,32,105,110,32,116,114,97,110,115,105,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,108,114,101,97,100,121,32,105,115,32,115,117,115,112,101,110,100,105,110,103,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<44,32,111,114,32,105,102,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,97,110,100,32,97,32,115,101,110,100,32,114,101,113,117,101,115,116,32,97,108,114,101,97,100,121,32,105,115,32,105,110,32,116,114,97,110,115,105,116,44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,97,110,100,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,114,101,109,97,105,110,115,32,117,110,99,104,97,110,103,101,100,46>>]}]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,105,110,99,114,101,97,115,101,100,44,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<89,111,117,32,99,97,110,32,101,97,115,105,108,121,32,99,114,101,97,116,101,32,100,101,97,100,108,111,99,107,115,32,105,102,32,112,114,111,99,101,115,115,101,115,32,115,117,115,112,101,110,100,115,32,101,97,99,104,32,111,116,104,101,114,32,40,100,105,114,101,99,116,108,121,32,111,114,32,105,110,32,99,105,114,99,108,101,115,41,46,32,73,110,32,69,82,84,83,32,118,101,114,115,105,111,110,115,32,112,114,105,111,114,32,116,111,32,69,82,84,83,32,118,101,114,115,105,111,110,32,49,48,46,48,44,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,112,114,101,118,101,110,116,101,100,32,115,117,99,104,32,100,101,97,100,108,111,99,107,115,44,32,98,117,116,32,116,104,105,115,32,112,114,101,118,101,110,116,105,111,110,32,104,97,115,32,110,111,119,32,98,101,101,110,32,114,101,109,111,118,101,100,32,100,117,101,32,116,111,32,112,101,114,102,111,114,109,97,110,99,101,32,114,101,97,115,111,110,115,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,116,104,101,32,115,97,109,101,32,112,114,111,99,101,115,115,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,114,101,115,105,100,101,115,32,111,110,32,97,110,111,116,104,101,114,32,110,111,100,101,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,76,105,115,116>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116>>]},<<115,46>>]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,109,111,114,101,32,116,105,109,101,115,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,116,104,97,110,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,105,110,116,101,114,110,97,108,32,100,97,116,97,32,115,116,114,117,99,116,117,114,101,115,46,32,84,104,101,32,115,121,115,116,101,109,32,108,105,109,105,116,32,105,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,50,44,48,48,48,44,48,48,48,44,48,48,48,32,115,117,115,112,101,110,100,115,32,97,110,100,32,119,105,108,108,32,110,101,118,101,114,32,98,101,32,108,111,119,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,51,54>>,signature => [{attribute,1926,spec,{{erlang,suspend_process,2},[{type,1926,bounded_fun,[{type,1926,'fun',[{type,1926,product,[{var,1926,'Suspendee'},{var,1926,'OptList'}]},{type,1926,boolean,[]}]},[{type,1927,constraint,[{atom,1927,is_subtype},[{var,1927,'Suspendee'},{type,1927,pid,[]}]]},{type,1928,constraint,[{atom,1928,is_subtype},[{var,1928,'OptList'},{type,1928,list,[{var,1928,'Opt'}]}]]},{type,1929,constraint,[{atom,1929,is_subtype},[{var,1929,'Opt'},{type,1929,union,[{atom,1929,unless_suspending},{atom,1929,asynchronous},{type,1929,tuple,[{atom,1929,asynchronous},{type,1929,term,[]}]}]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,109,97,120,105,109,117,109,32,100,101,112,116,104,32,111,102,32,99,97,108,108,32,115,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,115,32,105,110,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<39,69,88,73,84,39>>]},<<32,116,117,112,108,101,115,46,32,84,104,101,32,102,108,97,103,32,97,108,115,111,32,108,105,109,105,116,115,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,32,100,101,112,116,104,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111>>]},<<32,105,116,101,109,32>>,{code,[],[<<99,117,114,114,101,110,116,95,115,116,97,99,107,116,114,97,99,101,46>>]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,51,56,50>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2606,bounded_fun,[{type,2606,'fun',[{type,2606,product,[{atom,2606,backtrace_depth},{var,2606,'Depth'}]},{var,2606,'OldDepth'}]},[{type,2607,constraint,[{atom,2607,is_subtype},[{var,2607,'Depth'},{type,2607,non_neg_integer,[]}]]},{type,2608,constraint,[{atom,2608,is_subtype},[{var,2608,'OldDepth'},{type,2608,non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<99,112,117,95,116,111,112,111,108,111,103,121>>}],[]},{li,[{name,<<105,110,102,111,95,108,105,115,116>>}],[]},{li,[{name,<<108,101,118,101,108,95,101,110,116,114,121>>}],[]},{li,[{name,<<108,101,118,101,108,95,116,97,103>>}],[]},{li,[{name,<<115,117,98,95,108,101,118,101,108>>}],[]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[{em,[],[<<84,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46>>]},<<32,73,110,115,116,101,97,100,32,111,102,32,117,115,105,110,103,32,116,104,105,115,32,97,114,103,117,109,101,110,116,44,32,117,115,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,114,101,109,111,118,101,100,44,32,97,32,102,105,110,97,108,32,67,80,85,32,116,111,112,111,108,111,103,121,32,116,111,32,117,115,101,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,46>>]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<46,32,84,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121,32,111,118,101,114,114,105,100,101,115,32,97,110,121,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121,46,32,66,121,32,112,97,115,115,105,110,103,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,97,115,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<44,32,116,104,101,32,115,121,115,116,101,109,32,114,101,118,101,114,116,115,32,116,111,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,46,32,84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,101,113,117,97,108,115,32,116,104,101,32,118,97,108,117,101,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,99,112,117,95,116,111,112,111,108,111,103,121,41>>]},<<32,98,101,102,111,114,101,32,116,104,101,32,99,104,97,110,103,101,32,119,97,115,32,109,97,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<84,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,117,115,101,100,32,119,104,101,110,32,98,105,110,100,105,110,103,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,73,102,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,108,114,101,97,100,121,32,98,111,117,110,100,32,119,104,101,110,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,99,104,97,110,103,101,100,44,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,115,101,110,116,32,97,32,114,101,113,117,101,115,116,32,116,111,32,114,101,98,105,110,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,110,101,119,32,67,80,85,32,116,111,112,111,108,111,103,121,46>>]},{p,[],[<<84,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,121,112,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,97,110,100,32,109,111,114,101,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,99,112,117,95,116,111,112,111,108,111,103,121,41>>]}]},<<32,97,115,32,119,101,108,108,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,51,57,52>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2609,bounded_fun,[{type,2609,'fun',[{type,2609,product,[{atom,2609,cpu_topology},{var,2609,'CpuTopology'}]},{var,2609,'OldCpuTopology'}]},[{type,2610,constraint,[{atom,2610,is_subtype},[{var,2610,'CpuTopology'},{user_type,2610,cpu_topology,[]}]]},{type,2611,constraint,[{atom,2611,is_subtype},[{var,2611,'OldCpuTopology'},{user_type,2611,cpu_topology,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,82,97,110,103,101,32,105,115,32>>,{code,[],[<<49,32,60,61,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,32,60,61,32,78>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,99,104,97,110,103,101,32,105,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,104,97,110,103,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,49,50,32,115,99,104,101,100,117,108,101,114,115,32,97,110,100,32,54,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,111,110,108,105,110,101,44,32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>]},<<32,105,115,32,117,115,101,100,32,116,111,32,115,101,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,116,111,32,54,44,32,116,104,101,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,99,114,101,97,115,101,100,32,98,121,32,104,97,108,102,32,97,115,32,119,101,108,108,44,32,100,111,119,110,32,116,111,32,51,46,32,83,105,109,105,108,97,114,108,121,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,110,99,114,101,97,115,101,115,32,112,114,111,112,111,114,116,105,111,110,97,108,108,121,32,116,111,32,105,110,99,114,101,97,115,101,115,32,105,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,52,50>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2612,bounded_fun,[{type,2612,'fun',[{type,2612,product,[{atom,2612,dirty_cpu_schedulers_online},{var,2612,'DirtyCPUSchedulersOnline'}]},{var,2613,'OldDirtyCPUSchedulersOnline'}]},[{type,2614,constraint,[{atom,2614,is_subtype},[{var,2614,'DirtyCPUSchedulersOnline'},{type,2614,pos_integer,[]}]]},{type,2615,constraint,[{atom,2615,is_subtype},[{var,2615,'OldDirtyCPUSchedulersOnline'},{type,2615,pos_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,115,121,115,116,101,109,32,102,108,97,103,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<46,32>>,{code,[],[<<65,108,108,111,99>>]},<<32,105,115,32,116,104,101,32,97,108,108,111,99,97,116,111,114,32,116,111,32,97,102,102,101,99,116,44,32,102,111,114,32,101,120,97,109,112,108,101,32>>,{code,[],[<<98,105,110,97,114,121,95,97,108,108,111,99>>]},<<46,32>>,{code,[],[<<70>>]},<<32,105,115,32,116,104,101,32,102,108,97,103,32,116,111,32,99,104,97,110,103,101,32,97,110,100,32>>,{code,[],[<<86>>]},<<32,105,115,32,116,104,101,32,110,101,119,32,118,97,108,117,101,46>>]},{p,[],[<<79,110,108,121,32,97,32,115,117,98,115,101,116,32,111,102,32,97,108,108,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99>>]},<<32,102,108,97,103,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,114,117,110,32,116,105,109,101,46,32,84,104,105,115,32,115,117,98,115,101,116,32,105,115,32,99,117,114,114,101,110,116,108,121,32,111,110,108,121,32,116,104,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99,35,77,95,115,98,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<115,98,99,116>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,116,104,101,32,102,108,97,103,32,119,97,115,32,115,101,116,32,111,114,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,105,102,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,55,49>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2616,bounded_fun,[{type,2616,'fun',[{type,2616,product,[{atom,2616,erts_alloc},{type,2616,tuple,[{var,2616,'Alloc'},{var,2616,'F'},{var,2616,'V'}]}]},{type,2616,union,[{atom,2616,ok},{atom,2616,notsup}]}]},[{type,2617,constraint,[{atom,2617,is_subtype},[{var,2617,'Alloc'},{type,2617,atom,[]}]]},{type,2618,constraint,[{atom,2618,is_subtype},[{var,2618,'F'},{type,2618,atom,[]}]]},{type,2619,constraint,[{atom,2619,is_subtype},[{var,2619,'V'},{type,2619,integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,50,46,51>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,115,121,115,116,101,109,32,102,108,97,103,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<46,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,105,115,32,97,32,110,111,110,45,110,101,103,97,116,105,118,101,32,105,110,116,101,103,101,114,32,105,110,100,105,99,97,116,105,110,103,32,104,111,119,32,109,97,110,121,32,116,105,109,101,115,32,103,101,110,101,114,97,116,105,111,110,97,108,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,99,97,110,32,98,101,32,100,111,110,101,32,119,105,116,104,111,117,116,32,102,111,114,99,105,110,103,32,97,32,102,117,108,108,115,119,101,101,112,32,99,111,108,108,101,99,116,105,111,110,46,32,84,104,101,32,118,97,108,117,101,32,97,112,112,108,105,101,115,32,116,111,32,110,101,119,32,112,114,111,99,101,115,115,101,115,44,32,119,104,105,108,101,32,112,114,111,99,101,115,115,101,115,32,97,108,114,101,97,100,121,32,114,117,110,110,105,110,103,32,97,114,101,32,110,111,116,32,97,102,102,101,99,116,101,100,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<73,110,32,108,111,119,45,109,101,109,111,114,121,32,115,121,115,116,101,109,115,32,40,101,115,112,101,99,105,97,108,108,121,32,119,105,116,104,111,117,116,32,118,105,114,116,117,97,108,32,109,101,109,111,114,121,41,44,32,115,101,116,116,105,110,103,32,116,104,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<48>>]},<<32,99,97,110,32,104,101,108,112,32,116,111,32,99,111,110,115,101,114,118,101,32,109,101,109,111,114,121,46>>]},{p,[],[<<84,104,105,115,32,118,97,108,117,101,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,116,104,114,111,117,103,104,32,40,79,83,41,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,32>>,{code,[],[<<69,82,76,95,70,85,76,76,83,87,69,69,80,95,65,70,84,69,82>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,56,56>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2620,bounded_fun,[{type,2620,'fun',[{type,2620,product,[{atom,2620,fullsweep_after},{var,2620,'Number'}]},{var,2620,'OldNumber'}]},[{type,2621,constraint,[{atom,2621,is_subtype},[{var,2621,'Number'},{type,2621,non_neg_integer,[]}]]},{type,2622,constraint,[{atom,2622,is_subtype},[{var,2622,'OldNumber'},{type,2622,non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<84,117,114,110,115,32,111,110,47,111,102,102,32,109,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,109,101,97,115,117,114,101,109,101,110,116,115,46,32,87,104,101,110,32,112,97,115,115,105,110,103,32,114,101,115,101,116,44,32,97,108,108,32,99,111,117,110,116,101,114,115,32,97,114,101,32,114,101,115,101,116,32,116,111,32,48,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,48,55>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2623,bounded_fun,[{type,2623,'fun',[{type,2623,product,[{atom,2623,microstate_accounting},{var,2623,'Action'}]},{var,2623,'OldState'}]},[{type,2624,constraint,[{atom,2624,is_subtype},[{var,2624,'Action'},{type,2624,union,[{atom,2624,true},{atom,2624,false},{atom,2624,reset}]}]]},{type,2625,constraint,[{atom,2625,is_subtype},[{var,2625,'OldState'},{type,2625,union,[{atom,2625,true},{atom,2625,false}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,46,32,84,104,101,32,115,105,122,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,119,111,114,100,115,46,32,84,104,101,32,110,101,119,32>>,{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]},<<32,101,102,102,101,99,116,115,32,111,110,108,121,32,112,114,111,99,101,115,115,101,115,32,115,112,97,119,110,101,100,32,97,102,116,101,114,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32>>,{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]},<<32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32>>,{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,112,114,111,99,101,115,115,101,115,32,98,121,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,50,49>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2626,bounded_fun,[{type,2626,'fun',[{type,2626,product,[{atom,2626,min_heap_size},{var,2626,'MinHeapSize'}]},{var,2626,'OldMinHeapSize'}]},[{type,2627,constraint,[{atom,2627,is_subtype},[{var,2627,'MinHeapSize'},{type,2627,non_neg_integer,[]}]]},{type,2628,constraint,[{atom,2628,is_subtype},[{var,2628,'OldMinHeapSize'},{type,2628,non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,46,32,84,104,101,32,115,105,122,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,119,111,114,100,115,46,32,84,104,101,32,110,101,119,32>>,{code,[],[<<109,105,110,95,98,105,110,95,118,104,104,101,97,112,95,115,105,122,101>>]},<<32,101,102,102,101,99,116,115,32,111,110,108,121,32,112,114,111,99,101,115,115,101,115,32,115,112,97,119,110,101,100,32,97,102,116,101,114,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32>>,{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]},<<32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32>>,{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,112,114,111,99,101,115,115,101,115,32,98,121,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,50,44,51,44,52>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,51,54>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2629,bounded_fun,[{type,2629,'fun',[{type,2629,product,[{atom,2629,min_bin_vheap_size},{var,2629,'MinBinVHeapSize'}]},{var,2630,'OldMinBinVHeapSize'}]},[{type,2631,constraint,[{atom,2631,is_subtype},[{var,2631,'MinBinVHeapSize'},{type,2631,non_neg_integer,[]}]]},{type,2632,constraint,[{atom,2632,is_subtype},[{var,2632,'OldMinBinVHeapSize'},{type,2632,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,51,66,48,52>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,115,101,116,116,105,110,103,115,32,102,111,114,32,112,114,111,99,101,115,115,101,115,46,32,84,104,101,32,115,105,122,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,119,111,114,100,115,46,32,84,104,101,32,110,101,119,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,101,102,102,101,99,116,115,32,111,110,108,121,32,112,114,111,99,101,115,115,101,115,32,115,112,97,119,110,101,100,32,101,102,116,101,114,32,116,104,101,32,99,104,97,110,103,101,32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,112,114,111,99,101,115,115,101,115,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,50,44,51,44,52>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,53,51>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2633,bounded_fun,[{type,2633,'fun',[{type,2633,product,[{atom,2633,max_heap_size},{var,2633,'MaxHeapSize'}]},{var,2633,'OldMaxHeapSize'}]},[{type,2634,constraint,[{atom,2634,is_subtype},[{var,2634,'MaxHeapSize'},{user_type,2634,max_heap_size,[]}]]},{type,2635,constraint,[{atom,2635,is_subtype},[{var,2635,'OldMaxHeapSize'},{user_type,2635,max_heap_size,[]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,101,110,97,98,108,101,100,44,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,105,115,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,77,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,99,97,110,32,98,101,32,98,108,111,99,107,101,100,32,105,110,32,116,119,111,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,46,32,69,105,116,104,101,114,32,97,108,108,32,115,99,104,101,100,117,108,101,114,115,32,98,117,116,32,111,110,101,32,105,115,32,98,108,111,99,107,101,100,44,32,111,114,32,97,108,108,32>>,{em,[],[<<110,111,114,109,97,108>>]},<<32,115,99,104,101,100,117,108,101,114,115,32,98,117,116,32,111,110,101,32,105,115,32,98,108,111,99,107,101,100,46,32,87,104,101,110,32,111,110,108,121,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,108,111,99,107,101,100,44,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,102,114,101,101,32,116,111,32,99,111,110,116,105,110,117,101,32,116,111,32,115,99,104,101,100,117,108,101,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,98,108,111,99,107>>]},<<44,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,111,110,101,32,97,110,100,32,111,110,108,121,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,119,105,108,108,32,101,120,101,99,117,116,101,46,32,73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,117,110,98,108,111,99,107>>]},<<32,97,110,100,32,110,111,32,111,110,101,32,101,108,115,101,32,98,108,111,99,107,115,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,44,32,97,110,100,32,116,104,105,115,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,111,110,108,121,32,111,110,99,101,44,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,117,110,98,108,111,99,107,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,98,108,111,99,107,95,110,111,114,109,97,108>>]},<<44,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,111,110,101,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,119,105,108,108,32,101,120,101,99,117,116,101,44,32,98,117,116,32,109,117,108,116,105,112,108,101,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,99,97,110,32,101,120,101,99,117,116,101,46,32,73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,117,110,98,108,111,99,107,95,110,111,114,109,97,108>>]},<<32,97,110,100,32,110,111,32,111,110,101,32,101,108,115,101,32,98,108,111,99,107,115,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,44,32,97,110,100,32,116,104,105,115,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,111,110,108,121,32,111,110,99,101,44,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,117,110,98,108,111,99,107,101,100,46>>]},{p,[],[<<79,110,101,32,112,114,111,99,101,115,115,32,99,97,110,32,98,108,111,99,107,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,46,32,73,102,32,97,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,44,32,105,116,32,109,117,115,116,32,117,110,98,108,111,99,107,32,101,120,97,99,116,108,121,32,97,115,32,109,97,110,121,32,116,105,109,101,115,32,97,115,32,105,116,32,104,97,115,32,98,108,111,99,107,101,100,32,98,101,102,111,114,101,32,105,116,32,104,97,115,32,114,101,108,101,97,115,101,100,32,105,116,115,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,98,108,111,99,107,46,32,73,102,32,97,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,111,114,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,101,120,105,116,115,44,32,105,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,108,101,97,115,101,115,32,105,116,115,32,98,108,111,99,107,105,110,103,32,111,102,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,97,114,101,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<44,32>>,{code,[],[<<98,108,111,99,107,101,100>>]},<<44,32>>,{code,[],[<<98,108,111,99,107,101,100,95,110,111,114,109,97,108>>]},<<44,32,111,114,32>>,{code,[],[<<101,110,97,98,108,101,100>>]},<<46,32,84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,100,101,115,99,114,105,98,101,115,32,116,104,101,32,115,116,97,116,101,32,106,117,115,116,32,97,102,116,101,114,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]},<<32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,108,111,99,107,105,110,103,32,111,102,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,110,111,114,109,97,108,108,121,32,110,111,116,32,110,101,101,100,101,100,46,32,73,102,32,121,111,117,32,102,101,101,108,32,116,104,97,116,32,121,111,117,32,110,101,101,100,32,116,111,32,117,115,101,32,116,104,101,115,101,32,102,101,97,116,117,114,101,115,44,32,99,111,110,115,105,100,101,114,32,105,116,32,97,32,102,101,119,32,109,111,114,101,32,116,105,109,101,115,32,97,103,97,105,110,46,32,66,108,111,99,107,105,110,103,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,97,115,32,97,32,108,97,115,116,32,114,101,115,111,114,116,44,32,97,115,32,105,116,32,105,115,32,109,111,115,116,32,108,105,107,101,108,121,32,97,32>>,{em,[],[<<118,101,114,121,32,105,110,101,102,102,105,99,105,101,110,116>>]},<<32,119,97,121,32,116,111,32,115,111,108,118,101,32,116,104,101,32,112,114,111,98,108,101,109,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,55,49>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2636,bounded_fun,[{type,2636,'fun',[{type,2636,product,[{atom,2636,multi_scheduling},{var,2636,'BlockState'}]},{var,2636,'OldBlockState'}]},[{type,2637,constraint,[{atom,2637,is_subtype},[{var,2637,'BlockState'},{type,2637,union,[{atom,2637,block},{atom,2637,unblock},{atom,2637,block_normal},{atom,2637,unblock_normal}]}]]},{type,2638,constraint,[{atom,2638,is_subtype},[{var,2638,'OldBlockState'},{type,2638,union,[{atom,2638,blocked},{atom,2638,disabled},{atom,2638,enabled}]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>}],[]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[{em,[],[<<84,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46>>]},<<32,73,110,115,116,101,97,100,32,111,102,32,117,115,105,110,103,32,116,104,105,115,32,97,114,103,117,109,101,110,116,44,32,117,115,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,87,104,101,110,32,116,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,114,101,109,111,118,101,100,44,32,97,32,102,105,110,97,108,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,32,116,121,112,101,32,116,111,32,117,115,101,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,46>>]}]},{p,[],[<<67,111,110,116,114,111,108,115,32,105,102,32,97,110,100,32,104,111,119,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,111,117,110,100,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]},{p,[],[<<87,104,101,110,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101,44,32,72,111,119,41>>]},<<32,105,115,32,99,97,108,108,101,100,44,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,115,105,103,110,97,108,32,105,115,32,115,101,110,116,32,116,111,32,97,108,108,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,44,32,99,97,117,115,105,110,103,32,116,104,101,109,32,116,111,32,116,114,121,32,116,111,32,98,105,110,100,32,111,114,32,117,110,98,105,110,100,32,97,115,32,114,101,113,117,101,115,116,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,97,32,115,99,104,101,100,117,108,101,114,32,102,97,105,108,115,32,116,111,32,98,105,110,100,44,32,116,104,105,115,32,105,115,32,111,102,116,101,110,32,115,105,108,101,110,116,108,121,32,105,103,110,111,114,101,100,44,32,97,115,32,105,116,32,105,115,32,110,111,116,32,97,108,119,97,121,115,32,112,111,115,115,105,98,108,101,32,116,111,32,118,101,114,105,102,121,32,118,97,108,105,100,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,115,46,32,73,102,32,97,110,32,101,114,114,111,114,32,105,115,32,114,101,112,111,114,116,101,100,44,32,97,110,32,101,114,114,111,114,32,101,118,101,110,116,32,105,115,32,108,111,103,103,101,100,46,32,84,111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,32,104,97,118,101,32,98,111,117,110,100,32,97,115,32,114,101,113,117,101,115,116,101,100,44,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<46>>]}]},{p,[],[<<83,99,104,101,100,117,108,101,114,115,32,99,97,110,32,98,101,32,98,111,117,110,100,32,111,110,32,110,101,119,101,114,32,76,105,110,117,120,44,32,83,111,108,97,114,105,115,44,32,70,114,101,101,66,83,68,44,32,97,110,100,32,87,105,110,100,111,119,115,32,115,121,115,116,101,109,115,44,32,98,117,116,32,109,111,114,101,32,115,121,115,116,101,109,115,32,119,105,108,108,32,98,101,32,115,117,112,112,111,114,116,101,100,32,105,110,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,115,46>>]},{p,[],[<<73,110,32,111,114,100,101,114,32,102,111,114,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,116,111,32,98,101,32,97,98,108,101,32,116,111,32,98,105,110,100,32,115,99,104,101,100,117,108,101,114,115,44,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,109,117,115,116,32,98,101,32,107,110,111,119,110,46,32,73,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,102,97,105,108,115,32,116,111,32,100,101,116,101,99,116,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,97,117,116,111,109,97,116,105,99,97,108,108,121,44,32,105,116,32,99,97,110,32,98,101,32,100,101,102,105,110,101,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,100,101,102,105,110,101,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,111,101,115,32,98,121,32,100,101,102,97,117,108,116,32>>,{em,[],[<<110,111,116>>]},<<32,98,105,110,100,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,116,104,101,32,111,110,108,121,32,79,83,32,112,114,111,99,101,115,115,32,98,105,110,100,105,110,103,32,116,104,114,101,97,100,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,105,115,32,105,109,112,114,111,118,101,115,32,116,104,101,32,112,101,114,102,111,114,109,97,110,99,101,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,116,104,101,114,32,79,83,32,112,114,111,99,101,115,115,101,115,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,110,111,116,104,101,114,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,41,32,97,108,115,111,32,98,105,110,100,32,116,104,114,101,97,100,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,101,114,101,32,99,97,110,32,98,101,32,97,32,112,101,114,102,111,114,109,97,110,99,101,32,112,101,110,97,108,116,121,32,105,110,115,116,101,97,100,46,32,83,111,109,101,116,105,109,101,115,32,116,104,105,115,32,112,101,114,102,111,114,109,97,110,99,101,32,112,101,110,97,108,116,121,32,99,97,110,32,98,101,32,115,101,118,101,114,101,46,32,73,102,32,115,111,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,110,111,116,32,98,105,110,100,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,46>>]}]},{p,[],[<<83,99,104,101,100,117,108,101,114,115,32,99,97,110,32,98,101,32,98,111,117,110,100,32,105,110,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,46,32,65,114,103,117,109,101,110,116,32>>,{code,[],[<<72,111,119>>]},<<32,100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,111,117,110,100,32,97,110,100,32,99,97,110,32,98,101,32,97,110,121,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<117,110,98,111,117,110,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,117>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,110,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<116,104,114,101,97,100,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,116,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,111,114,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,112,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,95,110,111,100,101,95,116,104,114,101,97,100,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,110,110,116,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,95,110,111,100,101,95,112,114,111,99,101,115,115,111,114,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,110,110,112,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<116,104,114,101,97,100,95,110,111,95,110,111,100,101,95,112,114,111,99,101,115,115,111,114,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,116,110,110,112,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<100,101,102,97,117,108,116,95,98,105,110,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,100,98>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,101,113,117,97,108,115,32>>,{code,[],[<<72,111,119>>]},<<32,98,101,102,111,114,101,32,102,108,97,103,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>]},<<32,119,97,115,32,99,104,97,110,103,101,100,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[<<73,102,32,98,105,110,100,105,110,103,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<72,111,119>>]},<<32,105,115,32,110,111,116,32,111,110,101,32,111,102,32,116,104,101,32,100,111,99,117,109,101,110,116,101,100,32,97,108,116,101,114,110,97,116,105,118,101,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,117,110,97,118,97,105,108,97,98,108,101,46>>]}]},{p,[],[<<84,104,101,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,32,116,121,112,101,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<44,32,97,115,32,119,101,108,108,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,54,50,55>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2639,bounded_fun,[{type,2639,'fun',[{type,2639,product,[{atom,2639,scheduler_bind_type},{var,2639,'How'}]},{var,2639,'OldBindType'}]},[{type,2640,constraint,[{atom,2640,is_subtype},[{var,2640,'How'},{type,2640,union,[{user_type,2640,scheduler_bind_type,[]},{atom,2640,default_bind}]}]]},{type,2641,constraint,[{atom,2641,is_subtype},[{var,2641,'OldBindType'},{user_type,2641,scheduler_bind_type,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,115,99,104,101,100,117,108,101,114,32,119,97,108,108,32,116,105,109,101,32,109,101,97,115,117,114,101,109,101,110,116,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,55,53,52>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2642,bounded_fun,[{type,2642,'fun',[{type,2642,product,[{atom,2642,scheduler_wall_time},{var,2642,'Boolean'}]},{var,2642,'OldBoolean'}]},[{type,2643,constraint,[{atom,2643,is_subtype},[{var,2643,'Boolean'},{type,2643,boolean,[]}]]},{type,2644,constraint,[{atom,2644,is_subtype},[{var,2644,'OldBoolean'},{type,2644,boolean,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66,48,49>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,82,97,110,103,101,32,105,115,32>>,{code,[],[<<49,32,60,61,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,32,60,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<73,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,97,115,32,98,117,105,108,116,32,119,105,116,104,32,115,117,112,112,111,114,116,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115>>]},<<44,32,99,104,97,110,103,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,97,108,115,111,32,99,104,97,110,103,101,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,49,50,32,115,99,104,101,100,117,108,101,114,115,32,97,110,100,32,54,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,111,110,108,105,110,101,44,32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>]},<<32,105,115,32,117,115,101,100,32,116,111,32,115,101,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,116,111,32,54,44,32,116,104,101,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,99,114,101,97,115,101,100,32,98,121,32,104,97,108,102,32,97,115,32,119,101,108,108,44,32,100,111,119,110,32,116,111,32,51,46,32,83,105,109,105,108,97,114,108,121,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,110,99,114,101,97,115,101,115,32,112,114,111,112,111,114,116,105,111,110,97,108,108,121,32,116,111,32,105,110,99,114,101,97,115,101,115,32,105,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,55,54,55>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2645,bounded_fun,[{type,2645,'fun',[{type,2645,product,[{atom,2645,schedulers_online},{var,2645,'SchedulersOnline'}]},{var,2646,'OldSchedulersOnline'}]},[{type,2647,constraint,[{atom,2647,is_subtype},[{var,2647,'SchedulersOnline'},{type,2647,pos_integer,[]}]]},{type,2648,constraint,[{atom,2648,is_subtype},[{var,2648,'OldSchedulersOnline'},{type,2648,pos_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,119,105,108,108,32,114,101,99,101,105,118,101,32,116,104,101,32,108,111,103,103,105,110,103,32,109,101,115,115,97,103,101,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,69,82,84,83,46,32,73,102,32,115,101,116,32,116,111,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<44,32,97,108,108,32,108,111,103,103,105,110,103,32,109,101,115,115,97,103,101,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,69,82,84,83,32,119,105,108,108,32,98,101,32,100,114,111,112,112,101,100,46,32,84,104,101,32,109,101,115,115,97,103,101,115,32,119,105,108,108,32,98,101,32,105,110,32,116,104,101,32,102,111,114,109,97,116,58>>]},{pre,[],[{code,[],[<<123,108,111,103,44,76,101,118,101,108,44,70,111,114,109,97,116,44,65,114,103,76,105,115,116,44,77,101,116,97,100,97,116,97,125,32,119,104,101,114,101,10,10,76,101,118,101,108,32,61,32,97,116,111,109,40,41,44,10,70,111,114,109,97,116,32,61,32,115,116,114,105,110,103,40,41,44,10,65,114,103,76,105,115,116,32,61,32,108,105,115,116,40,116,101,114,109,40,41,41,44,10,77,101,116,97,100,97,116,97,32,61,32,35,123,32,112,105,100,32,61,62,32,112,105,100,40,41,44,10,32,32,32,103,114,111,117,112,95,108,101,97,100,101,114,32,61,62,32,112,105,100,40,41,44,10,32,32,32,116,105,109,101,32,58,61,32,108,111,103,103,101,114,58,116,105,109,101,115,116,97,109,112,40,41,44,10,32,32,32,101,114,114,111,114,95,108,111,103,103,101,114,32,58,61,32,35,123,32,101,109,117,108,97,116,111,114,32,58,61,32,116,114,117,101,44,32,116,97,103,32,58,61,32,97,116,111,109,40,41,32,125,10,32,32,32,32,32,32,32,32>>]}]},{p,[],[<<73,102,32,116,104,101,32>>,{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]},<<32,112,114,111,99,101,115,115,32,100,105,101,115,44,32,116,104,105,115,32,102,108,97,103,32,119,105,108,108,32,98,101,32,114,101,115,101,116,32,116,111,32>>,{code,[],[<<108,111,103,103,101,114>>]},<<46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,110,97,109,101,100,32>>,{code,[],[<<108,111,103,103,101,114>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,98,101,32,117,115,101,100,32,98,121,32,116,104,101,32,75,69,82,78,69,76,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,108,111,103,103,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,103,103,101,114>>]}]},<<46,32,66,101,32,99,97,114,101,102,117,108,32,105,102,32,121,111,117,32,99,104,97,110,103,101,32,105,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,97,115,32,108,111,103,32,109,101,115,115,97,103,101,115,32,109,97,121,32,98,101,32,108,111,115,116,46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,105,110,116,101,114,99,101,112,116,32,101,109,117,108,97,116,111,114,32,108,111,103,32,109,101,115,115,97,103,101,115,44,32,100,111,32,105,116,32,98,121,32,97,100,100,105,110,103,32,97,32,115,112,101,99,105,97,108,105,122,101,100,32,104,97,110,100,108,101,114,32,116,111,32,116,104,101,32,75,69,82,78,69,76,32,108,111,103,103,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,55,57,54>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2649,bounded_fun,[{type,2649,'fun',[{type,2649,product,[{atom,2649,system_logger},{var,2649,'Logger'}]},{var,2649,'PrevLogger'}]},[{type,2650,constraint,[{atom,2650,is_subtype},[{var,2650,'Logger'},{type,2650,union,[{atom,2650,logger},{atom,2650,undefined},{type,2650,pid,[]}]}]]},{type,2651,constraint,[{atom,2651,is_subtype},[{var,2651,'PrevLogger'},{type,2651,union,[{atom,2651,logger},{atom,2651,undefined},{type,2651,pid,[]}]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,51>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,110,111,100,101,32,116,114,97,99,101,32,99,111,110,116,114,111,108,32,119,111,114,100,32,116,111,32>>,{code,[],[<<84,67,87>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,111,32,98,101,32,97,110,32,117,110,115,105,103,110,101,100,32,105,110,116,101,103,101,114,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,109,97,116,99,104,95,115,112,101,99,35,115,101,116,95,116,99,119>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<115,101,116,95,116,99,119>>]}]},<<32,105,110,32,115,101,99,116,105,111,110,32,34,77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103,34,32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,50,56>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2652,bounded_fun,[{type,2652,'fun',[{type,2652,product,[{atom,2652,trace_control_word},{var,2652,'TCW'}]},{var,2652,'OldTCW'}]},[{type,2653,constraint,[{atom,2653,is_subtype},[{var,2653,'TCW'},{type,2653,non_neg_integer,[]}]]},{type,2654,constraint,[{atom,2654,is_subtype},[{var,2654,'OldTCW'},{type,2654,non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2606}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<70,105,110,97,108,105,122,101,115,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,105,109,101,32,111,102,102,115,101,116>>]},<<32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46,32,73,102,32,97,110,111,116,104,101,114,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101,32,105,115,32,117,115,101,100,44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,115,116,97,116,101,32,105,115,32,108,101,102,116,32,117,110,99,104,97,110,103,101,100,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,115,116,97,116,101,32,105,100,101,110,116,105,102,105,101,114,44,32,116,104,97,116,32,105,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<112,114,101,108,105,109,105,110,97,114,121>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,102,105,110,97,108,105,122,97,116,105,111,110,32,119,97,115,32,112,101,114,102,111,114,109,101,100,32,97,110,100,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,110,111,119,32,102,105,110,97,108,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<102,105,110,97,108>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,119,97,115,32,97,108,114,101,97,100,121,32,105,110,32,116,104,101,32,102,105,110,97,108,32,115,116,97,116,101,46,32,84,104,105,115,32,101,105,116,104,101,114,32,98,101,99,97,117,115,101,32,97,110,111,116,104,101,114,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,116,105,109,101,95,111,102,102,115,101,116,44,32,102,105,110,97,108,105,122,101,41>>]},<<32,99,97,108,108,32,111,114,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,78,111,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<118,111,108,97,116,105,108,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,99,97,110,110,111,116,32,98,101,32,102,105,110,97,108,105,122,101,100,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,52,50>>,signature => [{attribute,2606,spec,{{erlang,system_flag,2},[{type,2655,bounded_fun,[{type,2655,'fun',[{type,2655,product,[{atom,2655,time_offset},{atom,2655,finalize}]},{var,2655,'OldState'}]},[{type,2656,constraint,[{atom,2656,is_subtype},[{var,2656,'OldState'},{type,2656,union,[{atom,2656,preliminary},{atom,2656,final},{atom,2656,volatile}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,46,32,84,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,98,114,111,107,101,110,32,105,110,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,32,105,110,32,111,114,100,101,114,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116,111,32,110,97,118,105,103,97,116,101,46>>]},{dl,[],[{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<77,101,109,111,114,121,32,65,108,108,111,99,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,97,116,111,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,115,105,122,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,97,116,111,114,95,115,105,122,101,115>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<67,80,85,32,84,111,112,111,108,111,103,121>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<80,114,111,99,101,115,115,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,115,105,122,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<104,101,97,112,95,115,105,122,101,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<104,101,97,112,95,116,121,112,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,115>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,105,109,105,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,121,115,116,101,109,32,76,105,109,105,116,115>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,116,111,109,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,116,111,109,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,116,115,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,116,115,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,111,114,116,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,111,114,116,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,108,105,109,105,116>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,121,115,116,101,109,32,84,105,109,101>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,110,100,95,116,105,109,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,114,116,95,116,105,109,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,111,102,102,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,119,97,114,112,95,109,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,119,97,114,112,95,109,111,100,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,99,104,101,100,117,108,101,114,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,105,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,105,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,109,112,95,115,117,112,112,111,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,109,112,95,115,117,112,112,111,114,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,104,114,101,97,100,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<68,105,115,116,114,105,98,117,116,105,111,110,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,114,101,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,114,101,97,116,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,115,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,99,116,114,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,115,116,95,99,116,114,108>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,105,115,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,121,115,116,101,109,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,104,101,99,107,95,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,104,101,99,107,95,105,111>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,111,109,112,97,116,95,114,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,109,112,97,116,95,114,101,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,101,98,117,103,95,99,111,109,112,105,108,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,101,98,117,103,95,99,111,109,112,105,108,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,114,105,118,101,114,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,114,105,118,101,114,95,118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,102,108,97,118,111,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,109,117,95,102,108,97,118,111,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,109,117,95,116,121,112,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,105,110,102,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,102,111>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,107,101,114,110,101,108,95,112,111,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<107,101,114,110,101,108,95,112,111,108,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,97,100,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,97,100,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,97,99,104,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,99,104,105,110,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,105,102,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<110,105,102,95,118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,111,116,112,95,114,101,108,101,97,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,116,112,95,114,101,108,101,97,115,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,108,111,103,103,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,121,115,116,101,109,95,118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,119,111,114,100,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<119,111,114,100,115,105,122,101>>]}]}]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,55,50>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2866,'fun',[{type,2866,product,[{atom,2866,version}]},{type,2866,string,[]}]}]}}]}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,111,114,115,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>}],[]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>}],[]},{code,[],[<<97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,97,114,101,97,115,46>>]},{p,[],[<<69,97,99,104,32,116,117,112,108,101,32,99,111,110,116,97,105,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,116,121,112,101,32,111,102,32,109,101,109,111,114,121,32,97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,97,110,100,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,105,110,32,98,121,116,101,115,32,97,115,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,46,32,87,104,101,110,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,108,108,111,99,97,116,101,100,32,97,110,100,32,117,115,101,100,32,109,101,109,111,114,121,32,105,115,32,112,114,101,115,101,110,116,44,32,97,108,115,111,32,97,32,116,104,105,114,100,32,101,108,101,109,101,110,116,32,105,115,32,112,114,101,115,101,110,116,44,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,117,115,101,100,32,109,101,109,111,114,121,32,105,110,32,98,121,116,101,115,46>>]},{p,[],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115,41>>]},<<32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,44,32,97,110,100,32,116,104,101,32,99,111,110,116,101,110,116,32,105,115,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,46,32,84,104,101,32,99,111,110,116,101,110,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,115,32,116,104,101,114,101,102,111,114,101,32,99,104,97,110,103,101,115,32,119,104,101,110,32,110,101,101,100,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,115,101,32,118,97,108,117,101,115,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,116,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,111,109,101,32,118,97,108,117,101,115,32,97,114,101,32,112,97,114,116,32,111,102,32,111,116,104,101,114,32,118,97,108,117,101,115,44,32,97,110,100,32,115,111,109,101,32,109,101,109,111,114,121,32,97,114,101,97,115,32,97,114,101,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,101,109,111,114,121,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48,44,49>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114>>}],[]},{code,[],[<<97,108,108,111,99,97,116,111,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,65,108,108,111,99,97,116,111,114,44,32,86,101,114,115,105,111,110,44,32,70,101,97,116,117,114,101,115,44,32,83,101,116,116,105,110,103,115>>]},<<44,32,119,104,101,114,101,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<65,108,108,111,99,97,116,111,114>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32>>,{code,[],[<<109,97,108,108,111,99,40,41>>]},<<32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,117,115,101,100,46,32,73,102,32>>,{code,[],[<<65,108,108,111,99,97,116,111,114>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<44,32,116,104,101,32>>,{code,[],[<<109,97,108,108,111,99,40,41>>]},<<32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,117,115,101,100,32,99,97,110,110,111,116,32,98,101,32,105,100,101,110,116,105,102,105,101,100,46,32>>,{code,[],[<<103,108,105,98,99>>]},<<32,99,97,110,32,98,101,32,105,100,101,110,116,105,102,105,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<86,101,114,115,105,111,110>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,40,98,117,116,32,110,111,116,32,97,32,115,116,114,105,110,103,41,32,114,101,112,114,101,115,101,110,116,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<109,97,108,108,111,99,40,41>>]},<<32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,117,115,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<70,101,97,116,117,114,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,97,116,111,109,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,116,104,101,32,97,108,108,111,99,97,116,105,111,110,32,102,101,97,116,117,114,101,115,32,117,115,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<83,101,116,116,105,110,103,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,115,117,98,115,121,115,116,101,109,115,44,32,116,104,101,105,114,32,99,111,110,102,105,103,117,114,97,98,108,101,32,112,97,114,97,109,101,116,101,114,115,44,32,97,110,100,32,117,115,101,100,32,118,97,108,117,101,115,46,32,83,101,116,116,105,110,103,115,32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,100,105,102,102,101,114,101,110,116,32,99,111,109,98,105,110,97,116,105,111,110,115,32,111,102,32,112,108,97,116,102,111,114,109,115,44,32,97,108,108,111,99,97,116,111,114,115,44,32,97,110,100,32,97,108,108,111,99,97,116,105,111,110,32,102,101,97,116,117,114,101,115,46,32,77,101,109,111,114,121,32,115,105,122,101,115,32,97,114,101,32,103,105,118,101,110,32,105,110,32,98,121,116,101,115,46>>]}]}]},{p,[],[<<83,101,101,32,97,108,115,111,32,34,83,121,115,116,101,109,32,70,108,97,103,115,32,69,102,102,101,99,116,105,110,103,32,101,114,116,115,95,97,108,108,111,99,34,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99,35,102,108,97,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,116,117,112,108,101>>}],[]},{code,[],[<<123,97,108,108,111,99,97,116,111,114,44,32,65,108,108,111,99,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,97,108,108,111,99,97,116,111,114,46,32,65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,54,46,49,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,105,110,115,116,97,110,99,101,44,32,73,110,115,116,97,110,99,101,78,111,44,32,73,110,115,116,97,110,99,101,73,110,102,111,125>>]},<<32,116,117,112,108,101,115,44,32,119,104,101,114,101,32>>,{code,[],[<<73,110,115,116,97,110,99,101,73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,115,112,101,99,105,102,105,99,32,105,110,115,116,97,110,99,101,32,111,102,32,116,104,101,32,97,108,108,111,99,97,116,111,114,46,32,73,102,32>>,{code,[],[<<65,108,108,111,99>>]},<<32,105,115,32,110,111,116,32,97,32,114,101,99,111,103,110,105,122,101,100,32,97,108,108,111,99,97,116,111,114,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32>>,{code,[],[<<65,108,108,111,99>>]},<<32,105,115,32,100,105,115,97,98,108,101,100,44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,105,115,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,32,97,110,100,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46,32,73,116,32,119,97,115,32,105,110,105,116,105,97,108,108,121,32,105,110,116,101,110,100,101,100,32,97,115,32,97,32,116,111,111,108,32,119,104,101,110,32,100,101,118,101,108,111,112,105,110,103,32,110,101,119,32,97,108,108,111,99,97,116,111,114,115,44,32,98,117,116,32,97,115,32,105,116,32,99,97,110,32,98,101,32,111,102,32,105,110,116,101,114,101,115,116,32,102,111,114,32,111,116,104,101,114,115,32,105,116,32,104,97,115,32,98,101,101,110,32,98,114,105,101,102,108,121,32,100,111,99,117,109,101,110,116,101,100,46>>]},{p,[],[<<84,104,101,32,114,101,99,111,103,110,105,122,101,100,32,97,108,108,111,99,97,116,111,114,115,32,97,114,101,32,108,105,115,116,101,100,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<46,32,73,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,117,112,101,114,32,99,97,114,114,105,101,114,115,32,99,97,110,32,98,101,32,111,98,116,97,105,110,101,100,32,102,114,111,109,32,69,82,84,83,32,56,46,48,32,119,105,116,104,32>>,{code,[],[<<123,97,108,108,111,99,97,116,111,114,44,32,101,114,116,115,95,109,109,97,112,125>>]},<<32,111,114,32,102,114,111,109,32,69,82,84,83,32,53,46,49,48,46,52,59,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,119,104,101,110,32,99,97,108,108,105,110,103,32,119,105,116,104,32>>,{code,[],[<<123,97,108,108,111,99,97,116,111,114,44,32,109,115,101,103,95,97,108,108,111,99,125>>]},<<32,97,108,115,111,32,105,110,99,108,117,100,101,115,32,97,110,32>>,{code,[],[<<123,101,114,116,115,95,109,109,97,112,44,32,95,125>>]},<<32,116,117,112,108,101,32,97,115,32,111,110,101,32,101,108,101,109,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,46>>]},{p,[],[<<65,102,116,101,114,32,114,101,97,100,105,110,103,32,116,104,101,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]},<<32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,109,111,114,101,32,111,114,32,108,101,115,115,32,115,112,101,97,107,115,32,102,111,114,32,105,116,115,101,108,102,44,32,98,117,116,32,105,116,32,99,97,110,32,98,101,32,119,111,114,116,104,32,101,120,112,108,97,105,110,105,110,103,32,115,111,109,101,32,116,104,105,110,103,115,46,32,67,97,108,108,32,99,111,117,110,116,115,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,98,121,32,116,119,111,32,118,97,108,117,101,115,44,32,116,104,101,32,102,105,114,115,116,32,118,97,108,117,101,32,105,115,32,103,105,103,97,32,99,97,108,108,115,44,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,118,97,108,117,101,32,105,115,32,99,97,108,108,115,46,32>>,{code,[],[<<109,98,99,115>>]},<<32,97,110,100,32>>,{code,[],[<<115,98,99,115>>]},<<32,100,101,110,111,116,101,32,109,117,108,116,105,45,98,108,111,99,107,32,99,97,114,114,105,101,114,115,44,32,97,110,100,32,115,105,110,103,108,101,45,98,108,111,99,107,32,99,97,114,114,105,101,114,115,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,83,105,122,101,115,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,105,110,32,98,121,116,101,115,46,32,87,104,101,110,32,97,32,115,105,122,101,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,101,100,44,32,105,116,32,105,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,115,111,109,101,116,104,105,110,103,46,32,83,105,122,101,115,32,97,110,100,32,97,109,111,117,110,116,115,32,97,114,101,32,111,102,116,101,110,32,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,114,101,101,32,118,97,108,117,101,115,58>>]},{ul,[],[{li,[],[<<84,104,101,32,102,105,114,115,116,32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,118,97,108,117,101,46>>]},{li,[],[<<84,104,101,32,115,101,99,111,110,100,32,105,115,32,116,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,115,105,110,99,101,32,116,104,101,32,108,97,115,116,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,123,97,108,108,111,99,97,116,111,114,44,32,65,108,108,111,99,125,41>>]},<<46>>]},{li,[],[<<84,104,101,32,116,104,105,114,100,32,105,115,32,116,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,115,105,110,99,101,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,97,115,32,115,116,97,114,116,101,100,46>>]}]},{p,[],[<<73,102,32,111,110,108,121,32,111,110,101,32,118,97,108,117,101,32,105,115,32,112,114,101,115,101,110,116,44,32,105,116,32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,118,97,108,117,101,46,32>>,{code,[],[<<102,105,120,95,97,108,108,111,99>>]},<<32,109,101,109,111,114,121,32,98,108,111,99,107,32,116,121,112,101,115,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,98,121,32,116,119,111,32,118,97,108,117,101,115,46,32,84,104,101,32,102,105,114,115,116,32,118,97,108,117,101,32,105,115,32,116,104,101,32,109,101,109,111,114,121,32,112,111,111,108,32,115,105,122,101,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,118,97,108,117,101,32,105,115,32,116,104,101,32,117,115,101,100,32,109,101,109,111,114,121,32,115,105,122,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>}],[]},{code,[],[<<97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,97,108,108,111,99,97,116,111,114,115,32,117,115,105,110,103,32,116,104,101,32,69,82,84,83,32,105,110,116,101,114,110,97,108,32>>,{code,[],[<<97,108,108,111,99,95,117,116,105,108>>]},<<32,102,114,97,109,101,119,111,114,107,32,97,115,32,97,116,111,109,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99,35,97,108,108,111,99,95,117,116,105,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<84,104,101,32,97,108,108,111,99,95,117,116,105,108,32,102,114,97,109,101,119,111,114,107>>]},<<32,105,110,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,115,105,122,101,115>>}],[]},{code,[],[<<123,97,108,108,111,99,97,116,111,114,95,115,105,122,101,115,44,32,65,108,108,111,99,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,115,105,122,101,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,97,108,108,111,99,97,116,111,114,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,116,117,112,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,123,97,108,108,111,99,97,116,111,114,44,32,65,108,108,111,99,125,41>>]}]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,48,48,53>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2767,'fun',[{type,2767,product,[{atom,2767,allocated_areas}]},{type,2767,list,[{type,2767,tuple,any}]}]},{type,2768,bounded_fun,[{type,2768,'fun',[{type,2768,product,[{atom,2768,allocator}]},{type,2769,tuple,[{var,2769,'Allocator'},{var,2769,'Version'},{var,2769,'Features'},{var,2769,'Settings'}]}]},[{type,2770,constraint,[{atom,2770,is_subtype},[{var,2770,'Allocator'},{type,2770,union,[{atom,2770,undefined},{atom,2770,glibc}]}]]},{type,2771,constraint,[{atom,2771,is_subtype},[{var,2771,'Version'},{type,2771,list,[{type,2771,non_neg_integer,[]}]}]]},{type,2772,constraint,[{atom,2772,is_subtype},[{var,2772,'Features'},{type,2772,list,[{type,2772,atom,[]}]}]]},{type,2773,constraint,[{atom,2773,is_subtype},[{var,2773,'Settings'},{type,2773,list,[{type,2773,tuple,[{ann_type,2773,[{var,2773,'Subsystem'},{type,2773,atom,[]}]},{type,2774,list,[{type,2774,tuple,[{ann_type,2774,[{var,2774,'Parameter'},{type,2774,atom,[]}]},{ann_type,2775,[{var,2775,'Value'},{type,2775,term,[]}]}]}]}]}]}]]}]]},{type,2776,bounded_fun,[{type,2776,'fun',[{type,2776,product,[{type,2776,tuple,[{atom,2776,allocator},{var,2776,'Alloc'}]}]},{type,2776,list,[{var,2776,'_'}]}]},[{type,2777,constraint,[{atom,2777,is_subtype},[{var,2777,'Alloc'},{type,2777,atom,[]}]]}]]},{type,2778,bounded_fun,[{type,2778,'fun',[{type,2778,product,[{atom,2778,alloc_util_allocators}]},{type,2778,list,[{var,2778,'Alloc'}]}]},[{type,2779,constraint,[{atom,2779,is_subtype},[{var,2779,'Alloc'},{type,2779,atom,[]}]]}]]},{type,2780,bounded_fun,[{type,2780,'fun',[{type,2780,product,[{type,2780,tuple,[{atom,2780,allocator_sizes},{var,2780,'Alloc'}]}]},{type,2780,list,[{var,2780,'_'}]}]},[{type,2781,constraint,[{atom,2781,is_subtype},[{var,2781,'Alloc'},{type,2781,atom,[]}]]}]]}]}}]}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<99,112,117,95,116,111,112,111,108,111,103,121>>}],[]},{li,[{name,<<99,112,117,95,116,111,112,111,108,111,103,121>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,108,108,32>>,{code,[],[<<76,101,118,101,108,69,110,116,114,121>>]},<<115,32,111,102,32,97,32,108,105,115,116,32,109,117,115,116,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32>>,{code,[],[<<76,101,118,101,108,84,97,103>>]},<<44,32,101,120,99,101,112,116,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,119,104,101,114,101,32,98,111,116,104,32>>,{code,[],[<<110,111,100,101>>]},<<32,97,110,100,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},{code,[],[<<76,101,118,101,108,84,97,103>>]},<<115,32,99,97,110,32,99,111,101,120,105,115,116,46>>]},{li,[{name,<<105,110,102,111,95,108,105,115,116>>}],[]},{li,[{name,<<105,110,102,111,95,108,105,115,116>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<84,104,101,32>>,{code,[],[<<105,110,102,111,95,108,105,115,116,40,41>>]},<<32,99,97,110,32,98,101,32,101,120,116,101,110,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{li,[{name,<<108,101,118,101,108,95,101,110,116,114,121>>}],[]},{li,[{name,<<108,101,118,101,108,95,101,110,116,114,121>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[{code,[],[<<123,76,101,118,101,108,84,97,103,44,32,83,117,98,76,101,118,101,108,125,32,61,61,32,123,76,101,118,101,108,84,97,103,44,32,91,93,44,32,83,117,98,76,101,118,101,108,125>>]}]},{li,[{name,<<108,101,118,101,108,95,116,97,103>>}],[]},{li,[{name,<<108,101,118,101,108,95,116,97,103>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<77,111,114,101,32>>,{code,[],[<<76,101,118,101,108,84,97,103>>]},<<115,32,99,97,110,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{li,[{name,<<115,117,98,95,108,101,118,101,108>>}],[]}]},{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>}],[]},{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,84,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,117,115,101,100,32,119,104,101,110,32,98,105,110,100,105,110,103,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,84,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,117,115,101,100,32,105,115,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,102,105,110,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,115,101,114,45,100,101,102,105,110,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121>>]},<<44,32,105,102,32,115,117,99,104,32,101,120,105,115,116,115,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,116,101,99,116,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121>>]},<<44,32,105,102,32,115,117,99,104,32,101,120,105,115,116,115,46,32,73,102,32,110,111,32,67,80,85,32,116,111,112,111,108,111,103,121,32,101,120,105,115,116,115,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<110,111,100,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,78,111,110,45,85,110,105,102,111,114,109,32,77,101,109,111,114,121,32,65,99,99,101,115,115,32,40,78,85,77,65,41,32,110,111,100,101,115,46,32>>,{code,[],[<<116,104,114,101,97,100>>]},<<32,114,101,102,101,114,115,32,116,111,32,104,97,114,100,119,97,114,101,32,116,104,114,101,97,100,115,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,73,110,116,101,108,32,104,121,112,101,114,45,116,104,114,101,97,100,115,41,46>>]},{p,[],[<<65,32,108,101,118,101,108,32,105,110,32,116,101,114,109,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,99,97,110,32,98,101,32,111,109,105,116,116,101,100,32,105,102,32,111,110,108,121,32,111,110,101,32,101,110,116,114,121,32,101,120,105,115,116,115,32,97,110,100,32>>,{code,[],[<<73,110,102,111,76,105,115,116>>]},<<32,105,115,32,101,109,112,116,121,46>>]},{p,[],[{code,[],[<<116,104,114,101,97,100>>]},<<32,99,97,110,32,111,110,108,121,32,98,101,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<99,111,114,101>>]},<<46,32>>,{code,[],[<<99,111,114,101>>]},<<32,99,97,110,32,98,101,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},<<32,111,114,32>>,{code,[],[<<110,111,100,101>>]},<<46,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},<<32,99,97,110,32,98,101,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,111,114,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<110,111,100,101>>]},<<46,32>>,{code,[],[<<110,111,100,101>>]},<<32,99,97,110,32,98,101,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,111,114,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},<<46,32,84,104,97,116,32,105,115,44,32,78,85,77,65,32,110,111,100,101,115,32,99,97,110,32,98,101,32,112,114,111,99,101,115,115,111,114,32,105,110,116,101,114,110,97,108,32,111,114,32,112,114,111,99,101,115,115,111,114,32,101,120,116,101,114,110,97,108,46,32,65,32,67,80,85,32,116,111,112,111,108,111,103,121,32,99,97,110,32,99,111,110,115,105,115,116,32,111,102,32,97,32,109,105,120,32,111,102,32,112,114,111,99,101,115,115,111,114,32,105,110,116,101,114,110,97,108,32,97,110,100,32,101,120,116,101,114,110,97,108,32,78,85,77,65,32,110,111,100,101,115,44,32,97,115,32,108,111,110,103,32,97,115,32,101,97,99,104,32,108,111,103,105,99,97,108,32,67,80,85,32,98,101,108,111,110,103,115,32,116,111,32>>,{em,[],[<<111,110,101>>]},<<32,78,85,77,65,32,110,111,100,101,46,32,67,97,99,104,101,32,104,105,101,114,97,114,99,104,121,32,105,115,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,116,121,112,101,44,32,98,117,116,32,119,105,108,108,32,98,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,79,116,104,101,114,32,116,104,105,110,103,115,32,99,97,110,32,97,108,115,111,32,109,97,107,101,32,105,116,32,105,110,116,111,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,83,111,44,32,101,120,112,101,99,116,32,116,104,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,116,121,112,101,32,116,111,32,99,104,97,110,103,101,46>>]}]},{dt,[],[{code,[],[<<123,99,112,117,95,116,111,112,111,108,111,103,121,44,32,100,101,102,105,110,101,100,125>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,102,105,110,101,100>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<32,97,110,100,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,99,112,117,95,116,111,112,111,108,111,103,121,44,32,100,101,116,101,99,116,101,100,125>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,116,101,99,116,101,100>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121,121>>]},<<46,32,84,104,101,32,101,109,117,108,97,116,111,114,32,100,101,116,101,99,116,115,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,111,110,32,115,111,109,101,32,110,101,119,101,114,32,76,105,110,117,120,44,32,83,111,108,97,114,105,115,44,32,70,114,101,101,66,83,68,44,32,97,110,100,32,87,105,110,100,111,119,115,32,115,121,115,116,101,109,115,46,32,79,110,32,87,105,110,100,111,119,115,32,115,121,115,116,101,109,32,119,105,116,104,32,109,111,114,101,32,116,104,97,110,32,51,50,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,110,111,116,32,100,101,116,101,99,116,101,100,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,99,112,117,95,116,111,112,111,108,111,103,121,44,32,117,115,101,100,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>}],[]},{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,99,111,110,102,105,103,117,114,101,100,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,101,105,116,104,101,114,32,97,110,32,105,110,116,101,103,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,116,104,101,32,99,111,110,102,105,103,117,114,101,100,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>}],[]},{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,97,118,97,105,108,97,98,108,101,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,101,105,116,104,101,114,32,97,110,32,105,110,116,101,103,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,116,104,101,32,97,118,97,105,108,97,98,108,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,84,104,101,32,110,117,109,98,101,114,32,111,102,32,97,118,97,105,108,97,98,108,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,105,115,32,108,101,115,115,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>}],[]},{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101,32,111,110,32,116,104,101,32,115,121,115,116,101,109,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,101,105,116,104,101,114,32,97,110,32,105,110,116,101,103,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101,46,32,84,104,101,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101,32,105,115,32,108,101,115,115,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,99,111,110,102,105,103,117,114,101,100>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,113,117,111,116,97>>}],[]},{code,[],[<<99,112,117,95,113,117,111,116,97>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,67,80,85,32,113,117,111,116,97,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,108,105,109,105,116,101,100,32,98,121,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,115,97,121,105,110,103,32,104,111,119,32,109,97,110,121,32,112,114,111,99,101,115,115,111,114,115,39,32,119,111,114,116,104,32,111,102,32,114,117,110,116,105,109,101,32,119,101,32,103,101,116,32,40,98,101,116,119,101,101,110,32,49,32,97,110,100,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,41,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,97,32,113,117,111,116,97,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>}],[]},{code,[],[<<117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,114,101,114,101,97,100,115,32,116,104,101,32,67,80,85,32,105,110,102,111,114,109,97,116,105,111,110,32,97,118,97,105,108,97,98,108,101,32,97,110,100,32,117,112,100,97,116,101,115,32,105,116,115,32,105,110,116,101,114,110,97,108,108,121,32,115,116,111,114,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,116,101,99,116,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,101,116,101,99,116,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121>>]},<<32,97,110,100,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,110,102,105,103,117,114,101,100>>]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<111,110,108,105,110,101>>]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<97,118,97,105,108,97,98,108,101>>]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,113,117,111,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,112,117,32,113,117,111,116,97>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,67,80,85,32,105,110,102,111,114,109,97,116,105,111,110,32,104,97,115,32,99,104,97,110,103,101,100,32,115,105,110,99,101,32,116,104,101,32,108,97,115,116,32,116,105,109,101,32,105,116,32,119,97,115,32,114,101,97,100,44,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<99,104,97,110,103,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,99,104,97,110,103,101,100>>]},<<46,32,73,102,32,116,104,101,32,67,80,85,32,105,110,102,111,114,109,97,116,105,111,110,32,104,97,115,32,99,104,97,110,103,101,100,44,32,121,111,117,32,112,114,111,98,97,98,108,121,32,119,97,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<97,100,106,117,115,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101>>]},<<46,32,89,111,117,32,116,121,112,105,99,97,108,108,121,32,119,97,110,116,32,116,111,32,104,97,118,101,32,97,115,32,109,97,110,121,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,97,118,97,105,108,97,98,108,101>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,49,53,52>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2789,bounded_fun,[{type,2789,'fun',[{type,2789,product,[{atom,2789,cpu_topology}]},{var,2789,'CpuTopology'}]},[{type,2790,constraint,[{atom,2790,is_subtype},[{var,2790,'CpuTopology'},{user_type,2790,cpu_topology,[]}]]}]]},{type,2791,bounded_fun,[{type,2791,'fun',[{type,2791,product,[{type,2791,tuple,[{atom,2791,cpu_topology},{type,2791,union,[{atom,2791,defined},{atom,2791,detected},{atom,2791,used}]}]}]},{var,2791,'CpuTopology'}]},[{type,2792,constraint,[{atom,2792,is_subtype},[{var,2792,'CpuTopology'},{user_type,2792,cpu_topology,[]}]]}]]},{type,2819,'fun',[{type,2819,product,[{type,2819,union,[{atom,2819,logical_processors},{atom,2820,logical_processors_available},{atom,2821,logical_processors_online}]}]},{type,2821,union,[{atom,2821,unknown},{type,2821,pos_integer,[]}]}]},{type,2865,'fun',[{type,2865,product,[{atom,2865,update_cpu_info}]},{type,2865,union,[{atom,2865,changed},{atom,2865,unchanged}]}]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]}]},{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,101,102,97,117,108,116,32,112,114,111,99,101,115,115,32,104,101,97,112,32,115,101,116,116,105,110,103,115,58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>}],[]},{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,101,116,116,105,110,103,32,117,115,101,100,32,98,121,32,100,101,102,97,117,108,116,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]},<<32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>}],[]},{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,100,101,102,97,117,108,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,101,116,116,105,110,103,115,46,32,65,32,112,114,111,99,101,115,115,32,115,112,97,119,110,101,100,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,98,121,32,97,32>>,{code,[],[<<115,112,97,119,110>>]},<<32,111,114,32>>,{code,[],[<<115,112,97,119,110,95,108,105,110,107>>]},<<32,117,115,101,115,32,116,104,101,115,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,101,116,116,105,110,103,115,46,32,84,104,101,32,100,101,102,97,117,108,116,32,115,101,116,116,105,110,103,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,47,50>>]}]},<<46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,50,44,51,44,52>>]}]},<<32,99,97,110,32,115,112,97,119,110,32,97,32,112,114,111,99,101,115,115,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,117,115,101,32,116,104,101,32,100,101,102,97,117,108,116,32,115,101,116,116,105,110,103,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,115,105,122,101,115>>}],[]},{code,[],[<<104,101,97,112,95,115,105,122,101,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,118,97,108,105,100,32,104,101,97,112,32,115,105,122,101,115,32,105,110,32,119,111,114,100,115,46,32,65,108,108,32,69,114,108,97,110,103,32,104,101,97,112,115,32,97,114,101,32,115,105,122,101,100,32,102,114,111,109,32,115,105,122,101,115,32,105,110,32,116,104,105,115,32,108,105,115,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,116,121,112,101>>}],[]},{code,[],[<<104,101,97,112,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,104,101,97,112,32,116,121,112,101,32,117,115,101,100,32,98,121,32,116,104,101,32,99,117,114,114,101,110,116,32,101,109,117,108,97,116,111,114,46,32,79,110,101,32,104,101,97,112,32,116,121,112,101,32,101,120,105,115,116,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<112,114,105,118,97,116,101>>]}]},{dd,[],[<<69,97,99,104,32,112,114,111,99,101,115,115,32,104,97,115,32,97,32,104,101,97,112,32,114,101,115,101,114,118,101,100,32,102,111,114,32,105,116,115,32,117,115,101,32,97,110,100,32,110,111,32,114,101,102,101,114,101,110,99,101,115,32,98,101,116,119,101,101,110,32,104,101,97,112,115,32,111,102,32,100,105,102,102,101,114,101,110,116,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,97,108,108,111,119,101,100,46,32,77,101,115,115,97,103,101,115,32,112,97,115,115,101,100,32,98,101,116,119,101,101,110,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,99,111,112,105,101,100,32,98,101,116,119,101,101,110,32,104,101,97,112,115,46>>]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,97,120,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,45,119,105,100,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,115,101,116,116,105,110,103,115,32,102,111,114,32,115,112,97,119,110,101,100,32,112,114,111,99,101,115,115,101,115,46,32,84,104,105,115,32,115,101,116,116,105,110,103,32,99,97,110,32,98,101,32,115,101,116,32,117,115,105,110,103,32,116,104,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120,107>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120,101,108>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,73,116,32,99,97,110,32,97,108,115,111,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,114,117,110,116,105,109,101,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,44,32,119,104,105,99,104,32,105,115,32,101,105,116,104,101,114,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<32,111,114,32>>,{code,[],[<<111,110,95,104,101,97,112>>]},<<46,32,84,104,105,115,32,100,101,102,97,117,108,116,32,105,115,32,115,101,116,32,98,121,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,113,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,113,100>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,44,32,115,101,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,109,105,110,95,104,101,97,112,95,115,105,122,101,44,32,77,105,110,72,101,97,112,83,105,122,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,105,110,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,45,119,105,100,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,115,112,97,119,110,101,100,32,112,114,111,99,101,115,115,101,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101,44,32,77,105,110,66,105,110,86,72,101,97,112,83,105,122,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,105,110,66,105,110,86,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,45,119,105,100,101,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,115,112,97,119,110,101,100,32,112,114,111,99,101,115,115,101,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,115>>}],[]},{code,[],[<<112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,112,114,111,99,101,115,115,32,97,110,100,32,112,111,114,116,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,51,49,57>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2812,'fun',[{type,2812,product,[{atom,2812,fullsweep_after}]},{type,2812,tuple,[{atom,2812,fullsweep_after},{type,2812,non_neg_integer,[]}]}]},{type,2813,'fun',[{type,2813,product,[{atom,2813,garbage_collection}]},{type,2813,list,[{type,2813,tuple,[{type,2813,atom,[]},{type,2813,integer,[]}]}]}]},{type,2814,'fun',[{type,2814,product,[{atom,2814,heap_sizes}]},{type,2814,list,[{type,2814,non_neg_integer,[]}]}]},{type,2815,'fun',[{type,2815,product,[{atom,2815,heap_type}]},{atom,2815,private}]},{type,2823,'fun',[{type,2823,product,[{atom,2823,max_heap_size}]},{type,2823,tuple,[{atom,2823,max_heap_size},{ann_type,2823,[{var,2823,'MaxHeapSize'},{user_type,2823,max_heap_size,[]}]}]}]},{type,2824,'fun',[{type,2824,product,[{atom,2824,message_queue_data}]},{user_type,2824,message_queue_data,[]}]},{type,2825,'fun',[{type,2825,product,[{atom,2825,min_heap_size}]},{type,2825,tuple,[{atom,2825,min_heap_size},{ann_type,2825,[{var,2825,'MinHeapSize'},{type,2825,pos_integer,[]}]}]}]},{type,2826,'fun',[{type,2826,product,[{atom,2826,min_bin_vheap_size}]},{type,2826,tuple,[{atom,2826,min_bin_vheap_size},{ann_type,2827,[{var,2827,'MinBinVHeapSize'},{type,2827,pos_integer,[]}]}]}]},{type,2841,'fun',[{type,2841,product,[{atom,2841,procs}]},{type,2841,binary,[]}]}]}}],since => <<79,84,80,32,49,57,46,48,44,79,84,80,32,82,49,51,66,48,52>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,105,109,105,116,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,108,105,109,105,116,115,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,99,111,117,110,116>>}],[]},{code,[],[<<97,116,111,109,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,116,111,109,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,108,105,109,105,116>>}],[]},{code,[],[<<97,116,111,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,97,116,111,109,115,32,97,108,108,111,119,101,100,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,105,110,99,114,101,97,115,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,116>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,99,111,117,110,116>>}],[]},{code,[],[<<101,116,115,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,69,84,83,32,116,97,98,108,101,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,108,105,109,105,116>>}],[]},{code,[],[<<101,116,115,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,105,109,105,116,32,102,111,114,32,110,117,109,98,101,114,32,111,102,32,69,84,83,32,116,97,98,108,101,115,46,32,84,104,105,115,32,108,105,109,105,116,32,105,115,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,116,115,35,109,97,120,95,101,116,115,95,116,97,98,108,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,97,108,108,121,32,111,98,115,111,108,101,116,101>>]},<<32,97,110,100,32,110,117,109,98,101,114,32,111,102,32,116,97,98,108,101,115,32,97,114,101,32,111,110,108,121,32,108,105,109,105,116,101,100,32,98,121,32,97,118,97,105,108,97,98,108,101,32,109,101,109,111,114,121,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,99,111,117,110,116>>}],[]},{code,[],[<<112,111,114,116,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,111,114,116,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<108,101,110,103,116,104,40,101,114,108,97,110,103,58,112,111,114,116,115,40,41,41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,108,105,109,105,116>>}],[]},{code,[],[<<112,111,114,116,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,115,105,109,117,108,116,97,110,101,111,117,115,108,121,32,101,120,105,115,116,105,110,103,32,112,111,114,116,115,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,117,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,81>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,81>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,99,111,117,110,116>>}],[]},{code,[],[<<112,114,111,99,101,115,115,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<108,101,110,103,116,104,40,112,114,111,99,101,115,115,101,115,40,41,41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,108,105,109,105,116>>}],[]},{code,[],[<<112,114,111,99,101,115,115,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,115,105,109,117,108,116,97,110,101,111,117,115,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,117,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,80>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,80>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,52,51,56>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2782,'fun',[{type,2782,product,[{atom,2782,atom_count}]},{type,2782,pos_integer,[]}]},{type,2783,'fun',[{type,2783,product,[{atom,2783,atom_limit}]},{type,2783,pos_integer,[]}]},{type,2810,'fun',[{type,2810,product,[{atom,2810,ets_count}]},{type,2810,pos_integer,[]}]},{type,2811,'fun',[{type,2811,product,[{atom,2811,ets_limit}]},{type,2811,pos_integer,[]}]},{type,2837,'fun',[{type,2837,product,[{atom,2837,port_count}]},{type,2837,non_neg_integer,[]}]},{type,2838,'fun',[{type,2838,product,[{atom,2838,port_limit}]},{type,2838,pos_integer,[]}]},{type,2839,'fun',[{type,2839,product,[{atom,2839,process_count}]},{type,2839,pos_integer,[]}]},{type,2840,'fun',[{type,2840,product,[{atom,2840,process_limit}]},{type,2840,pos_integer,[]}]}]}}],since => <<79,84,80,32,50,48,46,48,44,79,84,80,32,50,49,46,49,44,79,84,80,32,82,49,54,66,44,79,84,80,32,82,49,54,66,48,51>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,116,105,109,101,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>}],[]},{code,[],[<<101,110,100,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,105,110,116,101,114,110,97,108,108,121,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,84,104,101,32,116,105,109,101,32,98,101,116,119,101,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,116,97,114,116,32,116,105,109,101>>]},<<32,97,110,100,32,116,104,101,32,101,110,100,32,116,105,109,101,32,105,115,32,97,116,32,108,101,97,115,116,32,97,32,113,117,97,114,116,101,114,32,111,102,32,97,32,109,105,108,108,101,110,110,105,117,109,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>}],[]},{code,[],[<<111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,115,111,117,114,99,101,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,116,104,97,116,32,105,115,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,110,111,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,115,32,97,118,97,105,108,97,98,108,101,46,32,84,104,101,32,108,105,115,116,32,99,111,110,116,97,105,110,115,32,116,119,111,45,116,117,112,108,101,115,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<115,32,97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,97,110,100,32>>,{code,[],[<<86,97,108,117,101>>]},<<115,32,97,115,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,115,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,108,105,115,116,44,32,98,117,116,32,109,111,114,101,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,102,117,110,99,116,105,111,110,44,32,70,117,110,99,116,105,111,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,117,115,101,100,46,32,84,104,105,115,32,116,117,112,108,101,32,97,108,119,97,121,115,32,101,120,105,115,116,115,32,105,102,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,115,32,97,118,97,105,108,97,98,108,101,32,116,111,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]},{dt,[],[{code,[],[<<123,99,108,111,99,107,95,105,100,44,32,67,108,111,99,107,73,100,125>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,116,117,112,108,101,32,111,110,108,121,32,101,120,105,115,116,115,32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,99,108,111,99,107,115,46,32>>,{code,[],[<<67,108,111,99,107,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,99,108,111,99,107,32,105,100,101,110,116,105,102,105,101,114,32,117,115,101,100,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,115,111,108,117,116,105,111,110,44,32,79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110,125>>]}]},{dd,[],[{p,[],[<<72,105,103,104,101,115,116,32,112,111,115,115,105,98,108,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,82,101,115,111,108,117,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<114,101,115,111,108,117,116,105,111,110>>]},<<32,111,102,32,99,117,114,114,101,110,116,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,115,111,117,114,99,101,32,97,115,32,112,97,114,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,73,102,32,110,111,32,114,101,115,111,108,117,116,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,102,114,111,109,32,116,104,101,32,79,83,44,32>>,{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<32,105,115,32,115,101,116,32,116,111,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,111,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<115,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,97,99,116,117,97,108,32,114,101,115,111,108,117,116,105,111,110,32,99,97,110,32,98,101,32,108,111,119,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,100,111,101,115,32,110,111,116,32,115,97,121,32,97,110,121,116,104,105,110,103,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,65,99,99,117,114,97,99,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<97,99,99,117,114,97,99,121>>]},<<32,111,114,32,119,104,101,116,104,101,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,80,114,101,99,105,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<112,114,101,99,105,115,105,111,110>>]},<<32,97,108,105,103,110,115,32,119,105,116,104,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,46,32,89,111,117,32,100,111,44,32,104,111,119,101,118,101,114,44,32,107,110,111,119,32,116,104,97,116,32,116,104,101,32,112,114,101,99,105,115,105,111,110,32,105,115,32,110,111,116,32,98,101,116,116,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,120,116,101,110,100,101,100,44,32,69,120,116,101,110,100,101,100,125>>]}]},{dd,[],[{p,[],[{code,[],[<<69,120,116,101,110,100,101,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<121,101,115>>]},<<32,105,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,32,104,97,115,32,98,101,101,110,32,101,120,116,101,110,100,101,100,59,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<69,120,116,101,110,100,101,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<110,111>>]},<<46,32,84,104,101,32,114,97,110,103,101,32,109,117,115,116,32,98,101,32,101,120,116,101,110,100,101,100,32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,114,101,116,117,114,110,115,32,118,97,108,117,101,115,32,116,104,97,116,32,119,114,97,112,32,102,97,115,116,46,32,84,104,105,115,32,116,121,112,105,99,97,108,108,121,32,105,115,32,116,104,101,32,99,97,115,101,32,119,104,101,110,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,32,51,50,45,98,105,116,32,118,97,108,117,101,46>>]}]},{dt,[],[{code,[],[<<123,112,97,114,97,108,108,101,108,44,32,80,97,114,97,108,108,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<121,101,115>>]},<<32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,32,102,114,111,109,32,109,117,108,116,105,112,108,101,32,116,104,114,101,97,100,115,46,32,73,102,32,105,116,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,44,32,98,101,99,97,117,115,101,32,99,97,108,108,115,32,109,117,115,116,32,98,101,32,115,101,114,105,97,108,105,122,101,100,44,32>>,{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<110,111>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,116,105,109,101,44,32,79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101>>]},<<32,101,113,117,97,108,115,32,99,117,114,114,101,110,116,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46>>]}]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>}],[]},{code,[],[<<111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,115,111,117,114,99,101,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,116,104,97,116,32,105,115,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<84,104,101,32,108,105,115,116,32,99,111,110,116,97,105,110,115,32,116,119,111,45,116,117,112,108,101,115,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<115,32,97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,97,110,100,32>>,{code,[],[<<86,97,108,117,101>>]},<<115,32,97,115,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,115,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,108,105,115,116,44,32,98,117,116,32,109,111,114,101,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,102,117,110,99,116,105,111,110,44,32,70,117,110,99,116,105,111,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,102,117,110,99,105,111,110,32,117,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,99,108,111,99,107,95,105,100,44,32,67,108,111,99,107,73,100,125>>]}]},{dd,[],[{p,[],[<<69,120,105,115,116,115,32,111,110,108,121,32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,99,108,111,99,107,115,46,32>>,{code,[],[<<67,108,111,99,107,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,99,108,111,99,107,32,105,100,101,110,116,105,102,105,101,114,32,117,115,101,100,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,115,111,108,117,116,105,111,110,44,32,79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110,125>>]}]},{dd,[],[{p,[],[<<72,105,103,104,101,115,116,32,112,111,115,115,105,98,108,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,82,101,115,111,108,117,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<114,101,115,111,108,117,116,105,111,110>>]},<<32,111,102,32,99,117,114,114,101,110,116,32,79,83,32,115,121,115,116,101,109,32,116,105,109,101,32,115,111,117,114,99,101,32,97,115,32,112,97,114,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,73,102,32,110,111,32,114,101,115,111,108,117,116,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,102,114,111,109,32,116,104,101,32,79,83,44,32>>,{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<32,105,115,32,115,101,116,32,116,111,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,111,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<115,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,97,99,116,117,97,108,32,114,101,115,111,108,117,116,105,111,110,32,99,97,110,32,98,101,32,108,111,119,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,100,111,101,115,32,110,111,116,32,115,97,121,32,97,110,121,116,104,105,110,103,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,65,99,99,117,114,97,99,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<97,99,99,117,114,97,99,121>>]},<<32,111,114,32,119,104,101,116,104,101,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,80,114,101,99,105,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<112,114,101,99,105,115,105,111,110>>]},<<32,100,111,32,97,108,105,103,110,32,119,105,116,104,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,46,32,89,111,117,32,100,111,44,32,104,111,119,101,118,101,114,44,32,107,110,111,119,32,116,104,97,116,32,116,104,101,32,112,114,101,99,105,115,105,111,110,32,105,115,32,110,111,116,32,98,101,116,116,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,112,97,114,97,108,108,101,108,44,32,80,97,114,97,108,108,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<121,101,115>>]},<<32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,32,102,114,111,109,32,109,117,108,116,105,112,108,101,32,116,104,114,101,97,100,115,46,32,73,102,32,105,116,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,44,32,98,101,99,97,117,115,101,32,99,97,108,108,115,32,110,101,101,100,115,32,116,111,32,98,101,32,115,101,114,105,97,108,105,122,101,100,44,32>>,{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<110,111>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,116,105,109,101,44,32,79,115,83,121,115,116,101,109,84,105,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101>>]},<<32,101,113,117,97,108,115,32,99,117,114,114,101,110,116,32,79,83,32,115,121,115,116,101,109,32,116,105,109,101,32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46>>]}]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>}],[]},{code,[],[<<115,116,97,114,116,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<32,97,116,32,116,104,101,32,116,105,109,101,32,119,104,101,110,32,99,117,114,114,101,110,116,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,32,115,116,97,114,116,101,100,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,101,110,100,95,116,105,109,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>}],[]},{code,[],[<<116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,111,111,108,101,97,110,32,118,97,108,117,101,32,105,110,100,105,99,97,116,105,110,103,32,119,104,101,116,104,101,114,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,67,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,99,111,114,114,101,99,116,105,111,110>>]},<<32,105,115,32,101,110,97,98,108,101,100,32,111,114,32,110,111,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,111,102,102,115,101,116>>}],[]},{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,116,97,116,101,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,58>>]},{dl,[],[{dt,[],[{code,[],[<<112,114,101,108,105,109,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,112,114,101,108,105,109,105,110,97,114,121,44,32,97,110,100,32,119,105,108,108,32,98,101,32,99,104,97,110,103,101,100,32,97,110,100,32,102,105,110,97,108,105,122,101,100,32,108,97,116,101,114,46,32,84,104,101,32,112,114,101,108,105,109,105,110,97,114,121,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,117,115,101,100,32,100,117,114,105,110,103,32,116,104,101,32,112,114,101,108,105,109,105,110,97,114,121,32,112,104,97,115,101,32,111,102,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<102,105,110,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,102,105,110,97,108,46,32,84,104,105,115,32,101,105,116,104,101,114,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,78,111,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,44,32,111,114,32,98,101,99,97,117,115,101,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,104,97,118,101,32,98,101,101,110,32,102,105,110,97,108,105,122,101,100,32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]},{dt,[],[{code,[],[<<118,111,108,97,116,105,108,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,118,111,108,97,116,105,108,101,46,32,84,104,97,116,32,105,115,44,32,105,116,32,99,97,110,32,99,104,97,110,103,101,32,97,116,32,97,110,121,32,116,105,109,101,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,119,97,114,112,95,109,111,100,101>>}],[]},{code,[],[<<116,105,109,101,95,119,97,114,112,95,109,111,100,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,118,97,108,117,101,32,105,100,101,110,116,105,102,121,105,110,103,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,116,104,97,116,32,105,115,32,117,115,101,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<110,111,95,116,105,109,101,95,119,97,114,112>>]}]},{dd,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,78,111,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]},{dt,[],[{code,[],[<<115,105,110,103,108,101,95,116,105,109,101,95,119,97,114,112>>]}]},{dd,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]},{dt,[],[{code,[],[<<109,117,108,116,105,95,116,105,109,101,95,119,97,114,112>>]}]},{dd,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>}],[]},{code,[],[<<116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,119,104,101,116,104,101,114,32,97,32,112,114,101,32,69,82,84,83,32,55,46,48,32,98,97,99,107,119,97,114,100,115,32,99,111,109,112,97,116,105,98,108,101,32,99,111,109,112,101,110,115,97,116,105,111,110,32,102,111,114,32,115,117,100,100,101,110,32,99,104,97,110,103,101,115,32,111,102,32,115,121,115,116,101,109,32,116,105,109,101,32,105,115,32>>,{code,[],[<<101,110,97,98,108,101,100>>]},<<32,111,114,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<46,32,83,117,99,104,32,99,111,109,112,101,110,115,97,116,105,111,110,32,105,115,32>>,{code,[],[<<101,110,97,98,108,101,100>>]},<<32,119,104,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,111,102,102,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,111,102,102,115,101,116>>]},<<32,105,115,32>>,{code,[],[<<102,105,110,97,108>>]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,99,111,114,114,101,99,116,105,111,110>>]},<<32,105,115,32,101,110,97,98,108,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,53,49,56>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2809,'fun',[{type,2809,product,[{atom,2809,end_time}]},{type,2809,non_neg_integer,[]}]},{type,2834,'fun',[{type,2834,product,[{atom,2834,os_monotonic_time_source}]},{type,2834,list,[{type,2834,tuple,[{type,2834,atom,[]},{type,2834,term,[]}]}]}]},{type,2835,'fun',[{type,2835,product,[{atom,2835,os_system_time_source}]},{type,2835,list,[{type,2835,tuple,[{type,2835,atom,[]},{type,2835,term,[]}]}]}]},{type,2854,'fun',[{type,2854,product,[{atom,2854,start_time}]},{type,2854,integer,[]}]},{type,2860,'fun',[{type,2860,product,[{atom,2860,time_correction}]},{type,2860,union,[{atom,2860,true},{atom,2860,false}]}]},{type,2861,'fun',[{type,2861,product,[{atom,2861,time_offset}]},{type,2861,union,[{atom,2861,preliminary},{atom,2861,final},{atom,2861,volatile}]}]},{type,2862,'fun',[{type,2862,product,[{atom,2862,time_warp_mode}]},{type,2862,union,[{atom,2862,no_time_warp},{atom,2862,single_time_warp},{atom,2862,multi_time_warp}]}]},{type,2863,'fun',[{type,2863,product,[{atom,2863,tolerant_timeofday}]},{type,2863,union,[{atom,2863,enabled},{atom,2863,disabled}]}]}]}}],since => <<79,84,80,32,49,55,46,49,44,79,84,80,32,49,56,46,48>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,99,104,101,100,117,108,101,114,115,44,32,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,116,104,114,101,97,100,115,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>}],[]},{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,68,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,101,120,101,99,117,116,101,32,67,80,85,45,98,111,117,110,100,32,110,97,116,105,118,101,32,102,117,110,99,116,105,111,110,115,44,32,115,117,99,104,32,97,115,32,78,73,70,115,44,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,99,111,100,101,44,32,97,110,100,32,66,73,70,115,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,109,97,110,97,103,101,100,32,99,108,101,97,110,108,121,32,98,121,32,116,104,101,32,110,111,114,109,97,108,32,101,109,117,108,97,116,111,114,32,115,99,104,101,100,117,108,101,114,115,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,97,102,116,101,114,32,116,104,97,116,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,46,32,84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,99,112,117>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,80,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,80,99,112,117>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>}],[]},{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,115,97,116,105,115,102,105,101,115,32>>,{code,[],[<<49,32,60,61,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,32,60,61,32,78>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]},<<46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,99,112,117>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>}],[]},{code,[],[<<100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,68,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,32,101,120,101,99,117,116,101,32,73,47,79,45,98,111,117,110,100,32,110,97,116,105,118,101,32,102,117,110,99,116,105,111,110,115,44,32,115,117,99,104,32,97,115,32,78,73,70,115,32,97,110,100,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,99,111,100,101,44,32,119,104,105,99,104,32,99,97,110,110,111,116,32,98,101,32,109,97,110,97,103,101,100,32,99,108,101,97,110,108,121,32,98,121,32,116,104,101,32,110,111,114,109,97,108,32,101,109,117,108,97,116,111,114,32,115,99,104,101,100,117,108,101,114,115,46>>]},{p,[],[<<84,104,105,115,32,118,97,108,117,101,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,105,111>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>}],[]},{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<100,105,115,97,98,108,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,98,101,101,110,32,115,116,97,114,116,101,100,32,119,105,116,104,32,111,110,108,121,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<98,108,111,99,107,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,44,32,98,117,116,32,97,108,108,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,101,120,99,101,112,116,32,111,110,101,32,97,114,101,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,115,99,104,101,100,117,108,101,115,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,101,120,101,99,117,116,101,115,32,69,114,108,97,110,103,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<98,108,111,99,107,101,100,95,110,111,114,109,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,44,32,98,117,116,32,97,108,108,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,101,120,99,101,112,116,32,111,110,101,32,97,114,101,32,98,108,111,99,107,101,100,46,32,78,111,116,105,99,101,32,116,104,97,116,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,110,111,116,32,98,108,111,99,107,101,100,44,32,97,110,100,32,99,97,110,32,115,99,104,101,100,117,108,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,101,120,101,99,117,116,101,32,110,97,116,105,118,101,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<101,110,97,98,108,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,44,32,97,110,100,32,110,111,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,97,114,101,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,97,108,108,32,97,118,97,105,108,97,98,108,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,115,99,104,101,100,117,108,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,101,120,101,99,117,116,101,32,69,114,108,97,110,103,32,99,111,100,101,46>>]}]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>}],[]},{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<115,32,119,104,101,110,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32>>,{code,[],[<<80,105,100>>]},<<115,32,105,110,32,116,104,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,98,108,111,99,107,105,110,103,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,46,32,65,32>>,{code,[],[<<80,105,100>>]},<<32,111,99,99,117,114,115,32,111,110,108,121,32,111,110,99,101,32,105,110,32,116,104,101,32,108,105,115,116,44,32,101,118,101,110,32,105,102,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>}],[]},{code,[],[<<110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<115,32,119,104,101,110,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,32,40,116,104,97,116,32,105,115,44,32,97,108,108,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,98,117,116,32,111,110,101,32,105,115,32,98,108,111,99,107,101,100,41,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32>>,{code,[],[<<80,105,100>>]},<<115,32,105,110,32,116,104,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,98,108,111,99,107,105,110,103,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,46,32,65,32>>,{code,[],[<<80,105,100>>]},<<32,111,99,99,117,114,115,32,111,110,108,121,32,111,110,99,101,32,105,110,32,116,104,101,32,108,105,115,116,44,32,101,118,101,110,32,105,102,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,104,111,119,32,116,104,101,32,117,115,101,114,32,104,97,115,32,114,101,113,117,101,115,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,98,101,32,98,111,117,110,100,32,111,114,32,110,111,116,32,98,111,117,110,100,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,108,116,104,111,117,103,104,32,97,32,117,115,101,114,32,104,97,115,32,114,101,113,117,101,115,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,98,101,32,98,111,117,110,100,44,32,116,104,101,121,32,99,97,110,32,115,105,108,101,110,116,108,121,32,104,97,118,101,32,102,97,105,108,101,100,32,116,111,32,98,105,110,100,46,32,84,111,32,105,110,115,112,101,99,116,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,105,110,103,115,44,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,105,110,103,115,46>>]},{p,[],[<<65,32,116,117,112,108,101,32,111,102,32,97,32,115,105,122,101,32,101,113,117,97,108,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,116,117,112,108,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,105,110,116,101,103,101,114,115,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,98,111,117,110,100>>]},<<46,32,76,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,115,32,97,114,101,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32,105,110,116,101,103,101,114,115,46,32,84,104,101,32>>,{code,[],[<<78>>]},<<116,104,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,116,117,112,108,101,32,101,113,117,97,108,115,32,116,104,101,32,99,117,114,114,101,110,116,32,98,105,110,100,105,110,103,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,119,105,116,104,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<78>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,111,117,110,100,44,32>>,{code,[],[<<101,108,101,109,101,110,116,40,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,105,100,41,44,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41,41>>]},<<32,114,101,116,117,114,110,115,32,116,104,101,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,111,110,108,121,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,98,111,117,110,100,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,105,100>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,95,105,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,73,68,32,40>>,{code,[],[<<83,99,104,101,100,117,108,101,114,73,100>>]},<<41,32,111,102,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{code,[],[<<83,99,104,101,100,117,108,101,114,73,100>>]},<<32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,44,32,119,104,101,114,101,32>>,{code,[],[<<49,32,60,61,32,83,99,104,101,100,117,108,101,114,73,100,32,60,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,111,110,108,105,110,101,32,115,99,104,101,100,117,108,101,115,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,69,114,108,97,110,103,32,112,111,114,116,115,44,32,97,110,100,32,101,120,101,99,117,116,101,32,69,114,108,97,110,103,32,99,111,100,101,32,97,110,100,32,69,114,108,97,110,103,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,99,111,100,101,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,108,97,116,101,114,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,105,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,105,100,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,84,104,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,115,97,116,105,115,102,121,32,116,104,101,32,114,101,108,97,116,105,111,110,115,104,105,112,32>>,{code,[],[<<49,32,60,61,32,83,99,104,101,100,117,108,101,114,73,100,32,60,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,109,112,95,115,117,112,112,111,114,116>>}],[]},{code,[],[<<115,109,112,95,115,117,112,112,111,114,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,115>>}],[]},{code,[],[<<116,104,114,101,97,100,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>}],[]},{code,[],[<<116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,115,121,110,99,32,116,104,114,101,97,100,115,32,105,110,32,116,104,101,32,97,115,121,110,99,32,116,104,114,101,97,100,32,112,111,111,108,32,117,115,101,100,32,102,111,114,32,97,115,121,110,99,104,114,111,110,111,117,115,32,100,114,105,118,101,114,32,99,97,108,108,115,32,40>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,114,105,118,101,114,35,100,114,105,118,101,114,95,97,115,121,110,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<32>>,{code,[],[<<101,114,108,95,100,114,105,118,101,114,58,100,114,105,118,101,114,95,97,115,121,110,99,40,41>>]}]},<<41,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,55,52,54>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2796,'fun',[{type,2796,product,[{atom,2796,dirty_cpu_schedulers}]},{type,2796,non_neg_integer,[]}]},{type,2797,'fun',[{type,2797,product,[{atom,2797,dirty_cpu_schedulers_online}]},{type,2797,non_neg_integer,[]}]},{type,2798,'fun',[{type,2798,product,[{atom,2798,dirty_io_schedulers}]},{type,2798,non_neg_integer,[]}]},{type,2829,'fun',[{type,2829,product,[{atom,2829,multi_scheduling}]},{type,2829,union,[{atom,2829,disabled},{atom,2829,blocked},{atom,2829,blocked_normal},{atom,2829,enabled}]}]},{type,2830,'fun',[{type,2830,product,[{atom,2830,multi_scheduling_blockers}]},{type,2830,list,[{ann_type,2830,[{var,2830,'Pid'},{type,2830,pid,[]}]}]}]},{type,2832,'fun',[{type,2832,product,[{atom,2832,normal_multi_scheduling_blockers}]},{type,2832,list,[{ann_type,2832,[{var,2832,'Pid'},{type,2832,pid,[]}]}]}]},{type,2842,'fun',[{type,2842,product,[{atom,2842,scheduler_bind_type}]},{type,2842,union,[{atom,2842,spread},{atom,2843,processor_spread},{atom,2844,thread_spread},{atom,2845,thread_no_node_processor_spread},{atom,2846,no_node_processor_spread},{atom,2847,no_node_thread_spread},{atom,2848,no_spread},{atom,2849,unbound}]}]},{type,2850,'fun',[{type,2850,product,[{atom,2850,scheduler_bindings}]},{type,2850,tuple,any}]},{type,2851,'fun',[{type,2851,product,[{atom,2851,scheduler_id}]},{ann_type,2851,[{var,2851,'SchedulerId'},{type,2851,pos_integer,[]}]}]},{type,2852,'fun',[{type,2852,product,[{type,2852,union,[{atom,2852,schedulers},{atom,2852,schedulers_online}]}]},{type,2852,pos_integer,[]}]},{type,2853,'fun',[{type,2853,product,[{atom,2853,smp_support}]},{type,2853,boolean,[]}]},{type,2858,'fun',[{type,2858,product,[{atom,2858,threads}]},{type,2858,boolean,[]}]},{type,2859,'fun',[{type,2859,product,[{atom,2859,thread_pool_size}]},{type,2859,non_neg_integer,[]}]}]}}],since => <<79,84,80,32,49,55,46,48,44,79,84,80,32,49,57,46,48>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,114,101,97,116,105,111,110>>}],[]},{code,[],[<<99,114,101,97,116,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,114,101,97,116,105,111,110,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,101,32,99,114,101,97,116,105,111,110,32,105,115,32,99,104,97,110,103,101,100,32,119,104,101,110,32,97,32,110,111,100,101,32,105,115,32,114,101,115,116,97,114,116,101,100,46,32,84,104,101,32,99,114,101,97,116,105,111,110,32,111,102,32,97,32,110,111,100,101,32,105,115,32,115,116,111,114,101,100,32,105,110,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,44,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,44,32,97,110,100,32,114,101,102,101,114,101,110,99,101,115,46,32,84,104,105,115,32,109,97,107,101,115,32,105,116,32,40,116,111,32,115,111,109,101,32,101,120,116,101,110,116,41,32,112,111,115,115,105,98,108,101,32,116,111,32,100,105,115,116,105,110,103,117,105,115,104,32,98,101,116,119,101,101,110,32,105,100,101,110,116,105,102,105,101,114,115,32,102,114,111,109,32,100,105,102,102,101,114,101,110,116,32,105,110,99,97,114,110,97,116,105,111,110,115,32,111,102,32,97,32,110,111,100,101,46,32,84,104,101,32,118,97,108,105,100,32,99,114,101,97,116,105,111,110,115,32,97,114,101,32,105,110,116,101,103,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,49,46,46,51,44,32,98,117,116,32,116,104,105,115,32,119,105,108,108,32,112,114,111,98,97,98,108,121,32,99,104,97,110,103,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,73,102,32,116,104,101,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<48>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>}],[]},{code,[],[<<100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,116,105,109,101,32,105,110,32,115,101,99,111,110,100,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,97,110,32,101,110,116,114,121,32,105,110,32,97,32,110,111,100,101,32,116,97,98,108,101,32,105,115,32,100,101,108,97,121,101,100,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,115,101,116,32,111,110,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,122,100,110,116,103,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,122,100,110,116,103,99>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116>>}],[]},{code,[],[<<100,105,115,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,100,105,115,116,114,105,98,117,116,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>}],[]},{code,[],[<<100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,98,117,102,102,101,114,32,98,117,115,121,32,108,105,109,105,116,32,105,110,32,98,121,116,101,115,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,122,100,98,98,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,122,100,98,98,108>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,99,116,114,108>>}],[]},{code,[],[<<100,105,115,116,95,99,116,114,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32>>,{code,[],[<<123,78,111,100,101,44,32,67,111,110,116,114,111,108,108,105,110,103,69,110,116,105,116,121,125>>]},<<44,32,111,110,101,32,101,110,116,114,121,32,102,111,114,32,101,97,99,104,32,99,111,110,110,101,99,116,101,100,32,114,101,109,111,116,101,32,110,111,100,101,46,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,116,104,101,32,110,111,100,101,32,110,97,109,101,32,97,110,100,32>>,{code,[],[<<67,111,110,116,114,111,108,108,105,110,103,69,110,116,105,116,121>>]},<<32,105,115,32,116,104,101,32,112,111,114,116,32,111,114,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,116,104,101,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,116,111,32,116,104,97,116,32,110,111,100,101,46,32,77,111,114,101,32,115,112,101,99,105,102,105,99,97,108,108,121,44,32>>,{code,[],[<<67,111,110,116,114,111,108,108,105,110,103,69,110,116,105,116,121>>]},<<32,102,111,114,32,110,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,104,114,111,117,103,104,32,84,67,80,47,73,80,32,40,116,104,101,32,110,111,114,109,97,108,32,99,97,115,101,41,32,105,115,32,116,104,101,32,115,111,99,107,101,116,32,117,115,101,100,32,105,110,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,99,32,110,111,100,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,48,52,54>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2793,'fun',[{type,2793,product,[{atom,2793,creation}]},{type,2793,integer,[]}]},{type,2795,'fun',[{type,2795,product,[{atom,2795,delayed_node_table_gc}]},{type,2795,union,[{atom,2795,infinity},{type,2795,non_neg_integer,[]}]}]},{type,2799,'fun',[{type,2799,product,[{atom,2799,dist}]},{type,2799,binary,[]}]},{type,2800,'fun',[{type,2800,product,[{atom,2800,dist_buf_busy_limit}]},{type,2800,non_neg_integer,[]}]},{type,2801,'fun',[{type,2801,product,[{atom,2801,dist_ctrl}]},{type,2801,tuple,[{ann_type,2801,[{var,2801,'Node'},{type,2801,node,[]}]},{ann_type,2802,[{var,2802,'ControllingEntity'},{type,2802,union,[{type,2802,port,[]},{type,2802,pid,[]}]}]}]}]}]}}],since => <<79,84,80,32,49,56,46,48,44,79,84,80,32,82,49,52,66,48,49>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2766}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,105,115,99,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,98,117,105,108,100,95,116,121,112,101>>}],[]},{code,[],[<<98,117,105,108,100,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<68,101,112,114,101,99,97,116,101,100,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,109,117,95,116,121,112,101>>]},<<32,105,110,115,116,101,97,100>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>}],[]},{code,[],[<<99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,119,111,45,116,117,112,108,101,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,67,32,99,111,109,112,105,108,101,114,32,117,115,101,100,32,119,104,101,110,32,99,111,109,112,105,108,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,99,111,109,112,105,108,101,114,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,117,110,107,110,111,119,110,46,32,84,104,101,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,32,105,115,32,97,32,116,101,114,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,99,111,109,112,105,108,101,114,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,117,110,107,110,111,119,110,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,104,101,99,107,95,105,111>>}],[]},{code,[],[<<99,104,101,99,107,95,105,111>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,101,109,117,108,97,116,111,114,115,32,105,110,116,101,114,110,97,108,32,73,47,79,32,99,104,101,99,107,105,110,103,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,99,111,110,116,101,110,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,118,97,114,121,32,98,101,116,119,101,101,110,32,112,108,97,116,102,111,114,109,115,32,97,110,100,32,111,118,101,114,32,116,105,109,101,46,32,73,116,32,105,115,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,97,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,111,109,112,97,116,95,114,101,108>>}],[]},{code,[],[<<99,111,109,112,97,116,95,114,101,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,109,111,100,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,101,32,105,110,116,101,103,101,114,32,114,101,116,117,114,110,101,100,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,69,114,108,97,110,103,47,79,84,80,32,114,101,108,101,97,115,101,32,116,104,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,101,109,117,108,97,116,111,114,32,104,97,115,32,98,101,101,110,32,115,101,116,32,116,111,32,98,101,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,46,32,84,104,101,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,109,111,100,101,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,117,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,99,111,109,112,97,116,95,114,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,82>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,101,98,117,103,95,99,111,109,112,105,108,101,100>>}],[]},{code,[],[<<100,101,98,117,103,95,99,111,109,112,105,108,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,98,101,101,110,32,100,101,98,117,103,45,99,111,109,112,105,108,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,114,105,118,101,114,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<100,114,105,118,101,114,95,118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,100,114,105,118,101,114,32,118,101,114,115,105,111,110,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,73,116,32,104,97,115,32,116,104,101,32,102,111,114,109,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,114,105,118,101,114,35,118,101,114,115,105,111,110,95,109,97,110,97,103,101,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<34,60,109,97,106,111,114,32,118,101,114,62,46,60,109,105,110,111,114,32,118,101,114,62,34>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101>>}],[]},{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,100,121,110,97,109,105,99,32,116,114,97,99,101,32,102,114,97,109,101,119,111,114,107,32,99,111,109,112,105,108,101,100,32,105,110,116,111,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,46,32,73,116,32,99,97,110,32,98,101,32>>,{code,[],[<<100,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<115,121,115,116,101,109,116,97,112>>]},<<44,32,111,114,32>>,{code,[],[<<110,111,110,101>>]},<<46,32,70,111,114,32,97,32,99,111,109,109,101,114,99,105,97,108,32,111,114,32,115,116,97,110,100,97,114,100,32,98,117,105,108,100,44,32,105,116,32,105,115,32,97,108,119,97,121,115,32>>,{code,[],[<<110,111,110,101>>]},<<46,32,84,104,101,32,111,116,104,101,114,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,105,110,100,105,99,97,116,101,32,97,32,99,117,115,116,111,109,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<46,47,99,111,110,102,105,103,117,114,101,32,45,45,119,105,116,104,45,100,121,110,97,109,105,99,45,116,114,97,99,101,61,100,116,114,97,99,101>>]},<<41,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,100,121,110,97,109,105,99,32,116,114,97,99,105,110,103,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,117,110,116,105,109,101,95,116,111,111,108,115,58,100,121,110,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,121,110,116,114,97,99,101,40,51,41>>]}]},<<32,109,97,110,117,97,108,32,112,97,103,101,32,97,110,100,32,116,104,101,32>>,{code,[],[<<82,69,65,68,77,69,46,100,116,114,97,99,101>>]},<<47>>,{code,[],[<<82,69,65,68,77,69,46,115,121,115,116,101,109,116,97,112>>]},<<32,102,105,108,101,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32,116,111,112,32,100,105,114,101,99,116,111,114,121,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>}],[]},{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32>>,{code,[],[<<98,111,111,108,101,97,110,40,41>>]},<<32,105,110,100,105,99,97,116,105,110,103,32,105,102,32,100,121,110,97,109,105,99,32,116,114,97,99,101,32,112,114,111,98,101,115,32,40>>,{code,[],[<<100,116,114,97,99,101>>]},<<32,111,114,32>>,{code,[],[<<115,121,115,116,101,109,116,97,112>>]},<<41,32,97,114,101,32,98,117,105,108,116,32,105,110,116,111,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,84,104,105,115,32,99,97,110,32,111,110,108,121,32,98,101,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,119,97,115,32,98,117,105,108,116,32,102,111,114,32,100,121,110,97,109,105,99,32,116,114,97,99,105,110,103,32,40,116,104,97,116,32,105,115,44,32>>,{code,[],[<<115,121,115,116,101,109,95,105,110,102,111,40,100,121,110,97,109,105,99,95,116,114,97,99,101,41>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<100,116,114,97,99,101>>]},<<32,111,114,32>>,{code,[],[<<115,121,115,116,101,109,116,97,112>>]},<<41,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,102,108,97,118,111,114>>}],[]},{code,[],[<<101,109,117,95,102,108,97,118,111,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,102,108,97,118,111,114,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,105,115,32,119,105,108,108,32,98,101,32,101,105,116,104,101,114,32>>,{code,[],[<<101,109,117>>]},<<32,111,114,32>>,{code,[],[<<106,105,116>>]},<<46,32,80,111,115,115,105,98,108,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,111,114,32,114,101,109,111,118,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,116,121,112,101>>}],[]},{code,[],[<<101,109,117,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,98,117,105,108,100,32,116,121,112,101,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,105,115,32,105,115,32,110,111,114,109,97,108,108,121,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,112,116>>]},<<32,102,111,114,32,111,112,116,105,109,105,122,101,100,46,32,79,116,104,101,114,32,112,111,115,115,105,98,108,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,97,114,101,32>>,{code,[],[<<100,101,98,117,103>>]},<<44,32>>,{code,[],[<<103,99,111,118>>]},<<44,32>>,{code,[],[<<118,97,108,103,114,105,110,100>>]},<<44,32>>,{code,[],[<<103,112,114,111,102>>]},<<44,32,97,110,100,32>>,{code,[],[<<108,99,110,116>>]},<<46,32,80,111,115,115,105,98,108,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,111,114,32,114,101,109,111,118,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,105,110,102,111>>}],[]},{code,[],[<<105,110,102,111>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,115,121,115,116,101,109,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,107,101,114,110,101,108,95,112,111,108,108>>}],[]},{code,[],[<<107,101,114,110,101,108,95,112,111,108,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,117,115,101,115,32,115,111,109,101,32,107,105,110,100,32,111,102,32,107,101,114,110,101,108,45,112,111,108,108,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,97,100,101,100>>}],[]},{code,[],[<<108,111,97,100,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,108,111,97,100,101,100,32,109,111,100,117,108,101,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,97,99,104,105,110,101>>}],[]},{code,[],[<<109,97,99,104,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,109,97,99,104,105,110,101,32,110,97,109,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>}],[]},{code,[],[<<109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,111,100,105,102,105,101,100,32,116,105,109,105,110,103,45,108,101,118,101,108,32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,102,32,109,111,100,105,102,105,101,100,32,116,105,109,105,110,103,32,105,115,32,101,110,97,98,108,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,109,111,100,105,102,105,101,100,32,116,105,109,105,110,103,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,84>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,84>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,110,105,102,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<110,105,102,95,118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,78,73,70,32,105,110,116,101,114,102,97,99,101,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,73,116,32,105,115,32,111,110,32,116,104,101,32,102,111,114,109,32,34,60,109,97,106,111,114,32,118,101,114,62,46,60,109,105,110,111,114,32,118,101,114,62,34,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,116,112,95,114,101,108,101,97,115,101>>}],[]},{code,[],[<<111,116,112,95,114,101,108,101,97,115,101>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,116,112,95,114,101,108,101,97,115,101>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,79,84,80,32,114,101,108,101,97,115,101,32,110,117,109,98,101,114,32,111,102,32,116,104,101,32,79,84,80,32,114,101,108,101,97,115,101,32,116,104,97,116,32,116,104,101,32,99,117,114,114,101,110,116,108,121,32,101,120,101,99,117,116,105,110,103,32,69,82,84,83,32,97,112,112,108,105,99,97,116,105,111,110,32,105,115,32,112,97,114,116,32,111,102,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,49,55,44,32,116,104,101,32,79,84,80,32,114,101,108,101,97,115,101,32,110,117,109,98,101,114,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,109,97,106,111,114,32,79,84,80,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,46,32,78,111,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,41>>]},<<32,97,114,103,117,109,101,110,116,32,103,105,118,101,115,32,116,104,101,32,101,120,97,99,116,32,79,84,80,32,118,101,114,115,105,111,110,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,101,120,97,99,116,32,79,84,80,32,118,101,114,115,105,111,110,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,32,105,115,32,100,105,102,102,105,99,117,108,116,32,116,111,32,100,101,116,101,114,109,105,110,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,118,101,114,115,105,111,110,115,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,115,121,115,116,101,109,95,112,114,105,110,99,105,112,108,101,115,58,118,101,114,115,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<83,121,115,116,101,109,32,112,114,105,110,99,105,112,108,101,115>>]},<<32,105,110,32,83,121,115,116,101,109,32,68,111,99,117,109,101,110,116,97,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>}],[]},{code,[],[<<112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,102,97,117,108,116,32,112,111,114,116,32,112,97,114,97,108,108,101,108,105,115,109,32,115,99,104,101,100,117,108,105,110,103,32,104,105,110,116,32,117,115,101,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,112,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,112,112>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>}],[]},{code,[],[<<115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,112,114,111,99,101,115,115,111,114,32,97,110,100,32,79,83,32,97,114,99,104,105,116,101,99,116,117,114,101,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,98,117,105,108,116,32,102,111,114,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,108,111,103,103,101,114>>}],[]},{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32>>,{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]},<<32,97,115,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,121,115,116,101,109,95,108,111,103,103,101,114,44,32,95,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<115,121,115,116,101,109,95,118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,97,110,100,32,115,111,109,101,32,105,109,112,111,114,116,97,110,116,32,112,114,111,112,101,114,116,105,101,115,44,32,115,117,99,104,32,97,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>}],[]},{code,[],[<<116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,110,111,100,101,32,116,114,97,99,101,32,99,111,110,116,114,111,108,32,119,111,114,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<103,101,116,95,116,99,119>>]},<<32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,109,97,116,99,104,95,115,112,101,99,35,103,101,116,95,116,99,119>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,111,102,32,116,104,101,32,101,109,117,108,97,116,111,114,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,119,111,114,100,115,105,122,101>>}],[]},{code,[],[<<119,111,114,100,115,105,122,101>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<123,119,111,114,100,115,105,122,101,44,32,105,110,116,101,114,110,97,108,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,119,111,114,100,115,105,122,101,44,32,105,110,116,101,114,110,97,108,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,105,122,101,32,111,102,32,69,114,108,97,110,103,32,116,101,114,109,32,119,111,114,100,115,32,105,110,32,98,121,116,101,115,32,97,115,32,97,110,32,105,110,116,101,103,101,114,44,32,116,104,97,116,32,105,115,44,32,52,32,105,115,32,114,101,116,117,114,110,101,100,32,111,110,32,97,32,51,50,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,44,32,97,110,100,32,56,32,105,115,32,114,101,116,117,114,110,101,100,32,111,110,32,97,32,112,117,114,101,32,54,52,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,46,32,79,110,32,97,32,104,97,108,102,119,111,114,100,32,54,52,45,98,105,116,32,101,109,117,108,97,116,111,114,44,32,52,32,105,115,32,114,101,116,117,114,110,101,100,44,32,97,115,32,116,104,101,32,69,114,108,97,110,103,32,116,101,114,109,115,32,97,114,101,32,115,116,111,114,101,100,32,117,115,105,110,103,32,97,32,118,105,114,116,117,97,108,32,119,111,114,100,32,115,105,122,101,32,111,102,32,104,97,108,102,32,116,104,101,32,115,121,115,116,101,109,32,119,111,114,100,32,115,105,122,101,46>>]}]},{dt,[],[{code,[],[<<123,119,111,114,100,115,105,122,101,44,32,101,120,116,101,114,110,97,108,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,114,117,101,32,119,111,114,100,32,115,105,122,101,32,111,102,32,116,104,101,32,101,109,117,108,97,116,111,114,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,115,105,122,101,32,111,102,32,97,32,112,111,105,110,116,101,114,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,105,110,32,98,121,116,101,115,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,79,110,32,97,32,112,117,114,101,32,51,50,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,44,32,52,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,110,32,98,111,116,104,32,97,32,104,97,108,102,32,119,111,114,100,32,97,110,100,32,111,110,32,97,32,112,117,114,101,32,54,52,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,44,32,56,32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,49,49,55>>,signature => [{attribute,2766,spec,{{erlang,system_info,1},[{type,2786,'fun',[{type,2786,product,[{atom,2786,c_compiler_used}]},{type,2786,tuple,[{type,2786,atom,[]},{type,2786,term,[]}]}]},{type,2787,'fun',[{type,2787,product,[{atom,2787,check_io}]},{type,2787,list,[{var,2787,'_'}]}]},{type,2788,'fun',[{type,2788,product,[{atom,2788,compat_rel}]},{type,2788,integer,[]}]},{type,2794,'fun',[{type,2794,product,[{atom,2794,debug_compiled}]},{type,2794,boolean,[]}]},{type,2803,'fun',[{type,2803,product,[{atom,2803,driver_version}]},{type,2803,string,[]}]},{type,2804,'fun',[{type,2804,product,[{atom,2804,dynamic_trace}]},{type,2804,union,[{atom,2804,none},{atom,2804,dtrace},{atom,2804,systemtap}]}]},{type,2805,'fun',[{type,2805,product,[{atom,2805,dynamic_trace_probes}]},{type,2805,boolean,[]}]},{type,2807,'fun',[{type,2807,product,[{atom,2807,emu_flavor}]},{type,2807,union,[{atom,2807,emu},{atom,2807,jit}]}]},{type,2808,'fun',[{type,2808,product,[{atom,2808,emu_type}]},{type,2808,union,[{atom,2808,opt},{atom,2808,debug},{atom,2808,gcov},{atom,2808,valgrind},{atom,2808,gprof},{atom,2808,lcnt},{atom,2808,frmptr}]}]},{type,2816,'fun',[{type,2816,product,[{atom,2816,info}]},{type,2816,binary,[]}]},{type,2817,'fun',[{type,2817,product,[{atom,2817,kernel_poll}]},{type,2817,boolean,[]}]},{type,2818,'fun',[{type,2818,product,[{atom,2818,loaded}]},{type,2818,binary,[]}]},{type,2822,'fun',[{type,2822,product,[{atom,2822,machine}]},{type,2822,string,[]}]},{type,2828,'fun',[{type,2828,product,[{atom,2828,modified_timing_level}]},{type,2828,union,[{type,2828,integer,[]},{atom,2828,undefined}]}]},{type,2831,'fun',[{type,2831,product,[{atom,2831,nif_version}]},{type,2831,string,[]}]},{type,2833,'fun',[{type,2833,product,[{atom,2833,otp_release}]},{type,2833,string,[]}]},{type,2836,'fun',[{type,2836,product,[{atom,2836,port_parallelism}]},{type,2836,boolean,[]}]},{type,2855,'fun',[{type,2855,product,[{atom,2855,system_architecture}]},{type,2855,string,[]}]},{type,2856,'fun',[{type,2856,product,[{atom,2856,system_logger}]},{type,2856,union,[{atom,2856,logger},{atom,2856,undefined},{type,2856,pid,[]}]}]},{type,2857,'fun',[{type,2857,product,[{atom,2857,system_version}]},{type,2857,string,[]}]},{type,2864,'fun',[{type,2864,product,[{atom,2864,trace_control_word}]},{type,2864,non_neg_integer,[]}]},{type,2866,'fun',[{type,2866,product,[{atom,2866,version}]},{type,2866,string,[]}]},{type,2867,'fun',[{type,2867,product,[{type,2867,union,[{atom,2867,wordsize},{type,2867,tuple,[{atom,2867,wordsize},{atom,2867,internal}]},{type,2867,tuple,[{atom,2867,wordsize},{atom,2867,external}]}]}]},{type,2867,union,[{integer,2867,4},{integer,2867,8}]}]}]}}],since => <<79,84,80,32,49,55,46,52,44,79,84,80,32,50,49,46,51,44,79,84,80,32,50,52,46,48,44,79,84,80,32,82,49,53,66,48,49,44,79,84,80,32,82,49,54,66>>}},{{function,system_monitor,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1957}],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,105,110,103,32,115,101,116,116,105,110,103,115,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>]}]},<<32,97,115,32>>,{code,[],[<<123,77,111,110,105,116,111,114,80,105,100,44,32,79,112,116,105,111,110,115,125>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,110,111,32,115,101,116,116,105,110,103,115,32,101,120,105,115,116,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,111,110,101,32,116,104,97,116,32,119,97,115,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,52,50,52>>,signature => [{attribute,1957,spec,{{erlang,system_monitor,0},[{type,1957,bounded_fun,[{type,1957,'fun',[{type,1957,product,[]},{var,1957,'MonSettings'}]},[{type,1958,constraint,[{atom,1958,is_subtype},[{var,1958,'MonSettings'},{type,1958,union,[{atom,1958,undefined},{type,1958,tuple,[{var,1958,'MonitorPid'},{var,1958,'Options'}]}]}]]},{type,1959,constraint,[{atom,1959,is_subtype},[{var,1959,'MonitorPid'},{type,1959,pid,[]}]]},{type,1960,constraint,[{atom,1960,is_subtype},[{var,1960,'Options'},{type,1960,list,[{user_type,1960,system_monitor_option,[]}]}]]}]]}]}}]}},{{function,system_monitor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1965}],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<87,104,101,110,32,99,97,108,108,101,100,32,119,105,116,104,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<44,32,97,108,108,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,32,109,111,110,105,116,111,114,105,110,103,32,115,101,116,116,105,110,103,115,32,97,114,101,32,99,108,101,97,114,101,100,46>>]},{p,[],[<<67,97,108,108,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,32,119,105,116,104,32>>,{code,[],[<<123,77,111,110,105,116,111,114,80,105,100,44,32,79,112,116,105,111,110,115,125>>]},<<32,97,115,32,97,114,103,117,109,101,110,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,80,105,100,44,32,79,112,116,105,111,110,115,41>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,115,101,116,116,105,110,103,115,32,106,117,115,116,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,52,51,56>>,signature => [{attribute,1965,spec,{{erlang,system_monitor,1},[{type,1965,bounded_fun,[{type,1965,'fun',[{type,1965,product,[{var,1965,'Arg'}]},{var,1965,'MonSettings'}]},[{type,1966,constraint,[{atom,1966,is_subtype},[{var,1966,'Arg'},{type,1966,union,[{atom,1966,undefined},{type,1966,tuple,[{var,1966,'MonitorPid'},{var,1966,'Options'}]}]}]]},{type,1967,constraint,[{atom,1967,is_subtype},[{var,1967,'MonSettings'},{type,1967,union,[{atom,1967,undefined},{type,1967,tuple,[{var,1967,'MonitorPid'},{var,1967,'Options'}]}]}]]},{type,1968,constraint,[{atom,1968,is_subtype},[{var,1968,'MonitorPid'},{type,1968,pid,[]}]]},{type,1969,constraint,[{atom,1969,is_subtype},[{var,1969,'Options'},{type,1969,list,[{user_type,1969,system_monitor_option,[]}]}]]}]]}]}}]}},{{function,system_monitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1974}],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,32,109,111,110,105,116,111,114,105,110,103,32,111,112,116,105,111,110,115,46,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,114,101,99,101,105,118,105,110,103,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,108,105,115,116,32,111,102,32,109,111,110,105,116,111,114,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,108,111,110,103,95,103,99,44,32,84,105,109,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,116,97,107,101,115,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<84,105,109,101>>]},<<32,119,97,108,108,32,99,108,111,99,107,32,109,105,108,108,105,115,101,99,111,110,100,115,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,71,99,80,105,100,44,32,108,111,110,103,95,103,99,44,32,73,110,102,111,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<71,99,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,105,100,32,116,104,97,116,32,119,97,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,101,108,101,109,101,110,116,32,116,117,112,108,101,115,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[<<79,110,101,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,115,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,71,99,84,105,109,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<71,99,84,105,109,101>>]},<<32,105,115,32,116,104,101,32,116,105,109,101,32,102,111,114,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,46,32,84,104,101,32,111,116,104,101,114,32,116,117,112,108,101,115,32,97,114,101,32,116,97,103,103,101,100,32,119,105,116,104,32>>,{code,[],[<<104,101,97,112,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<115,116,97,99,107,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<109,98,117,102,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<111,108,100,95,104,101,97,112,95,115,105,122,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<111,108,100,95,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<46,32,84,104,101,115,101,32,116,117,112,108,101,115,32,97,114,101,32,101,120,112,108,97,105,110,101,100,32,105,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]}]},<<32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<41,46,32,78,101,119,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,44,32,97,110,100,32,116,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,110,32,116,104,101,32>>,{code,[],[<<73,110,102,111>>]},<<32,108,105,115,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,108,111,110,103,95,115,99,104,101,100,117,108,101,44,32,84,105,109,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,114,117,110,115,32,117,110,105,110,116,101,114,114,117,112,116,101,100,32,102,111,114,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<84,105,109,101>>]},<<32,119,97,108,108,32,99,108,111,99,107,32,109,105,108,108,105,115,101,99,111,110,100,115,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,80,105,100,79,114,80,111,114,116,44,32,108,111,110,103,95,115,99,104,101,100,117,108,101,44,32,73,110,102,111,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,116,104,97,116,32,119,97,115,32,114,117,110,110,105,110,103,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,101,108,101,109,101,110,116,32,116,117,112,108,101,115,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,101,118,101,110,116,46>>]},{p,[],[<<73,102,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<44,32,116,104,101,32,116,117,112,108,101,115,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,77,105,108,108,105,115,125>>]},<<44,32>>,{code,[],[<<123,105,110,44,32,76,111,99,97,116,105,111,110,125>>]},<<44,32,97,110,100,32>>,{code,[],[<<123,111,117,116,44,32,76,111,99,97,116,105,111,110,125>>]},<<32,97,114,101,32,112,114,101,115,101,110,116,44,32,119,104,101,114,101,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,101,105,116,104,101,114,32,97,110,32,77,70,65,32,40>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<41,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,32,119,104,101,114,101,32,116,104,101,32,112,114,111,99,101,115,115,32,119,97,115,32,115,99,104,101,100,117,108,101,100,32,105,110,47,111,117,116,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<73,102,32,97,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<44,32,116,104,101,32,116,117,112,108,101,115,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,77,105,108,108,105,115,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,112,111,114,116,95,111,112,44,79,112,125>>]},<<32,97,114,101,32,112,114,101,115,101,110,116,46,32>>,{code,[],[<<79,112>>]},<<32,105,115,32,111,110,101,32,111,102,32>>,{code,[],[<<112,114,111,99,95,115,105,103>>]},<<44,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<44,32>>,{code,[],[<<105,110,112,117,116>>]},<<44,32>>,{code,[],[<<111,117,116,112,117,116>>]},<<44,32>>,{code,[],[<<101,118,101,110,116>>]},<<44,32,111,114,32>>,{code,[],[<<100,105,115,116,95,99,109,100>>]},<<44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,119,104,105,99,104,32,100,114,105,118,101,114,32,99,97,108,108,98,97,99,107,32,119,97,115,32,101,120,101,99,117,116,105,110,103,46>>]},{p,[],[{code,[],[<<112,114,111,99,95,115,105,103>>]},<<32,105,115,32,97,110,32,105,110,116,101,114,110,97,108,32,111,112,101,114,97,116,105,111,110,32,97,110,100,32,105,115,32,110,101,118,101,114,32,116,111,32,97,112,112,101,97,114,44,32,119,104,105,108,101,32,116,104,101,32,111,116,104,101,114,115,32,114,101,112,114,101,115,101,110,116,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,100,114,105,118,101,114,32,99,97,108,108,98,97,99,107,115,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<44,32>>,{code,[],[<<114,101,97,100,121,95,105,110,112,117,116>>]},<<44,32>>,{code,[],[<<114,101,97,100,121,95,111,117,116,112,117,116>>]},<<44,32>>,{code,[],[<<101,118,101,110,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<111,117,116,112,117,116,118>>]},<<32,40,119,104,101,110,32,116,104,101,32,112,111,114,116,32,105,115,32,117,115,101,100,32,98,121,32,100,105,115,116,114,105,98,117,116,105,111,110,41,46,32,86,97,108,117,101,32>>,{code,[],[<<77,105,108,108,105,115>>]},<<32,105,110,32,116,117,112,108,101,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,105,110,102,111,114,109,115,32,97,98,111,117,116,32,116,104,101,32,117,110,105,110,116,101,114,114,117,112,116,101,100,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,44,32,119,104,105,99,104,32,97,108,119,97,121,115,32,105,115,32,101,113,117,97,108,32,116,111,32,111,114,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,115,117,112,112,108,105,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,116,114,97,99,101,46,32,78,101,119,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,116,111,32,116,104,101,32>>,{code,[],[<<73,110,102,111>>]},<<32,108,105,115,116,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,110,32,116,104,101,32,108,105,115,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]},{p,[],[<<84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,100,101,116,101,99,116,32,112,114,111,98,108,101,109,115,32,119,105,116,104,32,78,73,70,115,32,111,114,32,100,114,105,118,101,114,115,32,116,104,97,116,32,116,97,107,101,32,116,111,111,32,108,111,110,103,32,116,111,32,101,120,101,99,117,116,101,46,32,49,32,109,115,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,103,111,111,100,32,109,97,120,105,109,117,109,32,116,105,109,101,32,102,111,114,32,97,32,100,114,105,118,101,114,32,99,97,108,108,98,97,99,107,32,111,114,32,97,32,78,73,70,46,32,72,111,119,101,118,101,114,44,32,97,32,116,105,109,101,45,115,104,97,114,105,110,103,32,115,121,115,116,101,109,32,105,115,32,117,115,117,97,108,108,121,32,116,111,32,99,111,110,115,105,100,101,114,32,101,118,101,114,121,116,104,105,110,103,32,60,32,49,48,48,32,109,115,32,97,115,32,34,112,111,115,115,105,98,108,101,34,32,97,110,100,32,102,97,105,114,108,121,32,34,110,111,114,109,97,108,34,46,32,72,111,119,101,118,101,114,44,32,108,111,110,103,101,114,32,115,99,104,101,100,117,108,101,32,116,105,109,101,115,32,99,97,110,32,105,110,100,105,99,97,116,101,32,115,119,97,112,112,105,110,103,32,111,114,32,97,32,109,105,115,98,101,104,97,118,105,110,103,32,78,73,70,47,100,114,105,118,101,114,46,32,77,105,115,98,101,104,97,118,105,110,103,32,78,73,70,115,32,97,110,100,32,100,114,105,118,101,114,115,32,99,97,110,32,99,97,117,115,101,32,98,97,100,32,114,101,115,111,117,114,99,101,32,117,116,105,108,105,122,97,116,105,111,110,32,97,110,100,32,98,97,100,32,111,118,101,114,97,108,108,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,46>>]}]},{dt,[],[{code,[],[<<123,108,97,114,103,101,95,104,101,97,112,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,114,101,115,117,108,116,115,32,105,110,32,116,104,101,32,97,108,108,111,99,97,116,101,100,32,115,105,122,101,32,111,102,32,97,32,104,101,97,112,32,98,101,105,110,103,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<83,105,122,101>>]},<<32,119,111,114,100,115,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,71,99,80,105,100,44,32,108,97,114,103,101,95,104,101,97,112,44,32,73,110,102,111,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<71,99,80,105,100>>]},<<32,97,110,100,32>>,{code,[],[<<73,110,102,111>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,102,111,114,32>>,{code,[],[<<108,111,110,103,95,103,99>>]},<<32,101,97,114,108,105,101,114,44,32,101,120,99,101,112,116,32,116,104,97,116,32,116,104,101,32,116,117,112,108,101,32,116,97,103,103,101,100,32,119,105,116,104,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,115,105,122,101,115,32,111,102,32,97,108,108,32,109,101,109,111,114,121,32,98,108,111,99,107,115,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,97,108,108,32,104,101,97,112,32,103,101,110,101,114,97,116,105,111,110,115,32,97,102,116,101,114,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,101,113,117,97,108,32,116,111,32,111,114,32,104,105,103,104,101,114,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<46>>]},{p,[],[<<87,104,101,110,32,97,32,112,114,111,99,101,115,115,32,105,115,32,107,105,108,108,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32,105,116,32,105,115,32,107,105,108,108,101,100,32,98,101,102,111,114,101,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,99,111,109,112,108,101,116,101,32,97,110,100,32,116,104,117,115,32,110,111,32,108,97,114,103,101,32,104,101,97,112,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,46>>]}]},{dt,[],[{code,[],[<<98,117,115,121,95,112,111,114,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,103,101,116,115,32,115,117,115,112,101,110,100,101,100,32,98,101,99,97,117,115,101,32,105,116,32,115,101,110,100,115,32,116,111,32,97,32,98,117,115,121,32,112,111,114,116,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,83,117,115,80,105,100,44,32,98,117,115,121,95,112,111,114,116,44,32,80,111,114,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<83,117,115,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,105,100,32,116,104,97,116,32,103,111,116,32,115,117,115,112,101,110,100,101,100,32,119,104,101,110,32,115,101,110,100,105,110,103,32,116,111,32>>,{code,[],[<<80,111,114,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<98,117,115,121,95,100,105,115,116,95,112,111,114,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,103,101,116,115,32,115,117,115,112,101,110,100,101,100,32,98,101,99,97,117,115,101,32,105,116,32,115,101,110,100,115,32,116,111,32,97,32,112,114,111,99,101,115,115,32,111,110,32,97,32,114,101,109,111,116,101,32,110,111,100,101,32,119,104,111,115,101,32,105,110,116,101,114,45,110,111,100,101,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,97,115,32,104,97,110,100,108,101,100,32,98,121,32,97,32,98,117,115,121,32,112,111,114,116,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,83,117,115,80,105,100,44,32,98,117,115,121,95,100,105,115,116,95,112,111,114,116,44,32,80,111,114,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<83,117,115,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,105,100,32,116,104,97,116,32,103,111,116,32,115,117,115,112,101,110,100,101,100,32,119,104,101,110,32,115,101,110,100,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,32,105,110,116,101,114,45,110,111,100,101,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,112,111,114,116,32>>,{code,[],[<<80,111,114,116>>]},<<46>>]}]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,115,101,116,116,105,110,103,115,32,106,117,115,116,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>]}]},<<46>>]},{p,[],[<<84,104,101,32,97,114,103,117,109,101,110,116,115,32,116,111,32>>,{code,[],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>]},<<32,115,112,101,99,105,102,105,101,115,32,104,111,119,32,97,108,108,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,105,110,103,32,111,110,32,116,104,101,32,110,111,100,101,32,115,104,111,117,108,100,32,98,101,32,100,111,110,101,44,32,110,111,116,32,104,111,119,32,105,116,32,115,104,111,117,108,100,32,98,101,32,99,104,97,110,103,101,100,46,32,84,104,105,115,32,109,101,97,110,115,32,111,110,108,121,32,111,110,101,32,112,114,111,99,101,115,115,32,97,116,32,97,32,116,105,109,101,32,40>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<41,32,99,97,110,32,98,101,32,116,104,101,32,114,101,99,101,105,118,101,114,32,111,102,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,115,46,32,65,108,115,111,44,32,116,104,101,32,119,97,121,32,116,111,32,99,108,101,97,114,32,97,32,115,112,101,99,105,102,105,99,32,109,111,110,105,116,111,114,32,111,112,116,105,111,110,32,105,115,32,116,111,32,110,111,116,32,105,110,99,108,117,100,101,32,105,116,32,105,110,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<79,112,116,105,111,110,115>>]},<<46,32,65,108,108,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,105,110,103,32,119,105,108,108,44,32,104,111,119,101,118,101,114,44,32,98,101,32,99,108,101,97,114,101,100,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,116,101,114,109,105,110,97,116,101,115,46>>]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,110,111,32,115,112,101,99,105,97,108,32,111,112,116,105,111,110,32,118,97,108,117,101,115,32,40,108,105,107,101,32,122,101,114,111,41,32,116,111,32,99,108,101,97,114,32,97,110,32,111,112,116,105,111,110,46,32,83,111,109,101,32,111,102,32,116,104,101,32,111,112,116,105,111,110,115,32,104,97,118,101,32,97,32,117,110,115,112,101,99,105,102,105,101,100,32,109,105,110,105,109,117,109,32,118,97,108,117,101,46,32,76,111,119,101,114,32,118,97,108,117,101,115,32,119,105,108,108,32,98,101,32,97,100,106,117,115,116,101,100,32,116,111,32,116,104,101,32,109,105,110,105,109,117,109,32,118,97,108,117,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,105,115,32,99,117,114,114,101,110,116,108,121,32,110,111,116,32,112,111,115,115,105,98,108,101,32,116,111,32,109,111,110,105,116,111,114,32,97,108,108,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,32>>,{code,[],[<<123,108,111,110,103,95,103,99,44,32,48,125>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,97,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,103,101,116,115,32,115,111,32,108,97,114,103,101,32,116,104,97,116,32,105,116,32,105,116,115,101,108,102,32,115,116,97,114,116,115,32,116,111,32,99,97,117,115,101,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,115,32,119,104,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,110,103,44,32,116,104,101,32,109,101,115,115,97,103,101,115,32,101,110,108,97,114,103,101,32,116,104,101,32,112,114,111,99,101,115,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,110,100,32,112,114,111,98,97,98,108,121,32,109,97,107,101,32,116,104,101,32,112,114,111,98,108,101,109,32,119,111,114,115,101,46>>]},{p,[],[<<75,101,101,112,32,116,104,101,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,110,101,97,116,32,97,110,100,32,100,111,32,110,111,116,32,115,101,116,32,116,104,101,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,108,105,109,105,116,115,32,116,111,111,32,116,105,103,104,116,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,52,53,54>>,signature => [{attribute,1974,spec,{{erlang,system_monitor,2},[{type,1974,bounded_fun,[{type,1974,'fun',[{type,1974,product,[{var,1974,'MonitorPid'},{var,1974,'Options'}]},{var,1974,'MonSettings'}]},[{type,1975,constraint,[{atom,1975,is_subtype},[{var,1975,'MonitorPid'},{type,1975,pid,[]}]]},{type,1976,constraint,[{atom,1976,is_subtype},[{var,1976,'Options'},{type,1976,list,[{user_type,1976,system_monitor_option,[]}]}]]},{type,1977,constraint,[{atom,1977,is_subtype},[{var,1977,'MonSettings'},{type,1977,union,[{atom,1977,undefined},{type,1977,tuple,[{var,1977,'OldMonitorPid'},{var,1977,'OldOptions'}]}]}]]},{type,1978,constraint,[{atom,1978,is_subtype},[{var,1978,'OldMonitorPid'},{type,1978,pid,[]}]]},{type,1979,constraint,[{atom,1979,is_subtype},[{var,1979,'OldOptions'},{type,1979,list,[{user_type,1979,system_monitor_option,[]}]}]]}]]}]}}]}},{{function,system_profile,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1984}],[<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,112,114,111,102,105,108,105,110,103,32,115,101,116,116,105,110,103,115,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>]}]},<<32,97,115,32>>,{code,[],[<<123,80,114,111,102,105,108,101,114,80,105,100,44,32,79,112,116,105,111,110,115,125>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,114,101,32,97,114,101,32,110,111,32,115,101,116,116,105,110,103,115,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,111,110,101,32,116,104,97,116,32,119,97,115,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,54,48,48>>,signature => [{attribute,1984,spec,{{erlang,system_profile,0},[{type,1984,bounded_fun,[{type,1984,'fun',[{type,1984,product,[]},{var,1984,'ProfilerSettings'}]},[{type,1985,constraint,[{atom,1985,is_subtype},[{var,1985,'ProfilerSettings'},{type,1985,union,[{atom,1985,undefined},{type,1985,tuple,[{var,1985,'ProfilerPid'},{var,1985,'Options'}]}]}]]},{type,1986,constraint,[{atom,1986,is_subtype},[{var,1986,'ProfilerPid'},{type,1986,union,[{type,1986,pid,[]},{type,1986,port,[]}]}]]},{type,1987,constraint,[{atom,1987,is_subtype},[{var,1987,'Options'},{type,1987,list,[{user_type,1987,system_profile_option,[]}]}]]}]]}]}}]}},{{function,system_profile,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1992}],[<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<83,101,116,115,32,115,121,115,116,101,109,32,112,114,111,102,105,108,101,114,32,111,112,116,105,111,110,115,46,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,114,32,112,111,114,116,32,114,101,99,101,105,118,105,110,103,32,112,114,111,102,105,108,105,110,103,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,114,101,99,101,105,118,101,114,32,105,115,32,101,120,99,108,117,100,101,100,32,102,114,111,109,32,97,108,108,32,112,114,111,102,105,108,105,110,103,46,32,84,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,108,105,115,116,32,111,102,32,112,114,111,102,105,108,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,99,108,117,115,105,118,101>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,115,121,110,99,104,114,111,110,111,117,115,32,99,97,108,108,32,116,111,32,97,32,112,111,114,116,32,102,114,111,109,32,97,32,112,114,111,99,101,115,115,32,105,115,32,100,111,110,101,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,110,111,116,32,114,117,110,110,97,98,108,101,32,100,117,114,105,110,103,32,116,104,101,32,99,97,108,108,32,114,117,110,116,105,109,101,32,116,111,32,116,104,101,32,112,111,114,116,46,32,84,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,105,102,105,101,100,32,97,115,32>>,{code,[],[<<105,110,97,99,116,105,118,101>>]},<<44,32,97,110,100,32,108,97,116,101,114,32>>,{code,[],[<<97,99,116,105,118,101>>]},<<32,119,104,101,110,32,116,104,101,32,112,111,114,116,32,99,97,108,108,98,97,99,107,32,114,101,116,117,114,110,115,46>>]}]},{dt,[],[{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,115,116,97,109,112,115,32,105,110,32,112,114,111,102,105,108,101,32,109,101,115,115,97,103,101,115,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,97,98,108,101,95,112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,105,115,32,112,117,116,32,105,110,116,111,32,111,114,32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,104,101,32,114,117,110,32,113,117,101,117,101,44,32,97,32,109,101,115,115,97,103,101,44,32>>,{code,[],[<<123,112,114,111,102,105,108,101,44,32,80,105,100,44,32,83,116,97,116,101,44,32,77,102,97,44,32,84,115,125>>]},<<44,32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<46,32,82,117,110,110,105,110,103,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,97,114,101,32,114,101,105,110,115,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32,114,117,110,32,113,117,101,117,101,32,97,102,116,101,114,32,104,97,118,105,110,103,32,98,101,101,110,32,112,114,101,45,101,109,112,116,101,100,32,100,111,32,110,111,116,32,116,114,105,103,103,101,114,32,116,104,105,115,32,109,101,115,115,97,103,101,46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,97,98,108,101,95,112,111,114,116,115>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,111,114,116,32,105,115,32,112,117,116,32,105,110,116,111,32,111,114,32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,104,101,32,114,117,110,32,113,117,101,117,101,44,32,97,32,109,101,115,115,97,103,101,44,32>>,{code,[],[<<123,112,114,111,102,105,108,101,44,32,80,111,114,116,44,32,83,116,97,116,101,44,32,48,44,32,84,115,125>>]},<<44,32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,115,99,104,101,100,117,108,101,114,32,105,115,32,112,117,116,32,116,111,32,115,108,101,101,112,32,111,114,32,97,119,111,107,101,110,44,32,97,32,109,101,115,115,97,103,101,44,32>>,{code,[],[<<123,112,114,111,102,105,108,101,44,32,115,99,104,101,100,117,108,101,114,44,32,73,100,44,32,83,116,97,116,101,44,32,78,111,83,99,104,101,100,115,44,32,84,115,125>>]},<<44,32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,115,116,97,109,112,115,32,105,110,32,112,114,111,102,105,108,101,32,109,101,115,115,97,103,101,115,32,99,111,110,115,105,115,116,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,105,110,116,101,103,101,114,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{code,[],[<<123,101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41,44,32,101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,115,116,97,109,112,115,32,105,110,32,112,114,111,102,105,108,101,32,109,101,115,115,97,103,101,115,32,105,110,99,108,117,100,101,32,97,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,116,104,97,116,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,40,41>>]},<<46,32,84,104,105,115,32,105,115,32,97,108,115,111,32,116,104,101,32,100,101,102,97,117,108,116,32,105,102,32,110,111,32,116,105,109,101,32,115,116,97,109,112,32,102,108,97,103,32,105,115,32,115,112,101,99,105,102,105,101,100,46,32,73,102,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<32,104,97,115,32,98,101,101,110,32,101,110,97,98,108,101,100,32,116,104,114,111,117,103,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<44,32,116,104,105,115,32,97,108,115,111,32,101,102,102,101,99,116,115,32,116,104,101,32,116,105,109,101,32,115,116,97,109,112,32,112,114,111,100,117,99,101,100,32,105,110,32,112,114,111,102,105,108,105,110,103,32,109,101,115,115,97,103,101,115,32,119,104,101,110,32,102,108,97,103,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,101,110,97,98,108,101,100,46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,112,114,111,102,105,108,101>>]},<<32,98,101,104,97,118,105,111,114,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,54,49,53>>,signature => [{attribute,1992,spec,{{erlang,system_profile,2},[{type,1992,bounded_fun,[{type,1992,'fun',[{type,1992,product,[{var,1992,'ProfilerPid'},{var,1992,'Options'}]},{var,1992,'ProfilerSettings'}]},[{type,1993,constraint,[{atom,1993,is_subtype},[{var,1993,'ProfilerPid'},{type,1993,union,[{type,1993,pid,[]},{type,1993,port,[]},{atom,1993,undefined}]}]]},{type,1994,constraint,[{atom,1994,is_subtype},[{var,1994,'Options'},{type,1994,list,[{user_type,1994,system_profile_option,[]}]}]]},{type,1995,constraint,[{atom,1995,is_subtype},[{var,1995,'ProfilerSettings'},{type,1995,union,[{atom,1995,undefined},{type,1995,tuple,[{type,1995,union,[{type,1995,pid,[]},{type,1995,port,[]}]},{type,1995,list,[{user_type,1995,system_profile_option,[]}]}]}]}]]}]]}]}}]}},{{function,system_time,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1545}],[<<115,121,115,116,101,109,95,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46>>]},{p,[],[<<67,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,116,105,109,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,54,56,57>>,signature => [{attribute,1545,spec,{{erlang,system_time,0},[{type,1545,'fun',[{type,1545,product,[]},{type,1545,integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,system_time,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1550}],[<<115,121,115,116,101,109,95,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,99,111,110,118,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32>>,{code,[],[<<85,110,105,116>>]},<<32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{p,[],[<<67,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,85,110,105,116,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]}]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,41>>]}]},{code,[],[<<44,32,110,97,116,105,118,101,44,32,85,110,105,116,41>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,116,105,109,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,55,49,49>>,signature => [{attribute,1550,spec,{{erlang,system_time,1},[{type,1550,bounded_fun,[{type,1550,'fun',[{type,1550,product,[{var,1550,'Unit'}]},{type,1550,integer,[]}]},[{type,1551,constraint,[{atom,1551,is_subtype},[{var,1551,'Unit'},{user_type,1551,time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,term_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2667}],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,32,116,104,97,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,101,110,99,111,100,105,110,103,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]}]},{p,[],[<<84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,118,97,114,105,111,117,115,32,112,117,114,112,111,115,101,115,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,119,114,105,116,105,110,103,32,97,32,116,101,114,109,32,116,111,32,97,32,102,105,108,101,32,105,110,32,97,110,32,101,102,102,105,99,105,101,110,116,32,119,97,121,44,32,111,114,32,115,101,110,100,105,110,103,32,97,110,32,69,114,108,97,110,103,32,116,101,114,109,32,116,111,32,115,111,109,101,32,116,121,112,101,32,111,102,32,99,111,109,109,117,110,105,99,97,116,105,111,110,115,32,99,104,97,110,110,101,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,100,105,115,116,114,105,98,117,116,101,100,32,69,114,108,97,110,103,46>>]},{pre,[],[{code,[],[<<62,32,66,105,110,32,61,32,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,104,101,108,108,111,41,46,10,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,62,62,10,62,32,104,101,108,108,111,32,61,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,66,105,110,41,46,10,104,101,108,108,111>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,110,111,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,119,105,108,108,32,114,101,116,117,114,110,32,116,104,101,32,115,97,109,101,32,101,110,99,111,100,101,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,97,109,101,32,116,101,114,109,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,55,51,51>>,signature => [{attribute,2667,spec,{{term_to_binary,1},[{type,2667,bounded_fun,[{type,2667,'fun',[{type,2667,product,[{var,2667,'Term'}]},{user_type,2667,ext_binary,[]}]},[{type,2668,constraint,[{atom,2668,is_subtype},[{var,2668,'Term'},{type,2668,term,[]}]]}]]}]}}]}},{{function,term_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2672}],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,32,116,104,97,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,101,110,99,111,100,105,110,103,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,105,115,32,112,114,111,118,105,100,101,100,44,32,116,104,101,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,32,105,115,32,99,111,109,112,114,101,115,115,101,100,46,32,84,104,101,32,99,111,109,112,114,101,115,115,101,100,32,102,111,114,109,97,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,99,111,103,110,105,122,101,100,32,98,121,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]},<<32,97,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,55,66,46>>]},{p,[],[<<65,32,99,111,109,112,114,101,115,115,105,111,110,32,108,101,118,101,108,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,103,105,118,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,99,111,109,112,114,101,115,115,101,100,44,32,76,101,118,101,108,125>>]},<<46,32>>,{code,[],[<<76,101,118,101,108>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,119,105,116,104,32,114,97,110,103,101,32,48,46,46,57,44,32,119,104,101,114,101,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<48>>]},<<32,45,32,78,111,32,99,111,109,112,114,101,115,115,105,111,110,32,105,115,32,100,111,110,101,32,40,105,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,103,105,118,105,110,103,32,110,111,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,111,112,116,105,111,110,41,46>>]}]},{li,[],[{p,[],[{code,[],[<<49>>]},<<32,45,32,84,97,107,101,115,32,108,101,97,115,116,32,116,105,109,101,32,98,117,116,32,109,97,121,32,110,111,116,32,99,111,109,112,114,101,115,115,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32,104,105,103,104,101,114,32,108,101,118,101,108,115,46>>]}]},{li,[],[{p,[],[{code,[],[<<54>>]},<<32,45,32,68,101,102,97,117,108,116,32,108,101,118,101,108,32,119,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,105,115,32,112,114,111,118,105,100,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<57>>]},<<32,45,32,84,97,107,101,115,32,109,111,115,116,32,116,105,109,101,32,97,110,100,32,116,114,105,101,115,32,116,111,32,112,114,111,100,117,99,101,32,97,32,115,109,97,108,108,101,114,32,114,101,115,117,108,116,46,32,78,111,116,105,99,101,32,34,116,114,105,101,115,34,32,105,110,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,115,101,110,116,101,110,99,101,59,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,105,110,112,117,116,32,116,101,114,109,44,32,108,101,118,101,108,32,57,32,99,111,109,112,114,101,115,115,105,111,110,32,101,105,116,104,101,114,32,100,111,101,115,32,111,114,32,100,111,101,115,32,110,111,116,32,112,114,111,100,117,99,101,32,97,32,115,109,97,108,108,101,114,32,114,101,115,117,108,116,32,116,104,97,110,32,108,101,118,101,108,32,49,32,99,111,109,112,114,101,115,115,105,111,110,46>>]}]}]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<123,109,105,110,111,114,95,118,101,114,115,105,111,110,44,32,86,101,114,115,105,111,110,125>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,99,111,110,116,114,111,108,32,115,111,109,101,32,101,110,99,111,100,105,110,103,32,100,101,116,97,105,108,115,46,32,84,104,105,115,32,111,112,116,105,111,110,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,45,52,46,32,84,104,101,32,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<86,101,114,115,105,111,110>>]},<<32,97,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<48>>]}]},{dd,[],[{p,[],[<<70,108,111,97,116,115,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,97,32,116,101,120,116,117,97,108,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,117,115,101,102,117,108,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,114,101,108,101,97,115,101,115,32,98,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,45,52,32,99,97,110,32,100,101,99,111,100,101,32,114,101,115,117,108,116,105,110,103,32,98,105,110,97,114,121,46>>]},{p,[],[<<84,104,105,115,32,118,101,114,115,105,111,110,32,101,110,99,111,100,101,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,108,97,116,105,110,49,32,115,116,114,105,110,103,32,117,115,105,110,103,32,108,97,116,105,110,49,32,101,110,99,111,100,105,110,103,32,119,104,105,108,101,32,111,110,108,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,108,97,116,105,110,49,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,117,116,102,56,46>>]}]},{dt,[],[{code,[],[<<49>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,105,115,32,97,115,32,111,102,32,69,114,108,97,110,103,47,79,84,80,32,49,55,46,48,32,116,104,101,32,100,101,102,97,117,108,116,46,32,73,116,32,102,111,114,99,101,115,32,97,110,121,32,102,108,111,97,116,115,32,105,110,32,116,104,101,32,116,101,114,109,32,116,111,32,98,101,32,101,110,99,111,100,101,100,32,105,110,32,97,32,109,111,114,101,32,115,112,97,99,101,45,101,102,102,105,99,105,101,110,116,32,97,110,100,32,101,120,97,99,116,32,119,97,121,32,40,110,97,109,101,108,121,32,105,110,32,116,104,101,32,54,52,45,98,105,116,32,73,69,69,69,32,102,111,114,109,97,116,44,32,114,97,116,104,101,114,32,116,104,97,110,32,99,111,110,118,101,114,116,101,100,32,116,111,32,97,32,116,101,120,116,117,97,108,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,41,46,32,65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,45,52,44,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]},<<32,99,97,110,32,100,101,99,111,100,101,32,116,104,105,115,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46>>]},{p,[],[<<84,104,105,115,32,118,101,114,115,105,111,110,32,101,110,99,111,100,101,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,108,97,116,105,110,49,32,115,116,114,105,110,103,32,117,115,105,110,103,32,108,97,116,105,110,49,32,101,110,99,111,100,105,110,103,32,119,104,105,108,101,32,111,110,108,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,108,97,116,105,110,49,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,117,116,102,56,46>>]}]},{dt,[],[{code,[],[<<50>>]}]},{dd,[],[{p,[],[<<68,114,111,112,115,32,117,115,97,103,101,32,111,102,32,116,104,101,32,108,97,116,105,110,49,32,97,116,111,109,32,101,110,99,111,100,105,110,103,32,97,110,100,32,117,110,99,111,110,100,105,116,105,111,110,97,108,108,121,32,117,115,101,32,117,116,102,56,32,101,110,99,111,100,105,110,103,32,102,111,114,32,97,108,108,32,97,116,111,109,115,46,32,84,104,105,115,32,119,105,108,108,32,98,101,32,99,104,97,110,103,101,100,32,116,111,32,116,104,101,32,100,101,102,97,117,108,116,32,105,110,32,97,32,102,117,116,117,114,101,32,109,97,106,111,114,32,114,101,108,101,97,115,101,32,111,102,32,69,114,108,97,110,103,47,79,84,80,46,32,69,114,108,97,110,103,47,79,84,80,32,115,121,115,116,101,109,115,32,97,115,32,111,102,32,82,49,54,66,32,99,97,110,32,100,101,99,111,100,101,32,116,104,105,115,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46>>]}]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,55,54,49>>,signature => [{attribute,2672,spec,{{term_to_binary,2},[{type,2672,bounded_fun,[{type,2672,'fun',[{type,2672,product,[{var,2672,'Term'},{var,2672,'Options'}]},{user_type,2672,ext_binary,[]}]},[{type,2673,constraint,[{atom,2673,is_subtype},[{var,2673,'Term'},{type,2673,term,[]}]]},{type,2674,constraint,[{atom,2674,is_subtype},[{var,2674,'Options'},{type,2674,list,[{type,2674,union,[{atom,2674,compressed},{type,2675,tuple,[{atom,2675,compressed},{ann_type,2675,[{var,2675,'Level'},{type,2675,range,[{integer,2675,0},{integer,2675,9}]}]}]},{type,2676,tuple,[{atom,2676,minor_version},{ann_type,2676,[{var,2676,'Version'},{type,2676,range,[{integer,2676,0},{integer,2676,2}]}]}]}]}]}]]}]]}]}}]}},{{function,term_to_iovec,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2680}],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,116,95,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<101,120,116,95,105,111,118,101,99,40,41>>]}]},<<46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,112,114,111,100,117,99,101,32,116,104,101,32,115,97,109,101,32,101,110,99,111,100,105,110,103,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<44,32,98,117,116,32,119,105,116,104,32,97,110,111,116,104,101,114,32,114,101,116,117,114,110,32,116,121,112,101,46,32,84,104,101,32,99,97,108,108,32>>,{code,[],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,116,101,114,109,95,116,111,95,105,111,118,101,99,40,84,101,114,109,41,41>>]},<<32,119,105,108,108,32,112,114,111,100,117,99,101,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,41>>]},<<46>>]},{p,[],[{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,105,115,32,97,32,112,117,114,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,41>>]},<<32,112,114,111,118,105,100,101,46,32>>,{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,99,97,110,32,102,111,114,32,101,120,97,109,112,108,101,32,114,101,102,101,114,32,100,105,114,101,99,116,108,121,32,116,111,32,111,102,102,32,104,101,97,112,32,98,105,110,97,114,105,101,115,32,105,110,115,116,101,97,100,32,111,102,32,99,111,112,121,105,110,103,32,116,104,101,32,98,105,110,97,114,121,32,100,97,116,97,32,105,110,116,111,32,116,104,101,32,114,101,115,117,108,116,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,56,50,54>>,signature => [{attribute,2680,spec,{{term_to_iovec,1},[{type,2680,bounded_fun,[{type,2680,'fun',[{type,2680,product,[{var,2680,'Term'}]},{user_type,2680,ext_iovec,[]}]},[{type,2681,constraint,[{atom,2681,is_subtype},[{var,2681,'Term'},{type,2681,term,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,term_to_iovec,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2685}],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,116,95,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<101,120,116,95,105,111,118,101,99,40,41>>]}]},<<46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,112,114,111,100,117,99,101,32,116,104,101,32,115,97,109,101,32,101,110,99,111,100,105,110,103,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<44,32,98,117,116,32,119,105,116,104,32,97,110,111,116,104,101,114,32,114,101,116,117,114,110,32,116,121,112,101,46,32,84,104,101,32,99,97,108,108,32>>,{code,[],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,116,101,114,109,95,116,111,95,105,111,118,101,99,40,84,101,114,109,44,32,79,112,116,115,41,41>>]},<<32,119,105,108,108,32,112,114,111,100,117,99,101,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,44,32,79,112,116,115,41>>]},<<46>>]},{p,[],[<<67,117,114,114,101,110,116,108,121,32,114,101,99,111,103,110,105,115,101,100,32,111,112,116,105,111,110,115,32,97,114,101,32,97,108,108,32,111,112,116,105,111,110,115,32,114,101,99,111,103,110,105,115,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<46>>]},{p,[],[{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,105,115,32,97,32,112,117,114,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,41>>]},<<32,112,114,111,118,105,100,101,46,32>>,{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,99,97,110,32,102,111,114,32,101,120,97,109,112,108,101,32,114,101,102,101,114,32,100,105,114,101,99,116,108,121,32,116,111,32,111,102,102,32,104,101,97,112,32,98,105,110,97,114,105,101,115,32,105,110,115,116,101,97,100,32,111,102,32,99,111,112,121,105,110,103,32,116,104,101,32,98,105,110,97,114,121,32,100,97,116,97,32,105,110,116,111,32,116,104,101,32,114,101,115,117,108,116,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,56,53,49>>,signature => [{attribute,2685,spec,{{term_to_iovec,2},[{type,2685,bounded_fun,[{type,2685,'fun',[{type,2685,product,[{var,2685,'Term'},{var,2685,'Options'}]},{user_type,2685,ext_iovec,[]}]},[{type,2686,constraint,[{atom,2686,is_subtype},[{var,2686,'Term'},{type,2686,term,[]}]]},{type,2687,constraint,[{atom,2687,is_subtype},[{var,2687,'Options'},{type,2687,list,[{type,2687,union,[{atom,2687,compressed},{type,2688,tuple,[{atom,2688,compressed},{ann_type,2688,[{var,2688,'Level'},{type,2688,range,[{integer,2688,0},{integer,2688,9}]}]}]},{type,2689,tuple,[{atom,2689,minor_version},{ann_type,2689,[{var,2689,'Version'},{type,2689,range,[{integer,2689,0},{integer,2689,2}]}]}]}]}]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,throw,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2001}],[<<116,104,114,111,119,47,49>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<116,104,114,111,119>>]},<<46,32,73,110,116,101,110,100,101,100,32,116,111,32,98,101,32,117,115,101,100,32,116,111,32,100,111,32,110,111,110,45,108,111,99,97,108,32,114,101,116,117,114,110,115,32,102,114,111,109,32,102,117,110,99,116,105,111,110,115,46>>]},{p,[],[<<73,102,32,101,118,97,108,117,97,116,101,100,32,119,105,116,104,105,110,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,99,97,116,99,104>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,97,116,99,104,32,101,120,112,114,101,115,115,105,111,110>>]},<<44,32,116,104,101,32,99,97,116,99,104,32,101,120,112,114,101,115,115,105,111,110,32,114,101,116,117,114,110,115,32,118,97,108,117,101,32>>,{code,[],[<<65,110,121>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,99,97,116,99,104,32,116,104,114,111,119,40,123,104,101,108,108,111,44,32,116,104,101,114,101,125,41,46,10,32,32,32,32,32,32,32,32,123,104,101,108,108,111,44,116,104,101,114,101,125>>]}]},{p,[],[<<73,102,32,101,118,97,108,117,97,116,101,100,32,119,105,116,104,105,110,32,97,32>>,{code,[],[<<116,114,121>>]},<<45,98,108,111,99,107,32,111,102,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,116,114,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,114,121,32,101,120,112,114,101,115,115,105,111,110>>]},<<44,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<65,110,121>>]},<<32,99,97,110,32,98,101,32,99,97,117,103,104,116,32,119,105,116,104,105,110,32,116,104,101,32,99,97,116,99,104,32,98,108,111,99,107,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<116,114,121,10,32,32,32,32,116,104,114,111,119,40,123,109,121,95,101,120,99,101,112,116,105,111,110,44,32,34,83,111,109,101,116,104,105,110,103,32,104,97,112,112,101,110,101,100,34,125,41,10,99,97,116,99,104,10,32,32,32,32,116,104,114,111,119,58,123,109,121,95,101,120,99,101,112,116,105,111,110,44,32,68,101,115,99,125,32,45,62,10,32,32,32,32,32,32,32,32,105,111,58,102,111,114,109,97,116,40,115,116,97,110,100,97,114,100,95,101,114,114,111,114,44,32,34,69,114,114,111,114,58,32,126,115,126,110,34,44,32,91,68,101,115,99,93,41,10,101,110,100>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<110,111,99,97,116,99,104>>]},<<32,105,102,32,110,111,116,32,99,97,117,103,104,116,32,98,121,32,97,110,32,101,120,99,101,112,116,105,111,110,32,104,97,110,100,108,101,114,46>>]},{p,[],[<<83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,56,55,57>>,signature => [{attribute,2001,spec,{{throw,1},[{type,2001,bounded_fun,[{type,2001,'fun',[{type,2001,product,[{var,2001,'Any'}]},{type,2001,no_return,[]}]},[{type,2002,constraint,[{atom,2002,is_subtype},[{var,2002,'Any'},{type,2002,term,[]}]]}]]}]}}]}},{{function,time,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2007}],[<<116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,32,97,115,32>>,{code,[],[<<123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125>>]},<<46>>]},{p,[],[<<84,104,101,32,116,105,109,101,32,122,111,110,101,32,97,110,100,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,99,111,114,114,101,99,116,105,111,110,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,105,109,101,40,41,46,10,123,57,44,52,50,44,52,52,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,57,48,55>>,signature => [{attribute,2007,spec,{{time,0},[{type,2007,bounded_fun,[{type,2007,'fun',[{type,2007,product,[]},{var,2007,'Time'}]},[{type,2008,constraint,[{atom,2008,is_subtype},[{var,2008,'Time'},{remote_type,2008,[{atom,2008,calendar},{atom,2008,time},[]]}]]}]]}]}}]}},{{function,time_offset,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1605}],[<<116,105,109,101,95,111,102,102,115,101,116,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,32,111,102,102,115,101,116,32,98,101,116,119,101,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46,32,67,117,114,114,101,110,116,32,116,105,109,101,32,111,102,102,115,101,116,32,97,100,100,101,100,32,116,111,32,97,110,32,69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,103,105,118,101,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101,46>>]},{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,99,104,97,110,103,101,32,100,117,114,105,110,103,32,111,112,101,114,97,116,105,111,110,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,117,115,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,99,104,97,110,103,101,32,105,110,32,116,105,109,101,32,111,102,102,115,101,116,32,99,97,110,32,98,101,32,111,98,115,101,114,118,101,100,32,97,116,32,115,108,105,103,104,116,108,121,32,100,105,102,102,101,114,101,110,116,32,112,111,105,110,116,115,32,105,110,32,116,105,109,101,32,98,121,32,100,105,102,102,101,114,101,110,116,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,32,119,104,101,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,101,116,101,99,116,115,32,116,104,97,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,104,97,115,32,99,104,97,110,103,101,100,46,32,84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,119,105,108,108,44,32,104,111,119,101,118,101,114,44,32,110,111,116,32,100,101,116,101,99,116,32,116,104,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,119,104,101,110,32,105,116,32,111,99,99,117,114,115,46,32,65,32,116,97,115,107,32,99,104,101,99,107,105,110,103,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,101,120,101,99,117,116,101,32,97,116,32,108,101,97,115,116,32,111,110,99,101,32,97,32,109,105,110,117,116,101,59,32,115,111,44,32,117,110,100,101,114,32,110,111,114,109,97,108,32,111,112,101,114,97,116,105,111,110,32,116,104,105,115,32,105,115,32,116,111,32,98,101,32,100,101,116,101,99,116,101,100,32,119,105,116,104,105,110,32,97,32,109,105,110,117,116,101,44,32,98,117,116,32,100,117,114,105,110,103,32,104,101,97,118,121,32,108,111,97,100,32,105,116,32,99,97,110,32,116,97,107,101,32,108,111,110,103,101,114,32,116,105,109,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,57,50,50>>,signature => [{attribute,1605,spec,{{erlang,time_offset,0},[{type,1605,'fun',[{type,1605,product,[]},{type,1605,integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,time_offset,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1610}],[<<116,105,109,101,95,111,102,102,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,32,111,102,102,115,101,116,32,98,101,116,119,101,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,99,111,110,118,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32>>,{code,[],[<<85,110,105,116>>]},<<32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{p,[],[<<83,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]}]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]}]},{code,[],[<<44,32,110,97,116,105,118,101,44,32,85,110,105,116,41>>]},<<32,104,111,119,101,118,101,114,32,111,112,116,105,109,105,122,101,100,32,102,111,114,32,99,111,109,109,111,110,108,121,32,117,115,101,100,32>>,{code,[],[<<85,110,105,116>>]},<<115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,57,53,52>>,signature => [{attribute,1610,spec,{{erlang,time_offset,1},[{type,1610,bounded_fun,[{type,1610,'fun',[{type,1610,product,[{var,1610,'Unit'}]},{type,1610,integer,[]}]},[{type,1611,constraint,[{atom,1611,is_subtype},[{var,1611,'Unit'},{user_type,1611,time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,timestamp,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1616}],[<<116,105,109,101,115,116,97,109,112,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<116,105,109,101,115,116,97,109,112>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,111,110,32,116,104,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,77,101,103,97,83,101,99,115,44,32,83,101,99,115,44,32,77,105,99,114,111,83,101,99,115,125>>]},<<46,32,84,104,105,115,32,102,111,114,109,97,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,116,105,109,101,115,116,97,109,112,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,116,105,109,101,115,116,97,109,112,47,48>>]}]},<<32,97,110,100,32,116,104,101,32,100,101,112,114,101,99,97,116,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,110,111,119,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,110,111,119,47,48>>]}]},<<32,117,115,101,46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,101,32,101,120,105,115,116,101,110,99,101,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,115,116,97,109,112,40,41>>]},<<32,105,115,32,112,117,114,101,108,121,32,116,111,32,115,105,109,112,108,105,102,121,32,117,115,101,32,102,111,114,32,101,120,105,115,116,105,110,103,32,99,111,100,101,32,116,104,97,116,32,97,115,115,117,109,101,115,32,116,104,105,115,32,116,105,109,101,32,115,116,97,109,112,32,102,111,114,109,97,116,46,32,67,117,114,114,101,110,116,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101,32,99,97,110,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,108,121,32,98,101,32,114,101,116,114,105,101,118,101,100,32,105,110,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,111,102,32,121,111,117,114,32,99,104,111,105,99,101,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,116,105,109,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,47,49>>]}]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,115,116,97,109,112,40,41>>]},<<32,66,73,70,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<116,105,109,101,115,116,97,109,112,40,41,32,45,62,10,32,32,32,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,109,105,99,114,111,115,101,99,111,110,100,41,44,10,32,32,32,32,77,101,103,97,83,101,99,115,32,61,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,100,105,118,32,49,48,48,48,95,48,48,48,95,48,48,48,95,48,48,48,44,10,32,32,32,32,83,101,99,115,32,61,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,100,105,118,32,49,48,48,48,95,48,48,48,32,45,32,77,101,103,97,83,101,99,115,42,49,48,48,48,95,48,48,48,44,10,32,32,32,32,77,105,99,114,111,83,101,99,115,32,61,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,114,101,109,32,49,48,48,48,95,48,48,48,44,10,32,32,32,32,123,77,101,103,97,83,101,99,115,44,32,83,101,99,115,44,32,77,105,99,114,111,83,101,99,115,125,46>>]}]},{p,[],[<<73,116,44,32,104,111,119,101,118,101,114,44,32,117,115,101,115,32,97,32,110,97,116,105,118,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,98,117,105,108,100,32,103,97,114,98,97,103,101,32,111,110,32,116,104,101,32,104,101,97,112,32,97,110,100,32,119,105,116,104,32,115,108,105,103,104,116,108,121,32,98,101,116,116,101,114,32,112,101,114,102,111,114,109,97,110,99,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,116,105,109,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,57,55,51>>,signature => [{attribute,1616,spec,{{erlang,timestamp,0},[{type,1616,bounded_fun,[{type,1616,'fun',[{type,1616,product,[]},{var,1616,'Timestamp'}]},[{type,1617,constraint,[{atom,1617,is_subtype},[{var,1617,'Timestamp'},{user_type,1617,timestamp,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,tl,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2694}],[<<116,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,97,105,108,32,111,102,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,108,105,115,116,32,109,105,110,117,115,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,44,32,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,93,41,46,10,91,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,93>>]}]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,93,41,46,10,91,93>>]}]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,44,32,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,32,124,32,105,109,112,114,111,112,101,114,95,101,110,100,93,41,46,10,91,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,32,124,32,105,109,112,114,111,112,101,114,95,101,110,100,93>>]}]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,32,124,32,105,109,112,114,111,112,101,114,95,101,110,100,93,41,46,10,105,109,112,114,111,112,101,114,95,101,110,100>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,105,115,116>>]},<<32,105,115,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,48,49,50>>,signature => [{attribute,2694,spec,{{tl,1},[{type,2694,bounded_fun,[{type,2694,'fun',[{type,2694,product,[{var,2694,'List'}]},{type,2694,term,[]}]},[{type,2695,constraint,[{atom,2695,is_subtype},[{var,2695,'List'},{type,2695,nonempty_maybe_improper_list,[]}]]}]]}]}}]}},{{function,trace,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2013}],[<<116,114,97,99,101,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<116,114,97,99,101,95,102,108,97,103>>}],[]}]},{p,[],[<<84,117,114,110,115,32,111,110,32,40,105,102,32>>,{code,[],[<<72,111,119,32,61,61,32,116,114,117,101>>]},<<41,32,111,114,32,111,102,102,32,40,105,102,32>>,{code,[],[<<72,111,119,32,61,61,32,102,97,108,115,101>>]},<<41,32,116,104,101,32,116,114,97,99,101,32,102,108,97,103,115,32,105,110,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,114,111,99,101,115,115,101,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<46>>]},{p,[],[{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32,101,105,116,104,101,114,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,102,111,114,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,44,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,97,116,111,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,97,110,100,32,97,108,108,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,97,108,108,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<112,111,114,116,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,111,114,116,115,32,97,110,100,32,97,108,108,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<101,120,105,115,116,105,110,103>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,46>>]},{dt,[],[{code,[],[<<101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,46>>]},{dt,[],[{code,[],[<<101,120,105,115,116,105,110,103,95,112,111,114,116,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,111,114,116,115,46>>]},{dt,[],[{code,[],[<<110,101,119>>]}]},{dd,[],[<<65,108,108,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<110,101,119,95,112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[<<65,108,108,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<110,101,119,95,112,111,114,116,115>>]}]},{dd,[],[<<65,108,108,32,112,111,114,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]}]},{p,[],[{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,108,97,103,115,32,40,116,104,101,32,34,109,101,115,115,97,103,101,32,116,97,103,115,34,32,114,101,102,101,114,115,32,116,111,32,116,104,101,32,108,105,115,116,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,114,97,99,101,32,109,101,115,115,97,103,101,115>>]}]},<<41,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,97,108,108,32,116,114,97,99,101,32,102,108,97,103,115,32,101,120,99,101,112,116,32>>,{code,[],[<<116,114,97,99,101,114>>]},<<32,97,110,100,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<44,32,119,104,105,99,104,32,97,114,101,32,105,110,32,116,104,101,105,114,32,110,97,116,117,114,101,32,100,105,102,102,101,114,101,110,116,32,116,104,97,110,32,116,104,101,32,111,116,104,101,114,115,46>>]}]},{dt,[],[{code,[],[<<115,101,110,100>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,101,110,100,105,110,103,32,111,102,32,109,101,115,115,97,103,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,110,100>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<39,114,101,99,101,105,118,101,39>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,114,101,99,101,105,118,105,110,103,32,111,102,32,109,101,115,115,97,103,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,99,101,105,118,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<39,114,101,99,101,105,118,101,39>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,99,101,114,116,97,105,110,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,83,112,101,99,105,102,121,32,119,104,105,99,104,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,116,111,32,116,114,97,99,101,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,97,108,108>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,102,114,111,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,102,114,111,109>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<115,105,108,101,110,116>>]}]},{dd,[],[{p,[],[<<85,115,101,100,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,46,32,84,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<114,101,116,117,114,110,95,102,114,111,109>>]},<<44,32,97,110,100,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,105,110,104,105,98,105,116,101,100,32,105,102,32,116,104,105,115,32,102,108,97,103,32,105,115,32,115,101,116,44,32,98,117,116,32,116,104,101,121,32,97,114,101,32,101,120,101,99,117,116,101,100,32,97,115,32,110,111,114,109,97,108,32,105,102,32,116,104,101,114,101,32,97,114,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46>>]},{p,[],[<<83,105,108,101,110,116,32,109,111,100,101,32,105,115,32,105,110,104,105,98,105,116,101,100,32,98,121,32,101,120,101,99,117,116,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,40,95,44,32,102,97,108,115,101,44,32,91,115,105,108,101,110,116,124,95,93,41>>]},<<44,32,111,114,32,98,121,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,101,120,101,99,117,116,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,115,105,108,101,110,116,44,32,102,97,108,115,101,125>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<115,105,108,101,110,116>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,97,99,105,108,105,116,97,116,101,115,32,115,101,116,116,105,110,103,32,117,112,32,97,32,116,114,97,99,101,32,111,110,32,109,97,110,121,32,111,114,32,101,118,101,110,32,97,108,108,32,112,114,111,99,101,115,115,101,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,84,104,101,32,116,114,97,99,101,32,99,97,110,32,116,104,101,110,32,98,101,32,97,99,116,105,118,97,116,101,100,32,97,110,100,32,100,101,97,99,116,105,118,97,116,101,100,32,117,115,105,110,103,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,115,105,108,101,110,116,44,66,111,111,108,125>>]},<<44,32,103,105,118,105,110,103,32,97,32,104,105,103,104,32,100,101,103,114,101,101,32,111,102,32,99,111,110,116,114,111,108,32,111,102,32,119,104,105,99,104,32,102,117,110,99,116,105,111,110,115,32,119,105,116,104,32,119,104,105,99,104,32,97,114,103,117,109,101,110,116,115,32,116,104,97,116,32,116,114,105,103,103,101,114,32,116,104,101,32,116,114,97,99,101,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,97,108,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,102,114,111,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,102,114,111,109>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,116,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,116,111>>]}]},<<46,32,79,114,32,114,97,116,104,101,114,44,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,46>>]}]},{dt,[],[{code,[],[<<114,101,116,117,114,110,95,116,111>>]}]},{dd,[],[{p,[],[<<85,115,101,100,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,46,32,84,114,97,99,101,115,32,116,104,101,32,114,101,116,117,114,110,32,102,114,111,109,32,97,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,32,98,97,99,107,32,116,111,32,105,116,115,32,99,97,108,108,101,114,46,32,79,110,108,121,32,119,111,114,107,115,32,102,111,114,32,102,117,110,99,116,105,111,110,115,32,116,114,97,99,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]},{p,[],[<<84,104,101,32,115,101,109,97,110,116,105,99,115,32,105,115,32,116,104,97,116,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,119,104,101,110,32,97,32,99,97,108,108,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,44,32,116,104,97,116,32,105,115,44,32,119,104,101,110,32,97,32,99,104,97,105,110,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,115,32,101,110,100,115,46,32,79,110,108,121,32,111,110,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,112,101,114,32,99,104,97,105,110,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,115,44,32,115,111,32,116,104,101,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,110,101,115,115,32,102,111,114,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,114,101,32,107,101,112,116,32,119,104,105,108,101,32,116,114,97,99,105,110,103,32,119,105,116,104,32,116,104,105,115,32,102,108,97,103,46,32,85,115,105,110,103,32>>,{code,[],[<<99,97,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,116,114,97,99,101,32,116,111,103,101,116,104,101,114,32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,107,110,111,119,32,101,120,97,99,116,108,121,32,105,110,32,119,104,105,99,104,32,102,117,110,99,116,105,111,110,32,97,32,112,114,111,99,101,115,115,32,101,120,101,99,117,116,101,115,32,97,116,32,97,110,121,32,116,105,109,101,46>>]},{p,[],[<<84,111,32,103,101,116,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,99,111,110,116,97,105,110,105,110,103,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,102,114,111,109,32,102,117,110,99,116,105,111,110,115,44,32,117,115,101,32,116,104,101,32>>,{code,[],[<<123,114,101,116,117,114,110,95,116,114,97,99,101,125>>]},<<32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,99,116,105,111,110,32,105,110,115,116,101,97,100,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,116,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,116,111>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,112,114,111,99,101,115,115,45,114,101,108,97,116,101,100,32,101,118,101,110,116,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,112,97,119,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,112,97,119,110,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,101,120,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,120,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,108,105,110,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,105,110,107>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,108,105,110,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,108,105,110,107>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,108,105,110,107,101,100>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<112,111,114,116,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,112,111,114,116,45,114,101,108,97,116,101,100,32,101,118,101,110,116,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,112,101,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,112,101,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,108,111,115,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,108,111,115,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,108,105,110,107,101,100>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,105,110,103>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<101,120,105,116,105,110,103>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,101,120,105,116,105,110,103,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,101,120,105,116,105,110,103,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,95,101,120,105,116,105,110,103>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,105,110,103,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116,95,101,120,105,116,105,110,103>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,101,100,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116,95,101,120,105,116,101,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,105,110,103,95,112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,112,114,111,99,101,115,115,101,115,32,106,117,115,116,32,108,105,107,101,32>>,{code,[],[<<114,117,110,110,105,110,103>>]},<<46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,111,112,116,105,111,110,32,97,108,115,111,32,105,110,99,108,117,100,101,115,32,115,99,104,101,100,117,108,101,32,101,118,101,110,116,115,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,101,99,117,116,101,115,32,119,105,116,104,105,110,32,116,104,101,32,99,111,110,116,101,120,116,32,111,102,32,97,32,112,111,114,116,32,119,105,116,104,111,117,116,32,98,101,105,110,103,32,115,99,104,101,100,117,108,101,100,32,111,117,116,32,105,116,115,101,108,102,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,105,110,103,95,112,111,114,116,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,112,111,114,116,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,111,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,111,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,111,102,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,101,110,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,101,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<73,110,99,108,117,100,101,115,32,97,32,116,105,109,101,32,115,116,97,109,112,32,105,110,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,40,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<65,32,103,108,111,98,97,108,32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,110,111,100,101,32,116,104,97,116,32,109,97,107,101,115,32,97,108,108,32,116,114,97,99,101,32,116,105,109,101,32,115,116,97,109,112,115,32,117,115,105,110,103,32,102,108,97,103,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<32,116,111,32,98,101,32,105,110,32,67,80,85,32,116,105,109,101,44,32,110,111,116,32,119,97,108,108,32,99,108,111,99,107,32,116,105,109,101,46,32,84,104,97,116,32,105,115,44,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,110,111,116,32,98,101,32,117,115,101,100,32,105,102,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<32,111,114,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,101,110,97,98,108,101,100,46,32,79,110,108,121,32,97,108,108,111,119,101,100,32,119,105,116,104,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99,61,61,97,108,108>>]},<<46,32,73,102,32,116,104,101,32,104,111,115,116,32,109,97,99,104,105,110,101,32,79,83,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,104,105,103,104,45,114,101,115,111,108,117,116,105,111,110,32,67,80,85,32,116,105,109,101,32,109,101,97,115,117,114,101,109,101,110,116,115,44,32>>,{code,[],[<<116,114,97,99,101,47,51>>]},<<32,101,120,105,116,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,109,111,115,116,32,79,83,32,100,111,32,110,111,116,32,115,121,110,99,104,114,111,110,105,122,101,32,116,104,105,115,32,118,97,108,117,101,32,97,99,114,111,115,115,32,99,111,114,101,115,44,32,115,111,32,98,101,32,112,114,101,112,97,114,101,100,32,116,104,97,116,32,116,105,109,101,32,99,97,110,32,115,101,101,109,32,116,111,32,103,111,32,98,97,99,107,119,97,114,100,115,32,119,104,101,110,32,117,115,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<73,110,99,108,117,100,101,115,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,116,105,109,101,32,115,116,97,109,112,32,105,110,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41>>]}]},<<46,32,84,104,105,115,32,102,108,97,103,32,111,118,101,114,114,105,100,101,115,32,102,108,97,103,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<73,110,99,108,117,100,101,115,32,97,110,32,116,105,109,101,32,115,116,97,109,112,32,99,111,110,115,105,115,116,105,110,103,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,105,110,116,101,103,101,114,32,105,110,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{code,[],[<<123>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41>>]}]},{code,[],[<<44>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]}]},{code,[],[<<125>>]},<<46,32,84,104,105,115,32,102,108,97,103,32,111,118,101,114,114,105,100,101,115,32,102,108,97,103,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<46>>]}]},{dt,[],[{code,[],[<<97,114,105,116,121>>]}]},{dd,[],[{p,[],[<<85,115,101,100,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,46,32>>,{code,[],[<<123,77,44,32,70,44,32,65,114,105,116,121,125>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<123,77,44,32,70,44,32,65,114,103,115,125>>]},<<32,105,110,32,99,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,97,110,121,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,105,110,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,116,104,101,32,102,105,114,115,116,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,101,120,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,97,110,121,32,112,114,111,99,101,115,115,32,108,105,110,107,101,100,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,105,110,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,116,104,101,32,102,105,114,115,116,32,112,114,111,99,101,115,115,32,108,105,110,107,101,100,32,116,111,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,101,120,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,99,101,114,44,32,84,114,97,99,101,114,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,119,104,101,114,101,32,116,111,32,115,101,110,100,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32>>,{code,[],[<<84,114,97,99,101,114>>]},<<32,109,117,115,116,32,98,101,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,111,114,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,108,111,99,97,108,32,112,111,114,116,46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,99,101,114,44,32,84,114,97,99,101,114,77,111,100,117,108,101,44,32,84,114,97,99,101,114,83,116,97,116,101,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,97,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,105,115,32,116,111,32,98,101,32,99,97,108,108,101,100,32,105,110,115,116,101,97,100,32,111,102,32,115,101,110,100,105,110,103,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,46,32,84,104,101,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,99,97,110,32,116,104,101,110,32,105,103,110,111,114,101,32,111,114,32,99,104,97,110,103,101,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,32,111,110,32,104,111,119,32,116,111,32,119,114,105,116,101,32,97,32,116,114,97,99,101,114,32,109,111,100,117,108,101,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,108,95,116,114,97,99,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,116,114,97,99,101,114,40,51,41>>]}]},<<46>>]}]}]},{p,[],[<<73,102,32,110,111,32>>,{code,[],[<<116,114,97,99,101,114>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,114,101,99,101,105,118,101,115,32,97,108,108,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46>>]},{p,[],[<<84,104,101,32,101,102,102,101,99,116,32,111,102,32,99,111,109,98,105,110,105,110,103,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]},<<32,119,105,116,104,32>>,{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]},<<32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]},<<32,97,108,111,110,101,46,32,76,105,107,101,119,105,115,101,32,102,111,114,32>>,{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]},<<32,97,110,100,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]},<<46>>]},{p,[],[<<84,104,101,32,116,114,97,99,105,110,103,32,112,114,111,99,101,115,115,32,114,101,99,101,105,118,101,115,32,116,104,101,32>>,{em,[],[<<116,114,97,99,101,32,109,101,115,115,97,103,101,115>>]},<<32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,115,116,46,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,32,119,104,105,99,104,32,116,104,101,32,116,114,97,99,101,100,32,101,118,101,110,116,32,104,97,115,32,111,99,99,117,114,114,101,100,46,32,84,104,101,32,116,104,105,114,100,32,116,117,112,108,101,32,101,108,101,109,101,110,116,32,105,115,32,116,104,101,32,109,101,115,115,97,103,101,32,116,97,103,46>>]},{p,[],[<<73,102,32,102,108,97,103,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<44,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32,111,114,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,102,105,114,115,116,32,116,117,112,108,101,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<116,114,97,99,101,95,116,115>>]},<<32,105,110,115,116,101,97,100,44,32,97,110,100,32,116,104,101,32,116,105,109,101,32,115,116,97,109,112,32,105,115,32,97,100,100,101,100,32,97,115,32,97,110,32,101,120,116,114,97,32,101,108,101,109,101,110,116,32,108,97,115,116,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,116,117,112,108,101,46,32,73,102,32,109,117,108,116,105,112,108,101,32,116,105,109,101,32,115,116,97,109,112,32,102,108,97,103,115,32,97,114,101,32,112,97,115,115,101,100,44,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<32,104,97,115,32,112,114,101,99,101,100,101,110,99,101,32,111,118,101,114,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32,119,104,105,99,104,32,105,110,32,116,117,114,110,32,104,97,115,32,112,114,101,99,101,100,101,110,99,101,32,111,118,101,114,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<46,32,65,108,108,32,116,105,109,101,32,115,116,97,109,112,32,102,108,97,103,115,32,97,114,101,32,114,101,109,101,109,98,101,114,101,100,44,32,115,111,32,105,102,32,116,119,111,32,97,114,101,32,112,97,115,115,101,100,32,97,110,100,32,116,104,101,32,111,110,101,32,119,105,116,104,32,104,105,103,104,101,115,116,32,112,114,101,99,101,100,101,110,99,101,32,108,97,116,101,114,32,105,115,32,100,105,115,97,98,108,101,100,44,32,116,104,101,32,111,116,104,101,114,32,111,110,101,32,98,101,99,111,109,101,115,32,97,99,116,105,118,101,46>>]},{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,40,97,112,112,108,105,99,97,98,108,101,32,111,110,108,121,32,102,111,114,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<115,101,110,100>>]},<<32,97,110,100,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,105,110,103,41,32,99,111,110,116,97,105,110,115,32,97,32>>,{code,[],[<<123,109,101,115,115,97,103,101,125>>]},<<32,97,99,116,105,111,110,32,102,117,110,99,116,105,111,110,32,119,105,116,104,32,97,32,110,111,110,45,98,111,111,108,101,97,110,32,118,97,108,117,101,44,32,116,104,97,116,32,118,97,108,117,101,32,105,115,32,97,100,100,101,100,32,97,115,32,97,110,32,101,120,116,114,97,32,101,108,101,109,101,110,116,32,116,111,32,116,104,101,32,109,101,115,115,97,103,101,32,116,117,112,108,101,32,101,105,116,104,101,114,32,105,110,32,116,104,101,32,108,97,115,116,32,112,111,115,105,116,105,111,110,32,111,114,32,98,101,102,111,114,101,32,116,104,101,32,116,105,109,101,115,116,97,109,112,32,40,105,102,32,105,116,32,105,115,32,112,114,101,115,101,110,116,41,46>>]},{p,[],[<<84,114,97,99,101,32,109,101,115,115,97,103,101,115,58>>]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115>>}],[]},{dl,[],[{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,115,101,110,100,44,32,77,115,103,44,32,84,111,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,115,101,110,100,115,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<32,116,111,32,112,114,111,99,101,115,115,32>>,{code,[],[<<84,111>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115,44,32,77,115,103,44,32,84,111,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,115,101,110,100,115,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<32,116,111,32,116,104,101,32,110,111,110,45,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,32>>,{code,[],[<<84,111>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,99,101,105,118,101>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,39,114,101,99,101,105,118,101,39,44,32,77,115,103,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,114,101,99,101,105,118,101,115,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<46,32,73,102,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,116,105,109,101,45,111,117,116,44,32,97,32,114,101,99,101,105,118,101,32,115,116,97,116,101,109,101,110,116,32,99,97,110,32,104,97,118,101,32,116,105,109,101,100,32,111,117,116,44,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,99,101,105,118,101,100,32,97,32,109,101,115,115,97,103,101,32,119,105,116,104,32,116,104,101,32,112,97,121,108,111,97,100,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,97,108,108>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,99,97,108,108,44,32,123,77,44,32,70,44,32,65,114,103,115,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,99,97,108,108,115,32,97,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,111,102,32,99,97,108,108,115,32,97,114,101,32,110,101,118,101,114,32,115,117,112,112,108,105,101,100,44,32,111,110,108,121,32,116,104,101,32,99,97,108,108,32,97,110,100,32,105,116,115,32,97,114,103,117,109,101,110,116,115,46>>]},{p,[],[<<84,114,97,99,101,32,102,108,97,103,32>>,{code,[],[<<97,114,105,116,121>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,105,115,32,109,101,115,115,97,103,101,44,32,115,111,32,116,104,97,116,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<65,114,103,115>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,116,111>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,114,101,116,117,114,110,95,116,111,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,114,101,116,117,114,110,115,32>>,{em,[],[<<116,111>>]},<<32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,46,32,84,104,105,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,98,111,116,104,32,116,104,101,32,102,108,97,103,115,32>>,{code,[],[<<99,97,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,97,114,101,32,115,101,116,44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,115,101,116,32,116,111,32,98,101,32,116,114,97,99,101,100,32,111,110,32>>,{em,[],[<<108,111,99,97,108>>]},<<32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,84,104,101,32,109,101,115,115,97,103,101,32,105,115,32,111,110,108,121,32,115,101,110,116,32,119,104,101,110,32,114,101,116,117,114,110,105,110,103,32,102,114,111,109,32,97,32,99,104,97,105,110,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32,119,104,101,114,101,32,97,116,32,108,101,97,115,116,32,111,110,101,32,99,97,108,108,32,103,101,110,101,114,97,116,101,100,32,97,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,40,116,104,97,116,32,105,115,44,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,109,97,116,99,104,101,100,44,32,97,110,100,32>>,{code,[],[<<123,109,101,115,115,97,103,101,44,32,102,97,108,115,101,125>>]},<<32,119,97,115,32,110,111,116,32,97,110,32,97,99,116,105,111,110,41,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,102,114,111,109>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,114,101,116,117,114,110,95,102,114,111,109,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,44,32,82,101,116,117,114,110,86,97,108,117,101,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,114,101,116,117,114,110,115,32>>,{em,[],[<<102,114,111,109>>]},<<32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,46,32,84,104,105,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,102,108,97,103,32>>,{code,[],[<<99,97,108,108>>]},<<32,105,115,32,115,101,116,44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,104,97,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,119,105,116,104,32,97,32>>,{code,[],[<<114,101,116,117,114,110,95,116,114,97,99,101>>]},<<32,111,114,32>>,{code,[],[<<101,120,99,101,112,116,105,111,110,95,116,114,97,99,101>>]},<<32,97,99,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,101,120,99,101,112,116,105,111,110,95,102,114,111,109>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,101,120,99,101,112,116,105,111,110,95,102,114,111,109,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,44,32,123,67,108,97,115,115,44,32,86,97,108,117,101,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,105,116,115,32>>,{em,[],[<<102,114,111,109>>]},<<32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,32,98,101,99,97,117,115,101,32,111,102,32,97,110,32,101,120,99,101,112,116,105,111,110,46,32,84,104,105,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,102,108,97,103,32>>,{code,[],[<<99,97,108,108>>]},<<32,105,115,32,115,101,116,44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,104,97,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,119,105,116,104,32,97,110,32>>,{code,[],[<<101,120,99,101,112,116,105,111,110,95,116,114,97,99,101>>]},<<32,97,99,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,115,112,97,119,110,44,32,80,105,100,50,44,32,123,77,44,32,70,44,32,65,114,103,115,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,115,112,97,119,110,115,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,97,115,32,101,110,116,114,121,32,112,111,105,110,116,46>>]},{p,[],[{code,[],[<<65,114,103,115>>]},<<32,105,115,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,116,104,101,32,97,114,103,117,109,101,110,116,32,108,105,115,116,44,32,98,117,116,32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,32,105,102,32,116,104,101,32,115,112,97,119,110,32,105,115,32,101,114,114,111,110,101,111,117,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,115,112,97,119,110,101,100,44,32,80,105,100,50,44,32,123,77,44,32,70,44,32,65,114,103,115,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,115,112,97,119,110,101,100,32,98,121,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,97,115,32,101,110,116,114,121,32,112,111,105,110,116,46>>]},{p,[],[{code,[],[<<65,114,103,115>>]},<<32,105,115,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,116,104,101,32,97,114,103,117,109,101,110,116,32,108,105,115,116,44,32,98,117,116,32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,32,105,102,32,116,104,101,32,115,112,97,119,110,32,105,115,32,101,114,114,111,110,101,111,117,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,101,120,105,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,101,120,105,116,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,105,116,115,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,103,105,115,116,101,114>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,114,101,103,105,115,116,101,114,44,32,82,101,103,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,114,101,103,105,115,116,101,114,101,100,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,114,101,103,105,115,116,101,114>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,117,110,114,101,103,105,115,116,101,114,44,32,82,101,103,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,117,110,114,101,103,105,115,116,101,114,101,100,46,32,84,104,105,115,32,105,115,32,100,111,110,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,119,104,101,110,32,97,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,101,120,105,116,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,108,105,110,107>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,108,105,110,107,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,108,105,110,107,115,32,116,111,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,108,105,110,107>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,117,110,108,105,110,107,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,114,101,109,111,118,101,115,32,116,104,101,32,108,105,110,107,32,102,114,111,109,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,108,105,110,107,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,103,101,116,116,105,110,103,95,108,105,110,107,101,100,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,108,105,110,107,101,100,32,116,111,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,117,110,108,105,110,107,101,100,32,102,114,111,109,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,101,120,105,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,101,120,105,116,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,105,116,115,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,112,101,110>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,111,112,101,110,44,32,80,105,100,44,32,68,114,105,118,101,114,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,111,112,101,110,115,32,97,32,110,101,119,32,112,111,114,116,32>>,{code,[],[<<80,111,114,116>>]},<<32,119,105,116,104,32,116,104,101,32,114,117,110,110,105,110,103,32>>,{code,[],[<<68,114,105,118,101,114>>]},<<46>>]},{p,[],[{code,[],[<<68,114,105,118,101,114>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,100,114,105,118,101,114,32,97,115,32,97,110,32,97,116,111,109,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,108,111,115,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,99,108,111,115,101,100,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,99,108,111,115,101,115,32,119,105,116,104,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,114,111,99>>}],[]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,101,120,105,116,105,110,103,95,112,114,111,99>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,105,110,32,124,32,105,110,95,101,120,105,116,105,110,103,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,114,117,110,46,32,84,104,101,32,112,114,111,99,101,115,115,32,114,117,110,115,32,105,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,77,44,32,70,44,32,65,114,105,116,121,125>>]},<<46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,114,111,99>>}],[]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,105,110,103,95,112,114,111,99>>}],[]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,101,100,95,112,114,111,99>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,111,117,116,32,124,32,111,117,116,95,101,120,105,116,105,110,103,32,124,32,111,117,116,95,101,120,105,116,101,100,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,111,117,116,46,32,84,104,101,32,112,114,111,99,101,115,115,32,119,97,115,32,114,117,110,110,105,110,103,32,105,110,32,102,117,110,99,116,105,111,110,32,123,77,44,32,70,44,32,65,114,105,116,121,125,46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,111,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,105,110,44,32,67,111,109,109,97,110,100,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,114,117,110,46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,105,115,32,116,104,101,32,102,105,114,115,116,32,116,104,105,110,103,32,116,104,101,32,112,111,114,116,32,119,105,108,108,32,101,120,101,99,117,116,101,44,32,105,116,32,99,97,110,32,104,111,119,101,118,101,114,32,114,117,110,32,115,101,118,101,114,97,108,32,99,111,109,109,97,110,100,115,32,98,101,102,111,114,101,32,98,101,105,110,103,32,115,99,104,101,100,117,108,101,100,32,111,117,116,46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]},{p,[],[<<84,104,101,32,112,111,115,115,105,98,108,101,32,99,111,109,109,97,110,100,115,32,97,114,101,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<99,108,111,115,101>>]},<<44,32>>,{code,[],[<<99,111,109,109,97,110,100>>]},<<44,32>>,{code,[],[<<99,111,110,110,101,99,116>>]},<<44,32>>,{code,[],[<<99,111,110,116,114,111,108>>]},<<44,32>>,{code,[],[<<102,108,117,115,104>>]},<<44,32>>,{code,[],[<<105,110,102,111>>]},<<44,32>>,{code,[],[<<108,105,110,107>>]},<<44,32>>,{code,[],[<<111,112,101,110>>]},<<44,32,97,110,100,32>>,{code,[],[<<117,110,108,105,110,107>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,111,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,111,117,116,44,32,67,111,109,109,97,110,100,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,111,117,116,46,32,84,104,101,32,108,97,115,116,32,99,111,109,109,97,110,100,32,114,117,110,32,119,97,115,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32,99,111,109,109,97,110,100,115,32,97,115,32>>,{code,[],[<<105,110>>]}]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,105,110,111,114,95,115,116,97,114,116,44,32,73,110,102,111,125>>]}]},{dd,[],[{a,[{id,<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>}],[]},{p,[],[<<83,101,110,116,32,119,104,101,110,32,97,32,121,111,117,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,97,98,111,117,116,32,116,111,32,98,101,32,115,116,97,114,116,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,101,108,101,109,101,110,116,32,116,117,112,108,101,115,44,32,119,104,101,114,101,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,107,101,121,44,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,105,115,32,116,104,101,32,118,97,108,117,101,46,32,68,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,97,110,121,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,107,101,121,115,32,97,114,101,32,100,101,102,105,110,101,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,117,115,101,100,32,112,97,114,116,32,111,102,32,116,104,101,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,98,108,111,99,107,32,117,115,101,100,32,102,111,114,32,115,116,111,114,105,110,103,32,116,104,101,32,104,101,97,112,32,97,110,100,32,116,104,101,32,115,116,97,99,107,46>>]},{dt,[],[{code,[],[<<111,108,100,95,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,117,115,101,100,32,112,97,114,116,32,111,102,32,116,104,101,32,111,108,100,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<111,108,100,95,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,98,108,111,99,107,32,117,115,101,100,32,102,111,114,32,115,116,111,114,105,110,103,32,116,104,101,32,111,108,100,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<115,116,97,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,115,116,97,99,107,46>>]},{dt,[],[{code,[],[<<114,101,99,101,110,116,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,100,97,116,97,32,116,104,97,116,32,115,117,114,118,105,118,101,100,32,116,104,101,32,112,114,101,118,105,111,117,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{dt,[],[{code,[],[<<109,98,117,102,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,99,111,109,98,105,110,101,100,32,115,105,122,101,32,111,102,32,109,101,115,115,97,103,101,32,98,117,102,102,101,114,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,99,101,115,115,46>>]},{dt,[],[{code,[],[<<98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,117,110,105,113,117,101,32,111,102,102,45,104,101,97,112,32,98,105,110,97,114,105,101,115,32,114,101,102,101,114,101,110,99,101,100,32,102,114,111,109,32,116,104,101,32,112,114,111,99,101,115,115,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<98,105,110,95,118,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,98,105,110,97,114,105,101,115,32,97,108,108,111,119,101,100,32,105,110,32,116,104,101,32,118,105,114,116,117,97,108,32,104,101,97,112,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,98,101,102,111,114,101,32,100,111,105,110,103,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{dt,[],[{code,[],[<<98,105,110,95,111,108,100,95,118,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,117,110,105,113,117,101,32,111,102,102,45,104,101,97,112,32,98,105,110,97,114,105,101,115,32,114,101,102,101,114,101,110,99,101,100,32,102,114,111,109,32,116,104,101,32,112,114,111,99,101,115,115,32,111,108,100,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<98,105,110,95,111,108,100,95,118,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,98,105,110,97,114,105,101,115,32,97,108,108,111,119,101,100,32,105,110,32,116,104,101,32,118,105,114,116,117,97,108,32,111,108,100,32,104,101,97,112,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,98,101,102,111,114,101,32,100,111,105,110,103,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]}]},{p,[],[<<65,108,108,32,115,105,122,101,115,32,97,114,101,32,105,110,32,119,111,114,100,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<32,105,115,32,114,101,97,99,104,101,100,32,100,117,114,105,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,115,116,97,114,116>>]},<<44,32,98,117,116,32,116,104,101,32,115,105,122,101,115,32,114,101,102,108,101,99,116,32,116,104,101,32,115,105,122,101,115,32,116,104,97,116,32,116,114,105,103,103,101,114,101,100,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,116,111,32,98,101,32,114,101,97,99,104,101,100,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,101,110,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,105,110,111,114,95,101,110,100,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,121,111,117,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,102,105,110,105,115,104,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]},<<44,32,98,117,116,32,116,104,101,32,115,105,122,101,115,32,114,101,102,108,101,99,116,32,116,104,101,32,110,101,119,32,115,105,122,101,115,32,97,102,116,101,114,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,106,111,114,95,115,116,97,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,97,106,111,114,95,115,116,97,114,116,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,97,98,111,117,116,32,116,111,32,98,101,32,115,116,97,114,116,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,106,111,114,95,101,110,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,97,106,111,114,95,101,110,100,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,102,105,110,105,115,104,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]},<<44,32,98,117,116,32,116,104,101,32,115,105,122,101,115,32,114,101,102,108,101,99,116,32,116,104,101,32,110,101,119,32,115,105,122,101,115,32,97,102,116,101,114,32,97,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]}]}]},{p,[],[<<73,102,32,116,104,101,32,116,114,97,99,105,110,103,32,112,114,111,99,101,115,115,47,112,111,114,116,32,100,105,101,115,32,111,114,32,116,104,101,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<114,101,109,111,118,101>>]},<<44,32,116,104,101,32,102,108,97,103,115,32,97,114,101,32,115,105,108,101,110,116,108,121,32,114,101,109,111,118,101,100,46>>]},{p,[],[<<69,97,99,104,32,112,114,111,99,101,115,115,32,99,97,110,32,111,110,108,121,32,98,101,32,116,114,97,99,101,100,32,98,121,32,111,110,101,32,116,114,97,99,101,114,46,32,84,104,101,114,101,102,111,114,101,44,32,97,116,116,101,109,112,116,115,32,116,111,32,116,114,97,99,101,32,97,110,32,97,108,114,101,97,100,121,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,102,97,105,108,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,117,109,98,101,114,32,105,110,100,105,99,97,116,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,109,97,116,99,104,101,100,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<49>>]},<<46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32>>,{code,[],[<<97,108,108>>]},<<32,111,114,32>>,{code,[],[<<101,120,105,115,116,105,110,103>>]},<<44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,114,117,110,110,105,110,103,46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32>>,{code,[],[<<110,101,119>>]},<<44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,97,108,108,32,112,108,97,116,102,111,114,109,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,48,51,54>>,signature => [{attribute,2013,spec,{{erlang,trace,3},[{type,2013,bounded_fun,[{type,2013,'fun',[{type,2013,product,[{var,2013,'PidPortSpec'},{var,2013,'How'},{var,2013,'FlagList'}]},{type,2013,integer,[]}]},[{type,2014,constraint,[{atom,2014,is_subtype},[{var,2014,'PidPortSpec'},{type,2014,union,[{type,2014,pid,[]},{type,2014,port,[]},{atom,2015,all},{atom,2015,processes},{atom,2015,ports},{atom,2016,existing},{atom,2016,existing_processes},{atom,2016,existing_ports},{atom,2017,new},{atom,2017,new_processes},{atom,2017,new_ports}]}]]},{type,2018,constraint,[{atom,2018,is_subtype},[{var,2018,'How'},{type,2018,boolean,[]}]]},{type,2019,constraint,[{atom,2019,is_subtype},[{var,2019,'FlagList'},{type,2019,list,[{user_type,2019,trace_flag,[]}]}]]}]]}]}}]}},{{function,trace_delivered,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2028}],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,100,101,108,105,118,101,114,121,32,111,102,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,40,103,101,110,101,114,97,116,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,107,101,114,110,101,108,58,115,101,113,95,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,113,95,116,114,97,99,101,40,51,41>>]}]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>]}]},<<41,32,105,115,32,100,105,115,108,111,99,97,116,101,100,32,111,110,32,116,104,101,32,116,105,109,101,45,108,105,110,101,32,99,111,109,112,97,114,101,100,32,116,111,32,111,116,104,101,114,32,101,118,101,110,116,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,73,102,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,104,97,115,32,112,97,115,115,101,100,32,115,111,109,101,32,115,112,101,99,105,102,105,99,32,112,111,105,110,116,32,105,110,32,105,116,115,32,101,120,101,99,117,116,105,111,110,44,32,97,110,100,32,121,111,117,32,119,97,110,116,32,116,111,32,107,110,111,119,32,119,104,101,110,32,97,116,32,108,101,97,115,116,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,101,118,101,110,116,115,32,117,112,32,116,111,32,116,104,105,115,32,112,111,105,110,116,32,104,97,118,101,32,114,101,97,99,104,101,100,32,116,104,101,32,116,114,97,99,101,114,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<46>>]},{p,[],[<<87,104,101,110,32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,116,114,97,99,101,114,32,117,112,32,116,111,32,116,104,101,32,112,111,105,110,116,32,116,104,97,116,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,114,101,97,99,104,101,100,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<44,32,116,104,101,110,32,97,32>>,{code,[],[<<123,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,44,32,84,114,97,99,101,101,44,32,82,101,102,125>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<32,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,109,101,115,115,97,103,101,32>>,{code,[],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100>>]},<<32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,105,109,112,108,121,32,116,104,97,116,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,46,32,73,110,115,116,101,97,100,32,105,116,32,105,109,112,108,105,101,115,32,116,104,97,116,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,116,104,97,116,32>>,{em,[],[<<97,114,101,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100>>]},<<32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,46,32,73,116,32,105,115,32,110,111,116,32,97,110,32,101,114,114,111,114,32,105,102,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,105,115,32,110,111,116,44,32,97,110,100,32,104,97,115,32,110,111,116,32,98,101,101,110,32,116,114,97,99,101,100,32,98,121,32,115,111,109,101,111,110,101,44,32,98,117,116,32,105,102,32,116,104,105,115,32,105,115,32,116,104,101,32,99,97,115,101,44,32>>,{em,[],[<<110,111>>]},<<32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,32,119,104,101,110,32,116,104,101,32>>,{code,[],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100>>]},<<32,109,101,115,115,97,103,101,32,97,114,114,105,118,101,115,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,109,117,115,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,32,99,117,114,114,101,110,116,108,121,32,111,114,32,112,114,101,118,105,111,117,115,108,121,32,101,120,105,115,116,105,110,103,32,111,110,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,97,115,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<32,114,101,115,105,100,101,115,32,111,110,46,32,84,104,101,32,115,112,101,99,105,97,108,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,97,116,111,109,32>>,{code,[],[<<97,108,108>>]},<<32,100,101,110,111,116,101,115,32,97,108,108,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,99,117,114,114,101,110,116,108,121,32,97,114,101,32,116,114,97,99,101,100,32,105,110,32,116,104,101,32,110,111,100,101,46>>]},{p,[],[<<87,104,101,110,32,117,115,101,100,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,101,114,108,95,116,114,97,99,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<84,114,97,99,101,114,32,77,111,100,117,108,101>>]},<<44,32,97,110,121,32,109,101,115,115,97,103,101,32,115,101,110,116,32,105,110,32,116,104,101,32,116,114,97,99,101,32,99,97,108,108,98,97,99,107,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,104,97,118,101,32,114,101,97,99,104,101,100,32,105,116,115,32,114,101,99,105,112,105,101,110,116,32,98,101,102,111,114,101,32,116,104,101,32>>,{code,[],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,46>>]},{p,[],[<<69,120,97,109,112,108,101,58,32,80,114,111,99,101,115,115,32>>,{code,[],[<<65>>]},<<32,105,115,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<44,32,112,111,114,116,32>>,{code,[],[<<66>>]},<<32,105,115,32,116,114,97,99,101,114,44,32,97,110,100,32,112,114,111,99,101,115,115,32>>,{code,[],[<<67>>]},<<32,105,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,111,102,32>>,{code,[],[<<66>>]},<<46,32>>,{code,[],[<<67>>]},<<32,119,97,110,116,115,32,116,111,32,99,108,111,115,101,32>>,{code,[],[<<66>>]},<<32,119,104,101,110,32>>,{code,[],[<<65>>]},<<32,101,120,105,116,115,46,32,84,111,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,116,114,97,99,101,32,105,115,32,110,111,116,32,116,114,117,110,99,97,116,101,100,44,32>>,{code,[],[<<67>>]},<<32,99,97,110,32,99,97,108,108,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,65,41>>]},<<32,119,104,101,110,32>>,{code,[],[<<65>>]},<<32,101,120,105,116,115,44,32,97,110,100,32,119,97,105,116,32,102,111,114,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,44,32,65,44,32,82,101,102,125>>]},<<32,98,101,102,111,114,101,32,99,108,111,115,105,110,103,32>>,{code,[],[<<66>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,32,40,100,101,97,100,32,111,114,32,97,108,105,118,101,41,32,111,110,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,97,115,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<32,114,101,115,105,100,101,115,32,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,54,57,55>>,signature => [{attribute,2028,spec,{{erlang,trace_delivered,1},[{type,2028,bounded_fun,[{type,2028,'fun',[{type,2028,product,[{var,2028,'Tracee'}]},{var,2028,'Ref'}]},[{type,2029,constraint,[{atom,2029,is_subtype},[{var,2029,'Tracee'},{type,2029,union,[{type,2029,pid,[]},{atom,2029,all}]}]]},{type,2030,constraint,[{atom,2030,is_subtype},[{var,2030,'Ref'},{type,2030,reference,[]}]]}]]}]}}]}},{{function,trace_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2035}],[<<116,114,97,99,101,95,105,110,102,111,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,105,110,102,111,95,102,108,97,103>>}],[]},{li,[{name,<<116,114,97,99,101,95,105,110,102,111,95,105,116,101,109,95,114,101,115,117,108,116>>}],[]},{li,[{name,<<116,114,97,99,101,95,105,110,102,111,95,114,101,116,117,114,110>>}],[]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,114,97,99,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,112,111,114,116,44,32,112,114,111,99,101,115,115,44,32,102,117,110,99,116,105,111,110,44,32,111,114,32,101,118,101,110,116,46>>]},{p,[],[{em,[],[<<84,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,112,111,114,116,32,111,114,32,112,114,111,99,101,115,115>>]},<<44,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32,116,111,32,98,101,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,44,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,111,110,101,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<110,101,119>>]},<<44,32>>,{code,[],[<<110,101,119,95,112,114,111,99,101,115,115,101,115>>]},<<44,32,111,114,32>>,{code,[],[<<110,101,119,95,112,111,114,116,115>>]},<<46,32,84,104,101,32,97,116,111,109,32>>,{code,[],[<<110,101,119>>]},<<32,111,114,32>>,{code,[],[<<110,101,119,95,112,114,111,99,101,115,115,101,115>>]},<<32,109,101,97,110,115,32,116,104,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,116,114,97,99,101,32,115,116,97,116,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,32,116,111,32,98,101,32,99,114,101,97,116,101,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,97,116,111,109,32>>,{code,[],[<<110,101,119,95,112,111,114,116,115>>]},<<32,109,101,97,110,115,32,116,104,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,116,114,97,99,101,32,115,116,97,116,101,32,102,111,114,32,112,111,114,116,115,32,116,111,32,98,101,32,99,114,101,97,116,101,100,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,102,111,114,32,112,111,114,116,115,32,97,110,100,32,112,114,111,99,101,115,115,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,108,97,103,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,116,111,109,115,32,105,110,100,105,99,97,116,105,110,103,32,119,104,97,116,32,107,105,110,100,32,111,102,32,116,114,97,99,101,115,32,105,115,32,101,110,97,98,108,101,100,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,101,32,108,105,115,116,32,105,115,32,101,109,112,116,121,32,105,102,32,110,111,32,116,114,97,99,101,115,32,97,114,101,32,101,110,97,98,108,101,100,44,32,97,110,100,32,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,115,32,97,116,111,109,115,32,105,102,32,116,114,97,99,101,115,32,97,114,101,32,101,110,97,98,108,101,100,58,32>>,{code,[],[<<115,101,110,100>>]},<<44,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<44,32>>,{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]},<<44,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<44,32>>,{code,[],[<<112,114,111,99,115>>]},<<44,32>>,{code,[],[<<112,111,114,116,115>>]},<<44,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]},<<44,32>>,{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]},<<44,32>>,{code,[],[<<114,117,110,110,105,110,103>>]},<<44,32>>,{code,[],[<<114,117,110,110,105,110,103,95,112,114,111,99,115>>]},<<44,32>>,{code,[],[<<114,117,110,110,105,110,103,95,112,111,114,116,115>>]},<<44,32>>,{code,[],[<<115,105,108,101,110,116>>]},<<44,32>>,{code,[],[<<101,120,105,116,105,110,103>>]},<<44,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32>>,{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<44,32,97,110,100,32>>,{code,[],[<<97,114,105,116,121>>]},<<46,32,84,104,101,32,111,114,100,101,114,32,105,115,32,97,114,98,105,116,114,97,114,121,46>>]}]},{dt,[],[{code,[],[<<116,114,97,99,101,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,105,100,101,110,116,105,102,105,101,114,32,102,111,114,32,112,114,111,99,101,115,115,44,32,112,111,114,116,44,32,111,114,32,97,32,116,117,112,108,101,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,97,110,100,32,116,114,97,99,101,114,32,115,116,97,116,101,32,116,114,97,99,105,110,103,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,105,115,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,114,97,99,101,100,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]}]},{p,[],[{em,[],[<<84,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,102,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32,116,111,32,98,101,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<46,32,78,111,32,119,105,108,100,99,97,114,100,115,32,97,114,101,32,97,108,108,111,119,101,100,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,111,114,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,116,114,97,99,101,100,46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<44,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,114,101,102,101,114,115,32,116,111,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,102,111,114,32,99,111,100,101,32,116,104,97,116,32,119,105,108,108,32,98,101,32,108,111,97,100,101,100,46>>]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,102,111,114,32,102,117,110,99,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,97,99,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,114,97,99,101,100,32,111,110,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,105,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,114,97,99,101,100,32,111,110,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,40,116,104,97,116,32,105,115,44,32,108,111,99,97,108,32,97,110,100,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,41,44,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,108,111,99,97,108,32,111,114,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,114,101,32,110,111,116,32,116,114,97,99,101,100,46>>]}]},{dt,[],[{code,[],[<<109,97,116,99,104,95,115,112,101,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,108,111,99,97,108,108,121,32,111,114,32,103,108,111,98,97,108,108,121,32,116,114,97,99,101,100,32,98,117,116,32,104,97,115,32,110,111,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,100,101,102,105,110,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,101,116,97>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,101,116,97,45,116,114,97,99,101,32,116,114,97,99,101,114,32,112,114,111,99,101,115,115,44,32,112,111,114,116,44,32,111,114,32,116,114,97,99,101,32,109,111,100,117,108,101,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,109,101,116,97,45,116,114,97,99,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,109,101,116,97,45,116,114,97,99,101,100,32,98,117,116,32,104,97,115,32,111,110,99,101,32,100,101,116,101,99,116,101,100,32,116,104,97,116,32,116,104,101,32,116,114,97,99,101,114,32,112,114,111,99,101,115,115,32,105,115,32,105,110,118,97,108,105,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,101,116,97,95,109,97,116,99,104,95,115,112,101,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,101,116,97,45,116,114,97,99,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,109,101,116,97,45,116,114,97,99,101,100,32,98,117,116,32,104,97,115,32,110,111,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,100,101,102,105,110,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,97,108,108,32,99,111,117,110,116,32,118,97,108,117,101,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,111,114,32>>,{code,[],[<<116,114,117,101>>]},<<32,102,111,114,32,116,104,101,32,112,115,101,117,100,111,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,105,102,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,105,115,32,97,99,116,105,118,101,46,32,79,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,97,108,108,32,116,105,109,101,32,118,97,108,117,101,115,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,111,114,32>>,{code,[],[<<116,114,117,101>>]},<<32,102,111,114,32,116,104,101,32,112,115,101,117,100,111,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,105,102,32,99,97,108,108,32,116,105,109,101,32,116,114,97,99,105,110,103,32,105,115,32,97,99,116,105,118,101,46,32,79,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,99,97,108,108,32,116,105,109,101,32,118,97,108,117,101,115,32,114,101,116,117,114,110,101,100,44,32>>,{code,[],[<<91,123,80,105,100,44,32,67,111,117,110,116,44,32,83,44,32,85,115,125,93>>]},<<44,32,105,115,32,97,32,108,105,115,116,32,111,102,32,101,97,99,104,32,112,114,111,99,101,115,115,32,116,104,97,116,32,101,120,101,99,117,116,101,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,97,110,100,32,105,116,115,32,115,112,101,99,105,102,105,99,32,99,111,117,110,116,101,114,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32>>,{code,[],[<<123,73,116,101,109,44,32,86,97,108,117,101,125>>]},<<32,116,117,112,108,101,115,32,102,111,114,32,97,108,108,32,111,116,104,101,114,32,105,116,101,109,115,44,32,111,114,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,110,111,32,116,114,97,99,105,110,103,32,105,115,32,97,99,116,105,118,101,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]}]},{p,[],[{em,[],[<<84,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,110,32,101,118,101,110,116>>]},<<44,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32,116,111,32,98,101,32,111,110,101,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<115,101,110,100>>]},<<32,111,114,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<46>>]},{p,[],[<<79,110,101,32,118,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,102,111,114,32,101,118,101,110,116,115,32,101,120,105,115,116,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<109,97,116,99,104,95,115,112,101,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,116,104,105,115,32,101,118,101,110,116,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,44,32,111,114,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,110,111,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,101,116,46>>]}]}]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<123,73,116,101,109,44,32,86,97,108,117,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,105,115,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46,32,73,102,32,97,32,112,105,100,32,102,111,114,32,97,32,100,101,97,100,32,112,114,111,99,101,115,115,32,119,97,115,32,115,112,101,99,105,102,105,101,100,44,32,111,114,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,110,111,110,45,101,120,105,115,116,105,110,103,32,102,117,110,99,116,105,111,110,44,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,105,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,55,53,50>>,signature => [{attribute,2035,spec,{{erlang,trace_info,2},[{type,2035,bounded_fun,[{type,2035,'fun',[{type,2035,product,[{var,2035,'PidPortFuncEvent'},{var,2035,'Item'}]},{var,2035,'Res'}]},[{type,2036,constraint,[{atom,2036,is_subtype},[{var,2036,'PidPortFuncEvent'},{type,2036,union,[{type,2036,pid,[]},{type,2036,port,[]},{atom,2036,new},{atom,2036,new_processes},{atom,2036,new_ports},{type,2037,tuple,[{var,2037,'Module'},{var,2037,'Function'},{var,2037,'Arity'}]},{atom,2037,on_load},{atom,2037,send},{atom,2037,'receive'}]}]]},{type,2038,constraint,[{atom,2038,is_subtype},[{var,2038,'Module'},{type,2038,module,[]}]]},{type,2039,constraint,[{atom,2039,is_subtype},[{var,2039,'Function'},{type,2039,atom,[]}]]},{type,2040,constraint,[{atom,2040,is_subtype},[{var,2040,'Arity'},{type,2040,arity,[]}]]},{type,2041,constraint,[{atom,2041,is_subtype},[{var,2041,'Item'},{type,2041,union,[{atom,2041,flags},{atom,2041,tracer},{atom,2041,traced},{atom,2041,match_spec},{atom,2042,meta},{atom,2042,meta_match_spec},{atom,2042,call_count},{atom,2042,call_time},{atom,2042,all}]}]]},{type,2043,constraint,[{atom,2043,is_subtype},[{var,2043,'Res'},{user_type,2043,trace_info_return,[]}]]}]]}]}}]}},{{function,trace_pattern,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2705}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]},{li,[{name,<<116,114,97,99,101,95,112,97,116,116,101,114,110,95,109,102,97>>}],[]}]},{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,69,118,101,110,116,44,32,77,97,116,99,104,83,112,101,99,44,32,91,93,41>>]}]},<<44,32,114,101,116,97,105,110,101,100,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,56,56,56>>,signature => [{attribute,2705,spec,{{erlang,trace_pattern,2},[{type,2705,bounded_fun,[{type,2705,'fun',[{type,2705,product,[{var,2705,'MFA'},{var,2705,'MatchSpec'}]},{type,2705,non_neg_integer,[]}]},[{type,2706,constraint,[{atom,2706,is_subtype},[{var,2706,'MFA'},{type,2706,union,[{user_type,2706,trace_pattern_mfa,[]},{atom,2706,send},{atom,2706,'receive'}]}]]},{type,2707,constraint,[{atom,2707,is_subtype},[{var,2707,'MatchSpec'},{type,2707,union,[{ann_type,2707,[{var,2707,'MatchSpecList'},{user_type,2707,trace_match_spec,[]}]},{type,2708,boolean,[]},{atom,2709,restart},{atom,2710,pause}]}]]}]]}]}}]}},{{function,trace_pattern,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2725}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]}]},{p,[],[<<83,101,116,115,32,116,114,97,99,101,32,112,97,116,116,101,114,110,32,102,111,114,32>>,{em,[],[<<109,101,115,115,97,103,101,32,115,101,110,100,105,110,103>>]},<<46,32,77,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<32,116,111,32,115,101,116,32,116,104,101,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,46,32,66,121,32,100,101,102,97,117,108,116,32,97,108,108,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,102,114,111,109,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,116,114,97,99,101,100,46,32,84,111,32,108,105,109,105,116,32,116,114,97,99,101,100,32,115,101,110,100,32,101,118,101,110,116,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32,109,101,115,115,97,103,101,32,99,111,110,116,101,110,116,44,32,116,104,101,32,115,101,110,100,101,114,32,97,110,100,47,111,114,32,116,104,101,32,114,101,99,101,105,118,101,114,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99>>]},<<32,99,97,110,32,116,97,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<77,97,116,99,104,83,112,101,99,76,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,105,115,32,100,111,110,101,32,111,110,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<91,82,101,99,101,105,118,101,114,44,32,77,115,103,93>>]},<<46,32>>,{code,[],[<<82,101,99,101,105,118,101,114>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,116,121,32,111,102,32,116,104,101,32,114,101,99,101,105,118,101,114,32,97,110,100,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,116,104,101,32,109,101,115,115,97,103,101,32,116,101,114,109,46,32,84,104,101,32,112,105,100,32,111,102,32,116,104,101,32,115,101,110,100,105,110,103,32,112,114,111,99,101,115,115,32,99,97,110,32,98,101,32,97,99,99,101,115,115,101,100,32,119,105,116,104,32,116,104,101,32,103,117,97,114,100,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<115,101,108,102,47,48>>]},<<46,32,65,110,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,109,97,116,99,104,95,115,112,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<69,110,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,115,101,110,116,32,109,101,115,115,97,103,101,115,32,40,102,114,111,109,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,41,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46,32>>,{em,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,115,101,110,116,32,109,101,115,115,97,103,101,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]}]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,109,117,115,116,32,98,101,32>>,{code,[],[<<91,93>>]},<<32,102,111,114,32,115,101,110,100,32,116,114,97,99,105,110,103,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,108,119,97,121,115,32>>,{code,[],[<<49>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,116,111,32,97,32,115,112,101,99,105,102,105,99,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,80,105,100,44,32,39,95,39,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,109,97,116,99,104,105,110,103,32>>,{code,[],[<<123,114,101,112,108,121,44,32,95,125>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,39,95,39,44,32,123,114,101,112,108,121,44,39,95,39,125,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,116,111,32,116,104,101,32,115,101,110,100,101,114,32,105,116,115,101,108,102,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,39,36,49,39,44,32,39,95,39,93,44,91,123,39,61,58,61,39,44,39,36,49,39,44,123,115,101,108,102,125,125,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,116,111,32,111,116,104,101,114,32,110,111,100,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,39,36,49,39,44,32,39,95,39,93,44,91,123,39,61,47,61,39,44,123,110,111,100,101,44,39,36,49,39,125,44,123,110,111,100,101,125,125,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,32,99,97,110,32,117,115,101,32,97,108,108,32,103,117,97,114,100,32,97,110,100,32,98,111,100,121,32,102,117,110,99,116,105,111,110,115,32,101,120,99,101,112,116,32>>,{code,[],[<<99,97,108,108,101,114>>]},<<46>>]}]},{p,[],[<<70,97,105,108,115,32,98,121,32,114,97,105,115,105,110,103,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,97,110,32,97,114,103,117,109,101,110,116,32,105,115,32,105,110,118,97,108,105,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,104,97,115,32,101,120,99,101,115,115,105,118,101,32,110,101,115,116,105,110,103,32,119,104,105,99,104,32,99,97,117,115,101,115,32,115,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,101,120,104,97,117,115,116,105,111,110,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,115,99,104,101,100,95,116,104,114,101,97,100,95,115,116,97,99,107,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<83,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,57,48,54>>,signature => [{attribute,2725,spec,{{erlang,trace_pattern,3},[{type,2725,bounded_fun,[{type,2725,'fun',[{type,2725,product,[{atom,2725,send},{var,2725,'MatchSpec'},{type,2725,nil,[]}]},{type,2725,non_neg_integer,[]}]},[{type,2726,constraint,[{atom,2726,is_subtype},[{var,2726,'MatchSpec'},{type,2726,union,[{ann_type,2726,[{var,2726,'MatchSpecList'},{user_type,2726,trace_match_spec,[]}]},{type,2727,boolean,[]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,trace_pattern,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2725}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]}]},{p,[],[<<83,101,116,115,32,116,114,97,99,101,32,112,97,116,116,101,114,110,32,102,111,114,32>>,{em,[],[<<109,101,115,115,97,103,101,32,114,101,99,101,105,118,105,110,103>>]},<<46,32,77,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<32,116,111,32,115,101,116,32,116,104,101,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,46,32,66,121,32,100,101,102,97,117,108,116,32,97,108,108,32,109,101,115,115,97,103,101,115,32,114,101,99,101,105,118,101,100,32,98,121,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,116,114,97,99,101,100,46,32,84,111,32,108,105,109,105,116,32,116,114,97,99,101,100,32,114,101,99,101,105,118,101,32,101,118,101,110,116,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32,109,101,115,115,97,103,101,32,99,111,110,116,101,110,116,44,32,116,104,101,32,115,101,110,100,101,114,32,97,110,100,47,111,114,32,116,104,101,32,114,101,99,101,105,118,101,114,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99>>]},<<32,99,97,110,32,116,97,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<77,97,116,99,104,83,112,101,99,76,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,105,115,32,100,111,110,101,32,111,110,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<91,78,111,100,101,44,32,83,101,110,100,101,114,44,32,77,115,103,93>>]},<<46,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,116,104,101,32,110,111,100,101,32,110,97,109,101,32,111,102,32,116,104,101,32,115,101,110,100,101,114,46,32>>,{code,[],[<<83,101,110,100,101,114>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,116,121,32,111,102,32,116,104,101,32,115,101,110,100,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,115,101,110,100,101,114,32,105,115,32,110,111,116,32,107,110,111,119,110,32,40,119,104,105,99,104,32,99,97,110,32,98,101,32,116,104,101,32,99,97,115,101,32,102,111,114,32,114,101,109,111,116,101,32,115,101,110,100,101,114,115,41,46,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,116,104,101,32,109,101,115,115,97,103,101,32,116,101,114,109,46,32,84,104,101,32,112,105,100,32,111,102,32,116,104,101,32,114,101,99,101,105,118,105,110,103,32,112,114,111,99,101,115,115,32,99,97,110,32,98,101,32,97,99,99,101,115,115,101,100,32,119,105,116,104,32,116,104,101,32,103,117,97,114,100,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<115,101,108,102,47,48>>]},<<46,32,65,110,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,109,97,116,99,104,95,115,112,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<69,110,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,114,101,99,101,105,118,101,100,32,109,101,115,115,97,103,101,115,32,40,116,111,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,41,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46,32>>,{em,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,114,101,99,101,105,118,101,100,32,109,101,115,115,97,103,101,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]}]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,109,117,115,116,32,98,101,32>>,{code,[],[<<91,93>>]},<<32,102,111,114,32,114,101,99,101,105,118,101,32,116,114,97,99,105,110,103,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,108,119,97,121,115,32>>,{code,[],[<<49>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,102,114,111,109,32,97,32,115,112,101,99,105,102,105,99,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,39,114,101,99,101,105,118,101,39,44,32,91,123,91,39,95,39,44,80,105,100,44,32,39,95,39,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,109,97,116,99,104,105,110,103,32>>,{code,[],[<<123,114,101,112,108,121,44,32,95,125>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,39,114,101,99,101,105,118,101,39,44,32,91,123,91,39,95,39,44,39,95,39,44,32,123,114,101,112,108,121,44,39,95,39,125,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,102,114,111,109,32,111,116,104,101,114,32,110,111,100,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,39,114,101,99,101,105,118,101,39,44,32,91,123,91,39,36,49,39,44,32,39,95,39,44,32,39,95,39,93,44,91,123,39,61,47,61,39,44,39,36,49,39,44,123,110,111,100,101,125,125,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,32,99,97,110,32,117,115,101,32,97,108,108,32,103,117,97,114,100,32,97,110,100,32,98,111,100,121,32,102,117,110,99,116,105,111,110,115,32,101,120,99,101,112,116,32>>,{code,[],[<<99,97,108,108,101,114>>]},<<44,32>>,{code,[],[<<105,115,95,115,101,113,95,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<103,101,116,95,115,101,113,95,116,111,107,101,110>>]},<<44,32>>,{code,[],[<<115,101,116,95,115,101,113,95,116,111,107,101,110>>]},<<44,32>>,{code,[],[<<101,110,97,98,108,101,95,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<100,105,115,97,98,108,101,95,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<116,114,97,99,101>>]},<<44,32>>,{code,[],[<<115,105,108,101,110,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<112,114,111,99,101,115,115,95,100,117,109,112>>]},<<46>>]}]},{p,[],[<<70,97,105,108,115,32,98,121,32,114,97,105,115,105,110,103,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,97,110,32,97,114,103,117,109,101,110,116,32,105,115,32,105,110,118,97,108,105,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,104,97,115,32,101,120,99,101,115,115,105,118,101,32,110,101,115,116,105,110,103,32,119,104,105,99,104,32,99,97,117,115,101,115,32,115,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,101,120,104,97,117,115,116,105,111,110,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,115,99,104,101,100,95,116,104,114,101,97,100,95,115,116,97,99,107,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<83,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,57,57,51>>,signature => [{attribute,2725,spec,{{erlang,trace_pattern,3},[{type,2728,bounded_fun,[{type,2728,'fun',[{type,2728,product,[{atom,2728,'receive'},{var,2728,'MatchSpec'},{type,2728,nil,[]}]},{type,2728,non_neg_integer,[]}]},[{type,2729,constraint,[{atom,2729,is_subtype},[{var,2729,'MatchSpec'},{type,2729,union,[{ann_type,2729,[{var,2729,'MatchSpecList'},{user_type,2729,trace_match_spec,[]}]},{type,2730,boolean,[]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,trace_pattern,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2725}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]},{li,[{name,<<116,114,97,99,101,95,112,97,116,116,101,114,110,95,102,108,97,103>>}],[]},{li,[{name,<<116,114,97,99,101,95,112,97,116,116,101,114,110,95,109,102,97>>}],[]}]},{p,[],[<<69,110,97,98,108,101,115,32,111,114,32,100,105,115,97,98,108,101,115,32>>,{em,[],[<<99,97,108,108,32,116,114,97,99,105,110,103>>]},<<32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,102,117,110,99,116,105,111,110,115,46,32,77,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<32,116,111,32,115,101,116,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<67,111,110,99,101,112,116,117,97,108,108,121,44,32,99,97,108,108,32,116,114,97,99,105,110,103,32,119,111,114,107,115,32,97,115,32,102,111,108,108,111,119,115,46,32,73,110,115,105,100,101,32,116,104,101,32,69,114,108,97,110,103,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,44,32,97,32,115,101,116,32,111,102,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,97,32,115,101,116,32,111,102,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,116,111,32,98,101,32,116,114,97,99,101,100,46,32,73,102,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,99,97,108,108,115,32,97,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,44,32,116,104,101,32,116,114,97,99,101,32,97,99,116,105,111,110,32,105,115,32,116,97,107,101,110,46,32,79,116,104,101,114,119,105,115,101,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46>>]},{p,[],[<<84,111,32,97,100,100,32,111,114,32,114,101,109,111,118,101,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,32,116,111,32,116,104,101,32,115,101,116,32,111,102,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<46>>]},{p,[],[<<84,111,32,97,100,100,32,111,114,32,114,101,109,111,118,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,116,104,101,32,115,101,116,32,111,102,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,115,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<46>>]},{p,[],[<<84,104,101,32,66,73,70,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<32,99,97,110,32,97,108,115,111,32,97,100,100,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,32,116,111,32,97,32,102,117,110,99,116,105,111,110,46,32,65,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,99,111,109,112,114,105,115,101,115,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,116,104,101,32,102,117,110,99,116,105,111,110,32,97,114,103,117,109,101,110,116,115,32,109,117,115,116,32,109,97,116,99,104,44,32,97,32,103,117,97,114,100,32,101,120,112,114,101,115,115,105,111,110,32,116,104,97,116,32,109,117,115,116,32,101,118,97,108,117,97,116,101,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,97,110,100,32,97,110,32,97,99,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,97,99,116,105,111,110,32,105,115,32,116,111,32,115,101,110,100,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,111,114,32,116,104,101,32,103,117,97,114,100,32,102,97,105,108,115,44,32,116,104,101,32,97,99,116,105,111,110,32,105,115,32,110,111,116,32,101,120,101,99,117,116,101,100,46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,70,65>>]},<<32,105,115,32,116,111,32,98,101,32,97,32,116,117,112,108,101,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,40,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,41,46,32,73,116,32,99,97,110,32,98,101,32,116,104,101,32,109,111,100,117,108,101,44,32,102,117,110,99,116,105,111,110,44,32,97,110,100,32,97,114,105,116,121,32,102,111,114,32,97,32,102,117,110,99,116,105,111,110,32,40,111,114,32,97,32,66,73,70,32,105,110,32,97,110,121,32,109,111,100,117,108,101,41,46,32,84,104,101,32,97,116,111,109,32>>,{code,[],[<<39,95,39>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,97,115,32,97,32,119,105,108,100,99,97,114,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,119,97,121,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,39,95,39,125>>]}]},{dd,[],[{p,[],[<<65,108,108,32,102,117,110,99,116,105,111,110,115,32,111,102,32,97,110,121,32,97,114,105,116,121,32,110,97,109,101,100,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,110,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,77,111,100,117,108,101,44,39,95,39,44,39,95,39,125>>]}]},{dd,[],[{p,[],[<<65,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,39,95,39,44,39,95,39,44,39,95,39,125>>]}]},{dd,[],[{p,[],[<<65,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,97,108,108,32,108,111,97,100,101,100,32,109,111,100,117,108,101,115,46>>]}]}]},{p,[],[<<79,116,104,101,114,32,99,111,109,98,105,110,97,116,105,111,110,115,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,39,95,39,44,65,114,105,116,121,125>>]},<<44,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,46,32,76,111,99,97,108,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,32,119,105,108,100,99,97,114,100,115,32,111,110,108,121,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,105,115,32,105,110,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<46>>]},{p,[],[<<73,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<77,70,65>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<44,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,110,100,32,102,108,97,103,32,108,105,115,116,32,97,114,101,32,117,115,101,100,32,111,110,32,97,108,108,32,109,111,100,117,108,101,115,32,116,104,97,116,32,97,114,101,32,110,101,119,108,121,32,108,111,97,100,101,100,46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99>>]},<<32,99,97,110,32,116,97,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,116,104,101,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<69,110,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,116,104,101,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]},{dt,[],[{code,[],[<<77,97,116,99,104,83,112,101,99,76,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46,32,65,110,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,70,111,114,32,97,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,116,115,58,109,97,116,99,104,95,115,112,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{code,[],[<<114,101,115,116,97,114,116>>]}]},{dd,[],[{p,[],[<<70,111,114,32,116,104,101,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<99,97,108,108,95,116,105,109,101>>]},<<58,32,114,101,115,116,97,114,116,115,32,116,104,101,32,101,120,105,115,116,105,110,103,32,99,111,117,110,116,101,114,115,46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32,111,116,104,101,114,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<112,97,117,115,101>>]}]},{dd,[],[{p,[],[<<70,111,114,32,116,104,101,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<99,97,108,108,95,116,105,109,101>>]},<<58,32,112,97,117,115,101,115,32,116,104,101,32,101,120,105,115,116,105,110,103,32,99,111,117,110,116,101,114,115,46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32,111,116,104,101,114,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,46>>]}]}]},{p,[],[<<80,97,114,97,109,101,116,101,114,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,118,97,108,105,100,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<103,108,111,98,97,108>>]}]},{dd,[],[{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,99,97,108,108,32,116,114,97,99,105,110,103,32,102,111,114,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,40,116,104,97,116,32,105,115,44,32,99,97,108,108,115,32,115,112,101,99,105,102,121,105,110,103,32,116,104,101,32,109,111,100,117,108,101,32,101,120,112,108,105,99,105,116,108,121,41,46,32,79,110,108,121,32,101,120,112,111,114,116,101,100,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,32,97,110,100,32,111,110,108,121,32,103,108,111,98,97,108,32,99,97,108,108,115,32,103,101,110,101,114,97,116,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32>>,{em,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<108,111,99,97,108>>]}]},{dd,[],[{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,99,97,108,108,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,84,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,115,101,110,116,32,119,104,101,110,101,118,101,114,32,97,110,121,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,99,97,108,108,101,100,44,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,104,111,119,32,116,104,101,121,32,97,114,101,32,99,97,108,108,101,100,46,32,73,102,32,102,108,97,103,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,105,115,32,115,101,116,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,97,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,97,108,115,111,32,115,101,110,116,32,119,104,101,110,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,111,32,105,116,115,32,99,97,108,108,101,114,46>>]}]},{dt,[],[{code,[],[<<109,101,116,97,32,124,32,123,109,101,116,97,44,32,80,105,100,125,32,124,32,123,109,101,116,97,44,32,84,114,97,99,101,114,77,111,100,117,108,101,44,32,84,114,97,99,101,114,83,116,97,116,101,125>>]}]},{dd,[],[{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,109,101,116,97,45,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,84,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,115,101,110,116,32,116,111,32,116,104,101,32,116,114,97,99,101,114,32,119,104,101,110,101,118,101,114,32,97,110,121,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,99,97,108,108,101,100,46,32,73,102,32,110,111,32,116,114,97,99,101,114,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<115,101,108,102,40,41>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,97,32,100,101,102,97,117,108,116,32,116,114,97,99,101,114,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<77,101,116,97,45,116,114,97,99,105,110,103,32,116,114,97,99,101,115,32,97,108,108,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,100,111,101,115,32,110,111,116,32,99,97,114,101,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,116,114,97,99,101,32,102,108,97,103,115,32,115,101,116,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]},<<44,32,116,104,101,32,116,114,97,99,101,32,102,108,97,103,115,32,97,114,101,32,105,110,115,116,101,97,100,32,102,105,120,101,100,32,116,111,32>>,{code,[],[<<91,99,97,108,108,44,32,116,105,109,101,115,116,97,109,112,93>>]},<<46>>]},{p,[],[<<84,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,114,101,116,117,114,110,95,116,114,97,99,101,125>>]},<<32,119,111,114,107,115,32,119,105,116,104,32,109,101,116,97,45,116,114,97,99,101,32,97,110,100,32,115,101,110,100,115,32,105,116,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,116,111,32,116,104,101,32,115,97,109,101,32,116,114,97,99,101,114,46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,116,114,117,101>>]},<<41,32,111,114,32,115,116,111,112,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,102,97,108,115,101>>]},<<41,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,70,111,114,32,101,118,101,114,121,32,102,117,110,99,116,105,111,110,44,32,97,32,99,111,117,110,116,101,114,32,105,115,32,105,110,99,114,101,109,101,110,116,101,100,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,44,32,105,110,32,97,110,121,32,112,114,111,99,101,115,115,46,32,78,111,32,112,114,111,99,101,115,115,32,116,114,97,99,101,32,102,108,97,103,115,32,110,101,101,100,32,116,111,32,98,101,32,97,99,116,105,118,97,116,101,100,46>>]},{p,[],[<<73,102,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,105,115,32,115,116,97,114,116,101,100,32,119,104,105,108,101,32,97,108,114,101,97,100,121,32,114,117,110,110,105,110,103,44,32,116,104,101,32,99,111,117,110,116,32,105,115,32,114,101,115,116,97,114,116,101,100,32,102,114,111,109,32,122,101,114,111,46,32,84,111,32,112,97,117,115,101,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,44,32,117,115,101,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,112,97,117,115,101>>]},<<46,32,80,97,117,115,101,100,32,97,110,100,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,32,99,97,110,32,98,101,32,114,101,115,116,97,114,116,101,100,32,102,114,111,109,32,122,101,114,111,32,119,105,116,104,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,114,101,115,116,97,114,116>>]},<<46>>]},{p,[],[<<84,111,32,114,101,97,100,32,116,104,101,32,99,111,117,110,116,101,114,32,118,97,108,117,101,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,116,114,117,101>>]},<<41,32,111,114,32,115,116,111,112,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,102,97,108,115,101>>]},<<41,32,99,97,108,108,32,116,105,109,101,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,70,111,114,32,101,118,101,114,121,32,102,117,110,99,116,105,111,110,44,32,97,32,99,111,117,110,116,101,114,32,105,115,32,105,110,99,114,101,109,101,110,116,101,100,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,46,32,84,105,109,101,32,115,112,101,110,116,32,105,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,97,99,99,117,109,117,108,97,116,101,100,32,105,110,32,116,119,111,32,111,116,104,101,114,32,99,111,117,110,116,101,114,115,44,32,115,101,99,111,110,100,115,32,97,110,100,32,109,105,99,114,111,115,101,99,111,110,100,115,46,32,84,104,101,32,99,111,117,110,116,101,114,115,32,97,114,101,32,115,116,111,114,101,100,32,102,111,114,32,101,97,99,104,32,99,97,108,108,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,102,32,99,97,108,108,32,116,105,109,101,32,116,114,97,99,105,110,103,32,105,115,32,115,116,97,114,116,101,100,32,119,104,105,108,101,32,97,108,114,101,97,100,121,32,114,117,110,110,105,110,103,44,32,116,104,101,32,99,111,117,110,116,32,97,110,100,32,116,105,109,101,32,114,101,115,116,97,114,116,32,102,114,111,109,32,122,101,114,111,46,32,84,111,32,112,97,117,115,101,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,44,32,117,115,101,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,112,97,117,115,101>>]},<<46,32,80,97,117,115,101,100,32,97,110,100,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,32,99,97,110,32,98,101,32,114,101,115,116,97,114,116,101,100,32,102,114,111,109,32,122,101,114,111,32,119,105,116,104,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,114,101,115,116,97,114,116>>]},<<46>>]},{p,[],[<<84,111,32,114,101,97,100,32,116,104,101,32,99,111,117,110,116,101,114,32,118,97,108,117,101,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]}]},{p,[],[<<84,104,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,97,110,100,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,97,114,101,32,109,117,116,117,97,108,108,121,32,101,120,99,108,117,115,105,118,101,44,32,97,110,100,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,32,40,105,102,32,110,111,32,111,112,116,105,111,110,115,32,97,114,101,32,115,112,101,99,105,102,105,101,100,41,46,32,84,104,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<109,101,116,97>>]},<<32,112,101,114,102,111,114,109,32,97,32,107,105,110,100,32,111,102,32,108,111,99,97,108,32,116,114,97,99,105,110,103,44,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<46,32,65,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,103,108,111,98,97,108,108,121,32,111,114,32,108,111,99,97,108,108,121,32,116,114,97,99,101,100,46,32,73,102,32,103,108,111,98,97,108,32,116,114,97,99,105,110,103,32,105,115,32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,97,32,115,101,116,32,111,102,32,102,117,110,99,116,105,111,110,115,44,32,116,104,101,110,32,108,111,99,97,108,44,32,109,101,116,97,44,32,99,97,108,108,32,116,105,109,101,44,32,97,110,100,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,102,111,114,32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,101,116,32,111,102,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,115,32,105,115,32,100,105,115,97,98,108,101,100,44,32,97,110,100,32,99,111,110,118,101,114,115,101,108,121,46>>]},{p,[],[<<87,104,101,110,32,100,105,115,97,98,108,105,110,103,32,116,114,97,99,101,44,32,116,104,101,32,111,112,116,105,111,110,32,109,117,115,116,32,109,97,116,99,104,32,116,104,101,32,116,121,112,101,32,111,102,32,116,114,97,99,101,32,115,101,116,32,111,110,32,116,104,101,32,102,117,110,99,116,105,111,110,46,32,84,104,97,116,32,105,115,44,32,108,111,99,97,108,32,116,114,97,99,105,110,103,32,109,117,115,116,32,98,101,32,100,105,115,97,98,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,97,110,100,32,103,108,111,98,97,108,32,116,114,97,99,105,110,103,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,40,111,114,32,110,111,32,111,112,116,105,111,110,41,44,32,97,110,100,32,115,111,32,111,110,46>>]},{p,[],[<<80,97,114,116,32,111,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,108,105,115,116,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,100,105,114,101,99,116,108,121,46,32,73,102,32,97,32,102,117,110,99,116,105,111,110,32,104,97,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,105,116,32,99,97,110,32,98,101,32,114,101,112,108,97,99,101,100,32,119,105,116,104,32,97,32,110,101,119,32,111,110,101,46,32,84,111,32,99,104,97,110,103,101,32,97,110,32,101,120,105,115,116,105,110,103,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,117,115,101,32,116,104,101,32,66,73,70,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,105,110,102,111,47,50>>]}]},<<32,116,111,32,114,101,116,114,105,101,118,101,32,116,104,101,32,101,120,105,115,116,105,110,103,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,105,110,103,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<77,70,65>>]},<<46,32,84,104,105,115,32,105,115,32,122,101,114,111,32,105,102,32,110,111,110,101,32,109,97,116,99,104,101,100,46>>]},{p,[],[<<70,97,105,108,115,32,98,121,32,114,97,105,115,105,110,103,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,97,110,32,97,114,103,117,109,101,110,116,32,105,115,32,105,110,118,97,108,105,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,104,97,115,32,101,120,99,101,115,115,105,118,101,32,110,101,115,116,105,110,103,32,119,104,105,99,104,32,99,97,117,115,101,115,32,115,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,101,120,104,97,117,115,116,105,111,110,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,115,99,104,101,100,95,116,104,114,101,97,100,95,115,116,97,99,107,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<83,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,48,56,49>>,signature => [{attribute,2725,spec,{{erlang,trace_pattern,3},[{type,2731,bounded_fun,[{type,2731,'fun',[{type,2731,product,[{var,2731,'MFA'},{var,2731,'MatchSpec'},{var,2731,'FlagList'}]},{type,2731,non_neg_integer,[]}]},[{type,2732,constraint,[{atom,2732,is_subtype},[{var,2732,'MFA'},{user_type,2732,trace_pattern_mfa,[]}]]},{type,2733,constraint,[{atom,2733,is_subtype},[{var,2733,'MatchSpec'},{type,2733,union,[{ann_type,2733,[{var,2733,'MatchSpecList'},{user_type,2733,trace_match_spec,[]}]},{type,2734,boolean,[]},{atom,2735,restart},{atom,2736,pause}]}]]},{type,2737,constraint,[{atom,2737,is_subtype},[{var,2737,'FlagList'},{type,2737,list,[{user_type,2737,trace_pattern_flag,[]}]}]]}]]}]}}]}},{{function,trunc,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2049}],[<<116,114,117,110,99,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,117,110,99,97,116,101,115,32,116,104,101,32,100,101,99,105,109,97,108,115,32,111,102,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,53,46,55,41,46,10,53>>]}]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,45,53,46,55,41,46,10,45,53>>]}]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,53,41,46,10,53>>]}]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41,46,10,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]}]},{p,[],[<<73,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<116,114,117,110,99,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41>>]},<<32,101,118,97,108,117,97,116,101,115,32,116,111,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]},<<46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,116,104,97,116,32,116,104,101,32,110,117,109,98,101,114,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48>>]},<<32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,73,110,115,116,101,97,100,44,32,116,104,101,32,102,108,111,97,116,32,108,105,116,101,114,97,108,32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56,46,48>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,99,108,111,115,101,115,116,32,110,117,109,98,101,114,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,83,101,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115,35,102,108,111,97,116,95,114,101,112,114,101,115,101,110,116,97,116,105,111,110,95,112,114,111,98,108,101,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,70,108,111,97,116,105,110,103,32,80,111,105,110,116,32,78,117,109,98,101,114,115>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,50,56,56>>,signature => [{attribute,2049,spec,{{trunc,1},[{type,2049,bounded_fun,[{type,2049,'fun',[{type,2049,product,[{var,2049,'Number'}]},{type,2049,integer,[]}]},[{type,2050,constraint,[{atom,2050,is_subtype},[{var,2050,'Number'},{type,2050,number,[]}]]}]]}]}}]}},{{function,tuple_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2056}],[<<116,117,112,108,101,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,116,104,97,116,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,105,110,32>>,{code,[],[<<84,117,112,108,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,117,112,108,101,95,115,105,122,101,40,123,109,111,114,110,105,44,32,109,117,108,108,101,44,32,98,119,97,110,103,101,125,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,51,49,57>>,signature => [{attribute,2056,spec,{{tuple_size,1},[{type,2056,bounded_fun,[{type,2056,'fun',[{type,2056,product,[{var,2056,'Tuple'}]},{type,2056,non_neg_integer,[]}]},[{type,2057,constraint,[{atom,2057,is_subtype},[{var,2057,'Tuple'},{type,2057,tuple,any}]]}]]}]}}]}},{{function,tuple_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2747}],[<<116,117,112,108,101,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<84,117,112,108,101>>]},<<46,32>>,{code,[],[<<84,117,112,108,101>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,69,114,108,97,110,103,32,116,101,114,109,115,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,117,112,108,101,95,116,111,95,108,105,115,116,40,123,115,104,97,114,101,44,32,123,39,69,114,105,99,115,115,111,110,95,66,39,44,32,49,54,51,125,125,41,46,10,91,115,104,97,114,101,44,123,39,69,114,105,99,115,115,111,110,95,66,39,44,49,54,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,51,51,50>>,signature => [{attribute,2747,spec,{{tuple_to_list,1},[{type,2747,bounded_fun,[{type,2747,'fun',[{type,2747,product,[{var,2747,'Tuple'}]},{type,2747,list,[{type,2747,term,[]}]}]},[{type,2748,constraint,[{atom,2748,is_subtype},[{var,2748,'Tuple'},{type,2748,tuple,any}]]}]]}]}}]}},{{function,unalias,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,766}],[<<117,110,97,108,105,97,115,47,49>>],#{<<101,110>> => [{p,[],[<<68,101,97,99,116,105,118,97,116,101,32,116,104,101,32,97,108,105,97,115,32>>,{code,[],[<<65,108,105,97,115>>]},<<32,112,114,101,118,105,111,117,115,108,121,32,99,114,101,97,116,101,100,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,65,110,32,97,108,105,97,115,32,99,97,110,32,102,111,114,32,101,120,97,109,112,108,101,32,98,101,32,99,114,101,97,116,101,100,32,118,105,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,97,108,105,97,115,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,108,105,97,115,47,48>>]}]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,51>>]}]},<<46,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<32,119,105,108,108,32,97,108,119,97,121,115,32,100,101,97,99,116,105,118,97,116,101,32,116,104,101,32,97,108,105,97,115,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,111,112,116,105,111,110,115,32,117,115,101,100,32,119,104,101,110,32,99,114,101,97,116,105,110,103,32,116,104,101,32,97,108,105,97,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,114,117,101,32,105,102,32>>,{code,[],[<<65,108,105,97,115>>]},<<32,119,97,115,32,97,32,99,117,114,114,101,110,116,108,121,32,97,99,116,105,118,101,32,97,108,105,97,115,32,102,111,114,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,101,115,59,32,111,116,104,101,114,119,105,115,101,44,32,102,97,108,115,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,51,52,53>>,signature => [{attribute,766,spec,{{unalias,1},[{type,766,bounded_fun,[{type,766,'fun',[{type,766,product,[{var,766,'Alias'}]},{type,766,boolean,[]}]},[{type,767,constraint,[{atom,767,is_subtype},[{var,767,'Alias'},{type,767,reference,[]}]]}]]}]}}],since => <<79,84,80,32,64,79,84,80,45,49,54,55,49,56,64>>}},{{function,unique_integer,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1529}],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,48>>],#{<<101,110>> => [{p,[],[<<71,101,110,101,114,97,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,97,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<105,110,116,101,103,101,114,32,117,110,105,113,117,101,32,111,110,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101>>]},<<46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,51,54,53>>,signature => [{attribute,1529,spec,{{erlang,unique_integer,0},[{type,1529,'fun',[{type,1529,product,[]},{type,1529,integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,unique_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1522}],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<71,101,110,101,114,97,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,97,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<105,110,116,101,103,101,114,32,117,110,105,113,117,101,32,111,110,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101>>]},<<46,32,84,104,101,32,105,110,116,101,103,101,114,32,105,115,32,117,110,105,113,117,101,32,105,110,32,116,104,101,32,115,101,110,115,101,32,116,104,97,116,32,116,104,105,115,32,66,73,70,44,32,117,115,105,110,103,32,116,104,101,32,115,97,109,101,32,115,101,116,32,111,102,32,109,111,100,105,102,105,101,114,115,44,32,100,111,101,115,32,110,111,116,32,114,101,116,117,114,110,32,116,104,101,32,115,97,109,101,32,105,110,116,101,103,101,114,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,32,111,110,32,116,104,101,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,69,97,99,104,32,105,110,116,101,103,101,114,32,118,97,108,117,101,32,99,97,110,32,111,102,32,99,111,117,114,115,101,32,98,101,32,99,111,110,115,116,114,117,99,116,101,100,32,98,121,32,111,116,104,101,114,32,109,101,97,110,115,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,119,104,101,110,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,112,97,115,115,101,100,32,97,115,32>>,{code,[],[<<77,111,100,105,102,105,101,114,76,105,115,116>>]},<<44,32,98,111,116,104,32,110,101,103,97,116,105,118,101,32,97,110,100,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,115,32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,46,32,84,104,105,115,32,116,111,32,117,115,101,32,116,104,101,32,114,97,110,103,101,32,111,102,32,105,110,116,101,103,101,114,115,32,116,104,97,116,32,100,111,32,110,111,116,32,110,101,101,100,32,104,101,97,112,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,97,115,32,109,117,99,104,32,97,115,32,112,111,115,115,105,98,108,101,46,32,66,121,32,100,101,102,97,117,108,116,32,116,104,101,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,115,32,97,114,101,32,97,108,115,111,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,117,110,105,113,117,101,44,32,116,104,97,116,32,105,115,44,32,97,110,121,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,32,99,97,110,32,98,101,32,115,109,97,108,108,101,114,32,111,114,32,108,97,114,103,101,114,32,116,104,97,110,32,112,114,101,118,105,111,117,115,108,121,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,115,46>>]},{p,[],[{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,58>>]},{dl,[],[{dt,[],[<<112,111,115,105,116,105,118,101>>]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,111,110,108,121,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,115,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,98,121,32,112,97,115,115,105,110,103,32,116,104,101,32>>,{code,[],[<<112,111,115,105,116,105,118,101>>]},<<32,109,111,100,105,102,105,101,114,32,121,111,117,32,119,105,108,108,32,103,101,116,32,104,101,97,112,32,97,108,108,111,99,97,116,101,100,32,105,110,116,101,103,101,114,115,32,40,98,105,103,110,117,109,115,41,32,113,117,105,99,107,101,114,46>>]}]},{dt,[],[<<109,111,110,111,116,111,110,105,99>>]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,116,114,105,99,116,108,121,95,77,111,110,111,116,111,110,105,99,97,108,108,121,95,73,110,99,114,101,97,115,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103>>]},<<32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,99,114,101,97,116,105,111,110,32,116,105,109,101,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,105,110,116,101,103,101,114,32,114,101,116,117,114,110,101,100,32,105,115,32,97,108,119,97,121,115,32,108,97,114,103,101,114,32,116,104,97,110,32,112,114,101,118,105,111,117,115,108,121,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,115,32,111,110,32,116,104,101,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46>>]},{p,[],[<<84,104,101,115,101,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,111,114,100,101,114,32,98,101,116,119,101,101,110,32,101,118,101,110,116,115,32,111,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,84,104,97,116,32,105,115,44,32,105,102,32,98,111,116,104,32>>,{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]},<<32,97,110,100,32>>,{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]},<<32,97,114,101,32,101,120,101,99,117,116,101,100,32,98,121,32,100,105,102,102,101,114,101,110,116,32,112,114,111,99,101,115,115,101,115,32,40,111,114,32,116,104,101,32,115,97,109,101,32,112,114,111,99,101,115,115,41,32,111,110,32,116,104,101,32,115,97,109,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,32,97,110,100,32>>,{code,[],[<<88,32,60,32,89>>]},<<44,32,119,101,32,107,110,111,119,32,116,104,97,116,32>>,{code,[],[<<88>>]},<<32,119,97,115,32,99,114,101,97,116,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<89>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<83,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,118,97,108,117,101,115,32,97,114,101,32,105,110,104,101,114,101,110,116,108,121,32,113,117,105,116,101,32,101,120,112,101,110,115,105,118,101,32,116,111,32,103,101,110,101,114,97,116,101,32,97,110,100,32,115,99,97,108,101,115,32,112,111,111,114,108,121,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,118,97,108,117,101,115,32,110,101,101,100,32,116,111,32,98,101,32,115,121,110,99,104,114,111,110,105,122,101,100,32,98,101,116,119,101,101,110,32,67,80,85,32,99,111,114,101,115,46,32,84,104,97,116,32,105,115,44,32,100,111,32,110,111,116,32,112,97,115,115,32,116,104,101,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99>>]},<<32,109,111,100,105,102,105,101,114,32,117,110,108,101,115,115,32,121,111,117,32,114,101,97,108,108,121,32,110,101,101,100,32,115,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,118,97,108,117,101,115,46>>]}]}]}]},{p,[],[<<65,108,108,32,118,97,108,105,100,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,32,99,97,110,32,98,101,32,99,111,109,98,105,110,101,100,46,32,82,101,112,101,97,116,101,100,32,40,118,97,108,105,100,41,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,32,105,110,32,116,104,101,32>>,{code,[],[<<77,111,100,105,102,105,101,114,76,105,115,116>>]},<<32,97,114,101,32,105,103,110,111,114,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,115,101,116,32,111,102,32,105,110,116,101,103,101,114,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>]},<<32,117,115,105,110,103,32,100,105,102,102,101,114,101,110,116,32,115,101,116,115,32,111,102,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,32>>,{em,[],[<<119,105,108,108,32,111,118,101,114,108,97,112>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,98,121,32,99,97,108,108,105,110,103,32>>,{code,[],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]},<<44,32,97,110,100,32>>,{code,[],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,112,111,115,105,116,105,118,101,44,32,109,111,110,111,116,111,110,105,99,93,41>>]},<<32,114,101,112,101,97,116,101,100,108,121,44,32,121,111,117,32,119,105,108,108,32,101,118,101,110,116,117,97,108,108,121,32,115,101,101,32,115,111,109,101,32,105,110,116,101,103,101,114,115,32,116,104,97,116,32,97,114,101,32,114,101,116,117,114,110,101,100,32,98,121,32,98,111,116,104,32,99,97,108,108,115,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<105,102,32>>,{code,[],[<<77,111,100,105,102,105,101,114,76,105,115,116>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<105,102,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<32,105,115,32,110,111,116,32,97,32,118,97,108,105,100,32,109,111,100,105,102,105,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,51,55,56>>,signature => [{attribute,1522,spec,{{erlang,unique_integer,1},[{type,1522,bounded_fun,[{type,1522,'fun',[{type,1522,product,[{var,1522,'ModifierList'}]},{type,1522,integer,[]}]},[{type,1523,constraint,[{atom,1523,is_subtype},[{var,1523,'ModifierList'},{type,1523,list,[{var,1523,'Modifier'}]}]]},{type,1524,constraint,[{atom,1524,is_subtype},[{var,1524,'Modifier'},{type,1524,union,[{atom,1524,positive},{atom,1524,monotonic}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,universaltime,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2062}],[<<117,110,105,118,101,114,115,97,108,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,97,99,99,111,114,100,105,110,103,32,116,111,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,32,105,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125,44,32,123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125,125>>]},<<32,105,102,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,117,110,105,118,101,114,115,97,108,116,105,109,101,40,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,40,41>>]},<<46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,117,110,105,118,101,114,115,97,108,116,105,109,101,40,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,49,56,44,52,51,125,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,52,54,48>>,signature => [{attribute,2062,spec,{{erlang,universaltime,0},[{type,2062,bounded_fun,[{type,2062,'fun',[{type,2062,product,[]},{var,2062,'DateTime'}]},[{type,2063,constraint,[{atom,2063,is_subtype},[{var,2063,'DateTime'},{remote_type,2063,[{atom,2063,calendar},{atom,2063,datetime},[]]}]]}]]}]}}]}},{{function,universaltime_to_localtime,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2874}],[<<117,110,105,118,101,114,115,97,108,116,105,109,101,95,116,111,95,108,111,99,97,108,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,116,111,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,105,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125,44,32,123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125,125>>]},<<32,105,102,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32,110,111,32,99,111,110,118,101,114,115,105,111,110,32,105,115,32,100,111,110,101,44,32,97,110,100,32>>,{code,[],[<<85,110,105,118,101,114,115,97,108,116,105,109,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,117,110,105,118,101,114,115,97,108,116,105,109,101,95,116,111,95,108,111,99,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,49,56,44,52,51,125,125,41,46,10,123,123,49,57,57,54,44,49,49,44,55,125,44,123,49,53,44,49,56,44,52,51,125,125>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<85,110,105,118,101,114,115,97,108,116,105,109,101>>]},<<32,100,101,110,111,116,101,115,32,97,110,32,105,110,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,52,55,57>>,signature => [{attribute,2874,spec,{{erlang,universaltime_to_localtime,1},[{type,2874,bounded_fun,[{type,2874,'fun',[{type,2874,product,[{var,2874,'Universaltime'}]},{var,2874,'Localtime'}]},[{type,2875,constraint,[{atom,2875,is_subtype},[{var,2875,'Localtime'},{remote_type,2875,[{atom,2875,calendar},{atom,2875,datetime},[]]}]]},{type,2876,constraint,[{atom,2876,is_subtype},[{var,2876,'Universaltime'},{remote_type,2876,[{atom,2876,calendar},{atom,2876,datetime},[]]}]]}]]}]}}]}},{{function,unlink,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2074}],[<<117,110,108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,109,111,118,101,115,32,116,104,101,32,108,105,110,107,44,32,105,102,32,116,104,101,114,101,32,105,115,32,111,110,101,44,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32>>,{code,[],[<<73,100>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,97,110,100,32,100,111,101,115,32,110,111,116,32,102,97,105,108,44,32,101,118,101,110,32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,108,105,110,107,32,116,111,32>>,{code,[],[<<73,100>>]},<<44,32,111,114,32,105,102,32>>,{code,[],[<<73,100>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]},{p,[],[<<79,110,99,101,32>>,{code,[],[<<117,110,108,105,110,107,40,73,100,41>>]},<<32,104,97,115,32,114,101,116,117,114,110,101,100,44,32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,116,104,101,32,108,105,110,107,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,101,114,32,97,110,100,32,116,104,101,32,101,110,116,105,116,121,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32>>,{code,[],[<<73,100>>]},<<32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,111,110,32,116,104,101,32,99,97,108,108,101,114,32,105,110,32,116,104,101,32,102,117,116,117,114,101,32,40,117,110,108,101,115,115,32,116,104,101,32,108,105,110,107,32,105,115,32,115,101,116,117,112,32,97,103,97,105,110,41,46,32,73,102,32,116,104,101,32,99,97,108,108,101,114,32,105,115,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,44,32,97,110,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,73,100,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,32,102,114,111,109,32,116,104,101,32,108,105,110,107,32,99,97,110,32,104,97,118,101,32,98,101,101,110,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,99,97,108,108,101,114,39,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,98,101,102,111,114,101,32,116,104,101,32,99,97,108,108,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,73,100,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,32,99,97,110,32,98,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,108,105,110,107,44,32,98,117,116,32,99,97,110,32,97,108,115,111,32,98,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{code,[],[<<73,100>>]},<<32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,120,105,116,47,50>>]},<<46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32>>,{em,[],[<<99,97,110>>]},<<32,98,101,32,97,112,112,114,111,112,114,105,97,116,101,32,116,111,32,99,108,101,97,110,32,117,112,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,104,101,110,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,32,97,102,116,101,114,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,108,105,110,107,40,73,100,41>>]},<<44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<117,110,108,105,110,107,40,73,100,41,44,10,114,101,99,101,105,118,101,10,32,32,32,32,123,39,69,88,73,84,39,44,32,73,100,44,32,95,125,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,97,102,116,101,114,32,48,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,101,110,100>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,32,40,69,82,84,83,32,53,46,53,41,32>>,{code,[],[<<117,110,108,105,110,107,47,49>>]},<<32,98,101,104,97,118,101,100,32,99,111,109,112,108,101,116,101,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,108,105,110,107,32,119,97,115,32,97,99,116,105,118,101,32,117,110,116,105,108,32,116,104,101,32,34,117,110,108,105,110,107,32,115,105,103,110,97,108,34,32,114,101,97,99,104,101,100,32,116,104,101,32,108,105,110,107,101,100,32,101,110,116,105,116,121,46,32,84,104,105,115,32,104,97,100,32,97,110,32,117,110,100,101,115,105,114,97,98,108,101,32,101,102,102,101,99,116,44,32,97,115,32,121,111,117,32,99,111,117,108,100,32,110,101,118,101,114,32,107,110,111,119,32,119,104,101,110,32,121,111,117,32,119,101,114,101,32,103,117,97,114,97,110,116,101,101,100,32>>,{em,[],[<<110,111,116>>]},<<32,116,111,32,98,101,32,101,102,102,101,99,116,101,100,32,98,121,32,116,104,101,32,108,105,110,107,46>>]},{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,98,101,104,97,118,105,111,114,32,99,97,110,32,98,101,32,118,105,101,119,101,100,32,97,115,32,116,119,111,32,99,111,109,98,105,110,101,100,32,111,112,101,114,97,116,105,111,110,115,58,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,32,115,101,110,100,32,97,110,32,34,117,110,108,105,110,107,32,115,105,103,110,97,108,34,32,116,111,32,116,104,101,32,108,105,110,107,101,100,32,101,110,116,105,116,121,32,97,110,100,32,105,103,110,111,114,101,32,97,110,121,32,102,117,116,117,114,101,32,114,101,115,117,108,116,115,32,111,102,32,116,104,101,32,108,105,110,107,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,52,57,56>>,signature => [{attribute,2074,spec,{{unlink,1},[{type,2074,bounded_fun,[{type,2074,'fun',[{type,2074,product,[{var,2074,'Id'}]},{atom,2074,true}]},[{type,2075,constraint,[{atom,2075,is_subtype},[{var,2075,'Id'},{type,2075,union,[{type,2075,pid,[]},{type,2075,port,[]}]}]]}]]}]}}]}},{{function,unregister,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2080}],[<<117,110,114,101,103,105,115,116,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,109,111,118,101,115,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,114,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,117,110,114,101,103,105,115,116,101,114,40,100,98,41,46,10,116,114,117,101>>]}]},{p,[],[<<85,115,101,114,115,32,97,114,101,32,97,100,118,105,115,101,100,32,110,111,116,32,116,111,32,117,110,114,101,103,105,115,116,101,114,32,115,121,115,116,101,109,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,105,115,32,110,111,116,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,53,52,52>>,signature => [{attribute,2080,spec,{{unregister,1},[{type,2080,bounded_fun,[{type,2080,'fun',[{type,2080,product,[{var,2080,'RegName'}]},{atom,2080,true}]},[{type,2081,constraint,[{atom,2081,is_subtype},[{var,2081,'RegName'},{type,2081,atom,[]}]]}]]}]}}]}},{{function,whereis,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2086}],[<<119,104,101,114,101,105,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,119,105,116,104,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,110,97,109,101,32,105,115,32,110,111,116,32,114,101,103,105,115,116,101,114,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,119,104,101,114,101,105,115,40,100,98,41,46,10,60,48,46,52,51,46,48,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,53,54,48>>,signature => [{attribute,2086,spec,{{whereis,1},[{type,2086,bounded_fun,[{type,2086,'fun',[{type,2086,product,[{var,2086,'RegName'}]},{type,2086,union,[{type,2086,pid,[]},{type,2086,port,[]},{atom,2086,undefined}]}]},[{type,2087,constraint,[{atom,2087,is_subtype},[{var,2087,'RegName'},{type,2087,atom,[]}]]}]]}]}}]}},{{function,yield,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3418}],[<<121,105,101,108,100,47,48>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,103,105,118,101,32,111,116,104,101,114,32,112,114,111,99,101,115,115,101,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,111,114,32,104,105,103,104,101,114,32,112,114,105,111,114,105,116,121,32,40,105,102,32,97,110,121,41,32,97,32,99,104,97,110,99,101,32,116,111,32,101,120,101,99,117,116,101,32,98,101,102,111,114,101,32,114,101,116,117,114,110,105,110,103,46,32,84,104,101,114,101,32,105,115,32,110,111,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,97,110,121,32,111,116,104,101,114,32,112,114,111,99,101,115,115,32,114,117,110,115,32,98,101,116,119,101,101,110,32,116,104,101,32,105,110,118,111,99,97,116,105,111,110,32,97,110,100,32,114,101,116,117,114,110,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,121,105,101,108,100,47,48>>]},<<46>>]},{p,[],[<<83,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,114,101,99,101,105,118,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<114,101,99,101,105,118,101,45,97,102,116,101,114>>]},<<32,101,120,112,114,101,115,115,105,111,110,115>>]},<<32,102,111,114,32,104,111,119,32,116,111,32,109,97,107,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,115,108,101,101,112,32,102,111,114,32,97,32,115,112,101,99,105,102,105,99,32,110,117,109,98,101,114,32,111,102,32,109,105,108,108,105,115,101,99,111,110,100,115,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,115,101,108,100,111,109,32,111,114,32,110,101,118,101,114,32,97,110,121,32,110,101,101,100,32,116,111,32,117,115,101,32,116,104,105,115,32,66,73,70,46,32,85,115,105,110,103,32,116,104,105,115,32,66,73,70,32,119,105,116,104,111,117,116,32,97,32,116,104,111,114,111,117,103,104,32,103,114,97,115,112,32,111,102,32,104,111,119,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,119,111,114,107,115,32,99,97,110,32,99,97,117,115,101,32,112,101,114,102,111,114,109,97,110,99,101,32,100,101,103,114,97,100,97,116,105,111,110,46,32,84,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,112,117,116,115,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,108,97,115,116,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,99,104,101,100,117,108,101,114,39,115,32,113,117,101,117,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,32,111,102,32,116,104,101,32,115,97,109,101,32,112,114,105,111,114,105,116,121,32,97,115,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,53,55,52>>,signature => [{attribute,3418,spec,{{erlang,yield,0},[{type,3418,'fun',[{type,3418,product,[]},{atom,3418,true}]}]}}]}},{{type,ext_binary,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,87}],[<<45,116,121,112,101,32,101,120,116,95,98,105,110,97,114,121,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,44,32,115,116,114,117,99,116,117,114,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]}]},#{signature => [{attribute,87,type,{ext_binary,{type,87,binary,[]},[]}}]}},{{type,ext_iovec,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,88}],[<<45,116,121,112,101,32,101,120,116,95,105,111,118,101,99,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32,116,101,114,109,32,111,102,32,116,121,112,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<105,111,118,101,99,40,41>>]}]},<<44,32,115,116,114,117,99,116,117,114,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]}]},#{signature => [{attribute,88,type,{ext_iovec,{user_type,88,iovec,[]},[]}}]}},{{type,iovec,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,119}],[<<45,116,121,112,101,32,105,111,118,101,99,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32,108,105,115,116,32,111,102,32,98,105,110,97,114,105,101,115,46,32,84,104,105,115,32,100,97,116,97,116,121,112,101,32,105,115,32,117,115,101,102,117,108,32,116,111,32,117,115,101,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,110,105,102,35,101,110,105,102,95,105,110,115,112,101,99,116,95,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,110,105,102,95,105,110,115,112,101,99,116,95,105,111,118,101,99>>]}]},<<46>>]}]},#{signature => [{attribute,119,type,{iovec,{type,119,list,[{type,119,binary,[]}]},[]}}]}},{{type,message_queue_data,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2353}],[<<45,116,121,112,101,32,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]},#{signature => [{attribute,2353,type,{message_queue_data,{type,2354,union,[{atom,2354,off_heap},{atom,2354,on_heap}]},[]}}]}},{{type,monitor_option,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1397}],[<<45,116,121,112,101,32,109,111,110,105,116,111,114,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,51>>]}]},<<46>>]}]},#{signature => [{attribute,1397,type,{monitor_option,{type,1397,union,[{type,1397,tuple,[{atom,1397,alias},{type,1397,union,[{atom,1397,explicit_unalias},{atom,1397,demonitor},{atom,1397,reply_demonitor}]}]},{type,1398,tuple,[{atom,1398,tag},{type,1398,term,[]}]}]},[]}}]}},{{type,timestamp,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,89}],[<<45,116,121,112,101,32,116,105,109,101,115,116,97,109,112,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,115,116,97,109,112,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,115,116,97,109,112,47,48>>]}]},<<46>>]}]},#{signature => [{attribute,89,type,{timestamp,{type,89,tuple,[{ann_type,89,[{var,89,'MegaSecs'},{type,89,non_neg_integer,[]}]},{ann_type,90,[{var,90,'Secs'},{type,90,non_neg_integer,[]}]},{ann_type,91,[{var,91,'MicroSecs'},{type,91,non_neg_integer,[]}]}]},[]}}]}},{{type,time_unit,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,93}],[<<45,116,121,112,101,32,116,105,109,101,95,117,110,105,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{a,[{id,<<116,121,112,101,95,116,105,109,101,95,117,110,105,116>>}],[]},{p,[],[<<83,117,112,112,111,114,116,101,100,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<80,97,114,116,115,80,101,114,83,101,99,111,110,100,32,58,58,32,105,110,116,101,103,101,114,40,41,32,62,61,32,49>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,117,110,105,116,32,101,120,112,114,101,115,115,101,100,32,105,110,32,112,97,114,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,101,113,117,97,108,115,32>>,{code,[],[<<49,47,80,97,114,116,115,80,101,114,83,101,99,111,110,100>>]},<<32,115,101,99,111,110,100,46>>]}]},{dt,[],[{code,[],[<<115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,108,108,105,115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49,48,48,48>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,99,114,111,115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49,48,48,48,95,48,48,48>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,97,110,111,115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49,48,48,48,95,48,48,48,95,48,48,48>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,97,116,105,118,101>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,110,97,116,105,118,101,32,116,105,109,101,32,117,110,105,116,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,44,32,97,110,100,32,114,101,109,97,105,110,115,32,116,104,101,32,115,97,109,101,32,117,110,116,105,108,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,116,101,114,109,105,110,97,116,101,115,46,32,73,102,32,97,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,115,116,111,112,112,101,100,32,97,110,100,32,116,104,101,110,32,115,116,97,114,116,101,100,32,97,103,97,105,110,32,40,101,118,101,110,32,111,110,32,116,104,101,32,115,97,109,101,32,109,97,99,104,105,110,101,41,44,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,111,102,32,116,104,101,32,110,101,119,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,32,99,97,110,32,100,105,102,102,101,114,32,102,114,111,109,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,111,102,32,116,104,101,32,111,108,100,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46>>]},{p,[],[<<79,110,101,32,99,97,110,32,103,101,116,32,97,110,32,97,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,40,49,44,32,115,101,99,111,110,100,44,32,110,97,116,105,118,101,41>>]}]},<<46,32,84,104,101,32,114,101,115,117,108,116,32,101,113,117,97,108,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,119,104,111,108,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,115,32,112,101,114,32,115,101,99,111,110,100,32,100,111,101,115,32,110,111,116,32,97,100,100,32,117,112,32,116,111,32,97,32,119,104,111,108,101,32,110,117,109,98,101,114,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,114,111,117,110,100,101,100,32,100,111,119,110,119,97,114,100,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,103,105,118,101,115,32,121,111,117,32,109,111,114,101,32,111,114,32,108,101,115,115,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,113,117,97,108,105,116,121,32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,46,32,73,116,32,115,101,116,115,32,97,32,108,105,109,105,116,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,82,101,115,111,108,117,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<114,101,115,111,108,117,116,105,111,110>>]},<<32,97,110,100,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,80,114,101,99,105,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<112,114,101,99,105,115,105,111,110>>]},<<32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,44,32,98,117,116,32,105,116,32,103,105,118,101,115,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,65,99,99,117,114,97,99,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<97,99,99,117,114,97,99,121>>]},<<32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,46,32,84,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,97,110,100,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,32,99,97,110,32,100,105,102,102,101,114,32,115,105,103,110,105,102,105,99,97,110,116,108,121,46>>]}]}]},{dt,[],[{code,[],[<<112,101,114,102,95,99,111,117,110,116,101,114>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,112,101,114,102,111,114,109,97,110,99,101,32,99,111,117,110,116,101,114,32,116,105,109,101,32,117,110,105,116,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<112,101,114,102,95,99,111,117,110,116,101,114>>]},<<32,116,105,109,101,32,117,110,105,116,32,98,101,104,97,118,101,115,32,109,117,99,104,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,46,32,84,104,97,116,32,105,115,44,32,105,116,32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,114,117,110,116,105,109,101,32,114,101,115,116,97,114,116,115,46,32,84,111,32,103,101,116,32,118,97,108,117,101,115,32,111,102,32,116,104,105,115,32,116,121,112,101,44,32,99,97,108,108,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>]}]},<<46>>]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116,40,41>>]}]}]},{dd,[],[{p,[],[<<68,101,112,114,101,99,97,116,101,100,32,115,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,115,32,107,101,112,116,32,102,111,114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]}]}]},{p,[],[<<84,104,101,32>>,{code,[],[<<116,105,109,101,95,117,110,105,116,47,48>>]},<<32,116,121,112,101,32,99,97,110,32,98,101,32,101,120,116,101,110,100,101,100,46,32,84,111,32,99,111,110,118,101,114,116,32,116,105,109,101,32,118,97,108,117,101,115,32,98,101,116,119,101,101,110,32,116,105,109,101,32,117,110,105,116,115,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>]}]},<<46>>]}]},#{signature => [{attribute,93,type,{time_unit,{type,94,union,[{type,94,pos_integer,[]},{atom,95,second},{atom,96,millisecond},{atom,97,microsecond},{atom,98,nanosecond},{atom,99,native},{atom,100,perf_counter},{user_type,101,deprecated_time_unit,[]}]},[]}}]}},{{type,deprecated_time_unit,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,104}],[<<45,116,121,112,101,32,100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{a,[{id,<<116,121,112,101,95,100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116>>}],[]},{p,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,117,110,105,116,40,41>>]}]},<<32,116,121,112,101,32,97,108,115,111,32,99,111,110,115,105,115,116,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32>>,{em,[],[<<100,101,112,114,101,99,97,116,101,100>>]},<<32,115,121,109,98,111,108,105,99,32,116,105,109,101,32,117,110,105,116,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,99,111,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,108,108,105,95,115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,108,108,105,115,101,99,111,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,99,114,111,95,115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,99,114,111,115,101,99,111,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<110,97,110,111,95,115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<110,97,110,111,115,101,99,111,110,100>>]}]},<<46>>]}]}]}]},#{signature => [{attribute,104,type,{deprecated_time_unit,{type,105,union,[{atom,105,seconds},{atom,106,milli_seconds},{atom,107,micro_seconds},{atom,108,nano_seconds}]},[]}}]}},{{type,dist_handle,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,116}],[<<45,116,121,112,101,32,100,105,115,116,95,104,97,110,100,108,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,111,112,97,113,117,101,32,104,97,110,100,108,101,32,105,100,101,110,116,105,102,105,110,103,32,97,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,46>>]}]},#{signature => [{attribute,116,opaque,{dist_handle,{type,116,atom,[]},[]}}]}},{{type,nif_resource,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,113}],[<<45,116,121,112,101,32,110,105,102,95,114,101,115,111,117,114,99,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,111,112,97,113,117,101,32,104,97,110,100,108,101,32,105,100,101,110,116,105,102,105,110,103,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,110,105,102,35,114,101,115,111,117,114,99,101,95,111,98,106,101,99,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<78,73,70,32,114,101,115,111,117,114,99,101,32,111,98,106,101,99,116,32>>]},<<46>>]}]},#{signature => [{attribute,113,opaque,{nif_resource,{type,113,reference,[]},[]}}]}},{{type,spawn_opt_option,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2988}],[<<45,116,121,112,101,32,115,112,97,119,110,95,111,112,116,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<79,112,116,105,111,110,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,40,41>>]}]},<<46>>]}]},#{signature => [{attribute,2988,type,{spawn_opt_option,{type,2989,union,[{atom,2989,link},{atom,2990,monitor},{type,2991,tuple,[{atom,2991,monitor},{ann_type,2991,[{var,2991,'MonitorOpts'},{type,2991,list,[{user_type,2991,monitor_option,[]}]}]}]},{type,2992,tuple,[{atom,2992,priority},{ann_type,2992,[{var,2992,'Level'},{user_type,2992,priority_level,[]}]}]},{type,2993,tuple,[{atom,2993,fullsweep_after},{ann_type,2993,[{var,2993,'Number'},{type,2993,non_neg_integer,[]}]}]},{type,2994,tuple,[{atom,2994,min_heap_size},{ann_type,2994,[{var,2994,'Size'},{type,2994,non_neg_integer,[]}]}]},{type,2995,tuple,[{atom,2995,min_bin_vheap_size},{ann_type,2995,[{var,2995,'VSize'},{type,2995,non_neg_integer,[]}]}]},{type,2996,tuple,[{atom,2996,max_heap_size},{ann_type,2996,[{var,2996,'Size'},{user_type,2996,max_heap_size,[]}]}]},{type,2997,tuple,[{atom,2997,message_queue_data},{ann_type,2997,[{var,2997,'MQD'},{user_type,2997,message_queue_data,[]}]}]}]},[]}}]}},{{type,priority_level,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2350}],[<<45,116,121,112,101,32,112,114,105,111,114,105,116,121,95,108,101,118,101,108,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<80,114,111,99,101,115,115,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]}]}]},#{signature => [{attribute,2350,type,{priority_level,{type,2351,union,[{atom,2351,low},{atom,2351,normal},{atom,2351,high},{atom,2351,max}]},[]}}]}},{{type,max_heap_size,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2981}],[<<45,116,121,112,101,32,109,97,120,95,104,101,97,112,95,115,105,122,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<80,114,111,99,101,115,115,32,109,97,120,32,104,101,97,112,32,115,105,122,101,32,99,111,110,102,105,103,117,114,97,116,105,111,110,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]}]}]},#{signature => [{attribute,2981,type,{max_heap_size,{ann_type,2982,[{var,2982,'Size'},{type,2982,union,[{type,2982,non_neg_integer,[]},{type,2984,map,[{type,2984,map_field_assoc,[{atom,2984,size},{type,2984,non_neg_integer,[]}]},{type,2985,map_field_assoc,[{atom,2985,kill},{type,2985,boolean,[]}]},{type,2986,map_field_assoc,[{atom,2986,error_logger},{type,2986,boolean,[]}]}]}]}]},[]}}]}},{{type,message_queue_data,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2353}],[<<45,116,121,112,101,32,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<80,114,111,99,101,115,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,100,97,116,97,32,99,111,110,102,105,103,117,114,97,116,105,111,110,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]}]}]},#{signature => [{attribute,2353,type,{message_queue_data,{type,2354,union,[{atom,2354,off_heap},{atom,2354,on_heap}]},[]}}]}}]}. \ No newline at end of file
+{docs_v1,[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<66,121,32,99,111,110,118,101,110,116,105,111,110,44,32,109,111,115,116,32,66,117,105,108,116,45,73,110,32,70,117,110,99,116,105,111,110,115,32,40,66,73,70,115,41,32,97,114,101,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,46,32,83,111,109,101,32,111,102,32,116,104,101,32,66,73,70,115,32,97,114,101,32,118,105,101,119,101,100,32,109,111,114,101,32,111,114,32,108,101,115,115,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,32,97,110,100,32,97,114,101,32>>,{em,[],[<<97,117,116,111,45,105,109,112,111,114,116,101,100>>]},<<46,32,84,104,117,115,44,32,105,116,32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,121,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,97,108,108,115,32>>,{code,[],[<<97,116,111,109,95,116,111,95,108,105,115,116,40,101,114,108,97,110,103,41>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,108,97,110,103,58,97,116,111,109,95,116,111,95,108,105,115,116,40,101,114,108,97,110,103,41>>]},<<32,97,114,101,32,105,100,101,110,116,105,99,97,108,46>>]},{p,[],[<<65,117,116,111,45,105,109,112,111,114,116,101,100,32,66,73,70,115,32,97,114,101,32,108,105,115,116,101,100,32,119,105,116,104,111,117,116,32,109,111,100,117,108,101,32,112,114,101,102,105,120,46,32,66,73,70,115,32,108,105,115,116,101,100,32,119,105,116,104,32,109,111,100,117,108,101,32,112,114,101,102,105,120,32,97,114,101,32,110,111,116,32,97,117,116,111,45,105,109,112,111,114,116,101,100,46>>]},{p,[],[<<66,73,70,115,32,99,97,110,32,102,97,105,108,32,102,111,114,32,118,97,114,105,111,117,115,32,114,101,97,115,111,110,115,46,32,65,108,108,32,66,73,70,115,32,102,97,105,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,121,32,97,114,101,32,99,97,108,108,101,100,32,119,105,116,104,32,97,114,103,117,109,101,110,116,115,32,111,102,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,46,32,84,104,101,32,111,116,104,101,114,32,114,101,97,115,111,110,115,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,101,97,99,104,32,105,110,100,105,118,105,100,117,97,108,32,66,73,70,46>>]},{p,[],[<<83,111,109,101,32,66,73,70,115,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,32,97,110,100,32,97,114,101,32,109,97,114,107,101,100,32,119,105,116,104,32,34,65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,34,46>>]}]},#{name => <<101,114,108,97,110,103>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,101,114,108,97,110,103,46,120,109,108],types => #{{message_queue_data,0} => {attribute,{2356,2},type,{message_queue_data,{type,{2357,2},union,[{atom,{2357,2},off_heap},{atom,{2357,13},on_heap}]},[]}},{max_heap_size,0} => {attribute,{2989,2},type,{max_heap_size,{ann_type,{2990,9},[{var,{2990,9},'Size'},{type,{2990,17},union,[{type,{2990,17},non_neg_integer,[]},{type,{2992,9},map,[{type,{2992,17},map_field_assoc,[{atom,{2992,12},size},{type,{2992,20},non_neg_integer,[]}]},{type,{2993,17},map_field_assoc,[{atom,{2993,12},kill},{type,{2993,20},boolean,[]}]},{type,{2994,25},map_field_assoc,[{atom,{2994,12},error_logger},{type,{2994,28},boolean,[]}]}]}]}]},[]}},{trace_info_flag,0} => {attribute,{334,2},type,{trace_info_flag,{type,{335,7},union,[{atom,{335,7},send},{atom,{336,7},'receive'},{atom,{337,7},set_on_spawn},{atom,{338,7},call},{atom,{339,7},return_to},{atom,{340,7},procs},{atom,{341,7},set_on_first_spawn},{atom,{342,7},set_on_link},{atom,{343,7},running},{atom,{344,7},garbage_collection},{atom,{345,7},timestamp},{atom,{346,7},monotonic_timestamp},{atom,{347,7},strict_monotonic_timestamp},{atom,{348,7},arity}]},[]}},{ext_binary,0} => {attribute,{97,2},type,{ext_binary,{type,{97,23},binary,[]},[]}},{trace_pattern_flag,0} => {attribute,{2726,2},type,{trace_pattern_flag,{type,{2727,7},union,[{atom,{2727,7},global},{atom,{2727,16},local},{atom,{2728,7},meta},{type,{2728,14},tuple,[{atom,{2728,15},meta},{ann_type,{2728,21},[{var,{2728,21},'Pid'},{type,{2728,28},pid,[]}]}]},{type,{2729,7},tuple,[{atom,{2729,8},meta},{ann_type,{2729,14},[{var,{2729,14},'TracerModule'},{type,{2729,30},module,[]}]},{ann_type,{2729,40},[{var,{2729,40},'TracerState'},{type,{2729,55},term,[]}]}]},{atom,{2730,7},call_count},{atom,{2731,7},call_time}]},[]}},{prepared_code,0} => {attribute,{120,2},opaque,{prepared_code,{type,{120,28},reference,[]},[]}},{cpu_topology,0} => {attribute,{2760,2},type,{cpu_topology,{type,{2761,9},union,[{type,{2761,9},list,[{ann_type,{2761,10},[{var,{2761,10},'LevelEntry'},{user_type,{2761,24},level_entry,[]}]}]},{atom,{2761,41},undefined}]},[]}},{monitor_option,0} => {attribute,{1400,2},type,{monitor_option,{type,{1400,27},union,[{type,{1400,27},tuple,[{atom,{1400,28},alias},{type,{1400,37},union,[{atom,{1400,37},explicit_unalias},{atom,{1400,58},demonitor},{atom,{1400,72},reply_demonitor}]}]},{type,{1401,27},tuple,[{atom,{1401,28},tag},{type,{1401,35},term,[]}]}]},[]}},{trace_match_spec,0} => {attribute,{2710,2},type,{trace_match_spec,{type,{2711,7},list,[{type,{2711,8},tuple,[{type,{2711,9},union,[{type,{2711,9},list,[{type,{2711,10},term,[]}]},{atom,{2711,20},'_'},{user_type,{2711,26},match_variable,[]}]},{type,{2711,44},list,[{type,{2711,45},term,[]}]},{type,{2711,53},list,[{type,{2711,54},term,[]}]}]}]},[]}},{trace_info_return,0} => {attribute,{350,2},type,{trace_info_return,{type,{351,7},union,[{atom,{351,7},undefined},{type,{352,7},tuple,[{atom,{352,8},flags},{type,{352,15},list,[{user_type,{352,16},trace_info_flag,[]}]}]},{type,{353,7},tuple,[{atom,{353,8},tracer},{type,{353,16},union,[{type,{353,16},pid,[]},{type,{353,24},port,[]},{type,{353,33},nil,[]}]}]},{type,{354,7},tuple,[{atom,{354,8},tracer},{type,{354,16},module,[]},{type,{354,26},term,[]}]},{user_type,{355,7},trace_info_item_result,[]},{type,{356,7},tuple,[{atom,{356,8},all},{type,{356,13},union,[{type,{356,13},list,[{user_type,{356,15},trace_info_item_result,[]}]},{atom,{356,44},false},{atom,{356,52},undefined}]}]}]},[]}},{process_info_result_item,0} => {attribute,{2431,2},type,{process_info_result_item,{type,{2432,7},union,[{type,{2432,7},tuple,[{atom,{2432,8},backtrace},{ann_type,{2432,19},[{var,{2432,19},'Bin'},{type,{2432,26},binary,[]}]}]},{type,{2433,7},tuple,[{atom,{2433,8},binary},{ann_type,{2433,16},[{var,{2433,16},'BinInfo'},{type,{2433,27},list,[{type,{2433,28},tuple,[{type,{2433,29},non_neg_integer,[]},{type,{2434,29},non_neg_integer,[]},{type,{2435,29},non_neg_integer,[]}]}]}]}]},{type,{2436,7},tuple,[{atom,{2436,8},catchlevel},{ann_type,{2436,20},[{var,{2436,20},'CatchLevel'},{type,{2436,34},non_neg_integer,[]}]}]},{type,{2437,7},tuple,[{atom,{2437,8},current_function},{type,{2438,8},union,[{type,{2438,8},tuple,[{ann_type,{2438,9},[{var,{2438,9},'Module'},{type,{2438,19},module,[]}]},{ann_type,{2438,29},[{var,{2438,29},'Function'},{type,{2438,41},atom,[]}]},{ann_type,{2438,49},[{var,{2438,49},'Arity'},{type,{2438,58},arity,[]}]}]},{atom,{2438,69},undefined}]}]},{type,{2439,7},tuple,[{atom,{2439,8},current_location},{type,{2440,8},tuple,[{ann_type,{2440,9},[{var,{2440,9},'Module'},{type,{2440,19},module,[]}]},{ann_type,{2440,29},[{var,{2440,29},'Function'},{type,{2440,41},atom,[]}]},{ann_type,{2440,49},[{var,{2440,49},'Arity'},{type,{2440,58},arity,[]}]},{ann_type,{2441,9},[{var,{2441,9},'Location'},{type,{2441,21},list,[{type,{2441,22},union,[{type,{2441,22},tuple,[{atom,{2441,23},file},{ann_type,{2441,29},[{var,{2441,29},'Filename'},{type,{2441,41},string,[]}]}]},{type,{2442,22},tuple,[{atom,{2442,23},line},{ann_type,{2442,29},[{var,{2442,29},'Line'},{type,{2442,37},pos_integer,[]}]}]}]}]}]}]}]},{type,{2443,7},tuple,[{atom,{2443,8},current_stacktrace},{ann_type,{2443,28},[{var,{2443,28},'Stack'},{type,{2443,37},list,[{user_type,{2443,38},stack_item,[]}]}]}]},{type,{2444,7},tuple,[{atom,{2444,8},dictionary},{ann_type,{2444,20},[{var,{2444,20},'Dictionary'},{type,{2444,34},list,[{type,{2444,35},tuple,[{ann_type,{2444,36},[{var,{2444,36},'Key'},{type,{2444,43},term,[]}]},{ann_type,{2444,51},[{var,{2444,51},'Value'},{type,{2444,60},term,[]}]}]}]}]}]},{type,{2445,7},tuple,[{atom,{2445,8},error_handler},{ann_type,{2445,23},[{var,{2445,23},'Module'},{type,{2445,33},module,[]}]}]},{type,{2446,7},tuple,[{atom,{2446,8},garbage_collection},{ann_type,{2446,28},[{var,{2446,28},'GCInfo'},{type,{2446,38},list,[{type,{2446,39},tuple,[{type,{2446,40},atom,[]},{type,{2446,47},non_neg_integer,[]}]}]}]}]},{type,{2447,7},tuple,[{atom,{2447,8},garbage_collection_info},{ann_type,{2447,33},[{var,{2447,33},'GCInfo'},{type,{2447,43},list,[{type,{2447,44},tuple,[{type,{2447,45},atom,[]},{type,{2447,52},non_neg_integer,[]}]}]}]}]},{type,{2448,7},tuple,[{atom,{2448,8},group_leader},{ann_type,{2448,22},[{var,{2448,22},'GroupLeader'},{type,{2448,37},pid,[]}]}]},{type,{2449,7},tuple,[{atom,{2449,8},heap_size},{ann_type,{2449,19},[{var,{2449,19},'Size'},{type,{2449,27},non_neg_integer,[]}]}]},{type,{2450,7},tuple,[{atom,{2450,8},initial_call},{type,{2450,22},mfa,[]}]},{type,{2451,7},tuple,[{atom,{2451,8},links},{ann_type,{2451,15},[{var,{2451,15},'PidsAndPorts'},{type,{2451,31},list,[{type,{2451,32},union,[{type,{2451,32},pid,[]},{type,{2451,40},port,[]}]}]}]}]},{type,{2452,7},tuple,[{atom,{2452,8},last_calls},{type,{2452,20},union,[{atom,{2452,20},false},{ann_type,{2452,29},[{var,{2452,29},'Calls'},{type,{2452,38},list,[{type,{2452,39},mfa,[]}]}]}]}]},{type,{2453,7},tuple,[{atom,{2453,8},memory},{ann_type,{2453,16},[{var,{2453,16},'Size'},{type,{2453,24},non_neg_integer,[]}]}]},{type,{2454,7},tuple,[{atom,{2454,8},message_queue_len},{ann_type,{2454,27},[{var,{2454,27},'MessageQueueLen'},{type,{2454,46},non_neg_integer,[]}]}]},{type,{2455,7},tuple,[{atom,{2455,8},messages},{ann_type,{2455,18},[{var,{2455,18},'MessageQueue'},{type,{2455,34},list,[{type,{2455,35},term,[]}]}]}]},{type,{2456,7},tuple,[{atom,{2456,8},min_heap_size},{ann_type,{2456,23},[{var,{2456,23},'MinHeapSize'},{type,{2456,38},non_neg_integer,[]}]}]},{type,{2457,7},tuple,[{atom,{2457,8},min_bin_vheap_size},{ann_type,{2457,28},[{var,{2457,28},'MinBinVHeapSize'},{type,{2457,47},non_neg_integer,[]}]}]},{type,{2458,7},tuple,[{atom,{2458,8},max_heap_size},{ann_type,{2458,23},[{var,{2458,23},'MaxHeapSize'},{user_type,{2458,38},max_heap_size,[]}]}]},{type,{2459,7},tuple,[{atom,{2459,8},monitored_by},{ann_type,{2459,22},[{var,{2459,22},'MonitoredBy'},{type,{2459,37},list,[{type,{2459,38},union,[{type,{2459,38},pid,[]},{type,{2459,46},port,[]},{user_type,{2459,55},nif_resource,[]}]}]}]}]},{type,{2460,7},tuple,[{atom,{2460,8},monitors},{ann_type,{2461,8},[{var,{2461,8},'Monitors'},{type,{2461,20},list,[{type,{2461,21},tuple,[{type,{2461,22},union,[{atom,{2461,22},process},{atom,{2461,32},port}]},{ann_type,{2461,38},[{var,{2461,38},'Pid'},{type,{2461,45},union,[{type,{2461,45},pid,[]},{type,{2461,53},port,[]},{type,{2462,38},tuple,[{ann_type,{2462,39},[{var,{2462,39},'RegName'},{type,{2462,50},atom,[]}]},{ann_type,{2462,58},[{var,{2462,58},'Node'},{type,{2462,66},node,[]}]}]}]}]}]}]}]}]},{type,{2463,7},tuple,[{atom,{2463,8},message_queue_data},{ann_type,{2463,28},[{var,{2463,28},'MQD'},{user_type,{2463,35},message_queue_data,[]}]}]},{type,{2464,7},tuple,[{atom,{2464,8},priority},{ann_type,{2464,18},[{var,{2464,18},'Level'},{user_type,{2464,27},priority_level,[]}]}]},{type,{2465,7},tuple,[{atom,{2465,8},reductions},{ann_type,{2465,20},[{var,{2465,20},'Number'},{type,{2465,30},non_neg_integer,[]}]}]},{type,{2466,7},tuple,[{atom,{2466,8},registered_name},{type,{2466,25},union,[{type,{2466,25},nil,[]},{ann_type,{2466,31},[{var,{2466,31},'Atom'},{type,{2466,39},atom,[]}]}]}]},{type,{2467,7},tuple,[{atom,{2467,8},sequential_trace_token},{type,{2467,32},union,[{type,{2467,32},nil,[]},{ann_type,{2467,38},[{var,{2467,38},'SequentialTraceToken'},{type,{2467,62},term,[]}]}]}]},{type,{2468,7},tuple,[{atom,{2468,8},stack_size},{ann_type,{2468,20},[{var,{2468,20},'Size'},{type,{2468,28},non_neg_integer,[]}]}]},{type,{2469,7},tuple,[{atom,{2469,8},status},{ann_type,{2469,16},[{var,{2469,16},'Status'},{type,{2469,26},union,[{atom,{2469,26},exiting},{atom,{2469,36},garbage_collecting},{atom,{2469,57},waiting},{atom,{2469,67},running},{atom,{2469,77},runnable},{atom,{2469,88},suspended}]}]}]},{type,{2470,7},tuple,[{atom,{2470,8},suspending},{ann_type,{2471,8},[{var,{2471,8},'SuspendeeList'},{type,{2471,25},list,[{type,{2471,26},tuple,[{ann_type,{2471,27},[{var,{2471,27},'Suspendee'},{type,{2471,40},pid,[]}]},{ann_type,{2472,27},[{var,{2472,27},'ActiveSuspendCount'},{type,{2472,49},non_neg_integer,[]}]},{ann_type,{2473,27},[{var,{2473,27},'OutstandingSuspendCount'},{type,{2473,53},non_neg_integer,[]}]}]}]}]}]},{type,{2474,7},tuple,[{atom,{2474,8},total_heap_size},{ann_type,{2474,25},[{var,{2474,25},'Size'},{type,{2474,33},non_neg_integer,[]}]}]},{type,{2475,7},tuple,[{atom,{2475,8},trace},{ann_type,{2475,15},[{var,{2475,15},'InternalTraceFlags'},{type,{2475,37},non_neg_integer,[]}]}]},{type,{2476,7},tuple,[{atom,{2476,8},trap_exit},{ann_type,{2476,19},[{var,{2476,19},'Boolean'},{type,{2476,30},boolean,[]}]}]}]},[]}},{system_monitor_option,0} => {attribute,{284,2},type,{system_monitor_option,{type,{285,7},union,[{atom,{285,7},busy_port},{atom,{286,7},busy_dist_port},{type,{287,7},tuple,[{atom,{287,8},long_gc},{type,{287,19},non_neg_integer,[]}]},{type,{288,7},tuple,[{atom,{288,8},long_schedule},{type,{288,25},non_neg_integer,[]}]},{type,{289,7},tuple,[{atom,{289,8},large_heap},{type,{289,22},non_neg_integer,[]}]}]},[]}},{process_info_item,0} => {attribute,{2396,2},type,{process_info_item,{type,{2397,7},union,[{atom,{2397,7},backtrace},{atom,{2398,7},binary},{atom,{2399,7},catchlevel},{atom,{2400,7},current_function},{atom,{2401,7},current_location},{atom,{2402,7},current_stacktrace},{atom,{2403,7},dictionary},{atom,{2404,7},error_handler},{atom,{2405,7},garbage_collection},{atom,{2406,7},garbage_collection_info},{atom,{2407,7},group_leader},{atom,{2408,7},heap_size},{atom,{2409,7},initial_call},{atom,{2410,7},links},{atom,{2411,7},last_calls},{atom,{2412,7},memory},{atom,{2413,7},message_queue_len},{atom,{2414,7},messages},{atom,{2415,7},min_heap_size},{atom,{2416,7},min_bin_vheap_size},{atom,{2417,7},monitored_by},{atom,{2418,7},monitors},{atom,{2419,7},message_queue_data},{atom,{2420,7},priority},{atom,{2421,7},reductions},{atom,{2422,7},registered_name},{atom,{2423,7},sequential_trace_token},{atom,{2424,7},stack_size},{atom,{2425,7},status},{atom,{2426,7},suspending},{atom,{2427,7},total_heap_size},{atom,{2428,7},trace},{atom,{2429,7},trap_exit}]},[]}},{registered_process_identifier,0} => {attribute,{1397,2},type,{registered_process_identifier,{type,{1397,42},union,[{user_type,{1397,42},registered_name,[]},{type,{1397,62},tuple,[{user_type,{1397,63},registered_name,[]},{type,{1397,82},node,[]}]}]},[]}},{monitor_process_identifier,0} => {attribute,{1398,2},type,{monitor_process_identifier,{type,{1398,39},union,[{type,{1398,39},pid,[]},{user_type,{1398,47},registered_process_identifier,[]}]},[]}},{stack_item,0} => {attribute,{2478,2},type,{stack_item,{type,{2479,9},tuple,[{ann_type,{2479,10},[{var,{2479,10},'Module'},{type,{2479,20},module,[]}]},{ann_type,{2480,10},[{var,{2480,10},'Function'},{type,{2480,22},atom,[]}]},{ann_type,{2481,10},[{var,{2481,10},'Arity'},{type,{2481,19},union,[{type,{2481,19},arity,[]},{ann_type,{2481,30},[{var,{2481,30},'Args'},{type,{2481,38},list,[{type,{2481,39},term,[]}]}]}]}]},{ann_type,{2482,10},[{var,{2482,10},'Location'},{type,{2482,22},list,[{type,{2482,23},union,[{type,{2482,23},tuple,[{atom,{2482,24},file},{ann_type,{2482,30},[{var,{2482,30},'Filename'},{type,{2482,42},string,[]}]}]},{type,{2483,23},tuple,[{atom,{2483,24},line},{ann_type,{2483,30},[{var,{2483,30},'Line'},{type,{2483,38},pos_integer,[]}]}]}]}]}]}]},[]}},{trace_pattern_mfa,0} => {attribute,{2708,2},type,{trace_pattern_mfa,{type,{2709,7},union,[{type,{2709,7},tuple,[{type,{2709,8},atom,[]},{type,{2709,15},atom,[]},{type,{2709,22},union,[{type,{2709,22},arity,[]},{atom,{2709,32},'_'}]}]},{atom,{2709,39},on_load}]},[]}},{info_list,0} => {attribute,{2770,2},type,{info_list,{type,{2770,22},nil,[]},[]}},{bitstring_list,0} => {attribute,{295,2},type,{bitstring_list,{type,{296,7},maybe_improper_list,[{type,{296,27},union,[{type,{296,27},byte,[]},{type,{296,36},bitstring,[]},{user_type,{296,50},bitstring_list,[]}]},{type,{296,68},union,[{type,{296,68},bitstring,[]},{type,{296,82},nil,[]}]}]},[]}},{raise_stacktrace,0} => {attribute,{291,2},type,{raise_stacktrace,{type,{292,7},list,[{type,{292,8},union,[{type,{292,8},tuple,[{type,{292,9},module,[]},{type,{292,19},atom,[]},{type,{292,27},union,[{type,{292,27},arity,[]},{type,{292,37},list,[{type,{292,38},term,[]}]}]}]},{type,{293,8},tuple,[{type,{293,9},function,[]},{type,{293,21},union,[{type,{293,21},arity,[]},{type,{293,31},list,[{type,{293,32},term,[]}]}]}]}]}]},[]}},{registered_name,0} => {attribute,{1396,2},type,{registered_name,{type,{1396,28},atom,[]},[]}},{dist_handle,0} => {attribute,{126,2},opaque,{dist_handle,{type,{126,26},atom,[]},[]}},{stacktrace,0} => {attribute,{93,2},type,{stacktrace,{type,{93,23},list,[{type,{93,24},union,[{type,{93,24},tuple,[{type,{93,25},module,[]},{type,{93,35},atom,[]},{type,{93,43},union,[{type,{93,43},arity,[]},{type,{93,53},list,[{type,{93,54},term,[]}]}]},{type,{94,25},list,[{user_type,{94,26},stacktrace_extrainfo,[]}]}]},{type,{95,24},tuple,[{type,{95,25},function,[]},{type,{95,37},union,[{type,{95,37},arity,[]},{type,{95,47},list,[{type,{95,48},term,[]}]}]},{type,{95,57},list,[{user_type,{95,58},stacktrace_extrainfo,[]}]}]}]}]},[]}},{ext_iovec,0} => {attribute,{98,2},type,{ext_iovec,{user_type,{98,22},iovec,[]},[]}},{iovec,0} => {attribute,{129,2},type,{iovec,{type,{129,18},list,[{type,{129,19},binary,[]}]},[]}},{monitor_port_identifier,0} => {attribute,{1399,2},type,{monitor_port_identifier,{type,{1399,36},union,[{type,{1399,36},port,[]},{user_type,{1399,45},registered_name,[]}]},[]}},{time_unit,0} => {attribute,{103,2},type,{time_unit,{type,{104,2},union,[{type,{104,2},pos_integer,[]},{atom,{105,9},second},{atom,{106,9},millisecond},{atom,{107,9},microsecond},{atom,{108,9},nanosecond},{atom,{109,9},native},{atom,{110,9},perf_counter},{user_type,{111,9},deprecated_time_unit,[]}]},[]}},{level_entry,0} => {attribute,{2762,2},type,{level_entry,{type,{2763,9},union,[{type,{2763,9},tuple,[{ann_type,{2763,10},[{var,{2763,10},'LevelTag'},{user_type,{2763,22},level_tag,[]}]},{ann_type,{2763,35},[{var,{2763,35},'SubLevel'},{user_type,{2763,47},sub_level,[]}]}]},{type,{2764,9},tuple,[{ann_type,{2764,10},[{var,{2764,10},'LevelTag'},{user_type,{2764,22},level_tag,[]}]},{ann_type,{2765,10},[{var,{2765,10},'InfoList'},{user_type,{2765,22},info_list,[]}]},{ann_type,{2766,10},[{var,{2766,10},'SubLevel'},{user_type,{2766,22},sub_level,[]}]}]}]},[]}},{stacktrace_extrainfo,0} => {attribute,{88,2},type,{stacktrace_extrainfo,{type,{89,9},union,[{type,{89,9},tuple,[{atom,{89,10},line},{type,{89,16},pos_integer,[]}]},{type,{90,9},tuple,[{atom,{90,10},file},{remote_type,{90,16},[{atom,{90,16},unicode},{atom,{90,24},chardata},[]]}]},{type,{91,9},tuple,[{atom,{91,10},error_info},{type,{91,22},map,[{type,{91,32},map_field_assoc,[{atom,{91,25},module},{type,{91,35},module,[]}]},{type,{91,54},map_field_assoc,[{atom,{91,45},function},{type,{91,57},atom,[]}]},{type,{91,71},map_field_assoc,[{atom,{91,65},cause},{type,{91,74},term,[]}]}]}]},{type,{92,9},tuple,[{type,{92,10},atom,[]},{type,{92,18},term,[]}]}]},[]}},{trace_flag,0} => {attribute,{298,2},type,{trace_flag,{type,{299,7},union,[{atom,{299,7},all},{atom,{300,7},send},{atom,{301,7},'receive'},{atom,{302,7},procs},{atom,{303,7},ports},{atom,{304,7},call},{atom,{305,7},arity},{atom,{306,7},return_to},{atom,{307,7},silent},{atom,{308,7},running},{atom,{309,7},exiting},{atom,{310,7},running_procs},{atom,{311,7},running_ports},{atom,{312,7},garbage_collection},{atom,{313,7},timestamp},{atom,{314,7},cpu_timestamp},{atom,{315,7},monotonic_timestamp},{atom,{316,7},strict_monotonic_timestamp},{atom,{317,7},set_on_spawn},{atom,{318,7},set_on_first_spawn},{atom,{319,7},set_on_link},{atom,{320,7},set_on_first_link},{type,{321,7},tuple,[{atom,{321,8},tracer},{type,{321,16},union,[{type,{321,16},pid,[]},{type,{321,24},port,[]}]}]},{type,{322,7},tuple,[{atom,{322,8},tracer},{type,{322,16},module,[]},{type,{322,26},term,[]}]}]},[]}},{scheduler_bind_type,0} => {attribute,{2602,2},type,{scheduler_bind_type,{type,{2603,7},union,[{atom,{2603,7},no_node_processor_spread},{atom,{2604,7},no_node_thread_spread},{atom,{2605,7},no_spread},{atom,{2606,7},processor_spread},{atom,{2607,7},spread},{atom,{2608,7},thread_spread},{atom,{2609,7},thread_no_node_processor_spread},{atom,{2610,7},unbound}]},[]}},{module_info_key,0} => {attribute,{2126,2},type,{module_info_key,{type,{2126,28},union,[{atom,{2126,28},attributes},{atom,{2126,41},compile},{atom,{2126,51},exports},{atom,{2126,61},functions},{atom,{2126,73},md5},{atom,{2127,28},module},{atom,{2127,37},native},{atom,{2127,46},native_addresses},{atom,{2127,65},nifs}]},[]}},{fun_info_item,0} => {attribute,{257,2},type,{fun_info_item,{type,{258,7},union,[{atom,{258,7},arity},{atom,{259,7},env},{atom,{260,7},index},{atom,{261,7},name},{atom,{262,7},module},{atom,{263,7},new_index},{atom,{264,7},new_uniq},{atom,{265,7},pid},{atom,{266,7},type},{atom,{267,7},uniq}]},[]}},{nif_resource,0} => {attribute,{123,2},opaque,{nif_resource,{type,{123,27},reference,[]},[]}},{level_tag,0} => {attribute,{2767,2},type,{level_tag,{type,{2767,22},union,[{atom,{2767,22},core},{atom,{2767,29},node},{atom,{2767,36},processor},{atom,{2767,48},thread}]},[]}},{memory_type,0} => {attribute,{3994,2},type,{memory_type,{type,{3994,24},union,[{atom,{3994,24},total},{atom,{3994,34},processes},{atom,{3994,48},processes_used},{atom,{3994,67},system},{atom,{3995,24},atom},{atom,{3995,33},atom_used},{atom,{3995,47},binary},{atom,{3995,58},code},{atom,{3995,67},ets}]},[]}},{match_variable,0} => {attribute,{2707,2},type,{match_variable,{type,{2707,27},atom,[]},[]}},{timestamp,0} => {attribute,{99,2},type,{timestamp,{type,{99,22},tuple,[{ann_type,{99,23},[{var,{99,23},'MegaSecs'},{type,{99,35},non_neg_integer,[]}]},{ann_type,{100,23},[{var,{100,23},'Secs'},{type,{100,31},non_neg_integer,[]}]},{ann_type,{101,23},[{var,{101,23},'MicroSecs'},{type,{101,36},non_neg_integer,[]}]}]},[]}},{trace_info_item_result,0} => {attribute,{324,2},type,{trace_info_item_result,{type,{325,8},union,[{type,{325,8},tuple,[{atom,{325,9},traced},{type,{325,17},union,[{atom,{325,17},global},{atom,{325,26},local},{atom,{325,34},false},{atom,{325,42},undefined}]}]},{type,{326,8},tuple,[{atom,{326,9},match_spec},{type,{326,21},union,[{user_type,{326,21},trace_match_spec,[]},{atom,{326,42},false},{atom,{326,50},undefined}]}]},{type,{327,8},tuple,[{atom,{327,9},meta},{type,{327,15},union,[{type,{327,15},pid,[]},{type,{327,23},port,[]},{atom,{327,32},false},{atom,{327,40},undefined},{type,{327,52},nil,[]}]}]},{type,{328,8},tuple,[{atom,{328,9},meta},{type,{328,15},module,[]},{type,{328,25},term,[]}]},{type,{329,8},tuple,[{atom,{329,9},meta_match_spec},{type,{329,26},union,[{user_type,{329,26},trace_match_spec,[]},{atom,{329,47},false},{atom,{329,55},undefined}]}]},{type,{330,8},tuple,[{atom,{330,9},call_count},{type,{330,21},union,[{type,{330,21},non_neg_integer,[]},{type,{330,41},boolean,[]},{atom,{330,53},undefined}]}]},{type,{331,8},tuple,[{atom,{331,9},call_time},{type,{331,20},union,[{type,{331,20},list,[{type,{331,21},tuple,[{type,{331,22},pid,[]},{type,{331,29},non_neg_integer,[]},{type,{332,8},non_neg_integer,[]},{type,{332,27},non_neg_integer,[]}]}]},{type,{332,49},boolean,[]},{atom,{332,61},undefined}]}]}]},[]}},{system_profile_option,0} => {attribute,{275,2},type,{system_profile_option,{type,{276,7},union,[{atom,{276,7},exclusive},{atom,{277,7},runnable_ports},{atom,{278,7},runnable_procs},{atom,{279,7},scheduler},{atom,{280,7},timestamp},{atom,{281,7},monotonic_timestamp},{atom,{282,7},strict_monotonic_timestamp}]},[]}},{priority_level,0} => {attribute,{2353,2},type,{priority_level,{type,{2354,7},union,[{atom,{2354,7},low},{atom,{2354,13},normal},{atom,{2354,22},high},{atom,{2354,29},max}]},[]}},{sub_level,0} => {attribute,{2768,2},type,{sub_level,{type,{2768,22},union,[{type,{2768,22},list,[{ann_type,{2768,23},[{var,{2768,23},'LevelEntry'},{user_type,{2768,37},level_entry,[]}]}]},{ann_type,{2769,23},[{var,{2769,23},'LogicalCpuId'},{type,{2769,39},tuple,[{atom,{2769,40},logical},{type,{2769,49},non_neg_integer,[]}]}]}]},[]}},{deprecated_time_unit,0} => {attribute,{114,2},type,{deprecated_time_unit,{type,{115,7},union,[{atom,{115,7},seconds},{atom,{116,9},milli_seconds},{atom,{117,9},micro_seconds},{atom,{118,9},nano_seconds}]},[]}},{dst,0} => {attribute,{3460,2},type,{dst,{type,{3460,16},union,[{type,{3460,16},pid,[]},{type,{3461,16},reference,[]},{type,{3462,16},port,[]},{ann_type,{3463,17},[{var,{3463,17},'RegName'},{type,{3463,28},atom,[]}]},{type,{3464,16},tuple,[{ann_type,{3464,17},[{var,{3464,17},'RegName'},{type,{3464,28},atom,[]}]},{ann_type,{3464,36},[{var,{3464,36},'Node'},{type,{3464,44},node,[]}]}]}]},[]}},{spawn_opt_option,0} => {attribute,{2996,2},type,{spawn_opt_option,{type,{2997,2},union,[{atom,{2997,2},link},{atom,{2998,9},monitor},{type,{2999,9},tuple,[{atom,{2999,10},monitor},{ann_type,{2999,19},[{var,{2999,19},'MonitorOpts'},{type,{2999,34},list,[{user_type,{2999,35},monitor_option,[]}]}]}]},{type,{3000,9},tuple,[{atom,{3000,10},priority},{ann_type,{3000,20},[{var,{3000,20},'Level'},{user_type,{3000,29},priority_level,[]}]}]},{type,{3001,9},tuple,[{atom,{3001,10},fullsweep_after},{ann_type,{3001,27},[{var,{3001,27},'Number'},{type,{3001,37},non_neg_integer,[]}]}]},{type,{3002,9},tuple,[{atom,{3002,10},min_heap_size},{ann_type,{3002,25},[{var,{3002,25},'Size'},{type,{3002,33},non_neg_integer,[]}]}]},{type,{3003,9},tuple,[{atom,{3003,10},min_bin_vheap_size},{ann_type,{3003,30},[{var,{3003,30},'VSize'},{type,{3003,39},non_neg_integer,[]}]}]},{type,{3004,9},tuple,[{atom,{3004,10},max_heap_size},{ann_type,{3004,25},[{var,{3004,25},'Size'},{user_type,{3004,33},max_heap_size,[]}]}]},{type,{3005,9},tuple,[{atom,{3005,10},message_queue_data},{ann_type,{3005,30},[{var,{3005,30},'MQD'},{user_type,{3005,37},message_queue_data,[]}]}]}]},[]}},{seq_trace_info_returns,0} => {attribute,{269,2},type,{seq_trace_info_returns,{type,{270,7},union,[{type,{270,7},tuple,[{type,{270,9},union,[{atom,{270,9},send},{atom,{270,18},'receive'},{atom,{270,30},print},{atom,{270,40},timestamp},{atom,{270,54},monotonic_timestamp},{atom,{270,78},strict_monotonic_timestamp}]},{type,{270,108},boolean,[]}]},{type,{271,7},tuple,[{atom,{271,9},label},{type,{271,18},term,[]}]},{type,{272,7},tuple,[{atom,{272,9},serial},{type,{272,19},tuple,[{type,{272,21},non_neg_integer,[]},{type,{272,40},non_neg_integer,[]}]}]},{type,{273,7},nil,[]}]},[]}}}},[{{function,'!',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,33,39,47,50>>],hidden,#{}},{{function,'*',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,42,39,47,50>>],hidden,#{}},{{function,'+',1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,43,39,47,49>>],hidden,#{}},{{function,'+',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,43,39,47,50>>],hidden,#{}},{{function,'++',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,43,43,39,47,50>>],hidden,#{}},{{function,'-',1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,45,39,47,49>>],hidden,#{}},{{function,'-',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,45,39,47,50>>],hidden,#{}},{{function,'--',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,45,45,39,47,50>>],hidden,#{}},{{function,'/',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,47,39,47,50>>],hidden,#{}},{{function,'/=',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,47,61,39,47,50>>],hidden,#{}},{{function,'<',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,60,39,47,50>>],hidden,#{}},{{function,'=/=',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,61,47,61,39,47,50>>],hidden,#{}},{{function,'=:=',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,61,58,61,39,47,50>>],hidden,#{}},{{function,'=<',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,61,60,39,47,50>>],hidden,#{}},{{function,'==',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,61,61,39,47,50>>],hidden,#{}},{{function,'>',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,62,39,47,50>>],hidden,#{}},{{function,'>=',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,62,61,39,47,50>>],hidden,#{}},{{function,alloc_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<97,108,108,111,99,95,105,110,102,111,47,49>>],hidden,#{}},{{function,alloc_sizes,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<97,108,108,111,99,95,115,105,122,101,115,47,49>>],hidden,#{}},{{function,'and',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,97,110,100,39,47,50>>],hidden,#{}},{{function,append,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<97,112,112,101,110,100,47,50>>],hidden,#{}},{{function,'band',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,98,97,110,100,39,47,50>>],hidden,#{}},{{function,'bnot',1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,98,110,111,116,39,47,49>>],hidden,#{}},{{function,'bor',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,98,111,114,39,47,50>>],hidden,#{}},{{function,'bsl',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,98,115,108,39,47,50>>],hidden,#{}},{{function,'bsr',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,98,115,114,39,47,50>>],hidden,#{}},{{function,'bxor',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,98,120,111,114,39,47,50>>],hidden,#{}},{{function,call_on_load_function,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<99,97,108,108,95,111,110,95,108,111,97,100,95,102,117,110,99,116,105,111,110,47,49>>],hidden,#{}},{{function,delay_trap,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,101,108,97,121,95,116,114,97,112,47,50>>],hidden,#{}},{{function,display_nl,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,105,115,112,108,97,121,95,110,108,47,48>>],hidden,#{}},{{function,display_string,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,105,115,112,108,97,121,95,115,116,114,105,110,103,47,49>>],hidden,#{}},{{function,dist_get_stat,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,105,115,116,95,103,101,116,95,115,116,97,116,47,49>>],hidden,#{}},{{function,'div',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,100,105,118,39,47,50>>],hidden,#{}},{{function,dmonitor_node,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,109,111,110,105,116,111,114,95,110,111,100,101,47,51>>],hidden,#{}},{{function,dt_append_vm_tag_data,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,116,95,97,112,112,101,110,100,95,118,109,95,116,97,103,95,100,97,116,97,47,49>>],hidden,#{}},{{function,dt_get_tag,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,116,95,103,101,116,95,116,97,103,47,48>>],hidden,#{}},{{function,dt_get_tag_data,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,116,95,103,101,116,95,116,97,103,95,100,97,116,97,47,48>>],hidden,#{}},{{function,dt_prepend_vm_tag_data,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,116,95,112,114,101,112,101,110,100,95,118,109,95,116,97,103,95,100,97,116,97,47,49>>],hidden,#{}},{{function,dt_put_tag,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,116,95,112,117,116,95,116,97,103,47,49>>],hidden,#{}},{{function,dt_restore_tag,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,116,95,114,101,115,116,111,114,101,95,116,97,103,47,49>>],hidden,#{}},{{function,dt_spread_tag,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<100,116,95,115,112,114,101,97,100,95,116,97,103,47,49>>],hidden,#{}},{{function,exit_signal,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<101,120,105,116,95,115,105,103,110,97,108,47,50>>],hidden,#{}},{{function,finish_after_on_load,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<102,105,110,105,115,104,95,97,102,116,101,114,95,111,110,95,108,111,97,100,47,50>>],hidden,#{}},{{function,finish_loading,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<102,105,110,105,115,104,95,108,111,97,100,105,110,103,47,49>>],hidden,#{}},{{function,format_cpu_topology,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<102,111,114,109,97,116,95,99,112,117,95,116,111,112,111,108,111,103,121,47,49>>],hidden,#{}},{{function,fun_info_mfa,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<102,117,110,95,105,110,102,111,95,109,102,97,47,49>>],hidden,#{}},{{function,garbage_collect_message_area,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,95,109,101,115,115,97,103,101,95,97,114,101,97,47,48>>],hidden,#{}},{{function,gather_gc_info_result,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<103,97,116,104,101,114,95,103,99,95,105,110,102,111,95,114,101,115,117,108,116,47,49>>],hidden,#{}},{{function,get_module_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<103,101,116,95,109,111,100,117,108,101,95,105,110,102,111,47,49>>],hidden,#{}},{{function,get_module_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<103,101,116,95,109,111,100,117,108,101,95,105,110,102,111,47,50>>],hidden,#{}},{{function,has_prepared_code_on_load,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<104,97,115,95,112,114,101,112,97,114,101,100,95,99,111,100,101,95,111,110,95,108,111,97,100,47,49>>],hidden,#{}},{{function,make_fun,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<109,97,107,101,95,102,117,110,47,51>>],hidden,#{}},{{function,'not',1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,110,111,116,39,47,49>>],hidden,#{}},{{function,'or',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,111,114,39,47,50>>],hidden,#{}},{{function,port_call,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<112,111,114,116,95,99,97,108,108,47,50>>],hidden,#{}},{{function,port_get_data,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<112,111,114,116,95,103,101,116,95,100,97,116,97,47,49>>],hidden,#{}},{{function,port_set_data,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<112,111,114,116,95,115,101,116,95,100,97,116,97,47,50>>],hidden,#{}},{{function,posixtime_to_universaltime,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<112,111,115,105,120,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,47,49>>],hidden,#{}},{{function,prepare_loading,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<112,114,101,112,97,114,101,95,108,111,97,100,105,110,103,47,50>>],hidden,#{}},{{function,'rem',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,114,101,109,39,47,50>>],hidden,#{}},{{function,seq_trace,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,101,113,95,116,114,97,99,101,47,50>>],hidden,#{}},{{function,seq_trace_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,101,113,95,116,114,97,99,101,95,105,110,102,111,47,49>>],hidden,#{}},{{function,seq_trace_print,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,101,113,95,116,114,97,99,101,95,112,114,105,110,116,47,49>>],hidden,#{}},{{function,seq_trace_print,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,101,113,95,116,114,97,99,101,95,112,114,105,110,116,47,50>>],hidden,#{}},{{function,set_cpu_topology,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,101,116,95,99,112,117,95,116,111,112,111,108,111,103,121,47,49>>],hidden,#{}},{{function,setnode,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,101,116,110,111,100,101,47,50>>],hidden,#{}},{{function,setnode,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,101,116,110,111,100,101,47,51>>],hidden,#{}},{{function,subtract,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<115,117,98,116,114,97,99,116,47,50>>],hidden,#{}},{{function,universaltime_to_posixtime,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<117,110,105,118,101,114,115,97,108,116,105,109,101,95,116,111,95,112,111,115,105,120,116,105,109,101,47,49>>],hidden,#{}},{{function,'xor',2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,0}],[<<39,120,111,114,39,47,50>>],hidden,#{}},{{function,abs,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2103}],[<<97,98,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,111,114,32,102,108,111,97,116,32,116,104,97,116,32,105,115,32,116,104,101,32,97,114,105,116,104,109,101,116,105,99,97,108,32,97,98,115,111,108,117,116,101,32,118,97,108,117,101,32,111,102,32>>,{code,[],[<<70,108,111,97,116>>]},<<32,111,114,32>>,{code,[],[<<73,110,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,98,115,40,45,51,46,51,51,41,46,10,51,46,51,51,10,62,32,97,98,115,40,45,51,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,52>>,signature => [{attribute,{2103,2},spec,{{abs,1},[{type,{2103,10},bounded_fun,[{type,{2103,10},'fun',[{type,{2103,10},product,[{var,{2103,11},'Float'}]},{type,{2103,21},float,[]}]},[{type,{2104,7},constraint,[{atom,{2104,7},is_subtype},[{var,{2104,7},'Float'},{type,{2104,16},float,[]}]]}]]},{type,{2105,10},bounded_fun,[{type,{2105,10},'fun',[{type,{2105,10},product,[{var,{2105,11},'Int'}]},{type,{2105,19},non_neg_integer,[]}]},[{type,{2106,7},constraint,[{atom,{2106,7},is_subtype},[{var,{2106,7},'Int'},{type,{2106,14},integer,[]}]]}]]}]}}]}},{{function,adler32,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,360}],[<<97,100,108,101,114,51,50,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,117,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,97,100,108,101,114,51,50,32,99,104,101,99,107,115,117,109,32,102,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,49>>,signature => [{attribute,{360,2},spec,{{erlang,adler32,1},[{type,{360,21},bounded_fun,[{type,{360,21},'fun',[{type,{360,21},product,[{var,{360,22},'Data'}]},{type,{360,31},non_neg_integer,[]}]},[{type,{361,7},constraint,[{atom,{361,7},is_subtype},[{var,{361,7},'Data'},{type,{361,15},iodata,[]}]]}]]}]}}]}},{{function,adler32,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,366}],[<<97,100,108,101,114,51,50,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,110,116,105,110,117,101,115,32,99,111,109,112,117,116,105,110,103,32,116,104,101,32,97,100,108,101,114,51,50,32,99,104,101,99,107,115,117,109,32,98,121,32,99,111,109,98,105,110,105,110,103,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,104,101,99,107,115,117,109,44,32>>,{code,[],[<<79,108,100,65,100,108,101,114>>]},<<44,32,119,105,116,104,32,116,104,101,32,99,104,101,99,107,115,117,109,32,111,102,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,88,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<89>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,91,68,97,116,97,49,44,68,97,116,97,50,93,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,48>>,signature => [{attribute,{366,2},spec,{{erlang,adler32,2},[{type,{366,21},bounded_fun,[{type,{366,21},'fun',[{type,{366,21},product,[{var,{366,22},'OldAdler'},{var,{366,32},'Data'}]},{type,{366,41},non_neg_integer,[]}]},[{type,{367,7},constraint,[{atom,{367,7},is_subtype},[{var,{367,7},'OldAdler'},{type,{367,19},non_neg_integer,[]}]]},{type,{368,7},constraint,[{atom,{368,7},is_subtype},[{var,{368,7},'Data'},{type,{368,15},iodata,[]}]]}]]}]}}]}},{{function,adler32_combine,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,373}],[<<97,100,108,101,114,51,50,95,99,111,109,98,105,110,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32,116,119,111,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,117,116,101,100,32,97,100,108,101,114,51,50,32,99,104,101,99,107,115,117,109,115,46,32,84,104,105,115,32,99,111,109,112,117,116,97,116,105,111,110,32,114,101,113,117,105,114,101,115,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,100,97,116,97,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32,115,101,99,111,110,100,32,99,104,101,99,107,115,117,109,32,116,111,32,98,101,32,107,110,111,119,110,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,49,41,44,10,90,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,89,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<90>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,40,68,97,116,97,50,41,44,10,90,32,61,32,101,114,108,97,110,103,58,97,100,108,101,114,51,50,95,99,111,109,98,105,110,101,40,88,44,89,44,105,111,108,105,115,116,95,115,105,122,101,40,68,97,116,97,50,41,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,55>>,signature => [{attribute,{373,2},spec,{{erlang,adler32_combine,3},[{type,{373,29},bounded_fun,[{type,{373,29},'fun',[{type,{373,29},product,[{var,{373,30},'FirstAdler'},{var,{373,42},'SecondAdler'},{var,{373,55},'SecondSize'}]},{type,{373,70},non_neg_integer,[]}]},[{type,{374,7},constraint,[{atom,{374,7},is_subtype},[{var,{374,7},'FirstAdler'},{type,{374,21},non_neg_integer,[]}]]},{type,{375,7},constraint,[{atom,{375,7},is_subtype},[{var,{375,7},'SecondAdler'},{type,{375,22},non_neg_integer,[]}]]},{type,{376,7},constraint,[{atom,{376,7},is_subtype},[{var,{376,7},'SecondSize'},{type,{376,21},non_neg_integer,[]}]]}]]}]}}]}},{{function,alias,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,766}],[<<97,108,105,97,115,47,49>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,54>>,equiv => {function,alias,0},signature => [{attribute,{766,2},spec,{{alias,1},[{type,{766,12},bounded_fun,[{type,{766,12},'fun',[{type,{766,12},product,[{var,{766,13},'Opts'}]},{var,{766,22},'Alias'}]},[{type,{767,7},constraint,[{atom,{767,7},is_subtype},[{var,{767,7},'Alias'},{type,{767,16},reference,[]}]]},{type,{768,7},constraint,[{atom,{768,7},is_subtype},[{var,{768,7},'Opts'},{type,{768,15},list,[{type,{768,16},union,[{atom,{768,16},explicit_unalias},{atom,{768,37},reply}]}]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,alias,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,760}],[<<97,108,105,97,115,47,48>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,32,97,110,32,97,108,105,97,115,32,119,104,105,99,104,32,99,97,110,32,98,101,32,117,115,101,100,32,119,104,101,110,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,97,108,105,97,115,46,32,87,104,101,110,32,116,104,101,32,97,108,105,97,115,32,104,97,115,32,98,101,101,110,32,100,101,97,99,116,105,118,97,116,101,100,44,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,117,115,105,110,103,32,116,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,100,114,111,112,112,101,100,46,32,65,110,32,97,108,105,97,115,32,99,97,110,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,97,108,105,97,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,97,108,105,97,115,47,49>>]}]},<<46,32,67,117,114,114,101,110,116,108,121,32,97,118,97,105,108,97,98,108,101,32,111,112,116,105,111,110,115,32,102,111,114,32>>,{code,[],[<<97,108,105,97,115,47,49>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,112,108,105,99,105,116,95,117,110,97,108,105,97,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,99,97,110,32,111,110,108,121,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46,32,84,104,105,115,32,105,115,32,97,108,115,111,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,117,114,32,105,102,32,110,111,32,111,112,116,105,111,110,115,32,97,114,101,32,112,97,115,115,101,100,32,111,114,32,105,102,32>>,{code,[],[<<97,108,105,97,115,47,48>>]},<<32,105,115,32,99,97,108,108,101,100,46>>]}]},{dt,[],[{code,[],[<<114,101,112,108,121>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,119,104,101,110,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,115,101,110,116,32,118,105,97,32,116,104,101,32,97,108,105,97,115,32,105,115,32,114,101,99,101,105,118,101,100,46,32,84,104,101,32,97,108,105,97,115,32,99,97,110,32,97,108,115,111,32,115,116,105,108,108,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<115,101,114,118,101,114,40,41,32,45,62,10,32,32,32,32,114,101,99,101,105,118,101,10,32,32,32,32,32,32,32,32,123,114,101,113,117,101,115,116,44,32,65,108,105,97,115,82,101,113,73,100,44,32,82,101,113,117,101,115,116,125,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,82,101,115,117,108,116,32,61,32,112,101,114,102,111,114,109,95,114,101,113,117,101,115,116,40,82,101,113,117,101,115,116,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,65,108,105,97,115,82,101,113,73,100,32,33,32,123,114,101,112,108,121,44,32,65,108,105,97,115,82,101,113,73,100,44,32,82,101,115,117,108,116,125,10,32,32,32,32,101,110,100,44,10,32,32,32,32,115,101,114,118,101,114,40,41,46,10,10,99,108,105,101,110,116,40,83,101,114,118,101,114,80,105,100,44,32,82,101,113,117,101,115,116,41,32,45,62,10,32,32,32,32,65,108,105,97,115,82,101,113,73,100,32,61,32,97,108,105,97,115,40,91,114,101,112,108,121,93,41,44,10,32,32,32,32,83,101,114,118,101,114,80,105,100,32,33,32,123,114,101,113,117,101,115,116,44,32,65,108,105,97,115,82,101,113,73,100,44,32,82,101,113,117,101,115,116,125,44,10,32,32,32,32,37,37,32,65,108,105,97,115,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,105,102,32,119,101,32,114,101,99,101,105,118,101,32,97,32,114,101,112,108,121,10,32,32,32,32,37,37,32,115,105,110,99,101,32,119,101,32,117,115,101,100,32,116,104,101,32,39,114,101,112,108,121,39,32,111,112,116,105,111,110,46,46,46,10,32,32,32,32,114,101,99,101,105,118,101,10,32,32,32,32,32,32,32,32,123,114,101,112,108,121,44,32,65,108,105,97,115,82,101,113,73,100,44,32,82,101,115,117,108,116,125,32,45,62,32,82,101,115,117,108,116,10,32,32,32,32,97,102,116,101,114,32,53,48,48,48,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,117,110,97,108,105,97,115,40,65,108,105,97,115,82,101,113,73,100,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,37,37,32,70,108,117,115,104,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,105,110,32,99,97,115,101,32,116,104,101,32,114,101,112,108,121,32,97,114,114,105,118,101,100,10,32,32,32,32,32,32,32,32,32,32,32,32,37,37,32,106,117,115,116,32,98,101,102,111,114,101,32,116,104,101,32,97,108,105,97,115,32,119,97,115,32,100,101,97,99,116,105,118,97,116,101,100,46,46,46,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,99,101,105,118,101,32,123,114,101,112,108,121,44,32,65,108,105,97,115,82,101,113,73,100,44,32,82,101,115,117,108,116,125,32,45,62,32,82,101,115,117,108,116,10,32,32,32,32,32,32,32,32,32,32,32,32,97,102,116,101,114,32,48,32,45,62,32,101,120,105,116,40,116,105,109,101,111,117,116,41,10,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,10,32,32,32,32,101,110,100,46,10,9>>]}]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,98,111,116,104,32,116,104,101,32,115,101,114,118,101,114,32,97,110,100,32,116,104,101,32,99,108,105,101,110,116,32,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,32,109,117,115,116,32,98,101,32,101,120,101,99,117,116,105,110,103,32,111,110,32,97,116,32,108,101,97,115,116,32,79,84,80,32,50,52,32,115,121,115,116,101,109,115,32,105,110,32,111,114,100,101,114,32,102,111,114,32,116,104,105,115,32,116,111,32,119,111,114,107,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,112,114,111,99,101,115,115,32,97,108,105,97,115,101,115,32,115,101,101,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,112,114,111,99,101,115,115,45,97,108,105,97,115,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{i,[],[<<80,114,111,99,101,115,115,32,65,108,105,97,115,101,115>>]}]},<<32,115,101,99,116,105,111,110,32,111,102,32,116,104,101,32>>,{i,[],[<<69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,54>>,signature => [{attribute,{760,2},spec,{{alias,0},[{type,{760,12},bounded_fun,[{type,{760,12},'fun',[{type,{760,12},product,[]},{var,{760,18},'Alias'}]},[{type,{761,7},constraint,[{atom,{761,7},is_subtype},[{var,{761,7},'Alias'},{type,{761,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,append_element,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,381}],[<<97,112,112,101,110,100,95,101,108,101,109,101,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,101,119,32,116,117,112,108,101,32,116,104,97,116,32,104,97,115,32,111,110,101,32,101,108,101,109,101,110,116,32,109,111,114,101,32,116,104,97,110,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<44,32,97,110,100,32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,105,110,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<32,102,111,108,108,111,119,101,100,32,98,121,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,115,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,46,32,83,101,109,97,110,116,105,99,97,108,108,121,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<108,105,115,116,95,116,111,95,116,117,112,108,101,40,116,117,112,108,101,95,116,111,95,108,105,115,116,40,84,117,112,108,101,49,41,32,43,43,32,91,84,101,114,109,93,41>>]},<<44,32,98,117,116,32,109,117,99,104,32,102,97,115,116,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,97,112,112,101,110,100,95,101,108,101,109,101,110,116,40,123,111,110,101,44,32,116,119,111,125,44,32,116,104,114,101,101,41,46,10,123,111,110,101,44,116,119,111,44,116,104,114,101,101,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,57,53>>,signature => [{attribute,{381,2},spec,{{erlang,append_element,2},[{type,{381,28},bounded_fun,[{type,{381,28},'fun',[{type,{381,28},product,[{var,{381,29},'Tuple1'},{var,{381,37},'Term'}]},{var,{381,46},'Tuple2'}]},[{type,{382,7},constraint,[{atom,{382,7},is_subtype},[{var,{382,7},'Tuple1'},{type,{382,17},tuple,any}]]},{type,{383,7},constraint,[{atom,{383,7},is_subtype},[{var,{383,7},'Tuple2'},{type,{383,17},tuple,any}]]},{type,{384,7},constraint,[{atom,{384,7},is_subtype},[{var,{384,7},'Term'},{type,{384,15},term,[]}]]}]]}]}}]}},{{function,apply,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2896}],[<<97,112,112,108,121,47,50>>],#{<<101,110>> => [{p,[],[<<67,97,108,108,115,32,97,32,102,117,110,44,32,112,97,115,115,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,105,110,32>>,{code,[],[<<65,114,103,115>>]},<<32,97,115,32,97,114,103,117,109,101,110,116,115,46>>]},{p,[],[<<73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,105,110,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,107,110,111,119,110,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,44,32,116,104,101,32,99,97,108,108,32,105,115,32,98,101,116,116,101,114,32,119,114,105,116,116,101,110,32,97,115,32>>,{code,[],[<<70,117,110,40,65,114,103,49,44,32,65,114,103,50,44,32,46,46,46,32,65,114,103,78,41>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<69,97,114,108,105,101,114,44,32>>,{code,[],[<<70,117,110>>]},<<32,99,111,117,108,100,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,125>>]},<<44,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<97,112,112,108,121,40,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,103,115,41>>]},<<46,32>>,{em,[],[<<84,104,105,115,32,117,115,101,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,119,105,108,108,32,115,116,111,112,32,119,111,114,107,105,110,103,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,49,50>>,signature => [{attribute,{2896,2},spec,{{apply,2},[{type,{2896,12},bounded_fun,[{type,{2896,12},'fun',[{type,{2896,12},product,[{var,{2896,13},'Fun'},{var,{2896,18},'Args'}]},{type,{2896,27},term,[]}]},[{type,{2897,7},constraint,[{atom,{2897,7},is_subtype},[{var,{2897,7},'Fun'},{type,{2897,14},function,[]}]]},{type,{2898,7},constraint,[{atom,{2898,7},is_subtype},[{var,{2898,7},'Args'},{type,{2898,15},list,[{type,{2898,16},term,[]}]}]]}]]}]}}]}},{{function,apply,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2903}],[<<97,112,112,108,121,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,110,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,84,104,101,32,97,112,112,108,105,101,100,32,102,117,110,99,116,105,111,110,32,109,117,115,116,32,98,101,32,101,120,112,111,114,116,101,100,32,102,114,111,109,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46,32,84,104,101,32,97,114,105,116,121,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,112,112,108,121,40,108,105,115,116,115,44,32,114,101,118,101,114,115,101,44,32,91,91,97,44,32,98,44,32,99,93,93,41,46,10,91,99,44,98,44,97,93,10,62,32,97,112,112,108,121,40,101,114,108,97,110,103,44,32,97,116,111,109,95,116,111,95,108,105,115,116,44,32,91,39,69,114,108,97,110,103,39,93,41,46,10,34,69,114,108,97,110,103,34>>]}]},{p,[],[<<73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,107,110,111,119,110,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,44,32,116,104,101,32,99,97,108,108,32,105,115,32,98,101,116,116,101,114,32,119,114,105,116,116,101,110,32,97,115,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,40,65,114,103,49,44,32,65,114,103,50,44,32,46,46,46,44,32,65,114,103,78,41>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{a,[{href,<<107,101,114,110,101,108,58,101,114,114,111,114,95,104,97,110,100,108,101,114,35,117,110,100,101,102,105,110,101,100,95,102,117,110,99,116,105,111,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114,58,117,110,100,101,102,105,110,101,100,95,102,117,110,99,116,105,111,110,47,51>>]}]},<<32,105,115,32,99,97,108,108,101,100,32,105,102,32,116,104,101,32,97,112,112,108,105,101,100,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,101,120,112,111,114,116,101,100,46,32,84,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,99,97,110,32,98,101,32,114,101,100,101,102,105,110,101,100,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<41,46,32,73,102,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,111,114,32,105,102,32,116,104,101,32,117,115,101,114,32,104,97,115,32,114,101,100,101,102,105,110,101,100,32,116,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,115,111,32,116,104,101,32,114,101,112,108,97,99,101,109,101,110,116,32,109,111,100,117,108,101,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,110,32,101,114,114,111,114,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<117,110,100,101,102>>]},<<32,105,115,32,103,101,110,101,114,97,116,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,51,48>>,signature => [{attribute,{2903,2},spec,{{apply,3},[{type,{2903,12},bounded_fun,[{type,{2903,12},'fun',[{type,{2903,12},product,[{var,{2903,13},'Module'},{var,{2903,21},'Function'},{var,{2903,31},'Args'}]},{type,{2903,40},term,[]}]},[{type,{2904,7},constraint,[{atom,{2904,7},is_subtype},[{var,{2904,7},'Module'},{type,{2904,17},module,[]}]]},{type,{2905,7},constraint,[{atom,{2905,7},is_subtype},[{var,{2905,7},'Function'},{type,{2905,19},atom,[]}]]},{type,{2906,7},constraint,[{atom,{2906,7},is_subtype},[{var,{2906,7},'Args'},{type,{2906,15},list,[{type,{2906,16},term,[]}]}]]}]]}]}}]}},{{function,atom_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,389}],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,97,116,111,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121>>]},<<32>>]},{code,[],[<<40,65,116,111,109,44,32,117,116,102,56,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,54,48>>,signature => [{attribute,{389,2},spec,{{atom_to_binary,1},[{type,{389,21},bounded_fun,[{type,{389,21},'fun',[{type,{389,21},product,[{var,{389,22},'Atom'}]},{type,{389,31},binary,[]}]},[{type,{390,7},constraint,[{atom,{390,7},is_subtype},[{var,{390,7},'Atom'},{type,{390,15},atom,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,atom_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,400}],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<65,116,111,109>>]},<<46,32,73,102,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<32,105,115,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,111,110,101,32,98,121,116,101,32,101,120,105,115,116,115,32,102,111,114,32,101,97,99,104,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46,32,73,102,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,111,114,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,85,84,70,45,56,32,119,104,101,114,101,32,99,104,97,114,97,99,116,101,114,115,32,109,97,121,32,114,101,113,117,105,114,101,32,109,117,108,116,105,112,108,101,32,98,121,116,101,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,50,48,44,32,97,116,111,109,115,32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,97,110,100,32>>,{code,[],[<<97,116,111,109,95,116,111,95,98,105,110,97,114,121,40,65,116,111,109,44,32,108,97,116,105,110,49,41>>]},<<32,109,97,121,32,102,97,105,108,32,105,102,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,102,111,114,32>>,{code,[],[<<65,116,111,109>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,62,32,50,53,53,46>>]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,116,111,109,95,116,111,95,98,105,110,97,114,121,40,39,69,114,108,97,110,103,39,44,32,108,97,116,105,110,49,41,46,10,60,60,34,69,114,108,97,110,103,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,55,48>>,signature => [{attribute,{400,2},spec,{{atom_to_binary,2},[{type,{400,21},bounded_fun,[{type,{400,21},'fun',[{type,{400,21},product,[{var,{400,22},'Atom'},{var,{400,28},'Encoding'}]},{type,{400,41},binary,[]}]},[{type,{401,7},constraint,[{atom,{401,7},is_subtype},[{var,{401,7},'Atom'},{type,{401,15},atom,[]}]]},{type,{402,7},constraint,[{atom,{402,7},is_subtype},[{var,{402,7},'Encoding'},{type,{402,19},union,[{atom,{402,19},latin1},{atom,{402,28},unicode},{atom,{402,38},utf8}]}]]}]]}]}}]}},{{function,atom_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,407}],[<<97,116,111,109,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,117,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<65,116,111,109>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,97,116,111,109,95,116,111,95,108,105,115,116,40,39,69,114,108,97,110,103,39,41,46,10,34,69,114,108,97,110,103,34>>]}]},{pre,[],[{code,[],[<<62,32,97,116,111,109,95,116,111,95,108,105,115,116,40,39,228,189,160,229,165,189,39,41,46,10,91,50,48,51,50,48,44,50,50,57,48,57,93>>]}]},{p,[],[<<83,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,105,99,111,100,101,40,51,41>>]}]},<<32,102,111,114,32,104,111,119,32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,32,116,111,32,100,105,102,102,101,114,101,110,116,32,102,111,114,109,97,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,57,53>>,signature => [{attribute,{407,2},spec,{{atom_to_list,1},[{type,{407,19},bounded_fun,[{type,{407,19},'fun',[{type,{407,19},product,[{var,{407,20},'Atom'}]},{type,{407,29},string,[]}]},[{type,{408,7},constraint,[{atom,{408,7},is_subtype},[{var,{408,7},'Atom'},{type,{408,15},atom,[]}]]}]]}]}}]}},{{function,binary_part,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,414}],[<<98,105,110,97,114,121,95,112,97,114,116,47,50>>],#{<<101,110>> => [{p,[],[<<69,120,116,114,97,99,116,115,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,100,101,115,99,114,105,98,101,100,32,98,121,32>>,{code,[],[<<80,111,115,76,101,110>>]},<<46>>]},{p,[],[<<78,101,103,97,116,105,118,101,32,108,101,110,103,116,104,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,101,120,116,114,97,99,116,32,98,121,116,101,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,97,32,98,105,110,97,114,121,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<49,62,32,66,105,110,32,61,32,60,60,49,44,50,44,51,44,52,44,53,44,54,44,55,44,56,44,57,44,49,48,62,62,46,10,50,62,32,98,105,110,97,114,121,95,112,97,114,116,40,66,105,110,44,123,98,121,116,101,95,115,105,122,101,40,66,105,110,41,44,32,45,53,125,41,46,10,60,60,54,44,55,44,56,44,57,44,49,48,62,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,115,76,101,110>>]},<<32,105,110,32,97,110,121,32,119,97,121,32,114,101,102,101,114,101,110,99,101,115,32,111,117,116,115,105,100,101,32,116,104,101,32,98,105,110,97,114,121,46>>]},{p,[],[{code,[],[<<83,116,97,114,116>>]},<<32,105,115,32,122,101,114,111,45,98,97,115,101,100,44,32,116,104,97,116,32,105,115,58>>]},{pre,[],[{code,[],[<<49,62,32,66,105,110,32,61,32,60,60,49,44,50,44,51,62,62,10,50,62,32,98,105,110,97,114,121,95,112,97,114,116,40,66,105,110,44,123,48,44,50,125,41,46,10,60,60,49,44,50,62,62>>]}]},{p,[],[<<70,111,114,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<80,111,115,76,101,110>>]},<<32,115,101,109,97,110,116,105,99,115,44,32,115,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,98,105,110,97,114,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<98,105,110,97,114,121,40,51,41>>]}]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,49,51>>,signature => [{attribute,{414,2},spec,{{binary_part,2},[{type,{414,18},bounded_fun,[{type,{414,18},'fun',[{type,{414,18},product,[{var,{414,19},'Subject'},{var,{414,28},'PosLen'}]},{type,{414,39},binary,[]}]},[{type,{415,7},constraint,[{atom,{415,7},is_subtype},[{var,{415,7},'Subject'},{type,{415,18},binary,[]}]]},{type,{416,7},constraint,[{atom,{416,7},is_subtype},[{var,{416,7},'PosLen'},{type,{416,17},tuple,[{ann_type,{416,18},[{var,{416,18},'Start'},{type,{416,27},non_neg_integer,[]}]},{ann_type,{416,46},[{var,{416,46},'Length'},{type,{416,56},integer,[]}]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,binary_part,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,422}],[<<98,105,110,97,114,121,95,112,97,114,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<98,105,110,97,114,121,95,112,97,114,116,40,83,117,98,106,101,99,116,44,32,123,83,116,97,114,116,44,32,76,101,110,103,116,104,125,41>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,56>>,signature => [{attribute,{422,2},spec,{{binary_part,3},[{type,{422,18},bounded_fun,[{type,{422,18},'fun',[{type,{422,18},product,[{var,{422,19},'Subject'},{var,{422,28},'Start'},{var,{422,35},'Length'}]},{type,{422,46},binary,[]}]},[{type,{423,7},constraint,[{atom,{423,7},is_subtype},[{var,{423,7},'Subject'},{type,{423,18},binary,[]}]]},{type,{424,7},constraint,[{atom,{424,7},is_subtype},[{var,{424,7},'Start'},{type,{424,16},non_neg_integer,[]}]]},{type,{425,7},constraint,[{atom,{425,7},is_subtype},[{var,{425,7},'Length'},{type,{425,17},integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,binary_to_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,430}],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109>>]},<<32>>]},{code,[],[<<40,66,105,110,97,114,121,44,32,117,116,102,56,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,56>>,signature => [{attribute,{430,2},spec,{{binary_to_atom,1},[{type,{430,21},bounded_fun,[{type,{430,21},'fun',[{type,{430,21},product,[{var,{430,22},'Binary'}]},{type,{430,33},atom,[]}]},[{type,{431,7},constraint,[{atom,{431,7},is_subtype},[{var,{431,7},'Binary'},{type,{431,17},binary,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,binary_to_atom,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,440}],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46,32,73,102,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,111,114,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,116,104,101,32,98,105,110,97,114,121,32,109,117,115,116,32,99,111,110,116,97,105,110,32,118,97,108,105,100,32,85,84,70,45,56,32,115,101,113,117,101,110,99,101,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,50,48,44,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,40,66,105,110,97,114,121,44,32,117,116,102,56,41>>]},<<32,105,115,32,99,97,112,97,98,108,101,32,111,102,32,101,110,99,111,100,105,110,103,32,97,110,121,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,46,32,69,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,119,111,117,108,100,32,102,97,105,108,32,105,102,32,116,104,101,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,101,100,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,62,32,50,53,53,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,85,110,105,99,111,100,101,32,115,117,112,112,111,114,116,32,105,110,32,97,116,111,109,115,44,32,115,101,101,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116,35,117,116,102,56,95,97,116,111,109,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,116,101,32,111,110,32,85,84,70,45,56,32,101,110,99,111,100,101,100,32,97,116,111,109,115>>]},<<32,105,110,32,115,101,99,116,105,111,110,32,34,69,120,116,101,114,110,97,108,32,84,101,114,109,32,70,111,114,109,97,116,34,32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,97,110,32,97,116,111,109,32,110,97,109,101,32,105,115,32,108,105,109,105,116,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,99,111,110,102,105,103,117,114,97,98,108,101,32,108,105,109,105,116,32,111,110,32,104,111,119,32,109,97,110,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,101,120,105,115,116,32,97,110,100,32,97,116,111,109,115,32,97,114,101,32,110,111,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,99,111,110,115,105,100,101,114,32,119,104,101,116,104,101,114,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,50>>]},<<32,105,115,32,97,32,98,101,116,116,101,114,32,111,112,116,105,111,110,32,116,104,97,110,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,97,116,111,109,40,60,60,34,69,114,108,97,110,103,34,62,62,44,32,108,97,116,105,110,49,41,46,10,39,69,114,108,97,110,103,39>>]}]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,97,116,111,109,40,60,60,49,48,50,52,47,117,116,102,56,62,62,44,32,117,116,102,56,41,46,10,39,208,128,39>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,56>>,signature => [{attribute,{440,2},spec,{{binary_to_atom,2},[{type,{440,21},bounded_fun,[{type,{440,21},'fun',[{type,{440,21},product,[{var,{440,22},'Binary'},{var,{440,30},'Encoding'}]},{type,{440,43},atom,[]}]},[{type,{441,7},constraint,[{atom,{441,7},is_subtype},[{var,{441,7},'Binary'},{type,{441,17},binary,[]}]]},{type,{442,7},constraint,[{atom,{442,7},is_subtype},[{var,{442,7},'Encoding'},{type,{442,19},union,[{atom,{442,19},latin1},{atom,{442,28},unicode},{atom,{442,38},utf8}]}]]}]]}]}}]}},{{function,binary_to_existing_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,447}],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109>>]}]},<<32>>,{code,[],[<<40,66,105,110,97,114,121,44,32,117,116,102,56,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,48,49>>,signature => [{attribute,{447,2},spec,{{binary_to_existing_atom,1},[{type,{447,30},bounded_fun,[{type,{447,30},'fun',[{type,{447,30},product,[{var,{447,31},'Binary'}]},{type,{447,42},atom,[]}]},[{type,{448,7},constraint,[{atom,{448,7},is_subtype},[{var,{448,7},'Binary'},{type,{448,17},binary,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,binary_to_existing_atom,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,457}],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,50>>],#{<<101,110>> => [{p,[],[<<65,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]}]},<<44,32,98,117,116,32,116,104,101,32,97,116,111,109,32,109,117,115,116,32,101,120,105,115,116,46>>]},{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,104,97,115,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,111,110,102,105,103,117,114,97,98,108,101,32,108,105,109,105,116>>]},<<32,102,111,114,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,101,120,105,115,116,44,32,97,110,100,32,97,116,111,109,115,32,97,114,101,32,110,111,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32,105,115,32,110,111,116,32,115,97,102,101,32,116,111,32,99,114,101,97,116,101,32,109,97,110,121,32,97,116,111,109,115,32,102,114,111,109,32,98,105,110,97,114,105,101,115,32,116,104,97,116,32,99,111,109,101,32,102,114,111,109,32,97,110,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,105,108,101,32,102,101,116,99,104,101,100,32,102,114,111,109,32,116,104,101,32,73,110,116,101,114,110,101,116,41,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]}]},<<46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,104,117,115,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,111,112,116,105,111,110,32,119,104,101,110,32,116,104,101,32,105,110,112,117,116,32,98,105,110,97,114,121,32,99,111,109,101,115,32,102,114,111,109,32,97,110,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,46>>]},{p,[],[<<65,110,32,97,116,111,109,32,101,120,105,115,116,115,32,105,110,32,97,110,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,119,104,101,110,32,105,110,99,108,117,100,101,100,32,105,110,32,97,32,108,111,97,100,101,100,32,69,114,108,97,110,103,32,109,111,100,117,108,101,32,111,114,32,119,104,101,110,32,99,114,101,97,116,101,100,32,112,114,111,103,114,97,109,109,97,116,105,99,97,108,108,121,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,98,121,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,97,116,111,109,47,50>>]},<<41,46,32,83,101,101,32,116,104,101,32,110,101,120,116,32,110,111,116,101,32,102,111,114,32,97,110,32,101,120,97,109,112,108,101,32,111,102,32,119,104,101,110,32,97,110,32,97,116,111,109,32,101,120,105,115,116,115,32,105,110,32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,32,102,111,114,32,97,110,32,69,114,108,97,110,103,32,109,111,100,117,108,101,32,98,117,116,32,110,111,116,32,105,110,32,116,104,101,32,99,111,109,112,105,108,101,100,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,115,97,109,101,32,109,111,100,117,108,101,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,97,116,111,109,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,99,111,109,112,105,108,101,114,32,109,97,121,32,111,112,116,105,109,105,122,101,32,97,119,97,121,32,97,116,111,109,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,111,109,112,105,108,101,114,32,119,105,108,108,32,114,101,119,114,105,116,101,32>>,{code,[],[<<97,116,111,109,95,116,111,95,108,105,115,116,40,115,111,109,101,95,97,116,111,109,41>>]},<<32,116,111,32>>,{code,[],[<<34,115,111,109,101,95,97,116,111,109,34>>]},<<46,32,73,102,32,116,104,97,116,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,104,101,32,111,110,108,121,32,109,101,110,116,105,111,110,32,111,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,111,109,101,95,97,116,111,109>>]},<<32,105,110,32,116,104,101,32,99,111,110,116,97,105,110,105,110,103,32,109,111,100,117,108,101,44,32,116,104,101,32,97,116,111,109,32,119,105,108,108,32,110,111,116,32,98,101,32,99,114,101,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,108,111,97,100,101,100,44,32,97,110,100,32,97,32,115,117,98,115,101,113,117,101,110,116,32,99,97,108,108,32,116,111,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,40,60,60,34,115,111,109,101,95,97,116,111,109,34,62,62,44,32,117,116,102,56,41>>]},<<32,119,105,108,108,32,102,97,105,108,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,97,110,32,97,116,111,109,32,110,97,109,101,32,105,115,32,108,105,109,105,116,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,49,50>>,signature => [{attribute,{457,2},spec,{{binary_to_existing_atom,2},[{type,{457,30},bounded_fun,[{type,{457,30},'fun',[{type,{457,30},product,[{var,{457,31},'Binary'},{var,{457,39},'Encoding'}]},{type,{457,52},atom,[]}]},[{type,{458,7},constraint,[{atom,{458,7},is_subtype},[{var,{458,7},'Binary'},{type,{458,17},binary,[]}]]},{type,{459,7},constraint,[{atom,{459,7},is_subtype},[{var,{459,7},'Encoding'},{type,{459,19},union,[{atom,{459,19},latin1},{atom,{459,28},unicode},{atom,{459,38},utf8}]}]]}]]}]}}]}},{{function,binary_to_float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,464}],[<<98,105,110,97,114,121,95,116,111,95,102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,102,108,111,97,116,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,102,108,111,97,116,40,60,60,34,50,46,50,48,49,55,55,54,52,101,43,48,34,62,62,41,46,10,50,46,50,48,49,55,55,54,52>>]}]},{p,[],[<<84,104,101,32,102,108,111,97,116,32,115,116,114,105,110,103,32,102,111,114,109,97,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,102,111,114,109,97,116,32,102,111,114,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,102,108,111,97,116,32,108,105,116,101,114,97,108,115>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,97,116,32,117,110,100,101,114,115,99,111,114,101,115,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,102,108,111,97,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,54>>,signature => [{attribute,{464,2},spec,{{binary_to_float,1},[{type,{464,22},bounded_fun,[{type,{464,22},'fun',[{type,{464,22},product,[{var,{464,23},'Binary'}]},{type,{464,34},float,[]}]},[{type,{465,7},constraint,[{atom,{465,7},is_subtype},[{var,{465,7},'Binary'},{type,{465,17},binary,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,binary_to_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,470}],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,40,60,60,34,49,50,51,34,62,62,41,46,10,49,50,51>>]}]},{p,[],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,49>>]},<<32,97,99,99,101,112,116,115,32,116,104,101,32,115,97,109,101,32,115,116,114,105,110,103,32,102,111,114,109,97,116,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,49>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,52>>,signature => [{attribute,{470,2},spec,{{binary_to_integer,1},[{type,{470,24},bounded_fun,[{type,{470,24},'fun',[{type,{470,24},product,[{var,{470,25},'Binary'}]},{type,{470,36},integer,[]}]},[{type,{471,7},constraint,[{atom,{471,7},is_subtype},[{var,{471,7},'Binary'},{type,{471,17},binary,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,binary_to_integer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,476}],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<32,105,115,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,40,60,60,34,51,70,70,34,62,62,44,32,49,54,41,46,10,49,48,50,51>>]}]},{p,[],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,105,110,116,101,103,101,114,47,50>>]},<<32,97,99,99,101,112,116,115,32,116,104,101,32,115,97,109,101,32,115,116,114,105,110,103,32,102,111,114,109,97,116,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,50>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,49>>,signature => [{attribute,{476,2},spec,{{binary_to_integer,2},[{type,{476,24},bounded_fun,[{type,{476,24},'fun',[{type,{476,24},product,[{var,{476,25},'Binary'},{var,{476,32},'Base'}]},{type,{476,41},integer,[]}]},[{type,{477,7},constraint,[{atom,{477,7},is_subtype},[{var,{477,7},'Binary'},{type,{477,17},binary,[]}]]},{type,{478,7},constraint,[{atom,{478,7},is_subtype},[{var,{478,7},'Base'},{type,{478,15},range,[{integer,{478,15},2},{integer,{478,18},36}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,binary_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,483}],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,121,116,101,115,32,111,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,48,57>>,signature => [{attribute,{483,2},spec,{{binary_to_list,1},[{type,{483,21},bounded_fun,[{type,{483,21},'fun',[{type,{483,21},product,[{var,{483,22},'Binary'}]},{type,{483,33},list,[{type,{483,34},byte,[]}]}]},[{type,{484,7},constraint,[{atom,{484,7},is_subtype},[{var,{484,7},'Binary'},{type,{484,17},binary,[]}]]}]]}]}}]}},{{function,binary_to_list,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,489}],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<65,115,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,49>>]},<<44,32,98,117,116,32,114,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,121,116,101,115,32,102,114,111,109,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<83,116,97,114,116>>]},<<32,116,111,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<83,116,111,112>>]},<<32,105,110,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46,32,84,104,101,32,112,111,115,105,116,105,111,110,115,32,105,110,32,116,104,101,32,98,105,110,97,114,121,32,97,114,101,32,110,117,109,98,101,114,101,100,32,115,116,97,114,116,105,110,103,32,102,114,111,109,32,49,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{em,[],[<<84,104,101,32,111,110,101,45,98,97,115,101,100,32,105,110,100,101,120,105,110,103,32,102,111,114,32,98,105,110,97,114,105,101,115,32,117,115,101,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46>>]},<<32,78,101,119,32,99,111,100,101,32,105,115,32,116,111,32,117,115,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,98,105,110,97,114,121,35,98,105,110,95,116,111,95,108,105,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,58,98,105,110,95,116,111,95,108,105,115,116,47,51>>]}]},<<32,105,110,32,83,84,68,76,73,66,32,105,110,115,116,101,97,100,46,32,65,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,109,111,100,117,108,101,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,99,111,110,115,105,115,116,101,110,116,108,121,32,117,115,101,32,122,101,114,111,45,98,97,115,101,100,32,105,110,100,101,120,105,110,103,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,56>>,signature => [{attribute,{489,2},spec,{{binary_to_list,3},[{type,{489,21},bounded_fun,[{type,{489,21},'fun',[{type,{489,21},product,[{var,{489,22},'Binary'},{var,{489,30},'Start'},{var,{489,37},'Stop'}]},{type,{489,46},list,[{type,{489,47},byte,[]}]}]},[{type,{490,7},constraint,[{atom,{490,7},is_subtype},[{var,{490,7},'Binary'},{type,{490,17},binary,[]}]]},{type,{491,7},constraint,[{atom,{491,7},is_subtype},[{var,{491,7},'Start'},{type,{491,16},pos_integer,[]}]]},{type,{492,7},constraint,[{atom,{492,7},is_subtype},[{var,{492,7},'Stop'},{type,{492,15},pos_integer,[]}]]}]]}]}}]}},{{function,binary_to_term,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,497}],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,69,114,108,97,110,103,32,116,101,114,109,32,116,104,97,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,100,101,99,111,100,105,110,103,32,98,105,110,97,114,121,32,111,98,106,101,99,116,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<44,32,119,104,105,99,104,32,109,117,115,116,32,98,101,32,101,110,99,111,100,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116>>]},<<46>>]},{pre,[],[{code,[],[<<62,32,66,105,110,32,61,32,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,104,101,108,108,111,41,46,10,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,62,62,10,62,32,104,101,108,108,111,32,61,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,66,105,110,41,46,10,104,101,108,108,111>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<87,104,101,110,32,100,101,99,111,100,105,110,103,32,98,105,110,97,114,105,101,115,32,102,114,111,109,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,115,44,32,116,104,101,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,32,109,97,121,32,115,117,98,109,105,116,32,100,97,116,97,32,105,110,32,97,32,119,97,121,32,116,111,32,99,114,101,97,116,101,32,114,101,115,111,117,114,99,101,115,44,32,115,117,99,104,32,97,115,32,97,116,111,109,115,32,97,110,100,32,114,101,109,111,116,101,32,114,101,102,101,114,101,110,99,101,115,44,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,32,97,110,100,32,108,101,97,100,32,116,111,32,68,101,110,105,97,108,32,111,102,32,83,101,114,118,105,99,101,32,97,116,116,97,99,107,46,32,73,110,32,115,117,99,104,32,99,97,115,101,115,44,32,99,111,110,115,105,100,101,114,32,117,115,105,110,103,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>]},<<32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<115,97,102,101>>]},<<32,111,112,116,105,111,110,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,48>>,signature => [{attribute,{497,2},spec,{{binary_to_term,1},[{type,{497,21},bounded_fun,[{type,{497,21},'fun',[{type,{497,21},product,[{var,{497,22},'Binary'}]},{type,{497,33},term,[]}]},[{type,{498,7},constraint,[{atom,{498,7},is_subtype},[{var,{498,7},'Binary'},{user_type,{498,17},ext_binary,[]}]]}]]}]}}]}},{{function,binary_to_term,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,503}],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,50>>],#{<<101,110>> => [{p,[],[<<65,115,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]},<<44,32,98,117,116,32,116,97,107,101,115,32,116,104,101,115,101,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,97,102,101>>]}]},{dd,[],[{p,[],[<<85,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,119,104,101,110,32,114,101,99,101,105,118,105,110,103,32,98,105,110,97,114,105,101,115,32,102,114,111,109,32,97,110,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,46>>]},{p,[],[<<87,104,101,110,32,101,110,97,98,108,101,100,44,32,105,116,32,112,114,101,118,101,110,116,115,32,100,101,99,111,100,105,110,103,32,100,97,116,97,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,97,116,116,97,99,107,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,46,32,73,110,32,116,104,101,32,101,118,101,110,116,32,111,102,32,114,101,99,101,105,118,105,110,103,32,117,110,115,97,102,101,32,100,97,116,97,44,32,100,101,99,111,100,105,110,103,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,114,114,111,114,46>>]},{p,[],[<<84,104,105,115,32,112,114,101,118,101,110,116,115,32,99,114,101,97,116,105,111,110,32,111,102,32,110,101,119,32,97,116,111,109,115,32,100,105,114,101,99,116,108,121,44,32,99,114,101,97,116,105,111,110,32,111,102,32,110,101,119,32,97,116,111,109,115,32,105,110,100,105,114,101,99,116,108,121,32,40,97,115,32,116,104,101,121,32,97,114,101,32,101,109,98,101,100,100,101,100,32,105,110,32,99,101,114,116,97,105,110,32,115,116,114,117,99,116,117,114,101,115,44,32,115,117,99,104,32,97,115,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,44,32,114,101,102,115,44,32,97,110,100,32,102,117,110,115,41,44,32,97,110,100,32,99,114,101,97,116,105,111,110,32,111,102,32,110,101,119,32,101,120,116,101,114,110,97,108,32,102,117,110,99,116,105,111,110,32,114,101,102,101,114,101,110,99,101,115,46,32,78,111,110,101,32,111,102,32,116,104,111,115,101,32,114,101,115,111,117,114,99,101,115,32,97,114,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,44,32,115,111,32,117,110,99,104,101,99,107,101,100,32,99,114,101,97,116,105,111,110,32,111,102,32,116,104,101,109,32,99,97,110,32,101,120,104,97,117,115,116,32,97,118,97,105,108,97,98,108,101,32,109,101,109,111,114,121,46>>]},{pre,[],[{code,[],[<<62,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,60,60,49,51,49,44,49,48,48,44,48,44,53,44,34,104,101,108,108,111,34,62,62,44,32,91,115,97,102,101,93,41,46,10,42,42,32,101,120,99,101,112,116,105,111,110,32,101,114,114,111,114,58,32,98,97,100,32,97,114,103,117,109,101,110,116,10,62,32,104,101,108,108,111,46,10,104,101,108,108,111,10,62,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,60,60,49,51,49,44,49,48,48,44,48,44,53,44,34,104,101,108,108,111,34,62,62,44,32,91,115,97,102,101,93,41,46,10,104,101,108,108,111>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,101,32>>,{code,[],[<<115,97,102,101>>]},<<32,111,112,116,105,111,110,32,101,110,115,117,114,101,115,32,116,104,101,32,100,97,116,97,32,105,115,32,115,97,102,101,108,121,32,112,114,111,99,101,115,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,98,117,116,32,105,116,32,100,111,101,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101,32,116,104,101,32,100,97,116,97,32,105,115,32,115,97,102,101,32,116,111,32,121,111,117,114,32,97,112,112,108,105,99,97,116,105,111,110,46,32,89,111,117,32,109,117,115,116,32,97,108,119,97,121,115,32,118,97,108,105,100,97,116,101,32,100,97,116,97,32,102,114,111,109,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,115,46,32,73,102,32,116,104,101,32,98,105,110,97,114,121,32,105,115,32,115,116,111,114,101,100,32,111,114,32,116,114,97,110,115,105,116,115,32,116,104,114,111,117,103,104,32,117,110,116,114,117,115,116,101,100,32,115,111,117,114,99,101,115,44,32,121,111,117,32,115,104,111,117,108,100,32,97,108,115,111,32,99,111,110,115,105,100,101,114,32,99,114,121,112,116,111,103,114,97,112,104,105,99,97,108,108,121,32,115,105,103,110,105,110,103,32,105,116,46>>]}]}]},{dt,[],[{code,[],[<<117,115,101,100>>]}]},{dd,[],[{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<123,84,101,114,109,44,32,85,115,101,100,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<85,115,101,100>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,97,99,116,117,97,108,108,121,32,114,101,97,100,32,102,114,111,109,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<46>>]},{pre,[],[{code,[],[<<62,32,73,110,112,117,116,32,61,32,60,60,49,51,49,44,49,48,48,44,48,44,53,44,34,104,101,108,108,111,34,44,34,119,111,114,108,100,34,62,62,46,10,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,44,49,49,57,44,49,49,49,44,49,49,52,44,49,48,56,44,49,48,48,62,62,10,62,32,123,84,101,114,109,44,32,85,115,101,100,125,32,61,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,73,110,112,117,116,44,32,91,117,115,101,100,93,41,46,10,123,104,101,108,108,111,44,32,57,125,10,62,32,115,112,108,105,116,95,98,105,110,97,114,121,40,73,110,112,117,116,44,32,85,115,101,100,41,46,10,123,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,62,62,44,32,60,60,34,119,111,114,108,100,34,62,62,125>>]}]}]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<115,97,102,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,110,100,32,117,110,115,97,102,101,32,100,97,116,97,32,105,115,32,100,101,99,111,100,101,100,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,54,57>>,signature => [{attribute,{503,2},spec,{{binary_to_term,2},[{type,{503,21},bounded_fun,[{type,{503,21},'fun',[{type,{503,21},product,[{var,{503,22},'Binary'},{var,{503,30},'Opts'}]},{type,{503,39},union,[{type,{503,39},term,[]},{type,{503,48},tuple,[{type,{503,49},term,[]},{var,{503,57},'Used'}]}]}]},[{type,{504,7},constraint,[{atom,{504,7},is_subtype},[{var,{504,7},'Binary'},{user_type,{504,17},ext_binary,[]}]]},{type,{505,7},constraint,[{atom,{505,7},is_subtype},[{var,{505,7},'Opt'},{type,{505,14},union,[{atom,{505,14},safe},{atom,{505,21},used}]}]]},{type,{506,7},constraint,[{atom,{506,7},is_subtype},[{var,{506,7},'Opts'},{type,{506,15},list,[{var,{506,16},'Opt'}]}]]},{type,{507,7},constraint,[{atom,{507,7},is_subtype},[{var,{507,7},'Used'},{type,{507,15},pos_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,51,66,48,52>>}},{{function,bit_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,513}],[<<98,105,116,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,116,104,97,116,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98,105,116,115,32,111,102,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,98,105,116,95,115,105,122,101,40,60,60,52,51,51,58,49,54,44,51,58,51,62,62,41,46,10,49,57,10,62,32,98,105,116,95,115,105,122,101,40,60,60,49,44,50,44,51,62,62,41,46,10,50,52>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,51,50>>,signature => [{attribute,{513,2},spec,{{bit_size,1},[{type,{513,15},bounded_fun,[{type,{513,15},'fun',[{type,{513,15},product,[{var,{513,16},'Bitstring'}]},{type,{513,30},non_neg_integer,[]}]},[{type,{514,7},constraint,[{atom,{514,7},is_subtype},[{var,{514,7},'Bitstring'},{type,{514,20},bitstring,[]}]]}]]}]}}]}},{{function,bitstring_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,519}],[<<98,105,116,115,116,114,105,110,103,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,121,116,101,115,32,111,102,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,105,116,115,32,105,110,32,116,104,101,32,98,105,110,97,114,121,32,105,115,32,110,111,116,32,100,105,118,105,115,105,98,108,101,32,98,121,32,56,44,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,108,105,115,116,32,105,115,32,97,32,98,105,116,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,49,45,55,32,98,105,116,115,46,32,69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,98,105,116,115,116,114,105,110,103,95,116,111,95,108,105,115,116,40,60,60,52,51,51,58,49,54,62,62,41,46,10,91,49,44,49,55,55,93>>]}]},{pre,[],[{code,[],[<<62,32,98,105,116,115,116,114,105,110,103,95,116,111,95,108,105,115,116,40,60,60,52,51,51,58,49,54,44,51,58,51,62,62,41,46,10,91,49,44,49,55,55,44,60,60,51,58,51,62,62,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,55>>,signature => [{attribute,{519,2},spec,{{bitstring_to_list,1},[{type,{519,24},bounded_fun,[{type,{519,24},'fun',[{type,{519,24},product,[{var,{519,25},'Bitstring'}]},{type,{519,39},list,[{type,{519,40},union,[{type,{519,40},byte,[]},{type,{519,49},bitstring,[]}]}]}]},[{type,{520,7},constraint,[{atom,{520,7},is_subtype},[{var,{520,7},'Bitstring'},{type,{520,20},bitstring,[]}]]}]]}]}}]}},{{function,bump_reductions,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,525}],[<<98,117,109,112,95,114,101,100,117,99,116,105,111,110,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,105,115,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,32,102,117,110,99,116,105,111,110,32,105,110,99,114,101,109,101,110,116,115,32,116,104,101,32,114,101,100,117,99,116,105,111,110,32,99,111,117,110,116,101,114,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,73,110,32,116,104,101,32,66,101,97,109,32,101,109,117,108,97,116,111,114,44,32,116,104,101,32,114,101,100,117,99,116,105,111,110,32,99,111,117,110,116,101,114,32,105,115,32,110,111,114,109,97,108,108,121,32,105,110,99,114,101,109,101,110,116,101,100,32,98,121,32,111,110,101,32,102,111,114,32,101,97,99,104,32,102,117,110,99,116,105,111,110,32,97,110,100,32,66,73,70,32,99,97,108,108,46,32,65,32,99,111,110,116,101,120,116,32,115,119,105,116,99,104,32,105,115,32,102,111,114,99,101,100,32,119,104,101,110,32,116,104,101,32,99,111,117,110,116,101,114,32,114,101,97,99,104,101,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,114,101,100,117,99,116,105,111,110,115,32,102,111,114,32,97,32,112,114,111,99,101,115,115,32,40,52,48,48,48,32,114,101,100,117,99,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103,47,79,84,80,32,49,57,46,50,32,97,110,100,32,108,97,116,101,114,41,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,99,97,110,32,98,101,32,114,101,109,111,118,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,66,101,97,109,32,109,97,99,104,105,110,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,119,97,114,110,105,110,103,46,32,73,116,32,105,115,32,117,110,108,105,107,101,108,121,32,116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,32,105,110,32,111,116,104,101,114,32,69,114,108,97,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,54,52>>,signature => [{attribute,{525,2},spec,{{erlang,bump_reductions,1},[{type,{525,29},bounded_fun,[{type,{525,29},'fun',[{type,{525,29},product,[{var,{525,30},'Reductions'}]},{atom,{525,45},true}]},[{type,{526,7},constraint,[{atom,{526,7},is_subtype},[{var,{526,7},'Reductions'},{type,{526,21},pos_integer,[]}]]}]]}]}}]}},{{function,byte_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,532}],[<<98,121,116,101,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,116,104,97,116,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,110,101,101,100,101,100,32,116,111,32,99,111,110,116,97,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<46,32,84,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,105,116,115,32,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103>>]},<<32,105,115,32,110,111,116,32,100,105,118,105,115,105,98,108,101,32,98,121,32,56,44,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,115,32,114,111,117,110,100,101,100,32>>,{em,[],[<<117,112>>]},<<46,32,69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,98,121,116,101,95,115,105,122,101,40,60,60,52,51,51,58,49,54,44,51,58,51,62,62,41,46,10,51,10,62,32,98,121,116,101,95,115,105,122,101,40,60,60,49,44,50,44,51,62,62,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,50>>,signature => [{attribute,{532,2},spec,{{byte_size,1},[{type,{532,16},bounded_fun,[{type,{532,16},'fun',[{type,{532,16},product,[{var,{532,17},'Bitstring'}]},{type,{532,31},non_neg_integer,[]}]},[{type,{533,7},constraint,[{atom,{533,7},is_subtype},[{var,{533,7},'Bitstring'},{type,{533,20},bitstring,[]}]]}]]}]}}]}},{{function,cancel_timer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,544}],[<<99,97,110,99,101,108,95,116,105,109,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<67,97,110,99,101,108,115,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,40,84,105,109,101,114,82,101,102,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,57,57>>,signature => [{attribute,{544,2},spec,{{erlang,cancel_timer,1},[{type,{544,26},bounded_fun,[{type,{544,26},'fun',[{type,{544,26},product,[{var,{544,27},'TimerRef'}]},{var,{544,40},'Result'}]},[{type,{545,7},constraint,[{atom,{545,7},is_subtype},[{var,{545,7},'TimerRef'},{type,{545,19},reference,[]}]]},{type,{546,7},constraint,[{atom,{546,7},is_subtype},[{var,{546,7},'Time'},{type,{546,15},non_neg_integer,[]}]]},{type,{547,7},constraint,[{atom,{547,7},is_subtype},[{var,{547,7},'Result'},{type,{547,17},union,[{var,{547,17},'Time'},{atom,{547,24},false}]}]]}]]}]}}]}},{{function,cancel_timer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,553}],[<<99,97,110,99,101,108,95,116,105,109,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<67,97,110,99,101,108,115,32,97,32,116,105,109,101,114,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,99,114,101,97,116,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114>>]}]},<<46,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,105,100,101,110,116,105,102,105,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,119,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32,116,104,101,32,66,73,70,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,116,105,109,101,114,46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,65,115,121,110,99,125>>]}]},{dd,[],[{p,[],[<<65,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,99,97,110,99,101,108,108,97,116,105,111,110,46,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,119,104,105,99,104,32,99,97,117,115,101,115,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100,32,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,99,97,110,99,101,108,32,111,112,101,114,97,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,84,104,97,116,32,105,115,44,32>>,{code,[],[<<99,97,110,99,101,108,95,116,105,109,101,114,40,41>>]},<<32,115,101,110,100,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,99,97,110,99,101,108,108,97,116,105,111,110,32,116,111,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,116,104,101,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,105,110,102,111,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<82,101,113,117,101,115,116,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,111,102,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,119,104,105,99,104,32,109,101,97,110,115,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,103,105,118,101,110,46,32,87,104,101,110,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,32,105,115,32,103,105,118,101,110,46>>]},{ul,[],[{li,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<58,32,105,102,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,40,41>>]},<<46,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<111,107>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{li,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<58,32,105,102,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,99,97,110,99,101,108,95,116,105,109,101,114,44,32,84,105,109,101,114,82,101,102,44,32,82,101,115,117,108,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,40,41>>]},<<32,119,104,101,110,32,116,104,101,32,99,97,110,99,101,108,108,97,116,105,111,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,101,114,102,111,114,109,101,100,44,32,111,116,104,101,114,119,105,115,101,32,110,111,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,46>>]}]}]}]}]},{p,[],[<<77,111,114,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,109,97,121,32,98,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,105,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,32,108,101,102,116,32,117,110,116,105,108,32,116,104,101,32,99,97,110,99,101,108,101,100,32,116,105,109,101,114,32,119,111,117,108,100,32,104,97,118,101,32,101,120,112,105,114,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,97,32,116,105,109,101,114,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,99,111,117,108,100,32,110,111,116,32,98,101,32,102,111,117,110,100,46,32,84,104,105,115,32,99,97,110,32,98,101,32,101,105,116,104,101,114,32,98,101,99,97,117,115,101,32,116,104,101,32,116,105,109,101,114,32,104,97,100,32,101,120,112,105,114,101,100,44,32,97,108,114,101,97,100,121,32,104,97,100,32,98,101,101,110,32,99,97,110,99,101,108,101,100,44,32,111,114,32,98,101,99,97,117,115,101,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,110,101,118,101,114,32,99,111,114,114,101,115,112,111,110,100,101,100,32,116,111,32,97,32,116,105,109,101,114,46,32,69,118,101,110,32,105,102,32,116,104,101,32,116,105,109,101,114,32,104,97,100,32,101,120,112,105,114,101,100,44,32,105,116,32,100,111,101,115,32,110,111,116,32,116,101,108,108,32,121,111,117,32,105,102,32,116,104,101,32,116,105,109,101,45,111,117,116,32,109,101,115,115,97,103,101,32,104,97,115,32,97,114,114,105,118,101,100,32,97,116,32,105,116,115,32,100,101,115,116,105,110,97,116,105,111,110,32,121,101,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,32,99,97,110,32,98,101,32,99,111,45,108,111,99,97,116,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32,115,99,104,101,100,117,108,101,114,32,116,104,97,110,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32,73,102,32,115,111,44,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,97,107,101,115,32,109,117,99,104,32,108,111,110,103,101,114,32,116,105,109,101,32,116,104,97,110,32,105,102,32,105,116,32,105,115,32,108,111,99,97,116,101,100,32,108,111,99,97,108,108,121,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,105,110,32,99,114,105,116,105,99,97,108,32,112,97,116,104,44,32,97,110,100,32,99,97,110,32,100,111,32,111,116,104,101,114,32,116,104,105,110,103,115,32,119,104,105,108,101,32,119,97,105,116,105,110,103,32,102,111,114,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,44,32,111,114,32,105,115,32,110,111,116,32,105,110,116,101,114,101,115,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,44,32,121,111,117,32,119,97,110,116,32,116,111,32,117,115,101,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,116,114,117,101,125>>]},<<46,32,73,102,32,117,115,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,102,97,108,115,101,125>>]},<<44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,98,108,111,99,107,115,32,117,110,116,105,108,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,101,114,102,111,114,109,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,47,52>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,47,52>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,97,100,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,48,57>>,signature => [{attribute,{553,2},spec,{{erlang,cancel_timer,2},[{type,{553,26},bounded_fun,[{type,{553,26},'fun',[{type,{553,26},product,[{var,{553,27},'TimerRef'},{var,{553,37},'Options'}]},{type,{553,49},union,[{var,{553,49},'Result'},{atom,{553,58},ok}]}]},[{type,{554,7},constraint,[{atom,{554,7},is_subtype},[{var,{554,7},'TimerRef'},{type,{554,19},reference,[]}]]},{type,{555,7},constraint,[{atom,{555,7},is_subtype},[{var,{555,7},'Async'},{type,{555,16},boolean,[]}]]},{type,{556,7},constraint,[{atom,{556,7},is_subtype},[{var,{556,7},'Info'},{type,{556,15},boolean,[]}]]},{type,{557,7},constraint,[{atom,{557,7},is_subtype},[{var,{557,7},'Option'},{type,{557,17},union,[{type,{557,17},tuple,[{atom,{557,18},async},{var,{557,25},'Async'}]},{type,{557,34},tuple,[{atom,{557,35},info},{var,{557,41},'Info'}]}]}]]},{type,{558,7},constraint,[{atom,{558,7},is_subtype},[{var,{558,7},'Options'},{type,{558,18},list,[{var,{558,19},'Option'}]}]]},{type,{559,7},constraint,[{atom,{559,7},is_subtype},[{var,{559,7},'Time'},{type,{559,15},non_neg_integer,[]}]]},{type,{560,7},constraint,[{atom,{560,7},is_subtype},[{var,{560,7},'Result'},{type,{560,17},union,[{var,{560,17},'Time'},{atom,{560,24},false}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,ceil,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,567}],[<<99,101,105,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,105,110,116,101,103,101,114,32,110,111,116,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,99,101,105,108,40,53,46,53,41,46,10,54>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,57,49>>,signature => [{attribute,{567,2},spec,{{ceil,1},[{type,{567,11},bounded_fun,[{type,{567,11},'fun',[{type,{567,11},product,[{var,{567,12},'Number'}]},{type,{567,23},integer,[]}]},[{type,{568,7},constraint,[{atom,{568,7},is_subtype},[{var,{568,7},'Number'},{type,{568,17},number,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,check_old_code,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,573}],[<<99,104,101,99,107,95,111,108,100,95,99,111,100,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,104,97,115,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,99,111,100,101,95,108,111,97,100,105,110,103,35,99,111,100,101,45,114,101,112,108,97,99,101,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<111,108,100,32,99,111,100,101>>]},<<44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,48,52>>,signature => [{attribute,{573,2},spec,{{check_old_code,1},[{type,{573,21},bounded_fun,[{type,{573,21},'fun',[{type,{573,21},product,[{var,{573,22},'Module'}]},{type,{573,33},boolean,[]}]},[{type,{574,7},constraint,[{atom,{574,7},is_subtype},[{var,{574,7},'Module'},{type,{574,17},module,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66,48,52>>}},{{function,check_process_code,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,579}],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,40,80,105,100,44,32,77,111,100,117,108,101,44,32,91,93,41>>]},<<32>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,49,53>>,signature => [{attribute,{579,2},spec,{{check_process_code,2},[{type,{579,25},bounded_fun,[{type,{579,25},'fun',[{type,{579,25},product,[{var,{579,26},'Pid'},{var,{579,31},'Module'}]},{var,{579,42},'CheckResult'}]},[{type,{580,7},constraint,[{atom,{580,7},is_subtype},[{var,{580,7},'Pid'},{type,{580,14},pid,[]}]]},{type,{581,7},constraint,[{atom,{581,7},is_subtype},[{var,{581,7},'Module'},{type,{581,17},module,[]}]]},{type,{582,7},constraint,[{atom,{582,7},is_subtype},[{var,{582,7},'CheckResult'},{type,{582,22},boolean,[]}]]}]]}]}}]}},{{function,check_process_code,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,591}],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,104,101,99,107,115,32,105,102,32,116,104,101,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,101,99,117,116,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,98,111,111,108,101,97,110,40,41,125>>]}]},{dd,[],[{p,[],[<<68,101,116,101,114,109,105,110,101,115,32,105,102,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,97,108,108,111,119,101,100,32,119,104,101,110,32,112,101,114,102,111,114,109,105,110,103,32,116,104,101,32,111,112,101,114,97,116,105,111,110,46,32,73,102,32>>,{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,102,97,108,115,101,125>>]},<<32,105,115,32,112,97,115,115,101,100,44,32,97,110,100,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,110,101,101,100,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,97,98,111,114,116,101,100,32,40,115,101,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32>>,{code,[],[<<67,104,101,99,107,82,101,115,117,108,116>>]},<<32,98,101,108,111,119,41,46,32,84,104,101,32,100,101,102,97,117,108,116,32,105,115,32,116,111,32,97,108,108,111,119,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,44,32,116,104,97,116,32,105,115,44,32>>,{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,116,114,117,101,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,82,101,113,117,101,115,116,73,100,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,51>>]},<<32,114,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,115,101,110,116,46,32,87,104,101,110,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,44,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,97,108,108,101,100,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,112,97,115,115,101,100,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,44,32,82,101,113,117,101,115,116,73,100,44,32,67,104,101,99,107,82,101,115,117,108,116,125>>]},<<46>>]}]}]},{p,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<115,101,108,102,40,41>>]},<<44,32,97,110,100,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,116,32,111,110,99,101,46,32,79,116,104,101,114,119,105,115,101,32,97,32,114,101,113,117,101,115,116,32,102,111,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,97,110,100,32,105,115,32,104,97,110,100,108,101,100,32,119,104,101,110,32,97,112,112,114,111,112,114,105,97,116,101,46,32,73,102,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,98,108,111,99,107,115,32,117,110,116,105,108,32>>,{code,[],[<<67,104,101,99,107,82,101,115,117,108,116>>]},<<32,105,115,32,97,118,97,105,108,97,98,108,101,32,97,110,100,32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<67,104,101,99,107,82,101,115,117,108,116>>]},<<32,105,110,102,111,114,109,115,32,97,98,111,117,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,114,101,113,117,101,115,116,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,101,99,117,116,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,99,97,108,108,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,101,99,117,116,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,99,111,110,116,97,105,110,115,32,102,117,110,115,32,116,104,97,116,32,114,101,102,101,114,101,110,99,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,101,99,117,116,101,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<97,98,111,114,116,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,101,114,97,116,105,111,110,32,119,97,115,32,97,98,111,114,116,101,100,44,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,110,101,101,100,101,100,32,116,111,32,98,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,114,101,115,117,108,116,44,32,97,110,100,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,119,97,115,32,114,101,113,117,101,115,116,101,100,32,98,121,32,112,97,115,115,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,108,108,111,119,95,103,99,44,32,102,97,108,115,101,125>>]},<<46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<85,112,32,117,110,116,105,108,32,69,82,84,83,32,118,101,114,115,105,111,110,32,56,46,42,44,32,116,104,101,32,99,104,101,99,107,32,112,114,111,99,101,115,115,32,99,111,100,101,32,111,112,101,114,97,116,105,111,110,32,99,104,101,99,107,115,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,116,104,101,32,111,108,100,32,99,111,100,101,46,32,84,104,97,116,32,105,115,44,32,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,40,101,46,103,46,32,114,101,116,117,114,110,32,97,100,100,114,101,115,115,101,115,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,41,44,32,105,110,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,40>>,{code,[],[<<102,117,110>>]},<<115,32,105,110,32,112,114,111,99,101,115,115,32,99,111,110,116,101,120,116,41,44,32,97,110,100,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,108,105,116,101,114,97,108,115,32,105,110,32,116,104,101,32,99,111,100,101,46>>]},{p,[],[<<65,115,32,111,102,32,69,82,84,83,32,118,101,114,115,105,111,110,32,57,46,48,44,32,116,104,101,32,99,104,101,99,107,32,112,114,111,99,101,115,115,32,99,111,100,101,32,111,112,101,114,97,116,105,111,110,32,111,110,108,121,32,99,104,101,99,107,115,32,102,111,114,32,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,116,104,101,32,99,111,100,101,46,32,73,110,100,105,114,101,99,116,32,114,101,102,101,114,101,110,99,101,115,32,118,105,97,32>>,{code,[],[<<102,117,110>>]},<<115,32,119,105,108,108,32,98,101,32,105,103,110,111,114,101,100,46,32,73,102,32,115,117,99,104,32>>,{code,[],[<<102,117,110>>]},<<115,32,101,120,105,115,116,32,97,110,100,32,97,114,101,32,117,115,101,100,32,97,102,116,101,114,32,97,32,112,117,114,103,101,32,111,102,32,116,104,101,32,111,108,100,32,99,111,100,101,44,32,97,110,32,101,120,99,101,112,116,105,111,110,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100,32,117,112,111,110,32,117,115,97,103,101,32,40,115,97,109,101,32,97,115,32,116,104,101,32,99,97,115,101,32,119,104,101,110,32,116,104,101,32>>,{code,[],[<<102,117,110>>]},<<32,105,115,32,114,101,99,101,105,118,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,97,102,116,101,114,32,116,104,101,32,112,117,114,103,101,41,46,32,76,105,116,101,114,97,108,115,32,119,105,108,108,32,98,101,32,116,97,107,101,110,32,99,97,114,101,32,111,102,32,40,99,111,112,105,101,100,41,32,97,116,32,97,32,108,97,116,101,114,32,115,116,97,103,101,46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,99,97,110,32,97,115,32,111,102,32,69,82,84,83,32,118,101,114,115,105,111,110,32,56,46,49,32,98,101,32,101,110,97,98,108,101,100,32,119,104,101,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,105,110,115,116,97,108,108,97,116,105,111,110,95,103,117,105,100,101,58,73,78,83,84,65,76,76,35,65,100,118,97,110,99,101,100,45,99,111,110,102,105,103,117,114,97,116,105,111,110,45,97,110,100,45,98,117,105,108,100,45,111,102,45,69,114,108,97,110,103,79,84,80,95,67,111,110,102,105,103,117,114,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<98,117,105,108,100,105,110,103,32,79,84,80>>]},<<44,32,97,110,100,32,119,105,108,108,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,98,101,32,101,110,97,98,108,101,100,32,105,102,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,32,115,117,112,112,111,114,116,32,105,115,32,101,110,97,98,108,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,50,54>>,signature => [{attribute,{591,2},spec,{{check_process_code,3},[{type,{591,25},bounded_fun,[{type,{591,25},'fun',[{type,{591,25},product,[{var,{591,26},'Pid'},{var,{591,31},'Module'},{var,{591,39},'OptionList'}]},{type,{591,54},union,[{var,{591,54},'CheckResult'},{atom,{591,68},async}]}]},[{type,{592,7},constraint,[{atom,{592,7},is_subtype},[{var,{592,7},'Pid'},{type,{592,14},pid,[]}]]},{type,{593,7},constraint,[{atom,{593,7},is_subtype},[{var,{593,7},'Module'},{type,{593,17},module,[]}]]},{type,{594,7},constraint,[{atom,{594,7},is_subtype},[{var,{594,7},'RequestId'},{type,{594,20},term,[]}]]},{type,{595,7},constraint,[{atom,{595,7},is_subtype},[{var,{595,7},'Option'},{type,{595,17},union,[{type,{595,17},tuple,[{atom,{595,18},async},{var,{595,25},'RequestId'}]},{type,{595,38},tuple,[{atom,{595,39},allow_gc},{type,{595,49},boolean,[]}]}]}]]},{type,{596,7},constraint,[{atom,{596,7},is_subtype},[{var,{596,7},'OptionList'},{type,{596,21},list,[{var,{596,22},'Option'}]}]]},{type,{597,7},constraint,[{atom,{597,7},is_subtype},[{var,{597,7},'CheckResult'},{type,{597,22},union,[{type,{597,22},boolean,[]},{atom,{597,34},aborted}]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,convert_time_unit,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1559}],[<<99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,111,102,32,116,105,109,101,32,117,110,105,116,32>>,{code,[],[<<70,114,111,109,85,110,105,116>>]},<<32,116,111,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<67,111,110,118,101,114,116,101,100,84,105,109,101>>]},<<32,118,97,108,117,101,32,111,102,32,116,105,109,101,32,117,110,105,116,32>>,{code,[],[<<84,111,85,110,105,116>>]},<<46,32,84,104,101,32,114,101,115,117,108,116,32,105,115,32,114,111,117,110,100,101,100,32,117,115,105,110,103,32,116,104,101,32,102,108,111,111,114,32,102,117,110,99,116,105,111,110,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<89,111,117,32,99,97,110,32,108,111,115,101,32,97,99,99,117,114,97,99,121,32,97,110,100,32,112,114,101,99,105,115,105,111,110,32,119,104,101,110,32,99,111,110,118,101,114,116,105,110,103,32,98,101,116,119,101,101,110,32,116,105,109,101,32,117,110,105,116,115,46,32,84,111,32,109,105,110,105,109,105,122,101,32,115,117,99,104,32,108,111,115,115,44,32,99,111,108,108,101,99,116,32,97,108,108,32,100,97,116,97,32,97,116,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,97,110,100,32,100,111,32,116,104,101,32,99,111,110,118,101,114,115,105,111,110,32,111,110,32,116,104,101,32,101,110,100,32,114,101,115,117,108,116,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,50,57>>,signature => [{attribute,{1559,2},spec,{{erlang,convert_time_unit,3},[{type,{1559,31},bounded_fun,[{type,{1559,31},'fun',[{type,{1559,31},product,[{var,{1559,32},'Time'},{var,{1559,38},'FromUnit'},{var,{1559,48},'ToUnit'}]},{var,{1559,59},'ConvertedTime'}]},[{type,{1560,7},constraint,[{atom,{1560,7},is_subtype},[{var,{1560,7},'Time'},{type,{1560,15},integer,[]}]]},{type,{1561,7},constraint,[{atom,{1561,7},is_subtype},[{var,{1561,7},'ConvertedTime'},{type,{1561,24},integer,[]}]]},{type,{1562,7},constraint,[{atom,{1562,7},is_subtype},[{var,{1562,7},'FromUnit'},{user_type,{1562,19},time_unit,[]}]]},{type,{1563,7},constraint,[{atom,{1563,7},is_subtype},[{var,{1563,7},'ToUnit'},{user_type,{1563,17},time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,crc32,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,609}],[<<99,114,99,51,50,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,117,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,99,114,99,51,50,32,40,73,69,69,69,32,56,48,50,46,51,32,115,116,121,108,101,41,32,99,104,101,99,107,115,117,109,32,102,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,52,55>>,signature => [{attribute,{609,2},spec,{{erlang,crc32,1},[{type,{609,19},bounded_fun,[{type,{609,19},'fun',[{type,{609,19},product,[{var,{609,20},'Data'}]},{type,{609,29},non_neg_integer,[]}]},[{type,{610,7},constraint,[{atom,{610,7},is_subtype},[{var,{610,7},'Data'},{type,{610,15},iodata,[]}]]}]]}]}}]}},{{function,crc32,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,615}],[<<99,114,99,51,50,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,110,116,105,110,117,101,115,32,99,111,109,112,117,116,105,110,103,32,116,104,101,32,99,114,99,51,50,32,99,104,101,99,107,115,117,109,32,98,121,32,99,111,109,98,105,110,105,110,103,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,104,101,99,107,115,117,109,44,32>>,{code,[],[<<79,108,100,67,114,99>>]},<<44,32,119,105,116,104,32,116,104,101,32,99,104,101,99,107,115,117,109,32,111,102,32>>,{code,[],[<<68,97,116,97>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,88,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<89>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,91,68,97,116,97,49,44,68,97,116,97,50,93,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,53,54>>,signature => [{attribute,{615,2},spec,{{erlang,crc32,2},[{type,{615,19},bounded_fun,[{type,{615,19},'fun',[{type,{615,19},product,[{var,{615,20},'OldCrc'},{var,{615,28},'Data'}]},{type,{615,37},non_neg_integer,[]}]},[{type,{616,7},constraint,[{atom,{616,7},is_subtype},[{var,{616,7},'OldCrc'},{type,{616,17},non_neg_integer,[]}]]},{type,{617,7},constraint,[{atom,{617,7},is_subtype},[{var,{617,7},'Data'},{type,{617,15},iodata,[]}]]}]]}]}}]}},{{function,crc32_combine,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,622}],[<<99,114,99,51,50,95,99,111,109,98,105,110,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32,116,119,111,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,117,116,101,100,32,99,114,99,51,50,32,99,104,101,99,107,115,117,109,115,46,32,84,104,105,115,32,99,111,109,112,117,116,97,116,105,111,110,32,114,101,113,117,105,114,101,115,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,100,97,116,97,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32,115,101,99,111,110,100,32,99,104,101,99,107,115,117,109,32,116,111,32,98,101,32,107,110,111,119,110,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,100,101,58>>]},{pre,[],[{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,49,41,44,10,90,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,89,44,68,97,116,97,50,41,46>>]}]},{p,[],[<<97,115,115,105,103,110,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<90>>]},<<32,97,115,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,49,41,44,10,89,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,40,68,97,116,97,50,41,44,10,90,32,61,32,101,114,108,97,110,103,58,99,114,99,51,50,95,99,111,109,98,105,110,101,40,88,44,89,44,105,111,108,105,115,116,95,115,105,122,101,40,68,97,116,97,50,41,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,55,51>>,signature => [{attribute,{622,2},spec,{{erlang,crc32_combine,3},[{type,{622,27},bounded_fun,[{type,{622,27},'fun',[{type,{622,27},product,[{var,{622,28},'FirstCrc'},{var,{622,38},'SecondCrc'},{var,{622,49},'SecondSize'}]},{type,{622,64},non_neg_integer,[]}]},[{type,{623,7},constraint,[{atom,{623,7},is_subtype},[{var,{623,7},'FirstCrc'},{type,{623,19},non_neg_integer,[]}]]},{type,{624,7},constraint,[{atom,{624,7},is_subtype},[{var,{624,7},'SecondCrc'},{type,{624,20},non_neg_integer,[]}]]},{type,{625,7},constraint,[{atom,{625,7},is_subtype},[{var,{625,7},'SecondSize'},{type,{625,21},non_neg_integer,[]}]]}]]}]}}]}},{{function,date,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,630}],[<<100,97,116,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,100,97,116,101,32,97,115,32>>,{code,[],[<<123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125>>]},<<46>>]},{p,[],[<<84,104,101,32,116,105,109,101,32,122,111,110,101,32,97,110,100,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,99,111,114,114,101,99,116,105,111,110,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,100,97,116,101,40,41,46,10,123,49,57,57,53,44,50,44,49,57,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,57,50>>,signature => [{attribute,{630,2},spec,{{date,0},[{type,{630,11},bounded_fun,[{type,{630,11},'fun',[{type,{630,11},product,[]},{var,{630,17},'Date'}]},[{type,{631,7},constraint,[{atom,{631,7},is_subtype},[{var,{631,7},'Date'},{remote_type,{631,15},[{atom,{631,15},calendar},{atom,{631,24},date},[]]}]]}]]}]}}]}},{{function,decode_packet,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,636}],[<<100,101,99,111,100,101,95,112,97,99,107,101,116,47,51>>],#{<<101,110>> => [{p,[],[<<68,101,99,111,100,101,115,32,116,104,101,32,98,105,110,97,114,121,32>>,{code,[],[<<66,105,110>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,112,97,99,107,101,116,32,112,114,111,116,111,99,111,108,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<84,121,112,101>>]},<<46,32,83,105,109,105,108,97,114,32,116,111,32,116,104,101,32,112,97,99,107,101,116,32,104,97,110,100,108,105,110,103,32,100,111,110,101,32,98,121,32,115,111,99,107,101,116,115,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<123,112,97,99,107,101,116,44,84,121,112,101,125,46>>]}]},{p,[],[<<73,102,32,97,110,32,101,110,116,105,114,101,32,112,97,99,107,101,116,32,105,115,32,99,111,110,116,97,105,110,101,100,32,105,110,32>>,{code,[],[<<66,105,110>>]},<<44,32,105,116,32,105,115,32,114,101,116,117,114,110,101,100,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,97,115,32>>,{code,[],[<<123,111,107,44,80,97,99,107,101,116,44,82,101,115,116,125>>]},<<46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,105,110>>]},<<32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,116,104,101,32,101,110,116,105,114,101,32,112,97,99,107,101,116,44,32>>,{code,[],[<<123,109,111,114,101,44,76,101,110,103,116,104,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32>>,{code,[],[<<76,101,110,103,116,104>>]},<<32,105,115,32,101,105,116,104,101,114,32,116,104,101,32,101,120,112,101,99,116,101,100,32>>,{em,[],[<<116,111,116,97,108,32,115,105,122,101>>]},<<32,111,102,32,116,104,101,32,112,97,99,107,101,116,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,101,120,112,101,99,116,101,100,32,112,97,99,107,101,116,32,115,105,122,101,32,105,115,32,117,110,107,110,111,119,110,46,32>>,{code,[],[<<100,101,99,111,100,101,95,112,97,99,107,101,116>>]},<<32,99,97,110,32,116,104,101,110,32,98,101,32,99,97,108,108,101,100,32,97,103,97,105,110,32,119,105,116,104,32,109,111,114,101,32,100,97,116,97,32,97,100,100,101,100,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,97,99,107,101,116,32,100,111,101,115,32,110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,116,104,101,32,112,114,111,116,111,99,111,108,32,102,111,114,109,97,116,44,32>>,{code,[],[<<123,101,114,114,111,114,44,82,101,97,115,111,110,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<84,121,112,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<114,97,119,32,124,32,48>>]}]},{dd,[],[{p,[],[<<78,111,32,112,97,99,107,101,116,32,104,97,110,100,108,105,110,103,32,105,115,32,100,111,110,101,46,32,84,104,101,32,101,110,116,105,114,101,32,98,105,110,97,114,121,32,105,115,32,114,101,116,117,114,110,101,100,32,117,110,108,101,115,115,32,105,116,32,105,115,32,101,109,112,116,121,46>>]}]},{dt,[],[{code,[],[<<49,32,124,32,50,32,124,32,52>>]}]},{dd,[],[{p,[],[<<80,97,99,107,101,116,115,32,99,111,110,115,105,115,116,32,111,102,32,97,32,104,101,97,100,101,114,32,115,112,101,99,105,102,121,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,110,32,116,104,101,32,112,97,99,107,101,116,44,32,102,111,108,108,111,119,101,100,32,98,121,32,116,104,97,116,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,46,32,84,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,104,101,97,100,101,114,32,99,97,110,32,98,101,32,111,110,101,44,32,116,119,111,44,32,111,114,32,102,111,117,114,32,98,121,116,101,115,59,32,116,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,98,121,116,101,115,32,105,115,32,98,105,103,45,101,110,100,105,97,110,46,32,84,104,101,32,104,101,97,100,101,114,32,105,115,32,115,116,114,105,112,112,101,100,32,111,102,102,32,119,104,101,110,32,116,104,101,32,112,97,99,107,101,116,32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{code,[],[<<108,105,110,101>>]}]},{dd,[],[{p,[],[<<65,32,112,97,99,107,101,116,32,105,115,32,97,32,108,105,110,101,45,116,101,114,109,105,110,97,116,101,100,32,98,121,32,97,32,100,101,108,105,109,105,116,101,114,32,98,121,116,101,44,32,100,101,102,97,117,108,116,32,105,115,32,116,104,101,32,108,97,116,105,110,45,49,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,100,101,108,105,109,105,116,101,114,32,98,121,116,101,32,105,115,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,112,97,99,107,101,116,32,117,110,108,101,115,115,32,116,104,101,32,108,105,110,101,32,119,97,115,32,116,114,117,110,99,97,116,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,111,112,116,105,111,110,32>>,{code,[],[<<108,105,110,101,95,108,101,110,103,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<97,115,110,49,32,124,32,99,100,114,32,124,32,115,117,110,114,109,32,124,32,102,99,103,105,32,124,32,116,112,107,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,104,101,97,100,101,114,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,115,116,114,105,112,112,101,100,32,111,102,102,46>>]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,116,104,101,32,112,97,99,107,101,116,32,116,121,112,101,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,115,110,49>>]},<<32,45,32,65,83,78,46,49,32,66,69,82>>]},{dd,[],[]},{dt,[],[{code,[],[<<115,117,110,114,109>>]},<<32,45,32,83,117,110,39,115,32,82,80,67,32,101,110,99,111,100,105,110,103>>]},{dd,[],[]},{dt,[],[{code,[],[<<99,100,114>>]},<<32,45,32,67,79,82,66,65,32,40,71,73,79,80,32,49,46,49,41>>]},{dd,[],[]},{dt,[],[{code,[],[<<102,99,103,105>>]},<<32,45,32,70,97,115,116,32,67,71,73>>]},{dd,[],[]},{dt,[],[{code,[],[<<116,112,107,116>>]},<<32,45,32,84,80,75,84,32,102,111,114,109,97,116,32,91,82,70,67,49,48,48,54,93>>]},{dd,[],[]}]}]},{dt,[],[{code,[],[<<104,116,116,112,32,124,32,104,116,116,112,104,32,124,32,104,116,116,112,95,98,105,110,32,124,32,104,116,116,112,104,95,98,105,110>>]}]},{dd,[],[{p,[],[<<84,104,101,32,72,121,112,101,114,116,101,120,116,32,84,114,97,110,115,102,101,114,32,80,114,111,116,111,99,111,108,46,32,84,104,101,32,112,97,99,107,101,116,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,119,105,116,104,32,116,104,101,32,102,111,114,109,97,116,32,97,99,99,111,114,100,105,110,103,32,116,111,32>>,{code,[],[<<72,116,116,112,80,97,99,107,101,116>>]},<<32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46,32,65,32,112,97,99,107,101,116,32,105,115,32,101,105,116,104,101,114,32,97,32,114,101,113,117,101,115,116,44,32,97,32,114,101,115,112,111,110,115,101,44,32,97,32,104,101,97,100,101,114,44,32,111,114,32,97,110,32,101,110,100,32,111,102,32,104,101,97,100,101,114,32,109,97,114,107,46,32,73,110,118,97,108,105,100,32,108,105,110,101,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32>>,{code,[],[<<72,116,116,112,69,114,114,111,114>>]},<<46>>]},{p,[],[<<82,101,99,111,103,110,105,122,101,100,32,114,101,113,117,101,115,116,32,109,101,116,104,111,100,115,32,97,110,100,32,104,101,97,100,101,114,32,102,105,101,108,100,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,97,116,111,109,115,46,32,79,116,104,101,114,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,115,116,114,105,110,103,115,46,32,83,116,114,105,110,103,115,32,111,102,32,117,110,114,101,99,111,103,110,105,122,101,100,32,104,101,97,100,101,114,32,102,105,101,108,100,115,32,97,114,101,32,102,111,114,109,97,116,116,101,100,32,119,105,116,104,32,111,110,108,121,32,99,97,112,105,116,97,108,32,108,101,116,116,101,114,115,32,102,105,114,115,116,32,97,110,100,32,97,102,116,101,114,32,104,121,112,104,101,110,32,99,104,97,114,97,99,116,101,114,115,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<34,83,101,99,45,87,101,98,115,111,99,107,101,116,45,75,101,121,34>>]},<<46,32,72,101,97,100,101,114,32,102,105,101,108,100,32,110,97,109,101,115,32,97,114,101,32,97,108,115,111,32,114,101,116,117,114,110,101,100,32,105,110,32>>,{code,[],[<<85,110,109,111,100,105,102,105,101,100,70,105,101,108,100>>]},<<32,97,115,32,115,116,114,105,110,103,115,44,32,119,105,116,104,111,117,116,32,97,110,121,32,99,111,110,118,101,114,115,105,111,110,32,111,114,32,102,111,114,109,97,116,116,105,110,103,46>>]},{p,[],[<<84,104,101,32,112,114,111,116,111,99,111,108,32,116,121,112,101,32>>,{code,[],[<<104,116,116,112>>]},<<32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,102,111,114,32,116,104,101,32,102,105,114,115,116,32,108,105,110,101,32,119,104,101,110,32,97,110,32>>,{code,[],[<<72,116,116,112,82,101,113,117,101,115,116>>]},<<32,111,114,32,97,110,32>>,{code,[],[<<72,116,116,112,82,101,115,112,111,110,115,101>>]},<<32,105,115,32,101,120,112,101,99,116,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,115,32,97,114,101,32,116,111,32,117,115,101,32>>,{code,[],[<<104,116,116,112,104>>]},<<32,116,111,32,103,101,116,32>>,{code,[],[<<72,116,116,112,72,101,97,100,101,114>>]},<<115,32,117,110,116,105,108,32>>,{code,[],[<<104,116,116,112,95,101,111,104>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,119,104,105,99,104,32,109,97,114,107,115,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,104,101,97,100,101,114,115,32,97,110,100,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,97,110,121,32,102,111,108,108,111,119,105,110,103,32,109,101,115,115,97,103,101,32,98,111,100,121,46>>]},{p,[],[<<84,104,101,32,118,97,114,105,97,110,116,115,32>>,{code,[],[<<104,116,116,112,95,98,105,110>>]},<<32,97,110,100,32>>,{code,[],[<<104,116,116,112,104,95,98,105,110>>]},<<32,114,101,116,117,114,110,32,115,116,114,105,110,103,115,32,40>>,{code,[],[<<72,116,116,112,83,116,114,105,110,103>>]},<<41,32,97,115,32,98,105,110,97,114,105,101,115,32,105,110,115,116,101,97,100,32,111,102,32,108,105,115,116,115,46>>]}]}]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,97,99,107,101,116,95,115,105,122,101,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,109,97,120,105,109,117,109,32,97,108,108,111,119,101,100,32,115,105,122,101,32,111,102,32,116,104,101,32,112,97,99,107,101,116,32,98,111,100,121,46,32,73,102,32,116,104,101,32,112,97,99,107,101,116,32,104,101,97,100,101,114,32,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,112,97,99,107,101,116,32,105,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,101,32,109,97,120,105,109,117,109,32,97,108,108,111,119,101,100,32,108,101,110,103,116,104,44,32,116,104,101,32,112,97,99,107,101,116,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,105,110,118,97,108,105,100,46,32,68,101,102,97,117,108,116,115,32,116,111,32,48,44,32,119,104,105,99,104,32,109,101,97,110,115,32,110,111,32,115,105,122,101,32,108,105,109,105,116,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,101,95,108,101,110,103,116,104,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<70,111,114,32,112,97,99,107,101,116,32,116,121,112,101,32>>,{code,[],[<<108,105,110,101>>]},<<44,32,108,105,110,101,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,101,32,105,110,100,105,99,97,116,101,100,32,108,101,110,103,116,104,32,97,114,101,32,116,114,117,110,99,97,116,101,100,46>>]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<108,105,110,101,95,108,101,110,103,116,104>>]},<<32,97,108,115,111,32,97,112,112,108,105,101,115,32,116,111,32>>,{code,[],[<<104,116,116,112,42>>]},<<32,112,97,99,107,101,116,32,116,121,112,101,115,32,97,115,32,97,110,32,97,108,105,97,115,32,102,111,114,32,111,112,116,105,111,110,32>>,{code,[],[<<112,97,99,107,101,116,95,115,105,122,101>>]},<<32,105,102,32>>,{code,[],[<<112,97,99,107,101,116,95,115,105,122,101>>]},<<32,105,116,115,101,108,102,32,105,115,32,110,111,116,32,115,101,116,46,32,84,104,105,115,32,117,115,101,32,105,115,32,111,110,108,121,32,105,110,116,101,110,100,101,100,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,101,95,100,101,108,105,109,105,116,101,114,44,32,48,32,61,60,32,98,121,116,101,40,41,32,61,60,32,50,53,53,125>>]}]},{dd,[],[{p,[],[<<70,111,114,32,112,97,99,107,101,116,32,116,121,112,101,32>>,{code,[],[<<108,105,110,101>>]},<<44,32,115,101,116,115,32,116,104,101,32,100,101,108,105,109,105,116,105,110,103,32,98,121,116,101,46,32,68,101,102,97,117,108,116,32,105,115,32,116,104,101,32,108,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32>>,{code,[],[<<36,92,110>>]},<<46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,100,101,99,111,100,101,95,112,97,99,107,101,116,40,49,44,60,60,51,44,34,97,98,99,100,34,62,62,44,91,93,41,46,10,123,111,107,44,60,60,34,97,98,99,34,62,62,44,60,60,34,100,34,62,62,125,10,62,32,101,114,108,97,110,103,58,100,101,99,111,100,101,95,112,97,99,107,101,116,40,49,44,60,60,53,44,34,97,98,99,100,34,62,62,44,91,93,41,46,10,123,109,111,114,101,44,54,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,48,55>>,signature => [{attribute,{636,2},spec,{{erlang,decode_packet,3},[{type,{636,27},bounded_fun,[{type,{636,27},'fun',[{type,{636,27},product,[{var,{636,28},'Type'},{var,{636,34},'Bin'},{var,{636,39},'Options'}]},{type,{637,35},union,[{type,{637,35},tuple,[{atom,{637,36},ok},{var,{637,40},'Packet'},{var,{637,48},'Rest'}]},{type,{638,35},tuple,[{atom,{638,36},more},{var,{638,42},'Length'}]},{type,{639,35},tuple,[{atom,{639,36},error},{var,{639,43},'Reason'}]}]}]},[{type,{640,7},constraint,[{atom,{640,7},is_subtype},[{var,{640,7},'Type'},{type,{640,15},union,[{atom,{640,15},raw},{integer,{640,23},0},{integer,{640,27},1},{integer,{640,31},2},{integer,{640,35},4},{atom,{640,39},asn1},{atom,{640,48},cdr},{atom,{640,56},sunrm},{atom,{640,66},fcgi},{atom,{641,15},tpkt},{atom,{641,24},line},{atom,{641,33},http},{atom,{641,42},http_bin},{atom,{641,55},httph},{atom,{641,65},httph_bin}]}]]},{type,{642,7},constraint,[{atom,{642,7},is_subtype},[{var,{642,7},'Bin'},{type,{642,14},binary,[]}]]},{type,{643,7},constraint,[{atom,{643,7},is_subtype},[{var,{643,7},'Options'},{type,{643,18},list,[{var,{643,19},'Opt'}]}]]},{type,{644,7},constraint,[{atom,{644,7},is_subtype},[{var,{644,7},'Opt'},{type,{644,14},union,[{type,{644,14},tuple,[{atom,{644,15},packet_size},{type,{644,28},non_neg_integer,[]}]},{type,{645,14},tuple,[{atom,{645,15},line_length},{type,{645,28},non_neg_integer,[]}]}]}]]},{type,{646,7},constraint,[{atom,{646,7},is_subtype},[{var,{646,7},'Packet'},{type,{646,17},union,[{type,{646,17},binary,[]},{var,{646,28},'HttpPacket'}]}]]},{type,{647,7},constraint,[{atom,{647,7},is_subtype},[{var,{647,7},'Rest'},{type,{647,15},binary,[]}]]},{type,{648,7},constraint,[{atom,{648,7},is_subtype},[{var,{648,7},'Length'},{type,{648,17},union,[{type,{648,17},non_neg_integer,[]},{atom,{648,37},undefined}]}]]},{type,{649,7},constraint,[{atom,{649,7},is_subtype},[{var,{649,7},'Reason'},{type,{649,17},term,[]}]]},{type,{650,7},constraint,[{atom,{650,7},is_subtype},[{var,{650,7},'HttpPacket'},{type,{650,21},union,[{var,{650,21},'HttpRequest'},{var,{651,21},'HttpResponse'},{var,{652,21},'HttpHeader'},{atom,{653,21},http_eoh},{var,{654,21},'HttpError'}]}]]},{type,{655,7},constraint,[{atom,{655,7},is_subtype},[{var,{655,7},'HttpRequest'},{type,{655,22},tuple,[{atom,{655,23},http_request},{var,{655,39},'HttpMethod'},{var,{655,51},'HttpUri'},{var,{655,60},'HttpVersion'}]}]]},{type,{656,7},constraint,[{atom,{656,7},is_subtype},[{var,{656,7},'HttpResponse'},{type,{656,23},tuple,[{atom,{656,24},http_response},{var,{656,41},'HttpVersion'},{type,{656,54},integer,[]},{var,{656,65},'HttpString'}]}]]},{type,{657,7},constraint,[{atom,{657,7},is_subtype},[{var,{657,7},'HttpHeader'},{type,{657,21},tuple,[{atom,{657,22},http_header},{type,{658,22},integer,[]},{var,{659,22},'HttpField'},{ann_type,{660,22},[{var,{660,22},'UnmodifiedField'},{var,{660,41},'HttpString'}]},{ann_type,{661,22},[{var,{661,22},'Value'},{var,{661,31},'HttpString'}]}]}]]},{type,{662,7},constraint,[{atom,{662,7},is_subtype},[{var,{662,7},'HttpError'},{type,{662,20},tuple,[{atom,{662,21},http_error},{var,{662,35},'HttpString'}]}]]},{type,{663,7},constraint,[{atom,{663,7},is_subtype},[{var,{663,7},'HttpMethod'},{type,{663,21},union,[{atom,{663,21},'OPTIONS'},{atom,{663,33},'GET'},{atom,{663,41},'HEAD'},{atom,{663,50},'POST'},{atom,{663,59},'PUT'},{atom,{663,67},'DELETE'},{atom,{664,21},'TRACE'},{var,{664,31},'HttpString'}]}]]},{type,{665,7},constraint,[{atom,{665,7},is_subtype},[{var,{665,7},'HttpUri'},{type,{665,18},union,[{atom,{665,18},'*'},{type,{666,18},tuple,[{atom,{666,20},absoluteURI},{type,{667,20},union,[{atom,{667,20},http},{atom,{667,29},https}]},{ann_type,{668,20},[{var,{668,20},'Host'},{var,{668,28},'HttpString'}]},{ann_type,{669,20},[{var,{669,20},'Port'},{type,{669,28},union,[{remote_type,{669,28},[{atom,{669,28},inet},{atom,{669,33},port_number},[]]},{atom,{669,49},undefined}]}]},{ann_type,{670,20},[{var,{670,20},'Path'},{var,{670,28},'HttpString'}]}]},{type,{671,18},tuple,[{atom,{671,19},scheme},{ann_type,{671,29},[{var,{671,29},'Scheme'},{var,{671,39},'HttpString'}]},{var,{671,51},'HttpString'}]},{type,{672,18},tuple,[{atom,{672,19},abs_path},{var,{672,31},'HttpString'}]},{var,{673,18},'HttpString'}]}]]},{type,{674,7},constraint,[{atom,{674,7},is_subtype},[{var,{674,7},'HttpVersion'},{type,{674,22},tuple,[{ann_type,{674,23},[{var,{674,23},'Major'},{type,{674,32},non_neg_integer,[]}]},{ann_type,{674,51},[{var,{674,51},'Minor'},{type,{674,60},non_neg_integer,[]}]}]}]]},{type,{675,7},constraint,[{atom,{675,7},is_subtype},[{var,{675,7},'HttpField'},{type,{675,20},union,[{atom,{675,20},'Cache-Control'},{atom,{676,20},'Connection'},{atom,{677,20},'Date'},{atom,{678,20},'Pragma'},{atom,{679,20},'Transfer-Encoding'},{atom,{680,20},'Upgrade'},{atom,{681,20},'Via'},{atom,{682,20},'Accept'},{atom,{683,20},'Accept-Charset'},{atom,{684,20},'Accept-Encoding'},{atom,{685,20},'Accept-Language'},{atom,{686,20},'Authorization'},{atom,{687,20},'From'},{atom,{688,20},'Host'},{atom,{689,20},'If-Modified-Since'},{atom,{690,20},'If-Match'},{atom,{691,20},'If-None-Match'},{atom,{692,20},'If-Range'},{atom,{693,20},'If-Unmodified-Since'},{atom,{694,20},'Max-Forwards'},{atom,{695,20},'Proxy-Authorization'},{atom,{696,20},'Range'},{atom,{697,20},'Referer'},{atom,{698,20},'User-Agent'},{atom,{699,20},'Age'},{atom,{700,20},'Location'},{atom,{701,20},'Proxy-Authenticate'},{atom,{702,20},'Public'},{atom,{703,20},'Retry-After'},{atom,{704,20},'Server'},{atom,{705,20},'Vary'},{atom,{706,20},'Warning'},{atom,{707,19},'Www-Authenticate'},{atom,{708,20},'Allow'},{atom,{709,20},'Content-Base'},{atom,{710,20},'Content-Encoding'},{atom,{711,20},'Content-Language'},{atom,{712,20},'Content-Length'},{atom,{713,20},'Content-Location'},{atom,{714,20},'Content-Md5'},{atom,{715,20},'Content-Range'},{atom,{716,20},'Content-Type'},{atom,{717,20},'Etag'},{atom,{718,20},'Expires'},{atom,{719,20},'Last-Modified'},{atom,{720,20},'Accept-Ranges'},{atom,{721,20},'Set-Cookie'},{atom,{722,20},'Set-Cookie2'},{atom,{723,20},'X-Forwarded-For'},{atom,{724,20},'Cookie'},{atom,{725,20},'Keep-Alive'},{atom,{726,20},'Proxy-Connection'},{var,{727,20},'HttpString'}]}]]},{type,{728,7},constraint,[{atom,{728,7},is_subtype},[{var,{728,7},'HttpString'},{type,{728,21},union,[{type,{728,21},string,[]},{type,{728,32},binary,[]}]}]]}]]}]}}]}},{{function,delete_element,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,733}],[<<100,101,108,101,116,101,95,101,108,101,109,101,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,101,119,32,116,117,112,108,101,32,119,105,116,104,32,101,108,101,109,101,110,116,32,97,116,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,100,101,108,101,116,101,95,101,108,101,109,101,110,116,40,50,44,32,123,111,110,101,44,32,116,119,111,44,32,116,104,114,101,101,125,41,46,10,123,111,110,101,44,116,104,114,101,101,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,51,49,57>>,signature => [{attribute,{733,2},spec,{{erlang,delete_element,2},[{type,{733,28},bounded_fun,[{type,{733,28},'fun',[{type,{733,28},product,[{var,{733,29},'Index'},{var,{733,36},'Tuple1'}]},{var,{733,47},'Tuple2'}]},[{type,{734,7},constraint,[{atom,{734,7},is_subtype},[{var,{734,7},'Index'},{type,{734,17},pos_integer,[]}]]},{type,{735,7},constraint,[{atom,{735,7},is_subtype},[{var,{735,7},'Tuple1'},{type,{735,17},tuple,any}]]},{type,{736,7},constraint,[{atom,{736,7},is_subtype},[{var,{736,7},'Tuple2'},{type,{736,17},tuple,any}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,delete_module,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,741}],[<<100,101,108,101,116,101,95,109,111,100,117,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<77,97,107,101,115,32,116,104,101,32,99,117,114,114,101,110,116,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,98,101,99,111,109,101,32,111,108,100,32,99,111,100,101,32,97,110,100,32,100,101,108,101,116,101,115,32,97,108,108,32,114,101,102,101,114,101,110,99,101,115,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,32,102,114,111,109,32,116,104,101,32,101,120,112,111,114,116,32,116,97,98,108,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,114,101,32,97,108,114,101,97,100,121,32,105,115,32,97,110,32,111,108,100,32,118,101,114,115,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,51,51,50>>,signature => [{attribute,{741,2},spec,{{delete_module,1},[{type,{741,20},bounded_fun,[{type,{741,20},'fun',[{type,{741,20},product,[{var,{741,21},'Module'}]},{type,{741,32},union,[{atom,{741,32},true},{atom,{741,39},undefined}]}]},[{type,{742,7},constraint,[{atom,{742,7},is_subtype},[{var,{742,7},'Module'},{type,{742,17},module,[]}]]}]]}]}}]}},{{function,demonitor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,747}],[<<100,101,109,111,110,105,116,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,111,98,116,97,105,110,101,100,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,50>>]}]},<<44,32,116,104,105,115,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,102,102,46,32,73,102,32,116,104,101,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,97,108,114,101,97,100,121,32,116,117,114,110,101,100,32,111,102,102,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46>>]},{p,[],[<<79,110,99,101,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41>>]},<<32,104,97,115,32,114,101,116,117,114,110,101,100,44,32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,110,111,32>>,{code,[],[<<123,39,68,79,87,78,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,44,32,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,44,32,119,105,108,108,32,98,101,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46,32,72,111,119,101,118,101,114,44,32,97,32>>,{code,[],[<<123,39,68,79,87,78,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,32,99,97,110,32,104,97,118,101,32,98,101,101,110,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,98,101,102,111,114,101,32,116,104,101,32,99,97,108,108,46,32,73,116,32,105,115,32,116,104,101,114,101,102,111,114,101,32,117,115,117,97,108,108,121,32,97,100,118,105,115,97,98,108,101,32,116,111,32,114,101,109,111,118,101,32,115,117,99,104,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,102,114,111,109,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,102,116,101,114,32,109,111,110,105,116,111,114,105,110,103,32,104,97,115,32,98,101,101,110,32,115,116,111,112,112,101,100,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,44,32,91,102,108,117,115,104,93,41>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41>>]},<<32,105,102,32,116,104,105,115,32,99,108,101,97,110,117,112,32,105,115,32,119,97,110,116,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,32,40,69,82,84,83,32,53,46,53,41,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,47,49>>]},<<32,98,101,104,97,118,101,100,32,99,111,109,112,108,101,116,101,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,109,111,110,105,116,111,114,32,119,97,115,32,97,99,116,105,118,101,32,117,110,116,105,108,32,116,104,101,32,34,100,101,109,111,110,105,116,111,114,32,115,105,103,110,97,108,34,32,114,101,97,99,104,101,100,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,46,32,84,104,105,115,32,104,97,100,32,111,110,101,32,117,110,100,101,115,105,114,97,98,108,101,32,101,102,102,101,99,116,46,32,89,111,117,32,99,111,117,108,100,32,110,101,118,101,114,32,107,110,111,119,32,119,104,101,110,32,121,111,117,32,119,101,114,101,32,103,117,97,114,97,110,116,101,101,100,32>>,{em,[],[<<110,111,116>>]},<<32,116,111,32,114,101,99,101,105,118,101,32,97,32>>,{code,[],[<<68,79,87,78>>]},<<32,109,101,115,115,97,103,101,32,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,46>>]},{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,98,101,104,97,118,105,111,114,32,99,97,110,32,98,101,32,118,105,101,119,101,100,32,97,115,32,116,119,111,32,99,111,109,98,105,110,101,100,32,111,112,101,114,97,116,105,111,110,115,58,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,32,115,101,110,100,32,97,32,34,100,101,109,111,110,105,116,111,114,32,115,105,103,110,97,108,34,32,116,111,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,32,97,110,100,32,105,103,110,111,114,101,32,97,110,121,32,102,117,116,117,114,101,32,114,101,115,117,108,116,115,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32,73,116,32,105,115,32,97,110,32,101,114,114,111,114,32,105,102,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,109,111,110,105,116,111,114,105,110,103,32,115,116,97,114,116,101,100,32,98,121,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,78,111,116,32,97,108,108,32,115,117,99,104,32,99,97,115,101,115,32,97,114,101,32,99,104,101,97,112,32,116,111,32,99,104,101,99,107,46,32,73,102,32,99,104,101,99,107,105,110,103,32,105,115,32,99,104,101,97,112,44,32,116,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,32,105,102,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,105,115,32,97,32,114,101,109,111,116,101,32,114,101,102,101,114,101,110,99,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,51,53,48>>,signature => [{attribute,{747,2},spec,{{demonitor,1},[{type,{747,16},bounded_fun,[{type,{747,16},'fun',[{type,{747,16},product,[{var,{747,17},'MonitorRef'}]},{atom,{747,32},true}]},[{type,{748,7},constraint,[{atom,{748,7},is_subtype},[{var,{748,7},'MonitorRef'},{type,{748,21},reference,[]}]]}]]}]}}]}},{{function,demonitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,753}],[<<100,101,109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,117,110,108,101,115,115,32>>,{code,[],[<<105,110,102,111>>]},<<32,105,115,32,112,97,114,116,32,111,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<46>>]},{p,[],[{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,44,32,91,93,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41>>]}]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,108,117,115,104>>]}]},{dd,[],[{p,[],[<<82,101,109,111,118,101,115,32,40,111,110,101,41,32>>,{code,[],[<<123,95,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125>>]},<<32,109,101,115,115,97,103,101,44,32,105,102,32,116,104,101,114,101,32,105,115,32,111,110,101,44,32,102,114,111,109,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,102,116,101,114,32,109,111,110,105,116,111,114,105,110,103,32,104,97,115,32,98,101,101,110,32,115,116,111,112,112,101,100,46>>]},{p,[],[<<67,97,108,108,105,110,103,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,44,32,91,102,108,117,115,104,93,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<100,101,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,82,101,102,41,44,10,114,101,99,101,105,118,101,10,32,32,32,32,123,95,44,32,77,111,110,105,116,111,114,82,101,102,44,32,95,44,32,95,44,32,95,125,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,97,102,116,101,114,32,48,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,101,110,100>>]}]}]},{dt,[],[{code,[],[<<105,110,102,111>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,119,97,115,32,102,111,117,110,100,32,97,110,100,32,114,101,109,111,118,101,100,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,110,111,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,105,115,32,109,111,110,105,116,111,114,32,104,97,115,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,32,97,110,100,32,119,105,108,108,32,110,111,116,32,98,101,32,100,101,108,105,118,101,114,101,100,46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,119,97,115,32,110,111,116,32,102,111,117,110,100,32,97,110,100,32,99,111,117,108,100,32,110,111,116,32,98,101,32,114,101,109,111,118,101,100,46,32,84,104,105,115,32,112,114,111,98,97,98,108,121,32,98,101,99,97,117,115,101,32,115,111,109,101,111,110,101,32,97,108,114,101,97,100,121,32,104,97,115,32,112,108,97,99,101,100,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,105,115,32,109,111,110,105,116,111,114,32,105,110,32,116,104,101,32,99,97,108,108,101,114,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]}]}]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<105,110,102,111>>]},<<32,105,115,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<102,108,117,115,104>>]},<<44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,102,32,97,32,102,108,117,115,104,32,119,97,115,32,110,101,101,100,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<77,111,114,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,111,112,116,105,111,110,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<84,104,101,32,115,97,109,101,32,102,97,105,108,117,114,101,32,97,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,47,49>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,51,57,50>>,signature => [{attribute,{753,2},spec,{{demonitor,2},[{type,{753,16},bounded_fun,[{type,{753,16},'fun',[{type,{753,16},product,[{var,{753,17},'MonitorRef'},{var,{753,29},'OptionList'}]},{type,{753,44},boolean,[]}]},[{type,{754,7},constraint,[{atom,{754,7},is_subtype},[{var,{754,7},'MonitorRef'},{type,{754,21},reference,[]}]]},{type,{755,7},constraint,[{atom,{755,7},is_subtype},[{var,{755,7},'OptionList'},{type,{755,21},list,[{var,{755,22},'Option'}]}]]},{type,{756,7},constraint,[{atom,{756,7},is_subtype},[{var,{756,7},'Option'},{type,{756,17},union,[{atom,{756,17},flush},{atom,{756,25},info}]}]]}]]}]}}]}},{{function,disconnect_node,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3437}],[<<100,105,115,99,111,110,110,101,99,116,95,110,111,100,101,47,49>>],#{<<101,110>> => [{p,[],[<<70,111,114,99,101,115,32,116,104,101,32,100,105,115,99,111,110,110,101,99,116,105,111,110,32,111,102,32,97,32,110,111,100,101,46,32,84,104,105,115,32,97,112,112,101,97,114,115,32,116,111,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<32,97,115,32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,104,97,115,32,99,114,97,115,104,101,100,46,32,84,104,105,115,32,66,73,70,32,105,115,32,109,97,105,110,108,121,32,117,115,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,110,101,116,119,111,114,107,32,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,112,114,111,116,111,99,111,108,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,100,105,115,99,111,110,110,101,99,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,73,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<105,103,110,111,114,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,109,97,121,32,114,101,116,117,114,110,32,98,101,102,111,114,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,95,110,111,100,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,109,101,115,115,97,103,101,115>>]},<<32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,52,54,48>>,signature => [{attribute,{3437,2},spec,{{disconnect_node,1},[{type,{3437,22},bounded_fun,[{type,{3437,22},'fun',[{type,{3437,22},product,[{var,{3437,23},'Node'}]},{type,{3437,32},union,[{type,{3437,32},boolean,[]},{atom,{3437,44},ignored}]}]},[{type,{3438,7},constraint,[{atom,{3438,7},is_subtype},[{var,{3438,7},'Node'},{type,{3438,15},node,[]}]]}]]}]}}]}},{{function,display,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,780}],[<<100,105,115,112,108,97,121,47,49>>],#{<<101,110>> => [{p,[],[<<80,114,105,110,116,115,32,97,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,111,110,32,116,104,101,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,52,55,57>>,signature => [{attribute,{780,2},spec,{{erlang,display,1},[{type,{780,21},bounded_fun,[{type,{780,21},'fun',[{type,{780,21},product,[{var,{780,22},'Term'}]},{atom,{780,31},true}]},[{type,{781,7},constraint,[{atom,{781,7},is_subtype},[{var,{781,7},'Term'},{type,{781,15},term,[]}]]}]]}]}}]}},{{function,dist_ctrl_get_data,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3721}],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,47,49>>],#{<<101,110>> => [{p,[],[<<71,101,116,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,100,97,116,97,32,102,114,111,109,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,116,104,97,116,32,105,115,32,116,111,32,98,101,32,112,97,115,115,101,100,32,116,111,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,46,32,84,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,73,102,32,110,111,32,100,97,116,97,32,105,115,32,97,118,97,105,108,97,98,108,101,44,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<110,111,110,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,110,101,32,99,97,110,32,114,101,113,117,101,115,116,32,116,111,32,98,101,32,105,110,102,111,114,109,101,100,32,98,121,32,97,32,109,101,115,115,97,103,101,32,119,104,101,110,32,109,111,114,101,32,100,97,116,97,32,105,115,32,97,118,97,105,108,97,98,108,101,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,40,68,72,97,110,100,108,101,41>>]}]},<<46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,119,104,101,110,32,116,104,101,114,101,32,97,114,101,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,99,111,110,102,105,103,117,114,101,100,32,111,110,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>]}]},<<32,102,117,110,99,116,105,111,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,52,57,49>>,signature => [{attribute,{3721,2},spec,{{erlang,dist_ctrl_get_data,1},[{type,{3721,32},bounded_fun,[{type,{3721,32},'fun',[{type,{3721,32},product,[{var,{3721,33},'DHandle'}]},{type,{3721,45},union,[{type,{3721,45},tuple,[{var,{3721,46},'Size'},{var,{3721,52},'Data'}]},{var,{3721,60},'Data'},{atom,{3721,67},none}]}]},[{type,{3722,7},constraint,[{atom,{3722,7},is_subtype},[{var,{3722,7},'Size'},{type,{3722,15},non_neg_integer,[]}]]},{type,{3723,7},constraint,[{atom,{3723,7},is_subtype},[{var,{3723,7},'DHandle'},{user_type,{3723,18},dist_handle,[]}]]},{type,{3724,7},constraint,[{atom,{3724,7},is_subtype},[{var,{3724,7},'Data'},{user_type,{3724,15},iovec,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_get_opt,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3743}],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,111,112,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,111,110,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>]}]},<<32,102,117,110,99,116,105,111,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,53,51,50>>,signature => [{attribute,{3743,2},spec,{{erlang,dist_ctrl_get_opt,2},[{type,{3743,31},bounded_fun,[{type,{3743,31},'fun',[{type,{3743,31},product,[{var,{3743,32},'DHandle'},{atom,{3743,41},get_size}]},{var,{3743,56},'Value'}]},[{type,{3744,7},constraint,[{atom,{3744,7},is_subtype},[{var,{3744,7},'DHandle'},{user_type,{3744,18},dist_handle,[]}]]},{type,{3745,7},constraint,[{atom,{3745,7},is_subtype},[{var,{3745,7},'Value'},{type,{3745,16},boolean,[]}]]}]]}]}}],since => <<79,84,80,32,50,50,46,48>>}},{{function,dist_ctrl_get_data_notification,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3729}],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,113,117,101,115,116,32,110,111,116,105,102,105,99,97,116,105,111,110,32,119,104,101,110,32,109,111,114,101,32,100,97,116,97,32,105,115,32,97,118,97,105,108,97,98,108,101,32,116,111,32,102,101,116,99,104,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]}]},<<32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,87,104,101,110,32,109,111,114,101,32,100,97,116,97,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<100,105,115,116,95,100,97,116,97>>]},<<46,32,79,110,99,101,32,97,32>>,{code,[],[<<100,105,115,116,95,100,97,116,97>>]},<<32,109,101,115,115,97,103,101,115,32,104,97,115,32,98,101,101,110,32,115,101,110,116,44,32,110,111,32,109,111,114,101,32>>,{code,[],[<<100,105,115,116,95,100,97,116,97>>]},<<32,109,101,115,115,97,103,101,115,32,119,105,108,108,32,98,101,32,115,101,110,116,32,117,110,116,105,108,32,116,104,101,32>>,{code,[],[<<100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,95,110,111,116,105,102,105,99,97,116,105,111,110,47,49>>]},<<32,102,117,110,99,116,105,111,110,32,104,97,115,32,98,101,101,110,32,99,97,108,108,101,100,32,97,103,97,105,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,53,54,49>>,signature => [{attribute,{3729,2},spec,{{erlang,dist_ctrl_get_data_notification,1},[{type,{3729,45},bounded_fun,[{type,{3729,45},'fun',[{type,{3729,45},product,[{var,{3729,46},'DHandle'}]},{atom,{3729,58},ok}]},[{type,{3730,7},constraint,[{atom,{3730,7},is_subtype},[{var,{3730,7},'DHandle'},{user_type,{3730,18},dist_handle,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_input_handler,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3707}],[<<100,105,115,116,95,99,116,114,108,95,105,110,112,117,116,95,104,97,110,100,108,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,103,105,115,116,101,114,32,97,110,32,97,108,116,101,114,110,97,116,101,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,112,114,111,99,101,115,115,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,79,110,99,101,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,104,97,115,32,98,101,101,110,32,99,97,108,108,101,100,44,32>>,{code,[],[<<73,110,112,117,116,72,97,110,100,108,101,114>>]},<<32,105,115,32,116,104,101,32,111,110,108,121,32,112,114,111,99,101,115,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,112,117,116,95,100,97,116,97,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,112,117,116,95,100,97,116,97,40,68,72,97,110,100,108,101,44,32,68,97,116,97,41>>]}]},<<32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,100,101,110,116,105,102,105,110,103,32,116,104,105,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,53,57,55>>,signature => [{attribute,{3707,2},spec,{{erlang,dist_ctrl_input_handler,2},[{type,{3707,37},bounded_fun,[{type,{3707,37},'fun',[{type,{3707,37},product,[{var,{3707,38},'DHandle'},{var,{3707,47},'InputHandler'}]},{atom,{3707,64},ok}]},[{type,{3708,7},constraint,[{atom,{3708,7},is_subtype},[{var,{3708,7},'DHandle'},{user_type,{3708,18},dist_handle,[]}]]},{type,{3709,7},constraint,[{atom,{3709,7},is_subtype},[{var,{3709,7},'InputHandler'},{type,{3709,23},pid,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_put_data,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3714}],[<<100,105,115,116,95,99,116,114,108,95,112,117,116,95,100,97,116,97,47,50>>],#{<<101,110>> => [{p,[],[<<68,101,108,105,118,101,114,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,100,97,116,97,32,102,114,111,109,32,97,32,114,101,109,111,116,101,32,110,111,100,101,32,116,111,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,117,110,108,101,115,115,32,97,110,32,97,108,116,101,114,110,97,116,101,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,112,114,111,99,101,115,115,32,104,97,115,32,98,101,101,110,32,114,101,103,105,115,116,101,114,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,105,110,112,117,116,95,104,97,110,100,108,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,105,110,112,117,116,95,104,97,110,100,108,101,114,40,68,72,97,110,100,108,101,44,32,73,110,112,117,116,72,97,110,100,108,101,114,41>>]}]},<<46,32,73,102,32,97,110,32,97,108,116,101,114,110,97,116,101,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,104,97,115,32,98,101,101,110,32,114,101,103,105,115,116,101,114,101,100,44,32,111,110,108,121,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,105,110,112,117,116,32,104,97,110,100,108,101,114,32,112,114,111,99,101,115,115,32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,54,51,48>>,signature => [{attribute,{3714,2},spec,{{erlang,dist_ctrl_put_data,2},[{type,{3714,32},bounded_fun,[{type,{3714,32},'fun',[{type,{3714,32},product,[{var,{3714,33},'DHandle'},{var,{3714,42},'Data'}]},{atom,{3714,51},ok}]},[{type,{3715,7},constraint,[{atom,{3715,7},is_subtype},[{var,{3715,7},'DHandle'},{user_type,{3715,18},dist_handle,[]}]]},{type,{3716,7},constraint,[{atom,{3716,7},is_subtype},[{var,{3716,7},'Data'},{type,{3716,15},iodata,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,dist_ctrl_set_opt,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3735}],[<<100,105,115,116,95,99,116,114,108,95,115,101,116,95,111,112,116,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,111,110,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<46,32,84,104,105,115,32,111,112,116,105,111,110,32,99,111,110,116,114,111,108,115,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32,99,97,108,108,115,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,117,115,101,100,32,119,104,101,110,32,115,101,116,116,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,46,32,87,104,101,110,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,32,105,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[<<97,110,100,32,116,104,101,114,101,32,97,114,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,44,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]},<<32,119,105,108,108,32,106,117,115,116,32,114,101,116,117,114,110,32>>,{code,[],[<<68,97,116,97>>]},<<32,116,111,32,112,97,115,115,32,111,118,101,114,32,116,104,101,32,99,104,97,110,110,101,108,46,32,84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<103,101,116,95,115,105,122,101>>]},<<32,111,112,116,105,111,110,46>>]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[<<97,110,100,32,116,104,101,114,101,32,97,114,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,44,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,100,105,115,116,95,99,116,114,108,95,103,101,116,95,100,97,116,97,40,68,72,97,110,100,108,101,41>>]},<<32,119,105,108,108,32,114,101,116,117,114,110,32>>,{code,[],[<<68,97,116,97>>]},<<32,116,111,32,112,97,115,115,32,111,118,101,114,32,116,104,101,32,99,104,97,110,110,101,108,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32>>,{code,[],[<<83,105,122,101>>]},<<32,111,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,110,32,98,121,116,101,115,46,32,84,104,105,115,32,105,115,32,114,101,116,117,114,110,101,100,32,97,115,32,97,32,116,117,112,108,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,83,105,122,101,44,32,68,97,116,97,125>>]},<<46>>]}]},{p,[],[<<65,108,108,32,111,112,116,105,111,110,115,32,97,114,101,32,115,101,116,32,116,111,32,100,101,102,97,117,108,116,32,119,104,101,110,32,97,32,99,104,97,110,110,101,108,32,105,115,32,99,108,111,115,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,103,105,115,116,101,114,101,100,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,32,102,111,114,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,99,97,108,108,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,119,104,101,110,32,105,109,112,108,101,109,101,110,116,105,110,103,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,97,114,114,105,101,114,32,117,115,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,115,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,111,110,116,114,111,108,108,101,114,115,46,32>>,{code,[],[<<68,72,97,110,100,108,101>>]},<<32,105,115,32,114,101,116,114,105,118,101,100,32,118,105,97,32,116,104,101,32,99,97,108,108,98,97,99,107,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,104,115,95,100,97,116,97,95,102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<102,95,104,97,110,100,115,104,97,107,101,95,99,111,109,112,108,101,116,101>>]}]},<<46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,97,108,116,95,100,105,115,116,35,100,105,115,116,114,105,98,117,116,105,111,110,95,109,111,100,117,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,226,158,156,32,72,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,110,32,65,108,116,101,114,110,97,116,105,118,101,32,67,97,114,114,105,101,114,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,226,158,156,32,68,105,115,116,114,105,98,117,116,105,111,110,32,77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,54,54,51>>,signature => [{attribute,{3735,2},spec,{{erlang,dist_ctrl_set_opt,3},[{type,{3735,31},bounded_fun,[{type,{3735,31},'fun',[{type,{3735,31},product,[{var,{3735,32},'DHandle'},{atom,{3735,41},get_size},{var,{3735,53},'Value'}]},{var,{3735,63},'OldValue'}]},[{type,{3736,7},constraint,[{atom,{3736,7},is_subtype},[{var,{3736,7},'DHandle'},{user_type,{3736,18},dist_handle,[]}]]},{type,{3737,7},constraint,[{atom,{3737,7},is_subtype},[{var,{3737,7},'Value'},{type,{3737,16},boolean,[]}]]},{type,{3738,7},constraint,[{atom,{3738,7},is_subtype},[{var,{3738,7},'OldValue'},{type,{3738,19},boolean,[]}]]}]]}]}}],since => <<79,84,80,32,50,50,46,48>>}},{{function,element,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2119}],[<<101,108,101,109,101,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{code,[],[<<78>>]},<<116,104,32,101,108,101,109,101,110,116,32,40,110,117,109,98,101,114,105,110,103,32,102,114,111,109,32,49,41,32,111,102,32>>,{code,[],[<<84,117,112,108,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,108,101,109,101,110,116,40,50,44,32,123,97,44,32,98,44,32,99,125,41,46,10,98>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,49,50>>,signature => [{attribute,{2119,2},spec,{{element,2},[{type,{2119,14},bounded_fun,[{type,{2119,14},'fun',[{type,{2119,14},product,[{var,{2119,15},'N'},{var,{2119,18},'Tuple'}]},{type,{2119,28},term,[]}]},[{type,{2120,5},constraint,[{atom,{2120,5},is_subtype},[{var,{2120,5},'N'},{type,{2120,10},pos_integer,[]}]]},{type,{2121,5},constraint,[{atom,{2121,5},is_subtype},[{var,{2121,5},'Tuple'},{type,{2121,14},tuple,any}]]}]]}]}}]}},{{function,erase,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,839}],[<<101,114,97,115,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,97,110,100,32,100,101,108,101,116,101,115,32,105,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,123,49,44,32,50,44,32,51,125,41,44,10,112,117,116,40,107,101,121,50,44,32,91,97,44,32,98,44,32,99,93,41,44,10,101,114,97,115,101,40,41,46,10,91,123,107,101,121,49,44,123,49,44,50,44,51,125,125,44,123,107,101,121,50,44,91,97,44,98,44,99,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,50,54>>,signature => [{attribute,{839,2},spec,{{erase,0},[{type,{839,12},bounded_fun,[{type,{839,12},'fun',[{type,{839,12},product,[]},{type,{839,18},list,[{type,{839,19},tuple,[{var,{839,20},'Key'},{var,{839,25},'Val'}]}]}]},[{type,{840,7},constraint,[{atom,{840,7},is_subtype},[{var,{840,7},'Key'},{type,{840,14},term,[]}]]},{type,{841,7},constraint,[{atom,{841,7},is_subtype},[{var,{841,7},'Val'},{type,{841,14},term,[]}]]}]]}]}}]}},{{function,erase,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,846}],[<<101,114,97,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<32,97,110,100,32,100,101,108,101,116,101,115,32,105,116,32,102,114,111,109,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,110,111,32,118,97,108,117,101,32,105,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<46,32,84,104,101,32,97,118,101,114,97,103,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,79,40>>,{code,[],[<<49>>]},<<41,32,97,110,100,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,105,115,32,79,40>>,{code,[],[<<78>>]},<<41,44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,116,101,109,115,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,123,109,101,114,114,121,44,32,108,97,109,98,115,44,32,97,114,101,44,32,112,108,97,121,105,110,103,125,41,44,10,88,32,61,32,101,114,97,115,101,40,107,101,121,49,41,44,10,123,88,44,32,101,114,97,115,101,40,107,101,121,49,41,125,46,10,123,123,109,101,114,114,121,44,108,97,109,98,115,44,97,114,101,44,112,108,97,121,105,110,103,125,44,117,110,100,101,102,105,110,101,100,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,52,48>>,signature => [{attribute,{846,2},spec,{{erase,1},[{type,{846,12},bounded_fun,[{type,{846,12},'fun',[{type,{846,12},product,[{var,{846,13},'Key'}]},{type,{846,21},union,[{var,{846,21},'Val'},{atom,{846,27},undefined}]}]},[{type,{847,7},constraint,[{atom,{847,7},is_subtype},[{var,{847,7},'Key'},{type,{847,14},term,[]}]]},{type,{848,7},constraint,[{atom,{848,7},is_subtype},[{var,{848,7},'Val'},{type,{848,14},term,[]}]]}]]}]}}]}},{{function,error,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,854}],[<<101,114,114,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,119,105,116,104,32,116,104,101,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46,32,65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,116,104,114,111,119,110,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46>>]},{p,[],[<<84,104,101,32,105,110,116,101,110,116,32,111,102,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,105,115,32,116,111,32,115,105,103,110,97,108,32,116,104,97,116,32,97,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,104,97,115,32,104,97,112,112,101,110,101,100,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,119,105,116,104,32,97,32,112,97,114,97,109,101,116,101,114,32,116,104,97,116,32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,41,46,32,83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,99,97,116,99,104,32,101,114,114,111,114,40,102,111,111,98,97,114,41,46,10,123,39,69,88,73,84,39,44,123,102,111,111,98,97,114,44,91,123,115,104,101,108,108,44,97,112,112,108,121,95,102,117,110,44,51,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,57,48,54,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,101,114,108,95,101,118,97,108,44,100,111,95,97,112,112,108,121,44,54,44,91,123,102,105,108,101,44,34,101,114,108,95,101,118,97,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,55,55,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,101,114,108,95,101,118,97,108,44,101,120,112,114,44,53,44,91,123,102,105,108,101,44,34,101,114,108,95,101,118,97,108,46,101,114,108,34,125,44,123,108,105,110,101,44,52,51,48,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,115,104,101,108,108,44,101,120,112,114,115,44,55,44,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,56,55,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,115,104,101,108,108,44,101,118,97,108,95,101,120,112,114,115,44,55,44,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,52,50,125,93,125,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,115,104,101,108,108,44,101,118,97,108,95,108,111,111,112,44,51,44,91,123,102,105,108,101,44,34,115,104,101,108,108,46,101,114,108,34,125,44,123,108,105,110,101,44,54,50,55,125,93,125,93,125,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,54,49>>,signature => [{attribute,{854,2},spec,{{error,1},[{type,{854,12},bounded_fun,[{type,{854,12},'fun',[{type,{854,12},product,[{var,{854,13},'Reason'}]},{type,{854,24},no_return,[]}]},[{type,{855,7},constraint,[{atom,{855,7},is_subtype},[{var,{855,7},'Reason'},{type,{855,17},term,[]}]]}]]}]}}]}},{{function,error,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,861}],[<<101,114,114,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,119,105,116,104,32,116,104,101,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46,32>>,{code,[],[<<65,114,103,115>>]},<<32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,116,104,101,32,108,105,115,116,32,111,102,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<110,111,110,101>>]},<<46,32,73,102,32,105,116,32,105,115,32,97,32,108,105,115,116,44,32,105,116,32,105,115,32,117,115,101,100,32,116,111,32,112,114,111,118,105,100,101,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,105,110,32,116,104,101,32,115,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,46,32,73,102,32,105,116,32,105,115,32>>,{code,[],[<<110,111,110,101>>]},<<44,32,116,104,101,32,97,114,105,116,121,32,111,102,32,116,104,101,32,99,97,108,108,105,110,103,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,105,110,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,46,32,65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46>>]},{p,[],[<<84,104,101,32,105,110,116,101,110,116,32,111,102,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,105,115,32,116,111,32,115,105,103,110,97,108,32,116,104,97,116,32,97,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,104,97,115,32,104,97,112,112,101,110,101,100,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,119,105,116,104,32,97,32,112,97,114,97,109,101,116,101,114,32,116,104,97,116,32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,41,46,32,83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46,32,69,120,97,109,112,108,101,58>>]},{p,[],[{code,[],[<<116,101,115,116,46,101,114,108>>]},<<58>>]},{pre,[],[{code,[],[<<45,109,111,100,117,108,101,40,116,101,115,116,41,46,10,45,101,120,112,111,114,116,40,91,101,120,97,109,112,108,101,95,102,117,110,47,50,93,41,46,10,10,101,120,97,109,112,108,101,95,102,117,110,40,65,49,44,32,65,50,41,32,45,62,10,32,32,32,32,101,114,108,97,110,103,58,101,114,114,111,114,40,109,121,95,101,114,114,111,114,44,32,91,65,49,44,32,65,50,93,41,46>>]}]},{p,[],[<<69,114,108,97,110,103,32,115,104,101,108,108,58>>]},{pre,[],[{code,[],[<<54,62,32,99,40,116,101,115,116,41,46,10,123,111,107,44,116,101,115,116,125,10,55,62,32,116,101,115,116,58,101,120,97,109,112,108,101,95,102,117,110,40,97,114,103,49,44,34,116,104,105,115,32,105,115,32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,34,41,46,10,42,42,32,101,120,99,101,112,116,105,111,110,32,101,114,114,111,114,58,32,109,121,95,101,114,114,111,114,10,32,32,32,32,32,105,110,32,102,117,110,99,116,105,111,110,32,32,116,101,115,116,58,101,120,97,109,112,108,101,95,102,117,110,47,50,10,32,32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,97,115,32,116,101,115,116,58,101,120,97,109,112,108,101,95,102,117,110,40,97,114,103,49,44,34,116,104,105,115,32,105,115,32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,34,41,10,32>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,55,56,55>>,signature => [{attribute,{861,2},spec,{{error,2},[{type,{861,12},bounded_fun,[{type,{861,12},'fun',[{type,{861,12},product,[{var,{861,13},'Reason'},{var,{861,21},'Args'}]},{type,{861,30},no_return,[]}]},[{type,{862,7},constraint,[{atom,{862,7},is_subtype},[{var,{862,7},'Reason'},{type,{862,17},term,[]}]]},{type,{863,7},constraint,[{atom,{863,7},is_subtype},[{var,{863,7},'Args'},{type,{863,15},union,[{type,{863,15},list,[{type,{863,16},term,[]}]},{atom,{863,26},none}]}]]}]]}]}}]}},{{function,error,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,869}],[<<101,114,114,111,114,47,51>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,119,105,116,104,32,116,104,101,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46,32>>,{code,[],[<<65,114,103,115>>]},<<32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,116,104,101,32,108,105,115,116,32,111,102,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<110,111,110,101>>]},<<46,32,73,102,32,105,116,32,105,115,32,97,32,108,105,115,116,44,32,105,116,32,105,115,32,117,115,101,100,32,116,111,32,112,114,111,118,105,100,101,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,105,110,32,116,104,101,32,115,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,46,32,73,102,32,105,116,32,105,115,32>>,{code,[],[<<110,111,110,101>>]},<<44,32,116,104,101,32,97,114,105,116,121,32,111,102,32,116,104,101,32,99,97,108,108,105,110,103,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,100,32,105,110,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,46,32,65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46>>]},{p,[],[<<73,102,32,116,104,101,32>>,{code,[],[<<101,114,114,111,114,95,105,110,102,111>>]},<<32,111,112,116,105,111,110,32,105,115,32,103,105,118,101,110,44,32,116,104,101,32>>,{code,[],[<<69,114,114,111,114,73,110,102,111,77,97,112>>]},<<32,119,105,108,108,32,98,101,32,105,110,115,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,103,105,118,101,110,32,105,110,32,116,104,101,32>>,{code,[],[<<69,114,114,111,114,73,110,102,111,77,97,112>>]},<<32,105,115,32,116,111,32,98,101,32,117,115,101,100,32,98,121,32,101,114,114,111,114,32,102,111,114,109,97,116,116,101,114,115,32,115,117,99,104,32,97,115,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,114,108,95,101,114,114,111,114,35,102,111,114,109,97,116,95,101,120,99,101,112,116,105,111,110,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,95,101,114,114,111,114>>]}]},<<32,116,111,32,112,114,111,118,105,100,101,32,109,111,114,101,32,99,111,110,116,101,120,116,32,97,114,111,117,110,100,32,97,110,32,101,114,114,111,114,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<109,111,100,117,108,101>>]},<<32,111,102,32,116,104,101,32>>,{code,[],[<<69,114,114,111,114,73,110,102,111,77,97,112>>]},<<32,105,115,32,116,104,101,32,109,111,100,117,108,101,32,116,104,97,116,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,47,51>>]}]},<<32,105,115,32,109,97,100,101,46,32,84,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<102,117,110,99,116,105,111,110>>]},<<32,105,115,32>>,{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114>>]},<<46,32,83,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,114,108,95,101,114,114,111,114,35,102,111,114,109,97,116,95,101,114,114,111,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,50>>]}]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,32,111,110,32,104,111,119,32,116,104,105,115,32,77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,47,50,32,105,115,32,116,111,32,98,101,32,117,115,101,100>>]},{p,[],[<<84,104,101,32,105,110,116,101,110,116,32,111,102,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<32,105,115,32,116,111,32,115,105,103,110,97,108,32,116,104,97,116,32,97,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,104,97,115,32,104,97,112,112,101,110,101,100,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,119,105,116,104,32,97,32,112,97,114,97,109,101,116,101,114,32,116,104,97,116,32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,116,121,112,101,41,46,32,83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,56,50,52>>,signature => [{attribute,{869,2},spec,{{error,3},[{type,{869,12},bounded_fun,[{type,{869,12},'fun',[{type,{869,12},product,[{var,{869,13},'Reason'},{var,{869,21},'Args'},{var,{869,27},'Options'}]},{type,{869,39},no_return,[]}]},[{type,{870,7},constraint,[{atom,{870,7},is_subtype},[{var,{870,7},'Reason'},{type,{870,17},term,[]}]]},{type,{871,7},constraint,[{atom,{871,7},is_subtype},[{var,{871,7},'Args'},{type,{871,15},union,[{type,{871,15},list,[{type,{871,16},term,[]}]},{atom,{871,26},none}]}]]},{type,{872,7},constraint,[{atom,{872,7},is_subtype},[{var,{872,7},'Options'},{type,{872,18},list,[{var,{872,19},'Option'}]}]]},{type,{873,7},constraint,[{atom,{873,7},is_subtype},[{var,{873,7},'Option'},{type,{873,17},tuple,[{atom,{873,18},error_info},{var,{873,32},'ErrorInfoMap'}]}]]},{type,{874,7},constraint,[{atom,{874,7},is_subtype},[{var,{874,7},'ErrorInfoMap'},{type,{874,23},map,[{type,{874,33},map_field_assoc,[{atom,{874,25},cause},{type,{874,36},term,[]}]},{type,{875,34},map_field_assoc,[{atom,{875,25},module},{type,{875,37},module,[]}]},{type,{876,36},map_field_assoc,[{atom,{876,25},function},{type,{876,39},atom,[]}]}]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,exit,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,882}],[<<101,120,105,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<101,120,105,116>>]},<<32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46,32,65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46>>]},{p,[],[<<84,104,101,32,105,110,116,101,110,116,32,111,102,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,32>>,{code,[],[<<101,120,105,116>>]},<<32,105,115,32,116,104,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,115,104,111,117,108,100,32,98,101,32,115,116,111,112,112,101,100,32,40,102,111,114,32,101,120,97,109,112,108,101,32,119,104,101,110,32,97,32,109,101,115,115,97,103,101,32,116,101,108,108,105,110,103,32,97,32,112,114,111,99,101,115,115,32,116,111,32,115,116,111,112,32,105,115,32,114,101,99,101,105,118,101,100,41,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,100,105,102,102,101,114,32,102,114,111,109,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,47,49,44,50,44,51>>]}]},<<32,98,121,32,99,97,117,115,105,110,103,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,97,32,100,105,102,102,101,114,101,110,116,32,99,108,97,115,115,32,97,110,100,32,98,121,32,104,97,118,105,110,103,32,97,32,114,101,97,115,111,110,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,116,104,101,32,108,105,115,116,32,111,102,32,102,117,110,99,116,105,111,110,115,32,102,114,111,109,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,46>>]},{p,[],[<<83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,120,105,116,40,102,111,111,98,97,114,41,46,10,42,42,32,101,120,99,101,112,116,105,111,110,32,101,120,105,116,58,32,102,111,111,98,97,114,10,62,32,99,97,116,99,104,32,101,120,105,116,40,102,111,111,98,97,114,41,46,10,123,39,69,88,73,84,39,44,102,111,111,98,97,114,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,99,97,108,108,115,32>>,{code,[],[<<101,120,105,116,40,107,105,108,108,41>>]},<<32,97,110,100,32,100,111,101,115,32,110,111,116,32,99,97,116,99,104,32,116,104,101,32,101,120,99,101,112,116,105,111,110,44,32,105,116,32,119,105,108,108,32,116,101,114,109,105,110,97,116,101,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,97,110,100,32,97,108,115,111,32,101,109,105,116,32,101,120,105,116,32,115,105,103,110,97,108,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,40,110,111,116,32>>,{code,[],[<<107,105,108,108,101,100>>]},<<41,32,116,111,32,97,108,108,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,46,32,83,117,99,104,32,101,120,105,116,32,115,105,103,110,97,108,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,99,97,110,32,98,101,32,116,114,97,112,112,101,100,32,98,121,32,116,104,101,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,46,32,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,115,105,103,110,97,108,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,98,101,104,97,118,101,32,100,105,102,102,101,114,101,110,116,108,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,121,32,97,114,101,32,115,101,110,116,32,98,101,99,97,117,115,101,32,116,104,101,32,115,105,103,110,97,108,32,119,105,108,108,32,98,101,32,117,110,116,114,97,112,112,97,98,108,101,32,105,102,32,97,32,112,114,111,99,101,115,115,32,115,101,110,100,115,32,115,117,99,104,32,97,32,115,105,103,110,97,108,32,116,111,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,56,53,51>>,signature => [{attribute,{882,2},spec,{{exit,1},[{type,{882,11},bounded_fun,[{type,{882,11},'fun',[{type,{882,11},product,[{var,{882,12},'Reason'}]},{type,{882,23},no_return,[]}]},[{type,{883,7},constraint,[{atom,{883,7},is_subtype},[{var,{883,7},'Reason'},{type,{883,17},term,[]}]]}]]}]}}]}},{{function,exit,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,888}],[<<101,120,105,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,98,101,104,97,118,105,111,114,32,97,112,112,108,105,101,115,32,105,102,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,97,110,121,32,116,101,114,109,44,32,101,120,99,101,112,116,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,111,114,32>>,{code,[],[<<107,105,108,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<80>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32,110,111,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32>>,{code,[],[<<80>>]},<<32,101,120,105,116,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,116,114,97,110,115,102,111,114,109,101,100,32,105,110,116,111,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,82,101,97,115,111,110,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,114,111,109>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,115,101,110,116,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,44,32,97,110,100,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,111,102,32>>,{code,[],[<<80>>]},<<46>>]}]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,98,101,104,97,118,105,111,114,32,97,112,112,108,105,101,115,32,105,102,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,116,104,101,32,116,101,114,109,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,110,100,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80>>]},<<32,119,104,105,99,104,32,105,115,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,105,110,118,111,107,101,100,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,40,80,105,100,44,32,110,111,114,109,97,108,41>>]},<<32,40,116,104,101,32,98,101,104,97,118,105,111,114,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32,115,101,110,100,115,32,97,32,115,105,103,110,97,108,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,114,101,97,115,111,110,32,116,111,32,105,116,115,101,108,102,32,105,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,119,97,114,110,105,110,103,41,58>>]},{ul,[],[{li,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,116,114,97,110,115,102,111,114,109,101,100,32,105,110,116,111,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,110,111,114,109,97,108,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,114,111,109>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,115,101,110,116,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,44,32,97,110,100,32,100,101,108,105,118,101,114,101,100,32,116,111,32>>,{code,[],[<<80>>]},<<39,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]},{li,[],[<<84,104,101,32,115,105,103,110,97,108,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,105,102,32>>,{code,[],[<<80>>]},<<32,105,115,32,110,111,116,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,46>>]}]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<107,105,108,108>>]},<<44,32,116,104,97,116,32,105,115,44,32,105,102,32>>,{code,[],[<<101,120,105,116,40,80,105,100,44,32,107,105,108,108,41>>]},<<32,105,115,32,99,97,108,108,101,100,44,32,97,110,32,117,110,116,114,97,112,112,97,98,108,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,105,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,119,104,105,99,104,32,117,110,99,111,110,100,105,116,105,111,110,97,108,108,121,32,101,120,105,116,115,32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108,101,100>>]},<<46,32,84,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,105,115,32,99,104,97,110,103,101,100,32,102,114,111,109,32>>,{code,[],[<<107,105,108,108>>]},<<32,116,111,32>>,{code,[],[<<107,105,108,108,101,100>>]},<<32,116,111,32,104,105,110,116,32,116,111,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,116,104,101,32,107,105,108,108,101,100,32,112,114,111,99,101,115,115,32,103,111,116,32,107,105,108,108,101,100,32,98,121,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,120,105,116,40,80,105,100,44,32,107,105,108,108,41>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]}]},<<32,97,114,101,32,110,97,109,101,100,32,115,105,109,105,108,97,114,108,121,32,98,117,116,32,112,114,111,118,105,100,101,32,118,101,114,121,32,100,105,102,102,101,114,101,110,116,32,102,117,110,99,116,105,111,110,97,108,105,116,105,101,115,46,32,84,104,101,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,49>>]},<<32,102,117,110,99,116,105,111,110,32,115,104,111,117,108,100,32,98,101,32,117,115,101,100,32,119,104,101,110,32,116,104,101,32,105,110,116,101,110,116,32,105,115,32,116,111,32,115,116,111,112,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,119,104,105,108,101,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]},<<32,115,104,111,117,108,100,32,98,101,32,117,115,101,100,32,119,104,101,110,32,116,104,101,32,105,110,116,101,110,116,32,105,115,32,116,111,32,115,101,110,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,116,111,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,78,111,116,101,32,97,108,115,111,32,116,104,97,116,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,49>>]},<<32,114,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,116,104,97,116,32,99,97,110,32,98,101,32,99,97,117,103,104,116,32,119,104,105,108,101,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]},<<32,100,111,101,115,32,110,111,116,32,99,97,117,115,101,32,97,110,121,32,101,120,99,101,112,116,105,111,110,32,116,111,32,98,101,32,114,97,105,115,101,100,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,101,32,111,110,108,121,32,115,99,101,110,97,114,105,111,32,116,104,97,116,32,104,97,115,32,110,111,116,32,98,101,101,110,32,99,111,118,101,114,101,100,32,98,121,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,97,98,111,118,101,32,105,115,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80>>]},<<32,115,101,110,100,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,116,111,32,105,116,115,101,108,102,44,32,116,104,97,116,32,105,115,32>>,{code,[],[<<101,114,108,97,110,103,58,101,120,105,116,40,115,101,108,102,40,41,44,32,110,111,114,109,97,108,41>>]},<<46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,105,110,32,116,104,105,115,32,115,99,101,110,97,114,105,111,32,105,115,32,97,115,32,102,111,108,108,111,119,115,58>>]},{ul,[],[{li,[],[<<73,102,32>>,{code,[],[<<80>>]},<<32,105,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,116,114,97,110,115,102,111,114,109,101,100,32,105,110,116,111,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,110,111,114,109,97,108,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,114,111,109>>]},<<32,105,115,32>>,{code,[],[<<80>>]},<<39,115,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,97,110,100,32,100,101,108,105,118,101,114,101,100,32,116,111,32>>,{code,[],[<<80>>]},<<39,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]},{li,[],[{code,[],[<<80>>]},<<32,101,120,105,116,115,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,105,102,32>>,{code,[],[<<80>>]},<<32,105,115,32,110,111,116,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,46>>]}]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,98,101,104,97,118,105,111,114,32,100,101,115,99,114,105,98,101,100,32,97,98,111,118,101,32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32,115,101,110,100,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,116,111,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,115,32,97,114,103,117,97,98,108,121,32,115,116,114,97,110,103,101,32,98,117,116,32,116,104,105,115,32,98,101,104,97,118,105,111,114,32,105,115,32,107,101,112,116,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,114,101,97,115,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,56,57,53>>,signature => [{attribute,{888,2},spec,{{exit,2},[{type,{888,11},bounded_fun,[{type,{888,11},'fun',[{type,{888,11},product,[{var,{888,12},'Pid'},{var,{888,17},'Reason'}]},{atom,{888,28},true}]},[{type,{889,7},constraint,[{atom,{889,7},is_subtype},[{var,{889,7},'Pid'},{type,{889,14},union,[{type,{889,14},pid,[]},{type,{889,22},port,[]}]}]]},{type,{890,7},constraint,[{atom,{890,7},is_subtype},[{var,{890,7},'Reason'},{type,{890,17},term,[]}]]}]]}]}}]}},{{function,external_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,902}],[<<101,120,116,101,114,110,97,108,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,97,108,99,117,108,97,116,101,115,44,32,119,105,116,104,111,117,116,32,100,111,105,110,103,32,116,104,101,32,101,110,99,111,100,105,110,103,44,32,116,104,101,32,109,97,120,105,109,117,109,32,98,121,116,101,32,115,105,122,101,32,102,111,114,32,97,32,116,101,114,109,32,101,110,99,111,100,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,32,97,112,112,108,105,101,115,32,97,108,119,97,121,115,58>>]},{pre,[],[{code,[],[<<62,32,83,105,122,101,49,32,61,32,98,121,116,101,95,115,105,122,101,40,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,41,41,44,10,62,32,83,105,122,101,50,32,61,32,101,114,108,97,110,103,58,101,120,116,101,114,110,97,108,95,115,105,122,101,40,84,101,114,109,41,44,10,62,32,116,114,117,101,32,61,32,83,105,122,101,49,32,61,60,32,83,105,122,101,50,46,10,116,114,117,101>>]}]},{p,[],[<<84,104,105,115,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,97,32,99,97,108,108,32,116,111,58>>]},{pre,[],[{code,[],[<<101,114,108,97,110,103,58,101,120,116,101,114,110,97,108,95,115,105,122,101,40,84,101,114,109,44,32,91,93,41>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,57,56,49>>,signature => [{attribute,{902,2},spec,{{erlang,external_size,1},[{type,{902,27},bounded_fun,[{type,{902,27},'fun',[{type,{902,27},product,[{var,{902,28},'Term'}]},{type,{902,37},non_neg_integer,[]}]},[{type,{903,7},constraint,[{atom,{903,7},is_subtype},[{var,{903,7},'Term'},{type,{903,15},term,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66,48,52>>}},{{function,external_size,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,908}],[<<101,120,116,101,114,110,97,108,95,115,105,122,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,97,108,99,117,108,97,116,101,115,44,32,119,105,116,104,111,117,116,32,100,111,105,110,103,32,116,104,101,32,101,110,99,111,100,105,110,103,44,32,116,104,101,32,109,97,120,105,109,117,109,32,98,121,116,101,32,115,105,122,101,32,102,111,114,32,97,32,116,101,114,109,32,101,110,99,111,100,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,32,97,112,112,108,105,101,115,32,97,108,119,97,121,115,58>>]},{pre,[],[{code,[],[<<62,32,83,105,122,101,49,32,61,32,98,121,116,101,95,115,105,122,101,40,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,44,32,79,112,116,105,111,110,115,41,41,44,10,62,32,83,105,122,101,50,32,61,32,101,114,108,97,110,103,58,101,120,116,101,114,110,97,108,95,115,105,122,101,40,84,101,114,109,44,32,79,112,116,105,111,110,115,41,44,10,62,32,116,114,117,101,32,61,32,83,105,122,101,49,32,61,60,32,83,105,122,101,50,46,10,116,114,117,101>>]}]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<123,109,105,110,111,114,95,118,101,114,115,105,111,110,44,32,86,101,114,115,105,111,110,125>>]},<<32,115,112,101,99,105,102,105,101,115,32,104,111,119,32,102,108,111,97,116,115,32,97,114,101,32,101,110,99,111,100,101,100,46,32,70,111,114,32,97,32,100,101,116,97,105,108,101,100,32,100,101,115,99,114,105,112,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,48,48>>,signature => [{attribute,{908,2},spec,{{erlang,external_size,2},[{type,{908,27},bounded_fun,[{type,{908,27},'fun',[{type,{908,27},product,[{var,{908,28},'Term'},{var,{908,34},'Options'}]},{type,{908,46},non_neg_integer,[]}]},[{type,{909,7},constraint,[{atom,{909,7},is_subtype},[{var,{909,7},'Term'},{type,{909,15},term,[]}]]},{type,{910,7},constraint,[{atom,{910,7},is_subtype},[{var,{910,7},'Options'},{type,{910,18},list,[{type,{910,19},tuple,[{atom,{910,20},minor_version},{ann_type,{910,35},[{var,{910,35},'Version'},{type,{910,46},non_neg_integer,[]}]}]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66,48,52>>}},{{function,float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,932}],[<<102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,102,108,111,97,116,32,98,121,32,99,111,110,118,101,114,116,105,110,103,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,97,32,102,108,111,97,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,97,116,40,53,53,41,46,10,53,53,46,48>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,117,115,101,100,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,105,110,32,97,32,103,117,97,114,100,44,32,105,116,32,116,101,115,116,115,32,119,104,101,116,104,101,114,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,110,117,109,98,101,114,59,32,102,111,114,32,99,108,97,114,105,116,121,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,115,95,102,108,111,97,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,102,108,111,97,116,47,49>>]}]},<<32,105,110,115,116,101,97,100,46>>]},{p,[],[<<87,104,101,110,32>>,{code,[],[<<102,108,111,97,116,47,49>>]},<<32,105,115,32,117,115,101,100,32,105,110,32,97,110,32,101,120,112,114,101,115,115,105,111,110,32,105,110,32,97,32,103,117,97,114,100,44,32,115,117,99,104,32,97,115,32,39>>,{code,[],[<<102,108,111,97,116,40,65,41,32,61,61,32,52,46,48>>]},<<39,44,32,105,116,32,99,111,110,118,101,114,116,115,32,97,32,110,117,109,98,101,114,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,50,48>>,signature => [{attribute,{932,2},spec,{{float,1},[{type,{932,12},bounded_fun,[{type,{932,12},'fun',[{type,{932,12},product,[{var,{932,13},'Number'}]},{type,{932,24},float,[]}]},[{type,{933,7},constraint,[{atom,{933,7},is_subtype},[{var,{933,7},'Number'},{type,{933,17},number,[]}]]}]]}]}}]}},{{function,float_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,938}],[<<102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,70,108,111,97,116,44,91,123,115,99,105,101,110,116,105,102,105,99,44,50,48,125,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,52,50>>,signature => [{attribute,{938,2},spec,{{float_to_binary,1},[{type,{938,22},bounded_fun,[{type,{938,22},'fun',[{type,{938,22},product,[{var,{938,23},'Float'}]},{type,{938,33},binary,[]}]},[{type,{939,7},constraint,[{atom,{939,7},is_subtype},[{var,{939,7},'Float'},{type,{939,16},float,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,float_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,944}],[<<102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,108,111,97,116>>]},<<32,117,115,105,110,103,32,102,105,120,101,100,32,100,101,99,105,109,97,108,32,112,111,105,110,116,32,102,111,114,109,97,116,116,105,110,103,46,32>>,{code,[],[<<79,112,116,105,111,110,115>>]},<<32,98,101,104,97,118,101,115,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,108,111,97,116,95,116,111,95,108,105,115,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,50>>]}]},<<46,32,69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,93,41,46,10,60,60,34,55,46,49,50,48,48,34,62,62,10,62,32,102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,44,32,99,111,109,112,97,99,116,93,41,46,10,60,60,34,55,46,49,50,34,62,62,10,62,32,102,108,111,97,116,95,116,111,95,98,105,110,97,114,121,40,55,46,49,50,44,32,91,123,115,99,105,101,110,116,105,102,105,99,44,32,51,125,93,41,46,10,60,60,34,55,46,49,50,48,101,43,48,48,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,53,49>>,signature => [{attribute,{944,2},spec,{{float_to_binary,2},[{type,{944,22},bounded_fun,[{type,{944,22},'fun',[{type,{944,22},product,[{var,{944,23},'Float'},{var,{944,30},'Options'}]},{type,{944,42},binary,[]}]},[{type,{945,7},constraint,[{atom,{945,7},is_subtype},[{var,{945,7},'Float'},{type,{945,16},float,[]}]]},{type,{946,7},constraint,[{atom,{946,7},is_subtype},[{var,{946,7},'Options'},{type,{946,18},list,[{var,{946,19},'Option'}]}]]},{type,{947,7},constraint,[{atom,{947,7},is_subtype},[{var,{947,7},'Option'},{type,{947,18},union,[{type,{947,18},tuple,[{atom,{947,19},decimals},{ann_type,{947,29},[{var,{947,29},'Decimals'},{type,{947,41},range,[{integer,{947,41},0},{integer,{947,44},253}]}]}]},{type,{948,18},tuple,[{atom,{948,19},scientific},{ann_type,{948,31},[{var,{948,31},'Decimals'},{type,{948,43},range,[{integer,{948,43},0},{integer,{948,46},249}]}]}]},{atom,{949,18},compact}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,float_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,954}],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,40,70,108,111,97,116,44,91,123,115,99,105,101,110,116,105,102,105,99,44,50,48,125,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,55,49>>,signature => [{attribute,{954,2},spec,{{float_to_list,1},[{type,{954,20},bounded_fun,[{type,{954,20},'fun',[{type,{954,20},product,[{var,{954,21},'Float'}]},{type,{954,31},string,[]}]},[{type,{955,7},constraint,[{atom,{955,7},is_subtype},[{var,{955,7},'Float'},{type,{955,16},float,[]}]]}]]}]}}]}},{{function,float_to_list,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,960}],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,108,111,97,116>>]},<<32,117,115,105,110,103,32,102,105,120,101,100,32,100,101,99,105,109,97,108,32,112,111,105,110,116,32,102,111,114,109,97,116,116,105,110,103,46>>]},{p,[],[<<65,118,97,105,108,97,98,108,101,32,111,112,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<100,101,99,105,109,97,108,115>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,99,111,110,116,97,105,110,115,32,97,116,32,109,111,115,116,32>>,{code,[],[<<68,101,99,105,109,97,108,115>>]},<<32,110,117,109,98,101,114,32,111,102,32,100,105,103,105,116,115,32,112,97,115,116,32,116,104,101,32,100,101,99,105,109,97,108,32,112,111,105,110,116,46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,100,111,101,115,32,110,111,116,32,102,105,116,32,105,110,32,116,104,101,32,105,110,116,101,114,110,97,108,32,115,116,97,116,105,99,32,98,117,102,102,101,114,32,111,102,32,50,53,54,32,98,121,116,101,115,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,116,104,114,111,119,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46>>]}]},{li,[],[{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,97,99,116>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,116,114,97,105,108,105,110,103,32,122,101,114,111,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,108,105,115,116,32,97,114,101,32,116,114,117,110,99,97,116,101,100,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,111,110,108,121,32,109,101,97,110,105,110,103,102,117,108,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<100,101,99,105,109,97,108,115>>]},<<46>>]}]},{li,[],[{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<115,99,105,101,110,116,105,102,105,99>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,102,108,111,97,116,32,105,115,32,102,111,114,109,97,116,116,101,100,32,117,115,105,110,103,32,115,99,105,101,110,116,105,102,105,99,32,110,111,116,97,116,105,111,110,32,119,105,116,104,32>>,{code,[],[<<68,101,99,105,109,97,108,115>>]},<<32,100,105,103,105,116,115,32,111,102,32,112,114,101,99,105,115,105,111,110,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,115>>]},<<32,105,115,32>>,{code,[],[<<91,93>>]},<<44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,98,101,104,97,118,101,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,108,111,97,116,95,116,111,95,108,105,115,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,47,49>>]}]},<<46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,93,41,46,10,34,55,46,49,50,48,48,34,10,62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,55,46,49,50,44,32,91,123,100,101,99,105,109,97,108,115,44,32,52,125,44,32,99,111,109,112,97,99,116,93,41,46,10,34,55,46,49,50,34,10,62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,55,46,49,50,44,32,91,123,115,99,105,101,110,116,105,102,105,99,44,32,51,125,93,41,46,10,34,55,46,49,50,48,101,43,48,48,34,10,62,32,102,108,111,97,116,95,116,111,95,108,105,115,116,40,48,46,49,43,48,46,50,41,10,34,51,46,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,52,52,52,48,57,101,45,48,49,34>>]}]},{p,[],[<<73,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<102,108,111,97,116,95,116,111,95,108,105,115,116,40,48,46,49,43,48,46,50,41>>]},<<32,101,118,97,108,117,97,116,101,115,32,116,111,32>>,{code,[],[<<34,51,46,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,52,52,52,48,57,101,45,48,49,34>>]},<<46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,101,120,112,108,97,105,110,101,100,32,105,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115,35,102,108,111,97,116,95,114,101,112,114,101,115,101,110,116,97,116,105,111,110,95,112,114,111,98,108,101,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,70,108,111,97,116,105,110,103,32,80,111,105,110,116,32,78,117,109,98,101,114,115>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,48,56,48>>,signature => [{attribute,{960,2},spec,{{float_to_list,2},[{type,{960,20},bounded_fun,[{type,{960,20},'fun',[{type,{960,20},product,[{var,{960,21},'Float'},{var,{960,28},'Options'}]},{type,{960,40},string,[]}]},[{type,{961,7},constraint,[{atom,{961,7},is_subtype},[{var,{961,7},'Float'},{type,{961,16},float,[]}]]},{type,{962,7},constraint,[{atom,{962,7},is_subtype},[{var,{962,7},'Options'},{type,{962,18},list,[{var,{962,19},'Option'}]}]]},{type,{963,7},constraint,[{atom,{963,7},is_subtype},[{var,{963,7},'Option'},{type,{963,18},union,[{type,{963,18},tuple,[{atom,{963,19},decimals},{ann_type,{963,29},[{var,{963,29},'Decimals'},{type,{963,41},range,[{integer,{963,41},0},{integer,{963,44},253}]}]}]},{type,{964,18},tuple,[{atom,{964,19},scientific},{ann_type,{964,31},[{var,{964,31},'Decimals'},{type,{964,43},range,[{integer,{964,43},0},{integer,{964,46},249}]}]}]},{atom,{965,18},compact}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,floor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,971}],[<<102,108,111,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,97,114,103,101,115,116,32,105,110,116,101,103,101,114,32,110,111,116,32,103,114,101,97,116,101,114,32,116,104,97,110,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,102,108,111,111,114,40,45,49,48,46,53,41,46,10,45,49,49>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,49,50,54>>,signature => [{attribute,{971,2},spec,{{floor,1},[{type,{971,12},bounded_fun,[{type,{971,12},'fun',[{type,{971,12},product,[{var,{971,13},'Number'}]},{type,{971,24},integer,[]}]},[{type,{972,7},constraint,[{atom,{972,7},is_subtype},[{var,{972,7},'Number'},{type,{972,17},number,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,fun_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3442}],[<<102,117,110,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,102,117,110,32>>,{code,[],[<<70,117,110>>]},<<46,32,69,97,99,104,32,108,105,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,116,117,112,108,101,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,110,100,32,109,111,114,101,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,109,97,105,110,108,121,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,44,32,98,117,116,32,105,116,32,99,97,110,32,115,111,109,101,116,105,109,101,115,32,98,101,32,117,115,101,102,117,108,32,105,110,32,108,105,98,114,97,114,121,32,102,117,110,99,116,105,111,110,115,32,116,104,97,116,32,110,101,101,100,32,116,111,32,118,101,114,105,102,121,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,114,105,116,121,32,111,102,32,97,32,102,117,110,46>>]}]},{p,[],[<<84,119,111,32,116,121,112,101,115,32,111,102,32,102,117,110,115,32,104,97,118,101,32,115,108,105,103,104,116,108,121,32,100,105,102,102,101,114,101,110,116,32,115,101,109,97,110,116,105,99,115,58>>]},{ul,[],[{li,[],[{p,[],[<<65,32,102,117,110,32,99,114,101,97,116,101,100,32,98,121,32>>,{code,[],[<<102,117,110,32,77,58,70,47,65>>]},<<32,105,115,32,99,97,108,108,101,100,32,97,110,32>>,{em,[],[<<101,120,116,101,114,110,97,108>>]},<<32,102,117,110,46,32,67,97,108,108,105,110,103,32,105,116,32,119,105,108,108,32,97,108,119,97,121,115,32,99,97,108,108,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<70>>]},<<32,119,105,116,104,32,97,114,105,116,121,32>>,{code,[],[<<65>>]},<<32,105,110,32,116,104,101,32,108,97,116,101,115,116,32,99,111,100,101,32,102,111,114,32,109,111,100,117,108,101,32>>,{code,[],[<<77>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,109,111,100,117,108,101,32>>,{code,[],[<<77>>]},<<32,100,111,101,115,32,110,111,116,32,101,118,101,110,32,110,101,101,100,32,116,111,32,98,101,32,108,111,97,100,101,100,32,119,104,101,110,32,116,104,101,32,102,117,110,32>>,{code,[],[<<102,117,110,32,77,58,70,47,65>>]},<<32,105,115,32,99,114,101,97,116,101,100,46>>]}]},{li,[],[{p,[],[<<65,108,108,32,111,116,104,101,114,32,102,117,110,115,32,97,114,101,32,99,97,108,108,101,100,32>>,{em,[],[<<108,111,99,97,108>>]},<<46,32,87,104,101,110,32,97,32,108,111,99,97,108,32,102,117,110,32,105,115,32,99,97,108,108,101,100,44,32,116,104,101,32,115,97,109,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,99,111,100,101,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,102,117,110,32,105,115,32,99,97,108,108,101,100,32,40,101,118,101,110,32,105,102,32,97,32,110,101,119,101,114,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,104,97,115,32,98,101,101,110,32,108,111,97,100,101,100,41,46>>]}]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,108,101,109,101,110,116,115,32,97,114,101,32,97,108,119,97,121,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,32,102,111,114,32,98,111,116,104,32,108,111,99,97,108,32,97,110,100,32,101,120,116,101,114,110,97,108,32,102,117,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,116,121,112,101,44,32,84,121,112,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,111,114,32>>,{code,[],[<<101,120,116,101,114,110,97,108>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,109,111,100,117,108,101,44,32,77,111,100,117,108,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<32,40,97,110,32,97,116,111,109,41,32,105,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,44,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,116,104,101,32,109,111,100,117,108,101,32,105,110,32,119,104,105,99,104,32,116,104,101,32,102,117,110,32,105,115,32,100,101,102,105,110,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,110,32,101,120,116,101,114,110,97,108,32,102,117,110,44,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,116,104,101,32,109,111,100,117,108,101,32,116,104,97,116,32,116,104,101,32,102,117,110,32,114,101,102,101,114,115,32,116,111,46>>]}]},{dt,[],[{code,[],[<<123,110,97,109,101,44,32,78,97,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<78,97,109,101>>]},<<32,40,97,110,32,97,116,111,109,41,32,105,115,32,97,32,102,117,110,99,116,105,111,110,32,110,97,109,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,44,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101,32,102,117,110,46,32,40,84,104,105,115,32,110,97,109,101,32,119,97,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,116,104,101,32,99,111,109,112,105,108,101,114,44,32,97,110,100,32,105,115,32,111,110,108,121,32,111,102,32,105,110,102,111,114,109,97,116,105,111,110,97,108,32,117,115,101,46,32,65,115,32,105,116,32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,44,32,105,116,32,99,97,110,110,111,116,32,98,101,32,99,97,108,108,101,100,32,100,105,114,101,99,116,108,121,46,41,32,73,102,32,110,111,32,99,111,100,101,32,105,115,32,99,117,114,114,101,110,116,108,121,32,108,111,97,100,101,100,32,102,111,114,32,116,104,101,32,102,117,110,44,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,32,111,102,32,97,110,32,97,116,111,109,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,110,32,101,120,116,101,114,110,97,108,32,102,117,110,44,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,112,111,114,116,101,100,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,116,104,101,32,102,117,110,32,114,101,102,101,114,115,32,116,111,46>>]}]},{dt,[],[{code,[],[<<123,97,114,105,116,121,44,32,65,114,105,116,121,125>>]}]},{dd,[],[{p,[],[{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,116,104,97,116,32,116,104,101,32,102,117,110,32,105,115,32,116,111,32,98,101,32,99,97,108,108,101,100,32,119,105,116,104,46>>]}]},{dt,[],[{code,[],[<<123,101,110,118,44,32,69,110,118,125>>]}]},{dd,[],[{p,[],[{code,[],[<<69,110,118>>]},<<32,40,97,32,108,105,115,116,41,32,105,115,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,111,114,32,102,114,101,101,32,118,97,114,105,97,98,108,101,115,32,102,111,114,32,116,104,101,32,102,117,110,46,32,70,111,114,32,101,120,116,101,114,110,97,108,32,102,117,110,115,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,105,115,32,97,108,119,97,121,115,32,101,109,112,116,121,46>>]}]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,108,101,109,101,110,116,115,32,97,114,101,32,111,110,108,121,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,32,105,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,108,111,99,97,108,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,105,100,44,32,80,105,100,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,111,114,105,103,105,110,97,108,108,121,32,99,114,101,97,116,101,100,32,116,104,101,32,102,117,110,46>>]},{p,[],[<<73,116,32,109,105,103,104,116,32,112,111,105,110,116,32,116,111,32,116,104,101,32>>,{code,[],[<<105,110,105,116>>]},<<32,112,114,111,99,101,115,115,32,105,102,32,116,104,101,32>>,{code,[],[<<70,117,110>>]},<<32,119,97,115,32,115,116,97,116,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,119,104,101,110,32,109,111,100,117,108,101,32,119,97,115,32,108,111,97,100,101,100,32,40,116,104,105,115,32,111,112,116,105,109,105,115,97,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,102,111,114,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,115,32,116,104,97,116,32,100,111,32,110,111,116,32,99,97,112,116,117,114,101,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,41,46>>]}]},{dt,[],[{code,[],[<<123,105,110,100,101,120,44,32,73,110,100,101,120,125>>]}]},{dd,[],[{p,[],[{code,[],[<<73,110,100,101,120>>]},<<32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,115,32,97,110,32,105,110,100,101,120,32,105,110,116,111,32,116,104,101,32,109,111,100,117,108,101,32,102,117,110,32,116,97,98,108,101,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,95,105,110,100,101,120,44,32,73,110,100,101,120,125>>]}]},{dd,[],[{p,[],[{code,[],[<<73,110,100,101,120>>]},<<32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,115,32,97,110,32,105,110,100,101,120,32,105,110,116,111,32,116,104,101,32,109,111,100,117,108,101,32,102,117,110,32,116,97,98,108,101,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,95,117,110,105,113,44,32,85,110,105,113,125>>]}]},{dd,[],[{p,[],[{code,[],[<<85,110,105,113>>]},<<32,40,97,32,98,105,110,97,114,121,41,32,105,115,32,97,32,117,110,105,113,117,101,32,118,97,108,117,101,32,102,111,114,32,116,104,105,115,32,102,117,110,46,32,73,116,32,105,115,32,99,97,108,99,117,108,97,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,109,112,105,108,101,100,32,99,111,100,101,32,102,111,114,32,116,104,101,32,101,110,116,105,114,101,32,109,111,100,117,108,101,46>>]}]},{dt,[],[{code,[],[<<123,117,110,105,113,44,32,85,110,105,113,125>>]}]},{dd,[],[{p,[],[{code,[],[<<85,110,105,113>>]},<<32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,115,32,97,32,117,110,105,113,117,101,32,118,97,108,117,101,32,102,111,114,32,116,104,105,115,32,102,117,110,46,32,65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,53,44,32,116,104,105,115,32,105,110,116,101,103,101,114,32,105,115,32,99,97,108,99,117,108,97,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,109,112,105,108,101,100,32,99,111,100,101,32,102,111,114,32,116,104,101,32,101,110,116,105,114,101,32,109,111,100,117,108,101,46,32,66,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,82,49,53,44,32,116,104,105,115,32,105,110,116,101,103,101,114,32,119,97,115,32,98,97,115,101,100,32,111,110,32,111,110,108,121,32,116,104,101,32,98,111,100,121,32,111,102,32,116,104,101,32,102,117,110,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,49,52,48>>,signature => [{attribute,{3442,2},spec,{{erlang,fun_info,1},[{type,{3442,22},bounded_fun,[{type,{3442,22},'fun',[{type,{3442,22},product,[{var,{3442,23},'Fun'}]},{type,{3442,31},list,[{type,{3442,32},tuple,[{var,{3442,33},'Item'},{var,{3442,39},'Info'}]}]}]},[{type,{3443,7},constraint,[{atom,{3443,7},is_subtype},[{var,{3443,7},'Fun'},{type,{3443,14},function,[]}]]},{type,{3444,7},constraint,[{atom,{3444,7},is_subtype},[{var,{3444,7},'Item'},{type,{3444,15},union,[{atom,{3444,15},arity},{atom,{3444,23},env},{atom,{3444,29},index},{atom,{3444,37},name},{atom,{3445,15},module},{atom,{3445,24},new_index},{atom,{3445,36},new_uniq},{atom,{3445,47},pid},{atom,{3445,53},type},{atom,{3445,60},uniq}]}]]},{type,{3446,7},constraint,[{atom,{3446,7},is_subtype},[{var,{3446,7},'Info'},{type,{3446,15},term,[]}]]}]]}]}}]}},{{function,fun_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,977}],[<<102,117,110,95,105,110,102,111,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<102,117,110,95,105,110,102,111,95,105,116,101,109>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32>>,{code,[],[<<70,117,110>>]},<<32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<44,32,105,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,73,116,101,109,44,73,110,102,111,125>>]},<<46>>]},{p,[],[<<70,111,114,32,97,110,121,32,102,117,110,44,32>>,{code,[],[<<73,116,101,109>>]},<<32,99,97,110,32,98,101,32,97,110,121,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<109,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<110,97,109,101>>]},<<44,32>>,{code,[],[<<97,114,105,116,121>>]},<<44,32>>,{code,[],[<<101,110,118>>]},<<44,32,111,114,32>>,{code,[],[<<116,121,112,101>>]},<<46>>]},{p,[],[<<70,111,114,32,97,32,108,111,99,97,108,32,102,117,110,44,32>>,{code,[],[<<73,116,101,109>>]},<<32,99,97,110,32,97,108,115,111,32,98,101,32,97,110,121,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<105,110,100,101,120>>]},<<44,32>>,{code,[],[<<110,101,119,95,105,110,100,101,120>>]},<<44,32>>,{code,[],[<<110,101,119,95,117,110,105,113>>]},<<44,32>>,{code,[],[<<117,110,105,113>>]},<<44,32,97,110,100,32>>,{code,[],[<<112,105,100>>]},<<46,32,70,111,114,32,97,110,32,101,120,116,101,114,110,97,108,32,102,117,110,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,97,110,121,32,111,102,32,116,104,101,115,101,32,105,116,101,109,115,32,105,115,32,97,108,119,97,121,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,117,110,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,102,117,110,95,105,110,102,111,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,50,52,53>>,signature => [{attribute,{977,2},spec,{{erlang,fun_info,2},[{type,{977,22},bounded_fun,[{type,{977,22},'fun',[{type,{977,22},product,[{var,{977,23},'Fun'},{var,{977,28},'Item'}]},{type,{977,37},tuple,[{var,{977,38},'Item'},{var,{977,44},'Info'}]}]},[{type,{978,7},constraint,[{atom,{978,7},is_subtype},[{var,{978,7},'Fun'},{type,{978,14},function,[]}]]},{type,{979,7},constraint,[{atom,{979,7},is_subtype},[{var,{979,7},'Item'},{user_type,{979,15},fun_info_item,[]}]]},{type,{980,7},constraint,[{atom,{980,7},is_subtype},[{var,{980,7},'Info'},{type,{980,15},term,[]}]]}]]}]}}]}},{{function,fun_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,994}],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,116,104,97,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,99,111,100,101,32,116,104,97,116,32,99,114,101,97,116,101,100,32>>,{code,[],[<<70,117,110>>]},<<46>>]},{p,[],[{code,[],[<<83,116,114,105,110,103>>]},<<32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,44,32,105,102,32>>,{code,[],[<<70,117,110>>]},<<32,119,97,115,32,99,114,101,97,116,101,100,32,98,121,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,102,117,110,45,101,120,112,114,101,115,115,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<102,117,110,32,101,120,112,114,101,115,115,105,111,110>>]},<<32,111,102,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<102,117,110,32,77,111,100,117,108,101,78,97,109,101,58,70,117,110,99,78,97,109,101,47,65,114,105,116,121>>]},<<58>>]},{p,[],[{code,[],[<<34,102,117,110,32,77,111,100,117,108,101,78,97,109,101,58,70,117,110,99,78,97,109,101,47,65,114,105,116,121,34>>]}]},{p,[],[<<84,104,101,32,102,111,114,109,32,111,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,119,104,101,110,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,99,114,101,97,116,101,100,32,102,114,111,109,32,111,116,104,101,114,32,116,121,112,101,115,32,111,102,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,102,117,110,45,101,120,112,114,101,115,115,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<102,117,110,32,101,120,112,114,101,115,115,105,111,110,115>>]},<<32,100,105,102,102,101,114,115,32,100,101,112,101,110,100,105,110,103,32,111,110,32,105,102,32,116,104,101,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,101,120,101,99,117,116,101,100,32,119,104,105,108,101,32,101,120,101,99,117,116,105,110,103,32,99,111,109,112,105,108,101,100,32,99,111,100,101,32,111,114,32,105,102,32,116,104,101,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,101,120,101,99,117,116,101,100,32,119,104,105,108,101,32,101,120,101,99,117,116,105,110,103,32,117,110,99,111,109,112,105,108,101,100,32,99,111,100,101,32,40,117,110,99,111,109,112,105,108,101,100,32,101,115,99,114,105,112,116,115,44,32,116,104,101,32,69,114,108,97,110,103,32,115,104,101,108,108,44,32,97,110,100,32,111,116,104,101,114,32,99,111,100,101,32,101,120,101,99,117,116,101,100,32,98,121,32,116,104,101,32,101,114,108,95,101,118,97,108,32,109,111,100,117,108,101,41,58>>]},{dl,[],[{dt,[],[<<99,111,109,112,105,108,101,100,32,99,111,100,101>>]},{dd,[],[{p,[],[{code,[],[<<34,35,70,117,110,60,77,46,73,46,85,62,34>>]},<<44,32,119,104,101,114,101,32,77,44,32,73,32,97,110,100,32,85,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101,32,118,97,108,117,101,115,32,110,97,109,101,100,32>>,{code,[],[<<109,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<105,110,100,101,120>>]},<<32,97,110,100,32>>,{code,[],[<<117,110,105,113>>]},<<32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,117,110,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,102,117,110,95,105,110,102,111,40,70,117,110,41>>]}]},<<46>>]}]},{dt,[],[<<117,110,99,111,109,112,105,108,101,100,32,99,111,100,101>>]},{dd,[],[<<65,108,108,32,102,117,110,115,32,99,114,101,97,116,101,100,32,102,114,111,109,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,117,110,99,111,109,112,105,108,101,100,32,99,111,100,101,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,97,114,105,116,121,32,97,114,101,32,109,97,112,112,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,108,105,115,116,32,98,121,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<71,101,110,101,114,97,108,108,121,44,32,111,110,101,32,99,97,110,32,110,111,116,32,117,115,101,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<32,116,111,32,99,104,101,99,107,32,105,102,32,116,119,111,32,102,117,110,115,32,97,114,101,32,101,113,117,97,108,32,97,115,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<32,100,111,101,115,32,110,111,116,32,116,97,107,101,32,116,104,101,32,102,117,110,39,115,32,101,110,118,105,114,111,110,109,101,110,116,32,105,110,116,111,32,97,99,99,111,117,110,116,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,102,117,110,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,102,117,110,95,105,110,102,111,47,49>>]}]},<<32,102,111,114,32,104,111,119,32,116,111,32,103,101,116,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,111,102,32,97,32,102,117,110,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,111,117,116,112,117,116,32,111,102,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,69,114,108,97,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,32,97,110,100,32,109,97,121,32,99,104,97,110,103,101,32,105,110,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,115,46>>]}]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<45,109,111,100,117,108,101,40,116,101,115,116,41,46,10,45,101,120,112,111,114,116,40,91,97,100,100,47,49,44,32,97,100,100,50,47,48,44,32,102,117,110,95,116,117,112,108,101,47,48,93,41,46,10,97,100,100,40,65,41,32,45,62,32,102,117,110,40,66,41,32,45,62,32,65,32,43,32,66,32,101,110,100,46,10,97,100,100,50,40,41,32,45,62,32,102,117,110,32,97,100,100,47,49,46,10,102,117,110,95,116,117,112,108,101,40,41,32,45,62,32,123,102,117,110,40,41,32,45,62,32,49,32,101,110,100,44,32,102,117,110,40,41,32,45,62,32,49,32,101,110,100,125,46,10,32,32,32,32,32,32,32,32>>]}]},{pre,[],[{code,[],[<<62,32,123,102,117,110,32,116,101,115,116,58,97,100,100,47,49,44,32,116,101,115,116,58,97,100,100,50,40,41,125,46,10,123,102,117,110,32,116,101,115,116,58,97,100,100,47,49,44,35,70,117,110,60,116,101,115,116,46,49,46,49,48,55,55,51,56,57,56,51,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32>>,{code,[],[<<102,117,110,32,116,101,115,116,58,97,100,100,47,49>>]},<<32,105,115,32,117,112,103,114,97,100,97,98,108,101,32,98,117,116,32>>,{code,[],[<<116,101,115,116,58,97,100,100,50,40,41>>]},<<32,105,115,32,110,111,116,32,117,112,103,114,97,100,97,98,108,101,46>>]},{pre,[],[{code,[],[<<62,32,123,116,101,115,116,58,97,100,100,40,49,41,44,32,116,101,115,116,58,97,100,100,40,52,50,41,125,46,10,123,35,70,117,110,60,116,101,115,116,46,48,46,49,48,55,55,51,56,57,56,51,62,44,35,70,117,110,60,116,101,115,116,46,48,46,49,48,55,55,51,56,57,56,51,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32>>,{code,[],[<<116,101,115,116,58,97,100,100,40,49,41>>]},<<32,97,110,100,32>>,{code,[],[<<116,101,115,116,58,97,100,100,40,52,50,41>>]},<<32,104,97,115,32,116,104,101,32,115,97,109,101,32,115,116,114,105,110,103,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,97,115,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,105,115,32,110,111,116,32,116,97,107,101,110,32,105,110,116,111,32,97,99,99,111,117,110,116,46>>]},{pre,[],[{code,[],[<<62,116,101,115,116,58,102,117,110,95,116,117,112,108,101,40,41,46,10,123,35,70,117,110,60,116,101,115,116,46,50,46,49,48,55,55,51,56,57,56,51,62,44,35,70,117,110,60,116,101,115,116,46,51,46,49,48,55,55,51,56,57,56,51,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32,84,104,101,32,115,116,114,105,110,103,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,115,32,100,105,102,102,101,114,32,98,101,99,97,117,115,101,32,116,104,101,32,102,117,110,115,32,99,111,109,101,32,102,114,111,109,32,100,105,102,102,101,114,101,110,116,32,102,117,110,32,101,120,112,101,114,115,115,105,111,110,115,46>>]},{pre,[],[{code,[],[<<62,32,123,102,117,110,40,41,32,45,62,32,49,32,101,110,100,44,32,102,117,110,40,41,32,45,62,32,49,32,101,110,100,125,46,32,62,32,10,123,35,70,117,110,60,101,114,108,95,101,118,97,108,46,52,53,46,57,55,50,56,51,48,57,53,62,44,35,70,117,110,60,101,114,108,95,101,118,97,108,46,52,53,46,57,55,50,56,51,48,57,53,62,125>>]}]},{p,[],[<<69,120,112,108,97,110,97,116,105,111,110,58,32,65,108,108,32,102,117,110,115,32,99,114,101,97,116,101,100,32,102,114,111,109,32,102,117,110,32,101,120,112,114,101,115,115,105,111,110,115,32,111,102,32,116,104,105,115,32,102,111,114,109,32,105,110,32,117,110,99,111,109,112,105,108,101,100,32,99,111,100,101,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,97,114,105,116,121,32,97,114,101,32,109,97,112,112,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,108,105,115,116,32,98,121,32>>,{code,[],[<<102,117,110,95,116,111,95,108,105,115,116,47,49>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,50,54,53>>,signature => [{attribute,{994,2},spec,{{erlang,fun_to_list,1},[{type,{994,25},bounded_fun,[{type,{994,25},'fun',[{type,{994,25},product,[{var,{994,26},'Fun'}]},{ann_type,{994,34},[{var,{994,34},'String'},{type,{994,44},string,[]}]}]},[{type,{995,7},constraint,[{atom,{995,7},is_subtype},[{var,{995,7},'Fun'},{type,{995,14},function,[]}]]}]]}]}}]}},{{function,function_exported,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1000}],[<<102,117,110,99,116,105,111,110,95,101,120,112,111,114,116,101,100,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,99,111,100,101,95,108,111,97,100,105,110,103,35,99,111,100,101,45,114,101,112,108,97,99,101,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,117,114,114,101,110,116>>]},<<32,97,110,100,32,99,111,110,116,97,105,110,115,32,97,110,32,101,120,112,111,114,116,101,100,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<70,117,110,99,116,105,111,110,47,65,114,105,116,121>>]},<<44,32,111,114,32,105,102,32,116,104,101,114,101,32,105,115,32,97,32,66,73,70,32,40,97,32,98,117,105,108,116,45,105,110,32,102,117,110,99,116,105,111,110,32,105,109,112,108,101,109,101,110,116,101,100,32,105,110,32,67,41,32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,110,97,109,101,44,32,111,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,51,53,52>>,signature => [{attribute,{1000,2},spec,{{erlang,function_exported,3},[{type,{1000,31},bounded_fun,[{type,{1000,31},'fun',[{type,{1000,31},product,[{var,{1000,32},'Module'},{var,{1000,40},'Function'},{var,{1000,50},'Arity'}]},{type,{1000,60},boolean,[]}]},[{type,{1001,7},constraint,[{atom,{1001,7},is_subtype},[{var,{1001,7},'Module'},{type,{1001,17},module,[]}]]},{type,{1002,7},constraint,[{atom,{1002,7},is_subtype},[{var,{1002,7},'Function'},{type,{1002,19},atom,[]}]]},{type,{1003,7},constraint,[{atom,{1003,7},is_subtype},[{var,{1003,7},'Arity'},{type,{1003,16},arity,[]}]]}]]}]}}]}},{{function,garbage_collect,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1008}],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>],#{<<101,110>> => [{p,[],[<<70,111,114,99,101,115,32,97,110,32,105,109,109,101,100,105,97,116,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,116,104,101,32,101,120,101,99,117,116,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,117,110,108,101,115,115,32,105,116,32,104,97,115,32,98,101,101,110,32,110,111,116,105,99,101,100,32,40,111,114,32,116,104,101,114,101,32,97,114,101,32,103,111,111,100,32,114,101,97,115,111,110,115,32,116,111,32,115,117,115,112,101,99,116,41,32,116,104,97,116,32,116,104,101,32,115,112,111,110,116,97,110,101,111,117,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,119,105,108,108,32,111,99,99,117,114,32,116,111,111,32,108,97,116,101,32,111,114,32,110,111,116,32,97,116,32,97,108,108,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,109,112,114,111,112,101,114,32,117,115,101,32,99,97,110,32,115,101,114,105,111,117,115,108,121,32,100,101,103,114,97,100,101,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,51,54,54>>,signature => [{attribute,{1008,2},spec,{{garbage_collect,0},[{type,{1008,22},'fun',[{type,{1008,22},product,[]},{atom,{1008,28},true}]}]}}]}},{{function,garbage_collect,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1013}],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,40,80,105,100,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,51,56,50>>,signature => [{attribute,{1013,2},spec,{{garbage_collect,1},[{type,{1013,22},bounded_fun,[{type,{1013,22},'fun',[{type,{1013,22},product,[{var,{1013,23},'Pid'}]},{var,{1013,31},'GCResult'}]},[{type,{1014,7},constraint,[{atom,{1014,7},is_subtype},[{var,{1014,7},'Pid'},{type,{1014,14},pid,[]}]]},{type,{1015,7},constraint,[{atom,{1015,7},is_subtype},[{var,{1015,7},'GCResult'},{type,{1015,19},boolean,[]}]]}]]}]}}]}},{{function,garbage_collect,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1029}],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<71,97,114,98,97,103,101,32,99,111,108,108,101,99,116,115,32,116,104,101,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,82,101,113,117,101,115,116,73,100,125>>]}]},{dd,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,50>>]},<<32,114,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,115,101,110,116,46,32,87,104,101,110,32,116,104,101,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,44,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,97,108,108,101,100,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,112,97,115,115,101,100,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,44,32,82,101,113,117,101,115,116,73,100,44,32,71,67,82,101,115,117,108,116,125>>]},<<46>>]},{dt,[],[{code,[],[<<123,116,121,112,101,44,32,39,109,97,106,111,114,39,32,124,32,39,109,105,110,111,114,39,125>>]}]},{dd,[],[<<84,114,105,103,103,101,114,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,114,101,113,117,101,115,116,101,100,32,116,121,112,101,46,32,68,101,102,97,117,108,116,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<39,109,97,106,111,114,39>>]},<<44,32,119,104,105,99,104,32,119,111,117,108,100,32,116,114,105,103,103,101,114,32,97,32,102,117,108,108,115,119,101,101,112,32,71,67,46,32,84,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<39,109,105,110,111,114,39>>]},<<32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,104,105,110,116,32,97,110,100,32,109,97,121,32,108,101,97,100,32,116,111,32,101,105,116,104,101,114,32,109,105,110,111,114,32,111,114,32,109,97,106,111,114,32,71,67,32,114,117,110,46>>]}]},{p,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<115,101,108,102,40,41>>]},<<44,32,97,110,100,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,116,32,111,110,99,101,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>]}]},<<46,32,79,116,104,101,114,119,105,115,101,32,97,32,114,101,113,117,101,115,116,32,102,111,114,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,97,110,100,32,119,105,108,108,32,98,101,32,104,97,110,100,108,101,100,32,119,104,101,110,32,97,112,112,114,111,112,114,105,97,116,101,46,32,73,102,32,110,111,32>>,{code,[],[<<97,115,121,110,99>>]},<<32,111,112,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,98,108,111,99,107,115,32,117,110,116,105,108,32>>,{code,[],[<<71,67,82,101,115,117,108,116>>]},<<32,105,115,32,97,118,97,105,108,97,98,108,101,32,97,110,100,32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<71,67,82,101,115,117,108,116>>]},<<32,105,110,102,111,114,109,115,32,97,98,111,117,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,114,101,113,117,101,115,116,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,104,97,115,32,98,101,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46>>]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[<<78,111,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,119,97,115,32,112,101,114,102,111,114,109,101,100,44,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,116,101,114,109,105,110,97,116,101,100,32,98,101,102,111,114,101,32,116,104,101,32,114,101,113,117,101,115,116,32,99,111,117,108,100,32,98,101,32,115,97,116,105,115,102,105,101,100,46>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,115,97,109,101,32,99,97,118,101,97,116,115,32,97,112,112,108,121,32,97,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,47,48>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,110,111,100,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,51,57,50>>,signature => [{attribute,{1029,2},spec,{{garbage_collect,2},[{type,{1029,22},bounded_fun,[{type,{1029,22},'fun',[{type,{1029,22},product,[{var,{1029,23},'Pid'},{var,{1029,28},'OptionList'}]},{type,{1029,43},union,[{var,{1029,43},'GCResult'},{atom,{1029,54},async}]}]},[{type,{1030,7},constraint,[{atom,{1030,7},is_subtype},[{var,{1030,7},'Pid'},{type,{1030,14},pid,[]}]]},{type,{1031,7},constraint,[{atom,{1031,7},is_subtype},[{var,{1031,7},'RequestId'},{type,{1031,20},term,[]}]]},{type,{1032,7},constraint,[{atom,{1032,7},is_subtype},[{var,{1032,7},'Option'},{type,{1032,17},union,[{type,{1032,17},tuple,[{atom,{1032,18},async},{var,{1032,25},'RequestId'}]},{type,{1032,38},tuple,[{atom,{1032,39},type},{type,{1032,45},union,[{atom,{1032,45},major},{atom,{1032,55},minor}]}]}]}]]},{type,{1033,7},constraint,[{atom,{1033,7},is_subtype},[{var,{1033,7},'OptionList'},{type,{1033,21},list,[{var,{1033,22},'Option'}]}]]},{type,{1034,7},constraint,[{atom,{1034,7},is_subtype},[{var,{1034,7},'GCResult'},{type,{1034,19},boolean,[]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,get,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1079}],[<<103,101,116,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,97,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,75,101,121,44,32,86,97,108,125>>]},<<32,116,117,112,108,101,115,46,32,84,104,101,32,105,116,101,109,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,105,110,32,97,110,121,32,111,114,100,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,109,101,114,114,121,41,44,10,112,117,116,40,107,101,121,50,44,32,108,97,109,98,115,41,44,10,112,117,116,40,107,101,121,51,44,32,123,97,114,101,44,32,112,108,97,121,105,110,103,125,41,44,10,103,101,116,40,41,46,10,91,123,107,101,121,49,44,109,101,114,114,121,125,44,123,107,101,121,50,44,108,97,109,98,115,125,44,123,107,101,121,51,44,123,97,114,101,44,112,108,97,121,105,110,103,125,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,53,55>>,signature => [{attribute,{1079,2},spec,{{get,0},[{type,{1079,10},bounded_fun,[{type,{1079,10},'fun',[{type,{1079,10},product,[]},{type,{1079,16},list,[{type,{1079,17},tuple,[{var,{1079,18},'Key'},{var,{1079,23},'Val'}]}]}]},[{type,{1080,7},constraint,[{atom,{1080,7},is_subtype},[{var,{1080,7},'Key'},{type,{1080,14},term,[]}]]},{type,{1081,7},constraint,[{atom,{1081,7},is_subtype},[{var,{1081,7},'Val'},{type,{1081,14},term,[]}]]}]]}]}}]}},{{function,get,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1086}],[<<103,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32>>,{code,[],[<<75,101,121>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,84,104,101,32,101,120,112,101,99,116,101,100,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,79,40>>,{code,[],[<<49>>]},<<41,32,97,110,100,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,105,115,32,79,40>>,{code,[],[<<78>>]},<<41,44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,116,101,109,115,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,107,101,121,49,44,32,109,101,114,114,121,41,44,10,112,117,116,40,107,101,121,50,44,32,108,97,109,98,115,41,44,10,112,117,116,40,123,97,110,121,44,32,91,118,97,108,105,100,44,32,116,101,114,109,93,125,44,32,123,97,114,101,44,32,112,108,97,121,105,110,103,125,41,44,10,103,101,116,40,123,97,110,121,44,32,91,118,97,108,105,100,44,32,116,101,114,109,93,125,41,46,10,123,97,114,101,44,112,108,97,121,105,110,103,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,55,52>>,signature => [{attribute,{1086,2},spec,{{get,1},[{type,{1086,10},bounded_fun,[{type,{1086,10},'fun',[{type,{1086,10},product,[{var,{1086,11},'Key'}]},{type,{1086,19},union,[{var,{1086,19},'Val'},{atom,{1086,25},undefined}]}]},[{type,{1087,7},constraint,[{atom,{1087,7},is_subtype},[{var,{1087,7},'Key'},{type,{1087,14},term,[]}]]},{type,{1088,7},constraint,[{atom,{1088,7},is_subtype},[{var,{1088,7},'Val'},{type,{1088,14},term,[]}]]}]]}]}}]}},{{function,get_cookie,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3802}],[<<103,101,116,95,99,111,111,107,105,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,103,105,99,32,99,111,111,107,105,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,102,32,116,104,101,32,110,111,100,101,32,105,115,32,97,108,105,118,101,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<110,111,99,111,111,107,105,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,52,57,52>>,signature => [{attribute,{3802,2},spec,{{erlang,get_cookie,0},[{type,{3802,24},bounded_fun,[{type,{3802,24},'fun',[{type,{3802,24},product,[]},{type,{3802,30},union,[{var,{3802,30},'Cookie'},{atom,{3802,39},nocookie}]}]},[{type,{3803,7},constraint,[{atom,{3803,7},is_subtype},[{var,{3803,7},'Cookie'},{type,{3803,17},atom,[]}]]}]]}]}}]}},{{function,get_cookie,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3807}],[<<103,101,116,95,99,111,111,107,105,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,103,105,99,32,99,111,111,107,105,101,32,102,111,114,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,97,108,105,118,101,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<110,111,99,111,111,107,105,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,48,51>>,signature => [{attribute,{3807,2},spec,{{erlang,get_cookie,1},[{type,{3807,24},bounded_fun,[{type,{3807,24},'fun',[{type,{3807,24},product,[{var,{3807,25},'Node'}]},{type,{3807,34},union,[{var,{3807,34},'Cookie'},{atom,{3807,43},nocookie}]}]},[{type,{3808,7},constraint,[{atom,{3808,7},is_subtype},[{var,{3808,7},'Node'},{type,{3808,15},node,[]}]]},{type,{3809,7},constraint,[{atom,{3809,7},is_subtype},[{var,{3809,7},'Cookie'},{type,{3809,17},atom,[]}]]}]]}]}}],since => <<79,84,80,32,64,79,84,80,45,49,55,53,51,56,64>>}},{{function,get_keys,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1093}],[<<103,101,116,95,107,101,121,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,108,108,32,107,101,121,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,84,104,101,32,105,116,101,109,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,105,110,32,97,110,121,32,111,114,100,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,100,111,103,44,32,123,97,110,105,109,97,108,44,49,125,41,44,10,112,117,116,40,99,111,119,44,32,123,97,110,105,109,97,108,44,50,125,41,44,10,112,117,116,40,108,97,109,98,44,32,123,97,110,105,109,97,108,44,51,125,41,44,10,103,101,116,95,107,101,121,115,40,41,46,10,91,100,111,103,44,99,111,119,44,108,97,109,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,49,51>>,signature => [{attribute,{1093,2},spec,{{get_keys,0},[{type,{1093,15},bounded_fun,[{type,{1093,15},'fun',[{type,{1093,15},product,[]},{type,{1093,21},list,[{var,{1093,22},'Key'}]}]},[{type,{1094,7},constraint,[{atom,{1094,7},is_subtype},[{var,{1094,7},'Key'},{type,{1094,14},term,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,get_keys,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1099}],[<<103,101,116,95,107,101,121,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,107,101,121,115,32,116,104,97,116,32,97,114,101,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,84,104,101,32,105,116,101,109,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,105,110,32,97,110,121,32,111,114,100,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,117,116,40,109,97,114,121,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,104,97,100,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,97,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,108,105,116,116,108,101,44,32,123,49,44,32,50,125,41,44,10,112,117,116,40,100,111,103,44,32,123,49,44,32,51,125,41,44,10,112,117,116,40,108,97,109,98,44,32,123,49,44,32,50,125,41,44,10,103,101,116,95,107,101,121,115,40,123,49,44,32,50,125,41,46,10,91,109,97,114,121,44,104,97,100,44,97,44,108,105,116,116,108,101,44,108,97,109,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,51,48>>,signature => [{attribute,{1099,2},spec,{{get_keys,1},[{type,{1099,15},bounded_fun,[{type,{1099,15},'fun',[{type,{1099,15},product,[{var,{1099,16},'Val'}]},{type,{1099,24},list,[{var,{1099,25},'Key'}]}]},[{type,{1100,7},constraint,[{atom,{1100,7},is_subtype},[{var,{1100,7},'Val'},{type,{1100,14},term,[]}]]},{type,{1101,7},constraint,[{atom,{1101,7},is_subtype},[{var,{1101,7},'Key'},{type,{1101,14},term,[]}]]}]]}]}}]}},{{function,group_leader,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1113}],[<<103,114,111,117,112,95,108,101,97,100,101,114,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,46>>]},{p,[],[<<69,118,101,114,121,32,112,114,111,99,101,115,115,32,105,115,32,97,32,109,101,109,98,101,114,32,111,102,32,115,111,109,101,32,112,114,111,99,101,115,115,32,103,114,111,117,112,32,97,110,100,32,97,108,108,32,103,114,111,117,112,115,32,104,97,118,101,32,97,32>>,{em,[],[<<103,114,111,117,112,32,108,101,97,100,101,114>>]},<<46,32,65,108,108,32,73,47,79,32,102,114,111,109,32,116,104,101,32,103,114,111,117,112,32,105,115,32,99,104,97,110,110,101,108,101,100,32,116,111,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,46,32,87,104,101,110,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,112,97,119,110,101,100,44,32,105,116,32,103,101,116,115,32,116,104,101,32,115,97,109,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,97,115,32,116,104,101,32,115,112,97,119,110,105,110,103,32,112,114,111,99,101,115,115,46,32,73,110,105,116,105,97,108,108,121,44,32,97,116,32,115,121,115,116,101,109,32,115,116,97,114,116,117,112,44,32>>,{code,[],[<<105,110,105,116>>]},<<32,105,115,32,98,111,116,104,32,105,116,115,32,111,119,110,32,103,114,111,117,112,32,108,101,97,100,101,114,32,97,110,100,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,111,102,32,97,108,108,32,112,114,111,99,101,115,115,101,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,53,48>>,signature => [{attribute,{1113,2},spec,{{group_leader,0},[{type,{1113,19},'fun',[{type,{1113,19},product,[]},{type,{1113,25},pid,[]}]}]}}]}},{{function,group_leader,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1118}],[<<103,114,111,117,112,95,108,101,97,100,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<32,116,111,32>>,{code,[],[<<71,114,111,117,112,76,101,97,100,101,114>>]},<<46,32,84,121,112,105,99,97,108,108,121,44,32,116,104,105,115,32,105,115,32,117,115,101,100,32,119,104,101,110,32,97,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,102,114,111,109,32,97,32,99,101,114,116,97,105,110,32,115,104,101,108,108,32,105,115,32,116,111,32,104,97,118,101,32,97,110,111,116,104,101,114,32,103,114,111,117,112,32,108,101,97,100,101,114,32,116,104,97,110,32>>,{code,[],[<<105,110,105,116>>]},<<46>>]},{p,[],[<<84,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,115,104,111,117,108,100,32,98,101,32,114,97,114,101,108,121,32,99,104,97,110,103,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,115,32,119,105,116,104,32,97,32,115,117,112,101,114,118,105,115,105,111,110,32,116,114,101,101,44,32,98,101,99,97,117,115,101,32,79,84,80,32,97,115,115,117,109,101,115,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,111,102,32,116,104,101,105,114,32,112,114,111,99,101,115,115,101,115,32,105,115,32,116,104,101,105,114,32,97,112,112,108,105,99,97,116,105,111,110,32,109,97,115,116,101,114,46>>]},{p,[],[<<83,101,116,116,105,110,103,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,102,111,108,108,111,119,115,32,116,104,101,32,115,105,103,110,97,108,32,111,114,100,101,114,105,110,103,32,103,117,97,114,101,110,116,101,101,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<80,114,111,99,101,115,115,101,115,32,67,104,97,112,116,101,114>>]},<<32,105,110,32,116,104,101,32>>,{i,[],[<<69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,114,111,117,112,95,108,101,97,100,101,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,114,111,117,112,95,108,101,97,100,101,114,47,48>>]}]},<<32,97,110,100,32>>,{a,[{href,<<115,121,115,116,101,109,47,100,101,115,105,103,110,95,112,114,105,110,99,105,112,108,101,115,58,97,112,112,108,105,99,97,116,105,111,110,115,35,115,116,111,112,112,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,84,80,32,100,101,115,105,103,110,32,112,114,105,110,99,105,112,108,101,115>>]},<<32,114,101,108,97,116,101,100,32,116,111,32,115,116,97,114,116,105,110,103,32,97,110,100,32,115,116,111,112,112,105,110,103,32,97,112,112,108,105,99,97,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,54,53>>,signature => [{attribute,{1118,2},spec,{{group_leader,2},[{type,{1118,19},bounded_fun,[{type,{1118,19},'fun',[{type,{1118,19},product,[{var,{1118,20},'GroupLeader'},{var,{1118,33},'Pid'}]},{atom,{1118,41},true}]},[{type,{1119,7},constraint,[{atom,{1119,7},is_subtype},[{var,{1119,7},'GroupLeader'},{type,{1119,22},pid,[]}]]},{type,{1120,7},constraint,[{atom,{1120,7},is_subtype},[{var,{1120,7},'Pid'},{type,{1120,14},pid,[]}]]}]]}]}}]}},{{function,halt,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1138}],[<<104,97,108,116,47,48>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,104,97,108,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<104,97,108,116,40,48,44,32,91,93,41>>]}]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,104,97,108,116,40,41,46,10,111,115,95,112,114,111,109,112,116,37>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,53,57,48>>,signature => [{attribute,{1138,2},spec,{{halt,0},[{type,{1138,11},'fun',[{type,{1138,11},product,[]},{type,{1138,17},no_return,[]}]}]}}]}},{{function,halt,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1144}],[<<104,97,108,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,104,97,108,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<104,97,108,116,40,83,116,97,116,117,115,44,32,91,93,41>>]}]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,104,97,108,116,40,49,55,41,46,10,111,115,95,112,114,111,109,112,116,37,32,101,99,104,111,32,36,63,10,49,55,10,111,115,95,112,114,111,109,112,116,37>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,48,51>>,signature => [{attribute,{1144,2},spec,{{halt,1},[{type,{1144,11},bounded_fun,[{type,{1144,11},'fun',[{type,{1144,11},product,[{var,{1144,12},'Status'}]},{type,{1144,23},no_return,[]}]},[{type,{1145,7},constraint,[{atom,{1145,7},is_subtype},[{var,{1145,7},'Status'},{type,{1145,17},union,[{type,{1145,17},non_neg_integer,[]},{atom,{1145,37},abort},{type,{1145,47},string,[]}]}]]}]]}]}}]}},{{function,halt,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1156}],[<<104,97,108,116,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<83,116,97,116,117,115>>]},<<32,109,117,115,116,32,98,101,32,97,32,110,111,110,45,110,101,103,97,116,105,118,101,32,105,110,116,101,103,101,114,44,32,97,32,115,116,114,105,110,103,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<97,98,111,114,116>>]},<<46,32,72,97,108,116,115,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,72,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,68,101,112,101,110,100,105,110,103,32,111,110,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,99,99,117,114,115,58>>]},{dl,[],[{dt,[],[<<105,110,116,101,103,101,114,40,41>>]},{dd,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,101,120,105,116,115,32,119,105,116,104,32,105,110,116,101,103,101,114,32,118,97,108,117,101,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<32,97,115,32,115,116,97,116,117,115,32,99,111,100,101,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,101,110,118,105,114,111,110,109,101,110,116,32,40,79,83,41,46>>,{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,110,32,109,97,110,121,32,112,108,97,116,102,111,114,109,115,44,32,116,104,101,32,79,83,32,115,117,112,112,111,114,116,115,32,111,110,108,121,32,115,116,97,116,117,115,32,99,111,100,101,115,32,48,45,50,53,53,46,32,65,32,116,111,111,32,108,97,114,103,101,32,115,116,97,116,117,115,32,99,111,100,101,32,105,115,32,116,114,117,110,99,97,116,101,100,32,98,121,32,99,108,101,97,114,105,110,103,32,116,104,101,32,104,105,103,104,32,98,105,116,115,46>>]}]}]},{dt,[],[<<115,116,114,105,110,103,40,41>>]},{dd,[],[<<65,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,32,105,115,32,112,114,111,100,117,99,101,100,32,119,105,116,104,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<32,97,115,32,115,108,111,103,97,110,46,32,84,104,101,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,101,120,105,116,115,32,119,105,116,104,32,115,116,97,116,117,115,32,99,111,100,101,32>>,{code,[],[<<49>>]},<<46,32,84,104,101,32,115,116,114,105,110,103,32,119,105,108,108,32,98,101,32,116,114,117,110,99,97,116,101,100,32,105,102,32,108,111,110,103,101,114,32,116,104,97,110,32,50,48,48,32,99,104,97,114,97,99,116,101,114,115,46>>,{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,101,102,111,114,101,32,69,82,84,83,32,57,46,49,32,40,79,84,80,45,50,48,46,49,41,32,111,110,108,121,32,99,111,100,101,32,112,111,105,110,116,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,48,45,50,53,53,32,119,97,115,32,97,99,99,101,112,116,101,100,32,105,110,32,116,104,101,32,115,116,114,105,110,103,46,32,78,111,119,32,97,110,121,32,117,110,105,99,111,100,101,32,115,116,114,105,110,103,32,105,115,32,118,97,108,105,100,46>>]}]}]},{dt,[],[{code,[],[<<97,98,111,114,116>>]}]},{dd,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,97,98,111,114,116,115,32,112,114,111,100,117,99,105,110,103,32,97,32,99,111,114,101,32,100,117,109,112,44,32,105,102,32,116,104,97,116,32,105,115,32,101,110,97,98,108,101,100,32,105,110,32,116,104,101,32,79,83,46>>]}]},{p,[],[<<70,111,114,32,105,110,116,101,103,101,114,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<44,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,99,108,111,115,101,115,32,97,108,108,32,112,111,114,116,115,32,97,110,100,32,97,108,108,111,119,115,32,97,115,121,110,99,32,116,104,114,101,97,100,115,32,116,111,32,102,105,110,105,115,104,32,116,104,101,105,114,32,111,112,101,114,97,116,105,111,110,115,32,98,101,102,111,114,101,32,101,120,105,116,105,110,103,46,32,84,111,32,101,120,105,116,32,119,105,116,104,111,117,116,32,115,117,99,104,32,102,108,117,115,104,105,110,103,44,32,117,115,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<32,97,115,32>>,{code,[],[<<123,102,108,117,115,104,44,102,97,108,115,101,125>>]},<<46>>]},{p,[],[<<70,111,114,32,115,116,97,116,117,115,101,115,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<32,97,110,100,32>>,{code,[],[<<97,98,111,114,116>>]},<<44,32,111,112,116,105,111,110,32>>,{code,[],[<<102,108,117,115,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,32,97,110,100,32,102,108,117,115,104,105,110,103,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,100,111,110,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,49,55>>,signature => [{attribute,{1156,2},spec,{{halt,2},[{type,{1156,11},bounded_fun,[{type,{1156,11},'fun',[{type,{1156,11},product,[{var,{1156,12},'Status'},{var,{1156,20},'Options'}]},{type,{1156,32},no_return,[]}]},[{type,{1157,7},constraint,[{atom,{1157,7},is_subtype},[{var,{1157,7},'Status'},{type,{1157,17},union,[{type,{1157,17},non_neg_integer,[]},{atom,{1157,37},abort},{type,{1157,47},string,[]}]}]]},{type,{1158,7},constraint,[{atom,{1158,7},is_subtype},[{var,{1158,7},'Options'},{type,{1158,18},list,[{var,{1158,19},'Option'}]}]]},{type,{1159,7},constraint,[{atom,{1159,7},is_subtype},[{var,{1159,7},'Option'},{type,{1159,17},tuple,[{atom,{1159,18},flush},{type,{1159,25},boolean,[]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66,48,49>>}},{{function,hd,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2136}],[<<104,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,104,101,97,100,32,111,102,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,104,100,40,91,49,44,50,44,51,44,52,44,53,93,41,46,10,49>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,105,115,116>>]},<<32,105,115,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,53,57>>,signature => [{attribute,{2136,2},spec,{{hd,1},[{type,{2136,9},bounded_fun,[{type,{2136,9},'fun',[{type,{2136,9},product,[{var,{2136,10},'List'}]},{type,{2136,19},term,[]}]},[{type,{2137,7},constraint,[{atom,{2137,7},is_subtype},[{var,{2137,7},'List'},{type,{2137,15},nonempty_list,[{type,{2137,16},term,[]}]}]]}]]}]}}]}},{{function,hibernate,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1170}],[<<104,105,98,101,114,110,97,116,101,47,51>>],#{<<101,110>> => [{p,[],[<<80,117,116,115,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,110,116,111,32,97,32,119,97,105,116,32,115,116,97,116,101,32,119,104,101,114,101,32,105,116,115,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,114,101,100,117,99,101,100,32,97,115,32,109,117,99,104,32,97,115,32,112,111,115,115,105,98,108,101,46,32,84,104,105,115,32,105,115,32,117,115,101,102,117,108,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,100,111,101,115,32,110,111,116,32,101,120,112,101,99,116,32,116,111,32,114,101,99,101,105,118,101,32,97,110,121,32,109,101,115,115,97,103,101,115,32,115,111,111,110,46>>]},{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,119,97,107,101,110,32,119,104,101,110,32,97,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,105,116,44,32,97,110,100,32,99,111,110,116,114,111,108,32,114,101,115,117,109,101,115,32,105,110,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,119,105,116,104,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<65,114,103,115>>]},<<32,119,105,116,104,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,32,101,109,112,116,105,101,100,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,116,104,101,32,112,114,111,99,101,115,115,32,116,101,114,109,105,110,97,116,101,115,32,119,104,101,110,32,116,104,97,116,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,46,32,84,104,117,115,32>>,{code,[],[<<101,114,108,97,110,103,58,104,105,98,101,114,110,97,116,101,47,51>>]},<<32,110,101,118,101,114,32,114,101,116,117,114,110,115,32,116,111,32,105,116,115,32,99,97,108,108,101,114,46,32,84,104,101,32,114,101,115,117,109,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,47,65,114,105,116,121>>]},<<32,109,117,115,116,32,98,101,32,101,120,112,111,114,116,101,100,32,40>>,{code,[],[<<65,114,105,116,121>>]},<<32,61,58,61,32>>,{code,[],[<<108,101,110,103,116,104,40,65,114,103,115,41>>]},<<41,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,97,110,121,32,109,101,115,115,97,103,101,32,105,110,32,105,116,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,44,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,119,97,107,101,110,101,100,32,105,109,109,101,100,105,97,116,101,108,121,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46>>]},{p,[],[<<73,110,32,109,111,114,101,32,116,101,99,104,110,105,99,97,108,32,116,101,114,109,115,44,32>>,{code,[],[<<101,114,108,97,110,103,58,104,105,98,101,114,110,97,116,101,47,51>>]},<<32,100,105,115,99,97,114,100,115,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,97,110,100,32,116,104,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,115,32,116,104,101,32,112,114,111,99,101,115,115,46,32,65,102,116,101,114,32,116,104,105,115,44,32,97,108,108,32,108,105,118,101,32,100,97,116,97,32,105,115,32,105,110,32,111,110,101,32,99,111,110,116,105,110,117,111,117,115,32,104,101,97,112,46,32,84,104,101,32,104,101,97,112,32,105,115,32,116,104,101,110,32,115,104,114,117,110,107,101,110,32,116,111,32,116,104,101,32,101,120,97,99,116,32,115,97,109,101,32,115,105,122,101,32,97,115,32,116,104,101,32,108,105,118,101,32,100,97,116,97,32,116,104,97,116,32,105,116,32,104,111,108,100,115,32,40,101,118,101,110,32,105,102,32,116,104,97,116,32,115,105,122,101,32,105,115,32,108,101,115,115,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,41,46>>]},{p,[],[<<73,102,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,108,105,118,101,32,100,97,116,97,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,108,101,115,115,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,44,32,116,104,101,32,102,105,114,115,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,99,99,117,114,114,105,110,103,32,97,102,116,101,114,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,119,97,107,101,110,101,100,32,101,110,115,117,114,101,115,32,116,104,97,116,32,116,104,101,32,104,101,97,112,32,115,105,122,101,32,105,115,32,99,104,97,110,103,101,100,32,116,111,32,97,32,115,105,122,101,32,110,111,116,32,115,109,97,108,108,101,114,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,101,109,112,116,121,105,110,103,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,32,109,101,97,110,115,32,116,104,97,116,32,97,110,121,32,115,117,114,114,111,117,110,100,105,110,103,32>>,{code,[],[<<99,97,116,99,104>>]},<<32,105,115,32,114,101,109,111,118,101,100,32,97,110,100,32,109,117,115,116,32,98,101,32,114,101,45,105,110,115,101,114,116,101,100,32,97,102,116,101,114,32,104,105,98,101,114,110,97,116,105,111,110,46,32,79,110,101,32,101,102,102,101,99,116,32,111,102,32,116,104,105,115,32,105,115,32,116,104,97,116,32,112,114,111,99,101,115,115,101,115,32,115,116,97,114,116,101,100,32,117,115,105,110,103,32>>,{code,[],[<<112,114,111,99,95,108,105,98>>]},<<32,40,97,108,115,111,32,105,110,100,105,114,101,99,116,108,121,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<103,101,110,95,115,101,114,118,101,114>>]},<<32,112,114,111,99,101,115,115,101,115,41,44,32,97,114,101,32,116,111,32,117,115,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,112,114,111,99,95,108,105,98,35,104,105,98,101,114,110,97,116,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,95,108,105,98,58,104,105,98,101,114,110,97,116,101,47,51>>]}]},<<32,105,110,115,116,101,97,100,44,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,104,97,110,100,108,101,114,32,99,111,110,116,105,110,117,101,115,32,116,111,32,119,111,114,107,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,119,97,107,101,115,32,117,112,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,54,55,52>>,signature => [{attribute,{1170,2},spec,{{erlang,hibernate,3},[{type,{1170,23},bounded_fun,[{type,{1170,23},'fun',[{type,{1170,23},product,[{var,{1170,24},'Module'},{var,{1170,32},'Function'},{var,{1170,42},'Args'}]},{type,{1170,51},no_return,[]}]},[{type,{1171,7},constraint,[{atom,{1171,7},is_subtype},[{var,{1171,7},'Module'},{type,{1171,17},module,[]}]]},{type,{1172,7},constraint,[{atom,{1172,7},is_subtype},[{var,{1172,7},'Function'},{type,{1172,19},atom,[]}]]},{type,{1173,7},constraint,[{atom,{1173,7},is_subtype},[{var,{1173,7},'Args'},{type,{1173,15},list,[{type,{1173,16},term,[]}]}]]}]]}]}}]}},{{function,insert_element,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1178}],[<<105,110,115,101,114,116,95,101,108,101,109,101,110,116,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,101,119,32,116,117,112,108,101,32,119,105,116,104,32,101,108,101,109,101,110,116,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,110,115,101,114,116,101,100,32,97,116,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,105,110,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<46,32,65,108,108,32,101,108,101,109,101,110,116,115,32,102,114,111,109,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,97,110,100,32,117,112,119,97,114,100,115,32,97,114,101,32,112,117,115,104,101,100,32,111,110,101,32,115,116,101,112,32,104,105,103,104,101,114,32,105,110,32,116,104,101,32,110,101,119,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,50>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,105,110,115,101,114,116,95,101,108,101,109,101,110,116,40,50,44,32,123,111,110,101,44,32,116,119,111,44,32,116,104,114,101,101,125,44,32,110,101,119,41,46,10,123,111,110,101,44,110,101,119,44,116,119,111,44,116,104,114,101,101,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,49,56>>,signature => [{attribute,{1178,2},spec,{{erlang,insert_element,3},[{type,{1178,28},bounded_fun,[{type,{1178,28},'fun',[{type,{1178,28},product,[{var,{1178,29},'Index'},{var,{1178,36},'Tuple1'},{var,{1178,44},'Term'}]},{var,{1178,53},'Tuple2'}]},[{type,{1179,7},constraint,[{atom,{1179,7},is_subtype},[{var,{1179,7},'Index'},{type,{1179,17},pos_integer,[]}]]},{type,{1180,7},constraint,[{atom,{1180,7},is_subtype},[{var,{1180,7},'Tuple1'},{type,{1180,17},tuple,any}]]},{type,{1181,7},constraint,[{atom,{1181,7},is_subtype},[{var,{1181,7},'Tuple2'},{type,{1181,17},tuple,any}]]},{type,{1182,7},constraint,[{atom,{1182,7},is_subtype},[{var,{1182,7},'Term'},{type,{1182,17},term,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,integer_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1187}],[<<105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,40,55,55,41,46,10,60,60,34,55,55,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,51,54>>,signature => [{attribute,{1187,2},spec,{{integer_to_binary,1},[{type,{1187,24},bounded_fun,[{type,{1187,24},'fun',[{type,{1187,24},product,[{var,{1187,25},'Integer'}]},{type,{1187,37},binary,[]}]},[{type,{1188,7},constraint,[{atom,{1188,7},is_subtype},[{var,{1188,7},'Integer'},{type,{1188,18},integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,integer_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3822}],[<<105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,98,105,110,97,114,121,40,49,48,50,51,44,32,49,54,41,46,10,60,60,34,51,70,70,34,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,52,56>>,signature => [{attribute,{3822,2},spec,{{integer_to_binary,2},[{type,{3822,24},bounded_fun,[{type,{3822,24},'fun',[{type,{3822,24},product,[{var,{3822,25},'Integer'},{var,{3822,34},'Base'}]},{type,{3822,43},binary,[]}]},[{type,{3823,7},constraint,[{atom,{3823,7},is_subtype},[{var,{3823,7},'Integer'},{type,{3823,18},integer,[]}]]},{type,{3824,7},constraint,[{atom,{3824,7},is_subtype},[{var,{3824,7},'Base'},{type,{3824,15},range,[{integer,{3824,15},2},{integer,{3824,18},36}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,integer_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1193}],[<<105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,40,55,55,41,46,10,34,55,55,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,54,49>>,signature => [{attribute,{1193,2},spec,{{integer_to_list,1},[{type,{1193,22},bounded_fun,[{type,{1193,22},'fun',[{type,{1193,22},product,[{var,{1193,23},'Integer'}]},{type,{1193,35},string,[]}]},[{type,{1194,7},constraint,[{atom,{1194,7},is_subtype},[{var,{1194,7},'Integer'},{type,{1194,18},integer,[]}]]}]]}]}}]}},{{function,integer_to_list,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3816}],[<<105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<73,110,116,101,103,101,114>>]},<<32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,110,116,101,103,101,114,95,116,111,95,108,105,115,116,40,49,48,50,51,44,32,49,54,41,46,10,34,51,70,70,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,55,51>>,signature => [{attribute,{3816,2},spec,{{integer_to_list,2},[{type,{3816,22},bounded_fun,[{type,{3816,22},'fun',[{type,{3816,22},product,[{var,{3816,23},'Integer'},{var,{3816,32},'Base'}]},{type,{3816,41},string,[]}]},[{type,{3817,7},constraint,[{atom,{3817,7},is_subtype},[{var,{3817,7},'Integer'},{type,{3817,18},integer,[]}]]},{type,{3818,7},constraint,[{atom,{3818,7},is_subtype},[{var,{3818,7},'Base'},{type,{3818,15},range,[{integer,{3818,15},2},{integer,{3818,18},36}]}]]}]]}]}}]}},{{function,iolist_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1199}],[<<105,111,108,105,115,116,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,44,32,116,104,97,116,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115,44,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,116,104,97,116,32,119,111,117,108,100,32,98,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{code,[],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,73,116,101,109,41>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,105,111,108,105,115,116,95,115,105,122,101,40,91,49,44,50,124,60,60,51,44,52,62,62,93,41,46,10,52>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,56,54>>,signature => [{attribute,{1199,2},spec,{{iolist_size,1},[{type,{1199,18},bounded_fun,[{type,{1199,18},'fun',[{type,{1199,18},product,[{var,{1199,19},'Item'}]},{type,{1199,28},non_neg_integer,[]}]},[{type,{1200,7},constraint,[{atom,{1200,7},is_subtype},[{var,{1200,7},'Item'},{type,{1200,15},union,[{type,{1200,15},iolist,[]},{type,{1200,26},binary,[]}]}]]}]]}]}}]}},{{function,iolist_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1205}],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,32,105,110,32>>,{code,[],[<<73,111,76,105,115,116,79,114,66,105,110,97,114,121>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,105,110,49,32,61,32,60,60,49,44,50,44,51,62,62,46,10,60,60,49,44,50,44,51,62,62,10,62,32,66,105,110,50,32,61,32,60,60,52,44,53,62,62,46,10,60,60,52,44,53,62,62,10,62,32,66,105,110,51,32,61,32,60,60,54,62,62,46,10,60,60,54,62,62,10,62,32,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,91,66,105,110,49,44,49,44,91,50,44,51,44,66,105,110,50,93,44,52,124,66,105,110,51,93,41,46,10,60,60,49,44,50,44,51,44,49,44,50,44,51,44,52,44,53,44,52,44,54,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,55,57,57>>,signature => [{attribute,{1205,2},spec,{{iolist_to_binary,1},[{type,{1205,23},bounded_fun,[{type,{1205,23},'fun',[{type,{1205,23},product,[{var,{1205,24},'IoListOrBinary'}]},{type,{1205,43},binary,[]}]},[{type,{1206,7},constraint,[{atom,{1206,7},is_subtype},[{var,{1206,7},'IoListOrBinary'},{type,{1206,25},union,[{type,{1206,25},iolist,[]},{type,{1206,36},binary,[]}]}]]}]]}]}}]}},{{function,iolist_to_iovec,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1211}],[<<105,111,108,105,115,116,95,116,111,95,105,111,118,101,99,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[<<105,111,118,101,99>>]},<<32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,32,105,110,32>>,{code,[],[<<73,111,76,105,115,116,79,114,66,105,110,97,114,121>>]},<<46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,117,115,101,102,117,108,32,119,104,101,110,32,121,111,117,32,119,97,110,116,32,116,111,32,102,108,97,116,116,101,110,32,97,110,32,105,111,108,105,115,116,32,98,117,116,32,121,111,117,32,100,111,32,110,111,116,32,110,101,101,100,32,97,32,115,105,110,103,108,101,32,98,105,110,97,114,121,46,32,84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,102,111,114,32,112,97,115,115,105,110,103,32,116,104,101,32,100,97,116,97,32,116,111,32,110,105,102,32,102,117,110,99,116,105,111,110,115,32,115,117,99,104,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,110,105,102,35,101,110,105,102,95,105,110,115,112,101,99,116,95,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,110,105,102,95,105,110,115,112,101,99,116,95,105,111,118,101,99>>]}]},<<32,111,114,32,100,111,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,109,101,115,115,97,103,101,32,112,97,115,115,105,110,103,46,32,84,104,101,32,97,100,118,97,110,116,97,103,101,32,111,102,32,117,115,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,111,118,101,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<32,105,115,32,116,104,97,116,32,105,116,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,116,111,32,99,111,112,121,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,98,105,110,97,114,121,104,97,110,100,108,105,110,103,35,114,101,102,99,95,98,105,110,97,114,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<111,102,102,45,104,101,97,112,32,98,105,110,97,114,105,101,115>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,105,110,49,32,61,32,60,60,49,44,50,44,51,62,62,46,10,60,60,49,44,50,44,51,62,62,10,62,32,66,105,110,50,32,61,32,60,60,52,44,53,62,62,46,10,60,60,52,44,53,62,62,10,62,32,66,105,110,51,32,61,32,60,60,54,62,62,46,10,60,60,54,62,62,10,37,37,32,73,102,32,121,111,117,32,112,97,115,115,32,115,109,97,108,108,32,98,105,110,97,114,105,101,115,32,97,110,100,32,105,110,116,101,103,101,114,115,32,105,116,32,119,111,114,107,115,32,97,115,32,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,10,62,32,101,114,108,97,110,103,58,105,111,108,105,115,116,95,116,111,95,105,111,118,101,99,40,91,66,105,110,49,44,49,44,91,50,44,51,44,66,105,110,50,93,44,52,124,66,105,110,51,93,41,46,10,91,60,60,49,44,50,44,51,44,49,44,50,44,51,44,52,44,53,44,52,44,54,62,62,93,10,37,37,32,73,102,32,121,111,117,32,112,97,115,115,32,108,97,114,103,101,114,32,98,105,110,97,114,105,101,115,44,32,116,104,101,121,32,97,114,101,32,115,112,108,105,116,32,97,110,100,32,114,101,116,117,114,110,101,100,32,105,110,32,97,32,102,111,114,109,10,37,37,32,111,112,116,105,109,105,122,101,100,32,102,111,114,32,99,97,108,108,105,110,103,32,116,104,101,32,67,32,102,117,110,99,116,105,111,110,32,119,114,105,116,101,118,46,10,62,32,101,114,108,97,110,103,58,105,111,108,105,115,116,95,116,111,95,105,111,118,101,99,40,91,60,60,49,62,62,44,60,60,50,58,56,48,57,54,62,62,44,60,60,51,58,56,48,57,54,62,62,93,41,46,10,91,60,60,49,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,10,32,32,32,48,44,46,46,46,62,62,44,10,32,60,60,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,10,32,32,32,46,46,46,62,62,44,10,32,60,60,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,46,46,46,62,62,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,49,55>>,signature => [{attribute,{1211,2},spec,{{erlang,iolist_to_iovec,1},[{type,{1211,29},bounded_fun,[{type,{1211,29},'fun',[{type,{1211,29},product,[{var,{1211,30},'IoListOrBinary'}]},{user_type,{1211,49},iovec,[]}]},[{type,{1212,7},constraint,[{atom,{1212,7},is_subtype},[{var,{1212,7},'IoListOrBinary'},{type,{1212,25},union,[{type,{1212,25},iolist,[]},{type,{1212,36},binary,[]}]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,49>>}},{{function,is_alive,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1217}],[<<105,115,95,97,108,105,118,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,97,108,105,118,101,32,40,116,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,110,111,100,101,32,99,97,110,32,98,101,32,112,97,114,116,32,111,102,32,97,32,100,105,115,116,114,105,98,117,116,101,100,32,115,121,115,116,101,109,41,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,65,32,110,111,100,101,32,105,115,32,97,108,105,118,101,32,105,102,32,105,116,32,105,115,32,115,116,97,114,116,101,100,32,119,105,116,104,58>>]},{ol,[],[{li,[],[{a,[{href,<<101,114,116,115,58,101,114,108,35,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<34,101,114,108,32,45,110,97,109,101,32,76,79,78,71,78,65,77,69,34>>]}]},<<32,111,114,44>>]},{li,[],[{a,[{href,<<101,114,116,115,58,101,114,108,35,115,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<34,101,114,108,32,45,115,110,97,109,101,32,83,72,79,82,84,78,65,77,69,34>>]}]},<<46>>]}]},{p,[],[<<65,32,110,111,100,101,32,99,97,110,32,97,108,115,111,32,98,101,32,97,108,105,118,101,32,105,102,32,105,116,32,104,97,115,32,103,111,116,32,97,32,110,97,109,101,32,102,114,111,109,32,97,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,110,101,116,95,107,101,114,110,101,108,35,115,116,97,114,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,101,116,95,107,101,114,110,101,108,58,115,116,97,114,116,47,49>>]}]},<<32,97,110,100,32,104,97,115,32,110,111,116,32,98,101,101,110,32,115,116,111,112,112,101,100,32,98,121,32,97,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,110,101,116,95,107,101,114,110,101,108,35,115,116,111,112,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,101,116,95,107,101,114,110,101,108,58,115,116,111,112,47,48>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,53,52>>,signature => [{attribute,{1217,2},spec,{{is_alive,0},[{type,{1217,15},'fun',[{type,{1217,15},product,[]},{type,{1217,21},boolean,[]}]}]}}]}},{{function,is_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2144}],[<<105,115,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32,97,116,111,109,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,55,51>>,signature => [{attribute,{2144,2},spec,{{is_atom,1},[{type,{2144,14},bounded_fun,[{type,{2144,14},'fun',[{type,{2144,14},product,[{var,{2144,15},'Term'}]},{type,{2144,24},boolean,[]}]},[{type,{2145,7},constraint,[{atom,{2145,7},is_subtype},[{var,{2145,7},'Term'},{type,{2145,15},term,[]}]]}]]}]}}]}},{{function,is_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2150}],[<<105,115,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,32,98,105,110,97,114,121,32,97,108,119,97,121,115,32,99,111,110,116,97,105,110,115,32,97,32,99,111,109,112,108,101,116,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,56,51>>,signature => [{attribute,{2150,2},spec,{{is_binary,1},[{type,{2150,16},bounded_fun,[{type,{2150,16},'fun',[{type,{2150,16},product,[{var,{2150,17},'Term'}]},{type,{2150,26},boolean,[]}]},[{type,{2151,7},constraint,[{atom,{2151,7},is_subtype},[{var,{2151,7},'Term'},{type,{2151,15},term,[]}]]}]]}]}}]}},{{function,is_bitstring,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2156}],[<<105,115,95,98,105,116,115,116,114,105,110,103,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,98,105,116,115,116,114,105,110,103,32,40,105,110,99,108,117,100,105,110,103,32,97,32,98,105,110,97,114,121,41,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,56,57,52>>,signature => [{attribute,{2156,2},spec,{{is_bitstring,1},[{type,{2156,19},bounded_fun,[{type,{2156,19},'fun',[{type,{2156,19},product,[{var,{2156,20},'Term'}]},{type,{2156,29},boolean,[]}]},[{type,{2157,7},constraint,[{atom,{2157,7},is_subtype},[{var,{2157,7},'Term'},{type,{2157,15},term,[]}]]}]]}]}}]}},{{function,is_boolean,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2162}],[<<105,115,95,98,111,111,108,101,97,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<116,114,117,101>>]},<<32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,40,116,104,97,116,32,105,115,44,32,97,32,98,111,111,108,101,97,110,41,46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,48,52>>,signature => [{attribute,{2162,2},spec,{{is_boolean,1},[{type,{2162,17},bounded_fun,[{type,{2162,17},'fun',[{type,{2162,17},product,[{var,{2162,18},'Term'}]},{type,{2162,27},boolean,[]}]},[{type,{2163,7},constraint,[{atom,{2163,7},is_subtype},[{var,{2163,7},'Term'},{type,{2163,15},term,[]}]]}]]}]}}]}},{{function,is_builtin,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1222}],[<<105,115,95,98,117,105,108,116,105,110,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,117,115,101,102,117,108,32,102,111,114,32,98,117,105,108,100,101,114,115,32,111,102,32,99,114,111,115,115,45,114,101,102,101,114,101,110,99,101,32,116,111,111,108,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,47,65,114,105,116,121>>]},<<32,105,115,32,97,32,66,73,70,32,105,109,112,108,101,109,101,110,116,101,100,32,105,110,32,67,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,49,53>>,signature => [{attribute,{1222,2},spec,{{erlang,is_builtin,3},[{type,{1222,24},bounded_fun,[{type,{1222,24},'fun',[{type,{1222,24},product,[{var,{1222,25},'Module'},{var,{1222,33},'Function'},{var,{1222,43},'Arity'}]},{type,{1222,53},boolean,[]}]},[{type,{1223,7},constraint,[{atom,{1223,7},is_subtype},[{var,{1223,7},'Module'},{type,{1223,17},module,[]}]]},{type,{1224,7},constraint,[{atom,{1224,7},is_subtype},[{var,{1224,7},'Function'},{type,{1224,19},atom,[]}]]},{type,{1225,7},constraint,[{atom,{1225,7},is_subtype},[{var,{1225,7},'Arity'},{type,{1225,16},arity,[]}]]}]]}]}}]}},{{function,is_float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2168}],[<<105,115,95,102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,110,117,109,98,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,50,54>>,signature => [{attribute,{2168,2},spec,{{is_float,1},[{type,{2168,15},bounded_fun,[{type,{2168,15},'fun',[{type,{2168,15},product,[{var,{2168,16},'Term'}]},{type,{2168,25},boolean,[]}]},[{type,{2169,7},constraint,[{atom,{2169,7},is_subtype},[{var,{2169,7},'Term'},{type,{2169,15},term,[]}]]}]]}]}}]}},{{function,is_function,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2174}],[<<105,115,95,102,117,110,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,102,117,110,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,51,54>>,signature => [{attribute,{2174,2},spec,{{is_function,1},[{type,{2174,18},bounded_fun,[{type,{2174,18},'fun',[{type,{2174,18},product,[{var,{2174,19},'Term'}]},{type,{2174,28},boolean,[]}]},[{type,{2175,7},constraint,[{atom,{2175,7},is_subtype},[{var,{2175,7},'Term'},{type,{2175,15},term,[]}]]}]]}]}}]}},{{function,is_function,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2180}],[<<105,115,95,102,117,110,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,102,117,110,32,116,104,97,116,32,99,97,110,32,98,101,32,97,112,112,108,105,101,100,32,119,105,116,104,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,52,54>>,signature => [{attribute,{2180,2},spec,{{is_function,2},[{type,{2180,18},bounded_fun,[{type,{2180,18},'fun',[{type,{2180,18},product,[{var,{2180,19},'Term'},{var,{2180,25},'Arity'}]},{type,{2180,35},boolean,[]}]},[{type,{2181,7},constraint,[{atom,{2181,7},is_subtype},[{var,{2181,7},'Term'},{type,{2181,15},term,[]}]]},{type,{2182,7},constraint,[{atom,{2182,7},is_subtype},[{var,{2182,7},'Arity'},{type,{2182,16},arity,[]}]]}]]}]}}]}},{{function,is_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2187}],[<<105,115,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,53,56>>,signature => [{attribute,{2187,2},spec,{{is_integer,1},[{type,{2187,17},bounded_fun,[{type,{2187,17},'fun',[{type,{2187,17},product,[{var,{2187,18},'Term'}]},{type,{2187,27},boolean,[]}]},[{type,{2188,7},constraint,[{atom,{2188,7},is_subtype},[{var,{2188,7},'Term'},{type,{2188,15},term,[]}]]}]]}]}}]}},{{function,is_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2193}],[<<105,115,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,108,105,115,116,32,119,105,116,104,32,122,101,114,111,32,111,114,32,109,111,114,101,32,101,108,101,109,101,110,116,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,54,56>>,signature => [{attribute,{2193,2},spec,{{is_list,1},[{type,{2193,14},bounded_fun,[{type,{2193,14},'fun',[{type,{2193,14},product,[{var,{2193,15},'Term'}]},{type,{2193,24},boolean,[]}]},[{type,{2194,7},constraint,[{atom,{2194,7},is_subtype},[{var,{2194,7},'Term'},{type,{2194,15},term,[]}]]}]]}]}}]}},{{function,is_map,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2211}],[<<105,115,95,109,97,112,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,109,97,112,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,55,56>>,signature => [{attribute,{2211,2},spec,{{is_map,1},[{type,{2211,13},bounded_fun,[{type,{2211,13},'fun',[{type,{2211,13},product,[{var,{2211,14},'Term'}]},{type,{2211,23},boolean,[]}]},[{type,{2212,7},constraint,[{atom,{2212,7},is_subtype},[{var,{2212,7},'Term'},{type,{2212,15},term,[]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,is_map_key,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1230}],[<<105,115,95,109,97,112,95,107,101,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,109,97,112,32>>,{code,[],[<<77,97,112>>]},<<32,99,111,110,116,97,105,110,115,32>>,{code,[],[<<75,101,121>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,116,104,101,32>>,{code,[],[<<75,101,121>>]},<<46>>]},{p,[],[<<84,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<123,98,97,100,109,97,112,44,77,97,112,125>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32>>,{code,[],[<<77,97,112>>]},<<32,105,115,32,110,111,116,32,97,32,109,97,112,46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<62,32,77,97,112,32,61,32,35,123,34,52,50,34,32,61,62,32,118,97,108,117,101,125,46,10,35,123,34,52,50,34,32,61,62,32,118,97,108,117,101,125,10,62,32,105,115,95,109,97,112,95,107,101,121,40,34,52,50,34,44,77,97,112,41,46,10,116,114,117,101,10,62,32,105,115,95,109,97,112,95,107,101,121,40,118,97,108,117,101,44,77,97,112,41,46,10,102,97,108,115,101>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,50,57,56,56>>,signature => [{attribute,{1230,2},spec,{{is_map_key,2},[{type,{1230,17},bounded_fun,[{type,{1230,17},'fun',[{type,{1230,17},product,[{var,{1230,18},'Key'},{var,{1230,23},'Map'}]},{type,{1230,31},boolean,[]}]},[{type,{1231,5},constraint,[{atom,{1231,5},is_subtype},[{var,{1231,5},'Key'},{type,{1231,12},term,[]}]]},{type,{1232,5},constraint,[{atom,{1232,5},is_subtype},[{var,{1232,5},'Map'},{type,{1232,12},map,any}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,is_number,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2199}],[<<105,115,95,110,117,109,98,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,111,114,32,97,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,110,117,109,98,101,114,46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,48,57>>,signature => [{attribute,{2199,2},spec,{{is_number,1},[{type,{2199,16},bounded_fun,[{type,{2199,16},'fun',[{type,{2199,16},product,[{var,{2199,17},'Term'}]},{type,{2199,26},boolean,[]}]},[{type,{2200,7},constraint,[{atom,{2200,7},is_subtype},[{var,{2200,7},'Term'},{type,{2200,15},term,[]}]]}]]}]}}]}},{{function,is_pid,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2205}],[<<105,115,95,112,105,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,49,57>>,signature => [{attribute,{2205,2},spec,{{is_pid,1},[{type,{2205,13},bounded_fun,[{type,{2205,13},'fun',[{type,{2205,13},product,[{var,{2205,14},'Term'}]},{type,{2205,23},boolean,[]}]},[{type,{2206,7},constraint,[{atom,{2206,7},is_subtype},[{var,{2206,7},'Term'},{type,{2206,15},term,[]}]]}]]}]}}]}},{{function,is_port,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2217}],[<<105,115,95,112,111,114,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,50,57>>,signature => [{attribute,{2217,2},spec,{{is_port,1},[{type,{2217,14},bounded_fun,[{type,{2217,14},'fun',[{type,{2217,14},product,[{var,{2217,15},'Term'}]},{type,{2217,24},boolean,[]}]},[{type,{2218,7},constraint,[{atom,{2218,7},is_subtype},[{var,{2218,7},'Term'},{type,{2218,15},term,[]}]]}]]}]}}]}},{{function,is_process_alive,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1237}],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,47,49>>],#{<<101,110>> => [{p,[],[{code,[],[<<80,105,100>>]},<<32,109,117,115,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,115,116,115,32,97,110,100,32,105,115,32,97,108,105,118,101,44,32,116,104,97,116,32,105,115,44,32,105,115,32,110,111,116,32,101,120,105,116,105,110,103,32,97,110,100,32,104,97,115,32,110,111,116,32,101,120,105,116,101,100,46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<73,102,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,49>>]},<<32,99,97,108,108,115,32>>,{code,[],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,40,80,50,80,105,100,41>>]},<<32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,97,108,108,32,115,105,103,110,97,108,115,44,32,115,101,110,116,32,102,114,111,109,32>>,{code,[],[<<80,49>>]},<<32,116,111,32>>,{code,[],[<<80,50>>]},<<32,40>>,{code,[],[<<80,50>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,105,100,101,110,116,105,102,105,101,114,32>>,{code,[],[<<80,50,80,105,100>>]},<<41,32,98,101,102,111,114,101,32,116,104,101,32,99,97,108,108,44,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32>>,{code,[],[<<80,50>>]},<<32,98,101,102,111,114,101,32,116,104,101,32,97,108,105,118,101,110,101,115,115,32,111,102,32>>,{code,[],[<<80,50>>]},<<32,105,115,32,99,104,101,99,107,101,100,46,32,84,104,105,115,32,103,117,97,114,97,110,116,101,101,32,109,101,97,110,115,32,116,104,97,116,32,111,110,101,32,99,97,110,32,117,115,101,32>>,{code,[],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,47,49>>]},<<32,116,111,32,108,101,116,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,49>>]},<<32,119,97,105,116,32,117,110,116,105,108,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,50>>]},<<44,32,119,104,105,99,104,32,104,97,115,32,103,111,116,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,102,114,111,109,32,80,49,44,32,105,115,32,107,105,108,108,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<101,120,105,116,40,80,50,80,105,100,44,32,107,105,108,108,41,44,10,37,32,80,50,32,109,105,103,104,116,32,110,111,116,32,98,101,32,107,105,108,108,101,100,10,105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,40,80,50,80,105,100,41,44,10,37,32,80,50,32,105,115,32,110,111,116,32,97,108,105,118,101,32,40,116,104,101,32,99,97,108,108,32,97,98,111,118,101,32,97,108,119,97,121,115,32,114,101,116,117,114,110,32,102,97,108,115,101,41>>]}]},{p,[],[<<83,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,97,98,111,117,116,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,103,110,97,108,115>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,101,120,105,116,47,50>>]},<<32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,105,103,110,97,108,115,32,97,110,100,32,101,120,105,116,32,115,105,110,103,110,97,108,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,51,57>>,signature => [{attribute,{1237,2},spec,{{is_process_alive,1},[{type,{1237,23},bounded_fun,[{type,{1237,23},'fun',[{type,{1237,23},product,[{var,{1237,24},'Pid'}]},{type,{1237,32},boolean,[]}]},[{type,{1238,7},constraint,[{atom,{1238,7},is_subtype},[{var,{1238,7},'Pid'},{type,{1238,14},pid,[]}]]}]]}]}}]}},{{function,is_record,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2223}],[<<105,115,95,114,101,99,111,114,100,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,32,97,110,100,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,114,109,97,108,108,121,32,116,104,101,32,99,111,109,112,105,108,101,114,32,116,114,101,97,116,115,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<105,115,95,114,101,99,111,114,100,47,50>>]},<<32,101,115,112,101,99,105,97,108,108,121,46,32,73,116,32,101,109,105,116,115,32,99,111,100,101,32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,44,32,116,104,97,116,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<44,32,97,110,100,32,116,104,97,116,32,116,104,101,32,115,105,122,101,32,105,115,32,99,111,114,114,101,99,116,46,32,72,111,119,101,118,101,114,44,32,105,102,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,105,115,32,110,111,116,32,97,32,108,105,116,101,114,97,108,32,97,116,111,109,44,32,116,104,101,32,66,73,70,32>>,{code,[],[<<105,115,95,114,101,99,111,114,100,47,50>>]},<<32,105,115,32,99,97,108,108,101,100,32,105,110,115,116,101,97,100,32,97,110,100,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,116,117,112,108,101,32,105,115,32,110,111,116,32,118,101,114,105,102,105,101,100,46>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,44,32,105,102,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,105,115,32,97,32,108,105,116,101,114,97,108,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,55,49>>,signature => [{attribute,{2223,2},spec,{{is_record,2},[{type,{2223,16},bounded_fun,[{type,{2223,16},'fun',[{type,{2223,16},product,[{var,{2223,17},'Term'},{var,{2223,22},'RecordTag'}]},{type,{2223,36},boolean,[]}]},[{type,{2224,7},constraint,[{atom,{2224,7},is_subtype},[{var,{2224,7},'Term'},{type,{2224,15},term,[]}]]},{type,{2225,7},constraint,[{atom,{2225,7},is_subtype},[{var,{2225,7},'RecordTag'},{type,{2225,20},atom,[]}]]}]]}]}}]}},{{function,is_record,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2230}],[<<105,115,95,114,101,99,111,114,100,47,51>>],#{<<101,110>> => [{p,[],[{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,109,117,115,116,32,98,101,32,97,110,32,97,116,111,109,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,44,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<44,32,97,110,100,32,105,116,115,32,115,105,122,101,32,105,115,32>>,{code,[],[<<83,105,122,101>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,32,105,102,32>>,{code,[],[<<82,101,99,111,114,100,84,97,103>>]},<<32,105,115,32,97,32,108,105,116,101,114,97,108,32,97,116,111,109,32,97,110,100,32>>,{code,[],[<<83,105,122,101>>]},<<32,105,115,32,97,32,108,105,116,101,114,97,108,32,105,110,116,101,103,101,114,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,100,111,99,117,109,101,110,116,101,100,32,102,111,114,32,99,111,109,112,108,101,116,101,110,101,115,115,46,32,85,115,117,97,108,108,121,32>>,{code,[],[<<105,115,95,114,101,99,111,114,100,47,50>>]},<<32,105,115,32,116,111,32,98,101,32,117,115,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,48,57,50>>,signature => [{attribute,{2230,2},spec,{{is_record,3},[{type,{2230,16},bounded_fun,[{type,{2230,16},'fun',[{type,{2230,16},product,[{var,{2230,17},'Term'},{var,{2230,22},'RecordTag'},{var,{2230,32},'Size'}]},{type,{2230,41},boolean,[]}]},[{type,{2231,7},constraint,[{atom,{2231,7},is_subtype},[{var,{2231,7},'Term'},{type,{2231,15},term,[]}]]},{type,{2232,7},constraint,[{atom,{2232,7},is_subtype},[{var,{2232,7},'RecordTag'},{type,{2232,20},atom,[]}]]},{type,{2233,7},constraint,[{atom,{2233,7},is_subtype},[{var,{2233,7},'Size'},{type,{2233,15},non_neg_integer,[]}]]}]]}]}}]}},{{function,is_reference,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2238}],[<<105,115,95,114,101,102,101,114,101,110,99,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,49,49>>,signature => [{attribute,{2238,2},spec,{{is_reference,1},[{type,{2238,19},bounded_fun,[{type,{2238,19},'fun',[{type,{2238,19},product,[{var,{2238,20},'Term'}]},{type,{2238,29},boolean,[]}]},[{type,{2239,7},constraint,[{atom,{2239,7},is_subtype},[{var,{2239,7},'Term'},{type,{2239,15},term,[]}]]}]]}]}}]}},{{function,is_tuple,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2244}],[<<105,115,95,116,117,112,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32,116,117,112,108,101,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,50,49>>,signature => [{attribute,{2244,2},spec,{{is_tuple,1},[{type,{2244,15},bounded_fun,[{type,{2244,15},'fun',[{type,{2244,15},product,[{var,{2244,16},'Term'}]},{type,{2244,25},boolean,[]}]},[{type,{2245,7},constraint,[{atom,{2245,7},is_subtype},[{var,{2245,7},'Term'},{type,{2245,15},term,[]}]]}]]}]}}]}},{{function,length,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1244}],[<<108,101,110,103,116,104,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,101,110,103,116,104,40,91,49,44,50,44,51,44,52,44,53,44,54,44,55,44,56,44,57,93,41,46,10,57>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,51,49>>,signature => [{attribute,{1244,2},spec,{{length,1},[{type,{1244,13},bounded_fun,[{type,{1244,13},'fun',[{type,{1244,13},product,[{var,{1244,14},'List'}]},{type,{1244,23},non_neg_integer,[]}]},[{type,{1245,7},constraint,[{atom,{1245,7},is_subtype},[{var,{1245,7},'List'},{type,{1245,15},list,[{type,{1245,16},term,[]}]}]]}]]}]}}]}},{{function,link,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1250}],[<<108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,117,112,32,97,110,100,32,97,99,116,105,118,97,116,101,115,32,97,32,108,105,110,107,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,111,114,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<46,32,87,101,32,119,105,108,108,32,102,114,111,109,32,104,101,114,101,32,111,110,32,99,97,108,108,32,116,104,101,32,105,100,101,110,116,105,102,105,101,100,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,108,105,110,107,101,101,46,32,73,102,32,116,104,101,32,108,105,110,107,101,101,32,105,115,32,97,32,112,111,114,116,44,32,105,116,32,109,117,115,116,32,114,101,115,105,100,101,32,111,110,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,97,115,32,116,104,101,32,99,97,108,108,101,114,46>>]},{p,[],[<<73,102,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,116,105,99,105,112,97,110,116,115,32,111,102,32,97,32,108,105,110,107,32,116,101,114,109,105,110,97,116,101,115,44,32,105,116,32,119,105,108,108,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,115,101,110,100,105,110,103,95,101,120,105,116,95,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,101,110,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108>>]},<<32,116,111,32,116,104,101,32,111,116,104,101,114,32,112,97,114,116,105,99,105,112,97,110,116,46,32,84,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,108,108,32,99,111,110,116,97,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,108,105,110,107,95,101,120,105,116,95,115,105,103,110,97,108,95,114,101,97,115,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,120,105,116,32,114,101,97,115,111,110>>]},<<32,111,102,32,116,104,101,32,116,101,114,109,105,110,97,116,101,100,32,112,97,114,116,105,99,105,112,97,110,116,46,32,79,116,104,101,114,32,99,97,115,101,115,32,119,104,101,110,32,101,120,105,116,32,115,105,103,110,97,108,115,32,97,114,101,32,116,114,105,103,103,101,114,101,100,32,100,117,101,32,116,111,32,97,32,108,105,110,107,32,97,114,101,32,119,104,101,110,32,110,111,32,108,105,110,107,101,101,32,101,120,105,115,116,32,40>>,{code,[],[<<110,111,112,114,111,99>>]},<<32,101,120,105,116,32,114,101,97,115,111,110,41,32,97,110,100,32,119,104,101,110,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,98,101,116,119,101,101,110,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,32,111,110,32,100,105,102,102,101,114,101,110,116,32,110,111,100,101,115,32,105,115,32,108,111,115,116,32,111,114,32,99,97,110,110,111,116,32,98,101,32,101,115,116,97,98,108,105,115,104,101,100,32,40>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,101,120,105,116,32,114,101,97,115,111,110,41,46>>]},{p,[],[<<65,110,32,101,120,105,115,116,105,110,103,32,108,105,110,107,32,99,97,110,32,98,101,32,114,101,109,111,118,101,100,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,108,105,110,107,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,108,105,110,107,47,49>>]}]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,108,105,110,107,115,32,97,110,100,32,101,120,105,116,32,115,105,103,110,97,108,115,32,100,117,101,32,116,111,32,108,105,110,107,115,44,32,115,101,101,32,116,104,101,32>>,{i,[],[<<80,114,111,99,101,115,115,101,115>>]},<<32,99,104,97,112,116,101,114,32,105,110,32,116,104,101,32>>,{i,[],[<<69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108>>]},<<58>>]},{ul,[],[{li,[],[{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,108,105,110,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<76,105,110,107,115>>]}]},{li,[],[{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,115,101,110,100,105,110,103,95,101,120,105,116,95,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<83,101,110,100,105,110,103,32,69,120,105,116,32,83,105,103,110,97,108,115>>]}]},{li,[],[{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,114,101,99,101,105,118,105,110,103,95,101,120,105,116,95,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,99,101,105,118,105,110,103,32,69,120,105,116,32,83,105,103,110,97,108,115>>]}]}]},{p,[],[<<70,111,114,32,104,105,115,116,111,114,105,99,97,108,32,114,101,97,115,111,110,115,44,32>>,{code,[],[<<108,105,110,107,47,49>>]},<<32,104,97,115,32,97,32,115,116,114,97,110,103,101,32,115,101,109,105,45,115,121,110,99,104,114,111,110,111,117,115,32,98,101,104,97,118,105,111,114,32,119,104,101,110,32,105,116,32,105,115,32,34,99,104,101,97,112,34,32,116,111,32,99,104,101,99,107,32,105,102,32,116,104,101,32,108,105,110,107,101,101,32,101,120,105,115,116,115,32,111,114,32,110,111,116,44,32,97,110,100,32,116,104,101,32,99,97,108,108,101,114,32,100,111,101,115,32,110,111,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,116,114,97,112,95,101,120,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,114,97,112,32,101,120,105,116,115>>]},<<46,32,73,102,32,116,104,101,32,97,98,111,118,101,32,105,115,32,116,114,117,101,32,97,110,100,32,116,104,101,32,108,105,110,107,101,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32>>,{code,[],[<<108,105,110,107,47,49>>]},<<32,119,105,108,108,32,114,97,105,115,101,32,97,32>>,{code,[],[<<110,111,112,114,111,99>>]},<<32,101,114,114,111,114,32>>,{em,[],[<<101,120,99,101,112,116,105,111,110>>]},<<46,32,84,104,101,32,101,120,112,101,99,116,101,100,32,98,101,104,97,118,105,111,114,32,119,111,117,108,100,32,105,110,115,116,101,97,100,32,104,97,118,101,32,98,101,101,110,32,116,104,97,116,32>>,{code,[],[<<108,105,110,107,47,49>>]},<<32,114,101,116,117,114,110,101,100,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,97,110,100,32,116,104,101,32,99,97,108,108,101,114,32,108,97,116,101,114,32,119,97,115,32,115,101,110,116,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32>>,{code,[],[<<110,111,112,114,111,99>>]},<<32,101,120,105,116,32,114,101,97,115,111,110,44,32,98,117,116,32,116,104,105,115,32,105,115,32,117,110,102,111,114,116,117,110,97,116,101,108,121,32,110,111,116,32,116,104,101,32,99,97,115,101,46,32,84,104,101,32>>,{code,[],[<<110,111,112,114,111,99>>]},<<32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115,35,101,120,99,101,112,116,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,120,99,101,112,116,105,111,110>>]},<<32,105,115,32,110,111,116,32,116,111,32,98,101,32,99,111,110,102,117,115,101,100,32,119,105,116,104,32,97,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,115,101,110,100,105,110,103,95,101,120,105,116,95,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,120,105,116,32,115,105,103,110,97,108>>]},<<32,119,105,116,104,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,112,114,111,99>>]},<<46,32,67,117,114,114,101,110,116,108,121,32,105,116,32,105,115,32,34,99,104,101,97,112,34,32,116,111,32,99,104,101,99,107,32,105,102,32,116,104,101,32,108,105,110,107,101,101,32,101,120,105,115,116,115,32,119,104,101,110,32,105,116,32,105,115,32,115,117,112,112,111,115,101,100,32,116,111,32,114,101,115,105,100,101,32,111,110,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,97,115,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<84,104,101,32,108,105,110,107,32,115,101,116,117,112,32,97,110,100,32,97,99,116,105,118,97,116,105,111,110,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,73,102,32,116,104,101,32,108,105,110,107,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,44,32,111,114,32,105,102,32,116,104,101,32,99,97,108,108,101,114,32,97,116,116,101,109,112,116,115,32,116,111,32,99,114,101,97,116,101,32,97,32,108,105,110,107,32,116,111,32,105,116,115,101,108,102,44,32,110,111,116,104,105,110,103,32,105,115,32,100,111,110,101,46,32,65,32,100,101,116,97,105,108,101,100,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,105,115,116,95,112,114,111,116,111,99,111,108,35,108,105,110,107,95,112,114,111,116,111,99,111,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<108,105,110,107,32,112,114,111,116,111,99,111,108>>]},<<32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{i,[],[<<68,105,115,116,114,105,98,117,116,105,111,110,32,80,114,111,116,111,99,111,108>>]},<<32,99,104,97,112,116,101,114,32,111,102,32,116,104,101,32>>,{i,[],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58>>]},{ul,[],[{li,[],[{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,105,100,101,110,116,105,102,121,32,97,32,112,114,111,99,101,115,115,32,111,114,32,97,32,110,111,100,101,32,108,111,99,97,108,32,112,111,114,116,46>>]},{li,[],[{code,[],[<<110,111,112,114,111,99>>]},<<32,108,105,110,107,101,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,97,110,100,32,105,116,32,105,115,32,34,99,104,101,97,112,34,32,116,111,32,99,104,101,99,107,32,105,102,32,105,116,32,101,120,105,115,116,115,32,97,115,32,100,101,115,99,114,105,98,101,100,32,97,98,111,118,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,49,52,51>>,signature => [{attribute,{1250,2},spec,{{link,1},[{type,{1250,11},bounded_fun,[{type,{1250,11},'fun',[{type,{1250,11},product,[{var,{1250,12},'PidOrPort'}]},{atom,{1250,26},true}]},[{type,{1251,7},constraint,[{atom,{1251,7},is_subtype},[{var,{1251,7},'PidOrPort'},{type,{1251,20},union,[{type,{1251,20},pid,[]},{type,{1251,28},port,[]}]}]]}]]}]}}]}},{{function,list_to_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1256}],[<<108,105,115,116,95,116,111,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,50,48,44,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,109,97,121,32,99,111,110,116,97,105,110,32,97,110,121,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,46,32,69,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,97,108,108,111,119,101,100,32,111,110,108,121,32,73,83,79,45,108,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,100,105,100,32,110,111,116,32,97,108,108,111,119,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,97,98,111,118,101,32,50,53,53,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,85,110,105,99,111,100,101,32,115,117,112,112,111,114,116,32,105,110,32,97,116,111,109,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116,35,117,116,102,56,95,97,116,111,109,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,116,101,32,111,110,32,85,84,70,45,56,32,101,110,99,111,100,101,100,32,97,116,111,109,115>>]},<<32,105,110,32,115,101,99,116,105,111,110,32,34,69,120,116,101,114,110,97,108,32,84,101,114,109,32,70,111,114,109,97,116,34,32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,97,110,32,97,116,111,109,32,110,97,109,101,32,105,115,32,108,105,109,105,116,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,99,111,110,102,105,103,117,114,97,98,108,101,32,108,105,109,105,116,32,111,110,32,104,111,119,32,109,97,110,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,101,120,105,115,116,32,97,110,100,32,97,116,111,109,115,32,97,114,101,32,110,111,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,99,111,110,115,105,100,101,114,32,105,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>]}]},<<32,105,115,32,97,32,98,101,116,116,101,114,32,111,112,116,105,111,110,32,116,104,97,110,32>>,{code,[],[<<108,105,115,116,95,116,111,95,97,116,111,109,47,49>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,108,105,109,105,116,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,102,102,105,99,105,101,110,99,121,32,103,117,105,100,101,32,40,115,101,99,116,105,111,110,32,65,100,118,97,110,99,101,100,41>>]},<<46>>]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,97,116,111,109,40,34,69,114,108,97,110,103,34,41,46,10,39,69,114,108,97,110,103,39>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,50,55>>,signature => [{attribute,{1256,2},spec,{{list_to_atom,1},[{type,{1256,19},bounded_fun,[{type,{1256,19},'fun',[{type,{1256,19},product,[{var,{1256,20},'String'}]},{type,{1256,31},atom,[]}]},[{type,{1257,7},constraint,[{atom,{1257,7},is_subtype},[{var,{1257,7},'String'},{type,{1257,17},string,[]}]]}]]}]}}]}},{{function,list_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1262}],[<<108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,32,105,110,32>>,{code,[],[<<73,111,76,105,115,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,105,110,49,32,61,32,60,60,49,44,50,44,51,62,62,46,10,60,60,49,44,50,44,51,62,62,10,62,32,66,105,110,50,32,61,32,60,60,52,44,53,62,62,46,10,60,60,52,44,53,62,62,10,62,32,66,105,110,51,32,61,32,60,60,54,62,62,46,10,60,60,54,62,62,10,62,32,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,91,66,105,110,49,44,49,44,91,50,44,51,44,66,105,110,50,93,44,52,124,66,105,110,51,93,41,46,10,60,60,49,44,50,44,51,44,49,44,50,44,51,44,52,44,53,44,52,44,54,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,54,51>>,signature => [{attribute,{1262,2},spec,{{list_to_binary,1},[{type,{1262,21},bounded_fun,[{type,{1262,21},'fun',[{type,{1262,21},product,[{var,{1262,22},'IoList'}]},{type,{1262,33},binary,[]}]},[{type,{1263,7},constraint,[{atom,{1263,7},is_subtype},[{var,{1263,7},'IoList'},{type,{1263,17},iolist,[]}]]}]]}]}}]}},{{function,list_to_bitstring,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1268}],[<<108,105,115,116,95,116,111,95,98,105,116,115,116,114,105,110,103,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<98,105,116,115,116,114,105,110,103,95,108,105,115,116>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,116,115,116,114,105,110,103,32,116,104,97,116,32,105,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,116,115,116,114,105,110,103,115,32,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103,76,105,115,116>>]},<<46,32,40,84,104,101,32,108,97,115,116,32,116,97,105,108,32,105,110,32>>,{code,[],[<<66,105,116,115,116,114,105,110,103,76,105,115,116>>]},<<32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,97,32,98,105,116,115,116,114,105,110,103,46,41,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,105,110,49,32,61,32,60,60,49,44,50,44,51,62,62,46,10,60,60,49,44,50,44,51,62,62,10,62,32,66,105,110,50,32,61,32,60,60,52,44,53,62,62,46,10,60,60,52,44,53,62,62,10,62,32,66,105,110,51,32,61,32,60,60,54,44,55,58,52,62,62,46,10,60,60,54,44,55,58,52,62,62,10,62,32,108,105,115,116,95,116,111,95,98,105,116,115,116,114,105,110,103,40,91,66,105,110,49,44,49,44,91,50,44,51,44,66,105,110,50,93,44,52,124,66,105,110,51,93,41,46,10,60,60,49,44,50,44,51,44,49,44,50,44,51,44,52,44,53,44,52,44,54,44,55,58,52,62,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,50,56,49>>,signature => [{attribute,{1268,2},spec,{{list_to_bitstring,1},[{type,{1268,24},bounded_fun,[{type,{1268,24},'fun',[{type,{1268,24},product,[{var,{1268,25},'BitstringList'}]},{type,{1268,43},bitstring,[]}]},[{type,{1269,7},constraint,[{atom,{1269,7},is_subtype},[{var,{1269,7},'BitstringList'},{user_type,{1269,24},bitstring_list,[]}]]}]]}]}}]}},{{function,list_to_existing_atom,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1274}],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,98,117,116,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,32,115,117,99,104,32,97,116,111,109,46,32,65,110,32,97,116,111,109,32,101,120,105,115,116,115,32,105,102,32,105,116,32,104,97,115,32,98,101,101,110,32,99,114,101,97,116,101,100,32,98,121,32,116,104,101,32,114,117,110,45,116,105,109,101,32,115,121,115,116,101,109,32,98,121,32,101,105,116,104,101,114,32,108,111,97,100,105,110,103,32,99,111,100,101,32,111,114,32,99,114,101,97,116,105,110,103,32,97,32,116,101,114,109,32,105,110,32,119,104,105,99,104,32,116,104,101,32,97,116,111,109,32,105,115,32,112,97,114,116,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,114,101,32,100,111,101,115,32,110,111,116,32,97,108,114,101,97,100,121,32,101,120,105,115,116,32,97,110,32,97,116,111,109,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,99,111,109,112,105,108,101,114,32,109,97,121,32,111,112,116,105,109,105,122,101,32,97,119,97,121,32,97,116,111,109,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,111,109,112,105,108,101,114,32,119,105,108,108,32,114,101,119,114,105,116,101,32>>,{code,[],[<<97,116,111,109,95,116,111,95,108,105,115,116,40,115,111,109,101,95,97,116,111,109,41>>]},<<32,116,111,32>>,{code,[],[<<34,115,111,109,101,95,97,116,111,109,34>>]},<<46,32,73,102,32,116,104,97,116,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,104,101,32,111,110,108,121,32,109,101,110,116,105,111,110,32,111,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,111,109,101,95,97,116,111,109>>]},<<32,105,110,32,116,104,101,32,99,111,110,116,97,105,110,105,110,103,32,109,111,100,117,108,101,44,32,116,104,101,32,97,116,111,109,32,119,105,108,108,32,110,111,116,32,98,101,32,99,114,101,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,108,111,97,100,101,100,44,32,97,110,100,32,97,32,115,117,98,115,101,113,117,101,110,116,32,99,97,108,108,32,116,111,32>>,{code,[],[<<108,105,115,116,95,116,111,95,101,120,105,115,116,105,110,103,95,97,116,111,109,40,34,115,111,109,101,95,97,116,111,109,34,41>>]},<<32,119,105,108,108,32,102,97,105,108,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,48,50>>,signature => [{attribute,{1274,2},spec,{{list_to_existing_atom,1},[{type,{1274,28},bounded_fun,[{type,{1274,28},'fun',[{type,{1274,28},product,[{var,{1274,29},'String'}]},{type,{1274,40},atom,[]}]},[{type,{1275,7},constraint,[{atom,{1275,7},is_subtype},[{var,{1275,7},'String'},{type,{1275,17},string,[]}]]}]]}]}}]}},{{function,list_to_float,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1280}],[<<108,105,115,116,95,116,111,95,102,108,111,97,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,102,108,111,97,116,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,102,108,111,97,116,40,34,50,46,50,48,49,55,55,54,52,101,43,48,34,41,46,10,50,46,50,48,49,55,55,54,52>>]}]},{p,[],[<<84,104,101,32,102,108,111,97,116,32,115,116,114,105,110,103,32,102,111,114,109,97,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,102,111,114,109,97,116,32,102,111,114,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,102,108,111,97,116,32,108,105,116,101,114,97,108,115>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,97,116,32,117,110,100,101,114,115,99,111,114,101,115,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,102,108,111,97,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,50,53>>,signature => [{attribute,{1280,2},spec,{{list_to_float,1},[{type,{1280,20},bounded_fun,[{type,{1280,20},'fun',[{type,{1280,20},product,[{var,{1280,21},'String'}]},{type,{1280,32},float,[]}]},[{type,{1281,7},constraint,[{atom,{1281,7},is_subtype},[{var,{1281,7},'String'},{type,{1281,17},string,[]}]]}]]}]}}]}},{{function,list_to_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1286}],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,49,50,51,34,41,46,10,49,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,45,49,50,51,34,41,46,10,45,49,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,43,49,50,51,50,51,52,57,56,50,51,48,52,57,56,50,51,48,57,52,56,50,48,57,51,56,51,51,50,51,52,50,51,52,34,41,46,10,49,50,51,50,51,52,57,56,50,51,48,52,57,56,50,51,48,57,52,56,50,48,57,51,56,51,51,50,51,52,50,51,52>>]}]},{p,[],[{code,[],[<<83,116,114,105,110,103>>]},<<32,109,117,115,116,32,99,111,110,116,97,105,110,32,97,116,32,108,101,97,115,116,32,111,110,101,32,100,105,103,105,116,32,99,104,97,114,97,99,116,101,114,32,97,110,100,32,99,97,110,32,104,97,118,101,32,97,110,32,111,112,116,105,111,110,97,108,32,112,114,101,102,105,120,32,99,111,110,115,105,115,116,105,110,103,32,111,102,32,97,32,115,105,110,103,108,101,32,34>>,{code,[],[<<43>>]},<<34,32,111,114,32,34>>,{code,[],[<<45>>]},<<34,32,99,104,97,114,97,99,116,101,114,32,40,116,104,97,116,32,105,115,44,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,109,117,115,116,32,109,97,116,99,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32>>,{code,[],[<<34,94,91,43,45,93,63,91,48,45,57,93,43,36,34>>]},<<41,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,52,51>>,signature => [{attribute,{1286,2},spec,{{list_to_integer,1},[{type,{1286,22},bounded_fun,[{type,{1286,22},'fun',[{type,{1286,22},product,[{var,{1286,23},'String'}]},{type,{1286,34},integer,[]}]},[{type,{1287,7},constraint,[{atom,{1287,7},is_subtype},[{var,{1287,7},'String'},{type,{1287,17},string,[]}]]}]]}]}}]}},{{function,list_to_integer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1292}],[<<108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,110,32,98,97,115,101,32>>,{code,[],[<<66,97,115,101>>]},<<32,105,115,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,51,70,70,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,43,51,70,70,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,51,102,102,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,51,102,70,34,44,32,49,54,41,46,10,49,48,50,51>>]}]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,105,110,116,101,103,101,114,40,34,45,51,70,70,34,44,32,49,54,41,46,10,45,49,48,50,51>>]}]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32>>,{code,[],[<<66,97,115,101>>]},<<32,105,115,32,49,54,44,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,109,117,115,116,32,109,97,116,99,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32>>,{code,[],[<<34,94,91,43,45,93,63,40,91,48,45,57,93,124,91,65,45,70,93,124,91,97,45,102,93,41,43,36,34>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,54,56>>,signature => [{attribute,{1292,2},spec,{{list_to_integer,2},[{type,{1292,22},bounded_fun,[{type,{1292,22},'fun',[{type,{1292,22},product,[{var,{1292,23},'String'},{var,{1292,31},'Base'}]},{type,{1292,40},integer,[]}]},[{type,{1293,7},constraint,[{atom,{1293,7},is_subtype},[{var,{1293,7},'String'},{type,{1293,17},string,[]}]]},{type,{1294,7},constraint,[{atom,{1294,7},is_subtype},[{var,{1294,7},'Base'},{type,{1294,15},range,[{integer,{1294,15},2},{integer,{1294,18},36}]}]]}]]}]}}]}},{{function,list_to_pid,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1299}],[<<108,105,115,116,95,116,111,95,112,105,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,97,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,112,105,100,40,34,60,48,46,52,46,49,62,34,41,46,10,60,48,46,52,46,49,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,51,57,56>>,signature => [{attribute,{1299,2},spec,{{list_to_pid,1},[{type,{1299,18},bounded_fun,[{type,{1299,18},'fun',[{type,{1299,18},product,[{var,{1299,19},'String'}]},{type,{1299,30},pid,[]}]},[{type,{1300,7},constraint,[{atom,{1300,7},is_subtype},[{var,{1300,7},'String'},{type,{1300,17},string,[]}]]}]]}]}}]}},{{function,list_to_port,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1305}],[<<108,105,115,116,95,116,111,95,112,111,114,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,97,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,112,111,114,116,40,34,35,80,111,114,116,60,48,46,52,62,34,41,46,10,35,80,111,114,116,60,48,46,52,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,49,54>>,signature => [{attribute,{1305,2},spec,{{list_to_port,1},[{type,{1305,19},bounded_fun,[{type,{1305,19},'fun',[{type,{1305,19},product,[{var,{1305,20},'String'}]},{type,{1305,31},port,[]}]},[{type,{1306,7},constraint,[{atom,{1306,7},is_subtype},[{var,{1306,7},'String'},{type,{1306,17},string,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,list_to_ref,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1311}],[<<108,105,115,116,95,116,111,95,114,101,102,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,114,101,102,101,114,101,110,99,101,32,119,104,111,115,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,97,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,114,101,102,40,34,35,82,101,102,60,48,46,52,49,57,50,53,51,55,54,55,56,46,52,48,55,51,49,57,51,52,55,53,46,55,49,49,56,49,62,34,41,46,10,35,82,101,102,60,48,46,52,49,57,50,53,51,55,54,55,56,46,52,48,55,51,49,57,51,52,55,53,46,55,49,49,56,49,62>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<83,116,114,105,110,103>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,98,97,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,97,32,114,101,102,101,114,101,110,99,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,51,52>>,signature => [{attribute,{1311,2},spec,{{list_to_ref,1},[{type,{1311,18},bounded_fun,[{type,{1311,18},'fun',[{type,{1311,18},product,[{var,{1311,19},'String'}]},{type,{1311,30},reference,[]}]},[{type,{1312,7},constraint,[{atom,{1312,7},is_subtype},[{var,{1312,7},'String'},{type,{1312,17},string,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,list_to_tuple,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1317}],[<<108,105,115,116,95,116,111,95,116,117,112,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101>>]},{pre,[],[{code,[],[<<62,32,108,105,115,116,95,116,111,95,116,117,112,108,101,40,91,115,104,97,114,101,44,32,91,39,69,114,105,99,115,115,111,110,95,66,39,44,32,49,54,51,93,93,41,46,10,123,115,104,97,114,101,44,32,91,39,69,114,105,99,115,115,111,110,95,66,39,44,32,49,54,51,93,125>>]}]},{p,[],[{code,[],[<<76,105,115,116>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,69,114,108,97,110,103,32,116,101,114,109,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,53,50>>,signature => [{attribute,{1317,2},spec,{{list_to_tuple,1},[{type,{1317,20},bounded_fun,[{type,{1317,20},'fun',[{type,{1317,20},product,[{var,{1317,21},'List'}]},{type,{1317,30},tuple,any}]},[{type,{1318,7},constraint,[{atom,{1318,7},is_subtype},[{var,{1318,7},'List'},{type,{1318,15},list,[{type,{1318,16},term,[]}]}]]}]]}]}}]}},{{function,load_module,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2249}],[<<108,111,97,100,95,109,111,100,117,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,111,98,106,101,99,116,32,99,111,100,101,32,102,111,114,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<44,32,116,104,105,115,32,66,73,70,32,108,111,97,100,115,32,116,104,97,116,32,111,98,106,101,99,116,32,99,111,100,101,46,32,73,102,32,116,104,101,32,99,111,100,101,32,102,111,114,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,44,32,97,108,108,32,101,120,112,111,114,116,32,114,101,102,101,114,101,110,99,101,115,32,97,114,101,32,114,101,112,108,97,99,101,100,32,115,111,32,116,104,101,121,32,112,111,105,110,116,32,116,111,32,116,104,101,32,110,101,119,108,121,32,108,111,97,100,101,100,32,99,111,100,101,46,32,84,104,101,32,112,114,101,118,105,111,117,115,108,121,32,108,111,97,100,101,100,32,99,111,100,101,32,105,115,32,107,101,112,116,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,97,115,32,111,108,100,32,99,111,100,101,44,32,97,115,32,116,104,101,114,101,32,99,97,110,32,115,116,105,108,108,32,98,101,32,112,114,111,99,101,115,115,101,115,32,101,120,101,99,117,116,105,110,103,32,116,104,97,116,32,99,111,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,101,105,116,104,101,114,32>>,{code,[],[<<123,109,111,100,117,108,101,44,32,77,111,100,117,108,101,125>>]},<<44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,105,102,32,108,111,97,100,105,110,103,32,102,97,105,108,115,46,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,102,105,108,101>>]}]},{dd,[],[<<84,104,101,32,111,98,106,101,99,116,32,99,111,100,101,32,105,110,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,104,97,115,32,97,110,32,105,110,99,111,114,114,101,99,116,32,102,111,114,109,97,116,32>>,{em,[],[<<111,114>>]},<<32,116,104,101,32,111,98,106,101,99,116,32,99,111,100,101,32,99,111,110,116,97,105,110,115,32,99,111,100,101,32,102,111,114,32,97,110,111,116,104,101,114,32,109,111,100,117,108,101,32,116,104,97,110,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,116,95,112,117,114,103,101,100>>]}]},{dd,[],[{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,32,109,111,100,117,108,101,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,108,111,97,100,101,100,32,98,101,99,97,117,115,101,32,111,108,100,32,99,111,100,101,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,46>>]},{dt,[],[{code,[],[<<111,110,95,108,111,97,100>>]}]},{dd,[],[<<84,104,101,32,99,111,100,101,32,105,110,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,111,110,116,97,105,110,115,32,97,110,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,100,101,99,108,97,114,97,116,105,111,110,32,116,104,97,116,32,109,117,115,116,32,98,101,32,101,120,101,99,117,116,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,99,97,110,32,98,101,99,111,109,101,32,116,104,101,32,99,117,114,114,101,110,116,32,99,111,100,101,46,32,65,110,121,32,112,114,101,118,105,111,117,115,32,99,117,114,114,101,110,116,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,119,105,108,108,32,114,101,109,97,105,110,32,117,110,116,105,108,32,116,104,101,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,99,97,108,108,32,104,97,115,32,102,105,110,105,115,104,101,100,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,52,54,53>>,signature => [{attribute,{2249,2},spec,{{load_module,2},[{type,{2249,18},bounded_fun,[{type,{2249,18},'fun',[{type,{2249,18},product,[{var,{2249,19},'Module'},{var,{2249,27},'Binary'}]},{type,{2249,38},union,[{type,{2249,38},tuple,[{atom,{2249,39},module},{var,{2249,47},'Module'}]},{type,{2249,57},tuple,[{atom,{2249,58},error},{var,{2249,65},'Reason'}]}]}]},[{type,{2250,7},constraint,[{atom,{2250,7},is_subtype},[{var,{2250,7},'Module'},{type,{2250,17},module,[]}]]},{type,{2251,7},constraint,[{atom,{2251,7},is_subtype},[{var,{2251,7},'Binary'},{type,{2251,17},binary,[]}]]},{type,{2252,7},constraint,[{atom,{2252,7},is_subtype},[{var,{2252,7},'Reason'},{type,{2252,17},union,[{atom,{2252,17},badfile},{atom,{2252,27},not_purged},{atom,{2252,40},on_load}]}]]}]]}]}}]}},{{function,load_nif,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2270}],[<<108,111,97,100,95,110,105,102,47,50>>],#{<<101,110>> => [{p,[],[<<76,111,97,100,115,32,97,110,100,32,108,105,110,107,115,32,97,32,100,121,110,97,109,105,99,32,108,105,98,114,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,110,97,116,105,118,101,32,105,109,112,108,101,109,101,110,116,101,100,32,102,117,110,99,116,105,111,110,115,32,40,78,73,70,115,41,32,102,111,114,32,97,32,109,111,100,117,108,101,46,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,97,32,102,105,108,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115,104,97,114,101,97,98,108,101,32,111,98,106,101,99,116,47,100,121,110,97,109,105,99,32,108,105,98,114,97,114,121,32,102,105,108,101,32,109,105,110,117,115,32,116,104,101,32,79,83,45,100,101,112,101,110,100,101,110,116,32,102,105,108,101,32,101,120,116,101,110,115,105,111,110,32,40>>,{code,[],[<<46,115,111>>]},<<32,102,111,114,32,85,110,105,120,32,97,110,100,32>>,{code,[],[<<46,100,108,108>>]},<<32,102,111,114,32,87,105,110,100,111,119,115,41,46,32,78,111,116,105,99,101,32,116,104,97,116,32,111,110,32,109,111,115,116,32,79,83,115,32,116,104,101,32,108,105,98,114,97,114,121,32,104,97,115,32,116,111,32,104,97,118,101,32,97,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,32,111,110,32,100,105,115,99,32,119,104,101,110,32,97,110,32,117,112,103,114,97,100,101,32,111,102,32,116,104,101,32,110,105,102,32,105,115,32,100,111,110,101,46,32,73,102,32,116,104,101,32,110,97,109,101,32,105,115,32,116,104,101,32,115,97,109,101,44,32,98,117,116,32,116,104,101,32,99,111,110,116,101,110,116,115,32,100,105,102,102,101,114,44,32,116,104,101,32,111,108,100,32,108,105,98,114,97,114,121,32,109,97,121,32,98,101,32,108,111,97,100,101,100,32,105,110,115,116,101,97,100,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,105,109,112,108,101,109,101,110,116,32,97,32,78,73,70,32,108,105,98,114,97,114,121,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,110,105,102>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,108,95,110,105,102,40,51,41>>]}]},<<46>>]},{p,[],[{code,[],[<<76,111,97,100,73,110,102,111>>]},<<32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,46,32,73,116,32,105,115,32,112,97,115,115,101,100,32,111,110,32,116,111,32,116,104,101,32,108,105,98,114,97,114,121,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,32,65,32,103,111,111,100,32,112,114,97,99,116,105,99,101,32,105,115,32,116,111,32,105,110,99,108,117,100,101,32,97,32,109,111,100,117,108,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,116,111,32,115,117,112,112,111,114,116,32,102,117,116,117,114,101,32,99,111,100,101,32,117,112,103,114,97,100,101,32,115,99,101,110,97,114,105,111,115,46>>]},{p,[],[<<84,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<108,111,97,100,95,110,105,102,47,50>>]},<<32,109,117,115,116,32,98,101,32,109,97,100,101,32>>,{em,[],[<<100,105,114,101,99,116,108,121>>]},<<32,102,114,111,109,32,116,104,101,32,69,114,108,97,110,103,32,99,111,100,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,116,104,97,116,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,32,98,101,108,111,110,103,115,32,116,111,46,32,73,116,32,114,101,116,117,114,110,115,32,101,105,116,104,101,114,32>>,{code,[],[<<111,107>>]},<<44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,123,82,101,97,115,111,110,44,84,101,120,116,125,125>>]},<<32,105,102,32,108,111,97,100,105,110,103,32,102,97,105,108,115,46,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,97,116,111,109,115,32,119,104,105,108,101,32>>,{code,[],[<<84,101,120,116>>]},<<32,105,115,32,97,32,104,117,109,97,110,32,114,101,97,100,97,98,108,101,32,115,116,114,105,110,103,32,116,104,97,116,32,99,97,110,32,103,105,118,101,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,102,97,105,108,117,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,111,97,100,95,102,97,105,108,101,100>>]}]},{dd,[],[<<84,104,101,32,79,83,32,102,97,105,108,101,100,32,116,111,32,108,111,97,100,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,46>>]},{dt,[],[{code,[],[<<98,97,100,95,108,105,98>>]}]},{dd,[],[<<84,104,101,32,108,105,98,114,97,114,121,32,100,105,100,32,110,111,116,32,102,117,108,102,105,108,108,32,116,104,101,32,114,101,113,117,105,114,101,109,101,110,116,115,32,97,115,32,97,32,78,73,70,32,108,105,98,114,97,114,121,32,111,102,32,116,104,101,32,99,97,108,108,105,110,103,32,109,111,100,117,108,101,46>>]},{dt,[],[{code,[],[<<108,111,97,100,32,124,32,117,112,103,114,97,100,101>>]}]},{dd,[],[<<84,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,108,105,98,114,97,114,121,32,99,97,108,108,98,97,99,107,32,119,97,115,32,117,110,115,117,99,99,101,115,115,102,117,108,46>>]},{dt,[],[{code,[],[<<114,101,108,111,97,100>>]}]},{dd,[],[<<65,32,78,73,70,32,108,105,98,114,97,114,121,32,105,115,32,97,108,114,101,97,100,121,32,108,111,97,100,101,100,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,32,105,110,115,116,97,110,99,101,46,32,84,104,101,32,112,114,101,118,105,111,117,115,108,121,32,100,101,112,114,101,99,97,116,101,100,32>>,{code,[],[<<114,101,108,111,97,100>>]},<<32,102,101,97,116,117,114,101,32,119,97,115,32,114,101,109,111,118,101,100,32,105,110,32,79,84,80,32,50,48,46>>]},{dt,[],[{code,[],[<<111,108,100,95,99,111,100,101>>]}]},{dd,[],[<<84,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<108,111,97,100,95,110,105,102,47,50>>]},<<32,119,97,115,32,109,97,100,101,32,102,114,111,109,32,116,104,101,32,111,108,100,32,99,111,100,101,32,111,102,32,97,32,109,111,100,117,108,101,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,117,112,103,114,97,100,101,100,59,32,116,104,105,115,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,48,53>>,signature => [{attribute,{2270,2},spec,{{erlang,load_nif,2},[{type,{2270,22},bounded_fun,[{type,{2270,22},'fun',[{type,{2270,22},product,[{var,{2270,23},'Path'},{var,{2270,29},'LoadInfo'}]},{type,{2270,43},union,[{atom,{2270,43},ok},{var,{2270,48},'Error'}]}]},[{type,{2271,7},constraint,[{atom,{2271,7},is_subtype},[{var,{2271,7},'Path'},{type,{2271,15},string,[]}]]},{type,{2272,7},constraint,[{atom,{2272,7},is_subtype},[{var,{2272,7},'LoadInfo'},{type,{2272,19},term,[]}]]},{type,{2273,7},constraint,[{atom,{2273,7},is_subtype},[{var,{2273,7},'Error'},{type,{2273,16},tuple,[{atom,{2273,17},error},{type,{2273,24},tuple,[{var,{2273,25},'Reason'},{ann_type,{2273,33},[{var,{2273,33},'Text'},{type,{2273,41},string,[]}]}]}]}]]},{type,{2274,7},constraint,[{atom,{2274,7},is_subtype},[{var,{2274,7},'Reason'},{type,{2274,17},union,[{atom,{2274,17},load_failed},{atom,{2274,31},bad_lib},{atom,{2274,41},load},{atom,{2274,48},reload},{atom,{2274,57},upgrade},{atom,{2274,67},old_code}]}]]}]]}]}}]}},{{function,loaded,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1323}],[<<108,111,97,100,101,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,108,108,32,108,111,97,100,101,100,32,69,114,108,97,110,103,32,109,111,100,117,108,101,115,32,40,99,117,114,114,101,110,116,32,97,110,100,32,111,108,100,32,99,111,100,101,41,44,32,105,110,99,108,117,100,105,110,103,32,112,114,101,108,111,97,100,101,100,32,109,111,100,117,108,101,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,53,52>>,signature => [{attribute,{1323,2},spec,{{erlang,loaded,0},[{type,{1323,20},bounded_fun,[{type,{1323,20},'fun',[{type,{1323,20},product,[]},{type,{1323,26},list,[{var,{1323,27},'Module'}]}]},[{type,{1324,7},constraint,[{atom,{1324,7},is_subtype},[{var,{1324,7},'Module'},{type,{1324,17},module,[]}]]}]]}]}}]}},{{function,localtime,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1329}],[<<108,111,99,97,108,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,44,32>>,{code,[],[<<123,123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125,44,32,123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125,125>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,40,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,122,111,110,101,32,97,110,100,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,99,111,114,114,101,99,116,105,111,110,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,54,53>>,signature => [{attribute,{1329,2},spec,{{erlang,localtime,0},[{type,{1329,23},bounded_fun,[{type,{1329,23},'fun',[{type,{1329,23},product,[]},{var,{1329,29},'DateTime'}]},[{type,{1330,7},constraint,[{atom,{1330,7},is_subtype},[{var,{1330,7},'DateTime'},{remote_type,{1330,19},[{atom,{1330,19},calendar},{atom,{1330,28},datetime},[]]}]]}]]}]}}]}},{{function,localtime_to_universaltime,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3489}],[<<108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,116,111,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,44,32,105,102,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32,110,111,32,99,111,110,118,101,114,115,105,111,110,32,105,115,32,100,111,110,101,32,97,110,100,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,51,44,52,53,44,49,55,125,125>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,100,101,110,111,116,101,115,32,97,110,32,105,110,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,56,50>>,signature => [{attribute,{3489,2},spec,{{erlang,localtime_to_universaltime,1},[{type,{3489,40},bounded_fun,[{type,{3489,40},'fun',[{type,{3489,40},product,[{var,{3489,41},'Localtime'}]},{var,{3489,55},'Universaltime'}]},[{type,{3490,7},constraint,[{atom,{3490,7},is_subtype},[{var,{3490,7},'Localtime'},{remote_type,{3490,20},[{atom,{3490,20},calendar},{atom,{3490,29},datetime},[]]}]]},{type,{3491,7},constraint,[{atom,{3491,7},is_subtype},[{var,{3491,7},'Universaltime'},{remote_type,{3491,24},[{atom,{3491,24},calendar},{atom,{3491,33},datetime},[]]}]]}]]}]}}]}},{{function,localtime_to_universaltime,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2278}],[<<108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,116,111,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,32,97,115,32>>,{code,[],[<<101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,47,49>>]},<<44,32,98,117,116,32,116,104,101,32,99,97,108,108,101,114,32,100,101,99,105,100,101,115,32,105,102,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,105,115,32,97,99,116,105,118,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<73,115,68,115,116,32,61,61,32,116,114,117,101>>]},<<44,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,105,115,32,100,117,114,105,110,103,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,44,32,105,102,32>>,{code,[],[<<73,115,68,115,116,32,61,61,32,102,97,108,115,101>>]},<<32,105,116,32,105,115,32,110,111,116,46,32,73,102,32>>,{code,[],[<<73,115,68,115,116,32,61,61,32,117,110,100,101,102,105,110,101,100>>]},<<44,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,32,99,97,110,32,103,117,101,115,115,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,76,111,99,97,108,116,105,109,101,41>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,44,32,116,114,117,101,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,50,44,52,53,44,49,55,125,125,10,62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,44,32,102,97,108,115,101,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,51,44,52,53,44,49,55,125,125,10,62,32,101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,95,116,111,95,117,110,105,118,101,114,115,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,52,53,44,49,55,125,125,44,32,117,110,100,101,102,105,110,101,100,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,51,44,52,53,44,49,55,125,125>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,111,99,97,108,116,105,109,101>>]},<<32,100,101,110,111,116,101,115,32,97,110,32,105,110,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,53,57,57>>,signature => [{attribute,{2278,2},spec,{{erlang,localtime_to_universaltime,2},[{type,{2278,40},bounded_fun,[{type,{2278,40},'fun',[{type,{2278,40},product,[{var,{2278,41},'Localtime'},{var,{2278,52},'IsDst'}]},{var,{2278,62},'Universaltime'}]},[{type,{2279,7},constraint,[{atom,{2279,7},is_subtype},[{var,{2279,7},'Localtime'},{remote_type,{2279,20},[{atom,{2279,20},calendar},{atom,{2279,29},datetime},[]]}]]},{type,{2280,7},constraint,[{atom,{2280,7},is_subtype},[{var,{2280,7},'Universaltime'},{remote_type,{2280,24},[{atom,{2280,24},calendar},{atom,{2280,33},datetime},[]]}]]},{type,{2281,7},constraint,[{atom,{2281,7},is_subtype},[{var,{2281,7},'IsDst'},{type,{2281,16},union,[{atom,{2281,16},true},{atom,{2281,23},false},{atom,{2281,31},undefined}]}]]}]]}]}}]}},{{function,make_ref,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1335}],[<<109,97,107,101,95,114,101,102,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100,35,117,110,105,113,117,101,95,114,101,102,101,114,101,110,99,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<117,110,105,113,117,101,32,114,101,102,101,114,101,110,99,101>>]},<<46,32,84,104,101,32,114,101,102,101,114,101,110,99,101,32,105,115,32,117,110,105,113,117,101,32,97,109,111,110,103,32,99,111,110,110,101,99,116,101,100,32,110,111,100,101,115,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<66,101,102,111,114,101,32,79,84,80,45,50,51,32,119,104,101,110,32,97,32,110,111,100,101,32,105,115,32,114,101,115,116,97,114,116,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,110,97,109,101,44,32,114,101,102,101,114,101,110,99,101,115,32,99,114,101,97,116,101,100,32,111,110,32,97,32,110,101,119,101,114,32,110,111,100,101,32,99,97,110,32,98,101,32,109,105,115,116,97,107,101,110,32,102,111,114,32,97,32,114,101,102,101,114,101,110,99,101,32,99,114,101,97,116,101,100,32,111,110,32,97,110,32,111,108,100,101,114,32,110,111,100,101,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,110,97,109,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,50,53>>,signature => [{attribute,{1335,2},spec,{{make_ref,0},[{type,{1335,15},'fun',[{type,{1335,15},product,[]},{type,{1335,21},reference,[]}]}]}}]}},{{function,make_tuple,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2297}],[<<109,97,107,101,95,116,117,112,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,110,101,119,32,116,117,112,108,101,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32>>,{code,[],[<<65,114,105,116,121>>]},<<44,32,119,104,101,114,101,32,97,108,108,32,101,108,101,109,101,110,116,115,32,97,114,101,32>>,{code,[],[<<73,110,105,116,105,97,108,86,97,108,117,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,109,97,107,101,95,116,117,112,108,101,40,52,44,32,91,93,41,46,10,123,91,93,44,91,93,44,91,93,44,91,93,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,52,50>>,signature => [{attribute,{2297,2},spec,{{erlang,make_tuple,2},[{type,{2297,24},bounded_fun,[{type,{2297,24},'fun',[{type,{2297,24},product,[{var,{2297,25},'Arity'},{var,{2297,32},'InitialValue'}]},{type,{2297,49},tuple,any}]},[{type,{2298,7},constraint,[{atom,{2298,7},is_subtype},[{var,{2298,7},'Arity'},{type,{2298,16},arity,[]}]]},{type,{2299,7},constraint,[{atom,{2299,7},is_subtype},[{var,{2299,7},'InitialValue'},{type,{2299,23},term,[]}]]}]]}]}}]}},{{function,make_tuple,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2304}],[<<109,97,107,101,95,116,117,112,108,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,116,117,112,108,101,32,111,102,32,115,105,122,101,32>>,{code,[],[<<65,114,105,116,121>>]},<<44,32,119,104,101,114,101,32,101,97,99,104,32,101,108,101,109,101,110,116,32,104,97,115,32,118,97,108,117,101,32>>,{code,[],[<<68,101,102,97,117,108,116,86,97,108,117,101>>]},<<44,32,97,110,100,32,116,104,101,110,32,102,105,108,108,115,32,105,110,32,118,97,108,117,101,115,32,102,114,111,109,32>>,{code,[],[<<73,110,105,116,76,105,115,116>>]},<<46,32,69,97,99,104,32,108,105,115,116,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<73,110,105,116,76,105,115,116>>]},<<32,109,117,115,116,32,98,101,32,97,32,116,119,111,45,116,117,112,108,101,44,32,119,104,101,114,101,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,116,117,112,108,101,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,32,105,115,32,97,110,121,32,116,101,114,109,46,32,73,102,32,97,32,112,111,115,105,116,105,111,110,32,111,99,99,117,114,115,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,32,105,110,32,116,104,101,32,108,105,115,116,44,32,116,104,101,32,116,101,114,109,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,108,97,115,116,32,111,99,99,117,114,114,101,110,99,101,32,105,115,32,117,115,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,109,97,107,101,95,116,117,112,108,101,40,53,44,32,91,93,44,32,91,123,50,44,105,103,110,111,114,101,100,125,44,123,53,44,122,122,125,44,123,50,44,97,97,125,93,41,46,10,123,91,93,44,97,97,44,91,93,44,91,93,44,122,122,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,53,52>>,signature => [{attribute,{2304,2},spec,{{erlang,make_tuple,3},[{type,{2304,24},bounded_fun,[{type,{2304,24},'fun',[{type,{2304,24},product,[{var,{2304,25},'Arity'},{var,{2304,32},'DefaultValue'},{var,{2304,46},'InitList'}]},{type,{2304,59},tuple,any}]},[{type,{2305,7},constraint,[{atom,{2305,7},is_subtype},[{var,{2305,7},'Arity'},{type,{2305,16},arity,[]}]]},{type,{2306,7},constraint,[{atom,{2306,7},is_subtype},[{var,{2306,7},'DefaultValue'},{type,{2306,23},term,[]}]]},{type,{2307,7},constraint,[{atom,{2307,7},is_subtype},[{var,{2307,7},'InitList'},{type,{2307,19},list,[{type,{2307,20},tuple,[{ann_type,{2307,21},[{var,{2307,21},'Position'},{type,{2307,33},pos_integer,[]}]},{type,{2307,48},term,[]}]}]}]]}]]}]}}]}},{{function,map_get,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1346}],[<<109,97,112,95,103,101,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<32,105,102,32>>,{code,[],[<<77,97,112>>]},<<32,99,111,110,116,97,105,110,115,32>>,{code,[],[<<75,101,121>>]},<<46>>]},{p,[],[<<84,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<123,98,97,100,109,97,112,44,77,97,112,125>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32>>,{code,[],[<<77,97,112>>]},<<32,105,115,32,110,111,116,32,97,32,109,97,112,44,32,111,114,32,119,105,116,104,32,97,32>>,{code,[],[<<123,98,97,100,107,101,121,44,75,101,121,125>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32,110,111,32,118,97,108,117,101,32,105,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<62,32,75,101,121,32,61,32,49,51,51,55,44,10,32,32,77,97,112,32,61,32,35,123,52,50,32,61,62,32,118,97,108,117,101,95,116,119,111,44,49,51,51,55,32,61,62,32,34,118,97,108,117,101,32,111,110,101,34,44,34,97,34,32,61,62,32,49,125,44,10,32,32,109,97,112,95,103,101,116,40,75,101,121,44,77,97,112,41,46,10,34,118,97,108,117,101,32,111,110,101,34>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,55,50>>,signature => [{attribute,{1346,2},spec,{{map_get,2},[{type,{1346,14},bounded_fun,[{type,{1346,14},'fun',[{type,{1346,14},product,[{var,{1346,15},'Key'},{var,{1346,20},'Map'}]},{var,{1346,28},'Value'}]},[{type,{1347,7},constraint,[{atom,{1347,7},is_subtype},[{var,{1347,7},'Map'},{type,{1347,14},map,any}]]},{type,{1348,7},constraint,[{atom,{1348,7},is_subtype},[{var,{1348,7},'Key'},{type,{1348,14},any,[]}]]},{type,{1349,7},constraint,[{atom,{1349,7},is_subtype},[{var,{1349,7},'Value'},{type,{1349,16},any,[]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,48>>}},{{function,map_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1340}],[<<109,97,112,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,107,101,121,45,118,97,108,117,101,32,112,97,105,114,115,32,105,110,32>>,{code,[],[<<77,97,112>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,109,97,112,95,115,105,122,101,40,35,123,97,61,62,49,44,32,98,61,62,50,44,32,99,61,62,51,125,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,54,57,50>>,signature => [{attribute,{1340,2},spec,{{map_size,1},[{type,{1340,15},bounded_fun,[{type,{1340,15},'fun',[{type,{1340,15},product,[{var,{1340,16},'Map'}]},{type,{1340,24},non_neg_integer,[]}]},[{type,{1341,7},constraint,[{atom,{1341,7},is_subtype},[{var,{1341,7},'Map'},{type,{1341,14},map,any}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,match_spec_test,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1354}],[<<109,97,116,99,104,95,115,112,101,99,95,116,101,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,101,115,116,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,117,115,101,100,32,105,110,32,99,97,108,108,115,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,116,115,35,115,101,108,101,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,116,115,58,115,101,108,101,99,116,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,101,115,116,115,32,98,111,116,104,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,34,115,121,110,116,97,99,116,105,99,34,32,99,111,114,114,101,99,116,110,101,115,115,32,97,110,100,32,114,117,110,115,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,103,97,105,110,115,116,32,116,104,101,32,111,98,106,101,99,116,46,32,73,102,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,99,111,110,116,97,105,110,115,32,101,114,114,111,114,115,44,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,69,114,114,111,114,115,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,119,104,101,114,101,32>>,{code,[],[<<69,114,114,111,114,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,110,97,116,117,114,97,108,32,108,97,110,103,117,97,103,101,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,119,104,97,116,32,119,97,115,32,119,114,111,110,103,32,119,105,116,104,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<116,97,98,108,101>>]},<<44,32,116,104,101,32,111,98,106,101,99,116,32,116,111,32,109,97,116,99,104,32,97,103,97,105,110,115,116,32,105,115,32,116,111,32,98,101,32,97,32,116,117,112,108,101,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,104,101,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,82,101,115,117,108,116,44,91,93,44,87,97,114,110,105,110,103,115,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,119,104,97,116,32,119,111,117,108,100,32,104,97,118,101,32,98,101,101,110,32,116,104,101,32,114,101,115,117,108,116,32,105,110,32,97,32,114,101,97,108,32>>,{code,[],[<<101,116,115,58,115,101,108,101,99,116,47,50>>]},<<32,99,97,108,108,44,32,111,114,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,111,98,106,101,99,116,32,116,117,112,108,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<116,114,97,99,101>>]},<<44,32,116,104,101,32,111,98,106,101,99,116,32,116,111,32,109,97,116,99,104,32,97,103,97,105,110,115,116,32,105,115,32,116,111,32,98,101,32,97,32,108,105,115,116,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,82,101,115,117,108,116,44,32,70,108,97,103,115,44,32,87,97,114,110,105,110,103,115,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{code,[],[<<116,114,117,101>>]},<<32,105,102,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,116,111,32,98,101,32,101,109,105,116,116,101,100>>]},{li,[],[{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,110,111,116,32,116,111,32,98,101,32,101,109,105,116,116,101,100>>]},{li,[],[<<84,104,101,32,109,101,115,115,97,103,101,32,116,101,114,109,32,116,111,32,98,101,32,97,112,112,101,110,100,101,100,32,116,111,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101>>]}]},{p,[],[{code,[],[<<70,108,97,103,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,97,108,108,32,116,104,101,32,116,114,97,99,101,32,102,108,97,103,115,32,116,111,32,98,101,32,101,110,97,98,108,101,100,44,32,99,117,114,114,101,110,116,108,121,32,116,104,105,115,32,105,115,32,111,110,108,121,32>>,{code,[],[<<114,101,116,117,114,110,95,116,114,97,99,101>>]},<<46>>]},{p,[],[<<84,104,105,115,32,105,115,32,97,32,117,115,101,102,117,108,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,116,101,115,116,32,116,111,111,108,44,32,101,115,112,101,99,105,97,108,108,121,32,119,104,101,110,32,119,114,105,116,105,110,103,32,99,111,109,112,108,105,99,97,116,101,100,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,116,115,35,116,101,115,116,95,109,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,116,115,58,116,101,115,116,95,109,115,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,55,48,53>>,signature => [{attribute,{1354,2},spec,{{erlang,match_spec_test,3},[{type,{1354,29},bounded_fun,[{type,{1354,29},'fun',[{type,{1354,29},product,[{var,{1354,30},'MatchAgainst'},{var,{1354,44},'MatchSpec'},{var,{1354,55},'Type'}]},{var,{1354,64},'TestResult'}]},[{type,{1355,7},constraint,[{atom,{1355,7},is_subtype},[{var,{1355,7},'MatchAgainst'},{type,{1355,23},union,[{type,{1355,23},list,[{type,{1355,24},term,[]}]},{type,{1355,34},tuple,any}]}]]},{type,{1356,7},constraint,[{atom,{1356,7},is_subtype},[{var,{1356,7},'MatchSpec'},{type,{1356,20},term,[]}]]},{type,{1357,7},constraint,[{atom,{1357,7},is_subtype},[{var,{1357,7},'Type'},{type,{1357,15},union,[{atom,{1357,15},table},{atom,{1357,23},trace}]}]]},{type,{1358,7},constraint,[{atom,{1358,7},is_subtype},[{var,{1358,7},'TestResult'},{type,{1358,21},union,[{type,{1358,21},tuple,[{atom,{1358,22},ok},{type,{1358,26},term,[]},{type,{1358,34},list,[{atom,{1358,35},return_trace}]},{type,{1358,50},list,[{type,{1358,52},tuple,[{type,{1358,53},union,[{atom,{1358,53},error},{atom,{1358,61},warning}]},{type,{1358,70},string,[]}]}]}]},{type,{1358,85},tuple,[{atom,{1358,86},error},{type,{1358,93},list,[{type,{1358,95},tuple,[{type,{1358,96},union,[{atom,{1358,96},error},{atom,{1358,104},warning}]},{type,{1358,113},string,[]}]}]}]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,max,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3979}],[<<109,97,120,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,97,114,103,101,115,116,32,111,102,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,97,110,100,32>>,{code,[],[<<84,101,114,109,50>>]},<<46,32,73,102,32,116,104,101,32,116,101,114,109,115,32,99,111,109,112,97,114,101,32,101,113,117,97,108,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,44,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,116,101,114,109,45,99,111,109,112,97,114,105,115,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,120,112,114,101,115,115,105,111,110,115,32,115,101,99,116,105,111,110>>]},<<32,99,111,110,116,97,105,110,115,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,32,97,110,100,32,104,111,119,32,116,101,114,109,115,32,97,114,101,32,111,114,100,101,114,101,100,46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,109,97,120,40,49,44,32,50,41,46,10,50>>]}]},{pre,[],[{code,[],[<<62,32,109,97,120,40,49,46,48,44,32,49,41,46,10,49,46,48>>]}]},{pre,[],[{code,[],[<<62,32,109,97,120,40,49,44,32,49,46,48,41,46,10,49>>]}]},{pre,[],[{code,[],[<<62,32,109,97,120,40,34,97,98,99,34,44,32,34,98,34,41,46,10,34,98,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,55,52,51>>,signature => [{attribute,{3979,2},spec,{{max,2},[{type,{3979,10},bounded_fun,[{type,{3979,10},'fun',[{type,{3979,10},product,[{var,{3979,11},'Term1'},{var,{3979,18},'Term2'}]},{var,{3979,28},'Maximum'}]},[{type,{3980,7},constraint,[{atom,{3980,7},is_subtype},[{var,{3980,7},'Term1'},{type,{3980,16},term,[]}]]},{type,{3981,7},constraint,[{atom,{3981,7},is_subtype},[{var,{3981,7},'Term2'},{type,{3981,16},term,[]}]]},{type,{3982,7},constraint,[{atom,{3982,7},is_subtype},[{var,{3982,7},'Maximum'},{type,{3982,18},term,[]}]]}]]}]}}]}},{{function,md5,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1363}],[<<109,100,53,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,117,116,101,115,32,97,110,32,77,68,53,32,109,101,115,115,97,103,101,32,100,105,103,101,115,116,32,102,114,111,109,32>>,{code,[],[<<68,97,116,97>>]},<<44,32,119,104,101,114,101,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,100,105,103,101,115,116,32,105,115,32,49,50,56,32,98,105,116,115,32,40,49,54,32,98,121,116,101,115,41,46,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,111,114,32,97,32,108,105,115,116,32,111,102,32,115,109,97,108,108,32,105,110,116,101,103,101,114,115,32,97,110,100,32,98,105,110,97,114,105,101,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,77,68,53,44,32,115,101,101,32>>,{a,[{href,<<104,116,116,112,115,58,47,47,119,119,119,46,105,101,116,102,46,111,114,103,47,114,102,99,47,114,102,99,49,51,50,49,46,116,120,116>>}],[<<82,70,67,32,49,51,50,49,32,45,32,84,104,101,32,77,68,53,32,77,101,115,115,97,103,101,45,68,105,103,101,115,116,32,65,108,103,111,114,105,116,104,109>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,101,32,77,68,53,32,77,101,115,115,97,103,101,45,68,105,103,101,115,116,32,65,108,103,111,114,105,116,104,109,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,99,111,110,115,105,100,101,114,101,100,32,115,97,102,101,32,102,111,114,32,99,111,100,101,45,115,105,103,110,105,110,103,32,111,114,32,115,111,102,116,119,97,114,101,45,105,110,116,101,103,114,105,116,121,32,112,117,114,112,111,115,101,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,55,55,50>>,signature => [{attribute,{1363,2},spec,{{erlang,md5,1},[{type,{1363,17},bounded_fun,[{type,{1363,17},'fun',[{type,{1363,17},product,[{var,{1363,18},'Data'}]},{var,{1363,27},'Digest'}]},[{type,{1364,7},constraint,[{atom,{1364,7},is_subtype},[{var,{1364,7},'Data'},{type,{1364,15},iodata,[]}]]},{type,{1365,7},constraint,[{atom,{1365,7},is_subtype},[{var,{1365,7},'Digest'},{type,{1365,17},binary,[]}]]}]]}]}}]}},{{function,md5_final,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1370}],[<<109,100,53,95,102,105,110,97,108,47,49>>],#{<<101,110>> => [{p,[],[<<70,105,110,105,115,104,101,115,32,116,104,101,32,117,112,100,97,116,101,32,111,102,32,97,110,32,77,68,53,32>>,{code,[],[<<67,111,110,116,101,120,116>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,99,111,109,112,117,116,101,100,32>>,{code,[],[<<77,68,53>>]},<<32,109,101,115,115,97,103,101,32,100,105,103,101,115,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,55,57,48>>,signature => [{attribute,{1370,2},spec,{{erlang,md5_final,1},[{type,{1370,23},bounded_fun,[{type,{1370,23},'fun',[{type,{1370,23},product,[{var,{1370,24},'Context'}]},{var,{1370,36},'Digest'}]},[{type,{1371,7},constraint,[{atom,{1371,7},is_subtype},[{var,{1371,7},'Context'},{type,{1371,18},binary,[]}]]},{type,{1372,7},constraint,[{atom,{1372,7},is_subtype},[{var,{1372,7},'Digest'},{type,{1372,17},binary,[]}]]}]]}]}}]}},{{function,md5_init,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1377}],[<<109,100,53,95,105,110,105,116,47,48>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,110,32,77,68,53,32,99,111,110,116,101,120,116,44,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,100,53,95,117,112,100,97,116,101,47,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,48,48>>,signature => [{attribute,{1377,2},spec,{{erlang,md5_init,0},[{type,{1377,22},bounded_fun,[{type,{1377,22},'fun',[{type,{1377,22},product,[]},{var,{1377,28},'Context'}]},[{type,{1378,7},constraint,[{atom,{1378,7},is_subtype},[{var,{1378,7},'Context'},{type,{1378,18},binary,[]}]]}]]}]}}]}},{{function,md5_update,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1383}],[<<109,100,53,95,117,112,100,97,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<85,112,100,97,116,101,32,97,110,32,77,68,53,32>>,{code,[],[<<67,111,110,116,101,120,116>>]},<<32,119,105,116,104,32>>,{code,[],[<<68,97,116,97>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32,97,32>>,{code,[],[<<78,101,119,67,111,110,116,101,120,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,48,57>>,signature => [{attribute,{1383,2},spec,{{erlang,md5_update,2},[{type,{1383,24},bounded_fun,[{type,{1383,24},'fun',[{type,{1383,24},product,[{var,{1383,25},'Context'},{var,{1383,34},'Data'}]},{var,{1383,43},'NewContext'}]},[{type,{1384,7},constraint,[{atom,{1384,7},is_subtype},[{var,{1384,7},'Context'},{type,{1384,18},binary,[]}]]},{type,{1385,7},constraint,[{atom,{1385,7},is_subtype},[{var,{1385,7},'Data'},{type,{1385,15},iodata,[]}]]},{type,{1386,7},constraint,[{atom,{1386,7},is_subtype},[{var,{1386,7},'NewContext'},{type,{1386,21},binary,[]}]]}]]}]}}]}},{{function,memory,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,4011}],[<<109,101,109,111,114,121,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,101,109,111,114,121,95,116,121,112,101>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,109,101,109,111,114,121,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,101,109,117,108,97,116,111,114,46,32,69,97,99,104,32,108,105,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,84,121,112,101,44,32,83,105,122,101,125>>]},<<46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,109,101,109,111,114,121,32,116,121,112,101,46,32,84,104,101,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,32>>,{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,109,101,109,111,114,121,32,115,105,122,101,32,105,110,32,98,121,116,101,115,46>>]},{p,[],[<<77,101,109,111,114,121,32,116,121,112,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,111,116,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,115,105,122,101,32,102,111,114,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<46>>]}]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,46>>]}]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,101,115,95,117,115,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,46,32,84,104,105,115,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,116,104,101,32,101,109,117,108,97,116,111,114,32,116,104,97,116,32,105,115,32,110,111,116,32,100,105,114,101,99,116,108,121,32,114,101,108,97,116,101,100,32,116,111,32,97,110,121,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,46,32,77,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,105,115,32,110,111,116,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,105,115,32,109,101,109,111,114,121,46,32>>,{a,[{href,<<116,111,111,108,115,58,105,110,115,116,114,117,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,115,116,114,117,109,101,110,116,40,51,41>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,103,101,116,32,97,32,109,111,114,101,32,100,101,116,97,105,108,101,100,32,98,114,101,97,107,100,111,119,110,32,111,102,32,119,104,97,116,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,105,115,32,116,121,112,101,46>>]}]},{dt,[],[{code,[],[<<97,116,111,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,97,116,111,109,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<97,116,111,109,95,117,115,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,102,111,114,32,97,116,111,109,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<97,116,111,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,98,105,110,97,114,105,101,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<99,111,100,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,69,114,108,97,110,103,32,99,111,100,101,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<101,116,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,99,117,114,114,101,110,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,69,84,83,32,116,97,98,108,101,115,46,32,84,104,105,115,32,109,101,109,111,114,121,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,109,101,109,111,114,121,46>>]}]},{dt,[],[{code,[],[<<109,97,120,105,109,117,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,101,100,32,115,105,110,99,101,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,97,115,32,115,116,97,114,116,101,100,46,32,84,104,105,115,32,116,117,112,108,101,32,105,115,32,111,110,108,121,32,112,114,101,115,101,110,116,32,119,104,101,110,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,114,117,110,32,119,105,116,104,32,105,110,115,116,114,117,109,101,110,116,97,116,105,111,110,46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,114,117,110,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,105,116,104,32,105,110,115,116,114,117,109,101,110,116,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<116,111,111,108,115,58,105,110,115,116,114,117,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,115,116,114,117,109,101,110,116,40,51,41>>]}]},<<32,97,110,100,47,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<101,114,108,40,49,41>>]}]},<<46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,118,97,108,117,101,32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,46,32,83,111,109,101,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,116,104,97,116,32,105,115,32,116,111,32,98,101,32,112,97,114,116,32,111,102,32,116,104,105,115,32,118,97,108,117,101,32,105,115,32,110,111,116,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,114,117,110,32,119,105,116,104,32,105,110,115,116,114,117,109,101,110,116,97,116,105,111,110,44,32,116,104,101,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,118,97,108,117,101,32,105,115,32,109,111,114,101,32,97,99,99,117,114,97,116,101,44,32,98,117,116,32,109,101,109,111,114,121,32,100,105,114,101,99,116,108,121,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32>>,{code,[],[<<109,97,108,108,111,99>>]},<<32,40,97,110,100,32,102,114,105,101,110,100,115,41,32,105,115,32,115,116,105,108,108,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,118,97,108,117,101,46,32,68,105,114,101,99,116,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,97,108,108,111,99>>]},<<32,97,114,101,32,111,110,108,121,32,100,111,110,101,32,102,114,111,109,32,79,83,45,115,112,101,99,105,102,105,99,32,114,117,110,116,105,109,101,32,108,105,98,114,97,114,105,101,115,32,97,110,100,32,112,101,114,104,97,112,115,32,102,114,111,109,32,117,115,101,114,45,105,109,112,108,101,109,101,110,116,101,100,32,69,114,108,97,110,103,32,100,114,105,118,101,114,115,32,116,104,97,116,32,100,111,32,110,111,116,32,117,115,101,32,116,104,101,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32,100,114,105,118,101,114,32,105,110,116,101,114,102,97,99,101,46>>]},{p,[],[<<65,115,32,116,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,32,105,115,32,116,104,101,32,115,117,109,32,111,102,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115>>]},<<32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<44,32,116,104,101,32,101,114,114,111,114,32,105,110,32>>,{code,[],[<<115,121,115,116,101,109>>]},<<32,112,114,111,112,97,103,97,116,101,115,32,116,111,32,116,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,46>>]},{p,[],[<<84,104,101,32,100,105,102,102,101,114,101,110,116,32,97,109,111,117,110,116,115,32,111,102,32,109,101,109,111,114,121,32,116,104,97,116,32,97,114,101,32,115,117,109,109,101,100,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,44,32,119,104,105,99,104,32,105,110,116,114,111,100,117,99,101,115,32,97,110,32,101,114,114,111,114,32,105,110,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},{p,[],[<<84,104,101,32,100,105,102,102,101,114,101,110,116,32,118,97,108,117,101,115,32,104,97,118,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,101,108,97,116,105,111,110,32,116,111,32,101,97,99,104,32,111,116,104,101,114,46,32,86,97,108,117,101,115,32,98,101,103,105,110,110,105,110,103,32,119,105,116,104,32,97,110,32,117,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114,32,105,115,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<116,111,116,97,108,32,32,32,32,32,32,61,32,112,114,111,99,101,115,115,101,115,32,43,32,115,121,115,116,101,109,10,112,114,111,99,101,115,115,101,115,32,32,61,32,112,114,111,99,101,115,115,101,115,95,117,115,101,100,32,43,32,80,114,111,99,101,115,115,101,115,78,111,116,85,115,101,100,10,115,121,115,116,101,109,32,32,32,32,32,61,32,97,116,111,109,32,43,32,98,105,110,97,114,121,32,43,32,99,111,100,101,32,43,32,101,116,115,32,43,32,79,116,104,101,114,83,121,115,116,101,109,10,97,116,111,109,32,32,32,32,32,32,32,61,32,97,116,111,109,95,117,115,101,100,32,43,32,65,116,111,109,78,111,116,85,115,101,100,10,82,101,97,108,84,111,116,97,108,32,32,61,32,112,114,111,99,101,115,115,101,115,32,43,32,82,101,97,108,83,121,115,116,101,109,10,82,101,97,108,83,121,115,116,101,109,32,61,32,115,121,115,116,101,109,32,43,32,77,105,115,115,101,100,83,121,115,116,101,109>>]}]},{p,[],[<<77,111,114,101,32,116,117,112,108,101,115,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,32,105,115,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,116,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,104,97,114,101,100,32,108,105,98,114,97,114,105,101,115,44,32,116,104,101,32,99,111,100,101,32,111,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,116,115,101,108,102,44,32,97,110,100,32,116,104,101,32,101,109,117,108,97,116,111,114,32,115,116,97,99,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,105,110,99,108,117,100,101,100,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32>>,{code,[],[<<116,111,116,97,108>>]},<<32,118,97,108,117,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,101,113,117,97,108,32,116,111,32,116,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,97,108,108,32,112,97,103,101,115,32,109,97,112,112,101,100,32,116,111,32,116,104,101,32,101,109,117,108,97,116,111,114,46>>]},{p,[],[<<65,108,115,111,44,32,98,101,99,97,117,115,101,32,111,102,32,102,114,97,103,109,101,110,116,97,116,105,111,110,32,97,110,100,32,112,114,101,114,101,115,101,114,118,97,116,105,111,110,32,111,102,32,109,101,109,111,114,121,32,97,114,101,97,115,44,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,115,101,103,109,101,110,116,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,98,108,111,99,107,115,32,99,97,110,32,98,101,32,109,117,99,104,32,108,97,114,103,101,114,32,116,104,97,110,32,116,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,116,104,101,32,100,121,110,97,109,105,99,97,108,108,121,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,98,108,111,99,107,115,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,54,46,52,44,32>>,{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48>>]},<<32,114,101,113,117,105,114,101,115,32,116,104,97,116,32,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,115,32,97,114,101,32,101,110,97,98,108,101,100,32,40,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,41,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,105,102,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,32,104,97,115,32,98,101,101,110,32,100,105,115,97,98,108,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,56,50,48>>,signature => [{attribute,{4011,2},spec,{{erlang,memory,0},[{type,{4011,20},bounded_fun,[{type,{4011,20},'fun',[{type,{4011,20},product,[]},{type,{4011,26},list,[{type,{4011,27},tuple,[{var,{4011,28},'Type'},{var,{4011,34},'Size'}]}]}]},[{type,{4012,7},constraint,[{atom,{4012,7},is_subtype},[{var,{4012,7},'Type'},{user_type,{4012,15},memory_type,[]}]]},{type,{4013,7},constraint,[{atom,{4013,7},is_subtype},[{var,{4013,7},'Size'},{type,{4013,15},non_neg_integer,[]}]]}]]}]}}]}},{{function,memory,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,4030}],[<<109,101,109,111,114,121,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,101,109,111,114,121,95,116,121,112,101>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,101,109,111,114,121,32,115,105,122,101,32,105,110,32,98,121,116,101,115,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,109,101,109,111,114,121,32,111,102,32,116,121,112,101,32>>,{code,[],[<<84,121,112,101>>]},<<46,32,84,104,101,32,97,114,103,117,109,101,110,116,32,99,97,110,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<109,101,109,111,114,121,95,116,121,112,101,40,41>>]},<<32,97,116,111,109,115,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,97,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,109,101,109,111,114,121,95,116,121,112,101,40,41,44,32,83,105,122,101,32,58,58,32,105,110,116,101,103,101,114,32,62,61,32,48,125>>]},<<32,116,117,112,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,54,46,52,44,32>>,{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,49>>]},<<32,114,101,113,117,105,114,101,115,32,116,104,97,116,32,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,115,32,97,114,101,32,101,110,97,98,108,101,100,32,40,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,41,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,110,111,116,32,111,110,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,116,121,112,101,115,32,108,105,115,116,101,100,32,105,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,101,109,111,114,121,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48>>]}]},<<46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<109,97,120,105,109,117,109>>]},<<32,105,115,32,112,97,115,115,101,100,32,97,115,32>>,{code,[],[<<84,121,112,101>>]},<<32,97,110,100,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,110,111,116,32,114,117,110,32,105,110,32,105,110,115,116,114,117,109,101,110,116,101,100,32,109,111,100,101,46>>]},{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[<<73,102,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<32,97,108,108,111,99,97,116,111,114,32,104,97,115,32,98,101,101,110,32,100,105,115,97,98,108,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,101,109,111,114,121,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,57,53,53>>,signature => [{attribute,{4030,2},spec,{{erlang,memory,1},[{type,{4030,20},'fun',[{type,{4030,20},product,[{ann_type,{4030,21},[{var,{4030,21},'Type'},{user_type,{4030,29},memory_type,[]}]}]},{type,{4030,47},non_neg_integer,[]}]},{type,{4031,20},'fun',[{type,{4031,20},product,[{ann_type,{4031,21},[{var,{4031,21},'TypeList'},{type,{4031,33},list,[{user_type,{4031,34},memory_type,[]}]}]}]},{type,{4031,53},list,[{type,{4031,54},tuple,[{user_type,{4031,55},memory_type,[]},{type,{4031,70},non_neg_integer,[]}]}]}]}]}}]}},{{function,min,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3972}],[<<109,105,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,111,102,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,97,110,100,32>>,{code,[],[<<84,101,114,109,50>>]},<<46,32,73,102,32,116,104,101,32,116,101,114,109,115,32,99,111,109,112,97,114,101,32,101,113,117,97,108,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,44,32>>,{code,[],[<<84,101,114,109,49>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,116,101,114,109,45,99,111,109,112,97,114,105,115,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,120,112,114,101,115,115,105,111,110,115,32,115,101,99,116,105,111,110>>]},<<32,99,111,110,116,97,105,110,115,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,116,104,101,32>>,{code,[],[<<61,61>>]},<<32,111,112,101,114,97,116,111,114,32,97,110,100,32,104,111,119,32,116,101,114,109,115,32,97,114,101,32,111,114,100,101,114,101,100,46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<62,32,109,105,110,40,49,44,32,50,41,46,10,49>>]}]},{pre,[],[{code,[],[<<62,32,109,105,110,40,49,46,48,44,32,49,41,46,10,49,46,48>>]}]},{pre,[],[{code,[],[<<62,32,109,105,110,40,49,44,32,49,46,48,41,46,10,49>>]}]},{pre,[],[{code,[],[<<62,32,109,105,110,40,34,97,98,99,34,44,32,34,98,34,41,46,10,34,97,98,99,34>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,51,57,57,53>>,signature => [{attribute,{3972,2},spec,{{min,2},[{type,{3972,10},bounded_fun,[{type,{3972,10},'fun',[{type,{3972,10},product,[{var,{3972,11},'Term1'},{var,{3972,18},'Term2'}]},{var,{3972,28},'Minimum'}]},[{type,{3973,7},constraint,[{atom,{3973,7},is_subtype},[{var,{3973,7},'Term1'},{type,{3973,16},term,[]}]]},{type,{3974,7},constraint,[{atom,{3974,7},is_subtype},[{var,{3974,7},'Term2'},{type,{3974,16},term,[]}]]},{type,{3975,7},constraint,[{atom,{3975,7},is_subtype},[{var,{3975,7},'Minimum'},{type,{3975,18},term,[]}]]}]]}]}}]}},{{function,module_loaded,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1391}],[<<109,111,100,117,108,101,95,108,111,97,100,101,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,108,111,97,100,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,73,116,32,100,111,101,115,32,110,111,116,32,97,116,116,101,109,112,116,32,116,111,32,108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,48,50,52>>,signature => [{attribute,{1391,2},spec,{{module_loaded,1},[{type,{1391,20},bounded_fun,[{type,{1391,20},'fun',[{type,{1391,20},product,[{var,{1391,21},'Module'}]},{type,{1391,32},boolean,[]}]},[{type,{1392,7},constraint,[{atom,{1392,7},is_subtype},[{var,{1392,7},'Module'},{type,{1392,17},module,[]}]]}]]}]}}]}},{{function,monitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1404}],[<<109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,111,110,105,116,111,114,95,112,111,114,116,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<109,111,110,105,116,111,114,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]}]},{p,[],[{a,[{id,<<109,111,110,105,116,111,114,95,109,101,115,115,97,103,101>>}],[]},<<83,101,110,100,115,32,97,32,109,111,110,105,116,111,114,32,114,101,113,117,101,115,116,32,111,102,32,116,121,112,101,32>>,{code,[],[<<84,121,112,101>>]},<<32,116,111,32,116,104,101,32,101,110,116,105,116,121,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<46,32,73,102,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,111,114,32,105,116,32,99,104,97,110,103,101,115,32,109,111,110,105,116,111,114,101,100,32,115,116,97,116,101,44,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,105,115,32,110,111,116,105,102,105,101,100,32,98,121,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,97,116,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<123,84,97,103,44,32,77,111,110,105,116,111,114,82,101,102,44,32,84,121,112,101,44,32,79,98,106,101,99,116,44,32,73,110,102,111,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,114,101,113,117,101,115,116,32,105,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,115,105,103,110,97,108,46,32,84,104,97,116,32,105,115,44,32,105,116,32,116,97,107,101,115,32,116,105,109,101,32,98,101,102,111,114,101,32,116,104,101,32,115,105,103,110,97,108,32,114,101,97,99,104,101,115,32,105,116,115,32,100,101,115,116,105,110,97,116,105,111,110,46>>]}]},{p,[],[{code,[],[<<84,121,112,101>>]},<<32,99,97,110,32,98,101,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,97,116,111,109,115,58,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<44,32>>,{code,[],[<<112,111,114,116>>]},<<32,111,114,32>>,{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]},<<46>>]},{p,[],[<<65,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116>>]},<<32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,111,110,108,121,32,111,110,99,101,44,32,97,102,116,101,114,32,116,104,97,116,32,105,116,32,105,115,32,114,101,109,111,118,101,100,32,102,114,111,109,32,98,111,116,104,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,46,32,77,111,110,105,116,111,114,115,32,97,114,101,32,102,105,114,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,116,101,114,109,105,110,97,116,101,115,44,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,97,116,32,116,104,101,32,109,111,109,101,110,116,32,111,102,32,99,114,101,97,116,105,111,110,44,32,111,114,32,105,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,105,116,32,105,115,32,108,111,115,116,46,32,73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,105,116,32,105,115,32,108,111,115,116,44,32,119,101,32,100,111,32,110,111,116,32,107,110,111,119,32,105,102,32,105,116,32,115,116,105,108,108,32,101,120,105,115,116,115,46,32,84,104,101,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,97,108,115,111,32,116,117,114,110,101,100,32,111,102,102,32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<100,101,109,111,110,105,116,111,114,47,49>>]},<<32,105,115,32,99,97,108,108,101,100,46>>]},{p,[],[<<65,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116>>]},<<32,109,111,110,105,116,111,114,32,98,121,32,110,97,109,101,32,114,101,115,111,108,118,101,115,32,116,104,101,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,116,111,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<32,111,110,108,121,32,111,110,99,101,32,97,116,32,116,104,101,32,109,111,109,101,110,116,32,111,102,32,109,111,110,105,116,111,114,32,105,110,115,116,97,110,116,105,97,116,105,111,110,44,32,108,97,116,101,114,32,99,104,97,110,103,101,115,32,116,111,32,116,104,101,32,110,97,109,101,32,114,101,103,105,115,116,114,97,116,105,111,110,32,119,105,108,108,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,101,120,105,115,116,105,110,103,32,109,111,110,105,116,111,114,46>>]},{p,[],[<<87,104,101,110,32,97,32>>,{code,[],[<<112,114,111,99,101,115,115>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116>>]},<<32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,44,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,104,97,116,32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<123,39,68,79,87,78,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,84,121,112,101,44,32,79,98,106,101,99,116,44,32,73,110,102,111,125>>]}]},{p,[],[<<73,110,32,116,104,101,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<32,97,110,100,32>>,{code,[],[<<84,121,112,101>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,44,32,97,110,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<79,98,106,101,99,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,101,100,32,101,110,116,105,116,121,44,32,119,104,105,99,104,32,116,114,105,103,103,101,114,101,100,32,116,104,101,32,101,118,101,110,116,46,32,87,104,101,110,32,109,111,110,105,116,111,114,105,110,103,32,97,32,112,114,111,99,101,115,115,32,111,114,32,97,32,108,111,99,97,108,32,112,111,114,116,44,32>>,{code,[],[<<79,98,106,101,99,116>>]},<<32,119,105,108,108,32,98,101,32,101,113,117,97,108,32,116,111,32,116,104,101,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<32,116,104,97,116,32,119,97,115,32,98,101,105,110,103,32,109,111,110,105,116,111,114,101,100,46,32,87,104,101,110,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,98,121,32,110,97,109,101,44,32>>,{code,[],[<<79,98,106,101,99,116>>]},<<32,119,105,108,108,32,104,97,118,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,82,101,103,105,115,116,101,114,101,100,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,119,104,105,99,104,32,104,97,115,32,98,101,101,110,32,117,115,101,100,32,119,105,116,104,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,99,97,108,108,32,97,110,100,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,108,111,99,97,108,32,111,114,32,114,101,109,111,116,101,32,110,111,100,101,32,110,97,109,101,32,40,102,111,114,32,112,111,114,116,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,110,97,109,101,44,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,97,108,119,97,121,115,32,108,111,99,97,108,32,110,111,100,101,32,110,97,109,101,41,46>>]}]},{dt,[],[{code,[],[<<73,110,102,111>>]}]},{dd,[],[{p,[],[<<69,105,116,104,101,114,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,44,32>>,{code,[],[<<110,111,112,114,111,99>>]},<<32,40,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,100,105,100,32,110,111,116,32,101,120,105,115,116,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,109,111,110,105,116,111,114,32,99,114,101,97,116,105,111,110,41,44,32,111,114,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,40,110,111,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,101,32,110,111,100,101,32,119,104,101,114,101,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,32,114,101,115,105,100,101,115,41,46>>]}]}]},{dl,[],[{dt,[],[<<77,111,110,105,116,111,114,105,110,103,32,97,32>>,{a,[{id,<<109,111,110,105,116,111,114,95,112,114,111,99,101,115,115>>}],[]},{code,[],[<<112,114,111,99,101,115,115>>]}]},{dd,[],[{p,[],[<<67,114,101,97,116,101,115,32,109,111,110,105,116,111,114,32,98,101,116,119,101,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,97,110,100,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,40,108,111,99,97,108,32,111,114,32,114,101,109,111,116,101,41,44,32,97,110,32,97,116,111,109,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,111,114,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,82,101,103,105,115,116,101,114,101,100,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,102,111,114,32,97,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,44,32,108,111,99,97,116,101,100,32,101,108,115,101,119,104,101,114,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,101,102,111,114,101,32,69,82,84,83,32,49,48,46,48,32,40,79,84,80,32,50,49,46,48,41,44,32,109,111,110,105,116,111,114,105,110,103,32,97,32,112,114,111,99,101,115,115,32,99,111,117,108,100,32,102,97,105,108,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,32,114,101,115,105,100,101,100,32,111,110,32,97,32,112,114,105,109,105,116,105,118,101,32,110,111,100,101,32,40,115,117,99,104,32,97,115,32,101,114,108,95,105,110,116,101,114,102,97,99,101,32,111,114,32,106,105,110,116,101,114,102,97,99,101,41,44,32,119,104,101,114,101,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,46>>]},{p,[],[<<78,111,119,44,32,115,117,99,104,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,119,105,108,108,32,105,110,115,116,101,97,100,32,115,117,99,99,101,101,100,32,97,110,100,32,97,32,109,111,110,105,116,111,114,32,105,115,32,99,114,101,97,116,101,100,46,32,66,117,116,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,111,110,108,121,32,115,117,112,101,114,118,105,115,101,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,46,32,84,104,97,116,32,105,115,44,32,97,32>>,{code,[],[<<123,39,68,79,87,78,39,44,32,95,44,32,112,114,111,99,101,115,115,44,32,95,44,32,110,111,99,111,110,110,101,99,116,105,111,110,125>>]},<<32,105,115,32,116,104,101,32,111,110,108,121,32,109,101,115,115,97,103,101,32,116,104,97,116,32,109,97,121,32,98,101,32,114,101,99,101,105,118,101,100,44,32,97,115,32,116,104,101,32,112,114,105,109,105,116,105,118,101,32,110,111,100,101,32,104,97,118,101,32,110,111,32,119,97,121,32,111,102,32,114,101,112,111,114,116,105,110,103,32,116,104,101,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,109,111,110,105,116,111,114,101,100,32,112,114,111,99,101,115,115,46>>]}]}]},{dt,[],[<<77,111,110,105,116,111,114,105,110,103,32,97,32>>,{a,[{id,<<109,111,110,105,116,111,114,95,112,111,114,116>>}],[]},{code,[],[<<112,111,114,116>>]}]},{dd,[],[{p,[],[<<67,114,101,97,116,101,115,32,109,111,110,105,116,111,114,32,98,101,116,119,101,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,97,110,100,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,97,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<32,40,111,110,108,121,32,108,111,99,97,108,41,44,32,97,110,32,97,116,111,109,32>>,{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,111,114,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,82,101,103,105,115,116,101,114,101,100,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,102,111,114,32,97,32,114,101,103,105,115,116,101,114,101,100,32,112,111,114,116,44,32,108,111,99,97,116,101,100,32,111,110,32,116,104,105,115,32,110,111,100,101,46,32,78,111,116,101,44,32,116,104,97,116,32,97,116,116,101,109,112,116,32,116,111,32,109,111,110,105,116,111,114,32,97,32,114,101,109,111,116,101,32,112,111,114,116,32,119,105,108,108,32,114,101,115,117,108,116,32,105,110,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46>>]}]},{dt,[],[<<77,111,110,105,116,111,114,105,110,103,32,97,32>>,{a,[{id,<<109,111,110,105,116,111,114,95,116,105,109,101,95,111,102,102,115,101,116>>}],[]},{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]}]},{dd,[],[{p,[],[<<77,111,110,105,116,111,114,115,32,99,104,97,110,103,101,115,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,105,109,101,32,111,102,102,115,101,116>>]}]},<<32,98,101,116,119,101,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<46,32,79,110,101,32,118,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,101,120,105,115,116,115,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<116,105,109,101,95,111,102,102,115,101,116,32,84,121,112,101>>]},<<44,32,110,97,109,101,108,121,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<99,108,111,99,107,95,115,101,114,118,105,99,101>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<99,108,111,99,107,95,115,101,114,118,105,99,101>>]},<<32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,32,112,114,111,99,101,115,115,46,32,73,110,32,116,104,105,115,32,99,97,115,101,32,105,116,32,115,101,114,118,101,115,32,97,115,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,116,101,114,110,97,108,32,99,108,111,99,107,32,115,101,114,118,105,99,101,32,97,116,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,119,104,101,110,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,46,32,84,104,105,115,32,101,105,116,104,101,114,32,105,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,118,97,108,117,101,32,105,115,32,99,104,97,110,103,101,100,44,32,111,114,32,105,102,32,116,104,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,32,102,114,111,109,32,112,114,101,108,105,109,105,110,97,114,121,32,116,111,32,102,105,110,97,108,32,100,117,114,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,116,105,109,101,95,111,102,102,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,110,97,108,105,122,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116>>]},<<32,119,104,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46,32,87,104,101,110,32,97,32,99,104,97,110,103,101,32,102,114,111,109,32,112,114,101,108,105,109,105,110,97,114,121,32,116,111,32,102,105,110,97,108,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,109,97,100,101,44,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,111,110,99,101,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,118,97,108,117,101,32,119,97,115,32,99,104,97,110,103,101,100,32,111,114,32,110,111,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,32,119,104,101,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,101,116,101,99,116,115,32,116,104,97,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,104,97,115,32,99,104,97,110,103,101,100,46,32,84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,111,101,115,44,32,104,111,119,101,118,101,114,44,32,110,111,116,32,100,101,116,101,99,116,32,116,104,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,119,104,101,110,32,105,116,32,111,99,99,117,114,115,46,32,65,32,116,97,115,107,32,99,104,101,99,107,105,110,103,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,101,120,101,99,117,116,101,32,97,116,32,108,101,97,115,116,32,111,110,99,101,32,97,32,109,105,110,117,116,101,44,32,115,111,32,117,110,100,101,114,32,110,111,114,109,97,108,32,111,112,101,114,97,116,105,111,110,32,116,104,105,115,32,105,115,32,116,111,32,98,101,32,100,101,116,101,99,116,101,100,32,119,105,116,104,105,110,32,97,32,109,105,110,117,116,101,44,32,98,117,116,32,100,117,114,105,110,103,32,104,101,97,118,121,32,108,111,97,100,32,105,116,32,99,97,110,32,116,97,107,101,32,108,111,110,103,101,114,32,116,105,109,101,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,32,97,102,116,101,114,32,105,116,32,104,97,115,32,98,101,101,110,32,116,114,105,103,103,101,114,101,100,46,32,84,104,97,116,32,105,115,44,32,114,101,112,101,97,116,101,100,32,99,104,97,110,103,101,115,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,116,114,105,103,103,101,114,32,116,104,101,32,109,111,110,105,116,111,114,32,114,101,112,101,97,116,101,100,108,121,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,32,97,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,46,32,65,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<123,39,67,72,65,78,71,69,39,44,32,77,111,110,105,116,111,114,82,101,102,44,32,84,121,112,101,44,32,73,116,101,109,44,32,78,101,119,84,105,109,101,79,102,102,115,101,116,125>>]}]},{p,[],[<<119,104,101,114,101,32>>,{code,[],[<<77,111,110,105,116,111,114,82,101,102>>]},<<44,32>>,{code,[],[<<84,121,112,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,100,101,115,99,114,105,98,101,100,32,97,98,111,118,101,44,32,97,110,100,32>>,{code,[],[<<78,101,119,84,105,109,101,79,102,102,115,101,116>>]},<<32,105,115,32,116,104,101,32,110,101,119,32,116,105,109,101,32,111,102,102,115,101,116,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,32,104,97,115,32,98,101,101,110,32,114,101,99,101,105,118,101,100,32,121,111,117,32,97,114,101,32,103,117,97,114,97,110,116,101,101,100,32,110,111,116,32,116,111,32,114,101,116,114,105,101,118,101,32,116,104,101,32,111,108,100,32,116,105,109,101,32,111,102,102,115,101,116,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]}]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,121,111,117,32,99,97,110,32,111,98,115,101,114,118,101,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]},<<32,98,101,102,111,114,101,32,121,111,117,32,103,101,116,32,116,104,101,32>>,{code,[],[<<39,67,72,65,78,71,69,39>>]},<<32,109,101,115,115,97,103,101,46>>]}]}]},{p,[],[<<77,97,107,105,110,103,32,115,101,118,101,114,97,108,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,102,111,114,32,116,104,101,32,115,97,109,101,32>>,{code,[],[<<73,116,101,109>>]},<<32,97,110,100,47,111,114,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,114,114,111,114,59,32,105,116,32,114,101,115,117,108,116,115,32,105,110,32,97,115,32,109,97,110,121,32,105,110,100,101,112,101,110,100,101,110,116,32,109,111,110,105,116,111,114,105,110,103,32,105,110,115,116,97,110,99,101,115,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,101,120,116,101,110,100,101,100,46,32,84,104,97,116,32,105,115,44,32,111,116,104,101,114,32>>,{code,[],[<<84,121,112,101>>]},<<115,32,97,110,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,115,117,112,112,111,114,116,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,111,114,32,119,104,101,110,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<32,105,115,32,101,120,116,101,110,100,101,100,44,32,111,116,104,101,114,32,112,111,115,115,105,98,108,101,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<84,97,103>>]},<<44,32>>,{code,[],[<<79,98,106,101,99,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,110,32,116,104,101,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,105,110,116,114,111,100,117,99,101,100,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,48,51,57>>,signature => [{attribute,{1404,2},spec,{{monitor,2},[{type,{1405,7},bounded_fun,[{type,{1405,7},'fun',[{type,{1405,7},product,[{atom,{1405,8},process},{user_type,{1405,17},monitor_process_identifier,[]}]},{var,{1405,50},'MonitorRef'}]},[{type,{1406,9},constraint,[{atom,{1406,9},is_subtype},[{var,{1406,9},'MonitorRef'},{type,{1406,23},reference,[]}]]}]]},{type,{1407,7},bounded_fun,[{type,{1407,7},'fun',[{type,{1407,7},product,[{atom,{1407,8},port},{user_type,{1407,14},monitor_port_identifier,[]}]},{var,{1407,44},'MonitorRef'}]},[{type,{1408,9},constraint,[{atom,{1408,9},is_subtype},[{var,{1408,9},'MonitorRef'},{type,{1408,23},reference,[]}]]}]]},{type,{1409,7},bounded_fun,[{type,{1409,7},'fun',[{type,{1409,7},product,[{atom,{1409,8},time_offset},{atom,{1409,21},clock_service}]},{var,{1409,39},'MonitorRef'}]},[{type,{1410,9},constraint,[{atom,{1410,9},is_subtype},[{var,{1410,9},'MonitorRef'},{type,{1410,23},reference,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48,44,79,84,80,32,49,57,46,48>>}},{{function,monitor,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1416}],[<<109,111,110,105,116,111,114,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,111,110,105,116,111,114,95,112,111,114,116,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<109,111,110,105,116,111,114,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>}],[]},{li,[{name,<<114,101,103,105,115,116,101,114,101,100,95,112,114,111,99,101,115,115,95,105,100,101,110,116,105,102,105,101,114>>}],[]}]},{p,[],[<<80,114,111,118,105,100,101,115,32,97,110,32,111,112,116,105,111,110,32,108,105,115,116,32,102,111,114,32,109,111,100,105,102,105,99,97,116,105,111,110,32,111,102,32,109,111,110,105,116,111,114,105,110,103,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,112,114,111,118,105,100,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,50>>]}]},<<46,32,84,104,101,32>>,{code,[],[<<84,121,112,101>>]},<<32,97,110,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,97,114,103,117,109,101,110,116,115,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,109,101,97,110,105,110,103,32,97,115,32,119,104,101,110,32,112,97,115,115,101,100,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<46,32,67,117,114,114,101,110,116,108,121,32,97,118,97,105,108,97,98,108,101,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,108,105,97,115,44,32,85,110,97,108,105,97,115,79,112,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,109,111,110,105,116,111,114,32,114,101,102,101,114,101,110,99,101,32,119,105,108,108,32,97,108,115,111,32,98,101,99,111,109,101,32,97,110,32,97,108,105,97,115,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,97,108,105,97,115,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,108,105,97,115,47,48>>]}]},<<46,32,84,104,101,32>>,{code,[],[<<85,110,97,108,105,97,115,79,112,116>>]},<<32,100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,32,97,108,105,97,115,32,115,104,111,117,108,100,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,46>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,112,108,105,99,105,116,95,117,110,97,108,105,97,115>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,97,110,32,101,120,112,108,105,99,105,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,97,108,105,97,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,97,108,105,97,115,47,49>>]}]},<<32,119,105,108,108,32,100,101,97,99,116,105,118,97,116,101,32,116,104,101,32,97,108,105,97,115,46>>]}]},{dt,[],[{code,[],[<<100,101,109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,114,101,109,111,118,101,100,46,32,84,104,105,115,32,101,105,116,104,101,114,32,118,105,97,32,97,110,32,101,120,112,108,105,99,105,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,101,109,111,110,105,116,111,114,47,49>>]}]},<<32,111,114,32,119,104,101,110,32,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,32,97,115,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,100,101,108,105,118,101,114,101,100,32,100,117,101,32,116,111,32,116,104,101,32,109,111,110,105,116,111,114,46,32,84,104,101,32,97,108,105,97,115,32,99,97,110,32,97,108,115,111,32,115,116,105,108,108,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46>>]}]},{dt,[],[{code,[],[<<114,101,112,108,121,95,100,101,109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,97,108,105,97,115,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,114,101,109,111,118,101,100,32,40,115,101,101,32>>,{code,[],[<<100,101,109,111,110,105,116,111,114>>]},<<32,111,112,116,105,111,110,32,97,98,111,118,101,41,32,111,114,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,115,101,110,116,32,118,105,97,32,116,104,101,32,97,108,105,97,115,32,105,115,32,114,101,99,101,105,118,101,100,46,32,87,104,101,110,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,105,115,32,114,101,99,101,105,118,101,100,32,118,105,97,32,116,104,101,32,97,108,105,97,115,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,97,108,115,111,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,46,32,84,104,105,115,32,105,115,32,117,115,101,102,117,108,32,105,110,32,99,108,105,101,110,116,47,115,101,114,118,101,114,32,115,99,101,110,97,114,105,111,115,32,119,104,101,110,32,97,32,99,108,105,101,110,116,32,109,111,110,105,116,111,114,115,32,116,104,101,32,115,101,114,118,101,114,32,97,110,100,32,119,105,108,108,32,103,101,116,32,116,104,101,32,114,101,112,108,121,32,118,105,97,32,116,104,101,32,97,108,105,97,115,46,32,79,110,99,101,32,116,104,101,32,114,101,115,112,111,110,115,101,32,105,115,32,114,101,99,101,105,118,101,100,32,98,111,116,104,32,116,104,101,32,97,108,105,97,115,32,97,110,100,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,109,111,118,101,100,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,114,101,115,112,111,110,115,101,32,105,115,32,97,32,114,101,112,108,121,32,111,114,32,97,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,46,32,84,104,101,32,97,108,105,97,115,32,99,97,110,32,97,108,115,111,32,115,116,105,108,108,32,98,101,32,100,101,97,99,116,105,118,97,116,101,100,32,118,105,97,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<46,32,78,111,116,101,32,116,104,97,116,32,105,102,32,116,104,101,32,97,108,105,97,115,32,105,115,32,114,101,109,111,118,101,100,32,117,115,105,110,103,32,116,104,101,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<32,66,73,70,44,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,115,116,105,108,108,32,98,101,32,108,101,102,116,32,97,99,116,105,118,101,46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<115,101,114,118,101,114,40,41,32,45,62,10,32,32,32,32,114,101,99,101,105,118,101,10,32,32,32,32,32,32,32,32,123,114,101,113,117,101,115,116,44,32,65,108,105,97,115,82,101,113,73,100,44,32,82,101,113,117,101,115,116,125,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,82,101,115,117,108,116,32,61,32,112,101,114,102,111,114,109,95,114,101,113,117,101,115,116,40,82,101,113,117,101,115,116,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,65,108,105,97,115,82,101,113,73,100,32,33,32,123,114,101,112,108,121,44,32,65,108,105,97,115,82,101,113,73,100,44,32,82,101,115,117,108,116,125,10,32,32,32,32,101,110,100,44,10,32,32,32,32,115,101,114,118,101,114,40,41,46,10,10,99,108,105,101,110,116,40,83,101,114,118,101,114,80,105,100,44,32,82,101,113,117,101,115,116,41,32,45,62,10,32,32,32,32,65,108,105,97,115,77,111,110,82,101,113,73,100,32,61,32,109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,83,101,114,118,101,114,80,105,100,44,32,91,123,97,108,105,97,115,44,32,114,101,112,108,121,95,100,101,109,111,110,105,116,111,114,125,93,41,44,10,32,32,32,32,83,101,114,118,101,114,80,105,100,32,33,32,123,114,101,113,117,101,115,116,44,32,65,108,105,97,115,77,111,110,82,101,113,73,100,44,32,82,101,113,117,101,115,116,125,44,10,32,32,32,32,37,37,32,65,108,105,97,115,32,97,115,32,119,101,108,108,32,97,115,32,109,111,110,105,116,111,114,32,119,105,108,108,32,98,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,97,99,116,105,118,97,116,101,100,32,105,102,32,119,101,10,32,32,32,32,37,37,32,114,101,99,101,105,118,101,32,97,32,114,101,112,108,121,32,111,114,32,97,32,39,68,79,87,78,39,32,109,101,115,115,97,103,101,32,115,105,110,99,101,32,119,101,32,117,115,101,100,32,39,114,101,112,108,121,95,100,101,109,111,110,105,116,111,114,39,10,32,32,32,32,37,37,32,97,115,32,117,110,97,108,105,97,115,32,111,112,116,105,111,110,46,46,46,10,32,32,32,32,114,101,99,101,105,118,101,10,32,32,32,32,32,32,32,32,123,114,101,112,108,121,44,32,65,108,105,97,115,77,111,110,82,101,113,73,100,44,32,82,101,115,117,108,116,125,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,82,101,115,117,108,116,59,10,32,32,32,32,32,32,32,32,123,39,68,79,87,78,39,44,32,65,108,105,97,115,77,111,110,82,101,113,73,100,44,32,112,114,111,99,101,115,115,44,32,83,101,114,118,101,114,80,105,100,44,32,69,120,105,116,82,101,97,115,111,110,125,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,101,114,114,111,114,40,69,120,105,116,82,101,97,115,111,110,41,10,32,32,32,32,101,110,100,46,10,9,32,32,32,32>>]}]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,98,111,116,104,32,116,104,101,32,115,101,114,118,101,114,32,97,110,100,32,116,104,101,32,99,108,105,101,110,116,32,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,32,109,117,115,116,32,98,101,32,101,120,101,99,117,116,105,110,103,32,111,110,32,97,116,32,108,101,97,115,116,32,79,84,80,32,50,52,32,115,121,115,116,101,109,115,32,105,110,32,111,114,100,101,114,32,102,111,114,32,116,104,105,115,32,116,111,32,119,111,114,107,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,112,114,111,99,101,115,115,32,97,108,105,97,115,101,115,32,115,101,101,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,112,114,111,99,101,115,115,45,97,108,105,97,115,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{i,[],[<<80,114,111,99,101,115,115,32,65,108,105,97,115,101,115>>]}]},<<32,115,101,99,116,105,111,110,32,111,102,32,116,104,101,32>>,{i,[],[<<69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,116,97,103,44,32,85,115,101,114,68,101,102,105,110,101,100,84,97,103,125>>]}]},{dd,[],[{p,[],[<<82,101,112,108,97,99,101,32,116,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<84,97,103>>]},<<32,119,105,116,104,32>>,{code,[],[<<85,115,101,114,68,101,102,105,110,101,100,84,97,103>>]},<<32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<109,111,110,105,116,111,114,32,109,101,115,115,97,103,101>>]},<<32,100,101,108,105,118,101,114,101,100,32,119,104,101,110,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,116,114,105,103,103,101,114,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32,109,111,110,105,116,111,114,105,110,103,32,97,32,112,114,111,99,101,115,115,44,32,116,104,101,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,116,97,103,32,105,110,32,116,104,101,32,100,111,119,110,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,114,101,112,108,97,99,101,100,32,98,121,32>>,{code,[],[<<85,115,101,114,68,101,102,105,110,101,100,84,97,103>>]},<<46>>]},{p,[],[<<65,110,32,101,120,97,109,112,108,101,32,111,102,32,104,111,119,32,116,104,101,32>>,{code,[],[<<123,116,97,103,44,32,85,115,101,114,68,101,102,105,110,101,100,84,97,103,125>>]},<<32,111,112,116,105,111,110,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,101,110,97,98,108,101,32,116,104,101,32,110,101,119,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,112,114,111,99,101,115,115,101,115,35,114,101,99,101,105,118,105,110,103,45,109,101,115,115,97,103,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,101,108,101,99,116,105,118,101,32,114,101,99,101,105,118,101,32,111,112,116,105,109,105,122,97,116,105,111,110>>]},<<44,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,79,84,80,32,50,52,44,32,119,104,101,110,32,109,97,107,105,110,103,32,109,117,108,116,105,112,108,101,32,114,101,113,117,101,115,116,115,32,116,111,32,100,105,102,102,101,114,101,110,116,32,115,101,114,118,101,114,115,58>>]},{pre,[],[{code,[],[<<115,101,114,118,101,114,40,41,32,45,62,10,32,32,32,32,114,101,99,101,105,118,101,10,32,32,32,32,32,32,32,32,123,114,101,113,117,101,115,116,44,32,70,114,111,109,44,32,82,101,113,73,100,44,32,82,101,113,117,101,115,116,125,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,82,101,115,117,108,116,32,61,32,112,101,114,102,111,114,109,95,114,101,113,117,101,115,116,40,82,101,113,117,101,115,116,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,70,114,111,109,32,33,32,123,114,101,112,108,121,44,32,115,101,108,102,40,41,44,32,82,101,113,73,100,44,32,82,101,115,117,108,116,125,10,32,32,32,32,101,110,100,44,10,32,32,32,32,115,101,114,118,101,114,40,41,46,10,10,99,108,105,101,110,116,40,83,101,114,118,101,114,80,105,100,115,44,32,82,101,113,117,101,115,116,41,32,119,104,101,110,32,105,115,95,108,105,115,116,40,83,101,114,118,101,114,80,105,100,115,41,32,45,62,10,32,32,32,32,82,101,113,73,100,32,61,32,109,97,107,101,95,114,101,102,40,41,44,10,32,32,32,32,108,105,115,116,115,58,102,111,114,101,97,99,104,40,102,117,110,32,40,83,101,114,118,101,114,80,105,100,41,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,95,32,61,32,109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,83,101,114,118,101,114,80,105,100,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,91,123,116,97,103,44,32,123,39,68,79,87,78,39,44,32,82,101,113,73,100,125,125,93,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,83,101,114,118,101,114,80,105,100,32,33,32,123,114,101,113,117,101,115,116,44,32,115,101,108,102,40,41,44,32,82,101,113,73,100,44,32,82,101,113,117,101,115,116,125,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,83,101,114,118,101,114,80,105,100,115,41,44,10,32,32,32,32,114,101,99,101,105,118,101,95,114,101,112,108,105,101,115,40,82,101,113,73,100,44,32,108,101,110,103,116,104,40,83,101,114,118,101,114,80,105,100,115,41,44,32,91,93,41,46,10,10,114,101,99,101,105,118,101,95,114,101,112,108,105,101,115,40,95,82,101,113,73,100,44,32,48,44,32,65,99,99,41,32,45,62,10,32,32,32,32,65,99,99,59,10,114,101,99,101,105,118,101,95,114,101,112,108,105,101,115,40,82,101,113,73,100,44,32,78,44,32,65,99,99,41,32,45,62,10,32,32,32,32,37,37,32,84,104,101,32,99,111,109,112,105,108,101,114,32,119,105,108,108,32,100,101,116,101,99,116,32,116,104,97,116,32,119,101,32,109,97,116,99,104,32,111,110,32,116,104,101,32,39,82,101,113,73,100,39,10,32,32,32,32,37,37,32,114,101,102,101,114,101,110,99,101,32,105,110,32,97,108,108,32,99,108,97,117,115,101,115,44,32,97,110,100,32,119,105,108,108,32,101,110,97,98,108,101,32,116,104,101,32,115,101,108,101,99,116,105,118,101,10,32,32,32,32,37,37,32,114,101,99,101,105,118,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,119,104,105,99,104,32,109,97,107,101,115,32,116,104,101,32,114,101,99,101,105,118,101,32,97,98,108,101,32,116,111,10,32,32,32,32,37,37,32,115,107,105,112,32,112,97,115,116,32,97,108,108,32,109,101,115,115,97,103,101,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,116,10,32,32,32,32,37,37,32,116,104,101,32,116,105,109,101,32,119,104,101,110,32,116,104,101,32,39,82,101,113,73,100,39,32,114,101,102,101,114,101,110,99,101,32,119,97,115,32,99,114,101,97,116,101,100,46,46,46,10,32,32,32,32,82,101,115,32,61,32,114,101,99,101,105,118,101,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,114,101,112,108,121,44,32,83,101,114,118,101,114,80,105,100,44,32,82,101,113,73,100,44,32,82,101,115,117,108,116,125,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,37,37,32,72,101,114,101,32,119,101,32,116,121,112,105,99,97,108,108,121,32,119,111,117,108,100,32,104,97,118,101,32,100,101,97,99,116,105,118,97,116,101,100,32,116,104,101,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,37,37,32,109,111,110,105,116,111,114,32,98,121,32,97,32,99,97,108,108,32,116,111,32,100,101,109,111,110,105,116,111,114,40,77,111,110,44,32,91,102,108,117,115,104,93,41,32,98,117,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,37,37,32,119,101,32,105,103,110,111,114,101,32,116,104,105,115,32,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,32,102,111,114,32,115,105,109,112,108,105,99,105,116,121,46,46,46,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,111,107,44,32,83,101,114,118,101,114,80,105,100,44,32,82,101,115,117,108,116,125,59,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,123,39,68,79,87,78,39,44,32,82,101,113,73,100,125,44,32,95,77,111,110,44,32,112,114,111,99,101,115,115,44,32,83,101,114,118,101,114,80,105,100,44,32,69,120,105,116,82,101,97,115,111,110,125,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,123,101,114,114,111,114,44,32,83,101,114,118,101,114,80,105,100,44,32,69,120,105,116,82,101,97,115,111,110,125,10,32,32,32,32,32,32,32,32,32,32,101,110,100,44,10,32,32,32,32,114,101,99,101,105,118,101,95,114,101,112,108,105,101,115,40,82,101,113,73,100,44,32,78,45,49,44,32,91,82,101,115,32,124,32,65,99,99,93,41,46,10,9,32,32,32,32>>]}]},{p,[],[<<73,110,32,111,114,100,101,114,32,102,111,114,32,116,104,105,115,32,101,120,97,109,112,108,101,32,116,111,32,119,111,114,107,32,97,115,32,105,110,116,101,110,100,101,100,44,32,116,104,101,32,99,108,105,101,110,116,32,109,117,115,116,32,98,101,32,101,120,101,99,117,116,105,110,103,32,111,110,32,97,116,32,108,101,97,115,116,32,97,110,32,79,84,80,32,50,52,32,115,121,115,116,101,109,44,32,98,117,116,32,116,104,101,32,115,101,114,118,101,114,115,32,109,97,121,32,101,120,101,99,117,116,101,32,111,110,32,111,108,100,101,114,32,115,121,115,116,101,109,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,50,49,53>>,signature => [{attribute,{1416,2},spec,{{monitor,3},[{type,{1417,7},bounded_fun,[{type,{1417,7},'fun',[{type,{1417,7},product,[{atom,{1417,8},process},{user_type,{1417,17},monitor_process_identifier,[]},{type,{1417,47},list,[{user_type,{1417,48},monitor_option,[]}]}]},{var,{1417,70},'MonitorRef'}]},[{type,{1418,9},constraint,[{atom,{1418,9},is_subtype},[{var,{1418,9},'MonitorRef'},{type,{1418,23},reference,[]}]]}]]},{type,{1419,7},bounded_fun,[{type,{1419,7},'fun',[{type,{1419,7},product,[{atom,{1419,8},port},{user_type,{1419,14},monitor_port_identifier,[]},{type,{1419,41},list,[{user_type,{1419,42},monitor_option,[]}]}]},{var,{1419,64},'MonitorRef'}]},[{type,{1420,9},constraint,[{atom,{1420,9},is_subtype},[{var,{1420,9},'MonitorRef'},{type,{1420,23},reference,[]}]]}]]},{type,{1421,7},bounded_fun,[{type,{1421,7},'fun',[{type,{1421,7},product,[{atom,{1421,8},time_offset},{atom,{1421,21},clock_service},{type,{1421,36},list,[{user_type,{1421,37},monitor_option,[]}]}]},{var,{1421,59},'MonitorRef'}]},[{type,{1422,9},constraint,[{atom,{1422,9},is_subtype},[{var,{1422,9},'MonitorRef'},{type,{1422,23},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,monitor_node,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1428}],[<<109,111,110,105,116,111,114,95,110,111,100,101,47,50>>],#{<<101,110>> => [{p,[],[<<77,111,110,105,116,111,114,32,116,104,101,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,108,97,103>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,110,46,32,73,102,32>>,{code,[],[<<70,108,97,103>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,109,111,110,105,116,111,114,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,102,102,46>>]},{p,[],[<<77,97,107,105,110,103,32,115,101,118,101,114,97,108,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,95,110,111,100,101,40,78,111,100,101,44,32,116,114,117,101,41>>]},<<32,102,111,114,32,116,104,101,32,115,97,109,101,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,114,114,111,114,59,32,105,116,32,114,101,115,117,108,116,115,32,105,110,32,97,115,32,109,97,110,121,32,105,110,100,101,112,101,110,100,101,110,116,32,109,111,110,105,116,111,114,105,110,103,32,105,110,115,116,97,110,99,101,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,102,97,105,108,115,32,111,114,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,110,111,100,101,100,111,119,110,44,32,78,111,100,101,125>>]},<<32,105,115,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,46,32,73,102,32,97,32,112,114,111,99,101,115,115,32,104,97,115,32,109,97,100,101,32,116,119,111,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<109,111,110,105,116,111,114,95,110,111,100,101,40,78,111,100,101,44,32,116,114,117,101,41>>]},<<32,97,110,100,32>>,{code,[],[<<78,111,100,101>>]},<<32,116,101,114,109,105,110,97,116,101,115,44,32,116,119,111,32>>,{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,109,101,115,115,97,103,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,101,114,101,32,105,115,32,110,111,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32>>,{code,[],[<<78,111,100,101>>]},<<44,32,97,110,32,97,116,116,101,109,112,116,32,105,115,32,109,97,100,101,32,116,111,32,99,114,101,97,116,101,32,111,110,101,46,32,73,102,32,116,104,105,115,32,102,97,105,108,115,44,32,97,32>>,{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,100,101,108,105,118,101,114,101,100,46>>]},{p,[],[<<84,104,101,32,100,101,108,105,118,101,114,121,32,111,102,32,116,104,101,32>>,{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,115,105,103,110,97,108,32,105,115,32,110,111,116,32,111,114,100,101,114,101,100,32,119,105,116,104,32,114,101,115,112,101,99,116,32,116,111,32,111,116,104,101,114,32,108,105,110,107,32,111,114,32,109,111,110,105,116,111,114,32,115,105,103,110,97,108,115,32,102,114,111,109,32,116,104,101,32,110,111,100,101,32,116,104,97,116,32,103,111,101,115,32,100,111,119,110,46,32,73,102,32,121,111,117,32,110,101,101,100,32,97,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,97,108,108,32,115,105,103,110,97,108,115,32,102,114,111,109,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,32,104,97,115,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,101,32>>,{code,[],[<<110,111,100,101,100,111,119,110>>]},<<32,115,105,103,110,97,108,32,105,115,32,115,101,110,116,44,32,121,111,117,32,115,104,111,117,108,100,32,117,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,110,101,116,95,107,101,114,110,101,108,35,109,111,110,105,116,111,114,95,110,111,100,101,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,101,116,95,107,101,114,110,101,108,58,109,111,110,105,116,111,114,95,110,111,100,101,115,47,49>>]}]},<<46>>]},{p,[],[<<78,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,104,114,111,117,103,104,32,104,105,100,100,101,110,32,99,111,110,110,101,99,116,105,111,110,115,32,99,97,110,32,98,101,32,109,111,110,105,116,111,114,101,100,32,97,115,32,97,110,121,32,111,116,104,101,114,32,110,111,100,101,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<110,111,116,97,108,105,118,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,51,56,49>>,signature => [{attribute,{1428,2},spec,{{monitor_node,2},[{type,{1428,19},bounded_fun,[{type,{1428,19},'fun',[{type,{1428,19},product,[{var,{1428,20},'Node'},{var,{1428,26},'Flag'}]},{atom,{1428,35},true}]},[{type,{1429,7},constraint,[{atom,{1429,7},is_subtype},[{var,{1429,7},'Node'},{type,{1429,15},node,[]}]]},{type,{1430,7},constraint,[{atom,{1430,7},is_subtype},[{var,{1430,7},'Flag'},{type,{1430,15},boolean,[]}]]}]]}]}}]}},{{function,monitor_node,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1435}],[<<109,111,110,105,116,111,114,95,110,111,100,101,47,51>>],#{<<101,110>> => [{p,[],[<<66,101,104,97,118,101,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,95,110,111,100,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,95,110,111,100,101,47,50>>]}]},<<32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,97,108,108,111,119,115,32,97,110,32,101,120,116,114,97,32,111,112,116,105,111,110,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,44,32,110,97,109,101,108,121,32>>,{code,[],[<<97,108,108,111,119,95,112,97,115,115,105,118,101,95,99,111,110,110,101,99,116>>]},<<46,32,84,104,105,115,32,111,112,116,105,111,110,32,97,108,108,111,119,115,32,116,104,101,32,66,73,70,32,116,111,32,119,97,105,116,32,116,104,101,32,110,111,114,109,97,108,32,110,101,116,119,111,114,107,32,99,111,110,110,101,99,116,105,111,110,32,116,105,109,101,45,111,117,116,32,102,111,114,32,116,104,101,32>>,{em,[],[<<109,111,110,105,116,111,114,101,100,32,110,111,100,101>>]},<<32,116,111,32,99,111,110,110,101,99,116,32,105,116,115,101,108,102,44,32,101,118,101,110,32,105,102,32,105,116,32,99,97,110,110,111,116,32,98,101,32,97,99,116,105,118,101,108,121,32,99,111,110,110,101,99,116,101,100,32,102,114,111,109,32,116,104,105,115,32,110,111,100,101,32,40,116,104,97,116,32,105,115,44,32,105,116,32,105,115,32,98,108,111,99,107,101,100,41,46,32,84,104,101,32,115,116,97,116,101,32,119,104,101,114,101,32,116,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,99,97,110,32,111,110,108,121,32,98,101,32,97,99,104,105,101,118,101,100,32,98,121,32,117,115,105,110,103,32,116,104,101,32,75,101,114,110,101,108,32,111,112,116,105,111,110,32>>,{code,[],[<<100,105,115,116,95,97,117,116,111,95,99,111,110,110,101,99,116,32,111,110,99,101>>]},<<46,32,73,102,32,116,104,97,116,32,111,112,116,105,111,110,32,105,115,32,110,111,116,32,117,115,101,100,44,32,111,112,116,105,111,110,32>>,{code,[],[<<97,108,108,111,119,95,112,97,115,115,105,118,101,95,99,111,110,110,101,99,116>>]},<<32,104,97,115,32,110,111,32,101,102,102,101,99,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<97,108,108,111,119,95,112,97,115,115,105,118,101,95,99,111,110,110,101,99,116>>]},<<32,105,115,32,117,115,101,100,32,105,110,116,101,114,110,97,108,108,121,32,97,110,100,32,105,115,32,115,101,108,100,111,109,32,110,101,101,100,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,115,32,119,104,101,114,101,32,116,104,101,32,110,101,116,119,111,114,107,32,116,111,112,111,108,111,103,121,32,97,110,100,32,116,104,101,32,75,101,114,110,101,108,32,111,112,116,105,111,110,115,32,105,110,32,101,102,102,101,99,116,32,97,114,101,32,107,110,111,119,110,32,105,110,32,97,100,118,97,110,99,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,32,111,114,32,116,104,101,32,111,112,116,105,111,110,32,108,105,115,116,32,105,115,32,109,97,108,102,111,114,109,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,52,49,49>>,signature => [{attribute,{1435,2},spec,{{erlang,monitor_node,3},[{type,{1435,26},bounded_fun,[{type,{1435,26},'fun',[{type,{1435,26},product,[{var,{1435,27},'Node'},{var,{1435,33},'Flag'},{var,{1435,39},'Options'}]},{atom,{1435,51},true}]},[{type,{1436,7},constraint,[{atom,{1436,7},is_subtype},[{var,{1436,7},'Node'},{type,{1436,15},node,[]}]]},{type,{1437,7},constraint,[{atom,{1437,7},is_subtype},[{var,{1437,7},'Flag'},{type,{1437,15},boolean,[]}]]},{type,{1438,7},constraint,[{atom,{1438,7},is_subtype},[{var,{1438,7},'Options'},{type,{1438,18},list,[{var,{1438,19},'Option'}]}]]},{type,{1439,7},constraint,[{atom,{1439,7},is_subtype},[{var,{1439,7},'Option'},{atom,{1439,17},allow_passive_connect}]]}]]}]}}]}},{{function,monotonic_time,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1537}],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46,32,84,104,105,115,32,105,115,32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,115,105,110,99,101,32,115,111,109,101,32,117,110,115,112,101,99,105,102,105,101,100,32,112,111,105,110,116,32,105,110,32,116,105,109,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,105,115,32,97,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,111,110,111,116,111,110,105,99,97,108,108,121,95,73,110,99,114,101,97,115,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103>>]},<<32,116,105,109,101,44,32,98,117,116,32>>,{em,[],[<<110,111,116>>]},<<32,97,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,116,114,105,99,116,108,121,95,77,111,110,111,116,111,110,105,99,97,108,108,121,95,73,110,99,114,101,97,115,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103>>]},<<32,116,105,109,101,46,32,84,104,97,116,32,105,115,44,32,99,111,110,115,101,99,117,116,105,118,101,32,99,97,108,108,115,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>]},<<32,99,97,110,32,112,114,111,100,117,99,101,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,46>>]},{p,[],[<<68,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,115,32,119,105,108,108,32,117,115,101,32,100,105,102,102,101,114,101,110,116,32,117,110,115,112,101,99,105,102,105,101,100,32,112,111,105,110,116,115,32,105,110,32,116,105,109,101,32,97,115,32,98,97,115,101,32,102,111,114,32,116,104,101,105,114,32,69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,99,108,111,99,107,115,46,32,84,104,97,116,32,105,115,44,32,105,116,32,105,115,32>>,{em,[],[<<112,111,105,110,116,108,101,115,115>>]},<<32,99,111,109,112,97,114,105,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,115,32,102,114,111,109,32,100,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,115,46,32,68,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,115,32,99,97,110,32,97,108,115,111,32,112,108,97,99,101,32,116,104,105,115,32,117,110,115,112,101,99,105,102,105,101,100,32,112,111,105,110,116,32,105,110,32,116,105,109,101,32,100,105,102,102,101,114,101,110,116,32,114,101,108,97,116,105,118,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,46,32,73,116,32,99,97,110,32,98,101,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,32,40,116,105,109,101,32,97,116,32,115,116,97,114,116,32,105,115,32,97,32,110,101,103,97,116,105,118,101,32,118,97,108,117,101,41,44,32,116,104,101,32,112,97,115,116,32,40,116,105,109,101,32,97,116,32,115,116,97,114,116,32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,118,97,108,117,101,41,44,32,111,114,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,32,40,116,105,109,101,32,97,116,32,115,116,97,114,116,32,105,115,32,122,101,114,111,41,46,32,84,104,101,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,97,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,116,97,114,116,95,116,105,109,101,41>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,52,51,55>>,signature => [{attribute,{1537,2},spec,{{erlang,monotonic_time,0},[{type,{1537,28},'fun',[{type,{1537,28},product,[]},{type,{1537,34},integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,monotonic_time,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1542}],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,99,111,110,118,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32>>,{code,[],[<<85,110,105,116>>]},<<32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{p,[],[<<83,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]}]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<32>>,{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,41>>]}]},{code,[],[<<44,32,110,97,116,105,118,101,44,32,85,110,105,116,41>>]},<<44,32,104,111,119,101,118,101,114,32,111,112,116,105,109,105,122,101,100,32,102,111,114,32,99,111,109,109,111,110,108,121,32,117,115,101,100,32>>,{code,[],[<<85,110,105,116>>]},<<115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,52,55,49>>,signature => [{attribute,{1542,2},spec,{{erlang,monotonic_time,1},[{type,{1542,28},bounded_fun,[{type,{1542,28},'fun',[{type,{1542,28},product,[{var,{1542,29},'Unit'}]},{type,{1542,38},integer,[]}]},[{type,{1543,7},constraint,[{atom,{1543,7},is_subtype},[{var,{1543,7},'Unit'},{user_type,{1543,15},time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,nif_error,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1445}],[<<110,105,102,95,101,114,114,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<87,111,114,107,115,32,101,120,97,99,116,108,121,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,47,49>>]}]},<<44,32,98,117,116,32,68,105,97,108,121,122,101,114,32,116,104,105,110,107,115,32,116,104,97,116,32,116,104,105,115,32,66,73,70,32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,97,114,98,105,116,114,97,114,121,32,116,101,114,109,46,32,87,104,101,110,32,117,115,101,100,32,105,110,32,97,32,115,116,117,98,32,102,117,110,99,116,105,111,110,32,102,111,114,32,97,32,78,73,70,32,116,111,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,32,119,104,101,110,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,32,105,115,32,110,111,116,32,108,111,97,100,101,100,44,32,68,105,97,108,121,122,101,114,32,100,111,101,115,32,110,111,116,32,103,101,110,101,114,97,116,101,32,102,97,108,115,101,32,119,97,114,110,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,52,56,57>>,signature => [{attribute,{1445,2},spec,{{erlang,nif_error,1},[{type,{1445,23},bounded_fun,[{type,{1445,23},'fun',[{type,{1445,23},product,[{var,{1445,24},'Reason'}]},{type,{1445,35},no_return,[]}]},[{type,{1446,7},constraint,[{atom,{1446,7},is_subtype},[{var,{1446,7},'Reason'},{type,{1446,17},term,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,nif_error,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1452}],[<<110,105,102,95,101,114,114,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<87,111,114,107,115,32,101,120,97,99,116,108,121,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,114,114,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,114,111,114,47,50>>]}]},<<44,32,98,117,116,32,68,105,97,108,121,122,101,114,32,116,104,105,110,107,115,32,116,104,97,116,32,116,104,105,115,32,66,73,70,32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,97,114,98,105,116,114,97,114,121,32,116,101,114,109,46,32,87,104,101,110,32,117,115,101,100,32,105,110,32,97,32,115,116,117,98,32,102,117,110,99,116,105,111,110,32,102,111,114,32,97,32,78,73,70,32,116,111,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,32,119,104,101,110,32,116,104,101,32,78,73,70,32,108,105,98,114,97,114,121,32,105,115,32,110,111,116,32,108,111,97,100,101,100,44,32,68,105,97,108,121,122,101,114,32,100,111,101,115,32,110,111,116,32,103,101,110,101,114,97,116,101,32,102,97,108,115,101,32,119,97,114,110,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,53,48,50>>,signature => [{attribute,{1452,2},spec,{{erlang,nif_error,2},[{type,{1452,23},bounded_fun,[{type,{1452,23},'fun',[{type,{1452,23},product,[{var,{1452,24},'Reason'},{var,{1452,32},'Args'}]},{type,{1452,41},no_return,[]}]},[{type,{1453,7},constraint,[{atom,{1453,7},is_subtype},[{var,{1453,7},'Reason'},{type,{1453,17},term,[]}]]},{type,{1454,7},constraint,[{atom,{1454,7},is_subtype},[{var,{1454,7},'Args'},{type,{1454,15},list,[{type,{1454,16},term,[]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,node,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1460}],[<<110,111,100,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,73,102,32,116,104,101,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<110,111,110,111,100,101,64,110,111,104,111,115,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,53,49,53>>,signature => [{attribute,{1460,2},spec,{{node,0},[{type,{1460,11},bounded_fun,[{type,{1460,11},'fun',[{type,{1460,11},product,[]},{var,{1460,17},'Node'}]},[{type,{1461,7},constraint,[{atom,{1461,7},is_subtype},[{var,{1461,7},'Node'},{type,{1461,15},node,[]}]]}]]}]}}]}},{{function,node,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1467}],[<<110,111,100,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,111,100,101,32,119,104,101,114,101,32>>,{code,[],[<<65,114,103>>]},<<32,111,114,105,103,105,110,97,116,101,115,46,32>>,{code,[],[<<65,114,103>>]},<<32,99,97,110,32,98,101,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,97,32,114,101,102,101,114,101,110,99,101,44,32,111,114,32,97,32,112,111,114,116,46,32,73,102,32>>,{code,[],[<<65,114,103>>]},<<32,111,114,105,103,105,110,97,116,101,115,32,102,114,111,109,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,110,100,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<110,111,110,111,100,101,64,110,111,104,111,115,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,53,50,53>>,signature => [{attribute,{1467,2},spec,{{node,1},[{type,{1467,11},bounded_fun,[{type,{1467,11},'fun',[{type,{1467,11},product,[{var,{1467,12},'Arg'}]},{var,{1467,20},'Node'}]},[{type,{1468,7},constraint,[{atom,{1468,7},is_subtype},[{var,{1468,7},'Arg'},{type,{1468,14},union,[{type,{1468,14},pid,[]},{type,{1468,22},port,[]},{type,{1468,31},reference,[]}]}]]},{type,{1469,7},constraint,[{atom,{1469,7},is_subtype},[{var,{1469,7},'Node'},{type,{1469,15},node,[]}]]}]]}]}}]}},{{function,nodes,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3432}],[<<110,111,100,101,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,108,108,32,110,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,32,116,104,114,111,117,103,104,32,110,111,114,109,97,108,32,99,111,110,110,101,99,116,105,111,110,115,32,40,116,104,97,116,32,105,115,44,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,105,115,116,114,105,98,117,116,101,100,35,104,105,100,100,101,110,45,110,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<104,105,100,100,101,110,32,110,111,100,101,115>>]},<<32,97,114,101,32,110,111,116,32,108,105,115,116,101,100,41,46,32,83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,110,111,100,101,115,95,118,105,115,105,98,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<110,111,100,101,115,40,118,105,115,105,98,108,101,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,53,51,56>>,signature => [{attribute,{3432,2},spec,{{nodes,0},[{type,{3432,12},bounded_fun,[{type,{3432,12},'fun',[{type,{3432,12},product,[]},{var,{3432,18},'Nodes'}]},[{type,{3433,7},constraint,[{atom,{3433,7},is_subtype},[{var,{3433,7},'Nodes'},{type,{3433,16},list,[{type,{3433,17},node,[]}]}]]}]]}]}}]}},{{function,nodes,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2311}],[<<110,111,100,101,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,110,111,100,101,115,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102,105,101,100,46,32,84,104,101,32,114,101,116,117,114,110,101,100,32,114,101,115,117,108,116,44,32,119,104,101,110,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,108,105,115,116,44,32,105,115,32,116,104,101,32,108,105,115,116,32,111,102,32,110,111,100,101,115,32,115,97,116,105,115,102,121,105,110,103,32,116,104,101,32,100,105,115,106,117,110,99,116,105,111,110,40,115,41,32,111,102,32,116,104,101,32,108,105,115,116,32,101,108,101,109,101,110,116,115,46>>]},{p,[],[{code,[],[<<78,111,100,101,84,121,112,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{a,[{id,<<110,111,100,101,115,95,118,105,115,105,98,108,101>>}],[]},{code,[],[<<118,105,115,105,98,108,101>>]}]},{dd,[],[{p,[],[<<78,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,32,116,104,114,111,117,103,104,32,110,111,114,109,97,108,32,99,111,110,110,101,99,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<104,105,100,100,101,110>>]}]},{dd,[],[{p,[],[<<78,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,32,116,104,114,111,117,103,104,32,104,105,100,100,101,110,32,99,111,110,110,101,99,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<99,111,110,110,101,99,116,101,100>>]}]},{dd,[],[{p,[],[<<65,108,108,32,110,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,105,115,32,110,111,100,101,46>>]}]},{dt,[],[{code,[],[<<116,104,105,115>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,110,111,100,101,46>>]}]},{dt,[],[{code,[],[<<107,110,111,119,110>>]}]},{dd,[],[{p,[],[<<78,111,100,101,115,32,116,104,97,116,32,97,114,101,32,107,110,111,119,110,32,116,111,32,116,104,105,115,32,110,111,100,101,46,32,84,104,97,116,32,105,115,44,32,99,111,110,110,101,99,116,101,100,32,110,111,100,101,115,32,97,110,100,32,110,111,100,101,115,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,44,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,44,32,97,110,100,32,114,101,102,101,114,101,110,99,101,115,32,108,111,99,97,116,101,100,32,111,110,32,116,104,105,115,32,110,111,100,101,46,32,84,104,101,32,115,101,116,32,111,102,32,107,110,111,119,110,32,110,111,100,101,115,32,105,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,99,97,110,32,98,101,32,100,101,108,97,121,101,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99,41>>]}]},<<46>>]}]}]},{p,[],[<<83,111,109,101,32,101,113,117,97,108,105,116,105,101,115,58,32>>,{code,[],[<<91,110,111,100,101,40,41,93,32,61,32,110,111,100,101,115,40,116,104,105,115,41>>]},<<44,32>>,{code,[],[<<110,111,100,101,115,40,99,111,110,110,101,99,116,101,100,41,32,61,32,110,111,100,101,115,40,91,118,105,115,105,98,108,101,44,32,104,105,100,100,101,110,93,41>>]},<<44,32,97,110,100,32>>,{code,[],[<<110,111,100,101,115,40,41,32,61,32,110,111,100,101,115,40,118,105,115,105,98,108,101,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,53,53,48>>,signature => [{attribute,{2311,2},spec,{{nodes,1},[{type,{2311,12},bounded_fun,[{type,{2311,12},'fun',[{type,{2311,12},product,[{var,{2311,13},'Arg'}]},{var,{2311,21},'Nodes'}]},[{type,{2312,7},constraint,[{atom,{2312,7},is_subtype},[{var,{2312,7},'Arg'},{type,{2312,14},union,[{var,{2312,14},'NodeType'},{type,{2312,25},list,[{var,{2312,26},'NodeType'}]}]}]]},{type,{2313,7},constraint,[{atom,{2313,7},is_subtype},[{var,{2313,7},'NodeType'},{type,{2313,19},union,[{atom,{2313,19},visible},{atom,{2313,29},hidden},{atom,{2313,38},connected},{atom,{2313,50},this},{atom,{2313,57},known}]}]]},{type,{2314,7},constraint,[{atom,{2314,7},is_subtype},[{var,{2314,7},'Nodes'},{type,{2314,16},list,[{type,{2314,17},node,[]}]}]]}]]}]}}]}},{{function,now,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1474}],[<<110,111,119,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<116,105,109,101,115,116,97,109,112>>}],[]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[{em,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,68,111,32,110,111,116,32,117,115,101,32,105,116,46>>]}]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<84,105,109,101,32,97,110,100,32,84,105,109,101,32,67,111,114,114,101,99,116,105,111,110>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46,32,83,112,101,99,105,102,105,99,97,108,108,121,44,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,68,111,115,95,97,110,100,95,68,111,110,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<68,111,115,32,97,110,100,32,68,111,110,116,39,115>>]},<<32,100,101,115,99,114,105,98,101,115,32,119,104,97,116,32,116,111,32,117,115,101,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,47,48>>]},<<46>>]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,77,101,103,97,83,101,99,115,44,32,83,101,99,115,44,32,77,105,99,114,111,83,101,99,115,125>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,101,108,97,112,115,101,100,32,116,105,109,101,32,115,105,110,99,101,32,48,48,58,48,48,32,71,77,84,44,32,74,97,110,117,97,114,121,32,49,44,32,49,57,55,48,32,40,122,101,114,111,32,104,111,117,114,41,44,32,105,102,32,112,114,111,118,105,100,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32,115,111,109,101,32,111,116,104,101,114,32,112,111,105,110,116,32,105,110,32,116,105,109,101,32,105,115,32,99,104,111,115,101,110,46,32,73,116,32,105,115,32,97,108,115,111,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,115,32,116,111,32,116,104,105,115,32,66,73,70,32,114,101,116,117,114,110,32,99,111,110,116,105,110,117,111,117,115,108,121,32,105,110,99,114,101,97,115,105,110,103,32,118,97,108,117,101,115,46,32,72,101,110,99,101,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,102,114,111,109,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,47,48>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,103,101,110,101,114,97,116,101,32,117,110,105,113,117,101,32,116,105,109,101,32,115,116,97,109,112,115,46,32,73,102,32,105,116,32,105,115,32,99,97,108,108,101,100,32,105,110,32,97,32,116,105,103,104,116,32,108,111,111,112,32,111,110,32,97,32,102,97,115,116,32,109,97,99,104,105,110,101,44,32,116,104,101,32,116,105,109,101,32,111,102,32,116,104,101,32,110,111,100,101,32,99,97,110,32,98,101,99,111,109,101,32,115,107,101,119,101,100,46>>]},{p,[],[<<67,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,116,111,32,99,104,101,99,107,32,116,104,101,32,108,111,99,97,108,32,116,105,109,101,32,111,102,32,100,97,121,32,105,102,32,116,104,101,32,116,105,109,101,45,122,111,110,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,102,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,32,105,115,32,112,114,111,112,101,114,108,121,32,99,111,110,102,105,103,117,114,101,100,46>>]}]},#{deprecated => <<101,114,108,97,110,103,58,110,111,119,47,48,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32,115,101,101,32,116,104,101,32,34,84,105,109,101,32,97,110,100,32,84,105,109,101,32,67,111,114,114,101,99,116,105,111,110,32,105,110,32,69,114,108,97,110,103,34,32,99,104,97,112,116,101,114,32,111,102,32,116,104,101,32,69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101,32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110>>,edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,53,57,51>>,signature => [{attribute,{1474,2},spec,{{now,0},[{type,{1474,10},bounded_fun,[{type,{1474,10},'fun',[{type,{1474,10},product,[]},{var,{1474,16},'Timestamp'}]},[{type,{1475,7},constraint,[{atom,{1475,7},is_subtype},[{var,{1475,7},'Timestamp'},{user_type,{1475,20},timestamp,[]}]]}]]}]}}]}},{{function,open_port,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2318}],[<<111,112,101,110,95,112,111,114,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,111,112,101,110,105,110,103,32,97,32,110,101,119,32,69,114,108,97,110,103,32,112,111,114,116,46,32,65,32,112,111,114,116,32,99,97,110,32,98,101,32,115,101,101,110,32,97,115,32,97,110,32,101,120,116,101,114,110,97,108,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<84,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,115,112,101,99,105,102,101,100,32,105,110,32>>,{code,[],[<<99,100>>]},<<44,32>>,{code,[],[<<101,110,118>>]},<<44,32>>,{code,[],[<<97,114,103,115>>]},<<44,32,97,110,100,32>>,{code,[],[<<97,114,103,48>>]},<<32,97,114,101,32,115,117,98,106,101,99,116,32,116,111,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,116,114,97,110,115,108,97,116,105,111,110,32,105,102,32,116,104,101,32,115,121,115,116,101,109,32,105,115,32,114,117,110,110,105,110,103,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,46,32,84,111,32,97,118,111,105,100,32,116,114,97,110,115,108,97,116,105,111,110,32,111,114,32,116,111,32,102,111,114,99,101,44,32,102,111,114,32,101,120,97,109,112,108,101,32,85,84,70,45,56,44,32,115,117,112,112,108,121,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,97,110,100,47,111,114,32,97,114,103,117,109,101,110,116,115,32,97,115,32,97,32,98,105,110,97,114,121,32,105,110,32,116,104,101,32,99,111,114,114,101,99,116,32,101,110,99,111,100,105,110,103,46,32,70,111,114,32,100,101,116,97,105,108,115,44,32,115,101,101,32,116,104,101,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,105,108,101,40,51,41>>]}]},<<44,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,105,108,101,58,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>]}]},<<32,105,110,32,75,101,114,110,101,108,44,32,97,110,100,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101,95,117,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<85,115,105,110,103,32,85,110,105,99,111,100,101,32,105,110,32,69,114,108,97,110,103>>]}]},<<32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,110,97,109,101,32,40,105,102,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,108,105,115,116,41,32,99,97,110,32,111,110,108,121,32,98,101,32,62,32,50,53,53,32,105,102,32,116,104,101,32,69,114,108,97,110,103,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,105,115,32,115,116,97,114,116,101,100,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,116,114,97,110,115,108,97,116,105,111,110,32,109,111,100,101,46,32,79,116,104,101,114,119,105,115,101,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,105,115,32,108,105,109,105,116,101,100,32,116,111,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,46>>]}]},{p,[],[{code,[],[<<80,111,114,116,78,97,109,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,115,32,97,110,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,32,116,111,32,98,101,32,114,117,110,46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,114,117,110,115,32,111,117,116,115,105,100,101,32,116,104,101,32,69,114,108,97,110,103,32,119,111,114,107,32,115,112,97,99,101,32,117,110,108,101,115,115,32,97,110,32,69,114,108,97,110,103,32,100,114,105,118,101,114,32,119,105,116,104,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32,102,111,117,110,100,44,32,116,104,97,116,32,100,114,105,118,101,114,32,105,115,32,115,116,97,114,116,101,100,46,32,65,32,100,114,105,118,101,114,32,114,117,110,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,119,111,114,107,32,115,112,97,99,101,44,32,119,104,105,99,104,32,109,101,97,110,115,32,116,104,97,116,32,105,116,32,105,115,32,108,105,110,107,101,100,32,119,105,116,104,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<70,111,114,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,115,44,32>>,{code,[],[<<80,65,84,72>>]},<<32,105,115,32,115,101,97,114,99,104,101,100,32,40,111,114,32,97,110,32,101,113,117,105,118,97,108,101,110,116,32,109,101,116,104,111,100,32,105,115,32,117,115,101,100,32,116,111,32,102,105,110,100,32,112,114,111,103,114,97,109,115,44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,79,83,41,46,32,84,104,105,115,32,105,115,32,100,111,110,101,32,98,121,32,105,110,118,111,107,105,110,103,32,116,104,101,32,115,104,101,108,108,32,111,110,32,99,101,114,116,97,105,110,32,112,108,97,116,102,111,114,109,115,46,32,84,104,101,32,102,105,114,115,116,32,115,112,97,99,101,45,115,101,112,97,114,97,116,101,100,32,116,111,107,101,110,32,111,102,32,116,104,101,32,99,111,109,109,97,110,100,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,40,111,114,32,100,114,105,118,101,114,41,46,32,84,104,105,115,32,40,97,109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,41,32,109,97,107,101,115,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,115,117,105,116,97,98,108,101,32,102,111,114,32,114,117,110,110,105,110,103,32,112,114,111,103,114,97,109,115,32,119,105,116,104,32,115,112,97,99,101,115,32,105,110,32,102,105,108,101,110,97,109,101,115,32,111,114,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,46,32,73,102,32,115,112,97,99,101,115,32,105,110,32,101,120,101,99,117,116,97,98,108,101,32,102,105,108,101,110,97,109,101,115,32,97,114,101,32,100,101,115,105,114,101,100,44,32,117,115,101,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,67,111,109,109,97,110,100,125>>]},<<32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,115,112,97,119,110,95,100,114,105,118,101,114,44,32,67,111,109,109,97,110,100,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<44,32,98,117,116,32,100,101,109,97,110,100,115,32,116,104,101,32,102,105,114,115,116,32,40,115,112,97,99,101,45,115,101,112,97,114,97,116,101,100,41,32,116,111,107,101,110,32,111,102,32,116,104,101,32,99,111,109,109,97,110,100,32,116,111,32,98,101,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,108,111,97,100,101,100,32,100,114,105,118,101,114,46,32,73,102,32,110,111,32,100,114,105,118,101,114,32,119,105,116,104,32,116,104,97,116,32,110,97,109,101,32,105,115,32,108,111,97,100,101,100,44,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<123,115,112,97,119,110,44,32,70,105,108,101,78,97,109,101,125>>]},<<44,32,98,117,116,32,111,110,108,121,32,114,117,110,115,32,101,120,116,101,114,110,97,108,32,101,120,101,99,117,116,97,98,108,101,115,46,32>>,{code,[],[<<70,105,108,101,78,97,109,101>>]},<<32,105,110,32,105,116,115,32,119,104,111,108,101,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,44,32,105,110,99,108,117,100,105,110,103,32,97,110,121,32,115,112,97,99,101,115,46,32,73,102,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,116,111,32,98,101,32,112,97,115,115,101,100,44,32,116,104,101,32>>,{code,[],[<<80,111,114,116,83,101,116,116,105,110,103,115>>]},<<32>>,{code,[],[<<97,114,103,115>>]},<<32,97,110,100,32>>,{code,[],[<<97,114,103,48>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,115,104,101,108,108,32,105,115,32,117,115,117,97,108,108,121,32,110,111,116,32,105,110,118,111,107,101,100,32,116,111,32,115,116,97,114,116,32,116,104,101,32,112,114,111,103,114,97,109,44,32,105,116,32,105,115,32,101,120,101,99,117,116,101,100,32,100,105,114,101,99,116,108,121,46,32>>,{code,[],[<<80,65,84,72>>]},<<32,40,111,114,32,101,113,117,105,118,97,108,101,110,116,41,32,105,115,32,110,111,116,32,115,101,97,114,99,104,101,100,46,32,84,111,32,102,105,110,100,32,97,32,112,114,111,103,114,97,109,32,105,110,32>>,{code,[],[<<80,65,84,72>>]},<<32,116,111,32,101,120,101,99,117,116,101,44,32,117,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,102,105,110,100,95,101,120,101,99,117,116,97,98,108,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,102,105,110,100,95,101,120,101,99,117,116,97,98,108,101,47,49>>]}]},<<46>>]},{p,[],[<<79,110,108,121,32,105,102,32,97,32,115,104,101,108,108,32,115,99,114,105,112,116,32,111,114,32>>,{code,[],[<<46,98,97,116>>]},<<32,102,105,108,101,32,105,115,32,101,120,101,99,117,116,101,100,44,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,99,111,109,109,97,110,100,32,105,110,116,101,114,112,114,101,116,101,114,32,105,115,32,105,110,118,111,107,101,100,32,105,109,112,108,105,99,105,116,108,121,44,32,98,117,116,32,116,104,101,114,101,32,105,115,32,115,116,105,108,108,32,110,111,32,99,111,109,109,97,110,100,45,97,114,103,117,109,101,110,116,32,101,120,112,97,110,115,105,111,110,32,111,114,32,105,109,112,108,105,99,105,116,32>>,{code,[],[<<80,65,84,72>>]},<<32,115,101,97,114,99,104,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,105,108,101,78,97,109,101>>]},<<32,99,97,110,110,111,116,32,98,101,32,114,117,110,44,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,105,115,32,114,97,105,115,101,100,44,32,119,105,116,104,32,116,104,101,32,80,79,83,73,88,32,101,114,114,111,114,32,99,111,100,101,32,97,115,32,116,104,101,32,114,101,97,115,111,110,46,32,84,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,79,83,115,46,32,84,121,112,105,99,97,108,108,121,32,116,104,101,32,101,114,114,111,114,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,97,110,32,97,116,116,101,109,112,116,32,105,115,32,109,97,100,101,32,116,111,32,114,117,110,32,97,32,112,114,111,103,114,97,109,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,117,110,100,32,97,110,100,32>>,{code,[],[<<101,97,99,99,101,115>>]},<<32,105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,105,108,101,32,105,115,32,110,111,116,32,101,120,101,99,117,116,97,98,108,101,46>>]}]},{dt,[],[{code,[],[<<123,102,100,44,32,73,110,44,32,79,117,116,125>>]}]},{dd,[],[{p,[],[<<65,108,108,111,119,115,32,97,110,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,116,111,32,97,99,99,101,115,115,32,97,110,121,32,99,117,114,114,101,110,116,108,121,32,111,112,101,110,101,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,117,115,101,100,32,98,121,32,69,114,108,97,110,103,46,32,84,104,101,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32>>,{code,[],[<<73,110>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,44,32,97,110,100,32,116,104,101,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32>>,{code,[],[<<79,117,116>>]},<<32,102,111,114,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,46,32,73,116,32,105,115,32,111,110,108,121,32,117,115,101,100,32,102,111,114,32,118,97,114,105,111,117,115,32,115,101,114,118,101,114,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,79,83,32,40>>,{code,[],[<<115,104,101,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<117,115,101,114>>]},<<41,46,32,72,101,110,99,101,44,32,105,116,115,32,117,115,101,32,105,115,32,108,105,109,105,116,101,100,46>>]}]}]},{p,[],[{code,[],[<<80,111,114,116,83,101,116,116,105,110,103,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,115,101,116,116,105,110,103,115,32,102,111,114,32,116,104,101,32,112,111,114,116,46,32,84,104,101,32,118,97,108,105,100,32,115,101,116,116,105,110,103,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,97,99,107,101,116,44,32,78,125>>]}]},{dd,[],[{p,[],[<<77,101,115,115,97,103,101,115,32,97,114,101,32,112,114,101,99,101,100,101,100,32,98,121,32,116,104,101,105,114,32,108,101,110,103,116,104,44,32,115,101,110,116,32,105,110,32>>,{code,[],[<<78>>]},<<32,98,121,116,101,115,44,32,119,105,116,104,32,116,104,101,32,109,111,115,116,32,115,105,103,110,105,102,105,99,97,110,116,32,98,121,116,101,32,102,105,114,115,116,46,32,84,104,101,32,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<78>>]},<<32,97,114,101,32,49,44,32,50,44,32,97,110,100,32,52,46>>]}]},{dt,[],[{code,[],[<<115,116,114,101,97,109>>]}]},{dd,[],[{p,[],[<<79,117,116,112,117,116,32,109,101,115,115,97,103,101,115,32,97,114,101,32,115,101,110,116,32,119,105,116,104,111,117,116,32,112,97,99,107,101,116,32,108,101,110,103,116,104,115,46,32,65,32,117,115,101,114,45,100,101,102,105,110,101,100,32,112,114,111,116,111,99,111,108,32,109,117,115,116,32,98,101,32,117,115,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,101,120,116,101,114,110,97,108,32,111,98,106,101,99,116,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,101,44,32,76,125>>]}]},{dd,[],[{p,[],[<<77,101,115,115,97,103,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,111,110,32,97,32,112,101,114,32,108,105,110,101,32,98,97,115,105,115,46,32,69,97,99,104,32,108,105,110,101,32,40,100,101,108,105,109,105,116,101,100,32,98,121,32,116,104,101,32,79,83,45,100,101,112,101,110,100,101,110,116,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,41,32,105,115,32,100,101,108,105,118,101,114,101,100,32,105,110,32,97,32,115,105,110,103,108,101,32,109,101,115,115,97,103,101,46,32,84,104,101,32,109,101,115,115,97,103,101,32,100,97,116,97,32,102,111,114,109,97,116,32,105,115,32>>,{code,[],[<<123,70,108,97,103,44,32,76,105,110,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<70,108,97,103>>]},<<32,105,115,32>>,{code,[],[<<101,111,108>>]},<<32,111,114,32>>,{code,[],[<<110,111,101,111,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<76,105,110,101>>]},<<32,105,115,32,116,104,101,32,100,97,116,97,32,100,101,108,105,118,101,114,101,100,32,40,119,105,116,104,111,117,116,32,116,104,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,41,46>>]},{p,[],[{code,[],[<<76>>]},<<32,115,112,101,99,105,102,105,101,115,32,116,104,101,32,109,97,120,105,109,117,109,32,108,105,110,101,32,108,101,110,103,116,104,32,105,110,32,98,121,116,101,115,46,32,76,105,110,101,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,105,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,105,110,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,109,101,115,115,97,103,101,44,32,119,105,116,104,32>>,{code,[],[<<70,108,97,103>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<110,111,101,111,108>>]},<<32,102,111,114,32,97,108,108,32,98,117,116,32,116,104,101,32,108,97,115,116,32,109,101,115,115,97,103,101,46,32,73,102,32,101,110,100,32,111,102,32,102,105,108,101,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,32,97,110,121,119,104,101,114,101,32,101,108,115,101,32,116,104,97,110,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,105,110,103,32,97,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,44,32,116,104,101,32,108,97,115,116,32,108,105,110,101,32,105,115,32,97,108,115,111,32,100,101,108,105,118,101,114,101,100,32,119,105,116,104,32>>,{code,[],[<<70,108,97,103>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<110,111,101,111,108>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,108,105,110,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,119,105,116,104,32>>,{code,[],[<<70,108,97,103>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<101,111,108>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<123,112,97,99,107,101,116,44,32,78,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,108,105,110,101,44,32,76,125>>]},<<32,115,101,116,116,105,110,103,115,32,97,114,101,32,109,117,116,117,97,108,108,121,32,101,120,99,108,117,115,105,118,101,46>>]}]},{dt,[],[{code,[],[<<123,99,100,44,32,68,105,114,125>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46,32,84,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,32,115,116,97,114,116,115,32,117,115,105,110,103,32>>,{code,[],[<<68,105,114>>]},<<32,97,115,32,105,116,115,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,46,32>>,{code,[],[<<68,105,114>>]},<<32,109,117,115,116,32,98,101,32,97,32,115,116,114,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,101,110,118,44,32,69,110,118,125>>]}]},{dd,[],[{p,[],[<<84,121,112,101,115,58>>,{br,[],[]},<<194,160,194,160>>,{code,[],[<<78,97,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,111,115,35,101,110,118,95,118,97,114,95,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<111,115,58,101,110,118,95,118,97,114,95,110,97,109,101,40,41>>]}]},{br,[],[]},<<194,160,194,160>>,{code,[],[<<86,97,108,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,111,115,35,101,110,118,95,118,97,114,95,118,97,108,117,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<111,115,58,101,110,118,95,118,97,114,95,118,97,108,117,101,40,41>>]}]},{code,[],[<<32,124,32,102,97,108,115,101>>]},{br,[],[]},<<194,160,194,160>>,{code,[],[<<69,110,118,32,61,32,91,123,78,97,109,101,44,32,86,97,108,125,93>>]}]},{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<44,32,97,110,100,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46,32,84,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,111,102,32,116,104,101,32,115,116,97,114,116,101,100,32,112,114,111,99,101,115,115,32,105,115,32,101,120,116,101,110,100,101,100,32,117,115,105,110,103,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32>>,{code,[],[<<69,110,118>>]},<<46>>]},{p,[],[{code,[],[<<69,110,118>>]},<<32,105,115,32,116,111,32,98,101,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32>>,{code,[],[<<123,78,97,109,101,44,32,86,97,108,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,97,110,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,44,32,97,110,100,32>>,{code,[],[<<86,97,108>>]},<<32,105,115,32,116,104,101,32,118,97,108,117,101,32,105,116,32,105,115,32,116,111,32,104,97,118,101,32,105,110,32,116,104,101,32,115,112,97,119,110,101,100,32,112,111,114,116,32,112,114,111,99,101,115,115,46,32,66,111,116,104,32>>,{code,[],[<<78,97,109,101>>]},<<32,97,110,100,32>>,{code,[],[<<86,97,108>>]},<<32,109,117,115,116,32,98,101,32,115,116,114,105,110,103,115,46,32,84,104,101,32,111,110,101,32,101,120,99,101,112,116,105,111,110,32,105,115,32>>,{code,[],[<<86,97,108>>]},<<32,98,101,105,110,103,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,40,105,110,32,97,110,97,108,111,103,121,32,119,105,116,104,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,103,101,116,101,110,118,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,103,101,116,101,110,118,47,49>>]}]},<<44,32,119,104,105,99,104,32,114,101,109,111,118,101,115,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,101,110,99,111,100,105,110,103,32,114,101,113,117,105,114,101,109,101,110,116,115,44,32,115,101,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,121,112,101,115,32,102,111,114,32>>,{code,[],[<<78,97,109,101>>]},<<32,97,110,100,32>>,{code,[],[<<86,97,108>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,97,114,103,115,44,32,91,32,115,116,114,105,110,103,40,41,32,124,32,98,105,110,97,114,121,40,41,32,93,125>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<32,97,110,100,32,115,112,101,99,105,102,105,101,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,46,32,69,97,99,104,32,97,114,103,117,109,101,110,116,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,115,101,112,97,114,97,116,101,32,115,116,114,105,110,103,32,97,110,100,32,40,111,110,32,85,110,105,120,41,32,101,118,101,110,116,117,97,108,108,121,32,101,110,100,115,32,117,112,32,97,115,32,111,110,101,32,101,108,101,109,101,110,116,32,101,97,99,104,32,105,110,32,116,104,101,32,97,114,103,117,109,101,110,116,32,118,101,99,116,111,114,46,32,79,110,32,111,116,104,101,114,32,112,108,97,116,102,111,114,109,115,44,32,97,32,115,105,109,105,108,97,114,32,98,101,104,97,118,105,111,114,32,105,115,32,109,105,109,105,99,107,101,100,46>>]},{p,[],[<<84,104,101,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,110,111,116,32,101,120,112,97,110,100,101,100,32,98,121,32,116,104,101,32,115,104,101,108,108,32,98,101,102,111,114,101,32,116,104,101,121,32,97,114,101,32,115,117,112,112,108,105,101,100,32,116,111,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101,46,32,77,111,115,116,32,110,111,116,97,98,108,121,32,116,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,102,105,108,101,32,119,105,108,100,99,97,114,100,32,101,120,112,97,110,115,105,111,110,32,100,111,101,115,32,110,111,116,32,111,99,99,117,114,46,32,84,111,32,101,120,112,97,110,100,32,119,105,108,100,99,97,114,100,115,32,102,111,114,32,116,104,101,32,97,114,103,117,109,101,110,116,115,44,32,117,115,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,102,105,108,101,108,105,98,35,119,105,108,100,99,97,114,100,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,105,108,101,108,105,98,58,119,105,108,100,99,97,114,100,47,49>>]}]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,101,118,101,110,32,105,102,32,116,104,101,32,112,114,111,103,114,97,109,32,105,115,32,97,32,85,110,105,120,32,115,104,101,108,108,32,115,99,114,105,112,116,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,116,104,101,32,115,104,101,108,108,32,117,108,116,105,109,97,116,101,108,121,32,105,115,32,105,110,118,111,107,101,100,44,32,119,105,108,100,99,97,114,100,32,101,120,112,97,110,115,105,111,110,32,100,111,101,115,32,110,111,116,32,111,99,99,117,114,44,32,97,110,100,32,116,104,101,32,115,99,114,105,112,116,32,105,115,32,112,114,111,118,105,100,101,100,32,119,105,116,104,32,116,104,101,32,117,110,116,111,117,99,104,101,100,32,97,114,103,117,109,101,110,116,115,46,32,79,110,32,87,105,110,100,111,119,115,44,32,119,105,108,100,99,97,114,100,32,101,120,112,97,110,115,105,111,110,32,105,115,32,97,108,119,97,121,115,32,117,112,32,116,111,32,116,104,101,32,112,114,111,103,114,97,109,32,105,116,115,101,108,102,44,32,116,104,101,114,101,102,111,114,101,32,116,104,105,115,32,105,115,32,110,111,116,32,97,110,32,105,115,115,117,101,46>>]},{p,[],[<<84,104,101,32,101,120,101,99,117,116,97,98,108,101,32,110,97,109,101,32,40,97,108,115,111,32,107,110,111,119,110,32,97,115,32>>,{code,[],[<<97,114,103,118,91,48,93>>]},<<41,32,105,115,32,110,111,116,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,105,115,32,108,105,115,116,46,32,84,104,101,32,112,114,111,112,101,114,32,101,120,101,99,117,116,97,98,108,101,32,110,97,109,101,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,117,115,101,100,32,97,115,32>>,{code,[],[<<97,114,103,118,91,48,93>>]},<<44,32,119,104,101,114,101,32,97,112,112,108,105,99,97,98,108,101,46>>]},{p,[],[<<73,102,32,121,111,117,32,101,120,112,108,105,99,105,116,108,121,32,119,97,110,116,32,116,111,32,115,101,116,32,116,104,101,32,112,114,111,103,114,97,109,32,110,97,109,101,32,105,110,32,116,104,101,32,97,114,103,117,109,101,110,116,32,118,101,99,116,111,114,44,32,111,112,116,105,111,110,32>>,{code,[],[<<97,114,103,48>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,97,114,103,48,44,32,115,116,114,105,110,103,40,41,32,124,32,98,105,110,97,114,121,40,41,125>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<32,97,110,100,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,115,32,116,104,101,32,112,114,111,103,114,97,109,32,110,97,109,101,32,97,114,103,117,109,101,110,116,32,119,104,101,110,32,114,117,110,110,105,110,103,32,97,110,32,101,120,101,99,117,116,97,98,108,101,46,32,84,104,105,115,32,99,97,110,32,105,110,32,115,111,109,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,44,32,111,110,32,115,111,109,101,32,79,83,115,44,32,98,101,32,100,101,115,105,114,97,98,108,101,46,32,72,111,119,32,116,104,101,32,112,114,111,103,114,97,109,32,114,101,115,112,111,110,100,115,32,116,111,32,116,104,105,115,32,105,115,32,104,105,103,104,108,121,32,115,121,115,116,101,109,45,100,101,112,101,110,100,101,110,116,32,97,110,100,32,110,111,32,115,112,101,99,105,102,105,99,32,101,102,102,101,99,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,46>>]}]},{dt,[],[{code,[],[<<101,120,105,116,95,115,116,97,116,117,115>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,110,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,44,32,97,110,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,99,101,115,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,101,32,112,111,114,116,32,101,120,105,116,115,44,32,97,32,109,101,115,115,97,103,101,32,111,102,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,80,111,114,116,44,123,101,120,105,116,95,115,116,97,116,117,115,44,83,116,97,116,117,115,125,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,114,111,99,101,115,115,44,32,119,104,101,114,101,32>>,{code,[],[<<83,116,97,116,117,115>>]},<<32,105,115,32,116,104,101,32,101,120,105,116,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,101,120,116,101,114,110,97,108,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,101,32,112,114,111,103,114,97,109,32,97,98,111,114,116,115,32,111,110,32,85,110,105,120,44,32,116,104,101,32,115,97,109,101,32,99,111,110,118,101,110,116,105,111,110,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,115,104,101,108,108,115,32,100,111,32,40,116,104,97,116,32,105,115,44,32,49,50,56,43,115,105,103,110,97,108,41,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<101,111,102>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,108,115,111,44,32,116,104,101,32,109,101,115,115,97,103,101,115,32>>,{code,[],[<<101,111,102>>]},<<32,97,110,100,32>>,{code,[],[<<101,120,105,116,95,115,116,97,116,117,115>>]},<<32,97,112,112,101,97,114,32,105,110,32,97,110,32,117,110,115,112,101,99,105,102,105,101,100,32,111,114,100,101,114,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,32,99,108,111,115,101,115,32,105,116,115,32>>,{code,[],[<<115,116,100,111,117,116>>]},<<32,119,105,116,104,111,117,116,32,101,120,105,116,105,110,103,44,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,105,116,95,115,116,97,116,117,115>>]},<<32,100,111,101,115,32,110,111,116,32,119,111,114,107,46>>]}]},{dt,[],[{code,[],[<<117,115,101,95,115,116,100,105,111>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32>>,{code,[],[<<123,115,112,97,119,110,44,32,67,111,109,109,97,110,100,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<46,32,73,116,32,97,108,108,111,119,115,32,116,104,101,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,32,97,110,100,32,111,117,116,112,117,116,32,40,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,48,32,97,110,100,32,49,41,32,111,102,32,116,104,101,32,115,112,97,119,110,101,100,32,40,85,110,105,120,41,32,112,114,111,99,101,115,115,32,102,111,114,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,69,114,108,97,110,103,46>>]}]},{dt,[],[{code,[],[<<110,111,117,115,101,95,115,116,100,105,111>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,112,111,115,105,116,101,32,111,102,32>>,{code,[],[<<117,115,101,95,115,116,100,105,111>>]},<<46,32,73,116,32,117,115,101,115,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,51,32,97,110,100,32,52,32,102,111,114,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,69,114,108,97,110,103,46>>]}]},{dt,[],[{code,[],[<<115,116,100,101,114,114,95,116,111,95,115,116,100,111,117,116>>]}]},{dd,[],[{p,[],[<<65,102,102,101,99,116,115,32,112,111,114,116,115,32,116,111,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,115,46,32,84,104,101,32,101,120,101,99,117,116,101,100,32,112,114,111,103,114,97,109,32,103,101,116,115,32,105,116,115,32,115,116,97,110,100,97,114,100,32,101,114,114,111,114,32,102,105,108,101,32,114,101,100,105,114,101,99,116,101,100,32,116,111,32,105,116,115,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,32,102,105,108,101,46,32>>,{code,[],[<<115,116,100,101,114,114,95,116,111,95,115,116,100,111,117,116>>]},<<32,97,110,100,32>>,{code,[],[<<110,111,117,115,101,95,115,116,100,105,111>>]},<<32,97,114,101,32,109,117,116,117,97,108,108,121,32,101,120,99,108,117,115,105,118,101,46>>]}]},{dt,[],[{code,[],[<<111,118,101,114,108,97,112,112,101,100,95,105,111>>]}]},{dd,[],[{p,[],[<<65,102,102,101,99,116,115,32,112,111,114,116,115,32,116,111,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109,115,32,111,110,32,87,105,110,100,111,119,115,32,111,110,108,121,46,32,84,104,101,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,32,97,110,100,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,32,104,97,110,100,108,101,115,32,111,102,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,32,97,114,101,44,32,105,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,117,112,112,108,105,101,100,44,32,111,112,101,110,101,100,32,119,105,116,104,32,102,108,97,103,32>>,{code,[],[<<70,73,76,69,95,70,76,65,71,95,79,86,69,82,76,65,80,80,69,68>>]},<<44,32,115,111,32,116,104,97,116,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,32,99,97,110,32,40,97,110,100,32,109,117,115,116,41,32,100,111,32,111,118,101,114,108,97,112,112,101,100,32,73,47,79,32,111,110,32,105,116,115,32,115,116,97,110,100,97,114,100,32,104,97,110,100,108,101,115,46,32,84,104,105,115,32,105,115,32,110,111,116,32,110,111,114,109,97,108,108,121,32,116,104,101,32,99,97,115,101,32,102,111,114,32,115,105,109,112,108,101,32,112,111,114,116,32,112,114,111,103,114,97,109,115,44,32,98,117,116,32,97,110,32,111,112,116,105,111,110,32,111,102,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,101,120,112,101,114,105,101,110,99,101,100,32,87,105,110,100,111,119,115,32,112,114,111,103,114,97,109,109,101,114,46,32>>,{em,[],[<<79,110,32,97,108,108,32,111,116,104,101,114,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,105,108,101,110,116,108,121,32,100,105,115,99,97,114,100,101,100,46>>]}]}]},{dt,[],[{code,[],[<<105,110>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,99,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,102,111,114,32,105,110,112,117,116,46>>]}]},{dt,[],[{code,[],[<<111,117,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,99,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,102,111,114,32,111,117,116,112,117,116,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<65,108,108,32,73,47,79,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,115,32,97,115,32,111,112,112,111,115,101,100,32,116,111,32,108,105,115,116,115,32,111,102,32,98,121,116,101,115,46>>]}]},{dt,[],[{code,[],[<<101,111,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,99,108,111,115,101,100,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,102,105,108,101,32,97,110,100,32,100,111,101,115,32,110,111,116,32,112,114,111,100,117,99,101,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,46,32,73,110,115,116,101,97,100,44,32,105,116,32,114,101,109,97,105,110,115,32,111,112,101,110,32,97,110,100,32,97,32>>,{code,[],[<<123,80,111,114,116,44,32,101,111,102,125>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,104,111,108,100,105,110,103,32,116,104,101,32,112,111,114,116,46>>]}]},{dt,[],[{code,[],[<<104,105,100,101>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32,114,117,110,110,105,110,103,32,111,110,32,87,105,110,100,111,119,115,44,32,115,117,112,112,114,101,115,115,101,115,32,99,114,101,97,116,105,111,110,32,111,102,32,97,32,110,101,119,32,99,111,110,115,111,108,101,32,119,105,110,100,111,119,32,119,104,101,110,32,115,112,97,119,110,105,110,103,32,116,104,101,32,112,111,114,116,32,112,114,111,103,114,97,109,46,32,40,84,104,105,115,32,111,112,116,105,111,110,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,111,110,32,111,116,104,101,114,32,112,108,97,116,102,111,114,109,115,46,41>>]}]},{dt,[],[{code,[],[<<123,112,97,114,97,108,108,101,108,105,115,109,44,32,66,111,111,108,101,97,110,125>>]}]},{dd,[],[{a,[{id,<<111,112,101,110,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>}],[]},{p,[],[<<83,101,116,115,32,115,99,104,101,100,117,108,101,114,32,104,105,110,116,32,102,111,114,32,112,111,114,116,32,112,97,114,97,108,108,101,108,105,115,109,46,32,73,102,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,115,99,104,101,100,117,108,101,115,32,112,111,114,116,32,116,97,115,107,115,59,32,119,104,101,110,32,100,111,105,110,103,32,115,111,44,32,105,116,32,105,109,112,114,111,118,101,115,32,112,97,114,97,108,108,101,108,105,115,109,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,73,102,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,116,114,105,101,115,32,116,111,32,112,101,114,102,111,114,109,32,112,111,114,116,32,116,97,115,107,115,32,105,109,109,101,100,105,97,116,101,108,121,44,32,105,109,112,114,111,118,105,110,103,32,108,97,116,101,110,99,121,32,97,116,32,116,104,101,32,101,120,112,101,110,115,101,32,111,102,32,112,97,114,97,108,108,101,108,105,115,109,46,32,84,104,101,32,100,101,102,97,117,108,116,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,121,115,116,101,109,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,112,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,112,112>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,98,117,115,121,95,108,105,109,105,116,115,95,112,111,114,116,44,32,123,76,111,119,44,32,72,105,103,104,125,32,124,32,100,105,115,97,98,108,101,100,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,108,105,109,105,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,99,111,110,116,114,111,108,108,105,110,103,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,32,111,102,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,112,111,114,116,115,32,105,110,116,101,114,110,97,108,32,111,117,116,112,117,116,32,113,117,101,117,101,32,115,105,122,101,32,98,101,99,111,109,101,115,32,108,97,114,103,101,114,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<72,105,103,104>>]},<<32,98,121,116,101,115,44,32,105,116,32,101,110,116,101,114,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,105,116,32,98,101,99,111,109,101,115,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<76,111,119>>]},<<32,98,121,116,101,115,32,105,116,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,116,104,101,32,112,111,114,116,32,105,115,32,105,110,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,44,32,112,114,111,99,101,115,115,101,115,32,115,101,110,100,105,110,103,32,99,111,109,109,97,110,100,115,32,116,111,32,105,116,32,119,105,108,108,32,98,101,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,67,111,109,109,97,110,100,115,32,97,114,101,32,105,110,32,116,104,105,115,32,99,111,110,116,101,120,116,32,101,105,116,104,101,114,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,91,50,44,51,93>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<76,111,119>>]},<<32,108,105,109,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,100,106,117,115,116,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,102,32,105,116,32,105,115,32,115,101,116,32,108,97,114,103,101,114,32,116,104,101,110,32>>,{code,[],[<<72,105,103,104>>]},<<46,32,86,97,108,105,100,32,114,97,110,103,101,32,111,102,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<76,111,119>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,115,32>>,{code,[],[<<91,49,44,32,40,49,32,98,115,108,32,40,56,42,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,119,111,114,100,115,105,122,101,41,41,41,45,50,93>>]},<<46,32,73,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<32,105,115,32,112,97,115,115,101,100,44,32,116,104,101,32,112,111,114,116,32,119,105,108,108,32,110,101,118,101,114,32,101,110,116,101,114,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,115,32,97,114,101,32>>,{code,[],[<<76,111,119,32,61,32,52,48,57,54>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104,32,61,32,56,49,57,50>>]},<<46>>]},{p,[],[{em,[],[<<78,111,116,101>>]},<<32,116,104,97,116,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,119,104,101,110,32,115,112,97,119,110,105,110,103,32,97,110,32,101,120,101,99,117,116,97,98,108,101,32,40,112,111,114,116,32,112,114,111,103,114,97,109,41,32,98,121,32,111,112,101,110,105,110,103,32,116,104,101,32,115,112,97,119,110,32,100,114,105,118,101,114,32,97,110,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32>>,{code,[],[<<102,100>>]},<<32,100,114,105,118,101,114,46,32,84,104,105,115,32,111,112,116,105,111,110,32,119,105,108,108,32,99,97,117,115,101,32,97,32,102,97,105,108,117,114,101,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,119,104,101,110,32,111,112,101,110,105,110,103,32,111,116,104,101,114,32,100,114,105,118,101,114,115,46>>]}]},{dt,[],[{code,[],[<<123,98,117,115,121,95,108,105,109,105,116,115,95,109,115,103,113,44,32,123,76,111,119,44,32,72,105,103,104,125,32,124,32,100,105,115,97,98,108,101,100,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,108,105,109,105,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,99,111,110,116,114,111,108,108,105,110,103,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,32,111,102,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,112,111,114,116,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,115,105,122,101,32,98,101,99,111,109,101,115,32,108,97,114,103,101,114,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<72,105,103,104>>]},<<32,98,121,116,101,115,32,105,116,32,101,110,116,101,114,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,105,116,32,98,101,99,111,109,101,115,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<76,111,119>>]},<<32,98,121,116,101,115,32,105,116,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,87,104,101,110,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,105,115,32,105,110,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,44,32,112,114,111,99,101,115,115,101,115,32,115,101,110,100,105,110,103,32,99,111,109,109,97,110,100,115,32,116,111,32,105,116,32,119,105,108,108,32,98,101,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,108,101,97,118,101,115,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46,32,67,111,109,109,97,110,100,115,32,97,114,101,32,105,110,32,116,104,105,115,32,99,111,110,116,101,120,116,32,101,105,116,104,101,114,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,111,114,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,91,50,44,51,93>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<76,111,119>>]},<<32,108,105,109,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,100,106,117,115,116,101,100,32,116,111,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,102,32,105,116,32,105,115,32,115,101,116,32,108,97,114,103,101,114,32,116,104,101,110,32>>,{code,[],[<<72,105,103,104>>]},<<46,32,86,97,108,105,100,32,114,97,110,103,101,32,111,102,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<76,111,119>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104>>]},<<32,105,115,32>>,{code,[],[<<91,49,44,32,40,49,32,98,115,108,32,40,56,42,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,119,111,114,100,115,105,122,101,41,41,41,45,50,93>>]},<<46,32,73,102,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<32,105,115,32,112,97,115,115,101,100,44,32,116,104,101,32,112,111,114,116,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,110,101,118,101,114,32,101,110,116,101,114,32,116,104,101,32,98,117,115,121,32,115,116,97,116,101,46>>]},{p,[],[{em,[],[<<78,111,116,101>>]},<<32,116,104,97,116,32,105,102,32,116,104,101,32,100,114,105,118,101,114,32,115,116,97,116,105,99,97,108,108,121,32,104,97,115,32,100,105,115,97,98,108,101,100,32,116,104,101,32,117,115,101,32,111,102,32,116,104,105,115,32,102,101,97,116,117,114,101,44,32,97,32,102,97,105,108,117,114,101,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100,32,117,110,108,101,115,115,32,116,104,105,115,32,111,112,116,105,111,110,32,97,108,115,111,32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<100,105,115,97,98,108,101>>]},<<32,111,114,32,110,111,116,32,112,97,115,115,101,100,32,97,116,32,97,108,108,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,115,32,97,114,101,32>>,{code,[],[<<76,111,119,32,61,32,52,48,57,54>>]},<<32,97,110,100,32>>,{code,[],[<<72,105,103,104,32,61,32,56,49,57,50>>]},<<32,117,110,108,101,115,115,32,116,104,101,32,100,114,105,118,101,114,32,105,116,115,101,108,102,32,100,111,101,115,32,109,111,100,105,102,105,99,97,116,105,111,110,115,32,111,102,32,116,104,101,115,101,32,118,97,108,117,101,115,46>>]},{p,[],[{em,[],[<<78,111,116,101>>]},<<32,116,104,97,116,32,116,104,101,32,100,114,105,118,101,114,32,109,105,103,104,116,32,102,97,105,108,32,105,102,32,105,116,32,97,108,115,111,32,97,100,106,117,115,116,32,116,104,101,115,101,32,108,105,109,105,116,115,32,98,121,32,105,116,115,101,108,102,32,97,110,100,32,121,111,117,32,104,97,118,101,32,100,105,115,97,98,108,101,100,32,116,104,105,115,32,102,101,97,116,117,114,101,46>>]},{p,[],[<<84,104,101,32,115,112,97,119,110,32,100,114,105,118,101,114,32,40,117,115,101,100,32,119,104,101,110,32,115,112,97,119,110,105,110,103,32,97,110,32,101,120,101,99,117,116,97,98,108,101,41,32,97,110,100,32,116,104,101,32>>,{code,[],[<<102,100>>]},<<32,100,114,105,118,101,114,32,100,111,32,110,111,116,32,100,105,115,97,98,108,101,32,116,104,105,115,32,102,101,97,116,117,114,101,32,97,110,100,32,100,111,32,110,111,116,32,97,100,106,117,115,116,32,116,104,101,115,101,32,108,105,109,105,116,115,32,98,121,32,116,104,101,109,115,101,108,118,101,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,114,105,118,101,114,35,101,114,108,95,100,114,118,95,98,117,115,121,95,109,115,103,113,95,108,105,109,105,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,108,95,100,114,118,95,98,117,115,121,95,109,115,103,113,95,108,105,109,105,116,115,40,41>>]}]},<<46>>]}]}]},{p,[],[<<68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<115,116,114,101,97,109>>]},<<32,102,111,114,32,97,108,108,32,112,111,114,116,32,116,121,112,101,115,32,97,110,100,32>>,{code,[],[<<117,115,101,95,115,116,100,105,111>>]},<<32,102,111,114,32,115,112,97,119,110,101,100,32,112,111,114,116,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32,105,102,32,116,104,101,32,112,111,114,116,32,99,97,110,110,111,116,32,98,101,32,111,112,101,110,101,100,44,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<44,32>>,{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]},<<44,32,111,114,32,116,104,101,32,80,79,83,73,88,32,101,114,114,111,114,32,99,111,100,101,32,116,104,97,116,32,109,111,115,116,32,99,108,111,115,101,108,121,32,100,101,115,99,114,105,98,101,115,32,116,104,101,32,101,114,114,111,114,44,32,111,114,32>>,{code,[],[<<101,105,110,118,97,108>>]},<<32,105,102,32,110,111,32,80,79,83,73,88,32,99,111,100,101,32,105,115,32,97,112,112,114,111,112,114,105,97,116,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<66,97,100,32,105,110,112,117,116,32,97,114,103,117,109,101,110,116,115,32,116,111,32>>,{code,[],[<<111,112,101,110,95,112,111,114,116>>]},<<46>>]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[<<65,108,108,32,97,118,97,105,108,97,98,108,101,32,112,111,114,116,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,101,109,117,108,97,116,111,114,32,97,114,101,32,105,110,32,117,115,101,46>>]},{dt,[],[{code,[],[<<101,110,111,109,101,109>>]}]},{dd,[],[<<78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,116,104,101,32,112,111,114,116,46>>]},{dt,[],[{code,[],[<<101,97,103,97,105,110>>]}]},{dd,[],[<<78,111,32,109,111,114,101,32,97,118,97,105,108,97,98,108,101,32,79,83,32,112,114,111,99,101,115,115,101,115,46>>]},{dt,[],[{code,[],[<<101,110,97,109,101,116,111,111,108,111,110,103>>]}]},{dd,[],[<<84,111,111,32,108,111,110,103,32,101,120,116,101,114,110,97,108,32,99,111,109,109,97,110,100,46>>]},{dt,[],[{code,[],[<<101,109,102,105,108,101>>]}]},{dd,[],[<<78,111,32,109,111,114,101,32,97,118,97,105,108,97,98,108,101,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,40,102,111,114,32,116,104,101,32,79,83,32,112,114,111,99,101,115,115,32,116,104,97,116,32,116,104,101,32,69,114,108,97,110,103,32,101,109,117,108,97,116,111,114,32,114,117,110,115,32,105,110,41,46>>]},{dt,[],[{code,[],[<<101,110,102,105,108,101>>]}]},{dd,[],[<<70,117,108,108,32,102,105,108,101,32,116,97,98,108,101,32,40,102,111,114,32,116,104,101,32,101,110,116,105,114,101,32,79,83,41,46>>]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{code,[],[<<67,111,109,109,97,110,100>>]},<<32,115,112,101,99,105,102,105,101,100,32,105,110,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,67,111,109,109,97,110,100,125>>]},<<32,100,111,101,115,32,110,111,116,32,112,111,105,110,116,32,111,117,116,32,97,110,32,101,120,101,99,117,116,97,98,108,101,32,102,105,108,101,46>>]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{code,[],[<<70,105,108,101,78,97,109,101>>]},<<32,115,112,101,99,105,102,105,101,100,32,105,110,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,70,105,108,101,78,97,109,101,125>>]},<<32,100,111,101,115,32,110,111,116,32,112,111,105,110,116,32,111,117,116,32,97,110,32,101,120,105,115,116,105,110,103,32,102,105,108,101,46>>]}]},{p,[],[<<68,117,114,105,110,103,32,117,115,101,32,111,102,32,97,32,112,111,114,116,32,111,112,101,110,101,100,32,117,115,105,110,103,32>>,{code,[],[<<123,115,112,97,119,110,44,32,78,97,109,101,125>>]},<<44,32>>,{code,[],[<<123,115,112,97,119,110,95,100,114,105,118,101,114,44,32,78,97,109,101,125>>]},<<44,32,111,114,32>>,{code,[],[<<123,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,78,97,109,101,125>>]},<<44,32,101,114,114,111,114,115,32,97,114,105,115,105,110,103,32,119,104,101,110,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,116,111,32,105,116,32,97,114,101,32,114,101,112,111,114,116,101,100,32,116,111,32,116,104,101,32,111,119,110,105,110,103,32,112,114,111,99,101,115,115,32,117,115,105,110,103,32,115,105,103,110,97,108,115,32,111,102,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,80,111,114,116,44,32,80,111,115,105,120,67,111,100,101,125>>]},<<46,32,70,111,114,32,116,104,101,32,112,111,115,115,105,98,108,101,32,118,97,108,117,101,115,32,111,102,32>>,{code,[],[<<80,111,115,105,120,67,111,100,101>>]},<<44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,105,108,101,40,51,41>>]}]},<<46>>]},{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,111,114,116,115,32,116,104,97,116,32,99,97,110,32,98,101,32,111,112,101,110,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,109,97,120,95,112,111,114,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,81>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,52,54,50,50>>,signature => [{attribute,{2318,2},spec,{{open_port,2},[{type,{2318,16},bounded_fun,[{type,{2318,16},'fun',[{type,{2318,16},product,[{var,{2318,17},'PortName'},{var,{2318,27},'PortSettings'}]},{type,{2318,44},port,[]}]},[{type,{2319,7},constraint,[{atom,{2319,7},is_subtype},[{var,{2319,7},'PortName'},{type,{2319,19},union,[{type,{2319,19},tuple,[{atom,{2319,20},spawn},{ann_type,{2319,27},[{var,{2319,27},'Command'},{type,{2319,38},union,[{type,{2319,38},string,[]},{type,{2319,49},binary,[]}]}]}]},{type,{2320,19},tuple,[{atom,{2320,20},spawn_driver},{ann_type,{2320,34},[{var,{2320,34},'Command'},{type,{2320,45},union,[{type,{2320,45},string,[]},{type,{2320,56},binary,[]}]}]}]},{type,{2321,19},tuple,[{atom,{2321,20},spawn_executable},{ann_type,{2321,38},[{var,{2321,38},'FileName'},{remote_type,{2321,50},[{atom,{2321,50},file},{atom,{2321,55},name_all},[]]}]}]},{type,{2322,19},tuple,[{atom,{2322,20},fd},{ann_type,{2322,24},[{var,{2322,24},'In'},{type,{2322,30},non_neg_integer,[]}]},{ann_type,{2322,49},[{var,{2322,49},'Out'},{type,{2322,56},non_neg_integer,[]}]}]}]}]]},{type,{2323,7},constraint,[{atom,{2323,7},is_subtype},[{var,{2323,7},'PortSettings'},{type,{2323,23},list,[{var,{2323,24},'Opt'}]}]]},{type,{2324,7},constraint,[{atom,{2324,7},is_subtype},[{var,{2324,7},'Opt'},{type,{2324,14},union,[{type,{2324,14},tuple,[{atom,{2324,15},packet},{ann_type,{2324,23},[{var,{2324,23},'N'},{type,{2324,28},union,[{integer,{2324,28},1},{integer,{2324,32},2},{integer,{2324,36},4}]}]}]},{atom,{2325,14},stream},{type,{2326,14},tuple,[{atom,{2326,15},line},{ann_type,{2326,21},[{var,{2326,21},'L'},{type,{2326,26},non_neg_integer,[]}]}]},{type,{2327,14},tuple,[{atom,{2327,15},cd},{ann_type,{2327,19},[{var,{2327,19},'Dir'},{type,{2327,26},union,[{type,{2327,26},string,[]},{type,{2327,37},binary,[]}]}]}]},{type,{2328,14},tuple,[{atom,{2328,15},env},{ann_type,{2328,20},[{var,{2328,20},'Env'},{type,{2328,27},list,[{type,{2328,28},tuple,[{ann_type,{2328,29},[{var,{2328,29},'Name'},{remote_type,{2328,37},[{atom,{2328,37},os},{atom,{2328,40},env_var_name},[]]}]},{ann_type,{2328,56},[{var,{2328,56},'Val'},{type,{2328,63},union,[{remote_type,{2328,63},[{atom,{2328,63},os},{atom,{2328,66},env_var_value},[]]},{atom,{2328,84},false}]}]}]}]}]}]},{type,{2329,14},tuple,[{atom,{2329,15},args},{type,{2329,21},list,[{type,{2329,22},union,[{type,{2329,22},string,[]},{type,{2329,33},binary,[]}]}]}]},{type,{2330,14},tuple,[{atom,{2330,15},arg0},{type,{2330,21},union,[{type,{2330,21},string,[]},{type,{2330,32},binary,[]}]}]},{atom,{2331,14},exit_status},{atom,{2332,14},use_stdio},{atom,{2333,14},nouse_stdio},{atom,{2334,14},stderr_to_stdout},{atom,{2335,14},in},{atom,{2336,14},out},{atom,{2337,14},binary},{atom,{2338,14},eof},{type,{2339,7},tuple,[{atom,{2339,8},parallelism},{ann_type,{2339,21},[{var,{2339,21},'Boolean'},{type,{2339,32},boolean,[]}]}]},{atom,{2340,7},hide},{type,{2341,14},tuple,[{atom,{2341,15},busy_limits_port},{type,{2341,33},union,[{type,{2341,33},tuple,[{type,{2341,34},non_neg_integer,[]},{type,{2341,53},non_neg_integer,[]}]},{atom,{2341,74},disabled}]}]},{type,{2342,14},tuple,[{atom,{2342,15},busy_limits_msgq},{type,{2342,33},union,[{type,{2342,33},tuple,[{type,{2342,34},non_neg_integer,[]},{type,{2342,53},non_neg_integer,[]}]},{atom,{2342,74},disabled}]}]}]}]]}]]}]}}]}},{{function,phash,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1480}],[<<112,104,97,115,104,47,50>>],#{<<101,110>> => [{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,104,97,115,104,50,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,112,104,97,115,104,50,47,50>>]}]},<<32,115,104,111,117,108,100,32,98,101,32,117,115,101,100,32,102,111,114,32,110,101,119,32,99,111,100,101,46,32,78,111,116,101,32,116,104,97,116,32>>,{code,[],[<<101,114,108,97,110,103,58,112,104,97,115,104,40,88,44,78,41>>]},<<32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,121,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,112,104,97,115,104,50,40,88,44,78,41>>]}]}]},{p,[],[<<80,111,114,116,97,98,108,101,32,104,97,115,104,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,104,97,115,104,32,102,111,114,32,116,104,101,32,115,97,109,101,32,69,114,108,97,110,103,32,116,101,114,109,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,109,97,99,104,105,110,101,32,97,114,99,104,105,116,101,99,116,117,114,101,32,97,110,100,32,69,82,84,83,32,118,101,114,115,105,111,110,32,40,116,104,101,32,66,73,70,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,82,84,83,32,52,46,57,46,49,46,49,41,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,97,32,104,97,115,104,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<84,101,114,109>>]},<<32,119,105,116,104,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<49,46,46,82,97,110,103,101>>]},<<46,32,84,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<82,97,110,103,101>>]},<<32,105,115,32,50,94,51,50,46>>]}]},#{deprecated => <<101,114,108,97,110,103,58,112,104,97,115,104,47,50,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32,117,115,101,32,101,114,108,97,110,103,58,112,104,97,115,104,50,47,50,32,105,110,115,116,101,97,100>>,edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,50,56>>,signature => [{attribute,{1480,2},spec,{{erlang,phash,2},[{type,{1480,19},bounded_fun,[{type,{1480,19},'fun',[{type,{1480,19},product,[{var,{1480,20},'Term'},{var,{1480,26},'Range'}]},{var,{1480,36},'Hash'}]},[{type,{1481,7},constraint,[{atom,{1481,7},is_subtype},[{var,{1481,7},'Term'},{type,{1481,15},term,[]}]]},{type,{1482,7},constraint,[{atom,{1482,7},is_subtype},[{var,{1482,7},'Range'},{type,{1482,16},pos_integer,[]}]]},{type,{1483,7},constraint,[{atom,{1483,7},is_subtype},[{var,{1483,7},'Hash'},{type,{1483,15},pos_integer,[]}]]}]]}]}}]}},{{function,phash2,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1495}],[<<112,104,97,115,104,50,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,53,48>>,equiv => {function,phash2,1},signature => [{attribute,{1495,2},spec,{{erlang,phash2,2},[{type,{1495,20},bounded_fun,[{type,{1495,20},'fun',[{type,{1495,20},product,[{var,{1495,21},'Term'},{var,{1495,27},'Range'}]},{var,{1495,37},'Hash'}]},[{type,{1496,7},constraint,[{atom,{1496,7},is_subtype},[{var,{1496,7},'Term'},{type,{1496,15},term,[]}]]},{type,{1497,7},constraint,[{atom,{1497,7},is_subtype},[{var,{1497,7},'Range'},{type,{1497,16},pos_integer,[]}]]},{type,{1498,7},constraint,[{atom,{1498,7},is_subtype},[{var,{1498,7},'Hash'},{type,{1498,15},non_neg_integer,[]}]]}]]}]}}]}},{{function,phash2,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1488}],[<<112,104,97,115,104,50,47,49>>],#{<<101,110>> => [{p,[],[<<80,111,114,116,97,98,108,101,32,104,97,115,104,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,104,97,115,104,32,102,111,114,32,116,104,101,32,115,97,109,101,32,69,114,108,97,110,103,32,116,101,114,109,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,109,97,99,104,105,110,101,32,97,114,99,104,105,116,101,99,116,117,114,101,32,97,110,100,32,69,82,84,83,32,118,101,114,115,105,111,110,32,40,116,104,101,32,66,73,70,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,82,84,83,32,53,46,50,41,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,97,32,104,97,115,104,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<84,101,114,109>>]},<<32,119,105,116,104,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<48,46,46,82,97,110,103,101,45,49>>]},<<46,32,84,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<82,97,110,103,101>>]},<<32,105,115,32,50,94,51,50,46,32,87,104,101,110,32,119,105,116,104,111,117,116,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<82,97,110,103,101>>]},<<44,32,97,32,118,97,108,117,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,48,46,46,50,94,50,55,45,49,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,97,108,119,97,121,115,32,116,111,32,98,101,32,117,115,101,100,32,102,111,114,32,104,97,115,104,105,110,103,32,116,101,114,109,115,46,32,73,116,32,100,105,115,116,114,105,98,117,116,101,115,32,115,109,97,108,108,32,105,110,116,101,103,101,114,115,32,98,101,116,116,101,114,32,116,104,97,110,32>>,{code,[],[<<112,104,97,115,104,47,50>>]},<<44,32,97,110,100,32,105,116,32,105,115,32,102,97,115,116,101,114,32,102,111,114,32,98,105,103,110,117,109,115,32,97,110,100,32,98,105,110,97,114,105,101,115,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<48,46,46,82,97,110,103,101,45,49>>]},<<32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,114,97,110,103,101,32,111,102,32>>,{code,[],[<<112,104,97,115,104,47,50>>]},<<44,32,119,104,105,99,104,32,105,115,32>>,{code,[],[<<49,46,46,82,97,110,103,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,53,48>>,signature => [{attribute,{1488,2},spec,{{erlang,phash2,1},[{type,{1488,20},bounded_fun,[{type,{1488,20},'fun',[{type,{1488,20},product,[{var,{1488,21},'Term'}]},{var,{1488,30},'Hash'}]},[{type,{1489,7},constraint,[{atom,{1489,7},is_subtype},[{var,{1489,7},'Term'},{type,{1489,15},term,[]}]]},{type,{1490,7},constraint,[{atom,{1490,7},is_subtype},[{var,{1490,7},'Hash'},{type,{1490,15},non_neg_integer,[]}]]}]]}]}}]}},{{function,pid_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1503}],[<<112,105,100,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,112,105,100,95,116,111,95,108,105,115,116,40,115,101,108,102,40,41,41,46,10,34,60,48,46,56,53,46,48,62,34>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,105,115,116,95,112,114,111,116,111,99,111,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,114,101,97,116,105,111,110>>]},<<32,102,111,114,32,116,104,101,32,110,111,100,101,32,105,115,32,110,111,116,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<46,32,84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,112,114,111,99,101,115,115,101,115,32,105,110,32,100,105,102,102,101,114,101,110,116,32,105,110,99,97,114,110,97,116,105,111,110,115,32,111,102,32,97,32,110,111,100,101,32,119,105,116,104,32,97,32,115,112,101,99,105,102,105,99,32,110,97,109,101,32,99,97,110,32,103,101,116,32,116,104,101,32,115,97,109,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,55,53>>,signature => [{attribute,{1503,2},spec,{{pid_to_list,1},[{type,{1503,18},bounded_fun,[{type,{1503,18},'fun',[{type,{1503,18},product,[{var,{1503,19},'Pid'}]},{type,{1503,27},string,[]}]},[{type,{1504,7},constraint,[{atom,{1504,7},is_subtype},[{var,{1504,7},'Pid'},{type,{1504,14},pid,[]}]]}]]}]}}]}},{{function,port_call,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3602}],[<<112,111,114,116,95,99,97,108,108,47,51>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,121,110,99,104,114,111,110,111,117,115,32,99,97,108,108,32,116,111,32,97,32,112,111,114,116,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,97,110,100,32>>,{code,[],[<<68,97,116,97>>]},<<32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,44,32,116,104,97,116,32,105,115,44,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46,32,78,111,116,32,97,108,108,32,112,111,114,116,32,100,114,105,118,101,114,115,32,115,117,112,112,111,114,116,32,116,104,105,115,32,102,101,97,116,117,114,101,46>>]},{p,[],[{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,114,101,102,101,114,114,105,110,103,32,116,111,32,97,32,100,114,105,118,101,114,46>>]},{p,[],[{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,119,104,105,99,104,32,105,115,32,112,97,115,115,101,100,32,111,110,32,116,111,32,116,104,101,32,100,114,105,118,101,114,46>>]},{p,[],[{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,121,32,69,114,108,97,110,103,32,116,101,114,109,46,32,84,104,105,115,32,100,97,116,97,32,105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,98,105,110,97,114,121,32,116,101,114,109,32,102,111,114,109,97,116,32,97,110,100,32,115,101,110,116,32,116,111,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,101,114,109,32,102,114,111,109,32,116,104,101,32,100,114,105,118,101,114,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,116,104,101,32,114,101,116,117,114,110,101,100,32,100,97,116,97,32,97,108,115,111,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,100,111,101,115,32,110,111,116,32,102,105,116,32,105,110,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,110,99,104,114,111,110,111,117,115,32,99,111,110,116,114,111,108,32,111,112,101,114,97,116,105,111,110,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,115,111,32,100,101,99,105,100,101,115,32,102,111,114,32,97,110,121,32,114,101,97,115,111,110,32,40,112,114,111,98,97,98,108,121,32,115,111,109,101,116,104,105,110,103,32,119,114,111,110,103,32,119,105,116,104,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<41,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,99,97,108,108,32>>,{code,[],[<<112,111,114,116,95,99,97,108,108>>]},<<32,119,105,116,104,32,97,110,32,117,110,107,110,111,119,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,101,120,112,101,99,116,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,115,117,112,112,108,105,101,100,32,97,114,103,117,109,101,110,116,115,46>>]}]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,48,57,52>>,signature => [{attribute,{3602,2},spec,{{erlang,port_call,3},[{type,{3602,23},bounded_fun,[{type,{3602,23},'fun',[{type,{3602,23},product,[{var,{3602,24},'Port'},{var,{3602,30},'Operation'},{var,{3602,41},'Data'}]},{type,{3602,50},term,[]}]},[{type,{3603,7},constraint,[{atom,{3603,7},is_subtype},[{var,{3603,7},'Port'},{type,{3603,15},union,[{type,{3603,15},port,[]},{type,{3603,24},atom,[]}]}]]},{type,{3604,7},constraint,[{atom,{3604,7},is_subtype},[{var,{3604,7},'Operation'},{type,{3604,20},integer,[]}]]},{type,{3605,7},constraint,[{atom,{3605,7},is_subtype},[{var,{3605,7},'Data'},{type,{3605,15},term,[]}]]}]]}]}}]}},{{function,port_close,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3563}],[<<112,111,114,116,95,99,108,111,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,108,111,115,101,115,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,82,111,117,103,104,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<80,111,114,116,32,33,32,123,115,101,108,102,40,41,44,32,99,108,111,115,101,125>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,32,40,115,101,101,32,98,101,108,111,119,41,44,32,98,101,105,110,103,32,115,121,110,99,104,114,111,110,111,117,115,44,32,97,110,100,32,116,104,97,116,32,116,104,101,32,112,111,114,116,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,114,101,112,108,121,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,32,99,108,111,115,101,100,125>>]},<<46,32,65,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,99,108,111,115,101,32,97,32,112,111,114,116,32,119,105,116,104,32>>,{code,[],[<<112,111,114,116,95,99,108,111,115,101,47,49>>]},<<44,32,110,111,116,32,111,110,108,121,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,40,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,114,111,99,101,115,115,41,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,99,108,111,115,101,47,49>>]},<<32,114,101,116,117,114,110,115,46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,114,105,115,111,110,58,32>>,{code,[],[<<80,111,114,116,32,33,32,123,115,101,108,102,40,41,44,32,99,108,111,115,101,125>>]},<<32,111,110,108,121,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,111,114,116,32,111,114,32,97,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,99,108,111,115,101,100,32,112,111,114,116,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,110,32,111,112,101,110,32,112,111,114,116,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32,112,111,114,116,32,114,101,112,108,105,101,115,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,32,99,108,111,115,101,100,125>>]},<<32,119,104,101,110,32,97,108,108,32,98,117,102,102,101,114,115,32,104,97,118,101,32,98,101,101,110,32,102,108,117,115,104,101,100,32,97,110,100,32,116,104,101,32,112,111,114,116,32,114,101,97,108,108,121,32,99,108,111,115,101,115,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32>>,{em,[],[<<112,111,114,116,32,111,119,110,101,114>>]},<<32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,99,108,111,115,101,32,97,32,112,111,114,116,32,117,115,105,110,103,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,99,108,111,115,101,125>>]},<<32,97,115,32,105,102,32,105,116,32,105,116,115,101,108,102,32,119,97,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,98,117,116,32,116,104,101,32,114,101,112,108,121,32,97,108,119,97,121,115,32,103,111,101,115,32,116,111,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,54,44,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,99,108,111,115,101,125>>]},<<32,105,115,32,116,114,117,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,97,108,119,97,121,115,32,98,101,101,110,32,100,111,99,117,109,101,110,116,101,100,32,97,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,108,101,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,121,110,99,104,114,111,110,111,117,115,46,32>>,{code,[],[<<112,111,114,116,95,99,108,111,115,101,47,49>>]},<<32,105,115,32,104,111,119,101,118,101,114,32,115,116,105,108,108,32,102,117,108,108,121,32,115,121,110,99,104,114,111,110,111,117,115,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,49,52,54>>,signature => [{attribute,{3563,2},spec,{{port_close,1},[{type,{3563,17},bounded_fun,[{type,{3563,17},'fun',[{type,{3563,17},product,[{var,{3563,18},'Port'}]},{atom,{3563,27},true}]},[{type,{3564,7},constraint,[{atom,{3564,7},is_subtype},[{var,{3564,7},'Port'},{type,{3564,15},union,[{type,{3564,15},port,[]},{type,{3564,24},atom,[]}]}]]}]]}]}}]}},{{function,port_command,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3521}],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,100,97,116,97,32,116,111,32,97,32,112,111,114,116,46,32,83,97,109,101,32,97,115,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,32,97,110,100,32,98,101,105,110,103,32,115,121,110,99,104,114,111,110,111,117,115,32,40,115,101,101,32,98,101,108,111,119,41,46,32,65,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,110,100,32,100,97,116,97,32,116,111,32,97,32,112,111,114,116,32,119,105,116,104,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>]},<<44,32,110,111,116,32,111,110,108,121,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,40,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,114,111,99,101,115,115,41,46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,114,105,115,111,110,58,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,111,110,108,121,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,111,114,116,32,111,114,32,97,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,99,108,111,115,101,100,32,112,111,114,116,44,32,116,104,101,32,100,97,116,97,32,109,101,115,115,97,103,101,32,100,105,115,97,112,112,101,97,114,115,32,119,105,116,104,111,117,116,32,97,32,115,111,117,110,100,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,111,112,101,110,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32>>,{em,[],[<<112,111,114,116,32,111,119,110,101,114>>]},<<32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<46,32,84,104,101,32,112,111,114,116,32,111,119,110,101,114,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<32,97,108,115,111,32,105,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,73,47,79,32,108,105,115,116,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,110,100,32,116,111,32,97,32,112,111,114,116,32,117,115,105,110,103,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,97,115,32,105,102,32,105,116,32,105,116,115,101,108,102,32,119,97,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,98,117,115,121,32,97,110,121,32,109,111,114,101,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,54,44,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125,125>>]},<<32,105,115,32,116,114,117,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,97,108,119,97,121,115,32,98,101,101,110,32,100,111,99,117,109,101,110,116,101,100,32,97,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,108,101,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,121,110,99,104,114,111,110,111,117,115,46,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>]},<<32,105,115,32,104,111,119,101,118,101,114,32,115,116,105,108,108,32,102,117,108,108,121,32,115,121,110,99,104,114,111,110,111,117,115,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]}]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,73,47,79,32,108,105,115,116,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,115,101,110,100,32,100,97,116,97,32,116,111,32,97,110,32,117,110,107,110,111,119,110,32,112,111,114,116,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,100,97,116,97,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,49,56,54>>,signature => [{attribute,{3521,2},spec,{{port_command,2},[{type,{3521,19},bounded_fun,[{type,{3521,19},'fun',[{type,{3521,19},product,[{var,{3521,20},'Port'},{var,{3521,26},'Data'}]},{atom,{3521,35},true}]},[{type,{3522,7},constraint,[{atom,{3522,7},is_subtype},[{var,{3522,7},'Port'},{type,{3522,15},union,[{type,{3522,15},port,[]},{type,{3522,24},atom,[]}]}]]},{type,{3523,7},constraint,[{atom,{3523,7},is_subtype},[{var,{3523,7},'Data'},{type,{3523,15},iodata,[]}]]}]]}]}}]}},{{function,port_command,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3534}],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,100,97,116,97,32,116,111,32,97,32,112,111,114,116,46,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,40,80,111,114,116,44,32,68,97,116,97,44,32,91,93,41>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,40,80,111,114,116,44,32,68,97,116,97,41>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,99,111,109,109,97,110,100,32,105,115,32,97,98,111,114,116,101,100,44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,115,117,115,112,101,110,100,101,100,32,117,110,116,105,108,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,98,117,115,121,32,97,110,121,109,111,114,101,46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,111,114,99,101>>]}]},{dd,[],[<<84,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,115,117,115,112,101,110,100,101,100,32,105,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,105,110,115,116,101,97,100,32,116,104,101,32,112,111,114,116,32,99,111,109,109,97,110,100,32,105,115,32,102,111,114,99,101,100,32,116,104,114,111,117,103,104,46,32,84,104,101,32,99,97,108,108,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32,116,104,101,32,100,114,105,118,101,114,32,111,102,32,116,104,101,32,112,111,114,116,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,105,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,100,114,105,118,101,114,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,100,114,105,118,101,114,95,101,110,116,114,121,35,100,114,105,118,101,114,95,102,108,97,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<69,82,76,95,68,82,86,95,70,76,65,71,95,83,79,70,84,95,66,85,83,89>>]}]},<<46>>]},{dt,[],[{code,[],[<<110,111,115,117,115,112,101,110,100>>]}]},{dd,[],[<<84,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,115,117,115,112,101,110,100,101,100,32,105,102,32,116,104,101,32,112,111,114,116,32,105,115,32,98,117,115,121,44,32,105,110,115,116,101,97,100,32,116,104,101,32,112,111,114,116,32,99,111,109,109,97,110,100,32,105,115,32,97,98,111,114,116,101,100,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<77,111,114,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<68,97,116,97>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,73,47,79,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,105,111,110,76,105,115,116>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<102,111,114,99,101>>]},<<32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,98,117,116,32,116,104,101,32,100,114,105,118,101,114,32,111,102,32,116,104,101,32,112,111,114,116,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,102,111,114,99,105,110,103,32,116,104,114,111,117,103,104,32,97,32,98,117,115,121,32,112,111,114,116,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,115,101,110,100,32,100,97,116,97,32,116,111,32,97,110,32,117,110,107,110,111,119,110,32,112,111,114,116,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,100,97,116,97,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,50,51,56>>,signature => [{attribute,{3534,2},spec,{{port_command,3},[{type,{3534,19},bounded_fun,[{type,{3534,19},'fun',[{type,{3534,19},product,[{var,{3534,20},'Port'},{var,{3534,26},'Data'},{var,{3534,32},'OptionList'}]},{type,{3534,47},boolean,[]}]},[{type,{3535,7},constraint,[{atom,{3535,7},is_subtype},[{var,{3535,7},'Port'},{type,{3535,15},union,[{type,{3535,15},port,[]},{type,{3535,24},atom,[]}]}]]},{type,{3536,7},constraint,[{atom,{3536,7},is_subtype},[{var,{3536,7},'Data'},{type,{3536,15},iodata,[]}]]},{type,{3537,7},constraint,[{atom,{3537,7},is_subtype},[{var,{3537,7},'Option'},{type,{3537,17},union,[{atom,{3537,17},force},{atom,{3537,25},nosuspend}]}]]},{type,{3538,7},constraint,[{atom,{3538,7},is_subtype},[{var,{3538,7},'OptionList'},{type,{3538,21},list,[{var,{3538,22},'Option'}]}]]}]]}]}}]}},{{function,port_connect,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3550}],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,40,116,104,101,32,99,111,110,110,101,99,116,101,100,32,112,111,114,116,41,32,116,111,32>>,{code,[],[<<80,105,100>>]},<<46,32,82,111,117,103,104,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{p,[],[<<84,104,101,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,32,100,105,102,102,101,114,115,44,32,115,101,101,32,98,101,108,111,119,46>>]}]},{li,[],[{p,[],[<<84,104,101,32,112,111,114,116,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,114,101,112,108,121,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,99,111,110,110,101,99,116,101,100,125>>]},<<46>>]}]},{li,[],[{p,[],[{code,[],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,49>>]},<<32,105,115,32,115,121,110,99,104,114,111,110,111,117,115,44,32,115,101,101,32,98,101,108,111,119,46>>]}]},{li,[],[{p,[],[<<84,104,101,32,110,101,119,32,112,111,114,116,32,111,119,110,101,114,32,103,101,116,115,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,46>>]}]}]},{p,[],[<<84,104,101,32,111,108,100,32,112,111,114,116,32,111,119,110,101,114,32,115,116,97,121,115,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,32,97,110,100,32,109,117,115,116,32,99,97,108,108,32>>,{code,[],[<<117,110,108,105,110,107,40,80,111,114,116,41>>]},<<32,105,102,32,116,104,105,115,32,105,115,32,110,111,116,32,100,101,115,105,114,101,100,46,32,65,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,116,111,32,98,101,32,97,110,121,32,112,114,111,99,101,115,115,32,119,105,116,104,32>>,{code,[],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,50>>]},<<46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,114,105,115,111,110,58,32>>,{code,[],[<<80,111,114,116,32,33,32,123,115,101,108,102,40,41,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,111,110,108,121,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,111,114,116,32,111,114,32,97,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,32,99,108,111,115,101,100,32,112,111,114,116,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,110,32,111,112,101,110,32,112,111,114,116,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32,112,111,114,116,32,114,101,112,108,105,101,115,32,119,105,116,104,32>>,{code,[],[<<123,80,111,114,116,44,32,99,111,110,110,101,99,116,101,100,125>>]},<<32,116,111,32,116,104,101,32,111,108,100,32,112,111,114,116,32,111,119,110,101,114,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,111,108,100,32,112,111,114,116,32,111,119,110,101,114,32,105,115,32,115,116,105,108,108,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,119,104,105,108,101,32,116,104,101,32,110,101,119,32,105,115,32,110,111,116,46,32,73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,97,110,32,111,112,101,110,32,112,111,114,116,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,116,104,101,32>>,{em,[],[<<112,111,114,116,32,111,119,110,101,114>>]},<<32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<46,32,84,104,101,32,112,111,114,116,32,111,119,110,101,114,32,102,97,105,108,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,115,105,103>>]},<<32,97,108,115,111,32,105,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,120,105,115,116,105,110,103,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,121,32,112,114,111,99,101,115,115,32,99,97,110,32,115,101,116,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,117,115,105,110,103,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,97,115,32,105,102,32,105,116,32,105,116,115,101,108,102,32,119,97,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,44,32,98,117,116,32,116,104,101,32,114,101,112,108,121,32,97,108,119,97,121,115,32,103,111,101,115,32,116,111,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,54,44,32>>,{code,[],[<<80,111,114,116,32,33,32,123,80,111,114,116,79,119,110,101,114,44,32,123,99,111,110,110,101,99,116,44,32,80,105,100,125,125>>]},<<32,105,115,32,116,114,117,108,121,32,97,115,121,110,99,104,114,111,110,111,117,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,97,108,119,97,121,115,32,98,101,101,110,32,100,111,99,117,109,101,110,116,101,100,32,97,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,108,101,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,121,110,99,104,114,111,110,111,117,115,46,32>>,{code,[],[<<112,111,114,116,95,99,111,110,110,101,99,116,47,50>>]},<<32,105,115,32,104,111,119,101,118,101,114,32,115,116,105,108,108,32,102,117,108,108,121,32,115,121,110,99,104,114,111,110,111,117,115,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,32,101,114,114,111,114,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,44,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,99,108,111,115,101,100,32,112,111,114,116,44,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,111,99,99,117,114,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,120,105,115,116,105,110,103,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,48,50>>,signature => [{attribute,{3550,2},spec,{{port_connect,2},[{type,{3550,19},bounded_fun,[{type,{3550,19},'fun',[{type,{3550,19},product,[{var,{3550,20},'Port'},{var,{3550,26},'Pid'}]},{atom,{3550,34},true}]},[{type,{3551,7},constraint,[{atom,{3551,7},is_subtype},[{var,{3551,7},'Port'},{type,{3551,15},union,[{type,{3551,15},port,[]},{type,{3551,24},atom,[]}]}]]},{type,{3552,7},constraint,[{atom,{3552,7},is_subtype},[{var,{3552,7},'Pid'},{type,{3552,14},pid,[]}]]}]]}]}}]}},{{function,port_control,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3575}],[<<112,111,114,116,95,99,111,110,116,114,111,108,47,51>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,121,110,99,104,114,111,110,111,117,115,32,99,111,110,116,114,111,108,32,111,112,101,114,97,116,105,111,110,32,111,110,32,97,32,112,111,114,116,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,97,110,100,32>>,{code,[],[<<68,97,116,97>>]},<<32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,44,32,116,104,97,116,32,105,115,44,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46,32,78,111,116,32,97,108,108,32,112,111,114,116,32,100,114,105,118,101,114,115,32,115,117,112,112,111,114,116,32,116,104,105,115,32,99,111,110,116,114,111,108,32,102,101,97,116,117,114,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,48,46,46,50,53,53,44,32,111,114,32,97,32,98,105,110,97,114,121,44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46,32,84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,116,104,101,32,114,101,116,117,114,110,101,100,32,100,97,116,97,32,97,108,115,111,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,111,112,101,110,32,112,111,114,116,32,111,114,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,97,110,32,111,112,101,110,32,112,111,114,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,99,97,110,110,111,116,32,102,105,116,32,105,110,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,110,99,104,114,111,110,111,117,115,32,99,111,110,116,114,111,108,32,111,112,101,114,97,116,105,111,110,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,115,111,32,100,101,99,105,100,101,115,32,102,111,114,32,97,110,121,32,114,101,97,115,111,110,32,40,112,114,111,98,97,98,108,121,32,115,111,109,101,116,104,105,110,103,32,119,114,111,110,103,32,119,105,116,104,32>>,{code,[],[<<79,112,101,114,97,116,105,111,110>>]},<<32,111,114,32>>,{code,[],[<<68,97,116,97>>]},<<41,46>>,{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<68,111,32,110,111,116,32,99,97,108,108,32>>,{code,[],[<<112,111,114,116,95,99,111,110,116,114,111,108,47,51>>]},<<32,119,105,116,104,32,97,110,32,117,110,107,110,111,119,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,101,120,112,101,99,116,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,46,32,65,110,121,32,117,110,100,101,102,105,110,101,100,32,98,101,104,97,118,105,111,114,32,105,115,32,112,111,115,115,105,98,108,101,32,40,105,110,99,108,117,100,105,110,103,32,110,111,100,101,32,99,114,97,115,104,41,32,100,101,112,101,110,100,105,110,103,32,111,110,32,104,111,119,32,116,104,101,32,112,111,114,116,32,100,114,105,118,101,114,32,105,110,116,101,114,112,114,101,116,115,32,116,104,101,32,115,117,112,112,108,105,101,100,32,97,114,103,117,109,101,110,116,115,46>>]}]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,51,55,49>>,signature => [{attribute,{3575,2},spec,{{port_control,3},[{type,{3575,19},bounded_fun,[{type,{3575,19},'fun',[{type,{3575,19},product,[{var,{3575,20},'Port'},{var,{3575,26},'Operation'},{var,{3575,37},'Data'}]},{type,{3575,46},union,[{type,{3575,46},iodata,[]},{type,{3575,57},binary,[]}]}]},[{type,{3576,7},constraint,[{atom,{3576,7},is_subtype},[{var,{3576,7},'Port'},{type,{3576,15},union,[{type,{3576,15},port,[]},{type,{3576,24},atom,[]}]}]]},{type,{3577,7},constraint,[{atom,{3577,7},is_subtype},[{var,{3577,7},'Operation'},{type,{3577,20},integer,[]}]]},{type,{3578,7},constraint,[{atom,{3578,7},is_subtype},[{var,{3578,7},'Data'},{type,{3578,15},iodata,[]}]]}]]}]}}]}},{{function,port_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3616}],[<<112,111,114,116,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,116,117,112,108,101,115,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32>>,{code,[],[<<80,111,114,116>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,111,112,101,110,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,110,100,32,97,108,108,32,116,104,101,32,116,117,112,108,101,115,32,97,114,101,32,110,111,116,32,109,97,110,100,97,116,111,114,121,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,49>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<84,104,101,32,114,101,115,117,108,116,32,99,111,110,116,97,105,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32>>,{code,[],[<<73,116,101,109>>]},<<115,58>>]},{ul,[],[{li,[],[{code,[],[<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,40,105,102,32,116,104,101,32,112,111,114,116,32,104,97,115,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,41>>]},{li,[],[{code,[],[<<105,100>>]}]},{li,[],[{code,[],[<<99,111,110,110,101,99,116,101,100>>]}]},{li,[],[{code,[],[<<108,105,110,107,115>>]}]},{li,[],[{code,[],[<<110,97,109,101>>]}]},{li,[],[{code,[],[<<105,110,112,117,116>>]}]},{li,[],[{code,[],[<<111,117,116,112,117,116>>]}]}]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,105,102,102,101,114,101,110,116,32>>,{code,[],[<<73,116,101,109>>]},<<115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,111,114,116,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,49,53>>,signature => [{attribute,{3616,2},spec,{{erlang,port_info,1},[{type,{3616,23},bounded_fun,[{type,{3616,23},'fun',[{type,{3616,23},product,[{var,{3616,24},'Port'}]},{var,{3616,33},'Result'}]},[{type,{3617,7},constraint,[{atom,{3617,7},is_subtype},[{var,{3617,7},'Port'},{type,{3617,15},union,[{type,{3617,15},port,[]},{type,{3617,24},atom,[]}]}]]},{type,{3618,7},constraint,[{atom,{3618,7},is_subtype},[{var,{3618,7},'ResultItem'},{type,{3618,21},union,[{type,{3618,21},tuple,[{atom,{3618,22},registered_name},{ann_type,{3618,39},[{var,{3618,39},'RegisteredName'},{type,{3618,57},atom,[]}]}]},{type,{3619,7},tuple,[{atom,{3619,8},id},{ann_type,{3619,12},[{var,{3619,12},'Index'},{type,{3619,21},non_neg_integer,[]}]}]},{type,{3620,7},tuple,[{atom,{3620,8},connected},{ann_type,{3620,19},[{var,{3620,19},'Pid'},{type,{3620,26},pid,[]}]}]},{type,{3621,7},tuple,[{atom,{3621,8},links},{ann_type,{3621,15},[{var,{3621,15},'Pids'},{type,{3621,23},list,[{type,{3621,24},pid,[]}]}]}]},{type,{3622,7},tuple,[{atom,{3622,8},name},{ann_type,{3622,14},[{var,{3622,14},'String'},{type,{3622,24},string,[]}]}]},{type,{3623,7},tuple,[{atom,{3623,8},input},{ann_type,{3623,15},[{var,{3623,15},'Bytes'},{type,{3623,24},non_neg_integer,[]}]}]},{type,{3624,7},tuple,[{atom,{3624,8},output},{ann_type,{3624,16},[{var,{3624,16},'Bytes'},{type,{3624,25},non_neg_integer,[]}]}]},{type,{3625,7},tuple,[{atom,{3625,8},os_pid},{ann_type,{3625,16},[{var,{3625,16},'OsPid'},{type,{3625,25},union,[{type,{3625,25},non_neg_integer,[]},{atom,{3625,45},undefined}]}]}]}]}]]},{type,{3626,7},constraint,[{atom,{3626,7},is_subtype},[{var,{3626,7},'Result'},{type,{3626,17},union,[{type,{3626,17},list,[{var,{3626,18},'ResultItem'}]},{atom,{3626,32},undefined}]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,99,111,110,110,101,99,116,101,100,32,116,111,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,52,54>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3637,23},bounded_fun,[{type,{3637,23},'fun',[{type,{3637,23},product,[{var,{3637,24},'Port'},{atom,{3637,30},connected}]},{type,{3637,44},union,[{type,{3637,44},tuple,[{atom,{3637,45},connected},{var,{3637,56},'Pid'}]},{atom,{3637,63},undefined}]}]},[{type,{3638,7},constraint,[{atom,{3638,7},is_subtype},[{var,{3638,7},'Port'},{type,{3638,15},union,[{type,{3638,15},port,[]},{type,{3638,24},atom,[]}]}]]},{type,{3639,7},constraint,[{atom,{3639,7},is_subtype},[{var,{3639,7},'Pid'},{type,{3639,14},pid,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<73,110,100,101,120>>]},<<32,105,115,32,116,104,101,32,105,110,116,101,114,110,97,108,32,105,110,100,101,120,32,111,102,32,116,104,101,32,112,111,114,116,46,32,84,104,105,115,32,105,110,100,101,120,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,115,101,112,97,114,97,116,101,32,112,111,114,116,115,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,54,50>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3640,9},bounded_fun,[{type,{3640,9},'fun',[{type,{3640,9},product,[{var,{3640,10},'Port'},{atom,{3640,16},id}]},{type,{3640,23},union,[{type,{3640,23},tuple,[{atom,{3640,24},id},{var,{3640,28},'Index'}]},{atom,{3640,37},undefined}]}]},[{type,{3641,7},constraint,[{atom,{3641,7},is_subtype},[{var,{3641,7},'Port'},{type,{3641,15},union,[{type,{3641,15},port,[]},{type,{3641,24},atom,[]}]}]]},{type,{3642,7},constraint,[{atom,{3642,7},is_subtype},[{var,{3642,7},'Index'},{type,{3642,16},non_neg_integer,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,112,111,114,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,55,56>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3643,9},bounded_fun,[{type,{3643,9},'fun',[{type,{3643,9},product,[{var,{3643,10},'Port'},{atom,{3643,16},input}]},{type,{3643,26},union,[{type,{3643,26},tuple,[{atom,{3643,27},input},{var,{3643,34},'Bytes'}]},{atom,{3643,43},undefined}]}]},[{type,{3644,7},constraint,[{atom,{3644,7},is_subtype},[{var,{3644,7},'Port'},{type,{3644,15},union,[{type,{3644,15},port,[]},{type,{3644,24},atom,[]}]}]]},{type,{3645,7},constraint,[{atom,{3645,7},is_subtype},[{var,{3645,7},'Bytes'},{type,{3645,16},non_neg_integer,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<80,105,100,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,116,104,101,32,112,111,114,116,32,105,115,32,108,105,110,107,101,100,32,116,111,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,52,57,52>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3646,9},bounded_fun,[{type,{3646,9},'fun',[{type,{3646,9},product,[{var,{3646,10},'Port'},{atom,{3646,16},links}]},{type,{3646,26},union,[{type,{3646,26},tuple,[{atom,{3646,27},links},{var,{3646,34},'Pids'}]},{atom,{3646,42},undefined}]}]},[{type,{3647,7},constraint,[{atom,{3647,7},is_subtype},[{var,{3647,7},'Port'},{type,{3647,15},union,[{type,{3647,15},port,[]},{type,{3647,24},atom,[]}]}]]},{type,{3648,7},constraint,[{atom,{3648,7},is_subtype},[{var,{3648,7},'Pids'},{type,{3648,15},list,[{type,{3648,16},pid,[]}]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<76,111,99,107,105,110,103>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{code,[],[<<112,111,114,116,95,108,101,118,101,108>>]},<<32,40,112,111,114,116,45,115,112,101,99,105,102,105,99,32,108,111,99,107,105,110,103,41>>]},{li,[],[{code,[],[<<100,114,105,118,101,114,95,108,101,118,101,108>>]},<<32,40,100,114,105,118,101,114,45,115,112,101,99,105,102,105,99,32,108,111,99,107,105,110,103,41>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,115,101,32,114,101,115,117,108,116,115,32,97,114,101,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,115,112,101,99,105,102,105,99,32,97,110,100,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,49,48>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3649,9},bounded_fun,[{type,{3649,9},'fun',[{type,{3649,9},product,[{var,{3649,10},'Port'},{atom,{3649,16},locking}]},{type,{3649,28},union,[{type,{3649,28},tuple,[{atom,{3649,29},locking},{var,{3649,38},'Locking'}]},{atom,{3649,49},undefined}]}]},[{type,{3650,7},constraint,[{atom,{3650,7},is_subtype},[{var,{3650,7},'Port'},{type,{3650,15},union,[{type,{3650,15},port,[]},{type,{3650,24},atom,[]}]}]]},{type,{3651,7},constraint,[{atom,{3651,7},is_subtype},[{var,{3651,7},'Locking'},{type,{3651,18},union,[{atom,{3651,18},false},{atom,{3651,28},port_level},{atom,{3651,43},driver_level}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{a,[{id,<<112,111,114,116,95,105,110,102,111,95,109,101,109,111,114,121>>}],[]},{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,116,104,105,115,32,112,111,114,116,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,101,32,112,111,114,116,32,105,116,115,101,108,102,32,99,97,110,32,104,97,118,101,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,116,104,97,116,32,105,115,32,110,111,116,32,105,110,99,108,117,100,101,100,32,105,110,32>>,{code,[],[<<66,121,116,101,115>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,51,49>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3652,9},bounded_fun,[{type,{3652,9},'fun',[{type,{3652,9},product,[{var,{3652,10},'Port'},{atom,{3652,16},memory}]},{type,{3652,27},union,[{type,{3652,27},tuple,[{atom,{3652,28},memory},{var,{3652,36},'Bytes'}]},{atom,{3652,45},undefined}]}]},[{type,{3653,7},constraint,[{atom,{3653,7},is_subtype},[{var,{3653,7},'Port'},{type,{3653,15},union,[{type,{3653,15},port,[]},{type,{3653,24},atom,[]}]}]]},{type,{3654,7},constraint,[{atom,{3654,7},is_subtype},[{var,{3654,7},'Bytes'},{type,{3654,16},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<77,111,110,105,116,111,114,115>>]},<<32,114,101,112,114,101,115,101,110,116,32,112,114,111,99,101,115,115,101,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,116,104,105,115,32,112,111,114,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,53,48>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3655,9},bounded_fun,[{type,{3655,9},'fun',[{type,{3655,9},product,[{var,{3655,10},'Port'},{atom,{3655,16},monitors}]},{type,{3655,29},union,[{type,{3655,29},tuple,[{atom,{3655,30},monitors},{var,{3655,40},'Monitors'}]},{atom,{3655,52},undefined}]}]},[{type,{3656,7},constraint,[{atom,{3656,7},is_subtype},[{var,{3656,7},'Port'},{type,{3656,15},union,[{type,{3656,15},port,[]},{type,{3656,24},atom,[]}]}]]},{type,{3657,7},constraint,[{atom,{3657,7},is_subtype},[{var,{3657,7},'Monitors'},{type,{3657,19},list,[{type,{3657,20},tuple,[{atom,{3657,21},process},{type,{3657,30},pid,[]}]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,108,105,115,116,32,111,102,32,112,105,100,115,32,116,104,97,116,32,97,114,101,32,109,111,110,105,116,111,114,105,110,103,32,103,105,118,101,110,32,112,111,114,116,32,97,116,32,116,104,101,32,109,111,109,101,110,116,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,54,54>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3658,9},bounded_fun,[{type,{3658,9},'fun',[{type,{3658,9},product,[{var,{3658,10},'Port'},{atom,{3658,16},monitored_by}]},{type,{3658,33},union,[{type,{3658,33},tuple,[{atom,{3658,34},monitored_by},{var,{3658,48},'MonitoredBy'}]},{atom,{3658,63},undefined}]}]},[{type,{3659,7},constraint,[{atom,{3659,7},is_subtype},[{var,{3659,7},'Port'},{type,{3659,15},union,[{type,{3659,15},port,[]},{type,{3659,24},atom,[]}]}]]},{type,{3660,7},constraint,[{atom,{3660,7},is_subtype},[{var,{3660,7},'MonitoredBy'},{type,{3660,22},list,[{type,{3660,23},pid,[]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<78,97,109,101>>]},<<32,105,115,32,116,104,101,32,99,111,109,109,97,110,100,32,110,97,109,101,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,95,112,111,114,116,47,50>>]}]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,56,50>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3661,9},bounded_fun,[{type,{3661,9},'fun',[{type,{3661,9},product,[{var,{3661,10},'Port'},{atom,{3661,16},name}]},{type,{3661,25},union,[{type,{3661,25},tuple,[{atom,{3661,26},name},{var,{3661,32},'Name'}]},{atom,{3661,40},undefined}]}]},[{type,{3662,7},constraint,[{atom,{3662,7},is_subtype},[{var,{3662,7},'Port'},{type,{3662,15},union,[{type,{3662,15},port,[]},{type,{3662,24},atom,[]}]}]]},{type,{3663,7},constraint,[{atom,{3663,7},is_subtype},[{var,{3663,7},'Name'},{type,{3663,15},string,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<79,115,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,111,114,32,101,113,117,105,118,97,108,101,110,116,41,32,111,102,32,97,110,32,79,83,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,95,112,111,114,116,40,123,115,112,97,119,110,32,124,32,115,112,97,119,110,95,101,120,101,99,117,116,97,98,108,101,44,32,67,111,109,109,97,110,100,125,44,32,79,112,116,105,111,110,115,41>>]}]},<<46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,110,111,116,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,112,97,119,110,105,110,103,32,97,110,32,79,83,32,112,114,111,99,101,115,115,44,32,116,104,101,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,53,57,56>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3664,9},bounded_fun,[{type,{3664,9},'fun',[{type,{3664,9},product,[{var,{3664,10},'Port'},{atom,{3664,16},os_pid}]},{type,{3664,27},union,[{type,{3664,27},tuple,[{atom,{3664,28},os_pid},{var,{3664,36},'OsPid'}]},{atom,{3664,45},undefined}]}]},[{type,{3665,7},constraint,[{atom,{3665,7},is_subtype},[{var,{3665,7},'Port'},{type,{3665,15},union,[{type,{3665,15},port,[]},{type,{3665,24},atom,[]}]}]]},{type,{3666,7},constraint,[{atom,{3666,7},is_subtype},[{var,{3666,7},'OsPid'},{type,{3666,16},union,[{type,{3666,16},non_neg_integer,[]},{atom,{3666,36},undefined}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,119,114,105,116,116,101,110,32,116,111,32,116,104,101,32,112,111,114,116,32,102,114,111,109,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,111,114,116,95,99,111,109,109,97,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,50>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,111,114,116,95,99,111,109,109,97,110,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,114,116,95,99,111,109,109,97,110,100,47,51>>]}]},<<44,32,111,114,32>>,{code,[],[<<80,111,114,116,32,33,32,123,79,119,110,101,114,44,32,123,99,111,109,109,97,110,100,44,32,68,97,116,97,125>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,49,55>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3667,9},bounded_fun,[{type,{3667,9},'fun',[{type,{3667,9},product,[{var,{3667,10},'Port'},{atom,{3667,16},output}]},{type,{3667,27},union,[{type,{3667,27},tuple,[{atom,{3667,28},output},{var,{3667,36},'Bytes'}]},{atom,{3667,45},undefined}]}]},[{type,{3668,7},constraint,[{atom,{3668,7},is_subtype},[{var,{3668,7},'Port'},{type,{3668,15},union,[{type,{3668,15},port,[]},{type,{3668,24},atom,[]}]}]]},{type,{3669,7},constraint,[{atom,{3669,7},is_subtype},[{var,{3669,7},'Bytes'},{type,{3669,16},non_neg_integer,[]}]]}]]}]}}]}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,111,111,108,101,97,110>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,112,111,114,116,32,112,97,114,97,108,108,101,108,105,115,109,32,104,105,110,116,32,117,115,101,100,32,98,121,32,116,104,105,115,32,112,111,114,116,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,111,112,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,97,114,97,108,108,101,108,105,115,109>>]}]},<<32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,111,112,101,110,95,112,111,114,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,95,112,111,114,116,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,51,54>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3670,9},bounded_fun,[{type,{3670,9},'fun',[{type,{3670,9},product,[{var,{3670,10},'Port'},{atom,{3670,16},parallelism}]},{type,{3670,32},union,[{type,{3670,32},tuple,[{atom,{3670,33},parallelism},{var,{3670,46},'Boolean'}]},{atom,{3670,57},undefined}]}]},[{type,{3671,7},constraint,[{atom,{3671,7},is_subtype},[{var,{3671,7},'Port'},{type,{3671,15},union,[{type,{3671,15},port,[]},{type,{3671,24},atom,[]}]}]]},{type,{3672,7},constraint,[{atom,{3672,7},is_subtype},[{var,{3672,7},'Boolean'},{type,{3672,18},boolean,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,113,117,101,117,101,100,32,98,121,32,116,104,101,32,112,111,114,116,32,117,115,105,110,103,32,116,104,101,32,69,82,84,83,32,100,114,105,118,101,114,32,113,117,101,117,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,52,55>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3673,9},bounded_fun,[{type,{3673,9},'fun',[{type,{3673,9},product,[{var,{3673,10},'Port'},{atom,{3673,16},queue_size}]},{type,{3673,31},union,[{type,{3673,31},tuple,[{atom,{3673,32},queue_size},{var,{3673,44},'Bytes'}]},{atom,{3673,53},undefined}]}]},[{type,{3674,7},constraint,[{atom,{3674,7},is_subtype},[{var,{3674,7},'Port'},{type,{3674,15},union,[{type,{3674,15},port,[]},{type,{3674,24},atom,[]}]}]]},{type,{3675,7},constraint,[{atom,{3675,7},is_subtype},[{var,{3675,7},'Bytes'},{type,{3675,16},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,port_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3637}],[<<112,111,114,116,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<82,101,103,105,115,116,101,114,101,100,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,111,102,32,116,104,101,32,112,111,114,116,46,32,73,102,32,116,104,101,32,112,111,114,116,32,104,97,115,32,110,111,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,111,112,101,110,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32,116,104,101,32,112,111,114,116,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,108,105,110,107,101,100,32,116,111,32,116,104,101,32,112,111,114,116,44,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,116,104,101,32,112,111,114,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<112,111,114,116,95,105,110,102,111,47,50>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,97,110,32,97,116,111,109,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,54,52>>,signature => [{attribute,{3637,2},spec,{{erlang,port_info,2},[{type,{3676,9},bounded_fun,[{type,{3676,9},'fun',[{type,{3676,9},product,[{var,{3676,10},'Port'},{atom,{3676,16},registered_name}]},{type,{3676,36},union,[{type,{3676,36},tuple,[{atom,{3676,37},registered_name},{var,{3676,54},'RegisteredName'}]},{type,{3676,72},nil,[]},{atom,{3676,77},undefined}]}]},[{type,{3677,7},constraint,[{atom,{3677,7},is_subtype},[{var,{3677,7},'Port'},{type,{3677,15},union,[{type,{3677,15},port,[]},{type,{3677,24},atom,[]}]}]]},{type,{3678,7},constraint,[{atom,{3678,7},is_subtype},[{var,{3678,7},'RegisteredName'},{type,{3678,25},atom,[]}]]}]]}]}}]}},{{function,port_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1509}],[<<112,111,114,116,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32>>,{code,[],[<<80,111,114,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,56,49>>,signature => [{attribute,{1509,2},spec,{{port_to_list,1},[{type,{1509,19},bounded_fun,[{type,{1509,19},'fun',[{type,{1509,19},product,[{var,{1509,20},'Port'}]},{type,{1509,29},string,[]}]},[{type,{1510,7},constraint,[{atom,{1510,7},is_subtype},[{var,{1510,7},'Port'},{type,{1510,15},port,[]}]]}]]}]}}]}},{{function,ports,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1515}],[<<112,111,114,116,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,97,108,108,32,116,104,101,32,112,111,114,116,115,32,101,120,105,115,116,105,110,103,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,32,101,120,105,116,105,110,103,32,112,111,114,116,32,101,120,105,115,116,115,44,32,98,117,116,32,105,115,32,110,111,116,32,111,112,101,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,54,57,48>>,signature => [{attribute,{1515,2},spec,{{erlang,ports,0},[{type,{1515,19},'fun',[{type,{1515,19},product,[]},{type,{1515,25},list,[{type,{1515,26},port,[]}]}]}]}}]}},{{function,pre_loaded,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1661}],[<<112,114,101,95,108,111,97,100,101,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,69,114,108,97,110,103,32,109,111,100,117,108,101,115,32,116,104,97,116,32,97,114,101,32,112,114,101,108,111,97,100,101,100,32,105,110,32,116,104,101,32,114,117,110,45,116,105,109,101,32,115,121,115,116,101,109,46,32,80,114,101,45,108,111,97,100,101,100,32,109,111,100,117,108,101,115,32,97,114,101,32,69,114,108,97,110,103,32,109,111,100,117,108,101,115,32,116,104,97,116,32,97,114,101,32,110,101,101,100,101,100,32,116,111,32,98,111,111,116,115,116,114,97,112,32,116,104,101,32,115,121,115,116,101,109,32,116,111,32,108,111,97,100,32,116,104,101,32,102,105,114,115,116,32,69,114,108,97,110,103,32,109,111,100,117,108,101,115,32,102,114,111,109,32,101,105,116,104,101,114,32,100,105,115,107,32,111,114,32,98,121,32,117,115,105,110,103,32>>,{a,[{href,<<107,101,114,110,101,108,58,101,114,108,95,98,111,111,116,95,115,101,114,118,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,98,111,111,116,95,115,101,114,118,101,114>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,48,48>>,signature => [{attribute,{1661,2},spec,{{pre_loaded,0},[{type,{1661,17},'fun',[{type,{1661,17},product,[]},{type,{1661,23},list,[{type,{1661,24},module,[]}]}]}]}}]}},{{function,process_display,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1666}],[<<112,114,111,99,101,115,115,95,100,105,115,112,108,97,121,47,50>>],#{<<101,110>> => [{p,[],[<<87,114,105,116,101,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<32,111,110,32,115,116,97,110,100,97,114,100,32,101,114,114,111,114,46,32,84,104,101,32,111,110,108,121,32,97,108,108,111,119,101,100,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<98,97,99,107,116,114,97,99,101>>]},<<44,32,119,104,105,99,104,32,115,104,111,119,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,99,97,108,108,32,115,116,97,99,107,44,32,105,110,99,108,117,100,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,97,108,108,32,99,104,97,105,110,44,32,119,105,116,104,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,112,114,105,110,116,101,100,32,102,105,114,115,116,46,32,84,104,101,32,102,111,114,109,97,116,32,111,102,32,116,104,101,32,111,117,116,112,117,116,32,105,115,32,110,111,116,32,102,117,114,116,104,101,114,32,100,101,102,105,110,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,49,50>>,signature => [{attribute,{1666,2},spec,{{erlang,process_display,2},[{type,{1666,29},bounded_fun,[{type,{1666,29},'fun',[{type,{1666,29},product,[{var,{1666,30},'Pid'},{var,{1666,35},'Type'}]},{atom,{1666,44},true}]},[{type,{1667,7},constraint,[{atom,{1667,7},is_subtype},[{var,{1667,7},'Pid'},{type,{1667,14},pid,[]}]]},{type,{1668,7},constraint,[{atom,{1668,7},is_subtype},[{var,{1668,7},'Type'},{atom,{1668,15},backtrace}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<87,104,101,110,32>>,{code,[],[<<116,114,97,112,95,101,120,105,116>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,101,120,105,116,32,115,105,103,110,97,108,115,32,97,114,114,105,118,105,110,103,32,116,111,32,97,32,112,114,111,99,101,115,115,32,97,114,101,32,99,111,110,118,101,114,116,101,100,32,116,111,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,70,114,111,109,44,32,82,101,97,115,111,110,125>>]},<<32,109,101,115,115,97,103,101,115,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,114,101,99,101,105,118,101,100,32,97,115,32,111,114,100,105,110,97,114,121,32,109,101,115,115,97,103,101,115,46,32,73,102,32>>,{code,[],[<<116,114,97,112,95,101,120,105,116>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,32,105,102,32,105,116,32,114,101,99,101,105,118,101,115,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,111,116,104,101,114,32,116,104,97,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,110,100,32,116,104,101,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,112,114,111,112,97,103,97,116,101,100,32,116,111,32,105,116,115,32,108,105,110,107,101,100,32,112,114,111,99,101,115,115,101,115,46,32,65,112,112,108,105,99,97,116,105,111,110,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,110,111,114,109,97,108,108,121,32,110,111,116,32,116,111,32,116,114,97,112,32,101,120,105,116,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,120,105,116,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,50,54>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2359,19},bounded_fun,[{type,{2359,19},'fun',[{type,{2359,19},product,[{atom,{2359,20},trap_exit},{var,{2359,31},'Boolean'}]},{var,{2359,43},'OldBoolean'}]},[{type,{2360,7},constraint,[{atom,{2360,7},is_subtype},[{var,{2360,7},'Boolean'},{type,{2360,18},boolean,[]}]]},{type,{2361,7},constraint,[{atom,{2361,7},is_subtype},[{var,{2361,7},'OldBoolean'},{type,{2361,21},boolean,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<85,115,101,100,32,98,121,32,97,32,112,114,111,99,101,115,115,32,116,111,32,114,101,100,101,102,105,110,101,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,102,111,114,32,117,110,100,101,102,105,110,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,110,100,32,117,110,100,101,102,105,110,101,100,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,101,115,46,32,73,110,101,120,112,101,114,105,101,110,99,101,100,32,117,115,101,114,115,32,97,114,101,32,110,111,116,32,116,111,32,117,115,101,32,116,104,105,115,32,102,108,97,103,44,32,97,115,32,99,111,100,101,32,97,117,116,111,45,108,111,97,100,105,110,103,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,99,111,114,114,101,99,116,32,111,112,101,114,97,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103,32,109,111,100,117,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,52,52>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2362,19},bounded_fun,[{type,{2362,19},'fun',[{type,{2362,19},product,[{atom,{2362,20},error_handler},{var,{2362,35},'Module'}]},{var,{2362,46},'OldModule'}]},[{type,{2363,7},constraint,[{atom,{2363,7},is_subtype},[{var,{2363,7},'Module'},{type,{2363,17},atom,[]}]]},{type,{2364,7},constraint,[{atom,{2364,7},is_subtype},[{var,{2364,7},'OldModule'},{type,{2364,20},atom,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,103,101,110,101,114,97,116,105,111,110,97,108,32,99,111,108,108,101,99,116,105,111,110,115,32,98,101,102,111,114,101,32,102,111,114,99,105,110,103,32,97,32,102,117,108,108,115,119,101,101,112,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,53,56>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2365,19},bounded_fun,[{type,{2365,19},'fun',[{type,{2365,19},product,[{atom,{2365,20},fullsweep_after},{var,{2365,37},'FullsweepAfter'}]},{var,{2365,56},'OldFullsweepAfter'}]},[{type,{2366,7},constraint,[{atom,{2366,7},is_subtype},[{var,{2366,7},'FullsweepAfter'},{type,{2366,25},non_neg_integer,[]}]]},{type,{2367,7},constraint,[{atom,{2367,7},is_subtype},[{var,{2367,7},'OldFullsweepAfter'},{type,{2367,28},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,54,57>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2368,19},bounded_fun,[{type,{2368,19},'fun',[{type,{2368,19},product,[{atom,{2368,20},min_heap_size},{var,{2368,35},'MinHeapSize'}]},{var,{2368,51},'OldMinHeapSize'}]},[{type,{2369,7},constraint,[{atom,{2369,7},is_subtype},[{var,{2369,7},'MinHeapSize'},{type,{2369,22},non_neg_integer,[]}]]},{type,{2370,7},constraint,[{atom,{2370,7},is_subtype},[{var,{2370,7},'OldMinHeapSize'},{type,{2370,25},non_neg_integer,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,56,48>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2371,19},bounded_fun,[{type,{2371,19},'fun',[{type,{2371,19},product,[{atom,{2371,20},min_bin_vheap_size},{var,{2371,40},'MinBinVHeapSize'}]},{var,{2371,60},'OldMinBinVHeapSize'}]},[{type,{2372,7},constraint,[{atom,{2372,7},is_subtype},[{var,{2372,7},'MinBinVHeapSize'},{type,{2372,26},non_neg_integer,[]}]]},{type,{2373,7},constraint,[{atom,{2373,7},is_subtype},[{var,{2373,7},'OldMinBinVHeapSize'},{type,{2373,29},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,51,66,48,52>>}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]}]},{p,[],[<<84,104,105,115,32,102,108,97,103,32,115,101,116,115,32,116,104,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,73,102,32>>,{code,[],[<<77,97,120,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<107,105,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,114,111,114,95,108,111,103,103,101,114>>]},<<32,97,114,101,32,117,115,101,100,46>>]},{dl,[],[{dt,[],[{code,[],[<<115,105,122,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,115,105,122,101,32,105,110,32,119,111,114,100,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,73,102,32,115,101,116,32,116,111,32,122,101,114,111,44,32,116,104,101,32,104,101,97,112,32,115,105,122,101,32,108,105,109,105,116,32,105,115,32,100,105,115,97,98,108,101,100,46,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,115,32,98,101,32,116,104,114,111,119,110,32,105,102,32,116,104,101,32,118,97,108,117,101,32,105,115,32,115,109,97,108,108,101,114,32,116,104,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,105,110,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]}]},<<46,32,84,104,101,32,115,105,122,101,32,99,104,101,99,107,32,105,115,32,111,110,108,121,32,100,111,110,101,32,119,104,101,110,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,116,114,105,103,103,101,114,101,100,46>>]},{p,[],[{code,[],[<<115,105,122,101>>]},<<32,105,115,32,116,104,101,32,101,110,116,105,114,101,32,104,101,97,112,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,119,104,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,116,114,105,103,103,101,114,101,100,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,32,97,108,108,32,103,101,110,101,114,97,116,105,111,110,97,108,32,104,101,97,112,115,44,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,44,32,97,110,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<109,101,115,115,97,103,101,115,32,116,104,97,116,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,104,101,97,112>>]},<<44,32,97,110,100,32,97,110,121,32,101,120,116,114,97,32,109,101,109,111,114,121,32,116,104,97,116,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,111,114,32,110,101,101,100,115,32,100,117,114,105,110,103,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[{code,[],[<<115,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,95,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,112,114,111,99,101,115,115,95,105,110,102,111,40,80,105,100,44,32,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101,41>>]}]},<<44,32,111,114,32,98,121,32,97,100,100,105,110,103,32>>,{code,[],[<<104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<111,108,100,95,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<32,97,110,100,32>>,{code,[],[<<109,98,117,102,95,115,105,122,101>>]},<<32,102,114,111,109,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,112,114,111,99,101,115,115,95,105,110,102,111,40,80,105,100,44,32,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<107,105,108,108>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,101,110,100,115,32,97,110,32,117,110,116,114,97,112,112,97,98,108,101,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<107,105,108,108>>]},<<32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,102,32,116,104,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,105,115,32,114,101,97,99,104,101,100,46,32,84,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,116,104,97,116,32,116,114,105,103,103,101,114,101,100,32,116,104,101,32>>,{code,[],[<<107,105,108,108>>]},<<32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,100,44,32,105,110,115,116,101,97,100,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,32,97,115,32,115,111,111,110,32,97,115,32,112,111,115,115,105,98,108,101,46,32,87,104,101,110,32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,110,111,32,101,120,105,116,32,115,105,103,110,97,108,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,44,32,105,110,115,116,101,97,100,32,105,116,32,99,111,110,116,105,110,117,101,115,32,101,120,101,99,117,116,105,110,103,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<107,105,108,108>>]},<<32,105,115,32,110,111,116,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,109,97,112,44,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,101,105,116,104,101,114,32,111,112,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<43,104,109,97,120,107>>]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<101,114,114,111,114,95,108,111,103,103,101,114>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32,115,101,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,108,111,103,115,32,97,110,32,101,114,114,111,114,32,101,118,101,110,116,32,118,105,97,32>>,{a,[{href,<<107,101,114,110,101,108,58,108,111,103,103,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,103,103,101,114>>]}]},<<44,32,99,111,110,116,97,105,110,105,110,103,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,119,104,101,110,32,116,104,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,105,115,32,114,101,97,99,104,101,100,46,32,79,110,101,32,108,111,103,32,101,118,101,110,116,32,105,115,32,115,101,110,116,32,101,97,99,104,32,116,105,109,101,32,116,104,101,32,108,105,109,105,116,32,105,115,32,114,101,97,99,104,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<101,114,114,111,114,95,108,111,103,103,101,114>>]},<<32,105,115,32,110,111,116,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,109,97,112,44,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,105,115,32,117,115,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,101,105,116,104,101,114,32,116,104,101,32,111,112,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<43,104,109,97,120,101,108>>]},<<32,105,110,116,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46>>]}]}]},{p,[],[<<84,104,101,32,104,101,97,112,32,115,105,122,101,32,111,102,32,97,32,112,114,111,99,101,115,115,32,105,115,32,113,117,105,116,101,32,104,97,114,100,32,116,111,32,112,114,101,100,105,99,116,44,32,101,115,112,101,99,105,97,108,108,121,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,116,104,97,116,32,105,115,32,117,115,101,100,32,100,117,114,105,110,103,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,104,101,110,32,99,111,110,116,101,109,112,108,97,116,105,110,103,32,117,115,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,102,105,114,115,116,32,114,117,110,32,105,116,32,105,110,32,112,114,111,100,117,99,116,105,111,110,32,119,105,116,104,32>>,{code,[],[<<107,105,108,108>>]},<<32,115,101,116,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,97,110,100,32,105,110,115,112,101,99,116,32,116,104,101,32,108,111,103,32,101,118,101,110,116,115,32,116,111,32,115,101,101,32,119,104,97,116,32,116,104,101,32,110,111,114,109,97,108,32,112,101,97,107,32,115,105,122,101,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,105,115,32,97,110,100,32,116,104,101,110,32,116,117,110,101,32,116,104,101,32,118,97,108,117,101,32,97,99,99,111,114,100,105,110,103,108,121,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,55,57,49>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2374,19},bounded_fun,[{type,{2374,19},'fun',[{type,{2374,19},product,[{atom,{2374,20},max_heap_size},{var,{2374,35},'MaxHeapSize'}]},{var,{2374,51},'OldMaxHeapSize'}]},[{type,{2375,7},constraint,[{atom,{2375,7},is_subtype},[{var,{2375,7},'MaxHeapSize'},{user_type,{2375,22},max_heap_size,[]}]]},{type,{2376,7},constraint,[{atom,{2376,7},is_subtype},[{var,{2376,7},'OldMaxHeapSize'},{user_type,{2376,25},max_heap_size,[]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]}]},{p,[],[<<68,101,116,101,114,109,105,110,101,115,32,104,111,119,32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,114,101,32,115,116,111,114,101,100,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<111,102,102,95,104,101,97,112>>]}]},{dd,[],[{p,[],[{em,[],[<<65,108,108>>]},<<32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,98,101,32,115,116,111,114,101,100,32,111,117,116,115,105,100,101,32,116,104,101,32,112,114,111,99,101,115,115,32,104,101,97,112,46,32,84,104,105,115,32,105,109,112,108,105,101,115,32,116,104,97,116,32>>,{em,[],[<<110,111>>]},<<32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,98,101,32,112,97,114,116,32,111,102,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<111,110,95,104,101,97,112>>]}]},{dd,[],[{p,[],[<<65,108,108,32,109,101,115,115,97,103,101,115,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,119,105,108,108,32,101,118,101,110,116,117,97,108,108,121,32,98,101,32,112,108,97,99,101,100,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,104,101,97,112,46,32,84,104,101,121,32,99,97,110,44,32,104,111,119,101,118,101,114,44,32,98,101,32,116,101,109,112,111,114,97,114,105,108,121,32,115,116,111,114,101,100,32,111,102,102,32,116,104,101,32,104,101,97,112,46,32,84,104,105,115,32,105,115,32,104,111,119,32,109,101,115,115,97,103,101,115,32,104,97,118,101,32,97,108,119,97,121,115,32,98,101,101,110,32,115,116,111,114,101,100,32,117,112,32,117,110,116,105,108,32,69,82,84,83,32,56,46,48,46>>]}]}]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32,116,104,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,113,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,113,100>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,109,97,121,32,112,111,116,101,110,116,105,97,108,108,121,32,97,99,99,117,109,117,108,97,116,101,32,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,109,101,115,115,97,103,101,115,32,105,110,32,105,116,115,32,113,117,101,117,101,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,115,101,116,32,116,104,101,32,102,108,97,103,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<46,32,84,104,105,115,32,105,115,32,100,117,101,32,116,111,32,116,104,101,32,102,97,99,116,32,116,104,97,116,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,97,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,115,32,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,109,101,115,115,97,103,101,115,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,104,101,97,112,32,99,97,110,32,98,101,99,111,109,101,32,101,120,116,114,101,109,101,108,121,32,101,120,112,101,110,115,105,118,101,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,110,32,99,111,110,115,117,109,101,32,108,97,114,103,101,32,97,109,111,117,110,116,115,32,111,102,32,109,101,109,111,114,121,46,32,84,104,101,32,112,101,114,102,111,114,109,97,110,99,101,32,111,102,32,116,104,101,32,97,99,116,117,97,108,32,109,101,115,115,97,103,101,32,112,97,115,115,105,110,103,32,105,115,44,32,104,111,119,101,118,101,114,44,32,103,101,110,101,114,97,108,108,121,32,98,101,116,116,101,114,32,119,104,101,110,32,116,104,101,32,102,108,97,103,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<111,110,95,104,101,97,112>>]},<<46>>]},{p,[],[<<67,104,97,110,103,105,110,103,32,116,104,101,32,102,108,97,103,32,118,97,108,117,101,32,99,97,117,115,101,115,32,97,110,121,32,101,120,105,115,116,105,110,103,32,109,101,115,115,97,103,101,115,32,116,111,32,98,101,32,109,111,118,101,100,46,32,84,104,101,32,109,111,118,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,105,110,105,116,105,97,116,101,100,44,32,98,117,116,32,110,111,116,32,110,101,99,101,115,115,97,114,105,108,121,32,99,111,109,112,108,101,116,101,100,44,32,98,121,32,116,104,101,32,116,105,109,101,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,56,54,53>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2377,19},bounded_fun,[{type,{2377,19},'fun',[{type,{2377,19},product,[{atom,{2377,20},message_queue_data},{var,{2377,40},'MQD'}]},{var,{2377,48},'OldMQD'}]},[{type,{2378,7},constraint,[{atom,{2378,7},is_subtype},[{var,{2378,7},'MQD'},{user_type,{2378,14},message_queue_data,[]}]]},{type,{2379,7},constraint,[{atom,{2379,7},is_subtype},[{var,{2379,7},'OldMQD'},{user_type,{2379,17},message_queue_data,[]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,112,114,105,111,114,105,116,121,46,32>>,{code,[],[<<76,101,118,101,108>>]},<<32,105,115,32,97,110,32,97,116,111,109,46,32,70,111,117,114,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,115,32,101,120,105,115,116,58,32>>,{code,[],[<<108,111,119>>]},<<44,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<44,32>>,{code,[],[<<104,105,103,104>>]},<<44,32,97,110,100,32>>,{code,[],[<<109,97,120>>]},<<46,32,68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<80,114,105,111,114,105,116,121,32,108,101,118,101,108,32>>,{code,[],[<<109,97,120>>]},<<32,105,115,32,114,101,115,101,114,118,101,100,32,102,111,114,32,105,110,116,101,114,110,97,108,32,117,115,101,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,44,32,97,110,100,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,116,111,32,98,101,32,117,115,101,100,32,98,121,32,111,116,104,101,114,115,46>>]}]},{p,[],[<<73,110,116,101,114,110,97,108,108,121,32,105,110,32,101,97,99,104,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,44,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,115,99,104,101,100,117,108,101,100,32,105,110,32,97,32,114,111,117,110,100,32,114,111,98,105,110,32,102,97,115,104,105,111,110,46>>]},{p,[],[<<69,120,101,99,117,116,105,111,110,32,111,102,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,110,100,32>>,{code,[],[<<108,111,119>>]},<<32,97,114,101,32,105,110,116,101,114,108,101,97,118,101,100,46,32,80,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<32,97,114,101,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,32,108,101,115,115,32,102,114,101,113,117,101,110,116,108,121,32,116,104,97,110,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{p,[],[<<87,104,101,110,32,114,117,110,110,97,98,108,101,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<32,101,120,105,115,116,44,32,110,111,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<32,111,114,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,114,101,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,46,32,78,111,116,105,99,101,32,104,111,119,101,118,101,114,32,116,104,97,116,32,116,104,105,115,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,109,101,97,110,32,116,104,97,116,32,110,111,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<32,111,114,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,99,97,110,32,114,117,110,32,119,104,101,110,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,114,117,110,110,105,110,103,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<46,32,87,104,101,110,32,117,115,105,110,103,32,109,117,108,116,105,112,108,101,32,115,99,104,101,100,117,108,101,114,115,44,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,32,99,97,110,32,98,101,32,114,117,110,110,105,110,103,32,105,110,32,112,97,114,97,108,108,101,108,32,116,104,97,110,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<46,32,84,104,97,116,32,105,115,44,32,97,32>>,{code,[],[<<108,111,119>>]},<<32,97,110,100,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,99,97,110,32,101,120,101,99,117,116,101,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,46>>]},{p,[],[<<87,104,101,110,32,114,117,110,110,97,98,108,101,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<109,97,120>>]},<<32,101,120,105,115,116,44,32,110,111,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<108,111,119>>]},<<44,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<44,32,111,114,32>>,{code,[],[<<104,105,103,104>>]},<<32,97,114,101,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,46,32,65,115,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<44,32,112,114,111,99,101,115,115,101,115,32,111,110,32,108,111,119,101,114,32,112,114,105,111,114,105,116,105,101,115,32,99,97,110,32,101,120,101,99,117,116,101,32,105,110,32,112,97,114,97,108,108,101,108,32,119,105,116,104,32,112,114,111,99,101,115,115,101,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<109,97,120>>]},<<46>>]},{p,[],[<<83,99,104,101,100,117,108,105,110,103,32,105,115,32,112,114,101,45,101,109,112,116,105,118,101,46,32,82,101,103,97,114,100,108,101,115,115,32,111,102,32,112,114,105,111,114,105,116,121,44,32,97,32,112,114,111,99,101,115,115,32,105,115,32,112,114,101,45,101,109,112,116,101,100,32,119,104,101,110,32,105,116,32,104,97,115,32,99,111,110,115,117,109,101,100,32,109,111,114,101,32,116,104,97,110,32,97,32,99,101,114,116,97,105,110,32,110,117,109,98,101,114,32,111,102,32,114,101,100,117,99,116,105,111,110,115,32,115,105,110,99,101,32,116,104,101,32,108,97,115,116,32,116,105,109,101,32,105,116,32,119,97,115,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<68,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,115,99,104,101,100,117,108,105,110,103,32,116,111,32,114,101,109,97,105,110,32,101,120,97,99,116,108,121,32,97,115,32,105,116,32,105,115,32,116,111,100,97,121,46,32,83,99,104,101,100,117,108,105,110,103,32,105,115,32,108,105,107,101,108,121,32,116,111,32,98,101,32,99,104,97,110,103,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,32,116,111,32,117,115,101,32,97,118,97,105,108,97,98,108,101,32,112,114,111,99,101,115,115,111,114,32,99,111,114,101,115,32,98,101,116,116,101,114,46>>]}]},{p,[],[<<84,104,101,114,101,32,105,115,32>>,{em,[],[<<110,111>>]},<<32,97,117,116,111,109,97,116,105,99,32,109,101,99,104,97,110,105,115,109,32,102,111,114,32,97,118,111,105,100,105,110,103,32,112,114,105,111,114,105,116,121,32,105,110,118,101,114,115,105,111,110,44,32,115,117,99,104,32,97,115,32,112,114,105,111,114,105,116,121,32,105,110,104,101,114,105,116,97,110,99,101,32,111,114,32,112,114,105,111,114,105,116,121,32,99,101,105,108,105,110,103,115,46,32,87,104,101,110,32,117,115,105,110,103,32,112,114,105,111,114,105,116,105,101,115,44,32,116,97,107,101,32,116,104,105,115,32,105,110,116,111,32,97,99,99,111,117,110,116,32,97,110,100,32,104,97,110,100,108,101,32,115,117,99,104,32,115,99,101,110,97,114,105,111,115,32,98,121,32,121,111,117,114,115,101,108,102,46>>]},{p,[],[<<77,97,107,105,110,103,32,99,97,108,108,115,32,102,114,111,109,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,105,110,116,111,32,99,111,100,101,32,116,104,97,116,32,121,111,117,32,104,97,115,32,110,111,32,99,111,110,116,114,111,108,32,111,118,101,114,32,99,97,110,32,99,97,117,115,101,32,116,104,101,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,116,111,32,119,97,105,116,32,102,111,114,32,97,32,112,114,111,99,101,115,115,32,119,105,116,104,32,108,111,119,101,114,32,112,114,105,111,114,105,116,121,46,32,84,104,97,116,32,105,115,44,32,101,102,102,101,99,116,105,118,101,108,121,32,100,101,99,114,101,97,115,105,110,103,32,116,104,101,32,112,114,105,111,114,105,116,121,32,111,102,32,116,104,101,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,100,117,114,105,110,103,32,116,104,101,32,99,97,108,108,46,32,69,118,101,110,32,105,102,32,116,104,105,115,32,105,115,32,110,111,116,32,116,104,101,32,99,97,115,101,32,119,105,116,104,32,111,110,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,99,111,100,101,32,116,104,97,116,32,121,111,117,32,104,97,118,101,32,110,111,32,99,111,110,116,114,111,108,32,111,118,101,114,44,32,105,116,32,99,97,110,32,98,101,32,116,104,101,32,99,97,115,101,32,105,110,32,97,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,32,111,102,32,105,116,46,32,84,104,105,115,32,99,97,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,111,99,99,117,114,32,105,102,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,116,114,105,103,103,101,114,115,32,99,111,100,101,32,108,111,97,100,105,110,103,44,32,97,115,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,114,117,110,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{p,[],[<<79,116,104,101,114,32,112,114,105,111,114,105,116,105,101,115,32,116,104,97,110,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<32,97,114,101,32,110,111,114,109,97,108,108,121,32,110,111,116,32,110,101,101,100,101,100,46,32,87,104,101,110,32,111,116,104,101,114,32,112,114,105,111,114,105,116,105,101,115,32,97,114,101,32,117,115,101,100,44,32,117,115,101,32,116,104,101,109,32,119,105,116,104,32,99,97,114,101,44,32>>,{em,[],[<<101,115,112,101,99,105,97,108,108,121>>]},<<32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<46,32,65,32,112,114,111,99,101,115,115,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<104,105,103,104>>]},<<32,105,115,32,111,110,108,121,32,116,111,32,112,101,114,102,111,114,109,32,119,111,114,107,32,102,111,114,32,115,104,111,114,116,32,112,101,114,105,111,100,115,46,32,66,117,115,121,32,108,111,111,112,105,110,103,32,102,111,114,32,108,111,110,103,32,112,101,114,105,111,100,115,32,105,110,32,97,32>>,{code,[],[<<104,105,103,104>>]},<<32,112,114,105,111,114,105,116,121,32,112,114,111,99,101,115,115,32,99,97,117,115,101,115,32,109,111,115,116,32,108,105,107,101,108,121,32,112,114,111,98,108,101,109,115,44,32,97,115,32,105,109,112,111,114,116,97,110,116,32,79,84,80,32,115,101,114,118,101,114,115,32,114,117,110,32,111,110,32,112,114,105,111,114,105,116,121,32>>,{code,[],[<<110,111,114,109,97,108>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,57,48,55>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2380,19},bounded_fun,[{type,{2380,19},'fun',[{type,{2380,19},product,[{atom,{2380,20},priority},{var,{2380,30},'Level'}]},{var,{2380,40},'OldLevel'}]},[{type,{2381,7},constraint,[{atom,{2381,7},is_subtype},[{var,{2381,7},'Level'},{user_type,{2381,16},priority_level,[]}]]},{type,{2382,7},constraint,[{atom,{2382,7},is_subtype},[{var,{2382,7},'OldLevel'},{user_type,{2382,19},priority_level,[]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[{code,[],[<<78>>]},<<32,109,117,115,116,32,98,101,32,97,110,32,105,110,116,101,103,101,114,32,105,110,32,116,104,101,32,105,110,116,101,114,118,97,108,32,48,46,46,49,48,48,48,48,46,32,73,102,32>>,{code,[],[<<78>>]},<<32,62,32,48,44,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,109,97,100,101,32,97,99,116,105,118,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<78>>]},<<32,109,111,115,116,32,114,101,99,101,110,116,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32,66,73,70,32,99,97,108,108,115,44,32,115,101,110,100,115,44,32,97,110,100,32,114,101,99,101,105,118,101,115,32,109,97,100,101,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,97,114,101,32,115,97,118,101,100,32,105,110,32,97,32,108,105,115,116,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,119,105,116,104,32>>,{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,40,80,105,100,44,32,108,97,115,116,95,99,97,108,108,115,41>>]},<<46,32,65,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,105,115,32,111,110,101,32,105,110,32,119,104,105,99,104,32,116,104,101,32,109,111,100,117,108,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,109,101,110,116,105,111,110,101,100,46,32,79,110,108,121,32,97,32,102,105,120,101,100,32,97,109,111,117,110,116,32,111,102,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,115,97,118,101,100,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{ul,[],[{li,[],[{p,[],[<<65,32,116,117,112,108,101,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<32,102,111,114,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115>>]}]},{li,[],[{p,[],[<<84,104,101,32,97,116,111,109,115,32>>,{code,[],[<<115,101,110,100>>]},<<44,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<44,32,97,110,100,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,102,111,114,32,115,101,110,100,115,32,97,110,100,32,114,101,99,101,105,118,101,115,32,40>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,119,104,101,110,32,97,32,109,101,115,115,97,103,101,32,105,115,32,114,101,99,101,105,118,101,100,32,97,110,100,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,119,104,101,110,32,97,32,114,101,99,101,105,118,101,32,116,105,109,101,115,32,111,117,116,41>>]}]}]},{p,[],[<<73,102,32>>,{code,[],[<<78>>]},<<32,61,32,48,44,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,100,105,115,97,98,108,101,100,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46,32,87,104,101,110,101,118,101,114,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,99,97,108,108,32,115,97,118,105,110,103,32,108,105,115,116,32,105,115,32,115,101,116,44,32,105,116,115,32,99,111,110,116,101,110,116,115,32,97,114,101,32,114,101,115,101,116,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,53,57,56,48>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2383,19},bounded_fun,[{type,{2383,19},'fun',[{type,{2383,19},product,[{atom,{2383,20},save_calls},{var,{2383,32},'N'}]},{var,{2383,38},'OldN'}]},[{type,{2384,7},constraint,[{atom,{2384,7},is_subtype},[{var,{2384,7},'N'},{type,{2384,12},range,[{integer,{2384,12},0},{integer,{2384,15},10000}]}]]},{type,{2385,7},constraint,[{atom,{2385,7},is_subtype},[{var,{2385,7},'OldN'},{type,{2385,15},range,[{integer,{2385,15},0},{integer,{2385,18},10000}]}]]}]]}]}}]}},{{function,process_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2359}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,111,114,32,99,108,101,97,114,115,32,102,108,97,103,32>>,{code,[],[<<115,101,110,115,105,116,105,118,101>>]},<<32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,46,32,87,104,101,110,32,97,32,112,114,111,99,101,115,115,32,104,97,115,32,98,101,101,110,32,109,97,114,107,101,100,32,97,115,32,115,101,110,115,105,116,105,118,101,32,98,121,32,99,97,108,108,105,110,103,32>>,{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,115,101,110,115,105,116,105,118,101,44,32,116,114,117,101,41>>]},<<44,32,102,101,97,116,117,114,101,115,32,105,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,101,120,97,109,105,110,105,110,103,32,116,104,101,32,100,97,116,97,32,111,114,32,105,110,110,101,114,32,119,111,114,107,105,110,103,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,97,114,101,32,115,105,108,101,110,116,108,121,32,100,105,115,97,98,108,101,100,46>>]},{p,[],[<<70,101,97,116,117,114,101,115,32,116,104,97,116,32,97,114,101,32,100,105,115,97,98,108,101,100,32,105,110,99,108,117,100,101,32,40,98,117,116,32,97,114,101,32,110,111,116,32,108,105,109,105,116,101,100,32,116,111,41,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{p,[],[<<84,114,97,99,105,110,103,46,32,84,114,97,99,101,32,102,108,97,103,115,32,99,97,110,32,115,116,105,108,108,32,98,101,32,115,101,116,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,98,117,116,32,110,111,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,111,102,32,97,110,121,32,107,105,110,100,32,97,114,101,32,103,101,110,101,114,97,116,101,100,46,32,40,73,102,32,102,108,97,103,32>>,{code,[],[<<115,101,110,115,105,116,105,118,101>>]},<<32,105,115,32,116,117,114,110,101,100,32,111,102,102,44,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,97,103,97,105,110,32,103,101,110,101,114,97,116,101,100,32,105,102,32,97,110,121,32,116,114,97,99,101,32,102,108,97,103,115,32,97,114,101,32,115,101,116,46,41>>]}]},{li,[],[{p,[],[<<83,101,113,117,101,110,116,105,97,108,32,116,114,97,99,105,110,103,46,32,84,104,101,32,115,101,113,117,101,110,116,105,97,108,32,116,114,97,99,101,32,116,111,107,101,110,32,105,115,32,112,114,111,112,97,103,97,116,101,100,32,97,115,32,117,115,117,97,108,44,32,98,117,116,32,110,111,32,115,101,113,117,101,110,116,105,97,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,103,101,110,101,114,97,116,101,100,46>>]}]}]},{p,[],[{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,49,44,50>>]},<<32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,32,116,111,32,114,101,97,100,32,111,117,116,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,40,98,111,116,104,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,101,109,112,116,121,32,108,105,115,116,115,41,46>>]},{p,[],[<<83,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,115,32,99,97,110,110,111,116,32,98,101,32,100,105,115,112,108,97,121,101,100,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,110,32,99,114,97,115,104,32,100,117,109,112,115,44,32,116,104,101,32,115,116,97,99,107,44,32,109,101,115,115,97,103,101,115,44,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,32,97,114,101,32,111,109,105,116,116,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<123,115,97,118,101,95,99,97,108,108,115,44,78,125>>]},<<32,104,97,115,32,98,101,101,110,32,115,101,116,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,110,111,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,114,101,32,115,97,118,101,100,32,116,111,32,116,104,101,32,99,97,108,108,32,115,97,118,105,110,103,32,108,105,115,116,46,32,40,84,104,101,32,99,97,108,108,32,115,97,118,105,110,103,32,108,105,115,116,32,105,115,32,110,111,116,32,99,108,101,97,114,101,100,46,32,65,108,115,111,44,32,115,101,110,100,44,32,114,101,99,101,105,118,101,44,32,97,110,100,32,116,105,109,101,45,111,117,116,32,101,118,101,110,116,115,32,97,114,101,32,115,116,105,108,108,32,97,100,100,101,100,32,116,111,32,116,104,101,32,108,105,115,116,46,41>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,48,49,49>>,signature => [{attribute,{2359,2},spec,{{process_flag,2},[{type,{2386,19},bounded_fun,[{type,{2386,19},'fun',[{type,{2386,19},product,[{atom,{2386,20},sensitive},{var,{2386,31},'Boolean'}]},{var,{2386,43},'OldBoolean'}]},[{type,{2387,7},constraint,[{atom,{2387,7},is_subtype},[{var,{2387,7},'Boolean'},{type,{2387,18},boolean,[]}]]},{type,{2388,7},constraint,[{atom,{2388,7},is_subtype},[{var,{2388,7},'OldBoolean'},{type,{2388,21},boolean,[]}]]}]]}]}}]}},{{function,process_flag,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1688}],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,99,101,114,116,97,105,110,32,102,108,97,103,115,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<44,32,105,110,32,116,104,101,32,115,97,109,101,32,109,97,110,110,101,114,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46,32,82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46,32,84,104,101,32,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<70,108,97,103>>]},<<32,97,114,101,32,111,110,108,121,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,111,115,101,32,97,108,108,111,119,101,100,32,105,110,32>>,{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]},<<44,32,110,97,109,101,108,121,32>>,{code,[],[<<115,97,118,101,95,99,97,108,108,115>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,48,52,53>>,signature => [{attribute,{1688,2},spec,{{process_flag,3},[{type,{1688,19},bounded_fun,[{type,{1688,19},'fun',[{type,{1688,19},product,[{var,{1688,20},'Pid'},{var,{1688,25},'Flag'},{var,{1688,31},'Value'}]},{var,{1688,41},'OldValue'}]},[{type,{1689,7},constraint,[{atom,{1689,7},is_subtype},[{var,{1689,7},'Pid'},{type,{1689,14},pid,[]}]]},{type,{1690,7},constraint,[{atom,{1690,7},is_subtype},[{var,{1690,7},'Flag'},{atom,{1690,15},save_calls}]]},{type,{1691,7},constraint,[{atom,{1691,7},is_subtype},[{var,{1691,7},'Value'},{type,{1691,16},non_neg_integer,[]}]]},{type,{1692,7},constraint,[{atom,{1692,7},is_subtype},[{var,{1692,7},'OldValue'},{type,{1692,19},non_neg_integer,[]}]]}]]}]}}]}},{{function,process_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1705}],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<112,114,111,99,101,115,115,95,105,110,102,111,95,114,101,115,117,108,116,95,105,116,101,109>>}],[]},{li,[{name,<<115,116,97,99,107,95,105,116,101,109>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,119,105,116,104,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]},{p,[],[<<84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,105,115,32,117,110,100,101,102,105,110,101,100,32,97,110,100,32,97,108,108,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,97,114,101,32,110,111,116,32,109,97,110,100,97,116,111,114,121,46,32,84,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,119,105,116,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,116,101,109,115,32,97,114,101,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,58>>]},{ul,[],[{li,[],[{code,[],[<<99,117,114,114,101,110,116,95,102,117,110,99,116,105,111,110>>]}]},{li,[],[{code,[],[<<105,110,105,116,105,97,108,95,99,97,108,108>>]}]},{li,[],[{code,[],[<<115,116,97,116,117,115>>]}]},{li,[],[{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,108,101,110>>]}]},{li,[],[{code,[],[<<108,105,110,107,115>>]}]},{li,[],[{code,[],[<<100,105,99,116,105,111,110,97,114,121>>]}]},{li,[],[{code,[],[<<116,114,97,112,95,101,120,105,116>>]}]},{li,[],[{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]}]},{li,[],[{code,[],[<<112,114,105,111,114,105,116,121>>]}]},{li,[],[{code,[],[<<103,114,111,117,112,95,108,101,97,100,101,114>>]}]},{li,[],[{code,[],[<<116,111,116,97,108,95,104,101,97,112,95,115,105,122,101>>]}]},{li,[],[{code,[],[<<104,101,97,112,95,115,105,122,101>>]}]},{li,[],[{code,[],[<<115,116,97,99,107,95,115,105,122,101>>]}]},{li,[],[{code,[],[<<114,101,100,117,99,116,105,111,110,115>>]}]},{li,[],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]}]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,104,97,115,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32,97,108,115,111,32,97,110,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,119,105,116,104,32,105,116,101,109,32>>,{code,[],[<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,105,115,32,105,110,99,108,117,100,101,100,46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,112,101,99,105,102,105,99,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,50>>]}]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32>>,{em,[],[<<100,101,98,117,103,103,105,110,103,32,111,110,108,121>>]},<<46,32,70,111,114,32,97,108,108,32,111,116,104,101,114,32,112,117,114,112,111,115,101,115,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,50>>]}]},<<46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,48,54,48>>,signature => [{attribute,{1705,2},spec,{{process_info,1},[{type,{1705,19},bounded_fun,[{type,{1705,19},'fun',[{type,{1705,19},product,[{var,{1705,20},'Pid'}]},{var,{1705,28},'Info'}]},[{type,{1706,7},constraint,[{atom,{1706,7},is_subtype},[{var,{1706,7},'Pid'},{type,{1706,14},pid,[]}]]},{type,{1707,7},constraint,[{atom,{1707,7},is_subtype},[{var,{1707,7},'Info'},{type,{1707,15},union,[{type,{1707,15},list,[{var,{1707,16},'InfoTuple'}]},{atom,{1707,29},undefined}]}]]},{type,{1708,7},constraint,[{atom,{1708,7},is_subtype},[{var,{1708,7},'InfoTuple'},{user_type,{1708,20},process_info_result_item,[]}]]}]]}]}}]}},{{function,process_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2485}],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<112,114,111,99,101,115,115,95,105,110,102,111,95,105,116,101,109>>}],[]},{li,[{name,<<112,114,111,99,101,115,115,95,105,110,102,111,95,114,101,115,117,108,116,95,105,116,101,109>>}],[]},{li,[{name,<<115,116,97,99,107,95,105,116,101,109>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<32,111,114,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]},{p,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,97,108,105,118,101,32,97,110,100,32,97,32,115,105,110,103,108,101,32>>,{code,[],[<<73,116,101,109>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<44,32,117,110,108,101,115,115,32>>,{code,[],[<<73,116,101,109,32,61,58,61,32,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,110,111,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,105,115,32,115,116,114,97,110,103,101,32,98,101,104,97,118,105,111,114,32,105,115,32,98,101,99,97,117,115,101,32,111,102,32,104,105,115,116,111,114,105,99,97,108,32,114,101,97,115,111,110,115,44,32,97,110,100,32,105,115,32,107,101,112,116,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101,76,105,115,116>>]},<<46,32,84,104,101,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,105,110,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101,76,105,115,116>>]},<<32,97,114,101,32,105,110,99,108,117,100,101,100,32,119,105,116,104,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,105,110,32,116,104,101,32,115,97,109,101,32,111,114,100,101,114,32,97,115,32,116,104,101,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,119,101,114,101,32,105,110,99,108,117,100,101,100,32,105,110,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<46,32,86,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,99,97,110,32,98,101,32,105,110,99,108,117,100,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,105,110,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<46>>]},{p,[],[<<71,101,116,116,105,110,103,32,112,114,111,99,101,115,115,32,105,110,102,111,114,109,97,116,105,111,110,115,32,102,111,108,108,111,119,115,32,116,104,101,32,115,105,103,110,97,108,32,111,114,100,101,114,105,110,103,32,103,117,97,114,97,110,116,101,101,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<80,114,111,99,101,115,115,101,115,32,67,104,97,112,116,101,114>>]},<<32,105,110,32,116,104,101,32>>,{i,[],[<<69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32>>,{code,[],[<<114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,105,115,32,112,97,114,116,32,111,102,32>>,{code,[],[<<73,116,101,109,76,105,115,116>>]},<<32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,110,111,32,110,97,109,101,32,114,101,103,105,115,116,101,114,101,100,44,32,97,32>>,{code,[],[<<123,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101,44,32,91,93,125>>]},<<44,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32>>,{em,[],[<<119,105,108,108>>]},<<32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101,76,105,115,116>>]},<<46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,105,115,32,100,105,102,102,101,114,101,110,116,32,119,104,101,110,32,97,32,115,105,110,103,108,101,32>>,{code,[],[<<73,116,101,109,32,61,58,61,32,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,97,110,100,32,119,104,101,110,32>>,{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111,47,49>>]},<<32,105,115,32,117,115,101,100,46>>]}]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<115,32,119,105,116,104,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<73,116,101,109>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,98,97,99,107,116,114,97,99,101,44,32,66,105,110,125>>]}]},{dd,[],[{p,[],[<<66,105,110,97,114,121,32>>,{code,[],[<<66,105,110>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,115,32,116,104,101,32,111,117,116,112,117,116,32,102,114,111,109,32>>,{code,[],[<<101,114,108,97,110,103,58,112,114,111,99,101,115,115,95,100,105,115,112,108,97,121,40,80,105,100,44,32,98,97,99,107,116,114,97,99,101,41>>]},<<46,32,85,115,101,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,108,105,115,116,47,49>>]},<<32,116,111,32,111,98,116,97,105,110,32,116,104,101,32,115,116,114,105,110,103,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,98,105,110,97,114,121,46>>]}]},{dt,[],[{code,[],[<<123,98,105,110,97,114,121,44,32,66,105,110,73,110,102,111,125>>]}]},{dd,[],[{p,[],[{code,[],[<<66,105,110,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,98,105,110,97,114,105,101,115,32,111,110,32,116,104,101,32,104,101,97,112,32,111,102,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46,32,73,110,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32>>,{code,[],[<<66,105,110,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,46,32,84,104,101,32,116,117,112,108,101,115,32,99,111,110,116,97,105,110,59,32>>,{code,[],[<<66,105,110,97,114,121,73,100>>]},<<44,32>>,{code,[],[<<66,105,110,97,114,121,83,105,122,101>>]},<<44,32>>,{code,[],[<<66,105,110,97,114,121,82,101,102,99,67,111,117,110,116>>]},<<46>>]},{p,[],[<<68,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]}]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,109,97,121,32,98,101,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,104,101,97,112,46>>]}]},{dt,[],[{code,[],[<<123,99,97,116,99,104,108,101,118,101,108,44,32,67,97,116,99,104,76,101,118,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<67,97,116,99,104,76,101,118,101,108>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,99,117,114,114,101,110,116,108,121,32,97,99,116,105,118,101,32,99,97,116,99,104,101,115,32,105,110,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,114,101,110,116,95,102,117,110,99,116,105,111,110,44,32,123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125,32,124,32,117,110,100,101,102,105,110,101,100,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,101,32,118,97,108,117,101,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,99,117,114,114,101,110,116,108,121,32,101,120,101,99,117,116,105,110,103,32,110,97,116,105,118,101,32,99,111,109,112,105,108,101,100,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,114,101,110,116,95,108,111,99,97,116,105,111,110,44,32,123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,44,32,76,111,99,97,116,105,111,110,125,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,116,117,112,108,101,115,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,108,111,99,97,116,105,111,110,32,105,110,32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,114,101,110,116,95,115,116,97,99,107,116,114,97,99,101,44,32,83,116,97,99,107,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,99,97,108,108,32,115,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,32,40>>,{em,[],[<<115,116,97,99,107,116,114,97,99,101>>]},<<41,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,101,32,115,116,97,99,107,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,115,32,105,110,32,116,104,101,32>>,{code,[],[<<99,97,116,99,104>>]},<<32,112,97,114,116,32,111,102,32,97,32>>,{code,[],[<<116,114,121>>]},<<46,32,83,101,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115,35,115,116,97,99,107,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<84,104,101,32,99,97,108,108,45,115,116,97,99,107,32,98,97,99,107,32,116,114,97,99,101,32,40,115,116,97,99,107,116,114,97,99,101,41>>]},<<46,32,84,104,101,32,100,101,112,116,104,32,111,102,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,32,105,115,32,116,114,117,110,99,97,116,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32>>,{code,[],[<<98,97,99,107,116,114,97,99,101,95,100,101,112,116,104>>]},<<32,115,121,115,116,101,109,32,102,108,97,103,32,115,101,116,116,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,100,105,99,116,105,111,110,97,114,121,44,32,68,105,99,116,105,111,110,97,114,121,125>>]}]},{dd,[],[{p,[],[{code,[],[<<68,105,99,116,105,111,110,97,114,121>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,95,104,97,110,100,108,101,114,44,32,77,111,100,117,108,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,109,111,100,117,108,101,32,117,115,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,40,102,111,114,32,117,110,100,101,102,105,110,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32,102,111,114,32,101,120,97,109,112,108,101,41,46>>]}]},{dt,[],[{code,[],[<<123,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,44,32,71,67,73,110,102,111,125>>]}]},{dd,[],[{p,[],[{code,[],[<<71,67,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,102,111,114,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,101,32,99,111,110,116,101,110,116,32,111,102,32>>,{code,[],[<<71,67,73,110,102,111>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{a,[{id,<<112,114,111,99,101,115,115,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111>>}],[]},{code,[],[<<123,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,95,105,110,102,111,44,32,71,67,73,110,102,111,125>>]}]},{dd,[],[{p,[],[{code,[],[<<71,67,73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,100,101,116,97,105,108,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,102,111,114,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,101,32,99,111,110,116,101,110,116,32,111,102,32>>,{code,[],[<<71,67,73,110,102,111>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46,32,70,111,114,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32,109,101,97,110,105,110,103,32,111,102,32,101,97,99,104,32,105,116,101,109,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]}]},<<32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,103,114,111,117,112,95,108,101,97,100,101,114,44,32,71,114,111,117,112,76,101,97,100,101,114,125>>]}]},{dd,[],[{p,[],[{code,[],[<<71,114,111,117,112,76,101,97,100,101,114>>]},<<32,105,115,32,116,104,101,32,103,114,111,117,112,32,108,101,97,100,101,114,32,102,111,114,32,116,104,101,32,73,47,79,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,119,111,114,100,115,32,111,102,32,116,104,101,32,121,111,117,110,103,101,115,116,32,104,101,97,112,32,103,101,110,101,114,97,116,105,111,110,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,103,101,110,101,114,97,116,105,111,110,32,105,110,99,108,117,100,101,115,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,46,32,84,104,105,115,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,44,32,97,110,100,32,99,97,110,32,99,104,97,110,103,101,32,105,102,32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,99,104,97,110,103,101,115,46>>]}]},{dt,[],[{code,[],[<<123,105,110,105,116,105,97,108,95,99,97,108,108,44,32,123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<44,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,105,110,105,116,105,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,119,105,116,104,32,119,104,105,99,104,32,116,104,101,32,112,114,111,99,101,115,115,32,119,97,115,32,115,112,97,119,110,101,100,46>>]}]},{dt,[],[{code,[],[<<123,108,105,110,107,115,44,32,80,105,100,115,65,110,100,80,111,114,116,115,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,105,100,115,65,110,100,80,111,114,116,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,32,97,110,100,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,44,32,119,105,116,104,32,112,114,111,99,101,115,115,101,115,32,111,114,32,112,111,114,116,115,32,116,111,32,119,104,105,99,104,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,97,32,108,105,110,107,46>>]}]},{dt,[],[{code,[],[<<123,108,97,115,116,95,99,97,108,108,115,44,32,102,97,108,115,101,124,67,97,108,108,115,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,110,111,116,32,97,99,116,105,118,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,51>>]}]},<<41,46,32,73,102,32,99,97,108,108,32,115,97,118,105,110,103,32,105,115,32,97,99,116,105,118,101,44,32,97,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,44,32,105,110,32,119,104,105,99,104,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,99,97,108,108,101,100,46>>]}]},{dt,[],[{code,[],[<<123,109,101,109,111,114,121,44,32,83,105,122,101,125>>]}]},{dd,[],[{a,[{id,<<112,114,111,99,101,115,115,95,105,110,102,111,95,109,101,109,111,114,121>>}],[]},{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,32,99,97,108,108,32,115,116,97,99,107,44,32,104,101,97,112,44,32,97,110,100,32,105,110,116,101,114,110,97,108,32,115,116,114,117,99,116,117,114,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,95,113,117,101,117,101,95,108,101,110,44,32,77,101,115,115,97,103,101,81,117,101,117,101,76,101,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,101,115,115,97,103,101,81,117,101,117,101,76,101,110>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,109,101,115,115,97,103,101,115,32,99,117,114,114,101,110,116,108,121,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<77,101,115,115,97,103,101,81,117,101,117,101>>]},<<32,114,101,116,117,114,110,101,100,32,97,115,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,116,101,109,32>>,{code,[],[<<109,101,115,115,97,103,101,115>>]},<<32,40,115,101,101,32,98,101,108,111,119,41,46>>]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,115,44,32,77,101,115,115,97,103,101,81,117,101,117,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,101,115,115,97,103,101,81,117,101,117,101>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,109,101,115,115,97,103,101,115,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,44,32,119,104,105,99,104,32,104,97,118,101,32,110,111,116,32,121,101,116,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,109,105,110,95,104,101,97,112,95,115,105,122,101,44,32,77,105,110,72,101,97,112,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,105,110,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101,44,32,77,105,110,66,105,110,86,72,101,97,112,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,105,110,66,105,110,86,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,101,100,95,98,121,44,32,77,111,110,105,116,111,114,101,100,66,121,125>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115,32,102,111,114,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,44,32,112,111,114,116,115,32,97,110,100,32,78,73,70,32,114,101,115,111,117,114,99,101,115,44,32,116,104,97,116,32,97,114,101,32,109,111,110,105,116,111,114,105,110,103,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,115,44,32,77,111,110,105,116,111,114,115,125>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,111,110,105,116,111,114,115,32,40,115,116,97,114,116,101,100,32,98,121,32>>,{code,[],[<<109,111,110,105,116,111,114,47,50>>]},<<41,32,116,104,97,116,32,97,114,101,32,97,99,116,105,118,101,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,70,111,114,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,32,111,114,32,97,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,32,98,121,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,116,104,101,32,108,105,115,116,32,99,111,110,115,105,115,116,115,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,112,114,111,99,101,115,115,44,32,80,105,100,125>>]}]},{dd,[],[<<80,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,112,105,100,46>>]},{dt,[],[{code,[],[<<123,112,114,111,99,101,115,115,44,32,123,82,101,103,78,97,109,101,44,32,78,111,100,101,125,125>>]}]},{dd,[],[<<76,111,99,97,108,32,111,114,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,110,97,109,101,46>>]},{dt,[],[{code,[],[<<123,112,111,114,116,44,32,80,111,114,116,73,100,125>>]}]},{dd,[],[<<76,111,99,97,108,32,112,111,114,116,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,112,111,114,116,32,105,100,46>>]},{dt,[],[{code,[],[<<123,112,111,114,116,44,32,123,82,101,103,78,97,109,101,44,32,78,111,100,101,125,125>>]}]},{dd,[],[<<76,111,99,97,108,32,112,111,114,116,32,105,115,32,109,111,110,105,116,111,114,101,100,32,98,121,32,110,97,109,101,46,32,80,108,101,97,115,101,32,110,111,116,101,44,32,116,104,97,116,32,114,101,109,111,116,101,32,112,111,114,116,32,109,111,110,105,116,111,114,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,44,32,115,111,32>>,{code,[],[<<78,111,100,101>>]},<<32,119,105,108,108,32,97,108,119,97,121,115,32,98,101,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,110,97,109,101,46>>]}]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,125>>]}]},{dd,[],[{p,[],[{code,[],[<<77,81,68>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,101,105,116,104,101,114,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<32,111,114,32>>,{code,[],[<<111,110,95,104,101,97,112>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<76,101,118,101,108>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,112,114,105,111,114,105,116,105,101,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,100,117,99,116,105,111,110,115,44,32,78,117,109,98,101,114,125>>]}]},{dd,[],[{p,[],[{code,[],[<<78,117,109,98,101,114>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,100,117,99,116,105,111,110,115,32,101,120,101,99,117,116,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,114,101,103,105,115,116,101,114,101,100,95,110,97,109,101,44,32,65,116,111,109,125>>]}]},{dd,[],[{p,[],[{code,[],[<<65,116,111,109>>]},<<32,105,115,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,32,110,97,109,101,46,32,73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,110,111,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32,116,104,105,115,32,116,117,112,108,101,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,46>>]}]},{dt,[],[{code,[],[<<123,115,101,113,117,101,110,116,105,97,108,95,116,114,97,99,101,95,116,111,107,101,110,44,32,91,93,32,124,32,83,101,113,117,101,110,116,105,97,108,84,114,97,99,101,84,111,107,101,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,101,113,117,101,110,116,105,97,108,84,114,97,99,101,84,111,107,101,110>>]},<<32,105,115,32,116,104,101,32,115,101,113,117,101,110,116,105,97,108,32,116,114,97,99,101,32,116,111,107,101,110,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,115,116,97,99,107,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,115,116,97,99,107,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,44,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46>>]}]},{dt,[],[{code,[],[<<123,115,116,97,116,117,115,44,32,83,116,97,116,117,115,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,116,97,116,117,115>>]},<<32,105,115,32,116,104,101,32,115,116,97,116,117,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,97,110,100,32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{ul,[],[{li,[],[{code,[],[<<101,120,105,116,105,110,103>>]}]},{li,[],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,110,103>>]}]},{li,[],[{code,[],[<<119,97,105,116,105,110,103>>]},<<32,40,102,111,114,32,97,32,109,101,115,115,97,103,101,41>>]},{li,[],[{code,[],[<<114,117,110,110,105,110,103>>]}]},{li,[],[{code,[],[<<114,117,110,110,97,98,108,101>>]},<<32,40,114,101,97,100,121,32,116,111,32,114,117,110,44,32,98,117,116,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,105,115,32,114,117,110,110,105,110,103,41>>]},{li,[],[{code,[],[<<115,117,115,112,101,110,100,101,100>>]},<<32,40,115,117,115,112,101,110,100,101,100,32,111,110,32,97,32,34,98,117,115,121,34,32,112,111,114,116,32,111,114,32,98,121,32,116,104,101,32,66,73,70,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49,44,50>>]},<<41>>]}]}]},{dt,[],[{code,[],[<<123,115,117,115,112,101,110,100,105,110,103,44,32,83,117,115,112,101,110,100,101,101,76,105,115,116,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101,76,105,115,116>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,83,117,115,112,101,110,100,101,101,44,32,65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116,44,32,79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116,125>>]},<<32,116,117,112,108,101,115,46,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,115,32,98,101,101,110,44,32,111,114,32,105,115,32,116,111,32,98,101,44,32,115,117,115,112,101,110,100,101,100,32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<32,116,104,114,111,117,103,104,32,116,104,101,32,66,73,70,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>]}]},<<46>>]},{p,[],[{code,[],[<<65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46,32>>,{code,[],[<<79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,110,111,116,32,121,101,116,32,99,111,109,112,108,101,116,101,100,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,115,32,115,101,110,116,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<44,32,116,104,97,116,32,105,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116,32,61,47,61,32,48>>]},<<44,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,99,117,114,114,101,110,116,108,121,32,105,110,32,116,104,101,32,115,117,115,112,101,110,100,101,100,32,115,116,97,116,101,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116,32,61,47,61,32,48>>]},<<44,32,111,112,116,105,111,110,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<32,104,97,115,32,98,101,101,110,32,117,115,101,100,32,97,110,100,32,116,104,101,32,115,117,115,112,101,110,100,101,101,32,104,97,115,32,110,111,116,32,121,101,116,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<65,99,116,105,118,101,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<79,117,116,115,116,97,110,100,105,110,103,83,117,115,112,101,110,100,67,111,117,110,116>>]},<<32,97,114,101,32,110,111,116,32,116,104,101,32,116,111,116,97,108,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<44,32,111,110,108,121,32,116,104,101,32,112,97,114,116,115,32,99,111,110,116,114,105,98,117,116,101,100,32,98,121,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]},{dt,[],[{a,[{id,<<112,114,111,99,101,115,115,95,105,110,102,111,95,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<123,116,111,116,97,108,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<83,105,122,101>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,44,32,111,102,32,97,108,108,32,104,101,97,112,32,102,114,97,103,109,101,110,116,115,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,32,116,104,101,32,112,114,111,99,101,115,115,32,115,116,97,99,107,32,97,110,100,32,97,110,121,32,117,110,114,101,99,101,105,118,101,100,32,109,101,115,115,97,103,101,115,32,116,104,97,116,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,104,101,97,112,46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,99,101,44,32,73,110,116,101,114,110,97,108,84,114,97,99,101,70,108,97,103,115,125>>]}]},{dd,[],[{p,[],[{code,[],[<<73,110,116,101,114,110,97,108,84,114,97,99,101,70,108,97,103,115>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,114,101,112,114,101,115,101,110,116,105,110,103,32,116,104,101,32,105,110,116,101,114,110,97,108,32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32>>,{code,[],[<<73,110,102,111,84,117,112,108,101>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,112,95,101,120,105,116,44,32,66,111,111,108,101,97,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<66,111,111,108,101,97,110>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,110,111,116,32,97,108,108,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,32,115,117,112,112,111,114,116,32,97,108,108,32,116,104,101,115,101,32>>,{code,[],[<<73,116,101,109>>]},<<115,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<73,116,101,109>>]},<<32,105,115,32,97,110,32,105,110,118,97,108,105,100,32,105,116,101,109,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,49,49,49>>,signature => [{attribute,{2485,2},spec,{{process_info,2},[{type,{2485,19},bounded_fun,[{type,{2485,19},'fun',[{type,{2485,19},product,[{var,{2485,20},'Pid'},{var,{2485,25},'Item'}]},{type,{2486,27},union,[{var,{2486,27},'InfoTuple'},{type,{2486,39},nil,[]},{atom,{2486,44},undefined}]}]},[{type,{2487,7},constraint,[{atom,{2487,7},is_subtype},[{var,{2487,7},'Pid'},{type,{2487,14},pid,[]}]]},{type,{2488,7},constraint,[{atom,{2488,7},is_subtype},[{var,{2488,7},'Item'},{user_type,{2488,15},process_info_item,[]}]]},{type,{2489,7},constraint,[{atom,{2489,7},is_subtype},[{var,{2489,7},'InfoTuple'},{user_type,{2489,20},process_info_result_item,[]}]]}]]},{type,{2490,19},bounded_fun,[{type,{2490,19},'fun',[{type,{2490,19},product,[{var,{2490,20},'Pid'},{var,{2490,25},'ItemList'}]},{type,{2490,38},union,[{var,{2490,38},'InfoTupleList'},{type,{2490,54},nil,[]},{atom,{2490,59},undefined}]}]},[{type,{2491,7},constraint,[{atom,{2491,7},is_subtype},[{var,{2491,7},'Pid'},{type,{2491,14},pid,[]}]]},{type,{2492,7},constraint,[{atom,{2492,7},is_subtype},[{var,{2492,7},'ItemList'},{type,{2492,19},list,[{var,{2492,20},'Item'}]}]]},{type,{2493,7},constraint,[{atom,{2493,7},is_subtype},[{var,{2493,7},'Item'},{user_type,{2493,15},process_info_item,[]}]]},{type,{2494,7},constraint,[{atom,{2494,7},is_subtype},[{var,{2494,7},'InfoTupleList'},{type,{2494,24},list,[{var,{2494,25},'InfoTuple'}]}]]},{type,{2495,7},constraint,[{atom,{2495,7},is_subtype},[{var,{2495,7},'InfoTuple'},{user_type,{2495,20},process_info_result_item,[]}]]}]]}]}}]}},{{function,processes,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1713}],[<<112,114,111,99,101,115,115,101,115,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,110,32,101,120,105,116,105,110,103,32,112,114,111,99,101,115,115,32,101,120,105,115,116,115,44,32,98,117,116,32,105,115,32,110,111,116,32,97,108,105,118,101,46,32,84,104,97,116,32,105,115,44,32>>,{code,[],[<<105,115,95,112,114,111,99,101,115,115,95,97,108,105,118,101,47,49>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,102,111,114,32,97,110,32,101,120,105,116,105,110,103,32,112,114,111,99,101,115,115,44,32,98,117,116,32,105,116,115,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<112,114,111,99,101,115,115,101,115,47,48>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,112,114,111,99,101,115,115,101,115,40,41,46,10,91,60,48,46,48,46,48,62,44,60,48,46,50,46,48,62,44,60,48,46,52,46,48,62,44,60,48,46,53,46,48,62,44,60,48,46,55,46,48,62,44,60,48,46,56,46,48,62,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,53,52>>,signature => [{attribute,{1713,2},spec,{{processes,0},[{type,{1713,16},'fun',[{type,{1713,16},product,[]},{type,{1713,22},list,[{type,{1713,23},pid,[]}]}]}]}}]}},{{function,purge_module,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1718}],[<<112,117,114,103,101,95,109,111,100,117,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,109,111,118,101,115,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46,32,66,101,102,111,114,101,32,116,104,105,115,32,66,73,70,32,105,115,32,117,115,101,100,44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,104,101,99,107,95,112,114,111,99,101,115,115,95,99,111,100,101,47,50>>]}]},<<32,105,115,32,116,111,32,98,101,32,99,97,108,108,101,100,32,116,111,32,99,104,101,99,107,32,116,104,97,116,32,110,111,32,112,114,111,99,101,115,115,101,115,32,101,120,101,99,117,116,101,32,111,108,100,32,99,111,100,101,32,105,110,32,116,104,101,32,109,111,100,117,108,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,116,104,101,32,99,111,100,101,32,115,101,114,118,101,114,32,40,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,100,101,40,51,41>>]}]},<<41,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,101,108,115,101,119,104,101,114,101,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,56,46,48,32,40,69,114,108,97,110,103,47,79,84,80,32,49,57,41,44,32,97,110,121,32,108,105,110,103,101,114,105,110,103,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,115,116,105,108,108,32,101,120,101,99,117,116,101,32,116,104,101,32,111,108,100,32,99,111,100,101,32,105,115,32,107,105,108,108,101,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,32,73,110,32,101,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,44,32,115,117,99,104,32,105,110,99,111,114,114,101,99,116,32,117,115,101,32,99,111,117,108,100,32,99,97,117,115,101,32,109,117,99,104,32,109,111,114,101,32,102,97,116,97,108,32,102,97,105,108,117,114,101,115,44,32,108,105,107,101,32,101,109,117,108,97,116,111,114,32,99,114,97,115,104,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,111,108,100,32,99,111,100,101,32,102,111,114,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,55,49>>,signature => [{attribute,{1718,2},spec,{{purge_module,1},[{type,{1718,19},bounded_fun,[{type,{1718,19},'fun',[{type,{1718,19},product,[{var,{1718,20},'Module'}]},{atom,{1718,31},true}]},[{type,{1719,7},constraint,[{atom,{1719,7},is_subtype},[{var,{1719,7},'Module'},{type,{1719,17},atom,[]}]]}]]}]}}]}},{{function,put,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1732}],[<<112,117,116,47,50>>],#{<<101,110>> => [{p,[],[<<65,100,100,115,32,97,32,110,101,119,32>>,{code,[],[<<75,101,121>>]},<<32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,44,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<86,97,108>>]},<<44,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46,32,73,102,32>>,{code,[],[<<75,101,121>>]},<<32,101,120,105,115,116,115,44,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,105,115,32,100,101,108,101,116,101,100,32,97,110,100,32,114,101,112,108,97,99,101,100,32,98,121,32>>,{code,[],[<<86,97,108>>]},<<44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,46,32,84,104,101,32,97,118,101,114,97,103,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,79,40>>,{code,[],[<<49>>]},<<41,32,97,110,100,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,116,105,109,101,32,99,111,109,112,108,101,120,105,116,121,32,105,115,32,79,40>>,{code,[],[<<78>>]},<<41,44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,116,101,109,115,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,100,105,99,116,105,111,110,97,114,121,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,88,32,61,32,112,117,116,40,110,97,109,101,44,32,119,97,108,114,117,115,41,44,32,89,32,61,32,112,117,116,40,110,97,109,101,44,32,99,97,114,112,101,110,116,101,114,41,44,10,90,32,61,32,103,101,116,40,110,97,109,101,41,44,10,123,88,44,32,89,44,32,90,125,46,10,123,117,110,100,101,102,105,110,101,100,44,119,97,108,114,117,115,44,99,97,114,112,101,110,116,101,114,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,118,97,108,117,101,115,32,115,116,111,114,101,100,32,119,104,101,110,32>>,{code,[],[<<112,117,116>>]},<<32,105,115,32,101,118,97,108,117,97,116,101,100,32,119,105,116,104,105,110,32,116,104,101,32,115,99,111,112,101,32,111,102,32,97,32>>,{code,[],[<<99,97,116,99,104>>]},<<32,97,114,101,32,110,111,116,32,114,101,116,114,97,99,116,101,100,32,105,102,32,97,32>>,{code,[],[<<116,104,114,111,119>>]},<<32,105,115,32,101,118,97,108,117,97,116,101,100,44,32,111,114,32,105,102,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,52,57,54>>,signature => [{attribute,{1732,2},spec,{{put,2},[{type,{1732,10},bounded_fun,[{type,{1732,10},'fun',[{type,{1732,10},product,[{var,{1732,11},'Key'},{var,{1732,16},'Val'}]},{type,{1732,24},term,[]}]},[{type,{1733,7},constraint,[{atom,{1733,7},is_subtype},[{var,{1733,7},'Key'},{type,{1733,14},term,[]}]]},{type,{1734,7},constraint,[{atom,{1734,7},is_subtype},[{var,{1734,7},'Val'},{type,{1734,14},term,[]}]]}]]}]}}]}},{{function,raise,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1739}],[<<114,97,105,115,101,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<114,97,105,115,101,95,115,116,97,99,107,116,114,97,99,101>>}],[]}]},{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,99,108,97,115,115,44,32,114,101,97,115,111,110,44,32,97,110,100,32,99,97,108,108,32,115,116,97,99,107,32,98,97,99,107,116,114,97,99,101,32,40>>,{em,[],[<<115,116,97,99,107,116,114,97,99,101>>]},<<41,46>>]},{p,[],[{code,[],[<<67,108,97,115,115>>]},<<32,105,115,32>>,{code,[],[<<101,114,114,111,114>>]},<<44,32>>,{code,[],[<<101,120,105,116>>]},<<44,32,111,114,32>>,{code,[],[<<116,104,114,111,119>>]},<<46,32,83,111,44,32,105,102,32,105,116,32,119,101,114,101,32,110,111,116,32,102,111,114,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,44,32>>,{code,[],[<<101,114,108,97,110,103,58,114,97,105,115,101,40,67,108,97,115,115,44,32,82,101,97,115,111,110,44,32,83,116,97,99,107,116,114,97,99,101,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,67,108,97,115,115,40,82,101,97,115,111,110,41>>]},<<32,40,103,105,118,101,110,32,116,104,97,116,32>>,{code,[],[<<67,108,97,115,115>>]},<<32,105,115,32,97,32,118,97,108,105,100,32,99,108,97,115,115,41,46>>]},{p,[],[{code,[],[<<82,101,97,115,111,110>>]},<<32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,46>>]},{p,[],[{code,[],[<<83,116,97,99,107,116,114,97,99,101>>]},<<32,105,115,32,97,32,108,105,115,116,32,97,115,32,112,114,111,118,105,100,101,100,32,105,110,32,97,32,116,114,121,45,99,97,116,99,104,32,99,108,97,117,115,101,46>>]},{pre,[],[{code,[],[<<116,114,121,10,32,32,32,32,46,46,46,10,99,97,116,99,104,32,67,108,97,115,115,58,82,101,97,115,111,110,58,83,116,97,99,107,116,114,97,99,101,32,45,62,10,32,32,32,32,46,46,46,10,101,110,100>>]}]},{p,[],[<<84,104,97,116,32,105,115,44,32,97,32,108,105,115,116,32,111,102,32,102,111,117,114,45,116,117,112,108,101,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,32,124,32,65,114,103,115,44,32,69,120,116,114,97,73,110,102,111,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<32,97,110,100,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,97,114,101,32,97,116,111,109,115,44,32,97,110,100,32,116,104,101,32,116,104,105,114,100,32,101,108,101,109,101,110,116,32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,97,114,105,116,121,32,111,114,32,97,110,32,97,114,103,117,109,101,110,116,32,108,105,115,116,46,32,84,104,101,32,115,116,97,99,107,116,114,97,99,101,32,99,97,110,32,97,108,115,111,32,99,111,110,116,97,105,110,32>>,{code,[],[<<123,70,117,110,44,32,65,114,103,115,44,32,69,120,116,114,97,73,110,102,111,125>>]},<<32,116,117,112,108,101,115,44,32,119,104,101,114,101,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,102,117,110,32,97,110,100,32>>,{code,[],[<<65,114,103,115>>]},<<32,105,115,32,97,110,32,97,114,103,117,109,101,110,116,32,108,105,115,116,46>>]},{p,[],[<<69,108,101,109,101,110,116,32>>,{code,[],[<<69,120,116,114,97,73,110,102,111>>]},<<32,97,116,32,116,104,101,32,101,110,100,32,105,115,32,111,112,116,105,111,110,97,108,46,32,79,109,105,116,116,105,110,103,32,105,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,112,101,99,105,102,121,105,110,103,32,97,110,32,101,109,112,116,121,32,108,105,115,116,46>>]},{p,[],[<<84,104,101,32,115,116,97,99,107,116,114,97,99,101,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,115,116,97,99,107,116,114,97,99,101,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,59,32,105,116,32,105,115,32,116,114,117,110,99,97,116,101,100,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,120,105,109,117,109,32,115,116,97,99,107,116,114,97,99,101,32,100,101,112,116,104,46>>]},{p,[],[<<65,115,32,101,118,97,108,117,97,116,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,117,115,101,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,111,32,116,101,114,109,105,110,97,116,101,44,32,105,116,32,104,97,115,32,110,111,32,114,101,116,117,114,110,32,118,97,108,117,101,32,117,110,108,101,115,115,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,105,110,118,97,108,105,100,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{em,[],[<<114,101,116,117,114,110,115,32,116,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110>>]},<<32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,98,101,32,115,117,114,101,32,110,111,116,32,116,111,32,114,101,116,117,114,110,44,32,121,111,117,32,99,97,110,32,99,97,108,108,32>>,{code,[],[<<101,114,114,111,114,40,101,114,108,97,110,103,58,114,97,105,115,101,40,67,108,97,115,115,44,32,82,101,97,115,111,110,44,32,83,116,97,99,107,116,114,97,99,101,41,41>>]},<<32,97,110,100,32,104,111,112,101,32,116,111,32,100,105,115,116,105,110,103,117,105,115,104,32,101,120,99,101,112,116,105,111,110,115,32,108,97,116,101,114,46>>]},{p,[],[<<83,101,101,32,116,104,101,32,114,101,102,101,114,101,110,99,101,32,109,97,110,117,97,108,32,97,98,111,117,116,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,101,120,99,101,112,116,105,111,110,32,99,108,97,115,115,101,115,32,97,110,100,32,104,111,119,32,116,111,32,99,97,116,99,104,32,101,120,99,101,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,50,50>>,signature => [{attribute,{1739,2},spec,{{erlang,raise,3},[{type,{1739,19},bounded_fun,[{type,{1739,19},'fun',[{type,{1739,19},product,[{var,{1739,20},'Class'},{var,{1739,27},'Reason'},{var,{1739,35},'Stacktrace'}]},{atom,{1739,50},badarg}]},[{type,{1740,7},constraint,[{atom,{1740,7},is_subtype},[{var,{1740,7},'Class'},{type,{1740,16},union,[{atom,{1740,16},error},{atom,{1740,26},exit},{atom,{1740,35},throw}]}]]},{type,{1741,7},constraint,[{atom,{1741,7},is_subtype},[{var,{1741,7},'Reason'},{type,{1741,17},term,[]}]]},{type,{1742,7},constraint,[{atom,{1742,7},is_subtype},[{var,{1742,7},'Stacktrace'},{type,{1742,21},union,[{user_type,{1742,21},raise_stacktrace,[]},{user_type,{1742,42},stacktrace,[]}]}]]}]]}]}}]}},{{function,read_timer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1747}],[<<114,101,97,100,95,116,105,109,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,116,104,101,32,115,116,97,116,101,32,111,102,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,97,100,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114,40,84,105,109,101,114,82,101,102,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,55,50>>,signature => [{attribute,{1747,2},spec,{{erlang,read_timer,1},[{type,{1747,24},bounded_fun,[{type,{1747,24},'fun',[{type,{1747,24},product,[{var,{1747,25},'TimerRef'}]},{var,{1747,38},'Result'}]},[{type,{1748,7},constraint,[{atom,{1748,7},is_subtype},[{var,{1748,7},'TimerRef'},{type,{1748,19},reference,[]}]]},{type,{1749,7},constraint,[{atom,{1749,7},is_subtype},[{var,{1749,7},'Time'},{type,{1749,15},non_neg_integer,[]}]]},{type,{1750,7},constraint,[{atom,{1750,7},is_subtype},[{var,{1750,7},'Result'},{type,{1750,17},union,[{var,{1750,17},'Time'},{atom,{1750,24},false}]}]]}]]}]}}]}},{{function,read_timer,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1756}],[<<114,101,97,100,95,116,105,109,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,116,104,101,32,115,116,97,116,101,32,111,102,32,97,32,116,105,109,101,114,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,99,114,101,97,116,101,100,32,98,121,32,101,105,116,104,101,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114>>]}]},<<46,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,105,100,101,110,116,105,102,105,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,119,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32,116,104,101,32,66,73,70,32,116,104,97,116,32,99,114,101,97,116,101,100,32,116,104,101,32,116,105,109,101,114,46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110,115>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,115,121,110,99,44,32,65,115,121,110,99,125>>]}]},{dd,[],[{p,[],[<<65,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,115,116,97,116,101,32,105,110,102,111,114,109,97,116,105,111,110,46,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,119,104,105,99,104,32,99,97,117,115,101,115,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100,32,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114>>]},<<46,32,87,104,101,110,32>>,{code,[],[<<65,115,121,110,99>>]},<<32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<44,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114>>]},<<32,115,101,110,100,115,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,114,101,113,117,101,115,116,32,102,111,114,32,116,104,101,32,115,116,97,116,101,32,105,110,102,111,114,109,97,116,105,111,110,32,116,111,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,44,32,97,110,100,32,116,104,101,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<46,32,65,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,114,101,97,100,95,116,105,109,101,114,44,32,84,105,109,101,114,82,101,102,44,32,82,101,115,117,108,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114>>]},<<32,119,104,101,110,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,46>>]}]}]},{p,[],[<<77,111,114,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,44,32,105,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,32,108,101,102,116,32,117,110,116,105,108,32,116,104,101,32,116,105,109,101,114,32,101,120,112,105,114,101,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<82,101,115,117,108,116>>]},<<32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<44,32,97,32,116,105,109,101,114,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,99,111,117,108,100,32,110,111,116,32,98,101,32,102,111,117,110,100,46,32,84,104,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,116,105,109,101,114,32,104,97,100,32,101,120,112,105,114,101,100,44,32,111,114,32,98,101,101,110,32,99,97,110,99,101,108,101,100,44,32,111,114,32,98,101,99,97,117,115,101,32>>,{code,[],[<<84,105,109,101,114,82,101,102>>]},<<32,110,101,118,101,114,32,104,97,115,32,99,111,114,114,101,115,112,111,110,100,101,100,32,116,111,32,97,32,116,105,109,101,114,46,32,69,118,101,110,32,105,102,32,116,104,101,32,116,105,109,101,114,32,104,97,115,32,101,120,112,105,114,101,100,44,32,105,116,32,100,111,101,115,32,110,111,116,32,116,101,108,108,32,121,111,117,32,119,104,101,116,104,101,114,32,111,114,32,110,111,116,32,116,104,101,32,116,105,109,101,45,111,117,116,32,109,101,115,115,97,103,101,32,104,97,115,32,97,114,114,105,118,101,100,32,97,116,32,105,116,115,32,100,101,115,116,105,110,97,116,105,111,110,32,121,101,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,104,97,116,32,109,97,110,97,103,101,115,32,116,104,101,32,116,105,109,101,114,32,99,97,110,32,98,101,32,99,111,45,108,111,99,97,116,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32,115,99,104,101,100,117,108,101,114,32,116,104,97,110,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32,73,102,32,115,111,44,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,116,105,109,101,114,32,115,101,114,118,105,99,101,32,116,97,107,101,115,32,109,117,99,104,32,108,111,110,103,101,114,32,116,105,109,101,32,116,104,97,110,32,105,102,32,105,116,32,105,115,32,108,111,99,97,116,101,100,32,108,111,99,97,108,108,121,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,105,110,32,97,32,99,114,105,116,105,99,97,108,32,112,97,116,104,44,32,97,110,100,32,99,97,110,32,100,111,32,111,116,104,101,114,32,116,104,105,110,103,115,32,119,104,105,108,101,32,119,97,105,116,105,110,103,32,102,111,114,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,44,32,121,111,117,32,119,97,110,116,32,116,111,32,117,115,101,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,116,114,117,101,125>>]},<<46,32,73,102,32,117,115,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,97,115,121,110,99,44,32,102,97,108,115,101,125>>]},<<44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,98,108,111,99,107,101,100,32,117,110,116,105,108,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,112,101,114,102,111,114,109,101,100,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,47,52>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,47,52>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,53,56,50>>,signature => [{attribute,{1756,2},spec,{{erlang,read_timer,2},[{type,{1756,24},bounded_fun,[{type,{1756,24},'fun',[{type,{1756,24},product,[{var,{1756,25},'TimerRef'},{var,{1756,35},'Options'}]},{type,{1756,47},union,[{var,{1756,47},'Result'},{atom,{1756,56},ok}]}]},[{type,{1757,7},constraint,[{atom,{1757,7},is_subtype},[{var,{1757,7},'TimerRef'},{type,{1757,19},reference,[]}]]},{type,{1758,7},constraint,[{atom,{1758,7},is_subtype},[{var,{1758,7},'Async'},{type,{1758,16},boolean,[]}]]},{type,{1759,7},constraint,[{atom,{1759,7},is_subtype},[{var,{1759,7},'Option'},{type,{1759,17},tuple,[{atom,{1759,18},async},{var,{1759,25},'Async'}]}]]},{type,{1760,7},constraint,[{atom,{1760,7},is_subtype},[{var,{1760,7},'Options'},{type,{1760,18},list,[{var,{1760,19},'Option'}]}]]},{type,{1761,7},constraint,[{atom,{1761,7},is_subtype},[{var,{1761,7},'Time'},{type,{1761,15},non_neg_integer,[]}]]},{type,{1762,7},constraint,[{atom,{1762,7},is_subtype},[{var,{1762,7},'Result'},{type,{1762,17},union,[{var,{1762,17},'Time'},{atom,{1762,24},false}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,ref_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1768}],[<<114,101,102,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,116,101,120,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32>>,{code,[],[<<82,101,102>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,97,110,100,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,97,112,112,108,105,99,97,116,105,111,110,32,112,114,111,103,114,97,109,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,54,51,56>>,signature => [{attribute,{1768,2},spec,{{ref_to_list,1},[{type,{1768,18},bounded_fun,[{type,{1768,18},'fun',[{type,{1768,18},product,[{var,{1768,19},'Ref'}]},{type,{1768,27},string,[]}]},[{type,{1769,7},constraint,[{atom,{1769,7},is_subtype},[{var,{1769,7},'Ref'},{type,{1769,14},reference,[]}]]}]]}]}}]}},{{function,register,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1774}],[<<114,101,103,105,115,116,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,103,105,115,116,101,114,115,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,119,105,116,104,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,114,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,105,110,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,114,117,110,116,105,109,101,45,115,101,114,118,105,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<110,97,109,101,32,114,101,103,105,115,116,114,121>>]}]},<<46,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<44,32,119,104,105,99,104,32,109,117,115,116,32,98,101,32,97,110,32,97,116,111,109,44,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,112,105,100,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,105,110,32,115,101,110,100,32,111,112,101,114,97,116,111,114,32,40>>,{code,[],[<<82,101,103,78,97,109,101,32,33,32,77,101,115,115,97,103,101>>]},<<41,32,97,110,100,32,109,111,115,116,32,111,116,104,101,114,32,66,73,70,115,32,116,104,97,116,32,116,97,107,101,32,97,32,112,105,100,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,115,32,97,115,32,97,110,32,97,114,103,117,109,101,110,116,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,114,101,103,105,115,116,101,114,40,100,98,44,32,80,105,100,41,46,10,116,114,117,101>>]}]},{p,[],[<<84,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,118,105,115,105,98,108,101,45,114,101,115,111,117,114,99,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<68,105,114,101,99,116,108,121,32,86,105,115,105,98,108,101,32,69,114,108,97,110,103,32,82,101,115,111,117,114,99,101>>]},<<32,97,110,100,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,117,110,114,101,103,105,115,116,101,114,101,100,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,116,101,114,109,105,110,97,116,101,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,120,105,115,116,105,110,103,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,117,115,101,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,115,32,97,108,114,101,97,100,121,32,114,101,103,105,115,116,101,114,101,100,32,40,97,108,114,101,97,100,121,32,104,97,115,32,97,32,110,97,109,101,41,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,54,53,49>>,signature => [{attribute,{1774,2},spec,{{register,2},[{type,{1774,15},bounded_fun,[{type,{1774,15},'fun',[{type,{1774,15},product,[{var,{1774,16},'RegName'},{var,{1774,25},'PidOrPort'}]},{atom,{1774,39},true}]},[{type,{1775,7},constraint,[{atom,{1775,7},is_subtype},[{var,{1775,7},'RegName'},{type,{1775,18},atom,[]}]]},{type,{1776,7},constraint,[{atom,{1776,7},is_subtype},[{var,{1776,7},'PidOrPort'},{type,{1776,20},union,[{type,{1776,20},port,[]},{type,{1776,29},pid,[]}]}]]}]]}]}}]}},{{function,registered,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1781}],[<<114,101,103,105,115,116,101,114,101,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,110,97,109,101,115,32,116,104,97,116,32,104,97,118,101,32,98,101,101,110,32,114,101,103,105,115,116,101,114,101,100,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,103,105,115,116,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,103,105,115,116,101,114,47,50>>]}]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,114,101,103,105,115,116,101,114,101,100,40,41,46,10,91,99,111,100,101,95,115,101,114,118,101,114,44,32,102,105,108,101,95,115,101,114,118,101,114,44,32,105,110,105,116,44,32,117,115,101,114,44,32,109,121,95,100,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,54,56,55>>,signature => [{attribute,{1781,2},spec,{{registered,0},[{type,{1781,17},bounded_fun,[{type,{1781,17},'fun',[{type,{1781,17},product,[]},{type,{1781,23},list,[{var,{1781,24},'RegName'}]}]},[{type,{1782,7},constraint,[{atom,{1782,7},is_subtype},[{var,{1782,7},'RegName'},{type,{1782,18},atom,[]}]]}]]}]}}]}},{{function,resume_process,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1787}],[<<114,101,115,117,109,101,95,112,114,111,99,101,115,115,47,49>>],#{<<101,110>> => [{p,[],[<<68,101,99,114,101,97,115,101,115,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,112,114,101,118,105,111,117,115,108,121,32,116,111,32,104,97,118,101,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,116,104,114,111,117,103,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>]}]},<<32,98,121,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,115,117,109,101,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]},<<46,32,87,104,101,110,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,114,101,97,99,104,101,115,32,122,101,114,111,44,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,114,101,115,117,109,101,100,44,32,116,104,97,116,32,105,115,44,32,105,116,115,32,115,116,97,116,101,32,105,115,32,99,104,97,110,103,101,100,32,102,114,111,109,32,115,117,115,112,101,110,100,101,100,32,105,110,116,111,32,116,104,101,32,115,116,97,116,101,32,105,116,32,104,97,100,32,98,101,102,111,114,101,32,105,116,32,119,97,115,32,115,117,115,112,101,110,100,101,100,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,114,101,115,117,109,101,95,112,114,111,99,101,115,115,47,49>>]},<<32,104,97,100,32,110,111,116,32,112,114,101,118,105,111,117,115,108,121,32,105,110,99,114,101,97,115,101,100,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,48,48>>,signature => [{attribute,{1787,2},spec,{{erlang,resume_process,1},[{type,{1787,28},bounded_fun,[{type,{1787,28},'fun',[{type,{1787,28},product,[{var,{1787,29},'Suspendee'}]},{atom,{1787,43},true}]},[{type,{1788,7},constraint,[{atom,{1788,7},is_subtype},[{var,{1788,7},'Suspendee'},{type,{1788,20},pid,[]}]]}]]}]}}]}},{{function,round,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1794}],[<<114,111,117,110,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,98,121,32,114,111,117,110,100,105,110,103,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,111,117,110,100,40,52,50,46,49,41,46,10,52,50>>]}]},{pre,[],[{code,[],[<<114,111,117,110,100,40,53,46,53,41,46,10,54>>]}]},{pre,[],[{code,[],[<<114,111,117,110,100,40,45,53,46,53,41,46,10,45,54>>]}]},{pre,[],[{code,[],[<<114,111,117,110,100,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41,46,10,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]}]},{p,[],[<<73,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<114,111,117,110,100,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41>>]},<<32,101,118,97,108,117,97,116,101,115,32,116,111,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]},<<46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,116,104,97,116,32,116,104,101,32,110,117,109,98,101,114,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48>>]},<<32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,73,110,115,116,101,97,100,44,32,116,104,101,32,102,108,111,97,116,32,108,105,116,101,114,97,108,32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56,46,48>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,99,108,111,115,101,115,116,32,110,117,109,98,101,114,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,83,101,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115,35,102,108,111,97,116,95,114,101,112,114,101,115,101,110,116,97,116,105,111,110,95,112,114,111,98,108,101,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,70,108,111,97,116,105,110,103,32,80,111,105,110,116,32,78,117,109,98,101,114,115>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,52,49>>,signature => [{attribute,{1794,2},spec,{{round,1},[{type,{1794,12},bounded_fun,[{type,{1794,12},'fun',[{type,{1794,12},product,[{var,{1794,13},'Number'}]},{type,{1794,24},integer,[]}]},[{type,{1795,7},constraint,[{atom,{1795,7},is_subtype},[{var,{1795,7},'Number'},{type,{1795,17},number,[]}]]}]]}]}}]}},{{function,self,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1801}],[<<115,101,108,102,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,101,108,102,40,41,46,10,60,48,46,50,54,46,48,62>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,55,50>>,signature => [{attribute,{1801,2},spec,{{self,0},[{type,{1801,11},'fun',[{type,{1801,11},product,[]},{type,{1801,17},pid,[]}]}]}}]}},{{function,send,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2499}],[<<115,101,110,100,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<83,101,110,100,115,32,97,32,109,101,115,115,97,103,101,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<77,115,103>>]},<<46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,117,115,105,110,103,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,115,101,110,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,101,110,100,32,111,112,101,114,97,116,111,114>>]},<<58,32>>,{code,[],[<<68,101,115,116,32,33,32,77,115,103>>]},<<46>>]},{p,[],[{code,[],[<<68,101,115,116>>]},<<32,99,97,110,32,98,101,32,97,32,114,101,109,111,116,101,32,111,114,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,97,110,32,97,108,105,97,115,44,32,97,32,40,108,111,99,97,108,41,32,112,111,114,116,44,32,97,32,108,111,99,97,108,108,121,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,44,32,111,114,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,82,101,103,78,97,109,101,44,32,78,111,100,101,125>>]},<<32,102,111,114,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,97,116,32,97,110,111,116,104,101,114,32,110,111,100,101,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,102,97,105,108,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,114,117,110,45,116,105,109,101,32,101,114,114,111,114,32,105,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,110,32,97,116,111,109,32,110,97,109,101,44,32,98,117,116,32,116,104,105,115,32,110,97,109,101,32,105,115,32,110,111,116,32,114,101,103,105,115,116,101,114,101,100,46,32,84,104,105,115,32,105,115,32,116,104,101,32,111,110,108,121,32,99,97,115,101,32,119,104,101,110,32>>,{code,[],[<<115,101,110,100>>]},<<32,102,97,105,108,115,32,102,111,114,32,97,110,32,117,110,114,101,97,99,104,97,98,108,101,32,100,101,115,116,105,110,97,116,105,111,110,32>>,{code,[],[<<68,101,115,116>>]},<<32,40,111,102,32,99,111,114,114,101,99,116,32,116,121,112,101,41,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,55,56,53>>,signature => [{attribute,{2499,2},spec,{{erlang,send,2},[{type,{2499,18},bounded_fun,[{type,{2499,18},'fun',[{type,{2499,18},product,[{var,{2499,19},'Dest'},{var,{2499,25},'Msg'}]},{var,{2499,33},'Msg'}]},[{type,{2500,7},constraint,[{atom,{2500,7},is_subtype},[{var,{2500,7},'Dest'},{user_type,{2500,15},dst,[]}]]},{type,{2501,7},constraint,[{atom,{2501,7},is_subtype},[{var,{2501,7},'Msg'},{type,{2501,14},term,[]}]]}]]}]}}]}},{{function,send,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2505}],[<<115,101,110,100,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<69,105,116,104,101,114,32,115,101,110,100,115,32,97,32,109,101,115,115,97,103,101,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<44,32,111,114,32,100,111,101,115,32,110,111,116,32,115,101,110,100,32,116,104,101,32,109,101,115,115,97,103,101,32,98,117,116,32,114,101,116,117,114,110,115,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,40,115,101,101,32,98,101,108,111,119,41,46,32,79,116,104,101,114,119,105,115,101,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,47,50>>]}]},<<46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,101,100,32,101,120,112,108,97,110,97,116,105,111,110,32,97,110,100,32,119,97,114,110,105,110,103,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50,44,51>>]}]},<<46>>]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<110,111,115,117,115,112,101,110,100>>]}]},{dd,[],[<<73,102,32,116,104,101,32,115,101,110,100,101,114,32,119,111,117,108,100,32,104,97,118,101,32,116,111,32,98,101,32,115,117,115,112,101,110,100,101,100,32,116,111,32,100,111,32,116,104,101,32,115,101,110,100,44,32>>,{code,[],[<<110,111,115,117,115,112,101,110,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]},{dt,[],[{code,[],[<<110,111,99,111,110,110,101,99,116>>]}]},{dd,[],[<<73,102,32,116,104,101,32,100,101,115,116,105,110,97,116,105,111,110,32,110,111,100,101,32,119,111,117,108,100,32,104,97,118,101,32,116,111,32,98,101,32,97,117,116,111,45,99,111,110,110,101,99,116,101,100,32,116,111,32,100,111,32,116,104,101,32,115,101,110,100,44,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<65,115,32,119,105,116,104,32>>,{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50,44,51>>]},<<58,32,117,115,101,32,119,105,116,104,32,101,120,116,114,101,109,101,32,99,97,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,48,53>>,signature => [{attribute,{2505,2},spec,{{erlang,send,3},[{type,{2505,18},bounded_fun,[{type,{2505,18},'fun',[{type,{2505,18},product,[{var,{2505,19},'Dest'},{var,{2505,25},'Msg'},{var,{2505,30},'Options'}]},{var,{2505,42},'Res'}]},[{type,{2506,7},constraint,[{atom,{2506,7},is_subtype},[{var,{2506,7},'Dest'},{user_type,{2506,15},dst,[]}]]},{type,{2507,7},constraint,[{atom,{2507,7},is_subtype},[{var,{2507,7},'Msg'},{type,{2507,14},term,[]}]]},{type,{2508,7},constraint,[{atom,{2508,7},is_subtype},[{var,{2508,7},'Options'},{type,{2508,18},list,[{type,{2508,19},union,[{atom,{2508,19},nosuspend},{atom,{2508,31},noconnect}]}]}]]},{type,{2509,7},constraint,[{atom,{2509,7},is_subtype},[{var,{2509,7},'Res'},{type,{2509,14},union,[{atom,{2509,14},ok},{atom,{2509,19},nosuspend},{atom,{2509,31},noconnect}]}]]}]]}]}}]}},{{function,send_after,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1806}],[<<115,101,110,100,95,97,102,116,101,114,47,51>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,40,84,105,109,101,44,32,68,101,115,116,44,32,77,115,103,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,51,55>>,signature => [{attribute,{1806,2},spec,{{erlang,send_after,3},[{type,{1806,24},bounded_fun,[{type,{1806,24},'fun',[{type,{1806,24},product,[{var,{1806,25},'Time'},{var,{1806,31},'Dest'},{var,{1806,37},'Msg'}]},{var,{1806,45},'TimerRef'}]},[{type,{1807,7},constraint,[{atom,{1807,7},is_subtype},[{var,{1807,7},'Time'},{type,{1807,15},non_neg_integer,[]}]]},{type,{1808,7},constraint,[{atom,{1808,7},is_subtype},[{var,{1808,7},'Dest'},{type,{1808,15},union,[{type,{1808,15},pid,[]},{type,{1808,23},atom,[]}]}]]},{type,{1809,7},constraint,[{atom,{1809,7},is_subtype},[{var,{1809,7},'Msg'},{type,{1809,14},term,[]}]]},{type,{1810,7},constraint,[{atom,{1810,7},is_subtype},[{var,{1810,7},'TimerRef'},{type,{1810,19},reference,[]}]]}]]}]}}]}},{{function,send_after,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1816}],[<<115,101,110,100,95,97,102,116,101,114,47,52>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,87,104,101,110,32,116,104,101,32,116,105,109,101,114,32,101,120,112,105,114,101,115,44,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,101,115,116>>]},<<46,32,65,112,97,114,116,32,102,114,111,109,32,116,104,101,32,102,111,114,109,97,116,32,111,102,32,116,104,101,32,116,105,109,101,45,111,117,116,32,109,101,115,115,97,103,101,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,119,111,114,107,115,32,101,120,97,99,116,108,121,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,47,52>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,52,56>>,signature => [{attribute,{1816,2},spec,{{erlang,send_after,4},[{type,{1816,24},bounded_fun,[{type,{1816,24},'fun',[{type,{1816,24},product,[{var,{1816,25},'Time'},{var,{1816,31},'Dest'},{var,{1816,37},'Msg'},{var,{1816,42},'Options'}]},{var,{1816,54},'TimerRef'}]},[{type,{1817,7},constraint,[{atom,{1817,7},is_subtype},[{var,{1817,7},'Time'},{type,{1817,15},integer,[]}]]},{type,{1818,7},constraint,[{atom,{1818,7},is_subtype},[{var,{1818,7},'Dest'},{type,{1818,15},union,[{type,{1818,15},pid,[]},{type,{1818,23},atom,[]}]}]]},{type,{1819,7},constraint,[{atom,{1819,7},is_subtype},[{var,{1819,7},'Msg'},{type,{1819,14},term,[]}]]},{type,{1820,7},constraint,[{atom,{1820,7},is_subtype},[{var,{1820,7},'Options'},{type,{1820,18},list,[{var,{1820,19},'Option'}]}]]},{type,{1821,7},constraint,[{atom,{1821,7},is_subtype},[{var,{1821,7},'Abs'},{type,{1821,14},boolean,[]}]]},{type,{1822,7},constraint,[{atom,{1822,7},is_subtype},[{var,{1822,7},'Option'},{type,{1822,17},tuple,[{atom,{1822,18},abs},{var,{1822,23},'Abs'}]}]]},{type,{1823,7},constraint,[{atom,{1823,7},is_subtype},[{var,{1823,7},'TimerRef'},{type,{1823,19},reference,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,send_nosuspend,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3466}],[<<115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,40,68,101,115,116,44,32,77,115,103,44,32,91,110,111,115,117,115,112,101,110,100,93,41>>]}]},<<44,32,98,117,116,32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,109,101,115,115,97,103,101,32,119,97,115,32,115,101,110,116,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,109,101,115,115,97,103,101,32,119,97,115,32,110,111,116,32,115,101,110,116,32,98,101,99,97,117,115,101,32,116,104,101,32,115,101,110,100,101,114,32,119,111,117,108,100,32,104,97,118,101,32,104,97,100,32,116,111,32,98,101,32,115,117,115,112,101,110,100,101,100,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,115,101,110,100,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,97,110,32,117,110,114,101,108,105,97,98,108,101,32,114,101,109,111,116,101,32,110,111,100,101,32,119,105,116,104,111,117,116,32,101,118,101,114,32,98,108,111,99,107,105,110,103,32,116,104,101,32,115,101,110,100,105,110,103,32,40,69,114,108,97,110,103,41,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,32,40,117,115,117,97,108,108,121,32,110,111,116,32,97,32,114,101,97,108,32,69,114,108,97,110,103,32,110,111,100,101,44,32,98,117,116,32,97,32,110,111,100,101,32,119,114,105,116,116,101,110,32,105,110,32,67,32,111,114,32,74,97,118,97,41,32,105,115,32,111,118,101,114,108,111,97,100,101,100,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32>>,{em,[],[<<100,111,101,115,32,110,111,116,32,115,101,110,100,32,116,104,101,32,109,101,115,115,97,103,101>>]},<<32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<84,104,101,32,115,97,109,101,32,111,99,99,117,114,115,32,105,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,108,111,99,97,108,32,112,111,114,116,32,116,104,97,116,32,105,115,32,98,117,115,121,46,32,70,111,114,32,97,108,108,32,111,116,104,101,114,32,100,101,115,116,105,110,97,116,105,111,110,115,32,40,97,108,108,111,119,101,100,32,102,111,114,32,116,104,101,32,111,114,100,105,110,97,114,121,32,115,101,110,100,32,111,112,101,114,97,116,111,114,32>>,{code,[],[<<39,33,39>>]},<<41,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,115,101,110,100,115,32,116,104,101,32,109,101,115,115,97,103,101,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,114,97,114,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,32,119,104,101,114,101,32,97,32,112,114,111,99,101,115,115,32,99,111,109,109,117,110,105,99,97,116,101,115,32,119,105,116,104,32,69,114,108,97,110,103,32,110,111,100,101,115,32,116,104,97,116,32,99,97,110,32,100,105,115,97,112,112,101,97,114,32,119,105,116,104,111,117,116,32,97,110,121,32,116,114,97,99,101,44,32,99,97,117,115,105,110,103,32,116,104,101,32,84,67,80,32,98,117,102,102,101,114,115,32,97,110,100,32,116,104,101,32,100,114,105,118,101,114,115,32,113,117,101,117,101,32,116,111,32,98,101,32,111,118,101,114,45,102,117,108,108,32,98,101,102,111,114,101,32,116,104,101,32,110,111,100,101,32,105,115,32,115,104,117,116,32,100,111,119,110,32,40,98,101,99,97,117,115,101,32,111,102,32,116,105,99,107,32,116,105,109,101,45,111,117,116,115,41,32,98,121,32>>,{code,[],[<<110,101,116,95,107,101,114,110,101,108>>]},<<46,32,84,104,101,32,110,111,114,109,97,108,32,114,101,97,99,116,105,111,110,32,116,111,32,116,97,107,101,32,119,104,101,110,32,116,104,105,115,32,111,99,99,117,114,115,32,105,115,32,115,111,109,101,32,107,105,110,100,32,111,102,32,112,114,101,109,97,116,117,114,101,32,115,104,117,116,100,111,119,110,32,111,102,32,116,104,101,32,111,116,104,101,114,32,110,111,100,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,105,103,110,111,114,105,110,103,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,102,114,111,109,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,119,111,117,108,100,32,114,101,115,117,108,116,32,105,110,32,97,110,32>>,{em,[],[<<117,110,114,101,108,105,97,98,108,101>>]},<<32,109,101,115,115,97,103,101,32,112,97,115,115,105,110,103,44,32,119,104,105,99,104,32,105,115,32,99,111,110,116,114,97,100,105,99,116,111,114,121,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,105,110,103,32,109,111,100,101,108,46,32,84,104,101,32,109,101,115,115,97,103,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,115,101,110,116,32,105,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{p,[],[<<73,110,32,109,97,110,121,32,115,121,115,116,101,109,115,44,32,116,114,97,110,115,105,101,110,116,32,115,116,97,116,101,115,32,111,102,32,111,118,101,114,108,111,97,100,101,100,32,113,117,101,117,101,115,32,97,114,101,32,110,111,114,109,97,108,46,32,65,108,116,104,111,117,103,104,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,100,111,101,115,32,110,111,116,32,109,101,97,110,32,116,104,97,116,32,116,104,101,32,111,116,104,101,114,32,110,111,100,101,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,110,111,110,45,114,101,115,112,111,110,115,105,118,101,44,32,105,116,32,99,111,117,108,100,32,98,101,32,97,32,116,101,109,112,111,114,97,114,121,32,111,118,101,114,108,111,97,100,46,32,65,108,115,111,44,32,97,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32>>,{code,[],[<<116,114,117,101>>]},<<32,100,111,101,115,32,111,110,108,121,32,109,101,97,110,32,116,104,97,116,32,116,104,101,32,109,101,115,115,97,103,101,32,99,97,110,32,98,101,32,115,101,110,116,32,111,110,32,116,104,101,32,40,84,67,80,41,32,99,104,97,110,110,101,108,32,119,105,116,104,111,117,116,32,98,108,111,99,107,105,110,103,59,32,116,104,101,32,109,101,115,115,97,103,101,32,105,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,97,114,114,105,118,101,32,97,116,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,46,32,70,111,114,32,97,32,100,105,115,99,111,110,110,101,99,116,101,100,32,110,111,110,45,114,101,115,112,111,110,115,105,118,101,32,110,111,100,101,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,40,109,105,109,105,99,115,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,111,112,101,114,97,116,111,114,32>>,{code,[],[<<33>>]},<<41,46,32,84,104,101,32,101,120,112,101,99,116,101,100,32,98,101,104,97,118,105,111,114,32,97,110,100,32,116,104,101,32,97,99,116,105,111,110,115,32,116,111,32,116,97,107,101,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,97,114,101,32,97,112,112,108,105,99,97,116,105,111,110,45,32,97,110,100,32,104,97,114,100,119,97,114,101,45,115,112,101,99,105,102,105,99,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<85,115,101,32,119,105,116,104,32,101,120,116,114,101,109,101,32,99,97,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,56,54,49>>,signature => [{attribute,{3466,2},spec,{{erlang,send_nosuspend,2},[{type,{3466,28},bounded_fun,[{type,{3466,28},'fun',[{type,{3466,28},product,[{var,{3466,29},'Dest'},{var,{3466,35},'Msg'}]},{type,{3466,43},boolean,[]}]},[{type,{3467,7},constraint,[{atom,{3467,7},is_subtype},[{var,{3467,7},'Dest'},{user_type,{3467,15},dst,[]}]]},{type,{3468,7},constraint,[{atom,{3468,7},is_subtype},[{var,{3468,7},'Msg'},{type,{3468,14},term,[]}]]}]]}]}}]}},{{function,send_nosuspend,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3476}],[<<115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,115,116>>}],[]}]},{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,40,68,101,115,116,44,32,77,115,103,44,32,91,110,111,115,117,115,112,101,110,100,32,124,32,79,112,116,105,111,110,115,93,41>>]}]},<<44,32,98,117,116,32,119,105,116,104,32,97,32,66,111,111,108,101,97,110,32,114,101,116,117,114,110,32,118,97,108,117,101,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,98,101,104,97,118,101,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,110,111,115,117,115,112,101,110,100,47,50>>]}]},<<44,32,98,117,116,32,116,97,107,101,115,32,97,32,116,104,105,114,100,32,112,97,114,97,109,101,116,101,114,44,32,97,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46,32,84,104,101,32,111,110,108,121,32,111,112,116,105,111,110,32,105,115,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<44,32,119,104,105,99,104,32,109,97,107,101,115,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,114,101,109,111,116,101,32,110,111,100,101,32,105,115,32,110,111,116,32,99,117,114,114,101,110,116,108,121,32,114,101,97,99,104,97,98,108,101,32,98,121,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,110,111,114,109,97,108,32,98,101,104,97,118,105,111,114,32,105,115,32,116,111,32,116,114,121,32,116,111,32,99,111,110,110,101,99,116,32,116,111,32,116,104,101,32,110,111,100,101,44,32,119,104,105,99,104,32,99,97,110,32,115,116,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,32,100,117,114,105,110,103,32,97,32,115,104,111,114,116,32,112,101,114,105,111,100,46,32,84,104,101,32,117,115,101,32,111,102,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,98,101,32,115,117,114,101,32,110,111,116,32,116,111,32,103,101,116,32,116,104,101,32,115,108,105,103,104,116,101,115,116,32,100,101,108,97,121,32,119,104,101,110,32,115,101,110,100,105,110,103,32,116,111,32,97,32,114,101,109,111,116,101,32,112,114,111,99,101,115,115,46,32,84,104,105,115,32,105,115,32,101,115,112,101,99,105,97,108,108,121,32,117,115,101,102,117,108,32,119,104,101,110,32,99,111,109,109,117,110,105,99,97,116,105,110,103,32,119,105,116,104,32,110,111,100,101,115,32,116,104,97,116,32,101,120,112,101,99,116,32,116,111,32,97,108,119,97,121,115,32,98,101,32,116,104,101,32,99,111,110,110,101,99,116,105,110,103,32,112,97,114,116,32,40,116,104,97,116,32,105,115,44,32,110,111,100,101,115,32,119,114,105,116,116,101,110,32,105,110,32,67,32,111,114,32,74,97,118,97,41,46>>]},{p,[],[<<87,104,101,110,101,118,101,114,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,40,101,105,116,104,101,114,32,119,104,101,110,32,97,32,115,117,115,112,101,110,100,32,119,111,117,108,100,32,111,99,99,117,114,32,111,114,32,119,104,101,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116>>]},<<32,119,97,115,32,115,112,101,99,105,102,105,101,100,32,97,110,100,32,116,104,101,32,110,111,100,101,32,119,97,115,32,110,111,116,32,97,108,114,101,97,100,121,32,99,111,110,110,101,99,116,101,100,41,44,32,116,104,101,32,109,101,115,115,97,103,101,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32>>,{em,[],[<<110,111,116>>]},<<32,116,111,32,104,97,118,101,32,98,101,101,110,32,115,101,110,116,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<85,115,101,32,119,105,116,104,32,101,120,116,114,101,109,101,32,99,97,114,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,49,49>>,signature => [{attribute,{3476,2},spec,{{erlang,send_nosuspend,3},[{type,{3476,28},bounded_fun,[{type,{3476,28},'fun',[{type,{3476,28},product,[{var,{3476,29},'Dest'},{var,{3476,35},'Msg'},{var,{3476,40},'Options'}]},{type,{3476,52},boolean,[]}]},[{type,{3477,7},constraint,[{atom,{3477,7},is_subtype},[{var,{3477,7},'Dest'},{user_type,{3477,15},dst,[]}]]},{type,{3478,7},constraint,[{atom,{3478,7},is_subtype},[{var,{3478,7},'Msg'},{type,{3478,14},term,[]}]]},{type,{3479,7},constraint,[{atom,{3479,7},is_subtype},[{var,{3479,7},'Options'},{type,{3479,18},list,[{atom,{3479,19},noconnect}]}]]}]]}]}}]}},{{function,set_cookie,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3785}],[<<115,101,116,95,99,111,111,107,105,101,47,49>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,109,97,103,105,99,32,99,111,111,107,105,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,116,111,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<67,111,111,107,105,101>>]},<<44,32,119,104,105,99,104,32,105,115,32,97,108,115,111,32,116,104,101,32,99,111,111,107,105,101,32,102,111,114,32,97,108,108,32,110,111,100,101,115,32,116,104,97,116,32,104,97,118,101,32,110,111,32,101,120,112,108,105,99,105,116,32,99,111,111,107,105,101,32,115,101,116,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,116,95,99,111,111,107,105,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,101,116,95,99,111,111,107,105,101,47,50>>]}]},<<32>>,{code,[],[<<67,111,111,107,105,101>>]},<<32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,105,115,116,114,105,98,117,116,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<68,105,115,116,114,105,98,117,116,101,100,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108,32,105,110,32,83,121,115,116,101,109,32,68,111,99,117,109,101,110,116,97,116,105,111,110,41,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<102,117,110,99,116,105,111,110,95,99,108,97,117,115,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,52,52>>,signature => [{attribute,{3785,2},spec,{{erlang,set_cookie,1},[{type,{3785,24},bounded_fun,[{type,{3785,24},'fun',[{type,{3785,24},product,[{var,{3785,25},'Cookie'}]},{atom,{3785,36},true}]},[{type,{3786,7},constraint,[{atom,{3786,7},is_subtype},[{var,{3786,7},'Cookie'},{type,{3786,17},atom,[]}]]}]]}]}}],since => <<79,84,80,32,64,79,84,80,45,49,55,53,51,56,64>>}},{{function,set_cookie,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3792}],[<<115,101,116,95,99,111,111,107,105,101,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,109,97,103,105,99,32,99,111,111,107,105,101,32,102,111,114,32>>,{code,[],[<<78,111,100,101>>]},<<32,116,111,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<67,111,111,107,105,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,115,101,116,115,32,116,104,101,32,99,111,111,107,105,101,32,111,102,32,97,108,108,32,111,116,104,101,114,32,110,111,100,101,115,32,40,116,104,97,116,32,104,97,118,101,32,110,111,32,101,120,112,108,105,99,105,116,32,99,111,111,107,105,101,32,115,101,116,32,119,105,116,104,32,116,104,105,115,32,102,117,110,99,116,105,111,110,41,32,116,111,32>>,{code,[],[<<67,111,111,107,105,101>>]},<<32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,105,115,116,114,105,98,117,116,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<68,105,115,116,114,105,98,117,116,101,100,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108,32,105,110,32,83,121,115,116,101,109,32,68,111,99,117,109,101,110,116,97,116,105,111,110,41,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<102,117,110,99,116,105,111,110,95,99,108,97,117,115,101>>]},<<32,105,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,54,49>>,signature => [{attribute,{3792,2},spec,{{erlang,set_cookie,2},[{type,{3792,24},bounded_fun,[{type,{3792,24},'fun',[{type,{3792,24},product,[{var,{3792,25},'Node'},{var,{3792,31},'Cookie'}]},{atom,{3792,42},true}]},[{type,{3793,7},constraint,[{atom,{3793,7},is_subtype},[{var,{3793,7},'Node'},{type,{3793,15},node,[]}]]},{type,{3794,7},constraint,[{atom,{3794,7},is_subtype},[{var,{3794,7},'Cookie'},{type,{3794,17},atom,[]}]]}]]}]}}]}},{{function,setelement,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2526}],[<<115,101,116,101,108,101,109,101,110,116,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,116,104,97,116,32,105,115,32,97,32,99,111,112,121,32,111,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<84,117,112,108,101,49>>]},<<32,119,105,116,104,32,116,104,101,32,101,108,101,109,101,110,116,32,115,112,101,99,105,102,105,101,100,32,98,121,32,105,110,116,101,103,101,114,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<73,110,100,101,120>>]},<<32,40,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,116,104,101,32,101,108,101,109,101,110,116,32,119,105,116,104,32,105,110,100,101,120,32,49,41,32,114,101,112,108,97,99,101,100,32,98,121,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<86,97,108,117,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,101,116,101,108,101,109,101,110,116,40,50,44,32,123,49,48,44,32,103,114,101,101,110,44,32,98,111,116,116,108,101,115,125,44,32,114,101,100,41,46,10,123,49,48,44,114,101,100,44,98,111,116,116,108,101,115,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,55,56>>,signature => [{attribute,{2526,2},spec,{{setelement,3},[{type,{2526,17},bounded_fun,[{type,{2526,17},'fun',[{type,{2526,17},product,[{var,{2526,18},'Index'},{var,{2526,25},'Tuple1'},{var,{2526,33},'Value'}]},{var,{2526,43},'Tuple2'}]},[{type,{2527,7},constraint,[{atom,{2527,7},is_subtype},[{var,{2527,7},'Index'},{type,{2527,16},pos_integer,[]}]]},{type,{2528,7},constraint,[{atom,{2528,7},is_subtype},[{var,{2528,7},'Tuple1'},{type,{2528,17},tuple,any}]]},{type,{2529,7},constraint,[{atom,{2529,7},is_subtype},[{var,{2529,7},'Tuple2'},{type,{2529,17},tuple,any}]]},{type,{2530,7},constraint,[{atom,{2530,7},is_subtype},[{var,{2530,7},'Value'},{type,{2530,16},term,[]}]]}]]}]}}]}},{{function,size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1877}],[<<115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,105,110,32,97,32,116,117,112,108,101,32,111,114,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,110,32,97,32,98,105,110,97,114,121,32,111,114,32,98,105,116,115,116,114,105,110,103,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,105,122,101,40,123,109,111,114,110,105,44,32,109,117,108,108,101,44,32,98,119,97,110,103,101,125,41,46,10,51,10,62,32,115,105,122,101,40,60,60,49,49,44,32,50,50,44,32,51,51,62,62,41,46,10,51>>]}]},{p,[],[<<70,111,114,32,98,105,116,115,116,114,105,110,103,115,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,119,104,111,108,101,32,98,121,116,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,105,116,115,32,105,110,32,116,104,101,32,98,105,116,115,116,114,105,110,103,32,105,115,32,110,111,116,32,100,105,118,105,115,105,98,108,101,32,98,121,32,56,44,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,105,115,32,114,111,117,110,100,101,100,32>>,{em,[],[<<100,111,119,110>>]},<<46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,117,112,108,101,95,115,105,122,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,117,112,108,101,95,115,105,122,101,47,49>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,121,116,101,95,115,105,122,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,121,116,101,95,115,105,122,101,47,49>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,116,95,115,105,122,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,116,95,115,105,122,101,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,54,57,57,53>>,signature => [{attribute,{1877,2},spec,{{size,1},[{type,{1877,11},bounded_fun,[{type,{1877,11},'fun',[{type,{1877,11},product,[{var,{1877,12},'Item'}]},{type,{1877,21},non_neg_integer,[]}]},[{type,{1878,7},constraint,[{atom,{1878,7},is_subtype},[{var,{1878,7},'Item'},{type,{1878,15},union,[{type,{1878,15},tuple,any},{type,{1878,25},binary,[]}]}]]}]]}]}}]}},{{function,spawn,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2912}],[<<115,112,97,119,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,48,49,56>>,signature => [{attribute,{2912,2},spec,{{spawn,1},[{type,{2912,12},bounded_fun,[{type,{2912,12},'fun',[{type,{2912,12},product,[{var,{2912,13},'Fun'}]},{type,{2912,21},pid,[]}]},[{type,{2913,7},constraint,[{atom,{2913,7},is_subtype},[{var,{2913,7},'Fun'},{type,{2913,14},function,[]}]]}]]}]}}]}},{{function,spawn,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2921}],[<<115,112,97,119,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,48,50,57>>,signature => [{attribute,{2921,2},spec,{{spawn,2},[{type,{2921,12},bounded_fun,[{type,{2921,12},'fun',[{type,{2921,12},product,[{var,{2921,13},'Node'},{var,{2921,19},'Fun'}]},{type,{2921,27},pid,[]}]},[{type,{2922,7},constraint,[{atom,{2922,7},is_subtype},[{var,{2922,7},'Node'},{type,{2922,15},node,[]}]]},{type,{2923,7},constraint,[{atom,{2923,7},is_subtype},[{var,{2923,7},'Fun'},{type,{2923,14},function,[]}]]}]]}]}}]}},{{function,spawn,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1883}],[<<115,112,97,119,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46>>]},{p,[],[{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114,58,117,110,100,101,102,105,110,101,100,95,102,117,110,99,116,105,111,110,40,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,103,115,41>>]},<<32,105,115,32,101,118,97,108,117,97,116,101,100,32,98,121,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,105,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110,47,65,114,105,116,121>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,40,119,104,101,114,101,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32>>,{code,[],[<<65,114,103,115>>]},<<41,46,32,84,104,101,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,99,97,110,32,98,101,32,114,101,100,101,102,105,110,101,100,32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<41,46,32,73,102,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,111,114,32,116,104,101,32,117,115,101,114,32,104,97,115,32,114,101,100,101,102,105,110,101,100,32,116,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<101,114,114,111,114,95,104,97,110,100,108,101,114>>]},<<32,97,110,100,32,105,116,115,32,114,101,112,108,97,99,101,109,101,110,116,32,105,115,32,117,110,100,101,102,105,110,101,100,44,32,97,32,102,97,105,108,117,114,101,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<117,110,100,101,102>>]},<<32,111,99,99,117,114,115,46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,112,97,119,110,40,115,112,101,101,100,44,32,114,101,103,117,108,97,116,111,114,44,32,91,104,105,103,104,95,115,112,101,101,100,44,32,116,104,105,110,95,99,117,116,93,41,46,10,60,48,46,49,51,46,49,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,48,52,51>>,signature => [{attribute,{1883,2},spec,{{spawn,3},[{type,{1883,12},bounded_fun,[{type,{1883,12},'fun',[{type,{1883,12},product,[{var,{1883,13},'Module'},{var,{1883,21},'Function'},{var,{1883,31},'Args'}]},{type,{1883,40},pid,[]}]},[{type,{1884,7},constraint,[{atom,{1884,7},is_subtype},[{var,{1884,7},'Module'},{type,{1884,17},module,[]}]]},{type,{1885,7},constraint,[{atom,{1885,7},is_subtype},[{var,{1885,7},'Function'},{type,{1885,19},atom,[]}]]},{type,{1886,7},constraint,[{atom,{1886,7},is_subtype},[{var,{1886,7},'Args'},{type,{1886,15},list,[{type,{1886,16},term,[]}]}]]}]]}]}}]}},{{function,spawn,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3050}],[<<115,112,97,119,110,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,48,54,56>>,signature => [{attribute,{3050,2},spec,{{spawn,4},[{type,{3050,12},bounded_fun,[{type,{3050,12},'fun',[{type,{3050,12},product,[{var,{3050,13},'Node'},{var,{3050,19},'Module'},{var,{3050,27},'Function'},{var,{3050,37},'Args'}]},{type,{3050,46},pid,[]}]},[{type,{3051,7},constraint,[{atom,{3051,7},is_subtype},[{var,{3051,7},'Node'},{type,{3051,15},node,[]}]]},{type,{3052,7},constraint,[{atom,{3052,7},is_subtype},[{var,{3052,7},'Module'},{type,{3052,17},module,[]}]]},{type,{3053,7},constraint,[{atom,{3053,7},is_subtype},[{var,{3053,7},'Function'},{type,{3053,19},atom,[]}]]},{type,{3054,7},constraint,[{atom,{3054,7},is_subtype},[{var,{3054,7},'Args'},{type,{3054,15},list,[{type,{3054,16},term,[]}]}]]}]]}]}}]}},{{function,spawn_link,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2933}],[<<115,112,97,119,110,95,108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,48,56,51>>,signature => [{attribute,{2933,2},spec,{{spawn_link,1},[{type,{2933,17},bounded_fun,[{type,{2933,17},'fun',[{type,{2933,17},product,[{var,{2933,18},'Fun'}]},{type,{2933,26},pid,[]}]},[{type,{2934,7},constraint,[{atom,{2934,7},is_subtype},[{var,{2934,7},'Fun'},{type,{2934,14},function,[]}]]}]]}]}}]}},{{function,spawn_link,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2942}],[<<115,112,97,119,110,95,108,105,110,107,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,32,97,110,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,48,57,55>>,signature => [{attribute,{2942,2},spec,{{spawn_link,2},[{type,{2942,17},bounded_fun,[{type,{2942,17},'fun',[{type,{2942,17},product,[{var,{2942,18},'Node'},{var,{2942,24},'Fun'}]},{type,{2942,32},pid,[]}]},[{type,{2943,7},constraint,[{atom,{2943,7},is_subtype},[{var,{2943,7},'Node'},{type,{2943,15},node,[]}]]},{type,{2944,7},constraint,[{atom,{2944,7},is_subtype},[{var,{2944,7},'Fun'},{type,{2944,14},function,[]}]]}]]}]}}]}},{{function,spawn_link,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1891}],[<<115,112,97,119,110,95,108,105,110,107,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,49,52>>,signature => [{attribute,{1891,2},spec,{{spawn_link,3},[{type,{1891,17},bounded_fun,[{type,{1891,17},'fun',[{type,{1891,17},product,[{var,{1891,18},'Module'},{var,{1891,26},'Function'},{var,{1891,36},'Args'}]},{type,{1891,45},pid,[]}]},[{type,{1892,7},constraint,[{atom,{1892,7},is_subtype},[{var,{1892,7},'Module'},{type,{1892,17},module,[]}]]},{type,{1893,7},constraint,[{atom,{1893,7},is_subtype},[{var,{1893,7},'Function'},{type,{1893,19},atom,[]}]]},{type,{1894,7},constraint,[{atom,{1894,7},is_subtype},[{var,{1894,7},'Args'},{type,{1894,15},list,[{type,{1894,16},term,[]}]}]]}]]}]}}]}},{{function,spawn_link,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3072}],[<<115,112,97,119,110,95,108,105,110,107,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,108,105,110,107,32,105,115,32,99,114,101,97,116,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,97,116,111,109,105,99,97,108,108,121,46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,32,97,110,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,50,56>>,signature => [{attribute,{3072,2},spec,{{spawn_link,4},[{type,{3072,17},bounded_fun,[{type,{3072,17},'fun',[{type,{3072,17},product,[{var,{3072,18},'Node'},{var,{3072,24},'Module'},{var,{3072,32},'Function'},{var,{3072,42},'Args'}]},{type,{3072,51},pid,[]}]},[{type,{3073,7},constraint,[{atom,{3073,7},is_subtype},[{var,{3073,7},'Node'},{type,{3073,15},node,[]}]]},{type,{3074,7},constraint,[{atom,{3074,7},is_subtype},[{var,{3074,7},'Module'},{type,{3074,17},module,[]}]]},{type,{3075,7},constraint,[{atom,{3075,7},is_subtype},[{var,{3075,7},'Function'},{type,{3075,19},atom,[]}]]},{type,{3076,7},constraint,[{atom,{3076,7},is_subtype},[{var,{3076,7},'Args'},{type,{3076,15},list,[{type,{3076,16},term,[]}]}]]}]]}]}}]}},{{function,spawn_monitor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2956}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,44,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<44,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,97,32,109,111,110,105,116,111,114,32,99,114,101,97,116,101,100,32,116,111,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,52,54>>,signature => [{attribute,{2956,2},spec,{{spawn_monitor,1},[{type,{2956,20},bounded_fun,[{type,{2956,20},'fun',[{type,{2956,20},product,[{var,{2956,21},'Fun'}]},{type,{2956,29},tuple,[{type,{2956,30},pid,[]},{type,{2956,37},reference,[]}]}]},[{type,{2957,7},constraint,[{atom,{2957,7},is_subtype},[{var,{2957,7},'Fun'},{type,{2957,14},function,[]}]]}]]}]}}]}},{{function,spawn_monitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2963}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,44,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<44,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,97,32,109,111,110,105,116,111,114,32,99,114,101,97,116,101,100,32,116,111,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,100,105,115,116,114,105,98,117,116,101,100,32>>,{code,[],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,40,41>>]},<<44,32,116,104,101,32,99,97,108,108,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,101,120,99,101,112,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,54,48>>,signature => [{attribute,{2963,2},spec,{{spawn_monitor,2},[{type,{2963,20},bounded_fun,[{type,{2963,20},'fun',[{type,{2963,20},product,[{var,{2963,21},'Node'},{var,{2963,27},'Fun'}]},{type,{2963,35},tuple,[{type,{2963,36},pid,[]},{type,{2963,43},reference,[]}]}]},[{type,{2964,7},constraint,[{atom,{2964,7},is_subtype},[{var,{2964,7},'Node'},{type,{2964,15},node,[]}]]},{type,{2965,7},constraint,[{atom,{2965,7},is_subtype},[{var,{2965,7},'Fun'},{type,{2965,14},function,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_monitor,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2977}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,51>>],#{<<101,110>> => [{p,[],[<<65,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46,32,84,104,101,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,55,55>>,signature => [{attribute,{2977,2},spec,{{spawn_monitor,3},[{type,{2977,20},bounded_fun,[{type,{2977,20},'fun',[{type,{2977,20},product,[{var,{2977,21},'Module'},{var,{2977,29},'Function'},{var,{2977,39},'Args'}]},{type,{2977,48},tuple,[{type,{2977,49},pid,[]},{type,{2977,56},reference,[]}]}]},[{type,{2978,7},constraint,[{atom,{2978,7},is_subtype},[{var,{2978,7},'Module'},{type,{2978,17},module,[]}]]},{type,{2979,7},constraint,[{atom,{2979,7},is_subtype},[{var,{2979,7},'Function'},{type,{2979,19},atom,[]}]]},{type,{2980,7},constraint,[{atom,{2980,7},is_subtype},[{var,{2980,7},'Args'},{type,{2980,15},list,[{type,{2980,16},term,[]}]}]]}]]}]}}]}},{{function,spawn_monitor,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3094}],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,47,52>>],#{<<101,110>> => [{p,[],[<<65,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32,116,104,101,32,110,111,100,101,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,84,104,101,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,97,110,100,32,97,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,100,105,115,116,114,105,98,117,116,101,100,32>>,{code,[],[<<115,112,97,119,110,95,109,111,110,105,116,111,114,40,41>>]},<<44,32,116,104,101,32,99,97,108,108,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,101,120,99,101,112,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,49,57,49>>,signature => [{attribute,{3094,2},spec,{{spawn_monitor,4},[{type,{3094,20},bounded_fun,[{type,{3094,20},'fun',[{type,{3094,20},product,[{var,{3094,21},'Node'},{var,{3094,27},'Module'},{var,{3094,35},'Function'},{var,{3094,45},'Args'}]},{type,{3094,54},tuple,[{type,{3094,55},pid,[]},{type,{3094,62},reference,[]}]}]},[{type,{3095,7},constraint,[{atom,{3095,7},is_subtype},[{var,{3095,7},'Node'},{type,{3095,15},node,[]}]]},{type,{3096,7},constraint,[{atom,{3096,7},is_subtype},[{var,{3096,7},'Module'},{type,{3096,17},module,[]}]]},{type,{3097,7},constraint,[{atom,{3097,7},is_subtype},[{var,{3097,7},'Function'},{type,{3097,19},atom,[]}]]},{type,{3098,7},constraint,[{atom,{3098,7},is_subtype},[{var,{3098,7},'Args'},{type,{3098,15},list,[{type,{3098,16},term,[]}]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_opt,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3007}],[<<115,112,97,119,110,95,111,112,116,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<115,112,97,119,110,95,111,112,116,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,44,32,97,110,100,32,98,111,116,104,32,116,104,101,32,112,105,100,32,97,110,100,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,32,97,114,101,32,114,101,116,117,114,110,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,48,56>>,signature => [{attribute,{3007,2},spec,{{spawn_opt,2},[{type,{3007,16},bounded_fun,[{type,{3007,16},'fun',[{type,{3007,16},product,[{var,{3007,17},'Fun'},{var,{3007,22},'Options'}]},{type,{3007,34},union,[{type,{3007,34},pid,[]},{type,{3007,42},tuple,[{type,{3007,43},pid,[]},{type,{3007,50},reference,[]}]}]}]},[{type,{3008,7},constraint,[{atom,{3008,7},is_subtype},[{var,{3008,7},'Fun'},{type,{3008,14},function,[]}]]},{type,{3009,7},constraint,[{atom,{3009,7},is_subtype},[{var,{3009,7},'Options'},{type,{3009,18},list,[{user_type,{3009,19},spawn_opt_option,[]}]}]]}]]}]}}]}},{{function,spawn_opt,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3022}],[<<115,112,97,119,110,95,111,112,116,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<70,117,110>>]},<<32,116,111,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]},{p,[],[<<86,97,108,105,100,32,111,112,116,105,111,110,115,32,100,101,112,101,110,100,115,32,111,110,32,119,104,97,116,32,111,112,116,105,111,110,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,102,111,114,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,111,102,32,99,117,114,114,101,110,116,32,79,84,80,32,118,101,114,115,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,50,54>>,signature => [{attribute,{3022,2},spec,{{spawn_opt,3},[{type,{3022,16},bounded_fun,[{type,{3022,16},'fun',[{type,{3022,16},product,[{var,{3022,17},'Node'},{var,{3022,23},'Fun'},{var,{3022,28},'Options'}]},{type,{3022,40},union,[{type,{3022,40},pid,[]},{type,{3022,48},tuple,[{type,{3022,49},pid,[]},{type,{3022,56},reference,[]}]}]}]},[{type,{3023,7},constraint,[{atom,{3023,7},is_subtype},[{var,{3023,7},'Node'},{type,{3023,15},node,[]}]]},{type,{3024,7},constraint,[{atom,{3024,7},is_subtype},[{var,{3024,7},'Fun'},{type,{3024,14},function,[]}]]},{type,{3025,7},constraint,[{atom,{3025,7},is_subtype},[{var,{3025,7},'Options'},{type,{3025,18},list,[{type,{3025,19},union,[{atom,{3025,19},monitor},{type,{3026,19},tuple,[{atom,{3026,20},monitor},{type,{3026,29},list,[{user_type,{3026,30},monitor_option,[]}]}]},{atom,{3027,19},link},{var,{3028,19},'OtherOption'}]}]}]]},{type,{3029,7},constraint,[{atom,{3029,7},is_subtype},[{var,{3029,7},'OtherOption'},{type,{3029,22},term,[]}]]}]]}]}}]}},{{function,spawn_opt,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3139}],[<<115,112,97,119,110,95,111,112,116,47,52>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{li,[{name,<<112,114,105,111,114,105,116,121,95,108,101,118,101,108>>}],[]},{li,[{name,<<115,112,97,119,110,95,111,112,116,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<87,111,114,107,115,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,47,51>>]}]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,97,110,32,101,120,116,114,97,32,111,112,116,105,111,110,32,108,105,115,116,32,105,115,32,115,112,101,99,105,102,105,101,100,32,119,104,101,110,32,99,114,101,97,116,105,110,103,32,116,104,101,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,32,105,115,32,109,111,110,105,116,111,114,101,100,44,32,97,110,100,32,98,111,116,104,32,116,104,101,32,112,105,100,32,97,110,100,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,116,104,101,32,109,111,110,105,116,111,114,32,97,114,101,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,105,110,107>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,97,32,108,105,110,107,32,116,111,32,116,104,101,32,112,97,114,101,110,116,32,112,114,111,99,101,115,115,32,40,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,108,105,110,107,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,108,105,110,107,47,51>>]}]},<<32,100,111,101,115,41,46>>]}]},{dt,[],[{code,[],[<<109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<77,111,110,105,116,111,114,115,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,40,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,41>>]}]},<<32,100,111,101,115,41,46,32,65,32>>,{code,[],[<<123,80,105,100,44,32,77,111,110,105,116,111,114,82,101,102,125>>]},<<32,116,117,112,108,101,32,119,105,108,108,32,98,101,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,32,111,102,32,106,117,115,116,32,97,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,44,32,77,111,110,105,116,111,114,79,112,116,115,125>>]}]},{dd,[],[{p,[],[<<77,111,110,105,116,111,114,115,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,119,105,116,104,32,111,112,116,105,111,110,115,32,40,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,44,32,77,111,110,105,116,111,114,79,112,116,115,41>>]}]},<<32,100,111,101,115,41,46,32,65,32>>,{code,[],[<<123,80,105,100,44,32,77,111,110,105,116,111,114,82,101,102,125>>]},<<32,116,117,112,108,101,32,119,105,108,108,32,98,101,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,32,111,102,32,106,117,115,116,32,97,32>>,{code,[],[<<80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,112,114,105,111,114,105,116,121,32,111,102,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,46,32,69,113,117,105,118,97,108,101,110,116,32,116,111,32,101,120,101,99,117,116,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]},<<32,105,110,32,116,104,101,32,115,116,97,114,116,32,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,32,110,101,119,32,112,114,111,99,101,115,115,44,32,101,120,99,101,112,116,32,116,104,97,116,32,116,104,101,32,112,114,105,111,114,105,116,121,32,105,115,32,115,101,116,32,98,101,102,111,114,101,32,116,104,101,32,112,114,111,99,101,115,115,32,105,115,32,115,101,108,101,99,116,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,32,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,112,114,105,111,114,105,116,105,101,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114,44,32,78,117,109,98,101,114,125>>]}]},{dd,[],[{p,[],[<<85,115,101,102,117,108,32,111,110,108,121,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,116,117,110,105,110,103,46,32,68,111,32,110,111,116,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,112,114,111,98,108,101,109,32,119,105,116,104,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,115,32,111,114,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,44,32,97,110,100,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,111,112,116,105,111,110,32,105,109,112,114,111,118,101,115,32,109,97,116,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,117,115,101,115,32,97,32,103,101,110,101,114,97,116,105,111,110,97,108,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,99,104,101,109,101,44,32,117,115,105,110,103,32,97,110,32,34,111,108,100,32,104,101,97,112,34,32,102,111,114,32,100,97,116,97,32,116,104,97,116,32,104,97,115,32,115,117,114,118,105,118,101,100,32,97,116,32,108,101,97,115,116,32,111,110,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,104,101,110,32,116,104,101,114,101,32,105,115,32,110,111,32,109,111,114,101,32,114,111,111,109,32,111,110,32,116,104,101,32,111,108,100,32,104,101,97,112,44,32,97,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,100,111,110,101,46>>]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,103,101,110,101,114,97,116,105,111,110,97,108,32,99,111,108,108,101,99,116,105,111,110,115,32,98,101,102,111,114,101,32,102,111,114,99,105,110,103,32,97,32,102,117,108,108,115,119,101,101,112,44,32,101,118,101,110,32,105,102,32,116,104,101,114,101,32,105,115,32,114,111,111,109,32,111,110,32,116,104,101,32,111,108,100,32,104,101,97,112,46,32,83,101,116,116,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,116,111,32,122,101,114,111,32,100,105,115,97,98,108,101,115,32,116,104,101,32,103,101,110,101,114,97,108,32,99,111,108,108,101,99,116,105,111,110,32,97,108,103,111,114,105,116,104,109,44,32,116,104,97,116,32,105,115,44,32,97,108,108,32,108,105,118,101,32,100,97,116,97,32,105,115,32,99,111,112,105,101,100,32,97,116,32,101,118,101,114,121,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[<<65,32,102,101,119,32,99,97,115,101,115,32,119,104,101,110,32,105,116,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,116,111,32,99,104,97,110,103,101,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,98,105,110,97,114,105,101,115,32,116,104,97,116,32,97,114,101,32,110,111,32,108,111,110,103,101,114,32,117,115,101,100,32,97,114,101,32,116,111,32,98,101,32,116,104,114,111,119,110,32,97,119,97,121,32,97,115,32,115,111,111,110,32,97,115,32,112,111,115,115,105,98,108,101,46,32,40,83,101,116,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,122,101,114,111,46,41>>]}]},{li,[],[{p,[],[<<65,32,112,114,111,99,101,115,115,32,116,104,97,116,32,109,111,115,116,108,121,32,104,97,118,101,32,115,104,111,114,116,45,108,105,118,101,100,32,100,97,116,97,32,105,115,32,102,117,108,108,115,119,101,101,112,101,100,32,115,101,108,100,111,109,32,111,114,32,110,101,118,101,114,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,111,108,100,32,104,101,97,112,32,99,111,110,116,97,105,110,115,32,109,111,115,116,108,121,32,103,97,114,98,97,103,101,46,32,84,111,32,101,110,115,117,114,101,32,97,32,102,117,108,108,115,119,101,101,112,32,111,99,99,97,115,105,111,110,97,108,108,121,44,32,115,101,116,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,97,32,115,117,105,116,97,98,108,101,32,118,97,108,117,101,44,32,115,117,99,104,32,97,115,32,49,48,32,111,114,32,50,48,46>>]}]},{li,[],[<<73,110,32,101,109,98,101,100,100,101,100,32,115,121,115,116,101,109,115,32,119,105,116,104,32,97,32,108,105,109,105,116,101,100,32,97,109,111,117,110,116,32,111,102,32,82,65,77,32,97,110,100,32,110,111,32,118,105,114,116,117,97,108,32,109,101,109,111,114,121,44,32,121,111,117,32,109,105,103,104,116,32,119,97,110,116,32,116,111,32,112,114,101,115,101,114,118,101,32,109,101,109,111,114,121,32,98,121,32,115,101,116,116,105,110,103,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,116,111,32,122,101,114,111,46,32,40,84,104,101,32,118,97,108,117,101,32,99,97,110,32,98,101,32,115,101,116,32,103,108,111,98,97,108,108,121,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,47,50>>]}]},<<46,41>>]}]}]},{dt,[],[{code,[],[<<123,109,105,110,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<85,115,101,102,117,108,32,111,110,108,121,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,116,117,110,105,110,103,46,32,68,111,32,110,111,116,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,112,114,111,98,108,101,109,32,119,105,116,104,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,115,32,111,114,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,44,32,97,110,100,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,111,112,116,105,111,110,32,105,109,112,114,111,118,101,115,32,109,97,116,116,101,114,115,46>>]},{p,[],[<<71,105,118,101,115,32,97,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,118,97,108,117,101,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,99,97,110,32,115,112,101,101,100,32,117,112,32,115,111,109,101,32,112,114,111,99,101,115,115,101,115,32,98,101,99,97,117,115,101,32,108,101,115,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,100,111,110,101,46,32,72,111,119,101,118,101,114,44,32,115,101,116,116,105,110,103,32,97,32,116,111,111,32,104,105,103,104,32,118,97,108,117,101,32,99,97,110,32,119,97,115,116,101,32,109,101,109,111,114,121,32,97,110,100,32,115,108,111,119,32,100,111,119,110,32,116,104,101,32,115,121,115,116,101,109,32,98,101,99,97,117,115,101,32,111,102,32,119,111,114,115,101,32,100,97,116,97,32,108,111,99,97,108,105,116,121,46,32,84,104,101,114,101,102,111,114,101,44,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,111,110,108,121,32,102,111,114,32,102,105,110,101,45,116,117,110,105,110,103,32,97,110,32,97,112,112,108,105,99,97,116,105,111,110,32,97,110,100,32,116,111,32,109,101,97,115,117,114,101,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,119,105,116,104,32,118,97,114,105,111,117,115,32>>,{code,[],[<<83,105,122,101>>]},<<32,118,97,108,117,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101,44,32,86,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<85,115,101,102,117,108,32,111,110,108,121,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,116,117,110,105,110,103,46,32,68,111,32,110,111,116,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,112,114,111,98,108,101,109,32,119,105,116,104,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,115,32,111,114,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,44,32,97,110,100,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,111,112,116,105,111,110,32,105,109,112,114,111,118,101,115,32,109,97,116,116,101,114,115,46>>]},{p,[],[<<71,105,118,101,115,32,97,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,44,32,105,110,32,119,111,114,100,115,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,118,97,108,117,101,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32,115,121,115,116,101,109,32,100,101,102,97,117,108,116,32,99,97,110,32,115,112,101,101,100,32,117,112,32,115,111,109,101,32,112,114,111,99,101,115,115,101,115,32,98,101,99,97,117,115,101,32,108,101,115,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,100,111,110,101,46,32,72,111,119,101,118,101,114,44,32,115,101,116,116,105,110,103,32,97,32,116,111,111,32,104,105,103,104,32,118,97,108,117,101,32,99,97,110,32,119,97,115,116,101,32,109,101,109,111,114,121,46,32,84,104,101,114,101,102,111,114,101,44,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,111,110,108,121,32,102,111,114,32,102,105,110,101,45,116,117,110,105,110,103,32,97,110,32,97,112,112,108,105,99,97,116,105,111,110,32,97,110,100,32,116,111,32,109,101,97,115,117,114,101,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,119,105,116,104,32,118,97,114,105,111,117,115,32>>,{code,[],[<<86,83,105,122,101>>]},<<32,118,97,108,117,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,46,32,84,104,101,32,100,101,102,97,117,108,116,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,83,105,122,101,41>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,46,32>>,{code,[],[<<77,81,68>>]},<<32,99,97,110,32,98,101,32,101,105,116,104,101,114,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<32,111,114,32>>,{code,[],[<<111,110,95,104,101,97,112>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32,116,104,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,113,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,113,100>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,50,52,57>>,signature => [{attribute,{3139,2},spec,{{spawn_opt,4},[{type,{3139,16},bounded_fun,[{type,{3139,16},'fun',[{type,{3139,16},product,[{var,{3139,17},'Module'},{var,{3139,25},'Function'},{var,{3139,35},'Args'},{var,{3139,41},'Options'}]},{type,{3140,11},union,[{var,{3140,11},'Pid'},{type,{3140,17},tuple,[{var,{3140,18},'Pid'},{var,{3140,23},'MonitorRef'}]}]}]},[{type,{3141,7},constraint,[{atom,{3141,7},is_subtype},[{var,{3141,7},'Module'},{type,{3141,17},module,[]}]]},{type,{3142,7},constraint,[{atom,{3142,7},is_subtype},[{var,{3142,7},'Function'},{type,{3142,19},atom,[]}]]},{type,{3143,7},constraint,[{atom,{3143,7},is_subtype},[{var,{3143,7},'Args'},{type,{3143,15},list,[{type,{3143,16},term,[]}]}]]},{type,{3144,7},constraint,[{atom,{3144,7},is_subtype},[{var,{3144,7},'Options'},{type,{3144,18},list,[{user_type,{3144,19},spawn_opt_option,[]}]}]]},{type,{3145,7},constraint,[{atom,{3145,7},is_subtype},[{var,{3145,7},'Pid'},{type,{3145,14},pid,[]}]]},{type,{3146,7},constraint,[{atom,{3146,7},is_subtype},[{var,{3146,7},'MonitorRef'},{type,{3146,21},reference,[]}]]}]]}]}}]}},{{function,spawn_opt,5},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3151}],[<<115,112,97,119,110,95,111,112,116,47,53>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<32,111,110,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,73,102,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,97,32,117,115,101,108,101,115,115,32,112,105,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,116,104,101,114,119,105,115,101,32,119,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]},{p,[],[<<86,97,108,105,100,32,111,112,116,105,111,110,115,32,100,101,112,101,110,100,115,32,111,110,32,119,104,97,116,32,111,112,116,105,111,110,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,102,111,114,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,111,102,32,99,117,114,114,101,110,116,32,79,84,80,32,118,101,114,115,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,51,57,55>>,signature => [{attribute,{3151,2},spec,{{spawn_opt,5},[{type,{3151,16},bounded_fun,[{type,{3151,16},'fun',[{type,{3151,16},product,[{var,{3151,17},'Node'},{var,{3151,23},'Module'},{var,{3151,31},'Function'},{var,{3151,41},'Args'},{var,{3151,47},'Options'}]},{type,{3152,24},union,[{type,{3152,24},pid,[]},{type,{3152,32},tuple,[{type,{3152,33},pid,[]},{type,{3152,40},reference,[]}]}]}]},[{type,{3153,7},constraint,[{atom,{3153,7},is_subtype},[{var,{3153,7},'Node'},{type,{3153,15},node,[]}]]},{type,{3154,7},constraint,[{atom,{3154,7},is_subtype},[{var,{3154,7},'Module'},{type,{3154,17},module,[]}]]},{type,{3155,7},constraint,[{atom,{3155,7},is_subtype},[{var,{3155,7},'Function'},{type,{3155,19},atom,[]}]]},{type,{3156,7},constraint,[{atom,{3156,7},is_subtype},[{var,{3156,7},'Args'},{type,{3156,15},list,[{type,{3156,16},term,[]}]}]]},{type,{3157,7},constraint,[{atom,{3157,7},is_subtype},[{var,{3157,7},'Options'},{type,{3157,18},list,[{type,{3157,19},union,[{atom,{3157,19},monitor},{type,{3158,19},tuple,[{atom,{3158,20},monitor},{type,{3158,29},list,[{user_type,{3158,30},monitor_option,[]}]}]},{atom,{3159,19},link},{var,{3160,19},'OtherOption'}]}]}]]},{type,{3161,7},constraint,[{atom,{3161,7},is_subtype},[{var,{3161,7},'OtherOption'},{type,{3161,22},term,[]}]]}]]}]}}]}},{{function,spawn_request,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3254}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,70,117,110,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,50,49>>,signature => [{attribute,{3254,2},spec,{{spawn_request,1},[{type,{3254,20},bounded_fun,[{type,{3254,20},'fun',[{type,{3254,20},product,[{var,{3254,21},'Fun'}]},{var,{3254,29},'ReqId'}]},[{type,{3255,7},constraint,[{atom,{3255,7},is_subtype},[{var,{3255,7},'Fun'},{type,{3255,14},function,[]}]]},{type,{3256,7},constraint,[{atom,{3256,7},is_subtype},[{var,{3256,7},'ReqId'},{type,{3256,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3272}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,70,117,110,44,79,112,116,105,111,110,115,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,51,51>>,signature => [{attribute,{3272,2},spec,{{spawn_request,2},[{type,{3272,20},bounded_fun,[{type,{3272,20},'fun',[{type,{3272,20},product,[{var,{3272,21},'Fun'},{var,{3272,26},'Options'}]},{var,{3272,38},'ReqId'}]},[{type,{3273,7},constraint,[{atom,{3273,7},is_subtype},[{var,{3273,7},'Fun'},{type,{3273,14},function,[]}]]},{type,{3274,7},constraint,[{atom,{3274,7},is_subtype},[{var,{3274,7},'Option'},{type,{3274,17},union,[{type,{3274,17},tuple,[{atom,{3274,18},reply_tag},{var,{3274,29},'ReplyTag'}]},{type,{3275,17},tuple,[{atom,{3275,18},reply},{var,{3275,25},'Reply'}]},{user_type,{3276,17},spawn_opt_option,[]}]}]]},{type,{3277,7},constraint,[{atom,{3277,7},is_subtype},[{var,{3277,7},'ReplyTag'},{type,{3277,19},term,[]}]]},{type,{3278,7},constraint,[{atom,{3278,7},is_subtype},[{var,{3278,7},'Reply'},{type,{3278,16},union,[{atom,{3278,16},yes},{atom,{3278,22},no},{atom,{3278,27},error_only},{atom,{3278,40},success_only}]}]]},{type,{3279,7},constraint,[{atom,{3279,7},is_subtype},[{var,{3279,7},'Options'},{type,{3279,18},list,[{var,{3279,19},'Option'}]}]]},{type,{3280,7},constraint,[{atom,{3280,7},is_subtype},[{var,{3280,7},'ReqId'},{type,{3280,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3272}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,78,111,100,101,44,70,117,110,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,52,53>>,signature => [{attribute,{3272,2},spec,{{spawn_request,2},[{type,{3281,20},bounded_fun,[{type,{3281,20},'fun',[{type,{3281,20},product,[{var,{3281,21},'Node'},{var,{3281,27},'Fun'}]},{var,{3281,35},'ReqId'}]},[{type,{3282,7},constraint,[{atom,{3282,7},is_subtype},[{var,{3282,7},'Node'},{type,{3282,15},node,[]}]]},{type,{3283,7},constraint,[{atom,{3283,7},is_subtype},[{var,{3283,7},'Fun'},{type,{3283,14},function,[]}]]},{type,{3284,7},constraint,[{atom,{3284,7},is_subtype},[{var,{3284,7},'ReqId'},{type,{3284,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3307}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,78,111,100,101,44,101,114,108,97,110,103,44,97,112,112,108,121,44,91,70,117,110,44,91,93,93,44,79,112,116,105,111,110,115,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,117,115,105,110,103,32,116,104,101,32,102,117,110,32>>,{code,[],[<<70,117,110>>]},<<32,111,102,32,97,114,105,116,121,32,122,101,114,111,32,97,115,32,101,110,116,114,121,32,112,111,105,110,116,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<78,111,100,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<70,117,110>>]},<<32,105,115,32,110,111,116,32,97,32,102,117,110,32,111,102,32,97,114,105,116,121,32,122,101,114,111,46>>]}]},{li,[],[{p,[],[{code,[],[<<79,112,116,105,111,110,115>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,116,101,114,109,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,53,55>>,signature => [{attribute,{3307,2},spec,{{spawn_request,3},[{type,{3307,20},bounded_fun,[{type,{3307,20},'fun',[{type,{3307,20},product,[{var,{3307,21},'Node'},{var,{3307,27},'Fun'},{var,{3307,32},'Options'}]},{var,{3307,44},'ReqId'}]},[{type,{3308,7},constraint,[{atom,{3308,7},is_subtype},[{var,{3308,7},'Node'},{type,{3308,15},node,[]}]]},{type,{3309,7},constraint,[{atom,{3309,7},is_subtype},[{var,{3309,7},'Fun'},{type,{3309,14},function,[]}]]},{type,{3310,7},constraint,[{atom,{3310,7},is_subtype},[{var,{3310,7},'Options'},{type,{3310,18},list,[{var,{3310,19},'Option'}]}]]},{type,{3311,7},constraint,[{atom,{3311,7},is_subtype},[{var,{3311,7},'Option'},{type,{3311,17},union,[{atom,{3311,17},monitor},{type,{3312,17},tuple,[{atom,{3312,18},monitor},{type,{3312,27},list,[{user_type,{3312,28},monitor_option,[]}]}]},{atom,{3313,17},link},{type,{3314,17},tuple,[{atom,{3314,18},reply_tag},{var,{3314,29},'ReplyTag'}]},{type,{3315,17},tuple,[{atom,{3315,18},reply},{var,{3315,25},'Reply'}]},{var,{3316,17},'OtherOption'}]}]]},{type,{3317,7},constraint,[{atom,{3317,7},is_subtype},[{var,{3317,7},'ReplyTag'},{type,{3317,19},term,[]}]]},{type,{3318,7},constraint,[{atom,{3318,7},is_subtype},[{var,{3318,7},'Reply'},{type,{3318,16},union,[{atom,{3318,16},yes},{atom,{3318,22},no},{atom,{3318,27},error_only},{atom,{3318,40},success_only}]}]]},{type,{3319,7},constraint,[{atom,{3319,7},is_subtype},[{var,{3319,7},'OtherOption'},{type,{3319,22},term,[]}]]},{type,{3320,7},constraint,[{atom,{3320,7},is_subtype},[{var,{3320,7},'ReqId'},{type,{3320,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3307}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,65,114,103,115,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,55,55>>,signature => [{attribute,{3307,2},spec,{{spawn_request,3},[{type,{3321,20},bounded_fun,[{type,{3321,20},'fun',[{type,{3321,20},product,[{var,{3321,21},'Module'},{var,{3321,29},'Function'},{var,{3321,39},'Args'}]},{var,{3322,28},'ReqId'}]},[{type,{3323,7},constraint,[{atom,{3323,7},is_subtype},[{var,{3323,7},'Module'},{type,{3323,17},module,[]}]]},{type,{3324,7},constraint,[{atom,{3324,7},is_subtype},[{var,{3324,7},'Function'},{type,{3324,19},atom,[]}]]},{type,{3325,7},constraint,[{atom,{3325,7},is_subtype},[{var,{3325,7},'Args'},{type,{3325,15},list,[{type,{3325,16},term,[]}]}]]},{type,{3326,7},constraint,[{atom,{3326,7},is_subtype},[{var,{3326,7},'ReqId'},{type,{3326,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3347}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,52>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,78,111,100,101,44,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,65,114,103,115,44,91,93,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,105,116,104,32,110,111,32,111,112,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,52,56,57>>,signature => [{attribute,{3347,2},spec,{{spawn_request,4},[{type,{3347,20},bounded_fun,[{type,{3347,20},'fun',[{type,{3347,20},product,[{var,{3347,21},'Node'},{var,{3347,27},'Module'},{var,{3347,35},'Function'},{var,{3347,45},'Args'}]},{var,{3348,28},'ReqId'}]},[{type,{3349,7},constraint,[{atom,{3349,7},is_subtype},[{var,{3349,7},'Node'},{type,{3349,15},node,[]}]]},{type,{3350,7},constraint,[{atom,{3350,7},is_subtype},[{var,{3350,7},'Module'},{type,{3350,17},module,[]}]]},{type,{3351,7},constraint,[{atom,{3351,7},is_subtype},[{var,{3351,7},'Function'},{type,{3351,19},atom,[]}]]},{type,{3352,7},constraint,[{atom,{3352,7},is_subtype},[{var,{3352,7},'Args'},{type,{3352,15},list,[{type,{3352,16},term,[]}]}]]},{type,{3353,7},constraint,[{atom,{3353,7},is_subtype},[{var,{3353,7},'ReqId'},{type,{3353,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3347}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,52>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,110,111,100,101,40,41,44,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,65,114,103,115,44,79,112,116,105,111,110,115,41>>]}]},<<46,32,84,104,97,116,32,105,115,44,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,53,48,49>>,signature => [{attribute,{3347,2},spec,{{spawn_request,4},[{type,{3354,20},bounded_fun,[{type,{3354,20},'fun',[{type,{3354,20},product,[{var,{3354,21},'Module'},{var,{3354,29},'Function'},{var,{3354,39},'Args'},{var,{3354,45},'Options'}]},{var,{3355,28},'ReqId'}]},[{type,{3356,7},constraint,[{atom,{3356,7},is_subtype},[{var,{3356,7},'Module'},{type,{3356,17},module,[]}]]},{type,{3357,7},constraint,[{atom,{3357,7},is_subtype},[{var,{3357,7},'Function'},{type,{3357,19},atom,[]}]]},{type,{3358,7},constraint,[{atom,{3358,7},is_subtype},[{var,{3358,7},'Args'},{type,{3358,15},list,[{type,{3358,16},term,[]}]}]]},{type,{3359,7},constraint,[{atom,{3359,7},is_subtype},[{var,{3359,7},'Option'},{type,{3359,17},union,[{type,{3359,17},tuple,[{atom,{3359,18},reply_tag},{var,{3359,29},'ReplyTag'}]},{type,{3360,17},tuple,[{atom,{3360,18},reply},{var,{3360,25},'Reply'}]},{user_type,{3361,17},spawn_opt_option,[]}]}]]},{type,{3362,7},constraint,[{atom,{3362,7},is_subtype},[{var,{3362,7},'ReplyTag'},{type,{3362,19},term,[]}]]},{type,{3363,7},constraint,[{atom,{3363,7},is_subtype},[{var,{3363,7},'Reply'},{type,{3363,16},union,[{atom,{3363,16},yes},{atom,{3363,22},no},{atom,{3363,27},error_only},{atom,{3363,40},success_only}]}]]},{type,{3364,7},constraint,[{atom,{3364,7},is_subtype},[{var,{3364,7},'Options'},{type,{3364,18},list,[{var,{3364,19},'Option'}]}]]},{type,{3365,7},constraint,[{atom,{3365,7},is_subtype},[{var,{3365,7},'ReqId'},{type,{3365,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request,5},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3388}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>],#{<<101,110>> => [{p,[],[<<65,115,121,110,99,104,114,111,110,111,117,115,108,121,32,115,101,110,100,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46,32,82,101,116,117,114,110,115,32,97,32,114,101,113,117,101,115,116,32,105,100,101,110,116,105,102,105,101,114,32>>,{code,[],[<<82,101,113,73,100>>]},<<46>>]},{a,[{id,<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>}],[]},{p,[],[<<73,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,99,114,101,97,116,101,100,32,111,110,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,87,104,101,110,32,97,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,98,121,32,100,101,102,97,117,108,116,32,98,101,32,115,101,110,116,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,82,101,112,108,121,84,97,103,44,32,82,101,113,73,100,44,32,111,107,44,32,80,105,100,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,83,117,99,104,32,97,32,109,101,115,115,97,103,101,32,105,115,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,97,32>>,{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]},<<32,98,101,108,111,119,32,105,110,32,116,104,101,32,116,101,120,116,46,32>>,{code,[],[<<82,101,112,108,121,84,97,103>>]},<<32,105,115,32,98,121,32,100,101,102,97,117,108,116,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,112,97,119,110,95,114,101,112,108,121>>]},<<32,117,110,108,101,115,115,32,109,111,100,105,102,105,101,100,32,98,121,32,116,104,101,32>>,{code,[],[<<123,114,101,112,108,121,95,116,97,103,44,32,82,101,112,108,121,84,97,103,125>>]},<<32,111,112,116,105,111,110,46,32,84,104,101,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,115,116,97,114,116,101,100,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32>>,{code,[],[<<77,111,100,117,108,101,58,70,117,110,99,116,105,111,110>>]},<<32,116,111,32>>,{code,[],[<<65,114,103,115>>]},<<46>>]},{a,[{id,<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>}],[]},{p,[],[<<84,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,32,101,105,116,104,101,114,32,105,102,32,99,114,101,97,116,105,111,110,32,111,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,102,97,105,108,101,100,32,111,114,32,105,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,119,97,115,32,105,110,116,101,114,114,117,112,116,101,100,32,98,121,32,97,32,99,111,110,110,101,99,116,105,111,110,32,102,97,105,108,117,114,101,46,32,87,104,101,110,32,97,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,98,121,32,100,101,102,97,117,108,116,32,98,101,32,115,101,110,116,32,97,32,109,101,115,115,97,103,101,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,82,101,112,108,121,84,97,103,44,32,82,101,113,73,100,44,32,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<32,105,115,32,116,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,46,32,83,117,99,104,32,97,32,109,101,115,115,97,103,101,32,105,115,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,97,110,32>>,{i,[],[<<101,114,114,111,114,32,109,101,115,115,97,103,101>>]},<<32,98,101,108,111,119,32,105,110,32,116,104,101,32,116,101,120,116,46,32,67,117,114,114,101,110,116,108,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,112,97,119,110,32,101,114,114,111,114,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<115,32,97,114,101,32,100,101,102,105,110,101,100,44,32,98,117,116,32,111,116,104,101,114,32,114,101,97,115,111,110,115,32,99,97,110,32,97,112,112,101,97,114,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,111,112,116>>]}]},{dd,[],[{p,[],[<<65,110,32,105,110,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<32,119,97,115,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46,32,78,111,116,101,32,116,104,97,116,32,100,105,102,102,101,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,115,32,109,97,121,32,115,117,112,112,111,114,116,32,100,105,102,102,101,114,101,110,116,32,111,112,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,115,32,105,115,115,117,101,100,32,98,121,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<70,97,105,108,117,114,101,32,116,111,32,115,101,116,32,117,112,32,97,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<32,111,114,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,116,104,97,116,32,110,111,100,101,32,119,97,115,32,108,111,115,116,32,100,117,114,105,110,103,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,73,110,32,116,104,101,32,99,97,115,101,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,119,97,115,32,108,111,115,116,44,32,97,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,104,97,118,101,32,98,101,101,110,32,99,114,101,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<67,111,117,108,100,32,110,111,116,32,99,114,101,97,116,101,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,100,117,101,32,116,111,32,116,104,97,116,32,115,111,109,101,32,115,121,115,116,101,109,32,108,105,109,105,116,32,119,97,115,32,114,101,97,99,104,101,100,46,32,84,121,112,105,99,97,108,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,116,97,98,108,101,32,119,97,115,32,102,117,108,108,46>>]}]}]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<109,111,110,105,116,111,114>>]}]},{dd,[],[{p,[],[<<73,110,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,117,114,101,115,44,32,97,116,111,109,105,99,97,108,108,121,32,115,101,116,115,32,117,112,32,97,32,109,111,110,105,116,111,114,32,116,111,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,97,115,32,105,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,104,97,100,32,99,97,108,108,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,41>>]}]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,101,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<32,105,115,32,97,108,115,111,32,117,115,101,100,32,97,115,32,109,111,110,105,116,111,114,32,114,101,102,101,114,101,110,99,101,32,97,115,32,105,102,32,105,116,32,119,97,115,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,41>>]},<<46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,97,116,101,100,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,84,104,101,32,109,111,110,105,116,111,114,32,99,97,110,32,110,111,116,32,98,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,100,101,109,111,110,105,116,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<100,101,109,111,110,105,116,111,114,101,100>>]},<<32,98,101,102,111,114,101,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,65,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,102,111,114,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,109,111,110,105,116,111,114,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,110,111,116,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,116,104,97,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,73,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,110,111,32>>,{code,[],[<<39,68,79,87,78,39>>]},<<32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,46>>]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,98,101,116,119,101,101,110,32,116,104,101,32,110,111,100,101,115,32,105,110,118,111,108,118,101,100,32,105,110,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,105,115,32,108,111,115,116,32,100,117,114,105,110,103,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<46,32,65,32,110,101,119,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,104,97,118,101,32,98,101,101,110,32,99,114,101,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<123,109,111,110,105,116,111,114,44,32,77,111,110,105,116,111,114,79,112,116,115,125>>]}]},{dd,[],[{p,[],[<<73,110,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,117,114,101,115,44,32,97,116,111,109,105,99,97,108,108,121,32,115,101,116,115,32,117,112,32,97,32,109,111,110,105,116,111,114,32,116,111,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,97,115,32,105,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,104,97,100,32,99,97,108,108,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,40,112,114,111,99,101,115,115,44,32,80,105,100,44,32,77,111,110,105,116,111,114,79,112,116,115,41>>]}]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,83,101,101,32,116,104,101,32>>,{code,[],[<<109,111,110,105,116,111,114>>]},<<32,111,112,116,105,111,110,32,97,98,111,118,101,32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,116,104,101,32,109,111,110,105,116,111,114,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,97,116,101,100,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,116,104,101,32,99,97,115,101,32,116,104,97,116,32,97,110,32,97,108,105,97,115,32,105,115,32,99,114,101,97,116,101,100,32,117,115,105,110,103,32,116,104,101,32,109,111,110,105,116,111,114,32,111,112,116,105,111,110,44,32,116,104,101,32,97,108,105,97,115,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,101,32,117,110,116,105,108,32,116,104,101,32,109,111,110,105,116,111,114,32,105,115,32,97,99,116,105,118,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<108,105,110,107>>]}]},{dd,[],[{p,[],[<<73,110,32,97,98,115,101,110,99,101,32,111,102,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,117,114,101,115,44,32,97,116,111,109,105,99,97,108,108,121,32,115,101,116,115,32,117,112,32,97,32,108,105,110,107,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,97,115,32,105,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,104,97,100,32,99,97,108,108,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,110,107,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,110,107,40,80,105,100,41>>]}]},<<32,119,104,101,114,101,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<84,104,101,32,108,105,110,107,32,119,105,108,108,32,110,111,116,32,98,101,32,97,99,116,105,118,97,116,101,100,32,102,111,114,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,84,104,101,32,108,105,110,107,32,99,97,110,32,110,111,116,32,98,101,32,114,101,109,111,118,101,100,32,98,101,102,111,114,101,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46,32,65,110,32,101,120,105,116,32,115,105,103,110,97,108,32,100,117,101,32,116,111,32,116,104,101,32,108,105,110,107,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,110,111,116,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,98,101,102,111,114,101,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,116,104,97,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,73,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,110,111,32,101,120,105,116,32,115,105,103,110,97,108,32,100,117,101,32,116,111,32,116,104,101,32,108,105,110,107,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,110,101,99,116,105,111,110,32,98,101,116,119,101,101,110,32,116,104,101,32,110,111,100,101,115,32,105,110,118,111,108,118,101,100,32,105,110,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,105,115,32,108,111,115,116,32,100,117,114,105,110,103,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<46,32,65,32,110,101,119,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,104,97,118,101,32,98,101,101,110,32,99,114,101,97,116,101,100,46,32,73,102,32,105,116,32,104,97,115,32,98,101,101,110,32,99,114,101,97,116,101,100,44,32,105,116,32,119,105,108,108,32,98,101,32,100,101,108,105,118,101,114,101,100,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,119,105,116,104,32,97,110,32,101,120,105,116,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<110,111,99,111,110,110,101,99,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,112,108,121,44,32,82,101,112,108,121,125>>]}]},{dd,[],[{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<82,101,112,108,121>>]},<<32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<121,101,115>>]}]},{dd,[],[{p,[],[<<65,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,32,111,114,32,110,111,116,46,32,73,102,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]},<<32,114,101,116,117,114,110,115,32,119,105,116,104,111,117,116,32,114,97,105,115,105,110,103,32,97,110,32,101,120,99,101,112,116,105,111,110,32,97,110,100,32,116,104,101,32>>,{code,[],[<<114,101,112,108,121>>]},<<32,111,112,116,105,111,110,32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<121,101,115>>]},<<44,32,116,104,101,32,99,97,108,108,101,114,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100,32,101,105,116,104,101,114,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,111,114,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<101,114,114,111,114,32,109,101,115,115,97,103,101>>]}]},<<46,32,84,104,101,32>>,{code,[],[<<114,101,112,108,121>>]},<<32,111,112,116,105,111,110,32,105,115,32,98,121,32,100,101,102,97,117,108,116,32,115,101,116,32,116,111,32>>,{code,[],[<<121,101,115>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,111>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,119,104,101,110,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,99,111,109,112,108,101,116,101,115,46,32,84,104,105,115,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,32,111,114,32,110,111,116,46>>]}]},{dt,[],[{code,[],[<<101,114,114,111,114,95,111,110,108,121>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,44,32,98,117,116,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<101,114,114,111,114,32,109,101,115,115,97,103,101>>]}]},<<32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,46>>]}]},{dt,[],[{code,[],[<<115,117,99,99,101,115,115,95,111,110,108,121>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32,98,117,116,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115,32,109,101,115,115,97,103,101>>]}]},<<32,119,105,108,108,32,98,101,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,105,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,115,117,99,99,101,101,100,115,46>>]}]}]}]},{dt,[],[{code,[],[<<123,114,101,112,108,121,95,116,97,103,44,32,82,101,112,108,121,84,97,103,125>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,116,104,101,32,114,101,112,108,121,32,116,97,103,32,116,111,32>>,{code,[],[<<82,101,112,108,121,84,97,103>>]},<<32,105,110,32,116,104,101,32,114,101,112,108,121,32,109,101,115,115,97,103,101,46,32,84,104,97,116,32,105,115,44,32,105,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,115,117,99,99,101,115,115,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<115,117,99,99,101,115,115>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,101,114,114,111,114,95,109,101,115,115,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{i,[],[<<101,114,114,111,114>>]}]},<<32,109,101,115,115,97,103,101,32,116,104,97,116,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,100,117,101,32,116,111,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,46,32,84,104,101,32,100,101,102,97,117,108,116,32,114,101,112,108,121,32,116,97,103,32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<115,112,97,119,110,95,114,101,112,108,121>>]},<<46>>]}]},{dt,[],[{code,[],[<<79,116,104,101,114,79,112,116,105,111,110>>]}]},{dd,[],[{p,[],[<<79,116,104,101,114,32,118,97,108,105,100,32,111,112,116,105,111,110,115,32,100,101,112,101,110,100,115,32,111,110,32,119,104,97,116,32,111,112,116,105,111,110,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,110,111,100,101,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<78,111,100,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,111,116,104,101,114,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,102,111,114,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,111,102,32,99,117,114,114,101,110,116,32,79,84,80,32,118,101,114,115,105,111,110,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<46>>]}]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,119,105,108,108,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<78,111,100,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<77,111,100,117,108,101>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,110,111,116,32,97,110,32,97,116,111,109,46>>]}]},{li,[],[{p,[],[{code,[],[<<65,114,103,115>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,116,101,114,109,115,46>>]}]},{li,[],[{p,[],[{code,[],[<<79,112,116,105,111,110,115>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,116,101,114,109,115,46>>]}]}]},{p,[],[<<78,111,116,101,32,116,104,97,116,32,110,111,116,32,97,108,108,32,105,110,100,105,118,105,100,117,97,108,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,97,114,101,32,99,104,101,99,107,101,100,32,119,104,101,110,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,46,32,83,111,109,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,99,97,110,32,111,110,108,121,32,98,101,32,99,104,101,99,107,101,100,32,111,110,32,114,101,99,101,112,116,105,111,110,32,111,102,32,116,104,101,32,114,101,113,117,101,115,116,46,32,84,104,101,114,101,102,111,114,101,32,97,110,32,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,99,97,117,115,101,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,44,32,98,117,116,32,119,105,108,108,32,99,97,117,115,101,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,116,111,32,102,97,105,108,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,32>>,{code,[],[<<98,97,100,111,112,116>>]},<<46>>]},{p,[],[<<65,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,99,97,110,32,98,101,32,97,98,97,110,100,111,110,101,100,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,53,49,51>>,signature => [{attribute,{3388,2},spec,{{spawn_request,5},[{type,{3388,20},bounded_fun,[{type,{3388,20},'fun',[{type,{3388,20},product,[{var,{3388,21},'Node'},{var,{3388,27},'Module'},{var,{3388,35},'Function'},{var,{3388,45},'Args'},{var,{3388,51},'Options'}]},{var,{3389,28},'ReqId'}]},[{type,{3390,7},constraint,[{atom,{3390,7},is_subtype},[{var,{3390,7},'Node'},{type,{3390,15},node,[]}]]},{type,{3391,7},constraint,[{atom,{3391,7},is_subtype},[{var,{3391,7},'Module'},{type,{3391,17},module,[]}]]},{type,{3392,7},constraint,[{atom,{3392,7},is_subtype},[{var,{3392,7},'Function'},{type,{3392,19},atom,[]}]]},{type,{3393,7},constraint,[{atom,{3393,7},is_subtype},[{var,{3393,7},'Args'},{type,{3393,15},list,[{type,{3393,16},term,[]}]}]]},{type,{3394,7},constraint,[{atom,{3394,7},is_subtype},[{var,{3394,7},'Options'},{type,{3394,18},list,[{var,{3394,19},'Option'}]}]]},{type,{3395,7},constraint,[{atom,{3395,7},is_subtype},[{var,{3395,7},'Option'},{type,{3395,17},union,[{atom,{3395,17},monitor},{type,{3396,17},tuple,[{atom,{3396,18},monitor},{type,{3396,27},list,[{user_type,{3396,28},monitor_option,[]}]}]},{atom,{3397,17},link},{type,{3398,17},tuple,[{atom,{3398,18},reply_tag},{var,{3398,29},'ReplyTag'}]},{type,{3399,17},tuple,[{atom,{3399,18},reply},{var,{3399,25},'Reply'}]},{var,{3400,17},'OtherOption'}]}]]},{type,{3401,7},constraint,[{atom,{3401,7},is_subtype},[{var,{3401,7},'ReplyTag'},{type,{3401,19},term,[]}]]},{type,{3402,7},constraint,[{atom,{3402,7},is_subtype},[{var,{3402,7},'Reply'},{type,{3402,16},union,[{atom,{3402,16},yes},{atom,{3402,22},no},{atom,{3402,27},error_only},{atom,{3402,40},success_only}]}]]},{type,{3403,7},constraint,[{atom,{3403,7},is_subtype},[{var,{3403,7},'OtherOption'},{type,{3403,22},term,[]}]]},{type,{3404,7},constraint,[{atom,{3404,7},is_subtype},[{var,{3404,7},'ReqId'},{type,{3404,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,spawn_request_abandon,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3421}],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<65,98,97,110,100,111,110,32,97,32,112,114,101,118,105,111,117,115,108,121,32,105,115,115,117,101,100,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,97,32,114,101,113,117,101,115,116,32,105,100,101,110,116,105,102,105,101,114,32,112,114,101,118,105,111,117,115,108,121,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,114,101,113,117,101,115,116,47,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,40,41>>]}]},<<32,105,110,32,97,32,99,97,108,108,32,102,114,111,109,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,115,32,109,97,100,101,32,116,104,101,32,114,101,113,117,101,115,116,32,99,97,110,32,97,98,97,110,100,111,110,32,116,104,101,32,114,101,113,117,101,115,116,46>>]},{p,[],[<<65,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,99,97,110,32,111,110,108,121,32,98,101,32,115,117,99,99,101,115,115,102,117,108,108,121,32,97,98,97,110,100,111,110,101,100,32,117,110,116,105,108,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,104,97,115,32,99,111,109,112,108,101,116,101,100,46,32,87,104,101,110,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,115,117,99,99,101,115,115,102,117,108,108,121,32,97,98,97,110,100,111,110,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,119,105,108,108,32,110,111,116,32,98,101,32,101,102,102,101,99,116,101,100,32,98,121,32,102,117,116,117,114,101,32,100,105,114,101,99,116,32,101,102,102,101,99,116,115,32,111,102,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,116,115,101,108,102,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,119,105,108,108,32,110,111,116,32,114,101,99,101,105,118,101,32,97,32,115,112,97,119,110,32,114,101,112,108,121,32,109,101,115,115,97,103,101,46,32,84,104,101,32,114,101,113,117,101,115,116,32,105,115,32,104,111,119,101,118,101,114,32,110,111,116,32,119,105,116,104,100,114,97,119,110,44,32,115,111,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,98,101,32,99,114,101,97,116,101,100,32,100,117,101,32,116,111,32,116,104,101,32,114,101,113,117,101,115,116,46,32,73,102,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32,105,115,32,99,114,101,97,116,101,100,32,97,102,116,101,114,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,97,115,32,97,98,97,110,100,111,110,101,100,44,32,110,111,32,109,111,110,105,116,111,114,115,32,110,111,114,32,108,105,110,107,115,32,119,105,108,108,32,98,101,32,115,101,116,32,117,112,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<115,112,97,119,110,95,114,101,113,117,101,115,116,95,97,98,97,110,100,111,110,47,49>>]},<<32,100,117,101,32,116,111,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46,32,73,102,32,116,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,110,99,108,117,100,101,100,32,116,104,101,32>>,{code,[],[<<108,105,110,107>>]},<<32,111,112,116,105,111,110,44,32,116,104,101,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,100,117,101,32,116,111,32,116,104,105,115,32,114,101,113,117,101,115,116,32,119,105,108,108,32,98,101,32,115,101,110,116,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,102,114,111,109,32,105,116,115,32,112,97,114,101,110,116,32,119,105,116,104,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32>>,{code,[],[<<97,98,97,110,100,111,110,101,100>>]},<<32,119,104,101,110,32,105,116,32,105,115,32,100,101,116,101,99,116,101,100,32,116,104,97,116,32,116,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,115,117,99,99,101,101,100,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,100,117,101,32,116,111,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,97,98,97,110,100,111,110,101,100,32,109,97,121,32,99,111,109,109,117,110,105,99,97,116,101,32,119,105,116,104,32,105,116,115,32,112,97,114,101,110,116,32,97,115,32,97,110,121,32,111,116,104,101,114,32,112,114,111,99,101,115,115,46,32,73,116,32,105,115,32>>,{em,[],[<<111,110,108,121>>]},<<32,116,104,101,32,100,105,114,101,99,116,32,101,102,102,101,99,116,115,32,111,110,32,116,104,101,32,112,97,114,101,110,116,32,111,102,32,116,104,101,32,97,99,116,117,97,108,32,115,112,97,119,110,32,114,101,113,117,101,115,116,44,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,97,110,99,101,108,101,100,32,98,121,32,97,98,97,110,100,111,110,105,110,103,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,46>>]}]},{p,[],[<<82,101,116,117,114,110,32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,97,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,97,98,97,110,100,111,110,101,100,46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,119,97,115,32,97,98,97,110,100,111,110,101,100,46,32,84,104,101,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,114,101,113,117,101,115,116,32,105,100,101,110,116,105,102,105,101,114,32,100,105,100,32,110,111,116,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,97,110,32,111,117,116,115,116,97,110,100,105,110,103,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,105,115,115,117,101,100,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,101,105,116,104,101,114,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<82,101,113,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,112,114,101,118,105,111,117,108,115,121,32,109,97,100,101,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,84,104,101,32,115,112,97,119,110,32,111,112,101,114,97,116,105,111,110,32,104,97,115,32,99,111,109,112,108,101,116,101,100,32,97,110,100,32,97,32,115,112,97,119,110,32,114,101,112,108,121,32,104,97,115,32,97,108,114,101,97,100,121,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,117,110,108,101,115,115,32,116,104,101,32,115,112,97,119,110,32,114,101,112,108,121,32,119,97,115,32,100,105,115,97,98,108,101,100,32,105,110,32,116,104,101,32,114,101,113,117,101,115,116,46>>]}]},{li,[],[{p,[],[{code,[],[<<82,101,113,73,100>>]},<<32,100,111,101,115,32,110,111,116,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,97,32,115,112,97,119,110,32,114,101,113,117,101,115,116,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,109,97,100,101,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46>>]}]}]}]}]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,102,97,105,108,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,105,102,32>>,{code,[],[<<82,101,113,73,100>>]},<<32,105,115,32,110,111,116,32,97,32,114,101,102,101,114,101,110,99,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,55,55,48>>,signature => [{attribute,{3421,2},spec,{{spawn_request_abandon,1},[{type,{3421,28},'fun',[{type,{3421,28},product,[{ann_type,{3421,29},[{var,{3421,29},'ReqId'},{type,{3421,38},reference,[]}]}]},{type,{3421,54},boolean,[]}]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,split_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1899}],[<<115,112,108,105,116,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,98,105,110,97,114,105,101,115,32,116,104,97,116,32,97,114,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,112,108,105,116,116,105,110,103,32>>,{code,[],[<<66,105,110>>]},<<32,105,110,116,111,32,116,119,111,32,112,97,114,116,115,32,97,116,32,112,111,115,105,116,105,111,110,32>>,{code,[],[<<80,111,115>>]},<<46,32,84,104,105,115,32,105,115,32,110,111,116,32,97,32,100,101,115,116,114,117,99,116,105,118,101,32,111,112,101,114,97,116,105,111,110,46,32,65,102,116,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,44,32,116,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,98,105,110,97,114,105,101,115,32,97,108,116,111,103,101,116,104,101,114,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,66,32,61,32,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,34,48,49,50,51,52,53,54,55,56,57,34,41,46,10,60,60,34,48,49,50,51,52,53,54,55,56,57,34,62,62,10,62,32,98,121,116,101,95,115,105,122,101,40,66,41,46,10,49,48,10,62,32,123,66,49,44,32,66,50,125,32,61,32,115,112,108,105,116,95,98,105,110,97,114,121,40,66,44,51,41,46,10,123,60,60,34,48,49,50,34,62,62,44,60,60,34,51,52,53,54,55,56,57,34,62,62,125,10,62,32,98,121,116,101,95,115,105,122,101,40,66,49,41,46,10,51,10,62,32,98,121,116,101,95,115,105,122,101,40,66,50,41,46,10,55>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,56,51,54>>,signature => [{attribute,{1899,2},spec,{{split_binary,2},[{type,{1899,19},bounded_fun,[{type,{1899,19},'fun',[{type,{1899,19},product,[{var,{1899,20},'Bin'},{var,{1899,25},'Pos'}]},{type,{1899,33},tuple,[{type,{1899,34},binary,[]},{type,{1899,44},binary,[]}]}]},[{type,{1900,7},constraint,[{atom,{1900,7},is_subtype},[{var,{1900,7},'Bin'},{type,{1900,14},binary,[]}]]},{type,{1901,7},constraint,[{atom,{1901,7},is_subtype},[{var,{1901,7},'Pos'},{type,{1901,14},non_neg_integer,[]}]]}]]}]}}]}},{{function,start_timer,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1906}],[<<115,116,97,114,116,95,116,105,109,101,114,47,51>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,114,116,95,116,105,109,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,116,97,114,116,95,116,105,109,101,114,40,84,105,109,101,44,32,68,101,115,116,44,32,77,115,103,44,32,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,56,54,48>>,signature => [{attribute,{1906,2},spec,{{erlang,start_timer,3},[{type,{1906,25},bounded_fun,[{type,{1906,25},'fun',[{type,{1906,25},product,[{var,{1906,26},'Time'},{var,{1906,32},'Dest'},{var,{1906,38},'Msg'}]},{var,{1906,46},'TimerRef'}]},[{type,{1907,7},constraint,[{atom,{1907,7},is_subtype},[{var,{1907,7},'Time'},{type,{1907,15},non_neg_integer,[]}]]},{type,{1908,7},constraint,[{atom,{1908,7},is_subtype},[{var,{1908,7},'Dest'},{type,{1908,15},union,[{type,{1908,15},pid,[]},{type,{1908,23},atom,[]}]}]]},{type,{1909,7},constraint,[{atom,{1909,7},is_subtype},[{var,{1909,7},'Msg'},{type,{1909,14},term,[]}]]},{type,{1910,7},constraint,[{atom,{1910,7},is_subtype},[{var,{1910,7},'TimerRef'},{type,{1910,19},reference,[]}]]}]]}]}}]}},{{function,start_timer,4},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1916}],[<<115,116,97,114,116,95,116,105,109,101,114,47,52>>],#{<<101,110>> => [{p,[],[<<83,116,97,114,116,115,32,97,32,116,105,109,101,114,46,32,87,104,101,110,32,116,104,101,32,116,105,109,101,114,32,101,120,112,105,114,101,115,44,32,116,104,101,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,84,105,109,101,114,82,101,102,44,32,77,115,103,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<68,101,115,116>>]},<<46>>]},{p,[],[{code,[],[<<79,112,116,105,111,110>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,97,98,115,44,32,102,97,108,115,101,125>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46,32,73,116,32,109,101,97,110,115,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,32>>,{em,[],[<<114,101,108,97,116,105,118,101>>]},<<32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,97,98,115,44,32,116,114,117,101,125>>]}]},{dd,[],[{p,[],[<<65,98,115,111,108,117,116,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,46,32,84,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,110,32,97,98,115,111,108,117,116,101,32,69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,46>>]}]}]},{p,[],[<<77,111,114,101,32>>,{code,[],[<<79,112,116,105,111,110>>]},<<115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{p,[],[<<84,104,101,32,97,98,115,111,108,117,116,101,32,112,111,105,110,116,32,105,110,32,116,105,109,101,44,32,116,104,101,32,116,105,109,101,114,32,105,115,32,115,101,116,32,116,111,32,101,120,112,105,114,101,32,111,110,44,32,109,117,115,116,32,98,101,32,105,110,32,116,104,101,32,105,110,116,101,114,118,97,108,32>>,{code,[],[<<91,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111>>]},{code,[],[<<40,115,116,97,114,116,95,116,105,109,101,41,44,32,110,97,116,105,118,101,44,32,109,105,108,108,105,115,101,99,111,110,100,41,44,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111>>]},{code,[],[<<40,101,110,100,95,116,105,109,101,41,44,32,110,97,116,105,118,101,44,32,109,105,108,108,105,115,101,99,111,110,100,41,32,93>>]},<<46,32,73,102,32,97,32,114,101,108,97,116,105,118,101,32,116,105,109,101,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,110,101,103,97,116,105,118,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<44,32,105,116,32,109,117,115,116,32,98,101,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,111,102,32,97,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,111,110,32,116,104,101,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,84,104,105,115,32,112,114,111,99,101,115,115,32,104,97,115,32,101,105,116,104,101,114,32,116,101,114,109,105,110,97,116,101,100,32,111,114,32,110,111,116,46,32,73,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,110,32>>,{code,[],[<<97,116,111,109,40,41>>]},<<44,32,105,116,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,108,111,99,97,108,108,121,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,46,32,84,104,101,32,112,114,111,99,101,115,115,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32,116,104,101,32,110,97,109,101,32,105,115,32,108,111,111,107,101,100,32,117,112,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,116,105,109,101,114,32,101,120,112,105,114,97,116,105,111,110,46,32,78,111,32,101,114,114,111,114,32,105,115,32,114,101,116,117,114,110,101,100,32,105,102,32,116,104,101,32,110,97,109,101,32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<44,32,116,104,101,32,116,105,109,101,114,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,97,110,99,101,108,101,100,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,102,101,114,114,101,100,32,116,111,32,98,121,32,116,104,101,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,105,115,32,110,111,116,32,97,108,105,118,101,44,32,111,114,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,46,32,84,104,105,115,32,102,101,97,116,117,114,101,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,82,84,83,32,53,46,52,46,49,49,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,105,109,101,114,115,32,97,114,101,32,110,111,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,97,110,99,101,108,101,100,32,119,104,101,110,32>>,{code,[],[<<68,101,115,116>>]},<<32,105,115,32,97,110,32>>,{code,[],[<<97,116,111,109,40,41>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,101,110,100,95,97,102,116,101,114,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,101,110,100,95,97,102,116,101,114,47,52>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,97,110,99,101,108,95,116,105,109,101,114,47,50>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,97,100,95,116,105,109,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,97,100,95,116,105,109,101,114,47,50>>]}]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,100,111,32,110,111,116,32,115,97,116,105,115,102,121,32,116,104,101,32,114,101,113,117,105,114,101,109,101,110,116,115,32,115,112,101,99,105,102,105,101,100,32,104,101,114,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,56,55,49>>,signature => [{attribute,{1916,2},spec,{{erlang,start_timer,4},[{type,{1916,25},bounded_fun,[{type,{1916,25},'fun',[{type,{1916,25},product,[{var,{1916,26},'Time'},{var,{1916,32},'Dest'},{var,{1916,38},'Msg'},{var,{1916,43},'Options'}]},{var,{1916,55},'TimerRef'}]},[{type,{1917,7},constraint,[{atom,{1917,7},is_subtype},[{var,{1917,7},'Time'},{type,{1917,15},integer,[]}]]},{type,{1918,7},constraint,[{atom,{1918,7},is_subtype},[{var,{1918,7},'Dest'},{type,{1918,15},union,[{type,{1918,15},pid,[]},{type,{1918,23},atom,[]}]}]]},{type,{1919,7},constraint,[{atom,{1919,7},is_subtype},[{var,{1919,7},'Msg'},{type,{1919,14},term,[]}]]},{type,{1920,7},constraint,[{atom,{1920,7},is_subtype},[{var,{1920,7},'Options'},{type,{1920,18},list,[{var,{1920,19},'Option'}]}]]},{type,{1921,7},constraint,[{atom,{1921,7},is_subtype},[{var,{1921,7},'Abs'},{type,{1921,14},boolean,[]}]]},{type,{1922,7},constraint,[{atom,{1922,7},is_subtype},[{var,{1922,7},'Option'},{type,{1922,17},tuple,[{atom,{1922,18},abs},{var,{1922,23},'Abs'}]}]]},{type,{1923,7},constraint,[{atom,{1923,7},is_subtype},[{var,{1923,7},'TimerRef'},{type,{1923,19},reference,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},<<32,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,116,104,97,116,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,116,97,115,107,115,32,116,104,97,116,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,67,80,85,32,98,111,117,110,100,32,97,114,101,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,51,49>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2534,17},bounded_fun,[{type,{2534,17},'fun',[{type,{2534,17},product,[{atom,{2534,18},active_tasks}]},{type,{2534,35},list,[{var,{2534,36},'ActiveTasks'}]}]},[{type,{2535,7},constraint,[{atom,{2535,7},is_subtype},[{var,{2535,7},'ActiveTasks'},{type,{2535,22},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,104,101,114,101,32,101,97,99,104,32,101,108,101,109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,97,99,116,105,118,101,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,111,110,32,101,97,99,104,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,115,99,104,101,100,117,108,101,114,115,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,116,104,97,116,32,97,114,101,32,114,101,97,100,121,32,116,111,32,114,117,110,44,32,111,114,32,97,114,101,32,99,117,114,114,101,110,116,108,121,32,114,117,110,110,105,110,103,46,32,86,97,108,117,101,115,32,102,111,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,97,110,100,32,116,104,101,105,114,32,97,115,115,111,99,105,97,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,108,111,99,97,116,101,100,32,102,105,114,115,116,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,115,99,104,101,100,117,108,101,114,32,110,117,109,98,101,114,32,49,32,97,110,100,32,115,111,32,111,110,46,32,73,102,32,115,117,112,112,111,114,116,32,102,111,114,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,101,120,105,115,116,44,32,97,110,32,101,108,101,109,101,110,116,32,119,105,116,104,32,116,104,101,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,102,111,108,108,111,119,32,97,110,100,32,116,104,101,110,32,97,115,32,108,97,115,116,32,101,108,101,109,101,110,116,32,116,104,101,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,105,116,115,32,97,115,115,111,99,105,97,116,101,100,32,100,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,102,111,108,108,111,119,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,105,108,121,32,97,32,99,111,110,115,105,115,116,101,110,116,32,115,110,97,112,115,104,111,116,32,111,102,32,116,104,101,32,115,116,97,116,101,44,32,98,117,116,32,105,110,115,116,101,97,100,32,113,117,105,116,101,32,101,102,102,105,99,105,101,110,116,108,121,32,103,97,116,104,101,114,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<69,97,99,104,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,104,97,115,32,111,110,101,32,114,117,110,32,113,117,101,117,101,32,116,104,97,116,32,105,116,32,109,97,110,97,103,101,115,46,32,73,102,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,44,32,97,108,108,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,44,32,97,110,100,32,97,108,108,32,100,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,46,32,84,104,97,116,32,105,115,44,32,119,101,32,104,97,118,101,32,109,117,108,116,105,112,108,101,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,44,32,111,110,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,111,110,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,46,32,87,111,114,107,32,99,97,110,32>>,{em,[],[<<110,111,116>>]},<<32,109,105,103,114,97,116,101,32,98,101,116,119,101,101,110,32,116,104,101,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,32,111,102,32,114,117,110,32,113,117,101,117,101,115,46,32,79,110,108,121,32,119,111,114,107,32,105,110,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,99,97,110,32,109,105,103,114,97,116,101,32,116,111,32,111,116,104,101,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,46,32,84,104,105,115,32,104,97,115,32,116,111,32,98,101,32,116,97,107,101,110,32,105,110,116,111,32,97,99,99,111,117,110,116,32,119,104,101,110,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,52,54>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2536,3},bounded_fun,[{type,{2536,3},'fun',[{type,{2536,3},product,[{atom,{2536,4},active_tasks_all}]},{type,{2536,25},list,[{var,{2536,26},'ActiveTasks'}]}]},[{type,{2537,7},constraint,[{atom,{2537,7},is_subtype},[{var,{2537,7},'ActiveTasks'},{type,{2537,22},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,99,111,110,116,101,120,116,32,115,119,105,116,99,104,101,115,32,115,105,110,99,101,32,116,104,101,32,115,121,115,116,101,109,32,115,116,97,114,116,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,56,56>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2538,3},bounded_fun,[{type,{2538,3},'fun',[{type,{2538,3},product,[{atom,{2538,4},context_switches}]},{type,{2538,25},tuple,[{var,{2538,26},'ContextSwitches'},{integer,{2538,42},0}]}]},[{type,{2539,7},constraint,[{atom,{2539,7},is_subtype},[{var,{2539,7},'ContextSwitches'},{type,{2539,26},non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,120,97,99,116,32,114,101,100,117,99,116,105,111,110,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,101,120,97,99,116,95,114,101,100,117,99,116,105,111,110,115,41>>]},<<32,105,115,32,97,32,109,111,114,101,32,101,120,112,101,110,115,105,118,101,32,111,112,101,114,97,116,105,111,110,32,116,104,97,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,101,100,117,99,116,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,116,97,116,105,115,116,105,99,115,40,114,101,100,117,99,116,105,111,110,115,41>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,55,57,57,55>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2540,17},bounded_fun,[{type,{2540,17},'fun',[{type,{2540,17},product,[{atom,{2540,18},exact_reductions}]},{type,{2540,39},tuple,[{var,{2540,40},'Total_Exact_Reductions'},{var,{2541,40},'Exact_Reductions_Since_Last_Call'}]}]},[{type,{2542,7},constraint,[{atom,{2542,7},is_subtype},[{var,{2542,7},'Total_Exact_Reductions'},{type,{2542,33},non_neg_integer,[]}]]},{type,{2543,7},constraint,[{atom,{2543,7},is_subtype},[{var,{2543,7},'Exact_Reductions_Since_Last_Call'},{type,{2543,43},non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,116,97,116,105,115,116,105,99,115,40,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110,41,46,10,123,56,53,44,50,51,57,54,49,44,48,125>>]}]},{p,[],[<<84,104,105,115,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,105,110,118,97,108,105,100,32,102,111,114,32,115,111,109,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,48,49,50>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2544,17},bounded_fun,[{type,{2544,17},'fun',[{type,{2544,17},product,[{atom,{2544,18},garbage_collection}]},{type,{2544,41},tuple,[{var,{2544,42},'Number_of_GCs'},{var,{2544,57},'Words_Reclaimed'},{integer,{2544,74},0}]}]},[{type,{2545,7},constraint,[{atom,{2545,7},is_subtype},[{var,{2545,7},'Number_of_GCs'},{type,{2545,24},non_neg_integer,[]}]]},{type,{2546,7},constraint,[{atom,{2546,7},is_subtype},[{var,{2546,7},'Words_Reclaimed'},{type,{2546,26},non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<73,110,112,117,116>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,114,101,99,101,105,118,101,100,32,116,104,114,111,117,103,104,32,112,111,114,116,115,44,32,97,110,100,32>>,{code,[],[<<79,117,116,112,117,116>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,111,117,116,112,117,116,32,116,111,32,112,111,114,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,48,50,52>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2547,17},bounded_fun,[{type,{2547,17},'fun',[{type,{2547,17},product,[{atom,{2547,18},io}]},{type,{2547,25},tuple,[{type,{2547,26},tuple,[{atom,{2547,27},input},{var,{2547,34},'Input'}]},{type,{2547,42},tuple,[{atom,{2547,43},output},{var,{2547,51},'Output'}]}]}]},[{type,{2548,7},constraint,[{atom,{2548,7},is_subtype},[{var,{2548,7},'Input'},{type,{2548,16},non_neg_integer,[]}]]},{type,{2549,7},constraint,[{atom,{2549,7},is_subtype},[{var,{2549,7},'Output'},{type,{2549,17},non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<77,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,101,97,115,117,114,101,32,104,111,119,32,109,117,99,104,32,116,105,109,101,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,112,101,110,100,115,32,100,111,105,110,103,32,118,97,114,105,111,117,115,32,116,97,115,107,115,46,32,73,116,32,105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,98,101,32,97,115,32,108,105,103,104,116,119,101,105,103,104,116,32,97,115,32,112,111,115,115,105,98,108,101,44,32,98,117,116,32,115,111,109,101,32,111,118,101,114,104,101,97,100,32,101,120,105,115,116,115,32,119,104,101,110,32,116,104,105,115,32,105,115,32,101,110,97,98,108,101,100,46,32,77,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,105,115,32,109,101,97,110,116,32,116,111,32,98,101,32,97,32,112,114,111,102,105,108,105,110,103,32,116,111,111,108,32,116,111,32,104,101,108,112,32,102,105,110,100,105,110,103,32,112,101,114,102,111,114,109,97,110,99,101,32,98,111,116,116,108,101,110,101,99,107,115,46,32,84,111,32>>,{code,[],[<<115,116,97,114,116>>]},<<47>>,{code,[],[<<115,116,111,112>>]},<<47>>,{code,[],[<<114,101,115,101,116>>]},<<32,109,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,44,32,117,115,101,32,115,121,115,116,101,109,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>]}]},<<46>>]},{p,[],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41>>]},<<32,114,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,109,97,112,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,115,111,109,101,32,111,102,32,116,104,101,32,79,83,32,116,104,114,101,97,100,115,32,119,105,116,104,105,110,32,69,82,84,83,46,32,69,97,99,104,32,109,97,112,32,99,111,110,116,97,105,110,115,32>>,{code,[],[<<116,121,112,101>>]},<<32,97,110,100,32>>,{code,[],[<<105,100>>]},<<32,102,105,101,108,100,115,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,105,100,101,110,116,105,102,121,32,119,104,97,116,32,116,104,114,101,97,100,32,105,116,32,105,115,44,32,97,110,100,32,97,108,115,111,32,97,32,99,111,117,110,116,101,114,115,32,102,105,101,108,100,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,100,97,116,97,32,97,98,111,117,116,32,104,111,119,32,109,117,99,104,32,116,105,109,101,32,104,97,115,32,98,101,101,110,32,115,112,101,110,116,32,105,110,32,116,104,101,32,118,97,114,105,111,117,115,32,115,116,97,116,101,115,46>>]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41,46,10,91,35,123,99,111,117,110,116,101,114,115,32,61,62,32,35,123,97,117,120,32,61,62,32,49,56,57,57,49,56,50,57,49,52,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,104,101,99,107,95,105,111,32,61,62,32,50,54,48,53,56,54,51,54,48,50,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,109,117,108,97,116,111,114,32,61,62,32,52,53,55,51,49,56,56,48,52,54,51,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,103,99,32,61,62,32,49,53,49,50,50,48,54,57,49,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,116,104,101,114,32,61,62,32,53,52,50,49,51,51,56,52,53,54,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,112,111,114,116,32,61,62,32,50,50,49,54,51,49,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,115,108,101,101,112,32,61,62,32,53,49,53,48,50,57,52,49,48,48,125,44,10,32,32,32,105,100,32,61,62,32,49,44,10,32,32,32,116,121,112,101,32,61,62,32,115,99,104,101,100,117,108,101,114,125,124,46,46,46,93>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,117,110,105,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>]}]},<<46,32,83,111,44,32,116,111,32,99,111,110,118,101,114,116,32,105,116,32,116,111,32,109,105,108,108,105,115,101,99,111,110,100,115,44,32,121,111,117,32,99,97,110,32,100,111,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<108,105,115,116,115,58,109,97,112,40,10,32,32,102,117,110,40,35,123,32,99,111,117,110,116,101,114,115,32,58,61,32,67,110,116,32,125,32,61,32,77,41,32,45,62,10,32,32,32,32,32,32,32,32,32,32,77,115,67,110,116,32,61,32,109,97,112,115,58,109,97,112,40,102,117,110,40,95,75,44,32,80,101,114,102,67,111,117,110,116,41,32,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,40,80,101,114,102,67,111,117,110,116,44,32,112,101,114,102,95,99,111,117,110,116,101,114,44,32,49,48,48,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,44,32,67,110,116,41,44,10,32,32,32,32,32,32,32,32,32,77,35,123,32,99,111,117,110,116,101,114,115,32,58,61,32,77,115,67,110,116,32,125,10,32,32,101,110,100,44,32,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41,41,46>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,115,101,32,118,97,108,117,101,115,32,97,114,101,32,110,111,116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,116,104,101,32,101,120,97,99,116,32,116,105,109,101,32,115,112,101,110,116,32,105,110,32,101,97,99,104,32,115,116,97,116,101,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,111,102,32,118,97,114,105,111,117,115,32,111,112,116,105,109,105,115,97,116,105,111,110,32,100,111,110,101,32,116,111,32,107,101,101,112,32,116,104,101,32,111,118,101,114,104,101,97,100,32,97,115,32,115,109,97,108,108,32,97,115,32,112,111,115,115,105,98,108,101,46>>]},{p,[],[{code,[],[<<77,83,65,99,99,95,84,104,114,101,97,100,95,84,121,112,101>>]},<<115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[<<84,104,101,32,109,97,105,110,32,101,120,101,99,117,116,105,111,110,32,116,104,114,101,97,100,115,32,116,104,97,116,32,100,111,32,109,111,115,116,32,111,102,32,116,104,101,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,83>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[<<84,104,101,32,116,104,114,101,97,100,115,32,102,111,114,32,108,111,110,103,32,114,117,110,110,105,110,103,32,99,112,117,32,105,110,116,101,110,115,105,118,101,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,83,68,99,112,117>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[<<84,104,101,32,116,104,114,101,97,100,115,32,102,111,114,32,108,111,110,103,32,114,117,110,110,105,110,103,32,73,47,79,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,83,68,105,111>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<97,115,121,110,99>>]}]},{dd,[],[<<65,115,121,110,99,32,116,104,114,101,97,100,115,32,97,114,101,32,117,115,101,100,32,98,121,32,118,97,114,105,111,117,115,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,115,32,40,109,97,105,110,108,121,32,116,104,101,32,102,105,108,101,32,100,114,105,118,101,114,115,41,32,100,111,32,111,102,102,108,111,97,100,32,110,111,110,45,67,80,85,32,105,110,116,101,110,115,105,118,101,32,119,111,114,107,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,97,115,121,110,99,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,65>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]},{dt,[],[{code,[],[<<97,117,120>>]}]},{dd,[],[<<84,97,107,101,115,32,99,97,114,101,32,111,102,32,97,110,121,32,119,111,114,107,32,116,104,97,116,32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,99,97,108,108,121,32,97,115,115,105,103,110,101,100,32,116,111,32,97,32,115,99,104,101,100,117,108,101,114,46>>]},{dt,[],[{code,[],[<<112,111,108,108>>]}]},{dd,[],[<<68,111,101,115,32,116,104,101,32,73,79,32,112,111,108,108,105,110,103,32,102,111,114,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,73,79,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<101,114,108,32,43,73,79,116>>]},<<32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32>>,{code,[],[<<77,83,65,99,99,95,84,104,114,101,97,100,95,83,116,97,116,101>>]},<<115,32,97,114,101,32,97,118,97,105,108,97,98,108,101,46,32,65,108,108,32,115,116,97,116,101,115,32,97,114,101,32,101,120,99,108,117,115,105,118,101,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,97,32,116,104,114,101,97,100,32,99,97,110,110,111,116,32,98,101,32,105,110,32,116,119,111,32,115,116,97,116,101,115,32,97,116,32,111,110,99,101,46,32,83,111,44,32,105,102,32,121,111,117,32,97,100,100,32,116,104,101,32,110,117,109,98,101,114,115,32,111,102,32,97,108,108,32,99,111,117,110,116,101,114,115,32,105,110,32,97,32,116,104,114,101,97,100,44,32,121,111,117,32,103,101,116,32,116,104,101,32,116,111,116,97,108,32,114,117,110,116,105,109,101,32,102,111,114,32,116,104,97,116,32,116,104,114,101,97,100,46>>]},{dl,[],[{dt,[],[{code,[],[<<97,117,120>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,104,97,110,100,108,105,110,103,32,97,117,120,105,108,105,97,114,121,32,106,111,98,115,46>>]},{dt,[],[{code,[],[<<99,104,101,99,107,95,105,111>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,99,104,101,99,107,105,110,103,32,102,111,114,32,110,101,119,32,73,47,79,32,101,118,101,110,116,115,46>>]},{dt,[],[{code,[],[<<101,109,117,108,97,116,111,114>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,101,120,101,99,117,116,105,110,103,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,46>>]},{dt,[],[{code,[],[<<103,99>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,104,101,110,32,101,120,116,114,97,32,115,116,97,116,101,115,32,97,114,101,32,101,110,97,98,108,101,100,32,116,104,105,115,32,105,115,32,116,104,101,32,116,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,110,111,110,45,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,46>>]},{dt,[],[{code,[],[<<111,116,104,101,114>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,117,110,97,99,99,111,117,110,116,101,100,32,116,104,105,110,103,115,46>>]},{dt,[],[{code,[],[<<112,111,114,116>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,101,120,101,99,117,116,105,110,103,32,112,111,114,116,115,46>>]},{dt,[],[{code,[],[<<115,108,101,101,112>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,115,108,101,101,112,105,110,103,46>>]}]},{p,[],[<<77,111,114,101,32,102,105,110,101,45,103,114,97,105,110,101,100,32>>,{code,[],[<<77,83,65,99,99,95,84,104,114,101,97,100,95,83,116,97,116,101>>]},<<115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,116,104,114,111,117,103,104,32,99,111,110,102,105,103,117,114,101,32,40,115,117,99,104,32,97,115,32>>,{code,[],[<<46,47,99,111,110,102,105,103,117,114,101,32,45,45,119,105,116,104,45,109,105,99,114,111,115,116,97,116,101,45,97,99,99,111,117,110,116,105,110,103,61,101,120,116,114,97>>]},<<41,46,32,69,110,97,98,108,105,110,103,32,116,104,101,115,101,32,115,116,97,116,101,115,32,99,97,117,115,101,115,32,112,101,114,102,111,114,109,97,110,99,101,32,100,101,103,114,97,100,97,116,105,111,110,32,119,104,101,110,32,109,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,105,115,32,116,117,114,110,101,100,32,111,102,102,32,97,110,100,32,105,110,99,114,101,97,115,101,115,32,116,104,101,32,111,118,101,114,104,101,97,100,32,119,104,101,110,32,105,116,32,105,115,32,116,117,114,110,101,100,32,111,110,46>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108,111,99>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,109,97,110,97,103,105,110,103,32,109,101,109,111,114,121,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,115,112,114,101,97,100,32,111,117,116,32,111,118,101,114,32,97,108,108,32,111,116,104,101,114,32,115,116,97,116,101,115,46>>]},{dt,[],[{code,[],[<<98,105,102>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,105,110,32,66,73,70,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<98,117,115,121,95,119,97,105,116>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,98,117,115,121,32,119,97,105,116,105,110,103,46,32,84,104,105,115,32,105,115,32,97,108,115,111,32,116,104,101,32,115,116,97,116,101,32,119,104,101,114,101,32,97,32,115,99,104,101,100,117,108,101,114,32,110,111,32,108,111,110,103,101,114,32,114,101,112,111,114,116,115,32,116,104,97,116,32,105,116,32,105,115,32,97,99,116,105,118,101,32,119,104,101,110,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41>>]}]},<<46,32,83,111,44,32,105,102,32,121,111,117,32,97,100,100,32,97,108,108,32,111,116,104,101,114,32,115,116,97,116,101,115,32,98,117,116,32,116,104,105,115,32,97,110,100,32,115,108,101,101,112,44,32,97,110,100,32,116,104,101,110,32,100,105,118,105,100,101,32,116,104,97,116,32,98,121,32,97,108,108,32,116,105,109,101,32,105,110,32,116,104,101,32,116,104,114,101,97,100,44,32,121,111,117,32,115,104,111,117,108,100,32,103,101,116,32,115,111,109,101,116,104,105,110,103,32,118,101,114,121,32,115,105,109,105,108,97,114,32,116,111,32,116,104,101,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,102,114,97,99,116,105,111,110,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<111,116,104,101,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<101,116,115>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,101,120,101,99,117,116,105,110,103,32,69,84,83,32,66,73,70,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<103,99,95,102,117,108,108>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,100,111,105,110,103,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<103,99>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<110,105,102>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,105,110,32,78,73,70,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<115,101,110,100>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,115,101,110,100,105,110,103,32,109,101,115,115,97,103,101,115,32,40,112,114,111,99,101,115,115,101,115,32,111,110,108,121,41,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<101,109,117,108,97,116,111,114>>]},<<32,115,116,97,116,101,46>>]},{dt,[],[{code,[],[<<116,105,109,101,114,115>>]}]},{dd,[],[<<84,105,109,101,32,115,112,101,110,116,32,109,97,110,97,103,105,110,103,32,116,105,109,101,114,115,46,32,87,105,116,104,111,117,116,32,101,120,116,114,97,32,115,116,97,116,101,115,32,116,104,105,115,32,116,105,109,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<111,116,104,101,114>>]},<<32,115,116,97,116,101,46>>]}]},{p,[],[<<84,104,101,32,117,116,105,108,105,116,121,32,109,111,100,117,108,101,32>>,{a,[{href,<<114,117,110,116,105,109,101,95,116,111,111,108,115,58,109,115,97,99,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,115,97,99,99,40,51,41>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,111,114,101,32,101,97,115,105,108,121,32,97,110,97,108,121,115,101,32,116,104,101,115,101,32,115,116,97,116,105,115,116,105,99,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,115,121,115,116,101,109,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>]}]},<<32,105,115,32,116,117,114,110,101,100,32,111,102,102,46>>]},{p,[],[<<84,104,101,32,108,105,115,116,32,111,102,32,116,104,114,101,97,100,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,117,110,115,111,114,116,101,100,32,97,110,100,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,100,105,102,102,101,114,101,110,116,32,111,114,100,101,114,32,98,101,116,119,101,101,110,32,99,97,108,108,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,116,104,114,101,97,100,115,32,97,110,100,32,115,116,97,116,101,115,32,97,114,101,32,115,117,98,106,101,99,116,32,116,111,32,99,104,97,110,103,101,32,119,105,116,104,111,117,116,32,97,110,121,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,48,51,53>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2550,17},bounded_fun,[{type,{2550,17},'fun',[{type,{2550,17},product,[{atom,{2550,18},microstate_accounting}]},{type,{2550,44},union,[{type,{2550,44},list,[{var,{2550,45},'MSAcc_Thread'}]},{atom,{2550,61},undefined}]}]},[{type,{2551,7},constraint,[{atom,{2551,7},is_subtype},[{var,{2551,7},'MSAcc_Thread'},{type,{2551,23},map,[{type,{2551,31},map_field_exact,[{atom,{2551,26},type},{var,{2551,34},'MSAcc_Thread_Type'}]},{type,{2552,28},map_field_exact,[{atom,{2552,25},id},{var,{2552,31},'MSAcc_Thread_Id'}]},{type,{2553,34},map_field_exact,[{atom,{2553,25},counters},{var,{2553,37},'MSAcc_Counters'}]}]}]]},{type,{2554,7},constraint,[{atom,{2554,7},is_subtype},[{var,{2554,7},'MSAcc_Thread_Type'},{type,{2554,28},union,[{atom,{2554,28},async},{atom,{2554,36},aux},{atom,{2554,42},dirty_io_scheduler},{atom,{2555,28},dirty_cpu_scheduler},{atom,{2555,50},poll},{atom,{2555,57},scheduler}]}]]},{type,{2556,7},constraint,[{atom,{2556,7},is_subtype},[{var,{2556,7},'MSAcc_Thread_Id'},{type,{2556,26},non_neg_integer,[]}]]},{type,{2557,7},constraint,[{atom,{2557,7},is_subtype},[{var,{2557,7},'MSAcc_Counters'},{type,{2557,25},map,[{type,{2557,47},map_field_assoc,[{var,{2557,28},'MSAcc_Thread_State'},{type,{2557,50},non_neg_integer,[]}]}]}]]},{type,{2558,7},constraint,[{atom,{2558,7},is_subtype},[{var,{2558,7},'MSAcc_Thread_State'},{type,{2558,29},union,[{atom,{2558,29},alloc},{atom,{2558,37},aux},{atom,{2558,43},bif},{atom,{2558,49},busy_wait},{atom,{2558,61},check_io},{atom,{2559,29},emulator},{atom,{2559,40},ets},{atom,{2559,46},gc},{atom,{2559,51},gc_fullsweep},{atom,{2559,66},nif},{atom,{2560,29},other},{atom,{2560,37},port},{atom,{2560,44},send},{atom,{2560,51},sleep},{atom,{2560,59},timers}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,114,101,100,117,99,116,105,111,110,115,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,116,97,116,105,115,116,105,99,115,40,114,101,100,117,99,116,105,111,110,115,41,46,10,123,50,48,52,54,44,49,49,125>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,53,32,40,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,41,44,32,116,104,105,115,32,118,97,108,117,101,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,114,101,100,117,99,116,105,111,110,115,32,112,101,114,102,111,114,109,101,100,32,105,110,32,99,117,114,114,101,110,116,32,116,105,109,101,32,115,108,105,99,101,115,32,111,102,32,99,117,114,114,101,110,116,108,121,32,115,99,104,101,100,117,108,101,100,32,112,114,111,99,101,115,115,101,115,46,32,73,102,32,97,110,32,101,120,97,99,116,32,118,97,108,117,101,32,105,115,32,119,97,110,116,101,100,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,101,120,97,99,116,95,114,101,100,117,99,116,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,101,120,97,99,116,95,114,101,100,117,99,116,105,111,110,115,41>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,49,55,56>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2561,17},bounded_fun,[{type,{2561,17},'fun',[{type,{2561,17},product,[{atom,{2561,18},reductions}]},{type,{2561,33},tuple,[{var,{2561,34},'Total_Reductions'},{var,{2562,34},'Reductions_Since_Last_Call'}]}]},[{type,{2563,7},constraint,[{atom,{2563,7},is_subtype},[{var,{2563,7},'Total_Reductions'},{type,{2563,27},non_neg_integer,[]}]]},{type,{2564,7},constraint,[{atom,{2564,7},is_subtype},[{var,{2564,7},'Reductions_Since_Last_Call'},{type,{2564,37},non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,111,116,97,108,32,108,101,110,103,116,104,32,111,102,32,97,108,108,32,110,111,114,109,97,108,32,97,110,100,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,115,46,32,84,104,97,116,32,105,115,44,32,113,117,101,117,101,100,32,119,111,114,107,32,116,104,97,116,32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,67,80,85,32,98,111,117,110,100,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,99,111,110,115,105,115,116,101,110,116,32,115,110,97,112,115,104,111,116,32,111,102,32,116,104,101,32,115,116,97,116,101,44,32,98,117,116,32,116,104,105,115,32,111,112,101,114,97,116,105,111,110,32,105,115,32,109,117,99,104,32,109,111,114,101,32,101,120,112,101,110,115,105,118,101,32,99,111,109,112,97,114,101,100,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32,101,115,112,101,99,105,97,108,108,121,32,119,104,101,110,32,97,32,108,97,114,103,101,32,97,109,111,117,110,116,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,105,115,32,117,115,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,49,57,55>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2565,17},'fun',[{type,{2565,17},product,[{atom,{2565,18},run_queue}]},{type,{2565,32},non_neg_integer,[]}]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<32,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,116,104,97,116,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,114,117,110,32,113,117,101,117,101,115,32,119,105,116,104,32,119,111,114,107,32,116,104,97,116,32,105,115,32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,67,80,85,32,98,111,117,110,100,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,49,51>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2566,17},bounded_fun,[{type,{2566,17},'fun',[{type,{2566,17},product,[{atom,{2566,18},run_queue_lengths}]},{type,{2566,40},list,[{var,{2566,41},'RunQueueLength'}]}]},[{type,{2567,7},constraint,[{atom,{2567,7},is_subtype},[{var,{2567,7},'RunQueueLength'},{type,{2567,25},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,119,104,101,114,101,32,101,97,99,104,32,101,108,101,109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,114,101,97,100,121,32,116,111,32,114,117,110,32,102,111,114,32,101,97,99,104,32,114,117,110,32,113,117,101,117,101,46,32,86,97,108,117,101,115,32,102,111,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,97,114,101,32,108,111,99,97,116,101,100,32,102,105,114,115,116,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,32,111,102,32,115,99,104,101,100,117,108,101,114,32,110,117,109,98,101,114,32,49,32,97,110,100,32,115,111,32,111,110,46,32,73,102,32,115,117,112,112,111,114,116,32,102,111,114,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,101,120,105,115,116,44,32,118,97,108,117,101,115,32,102,111,114,32,116,104,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,116,104,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,32,102,111,108,108,111,119,32,40,105,110,32,116,104,97,116,32,111,114,100,101,114,41,32,97,116,32,116,104,101,32,101,110,100,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,103,97,116,104,101,114,101,100,32,97,116,111,109,105,99,97,108,108,121,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,110,111,116,32,110,101,99,101,115,115,97,114,105,108,121,32,97,32,99,111,110,115,105,115,116,101,110,116,32,115,110,97,112,115,104,111,116,32,111,102,32,116,104,101,32,115,116,97,116,101,44,32,98,117,116,32,105,110,115,116,101,97,100,32,113,117,105,116,101,32,101,102,102,105,99,105,101,110,116,108,121,32,103,97,116,104,101,114,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<69,97,99,104,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,104,97,115,32,111,110,101,32,114,117,110,32,113,117,101,117,101,32,116,104,97,116,32,105,116,32,109,97,110,97,103,101,115,46,32,73,102,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,44,32,97,108,108,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,44,32,97,110,100,32,97,108,108,32,100,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,115,104,97,114,101,32,111,110,101,32,114,117,110,32,113,117,101,117,101,46,32,84,104,97,116,32,105,115,44,32,119,101,32,104,97,118,101,32,109,117,108,116,105,112,108,101,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,44,32,111,110,101,32,100,105,114,116,121,32,67,80,85,32,114,117,110,32,113,117,101,117,101,32,97,110,100,32,111,110,101,32,100,105,114,116,121,32,73,79,32,114,117,110,32,113,117,101,117,101,46,32,87,111,114,107,32,99,97,110,32>>,{em,[],[<<110,111,116>>]},<<32,109,105,103,114,97,116,101,32,98,101,116,119,101,101,110,32,116,104,101,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,32,111,102,32,114,117,110,32,113,117,101,117,101,115,46,32,79,110,108,121,32,119,111,114,107,32,105,110,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,32,99,97,110,32,109,105,103,114,97,116,101,32,116,111,32,111,116,104,101,114,32,110,111,114,109,97,108,32,114,117,110,32,113,117,101,117,101,115,46,32,84,104,105,115,32,104,97,115,32,116,111,32,98,101,32,116,97,107,101,110,32,105,110,116,111,32,97,99,99,111,117,110,116,32,119,104,101,110,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,116,111,116,97,108,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,50,56>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2568,17},bounded_fun,[{type,{2568,17},'fun',[{type,{2568,17},product,[{atom,{2568,18},run_queue_lengths_all}]},{type,{2568,44},list,[{var,{2568,45},'RunQueueLength'}]}]},[{type,{2569,7},constraint,[{atom,{2569,7},is_subtype},[{var,{2569,7},'RunQueueLength'},{type,{2569,25},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,114,117,110,116,105,109,101,44,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,46>>]},{p,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,102,111,114,32,97,108,108,32,116,104,114,101,97,100,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,97,110,100,32,99,97,110,32,116,104,101,114,101,102,111,114,101,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,119,97,108,108,32,99,108,111,99,107,32,116,105,109,101,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,118,97,108,117,101,32,109,105,103,104,116,32,119,114,97,112,32,100,117,101,32,116,111,32,108,105,109,105,116,97,116,105,111,110,115,32,105,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,112,114,111,118,105,100,101,100,32,98,121,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,116,104,97,116,32,105,115,32,117,115,101,100,46>>]}]},{p,[],[<<69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,115,116,97,116,105,115,116,105,99,115,40,114,117,110,116,105,109,101,41,46,10,123,49,54,57,48,44,49,54,50,48,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,55,49>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2570,17},bounded_fun,[{type,{2570,17},'fun',[{type,{2570,17},product,[{atom,{2570,18},runtime}]},{type,{2570,30},tuple,[{var,{2570,31},'Total_Run_Time'},{var,{2570,47},'Time_Since_Last_Call'}]}]},[{type,{2571,7},constraint,[{atom,{2571,7},is_subtype},[{var,{2571,7},'Total_Run_Time'},{type,{2571,25},non_neg_integer,[]}]]},{type,{2572,7},constraint,[{atom,{2572,7},is_subtype},[{var,{2572,7},'Time_Since_Last_Call'},{type,{2572,31},non_neg_integer,[]}]]}]]}]}}]}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,100,101,115,99,114,105,98,105,110,103,32,104,111,119,32,109,117,99,104,32,116,105,109,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<110,111,114,109,97,108>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,114,116,121,32,67,80,85>>]},<<32,115,99,104,101,100,117,108,101,114,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,104,97,118,101,32,98,101,101,110,32,98,117,115,121,46,32,84,104,105,115,32,118,97,108,117,101,32,105,115,32,110,111,114,109,97,108,108,121,32,97,32,98,101,116,116,101,114,32,105,110,100,105,99,97,116,111,114,32,111,102,32,104,111,119,32,109,117,99,104,32,108,111,97,100,32,97,110,32,69,114,108,97,110,103,32,110,111,100,101,32,105,115,32,117,110,100,101,114,32,105,110,115,116,101,97,100,32,111,102,32,108,111,111,107,105,110,103,32,97,116,32,116,104,101,32,67,80,85,32,117,116,105,108,105,122,97,116,105,111,110,32,112,114,105,118,105,100,101,100,32,98,121,32,116,111,111,108,115,32,115,117,99,104,32,97,115,32>>,{code,[],[<<116,111,112>>]},<<32,111,114,32>>,{code,[],[<<115,121,115,115,116,97,116>>]},<<46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,97,108,115,111,32,105,110,99,108,117,100,101,115,32,116,105,109,101,32,119,104,101,114,101,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,105,115,32,119,97,105,116,105,110,103,32,102,111,114,32,115,111,109,101,32,111,116,104,101,114,32,114,101,97,115,111,117,114,99,101,32,40,115,117,99,104,32,97,115,32,97,110,32,105,110,116,101,114,110,97,108,32,109,117,116,101,120,41,32,116,111,32,98,101,32,97,118,97,105,108,97,98,108,101,32,98,117,116,32,100,111,101,115,32,110,111,116,32,117,115,101,32,116,104,101,32,67,80,85,46,32,73,110,32,111,114,100,101,114,32,116,111,32,98,101,116,116,101,114,32,117,110,100,101,114,115,116,97,110,100,32,119,104,97,116,32,97,32,115,99,104,101,100,117,108,101,114,32,105,115,32,98,117,115,121,32,100,111,105,110,103,32,121,111,117,32,99,97,110,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<109,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103>>]},<<46>>]},{p,[],[<<84,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,97,32,98,117,115,121,32,115,99,104,101,100,117,108,101,114,32,105,115,32,119,104,101,110,32,105,116,32,105,115,32,110,111,116,32,105,100,108,101,32,97,110,100,32,110,111,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,119,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<98,117,115,121,32,119,97,105,116,105,110,103>>]},<<32,102,111,114,32,110,101,119,32,119,111,114,107,44,32,116,104,97,116,32,105,115,58>>]},{ul,[],[{li,[],[<<69,120,101,99,117,116,105,110,103,32,112,114,111,99,101,115,115,32,99,111,100,101>>]},{li,[],[<<69,120,101,99,117,116,105,110,103,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,111,114,32,78,73,70,32,99,111,100,101>>]},{li,[],[<<69,120,101,99,117,116,105,110,103,32,66,73,70,115,44,32,111,114,32,97,110,121,32,111,116,104,101,114,32,114,117,110,116,105,109,101,32,104,97,110,100,108,105,110,103>>]},{li,[],[<<71,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,110,103>>]},{li,[],[<<72,97,110,100,108,105,110,103,32,97,110,121,32,111,116,104,101,114,32,109,101,109,111,114,121,32,109,97,110,97,103,101,109,101,110,116>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,32,115,99,104,101,100,117,108,101,114,32,99,97,110,32,97,108,115,111,32,98,101,32,98,117,115,121,32,101,118,101,110,32,105,102,32,116,104,101,32,79,83,32,104,97,115,32,115,99,104,101,100,117,108,101,100,32,111,117,116,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,117,115,101,32,116,104,101,32,109,111,100,117,108,101,32>>,{a,[{href,<<114,117,110,116,105,109,101,95,116,111,111,108,115,58,115,99,104,101,100,117,108,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114>>]}]},<<32,105,110,115,116,101,97,100,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,100,105,114,101,99,116,108,121,32,97,115,32,105,116,32,112,114,111,118,105,100,101,115,32,97,110,32,101,97,115,105,101,114,32,119,97,121,32,116,111,32,103,101,116,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,116,104,97,116,32,121,111,117,32,117,115,117,97,108,108,121,32,119,97,110,116,46>>]}]},{p,[],[<<73,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,110,97,98,108,101,100>>]},<<32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32,119,105,116,104,32>>,{code,[],[<<123,83,99,104,101,100,117,108,101,114,73,100,44,32,65,99,116,105,118,101,84,105,109,101,44,32,84,111,116,97,108,84,105,109,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<83,99,104,101,100,117,108,101,114,73,100>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,73,68,32,111,102,32,116,104,101,32,115,99,104,101,100,117,108,101,114,44,32>>,{code,[],[<<65,99,116,105,118,101,84,105,109,101>>]},<<32,105,115,32,116,104,101,32,100,117,114,97,116,105,111,110,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,104,97,115,32,98,101,101,110,32,98,117,115,121,44,32,97,110,100,32>>,{code,[],[<<84,111,116,97,108,84,105,109,101>>]},<<32,105,115,32,116,104,101,32,116,111,116,97,108,32,116,105,109,101,32,100,117,114,97,116,105,111,110,32,115,105,110,99,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]}]},<<32,97,99,116,105,118,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,99,32,115,99,104,101,100,117,108,101,114,46,32,84,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,116,117,114,110,101,100,32,105,115,32,117,110,100,101,102,105,110,101,100,32,97,110,100,32,99,97,110,32,98,101,32,115,117,98,106,101,99,116,32,116,111,32,99,104,97,110,103,101,32,98,101,116,119,101,101,110,32,114,101,108,101,97,115,101,115,44,32,79,83,115,44,32,97,110,100,32,115,121,115,116,101,109,32,114,101,115,116,97,114,116,115,46,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,116,111,32,99,97,108,99,117,108,97,116,101,32,114,101,108,97,116,105,118,101,32,118,97,108,117,101,115,32,102,111,114,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,46,32,84,104,101,32>>,{code,[],[<<65,99,116,105,118,101,84,105,109,101>>]},<<32,99,97,110,32,110,101,118,101,114,32,101,120,99,101,101,100,32>>,{code,[],[<<84,111,116,97,108,84,105,109,101>>]},<<46,32,84,104,101,32,108,105,115,116,32,111,102,32,115,99,104,101,100,117,108,101,114,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,117,110,115,111,114,116,101,100,32,97,110,100,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,100,105,102,102,101,114,101,110,116,32,111,114,100,101,114,32,98,101,116,119,101,101,110,32,99,97,108,108,115,46>>]},{p,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,115,97,98,108,101,100>>]},<<32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<84,104,101,32,97,99,116,105,118,97,116,105,111,110,32,116,105,109,101,32,99,97,110,32,100,105,102,102,101,114,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,98,101,116,119,101,101,110,32,115,99,104,101,100,117,108,101,114,115,46,32,67,117,114,114,101,110,116,108,121,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,99,116,105,118,97,116,101,100,32,97,116,32,115,121,115,116,101,109,32,115,116,97,114,116,32,119,104,105,108,101,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,99,116,105,118,97,116,101,100,32,115,111,109,101,32,116,105,109,101,32,97,102,116,101,114,32,116,104,101,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,105,115,32,101,110,97,98,108,101,100,46>>]},{p,[],[<<79,110,108,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,99,104,101,100,117,108,101,114,115,32,116,104,97,116,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,104,97,110,100,108,101,32,67,80,85,32,98,111,117,110,100,32,119,111,114,107,32,105,115,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,102,114,111,109,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,32,73,102,32,121,111,117,32,97,108,115,111,32,119,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115>>]},<<44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,95,97,108,108,41>>]}]},<<32,105,110,115,116,101,97,100,46>>]},{p,[],[<<78,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,119,105,108,108,32,104,97,118,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<49,32,61,60,32,83,99,104,101,100,117,108,101,114,73,100,32,61,60,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46,32,68,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,119,105,108,108,32,104,97,118,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,32,60,32,83,99,104,101,100,117,108,101,114,73,100,32,61,60,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,104,97,110,100,108,101,32,115,112,101,99,105,102,105,99,32,116,121,112,101,115,32,111,102,32,106,111,98,115,46,32,69,118,101,114,121,32,106,111,98,32,105,115,32,97,115,115,105,103,110,101,100,32,116,111,32,97,32,115,112,101,99,105,102,105,99,32,115,99,104,101,100,117,108,101,114,32,116,121,112,101,46,32,74,111,98,115,32,99,97,110,32,109,105,103,114,97,116,101,32,98,101,116,119,101,101,110,32,100,105,102,102,101,114,101,110,116,32,115,99,104,101,100,117,108,101,114,115,32,111,102,32,116,104,101,32,115,97,109,101,32,116,121,112,101,44,32,98,117,116,32,110,101,118,101,114,32,98,101,116,119,101,101,110,32,115,99,104,101,100,117,108,101,114,115,32,111,102,32,100,105,102,102,101,114,101,110,116,32,116,121,112,101,115,46,32,84,104,105,115,32,102,97,99,116,32,104,97,115,32,116,111,32,98,101,32,116,97,107,101,110,32,117,110,100,101,114,32,99,111,110,115,105,100,101,114,97,116,105,111,110,32,119,104,101,110,32,101,118,97,108,117,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,114,101,116,117,114,110,101,100,46>>]}]},{p,[],[<<89,111,117,32,99,97,110,32,117,115,101,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,116,111,32,99,97,108,99,117,108,97,116,101,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,46,32,70,105,114,115,116,32,121,111,117,32,116,97,107,101,32,97,32,115,97,109,112,108,101,32,111,102,32,116,104,101,32,118,97,108,117,101,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41>>]},<<46>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,44,32,116,114,117,101,41,46,10,102,97,108,115,101,10,62,32,84,115,48,32,61,32,108,105,115,116,115,58,115,111,114,116,40,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41,41,44,32,111,107,46,10,111,107>>]}]},{p,[],[<<83,111,109,101,32,116,105,109,101,32,108,97,116,101,114,32,116,104,101,32,117,115,101,114,32,116,97,107,101,115,32,97,110,111,116,104,101,114,32,115,110,97,112,115,104,111,116,32,97,110,100,32,99,97,108,99,117,108,97,116,101,115,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,112,101,114,32,115,99,104,101,100,117,108,101,114,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,84,115,49,32,61,32,108,105,115,116,115,58,115,111,114,116,40,101,114,108,97,110,103,58,115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41,41,44,32,111,107,46,10,111,107,10,62,32,108,105,115,116,115,58,109,97,112,40,102,117,110,40,123,123,73,44,32,65,48,44,32,84,48,125,44,32,123,73,44,32,65,49,44,32,84,49,125,125,41,32,45,62,10,9,123,73,44,32,40,65,49,32,45,32,65,48,41,47,40,84,49,32,45,32,84,48,41,125,32,101,110,100,44,32,108,105,115,116,115,58,122,105,112,40,84,115,48,44,84,115,49,41,41,46,10,91,123,49,44,48,46,57,55,52,51,52,55,52,55,51,48,49,55,55,53,52,56,125,44,10,32,123,50,44,48,46,57,55,52,52,56,52,51,55,56,50,55,53,49,52,52,52,125,44,10,32,123,51,44,48,46,57,57,57,53,57,48,50,51,54,49,54,54,57,48,52,53,125,44,10,32,123,52,44,48,46,57,55,51,56,48,49,50,53,57,54,53,55,50,49,54,49,125,44,10,32,123,53,44,48,46,57,55,49,55,57,53,54,54,54,55,48,49,56,49,48,51,125,44,10,32,123,54,44,48,46,57,55,51,57,50,51,53,56,52,54,52,50,48,55,52,49,125,44,10,32,123,55,44,48,46,57,55,51,50,51,55,48,51,51,48,55,55,56,55,54,125,44,10,32,123,56,44,48,46,57,55,52,49,50,57,55,50,57,51,50,52,56,54,53,54,125,93>>]}]},{p,[],[<<85,115,105,110,103,32,116,104,101,32,115,97,109,101,32,115,110,97,112,115,104,111,116,115,32,116,111,32,99,97,108,99,117,108,97,116,101,32,97,32,116,111,116,97,108,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,58>>]},{pre,[],[{code,[],[<<62,32,123,65,44,32,84,125,32,61,32,108,105,115,116,115,58,102,111,108,100,108,40,102,117,110,40,123,123,95,44,32,65,48,44,32,84,48,125,44,32,123,95,44,32,65,49,44,32,84,49,125,125,44,32,123,65,105,44,84,105,125,41,32,45,62,10,9,123,65,105,32,43,32,40,65,49,32,45,32,65,48,41,44,32,84,105,32,43,32,40,84,49,32,45,32,84,48,41,125,32,101,110,100,44,32,123,48,44,32,48,125,44,32,108,105,115,116,115,58,122,105,112,40,84,115,48,44,84,115,49,41,41,44,10,9,84,111,116,97,108,83,99,104,101,100,117,108,101,114,85,116,105,108,105,122,97,116,105,111,110,32,61,32,65,47,84,46,10,48,46,57,55,54,57,49,51,54,56,48,51,55,54,52,56,50,53>>]}]},{p,[],[<<84,111,116,97,108,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,119,105,108,108,32,101,113,117,97,108,32>>,{code,[],[<<49,46,48>>]},<<32,119,104,101,110,32,97,108,108,32,115,99,104,101,100,117,108,101,114,115,32,104,97,118,101,32,98,101,101,110,32,97,99,116,105,118,101,32,97,108,108,32,116,104,101,32,116,105,109,101,32,98,101,116,119,101,101,110,32,116,104,101,32,116,119,111,32,109,101,97,115,117,114,101,109,101,110,116,115,46>>]},{p,[],[<<65,110,111,116,104,101,114,32,40,112,114,111,98,97,98,108,121,32,109,111,114,101,41,32,117,115,101,102,117,108,32,118,97,108,117,101,32,105,115,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,111,116,97,108,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,119,101,105,103,104,116,101,100,32,97,103,97,105,110,115,116,32,109,97,120,105,109,117,109,32,97,109,111,117,110,116,32,111,102,32,97,118,97,105,108,97,98,108,101,32,67,80,85,32,116,105,109,101,58>>]},{pre,[],[{code,[],[<<62,32,87,101,105,103,104,116,101,100,83,99,104,101,100,117,108,101,114,85,116,105,108,105,122,97,116,105,111,110,32,61,32,40,84,111,116,97,108,83,99,104,101,100,117,108,101,114,85,116,105,108,105,122,97,116,105,111,110,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,40,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41,41,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,47,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101,41,46,10,48,46,57,55,54,57,49,51,54,56,48,51,55,54,52,56,50,53>>]}]},{p,[],[<<84,104,105,115,32,119,101,105,103,104,116,101,100,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,119,105,108,108,32,114,101,97,99,104,32>>,{code,[],[<<49,46,48>>]},<<32,119,104,101,110,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,99,116,105,118,101,32,116,104,101,32,115,97,109,101,32,97,109,111,117,110,116,32,111,102,32,116,105,109,101,32,97,115,32,109,97,120,105,109,117,109,32,97,118,97,105,108,97,98,108,101,32,67,80,85,32,116,105,109,101,46,32,73,102,32,109,111,114,101,32,115,99,104,101,100,117,108,101,114,115,32,101,120,105,115,116,32,116,104,97,110,32,97,118,97,105,108,97,98,108,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,105,115,32,118,97,108,117,101,32,109,97,121,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32>>,{code,[],[<<49,46,48>>]},<<46>>]},{p,[],[<<65,115,32,111,102,32,69,82,84,83,32,118,101,114,115,105,111,110,32,57,46,48,44,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,119,105,108,108,32,97,115,32,100,101,102,97,117,108,116,32,104,97,118,101,32,109,111,114,101,32,115,99,104,101,100,117,108,101,114,115,32,116,104,97,110,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,84,104,105,115,32,100,117,101,32,116,111,32,116,104,101,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>]},<<32,105,115,32,98,121,32,100,101,102,97,117,108,116,32,100,105,115,97,98,108,101,100,46,32,84,111,32,101,110,97,98,108,101,32,105,116,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,44,32,116,114,117,101,41>>]}]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,50,56,57>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2573,17},bounded_fun,[{type,{2573,17},'fun',[{type,{2573,17},product,[{atom,{2573,18},scheduler_wall_time}]},{type,{2573,42},union,[{type,{2573,42},list,[{type,{2573,43},tuple,[{var,{2573,44},'SchedulerId'},{var,{2573,57},'ActiveTime'},{var,{2573,69},'TotalTime'}]}]},{atom,{2573,83},undefined}]}]},[{type,{2574,7},constraint,[{atom,{2574,7},is_subtype},[{var,{2574,7},'SchedulerId'},{type,{2574,22},pos_integer,[]}]]},{type,{2575,7},constraint,[{atom,{2575,7},is_subtype},[{var,{2575,7},'ActiveTime'},{type,{2575,22},non_neg_integer,[]}]]},{type,{2576,7},constraint,[{atom,{2576,7},is_subtype},[{var,{2576,7},'TotalTime'},{type,{2576,22},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66,48,49>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41>>]}]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,97,108,115,111,32,105,110,99,108,117,100,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,108,108,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,46>>]},{p,[],[<<68,105,114,116,121,32,73,79,32,115,99,104,101,100,117,108,101,114,115,32,119,105,108,108,32,104,97,118,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},{code,[],[<<32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},{code,[],[<<32,60,32,83,99,104,101,100,117,108,101,114,73,100,32,61,60,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41,32,43,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41,32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,119,111,114,107,32,101,120,101,99,117,116,105,110,103,32,111,110,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,101,120,112,101,99,116,101,100,32,116,111,32,109,97,105,110,108,121,32,119,97,105,116,32,102,111,114,32,73,47,79,46,32,84,104,97,116,32,105,115,44,32,119,104,101,110,32,121,111,117,32,103,101,116,32,104,105,103,104,32,115,99,104,101,100,117,108,101,114,32,117,116,105,108,105,122,97,116,105,111,110,32,111,110,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,44,32,67,80,85,32,117,116,105,108,105,122,97,116,105,111,110,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,101,120,112,101,99,116,101,100,32,116,111,32,98,101,32,104,105,103,104,32,100,117,101,32,116,111,32,116,104,105,115,32,119,111,114,107,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,51,52>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2577,17},bounded_fun,[{type,{2577,17},'fun',[{type,{2577,17},product,[{atom,{2577,18},scheduler_wall_time_all}]},{type,{2577,46},union,[{type,{2577,46},list,[{type,{2577,47},tuple,[{var,{2577,48},'SchedulerId'},{var,{2577,61},'ActiveTime'},{var,{2577,73},'TotalTime'}]}]},{atom,{2577,87},undefined}]}]},[{type,{2578,7},constraint,[{atom,{2578,7},is_subtype},[{var,{2578,7},'SchedulerId'},{type,{2578,22},pos_integer,[]}]]},{type,{2579,7},constraint,[{atom,{2579,7},is_subtype},[{var,{2579,7},'ActiveTime'},{type,{2579,22},non_neg_integer,[]}]]},{type,{2580,7},constraint,[{atom,{2580,7},is_subtype},[{var,{2580,7},'TotalTime'},{type,{2580,22},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,54,50>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2581,3},bounded_fun,[{type,{2581,3},'fun',[{type,{2581,3},product,[{atom,{2581,4},total_active_tasks}]},{var,{2581,27},'ActiveTasks'}]},[{type,{2582,7},constraint,[{atom,{2582,7},is_subtype},[{var,{2582,7},'ActiveTasks'},{type,{2582,22},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,97,99,116,105,118,101,95,116,97,115,107,115,95,97,108,108,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,55,51>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2583,3},bounded_fun,[{type,{2583,3},'fun',[{type,{2583,3},product,[{atom,{2583,4},total_active_tasks_all}]},{var,{2583,31},'ActiveTasks'}]},[{type,{2584,7},constraint,[{atom,{2584,7},is_subtype},[{var,{2584,7},'ActiveTasks'},{type,{2584,22},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,56,52>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2585,17},bounded_fun,[{type,{2585,17},'fun',[{type,{2585,17},product,[{atom,{2585,18},total_run_queue_lengths}]},{var,{2585,46},'TotalRunQueueLengths'}]},[{type,{2586,7},constraint,[{atom,{2586,7},is_subtype},[{var,{2586,7},'TotalRunQueueLengths'},{type,{2586,31},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,51>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<108,105,115,116,115,58,115,117,109,40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,114,117,110,95,113,117,101,117,101,95,108,101,110,103,116,104,115,95,97,108,108,41>>]}]},{code,[],[<<41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,52,57,53>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2587,17},bounded_fun,[{type,{2587,17},'fun',[{type,{2587,17},product,[{atom,{2587,18},total_run_queue_lengths_all}]},{var,{2587,50},'TotalRunQueueLengths'}]},[{type,{2588,7},constraint,[{atom,{2588,7},is_subtype},[{var,{2588,7},'TotalRunQueueLengths'},{type,{2588,31},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,statistics,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2534}],[<<115,116,97,116,105,115,116,105,99,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,119,97,108,108,32,99,108,111,99,107,46,32>>,{code,[],[<<119,97,108,108,95,99,108,111,99,107>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,32,116,104,101,32,115,97,109,101,32,109,97,110,110,101,114,32,97,115,32>>,{code,[],[<<114,117,110,116,105,109,101>>]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,114,101,97,108,32,116,105,109,101,32,105,115,32,109,101,97,115,117,114,101,100,32,97,115,32,111,112,112,111,115,101,100,32,116,111,32,114,117,110,116,105,109,101,32,111,114,32,67,80,85,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,48,54>>,signature => [{attribute,{2534,2},spec,{{statistics,1},[{type,{2589,17},bounded_fun,[{type,{2589,17},'fun',[{type,{2589,17},product,[{atom,{2589,18},wall_clock}]},{type,{2589,33},tuple,[{var,{2589,34},'Total_Wallclock_Time'},{var,{2590,34},'Wallclock_Time_Since_Last_Call'}]}]},[{type,{2591,7},constraint,[{atom,{2591,7},is_subtype},[{var,{2591,7},'Total_Wallclock_Time'},{type,{2591,31},non_neg_integer,[]}]]},{type,{2592,7},constraint,[{atom,{2592,7},is_subtype},[{var,{2592,7},'Wallclock_Time_Since_Last_Call'},{type,{2592,41},non_neg_integer,[]}]]}]]}]}}]}},{{function,suspend_process,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1945}],[<<115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,49>>],#{<<101,110>> => [{p,[],[<<83,117,115,112,101,110,100,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,44,32,91,93,41>>]}]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,49,55>>,signature => [{attribute,{1945,2},spec,{{erlang,suspend_process,1},[{type,{1945,29},bounded_fun,[{type,{1945,29},'fun',[{type,{1945,29},product,[{var,{1945,30},'Suspendee'}]},{atom,{1945,44},true}]},[{type,{1946,7},constraint,[{atom,{1946,7},is_subtype},[{var,{1946,7},'Suspendee'},{type,{1946,20},pid,[]}]]}]]}]}}]}},{{function,suspend_process,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1929}],[<<115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>],#{<<101,110>> => [{p,[],[<<73,110,99,114,101,97,115,101,115,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,97,110,100,32,112,117,116,115,32,105,116,32,105,110,32,116,104,101,32,115,117,115,112,101,110,100,101,100,32,115,116,97,116,101,32,105,102,32,105,116,32,105,115,32,110,111,116,32,97,108,114,101,97,100,121,32,105,110,32,116,104,97,116,32,115,116,97,116,101,46,32,65,32,115,117,115,112,101,110,100,101,100,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,115,99,104,101,100,117,108,101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,32,117,110,116,105,108,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,115,32,98,101,101,110,32,114,101,115,117,109,101,100,46>>]},{p,[],[<<65,32,112,114,111,99,101,115,115,32,99,97,110,32,98,101,32,115,117,115,112,101,110,100,101,100,32,98,121,32,109,117,108,116,105,112,108,101,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,99,97,110,32,98,101,32,115,117,115,112,101,110,100,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,98,121,32,97,32,115,105,110,103,108,101,32,112,114,111,99,101,115,115,46,32,65,32,115,117,115,112,101,110,100,101,100,32,112,114,111,99,101,115,115,32,100,111,101,115,32,110,111,116,32,108,101,97,118,101,32,116,104,101,32,115,117,115,112,101,110,100,101,100,32,115,116,97,116,101,32,117,110,116,105,108,32,105,116,115,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,114,101,97,99,104,101,115,32,122,101,114,111,46,32,84,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,102,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,100,101,99,114,101,97,115,101,100,32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,115,117,109,101,95,112,114,111,99,101,115,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,114,101,115,117,109,101,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]}]},<<32,105,115,32,99,97,108,108,101,100,32,98,121,32,116,104,101,32,115,97,109,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,99,97,108,108,101,100,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]},<<46,32,65,108,108,32,105,110,99,114,101,97,115,101,100,32,115,117,115,112,101,110,100,32,99,111,117,110,116,115,32,111,110,32,111,116,104,101,114,32,112,114,111,99,101,115,115,101,115,32,97,99,113,117,105,114,101,100,32,98,121,32,97,32,112,114,111,99,101,115,115,32,97,114,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,99,114,101,97,115,101,100,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,116,101,114,109,105,110,97,116,101,115,46>>]},{p,[],[<<79,112,116,105,111,110,115,32,40>>,{code,[],[<<79,112,116>>]},<<115,41,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]}]},{dd,[],[{p,[],[<<65,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,101,118,101,110,116,117,97,108,108,121,32,115,117,115,112,101,110,100,115,32,117,110,108,101,115,115,32,105,116,32,105,115,32,114,101,115,117,109,101,100,32,98,101,102,111,114,101,32,105,116,32,99,111,117,108,100,32,115,117,115,112,101,110,100,46,32,84,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<32,114,101,116,117,114,110,115,32,105,109,109,101,100,105,97,116,101,108,121,44,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,116,104,101,114,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,115,117,115,112,101,110,100,101,100,32,121,101,116,32,111,114,32,110,111,116,46,32,84,104,101,32,112,111,105,110,116,32,105,110,32,116,105,109,101,32,119,104,101,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,115,117,115,112,101,110,100,115,32,99,97,110,110,111,116,32,98,101,32,100,101,100,117,99,101,100,32,102,114,111,109,32,111,116,104,101,114,32,101,118,101,110,116,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,73,116,32,105,115,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32>>,{em,[],[<<101,118,101,110,116,117,97,108,108,121>>]},<<32,115,117,115,112,101,110,100,115,32,40,117,110,108,101,115,115,32,105,116,32,105,115,32,114,101,115,117,109,101,100,41,46,32,73,102,32,110,111,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,111,112,116,105,111,110,115,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<32,105,115,32,98,108,111,99,107,101,100,32,117,110,116,105,108,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,115,117,115,112,101,110,100,101,100,46>>]}]},{dt,[],[{code,[],[<<123,97,115,121,110,99,104,114,111,110,111,117,115,44,32,82,101,112,108,121,84,97,103,125>>]}]},{dd,[],[{p,[],[<<65,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32,87,104,101,110,32,116,104,101,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,104,97,115,32,98,101,101,110,32,112,114,111,99,101,115,115,101,100,44,32,97,32,114,101,112,108,121,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,32,84,104,101,32,114,101,112,108,121,32,105,115,32,111,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,82,101,112,108,121,84,97,103,44,32,83,116,97,116,101,125>>]},<<32,119,104,101,114,101,32>>,{code,[],[<<83,116,97,116,101>>]},<<32,105,115,32,101,105,116,104,101,114,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,105,116,101,100>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,101,120,105,116,101,100,46>>]}]},{dt,[],[{code,[],[<<115,117,115,112,101,110,100,101,100>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,119,32,115,117,115,112,101,110,100,101,100,46>>]}]},{dt,[],[{code,[],[<<110,111,116,95,115,117,115,112,101,110,100,101,100>>]}]},{dd,[],[{p,[],[{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,115,117,115,112,101,110,100,101,100,46,32,84,104,105,115,32,99,97,110,32,111,110,108,121,32,104,97,112,112,101,110,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,105,115,115,117,101,100,32,116,104,105,115,32,114,101,113,117,101,115,116,44,32,104,97,118,101,32,99,97,108,108,101,100,32>>,{code,[],[<<114,101,115,117,109,101,95,112,114,111,99,101,115,115,40,83,117,115,112,101,110,100,101,101,41>>]},<<32,98,101,102,111,114,101,32,103,101,116,116,105,110,103,32,116,104,101,32,114,101,112,108,121,46>>]}]}]},{p,[],[<<65,112,112,97,114,116,32,102,114,111,109,32,116,104,101,32,114,101,112,108,121,32,109,101,115,115,97,103,101,44,32,116,104,101,32>>,{code,[],[<<123,97,115,121,110,99,104,114,111,110,111,117,115,44,32,82,101,112,108,121,84,97,103,125>>]},<<32,111,112,116,105,111,110,32,98,101,104,97,118,101,115,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,111,112,116,105,111,110,32,119,105,116,104,111,117,116,32,114,101,112,108,121,32,116,97,103,46>>]}]},{dt,[],[{code,[],[<<117,110,108,101,115,115,95,115,117,115,112,101,110,100,105,110,103>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,115,117,115,112,101,110,100,101,100,32,117,110,108,101,115,115,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,108,114,101,97,100,121,32,105,115,32,115,117,115,112,101,110,100,105,110,103,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<46,32,73,102,32>>,{code,[],[<<117,110,108,101,115,115,95,115,117,115,112,101,110,100,105,110,103>>]},<<32,105,115,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<44,32,97,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,105,115,32,115,101,110,116,32,117,110,108,101,115,115,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,108,114,101,97,100,121,32,105,115,32,115,117,115,112,101,110,100,105,110,103,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,111,114,32,105,102,32,97,32,115,117,115,112,101,110,100,32,114,101,113,117,101,115,116,32,97,108,114,101,97,100,121,32,104,97,115,32,98,101,101,110,32,115,101,110,116,32,97,110,100,32,105,115,32,105,110,32,116,114,97,110,115,105,116,46,32,73,102,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,108,114,101,97,100,121,32,105,115,32,115,117,115,112,101,110,100,105,110,103,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<44,32,111,114,32,105,102,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<97,115,121,110,99,104,114,111,110,111,117,115>>]},<<32,97,110,100,32,97,32,115,101,110,100,32,114,101,113,117,101,115,116,32,97,108,114,101,97,100,121,32,105,115,32,105,110,32,116,114,97,110,115,105,116,44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,97,110,100,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,114,101,109,97,105,110,115,32,117,110,99,104,97,110,103,101,100,46>>]}]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,115,112,101,110,100,32,99,111,117,110,116,32,111,110,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,105,110,99,114,101,97,115,101,100,44,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,66,73,70,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<89,111,117,32,99,97,110,32,101,97,115,105,108,121,32,99,114,101,97,116,101,32,100,101,97,100,108,111,99,107,115,32,105,102,32,112,114,111,99,101,115,115,101,115,32,115,117,115,112,101,110,100,115,32,101,97,99,104,32,111,116,104,101,114,32,40,100,105,114,101,99,116,108,121,32,111,114,32,105,110,32,99,105,114,99,108,101,115,41,46,32,73,110,32,69,82,84,83,32,118,101,114,115,105,111,110,115,32,112,114,105,111,114,32,116,111,32,69,82,84,83,32,118,101,114,115,105,111,110,32,49,48,46,48,44,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,112,114,101,118,101,110,116,101,100,32,115,117,99,104,32,100,101,97,100,108,111,99,107,115,44,32,98,117,116,32,116,104,105,115,32,112,114,101,118,101,110,116,105,111,110,32,104,97,115,32,110,111,119,32,98,101,101,110,32,114,101,109,111,118,101,100,32,100,117,101,32,116,111,32,112,101,114,102,111,114,109,97,110,99,101,32,114,101,97,115,111,110,115,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,116,104,101,32,115,97,109,101,32,112,114,111,99,101,115,115,32,97,115,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,115,117,115,112,101,110,100,95,112,114,111,99,101,115,115,47,50>>]},<<46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,105,115,32,110,111,116,32,97,108,105,118,101,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,114,101,115,105,100,101,115,32,111,110,32,97,110,111,116,104,101,114,32,110,111,100,101,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<79,112,116,76,105,115,116>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,32,111,102,32,118,97,108,105,100,32>>,{code,[],[<<79,112,116>>]},<<115,46>>]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[<<73,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<83,117,115,112,101,110,100,101,101>>]},<<32,104,97,115,32,98,101,101,110,32,115,117,115,112,101,110,100,101,100,32,109,111,114,101,32,116,105,109,101,115,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,116,104,97,110,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,105,110,116,101,114,110,97,108,32,100,97,116,97,32,115,116,114,117,99,116,117,114,101,115,46,32,84,104,101,32,115,121,115,116,101,109,32,108,105,109,105,116,32,105,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,50,44,48,48,48,44,48,48,48,44,48,48,48,32,115,117,115,112,101,110,100,115,32,97,110,100,32,119,105,108,108,32,110,101,118,101,114,32,98,101,32,108,111,119,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,53,51,50>>,signature => [{attribute,{1929,2},spec,{{erlang,suspend_process,2},[{type,{1929,29},bounded_fun,[{type,{1929,29},'fun',[{type,{1929,29},product,[{var,{1929,30},'Suspendee'},{var,{1929,41},'OptList'}]},{type,{1929,53},boolean,[]}]},[{type,{1930,7},constraint,[{atom,{1930,7},is_subtype},[{var,{1930,7},'Suspendee'},{type,{1930,20},pid,[]}]]},{type,{1931,7},constraint,[{atom,{1931,7},is_subtype},[{var,{1931,7},'OptList'},{type,{1931,18},list,[{var,{1931,19},'Opt'}]}]]},{type,{1932,7},constraint,[{atom,{1932,7},is_subtype},[{var,{1932,7},'Opt'},{type,{1932,14},union,[{atom,{1932,14},unless_suspending},{atom,{1932,34},asynchronous},{type,{1932,49},tuple,[{atom,{1932,50},asynchronous},{type,{1932,64},term,[]}]}]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,109,97,120,105,109,117,109,32,100,101,112,116,104,32,111,102,32,99,97,108,108,32,115,116,97,99,107,32,98,97,99,107,45,116,114,97,99,101,115,32,105,110,32,116,104,101,32,101,120,105,116,32,114,101,97,115,111,110,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<39,69,88,73,84,39>>]},<<32,116,117,112,108,101,115,46,32,84,104,101,32,102,108,97,103,32,97,108,115,111,32,108,105,109,105,116,115,32,116,104,101,32,115,116,97,99,107,116,114,97,99,101,32,100,101,112,116,104,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<112,114,111,99,101,115,115,95,105,110,102,111>>]},<<32,105,116,101,109,32>>,{code,[],[<<99,117,114,114,101,110,116,95,115,116,97,99,107,116,114,97,99,101,46>>]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,54,55,56>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2612,25},bounded_fun,[{type,{2612,25},'fun',[{type,{2612,25},product,[{atom,{2612,26},backtrace_depth},{var,{2612,43},'Depth'}]},{var,{2612,53},'OldDepth'}]},[{type,{2613,7},constraint,[{atom,{2613,7},is_subtype},[{var,{2613,7},'Depth'},{type,{2613,16},non_neg_integer,[]}]]},{type,{2614,7},constraint,[{atom,{2614,7},is_subtype},[{var,{2614,7},'OldDepth'},{type,{2614,19},non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<99,112,117,95,116,111,112,111,108,111,103,121>>}],[]},{li,[{name,<<105,110,102,111,95,108,105,115,116>>}],[]},{li,[{name,<<108,101,118,101,108,95,101,110,116,114,121>>}],[]},{li,[{name,<<108,101,118,101,108,95,116,97,103>>}],[]},{li,[{name,<<115,117,98,95,108,101,118,101,108>>}],[]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[{em,[],[<<84,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46>>]},<<32,73,110,115,116,101,97,100,32,111,102,32,117,115,105,110,103,32,116,104,105,115,32,97,114,103,117,109,101,110,116,44,32,117,115,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,114,101,109,111,118,101,100,44,32,97,32,102,105,110,97,108,32,67,80,85,32,116,111,112,111,108,111,103,121,32,116,111,32,117,115,101,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,46>>]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<46,32,84,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121,32,111,118,101,114,114,105,100,101,115,32,97,110,121,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121,46,32,66,121,32,112,97,115,115,105,110,103,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,97,115,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<44,32,116,104,101,32,115,121,115,116,101,109,32,114,101,118,101,114,116,115,32,116,111,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,46,32,84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,101,113,117,97,108,115,32,116,104,101,32,118,97,108,117,101,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,99,112,117,95,116,111,112,111,108,111,103,121,41>>]},<<32,98,101,102,111,114,101,32,116,104,101,32,99,104,97,110,103,101,32,119,97,115,32,109,97,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<84,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,117,115,101,100,32,119,104,101,110,32,98,105,110,100,105,110,103,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,73,102,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,97,108,114,101,97,100,121,32,98,111,117,110,100,32,119,104,101,110,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,99,104,97,110,103,101,100,44,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,115,101,110,116,32,97,32,114,101,113,117,101,115,116,32,116,111,32,114,101,98,105,110,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,110,101,119,32,67,80,85,32,116,111,112,111,108,111,103,121,46>>]},{p,[],[<<84,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,121,112,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,97,110,100,32,109,111,114,101,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,99,112,117,95,116,111,112,111,108,111,103,121,41>>]}]},<<32,97,115,32,119,101,108,108,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,54,57,48>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2615,25},bounded_fun,[{type,{2615,25},'fun',[{type,{2615,25},product,[{atom,{2615,26},cpu_topology},{var,{2615,40},'CpuTopology'}]},{var,{2615,56},'OldCpuTopology'}]},[{type,{2616,7},constraint,[{atom,{2616,7},is_subtype},[{var,{2616,7},'CpuTopology'},{user_type,{2616,22},cpu_topology,[]}]]},{type,{2617,7},constraint,[{atom,{2617,7},is_subtype},[{var,{2617,7},'OldCpuTopology'},{user_type,{2617,25},cpu_topology,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,82,97,110,103,101,32,105,115,32>>,{code,[],[<<49,32,60,61,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,32,60,61,32,78>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,99,104,97,110,103,101,32,105,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,104,97,110,103,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,49,50,32,115,99,104,101,100,117,108,101,114,115,32,97,110,100,32,54,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,111,110,108,105,110,101,44,32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>]},<<32,105,115,32,117,115,101,100,32,116,111,32,115,101,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,116,111,32,54,44,32,116,104,101,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,99,114,101,97,115,101,100,32,98,121,32,104,97,108,102,32,97,115,32,119,101,108,108,44,32,100,111,119,110,32,116,111,32,51,46,32,83,105,109,105,108,97,114,108,121,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,110,99,114,101,97,115,101,115,32,112,114,111,112,111,114,116,105,111,110,97,108,108,121,32,116,111,32,105,110,99,114,101,97,115,101,115,32,105,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,55,51,56>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2618,25},bounded_fun,[{type,{2618,25},'fun',[{type,{2618,25},product,[{atom,{2618,26},dirty_cpu_schedulers_online},{var,{2618,55},'DirtyCPUSchedulersOnline'}]},{var,{2619,33},'OldDirtyCPUSchedulersOnline'}]},[{type,{2620,7},constraint,[{atom,{2620,7},is_subtype},[{var,{2620,7},'DirtyCPUSchedulersOnline'},{type,{2620,35},pos_integer,[]}]]},{type,{2621,7},constraint,[{atom,{2621,7},is_subtype},[{var,{2621,7},'OldDirtyCPUSchedulersOnline'},{type,{2621,38},pos_integer,[]}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,115,121,115,116,101,109,32,102,108,97,103,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<46,32>>,{code,[],[<<65,108,108,111,99>>]},<<32,105,115,32,116,104,101,32,97,108,108,111,99,97,116,111,114,32,116,111,32,97,102,102,101,99,116,44,32,102,111,114,32,101,120,97,109,112,108,101,32>>,{code,[],[<<98,105,110,97,114,121,95,97,108,108,111,99>>]},<<46,32>>,{code,[],[<<70>>]},<<32,105,115,32,116,104,101,32,102,108,97,103,32,116,111,32,99,104,97,110,103,101,32,97,110,100,32>>,{code,[],[<<86>>]},<<32,105,115,32,116,104,101,32,110,101,119,32,118,97,108,117,101,46>>]},{p,[],[<<79,110,108,121,32,97,32,115,117,98,115,101,116,32,111,102,32,97,108,108,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99>>]},<<32,102,108,97,103,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,114,117,110,32,116,105,109,101,46,32,84,104,105,115,32,115,117,98,115,101,116,32,105,115,32,99,117,114,114,101,110,116,108,121,32,111,110,108,121,32,116,104,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99,35,77,95,115,98,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<115,98,99,116>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,116,104,101,32,102,108,97,103,32,119,97,115,32,115,101,116,32,111,114,32>>,{code,[],[<<110,111,116,115,117,112>>]},<<32,105,102,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,55,54,55>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2622,25},bounded_fun,[{type,{2622,25},'fun',[{type,{2622,25},product,[{atom,{2622,26},erts_alloc},{type,{2622,38},tuple,[{var,{2622,39},'Alloc'},{var,{2622,46},'F'},{var,{2622,49},'V'}]}]},{type,{2622,56},union,[{atom,{2622,56},ok},{atom,{2622,61},notsup}]}]},[{type,{2623,7},constraint,[{atom,{2623,7},is_subtype},[{var,{2623,7},'Alloc'},{type,{2623,16},atom,[]}]]},{type,{2624,7},constraint,[{atom,{2624,7},is_subtype},[{var,{2624,7},'F'},{type,{2624,12},atom,[]}]]},{type,{2625,7},constraint,[{atom,{2625,7},is_subtype},[{var,{2625,7},'V'},{type,{2625,12},integer,[]}]]}]]}]}}],since => <<79,84,80,32,50,48,46,50,46,51>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,115,121,115,116,101,109,32,102,108,97,103,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<46,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,105,115,32,97,32,110,111,110,45,110,101,103,97,116,105,118,101,32,105,110,116,101,103,101,114,32,105,110,100,105,99,97,116,105,110,103,32,104,111,119,32,109,97,110,121,32,116,105,109,101,115,32,103,101,110,101,114,97,116,105,111,110,97,108,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,99,97,110,32,98,101,32,100,111,110,101,32,119,105,116,104,111,117,116,32,102,111,114,99,105,110,103,32,97,32,102,117,108,108,115,119,101,101,112,32,99,111,108,108,101,99,116,105,111,110,46,32,84,104,101,32,118,97,108,117,101,32,97,112,112,108,105,101,115,32,116,111,32,110,101,119,32,112,114,111,99,101,115,115,101,115,44,32,119,104,105,108,101,32,112,114,111,99,101,115,115,101,115,32,97,108,114,101,97,100,121,32,114,117,110,110,105,110,103,32,97,114,101,32,110,111,116,32,97,102,102,101,99,116,101,100,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<73,110,32,108,111,119,45,109,101,109,111,114,121,32,115,121,115,116,101,109,115,32,40,101,115,112,101,99,105,97,108,108,121,32,119,105,116,104,111,117,116,32,118,105,114,116,117,97,108,32,109,101,109,111,114,121,41,44,32,115,101,116,116,105,110,103,32,116,104,101,32,118,97,108,117,101,32,116,111,32>>,{code,[],[<<48>>]},<<32,99,97,110,32,104,101,108,112,32,116,111,32,99,111,110,115,101,114,118,101,32,109,101,109,111,114,121,46>>]},{p,[],[<<84,104,105,115,32,118,97,108,117,101,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,116,104,114,111,117,103,104,32,40,79,83,41,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,32>>,{code,[],[<<69,82,76,95,70,85,76,76,83,87,69,69,80,95,65,70,84,69,82>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,55,56,52>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2626,25},bounded_fun,[{type,{2626,25},'fun',[{type,{2626,25},product,[{atom,{2626,26},fullsweep_after},{var,{2626,43},'Number'}]},{var,{2626,54},'OldNumber'}]},[{type,{2627,7},constraint,[{atom,{2627,7},is_subtype},[{var,{2627,7},'Number'},{type,{2627,17},non_neg_integer,[]}]]},{type,{2628,7},constraint,[{atom,{2628,7},is_subtype},[{var,{2628,7},'OldNumber'},{type,{2628,20},non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<84,117,114,110,115,32,111,110,47,111,102,102,32,109,105,99,114,111,115,116,97,116,101,32,97,99,99,111,117,110,116,105,110,103,32,109,101,97,115,117,114,101,109,101,110,116,115,46,32,87,104,101,110,32,112,97,115,115,105,110,103,32,114,101,115,101,116,44,32,97,108,108,32,99,111,117,110,116,101,114,115,32,97,114,101,32,114,101,115,101,116,32,116,111,32,48,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,109,105,99,114,111,115,116,97,116,101,95,97,99,99,111,117,110,116,105,110,103,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,48,51>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2629,25},bounded_fun,[{type,{2629,25},'fun',[{type,{2629,25},product,[{atom,{2629,26},microstate_accounting},{var,{2629,49},'Action'}]},{var,{2629,60},'OldState'}]},[{type,{2630,7},constraint,[{atom,{2630,7},is_subtype},[{var,{2630,7},'Action'},{type,{2630,17},union,[{atom,{2630,17},true},{atom,{2630,24},false},{atom,{2630,32},reset}]}]]},{type,{2631,7},constraint,[{atom,{2631,7},is_subtype},[{var,{2631,7},'OldState'},{type,{2631,19},union,[{atom,{2631,19},true},{atom,{2631,26},false}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,46,32,84,104,101,32,115,105,122,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,119,111,114,100,115,46,32,84,104,101,32,110,101,119,32>>,{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]},<<32,101,102,102,101,99,116,115,32,111,110,108,121,32,112,114,111,99,101,115,115,101,115,32,115,112,97,119,110,101,100,32,97,102,116,101,114,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32>>,{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]},<<32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32>>,{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,112,114,111,99,101,115,115,101,115,32,98,121,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,52>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,49,55>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2632,25},bounded_fun,[{type,{2632,25},'fun',[{type,{2632,25},product,[{atom,{2632,26},min_heap_size},{var,{2632,41},'MinHeapSize'}]},{var,{2632,57},'OldMinHeapSize'}]},[{type,{2633,7},constraint,[{atom,{2633,7},is_subtype},[{var,{2633,7},'MinHeapSize'},{type,{2633,22},non_neg_integer,[]}]]},{type,{2634,7},constraint,[{atom,{2634,7},is_subtype},[{var,{2634,7},'OldMinHeapSize'},{type,{2634,25},non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,46,32,84,104,101,32,115,105,122,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,119,111,114,100,115,46,32,84,104,101,32,110,101,119,32>>,{code,[],[<<109,105,110,95,98,105,110,95,118,104,104,101,97,112,95,115,105,122,101>>]},<<32,101,102,102,101,99,116,115,32,111,110,108,121,32,112,114,111,99,101,115,115,101,115,32,115,112,97,119,110,101,100,32,97,102,116,101,114,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32>>,{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]},<<32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32>>,{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,112,114,111,99,101,115,115,101,115,32,98,121,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,50,44,51,44,52>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,51,50>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2635,25},bounded_fun,[{type,{2635,25},'fun',[{type,{2635,25},product,[{atom,{2635,26},min_bin_vheap_size},{var,{2635,46},'MinBinVHeapSize'}]},{var,{2636,33},'OldMinBinVHeapSize'}]},[{type,{2637,7},constraint,[{atom,{2637,7},is_subtype},[{var,{2637,7},'MinBinVHeapSize'},{type,{2637,26},non_neg_integer,[]}]]},{type,{2638,7},constraint,[{atom,{2638,7},is_subtype},[{var,{2638,7},'OldMinBinVHeapSize'},{type,{2638,29},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,51,66,48,52>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,115,101,116,116,105,110,103,115,32,102,111,114,32,112,114,111,99,101,115,115,101,115,46,32,84,104,101,32,115,105,122,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,119,111,114,100,115,46,32,84,104,101,32,110,101,119,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,101,102,102,101,99,116,115,32,111,110,108,121,32,112,114,111,99,101,115,115,101,115,32,115,112,97,119,110,101,100,32,101,102,116,101,114,32,116,104,101,32,99,104,97,110,103,101,32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,112,114,111,99,101,115,115,101,115,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,50,44,51,44,52>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,47,50>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,52,57>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2639,25},bounded_fun,[{type,{2639,25},'fun',[{type,{2639,25},product,[{atom,{2639,26},max_heap_size},{var,{2639,41},'MaxHeapSize'}]},{var,{2639,57},'OldMaxHeapSize'}]},[{type,{2640,7},constraint,[{atom,{2640,7},is_subtype},[{var,{2640,7},'MaxHeapSize'},{user_type,{2640,22},max_heap_size,[]}]]},{type,{2641,7},constraint,[{atom,{2641,7},is_subtype},[{var,{2641,7},'OldMaxHeapSize'},{user_type,{2641,25},max_heap_size,[]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,101,110,97,98,108,101,100,44,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,105,115,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,77,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,99,97,110,32,98,101,32,98,108,111,99,107,101,100,32,105,110,32,116,119,111,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,46,32,69,105,116,104,101,114,32,97,108,108,32,115,99,104,101,100,117,108,101,114,115,32,98,117,116,32,111,110,101,32,105,115,32,98,108,111,99,107,101,100,44,32,111,114,32,97,108,108,32>>,{em,[],[<<110,111,114,109,97,108>>]},<<32,115,99,104,101,100,117,108,101,114,115,32,98,117,116,32,111,110,101,32,105,115,32,98,108,111,99,107,101,100,46,32,87,104,101,110,32,111,110,108,121,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,108,111,99,107,101,100,44,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,102,114,101,101,32,116,111,32,99,111,110,116,105,110,117,101,32,116,111,32,115,99,104,101,100,117,108,101,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,98,108,111,99,107>>]},<<44,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,111,110,101,32,97,110,100,32,111,110,108,121,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,119,105,108,108,32,101,120,101,99,117,116,101,46,32,73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,117,110,98,108,111,99,107>>]},<<32,97,110,100,32,110,111,32,111,110,101,32,101,108,115,101,32,98,108,111,99,107,115,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,44,32,97,110,100,32,116,104,105,115,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,111,110,108,121,32,111,110,99,101,44,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,117,110,98,108,111,99,107,101,100,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,98,108,111,99,107,95,110,111,114,109,97,108>>]},<<44,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,111,110,101,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,119,105,108,108,32,101,120,101,99,117,116,101,44,32,98,117,116,32,109,117,108,116,105,112,108,101,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,99,97,110,32,101,120,101,99,117,116,101,46,32,73,102,32>>,{code,[],[<<66,108,111,99,107,83,116,97,116,101,32,61,58,61,32,117,110,98,108,111,99,107,95,110,111,114,109,97,108>>]},<<32,97,110,100,32,110,111,32,111,110,101,32,101,108,115,101,32,98,108,111,99,107,115,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,44,32,97,110,100,32,116,104,105,115,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,111,110,108,121,32,111,110,99,101,44,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,117,110,98,108,111,99,107,101,100,46>>]},{p,[],[<<79,110,101,32,112,114,111,99,101,115,115,32,99,97,110,32,98,108,111,99,107,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,46,32,73,102,32,97,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,44,32,105,116,32,109,117,115,116,32,117,110,98,108,111,99,107,32,101,120,97,99,116,108,121,32,97,115,32,109,97,110,121,32,116,105,109,101,115,32,97,115,32,105,116,32,104,97,115,32,98,108,111,99,107,101,100,32,98,101,102,111,114,101,32,105,116,32,104,97,115,32,114,101,108,101,97,115,101,100,32,105,116,115,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,98,108,111,99,107,46,32,73,102,32,97,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,111,114,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,101,120,105,116,115,44,32,105,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,108,101,97,115,101,115,32,105,116,115,32,98,108,111,99,107,105,110,103,32,111,102,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,97,114,101,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<44,32>>,{code,[],[<<98,108,111,99,107,101,100>>]},<<44,32>>,{code,[],[<<98,108,111,99,107,101,100,95,110,111,114,109,97,108>>]},<<44,32,111,114,32>>,{code,[],[<<101,110,97,98,108,101,100>>]},<<46,32,84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,100,101,115,99,114,105,98,101,115,32,116,104,101,32,115,116,97,116,101,32,106,117,115,116,32,97,102,116,101,114,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]},<<32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<66,108,111,99,107,105,110,103,32,111,102,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,110,111,114,109,97,108,108,121,32,110,111,116,32,110,101,101,100,101,100,46,32,73,102,32,121,111,117,32,102,101,101,108,32,116,104,97,116,32,121,111,117,32,110,101,101,100,32,116,111,32,117,115,101,32,116,104,101,115,101,32,102,101,97,116,117,114,101,115,44,32,99,111,110,115,105,100,101,114,32,105,116,32,97,32,102,101,119,32,109,111,114,101,32,116,105,109,101,115,32,97,103,97,105,110,46,32,66,108,111,99,107,105,110,103,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,97,115,32,97,32,108,97,115,116,32,114,101,115,111,114,116,44,32,97,115,32,105,116,32,105,115,32,109,111,115,116,32,108,105,107,101,108,121,32,97,32>>,{em,[],[<<118,101,114,121,32,105,110,101,102,102,105,99,105,101,110,116>>]},<<32,119,97,121,32,116,111,32,115,111,108,118,101,32,116,104,101,32,112,114,111,98,108,101,109,46>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,56,54,55>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2642,25},bounded_fun,[{type,{2642,25},'fun',[{type,{2642,25},product,[{atom,{2642,26},multi_scheduling},{var,{2642,44},'BlockState'}]},{var,{2642,59},'OldBlockState'}]},[{type,{2643,7},constraint,[{atom,{2643,7},is_subtype},[{var,{2643,7},'BlockState'},{type,{2643,21},union,[{atom,{2643,21},block},{atom,{2643,29},unblock},{atom,{2643,39},block_normal},{atom,{2643,54},unblock_normal}]}]]},{type,{2644,7},constraint,[{atom,{2644,7},is_subtype},[{var,{2644,7},'OldBlockState'},{type,{2644,24},union,[{atom,{2644,24},blocked},{atom,{2644,34},disabled},{atom,{2644,45},enabled}]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>}],[]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[{em,[],[<<84,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46>>]},<<32,73,110,115,116,101,97,100,32,111,102,32,117,115,105,110,103,32,116,104,105,115,32,97,114,103,117,109,101,110,116,44,32,117,115,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,87,104,101,110,32,116,104,105,115,32,97,114,103,117,109,101,110,116,32,105,115,32,114,101,109,111,118,101,100,44,32,97,32,102,105,110,97,108,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,32,116,121,112,101,32,116,111,32,117,115,101,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,46>>]}]},{p,[],[<<67,111,110,116,114,111,108,115,32,105,102,32,97,110,100,32,104,111,119,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,111,117,110,100,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]},{p,[],[<<87,104,101,110,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101,44,32,72,111,119,41>>]},<<32,105,115,32,99,97,108,108,101,100,44,32,97,110,32,97,115,121,110,99,104,114,111,110,111,117,115,32,115,105,103,110,97,108,32,105,115,32,115,101,110,116,32,116,111,32,97,108,108,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,44,32,99,97,117,115,105,110,103,32,116,104,101,109,32,116,111,32,116,114,121,32,116,111,32,98,105,110,100,32,111,114,32,117,110,98,105,110,100,32,97,115,32,114,101,113,117,101,115,116,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,97,32,115,99,104,101,100,117,108,101,114,32,102,97,105,108,115,32,116,111,32,98,105,110,100,44,32,116,104,105,115,32,105,115,32,111,102,116,101,110,32,115,105,108,101,110,116,108,121,32,105,103,110,111,114,101,100,44,32,97,115,32,105,116,32,105,115,32,110,111,116,32,97,108,119,97,121,115,32,112,111,115,115,105,98,108,101,32,116,111,32,118,101,114,105,102,121,32,118,97,108,105,100,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,115,46,32,73,102,32,97,110,32,101,114,114,111,114,32,105,115,32,114,101,112,111,114,116,101,100,44,32,97,110,32,101,114,114,111,114,32,101,118,101,110,116,32,105,115,32,108,111,103,103,101,100,46,32,84,111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,32,104,97,118,101,32,98,111,117,110,100,32,97,115,32,114,101,113,117,101,115,116,101,100,44,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<46>>]}]},{p,[],[<<83,99,104,101,100,117,108,101,114,115,32,99,97,110,32,98,101,32,98,111,117,110,100,32,111,110,32,110,101,119,101,114,32,76,105,110,117,120,44,32,83,111,108,97,114,105,115,44,32,70,114,101,101,66,83,68,44,32,97,110,100,32,87,105,110,100,111,119,115,32,115,121,115,116,101,109,115,44,32,98,117,116,32,109,111,114,101,32,115,121,115,116,101,109,115,32,119,105,108,108,32,98,101,32,115,117,112,112,111,114,116,101,100,32,105,110,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,115,46>>]},{p,[],[<<73,110,32,111,114,100,101,114,32,102,111,114,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,116,111,32,98,101,32,97,98,108,101,32,116,111,32,98,105,110,100,32,115,99,104,101,100,117,108,101,114,115,44,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,109,117,115,116,32,98,101,32,107,110,111,119,110,46,32,73,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,102,97,105,108,115,32,116,111,32,100,101,116,101,99,116,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,97,117,116,111,109,97,116,105,99,97,108,108,121,44,32,105,116,32,99,97,110,32,98,101,32,100,101,102,105,110,101,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,100,101,102,105,110,101,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,111,101,115,32,98,121,32,100,101,102,97,117,108,116,32>>,{em,[],[<<110,111,116>>]},<<32,98,105,110,100,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,116,104,101,32,111,110,108,121,32,79,83,32,112,114,111,99,101,115,115,32,98,105,110,100,105,110,103,32,116,104,114,101,97,100,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,105,115,32,105,109,112,114,111,118,101,115,32,116,104,101,32,112,101,114,102,111,114,109,97,110,99,101,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,116,104,101,114,32,79,83,32,112,114,111,99,101,115,115,101,115,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,110,111,116,104,101,114,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,41,32,97,108,115,111,32,98,105,110,100,32,116,104,114,101,97,100,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,101,114,101,32,99,97,110,32,98,101,32,97,32,112,101,114,102,111,114,109,97,110,99,101,32,112,101,110,97,108,116,121,32,105,110,115,116,101,97,100,46,32,83,111,109,101,116,105,109,101,115,32,116,104,105,115,32,112,101,114,102,111,114,109,97,110,99,101,32,112,101,110,97,108,116,121,32,99,97,110,32,98,101,32,115,101,118,101,114,101,46,32,73,102,32,115,111,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,110,111,116,32,98,105,110,100,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,46>>]}]},{p,[],[<<83,99,104,101,100,117,108,101,114,115,32,99,97,110,32,98,101,32,98,111,117,110,100,32,105,110,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,46,32,65,114,103,117,109,101,110,116,32>>,{code,[],[<<72,111,119>>]},<<32,100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,111,117,110,100,32,97,110,100,32,99,97,110,32,98,101,32,97,110,121,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<117,110,98,111,117,110,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,117>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,110,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<116,104,114,101,97,100,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,116,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,111,114,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,112,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,95,110,111,100,101,95,116,104,114,101,97,100,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,110,110,116,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<110,111,95,110,111,100,101,95,112,114,111,99,101,115,115,111,114,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,110,110,112,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<116,104,114,101,97,100,95,110,111,95,110,111,100,101,95,112,114,111,99,101,115,115,111,114,95,115,112,114,101,97,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,116,110,110,112,115>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{dt,[],[{code,[],[<<100,101,102,97,117,108,116,95,98,105,110,100>>]}]},{dd,[],[<<83,97,109,101,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116,32,100,98>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,101,113,117,97,108,115,32>>,{code,[],[<<72,111,119>>]},<<32,98,101,102,111,114,101,32,102,108,97,103,32>>,{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>]},<<32,119,97,115,32,99,104,97,110,103,101,100,46>>]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<110,111,116,115,117,112>>]}]},{dd,[],[<<73,102,32,98,105,110,100,105,110,103,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<72,111,119>>]},<<32,105,115,32,110,111,116,32,111,110,101,32,111,102,32,116,104,101,32,100,111,99,117,109,101,110,116,101,100,32,97,108,116,101,114,110,97,116,105,118,101,115,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,117,110,97,118,97,105,108,97,98,108,101,46>>]}]},{p,[],[<<84,104,101,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,32,116,121,112,101,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<44,32,97,115,32,119,101,108,108,32,97,115,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,56,57,50,51>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2645,25},bounded_fun,[{type,{2645,25},'fun',[{type,{2645,25},product,[{atom,{2645,26},scheduler_bind_type},{var,{2645,47},'How'}]},{var,{2645,55},'OldBindType'}]},[{type,{2646,7},constraint,[{atom,{2646,7},is_subtype},[{var,{2646,7},'How'},{type,{2646,14},union,[{user_type,{2646,14},scheduler_bind_type,[]},{atom,{2646,38},default_bind}]}]]},{type,{2647,7},constraint,[{atom,{2647,7},is_subtype},[{var,{2647,7},'OldBindType'},{user_type,{2647,22},scheduler_bind_type,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,115,99,104,101,100,117,108,101,114,32,119,97,108,108,32,116,105,109,101,32,109,101,97,115,117,114,101,109,101,110,116,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,116,97,116,105,115,116,105,99,115,95,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,116,105,115,116,105,99,115,40,115,99,104,101,100,117,108,101,114,95,119,97,108,108,95,116,105,109,101,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,48,53,48>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2648,25},bounded_fun,[{type,{2648,25},'fun',[{type,{2648,25},product,[{atom,{2648,26},scheduler_wall_time},{var,{2648,47},'Boolean'}]},{var,{2648,60},'OldBoolean'}]},[{type,{2649,7},constraint,[{atom,{2649,7},is_subtype},[{var,{2649,7},'Boolean'},{type,{2649,18},boolean,[]}]]},{type,{2650,7},constraint,[{atom,{2650,7},is_subtype},[{var,{2650,7},'OldBoolean'},{type,{2650,21},boolean,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66,48,49>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,82,97,110,103,101,32,105,115,32>>,{code,[],[<<49,32,60,61,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,32,60,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{p,[],[<<73,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,97,115,32,98,117,105,108,116,32,119,105,116,104,32,115,117,112,112,111,114,116,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115>>]},<<44,32,99,104,97,110,103,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,97,108,115,111,32,99,104,97,110,103,101,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,49,50,32,115,99,104,101,100,117,108,101,114,115,32,97,110,100,32,54,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,111,110,108,105,110,101,44,32,97,110,100,32>>,{code,[],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>]},<<32,105,115,32,117,115,101,100,32,116,111,32,115,101,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,116,111,32,54,44,32,116,104,101,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,99,114,101,97,115,101,100,32,98,121,32,104,97,108,102,32,97,115,32,119,101,108,108,44,32,100,111,119,110,32,116,111,32,51,46,32,83,105,109,105,108,97,114,108,121,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,105,110,99,114,101,97,115,101,115,32,112,114,111,112,111,114,116,105,111,110,97,108,108,121,32,116,111,32,105,110,99,114,101,97,115,101,115,32,105,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,48,54,51>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2651,25},bounded_fun,[{type,{2651,25},'fun',[{type,{2651,25},product,[{atom,{2651,26},schedulers_online},{var,{2651,45},'SchedulersOnline'}]},{var,{2652,33},'OldSchedulersOnline'}]},[{type,{2653,7},constraint,[{atom,{2653,7},is_subtype},[{var,{2653,7},'SchedulersOnline'},{type,{2653,27},pos_integer,[]}]]},{type,{2654,7},constraint,[{atom,{2654,7},is_subtype},[{var,{2654,7},'OldSchedulersOnline'},{type,{2654,30},pos_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,119,105,108,108,32,114,101,99,101,105,118,101,32,116,104,101,32,108,111,103,103,105,110,103,32,109,101,115,115,97,103,101,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,69,82,84,83,46,32,73,102,32,115,101,116,32,116,111,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<44,32,97,108,108,32,108,111,103,103,105,110,103,32,109,101,115,115,97,103,101,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,69,82,84,83,32,119,105,108,108,32,98,101,32,100,114,111,112,112,101,100,46,32,84,104,101,32,109,101,115,115,97,103,101,115,32,119,105,108,108,32,98,101,32,105,110,32,116,104,101,32,102,111,114,109,97,116,58>>]},{pre,[],[{code,[],[<<123,108,111,103,44,76,101,118,101,108,44,70,111,114,109,97,116,44,65,114,103,76,105,115,116,44,77,101,116,97,100,97,116,97,125,32,119,104,101,114,101,10,10,76,101,118,101,108,32,61,32,97,116,111,109,40,41,44,10,70,111,114,109,97,116,32,61,32,115,116,114,105,110,103,40,41,44,10,65,114,103,76,105,115,116,32,61,32,108,105,115,116,40,116,101,114,109,40,41,41,44,10,77,101,116,97,100,97,116,97,32,61,32,35,123,32,112,105,100,32,61,62,32,112,105,100,40,41,44,10,32,32,32,103,114,111,117,112,95,108,101,97,100,101,114,32,61,62,32,112,105,100,40,41,44,10,32,32,32,116,105,109,101,32,58,61,32,108,111,103,103,101,114,58,116,105,109,101,115,116,97,109,112,40,41,44,10,32,32,32,101,114,114,111,114,95,108,111,103,103,101,114,32,58,61,32,35,123,32,101,109,117,108,97,116,111,114,32,58,61,32,116,114,117,101,44,32,116,97,103,32,58,61,32,97,116,111,109,40,41,32,125,10,32,32,32,32,32,32,32,32>>]}]},{p,[],[<<73,102,32,116,104,101,32>>,{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]},<<32,112,114,111,99,101,115,115,32,100,105,101,115,44,32,116,104,105,115,32,102,108,97,103,32,119,105,108,108,32,98,101,32,114,101,115,101,116,32,116,111,32>>,{code,[],[<<108,111,103,103,101,114>>]},<<46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,110,97,109,101,100,32>>,{code,[],[<<108,111,103,103,101,114>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,98,101,32,117,115,101,100,32,98,121,32,116,104,101,32,75,69,82,78,69,76,32>>,{a,[{href,<<107,101,114,110,101,108,58,108,111,103,103,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,103,103,101,114>>]}]},<<46,32,66,101,32,99,97,114,101,102,117,108,32,105,102,32,121,111,117,32,99,104,97,110,103,101,32,105,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,97,115,32,108,111,103,32,109,101,115,115,97,103,101,115,32,109,97,121,32,98,101,32,108,111,115,116,46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,105,110,116,101,114,99,101,112,116,32,101,109,117,108,97,116,111,114,32,108,111,103,32,109,101,115,115,97,103,101,115,44,32,100,111,32,105,116,32,98,121,32,97,100,100,105,110,103,32,97,32,115,112,101,99,105,97,108,105,122,101,100,32,104,97,110,100,108,101,114,32,116,111,32,116,104,101,32,75,69,82,78,69,76,32,108,111,103,103,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,48,57,50>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2655,25},bounded_fun,[{type,{2655,25},'fun',[{type,{2655,25},product,[{atom,{2655,26},system_logger},{var,{2655,41},'Logger'}]},{var,{2655,52},'PrevLogger'}]},[{type,{2656,7},constraint,[{atom,{2656,7},is_subtype},[{var,{2656,7},'Logger'},{type,{2656,17},union,[{atom,{2656,17},logger},{atom,{2656,26},undefined},{type,{2656,38},pid,[]}]}]]},{type,{2657,7},constraint,[{atom,{2657,7},is_subtype},[{var,{2657,7},'PrevLogger'},{type,{2657,21},union,[{atom,{2657,21},logger},{atom,{2657,30},undefined},{type,{2657,42},pid,[]}]}]]}]]}]}}],since => <<79,84,80,32,50,49,46,51>>}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,110,111,100,101,32,116,114,97,99,101,32,99,111,110,116,114,111,108,32,119,111,114,100,32,116,111,32>>,{code,[],[<<84,67,87>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,111,32,98,101,32,97,110,32,117,110,115,105,103,110,101,100,32,105,110,116,101,103,101,114,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,109,97,116,99,104,95,115,112,101,99,35,115,101,116,95,116,99,119>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<115,101,116,95,116,99,119>>]}]},<<32,105,110,32,115,101,99,116,105,111,110,32,34,77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103,34,32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,108,97,103,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,49,50,52>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2658,25},bounded_fun,[{type,{2658,25},'fun',[{type,{2658,25},product,[{atom,{2658,26},trace_control_word},{var,{2658,46},'TCW'}]},{var,{2658,54},'OldTCW'}]},[{type,{2659,7},constraint,[{atom,{2659,7},is_subtype},[{var,{2659,7},'TCW'},{type,{2659,14},non_neg_integer,[]}]]},{type,{2660,7},constraint,[{atom,{2660,7},is_subtype},[{var,{2660,7},'OldTCW'},{type,{2660,17},non_neg_integer,[]}]]}]]}]}}]}},{{function,system_flag,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2612}],[<<115,121,115,116,101,109,95,102,108,97,103,47,50>>],#{<<101,110>> => [{p,[],[<<70,105,110,97,108,105,122,101,115,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<116,105,109,101,32,111,102,102,115,101,116>>]},<<32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46,32,73,102,32,97,110,111,116,104,101,114,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101,32,105,115,32,117,115,101,100,44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,115,116,97,116,101,32,105,115,32,108,101,102,116,32,117,110,99,104,97,110,103,101,100,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,111,108,100,32,115,116,97,116,101,32,105,100,101,110,116,105,102,105,101,114,44,32,116,104,97,116,32,105,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<112,114,101,108,105,109,105,110,97,114,121>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,102,105,110,97,108,105,122,97,116,105,111,110,32,119,97,115,32,112,101,114,102,111,114,109,101,100,32,97,110,100,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,110,111,119,32,102,105,110,97,108,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<102,105,110,97,108>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,119,97,115,32,97,108,114,101,97,100,121,32,105,110,32,116,104,101,32,102,105,110,97,108,32,115,116,97,116,101,46,32,84,104,105,115,32,101,105,116,104,101,114,32,98,101,99,97,117,115,101,32,97,110,111,116,104,101,114,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,116,105,109,101,95,111,102,102,115,101,116,44,32,102,105,110,97,108,105,122,101,41>>]},<<32,99,97,108,108,32,111,114,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,78,111,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]},{li,[],[{p,[],[<<73,102,32>>,{code,[],[<<118,111,108,97,116,105,108,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,99,97,110,110,111,116,32,98,101,32,102,105,110,97,108,105,122,101,100,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,49,51,56>>,signature => [{attribute,{2612,2},spec,{{erlang,system_flag,2},[{type,{2661,4},bounded_fun,[{type,{2661,4},'fun',[{type,{2661,4},product,[{atom,{2661,5},time_offset},{atom,{2661,18},finalize}]},{var,{2661,31},'OldState'}]},[{type,{2662,7},constraint,[{atom,{2662,7},is_subtype},[{var,{2662,7},'OldState'},{type,{2662,19},union,[{atom,{2662,19},preliminary},{atom,{2662,33},final},{atom,{2662,41},volatile}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,46,32,84,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,98,114,111,107,101,110,32,105,110,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,32,105,110,32,111,114,100,101,114,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116,111,32,110,97,118,105,103,97,116,101,46>>]},{dl,[],[{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<77,101,109,111,114,121,32,65,108,108,111,99,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,97,116,111,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,115,105,122,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,108,108,111,99,97,116,111,114,95,115,105,122,101,115>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<67,80,85,32,84,111,112,111,108,111,103,121>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<80,114,111,99,101,115,115,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,115,105,122,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<104,101,97,112,95,115,105,122,101,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<104,101,97,112,95,116,121,112,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,115>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,105,109,105,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,121,115,116,101,109,32,76,105,109,105,116,115>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,116,111,109,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<97,116,111,109,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,116,115,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,116,115,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,111,114,116,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,111,114,116,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,99,111,117,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,99,111,117,110,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,108,105,109,105,116>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,121,115,116,101,109,32,84,105,109,101>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,110,100,95,116,105,109,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,116,97,114,116,95,116,105,109,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,111,102,102,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,119,97,114,112,95,109,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,119,97,114,112,95,109,111,100,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,99,104,101,100,117,108,101,114,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,105,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,95,105,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,99,104,101,100,117,108,101,114,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,109,112,95,115,117,112,112,111,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,109,112,95,115,117,112,112,111,114,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,104,114,101,97,100,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<68,105,115,116,114,105,98,117,116,105,111,110,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,114,101,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,114,101,97,116,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,115,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,99,116,114,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,115,116,95,99,116,114,108>>]}]}]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,105,115,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<83,121,115,116,101,109,32,73,110,102,111,114,109,97,116,105,111,110>>]}]}]},{dd,[],[{p,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,104,101,99,107,95,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,104,101,99,107,95,105,111>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,111,109,112,97,116,95,114,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,111,109,112,97,116,95,114,101,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,101,98,117,103,95,99,111,109,112,105,108,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,101,98,117,103,95,99,111,109,112,105,108,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,114,105,118,101,114,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,114,105,118,101,114,95,118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,102,108,97,118,111,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,109,117,95,102,108,97,118,111,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,109,117,95,116,121,112,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,105,110,102,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,102,111>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,107,101,114,110,101,108,95,112,111,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<107,101,114,110,101,108,95,112,111,108,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,97,100,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,111,97,100,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,97,99,104,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,99,104,105,110,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,105,102,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<110,105,102,95,118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,111,116,112,95,114,101,108,101,97,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,116,112,95,114,101,108,101,97,115,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,108,111,103,103,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,121,115,116,101,109,95,118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,118,101,114,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<118,101,114,115,105,111,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,119,111,114,100,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<119,111,114,100,115,105,122,101>>]}]}]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,49,54,56>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2874,10},'fun',[{type,{2874,10},product,[{atom,{2874,11},version}]},{type,{2874,23},string,[]}]}]}}]}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,111,114,115,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>}],[]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>}],[]},{code,[],[<<97,108,108,111,99,97,116,101,100,95,97,114,101,97,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32,119,105,116,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,97,114,101,97,115,46>>]},{p,[],[<<69,97,99,104,32,116,117,112,108,101,32,99,111,110,116,97,105,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,116,121,112,101,32,111,102,32,109,101,109,111,114,121,32,97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,97,110,100,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,97,108,108,111,99,97,116,101,100,32,109,101,109,111,114,121,32,105,110,32,98,121,116,101,115,32,97,115,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,46,32,87,104,101,110,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,108,108,111,99,97,116,101,100,32,97,110,100,32,117,115,101,100,32,109,101,109,111,114,121,32,105,115,32,112,114,101,115,101,110,116,44,32,97,108,115,111,32,97,32,116,104,105,114,100,32,101,108,101,109,101,110,116,32,105,115,32,112,114,101,115,101,110,116,44,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,117,115,101,100,32,109,101,109,111,114,121,32,105,110,32,98,121,116,101,115,46>>]},{p,[],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,97,108,108,111,99,97,116,101,100,95,97,114,101,97,115,41>>]},<<32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,44,32,97,110,100,32,116,104,101,32,99,111,110,116,101,110,116,32,105,115,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,46,32,84,104,101,32,99,111,110,116,101,110,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,115,32,116,104,101,114,101,102,111,114,101,32,99,104,97,110,103,101,115,32,119,104,101,110,32,110,101,101,100,101,100,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,115,101,32,118,97,108,117,101,115,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,116,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,111,109,101,32,118,97,108,117,101,115,32,97,114,101,32,112,97,114,116,32,111,102,32,111,116,104,101,114,32,118,97,108,117,101,115,44,32,97,110,100,32,115,111,109,101,32,109,101,109,111,114,121,32,97,114,101,97,115,32,97,114,101,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,115,117,108,116,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,111,102,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,101,109,111,114,121,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,101,109,111,114,121,47,48,44,49>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114>>}],[]},{code,[],[<<97,108,108,111,99,97,116,111,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,65,108,108,111,99,97,116,111,114,44,32,86,101,114,115,105,111,110,44,32,70,101,97,116,117,114,101,115,44,32,83,101,116,116,105,110,103,115>>]},<<44,32,119,104,101,114,101,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<65,108,108,111,99,97,116,111,114>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32>>,{code,[],[<<109,97,108,108,111,99,40,41>>]},<<32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,117,115,101,100,46,32,73,102,32>>,{code,[],[<<65,108,108,111,99,97,116,111,114>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<44,32,116,104,101,32>>,{code,[],[<<109,97,108,108,111,99,40,41>>]},<<32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,117,115,101,100,32,99,97,110,110,111,116,32,98,101,32,105,100,101,110,116,105,102,105,101,100,46,32>>,{code,[],[<<103,108,105,98,99>>]},<<32,99,97,110,32,98,101,32,105,100,101,110,116,105,102,105,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<86,101,114,115,105,111,110>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,40,98,117,116,32,110,111,116,32,97,32,115,116,114,105,110,103,41,32,114,101,112,114,101,115,101,110,116,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<109,97,108,108,111,99,40,41>>]},<<32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,117,115,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<70,101,97,116,117,114,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,97,116,111,109,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,116,104,101,32,97,108,108,111,99,97,116,105,111,110,32,102,101,97,116,117,114,101,115,32,117,115,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<83,101,116,116,105,110,103,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,115,117,98,115,121,115,116,101,109,115,44,32,116,104,101,105,114,32,99,111,110,102,105,103,117,114,97,98,108,101,32,112,97,114,97,109,101,116,101,114,115,44,32,97,110,100,32,117,115,101,100,32,118,97,108,117,101,115,46,32,83,101,116,116,105,110,103,115,32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,100,105,102,102,101,114,101,110,116,32,99,111,109,98,105,110,97,116,105,111,110,115,32,111,102,32,112,108,97,116,102,111,114,109,115,44,32,97,108,108,111,99,97,116,111,114,115,44,32,97,110,100,32,97,108,108,111,99,97,116,105,111,110,32,102,101,97,116,117,114,101,115,46,32,77,101,109,111,114,121,32,115,105,122,101,115,32,97,114,101,32,103,105,118,101,110,32,105,110,32,98,121,116,101,115,46>>]}]}]},{p,[],[<<83,101,101,32,97,108,115,111,32,34,83,121,115,116,101,109,32,70,108,97,103,115,32,69,102,102,101,99,116,105,110,103,32,101,114,116,115,95,97,108,108,111,99,34,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99,35,102,108,97,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,116,117,112,108,101>>}],[]},{code,[],[<<123,97,108,108,111,99,97,116,111,114,44,32,65,108,108,111,99,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,97,108,108,111,99,97,116,111,114,46,32,65,115,32,102,114,111,109,32,69,82,84,83,32,53,46,54,46,49,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<123,105,110,115,116,97,110,99,101,44,32,73,110,115,116,97,110,99,101,78,111,44,32,73,110,115,116,97,110,99,101,73,110,102,111,125>>]},<<32,116,117,112,108,101,115,44,32,119,104,101,114,101,32>>,{code,[],[<<73,110,115,116,97,110,99,101,73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,115,112,101,99,105,102,105,99,32,105,110,115,116,97,110,99,101,32,111,102,32,116,104,101,32,97,108,108,111,99,97,116,111,114,46,32,73,102,32>>,{code,[],[<<65,108,108,111,99>>]},<<32,105,115,32,110,111,116,32,97,32,114,101,99,111,103,110,105,122,101,100,32,97,108,108,111,99,97,116,111,114,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102,32>>,{code,[],[<<65,108,108,111,99>>]},<<32,105,115,32,100,105,115,97,98,108,101,100,44,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,105,115,32,104,105,103,104,108,121,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,100,101,112,101,110,100,101,110,116,32,97,110,100,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,111,114,32,114,101,109,111,118,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46,32,73,116,32,119,97,115,32,105,110,105,116,105,97,108,108,121,32,105,110,116,101,110,100,101,100,32,97,115,32,97,32,116,111,111,108,32,119,104,101,110,32,100,101,118,101,108,111,112,105,110,103,32,110,101,119,32,97,108,108,111,99,97,116,111,114,115,44,32,98,117,116,32,97,115,32,105,116,32,99,97,110,32,98,101,32,111,102,32,105,110,116,101,114,101,115,116,32,102,111,114,32,111,116,104,101,114,115,32,105,116,32,104,97,115,32,98,101,101,110,32,98,114,105,101,102,108,121,32,100,111,99,117,109,101,110,116,101,100,46>>]},{p,[],[<<84,104,101,32,114,101,99,111,103,110,105,122,101,100,32,97,108,108,111,99,97,116,111,114,115,32,97,114,101,32,108,105,115,116,101,100,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]}]},<<46,32,73,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,117,112,101,114,32,99,97,114,114,105,101,114,115,32,99,97,110,32,98,101,32,111,98,116,97,105,110,101,100,32,102,114,111,109,32,69,82,84,83,32,56,46,48,32,119,105,116,104,32>>,{code,[],[<<123,97,108,108,111,99,97,116,111,114,44,32,101,114,116,115,95,109,109,97,112,125>>]},<<32,111,114,32,102,114,111,109,32,69,82,84,83,32,53,46,49,48,46,52,59,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,119,104,101,110,32,99,97,108,108,105,110,103,32,119,105,116,104,32>>,{code,[],[<<123,97,108,108,111,99,97,116,111,114,44,32,109,115,101,103,95,97,108,108,111,99,125>>]},<<32,97,108,115,111,32,105,110,99,108,117,100,101,115,32,97,110,32>>,{code,[],[<<123,101,114,116,115,95,109,109,97,112,44,32,95,125>>]},<<32,116,117,112,108,101,32,97,115,32,111,110,101,32,101,108,101,109,101,110,116,32,105,110,32,116,104,101,32,108,105,115,116,46>>]},{p,[],[<<65,102,116,101,114,32,114,101,97,100,105,110,103,32,116,104,101,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]},<<32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,109,111,114,101,32,111,114,32,108,101,115,115,32,115,112,101,97,107,115,32,102,111,114,32,105,116,115,101,108,102,44,32,98,117,116,32,105,116,32,99,97,110,32,98,101,32,119,111,114,116,104,32,101,120,112,108,97,105,110,105,110,103,32,115,111,109,101,32,116,104,105,110,103,115,46,32,67,97,108,108,32,99,111,117,110,116,115,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,98,121,32,116,119,111,32,118,97,108,117,101,115,44,32,116,104,101,32,102,105,114,115,116,32,118,97,108,117,101,32,105,115,32,103,105,103,97,32,99,97,108,108,115,44,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,118,97,108,117,101,32,105,115,32,99,97,108,108,115,46,32>>,{code,[],[<<109,98,99,115>>]},<<32,97,110,100,32>>,{code,[],[<<115,98,99,115>>]},<<32,100,101,110,111,116,101,32,109,117,108,116,105,45,98,108,111,99,107,32,99,97,114,114,105,101,114,115,44,32,97,110,100,32,115,105,110,103,108,101,45,98,108,111,99,107,32,99,97,114,114,105,101,114,115,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,83,105,122,101,115,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,105,110,32,98,121,116,101,115,46,32,87,104,101,110,32,97,32,115,105,122,101,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,101,100,44,32,105,116,32,105,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,115,111,109,101,116,104,105,110,103,46,32,83,105,122,101,115,32,97,110,100,32,97,109,111,117,110,116,115,32,97,114,101,32,111,102,116,101,110,32,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,114,101,101,32,118,97,108,117,101,115,58>>]},{ul,[],[{li,[],[<<84,104,101,32,102,105,114,115,116,32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,118,97,108,117,101,46>>]},{li,[],[<<84,104,101,32,115,101,99,111,110,100,32,105,115,32,116,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,115,105,110,99,101,32,116,104,101,32,108,97,115,116,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,123,97,108,108,111,99,97,116,111,114,44,32,65,108,108,111,99,125,41>>]},<<46>>]},{li,[],[<<84,104,101,32,116,104,105,114,100,32,105,115,32,116,104,101,32,109,97,120,105,109,117,109,32,118,97,108,117,101,32,115,105,110,99,101,32,116,104,101,32,101,109,117,108,97,116,111,114,32,119,97,115,32,115,116,97,114,116,101,100,46>>]}]},{p,[],[<<73,102,32,111,110,108,121,32,111,110,101,32,118,97,108,117,101,32,105,115,32,112,114,101,115,101,110,116,44,32,105,116,32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,118,97,108,117,101,46,32>>,{code,[],[<<102,105,120,95,97,108,108,111,99>>]},<<32,109,101,109,111,114,121,32,98,108,111,99,107,32,116,121,112,101,115,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,98,121,32,116,119,111,32,118,97,108,117,101,115,46,32,84,104,101,32,102,105,114,115,116,32,118,97,108,117,101,32,105,115,32,116,104,101,32,109,101,109,111,114,121,32,112,111,111,108,32,115,105,122,101,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,118,97,108,117,101,32,105,115,32,116,104,101,32,117,115,101,100,32,109,101,109,111,114,121,32,115,105,122,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>}],[]},{code,[],[<<97,108,108,111,99,95,117,116,105,108,95,97,108,108,111,99,97,116,111,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,97,108,108,111,99,97,116,111,114,115,32,117,115,105,110,103,32,116,104,101,32,69,82,84,83,32,105,110,116,101,114,110,97,108,32>>,{code,[],[<<97,108,108,111,99,95,117,116,105,108>>]},<<32,102,114,97,109,101,119,111,114,107,32,97,115,32,97,116,111,109,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,101,114,116,115,95,97,108,108,111,99,35,97,108,108,111,99,95,117,116,105,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<84,104,101,32,97,108,108,111,99,95,117,116,105,108,32,102,114,97,109,101,119,111,114,107>>]},<<32,105,110,32>>,{code,[],[<<101,114,116,115,95,97,108,108,111,99,40,51,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,115,105,122,101,115>>}],[]},{code,[],[<<123,97,108,108,111,99,97,116,111,114,95,115,105,122,101,115,44,32,65,108,108,111,99,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,115,105,122,101,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,97,108,108,111,99,97,116,111,114,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,97,108,108,111,99,97,116,111,114,95,116,117,112,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,123,97,108,108,111,99,97,116,111,114,44,32,65,108,108,111,99,125,41>>]}]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,51,48,49>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2775,10},'fun',[{type,{2775,10},product,[{atom,{2775,11},allocated_areas}]},{type,{2775,31},list,[{type,{2775,33},tuple,any}]}]},{type,{2776,10},bounded_fun,[{type,{2776,10},'fun',[{type,{2776,10},product,[{atom,{2776,11},allocator}]},{type,{2777,18},tuple,[{var,{2777,19},'Allocator'},{var,{2777,30},'Version'},{var,{2777,39},'Features'},{var,{2777,49},'Settings'}]}]},[{type,{2778,7},constraint,[{atom,{2778,7},is_subtype},[{var,{2778,7},'Allocator'},{type,{2778,20},union,[{atom,{2778,20},undefined},{atom,{2778,32},glibc}]}]]},{type,{2779,7},constraint,[{atom,{2779,7},is_subtype},[{var,{2779,7},'Version'},{type,{2779,18},list,[{type,{2779,19},non_neg_integer,[]}]}]]},{type,{2780,7},constraint,[{atom,{2780,7},is_subtype},[{var,{2780,7},'Features'},{type,{2780,19},list,[{type,{2780,20},atom,[]}]}]]},{type,{2781,7},constraint,[{atom,{2781,7},is_subtype},[{var,{2781,7},'Settings'},{type,{2781,19},list,[{type,{2781,20},tuple,[{ann_type,{2781,21},[{var,{2781,21},'Subsystem'},{type,{2781,34},atom,[]}]},{type,{2782,21},list,[{type,{2782,22},tuple,[{ann_type,{2782,23},[{var,{2782,23},'Parameter'},{type,{2782,36},atom,[]}]},{ann_type,{2783,23},[{var,{2783,23},'Value'},{type,{2783,32},term,[]}]}]}]}]}]}]]}]]},{type,{2784,10},bounded_fun,[{type,{2784,10},'fun',[{type,{2784,10},product,[{type,{2784,11},tuple,[{atom,{2784,12},allocator},{var,{2784,23},'Alloc'}]}]},{type,{2784,34},list,[{var,{2784,35},'_'}]}]},[{type,{2785,7},constraint,[{atom,{2785,7},is_subtype},[{var,{2785,7},'Alloc'},{type,{2785,16},atom,[]}]]}]]},{type,{2786,10},bounded_fun,[{type,{2786,10},'fun',[{type,{2786,10},product,[{atom,{2786,11},alloc_util_allocators}]},{type,{2786,37},list,[{var,{2786,38},'Alloc'}]}]},[{type,{2787,7},constraint,[{atom,{2787,7},is_subtype},[{var,{2787,7},'Alloc'},{type,{2787,16},atom,[]}]]}]]},{type,{2788,10},bounded_fun,[{type,{2788,10},'fun',[{type,{2788,10},product,[{type,{2788,11},tuple,[{atom,{2788,12},allocator_sizes},{var,{2788,29},'Alloc'}]}]},{type,{2788,40},list,[{var,{2788,41},'_'}]}]},[{type,{2789,7},constraint,[{atom,{2789,7},is_subtype},[{var,{2789,7},'Alloc'},{type,{2789,16},atom,[]}]]}]]}]}}]}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<99,112,117,95,116,111,112,111,108,111,103,121>>}],[]},{li,[{name,<<99,112,117,95,116,111,112,111,108,111,103,121>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,108,108,32>>,{code,[],[<<76,101,118,101,108,69,110,116,114,121>>]},<<115,32,111,102,32,97,32,108,105,115,116,32,109,117,115,116,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32>>,{code,[],[<<76,101,118,101,108,84,97,103>>]},<<44,32,101,120,99,101,112,116,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,119,104,101,114,101,32,98,111,116,104,32>>,{code,[],[<<110,111,100,101>>]},<<32,97,110,100,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},{code,[],[<<76,101,118,101,108,84,97,103>>]},<<115,32,99,97,110,32,99,111,101,120,105,115,116,46>>]},{li,[{name,<<105,110,102,111,95,108,105,115,116>>}],[]},{li,[{name,<<105,110,102,111,95,108,105,115,116>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<84,104,101,32>>,{code,[],[<<105,110,102,111,95,108,105,115,116,40,41>>]},<<32,99,97,110,32,98,101,32,101,120,116,101,110,100,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{li,[{name,<<108,101,118,101,108,95,101,110,116,114,121>>}],[]},{li,[{name,<<108,101,118,101,108,95,101,110,116,114,121>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[{code,[],[<<123,76,101,118,101,108,84,97,103,44,32,83,117,98,76,101,118,101,108,125,32,61,61,32,123,76,101,118,101,108,84,97,103,44,32,91,93,44,32,83,117,98,76,101,118,101,108,125>>]}]},{li,[{name,<<108,101,118,101,108,95,116,97,103>>}],[]},{li,[{name,<<108,101,118,101,108,95,116,97,103>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<77,111,114,101,32>>,{code,[],[<<76,101,118,101,108,84,97,103>>]},<<115,32,99,97,110,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]},{li,[{name,<<115,117,98,95,108,101,118,101,108>>}],[]}]},{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>}],[]},{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,84,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,117,115,101,100,32,119,104,101,110,32,98,105,110,100,105,110,103,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,84,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,117,115,101,100,32,105,115,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,102,105,110,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,115,101,114,45,100,101,102,105,110,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121>>]},<<44,32,105,102,32,115,117,99,104,32,101,120,105,115,116,115,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,116,101,99,116,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121>>]},<<44,32,105,102,32,115,117,99,104,32,101,120,105,115,116,115,46,32,73,102,32,110,111,32,67,80,85,32,116,111,112,111,108,111,103,121,32,101,120,105,115,116,115,44,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[{code,[],[<<110,111,100,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,78,111,110,45,85,110,105,102,111,114,109,32,77,101,109,111,114,121,32,65,99,99,101,115,115,32,40,78,85,77,65,41,32,110,111,100,101,115,46,32>>,{code,[],[<<116,104,114,101,97,100>>]},<<32,114,101,102,101,114,115,32,116,111,32,104,97,114,100,119,97,114,101,32,116,104,114,101,97,100,115,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,73,110,116,101,108,32,104,121,112,101,114,45,116,104,114,101,97,100,115,41,46>>]},{p,[],[<<65,32,108,101,118,101,108,32,105,110,32,116,101,114,109,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,99,97,110,32,98,101,32,111,109,105,116,116,101,100,32,105,102,32,111,110,108,121,32,111,110,101,32,101,110,116,114,121,32,101,120,105,115,116,115,32,97,110,100,32>>,{code,[],[<<73,110,102,111,76,105,115,116>>]},<<32,105,115,32,101,109,112,116,121,46>>]},{p,[],[{code,[],[<<116,104,114,101,97,100>>]},<<32,99,97,110,32,111,110,108,121,32,98,101,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<99,111,114,101>>]},<<46,32>>,{code,[],[<<99,111,114,101>>]},<<32,99,97,110,32,98,101,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},<<32,111,114,32>>,{code,[],[<<110,111,100,101>>]},<<46,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},<<32,99,97,110,32,98,101,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,111,114,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<110,111,100,101>>]},<<46,32>>,{code,[],[<<110,111,100,101>>]},<<32,99,97,110,32,98,101,32,111,110,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,111,114,32,97,32,115,117,98,108,101,118,101,108,32,116,111,32>>,{code,[],[<<112,114,111,99,101,115,115,111,114>>]},<<46,32,84,104,97,116,32,105,115,44,32,78,85,77,65,32,110,111,100,101,115,32,99,97,110,32,98,101,32,112,114,111,99,101,115,115,111,114,32,105,110,116,101,114,110,97,108,32,111,114,32,112,114,111,99,101,115,115,111,114,32,101,120,116,101,114,110,97,108,46,32,65,32,67,80,85,32,116,111,112,111,108,111,103,121,32,99,97,110,32,99,111,110,115,105,115,116,32,111,102,32,97,32,109,105,120,32,111,102,32,112,114,111,99,101,115,115,111,114,32,105,110,116,101,114,110,97,108,32,97,110,100,32,101,120,116,101,114,110,97,108,32,78,85,77,65,32,110,111,100,101,115,44,32,97,115,32,108,111,110,103,32,97,115,32,101,97,99,104,32,108,111,103,105,99,97,108,32,67,80,85,32,98,101,108,111,110,103,115,32,116,111,32>>,{em,[],[<<111,110,101>>]},<<32,78,85,77,65,32,110,111,100,101,46,32,67,97,99,104,101,32,104,105,101,114,97,114,99,104,121,32,105,115,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,116,121,112,101,44,32,98,117,116,32,119,105,108,108,32,98,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,79,116,104,101,114,32,116,104,105,110,103,115,32,99,97,110,32,97,108,115,111,32,109,97,107,101,32,105,116,32,105,110,116,111,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,83,111,44,32,101,120,112,101,99,116,32,116,104,101,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,116,121,112,101,32,116,111,32,99,104,97,110,103,101,46>>]}]},{dt,[],[{code,[],[<<123,99,112,117,95,116,111,112,111,108,111,103,121,44,32,100,101,102,105,110,101,100,125>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,102,105,110,101,100>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,117,115,101,114,45,100,101,102,105,110,101,100,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,99,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<32,97,110,100,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,99,112,117,95,116,111,112,111,108,111,103,121,44,32,100,101,116,101,99,116,101,100,125>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,116,101,99,116,101,100>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,100,101,116,101,99,116,101,100,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121,121>>]},<<46,32,84,104,101,32,101,109,117,108,97,116,111,114,32,100,101,116,101,99,116,115,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,111,110,32,115,111,109,101,32,110,101,119,101,114,32,76,105,110,117,120,44,32,83,111,108,97,114,105,115,44,32,70,114,101,101,66,83,68,44,32,97,110,100,32,87,105,110,100,111,119,115,32,115,121,115,116,101,109,115,46,32,79,110,32,87,105,110,100,111,119,115,32,115,121,115,116,101,109,32,119,105,116,104,32,109,111,114,101,32,116,104,97,110,32,51,50,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,44,32,116,104,101,32,67,80,85,32,116,111,112,111,108,111,103,121,32,105,115,32,110,111,116,32,100,101,116,101,99,116,101,100,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,99,112,117,95,116,111,112,111,108,111,103,121,44,32,117,115,101,100,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<67,112,117,84,111,112,111,108,111,103,121>>]},<<32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,112,117,95,116,111,112,111,108,111,103,121>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>}],[]},{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,99,111,110,102,105,103,117,114,101,100,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,101,105,116,104,101,114,32,97,110,32,105,110,116,101,103,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,116,104,101,32,99,111,110,102,105,103,117,114,101,100,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>}],[]},{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,97,118,97,105,108,97,98,108,101,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,101,105,116,104,101,114,32,97,110,32,105,110,116,101,103,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,116,104,101,32,97,118,97,105,108,97,98,108,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46,32,84,104,101,32,110,117,109,98,101,114,32,111,102,32,97,118,97,105,108,97,98,108,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,105,115,32,108,101,115,115,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>}],[]},{code,[],[<<108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101,32,111,110,32,116,104,101,32,115,121,115,116,101,109,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,101,105,116,104,101,114,32,97,110,32,105,110,116,101,103,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101,46,32,84,104,101,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,111,110,108,105,110,101,32,105,115,32,108,101,115,115,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,99,111,110,102,105,103,117,114,101,100>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,113,117,111,116,97>>}],[]},{code,[],[<<99,112,117,95,113,117,111,116,97>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,116,101,99,116,101,100,32,67,80,85,32,113,117,111,116,97,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,108,105,109,105,116,101,100,32,98,121,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,115,97,121,105,110,103,32,104,111,119,32,109,97,110,121,32,112,114,111,99,101,115,115,111,114,115,39,32,119,111,114,116,104,32,111,102,32,114,117,110,116,105,109,101,32,119,101,32,103,101,116,32,40,98,101,116,119,101,101,110,32,49,32,97,110,100,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,41,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,107,110,111,119,110>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,99,97,110,110,111,116,32,100,101,116,101,99,116,32,97,32,113,117,111,116,97,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>}],[]},{code,[],[<<117,112,100,97,116,101,95,99,112,117,95,105,110,102,111>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,114,101,114,101,97,100,115,32,116,104,101,32,67,80,85,32,105,110,102,111,114,109,97,116,105,111,110,32,97,118,97,105,108,97,98,108,101,32,97,110,100,32,117,112,100,97,116,101,115,32,105,116,115,32,105,110,116,101,114,110,97,108,108,121,32,115,116,111,114,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,116,111,112,111,108,111,103,121,95,100,101,116,101,99,116,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,101,116,101,99,116,101,100,32,67,80,85,32,116,111,112,111,108,111,103,121>>]},<<32,97,110,100,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,110,102,105,103,117,114,101,100>>]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<111,110,108,105,110,101>>]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<97,118,97,105,108,97,98,108,101>>]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,99,112,117,95,113,117,111,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,112,117,32,113,117,111,116,97>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,67,80,85,32,105,110,102,111,114,109,97,116,105,111,110,32,104,97,115,32,99,104,97,110,103,101,100,32,115,105,110,99,101,32,116,104,101,32,108,97,115,116,32,116,105,109,101,32,105,116,32,119,97,115,32,114,101,97,100,44,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<99,104,97,110,103,101,100>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,99,104,97,110,103,101,100>>]},<<46,32,73,102,32,116,104,101,32,67,80,85,32,105,110,102,111,114,109,97,116,105,111,110,32,104,97,115,32,99,104,97,110,103,101,100,44,32,121,111,117,32,112,114,111,98,97,98,108,121,32,119,97,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<97,100,106,117,115,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101>>]},<<46,32,89,111,117,32,116,121,112,105,99,97,108,108,121,32,119,97,110,116,32,116,111,32,104,97,118,101,32,97,115,32,109,97,110,121,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,108,111,103,105,99,97,108,95,112,114,111,99,101,115,115,111,114,115,95,97,118,97,105,108,97,98,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,32,97,118,97,105,108,97,98,108,101>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,52,53,48>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2797,10},bounded_fun,[{type,{2797,10},'fun',[{type,{2797,10},product,[{atom,{2797,11},cpu_topology}]},{var,{2797,29},'CpuTopology'}]},[{type,{2798,7},constraint,[{atom,{2798,7},is_subtype},[{var,{2798,7},'CpuTopology'},{user_type,{2798,22},cpu_topology,[]}]]}]]},{type,{2799,10},bounded_fun,[{type,{2799,10},'fun',[{type,{2799,10},product,[{type,{2799,11},tuple,[{atom,{2799,12},cpu_topology},{type,{2799,26},union,[{atom,{2799,26},defined},{atom,{2799,36},detected},{atom,{2799,47},used}]}]}]},{var,{2799,57},'CpuTopology'}]},[{type,{2800,7},constraint,[{atom,{2800,7},is_subtype},[{var,{2800,7},'CpuTopology'},{user_type,{2800,22},cpu_topology,[]}]]}]]},{type,{2827,10},'fun',[{type,{2827,10},product,[{type,{2827,11},union,[{atom,{2827,11},logical_processors},{atom,{2828,11},logical_processors_available},{atom,{2829,11},logical_processors_online}]}]},{type,{2829,41},union,[{atom,{2829,41},unknown},{type,{2829,51},pos_integer,[]}]}]},{type,{2873,10},'fun',[{type,{2873,10},product,[{atom,{2873,11},update_cpu_info}]},{type,{2873,31},union,[{atom,{2873,31},changed},{atom,{2873,41},unchanged}]}]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{li,[{name,<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]}]},{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,100,101,102,97,117,108,116,32,112,114,111,99,101,115,115,32,104,101,97,112,32,115,101,116,116,105,110,103,115,58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>}],[]},{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,102,117,108,108,115,119,101,101,112,95,97,102,116,101,114,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32>>,{code,[],[<<102,117,108,108,115,119,101,101,112,95,97,102,116,101,114>>]},<<32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,101,116,116,105,110,103,32,117,115,101,100,32,98,121,32,100,101,102,97,117,108,116,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]},<<32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>}],[]},{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,100,101,102,97,117,108,116,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,101,116,116,105,110,103,115,46,32,65,32,112,114,111,99,101,115,115,32,115,112,97,119,110,101,100,32,111,110,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,98,121,32,97,32>>,{code,[],[<<115,112,97,119,110>>]},<<32,111,114,32>>,{code,[],[<<115,112,97,119,110,95,108,105,110,107>>]},<<32,117,115,101,115,32,116,104,101,115,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,115,101,116,116,105,110,103,115,46,32,84,104,101,32,100,101,102,97,117,108,116,32,115,101,116,116,105,110,103,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,47,50>>]}]},<<46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,47,50,44,51,44,52>>]}]},<<32,99,97,110,32,115,112,97,119,110,32,97,32,112,114,111,99,101,115,115,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,117,115,101,32,116,104,101,32,100,101,102,97,117,108,116,32,115,101,116,116,105,110,103,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,115,105,122,101,115>>}],[]},{code,[],[<<104,101,97,112,95,115,105,122,101,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,118,97,108,105,100,32,104,101,97,112,32,115,105,122,101,115,32,105,110,32,119,111,114,100,115,46,32,65,108,108,32,69,114,108,97,110,103,32,104,101,97,112,115,32,97,114,101,32,115,105,122,101,100,32,102,114,111,109,32,115,105,122,101,115,32,105,110,32,116,104,105,115,32,108,105,115,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,104,101,97,112,95,116,121,112,101>>}],[]},{code,[],[<<104,101,97,112,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,104,101,97,112,32,116,121,112,101,32,117,115,101,100,32,98,121,32,116,104,101,32,99,117,114,114,101,110,116,32,101,109,117,108,97,116,111,114,46,32,79,110,101,32,104,101,97,112,32,116,121,112,101,32,101,120,105,115,116,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<112,114,105,118,97,116,101>>]}]},{dd,[],[<<69,97,99,104,32,112,114,111,99,101,115,115,32,104,97,115,32,97,32,104,101,97,112,32,114,101,115,101,114,118,101,100,32,102,111,114,32,105,116,115,32,117,115,101,32,97,110,100,32,110,111,32,114,101,102,101,114,101,110,99,101,115,32,98,101,116,119,101,101,110,32,104,101,97,112,115,32,111,102,32,100,105,102,102,101,114,101,110,116,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,97,108,108,111,119,101,100,46,32,77,101,115,115,97,103,101,115,32,112,97,115,115,101,100,32,98,101,116,119,101,101,110,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,99,111,112,105,101,100,32,98,101,116,119,101,101,110,32,104,101,97,112,115,46>>]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,97,120,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,45,119,105,100,101,32,109,97,120,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,115,101,116,116,105,110,103,115,32,102,111,114,32,115,112,97,119,110,101,100,32,112,114,111,99,101,115,115,101,115,46,32,84,104,105,115,32,115,101,116,116,105,110,103,32,99,97,110,32,98,101,32,115,101,116,32,117,115,105,110,103,32,116,104,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120,107>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,97,120,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,97,120,101,108>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,73,116,32,99,97,110,32,97,108,115,111,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,114,117,110,116,105,109,101,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,32,97,98,111,117,116,32,116,104,101,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>}],[]},{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>]},<<32,112,114,111,99,101,115,115,32,102,108,97,103,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,101,105,116,104,101,114,32>>,{code,[],[<<111,102,102,95,104,101,97,112>>]},<<32,111,114,32>>,{code,[],[<<111,110,95,104,101,97,112>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,105,115,32,115,101,116,32,98,121,32,116,104,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,104,109,113,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,104,109,113,100>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<109,105,110,95,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,109,105,110,95,104,101,97,112,95,115,105,122,101,44,32,77,105,110,72,101,97,112,83,105,122,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,105,110,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,45,119,105,100,101,32,109,105,110,105,109,117,109,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,115,112,97,119,110,101,100,32,112,114,111,99,101,115,115,101,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,109,105,110,95,98,105,110,95,118,104,101,97,112,95,115,105,122,101,44,32,77,105,110,66,105,110,86,72,101,97,112,83,105,122,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<77,105,110,66,105,110,86,72,101,97,112,83,105,122,101>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,45,119,105,100,101,32,109,105,110,105,109,117,109,32,98,105,110,97,114,121,32,118,105,114,116,117,97,108,32,104,101,97,112,32,115,105,122,101,32,102,111,114,32,115,112,97,119,110,101,100,32,112,114,111,99,101,115,115,101,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,115>>}],[]},{code,[],[<<112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,112,114,111,99,101,115,115,32,97,110,100,32,112,111,114,116,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,54,49,53>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2820,10},'fun',[{type,{2820,10},product,[{atom,{2820,11},fullsweep_after}]},{type,{2820,31},tuple,[{atom,{2820,32},fullsweep_after},{type,{2820,49},non_neg_integer,[]}]}]},{type,{2821,10},'fun',[{type,{2821,10},product,[{atom,{2821,11},garbage_collection}]},{type,{2821,34},list,[{type,{2821,35},tuple,[{type,{2821,36},atom,[]},{type,{2821,44},integer,[]}]}]}]},{type,{2822,10},'fun',[{type,{2822,10},product,[{atom,{2822,11},heap_sizes}]},{type,{2822,26},list,[{type,{2822,27},non_neg_integer,[]}]}]},{type,{2823,10},'fun',[{type,{2823,10},product,[{atom,{2823,11},heap_type}]},{atom,{2823,25},private}]},{type,{2831,10},'fun',[{type,{2831,10},product,[{atom,{2831,11},max_heap_size}]},{type,{2831,29},tuple,[{atom,{2831,30},max_heap_size},{ann_type,{2831,45},[{var,{2831,45},'MaxHeapSize'},{user_type,{2831,60},max_heap_size,[]}]}]}]},{type,{2832,10},'fun',[{type,{2832,10},product,[{atom,{2832,11},message_queue_data}]},{user_type,{2832,34},message_queue_data,[]}]},{type,{2833,10},'fun',[{type,{2833,10},product,[{atom,{2833,11},min_heap_size}]},{type,{2833,29},tuple,[{atom,{2833,30},min_heap_size},{ann_type,{2833,45},[{var,{2833,45},'MinHeapSize'},{type,{2833,60},pos_integer,[]}]}]}]},{type,{2834,10},'fun',[{type,{2834,10},product,[{atom,{2834,11},min_bin_vheap_size}]},{type,{2834,34},tuple,[{atom,{2834,35},min_bin_vheap_size},{ann_type,{2835,35},[{var,{2835,35},'MinBinVHeapSize'},{type,{2835,54},pos_integer,[]}]}]}]},{type,{2849,10},'fun',[{type,{2849,10},product,[{atom,{2849,11},procs}]},{type,{2849,21},binary,[]}]}]}}],since => <<79,84,80,32,49,57,46,48,44,79,84,80,32,82,49,51,66,48,52>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,105,109,105,116,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,108,105,109,105,116,115,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,99,111,117,110,116>>}],[]},{code,[],[<<97,116,111,109,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,116,111,109,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,97,116,111,109,95,108,105,109,105,116>>}],[]},{code,[],[<<97,116,111,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,97,116,111,109,115,32,97,108,108,111,119,101,100,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,105,110,99,114,101,97,115,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,116>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,99,111,117,110,116>>}],[]},{code,[],[<<101,116,115,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,69,84,83,32,116,97,98,108,101,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,116,115,95,108,105,109,105,116>>}],[]},{code,[],[<<101,116,115,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,108,105,109,105,116,32,102,111,114,32,110,117,109,98,101,114,32,111,102,32,69,84,83,32,116,97,98,108,101,115,46,32,84,104,105,115,32,108,105,109,105,116,32,105,115,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,116,115,35,109,97,120,95,101,116,115,95,116,97,98,108,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,97,108,108,121,32,111,98,115,111,108,101,116,101>>]},<<32,97,110,100,32,110,117,109,98,101,114,32,111,102,32,116,97,98,108,101,115,32,97,114,101,32,111,110,108,121,32,108,105,109,105,116,101,100,32,98,121,32,97,118,97,105,108,97,98,108,101,32,109,101,109,111,114,121,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,99,111,117,110,116>>}],[]},{code,[],[<<112,111,114,116,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,111,114,116,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<108,101,110,103,116,104,40,101,114,108,97,110,103,58,112,111,114,116,115,40,41,41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,108,105,109,105,116>>}],[]},{code,[],[<<112,111,114,116,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,115,105,109,117,108,116,97,110,101,111,117,115,108,121,32,101,120,105,115,116,105,110,103,32,112,111,114,116,115,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,117,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,81>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,81>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,99,111,117,110,116>>}],[]},{code,[],[<<112,114,111,99,101,115,115,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<108,101,110,103,116,104,40,112,114,111,99,101,115,115,101,115,40,41,41>>]},<<44,32,98,117,116,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,114,111,99,101,115,115,95,108,105,109,105,116>>}],[]},{code,[],[<<112,114,111,99,101,115,115,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,115,105,109,117,108,116,97,110,101,111,117,115,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,116,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,117,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,80>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,80>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,55,51,51>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2790,10},'fun',[{type,{2790,10},product,[{atom,{2790,11},atom_count}]},{type,{2790,26},pos_integer,[]}]},{type,{2791,10},'fun',[{type,{2791,10},product,[{atom,{2791,11},atom_limit}]},{type,{2791,26},pos_integer,[]}]},{type,{2818,10},'fun',[{type,{2818,10},product,[{atom,{2818,11},ets_count}]},{type,{2818,25},pos_integer,[]}]},{type,{2819,10},'fun',[{type,{2819,10},product,[{atom,{2819,11},ets_limit}]},{type,{2819,25},pos_integer,[]}]},{type,{2845,10},'fun',[{type,{2845,10},product,[{atom,{2845,11},port_count}]},{type,{2845,26},non_neg_integer,[]}]},{type,{2846,10},'fun',[{type,{2846,10},product,[{atom,{2846,11},port_limit}]},{type,{2846,26},pos_integer,[]}]},{type,{2847,10},'fun',[{type,{2847,10},product,[{atom,{2847,11},process_count}]},{type,{2847,29},pos_integer,[]}]},{type,{2848,10},'fun',[{type,{2848,10},product,[{atom,{2848,11},process_limit}]},{type,{2848,29},pos_integer,[]}]}]}}],since => <<79,84,80,32,50,48,46,48,44,79,84,80,32,50,49,46,49,44,79,84,80,32,82,49,54,66,44,79,84,80,32,82,49,54,66,48,51>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,116,105,109,101,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>}],[]},{code,[],[<<101,110,100,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,105,110,116,101,114,110,97,108,108,121,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,84,104,101,32,116,105,109,101,32,98,101,116,119,101,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,116,97,114,116,32,116,105,109,101>>]},<<32,97,110,100,32,116,104,101,32,101,110,100,32,116,105,109,101,32,105,115,32,97,116,32,108,101,97,115,116,32,97,32,113,117,97,114,116,101,114,32,111,102,32,97,32,109,105,108,108,101,110,110,105,117,109,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>}],[]},{code,[],[<<111,115,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,115,111,117,114,99,101,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,116,104,97,116,32,105,115,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,110,111,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,115,32,97,118,97,105,108,97,98,108,101,46,32,84,104,101,32,108,105,115,116,32,99,111,110,116,97,105,110,115,32,116,119,111,45,116,117,112,108,101,115,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<115,32,97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,97,110,100,32>>,{code,[],[<<86,97,108,117,101>>]},<<115,32,97,115,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,115,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,108,105,115,116,44,32,98,117,116,32,109,111,114,101,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,102,117,110,99,116,105,111,110,44,32,70,117,110,99,116,105,111,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,117,115,101,100,46,32,84,104,105,115,32,116,117,112,108,101,32,97,108,119,97,121,115,32,101,120,105,115,116,115,32,105,102,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,115,32,97,118,97,105,108,97,98,108,101,32,116,111,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]},{dt,[],[{code,[],[<<123,99,108,111,99,107,95,105,100,44,32,67,108,111,99,107,73,100,125>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,116,117,112,108,101,32,111,110,108,121,32,101,120,105,115,116,115,32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,99,108,111,99,107,115,46,32>>,{code,[],[<<67,108,111,99,107,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,99,108,111,99,107,32,105,100,101,110,116,105,102,105,101,114,32,117,115,101,100,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,115,111,108,117,116,105,111,110,44,32,79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110,125>>]}]},{dd,[],[{p,[],[<<72,105,103,104,101,115,116,32,112,111,115,115,105,98,108,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,82,101,115,111,108,117,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<114,101,115,111,108,117,116,105,111,110>>]},<<32,111,102,32,99,117,114,114,101,110,116,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,115,111,117,114,99,101,32,97,115,32,112,97,114,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,73,102,32,110,111,32,114,101,115,111,108,117,116,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,102,114,111,109,32,116,104,101,32,79,83,44,32>>,{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<32,105,115,32,115,101,116,32,116,111,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,111,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<115,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,97,99,116,117,97,108,32,114,101,115,111,108,117,116,105,111,110,32,99,97,110,32,98,101,32,108,111,119,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,100,111,101,115,32,110,111,116,32,115,97,121,32,97,110,121,116,104,105,110,103,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,65,99,99,117,114,97,99,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<97,99,99,117,114,97,99,121>>]},<<32,111,114,32,119,104,101,116,104,101,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,80,114,101,99,105,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<112,114,101,99,105,115,105,111,110>>]},<<32,97,108,105,103,110,115,32,119,105,116,104,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,46,32,89,111,117,32,100,111,44,32,104,111,119,101,118,101,114,44,32,107,110,111,119,32,116,104,97,116,32,116,104,101,32,112,114,101,99,105,115,105,111,110,32,105,115,32,110,111,116,32,98,101,116,116,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,120,116,101,110,100,101,100,44,32,69,120,116,101,110,100,101,100,125>>]}]},{dd,[],[{p,[],[{code,[],[<<69,120,116,101,110,100,101,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<121,101,115>>]},<<32,105,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,32,104,97,115,32,98,101,101,110,32,101,120,116,101,110,100,101,100,59,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<69,120,116,101,110,100,101,100>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<110,111>>]},<<46,32,84,104,101,32,114,97,110,103,101,32,109,117,115,116,32,98,101,32,101,120,116,101,110,100,101,100,32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,114,101,116,117,114,110,115,32,118,97,108,117,101,115,32,116,104,97,116,32,119,114,97,112,32,102,97,115,116,46,32,84,104,105,115,32,116,121,112,105,99,97,108,108,121,32,105,115,32,116,104,101,32,99,97,115,101,32,119,104,101,110,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,32,51,50,45,98,105,116,32,118,97,108,117,101,46>>]}]},{dt,[],[{code,[],[<<123,112,97,114,97,108,108,101,108,44,32,80,97,114,97,108,108,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<121,101,115>>]},<<32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,32,102,114,111,109,32,109,117,108,116,105,112,108,101,32,116,104,114,101,97,100,115,46,32,73,102,32,105,116,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,44,32,98,101,99,97,117,115,101,32,99,97,108,108,115,32,109,117,115,116,32,98,101,32,115,101,114,105,97,108,105,122,101,100,44,32>>,{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<110,111>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,116,105,109,101,44,32,79,115,77,111,110,111,116,111,110,105,99,84,105,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<79,115,77,111,110,111,116,111,110,105,99,84,105,109,101>>]},<<32,101,113,117,97,108,115,32,99,117,114,114,101,110,116,32,79,83,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46>>]}]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>}],[]},{code,[],[<<111,115,95,115,121,115,116,101,109,95,116,105,109,101,95,115,111,117,114,99,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,115,111,117,114,99,101,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,116,104,97,116,32,105,115,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<84,104,101,32,108,105,115,116,32,99,111,110,116,97,105,110,115,32,116,119,111,45,116,117,112,108,101,115,32,119,105,116,104,32>>,{code,[],[<<75,101,121>>]},<<115,32,97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,97,110,100,32>>,{code,[],[<<86,97,108,117,101>>]},<<115,32,97,115,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,115,101,32,116,117,112,108,101,115,32,105,115,32,117,110,100,101,102,105,110,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,112,97,114,116,32,111,102,32,116,104,101,32,108,105,115,116,44,32,98,117,116,32,109,111,114,101,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,102,117,110,99,116,105,111,110,44,32,70,117,110,99,116,105,111,110,125>>]}]},{dd,[],[{p,[],[{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,102,117,110,99,105,111,110,32,117,115,101,100,46>>]}]},{dt,[],[{code,[],[<<123,99,108,111,99,107,95,105,100,44,32,67,108,111,99,107,73,100,125>>]}]},{dd,[],[{p,[],[<<69,120,105,115,116,115,32,111,110,108,121,32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,99,108,111,99,107,115,46,32>>,{code,[],[<<67,108,111,99,107,73,100>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,99,108,111,99,107,32,105,100,101,110,116,105,102,105,101,114,32,117,115,101,100,32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,114,101,115,111,108,117,116,105,111,110,44,32,79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110,125>>]}]},{dd,[],[{p,[],[<<72,105,103,104,101,115,116,32,112,111,115,115,105,98,108,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,82,101,115,111,108,117,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<114,101,115,111,108,117,116,105,111,110>>]},<<32,111,102,32,99,117,114,114,101,110,116,32,79,83,32,115,121,115,116,101,109,32,116,105,109,101,32,115,111,117,114,99,101,32,97,115,32,112,97,114,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,73,102,32,110,111,32,114,101,115,111,108,117,116,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,32,99,97,110,32,98,101,32,114,101,116,114,105,101,118,101,100,32,102,114,111,109,32,116,104,101,32,79,83,44,32>>,{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<32,105,115,32,115,101,116,32,116,111,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,111,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<115,32,114,101,116,117,114,110,32,118,97,108,117,101,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,97,99,116,117,97,108,32,114,101,115,111,108,117,116,105,111,110,32,99,97,110,32,98,101,32,108,111,119,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,100,111,101,115,32,110,111,116,32,115,97,121,32,97,110,121,116,104,105,110,103,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,65,99,99,117,114,97,99,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<97,99,99,117,114,97,99,121>>]},<<32,111,114,32,119,104,101,116,104,101,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,80,114,101,99,105,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<112,114,101,99,105,115,105,111,110>>]},<<32,100,111,32,97,108,105,103,110,32,119,105,116,104,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,46,32,89,111,117,32,100,111,44,32,104,111,119,101,118,101,114,44,32,107,110,111,119,32,116,104,97,116,32,116,104,101,32,112,114,101,99,105,115,105,111,110,32,105,115,32,110,111,116,32,98,101,116,116,101,114,32,116,104,97,110,32>>,{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101,82,101,115,111,108,117,116,105,111,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,112,97,114,97,108,108,101,108,44,32,80,97,114,97,108,108,101,108,125>>]}]},{dd,[],[{p,[],[{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<121,101,115>>]},<<32,105,102,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,115,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,32,102,114,111,109,32,109,117,108,116,105,112,108,101,32,116,104,114,101,97,100,115,46,32,73,102,32,105,116,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,105,110,32,112,97,114,97,108,108,101,108,44,32,98,101,99,97,117,115,101,32,99,97,108,108,115,32,110,101,101,100,115,32,116,111,32,98,101,32,115,101,114,105,97,108,105,122,101,100,44,32>>,{code,[],[<<80,97,114,97,108,108,101,108>>]},<<32,101,113,117,97,108,115,32>>,{code,[],[<<110,111>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,116,105,109,101,44,32,79,115,83,121,115,116,101,109,84,105,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<79,115,83,121,115,116,101,109,84,105,109,101>>]},<<32,101,113,117,97,108,115,32,99,117,114,114,101,110,116,32,79,83,32,115,121,115,116,101,109,32,116,105,109,101,32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46>>]}]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,116,97,114,116,95,116,105,109,101>>}],[]},{code,[],[<<115,116,97,114,116,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<32,97,116,32,116,104,101,32,116,105,109,101,32,119,104,101,110,32,99,117,114,114,101,110,116,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,32,115,116,97,114,116,101,100,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,110,100,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,101,110,100,95,116,105,109,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>}],[]},{code,[],[<<116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,111,111,108,101,97,110,32,118,97,108,117,101,32,105,110,100,105,99,97,116,105,110,103,32,119,104,101,116,104,101,114,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,67,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,99,111,114,114,101,99,116,105,111,110>>]},<<32,105,115,32,101,110,97,98,108,101,100,32,111,114,32,110,111,116,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,111,102,102,115,101,116>>}],[]},{code,[],[<<116,105,109,101,95,111,102,102,115,101,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,116,97,116,101,32,111,102,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,58>>]},{dl,[],[{dt,[],[{code,[],[<<112,114,101,108,105,109,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,112,114,101,108,105,109,105,110,97,114,121,44,32,97,110,100,32,119,105,108,108,32,98,101,32,99,104,97,110,103,101,100,32,97,110,100,32,102,105,110,97,108,105,122,101,100,32,108,97,116,101,114,46,32,84,104,101,32,112,114,101,108,105,109,105,110,97,114,121,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,117,115,101,100,32,100,117,114,105,110,103,32,116,104,101,32,112,114,101,108,105,109,105,110,97,114,121,32,112,104,97,115,101,32,111,102,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<102,105,110,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,102,105,110,97,108,46,32,84,104,105,115,32,101,105,116,104,101,114,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,78,111,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,44,32,111,114,32,98,101,99,97,117,115,101,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,104,97,118,101,32,98,101,101,110,32,102,105,110,97,108,105,122,101,100,32,119,104,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]},{dt,[],[{code,[],[<<118,111,108,97,116,105,108,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,118,111,108,97,116,105,108,101,46,32,84,104,97,116,32,105,115,44,32,105,116,32,99,97,110,32,99,104,97,110,103,101,32,97,116,32,97,110,121,32,116,105,109,101,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,119,97,114,112,95,109,111,100,101>>}],[]},{code,[],[<<116,105,109,101,95,119,97,114,112,95,109,111,100,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,118,97,108,117,101,32,105,100,101,110,116,105,102,121,105,110,103,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,116,104,97,116,32,105,115,32,117,115,101,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<110,111,95,116,105,109,101,95,119,97,114,112>>]}]},{dd,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,78,111,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<110,111,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]},{dt,[],[{code,[],[<<115,105,110,103,108,101,95,116,105,109,101,95,119,97,114,112>>]}]},{dd,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,105,110,103,108,101,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,105,110,103,108,101,32,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]},{dt,[],[{code,[],[<<109,117,108,116,105,95,116,105,109,101,95,119,97,114,112>>]}]},{dd,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,105,115,32,117,115,101,100,46>>]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>}],[]},{code,[],[<<116,111,108,101,114,97,110,116,95,116,105,109,101,111,102,100,97,121>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,119,104,101,116,104,101,114,32,97,32,112,114,101,32,69,82,84,83,32,55,46,48,32,98,97,99,107,119,97,114,100,115,32,99,111,109,112,97,116,105,98,108,101,32,99,111,109,112,101,110,115,97,116,105,111,110,32,102,111,114,32,115,117,100,100,101,110,32,99,104,97,110,103,101,115,32,111,102,32,115,121,115,116,101,109,32,116,105,109,101,32,105,115,32>>,{code,[],[<<101,110,97,98,108,101,100>>]},<<32,111,114,32>>,{code,[],[<<100,105,115,97,98,108,101,100>>]},<<46,32,83,117,99,104,32,99,111,109,112,101,110,115,97,116,105,111,110,32,105,115,32>>,{code,[],[<<101,110,97,98,108,101,100>>]},<<32,119,104,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,111,102,102,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,111,102,102,115,101,116>>]},<<32,105,115,32>>,{code,[],[<<102,105,110,97,108>>]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,99,111,114,114,101,99,116,105,111,110>>]},<<32,105,115,32,101,110,97,98,108,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,57,56,49,51>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2817,10},'fun',[{type,{2817,10},product,[{atom,{2817,11},end_time}]},{type,{2817,24},non_neg_integer,[]}]},{type,{2842,10},'fun',[{type,{2842,10},product,[{atom,{2842,11},os_monotonic_time_source}]},{type,{2842,40},list,[{type,{2842,41},tuple,[{type,{2842,42},atom,[]},{type,{2842,49},term,[]}]}]}]},{type,{2843,10},'fun',[{type,{2843,10},product,[{atom,{2843,11},os_system_time_source}]},{type,{2843,37},list,[{type,{2843,38},tuple,[{type,{2843,39},atom,[]},{type,{2843,46},term,[]}]}]}]},{type,{2862,10},'fun',[{type,{2862,10},product,[{atom,{2862,11},start_time}]},{type,{2862,26},integer,[]}]},{type,{2868,10},'fun',[{type,{2868,10},product,[{atom,{2868,11},time_correction}]},{type,{2868,31},union,[{atom,{2868,31},true},{atom,{2868,38},false}]}]},{type,{2869,10},'fun',[{type,{2869,10},product,[{atom,{2869,11},time_offset}]},{type,{2869,27},union,[{atom,{2869,27},preliminary},{atom,{2869,41},final},{atom,{2869,49},volatile}]}]},{type,{2870,10},'fun',[{type,{2870,10},product,[{atom,{2870,11},time_warp_mode}]},{type,{2870,30},union,[{atom,{2870,30},no_time_warp},{atom,{2870,45},single_time_warp},{atom,{2870,64},multi_time_warp}]}]},{type,{2871,10},'fun',[{type,{2871,10},product,[{atom,{2871,11},tolerant_timeofday}]},{type,{2871,34},union,[{atom,{2871,34},enabled},{atom,{2871,44},disabled}]}]}]}}],since => <<79,84,80,32,49,55,46,49,44,79,84,80,32,49,56,46,48>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,115,99,104,101,100,117,108,101,114,115,44,32,115,99,104,101,100,117,108,105,110,103,32,97,110,100,32,116,104,114,101,97,100,115,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>}],[]},{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,68,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,101,120,101,99,117,116,101,32,67,80,85,45,98,111,117,110,100,32,110,97,116,105,118,101,32,102,117,110,99,116,105,111,110,115,44,32,115,117,99,104,32,97,115,32,78,73,70,115,44,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,99,111,100,101,44,32,97,110,100,32,66,73,70,115,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,109,97,110,97,103,101,100,32,99,108,101,97,110,108,121,32,98,121,32,116,104,101,32,110,111,114,109,97,108,32,101,109,117,108,97,116,111,114,32,115,99,104,101,100,117,108,101,114,115,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,97,102,116,101,114,32,116,104,97,116,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,46,32,84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,99,112,117>>]}]},<<32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,80,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,80,99,112,117>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>}],[]},{code,[],[<<100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,115,97,116,105,115,102,105,101,115,32>>,{code,[],[<<49,32,60,61,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,32,60,61,32,78>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]},<<32,97,110,100,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]},<<46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,67,80,85,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,99,112,117>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,99,112,117>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>}],[]},{code,[],[<<100,105,114,116,121,95,105,111,95,115,99,104,101,100,117,108,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,68,105,114,116,121,32,73,47,79,32,115,99,104,101,100,117,108,101,114,115,32,101,120,101,99,117,116,101,32,73,47,79,45,98,111,117,110,100,32,110,97,116,105,118,101,32,102,117,110,99,116,105,111,110,115,44,32,115,117,99,104,32,97,115,32,78,73,70,115,32,97,110,100,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,99,111,100,101,44,32,119,104,105,99,104,32,99,97,110,110,111,116,32,98,101,32,109,97,110,97,103,101,100,32,99,108,101,97,110,108,121,32,98,121,32,116,104,101,32,110,111,114,109,97,108,32,101,109,117,108,97,116,111,114,32,115,99,104,101,100,117,108,101,114,115,46>>]},{p,[],[<<84,104,105,115,32,118,97,108,117,101,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,83,68,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,83,68,105,111>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,100,105,114,116,121,95,99,112,117,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,68,105,114,116,121,67,80,85,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>}],[]},{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<100,105,115,97,98,108,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,98,101,101,110,32,115,116,97,114,116,101,100,32,119,105,116,104,32,111,110,108,121,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<98,108,111,99,107,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,44,32,98,117,116,32,97,108,108,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,101,120,99,101,112,116,32,111,110,101,32,97,114,101,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,111,110,108,121,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,115,99,104,101,100,117,108,101,115,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,101,120,101,99,117,116,101,115,32,69,114,108,97,110,103,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<98,108,111,99,107,101,100,95,110,111,114,109,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,44,32,98,117,116,32,97,108,108,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,101,120,99,101,112,116,32,111,110,101,32,97,114,101,32,98,108,111,99,107,101,100,46,32,78,111,116,105,99,101,32,116,104,97,116,32,100,105,114,116,121,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,110,111,116,32,98,108,111,99,107,101,100,44,32,97,110,100,32,99,97,110,32,115,99,104,101,100,117,108,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,101,120,101,99,117,116,101,32,110,97,116,105,118,101,32,99,111,100,101,46>>]}]},{dt,[],[{code,[],[<<101,110,97,98,108,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,44,32,97,110,100,32,110,111,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,97,114,101,32,98,108,111,99,107,101,100,46,32,84,104,97,116,32,105,115,44,32,97,108,108,32,97,118,97,105,108,97,98,108,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,115,99,104,101,100,117,108,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,101,120,101,99,117,116,101,32,69,114,108,97,110,103,32,99,111,100,101,46>>]}]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>}],[]},{code,[],[<<109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<115,32,119,104,101,110,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32>>,{code,[],[<<80,105,100>>]},<<115,32,105,110,32,116,104,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,98,108,111,99,107,105,110,103,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,46,32,65,32>>,{code,[],[<<80,105,100>>]},<<32,111,99,99,117,114,115,32,111,110,108,121,32,111,110,99,101,32,105,110,32,116,104,101,32,108,105,115,116,44,32,101,118,101,110,32,105,102,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>}],[]},{code,[],[<<110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32>>,{code,[],[<<80,105,100>>]},<<115,32,119,104,101,110,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,32,105,115,32,98,108,111,99,107,101,100,32,40,116,104,97,116,32,105,115,44,32,97,108,108,32,110,111,114,109,97,108,32,115,99,104,101,100,117,108,101,114,115,32,98,117,116,32,111,110,101,32,105,115,32,98,108,111,99,107,101,100,41,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32>>,{code,[],[<<80,105,100>>]},<<115,32,105,110,32,116,104,101,32,108,105,115,116,32,114,101,112,114,101,115,101,110,116,32,97,108,108,32,116,104,101,32,112,114,111,99,101,115,115,101,115,32,99,117,114,114,101,110,116,108,121,32,98,108,111,99,107,105,110,103,32,110,111,114,109,97,108,32,109,117,108,116,105,45,115,99,104,101,100,117,108,105,110,103,46,32,65,32>>,{code,[],[<<80,105,100>>]},<<32,111,99,99,117,114,115,32,111,110,108,121,32,111,110,99,101,32,105,110,32,116,104,101,32,108,105,115,116,44,32,101,118,101,110,32,105,102,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,112,114,111,99,101,115,115,32,104,97,115,32,98,108,111,99,107,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,104,111,119,32,116,104,101,32,117,115,101,114,32,104,97,115,32,114,101,113,117,101,115,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,98,101,32,98,111,117,110,100,32,111,114,32,110,111,116,32,98,111,117,110,100,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,108,116,104,111,117,103,104,32,97,32,117,115,101,114,32,104,97,115,32,114,101,113,117,101,115,116,101,100,32,115,99,104,101,100,117,108,101,114,115,32,116,111,32,98,101,32,98,111,117,110,100,44,32,116,104,101,121,32,99,97,110,32,115,105,108,101,110,116,108,121,32,104,97,118,101,32,102,97,105,108,101,100,32,116,111,32,98,105,110,100,46,32,84,111,32,105,110,115,112,101,99,116,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,105,110,103,115,44,32,99,97,108,108,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,108,121,32,117,115,101,100,32,115,99,104,101,100,117,108,101,114,32,98,105,110,100,105,110,103,115,46>>]},{p,[],[<<65,32,116,117,112,108,101,32,111,102,32,97,32,115,105,122,101,32,101,113,117,97,108,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,116,117,112,108,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,105,110,116,101,103,101,114,115,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,98,111,117,110,100>>]},<<46,32,76,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,115,32,97,114,101,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32,105,110,116,101,103,101,114,115,46,32,84,104,101,32>>,{code,[],[<<78>>]},<<116,104,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,116,117,112,108,101,32,101,113,117,97,108,115,32,116,104,101,32,99,117,114,114,101,110,116,32,98,105,110,100,105,110,103,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,119,105,116,104,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,32,101,113,117,97,108,32,116,111,32>>,{code,[],[<<78>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,116,104,101,32,115,99,104,101,100,117,108,101,114,115,32,97,114,101,32,98,111,117,110,100,44,32>>,{code,[],[<<101,108,101,109,101,110,116,40,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,105,100,41,44,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,98,105,110,100,105,110,103,115,41,41>>]},<<32,114,101,116,117,114,110,115,32,116,104,101,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,111,110,108,121,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,98,111,117,110,100,32,116,111,32,108,111,103,105,99,97,108,32,112,114,111,99,101,115,115,111,114,115,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,98,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,98,116>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,105,100>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,95,105,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,73,68,32,40>>,{code,[],[<<83,99,104,101,100,117,108,101,114,73,100>>]},<<41,32,111,102,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{code,[],[<<83,99,104,101,100,117,108,101,114,73,100>>]},<<32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,44,32,119,104,101,114,101,32>>,{code,[],[<<49,32,60,61,32,83,99,104,101,100,117,108,101,114,73,100,32,60,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,117,115,101,100,32,98,121,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,83,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,111,110,108,105,110,101,32,115,99,104,101,100,117,108,101,115,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,69,114,108,97,110,103,32,112,111,114,116,115,44,32,97,110,100,32,101,120,101,99,117,116,101,32,69,114,108,97,110,103,32,99,111,100,101,32,97,110,100,32,69,114,108,97,110,103,32,108,105,110,107,101,100,45,105,110,32,100,114,105,118,101,114,32,99,111,100,101,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,32,116,104,114,101,97,100,115,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,101,109,117,108,97,116,111,114,32,98,111,111,116,32,116,105,109,101,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,108,97,116,101,114,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,95,105,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,95,105,100,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,44,32,66,108,111,99,107,83,116,97,116,101,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,41>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,110,111,114,109,97,108,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,109,117,108,116,105,95,115,99,104,101,100,117,108,105,110,103,95,98,108,111,99,107,101,114,115,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>}],[]},{code,[],[<<115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,46,32,84,104,101,32,115,99,104,101,100,117,108,101,114,32,105,100,101,110,116,105,102,105,101,114,115,32,111,102,32,115,99,104,101,100,117,108,101,114,115,32,111,110,108,105,110,101,32,115,97,116,105,115,102,121,32,116,104,101,32,114,101,108,97,116,105,111,110,115,104,105,112,32>>,{code,[],[<<49,32,60,61,32,83,99,104,101,100,117,108,101,114,73,100,32,60,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,41>>]},<<46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,115,99,104,101,100,117,108,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,115,99,104,101,100,117,108,101,114,115,41>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,95,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,99,104,101,100,117,108,101,114,115,95,111,110,108,105,110,101,44,32,83,99,104,101,100,117,108,101,114,115,79,110,108,105,110,101,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,109,112,95,115,117,112,112,111,114,116>>}],[]},{code,[],[<<115,109,112,95,115,117,112,112,111,114,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,115>>}],[]},{code,[],[<<116,104,114,101,97,100,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>}],[]},{code,[],[<<116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,104,114,101,97,100,95,112,111,111,108,95,115,105,122,101>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,115,121,110,99,32,116,104,114,101,97,100,115,32,105,110,32,116,104,101,32,97,115,121,110,99,32,116,104,114,101,97,100,32,112,111,111,108,32,117,115,101,100,32,102,111,114,32,97,115,121,110,99,104,114,111,110,111,117,115,32,100,114,105,118,101,114,32,99,97,108,108,115,32,40>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,114,105,118,101,114,35,100,114,105,118,101,114,95,97,115,121,110,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<32>>,{code,[],[<<101,114,108,95,100,114,105,118,101,114,58,100,114,105,118,101,114,95,97,115,121,110,99,40,41>>]}]},<<41,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,48,52,49>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2804,10},'fun',[{type,{2804,10},product,[{atom,{2804,11},dirty_cpu_schedulers}]},{type,{2804,36},non_neg_integer,[]}]},{type,{2805,10},'fun',[{type,{2805,10},product,[{atom,{2805,11},dirty_cpu_schedulers_online}]},{type,{2805,43},non_neg_integer,[]}]},{type,{2806,10},'fun',[{type,{2806,10},product,[{atom,{2806,11},dirty_io_schedulers}]},{type,{2806,35},non_neg_integer,[]}]},{type,{2837,10},'fun',[{type,{2837,10},product,[{atom,{2837,11},multi_scheduling}]},{type,{2837,32},union,[{atom,{2837,32},disabled},{atom,{2837,43},blocked},{atom,{2837,53},blocked_normal},{atom,{2837,70},enabled}]}]},{type,{2838,10},'fun',[{type,{2838,10},product,[{atom,{2838,11},multi_scheduling_blockers}]},{type,{2838,41},list,[{ann_type,{2838,42},[{var,{2838,42},'Pid'},{type,{2838,49},pid,[]}]}]}]},{type,{2840,10},'fun',[{type,{2840,10},product,[{atom,{2840,11},normal_multi_scheduling_blockers}]},{type,{2840,48},list,[{ann_type,{2840,49},[{var,{2840,49},'Pid'},{type,{2840,56},pid,[]}]}]}]},{type,{2850,10},'fun',[{type,{2850,10},product,[{atom,{2850,11},scheduler_bind_type}]},{type,{2850,35},union,[{atom,{2850,35},spread},{atom,{2851,35},processor_spread},{atom,{2852,35},thread_spread},{atom,{2853,35},thread_no_node_processor_spread},{atom,{2854,35},no_node_processor_spread},{atom,{2855,35},no_node_thread_spread},{atom,{2856,35},no_spread},{atom,{2857,35},unbound}]}]},{type,{2858,10},'fun',[{type,{2858,10},product,[{atom,{2858,11},scheduler_bindings}]},{type,{2858,35},tuple,any}]},{type,{2859,10},'fun',[{type,{2859,10},product,[{atom,{2859,11},scheduler_id}]},{ann_type,{2859,28},[{var,{2859,28},'SchedulerId'},{type,{2859,43},pos_integer,[]}]}]},{type,{2860,10},'fun',[{type,{2860,10},product,[{type,{2860,11},union,[{atom,{2860,11},schedulers},{atom,{2860,24},schedulers_online}]}]},{type,{2860,46},pos_integer,[]}]},{type,{2861,10},'fun',[{type,{2861,10},product,[{atom,{2861,11},smp_support}]},{type,{2861,27},boolean,[]}]},{type,{2866,10},'fun',[{type,{2866,10},product,[{atom,{2866,11},threads}]},{type,{2866,23},boolean,[]}]},{type,{2867,10},'fun',[{type,{2867,10},product,[{atom,{2867,11},thread_pool_size}]},{type,{2867,32},non_neg_integer,[]}]}]}}],since => <<79,84,80,32,49,55,46,48,44,79,84,80,32,49,57,46,48>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,69,114,108,97,110,103,32,68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,114,101,97,116,105,111,110>>}],[]},{code,[],[<<99,114,101,97,116,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,114,101,97,116,105,111,110,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,101,32,99,114,101,97,116,105,111,110,32,105,115,32,99,104,97,110,103,101,100,32,119,104,101,110,32,97,32,110,111,100,101,32,105,115,32,114,101,115,116,97,114,116,101,100,46,32,84,104,101,32,99,114,101,97,116,105,111,110,32,111,102,32,97,32,110,111,100,101,32,105,115,32,115,116,111,114,101,100,32,105,110,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,115,44,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,115,44,32,97,110,100,32,114,101,102,101,114,101,110,99,101,115,46,32,84,104,105,115,32,109,97,107,101,115,32,105,116,32,40,116,111,32,115,111,109,101,32,101,120,116,101,110,116,41,32,112,111,115,115,105,98,108,101,32,116,111,32,100,105,115,116,105,110,103,117,105,115,104,32,98,101,116,119,101,101,110,32,105,100,101,110,116,105,102,105,101,114,115,32,102,114,111,109,32,100,105,102,102,101,114,101,110,116,32,105,110,99,97,114,110,97,116,105,111,110,115,32,111,102,32,97,32,110,111,100,101,46,32,84,104,101,32,118,97,108,105,100,32,99,114,101,97,116,105,111,110,115,32,97,114,101,32,105,110,116,101,103,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,49,46,46,51,44,32,98,117,116,32,116,104,105,115,32,119,105,108,108,32,112,114,111,98,97,98,108,121,32,99,104,97,110,103,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,73,102,32,116,104,101,32,110,111,100,101,32,105,115,32,110,111,116,32,97,108,105,118,101,44,32>>,{code,[],[<<48>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>}],[]},{code,[],[<<100,101,108,97,121,101,100,95,110,111,100,101,95,116,97,98,108,101,95,103,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,116,105,109,101,32,105,110,32,115,101,99,111,110,100,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,97,110,32,101,110,116,114,121,32,105,110,32,97,32,110,111,100,101,32,116,97,98,108,101,32,105,115,32,100,101,108,97,121,101,100,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,115,101,116,32,111,110,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,122,100,110,116,103,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,122,100,110,116,103,99>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116>>}],[]},{code,[],[<<100,105,115,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,100,105,115,116,114,105,98,117,116,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>}],[]},{code,[],[<<100,105,115,116,95,98,117,102,95,98,117,115,121,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,98,117,102,102,101,114,32,98,117,115,121,32,108,105,109,105,116,32,105,110,32,98,121,116,101,115,46,32,84,104,105,115,32,108,105,109,105,116,32,99,97,110,32,98,101,32,115,101,116,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,112,97,115,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,122,100,98,98,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,122,100,98,98,108>>]}]},<<32,116,111,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,105,115,116,95,99,116,114,108>>}],[]},{code,[],[<<100,105,115,116,95,99,116,114,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,116,117,112,108,101,115,32>>,{code,[],[<<123,78,111,100,101,44,32,67,111,110,116,114,111,108,108,105,110,103,69,110,116,105,116,121,125>>]},<<44,32,111,110,101,32,101,110,116,114,121,32,102,111,114,32,101,97,99,104,32,99,111,110,110,101,99,116,101,100,32,114,101,109,111,116,101,32,110,111,100,101,46,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,116,104,101,32,110,111,100,101,32,110,97,109,101,32,97,110,100,32>>,{code,[],[<<67,111,110,116,114,111,108,108,105,110,103,69,110,116,105,116,121>>]},<<32,105,115,32,116,104,101,32,112,111,114,116,32,111,114,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,116,104,101,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,116,111,32,116,104,97,116,32,110,111,100,101,46,32,77,111,114,101,32,115,112,101,99,105,102,105,99,97,108,108,121,44,32>>,{code,[],[<<67,111,110,116,114,111,108,108,105,110,103,69,110,116,105,116,121>>]},<<32,102,111,114,32,110,111,100,101,115,32,99,111,110,110,101,99,116,101,100,32,116,104,114,111,117,103,104,32,84,67,80,47,73,80,32,40,116,104,101,32,110,111,114,109,97,108,32,99,97,115,101,41,32,105,115,32,116,104,101,32,115,111,99,107,101,116,32,117,115,101,100,32,105,110,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,99,32,110,111,100,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,51,52,49>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2801,10},'fun',[{type,{2801,10},product,[{atom,{2801,11},creation}]},{type,{2801,24},integer,[]}]},{type,{2803,10},'fun',[{type,{2803,10},product,[{atom,{2803,11},delayed_node_table_gc}]},{type,{2803,37},union,[{atom,{2803,37},infinity},{type,{2803,48},non_neg_integer,[]}]}]},{type,{2807,10},'fun',[{type,{2807,10},product,[{atom,{2807,11},dist}]},{type,{2807,20},binary,[]}]},{type,{2808,10},'fun',[{type,{2808,10},product,[{atom,{2808,11},dist_buf_busy_limit}]},{type,{2808,35},non_neg_integer,[]}]},{type,{2809,10},'fun',[{type,{2809,10},product,[{atom,{2809,11},dist_ctrl}]},{type,{2809,25},tuple,[{ann_type,{2809,26},[{var,{2809,26},'Node'},{type,{2809,34},node,[]}]},{ann_type,{2810,26},[{var,{2810,26},'ControllingEntity'},{type,{2810,47},union,[{type,{2810,47},port,[]},{type,{2810,56},pid,[]}]}]}]}]}]}}],since => <<79,84,80,32,49,56,46,48,44,79,84,80,32,82,49,52,66,48,49>>}},{{function,system_info,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2774}],[<<115,121,115,116,101,109,95,105,110,102,111,47,49>>],#{<<101,110>> => [{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,105,115,99,95,116,97,103,115>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,118,97,114,105,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,40,101,109,117,108,97,116,111,114,41,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,116,101,109>>]},<<58>>]},{dl,[],[{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,98,117,105,108,100,95,116,121,112,101>>}],[]},{code,[],[<<98,117,105,108,100,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<68,101,112,114,101,99,97,116,101,100,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,109,117,95,116,121,112,101>>]},<<32,105,110,115,116,101,97,100>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>}],[]},{code,[],[<<99,95,99,111,109,112,105,108,101,114,95,117,115,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,119,111,45,116,117,112,108,101,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,67,32,99,111,109,112,105,108,101,114,32,117,115,101,100,32,119,104,101,110,32,99,111,109,112,105,108,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,99,111,109,112,105,108,101,114,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,117,110,107,110,111,119,110,46,32,84,104,101,32,115,101,99,111,110,100,32,101,108,101,109,101,110,116,32,105,115,32,97,32,116,101,114,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,99,111,109,112,105,108,101,114,44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,117,110,107,110,111,119,110,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,104,101,99,107,95,105,111>>}],[]},{code,[],[<<99,104,101,99,107,95,105,111>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,101,109,117,108,97,116,111,114,115,32,105,110,116,101,114,110,97,108,32,73,47,79,32,99,104,101,99,107,105,110,103,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,99,111,110,116,101,110,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,32,99,97,110,32,118,97,114,121,32,98,101,116,119,101,101,110,32,112,108,97,116,102,111,114,109,115,32,97,110,100,32,111,118,101,114,32,116,105,109,101,46,32,73,116,32,105,115,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,97,32,108,105,115,116,32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,99,111,109,112,97,116,95,114,101,108>>}],[]},{code,[],[<<99,111,109,112,97,116,95,114,101,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,109,111,100,101,32,111,102,32,116,104,101,32,108,111,99,97,108,32,110,111,100,101,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,84,104,101,32,105,110,116,101,103,101,114,32,114,101,116,117,114,110,101,100,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,69,114,108,97,110,103,47,79,84,80,32,114,101,108,101,97,115,101,32,116,104,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,101,109,117,108,97,116,111,114,32,104,97,115,32,98,101,101,110,32,115,101,116,32,116,111,32,98,101,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,46,32,84,104,101,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,109,111,100,101,32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,97,116,32,115,116,97,114,116,117,112,32,98,121,32,117,115,105,110,103,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,99,111,109,112,97,116,95,114,101,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,82>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,101,98,117,103,95,99,111,109,112,105,108,101,100>>}],[]},{code,[],[<<100,101,98,117,103,95,99,111,109,112,105,108,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,104,97,115,32,98,101,101,110,32,100,101,98,117,103,45,99,111,109,112,105,108,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,114,105,118,101,114,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<100,114,105,118,101,114,95,118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,100,114,105,118,101,114,32,118,101,114,115,105,111,110,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,73,116,32,104,97,115,32,116,104,101,32,102,111,114,109,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,114,105,118,101,114,35,118,101,114,115,105,111,110,95,109,97,110,97,103,101,109,101,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<34,60,109,97,106,111,114,32,118,101,114,62,46,60,109,105,110,111,114,32,118,101,114,62,34>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101>>}],[]},{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,100,121,110,97,109,105,99,32,116,114,97,99,101,32,102,114,97,109,101,119,111,114,107,32,99,111,109,112,105,108,101,100,32,105,110,116,111,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,46,32,73,116,32,99,97,110,32,98,101,32>>,{code,[],[<<100,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<115,121,115,116,101,109,116,97,112>>]},<<44,32,111,114,32>>,{code,[],[<<110,111,110,101>>]},<<46,32,70,111,114,32,97,32,99,111,109,109,101,114,99,105,97,108,32,111,114,32,115,116,97,110,100,97,114,100,32,98,117,105,108,100,44,32,105,116,32,105,115,32,97,108,119,97,121,115,32>>,{code,[],[<<110,111,110,101>>]},<<46,32,84,104,101,32,111,116,104,101,114,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,105,110,100,105,99,97,116,101,32,97,32,99,117,115,116,111,109,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<46,47,99,111,110,102,105,103,117,114,101,32,45,45,119,105,116,104,45,100,121,110,97,109,105,99,45,116,114,97,99,101,61,100,116,114,97,99,101>>]},<<41,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,100,121,110,97,109,105,99,32,116,114,97,99,105,110,103,44,32,115,101,101,32>>,{a,[{href,<<114,117,110,116,105,109,101,95,116,111,111,108,115,58,100,121,110,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,121,110,116,114,97,99,101,40,51,41>>]}]},<<32,109,97,110,117,97,108,32,112,97,103,101,32,97,110,100,32,116,104,101,32>>,{code,[],[<<82,69,65,68,77,69,46,100,116,114,97,99,101>>]},<<47>>,{code,[],[<<82,69,65,68,77,69,46,115,121,115,116,101,109,116,97,112>>]},<<32,102,105,108,101,115,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32,116,111,112,32,100,105,114,101,99,116,111,114,121,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>}],[]},{code,[],[<<100,121,110,97,109,105,99,95,116,114,97,99,101,95,112,114,111,98,101,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32>>,{code,[],[<<98,111,111,108,101,97,110,40,41>>]},<<32,105,110,100,105,99,97,116,105,110,103,32,105,102,32,100,121,110,97,109,105,99,32,116,114,97,99,101,32,112,114,111,98,101,115,32,40>>,{code,[],[<<100,116,114,97,99,101>>]},<<32,111,114,32>>,{code,[],[<<115,121,115,116,101,109,116,97,112>>]},<<41,32,97,114,101,32,98,117,105,108,116,32,105,110,116,111,32,116,104,101,32,101,109,117,108,97,116,111,114,46,32,84,104,105,115,32,99,97,110,32,111,110,108,121,32,98,101,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,32,119,97,115,32,98,117,105,108,116,32,102,111,114,32,100,121,110,97,109,105,99,32,116,114,97,99,105,110,103,32,40,116,104,97,116,32,105,115,44,32>>,{code,[],[<<115,121,115,116,101,109,95,105,110,102,111,40,100,121,110,97,109,105,99,95,116,114,97,99,101,41>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<100,116,114,97,99,101>>]},<<32,111,114,32>>,{code,[],[<<115,121,115,116,101,109,116,97,112>>]},<<41,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,102,108,97,118,111,114>>}],[]},{code,[],[<<101,109,117,95,102,108,97,118,111,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,102,108,97,118,111,114,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,105,115,32,119,105,108,108,32,98,101,32,101,105,116,104,101,114,32>>,{code,[],[<<101,109,117>>]},<<32,111,114,32>>,{code,[],[<<106,105,116>>]},<<46,32,80,111,115,115,105,98,108,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,111,114,32,114,101,109,111,118,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,101,109,117,95,116,121,112,101>>}],[]},{code,[],[<<101,109,117,95,116,121,112,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,98,117,105,108,100,32,116,121,112,101,32,111,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,84,104,105,115,32,105,115,32,110,111,114,109,97,108,108,121,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,112,116>>]},<<32,102,111,114,32,111,112,116,105,109,105,122,101,100,46,32,79,116,104,101,114,32,112,111,115,115,105,98,108,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,97,114,101,32>>,{code,[],[<<100,101,98,117,103>>]},<<44,32>>,{code,[],[<<103,99,111,118>>]},<<44,32>>,{code,[],[<<118,97,108,103,114,105,110,100>>]},<<44,32>>,{code,[],[<<103,112,114,111,102>>]},<<44,32,97,110,100,32>>,{code,[],[<<108,99,110,116>>]},<<46,32,80,111,115,115,105,98,108,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,111,114,32,114,101,109,111,118,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,105,110,102,111>>}],[]},{code,[],[<<105,110,102,111>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,109,105,115,99,101,108,108,97,110,101,111,117,115,32,115,121,115,116,101,109,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,107,101,114,110,101,108,95,112,111,108,108>>}],[]},{code,[],[<<107,101,114,110,101,108,95,112,111,108,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,101,109,117,108,97,116,111,114,32,117,115,101,115,32,115,111,109,101,32,107,105,110,100,32,111,102,32,107,101,114,110,101,108,45,112,111,108,108,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,108,111,97,100,101,100>>}],[]},{code,[],[<<108,111,97,100,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,115,116,114,105,110,103,32,111,102,32,108,111,97,100,101,100,32,109,111,100,117,108,101,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,109,97,116,116,101,100,32,97,115,32,105,110,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,99,114,97,115,104,95,100,117,109,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<72,111,119,32,116,111,32,105,110,116,101,114,112,114,101,116,32,116,104,101,32,69,114,108,97,110,103,32,99,114,97,115,104,32,100,117,109,112,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,97,99,104,105,110,101>>}],[]},{code,[],[<<109,97,99,104,105,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,109,97,99,104,105,110,101,32,110,97,109,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>}],[]},{code,[],[<<109,111,100,105,102,105,101,100,95,116,105,109,105,110,103,95,108,101,118,101,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,111,100,105,102,105,101,100,32,116,105,109,105,110,103,45,108,101,118,101,108,32,40,97,110,32,105,110,116,101,103,101,114,41,32,105,102,32,109,111,100,105,102,105,101,100,32,116,105,109,105,110,103,32,105,115,32,101,110,97,98,108,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,109,111,100,105,102,105,101,100,32,116,105,109,105,110,103,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,102,108,97,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,84>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,84>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]}]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,110,105,102,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<110,105,102,95,118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,78,73,70,32,105,110,116,101,114,102,97,99,101,32,117,115,101,100,32,98,121,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46,32,73,116,32,105,115,32,111,110,32,116,104,101,32,102,111,114,109,32,34,60,109,97,106,111,114,32,118,101,114,62,46,60,109,105,110,111,114,32,118,101,114,62,34,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,116,112,95,114,101,108,101,97,115,101>>}],[]},{code,[],[<<111,116,112,95,114,101,108,101,97,115,101>>]}]},{dd,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,111,116,112,95,114,101,108,101,97,115,101>>}],[]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,79,84,80,32,114,101,108,101,97,115,101,32,110,117,109,98,101,114,32,111,102,32,116,104,101,32,79,84,80,32,114,101,108,101,97,115,101,32,116,104,97,116,32,116,104,101,32,99,117,114,114,101,110,116,108,121,32,101,120,101,99,117,116,105,110,103,32,69,82,84,83,32,97,112,112,108,105,99,97,116,105,111,110,32,105,115,32,112,97,114,116,32,111,102,46>>]},{p,[],[<<65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,49,55,44,32,116,104,101,32,79,84,80,32,114,101,108,101,97,115,101,32,110,117,109,98,101,114,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,109,97,106,111,114,32,79,84,80,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,46,32,78,111,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,105,110,102,111,40,41>>]},<<32,97,114,103,117,109,101,110,116,32,103,105,118,101,115,32,116,104,101,32,101,120,97,99,116,32,79,84,80,32,118,101,114,115,105,111,110,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,101,120,97,99,116,32,79,84,80,32,118,101,114,115,105,111,110,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,32,105,115,32,100,105,102,102,105,99,117,108,116,32,116,111,32,100,101,116,101,114,109,105,110,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,118,101,114,115,105,111,110,115,32,105,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,115,121,115,116,101,109,95,112,114,105,110,99,105,112,108,101,115,58,118,101,114,115,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<83,121,115,116,101,109,32,112,114,105,110,99,105,112,108,101,115>>]},<<32,105,110,32,83,121,115,116,101,109,32,68,111,99,117,109,101,110,116,97,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>}],[]},{code,[],[<<112,111,114,116,95,112,97,114,97,108,108,101,108,105,115,109>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,101,102,97,117,108,116,32,112,111,114,116,32,112,97,114,97,108,108,101,108,105,115,109,32,115,99,104,101,100,117,108,105,110,103,32,104,105,110,116,32,117,115,101,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,99,111,109,109,97,110,100,45,108,105,110,101,32,97,114,103,117,109,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,43,115,112,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<43,115,112,112>>]}]},<<32,105,110,32>>,{code,[],[<<101,114,108,40,49,41>>]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>}],[]},{code,[],[<<115,121,115,116,101,109,95,97,114,99,104,105,116,101,99,116,117,114,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,112,114,111,99,101,115,115,111,114,32,97,110,100,32,79,83,32,97,114,99,104,105,116,101,99,116,117,114,101,32,116,104,101,32,101,109,117,108,97,116,111,114,32,105,115,32,98,117,105,108,116,32,102,111,114,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,108,111,103,103,101,114>>}],[]},{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32>>,{code,[],[<<115,121,115,116,101,109,95,108,111,103,103,101,114>>]},<<32,97,115,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,102,108,97,103,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,102,108,97,103,40,115,121,115,116,101,109,95,108,111,103,103,101,114,44,32,95,41>>]}]},<<46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,115,121,115,116,101,109,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<115,121,115,116,101,109,95,118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,97,110,100,32,115,111,109,101,32,105,109,112,111,114,116,97,110,116,32,112,114,111,112,101,114,116,105,101,115,44,32,115,117,99,104,32,97,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,99,104,101,100,117,108,101,114,115,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>}],[]},{code,[],[<<116,114,97,99,101,95,99,111,110,116,114,111,108,95,119,111,114,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,110,111,100,101,32,116,114,97,99,101,32,99,111,110,116,114,111,108,32,119,111,114,100,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<103,101,116,95,116,99,119>>]},<<32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,109,97,116,99,104,95,115,112,101,99,35,103,101,116,95,116,99,119>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,118,101,114,115,105,111,110>>}],[]},{code,[],[<<118,101,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,111,102,32,116,104,101,32,101,109,117,108,97,116,111,114,46>>]}]},{dt,[],[{a,[{id,<<115,121,115,116,101,109,95,105,110,102,111,95,119,111,114,100,115,105,122,101>>}],[]},{code,[],[<<119,111,114,100,115,105,122,101>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<123,119,111,114,100,115,105,122,101,44,32,105,110,116,101,114,110,97,108,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,119,111,114,100,115,105,122,101,44,32,105,110,116,101,114,110,97,108,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,105,122,101,32,111,102,32,69,114,108,97,110,103,32,116,101,114,109,32,119,111,114,100,115,32,105,110,32,98,121,116,101,115,32,97,115,32,97,110,32,105,110,116,101,103,101,114,44,32,116,104,97,116,32,105,115,44,32,52,32,105,115,32,114,101,116,117,114,110,101,100,32,111,110,32,97,32,51,50,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,44,32,97,110,100,32,56,32,105,115,32,114,101,116,117,114,110,101,100,32,111,110,32,97,32,54,52,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,46>>]}]},{dt,[],[{code,[],[<<123,119,111,114,100,115,105,122,101,44,32,101,120,116,101,114,110,97,108,125>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,114,117,101,32,119,111,114,100,32,115,105,122,101,32,111,102,32,116,104,101,32,101,109,117,108,97,116,111,114,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,115,105,122,101,32,111,102,32,97,32,112,111,105,110,116,101,114,46,32,84,104,101,32,118,97,108,117,101,32,105,115,32,103,105,118,101,110,32,105,110,32,98,121,116,101,115,32,97,115,32,97,110,32,105,110,116,101,103,101,114,46,32,79,110,32,97,32,112,117,114,101,32,51,50,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,44,32,52,32,105,115,32,114,101,116,117,114,110,101,100,46,32,79,110,32,97,32,54,52,45,98,105,116,32,97,114,99,104,105,116,101,99,116,117,114,101,44,32,56,32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,52,49,50>>,signature => [{attribute,{2774,2},spec,{{erlang,system_info,1},[{type,{2794,10},'fun',[{type,{2794,10},product,[{atom,{2794,11},c_compiler_used}]},{type,{2794,31},tuple,[{type,{2794,32},atom,[]},{type,{2794,40},term,[]}]}]},{type,{2795,10},'fun',[{type,{2795,10},product,[{atom,{2795,11},check_io}]},{type,{2795,24},list,[{var,{2795,25},'_'}]}]},{type,{2796,10},'fun',[{type,{2796,10},product,[{atom,{2796,11},compat_rel}]},{type,{2796,26},integer,[]}]},{type,{2802,10},'fun',[{type,{2802,10},product,[{atom,{2802,11},debug_compiled}]},{type,{2802,30},boolean,[]}]},{type,{2811,10},'fun',[{type,{2811,10},product,[{atom,{2811,11},driver_version}]},{type,{2811,30},string,[]}]},{type,{2812,10},'fun',[{type,{2812,10},product,[{atom,{2812,11},dynamic_trace}]},{type,{2812,29},union,[{atom,{2812,29},none},{atom,{2812,36},dtrace},{atom,{2812,45},systemtap}]}]},{type,{2813,10},'fun',[{type,{2813,10},product,[{atom,{2813,11},dynamic_trace_probes}]},{type,{2813,36},boolean,[]}]},{type,{2815,10},'fun',[{type,{2815,10},product,[{atom,{2815,11},emu_flavor}]},{type,{2815,26},union,[{atom,{2815,26},emu},{atom,{2815,32},jit}]}]},{type,{2816,10},'fun',[{type,{2816,10},product,[{atom,{2816,11},emu_type}]},{type,{2816,24},union,[{atom,{2816,24},opt},{atom,{2816,30},debug},{atom,{2816,38},gcov},{atom,{2816,45},valgrind},{atom,{2816,56},gprof},{atom,{2816,64},lcnt},{atom,{2816,71},frmptr}]}]},{type,{2824,10},'fun',[{type,{2824,10},product,[{atom,{2824,11},info}]},{type,{2824,20},binary,[]}]},{type,{2825,10},'fun',[{type,{2825,10},product,[{atom,{2825,11},kernel_poll}]},{type,{2825,27},boolean,[]}]},{type,{2826,10},'fun',[{type,{2826,10},product,[{atom,{2826,11},loaded}]},{type,{2826,22},binary,[]}]},{type,{2830,10},'fun',[{type,{2830,10},product,[{atom,{2830,11},machine}]},{type,{2830,23},string,[]}]},{type,{2836,10},'fun',[{type,{2836,10},product,[{atom,{2836,11},modified_timing_level}]},{type,{2836,37},union,[{type,{2836,37},integer,[]},{atom,{2836,49},undefined}]}]},{type,{2839,10},'fun',[{type,{2839,10},product,[{atom,{2839,11},nif_version}]},{type,{2839,27},string,[]}]},{type,{2841,10},'fun',[{type,{2841,10},product,[{atom,{2841,11},otp_release}]},{type,{2841,27},string,[]}]},{type,{2844,10},'fun',[{type,{2844,10},product,[{atom,{2844,11},port_parallelism}]},{type,{2844,32},boolean,[]}]},{type,{2863,10},'fun',[{type,{2863,10},product,[{atom,{2863,11},system_architecture}]},{type,{2863,35},string,[]}]},{type,{2864,10},'fun',[{type,{2864,10},product,[{atom,{2864,11},system_logger}]},{type,{2864,29},union,[{atom,{2864,29},logger},{atom,{2864,38},undefined},{type,{2864,50},pid,[]}]}]},{type,{2865,10},'fun',[{type,{2865,10},product,[{atom,{2865,11},system_version}]},{type,{2865,30},string,[]}]},{type,{2872,10},'fun',[{type,{2872,10},product,[{atom,{2872,11},trace_control_word}]},{type,{2872,34},non_neg_integer,[]}]},{type,{2874,10},'fun',[{type,{2874,10},product,[{atom,{2874,11},version}]},{type,{2874,23},string,[]}]},{type,{2875,10},'fun',[{type,{2875,10},product,[{type,{2875,11},union,[{atom,{2875,11},wordsize},{type,{2875,22},tuple,[{atom,{2875,23},wordsize},{atom,{2875,33},internal}]},{type,{2875,45},tuple,[{atom,{2875,46},wordsize},{atom,{2875,56},external}]}]}]},{type,{2875,70},union,[{integer,{2875,70},4},{integer,{2875,74},8}]}]}]}}],since => <<79,84,80,32,49,55,46,52,44,79,84,80,32,50,49,46,51,44,79,84,80,32,50,52,46,48,44,79,84,80,32,82,49,53,66,48,49,44,79,84,80,32,82,49,54,66>>}},{{function,system_monitor,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1960}],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,105,110,103,32,115,101,116,116,105,110,103,115,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>]}]},<<32,97,115,32>>,{code,[],[<<123,77,111,110,105,116,111,114,80,105,100,44,32,79,112,116,105,111,110,115,125>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,110,111,32,115,101,116,116,105,110,103,115,32,101,120,105,115,116,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,111,110,101,32,116,104,97,116,32,119,97,115,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,55,49,54>>,signature => [{attribute,{1960,2},spec,{{erlang,system_monitor,0},[{type,{1960,28},bounded_fun,[{type,{1960,28},'fun',[{type,{1960,28},product,[]},{var,{1960,34},'MonSettings'}]},[{type,{1961,7},constraint,[{atom,{1961,7},is_subtype},[{var,{1961,7},'MonSettings'},{type,{1961,22},union,[{atom,{1961,22},undefined},{type,{1961,34},tuple,[{var,{1961,36},'MonitorPid'},{var,{1961,48},'Options'}]}]}]]},{type,{1962,7},constraint,[{atom,{1962,7},is_subtype},[{var,{1962,7},'MonitorPid'},{type,{1962,21},pid,[]}]]},{type,{1963,7},constraint,[{atom,{1963,7},is_subtype},[{var,{1963,7},'Options'},{type,{1963,18},list,[{user_type,{1963,20},system_monitor_option,[]}]}]]}]]}]}}]}},{{function,system_monitor,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1968}],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<87,104,101,110,32,99,97,108,108,101,100,32,119,105,116,104,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<44,32,97,108,108,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,32,109,111,110,105,116,111,114,105,110,103,32,115,101,116,116,105,110,103,115,32,97,114,101,32,99,108,101,97,114,101,100,46>>]},{p,[],[<<67,97,108,108,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,32,119,105,116,104,32>>,{code,[],[<<123,77,111,110,105,116,111,114,80,105,100,44,32,79,112,116,105,111,110,115,125>>]},<<32,97,115,32,97,114,103,117,109,101,110,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,40,77,111,110,105,116,111,114,80,105,100,44,32,79,112,116,105,111,110,115,41>>]}]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,115,101,116,116,105,110,103,115,32,106,117,115,116,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,55,51,48>>,signature => [{attribute,{1968,2},spec,{{erlang,system_monitor,1},[{type,{1968,28},bounded_fun,[{type,{1968,28},'fun',[{type,{1968,28},product,[{var,{1968,29},'Arg'}]},{var,{1968,37},'MonSettings'}]},[{type,{1969,7},constraint,[{atom,{1969,7},is_subtype},[{var,{1969,7},'Arg'},{type,{1969,14},union,[{atom,{1969,14},undefined},{type,{1969,26},tuple,[{var,{1969,28},'MonitorPid'},{var,{1969,40},'Options'}]}]}]]},{type,{1970,7},constraint,[{atom,{1970,7},is_subtype},[{var,{1970,7},'MonSettings'},{type,{1970,22},union,[{atom,{1970,22},undefined},{type,{1970,34},tuple,[{var,{1970,36},'MonitorPid'},{var,{1970,48},'Options'}]}]}]]},{type,{1971,7},constraint,[{atom,{1971,7},is_subtype},[{var,{1971,7},'MonitorPid'},{type,{1971,21},pid,[]}]]},{type,{1972,7},constraint,[{atom,{1972,7},is_subtype},[{var,{1972,7},'Options'},{type,{1972,18},list,[{user_type,{1972,20},system_monitor_option,[]}]}]]}]]}]}}]}},{{function,system_monitor,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1977}],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<83,101,116,115,32,116,104,101,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,32,109,111,110,105,116,111,114,105,110,103,32,111,112,116,105,111,110,115,46,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,114,101,99,101,105,118,105,110,103,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,108,105,115,116,32,111,102,32,109,111,110,105,116,111,114,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,108,111,110,103,95,103,99,44,32,84,105,109,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,116,97,107,101,115,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<84,105,109,101>>]},<<32,119,97,108,108,32,99,108,111,99,107,32,109,105,108,108,105,115,101,99,111,110,100,115,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,71,99,80,105,100,44,32,108,111,110,103,95,103,99,44,32,73,110,102,111,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<71,99,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,105,100,32,116,104,97,116,32,119,97,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,101,108,101,109,101,110,116,32,116,117,112,108,101,115,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[<<79,110,101,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,115,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,71,99,84,105,109,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<71,99,84,105,109,101>>]},<<32,105,115,32,116,104,101,32,116,105,109,101,32,102,111,114,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,110,32,109,105,108,108,105,115,101,99,111,110,100,115,46,32,84,104,101,32,111,116,104,101,114,32,116,117,112,108,101,115,32,97,114,101,32,116,97,103,103,101,100,32,119,105,116,104,32>>,{code,[],[<<104,101,97,112,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<115,116,97,99,107,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<109,98,117,102,95,115,105,122,101>>]},<<44,32>>,{code,[],[<<111,108,100,95,104,101,97,112,95,115,105,122,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<111,108,100,95,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]},<<46,32,84,104,101,115,101,32,116,117,112,108,101,115,32,97,114,101,32,101,120,112,108,97,105,110,101,100,32,105,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]}]},<<32,40,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<41,46,32,78,101,119,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,44,32,97,110,100,32,116,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,110,32,116,104,101,32>>,{code,[],[<<73,110,102,111>>]},<<32,108,105,115,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]}]},{dt,[],[{code,[],[<<123,108,111,110,103,95,115,99,104,101,100,117,108,101,44,32,84,105,109,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,114,117,110,115,32,117,110,105,110,116,101,114,114,117,112,116,101,100,32,102,111,114,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<84,105,109,101>>]},<<32,119,97,108,108,32,99,108,111,99,107,32,109,105,108,108,105,115,101,99,111,110,100,115,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,80,105,100,79,114,80,111,114,116,44,32,108,111,110,103,95,115,99,104,101,100,117,108,101,44,32,73,110,102,111,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<80,105,100,79,114,80,111,114,116>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,116,104,97,116,32,119,97,115,32,114,117,110,110,105,110,103,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,101,108,101,109,101,110,116,32,116,117,112,108,101,115,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,101,118,101,110,116,46>>]},{p,[],[<<73,102,32,97,32>>,{code,[],[<<112,105,100,40,41>>]},<<44,32,116,104,101,32,116,117,112,108,101,115,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,77,105,108,108,105,115,125>>]},<<44,32>>,{code,[],[<<123,105,110,44,32,76,111,99,97,116,105,111,110,125>>]},<<44,32,97,110,100,32>>,{code,[],[<<123,111,117,116,44,32,76,111,99,97,116,105,111,110,125>>]},<<32,97,114,101,32,112,114,101,115,101,110,116,44,32,119,104,101,114,101,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,101,105,116,104,101,114,32,97,110,32,77,70,65,32,40>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<41,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,32,119,104,101,114,101,32,116,104,101,32,112,114,111,99,101,115,115,32,119,97,115,32,115,99,104,101,100,117,108,101,100,32,105,110,47,111,117,116,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]},{p,[],[<<73,102,32,97,32>>,{code,[],[<<112,111,114,116,40,41>>]},<<44,32,116,104,101,32,116,117,112,108,101,115,32>>,{code,[],[<<123,116,105,109,101,111,117,116,44,32,77,105,108,108,105,115,125>>]},<<32,97,110,100,32>>,{code,[],[<<123,112,111,114,116,95,111,112,44,79,112,125>>]},<<32,97,114,101,32,112,114,101,115,101,110,116,46,32>>,{code,[],[<<79,112>>]},<<32,105,115,32,111,110,101,32,111,102,32>>,{code,[],[<<112,114,111,99,95,115,105,103>>]},<<44,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<44,32>>,{code,[],[<<105,110,112,117,116>>]},<<44,32>>,{code,[],[<<111,117,116,112,117,116>>]},<<44,32>>,{code,[],[<<101,118,101,110,116>>]},<<44,32,111,114,32>>,{code,[],[<<100,105,115,116,95,99,109,100>>]},<<44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,119,104,105,99,104,32,100,114,105,118,101,114,32,99,97,108,108,98,97,99,107,32,119,97,115,32,101,120,101,99,117,116,105,110,103,46>>]},{p,[],[{code,[],[<<112,114,111,99,95,115,105,103>>]},<<32,105,115,32,97,110,32,105,110,116,101,114,110,97,108,32,111,112,101,114,97,116,105,111,110,32,97,110,100,32,105,115,32,110,101,118,101,114,32,116,111,32,97,112,112,101,97,114,44,32,119,104,105,108,101,32,116,104,101,32,111,116,104,101,114,115,32,114,101,112,114,101,115,101,110,116,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,100,114,105,118,101,114,32,99,97,108,108,98,97,99,107,115,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<44,32>>,{code,[],[<<114,101,97,100,121,95,105,110,112,117,116>>]},<<44,32>>,{code,[],[<<114,101,97,100,121,95,111,117,116,112,117,116>>]},<<44,32>>,{code,[],[<<101,118,101,110,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<111,117,116,112,117,116,118>>]},<<32,40,119,104,101,110,32,116,104,101,32,112,111,114,116,32,105,115,32,117,115,101,100,32,98,121,32,100,105,115,116,114,105,98,117,116,105,111,110,41,46,32,86,97,108,117,101,32>>,{code,[],[<<77,105,108,108,105,115>>]},<<32,105,110,32,116,117,112,108,101,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,105,110,102,111,114,109,115,32,97,98,111,117,116,32,116,104,101,32,117,110,105,110,116,101,114,114,117,112,116,101,100,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,44,32,119,104,105,99,104,32,97,108,119,97,121,115,32,105,115,32,101,113,117,97,108,32,116,111,32,111,114,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32>>,{code,[],[<<84,105,109,101>>]},<<32,118,97,108,117,101,32,115,117,112,112,108,105,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,116,114,97,99,101,46,32,78,101,119,32,116,117,112,108,101,115,32,99,97,110,32,98,101,32,97,100,100,101,100,32,116,111,32,116,104,101,32>>,{code,[],[<<73,110,102,111>>]},<<32,108,105,115,116,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,32,105,110,32,116,104,101,32,108,105,115,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,97,116,32,97,110,121,32,116,105,109,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114,32,110,111,116,105,99,101,46>>]},{p,[],[<<84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,100,101,116,101,99,116,32,112,114,111,98,108,101,109,115,32,119,105,116,104,32,78,73,70,115,32,111,114,32,100,114,105,118,101,114,115,32,116,104,97,116,32,116,97,107,101,32,116,111,111,32,108,111,110,103,32,116,111,32,101,120,101,99,117,116,101,46,32,49,32,109,115,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,103,111,111,100,32,109,97,120,105,109,117,109,32,116,105,109,101,32,102,111,114,32,97,32,100,114,105,118,101,114,32,99,97,108,108,98,97,99,107,32,111,114,32,97,32,78,73,70,46,32,72,111,119,101,118,101,114,44,32,97,32,116,105,109,101,45,115,104,97,114,105,110,103,32,115,121,115,116,101,109,32,105,115,32,117,115,117,97,108,108,121,32,116,111,32,99,111,110,115,105,100,101,114,32,101,118,101,114,121,116,104,105,110,103,32,60,32,49,48,48,32,109,115,32,97,115,32,34,112,111,115,115,105,98,108,101,34,32,97,110,100,32,102,97,105,114,108,121,32,34,110,111,114,109,97,108,34,46,32,72,111,119,101,118,101,114,44,32,108,111,110,103,101,114,32,115,99,104,101,100,117,108,101,32,116,105,109,101,115,32,99,97,110,32,105,110,100,105,99,97,116,101,32,115,119,97,112,112,105,110,103,32,111,114,32,97,32,109,105,115,98,101,104,97,118,105,110,103,32,78,73,70,47,100,114,105,118,101,114,46,32,77,105,115,98,101,104,97,118,105,110,103,32,78,73,70,115,32,97,110,100,32,100,114,105,118,101,114,115,32,99,97,110,32,99,97,117,115,101,32,98,97,100,32,114,101,115,111,117,114,99,101,32,117,116,105,108,105,122,97,116,105,111,110,32,97,110,100,32,98,97,100,32,111,118,101,114,97,108,108,32,115,121,115,116,101,109,32,112,101,114,102,111,114,109,97,110,99,101,46>>]}]},{dt,[],[{code,[],[<<123,108,97,114,103,101,95,104,101,97,112,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,114,101,115,117,108,116,115,32,105,110,32,116,104,101,32,97,108,108,111,99,97,116,101,100,32,115,105,122,101,32,111,102,32,97,32,104,101,97,112,32,98,101,105,110,103,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<83,105,122,101>>]},<<32,119,111,114,100,115,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,71,99,80,105,100,44,32,108,97,114,103,101,95,104,101,97,112,44,32,73,110,102,111,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<71,99,80,105,100>>]},<<32,97,110,100,32>>,{code,[],[<<73,110,102,111>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,102,111,114,32>>,{code,[],[<<108,111,110,103,95,103,99>>]},<<32,101,97,114,108,105,101,114,44,32,101,120,99,101,112,116,32,116,104,97,116,32,116,104,101,32,116,117,112,108,101,32,116,97,103,103,101,100,32,119,105,116,104,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,46>>]},{p,[],[<<84,104,101,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,115,105,122,101,115,32,111,102,32,97,108,108,32,109,101,109,111,114,121,32,98,108,111,99,107,115,32,97,108,108,111,99,97,116,101,100,32,102,111,114,32,97,108,108,32,104,101,97,112,32,103,101,110,101,114,97,116,105,111,110,115,32,97,102,116,101,114,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,101,113,117,97,108,32,116,111,32,111,114,32,104,105,103,104,101,114,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<46>>]},{p,[],[<<87,104,101,110,32,97,32,112,114,111,99,101,115,115,32,105,115,32,107,105,108,108,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32,105,116,32,105,115,32,107,105,108,108,101,100,32,98,101,102,111,114,101,32,116,104,101,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,99,111,109,112,108,101,116,101,32,97,110,100,32,116,104,117,115,32,110,111,32,108,97,114,103,101,32,104,101,97,112,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,46>>]}]},{dt,[],[{code,[],[<<98,117,115,121,95,112,111,114,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,103,101,116,115,32,115,117,115,112,101,110,100,101,100,32,98,101,99,97,117,115,101,32,105,116,32,115,101,110,100,115,32,116,111,32,97,32,98,117,115,121,32,112,111,114,116,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,83,117,115,80,105,100,44,32,98,117,115,121,95,112,111,114,116,44,32,80,111,114,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<83,117,115,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,105,100,32,116,104,97,116,32,103,111,116,32,115,117,115,112,101,110,100,101,100,32,119,104,101,110,32,115,101,110,100,105,110,103,32,116,111,32>>,{code,[],[<<80,111,114,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<98,117,115,121,95,100,105,115,116,95,112,111,114,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,32,103,101,116,115,32,115,117,115,112,101,110,100,101,100,32,98,101,99,97,117,115,101,32,105,116,32,115,101,110,100,115,32,116,111,32,97,32,112,114,111,99,101,115,115,32,111,110,32,97,32,114,101,109,111,116,101,32,110,111,100,101,32,119,104,111,115,101,32,105,110,116,101,114,45,110,111,100,101,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,119,97,115,32,104,97,110,100,108,101,100,32,98,121,32,97,32,98,117,115,121,32,112,111,114,116,44,32,97,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,109,111,110,105,116,111,114,44,32,83,117,115,80,105,100,44,32,98,117,115,121,95,100,105,115,116,95,112,111,114,116,44,32,80,111,114,116,125>>]},<<32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<46,32>>,{code,[],[<<83,117,115,80,105,100>>]},<<32,105,115,32,116,104,101,32,112,105,100,32,116,104,97,116,32,103,111,116,32,115,117,115,112,101,110,100,101,100,32,119,104,101,110,32,115,101,110,100,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,32,105,110,116,101,114,45,110,111,100,101,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,112,111,114,116,32>>,{code,[],[<<80,111,114,116>>]},<<46>>]}]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,115,101,116,116,105,110,103,115,32,106,117,115,116,32,108,105,107,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,48>>]}]},<<46>>]},{p,[],[<<84,104,101,32,97,114,103,117,109,101,110,116,115,32,116,111,32>>,{code,[],[<<115,121,115,116,101,109,95,109,111,110,105,116,111,114,47,50>>]},<<32,115,112,101,99,105,102,105,101,115,32,104,111,119,32,97,108,108,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,105,110,103,32,111,110,32,116,104,101,32,110,111,100,101,32,115,104,111,117,108,100,32,98,101,32,100,111,110,101,44,32,110,111,116,32,104,111,119,32,105,116,32,115,104,111,117,108,100,32,98,101,32,99,104,97,110,103,101,100,46,32,84,104,105,115,32,109,101,97,110,115,32,111,110,108,121,32,111,110,101,32,112,114,111,99,101,115,115,32,97,116,32,97,32,116,105,109,101,32,40>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<41,32,99,97,110,32,98,101,32,116,104,101,32,114,101,99,101,105,118,101,114,32,111,102,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,115,46,32,65,108,115,111,44,32,116,104,101,32,119,97,121,32,116,111,32,99,108,101,97,114,32,97,32,115,112,101,99,105,102,105,99,32,109,111,110,105,116,111,114,32,111,112,116,105,111,110,32,105,115,32,116,111,32,110,111,116,32,105,110,99,108,117,100,101,32,105,116,32,105,110,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<79,112,116,105,111,110,115>>]},<<46,32,65,108,108,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,105,110,103,32,119,105,108,108,44,32,104,111,119,101,118,101,114,44,32,98,101,32,99,108,101,97,114,101,100,32,105,102,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,116,101,114,109,105,110,97,116,101,115,46>>]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,110,111,32,115,112,101,99,105,97,108,32,111,112,116,105,111,110,32,118,97,108,117,101,115,32,40,108,105,107,101,32,122,101,114,111,41,32,116,111,32,99,108,101,97,114,32,97,110,32,111,112,116,105,111,110,46,32,83,111,109,101,32,111,102,32,116,104,101,32,111,112,116,105,111,110,115,32,104,97,118,101,32,97,32,117,110,115,112,101,99,105,102,105,101,100,32,109,105,110,105,109,117,109,32,118,97,108,117,101,46,32,76,111,119,101,114,32,118,97,108,117,101,115,32,119,105,108,108,32,98,101,32,97,100,106,117,115,116,101,100,32,116,111,32,116,104,101,32,109,105,110,105,109,117,109,32,118,97,108,117,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,105,115,32,99,117,114,114,101,110,116,108,121,32,110,111,116,32,112,111,115,115,105,98,108,101,32,116,111,32,109,111,110,105,116,111,114,32,97,108,108,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,32>>,{code,[],[<<123,108,111,110,103,95,103,99,44,32,48,125>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,102,32,97,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,103,101,116,115,32,115,111,32,108,97,114,103,101,32,116,104,97,116,32,105,116,32,105,116,115,101,108,102,32,115,116,97,114,116,115,32,116,111,32,99,97,117,115,101,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,109,101,115,115,97,103,101,115,32,119,104,101,110,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,110,103,44,32,116,104,101,32,109,101,115,115,97,103,101,115,32,101,110,108,97,114,103,101,32,116,104,101,32,112,114,111,99,101,115,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,110,100,32,112,114,111,98,97,98,108,121,32,109,97,107,101,32,116,104,101,32,112,114,111,98,108,101,109,32,119,111,114,115,101,46>>]},{p,[],[<<75,101,101,112,32,116,104,101,32,109,111,110,105,116,111,114,105,110,103,32,112,114,111,99,101,115,115,32,110,101,97,116,32,97,110,100,32,100,111,32,110,111,116,32,115,101,116,32,116,104,101,32,115,121,115,116,101,109,32,109,111,110,105,116,111,114,32,108,105,109,105,116,115,32,116,111,111,32,116,105,103,104,116,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<73,102,32>>,{code,[],[<<77,111,110,105,116,111,114,80,105,100>>]},<<32,105,115,32,110,111,116,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,55,52,56>>,signature => [{attribute,{1977,2},spec,{{erlang,system_monitor,2},[{type,{1977,28},bounded_fun,[{type,{1977,28},'fun',[{type,{1977,28},product,[{var,{1977,29},'MonitorPid'},{var,{1977,41},'Options'}]},{var,{1977,53},'MonSettings'}]},[{type,{1978,7},constraint,[{atom,{1978,7},is_subtype},[{var,{1978,7},'MonitorPid'},{type,{1978,21},pid,[]}]]},{type,{1979,7},constraint,[{atom,{1979,7},is_subtype},[{var,{1979,7},'Options'},{type,{1979,18},list,[{user_type,{1979,20},system_monitor_option,[]}]}]]},{type,{1980,7},constraint,[{atom,{1980,7},is_subtype},[{var,{1980,7},'MonSettings'},{type,{1980,22},union,[{atom,{1980,22},undefined},{type,{1980,34},tuple,[{var,{1980,36},'OldMonitorPid'},{var,{1980,51},'OldOptions'}]}]}]]},{type,{1981,7},constraint,[{atom,{1981,7},is_subtype},[{var,{1981,7},'OldMonitorPid'},{type,{1981,24},pid,[]}]]},{type,{1982,7},constraint,[{atom,{1982,7},is_subtype},[{var,{1982,7},'OldOptions'},{type,{1982,21},list,[{user_type,{1982,23},system_monitor_option,[]}]}]]}]]}]}}]}},{{function,system_profile,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1987}],[<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,112,114,111,102,105,108,105,110,103,32,115,101,116,116,105,110,103,115,32,115,101,116,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>]}]},<<32,97,115,32>>,{code,[],[<<123,80,114,111,102,105,108,101,114,80,105,100,44,32,79,112,116,105,111,110,115,125>>]},<<44,32,111,114,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,114,101,32,97,114,101,32,110,111,32,115,101,116,116,105,110,103,115,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,111,110,101,32,116,104,97,116,32,119,97,115,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,56,57,50>>,signature => [{attribute,{1987,2},spec,{{erlang,system_profile,0},[{type,{1987,28},bounded_fun,[{type,{1987,28},'fun',[{type,{1987,28},product,[]},{var,{1987,34},'ProfilerSettings'}]},[{type,{1988,7},constraint,[{atom,{1988,7},is_subtype},[{var,{1988,7},'ProfilerSettings'},{type,{1988,27},union,[{atom,{1988,27},undefined},{type,{1988,39},tuple,[{var,{1988,41},'ProfilerPid'},{var,{1988,54},'Options'}]}]}]]},{type,{1989,7},constraint,[{atom,{1989,7},is_subtype},[{var,{1989,7},'ProfilerPid'},{type,{1989,22},union,[{type,{1989,22},pid,[]},{type,{1989,30},port,[]}]}]]},{type,{1990,7},constraint,[{atom,{1990,7},is_subtype},[{var,{1990,7},'Options'},{type,{1990,18},list,[{user_type,{1990,20},system_profile_option,[]}]}]]}]]}]}}]}},{{function,system_profile,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1995}],[<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,121,115,116,101,109,95,112,114,111,102,105,108,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<83,101,116,115,32,115,121,115,116,101,109,32,112,114,111,102,105,108,101,114,32,111,112,116,105,111,110,115,46,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<32,105,115,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,111,114,32,112,111,114,116,32,114,101,99,101,105,118,105,110,103,32,112,114,111,102,105,108,105,110,103,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,114,101,99,101,105,118,101,114,32,105,115,32,101,120,99,108,117,100,101,100,32,102,114,111,109,32,97,108,108,32,112,114,111,102,105,108,105,110,103,46,32,84,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,32,97,32,108,105,115,116,32,111,102,32,112,114,111,102,105,108,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,120,99,108,117,115,105,118,101>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,115,121,110,99,104,114,111,110,111,117,115,32,99,97,108,108,32,116,111,32,97,32,112,111,114,116,32,102,114,111,109,32,97,32,112,114,111,99,101,115,115,32,105,115,32,100,111,110,101,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,110,111,116,32,114,117,110,110,97,98,108,101,32,100,117,114,105,110,103,32,116,104,101,32,99,97,108,108,32,114,117,110,116,105,109,101,32,116,111,32,116,104,101,32,112,111,114,116,46,32,84,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,105,102,105,101,100,32,97,115,32>>,{code,[],[<<105,110,97,99,116,105,118,101>>]},<<44,32,97,110,100,32,108,97,116,101,114,32>>,{code,[],[<<97,99,116,105,118,101>>]},<<32,119,104,101,110,32,116,104,101,32,112,111,114,116,32,99,97,108,108,98,97,99,107,32,114,101,116,117,114,110,115,46>>]}]},{dt,[],[{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,115,116,97,109,112,115,32,105,110,32,112,114,111,102,105,108,101,32,109,101,115,115,97,103,101,115,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,97,98,108,101,95,112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,114,111,99,101,115,115,32,105,115,32,112,117,116,32,105,110,116,111,32,111,114,32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,104,101,32,114,117,110,32,113,117,101,117,101,44,32,97,32,109,101,115,115,97,103,101,44,32>>,{code,[],[<<123,112,114,111,102,105,108,101,44,32,80,105,100,44,32,83,116,97,116,101,44,32,77,102,97,44,32,84,115,125>>]},<<44,32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<46,32,82,117,110,110,105,110,103,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,97,114,101,32,114,101,105,110,115,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32,114,117,110,32,113,117,101,117,101,32,97,102,116,101,114,32,104,97,118,105,110,103,32,98,101,101,110,32,112,114,101,45,101,109,112,116,101,100,32,100,111,32,110,111,116,32,116,114,105,103,103,101,114,32,116,104,105,115,32,109,101,115,115,97,103,101,46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,97,98,108,101,95,112,111,114,116,115>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,112,111,114,116,32,105,115,32,112,117,116,32,105,110,116,111,32,111,114,32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,104,101,32,114,117,110,32,113,117,101,117,101,44,32,97,32,109,101,115,115,97,103,101,44,32>>,{code,[],[<<123,112,114,111,102,105,108,101,44,32,80,111,114,116,44,32,83,116,97,116,101,44,32,48,44,32,84,115,125>>]},<<44,32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,99,104,101,100,117,108,101,114>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,115,99,104,101,100,117,108,101,114,32,105,115,32,112,117,116,32,116,111,32,115,108,101,101,112,32,111,114,32,97,119,111,107,101,110,44,32,97,32,109,101,115,115,97,103,101,44,32>>,{code,[],[<<123,112,114,111,102,105,108,101,44,32,115,99,104,101,100,117,108,101,114,44,32,73,100,44,32,83,116,97,116,101,44,32,78,111,83,99,104,101,100,115,44,32,84,115,125>>]},<<44,32,105,115,32,115,101,110,116,32,116,111,32>>,{code,[],[<<80,114,111,102,105,108,101,114,80,105,100>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,115,116,97,109,112,115,32,105,110,32,112,114,111,102,105,108,101,32,109,101,115,115,97,103,101,115,32,99,111,110,115,105,115,116,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,105,110,116,101,103,101,114,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{code,[],[<<123,101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41,44,32,101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,115,116,97,109,112,115,32,105,110,32,112,114,111,102,105,108,101,32,109,101,115,115,97,103,101,115,32,105,110,99,108,117,100,101,32,97,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,116,104,97,116,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,40,41>>]},<<46,32,84,104,105,115,32,105,115,32,97,108,115,111,32,116,104,101,32,100,101,102,97,117,108,116,32,105,102,32,110,111,32,116,105,109,101,32,115,116,97,109,112,32,102,108,97,103,32,105,115,32,115,112,101,99,105,102,105,101,100,46,32,73,102,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<32,104,97,115,32,98,101,101,110,32,101,110,97,98,108,101,100,32,116,104,114,111,117,103,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<44,32,116,104,105,115,32,97,108,115,111,32,101,102,102,101,99,116,115,32,116,104,101,32,116,105,109,101,32,115,116,97,109,112,32,112,114,111,100,117,99,101,100,32,105,110,32,112,114,111,102,105,108,105,110,103,32,109,101,115,115,97,103,101,115,32,119,104,101,110,32,102,108,97,103,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,101,110,97,98,108,101,100,46>>]}]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,112,114,111,102,105,108,101>>]},<<32,98,101,104,97,118,105,111,114,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,57,48,55>>,signature => [{attribute,{1995,2},spec,{{erlang,system_profile,2},[{type,{1995,28},bounded_fun,[{type,{1995,28},'fun',[{type,{1995,28},product,[{var,{1995,29},'ProfilerPid'},{var,{1995,42},'Options'}]},{var,{1995,54},'ProfilerSettings'}]},[{type,{1996,7},constraint,[{atom,{1996,7},is_subtype},[{var,{1996,7},'ProfilerPid'},{type,{1996,22},union,[{type,{1996,22},pid,[]},{type,{1996,30},port,[]},{atom,{1996,39},undefined}]}]]},{type,{1997,7},constraint,[{atom,{1997,7},is_subtype},[{var,{1997,7},'Options'},{type,{1997,18},list,[{user_type,{1997,20},system_profile_option,[]}]}]]},{type,{1998,7},constraint,[{atom,{1998,7},is_subtype},[{var,{1998,7},'ProfilerSettings'},{type,{1998,27},union,[{atom,{1998,27},undefined},{type,{1998,39},tuple,[{type,{1998,41},union,[{type,{1998,41},pid,[]},{type,{1998,49},port,[]}]},{type,{1998,57},list,[{user_type,{1998,59},system_profile_option,[]}]}]}]}]]}]]}]}}]}},{{function,system_time,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1548}],[<<115,121,115,116,101,109,95,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46>>]},{p,[],[<<67,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,43,32>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,116,105,109,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,48,57,56,49>>,signature => [{attribute,{1548,2},spec,{{erlang,system_time,0},[{type,{1548,25},'fun',[{type,{1548,25},product,[]},{type,{1548,31},integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,system_time,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1553}],[<<115,121,115,116,101,109,95,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,99,111,110,118,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32>>,{code,[],[<<85,110,105,116>>]},<<32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{p,[],[<<67,97,108,108,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,85,110,105,116,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]}]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,116,105,109,101,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,41>>]}]},{code,[],[<<44,32,110,97,116,105,118,101,44,32,85,110,105,116,41>>]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,116,105,109,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,48,48,51>>,signature => [{attribute,{1553,2},spec,{{erlang,system_time,1},[{type,{1553,25},bounded_fun,[{type,{1553,25},'fun',[{type,{1553,25},product,[{var,{1553,26},'Unit'}]},{type,{1553,35},integer,[]}]},[{type,{1554,7},constraint,[{atom,{1554,7},is_subtype},[{var,{1554,7},'Unit'},{user_type,{1554,15},time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,term_to_binary,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2673}],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,32,116,104,97,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,101,110,99,111,100,105,110,103,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,101,120,116,95,100,105,115,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]}]},{p,[],[<<84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,118,97,114,105,111,117,115,32,112,117,114,112,111,115,101,115,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,119,114,105,116,105,110,103,32,97,32,116,101,114,109,32,116,111,32,97,32,102,105,108,101,32,105,110,32,97,110,32,101,102,102,105,99,105,101,110,116,32,119,97,121,44,32,111,114,32,115,101,110,100,105,110,103,32,97,110,32,69,114,108,97,110,103,32,116,101,114,109,32,116,111,32,115,111,109,101,32,116,121,112,101,32,111,102,32,99,111,109,109,117,110,105,99,97,116,105,111,110,115,32,99,104,97,110,110,101,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,100,105,115,116,114,105,98,117,116,101,100,32,69,114,108,97,110,103,46>>]},{pre,[],[{code,[],[<<62,32,66,105,110,32,61,32,116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,104,101,108,108,111,41,46,10,60,60,49,51,49,44,49,48,48,44,48,44,53,44,49,48,52,44,49,48,49,44,49,48,56,44,49,48,56,44,49,49,49,62,62,10,62,32,104,101,108,108,111,32,61,32,98,105,110,97,114,121,95,116,111,95,116,101,114,109,40,66,105,110,41,46,10,104,101,108,108,111>>]}]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]}]},<<46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,110,111,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,119,105,108,108,32,114,101,116,117,114,110,32,116,104,101,32,115,97,109,101,32,101,110,99,111,100,101,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,97,109,101,32,116,101,114,109,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,48,50,53>>,signature => [{attribute,{2673,2},spec,{{term_to_binary,1},[{type,{2673,21},bounded_fun,[{type,{2673,21},'fun',[{type,{2673,21},product,[{var,{2673,22},'Term'}]},{user_type,{2673,31},ext_binary,[]}]},[{type,{2674,7},constraint,[{atom,{2674,7},is_subtype},[{var,{2674,7},'Term'},{type,{2674,15},term,[]}]]}]]}]}}]}},{{function,term_to_binary,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2678}],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,32,116,104,97,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,101,110,99,111,100,105,110,103,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,105,115,32,112,114,111,118,105,100,101,100,44,32,116,104,101,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,32,105,115,32,99,111,109,112,114,101,115,115,101,100,46,32,84,104,101,32,99,111,109,112,114,101,115,115,101,100,32,102,111,114,109,97,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,114,101,99,111,103,110,105,122,101,100,32,98,121,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]},<<32,97,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,55,66,46>>]},{p,[],[<<65,32,99,111,109,112,114,101,115,115,105,111,110,32,108,101,118,101,108,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,103,105,118,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<123,99,111,109,112,114,101,115,115,101,100,44,32,76,101,118,101,108,125>>]},<<46,32>>,{code,[],[<<76,101,118,101,108>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,119,105,116,104,32,114,97,110,103,101,32,48,46,46,57,44,32,119,104,101,114,101,58>>]},{ul,[],[{li,[],[{p,[],[{code,[],[<<48>>]},<<32,45,32,78,111,32,99,111,109,112,114,101,115,115,105,111,110,32,105,115,32,100,111,110,101,32,40,105,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,103,105,118,105,110,103,32,110,111,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,111,112,116,105,111,110,41,46>>]}]},{li,[],[{p,[],[{code,[],[<<49>>]},<<32,45,32,84,97,107,101,115,32,108,101,97,115,116,32,116,105,109,101,32,98,117,116,32,109,97,121,32,110,111,116,32,99,111,109,112,114,101,115,115,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32,104,105,103,104,101,114,32,108,101,118,101,108,115,46>>]}]},{li,[],[{p,[],[{code,[],[<<54>>]},<<32,45,32,68,101,102,97,117,108,116,32,108,101,118,101,108,32,119,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,105,115,32,112,114,111,118,105,100,101,100,46>>]}]},{li,[],[{p,[],[{code,[],[<<57>>]},<<32,45,32,84,97,107,101,115,32,109,111,115,116,32,116,105,109,101,32,97,110,100,32,116,114,105,101,115,32,116,111,32,112,114,111,100,117,99,101,32,97,32,115,109,97,108,108,101,114,32,114,101,115,117,108,116,46,32,78,111,116,105,99,101,32,34,116,114,105,101,115,34,32,105,110,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,115,101,110,116,101,110,99,101,59,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,105,110,112,117,116,32,116,101,114,109,44,32,108,101,118,101,108,32,57,32,99,111,109,112,114,101,115,115,105,111,110,32,101,105,116,104,101,114,32,100,111,101,115,32,111,114,32,100,111,101,115,32,110,111,116,32,112,114,111,100,117,99,101,32,97,32,115,109,97,108,108,101,114,32,114,101,115,117,108,116,32,116,104,97,110,32,108,101,118,101,108,32,49,32,99,111,109,112,114,101,115,115,105,111,110,46>>]}]}]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<123,109,105,110,111,114,95,118,101,114,115,105,111,110,44,32,86,101,114,115,105,111,110,125>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,99,111,110,116,114,111,108,32,115,111,109,101,32,101,110,99,111,100,105,110,103,32,100,101,116,97,105,108,115,46,32,84,104,105,115,32,111,112,116,105,111,110,32,119,97,115,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,45,52,46,32,84,104,101,32,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<86,101,114,115,105,111,110>>]},<<32,97,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<48>>]}]},{dd,[],[{p,[],[<<70,108,111,97,116,115,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,97,32,116,101,120,116,117,97,108,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,117,115,101,102,117,108,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,114,101,108,101,97,115,101,115,32,98,101,102,111,114,101,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,45,52,32,99,97,110,32,100,101,99,111,100,101,32,114,101,115,117,108,116,105,110,103,32,98,105,110,97,114,121,46>>]},{p,[],[<<84,104,105,115,32,118,101,114,115,105,111,110,32,101,110,99,111,100,101,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,108,97,116,105,110,49,32,115,116,114,105,110,103,32,117,115,105,110,103,32,108,97,116,105,110,49,32,101,110,99,111,100,105,110,103,32,119,104,105,108,101,32,111,110,108,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,108,97,116,105,110,49,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,117,116,102,56,46>>]}]},{dt,[],[{code,[],[<<49>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,105,115,32,97,115,32,111,102,32,69,114,108,97,110,103,47,79,84,80,32,49,55,46,48,32,116,104,101,32,100,101,102,97,117,108,116,46,32,73,116,32,102,111,114,99,101,115,32,97,110,121,32,102,108,111,97,116,115,32,105,110,32,116,104,101,32,116,101,114,109,32,116,111,32,98,101,32,101,110,99,111,100,101,100,32,105,110,32,97,32,109,111,114,101,32,115,112,97,99,101,45,101,102,102,105,99,105,101,110,116,32,97,110,100,32,101,120,97,99,116,32,119,97,121,32,40,110,97,109,101,108,121,32,105,110,32,116,104,101,32,54,52,45,98,105,116,32,73,69,69,69,32,102,111,114,109,97,116,44,32,114,97,116,104,101,114,32,116,104,97,110,32,99,111,110,118,101,114,116,101,100,32,116,111,32,97,32,116,101,120,116,117,97,108,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,41,46,32,65,115,32,102,114,111,109,32,69,114,108,97,110,103,47,79,84,80,32,82,49,49,66,45,52,44,32>>,{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]},<<32,99,97,110,32,100,101,99,111,100,101,32,116,104,105,115,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46>>]},{p,[],[<<84,104,105,115,32,118,101,114,115,105,111,110,32,101,110,99,111,100,101,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,108,97,116,105,110,49,32,115,116,114,105,110,103,32,117,115,105,110,103,32,108,97,116,105,110,49,32,101,110,99,111,100,105,110,103,32,119,104,105,108,101,32,111,110,108,121,32,97,116,111,109,115,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,108,97,116,105,110,49,32,97,114,101,32,101,110,99,111,100,101,100,32,117,115,105,110,103,32,117,116,102,56,46>>]}]},{dt,[],[{code,[],[<<50>>]}]},{dd,[],[{p,[],[<<68,114,111,112,115,32,117,115,97,103,101,32,111,102,32,116,104,101,32,108,97,116,105,110,49,32,97,116,111,109,32,101,110,99,111,100,105,110,103,32,97,110,100,32,117,110,99,111,110,100,105,116,105,111,110,97,108,108,121,32,117,115,101,32,117,116,102,56,32,101,110,99,111,100,105,110,103,32,102,111,114,32,97,108,108,32,97,116,111,109,115,46,32,84,104,105,115,32,119,105,108,108,32,98,101,32,99,104,97,110,103,101,100,32,116,111,32,116,104,101,32,100,101,102,97,117,108,116,32,105,110,32,97,32,102,117,116,117,114,101,32,109,97,106,111,114,32,114,101,108,101,97,115,101,32,111,102,32,69,114,108,97,110,103,47,79,84,80,46,32,69,114,108,97,110,103,47,79,84,80,32,115,121,115,116,101,109,115,32,97,115,32,111,102,32,82,49,54,66,32,99,97,110,32,100,101,99,111,100,101,32,116,104,105,115,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,46>>]}]}]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<100,101,116,101,114,109,105,110,105,115,116,105,99>>]},<<32,40,105,110,116,114,111,100,117,99,101,100,32,105,110,32,79,84,80,32,50,52,46,49,41,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,119,105,116,104,105,110,32,116,104,101,32,115,97,109,101,32,109,97,106,111,114,32,114,101,108,101,97,115,101,32,111,102,32,69,114,108,97,110,103,47,79,84,80,44,32,116,104,101,32,115,97,109,101,32,101,110,99,111,100,101,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,114,101,116,117,114,110,101,100,32,102,111,114,32,116,104,101,32,115,97,109,101,32,116,101,114,109,46,32,84,104,101,114,101,32,105,115,32,115,116,105,108,108,32,110,111,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,116,104,101,32,101,110,99,111,100,101,100,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,114,101,109,97,105,110,115,32,116,104,101,32,115,97,109,101,32,98,101,116,119,101,101,110,32,109,97,106,111,114,32,114,101,108,101,97,115,101,115,32,111,102,32,69,114,108,97,110,103,47,79,84,80,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<98,105,110,97,114,121,95,116,111,95,116,101,114,109,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,48,53,51>>,signature => [{attribute,{2678,2},spec,{{term_to_binary,2},[{type,{2678,21},bounded_fun,[{type,{2678,21},'fun',[{type,{2678,21},product,[{var,{2678,22},'Term'},{var,{2678,28},'Options'}]},{user_type,{2678,40},ext_binary,[]}]},[{type,{2679,7},constraint,[{atom,{2679,7},is_subtype},[{var,{2679,7},'Term'},{type,{2679,15},term,[]}]]},{type,{2680,7},constraint,[{atom,{2680,7},is_subtype},[{var,{2680,7},'Options'},{type,{2680,18},list,[{type,{2680,19},union,[{atom,{2680,19},compressed},{type,{2681,10},tuple,[{atom,{2681,11},compressed},{ann_type,{2681,23},[{var,{2681,23},'Level'},{type,{2681,32},range,[{integer,{2681,32},0},{integer,{2681,35},9}]}]}]},{atom,{2682,10},deterministic},{type,{2683,10},tuple,[{atom,{2683,11},minor_version},{ann_type,{2683,26},[{var,{2683,26},'Version'},{type,{2683,37},range,[{integer,{2683,37},0},{integer,{2683,40},2}]}]}]}]}]}]]}]]}]}}]}},{{function,term_to_iovec,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2687}],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,116,95,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<101,120,116,95,105,111,118,101,99,40,41>>]}]},<<46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,112,114,111,100,117,99,101,32,116,104,101,32,115,97,109,101,32,101,110,99,111,100,105,110,103,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<44,32,98,117,116,32,119,105,116,104,32,97,110,111,116,104,101,114,32,114,101,116,117,114,110,32,116,121,112,101,46,32,84,104,101,32,99,97,108,108,32>>,{code,[],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,116,101,114,109,95,116,111,95,105,111,118,101,99,40,84,101,114,109,41,41>>]},<<32,119,105,108,108,32,112,114,111,100,117,99,101,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,116,104,101,32,99,97,108,108,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,41>>]},<<46>>]},{p,[],[{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,105,115,32,97,32,112,117,114,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,41>>]},<<32,112,114,111,118,105,100,101,46,32>>,{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,99,97,110,32,102,111,114,32,101,120,97,109,112,108,101,32,114,101,102,101,114,32,100,105,114,101,99,116,108,121,32,116,111,32,111,102,102,32,104,101,97,112,32,98,105,110,97,114,105,101,115,32,105,110,115,116,101,97,100,32,111,102,32,99,111,112,121,105,110,103,32,116,104,101,32,98,105,110,97,114,121,32,100,97,116,97,32,105,110,116,111,32,116,104,101,32,114,101,115,117,108,116,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,49,50,51>>,signature => [{attribute,{2687,2},spec,{{term_to_iovec,1},[{type,{2687,20},bounded_fun,[{type,{2687,20},'fun',[{type,{2687,20},product,[{var,{2687,21},'Term'}]},{user_type,{2687,30},ext_iovec,[]}]},[{type,{2688,7},constraint,[{atom,{2688,7},is_subtype},[{var,{2688,7},'Term'},{type,{2688,15},term,[]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,term_to_iovec,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2692}],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,116,95,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<101,120,116,95,105,111,118,101,99,40,41>>]}]},<<46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,112,114,111,100,117,99,101,32,116,104,101,32,115,97,109,101,32,101,110,99,111,100,105,110,103,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<44,32,98,117,116,32,119,105,116,104,32,97,110,111,116,104,101,114,32,114,101,116,117,114,110,32,116,121,112,101,46,32,84,104,101,32,99,97,108,108,32>>,{code,[],[<<105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,40,116,101,114,109,95,116,111,95,105,111,118,101,99,40,84,101,114,109,44,32,79,112,116,115,41,41>>]},<<32,119,105,108,108,32,112,114,111,100,117,99,101,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,84,101,114,109,44,32,79,112,116,115,41>>]},<<46>>]},{p,[],[<<67,117,114,114,101,110,116,108,121,32,114,101,99,111,103,110,105,115,101,100,32,111,112,116,105,111,110,115,32,97,114,101,32,97,108,108,32,111,112,116,105,111,110,115,32,114,101,99,111,103,110,105,115,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<46>>]},{p,[],[{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,105,115,32,97,32,112,117,114,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32>>,{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,40,41>>]},<<32,112,114,111,118,105,100,101,46,32>>,{code,[],[<<116,101,114,109,95,116,111,95,105,111,118,101,99,40,41>>]},<<32,99,97,110,32,102,111,114,32,101,120,97,109,112,108,101,32,114,101,102,101,114,32,100,105,114,101,99,116,108,121,32,116,111,32,111,102,102,32,104,101,97,112,32,98,105,110,97,114,105,101,115,32,105,110,115,116,101,97,100,32,111,102,32,99,111,112,121,105,110,103,32,116,104,101,32,98,105,110,97,114,121,32,100,97,116,97,32,105,110,116,111,32,116,104,101,32,114,101,115,117,108,116,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,101,114,109,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,49,52,56>>,signature => [{attribute,{2692,2},spec,{{term_to_iovec,2},[{type,{2692,20},bounded_fun,[{type,{2692,20},'fun',[{type,{2692,20},product,[{var,{2692,21},'Term'},{var,{2692,27},'Options'}]},{user_type,{2692,39},ext_iovec,[]}]},[{type,{2693,7},constraint,[{atom,{2693,7},is_subtype},[{var,{2693,7},'Term'},{type,{2693,15},term,[]}]]},{type,{2694,7},constraint,[{atom,{2694,7},is_subtype},[{var,{2694,7},'Options'},{type,{2694,18},list,[{type,{2694,19},union,[{atom,{2694,19},compressed},{type,{2695,10},tuple,[{atom,{2695,11},compressed},{ann_type,{2695,23},[{var,{2695,23},'Level'},{type,{2695,32},range,[{integer,{2695,32},0},{integer,{2695,35},9}]}]}]},{atom,{2696,10},deterministic},{type,{2697,10},tuple,[{atom,{2697,11},minor_version},{ann_type,{2697,26},[{var,{2697,26},'Version'},{type,{2697,37},range,[{integer,{2697,37},0},{integer,{2697,40},2}]}]}]}]}]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,throw,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2004}],[<<116,104,114,111,119,47,49>>],#{<<101,110>> => [{p,[],[<<82,97,105,115,101,115,32,97,110,32,101,120,99,101,112,116,105,111,110,32,111,102,32,99,108,97,115,115,32>>,{code,[],[<<116,104,114,111,119>>]},<<46,32,73,110,116,101,110,100,101,100,32,116,111,32,98,101,32,117,115,101,100,32,116,111,32,100,111,32,110,111,110,45,108,111,99,97,108,32,114,101,116,117,114,110,115,32,102,114,111,109,32,102,117,110,99,116,105,111,110,115,46>>]},{p,[],[<<73,102,32,101,118,97,108,117,97,116,101,100,32,119,105,116,104,105,110,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,99,97,116,99,104>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<99,97,116,99,104,32,101,120,112,114,101,115,115,105,111,110>>]},<<44,32,116,104,101,32,99,97,116,99,104,32,101,120,112,114,101,115,115,105,111,110,32,114,101,116,117,114,110,115,32,118,97,108,117,101,32>>,{code,[],[<<65,110,121>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,99,97,116,99,104,32,116,104,114,111,119,40,123,104,101,108,108,111,44,32,116,104,101,114,101,125,41,46,10,32,32,32,32,32,32,32,32,123,104,101,108,108,111,44,116,104,101,114,101,125>>]}]},{p,[],[<<73,102,32,101,118,97,108,117,97,116,101,100,32,119,105,116,104,105,110,32,97,32>>,{code,[],[<<116,114,121>>]},<<45,98,108,111,99,107,32,111,102,32,97,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,116,114,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,114,121,32,101,120,112,114,101,115,115,105,111,110>>]},<<44,32,116,104,101,32,118,97,108,117,101,32>>,{code,[],[<<65,110,121>>]},<<32,99,97,110,32,98,101,32,99,97,117,103,104,116,32,119,105,116,104,105,110,32,116,104,101,32,99,97,116,99,104,32,98,108,111,99,107,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<116,114,121,10,32,32,32,32,116,104,114,111,119,40,123,109,121,95,101,120,99,101,112,116,105,111,110,44,32,34,83,111,109,101,116,104,105,110,103,32,104,97,112,112,101,110,101,100,34,125,41,10,99,97,116,99,104,10,32,32,32,32,116,104,114,111,119,58,123,109,121,95,101,120,99,101,112,116,105,111,110,44,32,68,101,115,99,125,32,45,62,10,32,32,32,32,32,32,32,32,105,111,58,102,111,114,109,97,116,40,115,116,97,110,100,97,114,100,95,101,114,114,111,114,44,32,34,69,114,114,111,114,58,32,126,115,126,110,34,44,32,91,68,101,115,99,93,41,10,101,110,100>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<110,111,99,97,116,99,104>>]},<<32,105,102,32,110,111,116,32,99,97,117,103,104,116,32,98,121,32,97,110,32,101,120,99,101,112,116,105,111,110,32,104,97,110,100,108,101,114,46>>]},{p,[],[<<83,101,101,32,116,104,101,32,103,117,105,100,101,32,97,98,111,117,116,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<101,114,114,111,114,115,32,97,110,100,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,49,55,54>>,signature => [{attribute,{2004,2},spec,{{throw,1},[{type,{2004,12},bounded_fun,[{type,{2004,12},'fun',[{type,{2004,12},product,[{var,{2004,13},'Any'}]},{type,{2004,21},no_return,[]}]},[{type,{2005,7},constraint,[{atom,{2005,7},is_subtype},[{var,{2005,7},'Any'},{type,{2005,14},term,[]}]]}]]}]}}]}},{{function,time,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2010}],[<<116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,32,97,115,32>>,{code,[],[<<123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125>>]},<<46>>]},{p,[],[<<84,104,101,32,116,105,109,101,32,122,111,110,101,32,97,110,100,32,68,97,121,108,105,103,104,116,32,83,97,118,105,110,103,32,84,105,109,101,32,99,111,114,114,101,99,116,105,111,110,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,105,109,101,40,41,46,10,123,57,44,52,50,44,52,52,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,50,48,52>>,signature => [{attribute,{2010,2},spec,{{time,0},[{type,{2010,11},bounded_fun,[{type,{2010,11},'fun',[{type,{2010,11},product,[]},{var,{2010,17},'Time'}]},[{type,{2011,7},constraint,[{atom,{2011,7},is_subtype},[{var,{2011,7},'Time'},{remote_type,{2011,15},[{atom,{2011,15},calendar},{atom,{2011,24},time},[]]}]]}]]}]}}]}},{{function,time_offset,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1608}],[<<116,105,109,101,95,111,102,102,115,101,116,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,32,111,102,102,115,101,116,32,98,101,116,119,101,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,105,110,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,105,109,101,32,117,110,105,116>>]},<<46,32,67,117,114,114,101,110,116,32,116,105,109,101,32,111,102,102,115,101,116,32,97,100,100,101,100,32,116,111,32,97,110,32,69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101,32,103,105,118,101,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101,46>>]},{p,[],[<<84,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,99,104,97,110,103,101,32,100,117,114,105,110,103,32,111,112,101,114,97,116,105,111,110,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<32,117,115,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,99,104,97,110,103,101,32,105,110,32,116,105,109,101,32,111,102,102,115,101,116,32,99,97,110,32,98,101,32,111,98,115,101,114,118,101,100,32,97,116,32,115,108,105,103,104,116,108,121,32,100,105,102,102,101,114,101,110,116,32,112,111,105,110,116,115,32,105,110,32,116,105,109,101,32,98,121,32,100,105,102,102,101,114,101,110,116,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,105,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,77,117,108,116,105,95,84,105,109,101,95,87,97,114,112,95,77,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<109,117,108,116,105,45,116,105,109,101,32,119,97,114,112,32,109,111,100,101>>]},<<44,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,99,104,97,110,103,101,100,32,119,104,101,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,100,101,116,101,99,116,115,32,116,104,97,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,79,83,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,104,97,115,32,99,104,97,110,103,101,100,46,32,84,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,119,105,108,108,44,32,104,111,119,101,118,101,114,44,32,110,111,116,32,100,101,116,101,99,116,32,116,104,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,119,104,101,110,32,105,116,32,111,99,99,117,114,115,46,32,65,32,116,97,115,107,32,99,104,101,99,107,105,110,103,32,116,104,101,32,116,105,109,101,32,111,102,102,115,101,116,32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,101,120,101,99,117,116,101,32,97,116,32,108,101,97,115,116,32,111,110,99,101,32,97,32,109,105,110,117,116,101,59,32,115,111,44,32,117,110,100,101,114,32,110,111,114,109,97,108,32,111,112,101,114,97,116,105,111,110,32,116,104,105,115,32,105,115,32,116,111,32,98,101,32,100,101,116,101,99,116,101,100,32,119,105,116,104,105,110,32,97,32,109,105,110,117,116,101,44,32,98,117,116,32,100,117,114,105,110,103,32,104,101,97,118,121,32,108,111,97,100,32,105,116,32,99,97,110,32,116,97,107,101,32,108,111,110,103,101,114,32,116,105,109,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,50,49,57>>,signature => [{attribute,{1608,2},spec,{{erlang,time_offset,0},[{type,{1608,25},'fun',[{type,{1608,25},product,[]},{type,{1608,31},integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,time_offset,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1613}],[<<116,105,109,101,95,111,102,102,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,32,111,102,102,115,101,116,32,98,101,116,119,101,101,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,99,111,110,118,101,114,116,101,100,32,105,110,116,111,32,116,104,101,32>>,{code,[],[<<85,110,105,116>>]},<<32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{p,[],[<<83,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116>>]}]},{code,[],[<<40>>]},{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,95,111,102,102,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,95,111,102,102,115,101,116,40,41>>]}]},{code,[],[<<44,32,110,97,116,105,118,101,44,32,85,110,105,116,41>>]},<<32,104,111,119,101,118,101,114,32,111,112,116,105,109,105,122,101,100,32,102,111,114,32,99,111,109,109,111,110,108,121,32,117,115,101,100,32>>,{code,[],[<<85,110,105,116>>]},<<115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,50,53,49>>,signature => [{attribute,{1613,2},spec,{{erlang,time_offset,1},[{type,{1613,25},bounded_fun,[{type,{1613,25},'fun',[{type,{1613,25},product,[{var,{1613,26},'Unit'}]},{type,{1613,35},integer,[]}]},[{type,{1614,7},constraint,[{atom,{1614,7},is_subtype},[{var,{1614,7},'Unit'},{user_type,{1614,15},time_unit,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,timestamp,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1619}],[<<116,105,109,101,115,116,97,109,112,47,48>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<116,105,109,101,115,116,97,109,112>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,99,117,114,114,101,110,116,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,83,121,115,116,101,109,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101>>]},<<32,111,110,32,116,104,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,77,101,103,97,83,101,99,115,44,32,83,101,99,115,44,32,77,105,99,114,111,83,101,99,115,125>>]},<<46,32,84,104,105,115,32,102,111,114,109,97,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,116,105,109,101,115,116,97,109,112,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,116,105,109,101,115,116,97,109,112,47,48>>]}]},<<32,97,110,100,32,116,104,101,32,100,101,112,114,101,99,97,116,101,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,110,111,119,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,110,111,119,47,48>>]}]},<<32,117,115,101,46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,101,32,101,120,105,115,116,101,110,99,101,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,115,116,97,109,112,40,41>>]},<<32,105,115,32,112,117,114,101,108,121,32,116,111,32,115,105,109,112,108,105,102,121,32,117,115,101,32,102,111,114,32,101,120,105,115,116,105,110,103,32,99,111,100,101,32,116,104,97,116,32,97,115,115,117,109,101,115,32,116,104,105,115,32,116,105,109,101,32,115,116,97,109,112,32,102,111,114,109,97,116,46,32,67,117,114,114,101,110,116,32,69,114,108,97,110,103,32,115,121,115,116,101,109,32,116,105,109,101,32,99,97,110,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,108,121,32,98,101,32,114,101,116,114,105,101,118,101,100,32,105,110,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,111,102,32,121,111,117,114,32,99,104,111,105,99,101,32,117,115,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,116,105,109,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,47,49>>]}]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,115,116,97,109,112,40,41>>]},<<32,66,73,70,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<116,105,109,101,115,116,97,109,112,40,41,32,45,62,10,32,32,32,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,61,32,101,114,108,97,110,103,58,115,121,115,116,101,109,95,116,105,109,101,40,109,105,99,114,111,115,101,99,111,110,100,41,44,10,32,32,32,32,77,101,103,97,83,101,99,115,32,61,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,100,105,118,32,49,48,48,48,95,48,48,48,95,48,48,48,95,48,48,48,44,10,32,32,32,32,83,101,99,115,32,61,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,100,105,118,32,49,48,48,48,95,48,48,48,32,45,32,77,101,103,97,83,101,99,115,42,49,48,48,48,95,48,48,48,44,10,32,32,32,32,77,105,99,114,111,83,101,99,115,32,61,32,69,114,108,97,110,103,83,121,115,116,101,109,84,105,109,101,32,114,101,109,32,49,48,48,48,95,48,48,48,44,10,32,32,32,32,123,77,101,103,97,83,101,99,115,44,32,83,101,99,115,44,32,77,105,99,114,111,83,101,99,115,125,46>>]}]},{p,[],[<<73,116,44,32,104,111,119,101,118,101,114,44,32,117,115,101,115,32,97,32,110,97,116,105,118,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,98,117,105,108,100,32,103,97,114,98,97,103,101,32,111,110,32,116,104,101,32,104,101,97,112,32,97,110,100,32,119,105,116,104,32,115,108,105,103,104,116,108,121,32,98,101,116,116,101,114,32,112,101,114,102,111,114,109,97,110,99,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,116,105,109,101,32,105,115,32>>,{em,[],[<<110,111,116>>]},<<32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,116,105,109,101,32,105,110,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,115,101,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,87,97,114,112,95,77,111,100,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<116,105,109,101,32,119,97,114,112,32,109,111,100,101,115>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,50,55,48>>,signature => [{attribute,{1619,2},spec,{{erlang,timestamp,0},[{type,{1619,23},bounded_fun,[{type,{1619,23},'fun',[{type,{1619,23},product,[]},{var,{1619,29},'Timestamp'}]},[{type,{1620,7},constraint,[{atom,{1620,7},is_subtype},[{var,{1620,7},'Timestamp'},{user_type,{1620,20},timestamp,[]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,tl,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2702}],[<<116,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,116,97,105,108,32,111,102,32>>,{code,[],[<<76,105,115,116>>]},<<44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,108,105,115,116,32,109,105,110,117,115,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,44,32,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,93,41,46,10,91,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,93>>]}]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,93,41,46,10,91,93>>]}]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,44,32,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,32,124,32,105,109,112,114,111,112,101,114,95,101,110,100,93,41,46,10,91,103,117,105,108,105,101,115,44,32,98,101,97,115,116,105,101,115,32,124,32,105,109,112,114,111,112,101,114,95,101,110,100,93>>]}]},{pre,[],[{code,[],[<<62,32,116,108,40,91,103,101,101,115,116,105,101,115,32,124,32,105,109,112,114,111,112,101,114,95,101,110,100,93,41,46,10,105,109,112,114,111,112,101,114,95,101,110,100>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<76,105,115,116>>]},<<32,105,115,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32>>,{code,[],[<<91,93>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,51,48,57>>,signature => [{attribute,{2702,2},spec,{{tl,1},[{type,{2702,9},bounded_fun,[{type,{2702,9},'fun',[{type,{2702,9},product,[{var,{2702,10},'List'}]},{type,{2702,19},term,[]}]},[{type,{2703,7},constraint,[{atom,{2703,7},is_subtype},[{var,{2703,7},'List'},{type,{2703,15},nonempty_maybe_improper_list,[]}]]}]]}]}}]}},{{function,trace,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2016}],[<<116,114,97,99,101,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<116,114,97,99,101,95,102,108,97,103>>}],[]}]},{p,[],[<<84,117,114,110,115,32,111,110,32,40,105,102,32>>,{code,[],[<<72,111,119,32,61,61,32,116,114,117,101>>]},<<41,32,111,114,32,111,102,102,32,40,105,102,32>>,{code,[],[<<72,111,119,32,61,61,32,102,97,108,115,101>>]},<<41,32,116,104,101,32,116,114,97,99,101,32,102,108,97,103,115,32,105,110,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,114,111,99,101,115,115,101,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<46>>]},{p,[],[{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32,101,105,116,104,101,114,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,32,102,111,114,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,44,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,97,116,111,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,97,110,100,32,97,108,108,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,97,108,108,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<112,111,114,116,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,111,114,116,115,32,97,110,100,32,97,108,108,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<101,120,105,115,116,105,110,103>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,46>>]},{dt,[],[{code,[],[<<101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,101,115,46>>]},{dt,[],[{code,[],[<<101,120,105,115,116,105,110,103,95,112,111,114,116,115>>]}]},{dd,[],[<<65,108,108,32,99,117,114,114,101,110,116,108,121,32,101,120,105,115,116,105,110,103,32,112,111,114,116,115,46>>]},{dt,[],[{code,[],[<<110,101,119>>]}]},{dd,[],[<<65,108,108,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,112,111,114,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<110,101,119,95,112,114,111,99,101,115,115,101,115>>]}]},{dd,[],[<<65,108,108,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]},{dt,[],[{code,[],[<<110,101,119,95,112,111,114,116,115>>]}]},{dd,[],[<<65,108,108,32,112,111,114,116,115,32,116,104,97,116,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,32,105,110,32,116,104,101,32,102,117,116,117,114,101,46>>]}]},{p,[],[{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,108,97,103,115,32,40,116,104,101,32,34,109,101,115,115,97,103,101,32,116,97,103,115,34,32,114,101,102,101,114,115,32,116,111,32,116,104,101,32,108,105,115,116,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,114,97,99,101,32,109,101,115,115,97,103,101,115>>]}]},<<41,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[{p,[],[<<83,101,116,115,32,97,108,108,32,116,114,97,99,101,32,102,108,97,103,115,32,101,120,99,101,112,116,32>>,{code,[],[<<116,114,97,99,101,114>>]},<<32,97,110,100,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<44,32,119,104,105,99,104,32,97,114,101,32,105,110,32,116,104,101,105,114,32,110,97,116,117,114,101,32,100,105,102,102,101,114,101,110,116,32,116,104,97,110,32,116,104,101,32,111,116,104,101,114,115,46>>]}]},{dt,[],[{code,[],[<<115,101,110,100>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,101,110,100,105,110,103,32,111,102,32,109,101,115,115,97,103,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,110,100>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<39,114,101,99,101,105,118,101,39>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,114,101,99,101,105,118,105,110,103,32,111,102,32,109,101,115,115,97,103,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,99,101,105,118,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<39,114,101,99,101,105,118,101,39>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,99,101,114,116,97,105,110,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,83,112,101,99,105,102,121,32,119,104,105,99,104,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,116,111,32,116,114,97,99,101,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,97,108,108>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,102,114,111,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,102,114,111,109>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<115,105,108,101,110,116>>]}]},{dd,[],[{p,[],[<<85,115,101,100,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,46,32,84,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<114,101,116,117,114,110,95,102,114,111,109>>]},<<44,32,97,110,100,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,105,110,104,105,98,105,116,101,100,32,105,102,32,116,104,105,115,32,102,108,97,103,32,105,115,32,115,101,116,44,32,98,117,116,32,116,104,101,121,32,97,114,101,32,101,120,101,99,117,116,101,100,32,97,115,32,110,111,114,109,97,108,32,105,102,32,116,104,101,114,101,32,97,114,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46>>]},{p,[],[<<83,105,108,101,110,116,32,109,111,100,101,32,105,115,32,105,110,104,105,98,105,116,101,100,32,98,121,32,101,120,101,99,117,116,105,110,103,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,40,95,44,32,102,97,108,115,101,44,32,91,115,105,108,101,110,116,124,95,93,41>>]},<<44,32,111,114,32,98,121,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,101,120,101,99,117,116,105,110,103,32,116,104,101,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,115,105,108,101,110,116,44,32,102,97,108,115,101,125>>]},<<46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<115,105,108,101,110,116>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,97,99,105,108,105,116,97,116,101,115,32,115,101,116,116,105,110,103,32,117,112,32,97,32,116,114,97,99,101,32,111,110,32,109,97,110,121,32,111,114,32,101,118,101,110,32,97,108,108,32,112,114,111,99,101,115,115,101,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,84,104,101,32,116,114,97,99,101,32,99,97,110,32,116,104,101,110,32,98,101,32,97,99,116,105,118,97,116,101,100,32,97,110,100,32,100,101,97,99,116,105,118,97,116,101,100,32,117,115,105,110,103,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,115,105,108,101,110,116,44,66,111,111,108,125>>]},<<44,32,103,105,118,105,110,103,32,97,32,104,105,103,104,32,100,101,103,114,101,101,32,111,102,32,99,111,110,116,114,111,108,32,111,102,32,119,104,105,99,104,32,102,117,110,99,116,105,111,110,115,32,119,105,116,104,32,119,104,105,99,104,32,97,114,103,117,109,101,110,116,115,32,116,104,97,116,32,116,114,105,103,103,101,114,32,116,104,101,32,116,114,97,99,101,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,97,108,108>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,102,114,111,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,102,114,111,109>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,116,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,116,111>>]}]},<<46,32,79,114,32,114,97,116,104,101,114,44,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,46>>]}]},{dt,[],[{code,[],[<<114,101,116,117,114,110,95,116,111>>]}]},{dd,[],[{p,[],[<<85,115,101,100,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,46,32,84,114,97,99,101,115,32,116,104,101,32,114,101,116,117,114,110,32,102,114,111,109,32,97,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,32,98,97,99,107,32,116,111,32,105,116,115,32,99,97,108,108,101,114,46,32,79,110,108,121,32,119,111,114,107,115,32,102,111,114,32,102,117,110,99,116,105,111,110,115,32,116,114,97,99,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,116,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]},{p,[],[<<84,104,101,32,115,101,109,97,110,116,105,99,115,32,105,115,32,116,104,97,116,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,119,104,101,110,32,97,32,99,97,108,108,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,44,32,116,104,97,116,32,105,115,44,32,119,104,101,110,32,97,32,99,104,97,105,110,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,115,32,101,110,100,115,46,32,79,110,108,121,32,111,110,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,112,101,114,32,99,104,97,105,110,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,115,44,32,115,111,32,116,104,101,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,110,101,115,115,32,102,111,114,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,114,101,32,107,101,112,116,32,119,104,105,108,101,32,116,114,97,99,105,110,103,32,119,105,116,104,32,116,104,105,115,32,102,108,97,103,46,32,85,115,105,110,103,32>>,{code,[],[<<99,97,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,116,114,97,99,101,32,116,111,103,101,116,104,101,114,32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,107,110,111,119,32,101,120,97,99,116,108,121,32,105,110,32,119,104,105,99,104,32,102,117,110,99,116,105,111,110,32,97,32,112,114,111,99,101,115,115,32,101,120,101,99,117,116,101,115,32,97,116,32,97,110,121,32,116,105,109,101,46>>]},{p,[],[<<84,111,32,103,101,116,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,99,111,110,116,97,105,110,105,110,103,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,102,114,111,109,32,102,117,110,99,116,105,111,110,115,44,32,117,115,101,32,116,104,101,32>>,{code,[],[<<123,114,101,116,117,114,110,95,116,114,97,99,101,125>>]},<<32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,99,116,105,111,110,32,105,110,115,116,101,97,100,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,116,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,116,117,114,110,95,116,111>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,112,114,111,99,101,115,115,45,114,101,108,97,116,101,100,32,101,118,101,110,116,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,112,97,119,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,112,97,119,110,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,101,120,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,120,105,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,108,105,110,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,105,110,107>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,108,105,110,107>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,108,105,110,107>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,108,105,110,107,101,100>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<112,111,114,116,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,112,111,114,116,45,114,101,108,97,116,101,100,32,101,118,101,110,116,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,112,101,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,112,101,110>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,108,111,115,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<99,108,111,115,101,100>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,114,101,103,105,115,116,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,114,101,103,105,115,116,101,114>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,108,105,110,107,101,100>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,105,110,103>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<101,120,105,116,105,110,103>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,101,120,105,116,105,110,103,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,101,120,105,116,105,110,103,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110,95,101,120,105,116,105,110,103>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,105,110,103,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116,95,101,120,105,116,105,110,103>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,101,100,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116,95,101,120,105,116,101,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,105,110,103,95,112,114,111,99,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,112,114,111,99,101,115,115,101,115,32,106,117,115,116,32,108,105,107,101,32>>,{code,[],[<<114,117,110,110,105,110,103>>]},<<46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,111,112,116,105,111,110,32,97,108,115,111,32,105,110,99,108,117,100,101,115,32,115,99,104,101,100,117,108,101,32,101,118,101,110,116,115,32,119,104,101,110,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,101,99,117,116,101,115,32,119,105,116,104,105,110,32,116,104,101,32,99,111,110,116,101,120,116,32,111,102,32,97,32,112,111,114,116,32,119,105,116,104,111,117,116,32,98,101,105,110,103,32,115,99,104,101,100,117,108,101,100,32,111,117,116,32,105,116,115,101,108,102,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,114,111,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<114,117,110,110,105,110,103,95,112,111,114,116,115>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,115,99,104,101,100,117,108,105,110,103,32,111,102,32,112,111,114,116,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,111,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,110>>]}]},<<32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,111,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,117,116>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]}]},{dd,[],[{p,[],[<<84,114,97,99,101,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,111,102,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<77,101,115,115,97,103,101,32,116,97,103,115,58,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]}]},<<44,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,101,110,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<103,99,95,109,105,110,111,114,95,101,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<73,110,99,108,117,100,101,115,32,97,32,116,105,109,101,32,115,116,97,109,112,32,105,110,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,110,111,119,40,41>>]},<<46>>]}]},{dt,[],[{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<65,32,103,108,111,98,97,108,32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,116,104,101,32,69,114,108,97,110,103,32,110,111,100,101,32,116,104,97,116,32,109,97,107,101,115,32,97,108,108,32,116,114,97,99,101,32,116,105,109,101,32,115,116,97,109,112,115,32,117,115,105,110,103,32,102,108,97,103,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<32,116,111,32,98,101,32,105,110,32,67,80,85,32,116,105,109,101,44,32,110,111,116,32,119,97,108,108,32,99,108,111,99,107,32,116,105,109,101,46,32,84,104,97,116,32,105,115,44,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,110,111,116,32,98,101,32,117,115,101,100,32,105,102,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<32,111,114,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,101,110,97,98,108,101,100,46,32,79,110,108,121,32,97,108,108,111,119,101,100,32,119,105,116,104,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99,61,61,97,108,108>>]},<<46,32,73,102,32,116,104,101,32,104,111,115,116,32,109,97,99,104,105,110,101,32,79,83,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,104,105,103,104,45,114,101,115,111,108,117,116,105,111,110,32,67,80,85,32,116,105,109,101,32,109,101,97,115,117,114,101,109,101,110,116,115,44,32>>,{code,[],[<<116,114,97,99,101,47,51>>]},<<32,101,120,105,116,115,32,119,105,116,104,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,109,111,115,116,32,79,83,32,100,111,32,110,111,116,32,115,121,110,99,104,114,111,110,105,122,101,32,116,104,105,115,32,118,97,108,117,101,32,97,99,114,111,115,115,32,99,111,114,101,115,44,32,115,111,32,98,101,32,112,114,101,112,97,114,101,100,32,116,104,97,116,32,116,105,109,101,32,99,97,110,32,115,101,101,109,32,116,111,32,103,111,32,98,97,99,107,119,97,114,100,115,32,119,104,101,110,32,117,115,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<73,110,99,108,117,100,101,115,32,97,110,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,116,105,109,101,32,115,116,97,109,112,32,105,110,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41>>]}]},<<46,32,84,104,105,115,32,102,108,97,103,32,111,118,101,114,114,105,100,101,115,32,102,108,97,103,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]}]},{dd,[],[{p,[],[<<73,110,99,108,117,100,101,115,32,97,110,32,116,105,109,101,32,115,116,97,109,112,32,99,111,110,115,105,115,116,105,110,103,32,111,102,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,69,114,108,97,110,103,95,77,111,110,111,116,111,110,105,99,95,84,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,108,97,110,103,32,109,111,110,111,116,111,110,105,99,32,116,105,109,101>>]},<<32,97,110,100,32,97,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,105,110,116,101,103,101,114,32,105,110,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32,84,104,101,32,116,105,109,101,32,115,116,97,109,112,32,40,84,115,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,102,111,114,109,97,116,32,97,110,100,32,118,97,108,117,101,32,97,115,32,112,114,111,100,117,99,101,100,32,98,121,32>>,{code,[],[<<123>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,111,116,111,110,105,99,95,116,105,109,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,109,111,110,111,116,111,110,105,99,95,116,105,109,101,40,110,97,110,111,115,101,99,111,110,100,41>>]}]},{code,[],[<<44>>]},<<32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]}]},{code,[],[<<125>>]},<<46,32,84,104,105,115,32,102,108,97,103,32,111,118,101,114,114,105,100,101,115,32,102,108,97,103,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<46>>]}]},{dt,[],[{code,[],[<<97,114,105,116,121>>]}]},{dd,[],[{p,[],[<<85,115,101,100,32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,46,32>>,{code,[],[<<123,77,44,32,70,44,32,65,114,105,116,121,125>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<123,77,44,32,70,44,32,65,114,103,115,125>>]},<<32,105,110,32,99,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,97,110,121,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,105,110,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,116,104,101,32,102,105,114,115,116,32,112,114,111,99,101,115,115,32,99,114,101,97,116,101,100,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,101,120,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,97,110,121,32,112,114,111,99,101,115,115,32,108,105,110,107,101,100,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,105,110,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]},<<46>>]}]},{dt,[],[{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,116,104,101,32,102,105,114,115,116,32,112,114,111,99,101,115,115,32,108,105,110,107,101,100,32,116,111,32,98,121,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,104,101,114,105,116,32,105,116,115,32,116,114,97,99,101,32,102,108,97,103,115,44,32,101,120,99,108,117,100,105,110,103,32,102,108,97,103,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,99,101,114,44,32,84,114,97,99,101,114,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,119,104,101,114,101,32,116,111,32,115,101,110,100,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32>>,{code,[],[<<84,114,97,99,101,114>>]},<<32,109,117,115,116,32,98,101,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,108,111,99,97,108,32,112,114,111,99,101,115,115,32,111,114,32,116,104,101,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,97,32,108,111,99,97,108,32,112,111,114,116,46>>]}]},{dt,[],[{code,[],[<<123,116,114,97,99,101,114,44,32,84,114,97,99,101,114,77,111,100,117,108,101,44,32,84,114,97,99,101,114,83,116,97,116,101,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,97,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,105,115,32,116,111,32,98,101,32,99,97,108,108,101,100,32,105,110,115,116,101,97,100,32,111,102,32,115,101,110,100,105,110,103,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,46,32,84,104,101,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,99,97,110,32,116,104,101,110,32,105,103,110,111,114,101,32,111,114,32,99,104,97,110,103,101,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,32,111,110,32,104,111,119,32,116,111,32,119,114,105,116,101,32,97,32,116,114,97,99,101,114,32,109,111,100,117,108,101,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,116,114,97,99,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,116,114,97,99,101,114,40,51,41>>]}]},<<46>>]}]}]},{p,[],[<<73,102,32,110,111,32>>,{code,[],[<<116,114,97,99,101,114>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,114,101,99,101,105,118,101,115,32,97,108,108,32,116,104,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46>>]},{p,[],[<<84,104,101,32,101,102,102,101,99,116,32,111,102,32,99,111,109,98,105,110,105,110,103,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]},<<32,119,105,116,104,32>>,{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]},<<32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,108,105,110,107>>]},<<32,97,108,111,110,101,46,32,76,105,107,101,119,105,115,101,32,102,111,114,32>>,{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]},<<32,97,110,100,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]},<<46>>]},{p,[],[<<84,104,101,32,116,114,97,99,105,110,103,32,112,114,111,99,101,115,115,32,114,101,99,101,105,118,101,115,32,116,104,101,32>>,{em,[],[<<116,114,97,99,101,32,109,101,115,115,97,103,101,115>>]},<<32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,115,116,46,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,102,32,116,104,101,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,105,110,32,119,104,105,99,104,32,116,104,101,32,116,114,97,99,101,100,32,101,118,101,110,116,32,104,97,115,32,111,99,99,117,114,114,101,100,46,32,84,104,101,32,116,104,105,114,100,32,116,117,112,108,101,32,101,108,101,109,101,110,116,32,105,115,32,116,104,101,32,109,101,115,115,97,103,101,32,116,97,103,46>>]},{p,[],[<<73,102,32,102,108,97,103,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<44,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32,111,114,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,102,105,114,115,116,32,116,117,112,108,101,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<116,114,97,99,101,95,116,115>>]},<<32,105,110,115,116,101,97,100,44,32,97,110,100,32,116,104,101,32,116,105,109,101,32,115,116,97,109,112,32,105,115,32,97,100,100,101,100,32,97,115,32,97,110,32,101,120,116,114,97,32,101,108,101,109,101,110,116,32,108,97,115,116,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,116,117,112,108,101,46,32,73,102,32,109,117,108,116,105,112,108,101,32,116,105,109,101,32,115,116,97,109,112,32,102,108,97,103,115,32,97,114,101,32,112,97,115,115,101,100,44,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<32,104,97,115,32,112,114,101,99,101,100,101,110,99,101,32,111,118,101,114,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32,119,104,105,99,104,32,105,110,32,116,117,114,110,32,104,97,115,32,112,114,101,99,101,100,101,110,99,101,32,111,118,101,114,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<46,32,65,108,108,32,116,105,109,101,32,115,116,97,109,112,32,102,108,97,103,115,32,97,114,101,32,114,101,109,101,109,98,101,114,101,100,44,32,115,111,32,105,102,32,116,119,111,32,97,114,101,32,112,97,115,115,101,100,32,97,110,100,32,116,104,101,32,111,110,101,32,119,105,116,104,32,104,105,103,104,101,115,116,32,112,114,101,99,101,100,101,110,99,101,32,108,97,116,101,114,32,105,115,32,100,105,115,97,98,108,101,100,44,32,116,104,101,32,111,116,104,101,114,32,111,110,101,32,98,101,99,111,109,101,115,32,97,99,116,105,118,101,46>>]},{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,40,97,112,112,108,105,99,97,98,108,101,32,111,110,108,121,32,102,111,114,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<115,101,110,100>>]},<<32,97,110,100,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,105,110,103,41,32,99,111,110,116,97,105,110,115,32,97,32>>,{code,[],[<<123,109,101,115,115,97,103,101,125>>]},<<32,97,99,116,105,111,110,32,102,117,110,99,116,105,111,110,32,119,105,116,104,32,97,32,110,111,110,45,98,111,111,108,101,97,110,32,118,97,108,117,101,44,32,116,104,97,116,32,118,97,108,117,101,32,105,115,32,97,100,100,101,100,32,97,115,32,97,110,32,101,120,116,114,97,32,101,108,101,109,101,110,116,32,116,111,32,116,104,101,32,109,101,115,115,97,103,101,32,116,117,112,108,101,32,101,105,116,104,101,114,32,105,110,32,116,104,101,32,108,97,115,116,32,112,111,115,105,116,105,111,110,32,111,114,32,98,101,102,111,114,101,32,116,104,101,32,116,105,109,101,115,116,97,109,112,32,40,105,102,32,105,116,32,105,115,32,112,114,101,115,101,110,116,41,46>>]},{p,[],[<<84,114,97,99,101,32,109,101,115,115,97,103,101,115,58>>]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115>>}],[]},{dl,[],[{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,115,101,110,100,44,32,77,115,103,44,32,84,111,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,115,101,110,100,115,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<32,116,111,32,112,114,111,99,101,115,115,32>>,{code,[],[<<84,111>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,115,101,110,100,95,116,111,95,110,111,110,95,101,120,105,115,116,105,110,103,95,112,114,111,99,101,115,115,44,32,77,115,103,44,32,84,111,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,115,101,110,100,115,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<32,116,111,32,116,104,101,32,110,111,110,45,101,120,105,115,116,105,110,103,32,112,114,111,99,101,115,115,32>>,{code,[],[<<84,111>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,99,101,105,118,101>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,39,114,101,99,101,105,118,101,39,44,32,77,115,103,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,114,101,99,101,105,118,101,115,32,109,101,115,115,97,103,101,32>>,{code,[],[<<77,115,103>>]},<<46,32,73,102,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,116,105,109,101,45,111,117,116,44,32,97,32,114,101,99,101,105,118,101,32,115,116,97,116,101,109,101,110,116,32,99,97,110,32,104,97,118,101,32,116,105,109,101,100,32,111,117,116,44,32,111,114,32,116,104,101,32,112,114,111,99,101,115,115,32,114,101,99,101,105,118,101,100,32,97,32,109,101,115,115,97,103,101,32,119,105,116,104,32,116,104,101,32,112,97,121,108,111,97,100,32>>,{code,[],[<<116,105,109,101,111,117,116>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,97,108,108>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,99,97,108,108,44,32,123,77,44,32,70,44,32,65,114,103,115,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,99,97,108,108,115,32,97,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,111,102,32,99,97,108,108,115,32,97,114,101,32,110,101,118,101,114,32,115,117,112,112,108,105,101,100,44,32,111,110,108,121,32,116,104,101,32,99,97,108,108,32,97,110,100,32,105,116,115,32,97,114,103,117,109,101,110,116,115,46>>]},{p,[],[<<84,114,97,99,101,32,102,108,97,103,32>>,{code,[],[<<97,114,105,116,121>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,105,115,32,109,101,115,115,97,103,101,44,32,115,111,32,116,104,97,116,32>>,{code,[],[<<65,114,105,116,121>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,115,116,101,97,100,32,111,102,32>>,{code,[],[<<65,114,103,115>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,116,111>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,114,101,116,117,114,110,95,116,111,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,114,101,116,117,114,110,115,32>>,{em,[],[<<116,111>>]},<<32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,46,32,84,104,105,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,98,111,116,104,32,116,104,101,32,102,108,97,103,115,32>>,{code,[],[<<99,97,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,97,114,101,32,115,101,116,44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,115,101,116,32,116,111,32,98,101,32,116,114,97,99,101,100,32,111,110,32>>,{em,[],[<<108,111,99,97,108>>]},<<32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,84,104,101,32,109,101,115,115,97,103,101,32,105,115,32,111,110,108,121,32,115,101,110,116,32,119,104,101,110,32,114,101,116,117,114,110,105,110,103,32,102,114,111,109,32,97,32,99,104,97,105,110,32,111,102,32,116,97,105,108,32,114,101,99,117,114,115,105,118,101,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32,119,104,101,114,101,32,97,116,32,108,101,97,115,116,32,111,110,101,32,99,97,108,108,32,103,101,110,101,114,97,116,101,100,32,97,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,40,116,104,97,116,32,105,115,44,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,109,97,116,99,104,101,100,44,32,97,110,100,32>>,{code,[],[<<123,109,101,115,115,97,103,101,44,32,102,97,108,115,101,125>>]},<<32,119,97,115,32,110,111,116,32,97,110,32,97,99,116,105,111,110,41,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,116,117,114,110,95,102,114,111,109>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,114,101,116,117,114,110,95,102,114,111,109,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,44,32,82,101,116,117,114,110,86,97,108,117,101,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,114,101,116,117,114,110,115,32>>,{em,[],[<<102,114,111,109>>]},<<32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,46,32,84,104,105,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,102,108,97,103,32>>,{code,[],[<<99,97,108,108>>]},<<32,105,115,32,115,101,116,44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,104,97,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,119,105,116,104,32,97,32>>,{code,[],[<<114,101,116,117,114,110,95,116,114,97,99,101>>]},<<32,111,114,32>>,{code,[],[<<101,120,99,101,112,116,105,111,110,95,116,114,97,99,101>>]},<<32,97,99,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,101,120,99,101,112,116,105,111,110,95,102,114,111,109>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,101,120,99,101,112,116,105,111,110,95,102,114,111,109,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,44,32,123,67,108,97,115,115,44,32,86,97,108,117,101,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,105,116,115,32>>,{em,[],[<<102,114,111,109>>]},<<32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,32,98,101,99,97,117,115,101,32,111,102,32,97,110,32,101,120,99,101,112,116,105,111,110,46,32,84,104,105,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,105,102,32,102,108,97,103,32>>,{code,[],[<<99,97,108,108>>]},<<32,105,115,32,115,101,116,44,32,97,110,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,104,97,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,119,105,116,104,32,97,110,32>>,{code,[],[<<101,120,99,101,112,116,105,111,110,95,116,114,97,99,101>>]},<<32,97,99,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,115,112,97,119,110,44,32,80,105,100,50,44,32,123,77,44,32,70,44,32,65,114,103,115,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,115,112,97,119,110,115,32,97,32,110,101,119,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,97,115,32,101,110,116,114,121,32,112,111,105,110,116,46>>]},{p,[],[{code,[],[<<65,114,103,115>>]},<<32,105,115,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,116,104,101,32,97,114,103,117,109,101,110,116,32,108,105,115,116,44,32,98,117,116,32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,32,105,102,32,116,104,101,32,115,112,97,119,110,32,105,115,32,101,114,114,111,110,101,111,117,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,115,112,97,119,110,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,115,112,97,119,110,101,100,44,32,80,105,100,50,44,32,123,77,44,32,70,44,32,65,114,103,115,125,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,115,112,97,119,110,101,100,32,98,121,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<32,119,105,116,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,32,99,97,108,108,32,97,115,32,101,110,116,114,121,32,112,111,105,110,116,46>>]},{p,[],[{code,[],[<<65,114,103,115>>]},<<32,105,115,32,115,117,112,112,111,115,101,100,32,116,111,32,98,101,32,116,104,101,32,97,114,103,117,109,101,110,116,32,108,105,115,116,44,32,98,117,116,32,99,97,110,32,98,101,32,97,110,121,32,116,101,114,109,32,105,102,32,116,104,101,32,115,112,97,119,110,32,105,115,32,101,114,114,111,110,101,111,117,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,101,120,105,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,101,120,105,116,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,101,120,105,116,115,32,119,105,116,104,32,114,101,97,115,111,110,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,114,101,103,105,115,116,101,114>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,114,101,103,105,115,116,101,114,44,32,82,101,103,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,114,101,103,105,115,116,101,114,101,100,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,114,101,103,105,115,116,101,114>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,117,110,114,101,103,105,115,116,101,114,44,32,82,101,103,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,116,104,101,32,110,97,109,101,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,117,110,114,101,103,105,115,116,101,114,101,100,46,32,84,104,105,115,32,105,115,32,100,111,110,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,119,104,101,110,32,97,32,114,101,103,105,115,116,101,114,101,100,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,101,120,105,116,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,108,105,110,107>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,108,105,110,107,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,108,105,110,107,115,32,116,111,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,117,110,108,105,110,107>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,117,110,108,105,110,107,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,114,101,109,111,118,101,115,32,116,104,101,32,108,105,110,107,32,102,114,111,109,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,108,105,110,107,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,103,101,116,116,105,110,103,95,108,105,110,107,101,100,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,108,105,110,107,101,100,32,116,111,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,80,111,114,116,44,32,103,101,116,116,105,110,103,95,117,110,108,105,110,107,101,100,44,32,80,105,100,50,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100,80,111,114,116>>]},<<32,103,101,116,115,32,117,110,108,105,110,107,101,100,32,102,114,111,109,32,97,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100,50>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,112,101,110>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,111,112,101,110,44,32,80,105,100,44,32,68,114,105,118,101,114,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,111,112,101,110,115,32,97,32,110,101,119,32,112,111,114,116,32>>,{code,[],[<<80,111,114,116>>]},<<32,119,105,116,104,32,116,104,101,32,114,117,110,110,105,110,103,32>>,{code,[],[<<68,114,105,118,101,114>>]},<<46>>]},{p,[],[{code,[],[<<68,114,105,118,101,114>>]},<<32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,100,114,105,118,101,114,32,97,115,32,97,110,32,97,116,111,109,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,99,108,111,115,101,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,99,108,111,115,101,100,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,99,108,111,115,101,115,32,119,105,116,104,32>>,{code,[],[<<82,101,97,115,111,110>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,114,111,99>>}],[]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,101,120,105,116,105,110,103,95,112,114,111,99>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,105,110,32,124,32,105,110,95,101,120,105,116,105,110,103,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,114,117,110,46,32,84,104,101,32,112,114,111,99,101,115,115,32,114,117,110,115,32,105,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,77,44,32,70,44,32,65,114,105,116,121,125>>]},<<46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,114,111,99>>}],[]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,105,110,103,95,112,114,111,99>>}],[]},{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,101,120,105,116,101,100,95,112,114,111,99>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,111,117,116,32,124,32,111,117,116,95,101,120,105,116,105,110,103,32,124,32,111,117,116,95,101,120,105,116,101,100,44,32,123,77,44,32,70,44,32,65,114,105,116,121,125,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,111,117,116,46,32,84,104,101,32,112,114,111,99,101,115,115,32,119,97,115,32,114,117,110,110,105,110,103,32,105,110,32,102,117,110,99,116,105,111,110,32,123,77,44,32,70,44,32,65,114,105,116,121,125,46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,105,110,95,112,111,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,105,110,44,32,67,111,109,109,97,110,100,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,116,111,32,114,117,110,46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,105,115,32,116,104,101,32,102,105,114,115,116,32,116,104,105,110,103,32,116,104,101,32,112,111,114,116,32,119,105,108,108,32,101,120,101,99,117,116,101,44,32,105,116,32,99,97,110,32,104,111,119,101,118,101,114,32,114,117,110,32,115,101,118,101,114,97,108,32,99,111,109,109,97,110,100,115,32,98,101,102,111,114,101,32,98,101,105,110,103,32,115,99,104,101,100,117,108,101,100,32,111,117,116,46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]},{p,[],[<<84,104,101,32,112,111,115,115,105,98,108,101,32,99,111,109,109,97,110,100,115,32,97,114,101,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<99,108,111,115,101>>]},<<44,32>>,{code,[],[<<99,111,109,109,97,110,100>>]},<<44,32>>,{code,[],[<<99,111,110,110,101,99,116>>]},<<44,32>>,{code,[],[<<99,111,110,116,114,111,108>>]},<<44,32>>,{code,[],[<<102,108,117,115,104>>]},<<44,32>>,{code,[],[<<105,110,102,111>>]},<<44,32>>,{code,[],[<<108,105,110,107>>]},<<44,32>>,{code,[],[<<111,112,101,110>>]},<<44,32,97,110,100,32>>,{code,[],[<<117,110,108,105,110,107>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,111,117,116,95,112,111,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,111,114,116,44,32,111,117,116,44,32,67,111,109,109,97,110,100,32,124,32,48,125>>]}]},{dd,[],[{p,[],[<<87,104,101,110,32>>,{code,[],[<<80,111,114,116>>]},<<32,105,115,32,115,99,104,101,100,117,108,101,100,32,111,117,116,46,32,84,104,101,32,108,97,115,116,32,99,111,109,109,97,110,100,32,114,117,110,32,119,97,115,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<46,32,79,110,32,115,111,109,101,32,114,97,114,101,32,111,99,99,97,115,105,111,110,115,44,32,116,104,101,32,99,117,114,114,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,116,101,114,109,105,110,101,100,44,32,116,104,101,110,32,116,104,101,32,108,97,115,116,32,101,108,101,109,101,110,116,32,105,115,32>>,{code,[],[<<48>>]},<<46,32>>,{code,[],[<<67,111,109,109,97,110,100>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32,99,111,109,109,97,110,100,115,32,97,115,32>>,{code,[],[<<105,110>>]}]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,115,116,97,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,105,110,111,114,95,115,116,97,114,116,44,32,73,110,102,111,125>>]}]},{dd,[],[{a,[{id,<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>}],[]},{p,[],[<<83,101,110,116,32,119,104,101,110,32,97,32,121,111,117,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,97,98,111,117,116,32,116,111,32,98,101,32,115,116,97,114,116,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,119,111,45,101,108,101,109,101,110,116,32,116,117,112,108,101,115,44,32,119,104,101,114,101,32,116,104,101,32,102,105,114,115,116,32,101,108,101,109,101,110,116,32,105,115,32,97,32,107,101,121,44,32,97,110,100,32,116,104,101,32,115,101,99,111,110,100,32,105,115,32,116,104,101,32,118,97,108,117,101,46,32,68,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,97,110,121,32,111,114,100,101,114,32,111,102,32,116,104,101,32,116,117,112,108,101,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,107,101,121,115,32,97,114,101,32,100,101,102,105,110,101,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,117,115,101,100,32,112,97,114,116,32,111,102,32,116,104,101,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,98,108,111,99,107,32,117,115,101,100,32,102,111,114,32,115,116,111,114,105,110,103,32,116,104,101,32,104,101,97,112,32,97,110,100,32,116,104,101,32,115,116,97,99,107,46>>]},{dt,[],[{code,[],[<<111,108,100,95,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,117,115,101,100,32,112,97,114,116,32,111,102,32,116,104,101,32,111,108,100,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<111,108,100,95,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,101,109,111,114,121,32,98,108,111,99,107,32,117,115,101,100,32,102,111,114,32,115,116,111,114,105,110,103,32,116,104,101,32,111,108,100,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<115,116,97,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,115,116,97,99,107,46>>]},{dt,[],[{code,[],[<<114,101,99,101,110,116,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,100,97,116,97,32,116,104,97,116,32,115,117,114,118,105,118,101,100,32,116,104,101,32,112,114,101,118,105,111,117,115,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{dt,[],[{code,[],[<<109,98,117,102,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,99,111,109,98,105,110,101,100,32,115,105,122,101,32,111,102,32,109,101,115,115,97,103,101,32,98,117,102,102,101,114,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,99,101,115,115,46>>]},{dt,[],[{code,[],[<<98,105,110,95,118,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,117,110,105,113,117,101,32,111,102,102,45,104,101,97,112,32,98,105,110,97,114,105,101,115,32,114,101,102,101,114,101,110,99,101,100,32,102,114,111,109,32,116,104,101,32,112,114,111,99,101,115,115,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<98,105,110,95,118,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,98,105,110,97,114,105,101,115,32,97,108,108,111,119,101,100,32,105,110,32,116,104,101,32,118,105,114,116,117,97,108,32,104,101,97,112,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,98,101,102,111,114,101,32,100,111,105,110,103,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{dt,[],[{code,[],[<<98,105,110,95,111,108,100,95,118,104,101,97,112,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,117,110,105,113,117,101,32,111,102,102,45,104,101,97,112,32,98,105,110,97,114,105,101,115,32,114,101,102,101,114,101,110,99,101,100,32,102,114,111,109,32,116,104,101,32,112,114,111,99,101,115,115,32,111,108,100,32,104,101,97,112,46>>]},{dt,[],[{code,[],[<<98,105,110,95,111,108,100,95,118,104,101,97,112,95,98,108,111,99,107,95,115,105,122,101>>]}]},{dd,[],[<<84,104,101,32,116,111,116,97,108,32,115,105,122,101,32,111,102,32,98,105,110,97,114,105,101,115,32,97,108,108,111,119,101,100,32,105,110,32,116,104,101,32,118,105,114,116,117,97,108,32,111,108,100,32,104,101,97,112,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,98,101,102,111,114,101,32,100,111,105,110,103,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{dt,[],[{code,[],[<<119,111,114,100,115,105,122,101>>]}]},{dd,[],[<<70,111,114,32,116,104,101,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]},<<32,101,118,101,110,116,32,105,116,32,105,115,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,110,101,101,100,32,116,104,97,116,32,116,114,105,103,103,101,114,101,100,32,116,104,101,32,71,67,46,32,70,111,114,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,101,110,100>>]},<<32,101,118,101,110,116,32,105,116,32,105,115,32,116,104,101,32,115,105,122,101,32,111,102,32,114,101,99,108,97,105,109,101,100,32,109,101,109,111,114,121,32,61,32,115,116,97,114,116,32>>,{code,[],[<<104,101,97,112,95,115,105,122,101>>]},<<32,45,32,101,110,100,32>>,{code,[],[<<104,101,97,112,95,115,105,122,101>>]},<<46>>]}]},{p,[],[<<65,108,108,32,115,105,122,101,115,32,97,114,101,32,105,110,32,119,111,114,100,115,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]}]},<<32,105,115,32,114,101,97,99,104,101,100,32,100,117,114,105,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,115,116,97,114,116>>]},<<44,32,98,117,116,32,116,104,101,32,115,105,122,101,115,32,114,101,102,108,101,99,116,32,116,104,101,32,115,105,122,101,115,32,116,104,97,116,32,116,114,105,103,103,101,114,101,100,32>>,{code,[],[<<109,97,120,95,104,101,97,112,95,115,105,122,101>>]},<<32,116,111,32,98,101,32,114,101,97,99,104,101,100,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,105,110,111,114,95,101,110,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,105,110,111,114,95,101,110,100,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,121,111,117,110,103,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,102,105,110,105,115,104,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]},<<44,32,98,117,116,32,116,104,101,32,115,105,122,101,115,32,114,101,102,108,101,99,116,32,116,104,101,32,110,101,119,32,115,105,122,101,115,32,97,102,116,101,114,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,106,111,114,95,115,116,97,114,116>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,97,106,111,114,95,115,116,97,114,116,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,97,98,111,117,116,32,116,111,32,98,101,32,115,116,97,114,116,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]},<<46>>]}]},{dt,[],[{a,[{id,<<116,114,97,99,101,95,51,95,116,114,97,99,101,95,109,101,115,115,97,103,101,115,95,103,99,95,109,97,106,111,114,95,101,110,100>>}],[]},{code,[],[<<123,116,114,97,99,101,44,32,80,105,100,44,32,103,99,95,109,97,106,111,114,95,101,110,100,44,32,73,110,102,111,125>>]}]},{dd,[],[{p,[],[<<83,101,110,116,32,119,104,101,110,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,102,105,110,105,115,104,101,100,46,32>>,{code,[],[<<73,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,115,97,109,101,32,107,105,110,100,32,111,102,32,108,105,115,116,32,97,115,32,105,110,32,109,101,115,115,97,103,101,32>>,{code,[],[<<103,99,95,109,105,110,111,114,95,115,116,97,114,116>>]},<<44,32,98,117,116,32,116,104,101,32,115,105,122,101,115,32,114,101,102,108,101,99,116,32,116,104,101,32,110,101,119,32,115,105,122,101,115,32,97,102,116,101,114,32,97,32,102,117,108,108,115,119,101,101,112,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,46>>]}]}]},{p,[],[<<73,102,32,116,104,101,32,116,114,97,99,105,110,103,32,112,114,111,99,101,115,115,47,112,111,114,116,32,100,105,101,115,32,111,114,32,116,104,101,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,114,101,116,117,114,110,115,32>>,{code,[],[<<114,101,109,111,118,101>>]},<<44,32,116,104,101,32,102,108,97,103,115,32,97,114,101,32,115,105,108,101,110,116,108,121,32,114,101,109,111,118,101,100,46>>]},{p,[],[<<69,97,99,104,32,112,114,111,99,101,115,115,32,99,97,110,32,111,110,108,121,32,98,101,32,116,114,97,99,101,100,32,98,121,32,111,110,101,32,116,114,97,99,101,114,46,32,84,104,101,114,101,102,111,114,101,44,32,97,116,116,101,109,112,116,115,32,116,111,32,116,114,97,99,101,32,97,110,32,97,108,114,101,97,100,121,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,102,97,105,108,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,97,32,110,117,109,98,101,114,32,105,110,100,105,99,97,116,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,109,97,116,99,104,101,100,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<49>>]},<<46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32>>,{code,[],[<<97,108,108>>]},<<32,111,114,32>>,{code,[],[<<101,120,105,115,116,105,110,103>>]},<<44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,114,111,99,101,115,115,101,115,32,114,117,110,110,105,110,103,46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,83,112,101,99>>]},<<32,105,115,32>>,{code,[],[<<110,101,119>>]},<<44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<48>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<99,112,117,95,116,105,109,101,115,116,97,109,112>>]},<<32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,97,108,108,32,112,108,97,116,102,111,114,109,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,51,51,51>>,signature => [{attribute,{2016,2},spec,{{erlang,trace,3},[{type,{2016,19},bounded_fun,[{type,{2016,19},'fun',[{type,{2016,19},product,[{var,{2016,20},'PidPortSpec'},{var,{2016,33},'How'},{var,{2016,38},'FlagList'}]},{type,{2016,51},integer,[]}]},[{type,{2017,7},constraint,[{atom,{2017,7},is_subtype},[{var,{2017,7},'PidPortSpec'},{type,{2017,22},union,[{type,{2017,22},pid,[]},{type,{2017,30},port,[]},{atom,{2018,22},all},{atom,{2018,28},processes},{atom,{2018,40},ports},{atom,{2019,22},existing},{atom,{2019,33},existing_processes},{atom,{2019,54},existing_ports},{atom,{2020,22},new},{atom,{2020,28},new_processes},{atom,{2020,44},new_ports}]}]]},{type,{2021,7},constraint,[{atom,{2021,7},is_subtype},[{var,{2021,7},'How'},{type,{2021,14},boolean,[]}]]},{type,{2022,7},constraint,[{atom,{2022,7},is_subtype},[{var,{2022,7},'FlagList'},{type,{2022,19},list,[{user_type,{2022,20},trace_flag,[]}]}]]}]]}]}}]}},{{function,trace_delivered,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2031}],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,100,101,108,105,118,101,114,121,32,111,102,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,40,103,101,110,101,114,97,116,101,100,32,98,121,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<44,32>>,{a,[{href,<<107,101,114,110,101,108,58,115,101,113,95,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,113,95,116,114,97,99,101,40,51,41>>]}]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,115,121,115,116,101,109,95,112,114,111,102,105,108,101,47,50>>]}]},<<41,32,105,115,32,100,105,115,108,111,99,97,116,101,100,32,111,110,32,116,104,101,32,116,105,109,101,45,108,105,110,101,32,99,111,109,112,97,114,101,100,32,116,111,32,111,116,104,101,114,32,101,118,101,110,116,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,46,32,73,102,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,104,97,115,32,112,97,115,115,101,100,32,115,111,109,101,32,115,112,101,99,105,102,105,99,32,112,111,105,110,116,32,105,110,32,105,116,115,32,101,120,101,99,117,116,105,111,110,44,32,97,110,100,32,121,111,117,32,119,97,110,116,32,116,111,32,107,110,111,119,32,119,104,101,110,32,97,116,32,108,101,97,115,116,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,101,118,101,110,116,115,32,117,112,32,116,111,32,116,104,105,115,32,112,111,105,110,116,32,104,97,118,101,32,114,101,97,99,104,101,100,32,116,104,101,32,116,114,97,99,101,114,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<46>>]},{p,[],[<<87,104,101,110,32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,100,101,108,105,118,101,114,101,100,32,116,111,32,116,104,101,32,116,114,97,99,101,114,32,117,112,32,116,111,32,116,104,101,32,112,111,105,110,116,32,116,104,97,116,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,114,101,97,99,104,101,100,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,116,104,101,32,99,97,108,108,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<44,32,116,104,101,110,32,97,32>>,{code,[],[<<123,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,44,32,84,114,97,99,101,101,44,32,82,101,102,125>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<32,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,109,101,115,115,97,103,101,32>>,{code,[],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100>>]},<<32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,105,109,112,108,121,32,116,104,97,116,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,46,32,73,110,115,116,101,97,100,32,105,116,32,105,109,112,108,105,101,115,32,116,104,97,116,32,97,108,108,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,116,104,97,116,32>>,{em,[],[<<97,114,101,32,116,111,32,98,101,32,100,101,108,105,118,101,114,101,100>>]},<<32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,46,32,73,116,32,105,115,32,110,111,116,32,97,110,32,101,114,114,111,114,32,105,102,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,105,115,32,110,111,116,44,32,97,110,100,32,104,97,115,32,110,111,116,32,98,101,101,110,32,116,114,97,99,101,100,32,98,121,32,115,111,109,101,111,110,101,44,32,98,117,116,32,105,102,32,116,104,105,115,32,105,115,32,116,104,101,32,99,97,115,101,44,32>>,{em,[],[<<110,111>>]},<<32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,104,97,118,101,32,98,101,101,110,32,100,101,108,105,118,101,114,101,100,32,119,104,101,110,32,116,104,101,32>>,{code,[],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100>>]},<<32,109,101,115,115,97,103,101,32,97,114,114,105,118,101,115,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,109,117,115,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,32,99,117,114,114,101,110,116,108,121,32,111,114,32,112,114,101,118,105,111,117,115,108,121,32,101,120,105,115,116,105,110,103,32,111,110,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,97,115,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<32,114,101,115,105,100,101,115,32,111,110,46,32,84,104,101,32,115,112,101,99,105,97,108,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,97,116,111,109,32>>,{code,[],[<<97,108,108>>]},<<32,100,101,110,111,116,101,115,32,97,108,108,32,112,114,111,99,101,115,115,101,115,32,116,104,97,116,32,99,117,114,114,101,110,116,108,121,32,97,114,101,32,116,114,97,99,101,100,32,105,110,32,116,104,101,32,110,111,100,101,46>>]},{p,[],[<<87,104,101,110,32,117,115,101,100,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,116,114,97,99,101,114>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<84,114,97,99,101,114,32,77,111,100,117,108,101>>]},<<44,32,97,110,121,32,109,101,115,115,97,103,101,32,115,101,110,116,32,105,110,32,116,104,101,32,116,114,97,99,101,32,99,97,108,108,98,97,99,107,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,104,97,118,101,32,114,101,97,99,104,101,100,32,105,116,115,32,114,101,99,105,112,105,101,110,116,32,98,101,102,111,114,101,32,116,104,101,32>>,{code,[],[<<116,114,97,99,101,95,100,101,108,105,118,101,114,101,100>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,115,101,110,116,46>>]},{p,[],[<<69,120,97,109,112,108,101,58,32,80,114,111,99,101,115,115,32>>,{code,[],[<<65>>]},<<32,105,115,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<44,32,112,111,114,116,32>>,{code,[],[<<66>>]},<<32,105,115,32,116,114,97,99,101,114,44,32,97,110,100,32,112,114,111,99,101,115,115,32>>,{code,[],[<<67>>]},<<32,105,115,32,116,104,101,32,112,111,114,116,32,111,119,110,101,114,32,111,102,32>>,{code,[],[<<66>>]},<<46,32>>,{code,[],[<<67>>]},<<32,119,97,110,116,115,32,116,111,32,99,108,111,115,101,32>>,{code,[],[<<66>>]},<<32,119,104,101,110,32>>,{code,[],[<<65>>]},<<32,101,120,105,116,115,46,32,84,111,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,116,114,97,99,101,32,105,115,32,110,111,116,32,116,114,117,110,99,97,116,101,100,44,32>>,{code,[],[<<67>>]},<<32,99,97,110,32,99,97,108,108,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,65,41>>]},<<32,119,104,101,110,32>>,{code,[],[<<65>>]},<<32,101,120,105,116,115,44,32,97,110,100,32,119,97,105,116,32,102,111,114,32,109,101,115,115,97,103,101,32>>,{code,[],[<<123,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,44,32,65,44,32,82,101,102,125>>]},<<32,98,101,102,111,114,101,32,99,108,111,115,105,110,103,32>>,{code,[],[<<66>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<84,114,97,99,101,101>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,112,114,111,99,101,115,115,32,40,100,101,97,100,32,111,114,32,97,108,105,118,101,41,32,111,110,32,116,104,101,32,115,97,109,101,32,110,111,100,101,32,97,115,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,100,101,108,105,118,101,114,101,100,40,84,114,97,99,101,101,41>>]},<<32,114,101,115,105,100,101,115,32,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,49,57,57,51>>,signature => [{attribute,{2031,2},spec,{{erlang,trace_delivered,1},[{type,{2031,29},bounded_fun,[{type,{2031,29},'fun',[{type,{2031,29},product,[{var,{2031,30},'Tracee'}]},{var,{2031,41},'Ref'}]},[{type,{2032,7},constraint,[{atom,{2032,7},is_subtype},[{var,{2032,7},'Tracee'},{type,{2032,17},union,[{type,{2032,17},pid,[]},{atom,{2032,25},all}]}]]},{type,{2033,7},constraint,[{atom,{2033,7},is_subtype},[{var,{2033,7},'Ref'},{type,{2033,14},reference,[]}]]}]]}]}}]}},{{function,trace_info,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2038}],[<<116,114,97,99,101,95,105,110,102,111,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,105,110,102,111,95,102,108,97,103>>}],[]},{li,[{name,<<116,114,97,99,101,95,105,110,102,111,95,105,116,101,109,95,114,101,115,117,108,116>>}],[]},{li,[{name,<<116,114,97,99,101,95,105,110,102,111,95,114,101,116,117,114,110>>}],[]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]}]},{p,[],[<<82,101,116,117,114,110,115,32,116,114,97,99,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,112,111,114,116,44,32,112,114,111,99,101,115,115,44,32,102,117,110,99,116,105,111,110,44,32,111,114,32,101,118,101,110,116,46>>]},{p,[],[{em,[],[<<84,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,112,111,114,116,32,111,114,32,112,114,111,99,101,115,115>>]},<<44,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32,116,111,32,98,101,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,40,112,105,100,41,44,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,44,32,111,114,32,111,110,101,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<110,101,119>>]},<<44,32>>,{code,[],[<<110,101,119,95,112,114,111,99,101,115,115,101,115>>]},<<44,32,111,114,32>>,{code,[],[<<110,101,119,95,112,111,114,116,115>>]},<<46,32,84,104,101,32,97,116,111,109,32>>,{code,[],[<<110,101,119>>]},<<32,111,114,32>>,{code,[],[<<110,101,119,95,112,114,111,99,101,115,115,101,115>>]},<<32,109,101,97,110,115,32,116,104,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,116,114,97,99,101,32,115,116,97,116,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,32,116,111,32,98,101,32,99,114,101,97,116,101,100,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,97,116,111,109,32>>,{code,[],[<<110,101,119,95,112,111,114,116,115>>]},<<32,109,101,97,110,115,32,116,104,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,116,114,97,99,101,32,115,116,97,116,101,32,102,111,114,32,112,111,114,116,115,32,116,111,32,98,101,32,99,114,101,97,116,101,100,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,102,111,114,32,112,111,114,116,115,32,97,110,100,32,112,114,111,99,101,115,115,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,108,97,103,115>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,97,116,111,109,115,32,105,110,100,105,99,97,116,105,110,103,32,119,104,97,116,32,107,105,110,100,32,111,102,32,116,114,97,99,101,115,32,105,115,32,101,110,97,98,108,101,100,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,46,32,84,104,101,32,108,105,115,116,32,105,115,32,101,109,112,116,121,32,105,102,32,110,111,32,116,114,97,99,101,115,32,97,114,101,32,101,110,97,98,108,101,100,44,32,97,110,100,32,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,115,32,97,116,111,109,115,32,105,102,32,116,114,97,99,101,115,32,97,114,101,32,101,110,97,98,108,101,100,58,32>>,{code,[],[<<115,101,110,100>>]},<<44,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<44,32>>,{code,[],[<<115,101,116,95,111,110,95,115,112,97,119,110>>]},<<44,32>>,{code,[],[<<99,97,108,108>>]},<<44,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<44,32>>,{code,[],[<<112,114,111,99,115>>]},<<44,32>>,{code,[],[<<112,111,114,116,115>>]},<<44,32>>,{code,[],[<<115,101,116,95,111,110,95,102,105,114,115,116,95,115,112,97,119,110>>]},<<44,32>>,{code,[],[<<115,101,116,95,111,110,95,108,105,110,107>>]},<<44,32>>,{code,[],[<<114,117,110,110,105,110,103>>]},<<44,32>>,{code,[],[<<114,117,110,110,105,110,103,95,112,114,111,99,115>>]},<<44,32>>,{code,[],[<<114,117,110,110,105,110,103,95,112,111,114,116,115>>]},<<44,32>>,{code,[],[<<115,105,108,101,110,116>>]},<<44,32>>,{code,[],[<<101,120,105,116,105,110,103>>]},<<44,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32>>,{code,[],[<<115,116,114,105,99,116,95,109,111,110,111,116,111,110,105,99,95,116,105,109,101,115,116,97,109,112>>]},<<44,32>>,{code,[],[<<103,97,114,98,97,103,101,95,99,111,108,108,101,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<116,105,109,101,115,116,97,109,112>>]},<<44,32,97,110,100,32>>,{code,[],[<<97,114,105,116,121>>]},<<46,32,84,104,101,32,111,114,100,101,114,32,105,115,32,97,114,98,105,116,114,97,114,121,46>>]}]},{dt,[],[{code,[],[<<116,114,97,99,101,114>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,105,100,101,110,116,105,102,105,101,114,32,102,111,114,32,112,114,111,99,101,115,115,44,32,112,111,114,116,44,32,111,114,32,97,32,116,117,112,108,101,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,116,114,97,99,101,114,32,109,111,100,117,108,101,32,97,110,100,32,116,114,97,99,101,114,32,115,116,97,116,101,32,116,114,97,99,105,110,103,32,116,104,105,115,32,112,114,111,99,101,115,115,46,32,73,102,32,116,104,105,115,32,112,114,111,99,101,115,115,32,105,115,32,110,111,116,32,116,114,97,99,101,100,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]}]},{p,[],[{em,[],[<<84,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,102,117,110,99,116,105,111,110>>]},<<44,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32,116,111,32,98,101,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<46,32,78,111,32,119,105,108,100,99,97,114,100,115,32,97,114,101,32,97,108,108,111,119,101,100,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,111,114,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,116,114,97,99,101,100,46,32,73,102,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<44,32,116,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,114,101,102,101,114,115,32,116,111,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,102,111,114,32,99,111,100,101,32,116,104,97,116,32,119,105,108,108,32,98,101,32,108,111,97,100,101,100,46>>]},{p,[],[<<86,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<115,32,102,111,114,32,102,117,110,99,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<116,114,97,99,101,100>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,114,97,99,101,100,32,111,110,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,44,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,105,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,114,97,99,101,100,32,111,110,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,40,116,104,97,116,32,105,115,44,32,108,111,99,97,108,32,97,110,100,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,41,44,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,108,111,99,97,108,32,111,114,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,97,114,101,32,110,111,116,32,116,114,97,99,101,100,46>>]}]},{dt,[],[{code,[],[<<109,97,116,99,104,95,115,112,101,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,108,111,99,97,108,108,121,32,111,114,32,103,108,111,98,97,108,108,121,32,116,114,97,99,101,100,32,98,117,116,32,104,97,115,32,110,111,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,100,101,102,105,110,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,101,116,97>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,101,116,97,45,116,114,97,99,101,32,116,114,97,99,101,114,32,112,114,111,99,101,115,115,44,32,112,111,114,116,44,32,111,114,32,116,114,97,99,101,32,109,111,100,117,108,101,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,109,101,116,97,45,116,114,97,99,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,109,101,116,97,45,116,114,97,99,101,100,32,98,117,116,32,104,97,115,32,111,110,99,101,32,100,101,116,101,99,116,101,100,32,116,104,97,116,32,116,104,101,32,116,114,97,99,101,114,32,112,114,111,99,101,115,115,32,105,115,32,105,110,118,97,108,105,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,101,116,97,95,109,97,116,99,104,95,115,112,101,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,101,116,97,45,116,114,97,99,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,46,32,73,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,109,101,116,97,45,116,114,97,99,101,100,32,98,117,116,32,104,97,115,32,110,111,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,100,101,102,105,110,101,100,44,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<91,93>>]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,97,108,108,32,99,111,117,110,116,32,118,97,108,117,101,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,111,114,32>>,{code,[],[<<116,114,117,101>>]},<<32,102,111,114,32,116,104,101,32,112,115,101,117,100,111,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,105,102,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,105,115,32,97,99,116,105,118,101,46,32,79,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,97,108,108,32,116,105,109,101,32,118,97,108,117,101,115,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,111,114,32>>,{code,[],[<<116,114,117,101>>]},<<32,102,111,114,32,116,104,101,32,112,115,101,117,100,111,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,105,102,32,99,97,108,108,32,116,105,109,101,32,116,114,97,99,105,110,103,32,105,115,32,97,99,116,105,118,101,46,32,79,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,99,97,108,108,32,116,105,109,101,32,118,97,108,117,101,115,32,114,101,116,117,114,110,101,100,44,32>>,{code,[],[<<91,123,80,105,100,44,32,67,111,117,110,116,44,32,83,44,32,85,115,125,93>>]},<<44,32,105,115,32,97,32,108,105,115,116,32,111,102,32,101,97,99,104,32,112,114,111,99,101,115,115,32,116,104,97,116,32,101,120,101,99,117,116,101,100,32,116,104,101,32,102,117,110,99,116,105,111,110,32,97,110,100,32,105,116,115,32,115,112,101,99,105,102,105,99,32,99,111,117,110,116,101,114,115,46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32>>,{code,[],[<<123,73,116,101,109,44,32,86,97,108,117,101,125>>]},<<32,116,117,112,108,101,115,32,102,111,114,32,97,108,108,32,111,116,104,101,114,32,105,116,101,109,115,44,32,111,114,32,114,101,116,117,114,110,115,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32,110,111,32,116,114,97,99,105,110,103,32,105,115,32,97,99,116,105,118,101,32,102,111,114,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46>>]}]}]},{p,[],[{em,[],[<<84,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,110,32,101,118,101,110,116>>]},<<44,32>>,{code,[],[<<80,105,100,80,111,114,116,70,117,110,99,69,118,101,110,116>>]},<<32,105,115,32,116,111,32,98,101,32,111,110,101,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<115,101,110,100>>]},<<32,111,114,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<46>>]},{p,[],[<<79,110,101,32,118,97,108,105,100,32>>,{code,[],[<<73,116,101,109>>]},<<32,102,111,114,32,101,118,101,110,116,115,32,101,120,105,115,116,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<109,97,116,99,104,95,115,112,101,99>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,116,104,105,115,32,101,118,101,110,116,44,32,105,102,32,105,116,32,104,97,115,32,111,110,101,44,32,111,114,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,110,111,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,104,97,115,32,98,101,101,110,32,115,101,116,46>>]}]}]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<123,73,116,101,109,44,32,86,97,108,117,101,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,105,115,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,105,110,102,111,114,109,97,116,105,111,110,32,97,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,46,32,73,102,32,97,32,112,105,100,32,102,111,114,32,97,32,100,101,97,100,32,112,114,111,99,101,115,115,32,119,97,115,32,115,112,101,99,105,102,105,101,100,44,32,111,114,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,110,111,110,45,101,120,105,115,116,105,110,103,32,102,117,110,99,116,105,111,110,44,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,105,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,48,52,56>>,signature => [{attribute,{2038,2},spec,{{erlang,trace_info,2},[{type,{2038,24},bounded_fun,[{type,{2038,24},'fun',[{type,{2038,24},product,[{var,{2038,25},'PidPortFuncEvent'},{var,{2038,43},'Item'}]},{var,{2038,52},'Res'}]},[{type,{2039,7},constraint,[{atom,{2039,7},is_subtype},[{var,{2039,7},'PidPortFuncEvent'},{type,{2039,27},union,[{type,{2039,27},pid,[]},{type,{2039,35},port,[]},{atom,{2039,44},new},{atom,{2039,50},new_processes},{atom,{2039,66},new_ports},{type,{2040,24},tuple,[{var,{2040,25},'Module'},{var,{2040,33},'Function'},{var,{2040,43},'Arity'}]},{atom,{2040,52},on_load},{atom,{2040,62},send},{atom,{2040,69},'receive'}]}]]},{type,{2041,7},constraint,[{atom,{2041,7},is_subtype},[{var,{2041,7},'Module'},{type,{2041,17},module,[]}]]},{type,{2042,7},constraint,[{atom,{2042,7},is_subtype},[{var,{2042,7},'Function'},{type,{2042,19},atom,[]}]]},{type,{2043,7},constraint,[{atom,{2043,7},is_subtype},[{var,{2043,7},'Arity'},{type,{2043,16},arity,[]}]]},{type,{2044,7},constraint,[{atom,{2044,7},is_subtype},[{var,{2044,7},'Item'},{type,{2044,15},union,[{atom,{2044,15},flags},{atom,{2044,23},tracer},{atom,{2044,32},traced},{atom,{2044,41},match_spec},{atom,{2045,15},meta},{atom,{2045,22},meta_match_spec},{atom,{2045,40},call_count},{atom,{2045,53},call_time},{atom,{2045,65},all}]}]]},{type,{2046,7},constraint,[{atom,{2046,7},is_subtype},[{var,{2046,7},'Res'},{user_type,{2046,14},trace_info_return,[]}]]}]]}]}}]}},{{function,trace_pattern,2},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2713}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,50>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]},{li,[{name,<<116,114,97,99,101,95,112,97,116,116,101,114,110,95,109,102,97>>}],[]}]},{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,69,118,101,110,116,44,32,77,97,116,99,104,83,112,101,99,44,32,91,93,41>>]}]},<<44,32,114,101,116,97,105,110,101,100,32,102,111,114,32,98,97,99,107,119,97,114,100,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,49,56,52>>,signature => [{attribute,{2713,2},spec,{{erlang,trace_pattern,2},[{type,{2713,27},bounded_fun,[{type,{2713,27},'fun',[{type,{2713,27},product,[{var,{2713,28},'MFA'},{var,{2713,33},'MatchSpec'}]},{type,{2713,47},non_neg_integer,[]}]},[{type,{2714,7},constraint,[{atom,{2714,7},is_subtype},[{var,{2714,7},'MFA'},{type,{2714,14},union,[{user_type,{2714,14},trace_pattern_mfa,[]},{atom,{2714,36},send},{atom,{2714,43},'receive'}]}]]},{type,{2715,7},constraint,[{atom,{2715,7},is_subtype},[{var,{2715,7},'MatchSpec'},{type,{2715,21},union,[{ann_type,{2715,21},[{var,{2715,21},'MatchSpecList'},{user_type,{2715,38},trace_match_spec,[]}]},{type,{2716,20},boolean,[]},{atom,{2717,20},restart},{atom,{2718,20},pause}]}]]}]]}]}}]}},{{function,trace_pattern,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2733}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]}]},{p,[],[<<83,101,116,115,32,116,114,97,99,101,32,112,97,116,116,101,114,110,32,102,111,114,32>>,{em,[],[<<109,101,115,115,97,103,101,32,115,101,110,100,105,110,103>>]},<<46,32,77,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<32,116,111,32,115,101,116,32,116,104,101,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,46,32,66,121,32,100,101,102,97,117,108,116,32,97,108,108,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,102,114,111,109,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,116,114,97,99,101,100,46,32,84,111,32,108,105,109,105,116,32,116,114,97,99,101,100,32,115,101,110,100,32,101,118,101,110,116,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32,109,101,115,115,97,103,101,32,99,111,110,116,101,110,116,44,32,116,104,101,32,115,101,110,100,101,114,32,97,110,100,47,111,114,32,116,104,101,32,114,101,99,101,105,118,101,114,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99>>]},<<32,99,97,110,32,116,97,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<77,97,116,99,104,83,112,101,99,76,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,105,115,32,100,111,110,101,32,111,110,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<91,82,101,99,101,105,118,101,114,44,32,77,115,103,93>>]},<<46,32>>,{code,[],[<<82,101,99,101,105,118,101,114>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,116,121,32,111,102,32,116,104,101,32,114,101,99,101,105,118,101,114,32,97,110,100,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,116,104,101,32,109,101,115,115,97,103,101,32,116,101,114,109,46,32,84,104,101,32,112,105,100,32,111,102,32,116,104,101,32,115,101,110,100,105,110,103,32,112,114,111,99,101,115,115,32,99,97,110,32,98,101,32,97,99,99,101,115,115,101,100,32,119,105,116,104,32,116,104,101,32,103,117,97,114,100,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<115,101,108,102,47,48>>]},<<46,32,65,110,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,109,97,116,99,104,95,115,112,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<69,110,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,115,101,110,116,32,109,101,115,115,97,103,101,115,32,40,102,114,111,109,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,41,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46,32>>,{em,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,115,101,110,116,32,109,101,115,115,97,103,101,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]}]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,109,117,115,116,32,98,101,32>>,{code,[],[<<91,93>>]},<<32,102,111,114,32,115,101,110,100,32,116,114,97,99,105,110,103,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,108,119,97,121,115,32>>,{code,[],[<<49>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,116,111,32,97,32,115,112,101,99,105,102,105,99,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,80,105,100,44,32,39,95,39,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,109,97,116,99,104,105,110,103,32>>,{code,[],[<<123,114,101,112,108,121,44,32,95,125>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,39,95,39,44,32,123,114,101,112,108,121,44,39,95,39,125,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,116,111,32,116,104,101,32,115,101,110,100,101,114,32,105,116,115,101,108,102,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,39,36,49,39,44,32,39,95,39,93,44,91,123,39,61,58,61,39,44,39,36,49,39,44,123,115,101,108,102,125,125,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,115,101,110,116,32,116,111,32,111,116,104,101,114,32,110,111,100,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,115,101,110,100,44,32,91,123,91,39,36,49,39,44,32,39,95,39,93,44,91,123,39,61,47,61,39,44,123,110,111,100,101,44,39,36,49,39,125,44,123,110,111,100,101,125,125,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32>>,{code,[],[<<115,101,110,100>>]},<<32,116,114,97,99,101,32,99,97,110,32,117,115,101,32,97,108,108,32,103,117,97,114,100,32,97,110,100,32,98,111,100,121,32,102,117,110,99,116,105,111,110,115,32,101,120,99,101,112,116,32>>,{code,[],[<<99,97,108,108,101,114>>]},<<46>>]}]},{p,[],[<<70,97,105,108,115,32,98,121,32,114,97,105,115,105,110,103,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,97,110,32,97,114,103,117,109,101,110,116,32,105,115,32,105,110,118,97,108,105,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,104,97,115,32,101,120,99,101,115,115,105,118,101,32,110,101,115,116,105,110,103,32,119,104,105,99,104,32,99,97,117,115,101,115,32,115,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,101,120,104,97,117,115,116,105,111,110,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,115,99,104,101,100,95,116,104,114,101,97,100,95,115,116,97,99,107,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<83,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,50,48,50>>,signature => [{attribute,{2733,2},spec,{{erlang,trace_pattern,3},[{type,{2733,27},bounded_fun,[{type,{2733,27},'fun',[{type,{2733,27},product,[{atom,{2733,28},send},{var,{2733,34},'MatchSpec'},{type,{2733,45},nil,[]}]},{type,{2733,52},non_neg_integer,[]}]},[{type,{2734,7},constraint,[{atom,{2734,7},is_subtype},[{var,{2734,7},'MatchSpec'},{type,{2734,21},union,[{ann_type,{2734,21},[{var,{2734,21},'MatchSpecList'},{user_type,{2734,38},trace_match_spec,[]}]},{type,{2735,20},boolean,[]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,trace_pattern,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2733}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]}]},{p,[],[<<83,101,116,115,32,116,114,97,99,101,32,112,97,116,116,101,114,110,32,102,111,114,32>>,{em,[],[<<109,101,115,115,97,103,101,32,114,101,99,101,105,118,105,110,103>>]},<<46,32,77,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<32,116,111,32,115,101,116,32,116,104,101,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,46,32,66,121,32,100,101,102,97,117,108,116,32,97,108,108,32,109,101,115,115,97,103,101,115,32,114,101,99,101,105,118,101,100,32,98,121,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,32,97,114,101,32,116,114,97,99,101,100,46,32,84,111,32,108,105,109,105,116,32,116,114,97,99,101,100,32,114,101,99,101,105,118,101,32,101,118,101,110,116,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32,109,101,115,115,97,103,101,32,99,111,110,116,101,110,116,44,32,116,104,101,32,115,101,110,100,101,114,32,97,110,100,47,111,114,32,116,104,101,32,114,101,99,101,105,118,101,114,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99>>]},<<32,99,97,110,32,116,97,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<77,97,116,99,104,83,112,101,99,76,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,105,115,32,100,111,110,101,32,111,110,32,116,104,101,32,108,105,115,116,32>>,{code,[],[<<91,78,111,100,101,44,32,83,101,110,100,101,114,44,32,77,115,103,93>>]},<<46,32>>,{code,[],[<<78,111,100,101>>]},<<32,105,115,32,116,104,101,32,110,111,100,101,32,110,97,109,101,32,111,102,32,116,104,101,32,115,101,110,100,101,114,46,32>>,{code,[],[<<83,101,110,100,101,114>>]},<<32,105,115,32,116,104,101,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,116,121,32,111,102,32,116,104,101,32,115,101,110,100,101,114,44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,115,101,110,100,101,114,32,105,115,32,110,111,116,32,107,110,111,119,110,32,40,119,104,105,99,104,32,99,97,110,32,98,101,32,116,104,101,32,99,97,115,101,32,102,111,114,32,114,101,109,111,116,101,32,115,101,110,100,101,114,115,41,46,32>>,{code,[],[<<77,115,103>>]},<<32,105,115,32,116,104,101,32,109,101,115,115,97,103,101,32,116,101,114,109,46,32,84,104,101,32,112,105,100,32,111,102,32,116,104,101,32,114,101,99,101,105,118,105,110,103,32,112,114,111,99,101,115,115,32,99,97,110,32,98,101,32,97,99,99,101,115,115,101,100,32,119,105,116,104,32,116,104,101,32,103,117,97,114,100,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<115,101,108,102,47,48>>]},<<46,32,65,110,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,109,97,116,99,104,95,115,112,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<69,110,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,114,101,99,101,105,118,101,100,32,109,101,115,115,97,103,101,115,32,40,116,111,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,41,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46,32>>,{em,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,114,101,99,101,105,118,101,100,32,109,101,115,115,97,103,101,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]}]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,109,117,115,116,32,98,101,32>>,{code,[],[<<91,93>>]},<<32,102,111,114,32,114,101,99,101,105,118,101,32,116,114,97,99,105,110,103,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,108,119,97,121,115,32>>,{code,[],[<<49>>]},<<46>>]},{p,[],[<<69,120,97,109,112,108,101,115,58>>]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,102,114,111,109,32,97,32,115,112,101,99,105,102,105,99,32,112,114,111,99,101,115,115,32>>,{code,[],[<<80,105,100>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,39,114,101,99,101,105,118,101,39,44,32,91,123,91,39,95,39,44,80,105,100,44,32,39,95,39,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,109,97,116,99,104,105,110,103,32>>,{code,[],[<<123,114,101,112,108,121,44,32,95,125>>]},<<58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,39,114,101,99,101,105,118,101,39,44,32,91,123,91,39,95,39,44,39,95,39,44,32,123,114,101,112,108,121,44,39,95,39,125,93,44,91,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{p,[],[<<79,110,108,121,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,32,102,114,111,109,32,111,116,104,101,114,32,110,111,100,101,115,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,40,39,114,101,99,101,105,118,101,39,44,32,91,123,91,39,36,49,39,44,32,39,95,39,44,32,39,95,39,93,44,91,123,39,61,47,61,39,44,39,36,49,39,44,123,110,111,100,101,125,125,93,44,91,93,125,93,44,32,91,93,41,46,10,49>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32>>,{code,[],[<<39,114,101,99,101,105,118,101,39>>]},<<32,116,114,97,99,101,32,99,97,110,32,117,115,101,32,97,108,108,32,103,117,97,114,100,32,97,110,100,32,98,111,100,121,32,102,117,110,99,116,105,111,110,115,32,101,120,99,101,112,116,32>>,{code,[],[<<99,97,108,108,101,114>>]},<<44,32>>,{code,[],[<<105,115,95,115,101,113,95,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<103,101,116,95,115,101,113,95,116,111,107,101,110>>]},<<44,32>>,{code,[],[<<115,101,116,95,115,101,113,95,116,111,107,101,110>>]},<<44,32>>,{code,[],[<<101,110,97,98,108,101,95,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<100,105,115,97,98,108,101,95,116,114,97,99,101>>]},<<44,32>>,{code,[],[<<116,114,97,99,101>>]},<<44,32>>,{code,[],[<<115,105,108,101,110,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<112,114,111,99,101,115,115,95,100,117,109,112>>]},<<46>>]}]},{p,[],[<<70,97,105,108,115,32,98,121,32,114,97,105,115,105,110,103,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,97,110,32,97,114,103,117,109,101,110,116,32,105,115,32,105,110,118,97,108,105,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,104,97,115,32,101,120,99,101,115,115,105,118,101,32,110,101,115,116,105,110,103,32,119,104,105,99,104,32,99,97,117,115,101,115,32,115,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,101,120,104,97,117,115,116,105,111,110,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,115,99,104,101,100,95,116,104,114,101,97,100,95,115,116,97,99,107,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<83,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,50,56,57>>,signature => [{attribute,{2733,2},spec,{{erlang,trace_pattern,3},[{type,{2736,6},bounded_fun,[{type,{2736,6},'fun',[{type,{2736,6},product,[{atom,{2736,7},'receive'},{var,{2736,18},'MatchSpec'},{type,{2736,29},nil,[]}]},{type,{2736,36},non_neg_integer,[]}]},[{type,{2737,7},constraint,[{atom,{2737,7},is_subtype},[{var,{2737,7},'MatchSpec'},{type,{2737,21},union,[{ann_type,{2737,21},[{var,{2737,21},'MatchSpecList'},{user_type,{2737,38},trace_match_spec,[]}]},{type,{2738,20},boolean,[]}]}]]}]]}]}}],since => <<79,84,80,32,49,57,46,48>>}},{{function,trace_pattern,3},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2733}],[<<116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>}],[]},{li,[{name,<<109,97,116,99,104,95,118,97,114,105,97,98,108,101>>},{class,<<100,101,115,99,114,105,112,116,105,111,110>>}],[<<65,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,39,36,49,39,32,124,32,39,36,50,39,32,124,32,39,36,51,39,32,124,32,46,46,46>>]},{li,[{name,<<116,114,97,99,101,95,109,97,116,99,104,95,115,112,101,99>>}],[]},{li,[{name,<<116,114,97,99,101,95,112,97,116,116,101,114,110,95,102,108,97,103>>}],[]},{li,[{name,<<116,114,97,99,101,95,112,97,116,116,101,114,110,95,109,102,97>>}],[]}]},{p,[],[<<69,110,97,98,108,101,115,32,111,114,32,100,105,115,97,98,108,101,115,32>>,{em,[],[<<99,97,108,108,32,116,114,97,99,105,110,103>>]},<<32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,102,117,110,99,116,105,111,110,115,46,32,77,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<32,116,111,32,115,101,116,32,116,104,101,32>>,{code,[],[<<99,97,108,108>>]},<<32,116,114,97,99,101,32,102,108,97,103,32,102,111,114,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<67,111,110,99,101,112,116,117,97,108,108,121,44,32,99,97,108,108,32,116,114,97,99,105,110,103,32,119,111,114,107,115,32,97,115,32,102,111,108,108,111,119,115,46,32,73,110,115,105,100,101,32,116,104,101,32,69,114,108,97,110,103,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,44,32,97,32,115,101,116,32,111,102,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,97,32,115,101,116,32,111,102,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,116,111,32,98,101,32,116,114,97,99,101,100,46,32,73,102,32,97,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,32,99,97,108,108,115,32,97,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,44,32,116,104,101,32,116,114,97,99,101,32,97,99,116,105,111,110,32,105,115,32,116,97,107,101,110,46,32,79,116,104,101,114,119,105,115,101,44,32,110,111,116,104,105,110,103,32,104,97,112,112,101,110,115,46>>]},{p,[],[<<84,111,32,97,100,100,32,111,114,32,114,101,109,111,118,101,32,111,110,101,32,111,114,32,109,111,114,101,32,112,114,111,99,101,115,115,101,115,32,116,111,32,116,104,101,32,115,101,116,32,111,102,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,101,115,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]}]},<<46>>]},{p,[],[<<84,111,32,97,100,100,32,111,114,32,114,101,109,111,118,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,116,104,101,32,115,101,116,32,111,102,32,116,114,97,99,101,100,32,102,117,110,99,116,105,111,110,115,44,32,117,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<46>>]},{p,[],[<<84,104,101,32,66,73,70,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,112,97,116,116,101,114,110,47,51>>]},<<32,99,97,110,32,97,108,115,111,32,97,100,100,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,32,116,111,32,97,32,102,117,110,99,116,105,111,110,46,32,65,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,99,111,109,112,114,105,115,101,115,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,116,104,101,32,102,117,110,99,116,105,111,110,32,97,114,103,117,109,101,110,116,115,32,109,117,115,116,32,109,97,116,99,104,44,32,97,32,103,117,97,114,100,32,101,120,112,114,101,115,115,105,111,110,32,116,104,97,116,32,109,117,115,116,32,101,118,97,108,117,97,116,101,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<44,32,97,110,100,32,97,110,32,97,99,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,97,99,116,105,111,110,32,105,115,32,116,111,32,115,101,110,100,32,97,32,116,114,97,99,101,32,109,101,115,115,97,103,101,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,111,114,32,116,104,101,32,103,117,97,114,100,32,102,97,105,108,115,44,32,116,104,101,32,97,99,116,105,111,110,32,105,115,32,110,111,116,32,101,120,101,99,117,116,101,100,46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,70,65>>]},<<32,105,115,32,116,111,32,98,101,32,97,32,116,117,112,108,101,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,32,70,117,110,99,116,105,111,110,44,32,65,114,105,116,121,125>>]},<<44,32,111,114,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<32,40,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,41,46,32,73,116,32,99,97,110,32,98,101,32,116,104,101,32,109,111,100,117,108,101,44,32,102,117,110,99,116,105,111,110,44,32,97,110,100,32,97,114,105,116,121,32,102,111,114,32,97,32,102,117,110,99,116,105,111,110,32,40,111,114,32,97,32,66,73,70,32,105,110,32,97,110,121,32,109,111,100,117,108,101,41,46,32,84,104,101,32,97,116,111,109,32>>,{code,[],[<<39,95,39>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,97,115,32,97,32,119,105,108,100,99,97,114,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,119,97,121,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,77,111,100,117,108,101,44,70,117,110,99,116,105,111,110,44,39,95,39,125>>]}]},{dd,[],[{p,[],[<<65,108,108,32,102,117,110,99,116,105,111,110,115,32,111,102,32,97,110,121,32,97,114,105,116,121,32,110,97,109,101,100,32>>,{code,[],[<<70,117,110,99,116,105,111,110>>]},<<32,105,110,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,77,111,100,117,108,101,44,39,95,39,44,39,95,39,125>>]}]},{dd,[],[{p,[],[<<65,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,109,111,100,117,108,101,32>>,{code,[],[<<77,111,100,117,108,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,39,95,39,44,39,95,39,44,39,95,39,125>>]}]},{dd,[],[{p,[],[<<65,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,97,108,108,32,108,111,97,100,101,100,32,109,111,100,117,108,101,115,46>>]}]}]},{p,[],[<<79,116,104,101,114,32,99,111,109,98,105,110,97,116,105,111,110,115,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<123,77,111,100,117,108,101,44,39,95,39,44,65,114,105,116,121,125>>]},<<44,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,46,32,76,111,99,97,108,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,32,119,105,108,100,99,97,114,100,115,32,111,110,108,121,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,105,115,32,105,110,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<46>>]},{p,[],[<<73,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<77,70,65>>]},<<32,105,115,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<111,110,95,108,111,97,100>>]},<<44,32,116,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,110,100,32,102,108,97,103,32,108,105,115,116,32,97,114,101,32,117,115,101,100,32,111,110,32,97,108,108,32,109,111,100,117,108,101,115,32,116,104,97,116,32,97,114,101,32,110,101,119,108,121,32,108,111,97,100,101,100,46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99>>]},<<32,99,97,110,32,116,97,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<102,97,108,115,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,116,104,101,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]},{dt,[],[{code,[],[<<116,114,117,101>>]}]},{dd,[],[{p,[],[<<69,110,97,98,108,101,115,32,116,114,97,99,105,110,103,32,102,111,114,32,116,104,101,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,46,32,65,110,121,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,105,115,32,114,101,109,111,118,101,100,46>>]}]},{dt,[],[{code,[],[<<77,97,116,99,104,83,112,101,99,76,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,108,105,115,116,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,46,32,65,110,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,70,111,114,32,97,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<101,114,116,115,58,109,97,116,99,104,95,115,112,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<77,97,116,99,104,32,83,112,101,99,105,102,105,99,97,116,105,111,110,115,32,105,110,32,69,114,108,97,110,103>>]},<<32,105,110,32,116,104,101,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]}]},{dt,[],[{code,[],[<<114,101,115,116,97,114,116>>]}]},{dd,[],[{p,[],[<<70,111,114,32,116,104,101,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<99,97,108,108,95,116,105,109,101>>]},<<58,32,114,101,115,116,97,114,116,115,32,116,104,101,32,101,120,105,115,116,105,110,103,32,99,111,117,110,116,101,114,115,46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32,111,116,104,101,114,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,46>>]}]},{dt,[],[{code,[],[<<112,97,117,115,101>>]}]},{dd,[],[{p,[],[<<70,111,114,32,116,104,101,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<99,97,108,108,95,116,105,109,101>>]},<<58,32,112,97,117,115,101,115,32,116,104,101,32,101,120,105,115,116,105,110,103,32,99,111,117,110,116,101,114,115,46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32,111,116,104,101,114,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,111,112,116,105,111,110,115,46>>]}]}]},{p,[],[<<80,97,114,97,109,101,116,101,114,32>>,{code,[],[<<70,108,97,103,76,105,115,116>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,111,112,116,105,111,110,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,118,97,108,105,100,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<103,108,111,98,97,108>>]}]},{dd,[],[{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,99,97,108,108,32,116,114,97,99,105,110,103,32,102,111,114,32,103,108,111,98,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,40,116,104,97,116,32,105,115,44,32,99,97,108,108,115,32,115,112,101,99,105,102,121,105,110,103,32,116,104,101,32,109,111,100,117,108,101,32,101,120,112,108,105,99,105,116,108,121,41,46,32,79,110,108,121,32,101,120,112,111,114,116,101,100,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,32,97,110,100,32,111,110,108,121,32,103,108,111,98,97,108,32,99,97,108,108,115,32,103,101,110,101,114,97,116,101,32,116,114,97,99,101,32,109,101,115,115,97,103,101,115,46,32>>,{em,[],[<<84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116>>]},<<46>>]}]},{dt,[],[{code,[],[<<108,111,99,97,108>>]}]},{dd,[],[{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,99,97,108,108,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,84,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,115,101,110,116,32,119,104,101,110,101,118,101,114,32,97,110,121,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,99,97,108,108,101,100,44,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,104,111,119,32,116,104,101,121,32,97,114,101,32,99,97,108,108,101,100,46,32,73,102,32,102,108,97,103,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,105,115,32,115,101,116,32,102,111,114,32,116,104,101,32,112,114,111,99,101,115,115,44,32,97,32>>,{code,[],[<<114,101,116,117,114,110,95,116,111>>]},<<32,109,101,115,115,97,103,101,32,105,115,32,97,108,115,111,32,115,101,110,116,32,119,104,101,110,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,111,32,105,116,115,32,99,97,108,108,101,114,46>>]}]},{dt,[],[{code,[],[<<109,101,116,97,32,124,32,123,109,101,116,97,44,32,80,105,100,125,32,124,32,123,109,101,116,97,44,32,84,114,97,99,101,114,77,111,100,117,108,101,44,32,84,114,97,99,101,114,83,116,97,116,101,125>>]}]},{dd,[],[{p,[],[<<84,117,114,110,115,32,111,110,32,111,114,32,111,102,102,32,109,101,116,97,45,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,84,114,97,99,101,32,109,101,115,115,97,103,101,115,32,97,114,101,32,115,101,110,116,32,116,111,32,116,104,101,32,116,114,97,99,101,114,32,119,104,101,110,101,118,101,114,32,97,110,121,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,99,97,108,108,101,100,46,32,73,102,32,110,111,32,116,114,97,99,101,114,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<115,101,108,102,40,41>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,97,32,100,101,102,97,117,108,116,32,116,114,97,99,101,114,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<77,101,116,97,45,116,114,97,99,105,110,103,32,116,114,97,99,101,115,32,97,108,108,32,112,114,111,99,101,115,115,101,115,32,97,110,100,32,100,111,101,115,32,110,111,116,32,99,97,114,101,32,97,98,111,117,116,32,116,104,101,32,112,114,111,99,101,115,115,32,116,114,97,99,101,32,102,108,97,103,115,32,115,101,116,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,47,51>>]},<<44,32,116,104,101,32,116,114,97,99,101,32,102,108,97,103,115,32,97,114,101,32,105,110,115,116,101,97,100,32,102,105,120,101,100,32,116,111,32>>,{code,[],[<<91,99,97,108,108,44,32,116,105,109,101,115,116,97,109,112,93>>]},<<46>>]},{p,[],[<<84,104,101,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<123,114,101,116,117,114,110,95,116,114,97,99,101,125>>]},<<32,119,111,114,107,115,32,119,105,116,104,32,109,101,116,97,45,116,114,97,99,101,32,97,110,100,32,115,101,110,100,115,32,105,116,115,32,116,114,97,99,101,32,109,101,115,115,97,103,101,32,116,111,32,116,104,101,32,115,97,109,101,32,116,114,97,99,101,114,46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,116,114,117,101>>]},<<41,32,111,114,32,115,116,111,112,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,102,97,108,115,101>>]},<<41,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,70,111,114,32,101,118,101,114,121,32,102,117,110,99,116,105,111,110,44,32,97,32,99,111,117,110,116,101,114,32,105,115,32,105,110,99,114,101,109,101,110,116,101,100,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,44,32,105,110,32,97,110,121,32,112,114,111,99,101,115,115,46,32,78,111,32,112,114,111,99,101,115,115,32,116,114,97,99,101,32,102,108,97,103,115,32,110,101,101,100,32,116,111,32,98,101,32,97,99,116,105,118,97,116,101,100,46>>]},{p,[],[<<73,102,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,105,115,32,115,116,97,114,116,101,100,32,119,104,105,108,101,32,97,108,114,101,97,100,121,32,114,117,110,110,105,110,103,44,32,116,104,101,32,99,111,117,110,116,32,105,115,32,114,101,115,116,97,114,116,101,100,32,102,114,111,109,32,122,101,114,111,46,32,84,111,32,112,97,117,115,101,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,44,32,117,115,101,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,112,97,117,115,101>>]},<<46,32,80,97,117,115,101,100,32,97,110,100,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,32,99,97,110,32,98,101,32,114,101,115,116,97,114,116,101,100,32,102,114,111,109,32,122,101,114,111,32,119,105,116,104,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,114,101,115,116,97,114,116>>]},<<46>>]},{p,[],[<<84,111,32,114,101,97,100,32,116,104,101,32,99,111,117,110,116,101,114,32,118,97,108,117,101,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<99,97,108,108,95,116,105,109,101>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,116,114,117,101>>]},<<41,32,111,114,32,115,116,111,112,115,32,40>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,102,97,108,115,101>>]},<<41,32,99,97,108,108,32,116,105,109,101,32,116,114,97,99,105,110,103,32,102,111,114,32,97,108,108,32,116,121,112,101,115,32,111,102,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,46,32,70,111,114,32,101,118,101,114,121,32,102,117,110,99,116,105,111,110,44,32,97,32,99,111,117,110,116,101,114,32,105,115,32,105,110,99,114,101,109,101,110,116,101,100,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,46,32,84,105,109,101,32,115,112,101,110,116,32,105,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,97,99,99,117,109,117,108,97,116,101,100,32,105,110,32,116,119,111,32,111,116,104,101,114,32,99,111,117,110,116,101,114,115,44,32,115,101,99,111,110,100,115,32,97,110,100,32,109,105,99,114,111,115,101,99,111,110,100,115,46,32,84,104,101,32,99,111,117,110,116,101,114,115,32,97,114,101,32,115,116,111,114,101,100,32,102,111,114,32,101,97,99,104,32,99,97,108,108,32,116,114,97,99,101,100,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<73,102,32,99,97,108,108,32,116,105,109,101,32,116,114,97,99,105,110,103,32,105,115,32,115,116,97,114,116,101,100,32,119,104,105,108,101,32,97,108,114,101,97,100,121,32,114,117,110,110,105,110,103,44,32,116,104,101,32,99,111,117,110,116,32,97,110,100,32,116,105,109,101,32,114,101,115,116,97,114,116,32,102,114,111,109,32,122,101,114,111,46,32,84,111,32,112,97,117,115,101,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,44,32,117,115,101,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,112,97,117,115,101>>]},<<46,32,80,97,117,115,101,100,32,97,110,100,32,114,117,110,110,105,110,103,32,99,111,117,110,116,101,114,115,32,99,97,110,32,98,101,32,114,101,115,116,97,114,116,101,100,32,102,114,111,109,32,122,101,114,111,32,119,105,116,104,32>>,{code,[],[<<77,97,116,99,104,83,112,101,99,32,61,61,32,114,101,115,116,97,114,116>>]},<<46>>]},{p,[],[<<84,111,32,114,101,97,100,32,116,104,101,32,99,111,117,110,116,101,114,32,118,97,108,117,101,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]}]},{p,[],[<<84,104,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,97,110,100,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,97,114,101,32,109,117,116,117,97,108,108,121,32,101,120,99,108,117,115,105,118,101,44,32,97,110,100,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,32,40,105,102,32,110,111,32,111,112,116,105,111,110,115,32,97,114,101,32,115,112,101,99,105,102,105,101,100,41,46,32,84,104,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,108,108,95,99,111,117,110,116>>]},<<32,97,110,100,32>>,{code,[],[<<109,101,116,97>>]},<<32,112,101,114,102,111,114,109,32,97,32,107,105,110,100,32,111,102,32,108,111,99,97,108,32,116,114,97,99,105,110,103,44,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<46,32,65,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,103,108,111,98,97,108,108,121,32,111,114,32,108,111,99,97,108,108,121,32,116,114,97,99,101,100,46,32,73,102,32,103,108,111,98,97,108,32,116,114,97,99,105,110,103,32,105,115,32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,97,32,115,101,116,32,111,102,32,102,117,110,99,116,105,111,110,115,44,32,116,104,101,110,32,108,111,99,97,108,44,32,109,101,116,97,44,32,99,97,108,108,32,116,105,109,101,44,32,97,110,100,32,99,97,108,108,32,99,111,117,110,116,32,116,114,97,99,105,110,103,32,102,111,114,32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,101,116,32,111,102,32,108,111,99,97,108,32,102,117,110,99,116,105,111,110,115,32,105,115,32,100,105,115,97,98,108,101,100,44,32,97,110,100,32,99,111,110,118,101,114,115,101,108,121,46>>]},{p,[],[<<87,104,101,110,32,100,105,115,97,98,108,105,110,103,32,116,114,97,99,101,44,32,116,104,101,32,111,112,116,105,111,110,32,109,117,115,116,32,109,97,116,99,104,32,116,104,101,32,116,121,112,101,32,111,102,32,116,114,97,99,101,32,115,101,116,32,111,110,32,116,104,101,32,102,117,110,99,116,105,111,110,46,32,84,104,97,116,32,105,115,44,32,108,111,99,97,108,32,116,114,97,99,105,110,103,32,109,117,115,116,32,98,101,32,100,105,115,97,98,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<108,111,99,97,108>>]},<<32,97,110,100,32,103,108,111,98,97,108,32,116,114,97,99,105,110,103,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,40,111,114,32,110,111,32,111,112,116,105,111,110,41,44,32,97,110,100,32,115,111,32,111,110,46>>]},{p,[],[<<80,97,114,116,32,111,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,108,105,115,116,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,100,105,114,101,99,116,108,121,46,32,73,102,32,97,32,102,117,110,99,116,105,111,110,32,104,97,115,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,105,116,32,99,97,110,32,98,101,32,114,101,112,108,97,99,101,100,32,119,105,116,104,32,97,32,110,101,119,32,111,110,101,46,32,84,111,32,99,104,97,110,103,101,32,97,110,32,101,120,105,115,116,105,110,103,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,117,115,101,32,116,104,101,32,66,73,70,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,114,97,99,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,114,97,99,101,95,105,110,102,111,47,50>>]}]},<<32,116,111,32,114,101,116,114,105,101,118,101,32,116,104,101,32,101,120,105,115,116,105,110,103,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,102,117,110,99,116,105,111,110,115,32,109,97,116,99,104,105,110,103,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<77,70,65>>]},<<46,32,84,104,105,115,32,105,115,32,122,101,114,111,32,105,102,32,110,111,110,101,32,109,97,116,99,104,101,100,46>>]},{p,[],[<<70,97,105,108,115,32,98,121,32,114,97,105,115,105,110,103,32,97,110,32,101,114,114,111,114,32,101,120,99,101,112,116,105,111,110,32,119,105,116,104,32,97,110,32,101,114,114,111,114,32,114,101,97,115,111,110,32,111,102,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[<<73,102,32,97,110,32,97,114,103,117,109,101,110,116,32,105,115,32,105,110,118,97,108,105,100,46>>]}]},{dt,[],[{code,[],[<<115,121,115,116,101,109,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<73,102,32,97,32,109,97,116,99,104,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,112,97,115,115,101,100,32,97,115,32,97,114,103,117,109,101,110,116,32,104,97,115,32,101,120,99,101,115,115,105,118,101,32,110,101,115,116,105,110,103,32,119,104,105,99,104,32,99,97,117,115,101,115,32,115,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,101,120,104,97,117,115,116,105,111,110,32,102,111,114,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,116,104,97,116,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,105,115,32,101,120,101,99,117,116,105,110,103,32,111,110,46,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,35,115,99,104,101,100,95,116,104,114,101,97,100,95,115,116,97,99,107,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[<<83,99,104,101,100,117,108,101,114,32,115,116,97,99,107,32,115,105,122,101>>]},<<32,99,97,110,32,98,101,32,99,111,110,102,105,103,117,114,101,100,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,51,55,55>>,signature => [{attribute,{2733,2},spec,{{erlang,trace_pattern,3},[{type,{2739,6},bounded_fun,[{type,{2739,6},'fun',[{type,{2739,6},product,[{var,{2739,7},'MFA'},{var,{2739,12},'MatchSpec'},{var,{2739,23},'FlagList'}]},{type,{2739,36},non_neg_integer,[]}]},[{type,{2740,7},constraint,[{atom,{2740,7},is_subtype},[{var,{2740,7},'MFA'},{user_type,{2740,14},trace_pattern_mfa,[]}]]},{type,{2741,7},constraint,[{atom,{2741,7},is_subtype},[{var,{2741,7},'MatchSpec'},{type,{2741,21},union,[{ann_type,{2741,21},[{var,{2741,21},'MatchSpecList'},{user_type,{2741,38},trace_match_spec,[]}]},{type,{2742,20},boolean,[]},{atom,{2743,20},restart},{atom,{2744,20},pause}]}]]},{type,{2745,7},constraint,[{atom,{2745,7},is_subtype},[{var,{2745,7},'FlagList'},{type,{2745,19},list,[{user_type,{2745,21},trace_pattern_flag,[]}]}]]}]]}]}}]}},{{function,trunc,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2052}],[<<116,114,117,110,99,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,117,110,99,97,116,101,115,32,116,104,101,32,100,101,99,105,109,97,108,115,32,111,102,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,53,46,55,41,46,10,53>>]}]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,45,53,46,55,41,46,10,45,53>>]}]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,53,41,46,10,53>>]}]},{pre,[],[{code,[],[<<62,32,116,114,117,110,99,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41,46,10,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]}]},{p,[],[<<73,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<116,114,117,110,99,40,51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48,41>>]},<<32,101,118,97,108,117,97,116,101,115,32,116,111,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56>>]},<<46,32,84,104,101,32,114,101,97,115,111,110,32,102,111,114,32,116,104,105,115,32,105,115,32,116,104,97,116,32,116,104,101,32,110,117,109,98,101,114,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,57,46,48>>]},<<32,99,97,110,110,111,116,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,73,110,115,116,101,97,100,44,32,116,104,101,32,102,108,111,97,116,32,108,105,116,101,114,97,108,32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32>>,{code,[],[<<51,54,48,50,56,55,57,55,48,49,56,57,54,51,57,54,56,46,48>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,99,108,111,115,101,115,116,32,110,117,109,98,101,114,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,101,120,97,99,116,108,121,32,97,115,32,97,32,102,108,111,97,116,32,118,97,108,117,101,46,32,83,101,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,100,97,116,97,95,116,121,112,101,115,35,102,108,111,97,116,95,114,101,112,114,101,115,101,110,116,97,116,105,111,110,95,112,114,111,98,108,101,109>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,70,108,111,97,116,105,110,103,32,80,111,105,110,116,32,78,117,109,98,101,114,115>>]},<<32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,53,56,52>>,signature => [{attribute,{2052,2},spec,{{trunc,1},[{type,{2052,12},bounded_fun,[{type,{2052,12},'fun',[{type,{2052,12},product,[{var,{2052,13},'Number'}]},{type,{2052,24},integer,[]}]},[{type,{2053,7},constraint,[{atom,{2053,7},is_subtype},[{var,{2053,7},'Number'},{type,{2053,17},number,[]}]]}]]}]}}]}},{{function,tuple_size,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2059}],[<<116,117,112,108,101,95,115,105,122,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,110,32,105,110,116,101,103,101,114,32,116,104,97,116,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,105,110,32>>,{code,[],[<<84,117,112,108,101>>]},<<44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,117,112,108,101,95,115,105,122,101,40,123,109,111,114,110,105,44,32,109,117,108,108,101,44,32,98,119,97,110,103,101,125,41,46,10,51>>]}]},{p,[],[<<65,108,108,111,119,101,100,32,105,110,32,103,117,97,114,100,32,116,101,115,116,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,54,49,53>>,signature => [{attribute,{2059,2},spec,{{tuple_size,1},[{type,{2059,17},bounded_fun,[{type,{2059,17},'fun',[{type,{2059,17},product,[{var,{2059,18},'Tuple'}]},{type,{2059,28},non_neg_integer,[]}]},[{type,{2060,7},constraint,[{atom,{2060,7},is_subtype},[{var,{2060,7},'Tuple'},{type,{2060,16},tuple,any}]]}]]}]}}]}},{{function,tuple_to_list,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2755}],[<<116,117,112,108,101,95,116,111,95,108,105,115,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32>>,{code,[],[<<84,117,112,108,101>>]},<<46,32>>,{code,[],[<<84,117,112,108,101>>]},<<32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,69,114,108,97,110,103,32,116,101,114,109,115,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,116,117,112,108,101,95,116,111,95,108,105,115,116,40,123,115,104,97,114,101,44,32,123,39,69,114,105,99,115,115,111,110,95,66,39,44,32,49,54,51,125,125,41,46,10,91,115,104,97,114,101,44,123,39,69,114,105,99,115,115,111,110,95,66,39,44,49,54,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,54,50,56>>,signature => [{attribute,{2755,2},spec,{{tuple_to_list,1},[{type,{2755,20},bounded_fun,[{type,{2755,20},'fun',[{type,{2755,20},product,[{var,{2755,21},'Tuple'}]},{type,{2755,31},list,[{type,{2755,32},term,[]}]}]},[{type,{2756,7},constraint,[{atom,{2756,7},is_subtype},[{var,{2756,7},'Tuple'},{type,{2756,16},tuple,any}]]}]]}]}}]}},{{function,unalias,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,773}],[<<117,110,97,108,105,97,115,47,49>>],#{<<101,110>> => [{p,[],[<<68,101,97,99,116,105,118,97,116,101,32,116,104,101,32,97,108,105,97,115,32>>,{code,[],[<<65,108,105,97,115>>]},<<32,112,114,101,118,105,111,117,115,108,121,32,99,114,101,97,116,101,100,32,98,121,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,46,32,65,110,32,97,108,105,97,115,32,99,97,110,32,102,111,114,32,101,120,97,109,112,108,101,32,98,101,32,99,114,101,97,116,101,100,32,118,105,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,97,108,105,97,115,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,108,105,97,115,47,48>>]}]},<<44,32,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,51>>]}]},<<46,32>>,{code,[],[<<117,110,97,108,105,97,115,47,49>>]},<<32,119,105,108,108,32,97,108,119,97,121,115,32,100,101,97,99,116,105,118,97,116,101,32,116,104,101,32,97,108,105,97,115,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,111,112,116,105,111,110,115,32,117,115,101,100,32,119,104,101,110,32,99,114,101,97,116,105,110,103,32,116,104,101,32,97,108,105,97,115,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,116,114,117,101,32,105,102,32>>,{code,[],[<<65,108,105,97,115>>]},<<32,119,97,115,32,97,32,99,117,114,114,101,110,116,108,121,32,97,99,116,105,118,101,32,97,108,105,97,115,32,102,111,114,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,101,115,59,32,111,116,104,101,114,119,105,115,101,44,32,102,97,108,115,101,46>>]},{p,[],[<<70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,112,114,111,99,101,115,115,32,97,108,105,97,115,101,115,32,115,101,101,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,112,114,111,99,101,115,115,45,97,108,105,97,115,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{i,[],[<<80,114,111,99,101,115,115,32,65,108,105,97,115,101,115>>]}]},<<32,115,101,99,116,105,111,110,32,111,102,32,116,104,101,32>>,{i,[],[<<69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,54,52,49>>,signature => [{attribute,{773,2},spec,{{unalias,1},[{type,{773,14},bounded_fun,[{type,{773,14},'fun',[{type,{773,14},product,[{var,{773,15},'Alias'}]},{type,{773,25},boolean,[]}]},[{type,{774,7},constraint,[{atom,{774,7},is_subtype},[{var,{774,7},'Alias'},{type,{774,16},reference,[]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,unique_integer,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1532}],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,48>>],#{<<101,110>> => [{p,[],[<<71,101,110,101,114,97,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,97,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<105,110,116,101,103,101,114,32,117,110,105,113,117,101,32,111,110,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101>>]},<<46,32,84,104,101,32,115,97,109,101,32,97,115,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,93,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,54,54,55>>,signature => [{attribute,{1532,2},spec,{{erlang,unique_integer,0},[{type,{1532,28},'fun',[{type,{1532,28},product,[]},{type,{1532,34},integer,[]}]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,unique_integer,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1525}],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<71,101,110,101,114,97,116,101,115,32,97,110,100,32,114,101,116,117,114,110,115,32,97,110,32>>,{a,[{href,<<115,121,115,116,101,109,47,101,102,102,105,99,105,101,110,99,121,95,103,117,105,100,101,58,97,100,118,97,110,99,101,100,35,117,110,105,113,117,101,95,105,110,116,101,103,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<105,110,116,101,103,101,114,32,117,110,105,113,117,101,32,111,110,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101>>]},<<46,32,84,104,101,32,105,110,116,101,103,101,114,32,105,115,32,117,110,105,113,117,101,32,105,110,32,116,104,101,32,115,101,110,115,101,32,116,104,97,116,32,116,104,105,115,32,66,73,70,44,32,117,115,105,110,103,32,116,104,101,32,115,97,109,101,32,115,101,116,32,111,102,32,109,111,100,105,102,105,101,114,115,44,32,100,111,101,115,32,110,111,116,32,114,101,116,117,114,110,32,116,104,101,32,115,97,109,101,32,105,110,116,101,103,101,114,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,32,111,110,32,116,104,101,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,69,97,99,104,32,105,110,116,101,103,101,114,32,118,97,108,117,101,32,99,97,110,32,111,102,32,99,111,117,114,115,101,32,98,101,32,99,111,110,115,116,114,117,99,116,101,100,32,98,121,32,111,116,104,101,114,32,109,101,97,110,115,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,119,104,101,110,32>>,{code,[],[<<91,93>>]},<<32,105,115,32,112,97,115,115,101,100,32,97,115,32>>,{code,[],[<<77,111,100,105,102,105,101,114,76,105,115,116>>]},<<44,32,98,111,116,104,32,110,101,103,97,116,105,118,101,32,97,110,100,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,115,32,99,97,110,32,98,101,32,114,101,116,117,114,110,101,100,46,32,84,104,105,115,32,116,111,32,117,115,101,32,116,104,101,32,114,97,110,103,101,32,111,102,32,105,110,116,101,103,101,114,115,32,116,104,97,116,32,100,111,32,110,111,116,32,110,101,101,100,32,104,101,97,112,32,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,97,115,32,109,117,99,104,32,97,115,32,112,111,115,115,105,98,108,101,46,32,66,121,32,100,101,102,97,117,108,116,32,116,104,101,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,115,32,97,114,101,32,97,108,115,111,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,117,110,105,113,117,101,44,32,116,104,97,116,32,105,115,44,32,97,110,121,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,32,99,97,110,32,98,101,32,115,109,97,108,108,101,114,32,111,114,32,108,97,114,103,101,114,32,116,104,97,110,32,112,114,101,118,105,111,117,115,108,121,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,115,46>>]},{p,[],[{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,58>>]},{dl,[],[{dt,[],[<<112,111,115,105,116,105,118,101>>]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,111,110,108,121,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,115,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,98,121,32,112,97,115,115,105,110,103,32,116,104,101,32>>,{code,[],[<<112,111,115,105,116,105,118,101>>]},<<32,109,111,100,105,102,105,101,114,32,121,111,117,32,119,105,108,108,32,103,101,116,32,104,101,97,112,32,97,108,108,111,99,97,116,101,100,32,105,110,116,101,103,101,114,115,32,40,98,105,103,110,117,109,115,41,32,113,117,105,99,107,101,114,46>>]}]},{dt,[],[<<109,111,110,111,116,111,110,105,99>>]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,83,116,114,105,99,116,108,121,95,77,111,110,111,116,111,110,105,99,97,108,108,121,95,73,110,99,114,101,97,115,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<115,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103>>]},<<32,105,110,116,101,103,101,114,115,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,99,114,101,97,116,105,111,110,32,116,105,109,101,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,105,110,116,101,103,101,114,32,114,101,116,117,114,110,101,100,32,105,115,32,97,108,119,97,121,115,32,108,97,114,103,101,114,32,116,104,97,110,32,112,114,101,118,105,111,117,115,108,121,32,114,101,116,117,114,110,101,100,32,105,110,116,101,103,101,114,115,32,111,110,32,116,104,101,32,99,117,114,114,101,110,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46>>]},{p,[],[<<84,104,101,115,101,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,111,114,100,101,114,32,98,101,116,119,101,101,110,32,101,118,101,110,116,115,32,111,110,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46,32,84,104,97,116,32,105,115,44,32,105,102,32,98,111,116,104,32>>,{code,[],[<<88,32,61,32,101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]},<<32,97,110,100,32>>,{code,[],[<<89,32,61,32,101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]},<<32,97,114,101,32,101,120,101,99,117,116,101,100,32,98,121,32,100,105,102,102,101,114,101,110,116,32,112,114,111,99,101,115,115,101,115,32,40,111,114,32,116,104,101,32,115,97,109,101,32,112,114,111,99,101,115,115,41,32,111,110,32,116,104,101,32,115,97,109,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,32,97,110,100,32>>,{code,[],[<<88,32,60,32,89>>]},<<44,32,119,101,32,107,110,111,119,32,116,104,97,116,32>>,{code,[],[<<88>>]},<<32,119,97,115,32,99,114,101,97,116,101,100,32,98,101,102,111,114,101,32>>,{code,[],[<<89>>]},<<46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<83,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,118,97,108,117,101,115,32,97,114,101,32,105,110,104,101,114,101,110,116,108,121,32,113,117,105,116,101,32,101,120,112,101,110,115,105,118,101,32,116,111,32,103,101,110,101,114,97,116,101,32,97,110,100,32,115,99,97,108,101,115,32,112,111,111,114,108,121,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,118,97,108,117,101,115,32,110,101,101,100,32,116,111,32,98,101,32,115,121,110,99,104,114,111,110,105,122,101,100,32,98,101,116,119,101,101,110,32,67,80,85,32,99,111,114,101,115,46,32,84,104,97,116,32,105,115,44,32,100,111,32,110,111,116,32,112,97,115,115,32,116,104,101,32>>,{code,[],[<<109,111,110,111,116,111,110,105,99>>]},<<32,109,111,100,105,102,105,101,114,32,117,110,108,101,115,115,32,121,111,117,32,114,101,97,108,108,121,32,110,101,101,100,32,115,116,114,105,99,116,108,121,32,109,111,110,111,116,111,110,105,99,97,108,108,121,32,105,110,99,114,101,97,115,105,110,103,32,118,97,108,117,101,115,46>>]}]}]}]},{p,[],[<<65,108,108,32,118,97,108,105,100,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,32,99,97,110,32,98,101,32,99,111,109,98,105,110,101,100,46,32,82,101,112,101,97,116,101,100,32,40,118,97,108,105,100,41,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,32,105,110,32,116,104,101,32>>,{code,[],[<<77,111,100,105,102,105,101,114,76,105,115,116>>]},<<32,97,114,101,32,105,103,110,111,114,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,115,101,116,32,111,102,32,105,110,116,101,103,101,114,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<101,114,108,97,110,103,58,117,110,105,113,117,101,95,105,110,116,101,103,101,114,47,49>>]},<<32,117,115,105,110,103,32,100,105,102,102,101,114,101,110,116,32,115,101,116,115,32,111,102,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<115,32>>,{em,[],[<<119,105,108,108,32,111,118,101,114,108,97,112>>]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,98,121,32,99,97,108,108,105,110,103,32>>,{code,[],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,109,111,110,111,116,111,110,105,99,93,41>>]},<<44,32,97,110,100,32>>,{code,[],[<<117,110,105,113,117,101,95,105,110,116,101,103,101,114,40,91,112,111,115,105,116,105,118,101,44,32,109,111,110,111,116,111,110,105,99,93,41>>]},<<32,114,101,112,101,97,116,101,100,108,121,44,32,121,111,117,32,119,105,108,108,32,101,118,101,110,116,117,97,108,108,121,32,115,101,101,32,115,111,109,101,32,105,110,116,101,103,101,114,115,32,116,104,97,116,32,97,114,101,32,114,101,116,117,114,110,101,100,32,98,121,32,98,111,116,104,32,99,97,108,108,115,46>>]}]},{p,[],[<<70,97,105,108,117,114,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<105,102,32>>,{code,[],[<<77,111,100,105,102,105,101,114,76,105,115,116>>]},<<32,105,115,32,110,111,116,32,97,32,112,114,111,112,101,114,32,108,105,115,116,46>>]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[<<105,102,32>>,{code,[],[<<77,111,100,105,102,105,101,114>>]},<<32,105,115,32,110,111,116,32,97,32,118,97,108,105,100,32,109,111,100,105,102,105,101,114,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,54,56,48>>,signature => [{attribute,{1525,2},spec,{{erlang,unique_integer,1},[{type,{1525,28},bounded_fun,[{type,{1525,28},'fun',[{type,{1525,28},product,[{var,{1525,29},'ModifierList'}]},{type,{1525,46},integer,[]}]},[{type,{1526,7},constraint,[{atom,{1526,7},is_subtype},[{var,{1526,7},'ModifierList'},{type,{1526,23},list,[{var,{1526,24},'Modifier'}]}]]},{type,{1527,7},constraint,[{atom,{1527,7},is_subtype},[{var,{1527,7},'Modifier'},{type,{1527,19},union,[{atom,{1527,19},positive},{atom,{1527,30},monotonic}]}]]}]]}]}}],since => <<79,84,80,32,49,56,46,48>>}},{{function,universaltime,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2065}],[<<117,110,105,118,101,114,115,97,108,116,105,109,101,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,99,117,114,114,101,110,116,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,97,99,99,111,114,100,105,110,103,32,116,111,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,32,105,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125,44,32,123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125,125>>]},<<32,105,102,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32>>,{code,[],[<<101,114,108,97,110,103,58,117,110,105,118,101,114,115,97,108,116,105,109,101,40,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<101,114,108,97,110,103,58,108,111,99,97,108,116,105,109,101,40,41>>]},<<46,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,111,115,45,115,121,115,116,101,109,45,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<79,83,32,83,121,115,116,101,109,32,84,105,109,101>>]},<<46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,117,110,105,118,101,114,115,97,108,116,105,109,101,40,41,46,10,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,49,56,44,52,51,125,125>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,55,54,50>>,signature => [{attribute,{2065,2},spec,{{erlang,universaltime,0},[{type,{2065,27},bounded_fun,[{type,{2065,27},'fun',[{type,{2065,27},product,[]},{var,{2065,33},'DateTime'}]},[{type,{2066,7},constraint,[{atom,{2066,7},is_subtype},[{var,{2066,7},'DateTime'},{remote_type,{2066,19},[{atom,{2066,19},calendar},{atom,{2066,28},datetime},[]]}]]}]]}]}}]}},{{function,universaltime_to_localtime,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2882}],[<<117,110,105,118,101,114,115,97,108,116,105,109,101,95,116,111,95,108,111,99,97,108,116,105,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,111,110,118,101,114,116,115,32,85,110,105,118,101,114,115,97,108,32,84,105,109,101,32,67,111,111,114,100,105,110,97,116,101,100,32,40,85,84,67,41,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,116,111,32,108,111,99,97,108,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,105,110,32,116,104,101,32,102,111,114,109,32>>,{code,[],[<<123,123,89,101,97,114,44,32,77,111,110,116,104,44,32,68,97,121,125,44,32,123,72,111,117,114,44,32,77,105,110,117,116,101,44,32,83,101,99,111,110,100,125,125>>]},<<32,105,102,32,115,117,112,112,111,114,116,101,100,32,98,121,32,116,104,101,32,117,110,100,101,114,108,121,105,110,103,32,79,83,46,32,79,116,104,101,114,119,105,115,101,32,110,111,32,99,111,110,118,101,114,115,105,111,110,32,105,115,32,100,111,110,101,44,32,97,110,100,32>>,{code,[],[<<85,110,105,118,101,114,115,97,108,116,105,109,101>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,101,114,108,97,110,103,58,117,110,105,118,101,114,115,97,108,116,105,109,101,95,116,111,95,108,111,99,97,108,116,105,109,101,40,123,123,49,57,57,54,44,49,49,44,54,125,44,123,49,52,44,49,56,44,52,51,125,125,41,46,10,123,123,49,57,57,54,44,49,49,44,55,125,44,123,49,53,44,49,56,44,52,51,125,125>>]}]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<85,110,105,118,101,114,115,97,108,116,105,109,101>>]},<<32,100,101,110,111,116,101,115,32,97,110,32,105,110,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,55,56,49>>,signature => [{attribute,{2882,2},spec,{{erlang,universaltime_to_localtime,1},[{type,{2882,40},bounded_fun,[{type,{2882,40},'fun',[{type,{2882,40},product,[{var,{2882,41},'Universaltime'}]},{var,{2882,60},'Localtime'}]},[{type,{2883,7},constraint,[{atom,{2883,7},is_subtype},[{var,{2883,7},'Localtime'},{remote_type,{2883,20},[{atom,{2883,20},calendar},{atom,{2883,29},datetime},[]]}]]},{type,{2884,7},constraint,[{atom,{2884,7},is_subtype},[{var,{2884,7},'Universaltime'},{remote_type,{2884,24},[{atom,{2884,24},calendar},{atom,{2884,33},datetime},[]]}]]}]]}]}}]}},{{function,unlink,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2077}],[<<117,110,108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,109,111,118,101,115,32,97,32,108,105,110,107,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,105,110,103,32,112,114,111,99,101,115,115,32,97,110,100,32,97,110,111,116,104,101,114,32,112,114,111,99,101,115,115,32,111,114,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,100,32,98,121,32>>,{code,[],[<<73,100>>]},<<46,32,87,101,32,119,105,108,108,32,102,114,111,109,32,104,101,114,101,32,111,110,32,99,97,108,108,32,116,104,101,32,105,100,101,110,116,105,102,105,101,100,32,112,114,111,99,101,115,115,32,111,114,32,112,111,114,116,32,117,110,108,105,110,107,101,101,46>>]},{p,[],[<<65,32,108,105,110,107,32,99,97,110,32,98,101,32,115,101,116,32,117,112,32,117,115,105,110,103,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,108,105,110,107,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,110,107,47,49>>]}]},<<32,66,73,70,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,108,105,110,107,115,32,97,110,100,32,101,120,105,116,32,115,105,103,110,97,108,115,32,100,117,101,32,116,111,32,108,105,110,107,115,44,32,115,101,101,32,116,104,101,32>>,{i,[],[<<80,114,111,99,101,115,115,101,115>>]},<<32,99,104,97,112,116,101,114,32,105,110,32,116,104,101,32>>,{i,[],[<<69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108>>]},<<58>>]},{ul,[],[{li,[],[{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,108,105,110,107,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<76,105,110,107,115>>]}]},{li,[],[{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,115,101,110,100,105,110,103,95,101,120,105,116,95,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<83,101,110,100,105,110,103,32,69,120,105,116,32,83,105,103,110,97,108,115>>]}]},{li,[],[{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,114,101,99,101,105,118,105,110,103,95,101,120,105,116,95,115,105,103,110,97,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<82,101,99,101,105,118,105,110,103,32,69,120,105,116,32,83,105,103,110,97,108,115>>]}]}]},{p,[],[<<79,110,99,101,32>>,{code,[],[<<117,110,108,105,110,107,40,73,100,41>>]},<<32,104,97,115,32,114,101,116,117,114,110,101,100,44,32,105,116,32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,104,97,116,32,116,104,101,32,108,105,110,107,32,98,101,116,119,101,101,110,32,116,104,101,32,99,97,108,108,101,114,32,97,110,100,32,116,104,101,32,117,110,108,105,110,107,101,101,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,111,110,32,116,104,101,32,99,97,108,108,101,114,32,105,110,32,116,104,101,32,102,117,116,117,114,101,32,40,117,110,108,101,115,115,32,116,104,101,32,108,105,110,107,32,105,115,32,115,101,116,117,112,32,97,103,97,105,110,41,46,32,78,111,116,101,32,116,104,97,116,32,105,102,32,116,104,101,32,99,97,108,108,101,114,32,105,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,116,114,97,112,95,101,120,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,114,97,112,112,105,110,103,32,101,120,105,116,115>>]},<<44,32,97,110,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,73,100,44,32,69,120,105,116,82,101,97,115,111,110,125>>]},<<32,109,101,115,115,97,103,101,32,100,117,101,32,116,111,32,116,104,101,32,108,105,110,107,32,109,97,121,32,104,97,118,101,32,98,101,101,110,32,112,108,97,99,101,100,32,105,110,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,111,102,32,116,104,101,32,99,97,108,108,101,114,32,98,101,102,111,114,101,32,116,104,101,32>>,{code,[],[<<117,110,108,105,110,107,40,73,100,41>>]},<<32,99,97,108,108,32,99,111,109,112,108,101,116,101,100,46,32,65,108,115,111,32,110,111,116,101,32,116,104,97,116,32,116,104,101,32>>,{code,[],[<<123,39,69,88,73,84,39,44,32,73,100,44,32,69,120,105,116,82,101,97,115,111,110,125>>]},<<32,109,101,115,115,97,103,101,32,109,97,121,32,98,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,108,105,110,107,44,32,98,117,116,32,109,97,121,32,97,108,115,111,32,98,101,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,117,110,108,105,107,101,101,32,115,101,110,100,105,110,103,32,116,104,101,32,99,97,108,108,101,114,32,97,110,32,101,120,105,116,32,115,105,103,110,97,108,32,98,121,32,99,97,108,108,105,110,103,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,101,120,105,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,120,105,116,47,50>>]}]},<<32,66,73,70,46,32,84,104,101,114,101,102,111,114,101,44,32,105,116,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,98,101,32,97,112,112,114,111,112,114,105,97,116,101,32,116,111,32,99,108,101,97,110,32,117,112,32,116,104,101,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,97,102,116,101,114,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<117,110,108,105,110,107,40,73,100,41>>]},<<32,97,115,32,102,111,108,108,111,119,115,44,32,119,104,101,110,32,116,114,97,112,112,105,110,103,32,101,120,105,116,115,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<117,110,108,105,110,107,40,73,100,41,44,10,114,101,99,101,105,118,101,10,32,32,32,32,123,39,69,88,73,84,39,44,32,73,100,44,32,95,125,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,97,102,116,101,114,32,48,32,45,62,10,32,32,32,32,32,32,32,32,116,114,117,101,10,101,110,100>>]}]},{p,[],[<<84,104,101,32,108,105,110,107,32,114,101,109,111,118,97,108,32,105,115,32,112,101,114,102,111,114,109,101,100,32,97,115,121,110,99,104,114,111,110,111,117,115,108,121,46,32,73,102,32,115,117,99,104,32,97,32,108,105,110,107,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,44,32,110,111,116,104,105,110,103,32,105,115,32,100,111,110,101,46,32,65,32,100,101,116,97,105,108,101,100,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,100,105,115,116,95,112,114,111,116,111,99,111,108,35,108,105,110,107,95,112,114,111,116,111,99,111,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<108,105,110,107,32,112,114,111,116,111,99,111,108>>]},<<32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,116,104,101,32>>,{i,[],[<<68,105,115,116,114,105,98,117,116,105,111,110,32,80,114,111,116,111,99,111,108>>]},<<32,99,104,97,112,116,101,114,32,111,102,32,116,104,101,32>>,{i,[],[<<69,82,84,83,32,85,115,101,114,39,115,32,71,117,105,100,101>>]},<<46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<73,100>>]},<<32,100,111,101,115,32,110,111,116,32,105,100,101,110,116,105,102,121,32,97,32,112,114,111,99,101,115,115,32,111,114,32,97,32,110,111,100,101,32,108,111,99,97,108,32,112,111,114,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,56,48,48>>,signature => [{attribute,{2077,2},spec,{{unlink,1},[{type,{2077,13},bounded_fun,[{type,{2077,13},'fun',[{type,{2077,13},product,[{var,{2077,14},'Id'}]},{atom,{2077,21},true}]},[{type,{2078,7},constraint,[{atom,{2078,7},is_subtype},[{var,{2078,7},'Id'},{type,{2078,13},union,[{type,{2078,13},pid,[]},{type,{2078,21},port,[]}]}]]}]]}]}}]}},{{function,unregister,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2083}],[<<117,110,114,101,103,105,115,116,101,114,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,109,111,118,101,115,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,103,105,115,116,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,103,105,115,116,101,114,101,100,32,110,97,109,101>>]}]},<<32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,97,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,114,32,97,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,102,114,111,109,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,114,117,110,116,105,109,101,45,115,101,114,118,105,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<110,97,109,101,32,114,101,103,105,115,116,114,121>>]}]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,117,110,114,101,103,105,115,116,101,114,40,100,98,41,46,10,116,114,117,101>>]}]},{p,[],[<<75,101,101,112,32,105,110,32,109,105,110,100,32,116,104,97,116,32,121,111,117,32,99,97,110,32,115,116,105,108,108,32,114,101,99,101,105,118,101,32,115,105,103,110,97,108,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,32,97,102,116,101,114,32,105,116,32,104,97,115,32,98,101,101,110,32,117,110,114,101,103,105,115,116,101,114,101,100,32,97,115,32,116,104,101,32,115,101,110,100,101,114,32,109,97,121,32,104,97,118,101,32,108,111,111,107,101,100,32,117,112,32,116,104,101,32,110,97,109,101,32,98,101,102,111,114,101,32,115,101,110,100,105,110,103,32,116,111,32,105,116,46>>]},{p,[],[<<85,115,101,114,115,32,97,114,101,32,97,100,118,105,115,101,100,32,110,111,116,32,116,111,32,117,110,114,101,103,105,115,116,101,114,32,115,121,115,116,101,109,32,112,114,111,99,101,115,115,101,115,46>>]},{p,[],[<<70,97,105,108,117,114,101,58,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,102,32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,105,115,32,110,111,116,32,97,32,114,101,103,105,115,116,101,114,101,100,32,110,97,109,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,56,55,50>>,signature => [{attribute,{2083,2},spec,{{unregister,1},[{type,{2083,17},bounded_fun,[{type,{2083,17},'fun',[{type,{2083,17},product,[{var,{2083,18},'RegName'}]},{atom,{2083,30},true}]},[{type,{2084,7},constraint,[{atom,{2084,7},is_subtype},[{var,{2084,7},'RegName'},{type,{2084,18},atom,[]}]]}]]}]}}]}},{{function,whereis,1},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2089}],[<<119,104,101,114,101,105,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,112,114,111,99,101,115,115,32,105,100,101,110,116,105,102,105,101,114,32,111,114,32,112,111,114,116,32,105,100,101,110,116,105,102,105,101,114,32,119,105,116,104,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,114,101,103,105,115,116,101,114,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,103,105,115,116,101,114,101,100,32,110,97,109,101>>]}]},<<32>>,{code,[],[<<82,101,103,78,97,109,101>>]},<<32,102,114,111,109,32,116,104,101,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,112,114,111,99,101,115,115,101,115,35,114,117,110,116,105,109,101,45,115,101,114,118,105,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<110,97,109,101,32,114,101,103,105,115,116,114,121>>]}]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<117,110,100,101,102,105,110,101,100>>]},<<32,105,102,32,116,104,101,32,110,97,109,101,32,105,115,32,110,111,116,32,114,101,103,105,115,116,101,114,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<62,32,119,104,101,114,101,105,115,40,100,98,41,46,10,60,48,46,52,51,46,48,62>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,56,57,51>>,signature => [{attribute,{2089,2},spec,{{whereis,1},[{type,{2089,14},bounded_fun,[{type,{2089,14},'fun',[{type,{2089,14},product,[{var,{2089,15},'RegName'}]},{type,{2089,27},union,[{type,{2089,27},pid,[]},{type,{2089,35},port,[]},{atom,{2089,44},undefined}]}]},[{type,{2090,7},constraint,[{atom,{2090,7},is_subtype},[{var,{2090,7},'RegName'},{type,{2090,18},atom,[]}]]}]]}]}}]}},{{function,yield,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,3426}],[<<121,105,101,108,100,47,48>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,103,105,118,101,32,111,116,104,101,114,32,112,114,111,99,101,115,115,101,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,111,114,32,104,105,103,104,101,114,32,112,114,105,111,114,105,116,121,32,40,105,102,32,97,110,121,41,32,97,32,99,104,97,110,99,101,32,116,111,32,101,120,101,99,117,116,101,32,98,101,102,111,114,101,32,114,101,116,117,114,110,105,110,103,46,32,84,104,101,114,101,32,105,115,32,110,111,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,97,110,121,32,111,116,104,101,114,32,112,114,111,99,101,115,115,32,114,117,110,115,32,98,101,116,119,101,101,110,32,116,104,101,32,105,110,118,111,99,97,116,105,111,110,32,97,110,100,32,114,101,116,117,114,110,32,111,102,32>>,{code,[],[<<101,114,108,97,110,103,58,121,105,101,108,100,47,48>>]},<<46>>]},{p,[],[<<83,101,101,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,120,112,114,101,115,115,105,111,110,115,35,114,101,99,101,105,118,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[{code,[],[<<114,101,99,101,105,118,101,45,97,102,116,101,114>>]},<<32,101,120,112,114,101,115,115,105,111,110,115>>]},<<32,102,111,114,32,104,111,119,32,116,111,32,109,97,107,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,115,108,101,101,112,32,102,111,114,32,97,32,115,112,101,99,105,102,105,99,32,110,117,109,98,101,114,32,111,102,32,109,105,108,108,105,115,101,99,111,110,100,115,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,101,114,101,32,105,115,32,115,101,108,100,111,109,32,111,114,32,110,101,118,101,114,32,97,110,121,32,110,101,101,100,32,116,111,32,117,115,101,32,116,104,105,115,32,66,73,70,46,32,85,115,105,110,103,32,116,104,105,115,32,66,73,70,32,119,105,116,104,111,117,116,32,97,32,116,104,111,114,111,117,103,104,32,103,114,97,115,112,32,111,102,32,104,111,119,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,119,111,114,107,115,32,99,97,110,32,99,97,117,115,101,32,112,101,114,102,111,114,109,97,110,99,101,32,100,101,103,114,97,100,97,116,105,111,110,46,32,84,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,112,117,116,115,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,32,108,97,115,116,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,99,104,101,100,117,108,101,114,39,115,32,113,117,101,117,101,32,102,111,114,32,112,114,111,99,101,115,115,101,115,32,111,102,32,116,104,101,32,115,97,109,101,32,112,114,105,111,114,105,116,121,32,97,115,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,101,114,116,115,47,100,111,99,47,115,114,99,47,101,114,108,97,110,103,46,120,109,108,35,76,49,50,57,49,48>>,signature => [{attribute,{3426,2},spec,{{erlang,yield,0},[{type,{3426,19},'fun',[{type,{3426,19},product,[]},{atom,{3426,25},true}]}]}}]}},{{type,ext_binary,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,97}],[<<45,116,121,112,101,32,101,120,116,95,98,105,110,97,114,121,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,44,32,115,116,114,117,99,116,117,114,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]}]},#{signature => [{attribute,{97,2},type,{ext_binary,{type,{97,23},binary,[]},[]}}]}},{{type,ext_iovec,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,98}],[<<45,116,121,112,101,32,101,120,116,95,105,111,118,101,99,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32,116,101,114,109,32,111,102,32,116,121,112,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<105,111,118,101,99,40,41>>]}]},<<44,32,115,116,114,117,99,116,117,114,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,101,120,116,101,114,110,97,108,32,116,101,114,109,32,102,111,114,109,97,116,46>>]}]},#{signature => [{attribute,{98,2},type,{ext_iovec,{user_type,{98,22},iovec,[]},[]}}]}},{{type,iovec,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,129}],[<<45,116,121,112,101,32,105,111,118,101,99,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32,108,105,115,116,32,111,102,32,98,105,110,97,114,105,101,115,46,32,84,104,105,115,32,100,97,116,97,116,121,112,101,32,105,115,32,117,115,101,102,117,108,32,116,111,32,117,115,101,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,110,105,102,35,101,110,105,102,95,105,110,115,112,101,99,116,95,105,111,118,101,99>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[{code,[],[<<101,110,105,102,95,105,110,115,112,101,99,116,95,105,111,118,101,99>>]}]},<<46>>]}]},#{signature => [{attribute,{129,2},type,{iovec,{type,{129,18},list,[{type,{129,19},binary,[]}]},[]}}]}},{{type,message_queue_data,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<45,116,121,112,101,32,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]},<<46>>]}]},#{signature => [{attribute,{2356,2},type,{message_queue_data,{type,{2357,2},union,[{atom,{2357,2},off_heap},{atom,{2357,13},on_heap}]},[]}}]}},{{type,monitor_option,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,1400}],[<<45,116,121,112,101,32,109,111,110,105,116,111,114,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,109,111,110,105,116,111,114,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<109,111,110,105,116,111,114,47,51>>]}]},<<46>>]}]},#{signature => [{attribute,{1400,2},type,{monitor_option,{type,{1400,27},union,[{type,{1400,27},tuple,[{atom,{1400,28},alias},{type,{1400,37},union,[{atom,{1400,37},explicit_unalias},{atom,{1400,58},demonitor},{atom,{1400,72},reply_demonitor}]}]},{type,{1401,27},tuple,[{atom,{1401,28},tag},{type,{1401,35},term,[]}]}]},[]}}]}},{{type,timestamp,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,99}],[<<45,116,121,112,101,32,116,105,109,101,115,116,97,109,112,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,105,109,101,115,116,97,109,112,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,116,105,109,101,115,116,97,109,112,47,48>>]}]},<<46>>]}]},#{signature => [{attribute,{99,2},type,{timestamp,{type,{99,22},tuple,[{ann_type,{99,23},[{var,{99,23},'MegaSecs'},{type,{99,35},non_neg_integer,[]}]},{ann_type,{100,23},[{var,{100,23},'Secs'},{type,{100,31},non_neg_integer,[]}]},{ann_type,{101,23},[{var,{101,23},'MicroSecs'},{type,{101,36},non_neg_integer,[]}]}]},[]}}]}},{{type,time_unit,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,103}],[<<45,116,121,112,101,32,116,105,109,101,95,117,110,105,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{a,[{id,<<116,121,112,101,95,116,105,109,101,95,117,110,105,116>>}],[]},{p,[],[<<83,117,112,112,111,114,116,101,100,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<80,97,114,116,115,80,101,114,83,101,99,111,110,100,32,58,58,32,105,110,116,101,103,101,114,40,41,32,62,61,32,49>>]}]},{dd,[],[{p,[],[<<84,105,109,101,32,117,110,105,116,32,101,120,112,114,101,115,115,101,100,32,105,110,32,112,97,114,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,101,113,117,97,108,115,32>>,{code,[],[<<49,47,80,97,114,116,115,80,101,114,83,101,99,111,110,100>>]},<<32,115,101,99,111,110,100,46>>]}]},{dt,[],[{code,[],[<<115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,108,108,105,115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49,48,48,48>>]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,99,114,111,115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49,48,48,48,95,48,48,48>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,97,110,111,115,101,99,111,110,100>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,116,105,109,101,32,117,110,105,116,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,116,104,101,32,105,110,116,101,103,101,114,32>>,{code,[],[<<49,48,48,48,95,48,48,48,95,48,48,48>>]},<<46>>]}]},{dt,[],[{code,[],[<<110,97,116,105,118,101>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,110,97,116,105,118,101,32,116,105,109,101,32,117,110,105,116,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,105,115,32,100,101,116,101,114,109,105,110,101,100,32,97,116,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,115,116,97,114,116,44,32,97,110,100,32,114,101,109,97,105,110,115,32,116,104,101,32,115,97,109,101,32,117,110,116,105,108,32,116,104,101,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,116,101,114,109,105,110,97,116,101,115,46,32,73,102,32,97,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,115,32,115,116,111,112,112,101,100,32,97,110,100,32,116,104,101,110,32,115,116,97,114,116,101,100,32,97,103,97,105,110,32,40,101,118,101,110,32,111,110,32,116,104,101,32,115,97,109,101,32,109,97,99,104,105,110,101,41,44,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,111,102,32,116,104,101,32,110,101,119,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,32,99,97,110,32,100,105,102,102,101,114,32,102,114,111,109,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,111,102,32,116,104,101,32,111,108,100,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,32,105,110,115,116,97,110,99,101,46>>]},{p,[],[<<79,110,101,32,99,97,110,32,103,101,116,32,97,110,32,97,112,112,114,111,120,105,109,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,98,121,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,40,49,44,32,115,101,99,111,110,100,44,32,110,97,116,105,118,101,41>>]}]},<<46,32,84,104,101,32,114,101,115,117,108,116,32,101,113,117,97,108,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,119,104,111,108,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,115,32,112,101,114,32,115,101,99,111,110,100,46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,115,32,112,101,114,32,115,101,99,111,110,100,32,100,111,101,115,32,110,111,116,32,97,100,100,32,117,112,32,116,111,32,97,32,119,104,111,108,101,32,110,117,109,98,101,114,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,114,111,117,110,100,101,100,32,100,111,119,110,119,97,114,100,115,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,103,105,118,101,115,32,121,111,117,32,109,111,114,101,32,111,114,32,108,101,115,115,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,113,117,97,108,105,116,121,32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,46,32,73,116,32,115,101,116,115,32,97,32,108,105,109,105,116,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,82,101,115,111,108,117,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<114,101,115,111,108,117,116,105,111,110>>]},<<32,97,110,100,32,102,111,114,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,80,114,101,99,105,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<112,114,101,99,105,115,105,111,110>>]},<<32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,44,32,98,117,116,32,105,116,32,103,105,118,101,115,32,110,111,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32>>,{a,[{href,<<101,114,116,115,58,116,105,109,101,95,99,111,114,114,101,99,116,105,111,110,35,84,105,109,101,95,65,99,99,117,114,97,99,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<97,99,99,117,114,97,99,121>>]},<<32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,46,32,84,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,32,97,110,100,32,116,104,101,32,114,101,115,111,108,117,116,105,111,110,32,111,102,32,116,105,109,101,32,118,97,108,117,101,115,32,99,97,110,32,100,105,102,102,101,114,32,115,105,103,110,105,102,105,99,97,110,116,108,121,46>>]}]}]},{dt,[],[{code,[],[<<112,101,114,102,95,99,111,117,110,116,101,114>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32,112,101,114,102,111,114,109,97,110,99,101,32,99,111,117,110,116,101,114,32,116,105,109,101,32,117,110,105,116,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<112,101,114,102,95,99,111,117,110,116,101,114>>]},<<32,116,105,109,101,32,117,110,105,116,32,98,101,104,97,118,101,115,32,109,117,99,104,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,116,104,101,32>>,{code,[],[<<110,97,116,105,118,101>>]},<<32,116,105,109,101,32,117,110,105,116,46,32,84,104,97,116,32,105,115,44,32,105,116,32,99,97,110,32,100,105,102,102,101,114,32,98,101,116,119,101,101,110,32,114,117,110,116,105,109,101,32,114,101,115,116,97,114,116,115,46,32,84,111,32,103,101,116,32,118,97,108,117,101,115,32,111,102,32,116,104,105,115,32,116,121,112,101,44,32,99,97,108,108,32>>,{a,[{href,<<107,101,114,110,101,108,58,111,115,35,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,115,58,112,101,114,102,95,99,111,117,110,116,101,114,47,48>>]}]},<<46>>]}]},{dt,[],[{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116,40,41>>]}]}]},{dd,[],[{p,[],[<<68,101,112,114,101,99,97,116,101,100,32,115,121,109,98,111,108,105,99,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,115,32,107,101,112,116,32,102,111,114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,46>>]}]}]},{p,[],[<<84,104,101,32>>,{code,[],[<<116,105,109,101,95,117,110,105,116,47,48>>]},<<32,116,121,112,101,32,99,97,110,32,98,101,32,101,120,116,101,110,100,101,100,46,32,84,111,32,99,111,110,118,101,114,116,32,116,105,109,101,32,118,97,108,117,101,115,32,98,101,116,119,101,101,110,32,116,105,109,101,32,117,110,105,116,115,44,32,117,115,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,99,111,110,118,101,114,116,95,116,105,109,101,95,117,110,105,116,47,51>>]}]},<<46>>]}]},#{signature => [{attribute,{103,2},type,{time_unit,{type,{104,2},union,[{type,{104,2},pos_integer,[]},{atom,{105,9},second},{atom,{106,9},millisecond},{atom,{107,9},microsecond},{atom,{108,9},nanosecond},{atom,{109,9},native},{atom,{110,9},perf_counter},{user_type,{111,9},deprecated_time_unit,[]}]},[]}}]}},{{type,deprecated_time_unit,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,114}],[<<45,116,121,112,101,32,100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{a,[{id,<<116,121,112,101,95,100,101,112,114,101,99,97,116,101,100,95,116,105,109,101,95,117,110,105,116>>}],[]},{p,[],[<<84,104,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<116,105,109,101,95,117,110,105,116,40,41>>]}]},<<32,116,121,112,101,32,97,108,115,111,32,99,111,110,115,105,115,116,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32>>,{em,[],[<<100,101,112,114,101,99,97,116,101,100>>]},<<32,115,121,109,98,111,108,105,99,32,116,105,109,101,32,117,110,105,116,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,99,111,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,108,108,105,95,115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,108,108,105,115,101,99,111,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<109,105,99,114,111,95,115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<109,105,99,114,111,115,101,99,111,110,100>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<110,97,110,111,95,115,101,99,111,110,100,115>>]}]},{dd,[],[{p,[],[<<83,97,109,101,32,97,115,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,116,121,112,101,95,116,105,109,101,95,117,110,105,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<110,97,110,111,115,101,99,111,110,100>>]}]},<<46>>]}]}]}]},#{signature => [{attribute,{114,2},type,{deprecated_time_unit,{type,{115,7},union,[{atom,{115,7},seconds},{atom,{116,9},milli_seconds},{atom,{117,9},micro_seconds},{atom,{118,9},nano_seconds}]},[]}}]}},{{type,dist_handle,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,126}],[<<45,116,121,112,101,32,100,105,115,116,95,104,97,110,100,108,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,111,112,97,113,117,101,32,104,97,110,100,108,101,32,105,100,101,110,116,105,102,105,110,103,32,97,32,100,105,115,116,114,105,98,117,116,105,111,110,32,99,104,97,110,110,101,108,46>>]}]},#{signature => [{attribute,{126,2},opaque,{dist_handle,{type,{126,26},atom,[]},[]}}]}},{{type,nif_resource,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,123}],[<<45,116,121,112,101,32,110,105,102,95,114,101,115,111,117,114,99,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,111,112,97,113,117,101,32,104,97,110,100,108,101,32,105,100,101,110,116,105,102,105,110,103,32,97,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,95,110,105,102,35,114,101,115,111,117,114,99,101,95,111,98,106,101,99,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,114,101,102>>}],[<<78,73,70,32,114,101,115,111,117,114,99,101,32,111,98,106,101,99,116,32>>]},<<46>>]}]},#{signature => [{attribute,{123,2},opaque,{nif_resource,{type,{123,27},reference,[]},[]}}]}},{{type,spawn_opt_option,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2996}],[<<45,116,121,112,101,32,115,112,97,119,110,95,111,112,116,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<79,112,116,105,111,110,115,32,102,111,114,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,115,112,97,119,110,95,111,112,116,47,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,112,97,119,110,95,111,112,116,40,41>>]}]},<<46>>]}]},#{signature => [{attribute,{2996,2},type,{spawn_opt_option,{type,{2997,2},union,[{atom,{2997,2},link},{atom,{2998,9},monitor},{type,{2999,9},tuple,[{atom,{2999,10},monitor},{ann_type,{2999,19},[{var,{2999,19},'MonitorOpts'},{type,{2999,34},list,[{user_type,{2999,35},monitor_option,[]}]}]}]},{type,{3000,9},tuple,[{atom,{3000,10},priority},{ann_type,{3000,20},[{var,{3000,20},'Level'},{user_type,{3000,29},priority_level,[]}]}]},{type,{3001,9},tuple,[{atom,{3001,10},fullsweep_after},{ann_type,{3001,27},[{var,{3001,27},'Number'},{type,{3001,37},non_neg_integer,[]}]}]},{type,{3002,9},tuple,[{atom,{3002,10},min_heap_size},{ann_type,{3002,25},[{var,{3002,25},'Size'},{type,{3002,33},non_neg_integer,[]}]}]},{type,{3003,9},tuple,[{atom,{3003,10},min_bin_vheap_size},{ann_type,{3003,30},[{var,{3003,30},'VSize'},{type,{3003,39},non_neg_integer,[]}]}]},{type,{3004,9},tuple,[{atom,{3004,10},max_heap_size},{ann_type,{3004,25},[{var,{3004,25},'Size'},{user_type,{3004,33},max_heap_size,[]}]}]},{type,{3005,9},tuple,[{atom,{3005,10},message_queue_data},{ann_type,{3005,30},[{var,{3005,30},'MQD'},{user_type,{3005,37},message_queue_data,[]}]}]}]},[]}}]}},{{type,priority_level,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2353}],[<<45,116,121,112,101,32,112,114,105,111,114,105,116,121,95,108,101,118,101,108,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<80,114,111,99,101,115,115,32,112,114,105,111,114,105,116,121,32,108,101,118,101,108,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,112,114,105,111,114,105,116,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,112,114,105,111,114,105,116,121,44,32,76,101,118,101,108,41>>]}]}]}]},#{signature => [{attribute,{2353,2},type,{priority_level,{type,{2354,7},union,[{atom,{2354,7},low},{atom,{2354,13},normal},{atom,{2354,22},high},{atom,{2354,29},max}]},[]}}]}},{{type,max_heap_size,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2989}],[<<45,116,121,112,101,32,109,97,120,95,104,101,97,112,95,115,105,122,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<80,114,111,99,101,115,115,32,109,97,120,32,104,101,97,112,32,115,105,122,101,32,99,111,110,102,105,103,117,114,97,116,105,111,110,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,97,120,95,104,101,97,112,95,115,105,122,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,97,120,95,104,101,97,112,95,115,105,122,101,44,32,77,97,120,72,101,97,112,83,105,122,101,41>>]}]}]}]},#{signature => [{attribute,{2989,2},type,{max_heap_size,{ann_type,{2990,9},[{var,{2990,9},'Size'},{type,{2990,17},union,[{type,{2990,17},non_neg_integer,[]},{type,{2992,9},map,[{type,{2992,17},map_field_assoc,[{atom,{2992,12},size},{type,{2992,20},non_neg_integer,[]}]},{type,{2993,17},map_field_assoc,[{atom,{2993,12},kill},{type,{2993,20},boolean,[]}]},{type,{2994,25},map_field_assoc,[{atom,{2994,12},error_logger},{type,{2994,28},boolean,[]}]}]}]}]},[]}}]}},{{type,message_queue_data,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,2356}],[<<45,116,121,112,101,32,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<80,114,111,99,101,115,115,32,109,101,115,115,97,103,101,32,113,117,101,117,101,32,100,97,116,97,32,99,111,110,102,105,103,117,114,97,116,105,111,110,46,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,115,101,101,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,112,114,111,99,101,115,115,95,102,108,97,103,95,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<112,114,111,99,101,115,115,95,102,108,97,103,40,109,101,115,115,97,103,101,95,113,117,101,117,101,95,100,97,116,97,44,32,77,81,68,41>>]}]}]}]},#{signature => [{attribute,{2356,2},type,{message_queue_data,{type,{2357,2},union,[{atom,{2357,2},off_heap},{atom,{2357,13},on_heap}]},[]}}]}},{{type,stacktrace_extrainfo,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,88}],[<<45,116,121,112,101,32,115,116,97,99,107,116,114,97,99,101,95,101,120,116,114,97,105,110,102,111,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,69,114,108,97,110,103,32,115,116,97,99,107,116,114,97,99,101,32,97,115,32,100,101,115,99,114,105,98,101,100,32,98,121,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115,35,115,116,97,99,107,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,114,111,114,115,32,97,110,100,32,69,114,114,111,114,32,72,97,110,100,108,105,110,103>>]},<<32,115,101,99,116,105,111,110,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108,46>>]}]},#{signature => [{attribute,{88,2},type,{stacktrace_extrainfo,{type,{89,9},union,[{type,{89,9},tuple,[{atom,{89,10},line},{type,{89,16},pos_integer,[]}]},{type,{90,9},tuple,[{atom,{90,10},file},{remote_type,{90,16},[{atom,{90,16},unicode},{atom,{90,24},chardata},[]]}]},{type,{91,9},tuple,[{atom,{91,10},error_info},{type,{91,22},map,[{type,{91,32},map_field_assoc,[{atom,{91,25},module},{type,{91,35},module,[]}]},{type,{91,54},map_field_assoc,[{atom,{91,45},function},{type,{91,57},atom,[]}]},{type,{91,71},map_field_assoc,[{atom,{91,65},cause},{type,{91,74},term,[]}]}]}]},{type,{92,9},tuple,[{type,{92,10},atom,[]},{type,{92,18},term,[]}]}]},[]}}]}},{{type,stacktrace,0},[{file,[101,114,108,97,110,103,46,101,114,108]},{location,93}],[<<45,116,121,112,101,32,115,116,97,99,107,116,114,97,99,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,69,114,108,97,110,103,32,115,116,97,99,107,116,114,97,99,101,32,97,115,32,100,101,115,99,114,105,98,101,100,32,98,121,32>>,{a,[{href,<<115,121,115,116,101,109,47,114,101,102,101,114,101,110,99,101,95,109,97,110,117,97,108,58,101,114,114,111,114,115,35,115,116,97,99,107,116,114,97,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<69,114,114,111,114,115,32,97,110,100,32,69,114,114,111,114,32,72,97,110,100,108,105,110,103>>]},<<32,115,101,99,116,105,111,110,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,82,101,102,101,114,101,110,99,101,32,77,97,110,117,97,108,46>>]}]},#{signature => [{attribute,{93,2},type,{stacktrace,{type,{93,23},list,[{type,{93,24},union,[{type,{93,24},tuple,[{type,{93,25},module,[]},{type,{93,35},atom,[]},{type,{93,43},union,[{type,{93,43},arity,[]},{type,{93,53},list,[{type,{93,54},term,[]}]}]},{type,{94,25},list,[{user_type,{94,26},stacktrace_extrainfo,[]}]}]},{type,{95,24},tuple,[{type,{95,25},function,[]},{type,{95,37},union,[{type,{95,37},arity,[]},{type,{95,47},list,[{type,{95,48},term,[]}]}]},{type,{95,57},list,[{user_type,{95,58},stacktrace_extrainfo,[]}]}]}]}]},[]}}]}}]}. \ No newline at end of file
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/file.docs_v1 b/lib/stdlib/test/shell_docs_SUITE_data/file.docs_v1
index 9c88ce7723..227f99dfaa 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/file.docs_v1
+++ b/lib/stdlib/test/shell_docs_SUITE_data/file.docs_v1
@@ -1 +1 @@
-{docs_v1,[{file,[102,105,108,101,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<84,104,105,115,32,109,111,100,117,108,101,32,112,114,111,118,105,100,101,115,32,97,110,32,105,110,116,101,114,102,97,99,101,32,116,111,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<70,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,97,114,101,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,97,112,112,101,97,114,32,97,116,111,109,105,99,32,119,104,101,110,32,103,111,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,32,115,97,109,101,32,102,105,108,101,32,115,101,114,118,101,114,46,32,65,32,78,73,70,32,111,114,32,111,116,104,101,114,32,79,83,32,112,114,111,99,101,115,115,32,109,97,121,32,111,98,115,101,114,118,101,32,105,110,116,101,114,109,101,100,105,97,116,101,32,115,116,101,112,115,32,111,110,32,99,101,114,116,97,105,110,32,111,112,101,114,97,116,105,111,110,115,32,111,110,32,115,111,109,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,115,44,32,101,103,46,32,114,101,110,97,109,105,110,103,32,97,110,32,101,120,105,115,116,105,110,103,32,102,105,108,101,32,111,110,32,87,105,110,100,111,119,115,44,32,111,114,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]},<<32>>]},<<111,110,32,97,110,121,32,79,83,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,119,114,105,116,105,110,103,46>>]}]},{p,[],[<<82,101,103,97,114,100,105,110,103,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,44,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,99,97,110,32,111,112,101,114,97,116,101,32,105,110,32,116,119,111,32,109,111,100,101,115,46,32,84,104,101,32,99,117,114,114,101,110,116,32,109,111,100,101,32,99,97,110,32,98,101,32,113,117,101,114,105,101,100,32,117,115,105,110,103,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>]}]},<<46,32,73,116,32,114,101,116,117,114,110,115,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,111,114,32>>,{code,[],[<<117,116,102,56>>]},<<46>>]},{p,[],[<<73,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,109,111,100,101,44,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,100,111,101,115,32,110,111,116,32,99,104,97,110,103,101,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32,102,105,108,101,110,97,109,101,115,46,32,73,110,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,44,32,102,105,108,101,110,97,109,101,115,32,99,97,110,32,99,111,110,116,97,105,110,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,50,53,53,32,97,110,100,32,116,104,101,32,86,77,32,99,111,110,118,101,114,116,115,32,102,105,108,101,110,97,109,101,115,32,98,97,99,107,32,97,110,100,32,102,111,114,116,104,32,116,111,32,116,104,101,32,110,97,116,105,118,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,40,117,115,117,97,108,108,121,32,85,84,70,45,56,44,32,98,117,116,32,85,84,70,45,49,54,32,111,110,32,87,105,110,100,111,119,115,41,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,109,111,100,101,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,46,32,87,105,110,100,111,119,115,44,32,77,97,99,79,83,32,88,32,97,110,100,32,65,110,100,114,111,105,100,32,101,110,102,111,114,99,101,32,99,111,110,115,105,115,116,101,110,116,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,116,104,101,32,86,77,32,117,115,101,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,46>>]},{p,[],[<<79,110,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,115,32,119,105,116,104,32,116,114,97,110,115,112,97,114,101,110,116,32,110,97,109,105,110,103,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,108,108,32,85,110,105,120,32,115,121,115,116,101,109,115,32,101,120,99,101,112,116,32,77,97,99,79,83,32,88,41,44,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,105,102,32,116,104,101,32,116,101,114,109,105,110,97,108,32,115,117,112,112,111,114,116,115,32,85,84,70,45,56,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,99,97,110,32,98,101,32,111,118,101,114,114,105,100,100,101,110,32,117,115,105,110,103,32>>,{code,[],[<<43,102,110,108>>]},<<32,40,116,111,32,102,111,114,99,101,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,109,111,100,101,41,32,111,114,32>>,{code,[],[<<43,102,110,117>>]},<<32,40,116,111,32,102,111,114,99,101,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,41,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,101,114,116,115,58,101,114,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<101,114,108>>]}]},<<46>>]},{p,[],[<<79,110,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,115,32,119,105,116,104,32,116,114,97,110,115,112,97,114,101,110,116,32,110,97,109,105,110,103,44,32,102,105,108,101,115,32,99,97,110,32,98,101,32,105,110,99,111,110,115,105,115,116,101,110,116,108,121,32,110,97,109,101,100,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,115,111,109,101,32,102,105,108,101,115,32,97,114,101,32,101,110,99,111,100,101,100,32,105,110,32,85,84,70,45,56,32,119,104,105,108,101,32,111,116,104,101,114,115,32,97,114,101,32,101,110,99,111,100,101,100,32,105,110,32,73,83,79,32,76,97,116,105,110,45,49,46,32,84,104,101,32,99,111,110,99,101,112,116,32,111,102,32>>,{em,[],[<<114,97,119,32,102,105,108,101,110,97,109,101,115>>]},<<32,105,115,32,105,110,116,114,111,100,117,99,101,100,32,116,111,32,104,97,110,100,108,101,32,102,105,108,101,32,115,121,115,116,101,109,115,32,119,105,116,104,32,105,110,99,111,110,115,105,115,116,101,110,116,32,110,97,109,105,110,103,32,119,104,101,110,32,114,117,110,110,105,110,103,32,105,110,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,46>>]},{p,[],[<<65,32>>,{em,[],[<<114,97,119,32,102,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,32,102,105,108,101,110,97,109,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,105,110,97,114,121,46,32,84,104,101,32,69,114,108,97,110,103,32,86,77,32,100,111,101,115,32,110,111,116,32,116,114,97,110,115,108,97,116,101,32,97,32,102,105,108,101,110,97,109,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,105,110,97,114,121,32,111,110,32,115,121,115,116,101,109,115,32,119,105,116,104,32,116,114,97,110,115,112,97,114,101,110,116,32,110,97,109,105,110,103,46>>]},{p,[],[<<87,104,101,110,32,114,117,110,110,105,110,103,32,105,110,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,44,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,108,105,115,116,95,100,105,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,100,105,114,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,107,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,108,105,110,107,47,49>>]}]},<<32,110,101,118,101,114,32,114,101,116,117,114,110,32,114,97,119,32,102,105,108,101,110,97,109,101,115,46,32,84,111,32,114,101,116,117,114,110,32,97,108,108,32,102,105,108,101,110,97,109,101,115,32,105,110,99,108,117,100,105,110,103,32,114,97,119,32,102,105,108,101,110,97,109,101,115,44,32,117,115,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,108,105,115,116,95,100,105,114,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,105,115,116,95,100,105,114,95,97,108,108,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,107,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,97,100,95,108,105,110,107,95,97,108,108,47,49>>]}]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101,95,117,115,97,103,101,35,110,111,116,101,115,45,97,98,111,117,116,45,114,97,119,45,102,105,108,101,110,97,109,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<78,111,116,101,115,32,65,98,111,117,116,32,82,97,119,32,70,105,108,101,110,97,109,101,115>>]},<<32,105,110,32,116,104,101,32,83,84,68,76,73,66,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<70,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,117,115,101,100,32,116,111,32,97,99,99,101,112,116,32,102,105,108,101,110,97,109,101,115,32,99,111,110,116,97,105,110,105,110,103,32,110,117,108,108,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,116,101,103,101,114,32,118,97,108,117,101,32,122,101,114,111,41,46,32,84,104,105,115,32,99,97,117,115,101,100,32,116,104,101,32,110,97,109,101,32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100,32,97,110,100,32,105,110,32,115,111,109,101,32,99,97,115,101,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,112,114,105,109,105,116,105,118,101,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,98,101,32,109,105,120,101,100,32,117,112,46,32,70,105,108,101,110,97,109,101,115,32,99,111,110,116,97,105,110,105,110,103,32,110,117,108,108,32,99,104,97,114,97,99,116,101,114,115,32,105,110,115,105,100,101,32,116,104,101,32,102,105,108,101,110,97,109,101,32,97,114,101,32,110,111,119,32>>,{em,[],[<<114,101,106,101,99,116,101,100>>]},<<32,97,110,100,32,119,105,108,108,32,99,97,117,115,101,32,112,114,105,109,105,116,105,118,101,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,102,97,105,108,46>>]}]},{h2,[],[<<80,79,83,73,88,32,69,114,114,111,114,32,67,111,100,101,115>>]},{ul,[],[{li,[],[{code,[],[<<101,97,99,99,101,115>>]},<<32,45,32,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100>>]},{li,[],[{code,[],[<<101,97,103,97,105,110>>]},<<32,45,32,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101>>]},{li,[],[{code,[],[<<101,98,97,100,102>>]},<<32,45,32,66,97,100,32,102,105,108,101,32,110,117,109,98,101,114>>]},{li,[],[{code,[],[<<101,98,117,115,121>>]},<<32,45,32,70,105,108,101,32,98,117,115,121>>]},{li,[],[{code,[],[<<101,100,113,117,111,116>>]},<<32,45,32,68,105,115,107,32,113,117,111,116,97,32,101,120,99,101,101,100,101,100>>]},{li,[],[{code,[],[<<101,101,120,105,115,116>>]},<<32,45,32,70,105,108,101,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115>>]},{li,[],[{code,[],[<<101,102,97,117,108,116>>]},<<32,45,32,66,97,100,32,97,100,100,114,101,115,115,32,105,110,32,115,121,115,116,101,109,32,99,97,108,108,32,97,114,103,117,109,101,110,116>>]},{li,[],[{code,[],[<<101,102,98,105,103>>]},<<32,45,32,70,105,108,101,32,116,111,111,32,108,97,114,103,101>>]},{li,[],[{code,[],[<<101,105,110,116,114>>]},<<32,45,32,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108>>]},{li,[],[{code,[],[<<101,105,110,118,97,108>>]},<<32,45,32,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116>>]},{li,[],[{code,[],[<<101,105,111>>]},<<32,45,32,73,47,79,32,101,114,114,111,114>>]},{li,[],[{code,[],[<<101,105,115,100,105,114>>]},<<32,45,32,73,108,108,101,103,97,108,32,111,112,101,114,97,116,105,111,110,32,111,110,32,97,32,100,105,114,101,99,116,111,114,121>>]},{li,[],[{code,[],[<<101,108,111,111,112>>]},<<32,45,32,84,111,111,32,109,97,110,121,32,108,101,118,101,108,115,32,111,102,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115>>]},{li,[],[{code,[],[<<101,109,102,105,108,101>>]},<<32,45,32,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115>>]},{li,[],[{code,[],[<<101,109,108,105,110,107>>]},<<32,45,32,84,111,111,32,109,97,110,121,32,108,105,110,107,115>>]},{li,[],[{code,[],[<<101,110,97,109,101,116,111,111,108,111,110,103>>]},<<32,45,32,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103>>]},{li,[],[{code,[],[<<101,110,102,105,108,101>>]},<<32,45,32,70,105,108,101,32,116,97,98,108,101,32,111,118,101,114,102,108,111,119>>]},{li,[],[{code,[],[<<101,110,111,100,101,118>>]},<<32,45,32,78,111,32,115,117,99,104,32,100,101,118,105,99,101>>]},{li,[],[{code,[],[<<101,110,111,101,110,116>>]},<<32,45,32,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121>>]},{li,[],[{code,[],[<<101,110,111,109,101,109>>]},<<32,45,32,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121>>]},{li,[],[{code,[],[<<101,110,111,115,112,99>>]},<<32,45,32,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101>>]},{li,[],[{code,[],[<<101,110,111,116,98,108,107>>]},<<32,45,32,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100>>]},{li,[],[{code,[],[<<101,110,111,116,100,105,114>>]},<<32,45,32,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121>>]},{li,[],[{code,[],[<<101,110,111,116,115,117,112>>]},<<32,45,32,79,112,101,114,97,116,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100>>]},{li,[],[{code,[],[<<101,110,120,105,111>>]},<<32,45,32,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115>>]},{li,[],[{code,[],[<<101,112,101,114,109>>]},<<32,45,32,78,111,116,32,111,119,110,101,114>>]},{li,[],[{code,[],[<<101,112,105,112,101>>]},<<32,45,32,66,114,111,107,101,110,32,112,105,112,101>>]},{li,[],[{code,[],[<<101,114,111,102,115>>]},<<32,45,32,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109>>]},{li,[],[{code,[],[<<101,115,112,105,112,101>>]},<<32,45,32,73,110,118,97,108,105,100,32,115,101,101,107>>]},{li,[],[{code,[],[<<101,115,114,99,104>>]},<<32,45,32,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115>>]},{li,[],[{code,[],[<<101,115,116,97,108,101>>]},<<32,45,32,83,116,97,108,101,32,114,101,109,111,116,101,32,102,105,108,101,32,104,97,110,100,108,101>>]},{li,[],[{code,[],[<<101,120,100,101,118>>]},<<32,45,32,67,114,111,115,115,45,100,111,109,97,105,110,32,108,105,110,107>>]}]},{h2,[],[<<80,101,114,102,111,114,109,97,110,99,101>>]},{p,[],[<<70,111,114,32,105,110,99,114,101,97,115,101,100,32,112,101,114,102,111,114,109,97,110,99,101,44,32,114,97,119,32,102,105,108,101,115,32,97,114,101,32,114,101,99,111,109,109,101,110,100,101,100,46>>]},{p,[],[<<65,32,110,111,114,109,97,108,32,102,105,108,101,32,105,115,32,114,101,97,108,108,121,32,97,32,112,114,111,99,101,115,115,32,115,111,32,105,116,32,99,97,110,32,98,101,32,117,115,101,100,32,97,115,32,97,110,32,73,47,79,32,100,101,118,105,99,101,32,40,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111>>]}]},<<41,46,32,84,104,101,114,101,102,111,114,101,44,32,119,104,101,110,32,100,97,116,97,32,105,115,32,119,114,105,116,116,101,110,32,116,111,32,97,32,110,111,114,109,97,108,32,102,105,108,101,44,32,116,104,101,32,115,101,110,100,105,110,103,32,111,102,32,116,104,101,32,100,97,116,97,32,116,111,32,116,104,101,32,102,105,108,101,32,112,114,111,99,101,115,115,44,32,99,111,112,105,101,115,32,97,108,108,32,100,97,116,97,32,116,104,97,116,32,97,114,101,32,110,111,116,32,98,105,110,97,114,105,101,115,46,32,79,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,105,110,32,98,105,110,97,114,121,32,109,111,100,101,32,97,110,100,32,119,114,105,116,105,110,103,32,98,105,110,97,114,105,101,115,32,105,115,32,116,104,101,114,101,102,111,114,101,32,114,101,99,111,109,109,101,110,100,101,100,46,32,73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,111,110,32,97,110,111,116,104,101,114,32,110,111,100,101,44,32,111,114,32,105,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,114,117,110,115,32,97,115,32,115,108,97,118,101,32,116,111,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,97,110,111,116,104,101,114,32,110,111,100,101,44,32,97,108,115,111,32,98,105,110,97,114,105,101,115,32,97,114,101,32,99,111,112,105,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<82,97,119,32,102,105,108,101,115,32,117,115,101,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,111,102,32,116,104,101,32,104,111,115,116,32,109,97,99,104,105,110,101,32,111,102,32,116,104,101,32,110,111,100,101,46,32,70,111,114,32,110,111,114,109,97,108,32,102,105,108,101,115,32,40,110,111,110,45,114,97,119,41,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,117,115,101,100,32,116,111,32,102,105,110,100,32,116,104,101,32,102,105,108,101,115,44,32,97,110,100,32,105,102,32,116,104,101,32,110,111,100,101,32,105,115,32,114,117,110,110,105,110,103,32,105,116,115,32,102,105,108,101,32,115,101,114,118,101,114,32,97,115,32,115,108,97,118,101,32,116,111,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,97,110,111,116,104,101,114,32,110,111,100,101,44,32,97,110,100,32,116,104,101,32,111,116,104,101,114,32,110,111,100,101,32,114,117,110,115,32,111,110,32,115,111,109,101,32,111,116,104,101,114,32,104,111,115,116,32,109,97,99,104,105,110,101,44,32,116,104,101,121,32,99,97,110,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,102,105,108,101,32,115,121,115,116,101,109,115,46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,105,115,32,115,101,108,100,111,109,32,97,32,112,114,111,98,108,101,109,46>>]}]},{p,[],[{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<32,99,97,110,32,98,101,32,103,105,118,101,110,32,116,104,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,97,100,95,97,104,101,97,100>>]},<<32,116,111,32,116,117,114,110,32,111,110,32,99,97,99,104,105,110,103,44,32,119,104,105,99,104,32,119,105,108,108,32,114,101,100,117,99,101,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,115,32,97,110,100,32,103,114,101,97,116,108,121,32,105,109,112,114,111,118,101,32,112,101,114,102,111,114,109,97,110,99,101,32,102,111,114,32,115,109,97,108,108,32,114,101,97,100,115,32,97,110,100,32,119,114,105,116,101,115,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,111,118,101,114,104,101,97,100,32,119,111,110,39,116,32,100,105,115,97,112,112,101,97,114,32,99,111,109,112,108,101,116,101,108,121,32,97,110,100,32,105,116,39,115,32,98,101,115,116,32,116,111,32,107,101,101,112,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,97,32,109,105,110,105,109,117,109,46,32,65,115,32,97,32,99,111,110,116,114,105,118,101,100,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,117,110,99,116,105,111,110,32,119,114,105,116,101,115,32,52,77,66,32,105,110,32,50,46,53,32,115,101,99,111,110,100,115,32,119,104,101,110,32,116,101,115,116,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,40,78,97,109,101,41,32,45,62,10,32,32,32,32,123,111,107,44,32,70,100,125,32,61,32,102,105,108,101,58,111,112,101,110,40,78,97,109,101,44,32,91,114,97,119,44,32,119,114,105,116,101,44,32,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,98,105,110,97,114,121,93,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,70,100,44,32,52,32,98,115,108,32,50,48,41,44,10,32,32,32,32,102,105,108,101,58,99,108,111,115,101,40,70,100,41,46,10,10,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,95,70,100,44,32,48,41,32,45,62,10,32,32,32,32,111,107,59,10,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,70,100,44,32,77,41,32,45,62,10,32,32,32,32,111,107,32,61,32,102,105,108,101,58,119,114,105,116,101,40,70,100,44,32,60,60,48,62,62,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,70,100,44,32,77,32,45,32,49,41,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,102,117,110,99,116,105,111,110,97,108,108,121,32,101,113,117,105,118,97,108,101,110,116,32,99,111,100,101,32,119,114,105,116,101,115,32,49,50,56,32,98,121,116,101,115,32,112,101,114,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<32,97,110,100,32,115,111,32,100,111,101,115,32,116,104,101,32,115,97,109,101,32,119,111,114,107,32,105,110,32,48,46,48,56,32,115,101,99,111,110,100,115,44,32,119,104,105,99,104,32,105,115,32,114,111,117,103,104,108,121,32,51,48,32,116,105,109,101,115,32,102,97,115,116,101,114,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<99,114,101,97,116,101,95,102,105,108,101,40,78,97,109,101,41,32,45,62,10,32,32,32,32,123,111,107,44,32,70,100,125,32,61,32,102,105,108,101,58,111,112,101,110,40,78,97,109,101,44,32,91,114,97,119,44,32,119,114,105,116,101,44,32,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,98,105,110,97,114,121,93,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,52,32,98,115,108,32,50,48,41,44,10,32,32,32,32,102,105,108,101,58,99,108,111,115,101,40,70,100,41,44,10,32,32,32,32,111,107,46,10,10,99,114,101,97,116,101,95,102,105,108,101,95,49,40,95,70,100,44,32,48,41,32,45,62,10,32,32,32,32,111,107,59,10,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,41,32,119,104,101,110,32,77,32,62,61,32,49,50,56,32,45,62,10,32,32,32,32,111,107,32,61,32,102,105,108,101,58,119,114,105,116,101,40,70,100,44,32,60,60,48,58,40,49,50,56,41,47,117,110,105,116,58,56,62,62,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,32,45,32,49,50,56,41,59,10,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,41,32,45,62,10,32,32,32,32,111,107,32,61,32,102,105,108,101,58,119,114,105,116,101,40,70,100,44,32,60,60,48,58,40,77,41,47,117,110,105,116,58,56,62,62,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,32,45,32,49,41,46>>]}]},{p,[],[<<87,104,101,110,32,119,114,105,116,105,110,103,32,100,97,116,97,32,105,116,39,115,32,103,101,110,101,114,97,108,108,121,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,111,32,119,114,105,116,101,32,97,32,108,105,115,116,32,111,102,32,98,105,110,97,114,105,101,115,32,114,97,116,104,101,114,32,116,104,97,110,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,46,32,73,116,32,105,115,32,110,111,116,32,110,101,101,100,101,100,32,116,111,32,102,108,97,116,116,101,110,32,97,32,100,101,101,112,32,108,105,115,116,32,98,101,102,111,114,101,32,119,114,105,116,105,110,103,46,32,79,110,32,85,110,105,120,32,104,111,115,116,115,44,32,115,99,97,116,116,101,114,32,111,117,116,112,117,116,44,32,119,104,105,99,104,32,119,114,105,116,101,115,32,97,32,115,101,116,32,111,102,32,98,117,102,102,101,114,115,32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,105,115,32,117,115,101,100,32,119,104,101,110,32,112,111,115,115,105,98,108,101,46,32,73,110,32,116,104,105,115,32,119,97,121,32>>,{code,[],[<<119,114,105,116,101,40,70,68,44,32,91,66,105,110,49,44,32,66,105,110,50,32,124,32,66,105,110,51,93,41>>]},<<32,119,114,105,116,101,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,98,105,110,97,114,105,101,115,32,119,105,116,104,111,117,116,32,99,111,112,121,105,110,103,32,116,104,101,32,100,97,116,97,32,97,116,32,97,108,108,44,32,101,120,99,101,112,116,32,102,111,114,32,112,101,114,104,97,112,115,32,100,101,101,112,32,100,111,119,110,32,105,110,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,107,101,114,110,101,108,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,102,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,32,119,104,101,110,32,97,99,99,101,115,115,105,110,103,32,97,110,32,111,112,101,110,32,102,105,108,101,32,119,105,116,104,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111>>]}]},<<44,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,110,100,108,105,110,103,32,116,104,101,32,102,105,108,101,32,101,120,105,116,115,46,32,84,104,101,32,100,101,97,100,32,102,105,108,101,32,112,114,111,99,101,115,115,32,99,97,110,32,104,97,110,103,32,105,102,32,97,32,112,114,111,99,101,115,115,32,116,114,105,101,115,32,116,111,32,97,99,99,101,115,115,32,105,116,32,108,97,116,101,114,46,32,84,104,105,115,32,119,105,108,108,32,98,101,32,102,105,120,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]},{h2,[],[<<83,101,101,32,65,108,115,111>>]},{p,[],[{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,102,105,108,101,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,105,108,101,110,97,109,101,40,51,41>>]}]}]}]},#{name => <<102,105,108,101>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,102,105,108,101,46,120,109,108],types => #{{date_time,0} => {attribute,123,type,{date_time,{remote_type,123,[{atom,123,calendar},{atom,123,datetime},[]]},[]}},{deep_list,0} => {attribute,101,type,{deep_list,{type,101,list,[{type,101,union,[{type,101,char,[]},{type,101,atom,[]},{user_type,101,deep_list,[]}]}]},[]}},{delete_option,0} => {attribute,126,type,{delete_option,{atom,126,raw},[]}},{fd,0} => {attribute,87,type,{fd,{type,87,record,[{atom,87,file_descriptor}]},[]}},{file_info,0} => {attribute,86,type,{file_info,{type,86,record,[{atom,86,file_info}]},[]}},{file_info_option,0} => {attribute,129,type,{file_info_option,{type,129,union,[{type,129,tuple,[{atom,129,time},{atom,129,local}]},{type,129,tuple,[{atom,129,time},{atom,129,universal}]},{type,130,tuple,[{atom,130,time},{atom,130,posix}]},{atom,130,raw}]},[]}},{filename,0} => {attribute,84,type,{filename,{type,84,string,[]},[]}},{filename_all,0} => {attribute,85,type,{filename_all,{type,85,union,[{type,85,string,[]},{type,85,binary,[]}]},[]}},{io_device,0} => {attribute,88,type,{io_device,{type,88,union,[{type,88,pid,[]},{user_type,88,fd,[]}]},[]}},{location,0} => {attribute,89,type,{location,{type,89,union,[{type,89,integer,[]},{type,89,tuple,[{atom,89,bof},{ann_type,89,[{var,89,'Offset'},{type,89,integer,[]}]}]},{type,90,tuple,[{atom,90,cur},{ann_type,90,[{var,90,'Offset'},{type,90,integer,[]}]}]},{type,91,tuple,[{atom,91,eof},{ann_type,91,[{var,91,'Offset'},{type,91,integer,[]}]}]},{atom,91,bof},{atom,91,cur},{atom,91,eof}]},[]}},{mode,0} => {attribute,92,type,{mode,{type,92,union,[{atom,92,read},{atom,92,write},{atom,92,append},{atom,93,exclusive},{atom,93,raw},{atom,93,binary},{type,94,tuple,[{atom,94,delayed_write},{ann_type,95,[{var,95,'Size'},{type,95,non_neg_integer,[]}]},{ann_type,96,[{var,96,'Delay'},{type,96,non_neg_integer,[]}]}]},{atom,97,delayed_write},{type,97,tuple,[{atom,97,read_ahead},{ann_type,97,[{var,97,'Size'},{type,97,pos_integer,[]}]}]},{atom,98,read_ahead},{atom,98,compressed},{type,99,tuple,[{atom,99,encoding},{remote_type,99,[{atom,99,unicode},{atom,99,encoding},[]]}]},{atom,100,sync}]},[]}},{name,0} => {attribute,102,type,{name,{type,102,union,[{type,102,string,[]},{type,102,atom,[]},{user_type,102,deep_list,[]}]},[]}},{name_all,0} => {attribute,103,type,{name_all,{type,103,union,[{type,103,string,[]},{type,103,atom,[]},{user_type,103,deep_list,[]},{ann_type,103,[{var,103,'RawFilename'},{type,103,binary,[]}]}]},[]}},{posix,0} => {attribute,104,type,{posix,{type,105,union,[{atom,105,eacces},{atom,105,eagain},{atom,106,ebadf},{atom,106,ebadmsg},{atom,106,ebusy},{atom,107,edeadlk},{atom,107,edeadlock},{atom,107,edquot},{atom,108,eexist},{atom,109,efault},{atom,109,efbig},{atom,109,eftype},{atom,110,eintr},{atom,110,einval},{atom,110,eio},{atom,110,eisdir},{atom,111,eloop},{atom,112,emfile},{atom,112,emlink},{atom,112,emultihop},{atom,113,enametoolong},{atom,113,enfile},{atom,114,enobufs},{atom,114,enodev},{atom,114,enolck},{atom,114,enolink},{atom,114,enoent},{atom,115,enomem},{atom,115,enospc},{atom,115,enosr},{atom,115,enostr},{atom,115,enosys},{atom,116,enotblk},{atom,116,enotdir},{atom,116,enotsup},{atom,116,enxio},{atom,117,eopnotsupp},{atom,117,eoverflow},{atom,118,eperm},{atom,118,epipe},{atom,119,erange},{atom,119,erofs},{atom,120,espipe},{atom,120,esrch},{atom,120,estale},{atom,121,etxtbsy},{atom,122,exdev}]},[]}},{posix_file_advise,0} => {attribute,124,type,{posix_file_advise,{type,124,union,[{atom,124,normal},{atom,124,sequential},{atom,124,random},{atom,125,no_reuse},{atom,125,will_need},{atom,125,dont_need}]},[]}},{sendfile_option,0} => {attribute,127,type,{sendfile_option,{type,127,union,[{type,127,tuple,[{atom,127,chunk_size},{type,127,non_neg_integer,[]}]},{type,128,tuple,[{atom,128,use_threads},{type,128,boolean,[]}]}]},[]}}}},[{{function,advise,4},[{file,[102,105,108,101,46,101,114,108]},{location,565}],[<<97,100,118,105,115,101,47,52>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<112,111,115,105,120,95,102,105,108,101,95,97,100,118,105,115,101>>}],[]}]},{p,[],[{code,[],[<<97,100,118,105,115,101,47,52>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,97,110,110,111,117,110,99,101,32,97,110,32,105,110,116,101,110,116,105,111,110,32,116,111,32,97,99,99,101,115,115,32,102,105,108,101,32,100,97,116,97,32,105,110,32,97,32,115,112,101,99,105,102,105,99,32,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,102,117,116,117,114,101,44,32,116,104,117,115,32,97,108,108,111,119,105,110,103,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,116,111,32,112,101,114,102,111,114,109,32,97,112,112,114,111,112,114,105,97,116,101,32,111,112,116,105,109,105,122,97,116,105,111,110,115,46>>]},{p,[],[<<79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,109,105,103,104,116,32,104,97,118,101,32,110,111,32,101,102,102,101,99,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,56>>,signature => [{attribute,565,spec,{{advise,4},[{type,565,bounded_fun,[{type,565,'fun',[{type,565,product,[{var,565,'IoDevice'},{var,565,'Offset'},{var,565,'Length'},{var,565,'Advise'}]},{type,565,union,[{atom,565,ok},{type,565,tuple,[{atom,565,error},{var,565,'Reason'}]}]}]},[{type,566,constraint,[{atom,566,is_subtype},[{var,566,'IoDevice'},{user_type,566,io_device,[]}]]},{type,567,constraint,[{atom,567,is_subtype},[{var,567,'Offset'},{type,567,integer,[]}]]},{type,568,constraint,[{atom,568,is_subtype},[{var,568,'Length'},{type,568,integer,[]}]]},{type,569,constraint,[{atom,569,is_subtype},[{var,569,'Advise'},{user_type,569,posix_file_advise,[]}]]},{type,570,constraint,[{atom,570,is_subtype},[{var,570,'Reason'},{type,570,union,[{user_type,570,posix,[]},{atom,570,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,allocate,3},[{file,[102,105,108,101,46,101,114,108]},{location,579}],[<<97,108,108,111,99,97,116,101,47,51>>],#{<<101,110>> => [{p,[],[{code,[],[<<97,108,108,111,99,97,116,101,47,51>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,112,114,101,97,108,108,111,99,97,116,101,32,115,112,97,99,101,32,102,111,114,32,97,32,102,105,108,101,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,111,110,108,121,32,115,117,99,99,101,101,100,115,32,105,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,112,114,111,118,105,100,101,32,116,104,105,115,32,102,101,97,116,117,114,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,57>>,signature => [{attribute,579,spec,{{allocate,3},[{type,579,bounded_fun,[{type,579,'fun',[{type,579,product,[{var,579,'File'},{var,579,'Offset'},{var,579,'Length'}]},{type,580,union,[{atom,580,ok},{type,580,tuple,[{atom,580,error},{user_type,580,posix,[]}]}]}]},[{type,581,constraint,[{atom,581,is_subtype},[{var,581,'File'},{user_type,581,io_device,[]}]]},{type,582,constraint,[{atom,582,is_subtype},[{var,582,'Offset'},{type,582,non_neg_integer,[]}]]},{type,583,constraint,[{atom,583,is_subtype},[{var,583,'Length'},{type,583,non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,change_group,2},[{file,[102,105,108,101,46,101,114,108]},{location,1249}],[<<99,104,97,110,103,101,95,103,114,111,117,112,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,103,114,111,117,112,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,56>>,signature => [{attribute,1249,spec,{{change_group,2},[{type,1249,bounded_fun,[{type,1249,'fun',[{type,1249,product,[{var,1249,'Filename'},{var,1249,'Gid'}]},{type,1249,union,[{atom,1249,ok},{type,1249,tuple,[{atom,1249,error},{var,1249,'Reason'}]}]}]},[{type,1250,constraint,[{atom,1250,is_subtype},[{var,1250,'Filename'},{user_type,1250,name_all,[]}]]},{type,1251,constraint,[{atom,1251,is_subtype},[{var,1251,'Gid'},{type,1251,integer,[]}]]},{type,1252,constraint,[{atom,1252,is_subtype},[{var,1252,'Reason'},{type,1252,union,[{user_type,1252,posix,[]},{atom,1252,badarg}]}]]}]]}]}}]}},{{function,change_mode,2},[{file,[102,105,108,101,46,101,114,108]},{location,1221}],[<<99,104,97,110,103,101,95,109,111,100,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,112,101,114,109,105,115,115,105,111,110,115,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,49,54>>,signature => [{attribute,1221,spec,{{change_mode,2},[{type,1221,bounded_fun,[{type,1221,'fun',[{type,1221,product,[{var,1221,'Filename'},{var,1221,'Mode'}]},{type,1221,union,[{atom,1221,ok},{type,1221,tuple,[{atom,1221,error},{var,1221,'Reason'}]}]}]},[{type,1222,constraint,[{atom,1222,is_subtype},[{var,1222,'Filename'},{user_type,1222,name_all,[]}]]},{type,1223,constraint,[{atom,1223,is_subtype},[{var,1223,'Mode'},{type,1223,integer,[]}]]},{type,1224,constraint,[{atom,1224,is_subtype},[{var,1224,'Reason'},{type,1224,union,[{user_type,1224,posix,[]},{atom,1224,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,change_owner,2},[{file,[102,105,108,101,46,101,114,108]},{location,1230}],[<<99,104,97,110,103,101,95,111,119,110,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,111,119,110,101,114,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,50,52>>,signature => [{attribute,1230,spec,{{change_owner,2},[{type,1230,bounded_fun,[{type,1230,'fun',[{type,1230,product,[{var,1230,'Filename'},{var,1230,'Uid'}]},{type,1230,union,[{atom,1230,ok},{type,1230,tuple,[{atom,1230,error},{var,1230,'Reason'}]}]}]},[{type,1231,constraint,[{atom,1231,is_subtype},[{var,1231,'Filename'},{user_type,1231,name_all,[]}]]},{type,1232,constraint,[{atom,1232,is_subtype},[{var,1232,'Uid'},{type,1232,integer,[]}]]},{type,1233,constraint,[{atom,1233,is_subtype},[{var,1233,'Reason'},{type,1233,union,[{user_type,1233,posix,[]},{atom,1233,badarg}]}]]}]]}]}}]}},{{function,change_owner,3},[{file,[102,105,108,101,46,101,114,108]},{location,1239}],[<<99,104,97,110,103,101,95,111,119,110,101,114,47,51>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,111,119,110,101,114,32,97,110,100,32,103,114,111,117,112,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,51,50>>,signature => [{attribute,1239,spec,{{change_owner,3},[{type,1239,bounded_fun,[{type,1239,'fun',[{type,1239,product,[{var,1239,'Filename'},{var,1239,'Uid'},{var,1239,'Gid'}]},{type,1239,union,[{atom,1239,ok},{type,1239,tuple,[{atom,1239,error},{var,1239,'Reason'}]}]}]},[{type,1240,constraint,[{atom,1240,is_subtype},[{var,1240,'Filename'},{user_type,1240,name_all,[]}]]},{type,1241,constraint,[{atom,1241,is_subtype},[{var,1241,'Uid'},{type,1241,integer,[]}]]},{type,1242,constraint,[{atom,1242,is_subtype},[{var,1242,'Gid'},{type,1242,integer,[]}]]},{type,1243,constraint,[{atom,1243,is_subtype},[{var,1243,'Reason'},{type,1243,union,[{user_type,1243,posix,[]},{atom,1243,badarg}]}]]}]]}]}}]}},{{function,change_time,2},[{file,[102,105,108,101,46,101,114,108]},{location,1258}],[<<99,104,97,110,103,101,95,116,105,109,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,97,110,100,32,97,99,99,101,115,115,32,116,105,109,101,115,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,52,48>>,signature => [{attribute,1258,spec,{{change_time,2},[{type,1258,bounded_fun,[{type,1258,'fun',[{type,1258,product,[{var,1258,'Filename'},{var,1258,'Mtime'}]},{type,1258,union,[{atom,1258,ok},{type,1258,tuple,[{atom,1258,error},{var,1258,'Reason'}]}]}]},[{type,1259,constraint,[{atom,1259,is_subtype},[{var,1259,'Filename'},{user_type,1259,name_all,[]}]]},{type,1260,constraint,[{atom,1260,is_subtype},[{var,1260,'Mtime'},{user_type,1260,date_time,[]}]]},{type,1261,constraint,[{atom,1261,is_subtype},[{var,1261,'Reason'},{type,1261,union,[{user_type,1261,posix,[]},{atom,1261,badarg}]}]]}]]}]}}]}},{{function,change_time,3},[{file,[102,105,108,101,46,101,114,108]},{location,1268}],[<<99,104,97,110,103,101,95,116,105,109,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,97,110,100,32,108,97,115,116,32,97,99,99,101,115,115,32,116,105,109,101,115,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,52,56>>,signature => [{attribute,1268,spec,{{change_time,3},[{type,1268,bounded_fun,[{type,1268,'fun',[{type,1268,product,[{var,1268,'Filename'},{var,1268,'Atime'},{var,1268,'Mtime'}]},{type,1268,union,[{atom,1268,ok},{type,1268,tuple,[{atom,1268,error},{var,1268,'Reason'}]}]}]},[{type,1269,constraint,[{atom,1269,is_subtype},[{var,1269,'Filename'},{user_type,1269,name_all,[]}]]},{type,1270,constraint,[{atom,1270,is_subtype},[{var,1270,'Atime'},{user_type,1270,date_time,[]}]]},{type,1271,constraint,[{atom,1271,is_subtype},[{var,1271,'Mtime'},{user_type,1271,date_time,[]}]]},{type,1272,constraint,[{atom,1272,is_subtype},[{var,1272,'Reason'},{type,1272,union,[{user_type,1272,posix,[]},{atom,1272,badarg}]}]]}]]}]}}]}},{{function,close,1},[{file,[102,105,108,101,46,101,114,108]},{location,546}],[<<99,108,111,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,108,111,115,101,115,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,73,116,32,109,111,115,116,108,121,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<44,32,101,120,99,101,112,116,32,102,111,114,32,115,111,109,101,32,115,101,118,101,114,101,32,101,114,114,111,114,115,32,115,117,99,104,32,97,115,32,111,117,116,32,111,102,32,109,101,109,111,114,121,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]},<<32,119,97,115,32,117,115,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,44,32>>,{code,[],[<<99,108,111,115,101,47,49>>]},<<32,99,97,110,32,114,101,116,117,114,110,32,97,110,32,111,108,100,32,119,114,105,116,101,32,101,114,114,111,114,32,97,110,100,32,110,111,116,32,101,118,101,110,32,116,114,121,32,116,111,32,99,108,111,115,101,32,116,104,101,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,53,54>>,signature => [{attribute,546,spec,{{close,1},[{type,546,bounded_fun,[{type,546,'fun',[{type,546,product,[{var,546,'IoDevice'}]},{type,546,union,[{atom,546,ok},{type,546,tuple,[{atom,546,error},{var,546,'Reason'}]}]}]},[{type,547,constraint,[{atom,547,is_subtype},[{var,547,'IoDevice'},{user_type,547,io_device,[]}]]},{type,548,constraint,[{atom,548,is_subtype},[{var,548,'Reason'},{type,548,union,[{user_type,548,posix,[]},{atom,548,badarg},{atom,548,terminated}]}]]}]]}]}}]}},{{function,consult,1},[{file,[102,105,108,101,46,101,114,108]},{location,1025}],[<<99,111,110,115,117,108,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,69,114,108,97,110,103,32,116,101,114,109,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,44,32,102,114,111,109,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,84,101,114,109,115,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,119,97,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,116,101,114,109,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,84,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,44,32,117,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<46>>]}]}]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<102,46,116,120,116,58,32,32,123,112,101,114,115,111,110,44,32,34,107,97,108,108,101,34,44,32,50,53,125,46,10,32,32,32,32,32,32,32,32,123,112,101,114,115,111,110,44,32,34,112,101,108,108,101,34,44,32,51,48,125,46>>]}]},{pre,[],[{code,[],[<<49,62,32,102,105,108,101,58,99,111,110,115,117,108,116,40,34,102,46,116,120,116,34,41,46,10,123,111,107,44,91,123,112,101,114,115,111,110,44,34,107,97,108,108,101,34,44,50,53,125,44,123,112,101,114,115,111,110,44,34,112,101,108,108,101,34,44,51,48,125,93,125>>]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,54,57>>,signature => [{attribute,1025,spec,{{consult,1},[{type,1025,bounded_fun,[{type,1025,'fun',[{type,1025,product,[{var,1025,'Filename'}]},{type,1025,union,[{type,1025,tuple,[{atom,1025,ok},{var,1025,'Terms'}]},{type,1025,tuple,[{atom,1025,error},{var,1025,'Reason'}]}]}]},[{type,1026,constraint,[{atom,1026,is_subtype},[{var,1026,'Filename'},{user_type,1026,name_all,[]}]]},{type,1027,constraint,[{atom,1027,is_subtype},[{var,1027,'Terms'},{type,1027,list,[{type,1027,term,[]}]}]]},{type,1028,constraint,[{atom,1028,is_subtype},[{var,1028,'Reason'},{type,1028,union,[{user_type,1028,posix,[]},{atom,1028,badarg},{atom,1028,terminated},{atom,1028,system_limit},{type,1029,tuple,[{ann_type,1029,[{var,1029,'Line'},{type,1029,integer,[]}]},{ann_type,1029,[{var,1029,'Mod'},{type,1029,module,[]}]},{ann_type,1029,[{var,1029,'Term'},{type,1029,term,[]}]}]}]}]]}]]}]}}]}},{{function,copy,3},[{file,[102,105,108,101,46,101,114,108]},{location,788}],[<<99,111,112,121,47,51>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,48,55>>,equiv => {function,copy,2},signature => [{attribute,788,spec,{{copy,3},[{type,788,bounded_fun,[{type,788,'fun',[{type,788,product,[{var,788,'Source'},{var,788,'Destination'},{var,788,'ByteCount'}]},{type,789,union,[{type,789,tuple,[{atom,789,ok},{var,789,'BytesCopied'}]},{type,789,tuple,[{atom,789,error},{var,789,'Reason'}]}]}]},[{type,790,constraint,[{atom,790,is_subtype},[{var,790,'Source'},{type,790,union,[{user_type,790,io_device,[]},{var,790,'Filename'},{type,790,tuple,[{var,790,'Filename'},{var,790,'Modes'}]}]}]]},{type,791,constraint,[{atom,791,is_subtype},[{var,791,'Destination'},{type,791,union,[{user_type,791,io_device,[]},{var,791,'Filename'},{type,791,tuple,[{var,791,'Filename'},{var,791,'Modes'}]}]}]]},{type,792,constraint,[{atom,792,is_subtype},[{var,792,'Filename'},{user_type,792,name_all,[]}]]},{type,793,constraint,[{atom,793,is_subtype},[{var,793,'Modes'},{type,793,list,[{user_type,793,mode,[]}]}]]},{type,794,constraint,[{atom,794,is_subtype},[{var,794,'ByteCount'},{type,794,union,[{type,794,non_neg_integer,[]},{atom,794,infinity}]}]]},{type,795,constraint,[{atom,795,is_subtype},[{var,795,'BytesCopied'},{type,795,non_neg_integer,[]}]]},{type,796,constraint,[{atom,796,is_subtype},[{var,796,'Reason'},{type,796,union,[{user_type,796,posix,[]},{atom,796,badarg},{atom,796,terminated}]}]]}]]}]}}]}},{{function,copy,2},[{file,[102,105,108,101,46,101,114,108]},{location,777}],[<<99,111,112,121,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,112,105,101,115,32>>,{code,[],[<<66,121,116,101,67,111,117,110,116>>]},<<32,98,121,116,101,115,32,102,114,111,109,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,116,111,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<46,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,114,101,102,101,114,32,116,111,32,101,105,116,104,101,114,32,102,105,108,101,110,97,109,101,115,32,111,114,32,73,79,32,100,101,118,105,99,101,115,32,102,114,111,109,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<111,112,101,110,47,50>>]},<<46,32>>,{code,[],[<<66,121,116,101,67,111,117,110,116>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<105,110,102,105,110,105,116,121>>]},<<44,32,100,101,110,111,116,105,110,103,32,97,110,32,105,110,102,105,110,105,116,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,111,100,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,112,111,115,115,105,98,108,101,32,109,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<44,32,97,110,100,32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<91,93>>]},<<46>>]},{p,[],[<<73,102,32,98,111,116,104,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,114,101,102,101,114,32,116,111,32,102,105,108,101,110,97,109,101,115,44,32,116,104,101,32,102,105,108,101,115,32,97,114,101,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<91,114,101,97,100,44,32,98,105,110,97,114,121,93>>]},<<32,97,110,100,32>>,{code,[],[<<91,119,114,105,116,101,44,32,98,105,110,97,114,121,93>>]},<<32,112,114,101,112,101,110,100,101,100,32,116,111,32,116,104,101,105,114,32,109,111,100,101,32,108,105,115,116,115,44,32,114,101,115,112,101,99,116,105,118,101,108,121,44,32,116,111,32,111,112,116,105,109,105,122,101,32,116,104,101,32,99,111,112,121,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,102,105,108,101,110,97,109,101,44,32,105,116,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<114,101,97,100>>]},<<32,109,111,100,101,32,112,114,101,112,101,110,100,101,100,32,116,111,32,116,104,101,32,109,111,100,101,32,108,105,115,116,32,98,101,102,111,114,101,32,116,104,101,32,99,111,112,121,44,32,97,110,100,32,99,108,111,115,101,100,32,119,104,101,110,32,100,111,110,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,102,105,108,101,110,97,109,101,44,32,105,116,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,109,111,100,101,32,112,114,101,112,101,110,100,101,100,32,116,111,32,116,104,101,32,109,111,100,101,32,108,105,115,116,32,98,101,102,111,114,101,32,116,104,101,32,99,111,112,121,44,32,97,110,100,32,99,108,111,115,101,100,32,119,104,101,110,32,100,111,110,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,121,116,101,115,67,111,112,105,101,100,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<66,121,116,101,115,67,111,112,105,101,100>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,116,104,97,116,32,119,97,115,32,99,111,112,105,101,100,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<66,121,116,101,67,111,117,110,116>>]},<<32,105,102,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,101,110,99,111,117,110,116,101,114,101,100,32,111,110,32,116,104,101,32,115,111,117,114,99,101,46,32,73,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58,32,97,115,32,102,111,114,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<32,105,102,32,97,32,102,105,108,101,32,104,97,100,32,116,111,32,98,101,32,111,112,101,110,101,100,44,32,97,110,100,32,97,115,32,102,111,114,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,48,55>>,signature => [{attribute,777,spec,{{copy,2},[{type,777,bounded_fun,[{type,777,'fun',[{type,777,product,[{var,777,'Source'},{var,777,'Destination'}]},{type,777,union,[{type,777,tuple,[{atom,777,ok},{var,777,'BytesCopied'}]},{type,777,tuple,[{atom,777,error},{var,777,'Reason'}]}]}]},[{type,778,constraint,[{atom,778,is_subtype},[{var,778,'Source'},{type,778,union,[{user_type,778,io_device,[]},{var,778,'Filename'},{type,778,tuple,[{var,778,'Filename'},{var,778,'Modes'}]}]}]]},{type,779,constraint,[{atom,779,is_subtype},[{var,779,'Destination'},{type,779,union,[{user_type,779,io_device,[]},{var,779,'Filename'},{type,779,tuple,[{var,779,'Filename'},{var,779,'Modes'}]}]}]]},{type,780,constraint,[{atom,780,is_subtype},[{var,780,'Filename'},{user_type,780,name_all,[]}]]},{type,781,constraint,[{atom,781,is_subtype},[{var,781,'Modes'},{type,781,list,[{user_type,781,mode,[]}]}]]},{type,782,constraint,[{atom,782,is_subtype},[{var,782,'BytesCopied'},{type,782,non_neg_integer,[]}]]},{type,783,constraint,[{atom,783,is_subtype},[{var,783,'Reason'},{type,783,union,[{user_type,783,posix,[]},{atom,783,badarg},{atom,783,terminated}]}]]}]]}]}}]}},{{function,datasync,1},[{file,[102,105,108,101,46,101,114,108]},{location,731}],[<<100,97,116,97,115,121,110,99,47,49>>],#{<<101,110>> => [{p,[],[<<69,110,115,117,114,101,115,32,116,104,97,116,32,97,110,121,32,98,117,102,102,101,114,115,32,107,101,112,116,32,98,121,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,40,110,111,116,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,41,32,97,114,101,32,119,114,105,116,116,101,110,32,116,111,32,100,105,115,107,46,32,73,110,32,109,97,110,121,32,119,97,121,115,32,105,116,32,114,101,115,101,109,98,108,101,115,32>>,{code,[],[<<102,115,121,110,99>>]},<<32,98,117,116,32,105,116,32,100,111,101,115,32,110,111,116,32,117,112,100,97,116,101,32,115,111,109,101,32,111,102,32,116,104,101,32,109,101,116,97,100,97,116,97,32,111,102,32,116,104,101,32,102,105,108,101,44,32,115,117,99,104,32,97,115,32,116,104,101,32,97,99,99,101,115,115,32,116,105,109,101,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,104,97,115,32,110,111,32,101,102,102,101,99,116,46>>]},{p,[],[<<65,112,112,108,105,99,97,116,105,111,110,115,32,116,104,97,116,32,97,99,99,101,115,115,32,100,97,116,97,98,97,115,101,115,32,111,114,32,108,111,103,32,102,105,108,101,115,32,111,102,116,101,110,32,119,114,105,116,101,32,97,32,116,105,110,121,32,100,97,116,97,32,102,114,97,103,109,101,110,116,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,111,110,101,32,108,105,110,101,32,105,110,32,97,32,108,111,103,32,102,105,108,101,41,32,97,110,100,32,116,104,101,110,32,99,97,108,108,32>>,{code,[],[<<102,115,121,110,99,40,41>>]},<<32,105,109,109,101,100,105,97,116,101,108,121,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,119,114,105,116,116,101,110,32,100,97,116,97,32,105,115,32,112,104,121,115,105,99,97,108,108,121,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,104,97,114,100,32,100,105,115,107,46,32,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32>>,{code,[],[<<102,115,121,110,99,40,41>>]},<<32,97,108,119,97,121,115,32,105,110,105,116,105,97,116,101,115,32,116,119,111,32,119,114,105,116,101,32,111,112,101,114,97,116,105,111,110,115,58,32,111,110,101,32,102,111,114,32,116,104,101,32,110,101,119,108,121,32,119,114,105,116,116,101,110,32,100,97,116,97,32,97,110,100,32,97,110,111,116,104,101,114,32,111,110,101,32,116,111,32,117,112,100,97,116,101,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,115,116,111,114,101,100,32,105,110,32,116,104,101,32>>,{code,[],[<<105,110,111,100,101>>]},<<46,32,73,102,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,105,115,32,110,111,116,32,97,32,112,97,114,116,32,111,102,32,116,104,101,32,116,114,97,110,115,97,99,116,105,111,110,32,99,111,110,99,101,112,116,44,32>>,{code,[],[<<102,100,97,116,97,115,121,110,99,40,41>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,97,118,111,105,100,32,117,110,110,101,99,101,115,115,97,114,121,32>>,{code,[],[<<105,110,111,100,101>>]},<<32,100,105,115,107,32,119,114,105,116,101,32,111,112,101,114,97,116,105,111,110,115,46>>]},{p,[],[<<65,118,97,105,108,97,98,108,101,32,111,110,108,121,32,105,110,32,115,111,109,101,32,80,79,83,73,88,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,99,97,108,108,32,114,101,115,117,108,116,115,32,105,110,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<102,115,121,110,99,40,41>>]},<<44,32,111,114,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,105,110,32,115,121,115,116,101,109,115,32,110,111,116,32,112,114,111,118,105,100,105,110,103,32,116,104,101,32>>,{code,[],[<<102,100,97,116,97,115,121,110,99,40,41>>]},<<32,115,121,115,99,97,108,108,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,52,53>>,signature => [{attribute,731,spec,{{datasync,1},[{type,731,bounded_fun,[{type,731,'fun',[{type,731,product,[{var,731,'IoDevice'}]},{type,731,union,[{atom,731,ok},{type,731,tuple,[{atom,731,error},{var,731,'Reason'}]}]}]},[{type,732,constraint,[{atom,732,is_subtype},[{var,732,'IoDevice'},{user_type,732,io_device,[]}]]},{type,733,constraint,[{atom,733,is_subtype},[{var,733,'Reason'},{type,733,union,[{user_type,733,posix,[]},{atom,733,badarg},{atom,733,terminated}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,del_dir,1},[{file,[102,105,108,101,46,101,114,108]},{location,256}],[<<100,101,108,95,100,105,114,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,100,101,108,101,116,101,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<68,105,114>>]},<<46,32,84,104,101,32,100,105,114,101,99,116,111,114,121,32,109,117,115,116,32,98,101,32,101,109,112,116,121,32,98,101,102,111,114,101,32,105,116,32,99,97,110,32,98,101,32,100,101,108,101,116,101,100,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,105,115,32,110,111,116,32,101,109,112,116,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[<<65,116,116,101,109,112,116,32,116,111,32,100,101,108,101,116,101,32,116,104,101,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,97,99,99,101,115>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,54,56>>,signature => [{attribute,256,spec,{{del_dir,1},[{type,256,bounded_fun,[{type,256,'fun',[{type,256,product,[{var,256,'Dir'}]},{type,256,union,[{atom,256,ok},{type,256,tuple,[{atom,256,error},{var,256,'Reason'}]}]}]},[{type,257,constraint,[{atom,257,is_subtype},[{var,257,'Dir'},{user_type,257,name_all,[]}]]},{type,258,constraint,[{atom,258,is_subtype},[{var,258,'Reason'},{type,258,union,[{user_type,258,posix,[]},{atom,258,badarg}]}]]}]]}]}}]}},{{function,del_dir_r,1},[{file,[102,105,108,101,46,101,114,108]},{location,263}],[<<100,101,108,95,100,105,114,95,114,47,49>>],#{<<101,110>> => [{p,[],[<<68,101,108,101,116,101,115,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<70,105,108,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,105,108,101>>]},<<32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,44,32,105,116,115,32,99,111,110,116,101,110,116,115,32,105,115,32,102,105,114,115,116,32,114,101,99,117,114,115,105,118,101,108,121,32,100,101,108,101,116,101,100,46,32,82,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<111,107>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,101,114,97,116,105,111,110,32,99,111,109,112,108,101,116,101,100,32,119,105,116,104,111,117,116,32,101,114,114,111,114,115,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,112,111,115,105,120,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,97,99,99,101,115,115,105,110,103,32,111,114,32,100,101,108,101,116,105,110,103,32>>,{code,[],[<<70,105,108,101>>]},<<46,32,73,102,32,115,111,109,101,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32,117,110,100,101,114,32>>,{code,[],[<<70,105,108,101>>]},<<32,99,111,117,108,100,32,110,111,116,32,98,101,32,100,101,108,101,116,101,100,44,32>>,{code,[],[<<70,105,108,101>>]},<<32,99,97,110,110,111,116,32,98,101,32,100,101,108,101,116,101,100,32,97,115,32,105,116,32,105,115,32,110,111,110,45,101,109,112,116,121,44,32,97,110,100,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,101,120,105,115,116,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,48,52>>,signature => [{attribute,263,spec,{{del_dir_r,1},[{type,263,bounded_fun,[{type,263,'fun',[{type,263,product,[{var,263,'File'}]},{type,263,union,[{atom,263,ok},{type,263,tuple,[{atom,263,error},{var,263,'Reason'}]}]}]},[{type,264,constraint,[{atom,264,is_subtype},[{var,264,'File'},{user_type,264,name_all,[]}]]},{type,265,constraint,[{atom,265,is_subtype},[{var,265,'Reason'},{type,265,union,[{user_type,265,posix,[]},{atom,265,badarg}]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,delete,2},[{file,[102,105,108,101,46,101,114,108]},{location,221}],[<<100,101,108,101,116,101,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,50,54>>,equiv => {function,delete,1},signature => [{attribute,221,spec,{{delete,2},[{type,221,bounded_fun,[{type,221,'fun',[{type,221,product,[{var,221,'Filename'},{var,221,'Opts'}]},{type,221,union,[{atom,221,ok},{type,221,tuple,[{atom,221,error},{var,221,'Reason'}]}]}]},[{type,222,constraint,[{atom,222,is_subtype},[{var,222,'Filename'},{user_type,222,name_all,[]}]]},{type,223,constraint,[{atom,223,is_subtype},[{var,223,'Opts'},{type,223,list,[{user_type,223,delete_option,[]}]}]]},{type,224,constraint,[{atom,224,is_subtype},[{var,224,'Reason'},{type,224,union,[{user_type,224,posix,[]},{atom,224,badarg}]}]]}]]}]}}]}},{{function,delete,1},[{file,[102,105,108,101,46,101,114,108]},{location,214}],[<<100,101,108,101,116,101,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,101,108,101,116,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<84,114,105,101,115,32,116,111,32,100,101,108,101,116,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,46,32,84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,105,110,32,112,97,114,116,105,99,117,108,97,114,32,100,117,114,105,110,103,32,116,104,101,32,101,97,114,108,121,32,98,111,111,116,32,115,116,97,103,101,32,119,104,101,110,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,121,101,116,32,114,101,103,105,115,116,101,114,101,100,44,32,116,111,32,115,116,105,108,108,32,98,101,32,97,98,108,101,32,116,111,32,100,101,108,101,116,101,32,108,111,99,97,108,32,102,105,108,101,115,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,116,104,101,32,102,105,108,101,32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,115,46>>]}]},{dt,[],[{code,[],[<<101,112,101,114,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,32,97,110,100,32,116,104,101,32,117,115,101,114,32,105,115,32,110,111,116,32,115,117,112,101,114,117,115,101,114,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,104,97,115,32,97,110,32,105,109,112,114,111,112,101,114,32,116,121,112,101,44,32,115,117,99,104,32,97,115,32,116,117,112,108,101,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,44,32,97,32,98,97,100,32,116,121,112,101,32,102,111,114,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,119,105,108,108,32,112,114,111,98,97,98,108,121,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,50,54>>,signature => [{attribute,214,spec,{{delete,1},[{type,214,bounded_fun,[{type,214,'fun',[{type,214,product,[{var,214,'Filename'}]},{type,214,union,[{atom,214,ok},{type,214,tuple,[{atom,214,error},{var,214,'Reason'}]}]}]},[{type,215,constraint,[{atom,215,is_subtype},[{var,215,'Filename'},{user_type,215,name_all,[]}]]},{type,216,constraint,[{atom,216,is_subtype},[{var,216,'Reason'},{type,216,union,[{user_type,216,posix,[]},{atom,216,badarg}]}]]}]]}]}}]}},{{function,eval,1},[{file,[102,105,108,101,46,101,114,108]},{location,1065}],[<<101,118,97,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,32,102,114,111,109,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,84,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,32,105,115,32,110,111,116,32,114,101,116,117,114,110,101,100,59,32,97,110,121,32,101,120,112,114,101,115,115,105,111,110,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,102,105,108,101,32,109,117,115,116,32,98,101,32,116,104,101,114,101,32,102,111,114,32,105,116,115,32,115,105,100,101,32,101,102,102,101,99,116,46,32,82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<111,107>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,119,97,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,84,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,44,32,117,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,54,57>>,signature => [{attribute,1065,spec,{{eval,1},[{type,1065,bounded_fun,[{type,1065,'fun',[{type,1065,product,[{var,1065,'Filename'}]},{type,1065,union,[{atom,1065,ok},{type,1065,tuple,[{atom,1065,error},{var,1065,'Reason'}]}]}]},[{type,1066,constraint,[{atom,1066,is_subtype},[{var,1066,'Filename'},{user_type,1066,name_all,[]}]]},{type,1067,constraint,[{atom,1067,is_subtype},[{var,1067,'Reason'},{type,1067,union,[{user_type,1067,posix,[]},{atom,1067,badarg},{atom,1067,terminated},{atom,1067,system_limit},{type,1068,tuple,[{ann_type,1068,[{var,1068,'Line'},{type,1068,integer,[]}]},{ann_type,1068,[{var,1068,'Mod'},{type,1068,module,[]}]},{ann_type,1068,[{var,1068,'Term'},{type,1068,term,[]}]}]}]}]]}]]}]}}]}},{{function,eval,2},[{file,[102,105,108,101,46,101,114,108]},{location,1073}],[<<101,118,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<101,118,97,108,47,49>>]},<<44,32,98,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,32>>,{code,[],[<<66,105,110,100,105,110,103,115>>]},<<32,97,114,101,32,117,115,101,100,32,105,110,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,101,114,108,95,101,118,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,101,118,97,108,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,48,51>>,signature => [{attribute,1073,spec,{{eval,2},[{type,1073,bounded_fun,[{type,1073,'fun',[{type,1073,product,[{var,1073,'Filename'},{var,1073,'Bindings'}]},{type,1073,union,[{atom,1073,ok},{type,1073,tuple,[{atom,1073,error},{var,1073,'Reason'}]}]}]},[{type,1074,constraint,[{atom,1074,is_subtype},[{var,1074,'Filename'},{user_type,1074,name_all,[]}]]},{type,1075,constraint,[{atom,1075,is_subtype},[{var,1075,'Bindings'},{remote_type,1075,[{atom,1075,erl_eval},{atom,1075,binding_struct},[]]}]]},{type,1076,constraint,[{atom,1076,is_subtype},[{var,1076,'Reason'},{type,1076,union,[{user_type,1076,posix,[]},{atom,1076,badarg},{atom,1076,terminated},{atom,1076,system_limit},{type,1077,tuple,[{ann_type,1077,[{var,1077,'Line'},{type,1077,integer,[]}]},{ann_type,1077,[{var,1077,'Mod'},{type,1077,module,[]}]},{ann_type,1077,[{var,1077,'Term'},{type,1077,term,[]}]}]}]}]]}]]}]}}]}},{{function,format_error,1},[{file,[102,105,108,101,46,101,114,108]},{location,146}],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<71,105,118,101,110,32,116,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,32,114,101,116,117,114,110,101,100,32,98,121,32,97,110,121,32,102,117,110,99,116,105,111,110,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,114,101,116,117,114,110,115,32,97,32,100,101,115,99,114,105,112,116,105,118,101,32,115,116,114,105,110,103,32,111,102,32,116,104,101,32,101,114,114,111,114,32,105,110,32,69,110,103,108,105,115,104,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,49,51>>,signature => [{attribute,146,spec,{{format_error,1},[{type,146,bounded_fun,[{type,146,'fun',[{type,146,product,[{var,146,'Reason'}]},{var,146,'Chars'}]},[{type,147,constraint,[{atom,147,is_subtype},[{var,147,'Reason'},{type,147,union,[{user_type,147,posix,[]},{atom,147,badarg},{atom,147,terminated},{atom,147,system_limit},{type,148,tuple,[{ann_type,148,[{var,148,'Line'},{type,148,integer,[]}]},{ann_type,148,[{var,148,'Mod'},{type,148,module,[]}]},{ann_type,148,[{var,148,'Term'},{type,148,term,[]}]}]}]}]]},{type,149,constraint,[{atom,149,is_subtype},[{var,149,'Chars'},{type,149,string,[]}]]}]]}]}}]}},{{function,get_cwd,0},[{file,[102,105,108,101,46,101,114,108]},{location,191}],[<<103,101,116,95,99,119,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,68,105,114,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,110,32,114,97,114,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,110,32,102,97,105,108,32,111,110,32,85,110,105,120,46,32,73,116,32,99,97,110,32,111,99,99,117,114,32,105,102,32,114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,46>>]}]},{p,[],[<<65,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,115,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,50,49>>,signature => [{attribute,191,spec,{{get_cwd,0},[{type,191,bounded_fun,[{type,191,'fun',[{type,191,product,[]},{type,191,union,[{type,191,tuple,[{atom,191,ok},{var,191,'Dir'}]},{type,191,tuple,[{atom,191,error},{var,191,'Reason'}]}]}]},[{type,192,constraint,[{atom,192,is_subtype},[{var,192,'Dir'},{user_type,192,filename,[]}]]},{type,193,constraint,[{atom,193,is_subtype},[{var,193,'Reason'},{user_type,193,posix,[]}]]}]]}]}}]}},{{function,get_cwd,1},[{file,[102,105,108,101,46,101,114,108]},{location,198}],[<<103,101,116,95,99,119,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,68,105,114,125>>]},<<32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,100,114,105,118,101,46>>]},{p,[],[{code,[],[<<68,114,105,118,101>>]},<<32,105,115,32,116,111,32,98,101,32,111,102,32,116,104,101,32,102,111,114,109,32,34>>,{code,[],[<<76,101,116,116,101,114>>]},{code,[],[<<58>>]},<<34,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,34,99,58,34,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,116,115,117,112,125>>]},<<32,111,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,104,97,118,101,32,110,111,32,99,111,110,99,101,112,116,32,111,102,32,99,117,114,114,101,110,116,32,100,114,105,118,101,32,40,85,110,105,120,44,32,102,111,114,32,101,120,97,109,112,108,101,41,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,104,97,115,32,110,111,32,99,111,110,99,101,112,116,32,111,102,32,100,114,105,118,101,115,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,114,105,118,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,111,114,109,97,116,32,111,102,32>>,{code,[],[<<68,114,105,118,101>>]},<<32,105,115,32,105,110,118,97,108,105,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,52,51>>,signature => [{attribute,198,spec,{{get_cwd,1},[{type,198,bounded_fun,[{type,198,'fun',[{type,198,product,[{var,198,'Drive'}]},{type,198,union,[{type,198,tuple,[{atom,198,ok},{var,198,'Dir'}]},{type,198,tuple,[{atom,198,error},{var,198,'Reason'}]}]}]},[{type,199,constraint,[{atom,199,is_subtype},[{var,199,'Drive'},{type,199,string,[]}]]},{type,200,constraint,[{atom,200,is_subtype},[{var,200,'Dir'},{user_type,200,filename,[]}]]},{type,201,constraint,[{atom,201,is_subtype},[{var,201,'Reason'},{type,201,union,[{user_type,201,posix,[]},{atom,201,badarg}]}]]}]]}]}}]}},{{function,list_dir,1},[{file,[102,105,108,101,46,101,114,108]},{location,401}],[<<108,105,115,116,95,100,105,114,47,49>>],#{<<101,110>> => [{p,[],[<<76,105,115,116,115,32,97,108,108,32,102,105,108,101,115,32,105,110,32,97,32,100,105,114,101,99,116,111,114,121,44,32>>,{em,[],[<<101,120,99,101,112,116>>]},<<32,102,105,108,101,115,32,119,105,116,104,32,114,97,119,32,102,105,108,101,110,97,109,101,115,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,115,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,110,97,109,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,116,104,101,32,102,105,108,101,115,32,105,110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,46,32,84,104,101,32,110,97,109,101,115,32,97,114,101,32,110,111,116,32,115,111,114,116,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32>>,{code,[],[<<68,105,114>>]},<<32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<123,110,111,95,116,114,97,110,115,108,97,116,105,111,110,44,32,70,105,108,101,110,97,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,32>>,{code,[],[<<98,105,110,97,114,121,40,41>>]},<<32,119,105,116,104,32,99,104,97,114,97,99,116,101,114,115,32,99,111,100,101,100,32,105,110,32,73,83,79,32,76,97,116,105,110,45,49,32,97,110,100,32,116,104,101,32,86,77,32,119,97,115,32,115,116,97,114,116,101,100,32,119,105,116,104,32,112,97,114,97,109,101,116,101,114,32>>,{code,[],[<<43,102,110,117,101>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,55,52>>,signature => [{attribute,401,spec,{{list_dir,1},[{type,401,bounded_fun,[{type,401,'fun',[{type,401,product,[{var,401,'Dir'}]},{type,401,union,[{type,401,tuple,[{atom,401,ok},{var,401,'Filenames'}]},{type,401,tuple,[{atom,401,error},{var,401,'Reason'}]}]}]},[{type,402,constraint,[{atom,402,is_subtype},[{var,402,'Dir'},{user_type,402,name_all,[]}]]},{type,403,constraint,[{atom,403,is_subtype},[{var,403,'Filenames'},{type,403,list,[{user_type,403,filename,[]}]}]]},{type,404,constraint,[{atom,404,is_subtype},[{var,404,'Reason'},{type,404,union,[{user_type,404,posix,[]},{atom,405,badarg},{type,406,tuple,[{atom,406,no_translation},{ann_type,406,[{var,406,'Filename'},{remote_type,406,[{atom,406,unicode},{atom,406,latin1_binary},[]]}]}]}]}]]}]]}]}}]}},{{function,list_dir_all,1},[{file,[102,105,108,101,46,101,114,108]},{location,411}],[<<108,105,115,116,95,100,105,114,95,97,108,108,47,49>>],#{<<101,110>> => [{p,[],[{a,[{id,<<108,105,115,116,95,100,105,114,95,97,108,108>>}],[]},<<76,105,115,116,115,32,97,108,108,32,116,104,101,32,102,105,108,101,115,32,105,110,32,97,32,100,105,114,101,99,116,111,114,121,44,32,105,110,99,108,117,100,105,110,103,32,102,105,108,101,115,32,119,105,116,104,32,114,97,119,32,102,105,108,101,110,97,109,101,115,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,115,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,110,97,109,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,116,104,101,32,102,105,108,101,115,32,105,110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,46,32,84,104,101,32,110,97,109,101,115,32,97,114,101,32,110,111,116,32,115,111,114,116,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32>>,{code,[],[<<68,105,114>>]},<<32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,48,53>>,signature => [{attribute,411,spec,{{list_dir_all,1},[{type,411,bounded_fun,[{type,411,'fun',[{type,411,product,[{var,411,'Dir'}]},{type,411,union,[{type,411,tuple,[{atom,411,ok},{var,411,'Filenames'}]},{type,411,tuple,[{atom,411,error},{var,411,'Reason'}]}]}]},[{type,412,constraint,[{atom,412,is_subtype},[{var,412,'Dir'},{user_type,412,name_all,[]}]]},{type,413,constraint,[{atom,413,is_subtype},[{var,413,'Filenames'},{type,413,list,[{user_type,413,filename_all,[]}]}]]},{type,414,constraint,[{atom,414,is_subtype},[{var,414,'Reason'},{type,414,union,[{user_type,414,posix,[]},{atom,414,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,make_dir,1},[{file,[102,105,108,101,46,101,114,108]},{location,249}],[<<109,97,107,101,95,100,105,114,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,99,114,101,97,116,101,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<68,105,114>>]},<<46,32,77,105,115,115,105,110,103,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,99,114,101,97,116,101,100,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,100,32>>,{code,[],[<<68,105,114>>]},<<32,101,120,105,115,116,115,32,97,108,114,101,97,100,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,99,101,32,105,115,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,51,48>>,signature => [{attribute,249,spec,{{make_dir,1},[{type,249,bounded_fun,[{type,249,'fun',[{type,249,product,[{var,249,'Dir'}]},{type,249,union,[{atom,249,ok},{type,249,tuple,[{atom,249,error},{var,249,'Reason'}]}]}]},[{type,250,constraint,[{atom,250,is_subtype},[{var,250,'Dir'},{user_type,250,name_all,[]}]]},{type,251,constraint,[{atom,251,is_subtype},[{var,251,'Reason'},{type,251,union,[{user_type,251,posix,[]},{atom,251,badarg}]}]]}]]}]}}]}},{{function,make_link,2},[{file,[102,105,108,101,46,101,114,108]},{location,427}],[<<109,97,107,101,95,108,105,110,107,47,50>>],#{<<101,110>> => [{p,[],[<<77,97,107,101,115,32,97,32,104,97,114,100,32,108,105,110,107,32,102,114,111,109,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,116,111,32>>,{code,[],[<<78,101,119>>]},<<32,111,110,32,112,108,97,116,102,111,114,109,115,32,115,117,112,112,111,114,116,105,110,103,32,108,105,110,107,115,32,40,85,110,105,120,32,97,110,100,32,87,105,110,100,111,119,115,41,46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,116,104,101,32,108,105,110,107,32,119,97,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,114,101,97,116,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,110,111,116,32,115,117,112,112,111,114,116,105,110,103,32,108,105,110,107,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,101,110,111,116,115,117,112,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,111,114,32>>,{code,[],[<<78,101,119>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[{code,[],[<<78,101,119>>]},<<32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<72,97,114,100,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,54,52>>,signature => [{attribute,427,spec,{{make_link,2},[{type,427,bounded_fun,[{type,427,'fun',[{type,427,product,[{var,427,'Existing'},{var,427,'New'}]},{type,427,union,[{atom,427,ok},{type,427,tuple,[{atom,427,error},{var,427,'Reason'}]}]}]},[{type,428,constraint,[{atom,428,is_subtype},[{var,428,'Existing'},{user_type,428,name_all,[]}]]},{type,429,constraint,[{atom,429,is_subtype},[{var,429,'New'},{user_type,429,name_all,[]}]]},{type,430,constraint,[{atom,430,is_subtype},[{var,430,'Reason'},{type,430,union,[{user_type,430,posix,[]},{atom,430,badarg}]}]]}]]}]}}]}},{{function,make_symlink,2},[{file,[102,105,108,101,46,101,114,108]},{location,435}],[<<109,97,107,101,95,115,121,109,108,105,110,107,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32>>,{code,[],[<<78,101,119>>]},<<32,116,111,32,116,104,101,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,111,110,32,112,108,97,116,102,111,114,109,115,32,115,117,112,112,111,114,116,105,110,103,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,32,40,109,111,115,116,32,85,110,105,120,32,115,121,115,116,101,109,115,32,97,110,100,32,87,105,110,100,111,119,115,44,32,98,101,103,105,110,110,105,110,103,32,119,105,116,104,32,86,105,115,116,97,41,46,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,116,104,101,32,108,105,110,107,32,105,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,114,101,97,116,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,110,111,116,32,115,117,112,112,111,114,116,105,110,103,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,116,115,117,112,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,111,114,32>>,{code,[],[<<78,101,119>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[{code,[],[<<78,101,119>>]},<<32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]},{dt,[],[{code,[],[<<101,112,101,114,109>>]}]},{dd,[],[{p,[],[<<85,115,101,114,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,112,114,105,118,105,108,101,103,101,115,32,116,111,32,99,114,101,97,116,101,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,32,40>>,{code,[],[<<83,101,67,114,101,97,116,101,83,121,109,98,111,108,105,99,76,105,110,107,80,114,105,118,105,108,101,103,101>>]},<<32,111,110,32,87,105,110,100,111,119,115,41,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,57,51>>,signature => [{attribute,435,spec,{{make_symlink,2},[{type,435,bounded_fun,[{type,435,'fun',[{type,435,product,[{var,435,'Existing'},{var,435,'New'}]},{type,435,union,[{atom,435,ok},{type,435,tuple,[{atom,435,error},{var,435,'Reason'}]}]}]},[{type,436,constraint,[{atom,436,is_subtype},[{var,436,'Existing'},{user_type,436,name_all,[]}]]},{type,437,constraint,[{atom,437,is_subtype},[{var,437,'New'},{user_type,437,name_all,[]}]]},{type,438,constraint,[{atom,438,is_subtype},[{var,438,'Reason'},{type,438,union,[{user_type,438,posix,[]},{atom,438,badarg}]}]]}]]}]}}]}},{{function,native_name_encoding,0},[{file,[102,105,108,101,46,101,114,108]},{location,135}],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>],#{<<101,110>> => [{p,[],[{a,[{id,<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103>>}],[]},<<82,101,116,117,114,110,115,32,116,104,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,109,111,100,101,46,32,73,102,32,105,116,32,105,115,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,116,104,101,32,115,121,115,116,101,109,32,116,114,97,110,115,108,97,116,101,115,32,110,111,32,102,105,108,101,110,97,109,101,115,46,32,73,102,32,105,116,32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<44,32,102,105,108,101,110,97,109,101,115,32,97,114,101,32,99,111,110,118,101,114,116,101,100,32,98,97,99,107,32,97,110,100,32,102,111,114,116,104,32,116,111,32,116,104,101,32,110,97,116,105,118,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,40,117,115,117,97,108,108,121,32,85,84,70,45,56,44,32,98,117,116,32,85,84,70,45,49,54,32,111,110,32,87,105,110,100,111,119,115,41,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,55,50,57>>,signature => [{attribute,135,spec,{{native_name_encoding,0},[{type,135,'fun',[{type,135,product,[]},{type,135,union,[{atom,135,latin1},{atom,135,utf8}]}]}]}}],since => <<79,84,80,32,82,49,52,66,48,49>>}},{{function,open,2},[{file,[102,105,108,101,46,101,114,108]},{location,510}],[<<111,112,101,110,47,50>>],#{<<101,110>> => [{p,[],[<<79,112,101,110,115,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101>>]},<<32,105,110,32,116,104,101,32,109,111,100,101,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32>>,{code,[],[<<77,111,100,101,115>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,99,111,110,116,97,105,110,32,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<114,101,97,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,44,32,119,104,105,99,104,32,109,117,115,116,32,101,120,105,115,116,44,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,114,101,97,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<119,114,105,116,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46,32,73,116,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,73,102,32,116,104,101,32,102,105,108,101,32,101,120,105,115,116,115,32,97,110,100,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,105,115,32,110,111,116,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{code,[],[<<114,101,97,100>>]},<<44,32,116,104,101,32,102,105,108,101,32,105,115,32,116,114,117,110,99,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<97,112,112,101,110,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46,32,73,116,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,69,118,101,114,121,32,119,114,105,116,101,32,111,112,101,114,97,116,105,111,110,32,116,111,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<97,112,112,101,110,100>>]},<<32,116,97,107,101,115,32,112,108,97,99,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<101,120,99,108,117,115,105,118,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46,32,73,116,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,73,102,32,116,104,101,32,102,105,108,101,32,101,120,105,115,116,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,101,120,105,115,116,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,100,111,101,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101,32,101,120,99,108,117,115,105,118,101,110,101,115,115,32,111,110,32,102,105,108,101,32,115,121,115,116,101,109,115,32,110,111,116,32,115,117,112,112,111,114,116,105,110,103,32>>,{code,[],[<<79,95,69,88,67,76>>]},<<32,112,114,111,112,101,114,108,121,44,32,115,117,99,104,32,97,115,32,78,70,83,46,32,68,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,115,117,112,112,111,114,116,115,32,105,116,32,40,105,110,32,103,101,110,101,114,97,108,44,32,108,111,99,97,108,32,102,105,108,101,32,115,121,115,116,101,109,115,32,97,114,101,32,115,97,102,101,41,46>>]}]}]},{dt,[],[{code,[],[<<114,97,119>>]}]},{dd,[],[{p,[],[{a,[{id,<<114,97,119>>}],[]},<<65,108,108,111,119,115,32,102,97,115,116,101,114,32,97,99,99,101,115,115,32,116,111,32,97,32,102,105,108,101,44,32,97,115,32,110,111,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,101,101,100,101,100,32,116,111,32,104,97,110,100,108,101,32,116,104,101,32,102,105,108,101,46,32,72,111,119,101,118,101,114,44,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32,116,104,105,115,32,119,97,121,32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,109,105,116,97,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32>>,{code,[],[<<105,111>>]},<<32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,44,32,97,115,32,116,104,101,121,32,99,97,110,32,111,110,108,121,32,116,97,108,107,32,116,111,32,97,110,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,46,32,73,110,115,116,101,97,100,44,32,117,115,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<46>>]}]},{li,[],[{p,[],[<<69,115,112,101,99,105,97,108,108,121,32,105,102,32>>,{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]},<<32,105,115,32,116,111,32,98,101,32,117,115,101,100,32,111,110,32,97,32>>,{code,[],[<<114,97,119>>]},<<32,102,105,108,101,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,99,111,109,98,105,110,101,32,116,104,105,115,32,111,112,116,105,111,110,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,97,115,32,108,105,110,101,45,111,114,105,101,110,116,101,100,32,73,47,79,32,105,115,32,105,110,101,102,102,105,99,105,101,110,116,32,119,105,116,104,111,117,116,32,98,117,102,102,101,114,105,110,103,46>>]}]},{li,[],[{p,[],[<<79,110,108,121,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,116,104,97,116,32,111,112,101,110,101,100,32,116,104,101,32,102,105,108,101,32,99,97,110,32,117,115,101,32,105,116,46>>]}]},{li,[],[{p,[],[<<65,32,114,101,109,111,116,101,32,69,114,108,97,110,103,32,102,105,108,101,32,115,101,114,118,101,114,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,46,32,84,104,101,32,99,111,109,112,117,116,101,114,32,111,110,32,119,104,105,99,104,32,116,104,101,32,69,114,108,97,110,103,32,110,111,100,101,32,105,115,32,114,117,110,110,105,110,103,32,109,117,115,116,32,104,97,118,101,32,97,99,99,101,115,115,32,116,111,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,40,100,105,114,101,99,116,108,121,32,111,114,32,116,104,114,111,117,103,104,32,78,70,83,41,46>>]}]}]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,111,112,101,114,97,116,105,111,110,115,32,111,110,32,116,104,101,32,102,105,108,101,32,114,101,116,117,114,110,32,98,105,110,97,114,105,101,115,32,114,97,116,104,101,114,32,116,104,97,110,32,108,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<123,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,83,105,122,101,44,32,68,101,108,97,121,125>>]}]},{dd,[],[{p,[],[<<68,97,116,97,32,105,110,32,115,117,98,115,101,113,117,101,110,116,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,32,105,115,32,98,117,102,102,101,114,101,100,32,117,110,116,105,108,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,32,97,114,101,32,98,117,102,102,101,114,101,100,44,32,111,114,32,117,110,116,105,108,32,116,104,101,32,111,108,100,101,115,116,32,98,117,102,102,101,114,101,100,32,100,97,116,97,32,105,115,32>>,{code,[],[<<68,101,108,97,121>>]},<<32,109,105,108,108,105,115,101,99,111,110,100,115,32,111,108,100,46,32,84,104,101,110,32,97,108,108,32,98,117,102,102,101,114,101,100,32,100,97,116,97,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,46,32,84,104,101,32,98,117,102,102,101,114,101,100,32,100,97,116,97,32,105,115,32,97,108,115,111,32,102,108,117,115,104,101,100,32,98,101,102,111,114,101,32,115,111,109,101,32,111,116,104,101,114,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,32,116,104,97,110,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,105,115,32,101,120,101,99,117,116,101,100,46>>]},{p,[],[<<84,104,101,32,112,117,114,112,111,115,101,32,111,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,116,111,32,105,110,99,114,101,97,115,101,32,112,101,114,102,111,114,109,97,110,99,101,32,98,121,32,114,101,100,117,99,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,115,46,32,84,104,117,115,44,32,116,104,101,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,32,109,117,115,116,32,98,101,32,102,111,114,32,115,105,122,101,115,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<44,32,97,110,100,32,110,111,116,32,105,110,116,101,114,115,112,101,114,115,101,100,32,98,121,32,116,111,111,32,109,97,110,121,32,111,116,104,101,114,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,46>>]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,117,115,101,100,44,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,32,99,97,110,32,112,114,101,109,97,116,117,114,101,108,121,32,98,101,32,114,101,112,111,114,116,101,100,32,97,115,32,115,117,99,99,101,115,115,102,117,108,44,32,97,110,100,32,105,102,32,97,32,119,114,105,116,101,32,101,114,114,111,114,32,111,99,99,117,114,115,44,32,116,104,101,32,101,114,114,111,114,32,105,115,32,114,101,112,111,114,116,101,100,32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,110,101,120,116,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,110,111,116,32,101,120,101,99,117,116,101,100,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32>>,{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]},<<32,105,115,32,117,115,101,100,44,32,97,102,116,101,114,32,97,32,110,117,109,98,101,114,32,111,102,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,44,32>>,{code,[],[<<99,108,111,115,101,47,49>>]},<<32,99,97,110,32,114,101,116,117,114,110,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,115,112,99,125>>]},<<44,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,111,110,32,116,104,101,32,100,105,115,99,32,102,111,114,32,112,114,101,118,105,111,117,115,108,121,32,119,114,105,116,116,101,110,32,100,97,116,97,46,32>>,{code,[],[<<99,108,111,115,101,47,49>>]},<<32,109,117,115,116,32,112,114,111,98,97,98,108,121,32,98,101,32,99,97,108,108,101,100,32,97,103,97,105,110,44,32,97,115,32,116,104,101,32,102,105,108,101,32,105,115,32,115,116,105,108,108,32,111,112,101,110,46>>]}]},{dt,[],[{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<123,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,83,105,122,101,44,32,68,101,108,97,121,125>>]},<<32,119,105,116,104,32,114,101,97,115,111,110,97,98,108,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<83,105,122,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,108,97,121>>]},<<32,40,114,111,117,103,104,108,121,32,115,111,109,101,32,54,52,32,75,66,44,32,50,32,115,101,99,111,110,100,115,41,46>>]}]},{dt,[],[{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<65,99,116,105,118,97,116,101,115,32,114,101,97,100,32,100,97,116,97,32,98,117,102,102,101,114,105,110,103,46,32,73,102,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,99,97,108,108,115,32,97,114,101,32,102,111,114,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,44,32,114,101,97,100,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,97,114,101,32,115,116,105,108,108,32,112,101,114,102,111,114,109,101,100,32,102,111,114,32,98,108,111,99,107,115,32,111,102,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,46,32,84,104,101,32,101,120,116,114,97,32,100,97,116,97,32,105,115,32,98,117,102,102,101,114,101,100,32,97,110,100,32,114,101,116,117,114,110,101,100,32,105,110,32,115,117,98,115,101,113,117,101,110,116,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,99,97,108,108,115,44,32,103,105,118,105,110,103,32,97,32,112,101,114,102,111,114,109,97,110,99,101,32,103,97,105,110,32,97,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,115,32,105,115,32,114,101,100,117,99,101,100,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<114,101,97,100,95,97,104,101,97,100>>]},<<32,98,117,102,102,101,114,32,105,115,32,97,108,115,111,32,104,105,103,104,108,121,32,117,115,101,100,32,98,121,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]},<<32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,44,32,116,104,101,114,101,102,111,114,101,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,40,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,114,101,97,115,111,110,115,41,32,119,104,101,110,32,97,99,99,101,115,115,105,110,103,32,114,97,119,32,102,105,108,101,115,32,117,115,105,110,103,32,116,104,97,116,32,102,117,110,99,116,105,111,110,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,99,97,108,108,115,32,97,114,101,32,102,111,114,32,115,105,122,101,115,32,110,111,116,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,108,101,115,115,32,116,104,97,110,44,32,111,114,32,101,118,101,110,32,103,114,101,97,116,101,114,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,44,32,110,111,32,112,101,114,102,111,114,109,97,110,99,101,32,103,97,105,110,32,99,97,110,32,98,101,32,101,120,112,101,99,116,101,100,46>>]}]},{dt,[],[{code,[],[<<114,101,97,100,95,97,104,101,97,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,119,105,116,104,32,97,32,114,101,97,115,111,110,97,98,108,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<83,105,122,101>>]},<<32,40,114,111,117,103,104,108,121,32,115,111,109,101,32,54,52,32,75,66,41,46>>]}]},{dt,[],[{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,103,122,105,112,32,99,111,109,112,114,101,115,115,101,100,32,102,105,108,101,115,46,32,79,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,109,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{code,[],[<<114,101,97,100>>]},<<32,111,114,32>>,{code,[],[<<119,114,105,116,101>>]},<<44,32,98,117,116,32,110,111,116,32,98,111,116,104,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,115,105,122,101,32,111,98,116,97,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>]}]},<<32,100,111,101,115,32,112,114,111,98,97,98,108,121,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,97,100,32,102,114,111,109,32,97,32,99,111,109,112,114,101,115,115,101,100,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,110,99,111,100,105,110,103,44,32,69,110,99,111,100,105,110,103,125>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,116,104,101,32,102,105,108,101,32,112,101,114,102,111,114,109,32,97,117,116,111,109,97,116,105,99,32,116,114,97,110,115,108,97,116,105,111,110,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,111,32,97,110,100,32,102,114,111,109,32,97,32,115,112,101,99,105,102,105,99,32,40,85,110,105,99,111,100,101,41,32,101,110,99,111,100,105,110,103,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,100,97,116,97,32,115,117,112,112,108,105,101,100,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<32,111,114,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,115,116,105,108,108,32,105,115,32,98,121,116,101,45,111,114,105,101,110,116,101,100,59,32,116,104,105,115,32,111,112,116,105,111,110,32,100,101,110,111,116,101,115,32,111,110,108,121,32,104,111,119,32,100,97,116,97,32,105,115,32,115,116,111,114,101,100,32,105,110,32,116,104,101,32,100,105,115,107,32,102,105,108,101,46>>]},{p,[],[<<68,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,101,110,99,111,100,105,110,103,44,32,100,105,102,102,101,114,101,110,116,32,109,101,116,104,111,100,115,32,111,102,32,114,101,97,100,105,110,103,32,97,110,100,32,119,114,105,116,105,110,103,32,100,97,116,97,32,105,115,32,112,114,101,102,101,114,114,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,105,109,112,108,105,101,115,32,117,115,105,110,103,32,116,104,105,115,32,109,111,100,117,108,101,32,40>>,{code,[],[<<102,105,108,101>>]},<<41,32,102,111,114,32,114,101,97,100,105,110,103,32,97,110,100,32,119,114,105,116,105,110,103,32,100,97,116,97,32,97,115,32,116,104,101,32,105,110,116,101,114,102,97,99,101,115,32,112,114,111,118,105,100,101,100,32,104,101,114,101,32,119,111,114,107,32,119,105,116,104,32,98,121,116,101,45,111,114,105,101,110,116,101,100,32,100,97,116,97,46,32,85,115,105,110,103,32,111,116,104,101,114,32,40,85,110,105,99,111,100,101,41,32,101,110,99,111,100,105,110,103,115,32,109,97,107,101,115,32,116,104,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,102,117,110,99,116,105,111,110,115,32>>,{code,[],[<<103,101,116,95,99,104,97,114,115>>]},<<44,32>>,{code,[],[<<103,101,116,95,108,105,110,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<112,117,116,95,99,104,97,114,115>>]},<<32,109,111,114,101,32,115,117,105,116,97,98,108,101,44,32,97,115,32,116,104,101,121,32,99,97,110,32,119,111,114,107,32,119,105,116,104,32,116,104,101,32,102,117,108,108,32,85,110,105,99,111,100,101,32,114,97,110,103,101,46>>]},{p,[],[<<73,102,32,100,97,116,97,32,105,115,32,115,101,110,116,32,116,111,32,97,110,32>>,{code,[],[<<105,111,95,100,101,118,105,99,101,40,41>>]},<<32,105,110,32,97,32,102,111,114,109,97,116,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,99,111,110,118,101,114,116,101,100,32,116,111,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,101,110,99,111,100,105,110,103,44,32,111,114,32,105,102,32,100,97,116,97,32,105,115,32,114,101,97,100,32,98,121,32,97,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,114,101,116,117,114,110,115,32,100,97,116,97,32,105,110,32,97,32,102,111,114,109,97,116,32,116,104,97,116,32,99,97,110,110,111,116,32,99,111,112,101,32,119,105,116,104,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,114,97,110,103,101,32,111,102,32,116,104,101,32,100,97,116,97,44,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,32,97,110,100,32,116,104,101,32,102,105,108,101,32,105,115,32,99,108,111,115,101,100,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<108,97,116,105,110,49>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,101,110,99,111,100,105,110,103,46,32,66,121,116,101,115,32,115,117,112,112,108,105,101,100,32,116,111,32,116,104,101,32,102,105,108,101,44,32,116,104,97,116,32,105,115,44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<32,97,114,101,32,119,114,105,116,116,101,110,32,34,97,115,32,105,115,34,32,111,110,32,116,104,101,32,102,105,108,101,46,32,76,105,107,101,119,105,115,101,44,32,98,121,116,101,115,32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,44,32,116,104,97,116,32,105,115,44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,97,114,101,32,114,101,116,117,114,110,101,100,32,34,97,115,32,105,115,34,46,32,73,102,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,105,115,32,117,115,101,100,32,102,111,114,32,119,114,105,116,105,110,103,44,32,116,104,101,32,102,105,108,101,32,99,97,110,32,111,110,108,121,32,99,111,112,101,32,119,105,116,104,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,117,112,32,116,111,32,99,111,100,101,32,112,111,105,110,116,32,50,53,53,32,40,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,114,97,110,103,101,41,46>>]}]},{dt,[],[{code,[],[<<117,110,105,99,111,100,101,32,111,114,32,117,116,102,56>>]}]},{dd,[],[{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,97,114,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,97,110,100,32,102,114,111,109,32,85,84,70,45,56,32,101,110,99,111,100,105,110,103,32,98,101,102,111,114,101,32,116,104,101,121,32,97,114,101,32,119,114,105,116,116,101,110,32,116,111,32,111,114,32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46,32,65,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32,116,104,105,115,32,119,97,121,32,99,97,110,32,98,101,32,114,101,97,100,97,98,108,101,32,117,115,105,110,103,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<44,32,97,115,32,108,111,110,103,32,97,115,32,110,111,32,100,97,116,97,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,102,105,108,101,32,108,105,101,115,32,98,101,121,111,110,100,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,114,97,110,103,101,32,40,48,46,46,50,53,53,41,44,32,98,117,116,32,102,97,105,108,117,114,101,32,111,99,99,117,114,115,32,105,102,32,116,104,101,32,100,97,116,97,32,99,111,110,116,97,105,110,115,32,85,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,115,32,98,101,121,111,110,100,32,116,104,97,116,32,114,97,110,103,101,46,32,84,104,101,32,102,105,108,101,32,105,115,32,98,101,115,116,32,114,101,97,100,32,119,105,116,104,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32,85,110,105,99,111,100,101,32,97,119,97,114,101,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<46>>]},{p,[],[<<66,121,116,101,115,32,119,114,105,116,116,101,110,32,116,111,32,116,104,101,32,102,105,108,101,32,98,121,32,97,110,121,32,109,101,97,110,115,32,97,114,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,85,84,70,45,56,32,101,110,99,111,100,105,110,103,32,98,101,102,111,114,101,32,98,101,105,110,103,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,100,105,115,107,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<117,116,102,49,54,32,111,114,32,123,117,116,102,49,54,44,98,105,103,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,98,105,103,32,101,110,100,105,97,110,32,85,84,70,45,49,54,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]},{dt,[],[{code,[],[<<123,117,116,102,49,54,44,108,105,116,116,108,101,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,85,84,70,45,49,54,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]},{dt,[],[{code,[],[<<117,116,102,51,50,32,111,114,32,123,117,116,102,51,50,44,98,105,103,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,98,105,103,32,101,110,100,105,97,110,32,85,84,70,45,51,50,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]},{dt,[],[{code,[],[<<123,117,116,102,51,50,44,108,105,116,116,108,101,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,85,84,70,45,51,50,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]}]},{p,[],[<<84,104,101,32,69,110,99,111,100,105,110,103,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,102,111,114,32,97,32,102,105,108,101,32,34,111,110,32,116,104,101,32,102,108,121,34,32,98,121,32,117,115,105,110,103,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111,35,115,101,116,111,112,116,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,111,58,115,101,116,111,112,116,115,47,50>>]}]},<<46,32,83,111,32,97,32,102,105,108,101,32,99,97,110,32,98,101,32,97,110,97,108,121,122,101,100,32,105,110,32,108,97,116,105,110,49,32,101,110,99,111,100,105,110,103,32,102,111,114,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,66,79,77,44,32,112,111,115,105,116,105,111,110,101,100,32,98,101,121,111,110,100,32,116,104,101,32,66,79,77,32,97,110,100,32,116,104,101,110,32,98,101,32,115,101,116,32,102,111,114,32,116,104,101,32,114,105,103,104,116,32,101,110,99,111,100,105,110,103,32,98,101,102,111,114,101,32,102,117,114,116,104,101,114,32,114,101,97,100,105,110,103,46,32,70,111,114,32,102,117,110,99,116,105,111,110,115,32,105,100,101,110,116,105,102,121,105,110,103,32,66,79,77,115,44,32,115,101,101,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,117,110,105,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,105,99,111,100,101,40,51,41>>]}]},<<46>>]},{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,102,105,108,101,115,46>>]}]},{dt,[],[{code,[],[<<114,97,109>>]}]},{dd,[],[{p,[],[{code,[],[<<70,105,108,101>>]},<<32,109,117,115,116,32,98,101,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<46,32,82,101,116,117,114,110,115,32,97,110,32>>,{code,[],[<<102,100,40,41>>]},<<44,32,119,104,105,99,104,32,108,101,116,115,32,109,111,100,117,108,101,32>>,{code,[],[<<102,105,108,101>>]},<<32,111,112,101,114,97,116,101,32,111,110,32,116,104,101,32,100,97,116,97,32,105,110,45,109,101,109,111,114,121,32,97,115,32,105,102,32,105,116,32,105,115,32,97,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<115,121,110,99>>]}]},{dd,[],[{p,[],[<<79,110,32,112,108,97,116,102,111,114,109,115,32,115,117,112,112,111,114,116,105,110,103,32,105,116,44,32,101,110,97,98,108,101,115,32,116,104,101,32,80,79,83,73,88,32>>,{code,[],[<<79,95,83,89,78,67>>]},<<32,115,121,110,99,104,114,111,110,111,117,115,32,73,47,79,32,102,108,97,103,32,111,114,32,105,116,115,32,112,108,97,116,102,111,114,109,45,100,101,112,101,110,100,101,110,116,32,101,113,117,105,118,97,108,101,110,116,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<70,73,76,69,95,70,76,65,71,95,87,82,73,84,69,95,84,72,82,79,85,71,72>>]},<<32,111,110,32,87,105,110,100,111,119,115,41,32,115,111,32,116,104,97,116,32,119,114,105,116,101,115,32,116,111,32,116,104,101,32,102,105,108,101,32,98,108,111,99,107,32,117,110,116,105,108,32,116,104,101,32,100,97,116,97,32,105,115,32,112,104,121,115,105,99,97,108,108,121,32,119,114,105,116,116,101,110,32,116,111,32,100,105,115,107,46,32,72,111,119,101,118,101,114,44,32,98,101,32,97,119,97,114,101,32,116,104,97,116,32,116,104,101,32,101,120,97,99,116,32,115,101,109,97,110,116,105,99,115,32,111,102,32,116,104,105,115,32,102,108,97,103,32,100,105,102,102,101,114,32,102,114,111,109,32,112,108,97,116,102,111,114,109,32,116,111,32,112,108,97,116,102,111,114,109,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,110,111,110,101,32,111,102,32,76,105,110,117,120,32,111,114,32,87,105,110,100,111,119,115,32,103,117,97,114,97,110,116,101,101,115,32,116,104,97,116,32,97,108,108,32,102,105,108,101,32,109,101,116,97,100,97,116,97,32,97,114,101,32,97,108,115,111,32,119,114,105,116,116,101,110,32,98,101,102,111,114,101,32,116,104,101,32,99,97,108,108,32,114,101,116,117,114,110,115,46,32,70,111,114,32,112,114,101,99,105,115,101,32,115,101,109,97,110,116,105,99,115,44,32,99,104,101,99,107,32,116,104,101,32,100,101,116,97,105,108,115,32,111,102,32,121,111,117,114,32,112,108,97,116,102,111,114,109,32,100,111,99,117,109,101,110,116,97,116,105,111,110,46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,119,105,116,104,32,110,111,32,115,117,112,112,111,114,116,32,102,111,114,32,80,79,83,73,88,32>>,{code,[],[<<79,95,83,89,78,67>>]},<<32,111,114,32,101,113,117,105,118,97,108,101,110,116,44,32,117,115,101,32,111,102,32,116,104,101,32>>,{code,[],[<<115,121,110,99>>]},<<32,102,108,97,103,32,99,97,117,115,101,115,32>>,{code,[],[<<111,112,101,110>>]},<<32,116,111,32,114,101,116,117,114,110,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,116,115,117,112,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<100,105,114,101,99,116,111,114,121>>]}]},{dd,[],[{p,[],[<<65,108,108,111,119,115,32>>,{code,[],[<<111,112,101,110>>]},<<32,116,111,32,119,111,114,107,32,111,110,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]}]},{p,[],[<<82,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,73,111,68,101,118,105,99,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,105,110,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,109,111,100,101,46,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,111,112,101,110,101,100,46>>]}]}]},{p,[],[{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,105,115,32,114,101,97,108,108,121,32,116,104,101,32,112,105,100,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,110,100,108,101,115,32,116,104,101,32,102,105,108,101,46,32,84,104,105,115,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,111,114,105,103,105,110,97,108,108,121,32,111,112,101,110,101,100,32,116,104,101,32,102,105,108,101,32,40,116,104,101,32,111,119,110,101,114,32,112,114,111,99,101,115,115,41,46,32,73,102,32,116,104,101,32,111,119,110,101,114,32,112,114,111,99,101,115,115,32,116,101,114,109,105,110,97,116,101,115,44,32,116,104,101,32,102,105,108,101,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,105,116,115,101,108,102,32,116,101,114,109,105,110,97,116,101,115,32,116,111,111,46,32,65,110,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,114,101,116,117,114,110,101,100,32,102,114,111,109,32,116,104,105,115,32,99,97,108,108,32,99,97,110,32,98,101,32,117,115,101,100,32,97,115,32,97,110,32,97,114,103,117,109,101,110,116,32,116,111,32,116,104,101,32,73,47,79,32,102,117,110,99,116,105,111,110,115,32,40,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<41,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,110,32,112,114,101,118,105,111,117,115,32,118,101,114,115,105,111,110,115,32,111,102,32>>,{code,[],[<<102,105,108,101>>]},<<44,32,109,111,100,101,115,32,119,101,114,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,111,110,101,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<114,101,97,100>>]},<<44,32>>,{code,[],[<<119,114,105,116,101>>]},<<44,32,111,114,32>>,{code,[],[<<114,101,97,100,95,119,114,105,116,101>>]},<<32,105,110,115,116,101,97,100,32,111,102,32,97,32,108,105,115,116,46,32,84,104,105,115,32,105,115,32,115,116,105,108,108,32,97,108,108,111,119,101,100,32,102,111,114,32,114,101,97,115,111,110,115,32,111,102,32,98,97,99,107,119,97,114,100,115,32,99,111,109,112,97,116,105,98,105,108,105,116,121,44,32,98,117,116,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,102,111,114,32,110,101,119,32,99,111,100,101,46,32,65,108,115,111,32,110,111,116,101,32,116,104,97,116,32>>,{code,[],[<<114,101,97,100,95,119,114,105,116,101>>]},<<32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,97,32,109,111,100,101,32,108,105,115,116,46>>]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,114,101,97,100,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,115,101,97,114,99,104,105,110,103,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,97,109,101,100,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,44,32,111,114,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,116,115,101,108,102,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,32,105,102,32>>,{code,[],[<<100,105,114,101,99,116,111,114,121>>]},<<32,109,111,100,101,32,119,97,115,32,115,112,101,99,105,102,105,101,100,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<84,104,101,114,101,32,105,115,32,110,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,32,40,105,102,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,97,99,99,101,115,115,32,119,97,115,32,115,112,101,99,105,102,105,101,100,41,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,55,52,49>>,signature => [{attribute,510,spec,{{open,2},[{type,510,bounded_fun,[{type,510,'fun',[{type,510,product,[{var,510,'File'},{var,510,'Modes'}]},{type,510,union,[{type,510,tuple,[{atom,510,ok},{var,510,'IoDevice'}]},{type,510,tuple,[{atom,510,error},{var,510,'Reason'}]}]}]},[{type,511,constraint,[{atom,511,is_subtype},[{var,511,'File'},{type,511,union,[{var,511,'Filename'},{type,511,iodata,[]}]}]]},{type,512,constraint,[{atom,512,is_subtype},[{var,512,'Filename'},{user_type,512,name_all,[]}]]},{type,513,constraint,[{atom,513,is_subtype},[{var,513,'Modes'},{type,513,list,[{type,513,union,[{user_type,513,mode,[]},{atom,513,ram},{atom,513,directory}]}]}]]},{type,514,constraint,[{atom,514,is_subtype},[{var,514,'IoDevice'},{user_type,514,io_device,[]}]]},{type,515,constraint,[{atom,515,is_subtype},[{var,515,'Reason'},{type,515,union,[{user_type,515,posix,[]},{atom,515,badarg},{atom,515,system_limit}]}]]}]]}]}}]}},{{function,path_consult,2},[{file,[102,105,108,101,46,101,114,108]},{location,1041}],[<<112,97,116,104,95,99,111,110,115,117,108,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,114,101,97,100,115,32,69,114,108,97,110,103,32,116,101,114,109,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,84,101,114,109,115,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,114,101,97,100,46,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,116,101,114,109,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,48,50,57>>,signature => [{attribute,1041,spec,{{path_consult,2},[{type,1041,bounded_fun,[{type,1041,'fun',[{type,1041,product,[{var,1041,'Path'},{var,1041,'Filename'}]},{type,1041,union,[{type,1041,tuple,[{atom,1041,ok},{var,1041,'Terms'},{var,1041,'FullName'}]},{type,1041,tuple,[{atom,1041,error},{var,1041,'Reason'}]}]}]},[{type,1042,constraint,[{atom,1042,is_subtype},[{var,1042,'Path'},{type,1042,list,[{var,1042,'Dir'}]}]]},{type,1043,constraint,[{atom,1043,is_subtype},[{var,1043,'Dir'},{user_type,1043,name_all,[]}]]},{type,1044,constraint,[{atom,1044,is_subtype},[{var,1044,'Filename'},{user_type,1044,name_all,[]}]]},{type,1045,constraint,[{atom,1045,is_subtype},[{var,1045,'Terms'},{type,1045,list,[{type,1045,term,[]}]}]]},{type,1046,constraint,[{atom,1046,is_subtype},[{var,1046,'FullName'},{user_type,1046,filename_all,[]}]]},{type,1047,constraint,[{atom,1047,is_subtype},[{var,1047,'Reason'},{type,1047,union,[{user_type,1047,posix,[]},{atom,1047,badarg},{atom,1047,terminated},{atom,1047,system_limit},{type,1048,tuple,[{ann_type,1048,[{var,1048,'Line'},{type,1048,integer,[]}]},{ann_type,1048,[{var,1048,'Mod'},{type,1048,module,[]}]},{ann_type,1048,[{var,1048,'Term'},{type,1048,term,[]}]}]}]}]]}]]}]}}]}},{{function,path_eval,2},[{file,[102,105,108,101,46,101,114,108]},{location,1089}],[<<112,97,116,104,95,101,118,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,114,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46,32,84,104,101,32,114,101,115,117,108,116,32,111,102,32,101,118,97,108,117,97,116,105,111,110,32,105,115,32,110,111,116,32,114,101,116,117,114,110,101,100,59,32,97,110,121,32,101,120,112,114,101,115,115,105,111,110,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,102,105,108,101,32,109,117,115,116,32,98,101,32,116,104,101,114,101,32,102,111,114,32,105,116,115,32,115,105,100,101,32,101,102,102,101,99,116,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,48,55,49>>,signature => [{attribute,1089,spec,{{path_eval,2},[{type,1089,bounded_fun,[{type,1089,'fun',[{type,1089,product,[{var,1089,'Path'},{var,1089,'Filename'}]},{type,1089,union,[{type,1089,tuple,[{atom,1089,ok},{var,1089,'FullName'}]},{type,1089,tuple,[{atom,1089,error},{var,1089,'Reason'}]}]}]},[{type,1090,constraint,[{atom,1090,is_subtype},[{var,1090,'Path'},{type,1090,list,[{ann_type,1090,[{var,1090,'Dir'},{user_type,1090,name_all,[]}]}]}]]},{type,1091,constraint,[{atom,1091,is_subtype},[{var,1091,'Filename'},{user_type,1091,name_all,[]}]]},{type,1092,constraint,[{atom,1092,is_subtype},[{var,1092,'FullName'},{user_type,1092,filename_all,[]}]]},{type,1093,constraint,[{atom,1093,is_subtype},[{var,1093,'Reason'},{type,1093,union,[{user_type,1093,posix,[]},{atom,1093,badarg},{atom,1093,terminated},{atom,1093,system_limit},{type,1094,tuple,[{ann_type,1094,[{var,1094,'Line'},{type,1094,integer,[]}]},{ann_type,1094,[{var,1094,'Mod'},{type,1094,module,[]}]},{ann_type,1094,[{var,1094,'Term'},{type,1094,term,[]}]}]}]}]]}]]}]}}]}},{{function,path_open,3},[{file,[102,105,108,101,46,101,114,108]},{location,1194}],[<<112,97,116,104,95,111,112,101,110,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,111,112,101,110,115,32,116,104,101,32,102,105,108,101,32,105,110,32,116,104,101,32,109,111,100,101,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32>>,{code,[],[<<77,111,100,101,115>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,73,111,68,101,118,105,99,101,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,105,110,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,109,111,100,101,46,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,102,105,108,101,32,97,110,100,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,111,112,101,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,49,49,55>>,signature => [{attribute,1194,spec,{{path_open,3},[{type,1194,bounded_fun,[{type,1194,'fun',[{type,1194,product,[{var,1194,'Path'},{var,1194,'Filename'},{var,1194,'Modes'}]},{type,1195,union,[{type,1195,tuple,[{atom,1195,ok},{var,1195,'IoDevice'},{var,1195,'FullName'}]},{type,1195,tuple,[{atom,1195,error},{var,1195,'Reason'}]}]}]},[{type,1196,constraint,[{atom,1196,is_subtype},[{var,1196,'Path'},{type,1196,list,[{ann_type,1196,[{var,1196,'Dir'},{user_type,1196,name_all,[]}]}]}]]},{type,1197,constraint,[{atom,1197,is_subtype},[{var,1197,'Filename'},{user_type,1197,name_all,[]}]]},{type,1198,constraint,[{atom,1198,is_subtype},[{var,1198,'Modes'},{type,1198,list,[{type,1198,union,[{user_type,1198,mode,[]},{atom,1198,directory}]}]}]]},{type,1199,constraint,[{atom,1199,is_subtype},[{var,1199,'IoDevice'},{user_type,1199,io_device,[]}]]},{type,1200,constraint,[{atom,1200,is_subtype},[{var,1200,'FullName'},{user_type,1200,filename_all,[]}]]},{type,1201,constraint,[{atom,1201,is_subtype},[{var,1201,'Reason'},{type,1201,union,[{user_type,1201,posix,[]},{atom,1201,badarg},{atom,1201,system_limit}]}]]}]]}]}}]}},{{function,path_script,2},[{file,[102,105,108,101,46,101,114,108]},{location,1149}],[<<112,97,116,104,95,115,99,114,105,112,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,114,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,86,97,108,117,101,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,32,97,110,100,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,108,97,115,116,32,101,120,112,114,101,115,115,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,49,52,54>>,signature => [{attribute,1149,spec,{{path_script,2},[{type,1149,bounded_fun,[{type,1149,'fun',[{type,1149,product,[{var,1149,'Path'},{var,1149,'Filename'}]},{type,1150,union,[{type,1150,tuple,[{atom,1150,ok},{var,1150,'Value'},{var,1150,'FullName'}]},{type,1150,tuple,[{atom,1150,error},{var,1150,'Reason'}]}]}]},[{type,1151,constraint,[{atom,1151,is_subtype},[{var,1151,'Path'},{type,1151,list,[{ann_type,1151,[{var,1151,'Dir'},{user_type,1151,name_all,[]}]}]}]]},{type,1152,constraint,[{atom,1152,is_subtype},[{var,1152,'Filename'},{user_type,1152,name_all,[]}]]},{type,1153,constraint,[{atom,1153,is_subtype},[{var,1153,'Value'},{type,1153,term,[]}]]},{type,1154,constraint,[{atom,1154,is_subtype},[{var,1154,'FullName'},{user_type,1154,filename_all,[]}]]},{type,1155,constraint,[{atom,1155,is_subtype},[{var,1155,'Reason'},{type,1155,union,[{user_type,1155,posix,[]},{atom,1155,badarg},{atom,1155,terminated},{atom,1155,system_limit},{type,1156,tuple,[{ann_type,1156,[{var,1156,'Line'},{type,1156,integer,[]}]},{ann_type,1156,[{var,1156,'Mod'},{type,1156,module,[]}]},{ann_type,1156,[{var,1156,'Term'},{type,1156,term,[]}]}]}]}]]}]]}]}}]}},{{function,path_script,3},[{file,[102,105,108,101,46,101,114,108]},{location,1161}],[<<112,97,116,104,95,115,99,114,105,112,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<112,97,116,104,95,115,99,114,105,112,116,47,50>>]},<<32,98,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,32>>,{code,[],[<<66,105,110,100,105,110,103,115>>]},<<32,97,114,101,32,117,115,101,100,32,105,110,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,101,114,108,95,101,118,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,101,118,97,108,40,51,41>>]}]},<<32,97,98,111,117,116,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,49,57,48>>,signature => [{attribute,1161,spec,{{path_script,3},[{type,1161,bounded_fun,[{type,1161,'fun',[{type,1161,product,[{var,1161,'Path'},{var,1161,'Filename'},{var,1161,'Bindings'}]},{type,1162,union,[{type,1162,tuple,[{atom,1162,ok},{var,1162,'Value'},{var,1162,'FullName'}]},{type,1162,tuple,[{atom,1162,error},{var,1162,'Reason'}]}]}]},[{type,1163,constraint,[{atom,1163,is_subtype},[{var,1163,'Path'},{type,1163,list,[{ann_type,1163,[{var,1163,'Dir'},{user_type,1163,name_all,[]}]}]}]]},{type,1164,constraint,[{atom,1164,is_subtype},[{var,1164,'Filename'},{user_type,1164,name_all,[]}]]},{type,1165,constraint,[{atom,1165,is_subtype},[{var,1165,'Bindings'},{remote_type,1165,[{atom,1165,erl_eval},{atom,1165,binding_struct},[]]}]]},{type,1166,constraint,[{atom,1166,is_subtype},[{var,1166,'Value'},{type,1166,term,[]}]]},{type,1167,constraint,[{atom,1167,is_subtype},[{var,1167,'FullName'},{user_type,1167,filename_all,[]}]]},{type,1168,constraint,[{atom,1168,is_subtype},[{var,1168,'Reason'},{type,1168,union,[{user_type,1168,posix,[]},{atom,1168,badarg},{atom,1168,terminated},{atom,1168,system_limit},{type,1169,tuple,[{ann_type,1169,[{var,1169,'Line'},{type,1169,integer,[]}]},{ann_type,1169,[{var,1169,'Mod'},{type,1169,module,[]}]},{ann_type,1169,[{var,1169,'Term'},{type,1169,term,[]}]}]}]}]]}]]}]}}]}},{{function,pid2name,1},[{file,[102,105,108,101,46,101,114,108]},{location,170}],[<<112,105,100,50,110,97,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,97,110,32,73,47,79,32,100,101,118,105,99,101,44,32,116,104,97,116,32,105,115,44,32,97,32,112,105,100,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<111,112,101,110,47,50>>]},<<44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,102,105,108,101,110,97,109,101,44,32,111,114,32,114,97,116,104,101,114,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,116,104,105,115,32,110,111,100,101,32,105,115,32,110,111,116,32,97,32,115,108,97,118,101,44,32,116,104,101,32,102,105,108,101,32,119,97,115,32,111,112,101,110,101,100,32,98,121,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,116,104,105,115,32,110,111,100,101,32,40,116,104,105,115,32,105,109,112,108,105,101,115,32,116,104,97,116,32>>,{code,[],[<<80,105,100>>]},<<32,109,117,115,116,32,98,101,32,97,32,108,111,99,97,108,32,112,105,100,41,32,97,110,100,32,116,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,99,108,111,115,101,100,46,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,110,32,102,108,97,116,32,115,116,114,105,110,103,32,102,111,114,109,97,116,46>>]}]},{dt,[],[{code,[],[<<117,110,100,101,102,105,110,101,100>>]}]},{dd,[],[{p,[],[<<73,110,32,97,108,108,32,111,116,104,101,114,32,99,97,115,101,115,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,50,48,48>>,signature => [{attribute,170,spec,{{pid2name,1},[{type,170,bounded_fun,[{type,170,'fun',[{type,170,product,[{var,170,'Pid'}]},{type,170,union,[{type,170,tuple,[{atom,170,ok},{var,170,'Filename'}]},{atom,170,undefined}]}]},[{type,171,constraint,[{atom,171,is_subtype},[{var,171,'Filename'},{user_type,171,filename_all,[]}]]},{type,172,constraint,[{atom,172,is_subtype},[{var,172,'Pid'},{type,172,pid,[]}]]}]]}]}}]}},{{function,position,2},[{file,[102,105,108,101,46,101,114,108]},{location,753}],[<<112,111,115,105,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,116,111,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,78,101,119,80,111,115,105,116,105,111,110,125>>]},<<32,40,97,115,32,97,98,115,111,108,117,116,101,32,111,102,102,115,101,116,41,32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<79,102,102,115,101,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<123,98,111,102,44,32,79,102,102,115,101,116,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,98,111,102,44,32,79,102,102,115,101,116,125>>]}]},{dd,[],[{p,[],[<<65,98,115,111,108,117,116,101,32,111,102,102,115,101,116,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,44,32,79,102,102,115,101,116,125>>]}]},{dd,[],[{p,[],[<<79,102,102,115,101,116,32,102,114,111,109,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,101,111,102,44,32,79,102,102,115,101,116,125>>]}]},{dd,[],[{p,[],[<<79,102,102,115,101,116,32,102,114,111,109,32,116,104,101,32,101,110,100,32,111,102,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<98,111,102,32,124,32,99,117,114,32,124,32,101,111,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,97,98,111,118,101,32,119,105,116,104,32>>,{code,[],[<<79,102,102,115,101,116>>]},<<32,48,46>>]}]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,111,102,102,115,101,116,115,32,97,114,101,32,99,111,117,110,116,101,100,32,105,110,32,98,121,116,101,115,44,32,110,111,116,32,105,110,32,99,104,97,114,97,99,116,101,114,115,46,32,73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,117,115,105,110,103,32,115,111,109,101,32,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,111,110,101,32,98,121,116,101,32,100,111,101,115,32,110,111,116,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,111,110,101,32,99,104,97,114,97,99,116,101,114,46,32,80,111,115,105,116,105,111,110,105,110,103,32,105,110,32,115,117,99,104,32,97,32,102,105,108,101,32,99,97,110,32,111,110,108,121,32,98,101,32,100,111,110,101,32,116,111,32,107,110,111,119,110,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,105,101,115,46,32,84,104,97,116,32,105,115,44,32,116,111,32,97,32,112,111,115,105,116,105,111,110,32,101,97,114,108,105,101,114,32,114,101,116,114,105,101,118,101,100,32,98,121,32,103,101,116,116,105,110,103,32,97,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,44,32,116,111,32,116,104,101,32,98,101,103,105,110,110,105,110,103,47,101,110,100,32,111,102,32,116,104,101,32,102,105,108,101,32,111,114,32,116,111,32,115,111,109,101,32,111,116,104,101,114,32,112,111,115,105,116,105,111,110,32>>,{em,[],[<<107,110,111,119,110>>]},<<32,116,111,32,98,101,32,111,110,32,97,32,99,111,114,114,101,99,116,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,32,98,121,32,115,111,109,101,32,111,116,104,101,114,32,109,101,97,110,115,32,40,116,121,112,105,99,97,108,108,121,32,98,101,121,111,110,100,32,97,32,98,121,116,101,32,111,114,100,101,114,32,109,97,114,107,32,105,110,32,116,104,101,32,102,105,108,101,44,32,119,104,105,99,104,32,104,97,115,32,97,32,107,110,111,119,110,32,98,121,116,101,45,115,105,122,101,41,46>>]},{p,[],[<<65,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,32,105,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[<<69,105,116,104,101,114,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,105,108,108,101,103,97,108,44,32,111,114,32,105,116,32,105,115,32,101,118,97,108,117,97,116,101,100,32,116,111,32,97,32,110,101,103,97,116,105,118,101,32,111,102,102,115,101,116,32,105,110,32,116,104,101,32,102,105,108,101,46,32,78,111,116,105,99,101,32,116,104,97,116,32,105,102,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,112,111,115,105,116,105,111,110,32,105,115,32,97,32,110,101,103,97,116,105,118,101,32,118,97,108,117,101,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,110,32,101,114,114,111,114,44,32,97,110,100,32,97,102,116,101,114,32,116,104,101,32,99,97,108,108,32,116,104,101,32,102,105,108,101,32,112,111,115,105,116,105,111,110,32,105,115,32,117,110,100,101,102,105,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,50,50,53>>,signature => [{attribute,753,spec,{{position,2},[{type,753,bounded_fun,[{type,753,'fun',[{type,753,product,[{var,753,'IoDevice'},{var,753,'Location'}]},{type,753,union,[{type,753,tuple,[{atom,753,ok},{var,753,'NewPosition'}]},{type,753,tuple,[{atom,753,error},{var,753,'Reason'}]}]}]},[{type,754,constraint,[{atom,754,is_subtype},[{var,754,'IoDevice'},{user_type,754,io_device,[]}]]},{type,755,constraint,[{atom,755,is_subtype},[{var,755,'Location'},{user_type,755,location,[]}]]},{type,756,constraint,[{atom,756,is_subtype},[{var,756,'NewPosition'},{type,756,integer,[]}]]},{type,757,constraint,[{atom,757,is_subtype},[{var,757,'Reason'},{type,757,union,[{user_type,757,posix,[]},{atom,757,badarg},{atom,757,terminated}]}]]}]]}]}}]}},{{function,pread,2},[{file,[102,105,108,101,46,101,114,108]},{location,632}],[<<112,114,101,97,100,47,50>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32>>,{code,[],[<<112,114,101,97,100,47,51>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,91,68,97,116,97,44,32,46,46,46,93,125>>]},<<32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<44,32,119,104,101,114,101,32,101,97,99,104,32>>,{code,[],[<<68,97,116,97>>]},<<44,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<112,114,101,97,100>>]},<<44,32,105,115,32,101,105,116,104,101,114,32,97,32,108,105,115,116,32,111,114,32,97,32,98,105,110,97,114,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,111,100,101,32,111,102,32,116,104,101,32,102,105,108,101,44,32,111,114,32>>,{code,[],[<<101,111,102>>]},<<32,105,102,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,112,111,115,105,116,105,111,110,32,105,115,32,98,101,121,111,110,100,32,101,110,100,32,111,102,32,102,105,108,101,46>>]},{p,[],[<<65,115,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,121,116,101,45,111,102,102,115,101,116,44,32,116,97,107,101,32,115,112,101,99,105,97,108,32,99,97,117,116,105,111,110,32,119,104,101,110,32,119,111,114,107,105,110,103,32,119,105,116,104,32,102,105,108,101,115,32,119,104,101,114,101,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,97,115,32,110,111,116,32,101,118,101,114,121,32,98,121,116,101,32,112,111,115,105,116,105,111,110,32,105,115,32,97,32,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,32,111,110,32,115,117,99,104,32,97,32,102,105,108,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,50,55,55>>,signature => [{attribute,632,spec,{{pread,2},[{type,632,bounded_fun,[{type,632,'fun',[{type,632,product,[{var,632,'IoDevice'},{var,632,'LocNums'}]},{type,632,union,[{type,632,tuple,[{atom,632,ok},{var,632,'DataL'}]},{atom,632,eof},{type,632,tuple,[{atom,632,error},{var,632,'Reason'}]}]}]},[{type,633,constraint,[{atom,633,is_subtype},[{var,633,'IoDevice'},{user_type,633,io_device,[]}]]},{type,634,constraint,[{atom,634,is_subtype},[{var,634,'LocNums'},{type,634,list,[{type,634,tuple,[{ann_type,634,[{var,634,'Location'},{user_type,634,location,[]}]},{ann_type,634,[{var,634,'Number'},{type,634,non_neg_integer,[]}]}]}]}]]},{type,635,constraint,[{atom,635,is_subtype},[{var,635,'DataL'},{type,635,list,[{var,635,'Data'}]}]]},{type,636,constraint,[{atom,636,is_subtype},[{var,636,'Data'},{type,636,union,[{type,636,string,[]},{type,636,binary,[]},{atom,636,eof}]}]]},{type,637,constraint,[{atom,637,is_subtype},[{var,637,'Reason'},{type,637,union,[{user_type,637,posix,[]},{atom,637,badarg},{atom,637,terminated}]}]]}]]}]}}]}},{{function,pread,3},[{file,[102,105,108,101,46,101,114,108]},{location,660}],[<<112,114,101,97,100,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32>>,{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46>>]},{p,[],[{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,111,110,108,121,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,97,110,32,105,110,116,101,103,101,114,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,97,110,100,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,115,46>>]},{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,102,105,108,101,32,97,102,116,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,97,110,100,32,117,110,99,104,97,110,103,101,100,32,102,111,114,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,46>>]},{p,[],[<<65,115,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,121,116,101,45,111,102,102,115,101,116,44,32,116,97,107,101,32,115,112,101,99,105,97,108,32,99,97,117,116,105,111,110,32,119,104,101,110,32,119,111,114,107,105,110,103,32,119,105,116,104,32,102,105,108,101,115,32,119,104,101,114,101,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,97,115,32,110,111,116,32,101,118,101,114,121,32,98,121,116,101,32,112,111,115,105,116,105,111,110,32,105,115,32,97,32,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,32,111,110,32,115,117,99,104,32,97,32,102,105,108,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,50,57,53>>,signature => [{attribute,660,spec,{{pread,3},[{type,660,bounded_fun,[{type,660,'fun',[{type,660,product,[{var,660,'IoDevice'},{var,660,'Location'},{var,660,'Number'}]},{type,661,union,[{type,661,tuple,[{atom,661,ok},{var,661,'Data'}]},{atom,661,eof},{type,661,tuple,[{atom,661,error},{var,661,'Reason'}]}]}]},[{type,662,constraint,[{atom,662,is_subtype},[{var,662,'IoDevice'},{user_type,662,io_device,[]}]]},{type,663,constraint,[{atom,663,is_subtype},[{var,663,'Location'},{user_type,663,location,[]}]]},{type,664,constraint,[{atom,664,is_subtype},[{var,664,'Number'},{type,664,non_neg_integer,[]}]]},{type,665,constraint,[{atom,665,is_subtype},[{var,665,'Data'},{type,665,union,[{type,665,string,[]},{type,665,binary,[]}]}]]},{type,666,constraint,[{atom,666,is_subtype},[{var,666,'Reason'},{type,666,union,[{user_type,666,posix,[]},{atom,666,badarg},{atom,666,terminated}]}]]}]]}]}}]}},{{function,pwrite,2},[{file,[102,105,108,101,46,101,114,108]},{location,693}],[<<112,119,114,105,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32>>,{code,[],[<<112,119,114,105,116,101,47,51>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,123,78,44,32,82,101,97,115,111,110,125,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,117,99,99,101,115,115,102,117,108,32,119,114,105,116,101,115,32,100,111,110,101,32,98,101,102,111,114,101,32,116,104,101,32,102,97,105,108,117,114,101,46>>]},{p,[],[<<87,104,101,110,32,112,111,115,105,116,105,111,110,105,110,103,32,105,110,32,97,32,102,105,108,101,32,119,105,116,104,32,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,99,97,117,116,105,111,110,32,109,117,115,116,32,98,101,32,116,97,107,101,110,32,116,111,32,115,101,116,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,110,32,97,32,99,111,114,114,101,99,116,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,46,32,70,111,114,32,100,101,116,97,105,108,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,112,111,115,105,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,49,50>>,signature => [{attribute,693,spec,{{pwrite,2},[{type,693,bounded_fun,[{type,693,'fun',[{type,693,product,[{var,693,'IoDevice'},{var,693,'LocBytes'}]},{type,693,union,[{atom,693,ok},{type,693,tuple,[{atom,693,error},{type,693,tuple,[{var,693,'N'},{var,693,'Reason'}]}]}]}]},[{type,694,constraint,[{atom,694,is_subtype},[{var,694,'IoDevice'},{user_type,694,io_device,[]}]]},{type,695,constraint,[{atom,695,is_subtype},[{var,695,'LocBytes'},{type,695,list,[{type,695,tuple,[{ann_type,695,[{var,695,'Location'},{user_type,695,location,[]}]},{ann_type,695,[{var,695,'Bytes'},{type,695,iodata,[]}]}]}]}]]},{type,696,constraint,[{atom,696,is_subtype},[{var,696,'N'},{type,696,non_neg_integer,[]}]]},{type,697,constraint,[{atom,697,is_subtype},[{var,697,'Reason'},{type,697,union,[{user_type,697,posix,[]},{atom,697,badarg},{atom,697,terminated}]}]]}]]}]}}]}},{{function,pwrite,3},[{file,[102,105,108,101,46,101,114,108]},{location,718}],[<<112,119,114,105,116,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32>>,{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]},<<32,97,110,100,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46>>]},{p,[],[{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,111,110,108,121,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,97,110,32,105,110,116,101,103,101,114,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,97,110,100,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,115,46>>]},{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,102,105,108,101,32,97,102,116,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,97,110,100,32,117,110,99,104,97,110,103,101,100,32,102,111,114,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,46>>]},{p,[],[<<87,104,101,110,32,112,111,115,105,116,105,111,110,105,110,103,32,105,110,32,97,32,102,105,108,101,32,119,105,116,104,32,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,99,97,117,116,105,111,110,32,109,117,115,116,32,98,101,32,116,97,107,101,110,32,116,111,32,115,101,116,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,110,32,97,32,99,111,114,114,101,99,116,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,46,32,70,111,114,32,100,101,116,97,105,108,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,112,111,115,105,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,50,55>>,signature => [{attribute,718,spec,{{pwrite,3},[{type,718,bounded_fun,[{type,718,'fun',[{type,718,product,[{var,718,'IoDevice'},{var,718,'Location'},{var,718,'Bytes'}]},{type,718,union,[{atom,718,ok},{type,718,tuple,[{atom,718,error},{var,718,'Reason'}]}]}]},[{type,719,constraint,[{atom,719,is_subtype},[{var,719,'IoDevice'},{user_type,719,io_device,[]}]]},{type,720,constraint,[{atom,720,is_subtype},[{var,720,'Location'},{user_type,720,location,[]}]]},{type,721,constraint,[{atom,721,is_subtype},[{var,721,'Bytes'},{type,721,iodata,[]}]]},{type,722,constraint,[{atom,722,is_subtype},[{var,722,'Reason'},{type,722,union,[{user_type,722,posix,[]},{atom,722,badarg},{atom,722,terminated}]}]]}]]}]}}]}},{{function,read,2},[{file,[102,105,108,101,46,101,114,108]},{location,590}],[<<114,101,97,100,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,98,121,116,101,115,47,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,84,104,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,112,114,101,97,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,101,97,100,47,51>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]}]},<<32,97,114,101,32,116,104,101,32,111,110,108,121,32,119,97,121,115,32,116,111,32,114,101,97,100,32,102,114,111,109,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,40,97,108,116,104,111,117,103,104,32,116,104,101,121,32,119,111,114,107,32,102,111,114,32,110,111,114,109,97,108,108,121,32,111,112,101,110,101,100,32,102,105,108,101,115,44,32,116,111,111,41,46>>]},{p,[],[<<70,111,114,32,102,105,108,101,115,32,119,104,101,114,101,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,111,110,101,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,121,116,101,32,111,110,32,116,104,101,32,102,105,108,101,46,32,84,104,101,32,112,97,114,97,109,101,116,101,114,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,97,108,119,97,121,115,32,100,101,110,111,116,101,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{em,[],[<<99,104,97,114,97,99,116,101,114,115>>]},<<32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,44,32,119,104,105,108,101,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,102,105,108,101,32,99,97,110,32,98,101,32,109,111,118,101,100,32,109,117,99,104,32,109,111,114,101,32,116,104,97,110,32,116,104,105,115,32,110,117,109,98,101,114,32,119,104,101,110,32,114,101,97,100,105,110,103,32,97,32,85,110,105,99,111,100,101,32,102,105,108,101,46>>]},{p,[],[<<65,108,115,111,44,32,105,102,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,116,104,101,32>>,{code,[],[<<114,101,97,100,47,51>>]},<<32,99,97,108,108,32,102,97,105,108,115,32,105,102,32,116,104,101,32,100,97,116,97,32,99,111,110,116,97,105,110,115,32,99,104,97,114,97,99,116,101,114,115,32,108,97,114,103,101,114,32,116,104,97,110,32,50,53,53,44,32,119,104,105,99,104,32,105,115,32,119,104,121,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,105,115,32,116,111,32,98,101,32,112,114,101,102,101,114,114,101,100,32,119,104,101,110,32,114,101,97,100,105,110,103,32,115,117,99,104,32,97,32,102,105,108,101,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,68,97,116,97,125>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,119,97,115,32,111,112,101,110,101,100,32,105,110,32,98,105,110,97,114,121,32,109,111,100,101,44,32,116,104,101,32,114,101,97,100,32,98,121,116,101,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,105,110,32,97,32,98,105,110,97,114,121,44,32,111,116,104,101,114,119,105,115,101,32,105,110,32,97,32,108,105,115,116,46,32,84,104,101,32,108,105,115,116,32,111,114,32,98,105,110,97,114,121,32,105,115,32,115,104,111,114,116,101,114,32,116,104,97,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,114,101,113,117,101,115,116,101,100,32,105,102,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,114,101,97,99,104,101,100,46>>]}]},{dt,[],[{code,[],[<<101,111,102>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,101,100,32,105,102,32>>,{code,[],[<<78,117,109,98,101,114,62,48>>]},<<32,97,110,100,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,114,101,97,99,104,101,100,32,98,101,102,111,114,101,32,97,110,121,116,104,105,110,103,32,97,116,32,97,108,108,32,99,111,117,108,100,32,98,101,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,98,97,100,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,102,111,114,32,114,101,97,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,110,111,95,116,114,97,110,115,108,97,116,105,111,110,44,32,117,110,105,99,111,100,101,44,32,108,97,116,105,110,49,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,97,110,100,32,116,104,101,32,100,97,116,97,32,105,110,32,116,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,116,104,101,32,98,121,116,101,45,111,114,105,101,110,116,101,100,32,100,97,116,97,32,116,104,97,116,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,52,52>>,signature => [{attribute,590,spec,{{read,2},[{type,590,bounded_fun,[{type,590,'fun',[{type,590,product,[{var,590,'IoDevice'},{var,590,'Number'}]},{type,590,union,[{type,590,tuple,[{atom,590,ok},{var,590,'Data'}]},{atom,590,eof},{type,590,tuple,[{atom,590,error},{var,590,'Reason'}]}]}]},[{type,591,constraint,[{atom,591,is_subtype},[{var,591,'IoDevice'},{type,591,union,[{user_type,591,io_device,[]},{type,591,atom,[]}]}]]},{type,592,constraint,[{atom,592,is_subtype},[{var,592,'Number'},{type,592,non_neg_integer,[]}]]},{type,593,constraint,[{atom,593,is_subtype},[{var,593,'Data'},{type,593,union,[{type,593,string,[]},{type,593,binary,[]}]}]]},{type,594,constraint,[{atom,594,is_subtype},[{var,594,'Reason'},{type,594,union,[{user_type,594,posix,[]},{atom,595,badarg},{atom,596,terminated},{type,597,tuple,[{atom,597,no_translation},{atom,597,unicode},{atom,597,latin1}]}]}]]}]]}]}}]}},{{function,read_file,1},[{file,[102,105,108,101,46,101,114,108]},{location,419}],[<<114,101,97,100,95,102,105,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,105,110,97,114,121,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,105,102,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,114,101,97,100,105,110,103,32,116,104,101,32,102,105,108,101,44,32,111,114,32,102,111,114,32,115,101,97,114,99,104,105,110,103,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,97,109,101,100,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,110,111,109,101,109>>]}]},{dd,[],[{p,[],[<<84,104,101,114,101,32,105,115,32,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,57,56>>,signature => [{attribute,419,spec,{{read_file,1},[{type,419,bounded_fun,[{type,419,'fun',[{type,419,product,[{var,419,'Filename'}]},{type,419,union,[{type,419,tuple,[{atom,419,ok},{var,419,'Binary'}]},{type,419,tuple,[{atom,419,error},{var,419,'Reason'}]}]}]},[{type,420,constraint,[{atom,420,is_subtype},[{var,420,'Filename'},{user_type,420,name_all,[]}]]},{type,421,constraint,[{atom,421,is_subtype},[{var,421,'Binary'},{type,421,binary,[]}]]},{type,422,constraint,[{atom,422,is_subtype},[{var,422,'Reason'},{type,422,union,[{user_type,422,posix,[]},{atom,422,badarg},{atom,422,terminated},{atom,422,system_limit}]}]]}]]}]}}]}},{{function,read_file_info,2},[{file,[102,105,108,101,46,101,114,108]},{location,294}],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,52,51,52>>,equiv => {function,read_file_info,1},signature => [{attribute,294,spec,{{read_file_info,2},[{type,294,bounded_fun,[{type,294,'fun',[{type,294,product,[{var,294,'File'},{var,294,'Opts'}]},{type,294,union,[{type,294,tuple,[{atom,294,ok},{var,294,'FileInfo'}]},{type,294,tuple,[{atom,294,error},{var,294,'Reason'}]}]}]},[{type,295,constraint,[{atom,295,is_subtype},[{var,295,'File'},{type,295,union,[{user_type,295,name_all,[]},{user_type,295,io_device,[]}]}]]},{type,296,constraint,[{atom,296,is_subtype},[{var,296,'Opts'},{type,296,list,[{user_type,296,file_info_option,[]}]}]]},{type,297,constraint,[{atom,297,is_subtype},[{var,297,'FileInfo'},{user_type,297,file_info,[]}]]},{type,298,constraint,[{atom,298,is_subtype},[{var,298,'Reason'},{type,298,union,[{user_type,298,posix,[]},{atom,298,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,read_file_info,1},[{file,[102,105,108,101,46,101,114,108]},{location,282}],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,114,105,101,118,101,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,102,105,108,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,73,110,102,111,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,73,110,102,111>>]},<<32,105,115,32,97,32,114,101,99,111,114,100,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<44,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,75,101,114,110,101,108,32,105,110,99,108,117,100,101,32,102,105,108,101,32>>,{code,[],[<<102,105,108,101,46,104,114,108>>]},<<46,32,73,110,99,108,117,100,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,114,101,99,116,105,118,101,32,105,110,32,116,104,101,32,109,111,100,117,108,101,32,102,114,111,109,32,119,104,105,99,104,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<32,45,105,110,99,108,117,100,101,95,108,105,98,40,34,107,101,114,110,101,108,47,105,110,99,108,117,100,101,47,102,105,108,101,46,104,114,108,34,41,46>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,116,121,112,101,32,114,101,116,117,114,110,101,100,32,105,110,32>>,{code,[],[<<97,116,105,109,101>>]},<<44,32>>,{code,[],[<<109,116,105,109,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<99,116,105,109,101>>]},<<32,105,115,32,100,101,112,101,110,100,101,110,116,32,111,110,32,116,104,101,32,116,105,109,101,32,116,121,112,101,32,115,101,116,32,105,110,32>>,{code,[],[<<79,112,116,115,32,58,58,32,123,116,105,109,101,44,32,84,121,112,101,125>>]},<<32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,111,99,97,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,108,111,99,97,108,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<117,110,105,118,101,114,115,97,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,117,110,105,118,101,114,115,97,108,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<112,111,115,105,120>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,115,101,99,111,110,100,115,32,115,105,110,99,101,32,111,114,32,98,101,102,111,114,101,32,85,110,105,120,32,116,105,109,101,32,101,112,111,99,104,44,32,119,104,105,99,104,32,105,115,32,49,57,55,48,45,48,49,45,48,49,32,48,48,58,48,48,32,85,84,67,46>>]}]}]},{p,[],[<<68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<123,116,105,109,101,44,32,108,111,99,97,108,125>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,97,110,100,32,111,110,108,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,108,111,99,97,108,32,102,105,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46,32,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,119,105,108,108,32,98,114,101,97,107,32,116,104,105,115,32,109,111,100,117,108,101,39,115,32,97,116,111,109,105,99,105,116,121,32,103,117,97,114,97,110,116,101,101,115,32,97,115,32,105,116,32,99,97,110,32,114,97,99,101,32,119,105,116,104,32,97,32,99,111,110,99,117,114,114,101,110,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,49,44,50>>]},<<32>>]},<<46>>]},{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,103,105,118,101,110,32,97,110,32,73,47,79,32,100,101,118,105,99,101,32,105,110,115,116,101,97,100,32,111,102,32,97,32,102,105,108,101,32,110,97,109,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,116,111,32,111,98,116,97,105,110,32,97,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,102,105,114,115,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,105,108,101,32,116,105,109,101,115,32,97,114,101,32,115,116,111,114,101,100,32,105,110,32,80,79,83,73,88,32,116,105,109,101,32,111,110,32,109,111,115,116,32,79,83,44,32,105,116,32,105,115,32,102,97,115,116,101,114,32,116,111,32,113,117,101,114,121,32,102,105,108,101,32,105,110,102,111,114,109,97,116,105,111,110,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<112,111,115,105,120>>]},<<46>>]}]},{p,[],[<<84,104,101,32,114,101,99,111,114,100,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,101,108,100,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,105,122,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<83,105,122,101,32,111,102,32,102,105,108,101,32,105,110,32,98,121,116,101,115,46>>]}]},{dt,[],[{code,[],[<<116,121,112,101,32,61,32,100,101,118,105,99,101,32,124,32,100,105,114,101,99,116,111,114,121,32,124,32,111,116,104,101,114,32,124,32,114,101,103,117,108,97,114,32,124,32,115,121,109,108,105,110,107>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<97,99,99,101,115,115,32,61,32,114,101,97,100,32,124,32,119,114,105,116,101,32,124,32,114,101,97,100,95,119,114,105,116,101,32,124,32,110,111,110,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,97,99,99,101,115,115,32,116,111,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<97,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<109,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,119,114,105,116,116,101,110,46>>]}]},{dt,[],[{code,[],[<<99,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,116,105,109,101,32,102,105,101,108,100,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,46,32,79,110,32,85,110,105,120,44,32,105,116,32,105,115,32,116,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,111,114,32,116,104,101,32>>,{code,[],[<<105,110,111,100,101>>]},<<32,119,97,115,32,99,104,97,110,103,101,100,46,32,73,110,32,87,105,110,100,111,119,115,44,32,105,116,32,105,115,32,116,104,101,32,99,114,101,97,116,101,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<109,111,100,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,112,101,114,109,105,115,115,105,111,110,115,32,97,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,98,105,116,32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<56,35,48,48,52,48,48>>]}]},{dd,[],[{p,[],[<<114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,50,48,48>>]}]},{dd,[],[{p,[],[<<119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,49,48,48>>]}]},{dd,[],[{p,[],[<<101,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,52,48>>]}]},{dd,[],[{p,[],[<<114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,50,48>>]}]},{dd,[],[{p,[],[<<119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,49,48>>]}]},{dd,[],[{p,[],[<<101,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,52>>]}]},{dd,[],[{p,[],[<<114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,50>>]}]},{dd,[],[{p,[],[<<119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,49>>]}]},{dd,[],[{p,[],[<<101,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<49,54,35,56,48,48>>]}]},{dd,[],[{p,[],[<<115,101,116,32,117,115,101,114,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]},{dt,[],[{code,[],[<<49,54,35,52,48,48>>]}]},{dd,[],[{p,[],[<<115,101,116,32,103,114,111,117,112,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]}]},{p,[],[<<79,110,32,85,110,105,120,32,112,108,97,116,102,111,114,109,115,44,32,111,116,104,101,114,32,98,105,116,115,32,116,104,97,110,32,116,104,111,115,101,32,108,105,115,116,101,100,32,97,98,111,118,101,32,109,97,121,32,98,101,32,115,101,116,46>>]}]},{dt,[],[{code,[],[<<108,105,110,107,115,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<78,117,109,98,101,114,32,111,102,32,108,105,110,107,115,32,116,111,32,116,104,101,32,102,105,108,101,32,40,116,104,105,115,32,105,115,32,97,108,119,97,121,115,32,49,32,102,111,114,32,102,105,108,101,32,115,121,115,116,101,109,115,32,116,104,97,116,32,104,97,118,101,32,110,111,32,99,111,110,99,101,112,116,32,111,102,32,108,105,110,107,115,41,46>>]}]},{dt,[],[{code,[],[<<109,97,106,111,114,95,100,101,118,105,99,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<73,100,101,110,116,105,102,105,101,115,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,119,104,101,114,101,32,116,104,101,32,102,105,108,101,32,105,115,32,108,111,99,97,116,101,100,46,32,73,110,32,87,105,110,100,111,119,115,44,32,116,104,101,32,110,117,109,98,101,114,32,105,110,100,105,99,97,116,101,115,32,97,32,100,114,105,118,101,32,97,115,32,102,111,108,108,111,119,115,58,32,48,32,109,101,97,110,115,32,65,58,44,32,49,32,109,101,97,110,115,32,66,58,44,32,97,110,100,32,115,111,32,111,110,46>>]}]},{dt,[],[{code,[],[<<109,105,110,111,114,95,100,101,118,105,99,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32,99,104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,32,111,110,32,85,110,105,120,46,32,73,110,32,97,108,108,32,111,116,104,101,114,32,99,97,115,101,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]},{dt,[],[{code,[],[<<105,110,111,100,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,116,104,101,32>>,{code,[],[<<105,110,111,100,101>>]},<<32,110,117,109,98,101,114,46,32,79,110,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]},{dt,[],[{code,[],[<<117,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<73,110,100,105,99,97,116,101,115,32,116,104,101,32,111,119,110,101,114,32,111,102,32,116,104,101,32,102,105,108,101,46,32,79,110,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]},{dt,[],[{code,[],[<<103,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,116,104,101,32,103,114,111,117,112,32,116,104,97,116,32,116,104,101,32,111,119,110,101,114,32,111,102,32,116,104,101,32,102,105,108,101,32,98,101,108,111,110,103,115,32,116,111,46,32,79,110,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,52,51,52>>,signature => [{attribute,282,spec,{{read_file_info,1},[{type,282,bounded_fun,[{type,282,'fun',[{type,282,product,[{var,282,'File'}]},{type,282,union,[{type,282,tuple,[{atom,282,ok},{var,282,'FileInfo'}]},{type,282,tuple,[{atom,282,error},{var,282,'Reason'}]}]}]},[{type,283,constraint,[{atom,283,is_subtype},[{var,283,'File'},{type,283,union,[{user_type,283,name_all,[]},{user_type,283,io_device,[]}]}]]},{type,284,constraint,[{atom,284,is_subtype},[{var,284,'FileInfo'},{user_type,284,file_info,[]}]]},{type,285,constraint,[{atom,285,is_subtype},[{var,285,'Reason'},{type,285,union,[{user_type,285,posix,[]},{atom,285,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,read_line,1},[{file,[102,105,108,101,46,101,114,108]},{location,612}],[<<114,101,97,100,95,108,105,110,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,97,32,108,105,110,101,32,111,102,32,98,121,116,101,115,47,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,76,105,110,101,115,32,97,114,101,32,100,101,102,105,110,101,100,32,116,111,32,98,101,32,100,101,108,105,109,105,116,101,100,32,98,121,32,116,104,101,32,108,105,110,101,102,101,101,100,32,40,76,70,44,32>>,{code,[],[<<92,110>>]},<<41,32,99,104,97,114,97,99,116,101,114,44,32,98,117,116,32,97,110,121,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,40,67,82,44,32>>,{code,[],[<<92,114>>]},<<41,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,101,119,108,105,110,101,32,105,115,32,97,108,115,111,32,116,114,101,97,116,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,76,70,32,99,104,97,114,97,99,116,101,114,32,40,116,104,101,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,105,115,32,115,105,108,101,110,116,108,121,32,105,103,110,111,114,101,100,41,46,32,84,104,101,32,108,105,110,101,32,105,115,32,114,101,116,117,114,110,101,100,32>>,{em,[],[<<105,110,99,108,117,100,105,110,103>>]},<<32,116,104,101,32,76,70,44,32,98,117,116,32,101,120,99,108,117,100,105,110,103,32,97,110,121,32,67,82,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,76,70,46,32,84,104,105,115,32,98,101,104,97,118,105,111,117,114,32,105,115,32,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,116,104,101,32,98,101,104,97,118,105,111,117,114,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111,35,103,101,116,95,108,105,110,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,111,58,103,101,116,95,108,105,110,101,47,50>>]}]},<<46,32,73,102,32,101,110,100,32,111,102,32,102,105,108,101,32,105,115,32,114,101,97,99,104,101,100,32,119,105,116,104,111,117,116,32,97,110,121,32,76,70,32,101,110,100,105,110,103,32,116,104,101,32,108,97,115,116,32,108,105,110,101,44,32,97,32,108,105,110,101,32,119,105,116,104,32,110,111,32,116,114,97,105,108,105,110,103,32,76,70,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,117,115,101,100,32,111,110,32,102,105,108,101,115,32,111,112,101,110,101,100,32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,46,32,72,111,119,101,118,101,114,44,32,105,116,32,105,115,32,105,110,101,102,102,105,99,105,101,110,116,32,116,111,32,117,115,101,32,105,116,32,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,102,105,108,101,115,32,105,102,32,116,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,115,112,101,99,105,102,105,101,100,46,32,84,104,117,115,44,32,99,111,109,98,105,110,105,110,103,32>>,{code,[],[<<114,97,119>>]},<<32,97,110,100,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,105,115,32,104,105,103,104,108,121,32,114,101,99,111,109,109,101,110,100,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,97,32,116,101,120,116,32,102,105,108,101,32,102,111,114,32,114,97,119,32,108,105,110,101,45,111,114,105,101,110,116,101,100,32,114,101,97,100,105,110,103,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,116,104,101,32>>,{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]},<<32,99,97,108,108,32,102,97,105,108,115,32,105,102,32,116,104,101,32,100,97,116,97,32,99,111,110,116,97,105,110,115,32,99,104,97,114,97,99,116,101,114,115,32,108,97,114,103,101,114,32,116,104,97,110,32,50,53,53,44,32,119,104,121,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,105,115,32,116,111,32,98,101,32,112,114,101,102,101,114,114,101,100,32,119,104,101,110,32,114,101,97,100,105,110,103,32,115,117,99,104,32,97,32,102,105,108,101,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,68,97,116,97,125>>]}]},{dd,[],[{p,[],[<<79,110,101,32,108,105,110,101,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,105,115,32,114,101,116,117,114,110,101,100,44,32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,116,114,97,105,108,105,110,103,32,76,70,44,32,98,117,116,32,119,105,116,104,32,67,82,76,70,32,115,101,113,117,101,110,99,101,115,32,114,101,112,108,97,99,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,76,70,32,40,115,101,101,32,97,98,111,118,101,41,46>>]},{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,105,110,32,98,105,110,97,114,121,32,109,111,100,101,44,32,116,104,101,32,114,101,97,100,32,98,121,116,101,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,105,110,32,97,32,98,105,110,97,114,121,44,32,111,116,104,101,114,119,105,115,101,32,105,110,32,97,32,108,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,111,102>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,101,100,32,105,102,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,114,101,97,99,104,101,100,32,98,101,102,111,114,101,32,97,110,121,116,104,105,110,103,32,97,116,32,97,108,108,32,99,111,117,108,100,32,98,101,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,98,97,100,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,102,111,114,32,114,101,97,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,110,111,95,116,114,97,110,115,108,97,116,105,111,110,44,32,117,110,105,99,111,100,101,44,32,108,97,116,105,110,49,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,97,110,100,32,116,104,101,32,100,97,116,97,32,111,110,32,116,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,116,104,101,32,98,121,116,101,45,111,114,105,101,110,116,101,100,32,100,97,116,97,32,116,104,97,116,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,53,57,51>>,signature => [{attribute,612,spec,{{read_line,1},[{type,612,bounded_fun,[{type,612,'fun',[{type,612,product,[{var,612,'IoDevice'}]},{type,612,union,[{type,612,tuple,[{atom,612,ok},{var,612,'Data'}]},{atom,612,eof},{type,612,tuple,[{atom,612,error},{var,612,'Reason'}]}]}]},[{type,613,constraint,[{atom,613,is_subtype},[{var,613,'IoDevice'},{type,613,union,[{user_type,613,io_device,[]},{type,613,atom,[]}]}]]},{type,614,constraint,[{atom,614,is_subtype},[{var,614,'Data'},{type,614,union,[{type,614,string,[]},{type,614,binary,[]}]}]]},{type,615,constraint,[{atom,615,is_subtype},[{var,615,'Reason'},{type,615,union,[{user_type,615,posix,[]},{atom,616,badarg},{atom,617,terminated},{type,618,tuple,[{atom,618,no_translation},{atom,618,unicode},{atom,618,latin1}]}]}]]}]]}]}}]}},{{function,read_link,1},[{file,[102,105,108,101,46,101,114,108]},{location,356}],[<<114,101,97,100,95,108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[{a,[{id,<<114,101,97,100,95,108,105,110,107,95,97,108,108>>}],[]},<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,125>>]},<<32,105,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,114,97,119,32,102,105,108,101,110,97,109,101,44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,111,116,104,101,114,119,105,115,101,46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,100,111,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<123,101,114,114,111,114,44,101,110,111,116,115,117,112,125>>]},<<46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<78,97,109,101>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32,111,114,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,32,116,104,97,116,32,105,116,32,114,101,102,101,114,115,32,116,111,32,100,111,101,115,32,110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,116,104,101,32,101,120,112,101,99,116,101,100,32,101,110,99,111,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,54,53,48>>,signature => [{attribute,356,spec,{{read_link,1},[{type,356,bounded_fun,[{type,356,'fun',[{type,356,product,[{var,356,'Name'}]},{type,356,union,[{type,356,tuple,[{atom,356,ok},{var,356,'Filename'}]},{type,356,tuple,[{atom,356,error},{var,356,'Reason'}]}]}]},[{type,357,constraint,[{atom,357,is_subtype},[{var,357,'Name'},{user_type,357,name_all,[]}]]},{type,358,constraint,[{atom,358,is_subtype},[{var,358,'Filename'},{user_type,358,filename,[]}]]},{type,359,constraint,[{atom,359,is_subtype},[{var,359,'Reason'},{type,359,union,[{user_type,359,posix,[]},{atom,359,badarg}]}]]}]]}]}}]}},{{function,read_link_all,1},[{file,[102,105,108,101,46,101,114,108]},{location,364}],[<<114,101,97,100,95,108,105,110,107,95,97,108,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,125>>]},<<32,105,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,111,116,104,101,114,119,105,115,101,46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,100,111,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<123,101,114,114,111,114,44,101,110,111,116,115,117,112,125>>]},<<46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,101,105,116,104,101,114,32,97,32,108,105,115,116,32,111,114,32,97,32,98,105,110,97,114,121,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<78,97,109,101>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,54,56,48>>,signature => [{attribute,364,spec,{{read_link_all,1},[{type,364,bounded_fun,[{type,364,'fun',[{type,364,product,[{var,364,'Name'}]},{type,364,union,[{type,364,tuple,[{atom,364,ok},{var,364,'Filename'}]},{type,364,tuple,[{atom,364,error},{var,364,'Reason'}]}]}]},[{type,365,constraint,[{atom,365,is_subtype},[{var,365,'Name'},{user_type,365,name_all,[]}]]},{type,366,constraint,[{atom,366,is_subtype},[{var,366,'Filename'},{user_type,366,filename_all,[]}]]},{type,367,constraint,[{atom,367,is_subtype},[{var,367,'Reason'},{type,367,union,[{user_type,367,posix,[]},{atom,367,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,read_link_info,2},[{file,[102,105,108,101,46,101,114,108]},{location,334}],[<<114,101,97,100,95,108,105,110,107,95,105,110,102,111,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,55,48,56>>,equiv => {function,read_link_info,1},signature => [{attribute,334,spec,{{read_link_info,2},[{type,334,bounded_fun,[{type,334,'fun',[{type,334,product,[{var,334,'Name'},{var,334,'Opts'}]},{type,334,union,[{type,334,tuple,[{atom,334,ok},{var,334,'FileInfo'}]},{type,334,tuple,[{atom,334,error},{var,334,'Reason'}]}]}]},[{type,335,constraint,[{atom,335,is_subtype},[{var,335,'Name'},{user_type,335,name_all,[]}]]},{type,336,constraint,[{atom,336,is_subtype},[{var,336,'Opts'},{type,336,list,[{user_type,336,file_info_option,[]}]}]]},{type,337,constraint,[{atom,337,is_subtype},[{var,337,'FileInfo'},{user_type,337,file_info,[]}]]},{type,338,constraint,[{atom,338,is_subtype},[{var,338,'Reason'},{type,338,union,[{user_type,338,posix,[]},{atom,338,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,read_link_info,1},[{file,[102,105,108,101,46,101,114,108]},{location,326}],[<<114,101,97,100,95,108,105,110,107,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49,44,50>>]}]},<<32,101,120,99,101,112,116,32,116,104,97,116,32,105,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,44,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,108,105,110,107,32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,32,116,104,101,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<32,114,101,99,111,114,100,32,97,110,100,32,116,104,101,32>>,{code,[],[<<116,121,112,101>>]},<<32,102,105,101,108,100,32,111,102,32,116,104,101,32,114,101,99,111,114,100,32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<115,121,109,108,105,110,107>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,97,110,100,32,111,110,108,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,108,111,99,97,108,32,102,105,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46,32,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,119,105,108,108,32,98,114,101,97,107,32,116,104,105,115,32,109,111,100,117,108,101,39,115,32,97,116,111,109,105,99,105,116,121,32,103,117,97,114,97,110,116,101,101,115,32,97,115,32,105,116,32,99,97,110,32,114,97,99,101,32,119,105,116,104,32,97,32,99,111,110,99,117,114,114,101,110,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,49,44,50>>]}]}]},{p,[],[<<73,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,110,111,116,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32>>,{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>]},<<46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,100,111,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,97,108,119,97,121,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,55,48,56>>,signature => [{attribute,326,spec,{{read_link_info,1},[{type,326,bounded_fun,[{type,326,'fun',[{type,326,product,[{var,326,'Name'}]},{type,326,union,[{type,326,tuple,[{atom,326,ok},{var,326,'FileInfo'}]},{type,326,tuple,[{atom,326,error},{var,326,'Reason'}]}]}]},[{type,327,constraint,[{atom,327,is_subtype},[{var,327,'Name'},{user_type,327,name_all,[]}]]},{type,328,constraint,[{atom,328,is_subtype},[{var,328,'FileInfo'},{user_type,328,file_info,[]}]]},{type,329,constraint,[{atom,329,is_subtype},[{var,329,'Reason'},{type,329,union,[{user_type,329,posix,[]},{atom,329,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,rename,2},[{file,[102,105,108,101,46,101,114,108]},{location,241}],[<<114,101,110,97,109,101,47,50>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,114,101,110,97,109,101,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,116,111,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<46,32,73,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,111,118,101,32,102,105,108,101,115,32,40,97,110,100,32,100,105,114,101,99,116,111,114,105,101,115,41,32,98,101,116,119,101,101,110,32,100,105,114,101,99,116,111,114,105,101,115,44,32,98,117,116,32,105,116,32,105,115,32,110,111,116,32,115,117,102,102,105,99,105,101,110,116,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,100,101,115,116,105,110,97,116,105,111,110,32,111,110,108,121,46,32,84,104,101,32,100,101,115,116,105,110,97,116,105,111,110,32,102,105,108,101,110,97,109,101,32,109,117,115,116,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32>>,{code,[],[<<98,97,114>>]},<<32,105,115,32,97,32,110,111,114,109,97,108,32,102,105,108,101,32,97,110,100,32>>,{code,[],[<<102,111,111>>]},<<32,97,110,100,32>>,{code,[],[<<98,97,122>>]},<<32,97,114,101,32,100,105,114,101,99,116,111,114,105,101,115,44,32>>,{code,[],[<<114,101,110,97,109,101,40,34,102,111,111,47,98,97,114,34,44,32,34,98,97,122,34,41>>]},<<32,114,101,116,117,114,110,115,32,97,110,32,101,114,114,111,114,44,32,98,117,116,32>>,{code,[],[<<114,101,110,97,109,101,40,34,102,111,111,47,98,97,114,34,44,32,34,98,97,122,47,98,97,114,34,41>>]},<<32,115,117,99,99,101,101,100,115,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,105,116,32,105,115,32,115,117,99,99,101,115,115,102,117,108,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<82,101,110,97,109,105,110,103,32,111,102,32,111,112,101,110,32,102,105,108,101,115,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32,109,111,115,116,32,112,108,97,116,102,111,114,109,115,32,40,115,101,101,32>>,{code,[],[<<101,97,99,99,101,115>>]},<<32,98,101,108,111,119,41,46>>]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,111,114,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,101,114,114,111,114,32,105,115,32,103,105,118,101,110,32,105,102,32,101,105,116,104,101,114,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,111,114,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,111,112,101,110,46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,109,112,116,121,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,97,108,115,111,32,103,105,118,101,110,32,119,104,101,110,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,97,114,101,32,110,111,116,32,111,102,32,116,104,101,32,115,97,109,101,32,116,121,112,101,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,105,115,32,97,32,114,111,111,116,32,100,105,114,101,99,116,111,114,121,44,32,111,114,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,97,32,115,117,98,100,105,114,101,99,116,111,114,121,32,111,102,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,44,32,98,117,116,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,105,115,32,110,111,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,44,32,98,117,116,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,110,111,116,46>>]}]},{dt,[],[{code,[],[<<101,120,100,101,118>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,97,114,101,32,111,110,32,100,105,102,102,101,114,101,110,116,32,102,105,108,101,32,115,121,115,116,101,109,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,55,51,48>>,signature => [{attribute,241,spec,{{rename,2},[{type,241,bounded_fun,[{type,241,'fun',[{type,241,product,[{var,241,'Source'},{var,241,'Destination'}]},{type,241,union,[{atom,241,ok},{type,241,tuple,[{atom,241,error},{var,241,'Reason'}]}]}]},[{type,242,constraint,[{atom,242,is_subtype},[{var,242,'Source'},{user_type,242,name_all,[]}]]},{type,243,constraint,[{atom,243,is_subtype},[{var,243,'Destination'},{user_type,243,name_all,[]}]]},{type,244,constraint,[{atom,244,is_subtype},[{var,244,'Reason'},{type,244,union,[{user_type,244,posix,[]},{atom,244,badarg}]}]]}]]}]}}]}},{{function,script,1},[{file,[102,105,108,101,46,101,114,108]},{location,1123}],[<<115,99,114,105,112,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,86,97,108,117,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,105,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,108,97,115,116,32,101,120,112,114,101,115,115,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,55,57,51>>,signature => [{attribute,1123,spec,{{script,1},[{type,1123,bounded_fun,[{type,1123,'fun',[{type,1123,product,[{var,1123,'Filename'}]},{type,1123,union,[{type,1123,tuple,[{atom,1123,ok},{var,1123,'Value'}]},{type,1123,tuple,[{atom,1123,error},{var,1123,'Reason'}]}]}]},[{type,1124,constraint,[{atom,1124,is_subtype},[{var,1124,'Filename'},{user_type,1124,name_all,[]}]]},{type,1125,constraint,[{atom,1125,is_subtype},[{var,1125,'Value'},{type,1125,term,[]}]]},{type,1126,constraint,[{atom,1126,is_subtype},[{var,1126,'Reason'},{type,1126,union,[{user_type,1126,posix,[]},{atom,1126,badarg},{atom,1126,terminated},{atom,1126,system_limit},{type,1127,tuple,[{ann_type,1127,[{var,1127,'Line'},{type,1127,integer,[]}]},{ann_type,1127,[{var,1127,'Mod'},{type,1127,module,[]}]},{ann_type,1127,[{var,1127,'Term'},{type,1127,term,[]}]}]}]}]]}]]}]}}]}},{{function,script,2},[{file,[102,105,108,101,46,101,114,108]},{location,1132}],[<<115,99,114,105,112,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<115,99,114,105,112,116,47,49>>]},<<32,98,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,32>>,{code,[],[<<66,105,110,100,105,110,103,115>>]},<<32,97,114,101,32,117,115,101,100,32,105,110,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,115,116,100,108,105,98,58,101,114,108,95,101,118,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,101,118,97,108,40,51,41>>]}]},<<32,97,98,111,117,116,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,50,56>>,signature => [{attribute,1132,spec,{{script,2},[{type,1132,bounded_fun,[{type,1132,'fun',[{type,1132,product,[{var,1132,'Filename'},{var,1132,'Bindings'}]},{type,1132,union,[{type,1132,tuple,[{atom,1132,ok},{var,1132,'Value'}]},{type,1132,tuple,[{atom,1132,error},{var,1132,'Reason'}]}]}]},[{type,1133,constraint,[{atom,1133,is_subtype},[{var,1133,'Filename'},{user_type,1133,name_all,[]}]]},{type,1134,constraint,[{atom,1134,is_subtype},[{var,1134,'Bindings'},{remote_type,1134,[{atom,1134,erl_eval},{atom,1134,binding_struct},[]]}]]},{type,1135,constraint,[{atom,1135,is_subtype},[{var,1135,'Value'},{type,1135,term,[]}]]},{type,1136,constraint,[{atom,1136,is_subtype},[{var,1136,'Reason'},{type,1136,union,[{user_type,1136,posix,[]},{atom,1136,badarg},{atom,1136,terminated},{atom,1136,system_limit},{type,1137,tuple,[{ann_type,1137,[{var,1137,'Line'},{type,1137,integer,[]}]},{ann_type,1137,[{var,1137,'Mod'},{type,1137,module,[]}]},{ann_type,1137,[{var,1137,'Term'},{type,1137,term,[]}]}]}]}]]}]]}]}}]}},{{function,sendfile,2},[{file,[102,105,108,101,46,101,114,108]},{location,1316}],[<<115,101,110,100,102,105,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,116,111,32>>,{code,[],[<<83,111,99,107,101,116>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,121,116,101,115,83,101,110,116,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,51,56>>,signature => [{attribute,1316,spec,{{sendfile,2},[{type,1316,bounded_fun,[{type,1316,'fun',[{type,1316,product,[{var,1316,'Filename'},{var,1316,'Socket'}]},{type,1317,union,[{type,1317,tuple,[{atom,1317,ok},{type,1317,non_neg_integer,[]}]},{type,1317,tuple,[{atom,1317,error},{type,1317,union,[{remote_type,1317,[{atom,1317,inet},{atom,1317,posix},[]]},{atom,1318,closed},{atom,1318,badarg},{atom,1318,not_owner}]}]}]}]},[{type,1319,constraint,[{atom,1319,is_subtype},[{var,1319,'Filename'},{user_type,1319,name_all,[]}]]},{type,1320,constraint,[{atom,1320,is_subtype},[{var,1320,'Socket'},{remote_type,1320,[{atom,1320,inet},{atom,1320,socket},[]]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,sendfile,5},[{file,[102,105,108,101,46,101,114,108]},{location,1289}],[<<115,101,110,100,102,105,108,101,47,53>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,101,110,100,102,105,108,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<83,101,110,100,115,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<82,97,119,70,105,108,101>>]},<<32,98,101,103,105,110,110,105,110,103,32,97,116,32>>,{code,[],[<<79,102,102,115,101,116>>]},<<32,116,111,32>>,{code,[],[<<83,111,99,107,101,116>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,121,116,101,115,83,101,110,116,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32,73,102,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<48>>]},<<32,97,108,108,32,100,97,116,97,32,97,102,116,101,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32>>,{code,[],[<<79,102,102,115,101,116>>]},<<32,105,115,32,115,101,110,116,46>>]},{p,[],[<<84,104,101,32,102,105,108,101,32,117,115,101,100,32,109,117,115,116,32,98,101,32,111,112,101,110,101,100,32,117,115,105,110,103,32,116,104,101,32>>,{code,[],[<<114,97,119>>]},<<32,102,108,97,103,44,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<115,101,110,100,102,105,108,101>>]},<<32,109,117,115,116,32,98,101,32,116,104,101,32,99,111,110,116,114,111,108,108,105,110,103,32,112,114,111,99,101,115,115,32,111,102,32,116,104,101,32,115,111,99,107,101,116,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,103,101,110,95,116,99,112,35,99,111,110,116,114,111,108,108,105,110,103,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,101,110,95,116,99,112,58,99,111,110,116,114,111,108,108,105,110,103,95,112,114,111,99,101,115,115,47,50>>]}]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,79,83,32,117,115,101,100,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,110,111,110,45,98,108,111,99,107,105,110,103,32>>,{code,[],[<<115,101,110,100,102,105,108,101>>]},<<44,32,97,110,32,69,114,108,97,110,103,32,102,97,108,108,98,97,99,107,32,117,115,105,110,103,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,103,101,110,95,116,99,112,35,115,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,101,110,95,116,99,112,58,115,101,110,100,47,50>>]}]},<<32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,111,112,116,105,111,110,32,108,105,115,116,32,99,97,110,32,99,111,110,116,97,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<99,104,117,110,107,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,99,104,117,110,107,32,115,105,122,101,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,102,97,108,108,98,97,99,107,32,116,111,32,115,101,110,100,32,100,97,116,97,46,32,73,102,32,117,115,105,110,103,32,116,104,101,32,102,97,108,108,98,97,99,107,44,32,115,101,116,32,116,104,105,115,32,116,111,32,97,32,118,97,108,117,101,32,116,104,97,116,32,99,111,109,102,111,114,116,97,98,108,121,32,102,105,116,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,115,32,109,101,109,111,114,121,46,32,68,101,102,97,117,108,116,32,105,115,32,50,48,32,77,66,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,52,55>>,signature => [{attribute,1289,spec,{{sendfile,5},[{type,1289,bounded_fun,[{type,1289,'fun',[{type,1289,product,[{var,1289,'RawFile'},{var,1289,'Socket'},{var,1289,'Offset'},{var,1289,'Bytes'},{var,1289,'Opts'}]},{type,1290,union,[{type,1290,tuple,[{atom,1290,ok},{type,1290,non_neg_integer,[]}]},{type,1290,tuple,[{atom,1290,error},{type,1290,union,[{remote_type,1290,[{atom,1290,inet},{atom,1290,posix},[]]},{atom,1291,closed},{atom,1291,badarg},{atom,1291,not_owner}]}]}]}]},[{type,1292,constraint,[{atom,1292,is_subtype},[{var,1292,'RawFile'},{user_type,1292,fd,[]}]]},{type,1293,constraint,[{atom,1293,is_subtype},[{var,1293,'Socket'},{remote_type,1293,[{atom,1293,inet},{atom,1293,socket},[]]}]]},{type,1294,constraint,[{atom,1294,is_subtype},[{var,1294,'Offset'},{type,1294,non_neg_integer,[]}]]},{type,1295,constraint,[{atom,1295,is_subtype},[{var,1295,'Bytes'},{type,1295,non_neg_integer,[]}]]},{type,1296,constraint,[{atom,1296,is_subtype},[{var,1296,'Opts'},{type,1296,list,[{user_type,1296,sendfile_option,[]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,set_cwd,1},[{file,[102,105,108,101,46,101,114,108]},{location,206}],[<<115,101,116,95,99,119,100,47,49>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,99,117,114,114,101,110,116,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,116,111,32>>,{code,[],[<<68,105,114>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32,109,111,100,117,108,101,32>>,{code,[],[<<102,105,108,101>>]},<<32,117,115,117,97,108,108,121,32,116,114,101,97,116,32,98,105,110,97,114,105,101,115,32,97,115,32,114,97,119,32,102,105,108,101,110,97,109,101,115,44,32,116,104,97,116,32,105,115,44,32,116,104,101,121,32,97,114,101,32,112,97,115,115,101,100,32,34,97,115,32,105,115,34,32,101,118,101,110,32,119,104,101,110,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,100,111,101,115,32,110,111,116,32,97,103,114,101,101,32,119,105,116,104,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,40,41>>]}]},<<46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,101,120,112,101,99,116,115,32,98,105,110,97,114,105,101,115,32,116,111,32,98,101,32,101,110,99,111,100,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,118,97,108,117,101,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,40,41>>]},<<46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,32,97,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,115,46>>]}]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[{code,[],[<<68,105,114>>]},<<32,104,97,115,32,97,110,32,105,109,112,114,111,112,101,114,32,116,121,112,101,44,32,115,117,99,104,32,97,115,32,116,117,112,108,101,46>>]}]},{dt,[],[{code,[],[<<110,111,95,116,114,97,110,115,108,97,116,105,111,110>>]}]},{dd,[],[{p,[],[{code,[],[<<68,105,114>>]},<<32,105,115,32,97,32>>,{code,[],[<<98,105,110,97,114,121,40,41>>]},<<32,119,105,116,104,32,99,104,97,114,97,99,116,101,114,115,32,99,111,100,101,100,32,105,110,32,73,83,79,45,108,97,116,105,110,45,49,32,97,110,100,32,116,104,101,32,86,77,32,105,115,32,111,112,101,114,97,116,105,110,103,32,119,105,116,104,32,117,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,44,32,97,32,98,97,100,32,116,121,112,101,32,102,111,114,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<68,105,114>>]},<<32,119,105,108,108,32,112,114,111,98,97,98,108,121,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,55,52>>,signature => [{attribute,206,spec,{{set_cwd,1},[{type,206,bounded_fun,[{type,206,'fun',[{type,206,product,[{var,206,'Dir'}]},{type,206,union,[{atom,206,ok},{type,206,tuple,[{atom,206,error},{var,206,'Reason'}]}]}]},[{type,207,constraint,[{atom,207,is_subtype},[{var,207,'Dir'},{type,207,union,[{user_type,207,name,[]},{var,207,'EncodedBinary'}]}]]},{type,208,constraint,[{atom,208,is_subtype},[{var,208,'EncodedBinary'},{type,208,binary,[]}]]},{type,209,constraint,[{atom,209,is_subtype},[{var,209,'Reason'},{type,209,union,[{user_type,209,posix,[]},{atom,209,badarg},{atom,209,no_translation}]}]]}]]}]}}]}},{{function,sync,1},[{file,[102,105,108,101,46,101,114,108]},{location,742}],[<<115,121,110,99,47,49>>],#{<<101,110>> => [{p,[],[<<69,110,115,117,114,101,115,32,116,104,97,116,32,97,110,121,32,98,117,102,102,101,114,115,32,107,101,112,116,32,98,121,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,40,110,111,116,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,41,32,97,114,101,32,119,114,105,116,116,101,110,32,116,111,32,100,105,115,107,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,109,105,103,104,116,32,104,97,118,101,32,110,111,32,101,102,102,101,99,116,46>>]},{p,[],[<<65,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,32,105,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,108,101,102,116,32,116,111,32,119,114,105,116,101,32,116,104,101,32,102,105,108,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,50,49>>,signature => [{attribute,742,spec,{{sync,1},[{type,742,bounded_fun,[{type,742,'fun',[{type,742,product,[{var,742,'IoDevice'}]},{type,742,union,[{atom,742,ok},{type,742,tuple,[{atom,742,error},{var,742,'Reason'}]}]}]},[{type,743,constraint,[{atom,743,is_subtype},[{var,743,'IoDevice'},{user_type,743,io_device,[]}]]},{type,744,constraint,[{atom,744,is_subtype},[{var,744,'Reason'},{type,744,union,[{user_type,744,posix,[]},{atom,744,badarg},{atom,744,terminated}]}]]}]]}]}}]}},{{function,truncate,1},[{file,[102,105,108,101,46,101,114,108]},{location,766}],[<<116,114,117,110,99,97,116,101,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,117,110,99,97,116,101,115,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,51,55>>,signature => [{attribute,766,spec,{{truncate,1},[{type,766,bounded_fun,[{type,766,'fun',[{type,766,product,[{var,766,'IoDevice'}]},{type,766,union,[{atom,766,ok},{type,766,tuple,[{atom,766,error},{var,766,'Reason'}]}]}]},[{type,767,constraint,[{atom,767,is_subtype},[{var,767,'IoDevice'},{user_type,767,io_device,[]}]]},{type,768,constraint,[{atom,768,is_subtype},[{var,768,'Reason'},{type,768,union,[{user_type,768,posix,[]},{atom,768,badarg},{atom,768,terminated}]}]]}]]}]}}]}},{{function,write,2},[{file,[102,105,108,101,46,101,114,108]},{location,676}],[<<119,114,105,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<87,114,105,116,101,115,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,116,111,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,104,101,32,111,110,108,121,32,119,97,121,32,116,111,32,119,114,105,116,101,32,116,111,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,40,97,108,116,104,111,117,103,104,32,105,116,32,119,111,114,107,115,32,102,111,114,32,110,111,114,109,97,108,108,121,32,111,112,101,110,101,100,32,102,105,108,101,115,32,116,111,111,41,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,97,110,100,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,111,116,104,101,114,119,105,115,101,46>>]},{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,101,97,99,104,32,98,121,116,101,32,119,114,105,116,116,101,110,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,109,97,110,121,32,98,121,116,101,115,32,98,101,105,110,103,32,119,114,105,116,116,101,110,32,116,111,32,116,104,101,32,102,105,108,101,44,32,97,115,32,116,104,101,32,98,121,116,101,32,114,97,110,103,101,32,48,46,46,50,53,53,32,99,97,110,32,114,101,112,114,101,115,101,110,116,32,97,110,121,116,104,105,110,103,32,98,101,116,119,101,101,110,32,111,110,101,32,97,110,100,32,102,111,117,114,32,98,121,116,101,115,32,100,101,112,101,110,100,105,110,103,32,111,110,32,118,97,108,117,101,32,97,110,100,32,85,84,70,32,101,110,99,111,100,105,110,103,32,116,121,112,101,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,98,97,100,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,99,101,32,105,115,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,52,54>>,signature => [{attribute,676,spec,{{write,2},[{type,676,bounded_fun,[{type,676,'fun',[{type,676,product,[{var,676,'IoDevice'},{var,676,'Bytes'}]},{type,676,union,[{atom,676,ok},{type,676,tuple,[{atom,676,error},{var,676,'Reason'}]}]}]},[{type,677,constraint,[{atom,677,is_subtype},[{var,677,'IoDevice'},{type,677,union,[{user_type,677,io_device,[]},{type,677,atom,[]}]}]]},{type,678,constraint,[{atom,678,is_subtype},[{var,678,'Bytes'},{type,678,iodata,[]}]]},{type,679,constraint,[{atom,679,is_subtype},[{var,679,'Reason'},{type,679,union,[{user_type,679,posix,[]},{atom,679,badarg},{atom,679,terminated}]}]]}]]}]}}]}},{{function,write_file,2},[{file,[102,105,108,101,46,101,114,108]},{location,443}],[<<119,114,105,116,101,95,102,105,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<87,114,105,116,101,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<32,116,101,114,109,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,116,111,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,84,104,101,32,102,105,108,101,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,73,102,32,105,116,32,101,120,105,115,116,115,44,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,111,110,116,101,110,116,115,32,97,114,101,32,111,118,101,114,119,114,105,116,116,101,110,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,99,101,32,105,115,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,119,114,105,116,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,115,101,97,114,99,104,105,110,103,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,97,109,101,100,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,55,50>>,signature => [{attribute,443,spec,{{write_file,2},[{type,443,bounded_fun,[{type,443,'fun',[{type,443,product,[{var,443,'Filename'},{var,443,'Bytes'}]},{type,443,union,[{atom,443,ok},{type,443,tuple,[{atom,443,error},{var,443,'Reason'}]}]}]},[{type,444,constraint,[{atom,444,is_subtype},[{var,444,'Filename'},{user_type,444,name_all,[]}]]},{type,445,constraint,[{atom,445,is_subtype},[{var,445,'Bytes'},{type,445,iodata,[]}]]},{type,446,constraint,[{atom,446,is_subtype},[{var,446,'Reason'},{type,446,union,[{user_type,446,posix,[]},{atom,446,badarg},{atom,446,terminated},{atom,446,system_limit}]}]]}]]}]}}]}},{{function,write_file,3},[{file,[102,105,108,101,46,101,114,108]},{location,455}],[<<119,114,105,116,101,95,102,105,108,101,47,51>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<119,114,105,116,101,95,102,105,108,101,47,50>>]},<<44,32,98,117,116,32,116,97,107,101,115,32,97,32,116,104,105,114,100,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<77,111,100,101,115>>]},<<44,32,97,32,108,105,115,116,32,111,102,32,112,111,115,115,105,98,108,101,32,109,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46,32,84,104,101,32,109,111,100,101,32,102,108,97,103,115,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,97,110,100,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,97,114,101,32,105,109,112,108,105,99,105,116,44,32,115,111,32,116,104,101,121,32,97,114,101,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,48,57>>,signature => [{attribute,455,spec,{{write_file,3},[{type,455,bounded_fun,[{type,455,'fun',[{type,455,product,[{var,455,'Filename'},{var,455,'Bytes'},{var,455,'Modes'}]},{type,455,union,[{atom,455,ok},{type,455,tuple,[{atom,455,error},{var,455,'Reason'}]}]}]},[{type,456,constraint,[{atom,456,is_subtype},[{var,456,'Filename'},{user_type,456,name_all,[]}]]},{type,457,constraint,[{atom,457,is_subtype},[{var,457,'Bytes'},{type,457,iodata,[]}]]},{type,458,constraint,[{atom,458,is_subtype},[{var,458,'Modes'},{type,458,list,[{user_type,458,mode,[]}]}]]},{type,459,constraint,[{atom,459,is_subtype},[{var,459,'Reason'},{type,459,union,[{user_type,459,posix,[]},{atom,459,badarg},{atom,459,terminated},{atom,459,system_limit}]}]]}]]}]}}]}},{{function,write_file_info,3},[{file,[102,105,108,101,46,101,114,108]},{location,380}],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,51>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,50,48>>,equiv => {function,write_file_info,2},signature => [{attribute,380,spec,{{write_file_info,3},[{type,380,bounded_fun,[{type,380,'fun',[{type,380,product,[{var,380,'Filename'},{var,380,'FileInfo'},{var,380,'Opts'}]},{type,380,union,[{atom,380,ok},{type,380,tuple,[{atom,380,error},{var,380,'Reason'}]}]}]},[{type,381,constraint,[{atom,381,is_subtype},[{var,381,'Filename'},{user_type,381,name_all,[]}]]},{type,382,constraint,[{atom,382,is_subtype},[{var,382,'Opts'},{type,382,list,[{user_type,382,file_info_option,[]}]}]]},{type,383,constraint,[{atom,383,is_subtype},[{var,383,'FileInfo'},{user_type,383,file_info,[]}]]},{type,384,constraint,[{atom,384,is_subtype},[{var,384,'Reason'},{type,384,union,[{user_type,384,posix,[]},{atom,384,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,write_file_info,2},[{file,[102,105,108,101,46,101,114,108]},{location,372}],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,102,105,108,101,32,105,110,102,111,114,109,97,116,105,111,110,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,73,110,102,111>>]},<<32,105,115,32,97,32,114,101,99,111,114,100,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<44,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,75,101,114,110,101,108,32,105,110,99,108,117,100,101,32,102,105,108,101,32>>,{code,[],[<<102,105,108,101,46,104,114,108>>]},<<46,32,73,110,99,108,117,100,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,114,101,99,116,105,118,101,32,105,110,32,116,104,101,32,109,111,100,117,108,101,32,102,114,111,109,32,119,104,105,99,104,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<32,45,105,110,99,108,117,100,101,95,108,105,98,40,34,107,101,114,110,101,108,47,105,110,99,108,117,100,101,47,102,105,108,101,46,104,114,108,34,41,46>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,116,121,112,101,32,115,101,116,32,105,110,32>>,{code,[],[<<97,116,105,109,101>>]},<<44,32>>,{code,[],[<<109,116,105,109,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<99,116,105,109,101>>]},<<32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,116,105,109,101,32,116,121,112,101,32,115,101,116,32,105,110,32>>,{code,[],[<<79,112,116,115,32,58,58,32,123,116,105,109,101,44,32,84,121,112,101,125>>]},<<32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,111,99,97,108>>]}]},{dd,[],[{p,[],[<<73,110,116,101,114,112,114,101,116,115,32,116,104,101,32,116,105,109,101,32,115,101,116,32,97,115,32,108,111,99,97,108,46>>]}]},{dt,[],[{code,[],[<<117,110,105,118,101,114,115,97,108>>]}]},{dd,[],[{p,[],[<<73,110,116,101,114,112,114,101,116,115,32,105,116,32,97,115,32,117,110,105,118,101,114,115,97,108,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<112,111,115,105,120>>]}]},{dd,[],[{p,[],[<<77,117,115,116,32,98,101,32,115,101,99,111,110,100,115,32,115,105,110,99,101,32,111,114,32,98,101,102,111,114,101,32,85,110,105,120,32,116,105,109,101,32,101,112,111,99,104,44,32,119,104,105,99,104,32,105,115,32,49,57,55,48,45,48,49,45,48,49,32,48,48,58,48,48,32,85,84,67,46>>]}]}]},{p,[],[<<68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<123,116,105,109,101,44,32,108,111,99,97,108,125>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,97,110,100,32,111,110,108,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,108,111,99,97,108,32,102,105,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,101,108,100,115,32,97,114,101,32,117,115,101,100,32,102,114,111,109,32,116,104,101,32,114,101,99,111,114,100,44,32,105,102,32,116,104,101,121,32,97,114,101,32,115,112,101,99,105,102,105,101,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<109,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,119,114,105,116,116,101,110,46>>]}]},{dt,[],[{code,[],[<<99,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<79,110,32,85,110,105,120,44,32,97,110,121,32,118,97,108,117,101,32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,105,103,110,111,114,101,100,32,40,116,104,101,32,34,99,116,105,109,101,34,32,102,111,114,32,116,104,101,32,102,105,108,101,32,105,115,32,115,101,116,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,41,46,32,79,110,32,87,105,110,100,111,119,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,116,104,101,32,110,101,119,32,99,114,101,97,116,105,111,110,32,116,105,109,101,32,116,111,32,115,101,116,32,102,111,114,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<109,111,100,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,112,101,114,109,105,115,115,105,111,110,115,32,97,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,98,105,116,32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<56,35,48,48,52,48,48>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,50,48,48>>]}]},{dd,[],[{p,[],[<<87,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,49,48,48>>]}]},{dd,[],[{p,[],[<<69,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,52,48>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,50,48>>]}]},{dd,[],[{p,[],[<<87,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,49,48>>]}]},{dd,[],[{p,[],[<<69,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,52>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,50>>]}]},{dd,[],[{p,[],[<<87,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,49>>]}]},{dd,[],[{p,[],[<<69,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<49,54,35,56,48,48>>]}]},{dd,[],[{p,[],[<<83,101,116,32,117,115,101,114,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]},{dt,[],[{code,[],[<<49,54,35,52,48,48>>]}]},{dd,[],[{p,[],[<<83,101,116,32,103,114,111,117,112,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]}]},{p,[],[<<79,110,32,85,110,105,120,32,112,108,97,116,102,111,114,109,115,44,32,111,116,104,101,114,32,98,105,116,115,32,116,104,97,110,32,116,104,111,115,101,32,108,105,115,116,101,100,32,97,98,111,118,101,32,109,97,121,32,98,101,32,115,101,116,46>>]}]},{dt,[],[{code,[],[<<117,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<73,110,100,105,99,97,116,101,115,32,116,104,101,32,102,105,108,101,32,111,119,110,101,114,46,32,73,103,110,111,114,101,100,32,102,111,114,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,46>>]}]},{dt,[],[{code,[],[<<103,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,116,104,101,32,103,114,111,117,112,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,111,119,110,101,114,32,98,101,108,111,110,103,115,32,116,111,46,32,73,103,110,111,114,101,100,32,102,111,114,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,50,48>>,signature => [{attribute,372,spec,{{write_file_info,2},[{type,372,bounded_fun,[{type,372,'fun',[{type,372,product,[{var,372,'Filename'},{var,372,'FileInfo'}]},{type,372,union,[{atom,372,ok},{type,372,tuple,[{atom,372,error},{var,372,'Reason'}]}]}]},[{type,373,constraint,[{atom,373,is_subtype},[{var,373,'Filename'},{user_type,373,name_all,[]}]]},{type,374,constraint,[{atom,374,is_subtype},[{var,374,'FileInfo'},{user_type,374,file_info,[]}]]},{type,375,constraint,[{atom,375,is_subtype},[{var,375,'Reason'},{type,375,union,[{user_type,375,posix,[]},{atom,375,badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{type,deep_list,0},[{file,[102,105,108,101,46,101,114,108]},{location,101}],[<<45,116,121,112,101,32,100,101,101,112,95,108,105,115,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,101,type,{deep_list,{type,101,list,[{type,101,union,[{type,101,char,[]},{type,101,atom,[]},{user_type,101,deep_list,[]}]}]},[]}}]}},{{type,fd,0},[{file,[102,105,108,101,46,101,114,108]},{location,87}],[<<102,100,40,41>>],#{<<101,110>> => [{p,[],[<<65,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,114,101,112,114,101,115,101,110,116,105,110,103,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,97,119>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,97,119>>]}]},<<32,109,111,100,101,46>>]}]},#{signature => [{attribute,87,type,{fd,{type,87,record,[{atom,87,file_descriptor}]},[]}}]}},{{type,filename,0},[{file,[102,105,108,101,46,101,114,108]},{location,84}],[<<45,116,121,112,101,32,102,105,108,101,110,97,109,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32,97,108,115,111,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<110,97,109,101,95,97,108,108,40,41>>]}]},<<32,116,121,112,101,46>>]}]},#{signature => [{attribute,84,type,{filename,{type,84,string,[]},[]}}]}},{{type,filename_all,0},[{file,[102,105,108,101,46,101,114,108]},{location,85}],[<<45,116,121,112,101,32,102,105,108,101,110,97,109,101,95,97,108,108,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32,97,108,115,111,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<110,97,109,101,95,97,108,108,40,41>>]}]},<<32,116,121,112,101,46>>]}]},#{signature => [{attribute,85,type,{filename_all,{type,85,union,[{type,85,string,[]},{type,85,binary,[]}]},[]}}]}},{{type,io_device,0},[{file,[102,105,108,101,46,101,114,108]},{location,88}],[<<45,116,121,112,101,32,105,111,95,100,101,118,105,99,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<59,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,105,115,32,97,32,112,114,111,99,101,115,115,32,104,97,110,100,108,105,110,103,32,73,47,79,45,112,114,111,116,111,99,111,108,115,46>>]}]},#{signature => [{attribute,88,type,{io_device,{type,88,union,[{type,88,pid,[]},{user_type,88,fd,[]}]},[]}}]}},{{type,name,0},[{file,[102,105,108,101,46,101,114,108]},{location,102}],[<<45,116,121,112,101,32,110,97,109,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<73,102,32,86,77,32,105,115,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,44,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<32,97,110,100,32>>,{code,[],[<<99,104,97,114,40,41>>]},<<32,97,114,101,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,62,32,50,53,53,46,32,83,101,101,32,97,108,115,111,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<110,97,109,101,95,97,108,108,40,41>>]}]},<<32,116,121,112,101,46>>]}]},#{signature => [{attribute,102,type,{name,{type,102,union,[{type,102,string,[]},{type,102,atom,[]},{user_type,102,deep_list,[]}]},[]}}]}},{{type,name_all,0},[{file,[102,105,108,101,46,101,114,108]},{location,103}],[<<45,116,121,112,101,32,110,97,109,101,95,97,108,108,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<73,102,32,86,77,32,105,115,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,44,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,62,32,50,53,53,46,32>>,{code,[],[<<82,97,119,70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,32,102,105,108,101,110,97,109,101,32,110,111,116,32,115,117,98,106,101,99,116,32,116,111,32,85,110,105,99,111,100,101,32,116,114,97,110,115,108,97,116,105,111,110,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,105,116,32,99,97,110,32,99,111,110,116,97,105,110,32,99,104,97,114,97,99,116,101,114,115,32,110,111,116,32,99,111,110,102,111,114,109,105,110,103,32,116,111,32,116,104,101,32,85,110,105,99,111,100,101,32,101,110,99,111,100,105,110,103,32,101,120,112,101,99,116,101,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,40,116,104,97,116,32,105,115,44,32,110,111,110,45,85,84,70,45,56,32,99,104,97,114,97,99,116,101,114,115,32,97,108,116,104,111,117,103,104,32,116,104,101,32,86,77,32,105,115,32,115,116,97,114,116,101,100,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,41,46,32,78,117,108,108,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,116,101,103,101,114,32,118,97,108,117,101,32,122,101,114,111,41,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,97,108,108,111,119,101,100,32,105,110,32,102,105,108,101,110,97,109,101,115,32,40,110,111,116,32,101,118,101,110,32,97,116,32,116,104,101,32,101,110,100,41,46>>]}]},#{signature => [{attribute,103,type,{name_all,{type,103,union,[{type,103,string,[]},{type,103,atom,[]},{user_type,103,deep_list,[]},{ann_type,103,[{var,103,'RawFilename'},{type,103,binary,[]}]}]},[]}}]}},{{type,posix,0},[{file,[102,105,108,101,46,101,114,108]},{location,104}],[<<45,116,121,112,101,32,112,111,115,105,120,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,97,116,111,109,32,116,104,97,116,32,105,115,32,110,97,109,101,100,32,102,114,111,109,32,116,104,101,32,80,79,83,73,88,32,101,114,114,111,114,32,99,111,100,101,115,32,117,115,101,100,32,105,110,32,85,110,105,120,44,32,97,110,100,32,105,110,32,116,104,101,32,114,117,110,116,105,109,101,32,108,105,98,114,97,114,105,101,115,32,111,102,32,109,111,115,116,32,67,32,99,111,109,112,105,108,101,114,115,46>>]}]},#{signature => [{attribute,104,type,{posix,{type,105,union,[{atom,105,eacces},{atom,105,eagain},{atom,106,ebadf},{atom,106,ebadmsg},{atom,106,ebusy},{atom,107,edeadlk},{atom,107,edeadlock},{atom,107,edquot},{atom,108,eexist},{atom,109,efault},{atom,109,efbig},{atom,109,eftype},{atom,110,eintr},{atom,110,einval},{atom,110,eio},{atom,110,eisdir},{atom,111,eloop},{atom,112,emfile},{atom,112,emlink},{atom,112,emultihop},{atom,113,enametoolong},{atom,113,enfile},{atom,114,enobufs},{atom,114,enodev},{atom,114,enolck},{atom,114,enolink},{atom,114,enoent},{atom,115,enomem},{atom,115,enospc},{atom,115,enosr},{atom,115,enostr},{atom,115,enosys},{atom,116,enotblk},{atom,116,enotdir},{atom,116,enotsup},{atom,116,enxio},{atom,117,eopnotsupp},{atom,117,eoverflow},{atom,118,eperm},{atom,118,epipe},{atom,119,erange},{atom,119,erofs},{atom,120,espipe},{atom,120,esrch},{atom,120,estale},{atom,121,etxtbsy},{atom,122,exdev}]},[]}}]}},{{type,date_time,0},[{file,[102,105,108,101,46,101,114,108]},{location,123}],[<<45,116,121,112,101,32,100,97,116,101,95,116,105,109,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<77,117,115,116,32,100,101,110,111,116,101,32,97,32,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{signature => [{attribute,123,type,{date_time,{remote_type,123,[{atom,123,calendar},{atom,123,datetime},[]]},[]}}]}},{{type,file_info,0},[{file,[102,105,108,101,46,101,114,108]},{location,86}],[<<45,116,121,112,101,32,102,105,108,101,95,105,110,102,111,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,86,type,{file_info,{type,86,record,[{atom,86,file_info}]},[]}}]}},{{type,location,0},[{file,[102,105,108,101,46,101,114,108]},{location,89}],[<<45,116,121,112,101,32,108,111,99,97,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,89,type,{location,{type,89,union,[{type,89,integer,[]},{type,89,tuple,[{atom,89,bof},{ann_type,89,[{var,89,'Offset'},{type,89,integer,[]}]}]},{type,90,tuple,[{atom,90,cur},{ann_type,90,[{var,90,'Offset'},{type,90,integer,[]}]}]},{type,91,tuple,[{atom,91,eof},{ann_type,91,[{var,91,'Offset'},{type,91,integer,[]}]}]},{atom,91,bof},{atom,91,cur},{atom,91,eof}]},[]}}]}},{{type,mode,0},[{file,[102,105,108,101,46,101,114,108]},{location,92}],[<<45,116,121,112,101,32,109,111,100,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,92,type,{mode,{type,92,union,[{atom,92,read},{atom,92,write},{atom,92,append},{atom,93,exclusive},{atom,93,raw},{atom,93,binary},{type,94,tuple,[{atom,94,delayed_write},{ann_type,95,[{var,95,'Size'},{type,95,non_neg_integer,[]}]},{ann_type,96,[{var,96,'Delay'},{type,96,non_neg_integer,[]}]}]},{atom,97,delayed_write},{type,97,tuple,[{atom,97,read_ahead},{ann_type,97,[{var,97,'Size'},{type,97,pos_integer,[]}]}]},{atom,98,read_ahead},{atom,98,compressed},{type,99,tuple,[{atom,99,encoding},{remote_type,99,[{atom,99,unicode},{atom,99,encoding},[]]}]},{atom,100,sync}]},[]}}]}},{{type,file_info_option,0},[{file,[102,105,108,101,46,101,114,108]},{location,129}],[<<45,116,121,112,101,32,102,105,108,101,95,105,110,102,111,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,129,type,{file_info_option,{type,129,union,[{type,129,tuple,[{atom,129,time},{atom,129,local}]},{type,129,tuple,[{atom,129,time},{atom,129,universal}]},{type,130,tuple,[{atom,130,time},{atom,130,posix}]},{atom,130,raw}]},[]}}]}}]}. \ No newline at end of file
+{docs_v1,[{file,[102,105,108,101,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<84,104,105,115,32,109,111,100,117,108,101,32,112,114,111,118,105,100,101,115,32,97,110,32,105,110,116,101,114,102,97,99,101,32,116,111,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<70,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,97,114,101,32,111,110,108,121,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,97,112,112,101,97,114,32,97,116,111,109,105,99,32,119,104,101,110,32,103,111,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,32,115,97,109,101,32,102,105,108,101,32,115,101,114,118,101,114,46,32,65,32,78,73,70,32,111,114,32,111,116,104,101,114,32,79,83,32,112,114,111,99,101,115,115,32,109,97,121,32,111,98,115,101,114,118,101,32,105,110,116,101,114,109,101,100,105,97,116,101,32,115,116,101,112,115,32,111,110,32,99,101,114,116,97,105,110,32,111,112,101,114,97,116,105,111,110,115,32,111,110,32,115,111,109,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,115,44,32,101,103,46,32,114,101,110,97,109,105,110,103,32,97,110,32,101,120,105,115,116,105,110,103,32,102,105,108,101,32,111,110,32,87,105,110,100,111,119,115,44,32,111,114,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]},<<32>>]},<<111,110,32,97,110,121,32,79,83,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,119,114,105,116,105,110,103,46>>]}]},{p,[],[<<82,101,103,97,114,100,105,110,103,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,44,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,99,97,110,32,111,112,101,114,97,116,101,32,105,110,32,116,119,111,32,109,111,100,101,115,46,32,84,104,101,32,99,117,114,114,101,110,116,32,109,111,100,101,32,99,97,110,32,98,101,32,113,117,101,114,105,101,100,32,117,115,105,110,103,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>]}]},<<46,32,73,116,32,114,101,116,117,114,110,115,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,111,114,32>>,{code,[],[<<117,116,102,56>>]},<<46>>]},{p,[],[<<73,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,109,111,100,101,44,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,100,111,101,115,32,110,111,116,32,99,104,97,110,103,101,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32,102,105,108,101,110,97,109,101,115,46,32,73,110,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,44,32,102,105,108,101,110,97,109,101,115,32,99,97,110,32,99,111,110,116,97,105,110,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,50,53,53,32,97,110,100,32,116,104,101,32,86,77,32,99,111,110,118,101,114,116,115,32,102,105,108,101,110,97,109,101,115,32,98,97,99,107,32,97,110,100,32,102,111,114,116,104,32,116,111,32,116,104,101,32,110,97,116,105,118,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,40,117,115,117,97,108,108,121,32,85,84,70,45,56,44,32,98,117,116,32,85,84,70,45,49,54,32,111,110,32,87,105,110,100,111,119,115,41,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,109,111,100,101,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,46,32,87,105,110,100,111,119,115,44,32,77,97,99,79,83,32,88,32,97,110,100,32,65,110,100,114,111,105,100,32,101,110,102,111,114,99,101,32,99,111,110,115,105,115,116,101,110,116,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,116,104,101,32,86,77,32,117,115,101,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,46>>]},{p,[],[<<79,110,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,115,32,119,105,116,104,32,116,114,97,110,115,112,97,114,101,110,116,32,110,97,109,105,110,103,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,97,108,108,32,85,110,105,120,32,115,121,115,116,101,109,115,32,101,120,99,101,112,116,32,77,97,99,79,83,32,88,41,44,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<32,105,102,32,116,104,101,32,116,101,114,109,105,110,97,108,32,115,117,112,112,111,114,116,115,32,85,84,70,45,56,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<46,32,84,104,101,32,100,101,102,97,117,108,116,32,99,97,110,32,98,101,32,111,118,101,114,114,105,100,100,101,110,32,117,115,105,110,103,32>>,{code,[],[<<43,102,110,108>>]},<<32,40,116,111,32,102,111,114,99,101,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,109,111,100,101,41,32,111,114,32>>,{code,[],[<<43,102,110,117>>]},<<32,40,116,111,32,102,111,114,99,101,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,41,32,119,104,101,110,32,115,116,97,114,116,105,110,103,32>>,{a,[{href,<<101,114,116,115,58,101,114,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,99,111,109>>}],[{code,[],[<<101,114,108>>]}]},<<46>>]},{p,[],[<<79,110,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,115,32,119,105,116,104,32,116,114,97,110,115,112,97,114,101,110,116,32,110,97,109,105,110,103,44,32,102,105,108,101,115,32,99,97,110,32,98,101,32,105,110,99,111,110,115,105,115,116,101,110,116,108,121,32,110,97,109,101,100,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,115,111,109,101,32,102,105,108,101,115,32,97,114,101,32,101,110,99,111,100,101,100,32,105,110,32,85,84,70,45,56,32,119,104,105,108,101,32,111,116,104,101,114,115,32,97,114,101,32,101,110,99,111,100,101,100,32,105,110,32,73,83,79,32,76,97,116,105,110,45,49,46,32,84,104,101,32,99,111,110,99,101,112,116,32,111,102,32>>,{em,[],[<<114,97,119,32,102,105,108,101,110,97,109,101,115>>]},<<32,105,115,32,105,110,116,114,111,100,117,99,101,100,32,116,111,32,104,97,110,100,108,101,32,102,105,108,101,32,115,121,115,116,101,109,115,32,119,105,116,104,32,105,110,99,111,110,115,105,115,116,101,110,116,32,110,97,109,105,110,103,32,119,104,101,110,32,114,117,110,110,105,110,103,32,105,110,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,46>>]},{p,[],[<<65,32>>,{em,[],[<<114,97,119,32,102,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,32,102,105,108,101,110,97,109,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,105,110,97,114,121,46,32,84,104,101,32,69,114,108,97,110,103,32,86,77,32,100,111,101,115,32,110,111,116,32,116,114,97,110,115,108,97,116,101,32,97,32,102,105,108,101,110,97,109,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,105,110,97,114,121,32,111,110,32,115,121,115,116,101,109,115,32,119,105,116,104,32,116,114,97,110,115,112,97,114,101,110,116,32,110,97,109,105,110,103,46>>]},{p,[],[<<87,104,101,110,32,114,117,110,110,105,110,103,32,105,110,32>>,{code,[],[<<117,116,102,56>>]},<<32,109,111,100,101,44,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,108,105,115,116,95,100,105,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<108,105,115,116,95,100,105,114,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,107,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,108,105,110,107,47,49>>]}]},<<32,110,101,118,101,114,32,114,101,116,117,114,110,32,114,97,119,32,102,105,108,101,110,97,109,101,115,46,32,84,111,32,114,101,116,117,114,110,32,97,108,108,32,102,105,108,101,110,97,109,101,115,32,105,110,99,108,117,100,105,110,103,32,114,97,119,32,102,105,108,101,110,97,109,101,115,44,32,117,115,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,108,105,115,116,95,100,105,114,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<108,105,115,116,95,100,105,114,95,97,108,108,47,49>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,107,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,101,97,100,95,108,105,110,107,95,97,108,108,47,49>>]}]},<<46>>]},{p,[],[<<83,101,101,32,97,108,115,111,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101,95,117,115,97,103,101,35,110,111,116,101,115,45,97,98,111,117,116,45,114,97,119,45,102,105,108,101,110,97,109,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,103,117,105,100,101>>}],[<<78,111,116,101,115,32,65,98,111,117,116,32,82,97,119,32,70,105,108,101,110,97,109,101,115>>]},<<32,105,110,32,116,104,101,32,83,84,68,76,73,66,32,85,115,101,114,39,115,32,71,117,105,100,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<70,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,117,115,101,100,32,116,111,32,97,99,99,101,112,116,32,102,105,108,101,110,97,109,101,115,32,99,111,110,116,97,105,110,105,110,103,32,110,117,108,108,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,116,101,103,101,114,32,118,97,108,117,101,32,122,101,114,111,41,46,32,84,104,105,115,32,99,97,117,115,101,100,32,116,104,101,32,110,97,109,101,32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100,32,97,110,100,32,105,110,32,115,111,109,101,32,99,97,115,101,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,112,114,105,109,105,116,105,118,101,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,98,101,32,109,105,120,101,100,32,117,112,46,32,70,105,108,101,110,97,109,101,115,32,99,111,110,116,97,105,110,105,110,103,32,110,117,108,108,32,99,104,97,114,97,99,116,101,114,115,32,105,110,115,105,100,101,32,116,104,101,32,102,105,108,101,110,97,109,101,32,97,114,101,32,110,111,119,32>>,{em,[],[<<114,101,106,101,99,116,101,100>>]},<<32,97,110,100,32,119,105,108,108,32,99,97,117,115,101,32,112,114,105,109,105,116,105,118,101,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,102,97,105,108,46>>]}]},{h2,[],[<<80,79,83,73,88,32,69,114,114,111,114,32,67,111,100,101,115>>]},{ul,[],[{li,[],[{code,[],[<<101,97,99,99,101,115>>]},<<32,45,32,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100>>]},{li,[],[{code,[],[<<101,97,103,97,105,110>>]},<<32,45,32,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101>>]},{li,[],[{code,[],[<<101,98,97,100,102>>]},<<32,45,32,66,97,100,32,102,105,108,101,32,110,117,109,98,101,114>>]},{li,[],[{code,[],[<<101,98,117,115,121>>]},<<32,45,32,70,105,108,101,32,98,117,115,121>>]},{li,[],[{code,[],[<<101,100,113,117,111,116>>]},<<32,45,32,68,105,115,107,32,113,117,111,116,97,32,101,120,99,101,101,100,101,100>>]},{li,[],[{code,[],[<<101,101,120,105,115,116>>]},<<32,45,32,70,105,108,101,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115>>]},{li,[],[{code,[],[<<101,102,97,117,108,116>>]},<<32,45,32,66,97,100,32,97,100,100,114,101,115,115,32,105,110,32,115,121,115,116,101,109,32,99,97,108,108,32,97,114,103,117,109,101,110,116>>]},{li,[],[{code,[],[<<101,102,98,105,103>>]},<<32,45,32,70,105,108,101,32,116,111,111,32,108,97,114,103,101>>]},{li,[],[{code,[],[<<101,105,110,116,114>>]},<<32,45,32,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108>>]},{li,[],[{code,[],[<<101,105,110,118,97,108>>]},<<32,45,32,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116>>]},{li,[],[{code,[],[<<101,105,111>>]},<<32,45,32,73,47,79,32,101,114,114,111,114>>]},{li,[],[{code,[],[<<101,105,115,100,105,114>>]},<<32,45,32,73,108,108,101,103,97,108,32,111,112,101,114,97,116,105,111,110,32,111,110,32,97,32,100,105,114,101,99,116,111,114,121>>]},{li,[],[{code,[],[<<101,108,111,111,112>>]},<<32,45,32,84,111,111,32,109,97,110,121,32,108,101,118,101,108,115,32,111,102,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115>>]},{li,[],[{code,[],[<<101,109,102,105,108,101>>]},<<32,45,32,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115>>]},{li,[],[{code,[],[<<101,109,108,105,110,107>>]},<<32,45,32,84,111,111,32,109,97,110,121,32,108,105,110,107,115>>]},{li,[],[{code,[],[<<101,110,97,109,101,116,111,111,108,111,110,103>>]},<<32,45,32,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103>>]},{li,[],[{code,[],[<<101,110,102,105,108,101>>]},<<32,45,32,70,105,108,101,32,116,97,98,108,101,32,111,118,101,114,102,108,111,119>>]},{li,[],[{code,[],[<<101,110,111,100,101,118>>]},<<32,45,32,78,111,32,115,117,99,104,32,100,101,118,105,99,101>>]},{li,[],[{code,[],[<<101,110,111,101,110,116>>]},<<32,45,32,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121>>]},{li,[],[{code,[],[<<101,110,111,109,101,109>>]},<<32,45,32,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121>>]},{li,[],[{code,[],[<<101,110,111,115,112,99>>]},<<32,45,32,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101>>]},{li,[],[{code,[],[<<101,110,111,116,98,108,107>>]},<<32,45,32,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100>>]},{li,[],[{code,[],[<<101,110,111,116,100,105,114>>]},<<32,45,32,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121>>]},{li,[],[{code,[],[<<101,110,111,116,115,117,112>>]},<<32,45,32,79,112,101,114,97,116,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100>>]},{li,[],[{code,[],[<<101,110,120,105,111>>]},<<32,45,32,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115>>]},{li,[],[{code,[],[<<101,112,101,114,109>>]},<<32,45,32,78,111,116,32,111,119,110,101,114>>]},{li,[],[{code,[],[<<101,112,105,112,101>>]},<<32,45,32,66,114,111,107,101,110,32,112,105,112,101>>]},{li,[],[{code,[],[<<101,114,111,102,115>>]},<<32,45,32,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109>>]},{li,[],[{code,[],[<<101,115,112,105,112,101>>]},<<32,45,32,73,110,118,97,108,105,100,32,115,101,101,107>>]},{li,[],[{code,[],[<<101,115,114,99,104>>]},<<32,45,32,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115>>]},{li,[],[{code,[],[<<101,115,116,97,108,101>>]},<<32,45,32,83,116,97,108,101,32,114,101,109,111,116,101,32,102,105,108,101,32,104,97,110,100,108,101>>]},{li,[],[{code,[],[<<101,120,100,101,118>>]},<<32,45,32,67,114,111,115,115,45,100,111,109,97,105,110,32,108,105,110,107>>]}]},{h2,[],[<<80,101,114,102,111,114,109,97,110,99,101>>]},{p,[],[<<70,111,114,32,105,110,99,114,101,97,115,101,100,32,112,101,114,102,111,114,109,97,110,99,101,44,32,114,97,119,32,102,105,108,101,115,32,97,114,101,32,114,101,99,111,109,109,101,110,100,101,100,46>>]},{p,[],[<<65,32,110,111,114,109,97,108,32,102,105,108,101,32,105,115,32,114,101,97,108,108,121,32,97,32,112,114,111,99,101,115,115,32,115,111,32,105,116,32,99,97,110,32,98,101,32,117,115,101,100,32,97,115,32,97,110,32,73,47,79,32,100,101,118,105,99,101,32,40,115,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111>>]}]},<<41,46,32,84,104,101,114,101,102,111,114,101,44,32,119,104,101,110,32,100,97,116,97,32,105,115,32,119,114,105,116,116,101,110,32,116,111,32,97,32,110,111,114,109,97,108,32,102,105,108,101,44,32,116,104,101,32,115,101,110,100,105,110,103,32,111,102,32,116,104,101,32,100,97,116,97,32,116,111,32,116,104,101,32,102,105,108,101,32,112,114,111,99,101,115,115,44,32,99,111,112,105,101,115,32,97,108,108,32,100,97,116,97,32,116,104,97,116,32,97,114,101,32,110,111,116,32,98,105,110,97,114,105,101,115,46,32,79,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,105,110,32,98,105,110,97,114,121,32,109,111,100,101,32,97,110,100,32,119,114,105,116,105,110,103,32,98,105,110,97,114,105,101,115,32,105,115,32,116,104,101,114,101,102,111,114,101,32,114,101,99,111,109,109,101,110,100,101,100,46,32,73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,111,110,32,97,110,111,116,104,101,114,32,110,111,100,101,44,32,111,114,32,105,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,114,117,110,115,32,97,115,32,115,108,97,118,101,32,116,111,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,97,110,111,116,104,101,114,32,110,111,100,101,44,32,97,108,115,111,32,98,105,110,97,114,105,101,115,32,97,114,101,32,99,111,112,105,101,100,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<82,97,119,32,102,105,108,101,115,32,117,115,101,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,111,102,32,116,104,101,32,104,111,115,116,32,109,97,99,104,105,110,101,32,111,102,32,116,104,101,32,110,111,100,101,46,32,70,111,114,32,110,111,114,109,97,108,32,102,105,108,101,115,32,40,110,111,110,45,114,97,119,41,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,117,115,101,100,32,116,111,32,102,105,110,100,32,116,104,101,32,102,105,108,101,115,44,32,97,110,100,32,105,102,32,116,104,101,32,110,111,100,101,32,105,115,32,114,117,110,110,105,110,103,32,105,116,115,32,102,105,108,101,32,115,101,114,118,101,114,32,97,115,32,115,108,97,118,101,32,116,111,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,97,110,111,116,104,101,114,32,110,111,100,101,44,32,97,110,100,32,116,104,101,32,111,116,104,101,114,32,110,111,100,101,32,114,117,110,115,32,111,110,32,115,111,109,101,32,111,116,104,101,114,32,104,111,115,116,32,109,97,99,104,105,110,101,44,32,116,104,101,121,32,99,97,110,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,102,105,108,101,32,115,121,115,116,101,109,115,46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,105,115,32,115,101,108,100,111,109,32,97,32,112,114,111,98,108,101,109,46>>]}]},{p,[],[{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<32,99,97,110,32,98,101,32,103,105,118,101,110,32,116,104,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,97,100,95,97,104,101,97,100>>]},<<32,116,111,32,116,117,114,110,32,111,110,32,99,97,99,104,105,110,103,44,32,119,104,105,99,104,32,119,105,108,108,32,114,101,100,117,99,101,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,115,32,97,110,100,32,103,114,101,97,116,108,121,32,105,109,112,114,111,118,101,32,112,101,114,102,111,114,109,97,110,99,101,32,102,111,114,32,115,109,97,108,108,32,114,101,97,100,115,32,97,110,100,32,119,114,105,116,101,115,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,111,118,101,114,104,101,97,100,32,119,111,110,39,116,32,100,105,115,97,112,112,101,97,114,32,99,111,109,112,108,101,116,101,108,121,32,97,110,100,32,105,116,39,115,32,98,101,115,116,32,116,111,32,107,101,101,112,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,97,32,109,105,110,105,109,117,109,46,32,65,115,32,97,32,99,111,110,116,114,105,118,101,100,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,117,110,99,116,105,111,110,32,119,114,105,116,101,115,32,52,77,66,32,105,110,32,50,46,53,32,115,101,99,111,110,100,115,32,119,104,101,110,32,116,101,115,116,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,40,78,97,109,101,41,32,45,62,10,32,32,32,32,123,111,107,44,32,70,100,125,32,61,32,102,105,108,101,58,111,112,101,110,40,78,97,109,101,44,32,91,114,97,119,44,32,119,114,105,116,101,44,32,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,98,105,110,97,114,121,93,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,70,100,44,32,52,32,98,115,108,32,50,48,41,44,10,32,32,32,32,102,105,108,101,58,99,108,111,115,101,40,70,100,41,46,10,10,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,95,70,100,44,32,48,41,32,45,62,10,32,32,32,32,111,107,59,10,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,70,100,44,32,77,41,32,45,62,10,32,32,32,32,111,107,32,61,32,102,105,108,101,58,119,114,105,116,101,40,70,100,44,32,60,60,48,62,62,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,115,108,111,119,95,49,40,70,100,44,32,77,32,45,32,49,41,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,102,117,110,99,116,105,111,110,97,108,108,121,32,101,113,117,105,118,97,108,101,110,116,32,99,111,100,101,32,119,114,105,116,101,115,32,49,50,56,32,98,121,116,101,115,32,112,101,114,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<32,97,110,100,32,115,111,32,100,111,101,115,32,116,104,101,32,115,97,109,101,32,119,111,114,107,32,105,110,32,48,46,48,56,32,115,101,99,111,110,100,115,44,32,119,104,105,99,104,32,105,115,32,114,111,117,103,104,108,121,32,51,48,32,116,105,109,101,115,32,102,97,115,116,101,114,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<99,114,101,97,116,101,95,102,105,108,101,40,78,97,109,101,41,32,45,62,10,32,32,32,32,123,111,107,44,32,70,100,125,32,61,32,102,105,108,101,58,111,112,101,110,40,78,97,109,101,44,32,91,114,97,119,44,32,119,114,105,116,101,44,32,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,98,105,110,97,114,121,93,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,52,32,98,115,108,32,50,48,41,44,10,32,32,32,32,102,105,108,101,58,99,108,111,115,101,40,70,100,41,44,10,32,32,32,32,111,107,46,10,10,99,114,101,97,116,101,95,102,105,108,101,95,49,40,95,70,100,44,32,48,41,32,45,62,10,32,32,32,32,111,107,59,10,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,41,32,119,104,101,110,32,77,32,62,61,32,49,50,56,32,45,62,10,32,32,32,32,111,107,32,61,32,102,105,108,101,58,119,114,105,116,101,40,70,100,44,32,60,60,48,58,40,49,50,56,41,47,117,110,105,116,58,56,62,62,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,32,45,32,49,50,56,41,59,10,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,41,32,45,62,10,32,32,32,32,111,107,32,61,32,102,105,108,101,58,119,114,105,116,101,40,70,100,44,32,60,60,48,58,40,77,41,47,117,110,105,116,58,56,62,62,41,44,10,32,32,32,32,99,114,101,97,116,101,95,102,105,108,101,95,49,40,70,100,44,32,77,32,45,32,49,41,46>>]}]},{p,[],[<<87,104,101,110,32,119,114,105,116,105,110,103,32,100,97,116,97,32,105,116,39,115,32,103,101,110,101,114,97,108,108,121,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,111,32,119,114,105,116,101,32,97,32,108,105,115,116,32,111,102,32,98,105,110,97,114,105,101,115,32,114,97,116,104,101,114,32,116,104,97,110,32,97,32,108,105,115,116,32,111,102,32,105,110,116,101,103,101,114,115,46,32,73,116,32,105,115,32,110,111,116,32,110,101,101,100,101,100,32,116,111,32,102,108,97,116,116,101,110,32,97,32,100,101,101,112,32,108,105,115,116,32,98,101,102,111,114,101,32,119,114,105,116,105,110,103,46,32,79,110,32,85,110,105,120,32,104,111,115,116,115,44,32,115,99,97,116,116,101,114,32,111,117,116,112,117,116,44,32,119,104,105,99,104,32,119,114,105,116,101,115,32,97,32,115,101,116,32,111,102,32,98,117,102,102,101,114,115,32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,105,115,32,117,115,101,100,32,119,104,101,110,32,112,111,115,115,105,98,108,101,46,32,73,110,32,116,104,105,115,32,119,97,121,32>>,{code,[],[<<119,114,105,116,101,40,70,68,44,32,91,66,105,110,49,44,32,66,105,110,50,32,124,32,66,105,110,51,93,41>>]},<<32,119,114,105,116,101,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,98,105,110,97,114,105,101,115,32,119,105,116,104,111,117,116,32,99,111,112,121,105,110,103,32,116,104,101,32,100,97,116,97,32,97,116,32,97,108,108,44,32,101,120,99,101,112,116,32,102,111,114,32,112,101,114,104,97,112,115,32,100,101,101,112,32,100,111,119,110,32,105,110,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,107,101,114,110,101,108,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,102,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,32,119,104,101,110,32,97,99,99,101,115,115,105,110,103,32,97,110,32,111,112,101,110,32,102,105,108,101,32,119,105,116,104,32,109,111,100,117,108,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111>>]}]},<<44,32,116,104,101,32,112,114,111,99,101,115,115,32,104,97,110,100,108,105,110,103,32,116,104,101,32,102,105,108,101,32,101,120,105,116,115,46,32,84,104,101,32,100,101,97,100,32,102,105,108,101,32,112,114,111,99,101,115,115,32,99,97,110,32,104,97,110,103,32,105,102,32,97,32,112,114,111,99,101,115,115,32,116,114,105,101,115,32,116,111,32,97,99,99,101,115,115,32,105,116,32,108,97,116,101,114,46,32,84,104,105,115,32,119,105,108,108,32,98,101,32,102,105,120,101,100,32,105,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,46>>]}]},{h2,[],[<<83,101,101,32,65,108,115,111>>]},{p,[],[{a,[{href,<<115,116,100,108,105,98,58,102,105,108,101,110,97,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<102,105,108,101,110,97,109,101,40,51,41>>]}]}]}]},#{name => <<102,105,108,101>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,102,105,108,101,46,120,109,108],types => #{{date_time,0} => {attribute,{123,2},type,{date_time,{remote_type,{123,22},[{atom,{123,22},calendar},{atom,{123,31},datetime},[]]},[]}},{deep_list,0} => {attribute,{101,2},type,{deep_list,{type,{101,22},list,[{type,{101,23},union,[{type,{101,23},char,[]},{type,{101,32},atom,[]},{user_type,{101,41},deep_list,[]}]}]},[]}},{delete_option,0} => {attribute,{126,2},type,{delete_option,{atom,{126,26},raw},[]}},{fd,0} => {attribute,{87,2},type,{fd,{type,{87,22},record,[{atom,{87,23},file_descriptor}]},[]}},{file_info,0} => {attribute,{86,2},type,{file_info,{type,{86,22},record,[{atom,{86,23},file_info}]},[]}},{file_info_option,0} => {attribute,{129,2},type,{file_info_option,{type,{129,29},union,[{type,{129,29},tuple,[{atom,{129,30},time},{atom,{129,38},local}]},{type,{129,49},tuple,[{atom,{129,50},time},{atom,{129,58},universal}]},{type,{130,8},tuple,[{atom,{130,9},time},{atom,{130,17},posix}]},{atom,{130,28},raw}]},[]}},{filename,0} => {attribute,{84,2},type,{filename,{type,{84,22},string,[]},[]}},{filename_all,0} => {attribute,{85,2},type,{filename_all,{type,{85,25},union,[{type,{85,25},string,[]},{type,{85,36},binary,[]}]},[]}},{io_device,0} => {attribute,{88,2},type,{io_device,{type,{88,22},union,[{type,{88,22},pid,[]},{user_type,{88,30},fd,[]}]},[]}},{location,0} => {attribute,{89,2},type,{location,{type,{89,22},union,[{type,{89,22},integer,[]},{type,{89,34},tuple,[{atom,{89,35},bof},{ann_type,{89,42},[{var,{89,42},'Offset'},{type,{89,52},integer,[]}]}]},{type,{90,22},tuple,[{atom,{90,23},cur},{ann_type,{90,30},[{var,{90,30},'Offset'},{type,{90,40},integer,[]}]}]},{type,{91,8},tuple,[{atom,{91,9},eof},{ann_type,{91,16},[{var,{91,16},'Offset'},{type,{91,26},integer,[]}]}]},{atom,{91,39},bof},{atom,{91,47},cur},{atom,{91,55},eof}]},[]}},{mode,0} => {attribute,{92,2},type,{mode,{type,{92,22},union,[{atom,{92,22},read},{atom,{92,31},write},{atom,{92,41},append},{atom,{93,22},exclusive},{atom,{93,36},raw},{atom,{93,44},binary},{type,{94,8},tuple,[{atom,{94,9},delayed_write},{ann_type,{95,23},[{var,{95,23},'Size'},{type,{95,31},non_neg_integer,[]}]},{ann_type,{96,23},[{var,{96,23},'Delay'},{type,{96,32},non_neg_integer,[]}]}]},{atom,{97,8},delayed_write},{type,{97,26},tuple,[{atom,{97,27},read_ahead},{ann_type,{97,41},[{var,{97,41},'Size'},{type,{97,49},pos_integer,[]}]}]},{atom,{98,8},read_ahead},{atom,{98,23},compressed},{type,{99,8},tuple,[{atom,{99,9},encoding},{remote_type,{99,21},[{atom,{99,21},unicode},{atom,{99,29},encoding},[]]}]},{atom,{100,8},sync}]},[]}},{name,0} => {attribute,{102,2},type,{name,{type,{102,22},union,[{type,{102,22},string,[]},{type,{102,33},atom,[]},{user_type,{102,42},deep_list,[]}]},[]}},{name_all,0} => {attribute,{103,2},type,{name_all,{type,{103,22},union,[{type,{103,22},string,[]},{type,{103,33},atom,[]},{user_type,{103,42},deep_list,[]},{ann_type,{103,57},[{var,{103,57},'RawFilename'},{type,{103,72},binary,[]}]}]},[]}},{posix,0} => {attribute,{104,2},type,{posix,{type,{105,9},union,[{atom,{105,9},eacces},{atom,{105,20},eagain},{atom,{106,9},ebadf},{atom,{106,19},ebadmsg},{atom,{106,31},ebusy},{atom,{107,9},edeadlk},{atom,{107,21},edeadlock},{atom,{107,35},edquot},{atom,{108,9},eexist},{atom,{109,9},efault},{atom,{109,20},efbig},{atom,{109,30},eftype},{atom,{110,9},eintr},{atom,{110,19},einval},{atom,{110,30},eio},{atom,{110,38},eisdir},{atom,{111,9},eloop},{atom,{112,9},emfile},{atom,{112,20},emlink},{atom,{112,31},emultihop},{atom,{113,9},enametoolong},{atom,{113,26},enfile},{atom,{114,9},enobufs},{atom,{114,21},enodev},{atom,{114,32},enolck},{atom,{114,43},enolink},{atom,{114,55},enoent},{atom,{115,9},enomem},{atom,{115,20},enospc},{atom,{115,31},enosr},{atom,{115,41},enostr},{atom,{115,52},enosys},{atom,{116,9},enotblk},{atom,{116,21},enotdir},{atom,{116,33},enotsup},{atom,{116,45},enxio},{atom,{117,9},eopnotsupp},{atom,{117,24},eoverflow},{atom,{118,9},eperm},{atom,{118,19},epipe},{atom,{119,9},erange},{atom,{119,20},erofs},{atom,{120,9},espipe},{atom,{120,21},esrch},{atom,{120,32},estale},{atom,{121,9},etxtbsy},{atom,{122,9},exdev}]},[]}},{posix_file_advise,0} => {attribute,{124,2},type,{posix_file_advise,{type,{124,30},union,[{atom,{124,30},normal},{atom,{124,41},sequential},{atom,{124,56},random},{atom,{125,30},no_reuse},{atom,{125,43},will_need},{atom,{125,57},dont_need}]},[]}},{sendfile_option,0} => {attribute,{127,2},type,{sendfile_option,{type,{127,28},union,[{type,{127,28},tuple,[{atom,{127,29},chunk_size},{type,{127,41},non_neg_integer,[]}]},{type,{128,7},tuple,[{atom,{128,8},use_threads},{type,{128,21},boolean,[]}]}]},[]}}}},[{{function,altname,1},[{file,[102,105,108,101,46,101,114,108]},{location,0}],[<<97,108,116,110,97,109,101,47,49>>],hidden,#{}},{{function,copy_opened,3},[{file,[102,105,108,101,46,101,114,108]},{location,0}],[<<99,111,112,121,95,111,112,101,110,101,100,47,51>>],hidden,#{}},{{function,ipread_s32bu_p32bu,3},[{file,[102,105,108,101,46,101,114,108]},{location,0}],[<<105,112,114,101,97,100,95,115,51,50,98,117,95,112,51,50,98,117,47,51>>],hidden,#{}},{{function,ipread_s32bu_p32bu_int,3},[{file,[102,105,108,101,46,101,114,108]},{location,0}],[<<105,112,114,101,97,100,95,115,51,50,98,117,95,112,51,50,98,117,95,105,110,116,47,51>>],hidden,#{}},{{function,path_eval,3},[{file,[102,105,108,101,46,101,114,108]},{location,0}],[<<112,97,116,104,95,101,118,97,108,47,51>>],hidden,#{}},{{function,raw_read_file_info,1},[{file,[102,105,108,101,46,101,114,108]},{location,0}],[<<114,97,119,95,114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>],hidden,#{}},{{function,raw_write_file_info,2},[{file,[102,105,108,101,46,101,114,108]},{location,0}],[<<114,97,119,95,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>],hidden,#{}},{{function,advise,4},[{file,[102,105,108,101,46,101,114,108]},{location,565}],[<<97,100,118,105,115,101,47,52>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<112,111,115,105,120,95,102,105,108,101,95,97,100,118,105,115,101>>}],[]}]},{p,[],[{code,[],[<<97,100,118,105,115,101,47,52>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,97,110,110,111,117,110,99,101,32,97,110,32,105,110,116,101,110,116,105,111,110,32,116,111,32,97,99,99,101,115,115,32,102,105,108,101,32,100,97,116,97,32,105,110,32,97,32,115,112,101,99,105,102,105,99,32,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,102,117,116,117,114,101,44,32,116,104,117,115,32,97,108,108,111,119,105,110,103,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,116,111,32,112,101,114,102,111,114,109,32,97,112,112,114,111,112,114,105,97,116,101,32,111,112,116,105,109,105,122,97,116,105,111,110,115,46>>]},{p,[],[<<79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,109,105,103,104,116,32,104,97,118,101,32,110,111,32,101,102,102,101,99,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,56>>,signature => [{attribute,{565,2},spec,{{advise,4},[{type,{565,13},bounded_fun,[{type,{565,13},'fun',[{type,{565,13},product,[{var,{565,14},'IoDevice'},{var,{565,24},'Offset'},{var,{565,32},'Length'},{var,{565,40},'Advise'}]},{type,{565,51},union,[{atom,{565,51},ok},{type,{565,56},tuple,[{atom,{565,57},error},{var,{565,64},'Reason'}]}]}]},[{type,{566,7},constraint,[{atom,{566,7},is_subtype},[{var,{566,7},'IoDevice'},{user_type,{566,19},io_device,[]}]]},{type,{567,7},constraint,[{atom,{567,7},is_subtype},[{var,{567,7},'Offset'},{type,{567,17},integer,[]}]]},{type,{568,7},constraint,[{atom,{568,7},is_subtype},[{var,{568,7},'Length'},{type,{568,17},integer,[]}]]},{type,{569,7},constraint,[{atom,{569,7},is_subtype},[{var,{569,7},'Advise'},{user_type,{569,17},posix_file_advise,[]}]]},{type,{570,7},constraint,[{atom,{570,7},is_subtype},[{var,{570,7},'Reason'},{type,{570,17},union,[{user_type,{570,17},posix,[]},{atom,{570,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,allocate,3},[{file,[102,105,108,101,46,101,114,108]},{location,579}],[<<97,108,108,111,99,97,116,101,47,51>>],#{<<101,110>> => [{p,[],[{code,[],[<<97,108,108,111,99,97,116,101,47,51>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,112,114,101,97,108,108,111,99,97,116,101,32,115,112,97,99,101,32,102,111,114,32,97,32,102,105,108,101,46>>]},{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,111,110,108,121,32,115,117,99,99,101,101,100,115,32,105,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,112,114,111,118,105,100,101,32,116,104,105,115,32,102,101,97,116,117,114,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,57>>,signature => [{attribute,{579,2},spec,{{allocate,3},[{type,{579,15},bounded_fun,[{type,{579,15},'fun',[{type,{579,15},product,[{var,{579,16},'File'},{var,{579,22},'Offset'},{var,{579,30},'Length'}]},{type,{580,2},union,[{atom,{580,2},ok},{type,{580,9},tuple,[{atom,{580,10},error},{user_type,{580,19},posix,[]}]}]}]},[{type,{581,7},constraint,[{atom,{581,7},is_subtype},[{var,{581,7},'File'},{user_type,{581,15},io_device,[]}]]},{type,{582,7},constraint,[{atom,{582,7},is_subtype},[{var,{582,7},'Offset'},{type,{582,17},non_neg_integer,[]}]]},{type,{583,7},constraint,[{atom,{583,7},is_subtype},[{var,{583,7},'Length'},{type,{583,17},non_neg_integer,[]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,change_group,2},[{file,[102,105,108,101,46,101,114,108]},{location,1249}],[<<99,104,97,110,103,101,95,103,114,111,117,112,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,103,114,111,117,112,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,56>>,signature => [{attribute,{1249,2},spec,{{change_group,2},[{type,{1249,19},bounded_fun,[{type,{1249,19},'fun',[{type,{1249,19},product,[{var,{1249,20},'Filename'},{var,{1249,30},'Gid'}]},{type,{1249,38},union,[{atom,{1249,38},ok},{type,{1249,43},tuple,[{atom,{1249,44},error},{var,{1249,51},'Reason'}]}]}]},[{type,{1250,7},constraint,[{atom,{1250,7},is_subtype},[{var,{1250,7},'Filename'},{user_type,{1250,19},name_all,[]}]]},{type,{1251,7},constraint,[{atom,{1251,7},is_subtype},[{var,{1251,7},'Gid'},{type,{1251,14},integer,[]}]]},{type,{1252,7},constraint,[{atom,{1252,7},is_subtype},[{var,{1252,7},'Reason'},{type,{1252,17},union,[{user_type,{1252,17},posix,[]},{atom,{1252,27},badarg}]}]]}]]}]}}]}},{{function,change_mode,2},[{file,[102,105,108,101,46,101,114,108]},{location,1221}],[<<99,104,97,110,103,101,95,109,111,100,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,112,101,114,109,105,115,115,105,111,110,115,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,49,54>>,signature => [{attribute,{1221,2},spec,{{change_mode,2},[{type,{1221,18},bounded_fun,[{type,{1221,18},'fun',[{type,{1221,18},product,[{var,{1221,19},'Filename'},{var,{1221,29},'Mode'}]},{type,{1221,38},union,[{atom,{1221,38},ok},{type,{1221,43},tuple,[{atom,{1221,44},error},{var,{1221,51},'Reason'}]}]}]},[{type,{1222,7},constraint,[{atom,{1222,7},is_subtype},[{var,{1222,7},'Filename'},{user_type,{1222,19},name_all,[]}]]},{type,{1223,7},constraint,[{atom,{1223,7},is_subtype},[{var,{1223,7},'Mode'},{type,{1223,15},integer,[]}]]},{type,{1224,7},constraint,[{atom,{1224,7},is_subtype},[{var,{1224,7},'Reason'},{type,{1224,17},union,[{user_type,{1224,17},posix,[]},{atom,{1224,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,change_owner,2},[{file,[102,105,108,101,46,101,114,108]},{location,1230}],[<<99,104,97,110,103,101,95,111,119,110,101,114,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,111,119,110,101,114,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,50,52>>,signature => [{attribute,{1230,2},spec,{{change_owner,2},[{type,{1230,19},bounded_fun,[{type,{1230,19},'fun',[{type,{1230,19},product,[{var,{1230,20},'Filename'},{var,{1230,30},'Uid'}]},{type,{1230,38},union,[{atom,{1230,38},ok},{type,{1230,43},tuple,[{atom,{1230,44},error},{var,{1230,51},'Reason'}]}]}]},[{type,{1231,7},constraint,[{atom,{1231,7},is_subtype},[{var,{1231,7},'Filename'},{user_type,{1231,19},name_all,[]}]]},{type,{1232,7},constraint,[{atom,{1232,7},is_subtype},[{var,{1232,7},'Uid'},{type,{1232,14},integer,[]}]]},{type,{1233,7},constraint,[{atom,{1233,7},is_subtype},[{var,{1233,7},'Reason'},{type,{1233,17},union,[{user_type,{1233,17},posix,[]},{atom,{1233,27},badarg}]}]]}]]}]}}]}},{{function,change_owner,3},[{file,[102,105,108,101,46,101,114,108]},{location,1239}],[<<99,104,97,110,103,101,95,111,119,110,101,114,47,51>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,111,119,110,101,114,32,97,110,100,32,103,114,111,117,112,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,51,50>>,signature => [{attribute,{1239,2},spec,{{change_owner,3},[{type,{1239,19},bounded_fun,[{type,{1239,19},'fun',[{type,{1239,19},product,[{var,{1239,20},'Filename'},{var,{1239,30},'Uid'},{var,{1239,35},'Gid'}]},{type,{1239,43},union,[{atom,{1239,43},ok},{type,{1239,48},tuple,[{atom,{1239,49},error},{var,{1239,56},'Reason'}]}]}]},[{type,{1240,7},constraint,[{atom,{1240,7},is_subtype},[{var,{1240,7},'Filename'},{user_type,{1240,19},name_all,[]}]]},{type,{1241,7},constraint,[{atom,{1241,7},is_subtype},[{var,{1241,7},'Uid'},{type,{1241,14},integer,[]}]]},{type,{1242,7},constraint,[{atom,{1242,7},is_subtype},[{var,{1242,7},'Gid'},{type,{1242,14},integer,[]}]]},{type,{1243,7},constraint,[{atom,{1243,7},is_subtype},[{var,{1243,7},'Reason'},{type,{1243,17},union,[{user_type,{1243,17},posix,[]},{atom,{1243,27},badarg}]}]]}]]}]}}]}},{{function,change_time,2},[{file,[102,105,108,101,46,101,114,108]},{location,1258}],[<<99,104,97,110,103,101,95,116,105,109,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,97,110,100,32,97,99,99,101,115,115,32,116,105,109,101,115,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,52,48>>,signature => [{attribute,{1258,2},spec,{{change_time,2},[{type,{1258,18},bounded_fun,[{type,{1258,18},'fun',[{type,{1258,18},product,[{var,{1258,19},'Filename'},{var,{1258,29},'Mtime'}]},{type,{1258,39},union,[{atom,{1258,39},ok},{type,{1258,44},tuple,[{atom,{1258,45},error},{var,{1258,52},'Reason'}]}]}]},[{type,{1259,7},constraint,[{atom,{1259,7},is_subtype},[{var,{1259,7},'Filename'},{user_type,{1259,19},name_all,[]}]]},{type,{1260,7},constraint,[{atom,{1260,7},is_subtype},[{var,{1260,7},'Mtime'},{user_type,{1260,16},date_time,[]}]]},{type,{1261,7},constraint,[{atom,{1261,7},is_subtype},[{var,{1261,7},'Reason'},{type,{1261,17},union,[{user_type,{1261,17},posix,[]},{atom,{1261,27},badarg}]}]]}]]}]}}]}},{{function,change_time,3},[{file,[102,105,108,101,46,101,114,108]},{location,1268}],[<<99,104,97,110,103,101,95,116,105,109,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,97,110,100,32,108,97,115,116,32,97,99,99,101,115,115,32,116,105,109,101,115,32,111,102,32,97,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,52,56>>,signature => [{attribute,{1268,2},spec,{{change_time,3},[{type,{1268,18},bounded_fun,[{type,{1268,18},'fun',[{type,{1268,18},product,[{var,{1268,19},'Filename'},{var,{1268,29},'Atime'},{var,{1268,36},'Mtime'}]},{type,{1268,46},union,[{atom,{1268,46},ok},{type,{1268,51},tuple,[{atom,{1268,52},error},{var,{1268,59},'Reason'}]}]}]},[{type,{1269,7},constraint,[{atom,{1269,7},is_subtype},[{var,{1269,7},'Filename'},{user_type,{1269,19},name_all,[]}]]},{type,{1270,7},constraint,[{atom,{1270,7},is_subtype},[{var,{1270,7},'Atime'},{user_type,{1270,16},date_time,[]}]]},{type,{1271,7},constraint,[{atom,{1271,7},is_subtype},[{var,{1271,7},'Mtime'},{user_type,{1271,16},date_time,[]}]]},{type,{1272,7},constraint,[{atom,{1272,7},is_subtype},[{var,{1272,7},'Reason'},{type,{1272,17},union,[{user_type,{1272,17},posix,[]},{atom,{1272,27},badarg}]}]]}]]}]}}]}},{{function,close,1},[{file,[102,105,108,101,46,101,114,108]},{location,546}],[<<99,108,111,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<67,108,111,115,101,115,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,73,116,32,109,111,115,116,108,121,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<44,32,101,120,99,101,112,116,32,102,111,114,32,115,111,109,101,32,115,101,118,101,114,101,32,101,114,114,111,114,115,32,115,117,99,104,32,97,115,32,111,117,116,32,111,102,32,109,101,109,111,114,121,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]},<<32,119,97,115,32,117,115,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,44,32>>,{code,[],[<<99,108,111,115,101,47,49>>]},<<32,99,97,110,32,114,101,116,117,114,110,32,97,110,32,111,108,100,32,119,114,105,116,101,32,101,114,114,111,114,32,97,110,100,32,110,111,116,32,101,118,101,110,32,116,114,121,32,116,111,32,99,108,111,115,101,32,116,104,101,32,102,105,108,101,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,53,54>>,signature => [{attribute,{546,2},spec,{{close,1},[{type,{546,12},bounded_fun,[{type,{546,12},'fun',[{type,{546,12},product,[{var,{546,13},'IoDevice'}]},{type,{546,26},union,[{atom,{546,26},ok},{type,{546,31},tuple,[{atom,{546,32},error},{var,{546,39},'Reason'}]}]}]},[{type,{547,7},constraint,[{atom,{547,7},is_subtype},[{var,{547,7},'IoDevice'},{user_type,{547,19},io_device,[]}]]},{type,{548,7},constraint,[{atom,{548,7},is_subtype},[{var,{548,7},'Reason'},{type,{548,17},union,[{user_type,{548,17},posix,[]},{atom,{548,27},badarg},{atom,{548,36},terminated}]}]]}]]}]}}]}},{{function,consult,1},[{file,[102,105,108,101,46,101,114,108]},{location,1025}],[<<99,111,110,115,117,108,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,69,114,108,97,110,103,32,116,101,114,109,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,44,32,102,114,111,109,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,84,101,114,109,115,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,119,97,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,116,101,114,109,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,84,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,44,32,117,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<46>>]}]}]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<102,46,116,120,116,58,32,32,123,112,101,114,115,111,110,44,32,34,107,97,108,108,101,34,44,32,50,53,125,46,10,32,32,32,32,32,32,32,32,123,112,101,114,115,111,110,44,32,34,112,101,108,108,101,34,44,32,51,48,125,46>>]}]},{pre,[],[{code,[],[<<49,62,32,102,105,108,101,58,99,111,110,115,117,108,116,40,34,102,46,116,120,116,34,41,46,10,123,111,107,44,91,123,112,101,114,115,111,110,44,34,107,97,108,108,101,34,44,50,53,125,44,123,112,101,114,115,111,110,44,34,112,101,108,108,101,34,44,51,48,125,93,125>>]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,54,57>>,signature => [{attribute,{1025,2},spec,{{consult,1},[{type,{1025,14},bounded_fun,[{type,{1025,14},'fun',[{type,{1025,14},product,[{var,{1025,15},'Filename'}]},{type,{1025,28},union,[{type,{1025,28},tuple,[{atom,{1025,29},ok},{var,{1025,33},'Terms'}]},{type,{1025,42},tuple,[{atom,{1025,43},error},{var,{1025,50},'Reason'}]}]}]},[{type,{1026,7},constraint,[{atom,{1026,7},is_subtype},[{var,{1026,7},'Filename'},{user_type,{1026,19},name_all,[]}]]},{type,{1027,7},constraint,[{atom,{1027,7},is_subtype},[{var,{1027,7},'Terms'},{type,{1027,16},list,[{type,{1027,17},term,[]}]}]]},{type,{1028,7},constraint,[{atom,{1028,7},is_subtype},[{var,{1028,7},'Reason'},{type,{1028,17},union,[{user_type,{1028,17},posix,[]},{atom,{1028,27},badarg},{atom,{1028,36},terminated},{atom,{1028,49},system_limit},{type,{1029,17},tuple,[{ann_type,{1029,18},[{var,{1029,18},'Line'},{type,{1029,26},integer,[]}]},{ann_type,{1029,37},[{var,{1029,37},'Mod'},{type,{1029,44},module,[]}]},{ann_type,{1029,54},[{var,{1029,54},'Term'},{type,{1029,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,copy,3},[{file,[102,105,108,101,46,101,114,108]},{location,788}],[<<99,111,112,121,47,51>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,48,55>>,equiv => {function,copy,2},signature => [{attribute,{788,2},spec,{{copy,3},[{type,{788,11},bounded_fun,[{type,{788,11},'fun',[{type,{788,11},product,[{var,{788,12},'Source'},{var,{788,20},'Destination'},{var,{788,33},'ByteCount'}]},{type,{789,14},union,[{type,{789,14},tuple,[{atom,{789,15},ok},{var,{789,19},'BytesCopied'}]},{type,{789,34},tuple,[{atom,{789,35},error},{var,{789,42},'Reason'}]}]}]},[{type,{790,7},constraint,[{atom,{790,7},is_subtype},[{var,{790,7},'Source'},{type,{790,17},union,[{user_type,{790,17},io_device,[]},{var,{790,31},'Filename'},{type,{790,42},tuple,[{var,{790,43},'Filename'},{var,{790,53},'Modes'}]}]}]]},{type,{791,7},constraint,[{atom,{791,7},is_subtype},[{var,{791,7},'Destination'},{type,{791,22},union,[{user_type,{791,22},io_device,[]},{var,{791,36},'Filename'},{type,{791,47},tuple,[{var,{791,48},'Filename'},{var,{791,58},'Modes'}]}]}]]},{type,{792,7},constraint,[{atom,{792,7},is_subtype},[{var,{792,7},'Filename'},{user_type,{792,19},name_all,[]}]]},{type,{793,7},constraint,[{atom,{793,7},is_subtype},[{var,{793,7},'Modes'},{type,{793,16},list,[{user_type,{793,17},mode,[]}]}]]},{type,{794,7},constraint,[{atom,{794,7},is_subtype},[{var,{794,7},'ByteCount'},{type,{794,20},union,[{type,{794,20},non_neg_integer,[]},{atom,{794,40},infinity}]}]]},{type,{795,7},constraint,[{atom,{795,7},is_subtype},[{var,{795,7},'BytesCopied'},{type,{795,22},non_neg_integer,[]}]]},{type,{796,7},constraint,[{atom,{796,7},is_subtype},[{var,{796,7},'Reason'},{type,{796,17},union,[{user_type,{796,17},posix,[]},{atom,{796,27},badarg},{atom,{796,36},terminated}]}]]}]]}]}}]}},{{function,copy,2},[{file,[102,105,108,101,46,101,114,108]},{location,777}],[<<99,111,112,121,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,112,105,101,115,32>>,{code,[],[<<66,121,116,101,67,111,117,110,116>>]},<<32,98,121,116,101,115,32,102,114,111,109,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,116,111,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<46,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,114,101,102,101,114,32,116,111,32,101,105,116,104,101,114,32,102,105,108,101,110,97,109,101,115,32,111,114,32,73,79,32,100,101,118,105,99,101,115,32,102,114,111,109,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<111,112,101,110,47,50>>]},<<46,32>>,{code,[],[<<66,121,116,101,67,111,117,110,116>>]},<<32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<105,110,102,105,110,105,116,121>>]},<<44,32,100,101,110,111,116,105,110,103,32,97,110,32,105,110,102,105,110,105,116,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,46>>]},{p,[],[<<65,114,103,117,109,101,110,116,32>>,{code,[],[<<77,111,100,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,112,111,115,115,105,98,108,101,32,109,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<44,32,97,110,100,32,100,101,102,97,117,108,116,115,32,116,111,32>>,{code,[],[<<91,93>>]},<<46>>]},{p,[],[<<73,102,32,98,111,116,104,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,114,101,102,101,114,32,116,111,32,102,105,108,101,110,97,109,101,115,44,32,116,104,101,32,102,105,108,101,115,32,97,114,101,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<91,114,101,97,100,44,32,98,105,110,97,114,121,93>>]},<<32,97,110,100,32>>,{code,[],[<<91,119,114,105,116,101,44,32,98,105,110,97,114,121,93>>]},<<32,112,114,101,112,101,110,100,101,100,32,116,111,32,116,104,101,105,114,32,109,111,100,101,32,108,105,115,116,115,44,32,114,101,115,112,101,99,116,105,118,101,108,121,44,32,116,111,32,111,112,116,105,109,105,122,101,32,116,104,101,32,99,111,112,121,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,102,105,108,101,110,97,109,101,44,32,105,116,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<114,101,97,100>>]},<<32,109,111,100,101,32,112,114,101,112,101,110,100,101,100,32,116,111,32,116,104,101,32,109,111,100,101,32,108,105,115,116,32,98,101,102,111,114,101,32,116,104,101,32,99,111,112,121,44,32,97,110,100,32,99,108,111,115,101,100,32,119,104,101,110,32,100,111,110,101,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,102,105,108,101,110,97,109,101,44,32,105,116,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,109,111,100,101,32,112,114,101,112,101,110,100,101,100,32,116,111,32,116,104,101,32,109,111,100,101,32,108,105,115,116,32,98,101,102,111,114,101,32,116,104,101,32,99,111,112,121,44,32,97,110,100,32,99,108,111,115,101,100,32,119,104,101,110,32,100,111,110,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,121,116,101,115,67,111,112,105,101,100,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<66,121,116,101,115,67,111,112,105,101,100>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,116,104,97,116,32,119,97,115,32,99,111,112,105,101,100,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<66,121,116,101,67,111,117,110,116>>]},<<32,105,102,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,101,110,99,111,117,110,116,101,114,101,100,32,111,110,32,116,104,101,32,115,111,117,114,99,101,46,32,73,102,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,102,97,105,108,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58,32,97,115,32,102,111,114,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<32,105,102,32,97,32,102,105,108,101,32,104,97,100,32,116,111,32,98,101,32,111,112,101,110,101,100,44,32,97,110,100,32,97,115,32,102,111,114,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,48,55>>,signature => [{attribute,{777,2},spec,{{copy,2},[{type,{777,11},bounded_fun,[{type,{777,11},'fun',[{type,{777,11},product,[{var,{777,12},'Source'},{var,{777,20},'Destination'}]},{type,{777,36},union,[{type,{777,36},tuple,[{atom,{777,37},ok},{var,{777,41},'BytesCopied'}]},{type,{777,56},tuple,[{atom,{777,57},error},{var,{777,64},'Reason'}]}]}]},[{type,{778,7},constraint,[{atom,{778,7},is_subtype},[{var,{778,7},'Source'},{type,{778,17},union,[{user_type,{778,17},io_device,[]},{var,{778,31},'Filename'},{type,{778,42},tuple,[{var,{778,43},'Filename'},{var,{778,53},'Modes'}]}]}]]},{type,{779,7},constraint,[{atom,{779,7},is_subtype},[{var,{779,7},'Destination'},{type,{779,22},union,[{user_type,{779,22},io_device,[]},{var,{779,36},'Filename'},{type,{779,47},tuple,[{var,{779,48},'Filename'},{var,{779,58},'Modes'}]}]}]]},{type,{780,7},constraint,[{atom,{780,7},is_subtype},[{var,{780,7},'Filename'},{user_type,{780,19},name_all,[]}]]},{type,{781,7},constraint,[{atom,{781,7},is_subtype},[{var,{781,7},'Modes'},{type,{781,16},list,[{user_type,{781,17},mode,[]}]}]]},{type,{782,7},constraint,[{atom,{782,7},is_subtype},[{var,{782,7},'BytesCopied'},{type,{782,22},non_neg_integer,[]}]]},{type,{783,7},constraint,[{atom,{783,7},is_subtype},[{var,{783,7},'Reason'},{type,{783,17},union,[{user_type,{783,17},posix,[]},{atom,{783,27},badarg},{atom,{783,36},terminated}]}]]}]]}]}}]}},{{function,datasync,1},[{file,[102,105,108,101,46,101,114,108]},{location,731}],[<<100,97,116,97,115,121,110,99,47,49>>],#{<<101,110>> => [{p,[],[<<69,110,115,117,114,101,115,32,116,104,97,116,32,97,110,121,32,98,117,102,102,101,114,115,32,107,101,112,116,32,98,121,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,40,110,111,116,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,41,32,97,114,101,32,119,114,105,116,116,101,110,32,116,111,32,100,105,115,107,46,32,73,110,32,109,97,110,121,32,119,97,121,115,32,105,116,32,114,101,115,101,109,98,108,101,115,32>>,{code,[],[<<102,115,121,110,99>>]},<<32,98,117,116,32,105,116,32,100,111,101,115,32,110,111,116,32,117,112,100,97,116,101,32,115,111,109,101,32,111,102,32,116,104,101,32,109,101,116,97,100,97,116,97,32,111,102,32,116,104,101,32,102,105,108,101,44,32,115,117,99,104,32,97,115,32,116,104,101,32,97,99,99,101,115,115,32,116,105,109,101,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,104,97,115,32,110,111,32,101,102,102,101,99,116,46>>]},{p,[],[<<65,112,112,108,105,99,97,116,105,111,110,115,32,116,104,97,116,32,97,99,99,101,115,115,32,100,97,116,97,98,97,115,101,115,32,111,114,32,108,111,103,32,102,105,108,101,115,32,111,102,116,101,110,32,119,114,105,116,101,32,97,32,116,105,110,121,32,100,97,116,97,32,102,114,97,103,109,101,110,116,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,111,110,101,32,108,105,110,101,32,105,110,32,97,32,108,111,103,32,102,105,108,101,41,32,97,110,100,32,116,104,101,110,32,99,97,108,108,32>>,{code,[],[<<102,115,121,110,99,40,41>>]},<<32,105,109,109,101,100,105,97,116,101,108,121,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,116,104,101,32,119,114,105,116,116,101,110,32,100,97,116,97,32,105,115,32,112,104,121,115,105,99,97,108,108,121,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,104,97,114,100,32,100,105,115,107,46,32,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32>>,{code,[],[<<102,115,121,110,99,40,41>>]},<<32,97,108,119,97,121,115,32,105,110,105,116,105,97,116,101,115,32,116,119,111,32,119,114,105,116,101,32,111,112,101,114,97,116,105,111,110,115,58,32,111,110,101,32,102,111,114,32,116,104,101,32,110,101,119,108,121,32,119,114,105,116,116,101,110,32,100,97,116,97,32,97,110,100,32,97,110,111,116,104,101,114,32,111,110,101,32,116,111,32,117,112,100,97,116,101,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,115,116,111,114,101,100,32,105,110,32,116,104,101,32>>,{code,[],[<<105,110,111,100,101>>]},<<46,32,73,102,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,105,115,32,110,111,116,32,97,32,112,97,114,116,32,111,102,32,116,104,101,32,116,114,97,110,115,97,99,116,105,111,110,32,99,111,110,99,101,112,116,44,32>>,{code,[],[<<102,100,97,116,97,115,121,110,99,40,41>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,97,118,111,105,100,32,117,110,110,101,99,101,115,115,97,114,121,32>>,{code,[],[<<105,110,111,100,101>>]},<<32,100,105,115,107,32,119,114,105,116,101,32,111,112,101,114,97,116,105,111,110,115,46>>]},{p,[],[<<65,118,97,105,108,97,98,108,101,32,111,110,108,121,32,105,110,32,115,111,109,101,32,80,79,83,73,88,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,99,97,108,108,32,114,101,115,117,108,116,115,32,105,110,32,97,32,99,97,108,108,32,116,111,32>>,{code,[],[<<102,115,121,110,99,40,41>>]},<<44,32,111,114,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,105,110,32,115,121,115,116,101,109,115,32,110,111,116,32,112,114,111,118,105,100,105,110,103,32,116,104,101,32>>,{code,[],[<<102,100,97,116,97,115,121,110,99,40,41>>]},<<32,115,121,115,99,97,108,108,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,52,53>>,signature => [{attribute,{731,2},spec,{{datasync,1},[{type,{731,15},bounded_fun,[{type,{731,15},'fun',[{type,{731,15},product,[{var,{731,16},'IoDevice'}]},{type,{731,29},union,[{atom,{731,29},ok},{type,{731,34},tuple,[{atom,{731,35},error},{var,{731,42},'Reason'}]}]}]},[{type,{732,7},constraint,[{atom,{732,7},is_subtype},[{var,{732,7},'IoDevice'},{user_type,{732,19},io_device,[]}]]},{type,{733,7},constraint,[{atom,{733,7},is_subtype},[{var,{733,7},'Reason'},{type,{733,17},union,[{user_type,{733,17},posix,[]},{atom,{733,27},badarg},{atom,{733,36},terminated}]}]]}]]}]}}],since => <<79,84,80,32,82,49,52,66>>}},{{function,del_dir,1},[{file,[102,105,108,101,46,101,114,108]},{location,256}],[<<100,101,108,95,100,105,114,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,100,101,108,101,116,101,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<68,105,114>>]},<<46,32,84,104,101,32,100,105,114,101,99,116,111,114,121,32,109,117,115,116,32,98,101,32,101,109,112,116,121,32,98,101,102,111,114,101,32,105,116,32,99,97,110,32,98,101,32,100,101,108,101,116,101,100,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,105,115,32,110,111,116,32,101,109,112,116,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[<<65,116,116,101,109,112,116,32,116,111,32,100,101,108,101,116,101,32,116,104,101,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,97,99,99,101,115>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,51,54,56>>,signature => [{attribute,{256,2},spec,{{del_dir,1},[{type,{256,14},bounded_fun,[{type,{256,14},'fun',[{type,{256,14},product,[{var,{256,15},'Dir'}]},{type,{256,23},union,[{atom,{256,23},ok},{type,{256,28},tuple,[{atom,{256,29},error},{var,{256,36},'Reason'}]}]}]},[{type,{257,7},constraint,[{atom,{257,7},is_subtype},[{var,{257,7},'Dir'},{user_type,{257,14},name_all,[]}]]},{type,{258,7},constraint,[{atom,{258,7},is_subtype},[{var,{258,7},'Reason'},{type,{258,17},union,[{user_type,{258,17},posix,[]},{atom,{258,27},badarg}]}]]}]]}]}}]}},{{function,del_dir_r,1},[{file,[102,105,108,101,46,101,114,108]},{location,263}],[<<100,101,108,95,100,105,114,95,114,47,49>>],#{<<101,110>> => [{p,[],[<<68,101,108,101,116,101,115,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<70,105,108,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,105,108,101>>]},<<32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,44,32,105,116,115,32,99,111,110,116,101,110,116,115,32,105,115,32,102,105,114,115,116,32,114,101,99,117,114,115,105,118,101,108,121,32,100,101,108,101,116,101,100,46,32,82,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<111,107>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,101,114,97,116,105,111,110,32,99,111,109,112,108,101,116,101,100,32,119,105,116,104,111,117,116,32,101,114,114,111,114,115,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,112,111,115,105,120,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,97,99,99,101,115,115,105,110,103,32,111,114,32,100,101,108,101,116,105,110,103,32>>,{code,[],[<<70,105,108,101>>]},<<46,32,73,102,32,115,111,109,101,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32,117,110,100,101,114,32>>,{code,[],[<<70,105,108,101>>]},<<32,99,111,117,108,100,32,110,111,116,32,98,101,32,100,101,108,101,116,101,100,44,32>>,{code,[],[<<70,105,108,101>>]},<<32,99,97,110,110,111,116,32,98,101,32,100,101,108,101,116,101,100,32,97,115,32,105,116,32,105,115,32,110,111,110,45,101,109,112,116,121,44,32,97,110,100,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,101,120,105,115,116,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,48,52>>,signature => [{attribute,{263,2},spec,{{del_dir_r,1},[{type,{263,16},bounded_fun,[{type,{263,16},'fun',[{type,{263,16},product,[{var,{263,17},'File'}]},{type,{263,26},union,[{atom,{263,26},ok},{type,{263,31},tuple,[{atom,{263,32},error},{var,{263,39},'Reason'}]}]}]},[{type,{264,7},constraint,[{atom,{264,7},is_subtype},[{var,{264,7},'File'},{user_type,{264,15},name_all,[]}]]},{type,{265,7},constraint,[{atom,{265,7},is_subtype},[{var,{265,7},'Reason'},{type,{265,17},union,[{user_type,{265,17},posix,[]},{atom,{265,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,50,51,46,48>>}},{{function,delete,2},[{file,[102,105,108,101,46,101,114,108]},{location,221}],[<<100,101,108,101,116,101,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,50,54>>,equiv => {function,delete,1},signature => [{attribute,{221,2},spec,{{delete,2},[{type,{221,13},bounded_fun,[{type,{221,13},'fun',[{type,{221,13},product,[{var,{221,14},'Filename'},{var,{221,24},'Opts'}]},{type,{221,33},union,[{atom,{221,33},ok},{type,{221,38},tuple,[{atom,{221,39},error},{var,{221,46},'Reason'}]}]}]},[{type,{222,7},constraint,[{atom,{222,7},is_subtype},[{var,{222,7},'Filename'},{user_type,{222,19},name_all,[]}]]},{type,{223,7},constraint,[{atom,{223,7},is_subtype},[{var,{223,7},'Opts'},{type,{223,15},list,[{user_type,{223,16},delete_option,[]}]}]]},{type,{224,7},constraint,[{atom,{224,7},is_subtype},[{var,{224,7},'Reason'},{type,{224,17},union,[{user_type,{224,17},posix,[]},{atom,{224,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,delete,1},[{file,[102,105,108,101,46,101,114,108]},{location,214}],[<<100,101,108,101,116,101,47,49>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<100,101,108,101,116,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<84,114,105,101,115,32,116,111,32,100,101,108,101,116,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,46,32,84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,105,110,32,112,97,114,116,105,99,117,108,97,114,32,100,117,114,105,110,103,32,116,104,101,32,101,97,114,108,121,32,98,111,111,116,32,115,116,97,103,101,32,119,104,101,110,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,121,101,116,32,114,101,103,105,115,116,101,114,101,100,44,32,116,111,32,115,116,105,108,108,32,98,101,32,97,98,108,101,32,116,111,32,100,101,108,101,116,101,32,108,111,99,97,108,32,102,105,108,101,115,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,116,104,101,32,102,105,108,101,32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,115,46>>]}]},{dt,[],[{code,[],[<<101,112,101,114,109>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,32,97,110,100,32,116,104,101,32,117,115,101,114,32,105,115,32,110,111,116,32,115,117,112,101,114,117,115,101,114,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,104,97,115,32,97,110,32,105,109,112,114,111,112,101,114,32,116,121,112,101,44,32,115,117,99,104,32,97,115,32,116,117,112,108,101,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,44,32,97,32,98,97,100,32,116,121,112,101,32,102,111,114,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,119,105,108,108,32,112,114,111,98,97,98,108,121,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,50,54>>,signature => [{attribute,{214,2},spec,{{delete,1},[{type,{214,13},bounded_fun,[{type,{214,13},'fun',[{type,{214,13},product,[{var,{214,14},'Filename'}]},{type,{214,27},union,[{atom,{214,27},ok},{type,{214,32},tuple,[{atom,{214,33},error},{var,{214,40},'Reason'}]}]}]},[{type,{215,7},constraint,[{atom,{215,7},is_subtype},[{var,{215,7},'Filename'},{user_type,{215,19},name_all,[]}]]},{type,{216,7},constraint,[{atom,{216,7},is_subtype},[{var,{216,7},'Reason'},{type,{216,17},union,[{user_type,{216,17},posix,[]},{atom,{216,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,50,52,46,48>>}},{{function,eval,1},[{file,[102,105,108,101,46,101,114,108]},{location,1065}],[<<101,118,97,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,32,102,114,111,109,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,84,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,32,105,115,32,110,111,116,32,114,101,116,117,114,110,101,100,59,32,97,110,121,32,101,120,112,114,101,115,115,105,111,110,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,102,105,108,101,32,109,117,115,116,32,98,101,32,116,104,101,114,101,32,102,111,114,32,105,116,115,32,115,105,100,101,32,101,102,102,101,99,116,46,32,82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<111,107>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,119,97,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,84,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,44,32,117,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,52,54,57>>,signature => [{attribute,{1065,2},spec,{{eval,1},[{type,{1065,11},bounded_fun,[{type,{1065,11},'fun',[{type,{1065,11},product,[{var,{1065,12},'Filename'}]},{type,{1065,25},union,[{atom,{1065,25},ok},{type,{1065,30},tuple,[{atom,{1065,31},error},{var,{1065,38},'Reason'}]}]}]},[{type,{1066,7},constraint,[{atom,{1066,7},is_subtype},[{var,{1066,7},'Filename'},{user_type,{1066,19},name_all,[]}]]},{type,{1067,7},constraint,[{atom,{1067,7},is_subtype},[{var,{1067,7},'Reason'},{type,{1067,17},union,[{user_type,{1067,17},posix,[]},{atom,{1067,27},badarg},{atom,{1067,36},terminated},{atom,{1067,49},system_limit},{type,{1068,17},tuple,[{ann_type,{1068,18},[{var,{1068,18},'Line'},{type,{1068,26},integer,[]}]},{ann_type,{1068,37},[{var,{1068,37},'Mod'},{type,{1068,44},module,[]}]},{ann_type,{1068,54},[{var,{1068,54},'Term'},{type,{1068,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,eval,2},[{file,[102,105,108,101,46,101,114,108]},{location,1073}],[<<101,118,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<101,118,97,108,47,49>>]},<<44,32,98,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,32>>,{code,[],[<<66,105,110,100,105,110,103,115>>]},<<32,97,114,101,32,117,115,101,100,32,105,110,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,46,32,70,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,44,32,115,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,114,108,95,101,118,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,101,118,97,108,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,48,51>>,signature => [{attribute,{1073,2},spec,{{eval,2},[{type,{1073,11},bounded_fun,[{type,{1073,11},'fun',[{type,{1073,11},product,[{var,{1073,12},'Filename'},{var,{1073,22},'Bindings'}]},{type,{1073,35},union,[{atom,{1073,35},ok},{type,{1073,40},tuple,[{atom,{1073,41},error},{var,{1073,48},'Reason'}]}]}]},[{type,{1074,7},constraint,[{atom,{1074,7},is_subtype},[{var,{1074,7},'Filename'},{user_type,{1074,19},name_all,[]}]]},{type,{1075,7},constraint,[{atom,{1075,7},is_subtype},[{var,{1075,7},'Bindings'},{remote_type,{1075,19},[{atom,{1075,19},erl_eval},{atom,{1075,28},binding_struct},[]]}]]},{type,{1076,7},constraint,[{atom,{1076,7},is_subtype},[{var,{1076,7},'Reason'},{type,{1076,17},union,[{user_type,{1076,17},posix,[]},{atom,{1076,27},badarg},{atom,{1076,36},terminated},{atom,{1076,49},system_limit},{type,{1077,17},tuple,[{ann_type,{1077,18},[{var,{1077,18},'Line'},{type,{1077,26},integer,[]}]},{ann_type,{1077,37},[{var,{1077,37},'Mod'},{type,{1077,44},module,[]}]},{ann_type,{1077,54},[{var,{1077,54},'Term'},{type,{1077,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,format_error,1},[{file,[102,105,108,101,46,101,114,108]},{location,146}],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>],#{<<101,110>> => [{p,[],[<<71,105,118,101,110,32,116,104,101,32,101,114,114,111,114,32,114,101,97,115,111,110,32,114,101,116,117,114,110,101,100,32,98,121,32,97,110,121,32,102,117,110,99,116,105,111,110,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,114,101,116,117,114,110,115,32,97,32,100,101,115,99,114,105,112,116,105,118,101,32,115,116,114,105,110,103,32,111,102,32,116,104,101,32,101,114,114,111,114,32,105,110,32,69,110,103,108,105,115,104,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,49,51>>,signature => [{attribute,{146,2},spec,{{format_error,1},[{type,{146,19},bounded_fun,[{type,{146,19},'fun',[{type,{146,19},product,[{var,{146,20},'Reason'}]},{var,{146,31},'Chars'}]},[{type,{147,7},constraint,[{atom,{147,7},is_subtype},[{var,{147,7},'Reason'},{type,{147,17},union,[{user_type,{147,17},posix,[]},{atom,{147,27},badarg},{atom,{147,36},terminated},{atom,{147,49},system_limit},{type,{148,17},tuple,[{ann_type,{148,18},[{var,{148,18},'Line'},{type,{148,26},integer,[]}]},{ann_type,{148,37},[{var,{148,37},'Mod'},{type,{148,44},module,[]}]},{ann_type,{148,54},[{var,{148,54},'Term'},{type,{148,62},term,[]}]}]}]}]]},{type,{149,7},constraint,[{atom,{149,7},is_subtype},[{var,{149,7},'Chars'},{type,{149,16},string,[]}]]}]]}]}}]}},{{function,get_cwd,0},[{file,[102,105,108,101,46,101,114,108]},{location,191}],[<<103,101,116,95,99,119,100,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,68,105,114,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,110,32,114,97,114,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,110,32,102,97,105,108,32,111,110,32,85,110,105,120,46,32,73,116,32,99,97,110,32,111,99,99,117,114,32,105,102,32,114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,46>>]}]},{p,[],[<<65,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,115,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,50,49>>,signature => [{attribute,{191,2},spec,{{get_cwd,0},[{type,{191,14},bounded_fun,[{type,{191,14},'fun',[{type,{191,14},product,[]},{type,{191,20},union,[{type,{191,20},tuple,[{atom,{191,21},ok},{var,{191,25},'Dir'}]},{type,{191,32},tuple,[{atom,{191,33},error},{var,{191,40},'Reason'}]}]}]},[{type,{192,7},constraint,[{atom,{192,7},is_subtype},[{var,{192,7},'Dir'},{user_type,{192,14},filename,[]}]]},{type,{193,7},constraint,[{atom,{193,7},is_subtype},[{var,{193,7},'Reason'},{user_type,{193,17},posix,[]}]]}]]}]}}]}},{{function,get_cwd,1},[{file,[102,105,108,101,46,101,114,108]},{location,198}],[<<103,101,116,95,99,119,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,68,105,114,125>>]},<<32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,100,114,105,118,101,46>>]},{p,[],[{code,[],[<<68,114,105,118,101>>]},<<32,105,115,32,116,111,32,98,101,32,111,102,32,116,104,101,32,102,111,114,109,32,34>>,{code,[],[<<76,101,116,116,101,114>>]},{code,[],[<<58>>]},<<34,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,34,99,58,34,46>>]},{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,116,115,117,112,125>>]},<<32,111,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,104,97,118,101,32,110,111,32,99,111,110,99,101,112,116,32,111,102,32,99,117,114,114,101,110,116,32,100,114,105,118,101,32,40,85,110,105,120,44,32,102,111,114,32,101,120,97,109,112,108,101,41,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<84,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,104,97,115,32,110,111,32,99,111,110,99,101,112,116,32,111,102,32,100,114,105,118,101,115,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,114,105,118,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,111,114,109,97,116,32,111,102,32>>,{code,[],[<<68,114,105,118,101>>]},<<32,105,115,32,105,110,118,97,108,105,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,52,51>>,signature => [{attribute,{198,2},spec,{{get_cwd,1},[{type,{198,14},bounded_fun,[{type,{198,14},'fun',[{type,{198,14},product,[{var,{198,15},'Drive'}]},{type,{198,25},union,[{type,{198,25},tuple,[{atom,{198,26},ok},{var,{198,30},'Dir'}]},{type,{198,37},tuple,[{atom,{198,38},error},{var,{198,45},'Reason'}]}]}]},[{type,{199,7},constraint,[{atom,{199,7},is_subtype},[{var,{199,7},'Drive'},{type,{199,16},string,[]}]]},{type,{200,7},constraint,[{atom,{200,7},is_subtype},[{var,{200,7},'Dir'},{user_type,{200,14},filename,[]}]]},{type,{201,7},constraint,[{atom,{201,7},is_subtype},[{var,{201,7},'Reason'},{type,{201,17},union,[{user_type,{201,17},posix,[]},{atom,{201,27},badarg}]}]]}]]}]}}]}},{{function,list_dir,1},[{file,[102,105,108,101,46,101,114,108]},{location,401}],[<<108,105,115,116,95,100,105,114,47,49>>],#{<<101,110>> => [{p,[],[<<76,105,115,116,115,32,97,108,108,32,102,105,108,101,115,32,105,110,32,97,32,100,105,114,101,99,116,111,114,121,44,32>>,{em,[],[<<101,120,99,101,112,116>>]},<<32,102,105,108,101,115,32,119,105,116,104,32,114,97,119,32,102,105,108,101,110,97,109,101,115,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,115,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,110,97,109,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,116,104,101,32,102,105,108,101,115,32,105,110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,46,32,84,104,101,32,110,97,109,101,115,32,97,114,101,32,110,111,116,32,115,111,114,116,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32>>,{code,[],[<<68,105,114>>]},<<32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<123,110,111,95,116,114,97,110,115,108,97,116,105,111,110,44,32,70,105,108,101,110,97,109,101,125>>]}]},{dd,[],[{p,[],[{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,32>>,{code,[],[<<98,105,110,97,114,121,40,41>>]},<<32,119,105,116,104,32,99,104,97,114,97,99,116,101,114,115,32,99,111,100,101,100,32,105,110,32,73,83,79,32,76,97,116,105,110,45,49,32,97,110,100,32,116,104,101,32,86,77,32,119,97,115,32,115,116,97,114,116,101,100,32,119,105,116,104,32,112,97,114,97,109,101,116,101,114,32>>,{code,[],[<<43,102,110,117,101>>]},<<46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,53,55,52>>,signature => [{attribute,{401,2},spec,{{list_dir,1},[{type,{401,15},bounded_fun,[{type,{401,15},'fun',[{type,{401,15},product,[{var,{401,16},'Dir'}]},{type,{401,24},union,[{type,{401,24},tuple,[{atom,{401,25},ok},{var,{401,29},'Filenames'}]},{type,{401,42},tuple,[{atom,{401,43},error},{var,{401,50},'Reason'}]}]}]},[{type,{402,7},constraint,[{atom,{402,7},is_subtype},[{var,{402,7},'Dir'},{user_type,{402,14},name_all,[]}]]},{type,{403,7},constraint,[{atom,{403,7},is_subtype},[{var,{403,7},'Filenames'},{type,{403,20},list,[{user_type,{403,21},filename,[]}]}]]},{type,{404,7},constraint,[{atom,{404,7},is_subtype},[{var,{404,7},'Reason'},{type,{404,17},union,[{user_type,{404,17},posix,[]},{atom,{405,17},badarg},{type,{406,17},tuple,[{atom,{406,18},no_translation},{ann_type,{406,34},[{var,{406,34},'Filename'},{remote_type,{406,46},[{atom,{406,46},unicode},{atom,{406,54},latin1_binary},[]]}]}]}]}]]}]]}]}}]}},{{function,list_dir_all,1},[{file,[102,105,108,101,46,101,114,108]},{location,411}],[<<108,105,115,116,95,100,105,114,95,97,108,108,47,49>>],#{<<101,110>> => [{p,[],[{a,[{id,<<108,105,115,116,95,100,105,114,95,97,108,108>>}],[]},<<76,105,115,116,115,32,97,108,108,32,116,104,101,32,102,105,108,101,115,32,105,110,32,97,32,100,105,114,101,99,116,111,114,121,44,32,105,110,99,108,117,100,105,110,103,32,102,105,108,101,115,32,119,105,116,104,32,114,97,119,32,102,105,108,101,110,97,109,101,115,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,115,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,110,97,109,101,115>>]},<<32,105,115,32,97,32,108,105,115,116,32,111,102,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,116,104,101,32,102,105,108,101,115,32,105,110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,46,32,84,104,101,32,110,97,109,101,115,32,97,114,101,32,110,111,116,32,115,111,114,116,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32>>,{code,[],[<<68,105,114>>]},<<32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,48,53>>,signature => [{attribute,{411,2},spec,{{list_dir_all,1},[{type,{411,19},bounded_fun,[{type,{411,19},'fun',[{type,{411,19},product,[{var,{411,20},'Dir'}]},{type,{411,28},union,[{type,{411,28},tuple,[{atom,{411,29},ok},{var,{411,33},'Filenames'}]},{type,{411,46},tuple,[{atom,{411,47},error},{var,{411,54},'Reason'}]}]}]},[{type,{412,7},constraint,[{atom,{412,7},is_subtype},[{var,{412,7},'Dir'},{user_type,{412,14},name_all,[]}]]},{type,{413,7},constraint,[{atom,{413,7},is_subtype},[{var,{413,7},'Filenames'},{type,{413,20},list,[{user_type,{413,21},filename_all,[]}]}]]},{type,{414,7},constraint,[{atom,{414,7},is_subtype},[{var,{414,7},'Reason'},{type,{414,17},union,[{user_type,{414,17},posix,[]},{atom,{414,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,make_dir,1},[{file,[102,105,108,101,46,101,114,108]},{location,249}],[<<109,97,107,101,95,100,105,114,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,99,114,101,97,116,101,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<68,105,114>>]},<<46,32,77,105,115,115,105,110,103,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,99,114,101,97,116,101,100,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[<<65,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,100,32>>,{code,[],[<<68,105,114>>]},<<32,101,120,105,115,116,115,32,97,108,114,101,97,100,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,99,101,32,105,115,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,51,48>>,signature => [{attribute,{249,2},spec,{{make_dir,1},[{type,{249,15},bounded_fun,[{type,{249,15},'fun',[{type,{249,15},product,[{var,{249,16},'Dir'}]},{type,{249,24},union,[{atom,{249,24},ok},{type,{249,29},tuple,[{atom,{249,30},error},{var,{249,37},'Reason'}]}]}]},[{type,{250,7},constraint,[{atom,{250,7},is_subtype},[{var,{250,7},'Dir'},{user_type,{250,14},name_all,[]}]]},{type,{251,7},constraint,[{atom,{251,7},is_subtype},[{var,{251,7},'Reason'},{type,{251,17},union,[{user_type,{251,17},posix,[]},{atom,{251,27},badarg}]}]]}]]}]}}]}},{{function,make_link,2},[{file,[102,105,108,101,46,101,114,108]},{location,427}],[<<109,97,107,101,95,108,105,110,107,47,50>>],#{<<101,110>> => [{p,[],[<<77,97,107,101,115,32,97,32,104,97,114,100,32,108,105,110,107,32,102,114,111,109,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,116,111,32>>,{code,[],[<<78,101,119>>]},<<32,111,110,32,112,108,97,116,102,111,114,109,115,32,115,117,112,112,111,114,116,105,110,103,32,108,105,110,107,115,32,40,85,110,105,120,32,97,110,100,32,87,105,110,100,111,119,115,41,46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,116,104,101,32,108,105,110,107,32,119,97,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,114,101,97,116,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,110,111,116,32,115,117,112,112,111,114,116,105,110,103,32,108,105,110,107,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,101,110,111,116,115,117,112,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,111,114,32>>,{code,[],[<<78,101,119>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[{code,[],[<<78,101,119>>]},<<32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<72,97,114,100,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,54,52>>,signature => [{attribute,{427,2},spec,{{make_link,2},[{type,{427,16},bounded_fun,[{type,{427,16},'fun',[{type,{427,16},product,[{var,{427,17},'Existing'},{var,{427,27},'New'}]},{type,{427,35},union,[{atom,{427,35},ok},{type,{427,40},tuple,[{atom,{427,41},error},{var,{427,48},'Reason'}]}]}]},[{type,{428,7},constraint,[{atom,{428,7},is_subtype},[{var,{428,7},'Existing'},{user_type,{428,19},name_all,[]}]]},{type,{429,7},constraint,[{atom,{429,7},is_subtype},[{var,{429,7},'New'},{user_type,{429,14},name_all,[]}]]},{type,{430,7},constraint,[{atom,{430,7},is_subtype},[{var,{430,7},'Reason'},{type,{430,17},union,[{user_type,{430,17},posix,[]},{atom,{430,27},badarg}]}]]}]]}]}}]}},{{function,make_symlink,2},[{file,[102,105,108,101,46,101,114,108]},{location,435}],[<<109,97,107,101,95,115,121,109,108,105,110,107,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32>>,{code,[],[<<78,101,119>>]},<<32,116,111,32,116,104,101,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,111,110,32,112,108,97,116,102,111,114,109,115,32,115,117,112,112,111,114,116,105,110,103,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,32,40,109,111,115,116,32,85,110,105,120,32,115,121,115,116,101,109,115,32,97,110,100,32,87,105,110,100,111,119,115,44,32,98,101,103,105,110,110,105,110,103,32,119,105,116,104,32,86,105,115,116,97,41,46,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,116,104,101,32,108,105,110,107,32,105,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,114,101,97,116,101,100,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,110,111,116,32,115,117,112,112,111,114,116,105,110,103,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,116,115,117,112,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<69,120,105,115,116,105,110,103>>]},<<32,111,114,32>>,{code,[],[<<78,101,119>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[{code,[],[<<78,101,119>>]},<<32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]},{dt,[],[{code,[],[<<101,112,101,114,109>>]}]},{dd,[],[{p,[],[<<85,115,101,114,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,112,114,105,118,105,108,101,103,101,115,32,116,111,32,99,114,101,97,116,101,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,32,40>>,{code,[],[<<83,101,67,114,101,97,116,101,83,121,109,98,111,108,105,99,76,105,110,107,80,114,105,118,105,108,101,103,101>>]},<<32,111,110,32,87,105,110,100,111,119,115,41,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,54,57,51>>,signature => [{attribute,{435,2},spec,{{make_symlink,2},[{type,{435,19},bounded_fun,[{type,{435,19},'fun',[{type,{435,19},product,[{var,{435,20},'Existing'},{var,{435,30},'New'}]},{type,{435,38},union,[{atom,{435,38},ok},{type,{435,43},tuple,[{atom,{435,44},error},{var,{435,51},'Reason'}]}]}]},[{type,{436,7},constraint,[{atom,{436,7},is_subtype},[{var,{436,7},'Existing'},{user_type,{436,19},name_all,[]}]]},{type,{437,7},constraint,[{atom,{437,7},is_subtype},[{var,{437,7},'New'},{user_type,{437,14},name_all,[]}]]},{type,{438,7},constraint,[{atom,{438,7},is_subtype},[{var,{438,7},'Reason'},{type,{438,17},union,[{user_type,{438,17},posix,[]},{atom,{438,27},badarg}]}]]}]]}]}}]}},{{function,native_name_encoding,0},[{file,[102,105,108,101,46,101,114,108]},{location,135}],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>],#{<<101,110>> => [{p,[],[{a,[{id,<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103>>}],[]},<<82,101,116,117,114,110,115,32,116,104,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,109,111,100,101,46,32,73,102,32,105,116,32,105,115,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,116,104,101,32,115,121,115,116,101,109,32,116,114,97,110,115,108,97,116,101,115,32,110,111,32,102,105,108,101,110,97,109,101,115,46,32,73,102,32,105,116,32,105,115,32>>,{code,[],[<<117,116,102,56>>]},<<44,32,102,105,108,101,110,97,109,101,115,32,97,114,101,32,99,111,110,118,101,114,116,101,100,32,98,97,99,107,32,97,110,100,32,102,111,114,116,104,32,116,111,32,116,104,101,32,110,97,116,105,118,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,32,40,117,115,117,97,108,108,121,32,85,84,70,45,56,44,32,98,117,116,32,85,84,70,45,49,54,32,111,110,32,87,105,110,100,111,119,115,41,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,55,50,57>>,signature => [{attribute,{135,2},spec,{{native_name_encoding,0},[{type,{135,27},'fun',[{type,{135,27},product,[]},{type,{135,33},union,[{atom,{135,33},latin1},{atom,{135,42},utf8}]}]}]}}],since => <<79,84,80,32,82,49,52,66,48,49>>}},{{function,open,2},[{file,[102,105,108,101,46,101,114,108]},{location,510}],[<<111,112,101,110,47,50>>],#{<<101,110>> => [{p,[],[<<79,112,101,110,115,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101>>]},<<32,105,110,32,116,104,101,32,109,111,100,101,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32>>,{code,[],[<<77,111,100,101,115>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,99,111,110,116,97,105,110,32,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<114,101,97,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,44,32,119,104,105,99,104,32,109,117,115,116,32,101,120,105,115,116,44,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,114,101,97,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<119,114,105,116,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46,32,73,116,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,73,102,32,116,104,101,32,102,105,108,101,32,101,120,105,115,116,115,32,97,110,100,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,105,115,32,110,111,116,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{code,[],[<<114,101,97,100>>]},<<44,32,116,104,101,32,102,105,108,101,32,105,115,32,116,114,117,110,99,97,116,101,100,46>>]}]},{dt,[],[{code,[],[<<97,112,112,101,110,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46,32,73,116,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,69,118,101,114,121,32,119,114,105,116,101,32,111,112,101,114,97,116,105,111,110,32,116,111,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<97,112,112,101,110,100>>]},<<32,116,97,107,101,115,32,112,108,97,99,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<101,120,99,108,117,115,105,118,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46,32,73,116,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,73,102,32,116,104,101,32,102,105,108,101,32,101,120,105,115,116,115,44,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,101,120,105,115,116,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,100,111,101,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101,32,101,120,99,108,117,115,105,118,101,110,101,115,115,32,111,110,32,102,105,108,101,32,115,121,115,116,101,109,115,32,110,111,116,32,115,117,112,112,111,114,116,105,110,103,32>>,{code,[],[<<79,95,69,88,67,76>>]},<<32,112,114,111,112,101,114,108,121,44,32,115,117,99,104,32,97,115,32,78,70,83,46,32,68,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,115,117,112,112,111,114,116,115,32,105,116,32,40,105,110,32,103,101,110,101,114,97,108,44,32,108,111,99,97,108,32,102,105,108,101,32,115,121,115,116,101,109,115,32,97,114,101,32,115,97,102,101,41,46>>]}]}]},{dt,[],[{code,[],[<<114,97,119>>]}]},{dd,[],[{p,[],[{a,[{id,<<114,97,119>>}],[]},<<65,108,108,111,119,115,32,102,97,115,116,101,114,32,97,99,99,101,115,115,32,116,111,32,97,32,102,105,108,101,44,32,97,115,32,110,111,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,105,115,32,110,101,101,100,101,100,32,116,111,32,104,97,110,100,108,101,32,116,104,101,32,102,105,108,101,46,32,72,111,119,101,118,101,114,44,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32,116,104,105,115,32,119,97,121,32,104,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,109,105,116,97,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32>>,{code,[],[<<105,111>>]},<<32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,44,32,97,115,32,116,104,101,121,32,99,97,110,32,111,110,108,121,32,116,97,108,107,32,116,111,32,97,110,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,46,32,73,110,115,116,101,97,100,44,32,117,115,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<46>>]}]},{li,[],[{p,[],[<<69,115,112,101,99,105,97,108,108,121,32,105,102,32>>,{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]},<<32,105,115,32,116,111,32,98,101,32,117,115,101,100,32,111,110,32,97,32>>,{code,[],[<<114,97,119>>]},<<32,102,105,108,101,44,32,105,116,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,116,111,32,99,111,109,98,105,110,101,32,116,104,105,115,32,111,112,116,105,111,110,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,97,115,32,108,105,110,101,45,111,114,105,101,110,116,101,100,32,73,47,79,32,105,115,32,105,110,101,102,102,105,99,105,101,110,116,32,119,105,116,104,111,117,116,32,98,117,102,102,101,114,105,110,103,46>>]}]},{li,[],[{p,[],[<<79,110,108,121,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,116,104,97,116,32,111,112,101,110,101,100,32,116,104,101,32,102,105,108,101,32,99,97,110,32,117,115,101,32,105,116,46>>]}]},{li,[],[{p,[],[<<65,32,114,101,109,111,116,101,32,69,114,108,97,110,103,32,102,105,108,101,32,115,101,114,118,101,114,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,46,32,84,104,101,32,99,111,109,112,117,116,101,114,32,111,110,32,119,104,105,99,104,32,116,104,101,32,69,114,108,97,110,103,32,110,111,100,101,32,105,115,32,114,117,110,110,105,110,103,32,109,117,115,116,32,104,97,118,101,32,97,99,99,101,115,115,32,116,111,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,40,100,105,114,101,99,116,108,121,32,111,114,32,116,104,114,111,117,103,104,32,78,70,83,41,46>>]}]}]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,111,112,101,114,97,116,105,111,110,115,32,111,110,32,116,104,101,32,102,105,108,101,32,114,101,116,117,114,110,32,98,105,110,97,114,105,101,115,32,114,97,116,104,101,114,32,116,104,97,110,32,108,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<123,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,83,105,122,101,44,32,68,101,108,97,121,125>>]}]},{dd,[],[{p,[],[<<68,97,116,97,32,105,110,32,115,117,98,115,101,113,117,101,110,116,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,32,105,115,32,98,117,102,102,101,114,101,100,32,117,110,116,105,108,32,97,116,32,108,101,97,115,116,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,32,97,114,101,32,98,117,102,102,101,114,101,100,44,32,111,114,32,117,110,116,105,108,32,116,104,101,32,111,108,100,101,115,116,32,98,117,102,102,101,114,101,100,32,100,97,116,97,32,105,115,32>>,{code,[],[<<68,101,108,97,121>>]},<<32,109,105,108,108,105,115,101,99,111,110,100,115,32,111,108,100,46,32,84,104,101,110,32,97,108,108,32,98,117,102,102,101,114,101,100,32,100,97,116,97,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,46,32,84,104,101,32,98,117,102,102,101,114,101,100,32,100,97,116,97,32,105,115,32,97,108,115,111,32,102,108,117,115,104,101,100,32,98,101,102,111,114,101,32,115,111,109,101,32,111,116,104,101,114,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,32,116,104,97,110,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,105,115,32,101,120,101,99,117,116,101,100,46>>]},{p,[],[<<84,104,101,32,112,117,114,112,111,115,101,32,111,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,116,111,32,105,110,99,114,101,97,115,101,32,112,101,114,102,111,114,109,97,110,99,101,32,98,121,32,114,101,100,117,99,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,115,46,32,84,104,117,115,44,32,116,104,101,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,32,109,117,115,116,32,98,101,32,102,111,114,32,115,105,122,101,115,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<44,32,97,110,100,32,110,111,116,32,105,110,116,101,114,115,112,101,114,115,101,100,32,98,121,32,116,111,111,32,109,97,110,121,32,111,116,104,101,114,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,46>>]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,117,115,101,100,44,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,32,99,97,110,32,112,114,101,109,97,116,117,114,101,108,121,32,98,101,32,114,101,112,111,114,116,101,100,32,97,115,32,115,117,99,99,101,115,115,102,117,108,44,32,97,110,100,32,105,102,32,97,32,119,114,105,116,101,32,101,114,114,111,114,32,111,99,99,117,114,115,44,32,116,104,101,32,101,114,114,111,114,32,105,115,32,114,101,112,111,114,116,101,100,32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,110,101,120,116,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,110,111,116,32,101,120,101,99,117,116,101,100,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32>>,{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]},<<32,105,115,32,117,115,101,100,44,32,97,102,116,101,114,32,97,32,110,117,109,98,101,114,32,111,102,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,99,97,108,108,115,44,32>>,{code,[],[<<99,108,111,115,101,47,49>>]},<<32,99,97,110,32,114,101,116,117,114,110,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,115,112,99,125>>]},<<44,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,111,110,32,116,104,101,32,100,105,115,99,32,102,111,114,32,112,114,101,118,105,111,117,115,108,121,32,119,114,105,116,116,101,110,32,100,97,116,97,46,32>>,{code,[],[<<99,108,111,115,101,47,49>>]},<<32,109,117,115,116,32,112,114,111,98,97,98,108,121,32,98,101,32,99,97,108,108,101,100,32,97,103,97,105,110,44,32,97,115,32,116,104,101,32,102,105,108,101,32,105,115,32,115,116,105,108,108,32,111,112,101,110,46>>]}]},{dt,[],[{code,[],[<<100,101,108,97,121,101,100,95,119,114,105,116,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<123,100,101,108,97,121,101,100,95,119,114,105,116,101,44,32,83,105,122,101,44,32,68,101,108,97,121,125>>]},<<32,119,105,116,104,32,114,101,97,115,111,110,97,98,108,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<83,105,122,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,108,97,121>>]},<<32,40,114,111,117,103,104,108,121,32,115,111,109,101,32,54,52,32,75,66,44,32,50,32,115,101,99,111,110,100,115,41,46>>]}]},{dt,[],[{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]}]},{dd,[],[{p,[],[<<65,99,116,105,118,97,116,101,115,32,114,101,97,100,32,100,97,116,97,32,98,117,102,102,101,114,105,110,103,46,32,73,102,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,99,97,108,108,115,32,97,114,101,32,102,111,114,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,108,101,115,115,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,44,32,114,101,97,100,32,111,112,101,114,97,116,105,111,110,115,32,116,111,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,97,114,101,32,115,116,105,108,108,32,112,101,114,102,111,114,109,101,100,32,102,111,114,32,98,108,111,99,107,115,32,111,102,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,46,32,84,104,101,32,101,120,116,114,97,32,100,97,116,97,32,105,115,32,98,117,102,102,101,114,101,100,32,97,110,100,32,114,101,116,117,114,110,101,100,32,105,110,32,115,117,98,115,101,113,117,101,110,116,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,99,97,108,108,115,44,32,103,105,118,105,110,103,32,97,32,112,101,114,102,111,114,109,97,110,99,101,32,103,97,105,110,32,97,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,99,97,108,108,115,32,105,115,32,114,101,100,117,99,101,100,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<114,101,97,100,95,97,104,101,97,100>>]},<<32,98,117,102,102,101,114,32,105,115,32,97,108,115,111,32,104,105,103,104,108,121,32,117,115,101,100,32,98,121,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]},<<32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,44,32,116,104,101,114,101,102,111,114,101,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,40,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,32,114,101,97,115,111,110,115,41,32,119,104,101,110,32,97,99,99,101,115,115,105,110,103,32,114,97,119,32,102,105,108,101,115,32,117,115,105,110,103,32,116,104,97,116,32,102,117,110,99,116,105,111,110,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,99,97,108,108,115,32,97,114,101,32,102,111,114,32,115,105,122,101,115,32,110,111,116,32,115,105,103,110,105,102,105,99,97,110,116,108,121,32,108,101,115,115,32,116,104,97,110,44,32,111,114,32,101,118,101,110,32,103,114,101,97,116,101,114,32,116,104,97,110,32>>,{code,[],[<<83,105,122,101>>]},<<32,98,121,116,101,115,44,32,110,111,32,112,101,114,102,111,114,109,97,110,99,101,32,103,97,105,110,32,99,97,110,32,98,101,32,101,120,112,101,99,116,101,100,46>>]}]},{dt,[],[{code,[],[<<114,101,97,100,95,97,104,101,97,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,119,105,116,104,32,97,32,114,101,97,115,111,110,97,98,108,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,102,111,114,32>>,{code,[],[<<83,105,122,101>>]},<<32,40,114,111,117,103,104,108,121,32,115,111,109,101,32,54,52,32,75,66,41,46>>]}]},{dt,[],[{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,103,122,105,112,32,99,111,109,112,114,101,115,115,101,100,32,102,105,108,101,115,46,32,79,112,116,105,111,110,32>>,{code,[],[<<99,111,109,112,114,101,115,115,101,100>>]},<<32,109,117,115,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32>>,{code,[],[<<114,101,97,100>>]},<<32,111,114,32>>,{code,[],[<<119,114,105,116,101>>]},<<44,32,98,117,116,32,110,111,116,32,98,111,116,104,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,115,105,122,101,32,111,98,116,97,105,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>]}]},<<32,100,111,101,115,32,112,114,111,98,97,98,108,121,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,97,100,32,102,114,111,109,32,97,32,99,111,109,112,114,101,115,115,101,100,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,110,99,111,100,105,110,103,44,32,69,110,99,111,100,105,110,103,125>>]}]},{dd,[],[{p,[],[<<77,97,107,101,115,32,116,104,101,32,102,105,108,101,32,112,101,114,102,111,114,109,32,97,117,116,111,109,97,116,105,99,32,116,114,97,110,115,108,97,116,105,111,110,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,111,32,97,110,100,32,102,114,111,109,32,97,32,115,112,101,99,105,102,105,99,32,40,85,110,105,99,111,100,101,41,32,101,110,99,111,100,105,110,103,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,100,97,116,97,32,115,117,112,112,108,105,101,100,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<32,111,114,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,115,116,105,108,108,32,105,115,32,98,121,116,101,45,111,114,105,101,110,116,101,100,59,32,116,104,105,115,32,111,112,116,105,111,110,32,100,101,110,111,116,101,115,32,111,110,108,121,32,104,111,119,32,100,97,116,97,32,105,115,32,115,116,111,114,101,100,32,105,110,32,116,104,101,32,100,105,115,107,32,102,105,108,101,46>>]},{p,[],[<<68,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,101,110,99,111,100,105,110,103,44,32,100,105,102,102,101,114,101,110,116,32,109,101,116,104,111,100,115,32,111,102,32,114,101,97,100,105,110,103,32,97,110,100,32,119,114,105,116,105,110,103,32,100,97,116,97,32,105,115,32,112,114,101,102,101,114,114,101,100,46,32,84,104,101,32,100,101,102,97,117,108,116,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,105,109,112,108,105,101,115,32,117,115,105,110,103,32,116,104,105,115,32,109,111,100,117,108,101,32,40>>,{code,[],[<<102,105,108,101>>]},<<41,32,102,111,114,32,114,101,97,100,105,110,103,32,97,110,100,32,119,114,105,116,105,110,103,32,100,97,116,97,32,97,115,32,116,104,101,32,105,110,116,101,114,102,97,99,101,115,32,112,114,111,118,105,100,101,100,32,104,101,114,101,32,119,111,114,107,32,119,105,116,104,32,98,121,116,101,45,111,114,105,101,110,116,101,100,32,100,97,116,97,46,32,85,115,105,110,103,32,111,116,104,101,114,32,40,85,110,105,99,111,100,101,41,32,101,110,99,111,100,105,110,103,115,32,109,97,107,101,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,102,117,110,99,116,105,111,110,115,32>>,{code,[],[<<103,101,116,95,99,104,97,114,115>>]},<<44,32>>,{code,[],[<<103,101,116,95,108,105,110,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<112,117,116,95,99,104,97,114,115>>]},<<32,109,111,114,101,32,115,117,105,116,97,98,108,101,44,32,97,115,32,116,104,101,121,32,99,97,110,32,119,111,114,107,32,119,105,116,104,32,116,104,101,32,102,117,108,108,32,85,110,105,99,111,100,101,32,114,97,110,103,101,46>>]},{p,[],[<<73,102,32,100,97,116,97,32,105,115,32,115,101,110,116,32,116,111,32,97,110,32>>,{code,[],[<<105,111,95,100,101,118,105,99,101,40,41>>]},<<32,105,110,32,97,32,102,111,114,109,97,116,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,99,111,110,118,101,114,116,101,100,32,116,111,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,101,110,99,111,100,105,110,103,44,32,111,114,32,105,102,32,100,97,116,97,32,105,115,32,114,101,97,100,32,98,121,32,97,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,114,101,116,117,114,110,115,32,100,97,116,97,32,105,110,32,97,32,102,111,114,109,97,116,32,116,104,97,116,32,99,97,110,110,111,116,32,99,111,112,101,32,119,105,116,104,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,114,97,110,103,101,32,111,102,32,116,104,101,32,100,97,116,97,44,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,32,97,110,100,32,116,104,101,32,102,105,108,101,32,105,115,32,99,108,111,115,101,100,46>>]},{p,[],[<<65,108,108,111,119,101,100,32,118,97,108,117,101,115,32,102,111,114,32>>,{code,[],[<<69,110,99,111,100,105,110,103>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<108,97,116,105,110,49>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,101,110,99,111,100,105,110,103,46,32,66,121,116,101,115,32,115,117,112,112,108,105,101,100,32,116,111,32,116,104,101,32,102,105,108,101,44,32,116,104,97,116,32,105,115,44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,47,50>>]}]},<<32,97,114,101,32,119,114,105,116,116,101,110,32,34,97,115,32,105,115,34,32,111,110,32,116,104,101,32,102,105,108,101,46,32,76,105,107,101,119,105,115,101,44,32,98,121,116,101,115,32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,44,32,116,104,97,116,32,105,115,44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,97,114,101,32,114,101,116,117,114,110,101,100,32,34,97,115,32,105,115,34,46,32,73,102,32,109,111,100,117,108,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,105,115,32,117,115,101,100,32,102,111,114,32,119,114,105,116,105,110,103,44,32,116,104,101,32,102,105,108,101,32,99,97,110,32,111,110,108,121,32,99,111,112,101,32,119,105,116,104,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,117,112,32,116,111,32,99,111,100,101,32,112,111,105,110,116,32,50,53,53,32,40,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,114,97,110,103,101,41,46>>]}]},{dt,[],[{code,[],[<<117,110,105,99,111,100,101,32,111,114,32,117,116,102,56>>]}]},{dd,[],[{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,97,114,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,97,110,100,32,102,114,111,109,32,85,84,70,45,56,32,101,110,99,111,100,105,110,103,32,98,101,102,111,114,101,32,116,104,101,121,32,97,114,101,32,119,114,105,116,116,101,110,32,116,111,32,111,114,32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46,32,65,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32,116,104,105,115,32,119,97,121,32,99,97,110,32,98,101,32,114,101,97,100,97,98,108,101,32,117,115,105,110,103,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<44,32,97,115,32,108,111,110,103,32,97,115,32,110,111,32,100,97,116,97,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,102,105,108,101,32,108,105,101,115,32,98,101,121,111,110,100,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,114,97,110,103,101,32,40,48,46,46,50,53,53,41,44,32,98,117,116,32,102,97,105,108,117,114,101,32,111,99,99,117,114,115,32,105,102,32,116,104,101,32,100,97,116,97,32,99,111,110,116,97,105,110,115,32,85,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,115,32,98,101,121,111,110,100,32,116,104,97,116,32,114,97,110,103,101,46,32,84,104,101,32,102,105,108,101,32,105,115,32,98,101,115,116,32,114,101,97,100,32,119,105,116,104,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32,85,110,105,99,111,100,101,32,97,119,97,114,101,32,109,111,100,117,108,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<46>>]},{p,[],[<<66,121,116,101,115,32,119,114,105,116,116,101,110,32,116,111,32,116,104,101,32,102,105,108,101,32,98,121,32,97,110,121,32,109,101,97,110,115,32,97,114,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,85,84,70,45,56,32,101,110,99,111,100,105,110,103,32,98,101,102,111,114,101,32,98,101,105,110,103,32,115,116,111,114,101,100,32,111,110,32,116,104,101,32,100,105,115,107,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<117,116,102,49,54,32,111,114,32,123,117,116,102,49,54,44,98,105,103,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,98,105,103,32,101,110,100,105,97,110,32,85,84,70,45,49,54,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]},{dt,[],[{code,[],[<<123,117,116,102,49,54,44,108,105,116,116,108,101,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,85,84,70,45,49,54,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]},{dt,[],[{code,[],[<<117,116,102,51,50,32,111,114,32,123,117,116,102,51,50,44,98,105,103,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,98,105,103,32,101,110,100,105,97,110,32,85,84,70,45,51,50,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]},{dt,[],[{code,[],[<<123,117,116,102,51,50,44,108,105,116,116,108,101,125>>]}]},{dd,[],[{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,98,117,116,32,116,114,97,110,115,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,116,111,32,97,110,100,32,102,114,111,109,32,108,105,116,116,108,101,32,101,110,100,105,97,110,32,85,84,70,45,51,50,32,105,110,115,116,101,97,100,32,111,102,32,85,84,70,45,56,46>>]}]}]},{p,[],[<<84,104,101,32,69,110,99,111,100,105,110,103,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,102,111,114,32,97,32,102,105,108,101,32,34,111,110,32,116,104,101,32,102,108,121,34,32,98,121,32,117,115,105,110,103,32,102,117,110,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111,35,115,101,116,111,112,116,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,111,58,115,101,116,111,112,116,115,47,50>>]}]},<<46,32,83,111,32,97,32,102,105,108,101,32,99,97,110,32,98,101,32,97,110,97,108,121,122,101,100,32,105,110,32,108,97,116,105,110,49,32,101,110,99,111,100,105,110,103,32,102,111,114,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,66,79,77,44,32,112,111,115,105,116,105,111,110,101,100,32,98,101,121,111,110,100,32,116,104,101,32,66,79,77,32,97,110,100,32,116,104,101,110,32,98,101,32,115,101,116,32,102,111,114,32,116,104,101,32,114,105,103,104,116,32,101,110,99,111,100,105,110,103,32,98,101,102,111,114,101,32,102,117,114,116,104,101,114,32,114,101,97,100,105,110,103,46,32,70,111,114,32,102,117,110,99,116,105,111,110,115,32,105,100,101,110,116,105,102,121,105,110,103,32,66,79,77,115,44,32,115,101,101,32,109,111,100,117,108,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<117,110,105,99,111,100,101,40,51,41>>]}]},<<46>>]},{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,102,105,108,101,115,46>>]}]},{dt,[],[{code,[],[<<114,97,109>>]}]},{dd,[],[{p,[],[{code,[],[<<70,105,108,101>>]},<<32,109,117,115,116,32,98,101,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<46,32,82,101,116,117,114,110,115,32,97,110,32>>,{code,[],[<<102,100,40,41>>]},<<44,32,119,104,105,99,104,32,108,101,116,115,32,109,111,100,117,108,101,32>>,{code,[],[<<102,105,108,101>>]},<<32,111,112,101,114,97,116,101,32,111,110,32,116,104,101,32,100,97,116,97,32,105,110,45,109,101,109,111,114,121,32,97,115,32,105,102,32,105,116,32,105,115,32,97,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<115,121,110,99>>]}]},{dd,[],[{p,[],[<<79,110,32,112,108,97,116,102,111,114,109,115,32,115,117,112,112,111,114,116,105,110,103,32,105,116,44,32,101,110,97,98,108,101,115,32,116,104,101,32,80,79,83,73,88,32>>,{code,[],[<<79,95,83,89,78,67>>]},<<32,115,121,110,99,104,114,111,110,111,117,115,32,73,47,79,32,102,108,97,103,32,111,114,32,105,116,115,32,112,108,97,116,102,111,114,109,45,100,101,112,101,110,100,101,110,116,32,101,113,117,105,118,97,108,101,110,116,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<70,73,76,69,95,70,76,65,71,95,87,82,73,84,69,95,84,72,82,79,85,71,72>>]},<<32,111,110,32,87,105,110,100,111,119,115,41,32,115,111,32,116,104,97,116,32,119,114,105,116,101,115,32,116,111,32,116,104,101,32,102,105,108,101,32,98,108,111,99,107,32,117,110,116,105,108,32,116,104,101,32,100,97,116,97,32,105,115,32,112,104,121,115,105,99,97,108,108,121,32,119,114,105,116,116,101,110,32,116,111,32,100,105,115,107,46,32,72,111,119,101,118,101,114,44,32,98,101,32,97,119,97,114,101,32,116,104,97,116,32,116,104,101,32,101,120,97,99,116,32,115,101,109,97,110,116,105,99,115,32,111,102,32,116,104,105,115,32,102,108,97,103,32,100,105,102,102,101,114,32,102,114,111,109,32,112,108,97,116,102,111,114,109,32,116,111,32,112,108,97,116,102,111,114,109,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,110,111,110,101,32,111,102,32,76,105,110,117,120,32,111,114,32,87,105,110,100,111,119,115,32,103,117,97,114,97,110,116,101,101,115,32,116,104,97,116,32,97,108,108,32,102,105,108,101,32,109,101,116,97,100,97,116,97,32,97,114,101,32,97,108,115,111,32,119,114,105,116,116,101,110,32,98,101,102,111,114,101,32,116,104,101,32,99,97,108,108,32,114,101,116,117,114,110,115,46,32,70,111,114,32,112,114,101,99,105,115,101,32,115,101,109,97,110,116,105,99,115,44,32,99,104,101,99,107,32,116,104,101,32,100,101,116,97,105,108,115,32,111,102,32,121,111,117,114,32,112,108,97,116,102,111,114,109,32,100,111,99,117,109,101,110,116,97,116,105,111,110,46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,119,105,116,104,32,110,111,32,115,117,112,112,111,114,116,32,102,111,114,32,80,79,83,73,88,32>>,{code,[],[<<79,95,83,89,78,67>>]},<<32,111,114,32,101,113,117,105,118,97,108,101,110,116,44,32,117,115,101,32,111,102,32,116,104,101,32>>,{code,[],[<<115,121,110,99>>]},<<32,102,108,97,103,32,99,97,117,115,101,115,32>>,{code,[],[<<111,112,101,110>>]},<<32,116,111,32,114,101,116,117,114,110,32>>,{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,116,115,117,112,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<100,105,114,101,99,116,111,114,121>>]}]},{dd,[],[{p,[],[<<65,108,108,111,119,115,32>>,{code,[],[<<111,112,101,110>>]},<<32,116,111,32,119,111,114,107,32,111,110,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]}]},{p,[],[<<82,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,73,111,68,101,118,105,99,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,105,110,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,109,111,100,101,46,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,111,112,101,110,101,100,46>>]}]}]},{p,[],[{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,105,115,32,114,101,97,108,108,121,32,116,104,101,32,112,105,100,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,104,97,110,100,108,101,115,32,116,104,101,32,102,105,108,101,46,32,84,104,105,115,32,112,114,111,99,101,115,115,32,109,111,110,105,116,111,114,115,32,116,104,101,32,112,114,111,99,101,115,115,32,116,104,97,116,32,111,114,105,103,105,110,97,108,108,121,32,111,112,101,110,101,100,32,116,104,101,32,102,105,108,101,32,40,116,104,101,32,111,119,110,101,114,32,112,114,111,99,101,115,115,41,46,32,73,102,32,116,104,101,32,111,119,110,101,114,32,112,114,111,99,101,115,115,32,116,101,114,109,105,110,97,116,101,115,44,32,116,104,101,32,102,105,108,101,32,105,115,32,99,108,111,115,101,100,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,105,116,115,101,108,102,32,116,101,114,109,105,110,97,116,101,115,32,116,111,111,46,32,65,110,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,114,101,116,117,114,110,101,100,32,102,114,111,109,32,116,104,105,115,32,99,97,108,108,32,99,97,110,32,98,101,32,117,115,101,100,32,97,115,32,97,110,32,97,114,103,117,109,101,110,116,32,116,111,32,116,104,101,32,73,47,79,32,102,117,110,99,116,105,111,110,115,32,40,115,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<41,46>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<87,104,105,108,101,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,111,112,101,110,32,97,110,121,32,102,105,108,101,44,32,119,101,32,114,101,99,111,109,109,101,110,100,32,97,103,97,105,110,115,116,32,117,115,105,110,103,32,105,116,32,102,111,114,32,78,70,83,45,109,111,117,110,116,101,100,32,102,105,108,101,115,44,32,70,73,70,79,115,44,32,100,101,118,105,99,101,115,44,32,111,114,32,115,105,109,105,108,97,114,32,115,105,110,99,101,32,116,104,101,121,32,99,97,110,32,99,97,117,115,101,32,73,79,32,116,104,114,101,97,100,115,32,116,111,32,104,97,110,103,32,102,111,114,101,118,101,114,46>>]},{p,[],[<<73,102,32,121,111,117,114,32,97,112,112,108,105,99,97,116,105,111,110,32,110,101,101,100,115,32,116,111,32,105,110,116,101,114,97,99,116,32,119,105,116,104,32,116,104,101,115,101,32,107,105,110,100,115,32,111,102,32,102,105,108,101,115,32,119,101,32,114,101,99,111,109,109,101,110,100,32,98,114,101,97,107,105,110,103,32,111,117,116,32,116,104,111,115,101,32,112,97,114,116,115,32,116,111,32,97,32,112,111,114,116,32,112,114,111,103,114,97,109,32,105,110,115,116,101,97,100,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,110,32,112,114,101,118,105,111,117,115,32,118,101,114,115,105,111,110,115,32,111,102,32>>,{code,[],[<<102,105,108,101>>]},<<44,32,109,111,100,101,115,32,119,101,114,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,111,110,101,32,111,102,32,116,104,101,32,97,116,111,109,115,32>>,{code,[],[<<114,101,97,100>>]},<<44,32>>,{code,[],[<<119,114,105,116,101>>]},<<44,32,111,114,32>>,{code,[],[<<114,101,97,100,95,119,114,105,116,101>>]},<<32,105,110,115,116,101,97,100,32,111,102,32,97,32,108,105,115,116,46,32,84,104,105,115,32,105,115,32,115,116,105,108,108,32,97,108,108,111,119,101,100,32,102,111,114,32,114,101,97,115,111,110,115,32,111,102,32,98,97,99,107,119,97,114,100,115,32,99,111,109,112,97,116,105,98,105,108,105,116,121,44,32,98,117,116,32,105,115,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,32,102,111,114,32,110,101,119,32,99,111,100,101,46,32,65,108,115,111,32,110,111,116,101,32,116,104,97,116,32>>,{code,[],[<<114,101,97,100,95,119,114,105,116,101>>]},<<32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,97,32,109,111,100,101,32,108,105,115,116,46>>]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,114,101,97,100,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,115,101,97,114,99,104,105,110,103,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,97,109,101,100,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,44,32,111,114,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,116,115,101,108,102,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,32,105,102,32>>,{code,[],[<<100,105,114,101,99,116,111,114,121>>]},<<32,109,111,100,101,32,119,97,115,32,115,112,101,99,105,102,105,101,100,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<84,104,101,114,101,32,105,115,32,110,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,32,40,105,102,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,97,99,99,101,115,115,32,119,97,115,32,115,112,101,99,105,102,105,101,100,41,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,55,52,49>>,signature => [{attribute,{510,2},spec,{{open,2},[{type,{510,11},bounded_fun,[{type,{510,11},'fun',[{type,{510,11},product,[{var,{510,12},'File'},{var,{510,18},'Modes'}]},{type,{510,28},union,[{type,{510,28},tuple,[{atom,{510,29},ok},{var,{510,33},'IoDevice'}]},{type,{510,45},tuple,[{atom,{510,46},error},{var,{510,53},'Reason'}]}]}]},[{type,{511,7},constraint,[{atom,{511,7},is_subtype},[{var,{511,7},'File'},{type,{511,15},union,[{var,{511,15},'Filename'},{type,{511,26},iodata,[]}]}]]},{type,{512,7},constraint,[{atom,{512,7},is_subtype},[{var,{512,7},'Filename'},{user_type,{512,19},name_all,[]}]]},{type,{513,7},constraint,[{atom,{513,7},is_subtype},[{var,{513,7},'Modes'},{type,{513,16},list,[{type,{513,17},union,[{user_type,{513,17},mode,[]},{atom,{513,26},ram},{atom,{513,32},directory}]}]}]]},{type,{514,7},constraint,[{atom,{514,7},is_subtype},[{var,{514,7},'IoDevice'},{user_type,{514,19},io_device,[]}]]},{type,{515,7},constraint,[{atom,{515,7},is_subtype},[{var,{515,7},'Reason'},{type,{515,17},union,[{user_type,{515,17},posix,[]},{atom,{515,27},badarg},{atom,{515,36},system_limit}]}]]}]]}]}}]}},{{function,path_consult,2},[{file,[102,105,108,101,46,101,114,108]},{location,1041}],[<<112,97,116,104,95,99,111,110,115,117,108,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,114,101,97,100,115,32,69,114,108,97,110,103,32,116,101,114,109,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,84,101,114,109,115,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,114,101,97,100,46,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,116,101,114,109,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,48,51,54>>,signature => [{attribute,{1041,2},spec,{{path_consult,2},[{type,{1041,19},bounded_fun,[{type,{1041,19},'fun',[{type,{1041,19},product,[{var,{1041,20},'Path'},{var,{1041,26},'Filename'}]},{type,{1041,39},union,[{type,{1041,39},tuple,[{atom,{1041,40},ok},{var,{1041,44},'Terms'},{var,{1041,51},'FullName'}]},{type,{1041,63},tuple,[{atom,{1041,64},error},{var,{1041,71},'Reason'}]}]}]},[{type,{1042,7},constraint,[{atom,{1042,7},is_subtype},[{var,{1042,7},'Path'},{type,{1042,15},list,[{var,{1042,16},'Dir'}]}]]},{type,{1043,7},constraint,[{atom,{1043,7},is_subtype},[{var,{1043,7},'Dir'},{user_type,{1043,14},name_all,[]}]]},{type,{1044,7},constraint,[{atom,{1044,7},is_subtype},[{var,{1044,7},'Filename'},{user_type,{1044,19},name_all,[]}]]},{type,{1045,7},constraint,[{atom,{1045,7},is_subtype},[{var,{1045,7},'Terms'},{type,{1045,16},list,[{type,{1045,17},term,[]}]}]]},{type,{1046,7},constraint,[{atom,{1046,7},is_subtype},[{var,{1046,7},'FullName'},{user_type,{1046,19},filename_all,[]}]]},{type,{1047,7},constraint,[{atom,{1047,7},is_subtype},[{var,{1047,7},'Reason'},{type,{1047,17},union,[{user_type,{1047,17},posix,[]},{atom,{1047,27},badarg},{atom,{1047,36},terminated},{atom,{1047,49},system_limit},{type,{1048,17},tuple,[{ann_type,{1048,18},[{var,{1048,18},'Line'},{type,{1048,26},integer,[]}]},{ann_type,{1048,37},[{var,{1048,37},'Mod'},{type,{1048,44},module,[]}]},{ann_type,{1048,54},[{var,{1048,54},'Term'},{type,{1048,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,path_eval,2},[{file,[102,105,108,101,46,101,114,108]},{location,1089}],[<<112,97,116,104,95,101,118,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,114,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46,32,84,104,101,32,114,101,115,117,108,116,32,111,102,32,101,118,97,108,117,97,116,105,111,110,32,105,115,32,110,111,116,32,114,101,116,117,114,110,101,100,59,32,97,110,121,32,101,120,112,114,101,115,115,105,111,110,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,102,105,108,101,32,109,117,115,116,32,98,101,32,116,104,101,114,101,32,102,111,114,32,105,116,115,32,115,105,100,101,32,101,102,102,101,99,116,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,48,55,56>>,signature => [{attribute,{1089,2},spec,{{path_eval,2},[{type,{1089,16},bounded_fun,[{type,{1089,16},'fun',[{type,{1089,16},product,[{var,{1089,17},'Path'},{var,{1089,23},'Filename'}]},{type,{1089,36},union,[{type,{1089,36},tuple,[{atom,{1089,37},ok},{var,{1089,41},'FullName'}]},{type,{1089,53},tuple,[{atom,{1089,54},error},{var,{1089,61},'Reason'}]}]}]},[{type,{1090,7},constraint,[{atom,{1090,7},is_subtype},[{var,{1090,7},'Path'},{type,{1090,15},list,[{ann_type,{1090,16},[{var,{1090,16},'Dir'},{user_type,{1090,23},name_all,[]}]}]}]]},{type,{1091,7},constraint,[{atom,{1091,7},is_subtype},[{var,{1091,7},'Filename'},{user_type,{1091,19},name_all,[]}]]},{type,{1092,7},constraint,[{atom,{1092,7},is_subtype},[{var,{1092,7},'FullName'},{user_type,{1092,19},filename_all,[]}]]},{type,{1093,7},constraint,[{atom,{1093,7},is_subtype},[{var,{1093,7},'Reason'},{type,{1093,17},union,[{user_type,{1093,17},posix,[]},{atom,{1093,27},badarg},{atom,{1093,36},terminated},{atom,{1093,49},system_limit},{type,{1094,17},tuple,[{ann_type,{1094,18},[{var,{1094,18},'Line'},{type,{1094,26},integer,[]}]},{ann_type,{1094,37},[{var,{1094,37},'Mod'},{type,{1094,44},module,[]}]},{ann_type,{1094,54},[{var,{1094,54},'Term'},{type,{1094,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,path_open,3},[{file,[102,105,108,101,46,101,114,108]},{location,1194}],[<<112,97,116,104,95,111,112,101,110,47,51>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,111,112,101,110,115,32,116,104,101,32,102,105,108,101,32,105,110,32,116,104,101,32,109,111,100,101,32,100,101,116,101,114,109,105,110,101,100,32,98,121,32>>,{code,[],[<<77,111,100,101,115>>]},<<46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,73,111,68,101,118,105,99,101,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,105,110,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,109,111,100,101,46,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,102,105,108,101,32,97,110,100,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,111,112,101,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,49,50,52>>,signature => [{attribute,{1194,2},spec,{{path_open,3},[{type,{1194,16},bounded_fun,[{type,{1194,16},'fun',[{type,{1194,16},product,[{var,{1194,17},'Path'},{var,{1194,23},'Filename'},{var,{1194,33},'Modes'}]},{type,{1195,14},union,[{type,{1195,14},tuple,[{atom,{1195,15},ok},{var,{1195,19},'IoDevice'},{var,{1195,29},'FullName'}]},{type,{1195,41},tuple,[{atom,{1195,42},error},{var,{1195,49},'Reason'}]}]}]},[{type,{1196,7},constraint,[{atom,{1196,7},is_subtype},[{var,{1196,7},'Path'},{type,{1196,15},list,[{ann_type,{1196,16},[{var,{1196,16},'Dir'},{user_type,{1196,23},name_all,[]}]}]}]]},{type,{1197,7},constraint,[{atom,{1197,7},is_subtype},[{var,{1197,7},'Filename'},{user_type,{1197,19},name_all,[]}]]},{type,{1198,7},constraint,[{atom,{1198,7},is_subtype},[{var,{1198,7},'Modes'},{type,{1198,16},list,[{type,{1198,17},union,[{user_type,{1198,17},mode,[]},{atom,{1198,26},directory}]}]}]]},{type,{1199,7},constraint,[{atom,{1199,7},is_subtype},[{var,{1199,7},'IoDevice'},{user_type,{1199,19},io_device,[]}]]},{type,{1200,7},constraint,[{atom,{1200,7},is_subtype},[{var,{1200,7},'FullName'},{user_type,{1200,19},filename_all,[]}]]},{type,{1201,7},constraint,[{atom,{1201,7},is_subtype},[{var,{1201,7},'Reason'},{type,{1201,17},union,[{user_type,{1201,17},posix,[]},{atom,{1201,27},badarg},{atom,{1201,36},system_limit}]}]]}]]}]}}]}},{{function,path_script,2},[{file,[102,105,108,101,46,101,114,108]},{location,1149}],[<<112,97,116,104,95,115,99,114,105,112,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,97,114,99,104,101,115,32,116,104,101,32,112,97,116,104,32>>,{code,[],[<<80,97,116,104>>]},<<32,40,97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,115,41,32,117,110,116,105,108,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,102,111,117,110,100,46,32,73,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,102,105,108,101,110,97,109,101,44,32>>,{code,[],[<<80,97,116,104>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,110,32,114,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,86,97,108,117,101,44,32,70,117,108,108,78,97,109,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46,32>>,{code,[],[<<70,117,108,108,78,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,32,97,110,100,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,108,97,115,116,32,101,120,112,114,101,115,115,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,101,110,111,101,110,116,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111,117,110,100,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32>>,{code,[],[<<80,97,116,104>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,49,53,51>>,signature => [{attribute,{1149,2},spec,{{path_script,2},[{type,{1149,18},bounded_fun,[{type,{1149,18},'fun',[{type,{1149,18},product,[{var,{1149,19},'Path'},{var,{1149,25},'Filename'}]},{type,{1150,14},union,[{type,{1150,14},tuple,[{atom,{1150,15},ok},{var,{1150,19},'Value'},{var,{1150,26},'FullName'}]},{type,{1150,38},tuple,[{atom,{1150,39},error},{var,{1150,46},'Reason'}]}]}]},[{type,{1151,7},constraint,[{atom,{1151,7},is_subtype},[{var,{1151,7},'Path'},{type,{1151,15},list,[{ann_type,{1151,16},[{var,{1151,16},'Dir'},{user_type,{1151,23},name_all,[]}]}]}]]},{type,{1152,7},constraint,[{atom,{1152,7},is_subtype},[{var,{1152,7},'Filename'},{user_type,{1152,19},name_all,[]}]]},{type,{1153,7},constraint,[{atom,{1153,7},is_subtype},[{var,{1153,7},'Value'},{type,{1153,16},term,[]}]]},{type,{1154,7},constraint,[{atom,{1154,7},is_subtype},[{var,{1154,7},'FullName'},{user_type,{1154,19},filename_all,[]}]]},{type,{1155,7},constraint,[{atom,{1155,7},is_subtype},[{var,{1155,7},'Reason'},{type,{1155,17},union,[{user_type,{1155,17},posix,[]},{atom,{1155,27},badarg},{atom,{1155,36},terminated},{atom,{1155,49},system_limit},{type,{1156,17},tuple,[{ann_type,{1156,18},[{var,{1156,18},'Line'},{type,{1156,26},integer,[]}]},{ann_type,{1156,37},[{var,{1156,37},'Mod'},{type,{1156,44},module,[]}]},{ann_type,{1156,54},[{var,{1156,54},'Term'},{type,{1156,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,path_script,3},[{file,[102,105,108,101,46,101,114,108]},{location,1161}],[<<112,97,116,104,95,115,99,114,105,112,116,47,51>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<112,97,116,104,95,115,99,114,105,112,116,47,50>>]},<<32,98,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,32>>,{code,[],[<<66,105,110,100,105,110,103,115>>]},<<32,97,114,101,32,117,115,101,100,32,105,110,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,46,32,83,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,114,108,95,101,118,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,101,118,97,108,40,51,41>>]}]},<<32,97,98,111,117,116,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,49,57,55>>,signature => [{attribute,{1161,2},spec,{{path_script,3},[{type,{1161,18},bounded_fun,[{type,{1161,18},'fun',[{type,{1161,18},product,[{var,{1161,19},'Path'},{var,{1161,25},'Filename'},{var,{1161,35},'Bindings'}]},{type,{1162,11},union,[{type,{1162,11},tuple,[{atom,{1162,12},ok},{var,{1162,16},'Value'},{var,{1162,23},'FullName'}]},{type,{1162,35},tuple,[{atom,{1162,36},error},{var,{1162,43},'Reason'}]}]}]},[{type,{1163,7},constraint,[{atom,{1163,7},is_subtype},[{var,{1163,7},'Path'},{type,{1163,15},list,[{ann_type,{1163,16},[{var,{1163,16},'Dir'},{user_type,{1163,23},name_all,[]}]}]}]]},{type,{1164,7},constraint,[{atom,{1164,7},is_subtype},[{var,{1164,7},'Filename'},{user_type,{1164,19},name_all,[]}]]},{type,{1165,7},constraint,[{atom,{1165,7},is_subtype},[{var,{1165,7},'Bindings'},{remote_type,{1165,19},[{atom,{1165,19},erl_eval},{atom,{1165,28},binding_struct},[]]}]]},{type,{1166,7},constraint,[{atom,{1166,7},is_subtype},[{var,{1166,7},'Value'},{type,{1166,16},term,[]}]]},{type,{1167,7},constraint,[{atom,{1167,7},is_subtype},[{var,{1167,7},'FullName'},{user_type,{1167,19},filename_all,[]}]]},{type,{1168,7},constraint,[{atom,{1168,7},is_subtype},[{var,{1168,7},'Reason'},{type,{1168,17},union,[{user_type,{1168,17},posix,[]},{atom,{1168,27},badarg},{atom,{1168,36},terminated},{atom,{1168,49},system_limit},{type,{1169,17},tuple,[{ann_type,{1169,18},[{var,{1169,18},'Line'},{type,{1169,26},integer,[]}]},{ann_type,{1169,37},[{var,{1169,37},'Mod'},{type,{1169,44},module,[]}]},{ann_type,{1169,54},[{var,{1169,54},'Term'},{type,{1169,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,pid2name,1},[{file,[102,105,108,101,46,101,114,108]},{location,170}],[<<112,105,100,50,110,97,109,101,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<80,105,100>>]},<<32,105,115,32,97,110,32,73,47,79,32,100,101,118,105,99,101,44,32,116,104,97,116,32,105,115,44,32,97,32,112,105,100,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{code,[],[<<111,112,101,110,47,50>>]},<<44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,102,105,108,101,110,97,109,101,44,32,111,114,32,114,97,116,104,101,114,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,125>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,116,104,105,115,32,110,111,100,101,32,105,115,32,110,111,116,32,97,32,115,108,97,118,101,44,32,116,104,101,32,102,105,108,101,32,119,97,115,32,111,112,101,110,101,100,32,98,121,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,111,102,32,116,104,105,115,32,110,111,100,101,32,40,116,104,105,115,32,105,109,112,108,105,101,115,32,116,104,97,116,32>>,{code,[],[<<80,105,100>>]},<<32,109,117,115,116,32,98,101,32,97,32,108,111,99,97,108,32,112,105,100,41,32,97,110,100,32,116,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,99,108,111,115,101,100,46,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,105,115,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,110,32,102,108,97,116,32,115,116,114,105,110,103,32,102,111,114,109,97,116,46>>]}]},{dt,[],[{code,[],[<<117,110,100,101,102,105,110,101,100>>]}]},{dd,[],[{p,[],[<<73,110,32,97,108,108,32,111,116,104,101,114,32,99,97,115,101,115,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,105,110,116,101,110,100,101,100,32,102,111,114,32,100,101,98,117,103,103,105,110,103,32,111,110,108,121,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,50,48,55>>,signature => [{attribute,{170,2},spec,{{pid2name,1},[{type,{170,15},bounded_fun,[{type,{170,15},'fun',[{type,{170,15},product,[{var,{170,16},'Pid'}]},{type,{170,24},union,[{type,{170,24},tuple,[{atom,{170,25},ok},{var,{170,29},'Filename'}]},{atom,{170,41},undefined}]}]},[{type,{171,7},constraint,[{atom,{171,7},is_subtype},[{var,{171,7},'Filename'},{user_type,{171,19},filename_all,[]}]]},{type,{172,7},constraint,[{atom,{172,7},is_subtype},[{var,{172,7},'Pid'},{type,{172,14},pid,[]}]]}]]}]}}]}},{{function,position,2},[{file,[102,105,108,101,46,101,114,108]},{location,753}],[<<112,111,115,105,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,116,111,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,78,101,119,80,111,115,105,116,105,111,110,125>>]},<<32,40,97,115,32,97,98,115,111,108,117,116,101,32,111,102,102,115,101,116,41,32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<79,102,102,115,101,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<123,98,111,102,44,32,79,102,102,115,101,116,125>>]},<<46>>]}]},{dt,[],[{code,[],[<<123,98,111,102,44,32,79,102,102,115,101,116,125>>]}]},{dd,[],[{p,[],[<<65,98,115,111,108,117,116,101,32,111,102,102,115,101,116,46>>]}]},{dt,[],[{code,[],[<<123,99,117,114,44,32,79,102,102,115,101,116,125>>]}]},{dd,[],[{p,[],[<<79,102,102,115,101,116,32,102,114,111,109,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,101,111,102,44,32,79,102,102,115,101,116,125>>]}]},{dd,[],[{p,[],[<<79,102,102,115,101,116,32,102,114,111,109,32,116,104,101,32,101,110,100,32,111,102,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<98,111,102,32,124,32,99,117,114,32,124,32,101,111,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32,97,98,111,118,101,32,119,105,116,104,32>>,{code,[],[<<79,102,102,115,101,116>>]},<<32,48,46>>]}]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,111,102,102,115,101,116,115,32,97,114,101,32,99,111,117,110,116,101,100,32,105,110,32,98,121,116,101,115,44,32,110,111,116,32,105,110,32,99,104,97,114,97,99,116,101,114,115,46,32,73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,117,115,105,110,103,32,115,111,109,101,32,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,111,110,101,32,98,121,116,101,32,100,111,101,115,32,110,111,116,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,111,110,101,32,99,104,97,114,97,99,116,101,114,46,32,80,111,115,105,116,105,111,110,105,110,103,32,105,110,32,115,117,99,104,32,97,32,102,105,108,101,32,99,97,110,32,111,110,108,121,32,98,101,32,100,111,110,101,32,116,111,32,107,110,111,119,110,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,105,101,115,46,32,84,104,97,116,32,105,115,44,32,116,111,32,97,32,112,111,115,105,116,105,111,110,32,101,97,114,108,105,101,114,32,114,101,116,114,105,101,118,101,100,32,98,121,32,103,101,116,116,105,110,103,32,97,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,44,32,116,111,32,116,104,101,32,98,101,103,105,110,110,105,110,103,47,101,110,100,32,111,102,32,116,104,101,32,102,105,108,101,32,111,114,32,116,111,32,115,111,109,101,32,111,116,104,101,114,32,112,111,115,105,116,105,111,110,32>>,{em,[],[<<107,110,111,119,110>>]},<<32,116,111,32,98,101,32,111,110,32,97,32,99,111,114,114,101,99,116,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,32,98,121,32,115,111,109,101,32,111,116,104,101,114,32,109,101,97,110,115,32,40,116,121,112,105,99,97,108,108,121,32,98,101,121,111,110,100,32,97,32,98,121,116,101,32,111,114,100,101,114,32,109,97,114,107,32,105,110,32,116,104,101,32,102,105,108,101,44,32,119,104,105,99,104,32,104,97,115,32,97,32,107,110,111,119,110,32,98,121,116,101,45,115,105,122,101,41,46>>]},{p,[],[<<65,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,32,105,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[<<69,105,116,104,101,114,32>>,{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,105,108,108,101,103,97,108,44,32,111,114,32,105,116,32,105,115,32,101,118,97,108,117,97,116,101,100,32,116,111,32,97,32,110,101,103,97,116,105,118,101,32,111,102,102,115,101,116,32,105,110,32,116,104,101,32,102,105,108,101,46,32,78,111,116,105,99,101,32,116,104,97,116,32,105,102,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,112,111,115,105,116,105,111,110,32,105,115,32,97,32,110,101,103,97,116,105,118,101,32,118,97,108,117,101,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,110,32,101,114,114,111,114,44,32,97,110,100,32,97,102,116,101,114,32,116,104,101,32,99,97,108,108,32,116,104,101,32,102,105,108,101,32,112,111,115,105,116,105,111,110,32,105,115,32,117,110,100,101,102,105,110,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,50,51,50>>,signature => [{attribute,{753,2},spec,{{position,2},[{type,{753,15},bounded_fun,[{type,{753,15},'fun',[{type,{753,15},product,[{var,{753,16},'IoDevice'},{var,{753,26},'Location'}]},{type,{753,39},union,[{type,{753,39},tuple,[{atom,{753,40},ok},{var,{753,44},'NewPosition'}]},{type,{753,59},tuple,[{atom,{753,60},error},{var,{753,67},'Reason'}]}]}]},[{type,{754,7},constraint,[{atom,{754,7},is_subtype},[{var,{754,7},'IoDevice'},{user_type,{754,19},io_device,[]}]]},{type,{755,7},constraint,[{atom,{755,7},is_subtype},[{var,{755,7},'Location'},{user_type,{755,19},location,[]}]]},{type,{756,7},constraint,[{atom,{756,7},is_subtype},[{var,{756,7},'NewPosition'},{type,{756,22},integer,[]}]]},{type,{757,7},constraint,[{atom,{757,7},is_subtype},[{var,{757,7},'Reason'},{type,{757,17},union,[{user_type,{757,17},posix,[]},{atom,{757,27},badarg},{atom,{757,36},terminated}]}]]}]]}]}}]}},{{function,pread,2},[{file,[102,105,108,101,46,101,114,108]},{location,632}],[<<112,114,101,97,100,47,50>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32>>,{code,[],[<<112,114,101,97,100,47,51>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,91,68,97,116,97,44,32,46,46,46,93,125>>]},<<32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<44,32,119,104,101,114,101,32,101,97,99,104,32>>,{code,[],[<<68,97,116,97>>]},<<44,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32>>,{code,[],[<<112,114,101,97,100>>]},<<44,32,105,115,32,101,105,116,104,101,114,32,97,32,108,105,115,116,32,111,114,32,97,32,98,105,110,97,114,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,111,100,101,32,111,102,32,116,104,101,32,102,105,108,101,44,32,111,114,32>>,{code,[],[<<101,111,102>>]},<<32,105,102,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,112,111,115,105,116,105,111,110,32,105,115,32,98,101,121,111,110,100,32,101,110,100,32,111,102,32,102,105,108,101,46>>]},{p,[],[<<65,115,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,121,116,101,45,111,102,102,115,101,116,44,32,116,97,107,101,32,115,112,101,99,105,97,108,32,99,97,117,116,105,111,110,32,119,104,101,110,32,119,111,114,107,105,110,103,32,119,105,116,104,32,102,105,108,101,115,32,119,104,101,114,101,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,97,115,32,110,111,116,32,101,118,101,114,121,32,98,121,116,101,32,112,111,115,105,116,105,111,110,32,105,115,32,97,32,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,32,111,110,32,115,117,99,104,32,97,32,102,105,108,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,50,56,52>>,signature => [{attribute,{632,2},spec,{{pread,2},[{type,{632,12},bounded_fun,[{type,{632,12},'fun',[{type,{632,12},product,[{var,{632,13},'IoDevice'},{var,{632,23},'LocNums'}]},{type,{632,35},union,[{type,{632,35},tuple,[{atom,{632,36},ok},{var,{632,40},'DataL'}]},{atom,{632,49},eof},{type,{632,55},tuple,[{atom,{632,56},error},{var,{632,63},'Reason'}]}]}]},[{type,{633,7},constraint,[{atom,{633,7},is_subtype},[{var,{633,7},'IoDevice'},{user_type,{633,19},io_device,[]}]]},{type,{634,7},constraint,[{atom,{634,7},is_subtype},[{var,{634,7},'LocNums'},{type,{634,18},list,[{type,{634,19},tuple,[{ann_type,{634,20},[{var,{634,20},'Location'},{user_type,{634,32},location,[]}]},{ann_type,{634,44},[{var,{634,44},'Number'},{type,{634,54},non_neg_integer,[]}]}]}]}]]},{type,{635,7},constraint,[{atom,{635,7},is_subtype},[{var,{635,7},'DataL'},{type,{635,16},list,[{var,{635,17},'Data'}]}]]},{type,{636,7},constraint,[{atom,{636,7},is_subtype},[{var,{636,7},'Data'},{type,{636,15},union,[{type,{636,15},string,[]},{type,{636,26},binary,[]},{atom,{636,37},eof}]}]]},{type,{637,7},constraint,[{atom,{637,7},is_subtype},[{var,{637,7},'Reason'},{type,{637,17},union,[{user_type,{637,17},posix,[]},{atom,{637,27},badarg},{atom,{637,36},terminated}]}]]}]]}]}}]}},{{function,pread,3},[{file,[102,105,108,101,46,101,114,108]},{location,660}],[<<112,114,101,97,100,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32>>,{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]},<<32,97,110,100,32>>,{code,[],[<<114,101,97,100,47,50>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46>>]},{p,[],[{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,111,110,108,121,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,97,110,32,105,110,116,101,103,101,114,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,97,110,100,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,115,46>>]},{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,102,105,108,101,32,97,102,116,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,97,110,100,32,117,110,99,104,97,110,103,101,100,32,102,111,114,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,46>>]},{p,[],[<<65,115,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,98,121,116,101,45,111,102,102,115,101,116,44,32,116,97,107,101,32,115,112,101,99,105,97,108,32,99,97,117,116,105,111,110,32,119,104,101,110,32,119,111,114,107,105,110,103,32,119,105,116,104,32,102,105,108,101,115,32,119,104,101,114,101,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,97,115,32,110,111,116,32,101,118,101,114,121,32,98,121,116,101,32,112,111,115,105,116,105,111,110,32,105,115,32,97,32,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,32,111,110,32,115,117,99,104,32,97,32,102,105,108,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,48,50>>,signature => [{attribute,{660,2},spec,{{pread,3},[{type,{660,12},bounded_fun,[{type,{660,12},'fun',[{type,{660,12},product,[{var,{660,13},'IoDevice'},{var,{660,23},'Location'},{var,{660,33},'Number'}]},{type,{661,14},union,[{type,{661,14},tuple,[{atom,{661,15},ok},{var,{661,19},'Data'}]},{atom,{661,27},eof},{type,{661,33},tuple,[{atom,{661,34},error},{var,{661,41},'Reason'}]}]}]},[{type,{662,7},constraint,[{atom,{662,7},is_subtype},[{var,{662,7},'IoDevice'},{user_type,{662,19},io_device,[]}]]},{type,{663,7},constraint,[{atom,{663,7},is_subtype},[{var,{663,7},'Location'},{user_type,{663,19},location,[]}]]},{type,{664,7},constraint,[{atom,{664,7},is_subtype},[{var,{664,7},'Number'},{type,{664,17},non_neg_integer,[]}]]},{type,{665,7},constraint,[{atom,{665,7},is_subtype},[{var,{665,7},'Data'},{type,{665,15},union,[{type,{665,15},string,[]},{type,{665,26},binary,[]}]}]]},{type,{666,7},constraint,[{atom,{666,7},is_subtype},[{var,{666,7},'Reason'},{type,{666,17},union,[{user_type,{666,17},posix,[]},{atom,{666,27},badarg},{atom,{666,36},terminated}]}]]}]]}]}}]}},{{function,pwrite,2},[{file,[102,105,108,101,46,101,114,108]},{location,693}],[<<112,119,114,105,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<80,101,114,102,111,114,109,115,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32>>,{code,[],[<<112,119,114,105,116,101,47,51>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,123,78,44,32,82,101,97,115,111,110,125,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<78>>]},<<32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,115,117,99,99,101,115,115,102,117,108,32,119,114,105,116,101,115,32,100,111,110,101,32,98,101,102,111,114,101,32,116,104,101,32,102,97,105,108,117,114,101,46>>]},{p,[],[<<87,104,101,110,32,112,111,115,105,116,105,111,110,105,110,103,32,105,110,32,97,32,102,105,108,101,32,119,105,116,104,32,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,99,97,117,116,105,111,110,32,109,117,115,116,32,98,101,32,116,97,107,101,110,32,116,111,32,115,101,116,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,110,32,97,32,99,111,114,114,101,99,116,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,46,32,70,111,114,32,100,101,116,97,105,108,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,112,111,115,105,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,49,57>>,signature => [{attribute,{693,2},spec,{{pwrite,2},[{type,{693,13},bounded_fun,[{type,{693,13},'fun',[{type,{693,13},product,[{var,{693,14},'IoDevice'},{var,{693,24},'LocBytes'}]},{type,{693,37},union,[{atom,{693,37},ok},{type,{693,42},tuple,[{atom,{693,43},error},{type,{693,50},tuple,[{var,{693,51},'N'},{var,{693,54},'Reason'}]}]}]}]},[{type,{694,7},constraint,[{atom,{694,7},is_subtype},[{var,{694,7},'IoDevice'},{user_type,{694,19},io_device,[]}]]},{type,{695,7},constraint,[{atom,{695,7},is_subtype},[{var,{695,7},'LocBytes'},{type,{695,19},list,[{type,{695,20},tuple,[{ann_type,{695,21},[{var,{695,21},'Location'},{user_type,{695,33},location,[]}]},{ann_type,{695,45},[{var,{695,45},'Bytes'},{type,{695,54},iodata,[]}]}]}]}]]},{type,{696,7},constraint,[{atom,{696,7},is_subtype},[{var,{696,7},'N'},{type,{696,12},non_neg_integer,[]}]]},{type,{697,7},constraint,[{atom,{697,7},is_subtype},[{var,{697,7},'Reason'},{type,{697,17},union,[{user_type,{697,17},posix,[]},{atom,{697,27},badarg},{atom,{697,36},terminated}]}]]}]]}]}}]}},{{function,pwrite,3},[{file,[102,105,108,101,46,101,114,108]},{location,718}],[<<112,119,114,105,116,101,47,51>>],#{<<101,110>> => [{p,[],[<<67,111,109,98,105,110,101,115,32>>,{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]},<<32,97,110,100,32>>,{code,[],[<<119,114,105,116,101,47,50>>]},<<32,105,110,32,111,110,101,32,111,112,101,114,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,97,108,108,105,110,103,32,116,104,101,109,32,111,110,101,32,97,116,32,97,32,116,105,109,101,46>>]},{p,[],[{code,[],[<<76,111,99,97,116,105,111,110>>]},<<32,105,115,32,111,110,108,121,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,97,110,32,105,110,116,101,103,101,114,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,97,110,100,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,115,46>>]},{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,102,105,108,101,32,97,102,116,101,114,32,116,104,101,32,111,112,101,114,97,116,105,111,110,32,105,115,32,117,110,100,101,102,105,110,101,100,32,102,111,114,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,97,110,100,32,117,110,99,104,97,110,103,101,100,32,102,111,114,32>>,{code,[],[<<114,97,109>>]},<<32,109,111,100,101,46>>]},{p,[],[<<87,104,101,110,32,112,111,115,105,116,105,111,110,105,110,103,32,105,110,32,97,32,102,105,108,101,32,119,105,116,104,32,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,99,97,117,116,105,111,110,32,109,117,115,116,32,98,101,32,116,97,107,101,110,32,116,111,32,115,101,116,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,110,32,97,32,99,111,114,114,101,99,116,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,46,32,70,111,114,32,100,101,116,97,105,108,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,112,111,115,105,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,111,115,105,116,105,111,110,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,51,52>>,signature => [{attribute,{718,2},spec,{{pwrite,3},[{type,{718,13},bounded_fun,[{type,{718,13},'fun',[{type,{718,13},product,[{var,{718,14},'IoDevice'},{var,{718,24},'Location'},{var,{718,34},'Bytes'}]},{type,{718,44},union,[{atom,{718,44},ok},{type,{718,49},tuple,[{atom,{718,50},error},{var,{718,57},'Reason'}]}]}]},[{type,{719,7},constraint,[{atom,{719,7},is_subtype},[{var,{719,7},'IoDevice'},{user_type,{719,19},io_device,[]}]]},{type,{720,7},constraint,[{atom,{720,7},is_subtype},[{var,{720,7},'Location'},{user_type,{720,19},location,[]}]]},{type,{721,7},constraint,[{atom,{721,7},is_subtype},[{var,{721,7},'Bytes'},{type,{721,16},iodata,[]}]]},{type,{722,7},constraint,[{atom,{722,7},is_subtype},[{var,{722,7},'Reason'},{type,{722,17},union,[{user_type,{722,17},posix,[]},{atom,{722,27},badarg},{atom,{722,36},terminated}]}]]}]]}]}}]}},{{function,read,2},[{file,[102,105,108,101,46,101,114,108]},{location,590}],[<<114,101,97,100,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,98,121,116,101,115,47,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,84,104,101,32,102,117,110,99,116,105,111,110,115,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<44,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,112,114,101,97,100,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,101,97,100,47,51>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]}]},<<32,97,114,101,32,116,104,101,32,111,110,108,121,32,119,97,121,115,32,116,111,32,114,101,97,100,32,102,114,111,109,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,40,97,108,116,104,111,117,103,104,32,116,104,101,121,32,119,111,114,107,32,102,111,114,32,110,111,114,109,97,108,108,121,32,111,112,101,110,101,100,32,102,105,108,101,115,44,32,116,111,111,41,46>>]},{p,[],[<<70,111,114,32,102,105,108,101,115,32,119,104,101,114,101,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,111,110,101,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,121,116,101,32,111,110,32,116,104,101,32,102,105,108,101,46,32,84,104,101,32,112,97,114,97,109,101,116,101,114,32>>,{code,[],[<<78,117,109,98,101,114>>]},<<32,97,108,119,97,121,115,32,100,101,110,111,116,101,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32>>,{em,[],[<<99,104,97,114,97,99,116,101,114,115>>]},<<32,114,101,97,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,44,32,119,104,105,108,101,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,102,105,108,101,32,99,97,110,32,98,101,32,109,111,118,101,100,32,109,117,99,104,32,109,111,114,101,32,116,104,97,110,32,116,104,105,115,32,110,117,109,98,101,114,32,119,104,101,110,32,114,101,97,100,105,110,103,32,97,32,85,110,105,99,111,100,101,32,102,105,108,101,46>>]},{p,[],[<<65,108,115,111,44,32,105,102,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,116,104,101,32>>,{code,[],[<<114,101,97,100,47,51>>]},<<32,99,97,108,108,32,102,97,105,108,115,32,105,102,32,116,104,101,32,100,97,116,97,32,99,111,110,116,97,105,110,115,32,99,104,97,114,97,99,116,101,114,115,32,108,97,114,103,101,114,32,116,104,97,110,32,50,53,53,44,32,119,104,105,99,104,32,105,115,32,119,104,121,32,109,111,100,117,108,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,105,115,32,116,111,32,98,101,32,112,114,101,102,101,114,114,101,100,32,119,104,101,110,32,114,101,97,100,105,110,103,32,115,117,99,104,32,97,32,102,105,108,101,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,68,97,116,97,125>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,119,97,115,32,111,112,101,110,101,100,32,105,110,32,98,105,110,97,114,121,32,109,111,100,101,44,32,116,104,101,32,114,101,97,100,32,98,121,116,101,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,105,110,32,97,32,98,105,110,97,114,121,44,32,111,116,104,101,114,119,105,115,101,32,105,110,32,97,32,108,105,115,116,46,32,84,104,101,32,108,105,115,116,32,111,114,32,98,105,110,97,114,121,32,105,115,32,115,104,111,114,116,101,114,32,116,104,97,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,114,101,113,117,101,115,116,101,100,32,105,102,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,114,101,97,99,104,101,100,46>>]}]},{dt,[],[{code,[],[<<101,111,102>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,101,100,32,105,102,32>>,{code,[],[<<78,117,109,98,101,114,62,48>>]},<<32,97,110,100,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,114,101,97,99,104,101,100,32,98,101,102,111,114,101,32,97,110,121,116,104,105,110,103,32,97,116,32,97,108,108,32,99,111,117,108,100,32,98,101,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,98,97,100,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,102,111,114,32,114,101,97,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,110,111,95,116,114,97,110,115,108,97,116,105,111,110,44,32,117,110,105,99,111,100,101,44,32,108,97,116,105,110,49,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,97,110,100,32,116,104,101,32,100,97,116,97,32,105,110,32,116,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,116,104,101,32,98,121,116,101,45,111,114,105,101,110,116,101,100,32,100,97,116,97,32,116,104,97,116,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,51,53,49>>,signature => [{attribute,{590,2},spec,{{read,2},[{type,{590,11},bounded_fun,[{type,{590,11},'fun',[{type,{590,11},product,[{var,{590,12},'IoDevice'},{var,{590,22},'Number'}]},{type,{590,33},union,[{type,{590,33},tuple,[{atom,{590,34},ok},{var,{590,38},'Data'}]},{atom,{590,46},eof},{type,{590,52},tuple,[{atom,{590,53},error},{var,{590,60},'Reason'}]}]}]},[{type,{591,7},constraint,[{atom,{591,7},is_subtype},[{var,{591,7},'IoDevice'},{type,{591,19},union,[{user_type,{591,19},io_device,[]},{type,{591,33},atom,[]}]}]]},{type,{592,7},constraint,[{atom,{592,7},is_subtype},[{var,{592,7},'Number'},{type,{592,17},non_neg_integer,[]}]]},{type,{593,7},constraint,[{atom,{593,7},is_subtype},[{var,{593,7},'Data'},{type,{593,15},union,[{type,{593,15},string,[]},{type,{593,26},binary,[]}]}]]},{type,{594,7},constraint,[{atom,{594,7},is_subtype},[{var,{594,7},'Reason'},{type,{594,17},union,[{user_type,{594,17},posix,[]},{atom,{595,17},badarg},{atom,{596,17},terminated},{type,{597,17},tuple,[{atom,{597,18},no_translation},{atom,{597,34},unicode},{atom,{597,43},latin1}]}]}]]}]]}]}}]}},{{function,read_file,1},[{file,[102,105,108,101,46,101,114,108]},{location,419}],[<<114,101,97,100,95,102,105,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,105,110,97,114,121,125>>]},<<44,32,119,104,101,114,101,32>>,{code,[],[<<66,105,110,97,114,121>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,100,97,116,97,32,111,98,106,101,99,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,105,102,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,114,101,97,100,105,110,103,32,116,104,101,32,102,105,108,101,44,32,111,114,32,102,111,114,32,115,101,97,114,99,104,105,110,103,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,97,109,101,100,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,110,111,109,101,109>>]}]},{dd,[],[{p,[],[<<84,104,101,114,101,32,105,115,32,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,52,48,53>>,signature => [{attribute,{419,2},spec,{{read_file,1},[{type,{419,16},bounded_fun,[{type,{419,16},'fun',[{type,{419,16},product,[{var,{419,17},'Filename'}]},{type,{419,30},union,[{type,{419,30},tuple,[{atom,{419,31},ok},{var,{419,35},'Binary'}]},{type,{419,45},tuple,[{atom,{419,46},error},{var,{419,53},'Reason'}]}]}]},[{type,{420,7},constraint,[{atom,{420,7},is_subtype},[{var,{420,7},'Filename'},{user_type,{420,19},name_all,[]}]]},{type,{421,7},constraint,[{atom,{421,7},is_subtype},[{var,{421,7},'Binary'},{type,{421,17},binary,[]}]]},{type,{422,7},constraint,[{atom,{422,7},is_subtype},[{var,{422,7},'Reason'},{type,{422,17},union,[{user_type,{422,17},posix,[]},{atom,{422,27},badarg},{atom,{422,36},terminated},{atom,{422,49},system_limit}]}]]}]]}]}}]}},{{function,read_file_info,2},[{file,[102,105,108,101,46,101,114,108]},{location,294}],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,52,52,49>>,equiv => {function,read_file_info,1},signature => [{attribute,{294,2},spec,{{read_file_info,2},[{type,{294,21},bounded_fun,[{type,{294,21},'fun',[{type,{294,21},product,[{var,{294,22},'File'},{var,{294,28},'Opts'}]},{type,{294,37},union,[{type,{294,37},tuple,[{atom,{294,38},ok},{var,{294,42},'FileInfo'}]},{type,{294,54},tuple,[{atom,{294,55},error},{var,{294,62},'Reason'}]}]}]},[{type,{295,7},constraint,[{atom,{295,7},is_subtype},[{var,{295,7},'File'},{type,{295,15},union,[{user_type,{295,15},name_all,[]},{user_type,{295,28},io_device,[]}]}]]},{type,{296,7},constraint,[{atom,{296,7},is_subtype},[{var,{296,7},'Opts'},{type,{296,15},list,[{user_type,{296,16},file_info_option,[]}]}]]},{type,{297,7},constraint,[{atom,{297,7},is_subtype},[{var,{297,7},'FileInfo'},{user_type,{297,19},file_info,[]}]]},{type,{298,7},constraint,[{atom,{298,7},is_subtype},[{var,{298,7},'Reason'},{type,{298,17},union,[{user_type,{298,17},posix,[]},{atom,{298,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,read_file_info,1},[{file,[102,105,108,101,46,101,114,108]},{location,282}],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,114,105,101,118,101,115,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,97,32,102,105,108,101,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,73,110,102,111,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,73,110,102,111>>]},<<32,105,115,32,97,32,114,101,99,111,114,100,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<44,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,75,101,114,110,101,108,32,105,110,99,108,117,100,101,32,102,105,108,101,32>>,{code,[],[<<102,105,108,101,46,104,114,108>>]},<<46,32,73,110,99,108,117,100,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,114,101,99,116,105,118,101,32,105,110,32,116,104,101,32,109,111,100,117,108,101,32,102,114,111,109,32,119,104,105,99,104,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<32,45,105,110,99,108,117,100,101,95,108,105,98,40,34,107,101,114,110,101,108,47,105,110,99,108,117,100,101,47,102,105,108,101,46,104,114,108,34,41,46>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,116,121,112,101,32,114,101,116,117,114,110,101,100,32,105,110,32>>,{code,[],[<<97,116,105,109,101>>]},<<44,32>>,{code,[],[<<109,116,105,109,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<99,116,105,109,101>>]},<<32,105,115,32,100,101,112,101,110,100,101,110,116,32,111,110,32,116,104,101,32,116,105,109,101,32,116,121,112,101,32,115,101,116,32,105,110,32>>,{code,[],[<<79,112,116,115,32,58,58,32,123,116,105,109,101,44,32,84,121,112,101,125>>]},<<32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,111,99,97,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,108,111,99,97,108,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<117,110,105,118,101,114,115,97,108>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,117,110,105,118,101,114,115,97,108,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<112,111,115,105,120>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,115,101,99,111,110,100,115,32,115,105,110,99,101,32,111,114,32,98,101,102,111,114,101,32,85,110,105,120,32,116,105,109,101,32,101,112,111,99,104,44,32,119,104,105,99,104,32,105,115,32,49,57,55,48,45,48,49,45,48,49,32,48,48,58,48,48,32,85,84,67,46>>]}]}]},{p,[],[<<68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<123,116,105,109,101,44,32,108,111,99,97,108,125>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,97,110,100,32,111,110,108,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,108,111,99,97,108,32,102,105,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46,32,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,119,105,108,108,32,98,114,101,97,107,32,116,104,105,115,32,109,111,100,117,108,101,39,115,32,97,116,111,109,105,99,105,116,121,32,103,117,97,114,97,110,116,101,101,115,32,97,115,32,105,116,32,99,97,110,32,114,97,99,101,32,119,105,116,104,32,97,32,99,111,110,99,117,114,114,101,110,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,49,44,50>>]},<<32>>]},<<46>>]},{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,104,97,115,32,110,111,32,101,102,102,101,99,116,32,119,104,101,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,103,105,118,101,110,32,97,110,32,73,47,79,32,100,101,118,105,99,101,32,105,110,115,116,101,97,100,32,111,102,32,97,32,102,105,108,101,32,110,97,109,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<32,119,105,116,104,32,116,104,101,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,116,111,32,111,98,116,97,105,110,32,97,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,102,105,114,115,116,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<65,115,32,102,105,108,101,32,116,105,109,101,115,32,97,114,101,32,115,116,111,114,101,100,32,105,110,32,80,79,83,73,88,32,116,105,109,101,32,111,110,32,109,111,115,116,32,79,83,44,32,105,116,32,105,115,32,102,97,115,116,101,114,32,116,111,32,113,117,101,114,121,32,102,105,108,101,32,105,110,102,111,114,109,97,116,105,111,110,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<112,111,115,105,120>>]},<<46>>]}]},{p,[],[<<84,104,101,32,114,101,99,111,114,100,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,101,108,100,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<115,105,122,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<83,105,122,101,32,111,102,32,102,105,108,101,32,105,110,32,98,121,116,101,115,46>>]}]},{dt,[],[{code,[],[<<116,121,112,101,32,61,32,100,101,118,105,99,101,32,124,32,100,105,114,101,99,116,111,114,121,32,124,32,111,116,104,101,114,32,124,32,114,101,103,117,108,97,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,102,105,108,101,46,32,67,97,110,32,97,108,115,111,32,99,111,110,116,97,105,110,32>>,{code,[],[<<115,121,109,108,105,110,107>>]},<<32,119,104,101,110,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,108,105,110,107,95,105,110,102,111,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[<<114,101,97,100,95,108,105,110,107,95,105,110,102,111,47,49,44,50>>]},<<46>>]}]},{dt,[],[{code,[],[<<97,99,99,101,115,115,32,61,32,114,101,97,100,32,124,32,119,114,105,116,101,32,124,32,114,101,97,100,95,119,114,105,116,101,32,124,32,110,111,110,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,99,117,114,114,101,110,116,32,115,121,115,116,101,109,32,97,99,99,101,115,115,32,116,111,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<97,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<109,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,119,114,105,116,116,101,110,46>>]}]},{dt,[],[{code,[],[<<99,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,111,102,32,116,104,105,115,32,116,105,109,101,32,102,105,101,108,100,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,46,32,79,110,32,85,110,105,120,44,32,105,116,32,105,115,32,116,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,111,114,32,116,104,101,32>>,{code,[],[<<105,110,111,100,101>>]},<<32,119,97,115,32,99,104,97,110,103,101,100,46,32,73,110,32,87,105,110,100,111,119,115,44,32,105,116,32,105,115,32,116,104,101,32,99,114,101,97,116,101,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<109,111,100,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,112,101,114,109,105,115,115,105,111,110,115,32,97,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,98,105,116,32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<56,35,48,48,52,48,48>>]}]},{dd,[],[{p,[],[<<114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,50,48,48>>]}]},{dd,[],[{p,[],[<<119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,49,48,48>>]}]},{dd,[],[{p,[],[<<101,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,52,48>>]}]},{dd,[],[{p,[],[<<114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,50,48>>]}]},{dd,[],[{p,[],[<<119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,49,48>>]}]},{dd,[],[{p,[],[<<101,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,52>>]}]},{dd,[],[{p,[],[<<114,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,50>>]}]},{dd,[],[{p,[],[<<119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,49>>]}]},{dd,[],[{p,[],[<<101,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<49,54,35,56,48,48>>]}]},{dd,[],[{p,[],[<<115,101,116,32,117,115,101,114,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]},{dt,[],[{code,[],[<<49,54,35,52,48,48>>]}]},{dd,[],[{p,[],[<<115,101,116,32,103,114,111,117,112,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]}]},{p,[],[<<79,110,32,85,110,105,120,32,112,108,97,116,102,111,114,109,115,44,32,111,116,104,101,114,32,98,105,116,115,32,116,104,97,110,32,116,104,111,115,101,32,108,105,115,116,101,100,32,97,98,111,118,101,32,109,97,121,32,98,101,32,115,101,116,46>>]}]},{dt,[],[{code,[],[<<108,105,110,107,115,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<78,117,109,98,101,114,32,111,102,32,108,105,110,107,115,32,116,111,32,116,104,101,32,102,105,108,101,32,40,116,104,105,115,32,105,115,32,97,108,119,97,121,115,32,49,32,102,111,114,32,102,105,108,101,32,115,121,115,116,101,109,115,32,116,104,97,116,32,104,97,118,101,32,110,111,32,99,111,110,99,101,112,116,32,111,102,32,108,105,110,107,115,41,46>>]}]},{dt,[],[{code,[],[<<109,97,106,111,114,95,100,101,118,105,99,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<73,100,101,110,116,105,102,105,101,115,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,119,104,101,114,101,32,116,104,101,32,102,105,108,101,32,105,115,32,108,111,99,97,116,101,100,46,32,73,110,32,87,105,110,100,111,119,115,44,32,116,104,101,32,110,117,109,98,101,114,32,105,110,100,105,99,97,116,101,115,32,97,32,100,114,105,118,101,32,97,115,32,102,111,108,108,111,119,115,58,32,48,32,109,101,97,110,115,32,65,58,44,32,49,32,109,101,97,110,115,32,66,58,44,32,97,110,100,32,115,111,32,111,110,46>>]}]},{dt,[],[{code,[],[<<109,105,110,111,114,95,100,101,118,105,99,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,118,97,108,105,100,32,102,111,114,32,99,104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,32,111,110,32,85,110,105,120,46,32,73,110,32,97,108,108,32,111,116,104,101,114,32,99,97,115,101,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]},{dt,[],[{code,[],[<<105,110,111,100,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,116,104,101,32>>,{code,[],[<<105,110,111,100,101>>]},<<32,110,117,109,98,101,114,46,32,79,110,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]},{dt,[],[{code,[],[<<117,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<73,110,100,105,99,97,116,101,115,32,116,104,101,32,111,119,110,101,114,32,111,102,32,116,104,101,32,102,105,108,101,46,32,79,110,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]},{dt,[],[{code,[],[<<103,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,116,104,101,32,103,114,111,117,112,32,116,104,97,116,32,116,104,101,32,111,119,110,101,114,32,111,102,32,116,104,101,32,102,105,108,101,32,98,101,108,111,110,103,115,32,116,111,46,32,79,110,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,122,101,114,111,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,52,52,49>>,signature => [{attribute,{282,2},spec,{{read_file_info,1},[{type,{282,21},bounded_fun,[{type,{282,21},'fun',[{type,{282,21},product,[{var,{282,22},'File'}]},{type,{282,31},union,[{type,{282,31},tuple,[{atom,{282,32},ok},{var,{282,36},'FileInfo'}]},{type,{282,48},tuple,[{atom,{282,49},error},{var,{282,56},'Reason'}]}]}]},[{type,{283,7},constraint,[{atom,{283,7},is_subtype},[{var,{283,7},'File'},{type,{283,15},union,[{user_type,{283,15},name_all,[]},{user_type,{283,28},io_device,[]}]}]]},{type,{284,7},constraint,[{atom,{284,7},is_subtype},[{var,{284,7},'FileInfo'},{user_type,{284,19},file_info,[]}]]},{type,{285,7},constraint,[{atom,{285,7},is_subtype},[{var,{285,7},'Reason'},{type,{285,17},union,[{user_type,{285,17},posix,[]},{atom,{285,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,read_line,1},[{file,[102,105,108,101,46,101,114,108]},{location,612}],[<<114,101,97,100,95,108,105,110,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,97,32,108,105,110,101,32,111,102,32,98,121,116,101,115,47,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,76,105,110,101,115,32,97,114,101,32,100,101,102,105,110,101,100,32,116,111,32,98,101,32,100,101,108,105,109,105,116,101,100,32,98,121,32,116,104,101,32,108,105,110,101,102,101,101,100,32,40,76,70,44,32>>,{code,[],[<<92,110>>]},<<41,32,99,104,97,114,97,99,116,101,114,44,32,98,117,116,32,97,110,121,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,40,67,82,44,32>>,{code,[],[<<92,114>>]},<<41,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,101,119,108,105,110,101,32,105,115,32,97,108,115,111,32,116,114,101,97,116,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,76,70,32,99,104,97,114,97,99,116,101,114,32,40,116,104,101,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,105,115,32,115,105,108,101,110,116,108,121,32,105,103,110,111,114,101,100,41,46,32,84,104,101,32,108,105,110,101,32,105,115,32,114,101,116,117,114,110,101,100,32>>,{em,[],[<<105,110,99,108,117,100,105,110,103>>]},<<32,116,104,101,32,76,70,44,32,98,117,116,32,101,120,99,108,117,100,105,110,103,32,97,110,121,32,67,82,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,76,70,46,32,84,104,105,115,32,98,101,104,97,118,105,111,117,114,32,105,115,32,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,116,104,101,32,98,101,104,97,118,105,111,117,114,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111,35,103,101,116,95,108,105,110,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,111,58,103,101,116,95,108,105,110,101,47,50>>]}]},<<46,32,73,102,32,101,110,100,32,111,102,32,102,105,108,101,32,105,115,32,114,101,97,99,104,101,100,32,119,105,116,104,111,117,116,32,97,110,121,32,76,70,32,101,110,100,105,110,103,32,116,104,101,32,108,97,115,116,32,108,105,110,101,44,32,97,32,108,105,110,101,32,119,105,116,104,32,110,111,32,116,114,97,105,108,105,110,103,32,76,70,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,117,115,101,100,32,111,110,32,102,105,108,101,115,32,111,112,101,110,101,100,32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,46,32,72,111,119,101,118,101,114,44,32,105,116,32,105,115,32,105,110,101,102,102,105,99,105,101,110,116,32,116,111,32,117,115,101,32,105,116,32,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,102,105,108,101,115,32,105,102,32,116,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,115,112,101,99,105,102,105,101,100,46,32,84,104,117,115,44,32,99,111,109,98,105,110,105,110,103,32>>,{code,[],[<<114,97,119>>]},<<32,97,110,100,32>>,{code,[],[<<123,114,101,97,100,95,97,104,101,97,100,44,32,83,105,122,101,125>>]},<<32,105,115,32,104,105,103,104,108,121,32,114,101,99,111,109,109,101,110,100,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,97,32,116,101,120,116,32,102,105,108,101,32,102,111,114,32,114,97,119,32,108,105,110,101,45,111,114,105,101,110,116,101,100,32,114,101,97,100,105,110,103,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,105,115,32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,116,104,101,32>>,{code,[],[<<114,101,97,100,95,108,105,110,101,47,49>>]},<<32,99,97,108,108,32,102,97,105,108,115,32,105,102,32,116,104,101,32,100,97,116,97,32,99,111,110,116,97,105,110,115,32,99,104,97,114,97,99,116,101,114,115,32,108,97,114,103,101,114,32,116,104,97,110,32,50,53,53,44,32,119,104,121,32,109,111,100,117,108,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,105,111>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<105,111,40,51,41>>]}]},<<32,105,115,32,116,111,32,98,101,32,112,114,101,102,101,114,114,101,100,32,119,104,101,110,32,114,101,97,100,105,110,103,32,115,117,99,104,32,97,32,102,105,108,101,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,68,97,116,97,125>>]}]},{dd,[],[{p,[],[<<79,110,101,32,108,105,110,101,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,105,115,32,114,101,116,117,114,110,101,100,44,32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,116,114,97,105,108,105,110,103,32,76,70,44,32,98,117,116,32,119,105,116,104,32,67,82,76,70,32,115,101,113,117,101,110,99,101,115,32,114,101,112,108,97,99,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,76,70,32,40,115,101,101,32,97,98,111,118,101,41,46>>]},{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,105,110,32,98,105,110,97,114,121,32,109,111,100,101,44,32,116,104,101,32,114,101,97,100,32,98,121,116,101,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,105,110,32,97,32,98,105,110,97,114,121,44,32,111,116,104,101,114,119,105,115,101,32,105,110,32,97,32,108,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,111,102>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,101,100,32,105,102,32,101,110,100,32,111,102,32,102,105,108,101,32,119,97,115,32,114,101,97,99,104,101,100,32,98,101,102,111,114,101,32,97,110,121,116,104,105,110,103,32,97,116,32,97,108,108,32,99,111,117,108,100,32,98,101,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,98,97,100,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,102,111,114,32,114,101,97,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<123,110,111,95,116,114,97,110,115,108,97,116,105,111,110,44,32,117,110,105,99,111,100,101,44,32,108,97,116,105,110,49,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32,97,110,111,116,104,101,114,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<32,97,110,100,32,116,104,101,32,100,97,116,97,32,111,110,32,116,104,101,32,102,105,108,101,32,99,97,110,110,111,116,32,98,101,32,116,114,97,110,115,108,97,116,101,100,32,116,111,32,116,104,101,32,98,121,116,101,45,111,114,105,101,110,116,101,100,32,100,97,116,97,32,116,104,97,116,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,54,48,49>>,signature => [{attribute,{612,2},spec,{{read_line,1},[{type,{612,16},bounded_fun,[{type,{612,16},'fun',[{type,{612,16},product,[{var,{612,17},'IoDevice'}]},{type,{612,30},union,[{type,{612,30},tuple,[{atom,{612,31},ok},{var,{612,35},'Data'}]},{atom,{612,43},eof},{type,{612,49},tuple,[{atom,{612,50},error},{var,{612,57},'Reason'}]}]}]},[{type,{613,7},constraint,[{atom,{613,7},is_subtype},[{var,{613,7},'IoDevice'},{type,{613,19},union,[{user_type,{613,19},io_device,[]},{type,{613,33},atom,[]}]}]]},{type,{614,7},constraint,[{atom,{614,7},is_subtype},[{var,{614,7},'Data'},{type,{614,15},union,[{type,{614,15},string,[]},{type,{614,26},binary,[]}]}]]},{type,{615,7},constraint,[{atom,{615,7},is_subtype},[{var,{615,7},'Reason'},{type,{615,17},union,[{user_type,{615,17},posix,[]},{atom,{616,17},badarg},{atom,{617,17},terminated},{type,{618,17},tuple,[{atom,{618,18},no_translation},{atom,{618,34},unicode},{atom,{618,43},latin1}]}]}]]}]]}]}}]}},{{function,read_link,1},[{file,[102,105,108,101,46,101,114,108]},{location,356}],[<<114,101,97,100,95,108,105,110,107,47,49>>],#{<<101,110>> => [{p,[],[{a,[{id,<<114,101,97,100,95,108,105,110,107,95,97,108,108>>}],[]},<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,125>>]},<<32,105,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,114,97,119,32,102,105,108,101,110,97,109,101,44,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,111,116,104,101,114,119,105,115,101,46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,100,111,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<123,101,114,114,111,114,44,101,110,111,116,115,117,112,125>>]},<<46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<78,97,109,101>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32,111,114,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,102,105,108,101,32,116,104,97,116,32,105,116,32,114,101,102,101,114,115,32,116,111,32,100,111,101,115,32,110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,116,104,101,32,101,120,112,101,99,116,101,100,32,101,110,99,111,100,105,110,103,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,54,53,56>>,signature => [{attribute,{356,2},spec,{{read_link,1},[{type,{356,16},bounded_fun,[{type,{356,16},'fun',[{type,{356,16},product,[{var,{356,17},'Name'}]},{type,{356,26},union,[{type,{356,26},tuple,[{atom,{356,27},ok},{var,{356,31},'Filename'}]},{type,{356,43},tuple,[{atom,{356,44},error},{var,{356,51},'Reason'}]}]}]},[{type,{357,7},constraint,[{atom,{357,7},is_subtype},[{var,{357,7},'Name'},{user_type,{357,15},name_all,[]}]]},{type,{358,7},constraint,[{atom,{358,7},is_subtype},[{var,{358,7},'Filename'},{user_type,{358,19},filename,[]}]]},{type,{359,7},constraint,[{atom,{359,7},is_subtype},[{var,{359,7},'Reason'},{type,{359,17},union,[{user_type,{359,17},posix,[]},{atom,{359,27},badarg}]}]]}]]}]}}]}},{{function,read_link_all,1},[{file,[102,105,108,101,46,101,114,108]},{location,364}],[<<114,101,97,100,95,108,105,110,107,95,97,108,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,70,105,108,101,110,97,109,101,125>>]},<<32,105,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,114,101,102,101,114,115,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,32,111,114,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,111,116,104,101,114,119,105,115,101,46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,100,111,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32>>,{code,[],[<<123,101,114,114,111,114,44,101,110,111,116,115,117,112,125>>]},<<46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,101,105,116,104,101,114,32,97,32,108,105,115,116,32,111,114,32,97,32,98,105,110,97,114,121,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<78,97,109,101>>]},<<32,100,111,101,115,32,110,111,116,32,114,101,102,101,114,32,116,111,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,115,117,112>>]}]},{dd,[],[{p,[],[<<83,121,109,98,111,108,105,99,32,108,105,110,107,115,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,116,104,105,115,32,112,108,97,116,102,111,114,109,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,54,56,56>>,signature => [{attribute,{364,2},spec,{{read_link_all,1},[{type,{364,20},bounded_fun,[{type,{364,20},'fun',[{type,{364,20},product,[{var,{364,21},'Name'}]},{type,{364,30},union,[{type,{364,30},tuple,[{atom,{364,31},ok},{var,{364,35},'Filename'}]},{type,{364,47},tuple,[{atom,{364,48},error},{var,{364,55},'Reason'}]}]}]},[{type,{365,7},constraint,[{atom,{365,7},is_subtype},[{var,{365,7},'Name'},{user_type,{365,15},name_all,[]}]]},{type,{366,7},constraint,[{atom,{366,7},is_subtype},[{var,{366,7},'Filename'},{user_type,{366,19},filename_all,[]}]]},{type,{367,7},constraint,[{atom,{367,7},is_subtype},[{var,{367,7},'Reason'},{type,{367,17},union,[{user_type,{367,17},posix,[]},{atom,{367,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,54,66>>}},{{function,read_link_info,2},[{file,[102,105,108,101,46,101,114,108]},{location,334}],[<<114,101,97,100,95,108,105,110,107,95,105,110,102,111,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,55,49,54>>,equiv => {function,read_link_info,1},signature => [{attribute,{334,2},spec,{{read_link_info,2},[{type,{334,21},bounded_fun,[{type,{334,21},'fun',[{type,{334,21},product,[{var,{334,22},'Name'},{var,{334,28},'Opts'}]},{type,{334,37},union,[{type,{334,37},tuple,[{atom,{334,38},ok},{var,{334,42},'FileInfo'}]},{type,{334,54},tuple,[{atom,{334,55},error},{var,{334,62},'Reason'}]}]}]},[{type,{335,7},constraint,[{atom,{335,7},is_subtype},[{var,{335,7},'Name'},{user_type,{335,15},name_all,[]}]]},{type,{336,7},constraint,[{atom,{336,7},is_subtype},[{var,{336,7},'Opts'},{type,{336,15},list,[{user_type,{336,16},file_info_option,[]}]}]]},{type,{337,7},constraint,[{atom,{337,7},is_subtype},[{var,{337,7},'FileInfo'},{user_type,{337,19},file_info,[]}]]},{type,{338,7},constraint,[{atom,{338,7},is_subtype},[{var,{338,7},'Reason'},{type,{338,17},union,[{user_type,{338,17},posix,[]},{atom,{338,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,read_link_info,1},[{file,[102,105,108,101,46,101,114,108]},{location,326}],[<<114,101,97,100,95,108,105,110,107,95,105,110,102,111,47,49>>],#{<<101,110>> => [{p,[],[<<87,111,114,107,115,32,108,105,107,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49,44,50>>]}]},<<32,101,120,99,101,112,116,32,116,104,97,116,32,105,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,44,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,108,105,110,107,32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,32,116,104,101,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<32,114,101,99,111,114,100,32,97,110,100,32,116,104,101,32>>,{code,[],[<<116,121,112,101>>]},<<32,102,105,101,108,100,32,111,102,32,116,104,101,32,114,101,99,111,114,100,32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<115,121,109,108,105,110,107>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,97,110,100,32,111,110,108,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,108,111,99,97,108,32,102,105,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46,32,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,119,105,108,108,32,98,114,101,97,107,32,116,104,105,115,32,109,111,100,117,108,101,39,115,32,97,116,111,109,105,99,105,116,121,32,103,117,97,114,97,110,116,101,101,115,32,97,115,32,105,116,32,99,97,110,32,114,97,99,101,32,119,105,116,104,32,97,32,99,111,110,99,117,114,114,101,110,116,32,99,97,108,108,32,116,111,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,49,44,50>>]}]}]},{p,[],[<<73,102,32>>,{code,[],[<<78,97,109,101>>]},<<32,105,115,32,110,111,116,32,97,32,115,121,109,98,111,108,105,99,32,108,105,110,107,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32>>,{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>]},<<46,32,79,110,32,112,108,97,116,102,111,114,109,115,32,116,104,97,116,32,100,111,32,110,111,116,32,115,117,112,112,111,114,116,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,97,108,119,97,121,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<114,101,97,100,95,102,105,108,101,95,105,110,102,111,47,49>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,55,49,54>>,signature => [{attribute,{326,2},spec,{{read_link_info,1},[{type,{326,21},bounded_fun,[{type,{326,21},'fun',[{type,{326,21},product,[{var,{326,22},'Name'}]},{type,{326,31},union,[{type,{326,31},tuple,[{atom,{326,32},ok},{var,{326,36},'FileInfo'}]},{type,{326,48},tuple,[{atom,{326,49},error},{var,{326,56},'Reason'}]}]}]},[{type,{327,7},constraint,[{atom,{327,7},is_subtype},[{var,{327,7},'Name'},{user_type,{327,15},name_all,[]}]]},{type,{328,7},constraint,[{atom,{328,7},is_subtype},[{var,{328,7},'FileInfo'},{user_type,{328,19},file_info,[]}]]},{type,{329,7},constraint,[{atom,{329,7},is_subtype},[{var,{329,7},'Reason'},{type,{329,17},union,[{user_type,{329,17},posix,[]},{atom,{329,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,rename,2},[{file,[102,105,108,101,46,101,114,108]},{location,241}],[<<114,101,110,97,109,101,47,50>>],#{<<101,110>> => [{p,[],[<<84,114,105,101,115,32,116,111,32,114,101,110,97,109,101,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,116,111,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<46,32,73,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,111,118,101,32,102,105,108,101,115,32,40,97,110,100,32,100,105,114,101,99,116,111,114,105,101,115,41,32,98,101,116,119,101,101,110,32,100,105,114,101,99,116,111,114,105,101,115,44,32,98,117,116,32,105,116,32,105,115,32,110,111,116,32,115,117,102,102,105,99,105,101,110,116,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,100,101,115,116,105,110,97,116,105,111,110,32,111,110,108,121,46,32,84,104,101,32,100,101,115,116,105,110,97,116,105,111,110,32,102,105,108,101,110,97,109,101,32,109,117,115,116,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32>>,{code,[],[<<98,97,114>>]},<<32,105,115,32,97,32,110,111,114,109,97,108,32,102,105,108,101,32,97,110,100,32>>,{code,[],[<<102,111,111>>]},<<32,97,110,100,32>>,{code,[],[<<98,97,122>>]},<<32,97,114,101,32,100,105,114,101,99,116,111,114,105,101,115,44,32>>,{code,[],[<<114,101,110,97,109,101,40,34,102,111,111,47,98,97,114,34,44,32,34,98,97,122,34,41>>]},<<32,114,101,116,117,114,110,115,32,97,110,32,101,114,114,111,114,44,32,98,117,116,32>>,{code,[],[<<114,101,110,97,109,101,40,34,102,111,111,47,98,97,114,34,44,32,34,98,97,122,47,98,97,114,34,41>>]},<<32,115,117,99,99,101,101,100,115,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,105,116,32,105,115,32,115,117,99,99,101,115,115,102,117,108,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<82,101,110,97,109,105,110,103,32,111,102,32,111,112,101,110,32,102,105,108,101,115,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32,109,111,115,116,32,112,108,97,116,102,111,114,109,115,32,40,115,101,101,32>>,{code,[],[<<101,97,99,99,101,115>>]},<<32,98,101,108,111,119,41,46>>]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,114,101,97,100,32,111,114,32,119,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,111,114,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,101,114,114,111,114,32,105,115,32,103,105,118,101,110,32,105,102,32,101,105,116,104,101,114,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,111,114,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,111,112,101,110,46>>]}]},{dt,[],[{code,[],[<<101,101,120,105,115,116>>]}]},{dd,[],[{p,[],[{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,110,111,116,32,97,110,32,101,109,112,116,121,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,97,108,115,111,32,103,105,118,101,110,32,119,104,101,110,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,97,114,101,32,110,111,116,32,111,102,32,116,104,101,32,115,97,109,101,32,116,121,112,101,46>>]}]},{dt,[],[{code,[],[<<101,105,110,118,97,108>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,105,115,32,97,32,114,111,111,116,32,100,105,114,101,99,116,111,114,121,44,32,111,114,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,97,32,115,117,98,100,105,114,101,99,116,111,114,121,32,111,102,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,44,32,98,117,116,32>>,{code,[],[<<83,111,117,114,99,101>>]},<<32,105,115,32,110,111,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,44,32,98,117,116,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,105,115,32,110,111,116,46>>]}]},{dt,[],[{code,[],[<<101,120,100,101,118>>]}]},{dd,[],[{p,[],[{code,[],[<<83,111,117,114,99,101>>]},<<32,97,110,100,32>>,{code,[],[<<68,101,115,116,105,110,97,116,105,111,110>>]},<<32,97,114,101,32,111,110,32,100,105,102,102,101,114,101,110,116,32,102,105,108,101,32,115,121,115,116,101,109,115,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,55,51,56>>,signature => [{attribute,{241,2},spec,{{rename,2},[{type,{241,13},bounded_fun,[{type,{241,13},'fun',[{type,{241,13},product,[{var,{241,14},'Source'},{var,{241,22},'Destination'}]},{type,{241,38},union,[{atom,{241,38},ok},{type,{241,43},tuple,[{atom,{241,44},error},{var,{241,51},'Reason'}]}]}]},[{type,{242,7},constraint,[{atom,{242,7},is_subtype},[{var,{242,7},'Source'},{user_type,{242,17},name_all,[]}]]},{type,{243,7},constraint,[{atom,{243,7},is_subtype},[{var,{243,7},'Destination'},{user_type,{243,22},name_all,[]}]]},{type,{244,7},constraint,[{atom,{244,7},is_subtype},[{var,{244,7},'Reason'},{type,{244,17},union,[{user_type,{244,17},posix,[]},{atom,{244,27},badarg}]}]]}]]}]}}]}},{{function,script,1},[{file,[102,105,108,101,46,101,114,108]},{location,1123}],[<<115,99,114,105,112,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,97,100,115,32,97,110,100,32,101,118,97,108,117,97,116,101,115,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,39,46,39,32,40,111,114,32,39,44,39,44,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,97,108,115,111,32,97,110,32,101,120,112,114,101,115,115,105,111,110,41,44,32,102,114,111,109,32,116,104,101,32,102,105,108,101,46>>]},{p,[],[<<82,101,116,117,114,110,115,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<123,111,107,44,32,86,97,108,117,101,125>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,114,101,97,100,32,97,110,100,32,101,118,97,108,117,97,116,101,100,46,32>>,{code,[],[<<86,97,108,117,101>>]},<<32,105,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,108,97,115,116,32,101,120,112,114,101,115,115,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,97,116,111,109,40,41,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,111,112,101,110,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,114,101,97,100,105,110,103,32,105,116,46,32,70,111,114,32,97,32,108,105,115,116,32,111,102,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,99,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<123,101,114,114,111,114,44,32,123,76,105,110,101,44,32,77,111,100,44,32,84,101,114,109,125,125>>]}]},{dd,[],[{p,[],[<<65,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,119,104,101,110,32,105,110,116,101,114,112,114,101,116,105,110,103,32,116,104,101,32,69,114,108,97,110,103,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,116,104,101,32,102,105,108,101,46,32,85,115,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,102,111,114,109,97,116,95,101,114,114,111,114,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,111,114,109,97,116,95,101,114,114,111,114,47,49>>]}]},<<32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,116,104,114,101,101,45,101,108,101,109,101,110,116,32,116,117,112,108,101,32,116,111,32,97,110,32,69,110,103,108,105,115,104,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,97,32,99,111,109,109,101,110,116,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,112,112,35,101,110,99,111,100,105,110,103>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,112,112,40,51,41>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,48,49>>,signature => [{attribute,{1123,2},spec,{{script,1},[{type,{1123,13},bounded_fun,[{type,{1123,13},'fun',[{type,{1123,13},product,[{var,{1123,14},'Filename'}]},{type,{1123,27},union,[{type,{1123,27},tuple,[{atom,{1123,28},ok},{var,{1123,32},'Value'}]},{type,{1123,41},tuple,[{atom,{1123,42},error},{var,{1123,49},'Reason'}]}]}]},[{type,{1124,7},constraint,[{atom,{1124,7},is_subtype},[{var,{1124,7},'Filename'},{user_type,{1124,19},name_all,[]}]]},{type,{1125,7},constraint,[{atom,{1125,7},is_subtype},[{var,{1125,7},'Value'},{type,{1125,16},term,[]}]]},{type,{1126,7},constraint,[{atom,{1126,7},is_subtype},[{var,{1126,7},'Reason'},{type,{1126,17},union,[{user_type,{1126,17},posix,[]},{atom,{1126,27},badarg},{atom,{1126,36},terminated},{atom,{1126,49},system_limit},{type,{1127,17},tuple,[{ann_type,{1127,18},[{var,{1127,18},'Line'},{type,{1127,26},integer,[]}]},{ann_type,{1127,37},[{var,{1127,37},'Mod'},{type,{1127,44},module,[]}]},{ann_type,{1127,54},[{var,{1127,54},'Term'},{type,{1127,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,script,2},[{file,[102,105,108,101,46,101,114,108]},{location,1132}],[<<115,99,114,105,112,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<115,99,114,105,112,116,47,49>>]},<<32,98,117,116,32,116,104,101,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,32>>,{code,[],[<<66,105,110,100,105,110,103,115>>]},<<32,97,114,101,32,117,115,101,100,32,105,110,32,116,104,101,32,101,118,97,108,117,97,116,105,111,110,46,32,83,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,101,114,108,95,101,118,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<101,114,108,95,101,118,97,108,40,51,41>>]}]},<<32,97,98,111,117,116,32,118,97,114,105,97,98,108,101,32,98,105,110,100,105,110,103,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,51,54>>,signature => [{attribute,{1132,2},spec,{{script,2},[{type,{1132,13},bounded_fun,[{type,{1132,13},'fun',[{type,{1132,13},product,[{var,{1132,14},'Filename'},{var,{1132,24},'Bindings'}]},{type,{1132,37},union,[{type,{1132,37},tuple,[{atom,{1132,38},ok},{var,{1132,42},'Value'}]},{type,{1132,51},tuple,[{atom,{1132,52},error},{var,{1132,59},'Reason'}]}]}]},[{type,{1133,7},constraint,[{atom,{1133,7},is_subtype},[{var,{1133,7},'Filename'},{user_type,{1133,19},name_all,[]}]]},{type,{1134,7},constraint,[{atom,{1134,7},is_subtype},[{var,{1134,7},'Bindings'},{remote_type,{1134,19},[{atom,{1134,19},erl_eval},{atom,{1134,28},binding_struct},[]]}]]},{type,{1135,7},constraint,[{atom,{1135,7},is_subtype},[{var,{1135,7},'Value'},{type,{1135,16},term,[]}]]},{type,{1136,7},constraint,[{atom,{1136,7},is_subtype},[{var,{1136,7},'Reason'},{type,{1136,17},union,[{user_type,{1136,17},posix,[]},{atom,{1136,27},badarg},{atom,{1136,36},terminated},{atom,{1136,49},system_limit},{type,{1137,17},tuple,[{ann_type,{1137,18},[{var,{1137,18},'Line'},{type,{1137,26},integer,[]}]},{ann_type,{1137,37},[{var,{1137,37},'Mod'},{type,{1137,44},module,[]}]},{ann_type,{1137,54},[{var,{1137,54},'Term'},{type,{1137,62},term,[]}]}]}]}]]}]]}]}}]}},{{function,sendfile,2},[{file,[102,105,108,101,46,101,114,108]},{location,1317}],[<<115,101,110,100,102,105,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<83,101,110,100,115,32,116,104,101,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<32,116,111,32>>,{code,[],[<<83,111,99,107,101,116>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,121,116,101,115,83,101,110,116,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,52,54>>,signature => [{attribute,{1317,2},spec,{{sendfile,2},[{type,{1317,15},bounded_fun,[{type,{1317,15},'fun',[{type,{1317,15},product,[{var,{1317,16},'Filename'},{var,{1317,26},'Socket'}]},{type,{1318,4},union,[{type,{1318,4},tuple,[{atom,{1318,5},ok},{type,{1318,11},non_neg_integer,[]}]},{type,{1318,32},tuple,[{atom,{1318,33},error},{type,{1318,42},union,[{remote_type,{1318,42},[{atom,{1318,42},inet},{atom,{1318,47},posix},[]]},{atom,{1319,5},closed},{atom,{1319,14},badarg},{atom,{1319,23},not_owner}]}]}]}]},[{type,{1320,7},constraint,[{atom,{1320,7},is_subtype},[{var,{1320,7},'Filename'},{user_type,{1320,19},name_all,[]}]]},{type,{1321,7},constraint,[{atom,{1321,7},is_subtype},[{var,{1321,7},'Socket'},{type,{1321,17},union,[{remote_type,{1321,17},[{atom,{1321,17},inet},{atom,{1321,22},socket},[]]},{remote_type,{1321,33},[{atom,{1321,33},socket},{atom,{1321,40},socket},[]]},{type,{1322,22},'fun',[{type,{1322,22},product,[{type,{1322,23},iolist,[]}]},{type,{1322,36},union,[{atom,{1322,36},ok},{type,{1322,41},tuple,[{atom,{1322,42},error},{type,{1322,49},union,[{remote_type,{1322,49},[{atom,{1322,49},inet},{atom,{1322,54},posix},[]]},{atom,{1322,64},closed}]}]}]}]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,sendfile,5},[{file,[102,105,108,101,46,101,114,108]},{location,1289}],[<<115,101,110,100,102,105,108,101,47,53>>],#{<<101,110>> => [{ul,[{class,<<116,121,112,101,115>>}],[{li,[{name,<<115,101,110,100,102,105,108,101,95,111,112,116,105,111,110>>}],[]}]},{p,[],[<<83,101,110,100,115,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<82,97,119,70,105,108,101>>]},<<32,98,101,103,105,110,110,105,110,103,32,97,116,32>>,{code,[],[<<79,102,102,115,101,116>>]},<<32,116,111,32>>,{code,[],[<<83,111,99,107,101,116>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<123,111,107,44,32,66,121,116,101,115,83,101,110,116,125>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32,73,102,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,105,115,32,115,101,116,32,116,111,32>>,{code,[],[<<48>>]},<<32,97,108,108,32,100,97,116,97,32,97,102,116,101,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32>>,{code,[],[<<79,102,102,115,101,116>>]},<<32,105,115,32,115,101,110,116,46>>]},{p,[],[<<84,104,101,32,102,105,108,101,32,117,115,101,100,32,109,117,115,116,32,98,101,32,111,112,101,110,101,100,32,117,115,105,110,103,32,116,104,101,32>>,{code,[],[<<114,97,119>>]},<<32,102,108,97,103,44,32,97,110,100,32,116,104,101,32,112,114,111,99,101,115,115,32,99,97,108,108,105,110,103,32>>,{code,[],[<<115,101,110,100,102,105,108,101>>]},<<32,109,117,115,116,32,98,101,32,116,104,101,32,99,111,110,116,114,111,108,108,105,110,103,32,112,114,111,99,101,115,115,32,111,102,32,116,104,101,32,115,111,99,107,101,116,46,32,83,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,103,101,110,95,116,99,112,35,99,111,110,116,114,111,108,108,105,110,103,95,112,114,111,99,101,115,115,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,101,110,95,116,99,112,58,99,111,110,116,114,111,108,108,105,110,103,95,112,114,111,99,101,115,115,47,50>>]}]},<<32,111,114,32,109,111,100,117,108,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,115,111,99,107,101,116,35,115,101,116,111,112,116,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,111,99,107,101,116>>]},<<39,115>>]},<<32>>,{a,[{href,<<107,101,114,110,101,108,58,115,111,99,107,101,116,35,111,116,112,95,115,111,99,107,101,116,95,111,112,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[<<108,101,118,101,108,32>>,{code,[],[<<111,116,112>>]},<<32,115,111,99,107,101,116,32,111,112,116,105,111,110,32>>]},{code,[],[<<99,111,110,116,114,111,108,108,105,110,103,95,112,114,111,99,101,115,115>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,79,83,32,117,115,101,100,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,110,111,110,45,98,108,111,99,107,105,110,103,32>>,{code,[],[<<115,101,110,100,102,105,108,101>>]},<<44,32,97,110,32,69,114,108,97,110,103,32,102,97,108,108,98,97,99,107,32,117,115,105,110,103,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,101,97,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,97,100,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<107,101,114,110,101,108,58,103,101,110,95,116,99,112,35,115,101,110,100,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<103,101,110,95,116,99,112,58,115,101,110,100,47,50>>]}]},<<32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,111,112,116,105,111,110,32,108,105,115,116,32,99,97,110,32,99,111,110,116,97,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<99,104,117,110,107,95,115,105,122,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,99,104,117,110,107,32,115,105,122,101,32,117,115,101,100,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,102,97,108,108,98,97,99,107,32,116,111,32,115,101,110,100,32,100,97,116,97,46,32,73,102,32,117,115,105,110,103,32,116,104,101,32,102,97,108,108,98,97,99,107,44,32,115,101,116,32,116,104,105,115,32,116,111,32,97,32,118,97,108,117,101,32,116,104,97,116,32,99,111,109,102,111,114,116,97,98,108,121,32,102,105,116,115,32,105,110,32,116,104,101,32,115,121,115,116,101,109,115,32,109,101,109,111,114,121,46,32,68,101,102,97,117,108,116,32,105,115,32,50,48,32,77,66,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,53,53>>,signature => [{attribute,{1289,2},spec,{{sendfile,5},[{type,{1289,15},bounded_fun,[{type,{1289,15},'fun',[{type,{1289,15},product,[{var,{1289,16},'RawFile'},{var,{1289,25},'Socket'},{var,{1289,33},'Offset'},{var,{1289,41},'Bytes'},{var,{1289,48},'Opts'}]},{type,{1290,4},union,[{type,{1290,4},tuple,[{atom,{1290,5},ok},{type,{1290,11},non_neg_integer,[]}]},{type,{1290,32},tuple,[{atom,{1290,33},error},{type,{1290,42},union,[{remote_type,{1290,42},[{atom,{1290,42},inet},{atom,{1290,47},posix},[]]},{atom,{1291,5},closed},{atom,{1291,14},badarg},{atom,{1291,23},not_owner}]}]}]}]},[{type,{1292,7},constraint,[{atom,{1292,7},is_subtype},[{var,{1292,7},'RawFile'},{user_type,{1292,18},fd,[]}]]},{type,{1293,7},constraint,[{atom,{1293,7},is_subtype},[{var,{1293,7},'Socket'},{type,{1293,17},union,[{remote_type,{1293,17},[{atom,{1293,17},inet},{atom,{1293,22},socket},[]]},{remote_type,{1293,33},[{atom,{1293,33},socket},{atom,{1293,40},socket},[]]},{type,{1294,22},'fun',[{type,{1294,22},product,[{type,{1294,23},iolist,[]}]},{type,{1294,36},union,[{atom,{1294,36},ok},{type,{1294,41},tuple,[{atom,{1294,42},error},{type,{1294,49},union,[{remote_type,{1294,49},[{atom,{1294,49},inet},{atom,{1294,54},posix},[]]},{atom,{1294,64},closed}]}]}]}]}]}]]},{type,{1295,7},constraint,[{atom,{1295,7},is_subtype},[{var,{1295,7},'Offset'},{type,{1295,17},non_neg_integer,[]}]]},{type,{1296,7},constraint,[{atom,{1296,7},is_subtype},[{var,{1296,7},'Bytes'},{type,{1296,16},non_neg_integer,[]}]]},{type,{1297,7},constraint,[{atom,{1297,7},is_subtype},[{var,{1297,7},'Opts'},{type,{1297,15},list,[{user_type,{1297,16},sendfile_option,[]}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,set_cwd,1},[{file,[102,105,108,101,46,101,114,108]},{location,206}],[<<115,101,116,95,99,119,100,47,49>>],#{<<101,110>> => [{p,[],[<<83,101,116,115,32,116,104,101,32,99,117,114,114,101,110,116,32,119,111,114,107,105,110,103,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,116,111,32>>,{code,[],[<<68,105,114>>]},<<46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,101,32,109,111,100,117,108,101,32>>,{code,[],[<<102,105,108,101>>]},<<32,117,115,117,97,108,108,121,32,116,114,101,97,116,32,98,105,110,97,114,105,101,115,32,97,115,32,114,97,119,32,102,105,108,101,110,97,109,101,115,44,32,116,104,97,116,32,105,115,44,32,116,104,101,121,32,97,114,101,32,112,97,115,115,101,100,32,34,97,115,32,105,115,34,32,101,118,101,110,32,119,104,101,110,32,116,104,101,32,101,110,99,111,100,105,110,103,32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,100,111,101,115,32,110,111,116,32,97,103,114,101,101,32,119,105,116,104,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,40,41>>]}]},<<46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,101,120,112,101,99,116,115,32,98,105,110,97,114,105,101,115,32,116,111,32,98,101,32,101,110,99,111,100,101,100,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,118,97,108,117,101,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{code,[],[<<110,97,116,105,118,101,95,110,97,109,101,95,101,110,99,111,100,105,110,103,40,41>>]},<<46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,32,97,114,101,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,100,105,114,101,99,116,111,114,121,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32>>,{code,[],[<<68,105,114>>]},<<32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,111,114,32,111,110,101,32,111,102,32,105,116,115,32,112,97,114,101,110,116,115,46>>]}]},{dt,[],[{code,[],[<<98,97,100,97,114,103>>]}]},{dd,[],[{p,[],[{code,[],[<<68,105,114>>]},<<32,104,97,115,32,97,110,32,105,109,112,114,111,112,101,114,32,116,121,112,101,44,32,115,117,99,104,32,97,115,32,116,117,112,108,101,46>>]}]},{dt,[],[{code,[],[<<110,111,95,116,114,97,110,115,108,97,116,105,111,110>>]}]},{dd,[],[{p,[],[{code,[],[<<68,105,114>>]},<<32,105,115,32,97,32>>,{code,[],[<<98,105,110,97,114,121,40,41>>]},<<32,119,105,116,104,32,99,104,97,114,97,99,116,101,114,115,32,99,111,100,101,100,32,105,110,32,73,83,79,45,108,97,116,105,110,45,49,32,97,110,100,32,116,104,101,32,86,77,32,105,115,32,111,112,101,114,97,116,105,110,103,32,119,105,116,104,32,117,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,101,110,99,111,100,105,110,103,46>>]}]}]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,110,32,97,32,102,117,116,117,114,101,32,114,101,108,101,97,115,101,44,32,97,32,98,97,100,32,116,121,112,101,32,102,111,114,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<68,105,114>>]},<<32,119,105,108,108,32,112,114,111,98,97,98,108,121,32,103,101,110,101,114,97,116,101,32,97,110,32,101,120,99,101,112,116,105,111,110,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,56,56,56>>,signature => [{attribute,{206,2},spec,{{set_cwd,1},[{type,{206,14},bounded_fun,[{type,{206,14},'fun',[{type,{206,14},product,[{var,{206,15},'Dir'}]},{type,{206,23},union,[{atom,{206,23},ok},{type,{206,28},tuple,[{atom,{206,29},error},{var,{206,36},'Reason'}]}]}]},[{type,{207,7},constraint,[{atom,{207,7},is_subtype},[{var,{207,7},'Dir'},{type,{207,14},union,[{user_type,{207,14},name,[]},{var,{207,23},'EncodedBinary'}]}]]},{type,{208,7},constraint,[{atom,{208,7},is_subtype},[{var,{208,7},'EncodedBinary'},{type,{208,24},binary,[]}]]},{type,{209,7},constraint,[{atom,{209,7},is_subtype},[{var,{209,7},'Reason'},{type,{209,17},union,[{user_type,{209,17},posix,[]},{atom,{209,27},badarg},{atom,{209,36},no_translation}]}]]}]]}]}}]}},{{function,sync,1},[{file,[102,105,108,101,46,101,114,108]},{location,742}],[<<115,121,110,99,47,49>>],#{<<101,110>> => [{p,[],[<<69,110,115,117,114,101,115,32,116,104,97,116,32,97,110,121,32,98,117,102,102,101,114,115,32,107,101,112,116,32,98,121,32,116,104,101,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,40,110,111,116,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,114,117,110,116,105,109,101,32,115,121,115,116,101,109,41,32,97,114,101,32,119,114,105,116,116,101,110,32,116,111,32,100,105,115,107,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,109,105,103,104,116,32,104,97,118,101,32,110,111,32,101,102,102,101,99,116,46>>]},{p,[],[<<65,32,116,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,32,105,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,108,101,102,116,32,116,111,32,119,114,105,116,101,32,116,104,101,32,102,105,108,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,51,53>>,signature => [{attribute,{742,2},spec,{{sync,1},[{type,{742,11},bounded_fun,[{type,{742,11},'fun',[{type,{742,11},product,[{var,{742,12},'IoDevice'}]},{type,{742,25},union,[{atom,{742,25},ok},{type,{742,30},tuple,[{atom,{742,31},error},{var,{742,38},'Reason'}]}]}]},[{type,{743,7},constraint,[{atom,{743,7},is_subtype},[{var,{743,7},'IoDevice'},{user_type,{743,19},io_device,[]}]]},{type,{744,7},constraint,[{atom,{744,7},is_subtype},[{var,{744,7},'Reason'},{type,{744,17},union,[{user_type,{744,17},posix,[]},{atom,{744,27},badarg},{atom,{744,36},terminated}]}]]}]]}]}}]}},{{function,truncate,1},[{file,[102,105,108,101,46,101,114,108]},{location,766}],[<<116,114,117,110,99,97,116,101,47,49>>],#{<<101,110>> => [{p,[],[<<84,114,117,110,99,97,116,101,115,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,53,49>>,signature => [{attribute,{766,2},spec,{{truncate,1},[{type,{766,15},bounded_fun,[{type,{766,15},'fun',[{type,{766,15},product,[{var,{766,16},'IoDevice'}]},{type,{766,29},union,[{atom,{766,29},ok},{type,{766,34},tuple,[{atom,{766,35},error},{var,{766,42},'Reason'}]}]}]},[{type,{767,7},constraint,[{atom,{767,7},is_subtype},[{var,{767,7},'IoDevice'},{user_type,{767,19},io_device,[]}]]},{type,{768,7},constraint,[{atom,{768,7},is_subtype},[{var,{768,7},'Reason'},{type,{768,17},union,[{user_type,{768,17},posix,[]},{atom,{768,27},badarg},{atom,{768,36},terminated}]}]]}]]}]}}]}},{{function,write,2},[{file,[102,105,108,101,46,101,114,108]},{location,676}],[<<119,114,105,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<87,114,105,116,101,115,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,116,111,32,116,104,101,32,102,105,108,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32>>,{code,[],[<<73,111,68,101,118,105,99,101>>]},<<46,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,116,104,101,32,111,110,108,121,32,119,97,121,32,116,111,32,119,114,105,116,101,32,116,111,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32>>,{code,[],[<<114,97,119>>]},<<32,109,111,100,101,32,40,97,108,116,104,111,117,103,104,32,105,116,32,119,111,114,107,115,32,102,111,114,32,110,111,114,109,97,108,108,121,32,111,112,101,110,101,100,32,102,105,108,101,115,32,116,111,111,41,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,97,110,100,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<32,111,116,104,101,114,119,105,115,101,46>>]},{p,[],[<<73,102,32,116,104,101,32,102,105,108,101,32,105,115,32,111,112,101,110,101,100,32,119,105,116,104,32>>,{code,[],[<<101,110,99,111,100,105,110,103>>]},<<32,115,101,116,32,116,111,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32>>,{code,[],[<<108,97,116,105,110,49>>]},<<44,32,101,97,99,104,32,98,121,116,101,32,119,114,105,116,116,101,110,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,109,97,110,121,32,98,121,116,101,115,32,98,101,105,110,103,32,119,114,105,116,116,101,110,32,116,111,32,116,104,101,32,102,105,108,101,44,32,97,115,32,116,104,101,32,98,121,116,101,32,114,97,110,103,101,32,48,46,46,50,53,53,32,99,97,110,32,114,101,112,114,101,115,101,110,116,32,97,110,121,116,104,105,110,103,32,98,101,116,119,101,101,110,32,111,110,101,32,97,110,100,32,102,111,117,114,32,98,121,116,101,115,32,100,101,112,101,110,100,105,110,103,32,111,110,32,118,97,108,117,101,32,97,110,100,32,85,84,70,32,101,110,99,111,100,105,110,103,32,116,121,112,101,46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,98,97,100,102>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,111,112,101,110,101,100,32,102,111,114,32,119,114,105,116,105,110,103,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,99,101,32,105,115,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,54,48>>,signature => [{attribute,{676,2},spec,{{write,2},[{type,{676,12},bounded_fun,[{type,{676,12},'fun',[{type,{676,12},product,[{var,{676,13},'IoDevice'},{var,{676,23},'Bytes'}]},{type,{676,33},union,[{atom,{676,33},ok},{type,{676,38},tuple,[{atom,{676,39},error},{var,{676,46},'Reason'}]}]}]},[{type,{677,7},constraint,[{atom,{677,7},is_subtype},[{var,{677,7},'IoDevice'},{type,{677,19},union,[{user_type,{677,19},io_device,[]},{type,{677,33},atom,[]}]}]]},{type,{678,7},constraint,[{atom,{678,7},is_subtype},[{var,{678,7},'Bytes'},{type,{678,16},iodata,[]}]]},{type,{679,7},constraint,[{atom,{679,7},is_subtype},[{var,{679,7},'Reason'},{type,{679,17},union,[{user_type,{679,17},posix,[]},{atom,{679,27},badarg},{atom,{679,36},terminated}]}]]}]]}]}}]}},{{function,write_file,2},[{file,[102,105,108,101,46,101,114,108]},{location,443}],[<<119,114,105,116,101,95,102,105,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<87,114,105,116,101,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<32,116,101,114,109,32>>,{code,[],[<<66,121,116,101,115>>]},<<32,116,111,32,102,105,108,101,32>>,{code,[],[<<70,105,108,101,110,97,109,101>>]},<<46,32,84,104,101,32,102,105,108,101,32,105,115,32,99,114,101,97,116,101,100,32,105,102,32,105,116,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,32,73,102,32,105,116,32,101,120,105,115,116,115,44,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,111,110,116,101,110,116,115,32,97,114,101,32,111,118,101,114,119,114,105,116,116,101,110,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46>>]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]},{dt,[],[{code,[],[<<101,110,111,115,112,99>>]}]},{dd,[],[{p,[],[<<78,111,32,115,112,97,99,101,32,105,115,32,108,101,102,116,32,111,110,32,116,104,101,32,100,101,118,105,99,101,46>>]}]},{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,119,114,105,116,105,110,103,32,116,104,101,32,102,105,108,101,32,111,114,32,115,101,97,114,99,104,105,110,103,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<101,105,115,100,105,114>>]}]},{dd,[],[{p,[],[<<84,104,101,32,110,97,109,101,100,32,102,105,108,101,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,49,57,56,54>>,signature => [{attribute,{443,2},spec,{{write_file,2},[{type,{443,17},bounded_fun,[{type,{443,17},'fun',[{type,{443,17},product,[{var,{443,18},'Filename'},{var,{443,28},'Bytes'}]},{type,{443,38},union,[{atom,{443,38},ok},{type,{443,43},tuple,[{atom,{443,44},error},{var,{443,51},'Reason'}]}]}]},[{type,{444,7},constraint,[{atom,{444,7},is_subtype},[{var,{444,7},'Filename'},{user_type,{444,19},name_all,[]}]]},{type,{445,7},constraint,[{atom,{445,7},is_subtype},[{var,{445,7},'Bytes'},{type,{445,16},iodata,[]}]]},{type,{446,7},constraint,[{atom,{446,7},is_subtype},[{var,{446,7},'Reason'},{type,{446,17},union,[{user_type,{446,17},posix,[]},{atom,{446,27},badarg},{atom,{446,36},terminated},{atom,{446,49},system_limit}]}]]}]]}]}}]}},{{function,write_file,3},[{file,[102,105,108,101,46,101,114,108]},{location,455}],[<<119,114,105,116,101,95,102,105,108,101,47,51>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<119,114,105,116,101,95,102,105,108,101,47,50>>]},<<44,32,98,117,116,32,116,97,107,101,115,32,97,32,116,104,105,114,100,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<77,111,100,101,115>>]},<<44,32,97,32,108,105,115,116,32,111,102,32,112,111,115,115,105,98,108,101,32,109,111,100,101,115,44,32,115,101,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<46,32,84,104,101,32,109,111,100,101,32,102,108,97,103,115,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,97,110,100,32>>,{code,[],[<<119,114,105,116,101>>]},<<32,97,114,101,32,105,109,112,108,105,99,105,116,44,32,115,111,32,116,104,101,121,32,97,114,101,32,110,111,116,32,116,111,32,98,101,32,117,115,101,100,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,50,51>>,signature => [{attribute,{455,2},spec,{{write_file,3},[{type,{455,17},bounded_fun,[{type,{455,17},'fun',[{type,{455,17},product,[{var,{455,18},'Filename'},{var,{455,28},'Bytes'},{var,{455,35},'Modes'}]},{type,{455,45},union,[{atom,{455,45},ok},{type,{455,50},tuple,[{atom,{455,51},error},{var,{455,58},'Reason'}]}]}]},[{type,{456,7},constraint,[{atom,{456,7},is_subtype},[{var,{456,7},'Filename'},{user_type,{456,19},name_all,[]}]]},{type,{457,7},constraint,[{atom,{457,7},is_subtype},[{var,{457,7},'Bytes'},{type,{457,16},iodata,[]}]]},{type,{458,7},constraint,[{atom,{458,7},is_subtype},[{var,{458,7},'Modes'},{type,{458,16},list,[{user_type,{458,17},mode,[]}]}]]},{type,{459,7},constraint,[{atom,{459,7},is_subtype},[{var,{459,7},'Reason'},{type,{459,17},union,[{user_type,{459,17},posix,[]},{atom,{459,27},badarg},{atom,{459,36},terminated},{atom,{459,49},system_limit}]}]]}]]}]}}]}},{{function,write_file_info,3},[{file,[102,105,108,101,46,101,114,108]},{location,380}],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,51>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,51,52>>,equiv => {function,write_file_info,2},signature => [{attribute,{380,2},spec,{{write_file_info,3},[{type,{380,22},bounded_fun,[{type,{380,22},'fun',[{type,{380,22},product,[{var,{380,23},'Filename'},{var,{380,33},'FileInfo'},{var,{380,43},'Opts'}]},{type,{380,52},union,[{atom,{380,52},ok},{type,{380,57},tuple,[{atom,{380,58},error},{var,{380,65},'Reason'}]}]}]},[{type,{381,7},constraint,[{atom,{381,7},is_subtype},[{var,{381,7},'Filename'},{user_type,{381,19},name_all,[]}]]},{type,{382,7},constraint,[{atom,{382,7},is_subtype},[{var,{382,7},'Opts'},{type,{382,15},list,[{user_type,{382,16},file_info_option,[]}]}]]},{type,{383,7},constraint,[{atom,{383,7},is_subtype},[{var,{383,7},'FileInfo'},{user_type,{383,19},file_info,[]}]]},{type,{384,7},constraint,[{atom,{384,7},is_subtype},[{var,{384,7},'Reason'},{type,{384,17},union,[{user_type,{384,17},posix,[]},{atom,{384,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{function,write_file_info,2},[{file,[102,105,108,101,46,101,114,108]},{location,372}],[<<119,114,105,116,101,95,102,105,108,101,95,105,110,102,111,47,50>>],#{<<101,110>> => [{p,[],[<<67,104,97,110,103,101,115,32,102,105,108,101,32,105,110,102,111,114,109,97,116,105,111,110,46,32,82,101,116,117,114,110,115,32>>,{code,[],[<<111,107>>]},<<32,105,102,32,115,117,99,99,101,115,115,102,117,108,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<123,101,114,114,111,114,44,32,82,101,97,115,111,110,125>>]},<<46,32>>,{code,[],[<<70,105,108,101,73,110,102,111>>]},<<32,105,115,32,97,32,114,101,99,111,114,100,32>>,{code,[],[<<102,105,108,101,95,105,110,102,111>>]},<<44,32,100,101,102,105,110,101,100,32,105,110,32,116,104,101,32,75,101,114,110,101,108,32,105,110,99,108,117,100,101,32,102,105,108,101,32>>,{code,[],[<<102,105,108,101,46,104,114,108>>]},<<46,32,73,110,99,108,117,100,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,114,101,99,116,105,118,101,32,105,110,32,116,104,101,32,109,111,100,117,108,101,32,102,114,111,109,32,119,104,105,99,104,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<32,45,105,110,99,108,117,100,101,95,108,105,98,40,34,107,101,114,110,101,108,47,105,110,99,108,117,100,101,47,102,105,108,101,46,104,114,108,34,41,46>>]}]},{p,[],[<<84,104,101,32,116,105,109,101,32,116,121,112,101,32,115,101,116,32,105,110,32>>,{code,[],[<<97,116,105,109,101>>]},<<44,32>>,{code,[],[<<109,116,105,109,101>>]},<<44,32,97,110,100,32>>,{code,[],[<<99,116,105,109,101>>]},<<32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,116,105,109,101,32,116,121,112,101,32,115,101,116,32,105,110,32>>,{code,[],[<<79,112,116,115,32,58,58,32,123,116,105,109,101,44,32,84,121,112,101,125>>]},<<32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<108,111,99,97,108>>]}]},{dd,[],[{p,[],[<<73,110,116,101,114,112,114,101,116,115,32,116,104,101,32,116,105,109,101,32,115,101,116,32,97,115,32,108,111,99,97,108,46>>]}]},{dt,[],[{code,[],[<<117,110,105,118,101,114,115,97,108>>]}]},{dd,[],[{p,[],[<<73,110,116,101,114,112,114,101,116,115,32,105,116,32,97,115,32,117,110,105,118,101,114,115,97,108,32,116,105,109,101,46>>]}]},{dt,[],[{code,[],[<<112,111,115,105,120>>]}]},{dd,[],[{p,[],[<<77,117,115,116,32,98,101,32,115,101,99,111,110,100,115,32,115,105,110,99,101,32,111,114,32,98,101,102,111,114,101,32,85,110,105,120,32,116,105,109,101,32,101,112,111,99,104,44,32,119,104,105,99,104,32,105,115,32,49,57,55,48,45,48,49,45,48,49,32,48,48,58,48,48,32,85,84,67,46>>]}]}]},{p,[],[<<68,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<123,116,105,109,101,44,32,108,111,99,97,108,125>>]},<<46>>]},{p,[],[<<73,102,32,116,104,101,32,111,112,116,105,111,110,32>>,{code,[],[<<114,97,119>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,102,105,108,101,32,115,101,114,118,101,114,32,105,115,32,110,111,116,32,99,97,108,108,101,100,32,97,110,100,32,111,110,108,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,108,111,99,97,108,32,102,105,108,101,115,32,105,115,32,114,101,116,117,114,110,101,100,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,101,108,100,115,32,97,114,101,32,117,115,101,100,32,102,114,111,109,32,116,104,101,32,114,101,99,111,114,100,44,32,105,102,32,116,104,101,121,32,97,114,101,32,115,112,101,99,105,102,105,101,100,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,114,101,97,100,46>>]}]},{dt,[],[{code,[],[<<109,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,108,97,115,116,32,116,105,109,101,32,116,104,101,32,102,105,108,101,32,119,97,115,32,119,114,105,116,116,101,110,46>>]}]},{dt,[],[{code,[],[<<99,116,105,109,101,32,61,32>>]},{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,100,97,116,101,95,116,105,109,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<100,97,116,101,95,116,105,109,101,40,41>>]}]},{code,[],[<<32,124,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<79,110,32,85,110,105,120,44,32,97,110,121,32,118,97,108,117,101,32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,105,103,110,111,114,101,100,32,40,116,104,101,32,34,99,116,105,109,101,34,32,102,111,114,32,116,104,101,32,102,105,108,101,32,105,115,32,115,101,116,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,109,101,41,46,32,79,110,32,87,105,110,100,111,119,115,44,32,116,104,105,115,32,102,105,101,108,100,32,105,115,32,116,104,101,32,110,101,119,32,99,114,101,97,116,105,111,110,32,116,105,109,101,32,116,111,32,115,101,116,32,102,111,114,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<109,111,100,101,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,112,101,114,109,105,115,115,105,111,110,115,32,97,115,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,98,105,116,32,118,97,108,117,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<56,35,48,48,52,48,48>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,50,48,48>>]}]},{dd,[],[{p,[],[<<87,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,49,48,48>>]}]},{dd,[],[{p,[],[<<69,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,119,110,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,52,48>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,50,48>>]}]},{dd,[],[{p,[],[<<87,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,49,48>>]}]},{dd,[],[{p,[],[<<69,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,103,114,111,117,112>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,52>>]}]},{dd,[],[{p,[],[<<82,101,97,100,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,50>>]}]},{dd,[],[{p,[],[<<87,114,105,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<56,35,48,48,48,48,49>>]}]},{dd,[],[{p,[],[<<69,120,101,99,117,116,101,32,112,101,114,109,105,115,115,105,111,110,58,32,111,116,104,101,114>>]}]},{dt,[],[{code,[],[<<49,54,35,56,48,48>>]}]},{dd,[],[{p,[],[<<83,101,116,32,117,115,101,114,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]},{dt,[],[{code,[],[<<49,54,35,52,48,48>>]}]},{dd,[],[{p,[],[<<83,101,116,32,103,114,111,117,112,32,105,100,32,111,110,32,101,120,101,99,117,116,105,111,110>>]}]}]},{p,[],[<<79,110,32,85,110,105,120,32,112,108,97,116,102,111,114,109,115,44,32,111,116,104,101,114,32,98,105,116,115,32,116,104,97,110,32,116,104,111,115,101,32,108,105,115,116,101,100,32,97,98,111,118,101,32,109,97,121,32,98,101,32,115,101,116,46>>]}]},{dt,[],[{code,[],[<<117,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<73,110,100,105,99,97,116,101,115,32,116,104,101,32,102,105,108,101,32,111,119,110,101,114,46,32,73,103,110,111,114,101,100,32,102,111,114,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,46>>]}]},{dt,[],[{code,[],[<<103,105,100,32,61,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,116,104,101,32,103,114,111,117,112,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,111,119,110,101,114,32,98,101,108,111,110,103,115,32,116,111,46,32,73,103,110,111,114,101,100,32,102,111,114,32,110,111,110,45,85,110,105,120,32,102,105,108,101,32,115,121,115,116,101,109,115,46>>]}]}]},{p,[],[<<84,121,112,105,99,97,108,32,101,114,114,111,114,32,114,101,97,115,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<101,97,99,99,101,115>>]}]},{dd,[],[{p,[],[<<77,105,115,115,105,110,103,32,115,101,97,114,99,104,32,112,101,114,109,105,115,115,105,111,110,32,102,111,114,32,111,110,101,32,111,102,32,116,104,101,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,102,105,108,101,46>>]}]},{dt,[],[{code,[],[<<101,110,111,101,110,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46>>]}]},{dt,[],[{code,[],[<<101,110,111,116,100,105,114>>]}]},{dd,[],[{p,[],[<<65,32,99,111,109,112,111,110,101,110,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,46,32,79,110,32,115,111,109,101,32,112,108,97,116,102,111,114,109,115,44,32>>,{code,[],[<<101,110,111,101,110,116>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,105,110,115,116,101,97,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,107,101,114,110,101,108,47,100,111,99,47,115,114,99,47,102,105,108,101,46,120,109,108,35,76,50,48,51,52>>,signature => [{attribute,{372,2},spec,{{write_file_info,2},[{type,{372,22},bounded_fun,[{type,{372,22},'fun',[{type,{372,22},product,[{var,{372,23},'Filename'},{var,{372,33},'FileInfo'}]},{type,{372,46},union,[{atom,{372,46},ok},{type,{372,51},tuple,[{atom,{372,52},error},{var,{372,59},'Reason'}]}]}]},[{type,{373,7},constraint,[{atom,{373,7},is_subtype},[{var,{373,7},'Filename'},{user_type,{373,19},name_all,[]}]]},{type,{374,7},constraint,[{atom,{374,7},is_subtype},[{var,{374,7},'FileInfo'},{user_type,{374,19},file_info,[]}]]},{type,{375,7},constraint,[{atom,{375,7},is_subtype},[{var,{375,7},'Reason'},{type,{375,17},union,[{user_type,{375,17},posix,[]},{atom,{375,27},badarg}]}]]}]]}]}}],since => <<79,84,80,32,82,49,53,66>>}},{{type,deep_list,0},[{file,[102,105,108,101,46,101,114,108]},{location,101}],[<<45,116,121,112,101,32,100,101,101,112,95,108,105,115,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{101,2},type,{deep_list,{type,{101,22},list,[{type,{101,23},union,[{type,{101,23},char,[]},{type,{101,32},atom,[]},{user_type,{101,41},deep_list,[]}]}]},[]}}]}},{{type,fd,0},[{file,[102,105,108,101,46,101,114,108]},{location,87}],[<<102,100,40,41>>],#{<<101,110>> => [{p,[],[<<65,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,114,101,112,114,101,115,101,110,116,105,110,103,32,97,32,102,105,108,101,32,111,112,101,110,101,100,32,105,110,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,114,97,119>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<114,97,119>>]}]},<<32,109,111,100,101,46>>]}]},#{signature => [{attribute,{87,2},type,{fd,{type,{87,22},record,[{atom,{87,23},file_descriptor}]},[]}}]}},{{type,filename,0},[{file,[102,105,108,101,46,101,114,108]},{location,84}],[<<45,116,121,112,101,32,102,105,108,101,110,97,109,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32,97,108,115,111,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<110,97,109,101,95,97,108,108,40,41>>]}]},<<32,116,121,112,101,46>>]}]},#{signature => [{attribute,{84,2},type,{filename,{type,{84,22},string,[]},[]}}]}},{{type,filename_all,0},[{file,[102,105,108,101,46,101,114,108]},{location,85}],[<<45,116,121,112,101,32,102,105,108,101,110,97,109,101,95,97,108,108,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<83,101,101,32,97,108,115,111,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<110,97,109,101,95,97,108,108,40,41>>]}]},<<32,116,121,112,101,46>>]}]},#{signature => [{attribute,{85,2},type,{filename_all,{type,{85,25},union,[{type,{85,25},string,[]},{type,{85,36},binary,[]}]},[]}}]}},{{type,io_device,0},[{file,[102,105,108,101,46,101,114,108]},{location,88}],[<<45,116,121,112,101,32,105,111,95,100,101,118,105,99,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,115,32,114,101,116,117,114,110,101,100,32,98,121,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,111,112,101,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<111,112,101,110,47,50>>]}]},<<59,32>>,{code,[],[<<112,105,100,40,41>>]},<<32,105,115,32,97,32,112,114,111,99,101,115,115,32,104,97,110,100,108,105,110,103,32,73,47,79,45,112,114,111,116,111,99,111,108,115,46>>]}]},#{signature => [{attribute,{88,2},type,{io_device,{type,{88,22},union,[{type,{88,22},pid,[]},{user_type,{88,30},fd,[]}]},[]}}]}},{{type,name,0},[{file,[102,105,108,101,46,101,114,108]},{location,102}],[<<45,116,121,112,101,32,110,97,109,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<73,102,32,86,77,32,105,115,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,44,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<32,97,110,100,32>>,{code,[],[<<99,104,97,114,40,41>>]},<<32,97,114,101,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,62,32,50,53,53,46,32,83,101,101,32,97,108,115,111,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,111,102,32,116,104,101,32>>,{a,[{href,<<107,101,114,110,101,108,58,102,105,108,101,35,110,97,109,101,95,97,108,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,116,121,112,101>>}],[{code,[],[<<110,97,109,101,95,97,108,108,40,41>>]}]},<<32,116,121,112,101,46>>]}]},#{signature => [{attribute,{102,2},type,{name,{type,{102,22},union,[{type,{102,22},string,[]},{type,{102,33},atom,[]},{user_type,{102,42},deep_list,[]}]},[]}}]}},{{type,name_all,0},[{file,[102,105,108,101,46,101,114,108]},{location,103}],[<<45,116,121,112,101,32,110,97,109,101,95,97,108,108,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<73,102,32,86,77,32,105,115,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,44,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,97,108,108,111,119,101,100,32,116,111,32,98,101,32,62,32,50,53,53,46,32>>,{code,[],[<<82,97,119,70,105,108,101,110,97,109,101>>]},<<32,105,115,32,97,32,102,105,108,101,110,97,109,101,32,110,111,116,32,115,117,98,106,101,99,116,32,116,111,32,85,110,105,99,111,100,101,32,116,114,97,110,115,108,97,116,105,111,110,44,32,109,101,97,110,105,110,103,32,116,104,97,116,32,105,116,32,99,97,110,32,99,111,110,116,97,105,110,32,99,104,97,114,97,99,116,101,114,115,32,110,111,116,32,99,111,110,102,111,114,109,105,110,103,32,116,111,32,116,104,101,32,85,110,105,99,111,100,101,32,101,110,99,111,100,105,110,103,32,101,120,112,101,99,116,101,100,32,102,114,111,109,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,40,116,104,97,116,32,105,115,44,32,110,111,110,45,85,84,70,45,56,32,99,104,97,114,97,99,116,101,114,115,32,97,108,116,104,111,117,103,104,32,116,104,101,32,86,77,32,105,115,32,115,116,97,114,116,101,100,32,105,110,32,85,110,105,99,111,100,101,32,102,105,108,101,110,97,109,101,32,109,111,100,101,41,46,32,78,117,108,108,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,116,101,103,101,114,32,118,97,108,117,101,32,122,101,114,111,41,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,97,108,108,111,119,101,100,32,105,110,32,102,105,108,101,110,97,109,101,115,32,40,110,111,116,32,101,118,101,110,32,97,116,32,116,104,101,32,101,110,100,41,46>>]}]},#{signature => [{attribute,{103,2},type,{name_all,{type,{103,22},union,[{type,{103,22},string,[]},{type,{103,33},atom,[]},{user_type,{103,42},deep_list,[]},{ann_type,{103,57},[{var,{103,57},'RawFilename'},{type,{103,72},binary,[]}]}]},[]}}]}},{{type,posix,0},[{file,[102,105,108,101,46,101,114,108]},{location,104}],[<<45,116,121,112,101,32,112,111,115,105,120,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32,97,116,111,109,32,116,104,97,116,32,105,115,32,110,97,109,101,100,32,102,114,111,109,32,116,104,101,32,80,79,83,73,88,32,101,114,114,111,114,32,99,111,100,101,115,32,117,115,101,100,32,105,110,32,85,110,105,120,44,32,97,110,100,32,105,110,32,116,104,101,32,114,117,110,116,105,109,101,32,108,105,98,114,97,114,105,101,115,32,111,102,32,109,111,115,116,32,67,32,99,111,109,112,105,108,101,114,115,46>>]}]},#{signature => [{attribute,{104,2},type,{posix,{type,{105,9},union,[{atom,{105,9},eacces},{atom,{105,20},eagain},{atom,{106,9},ebadf},{atom,{106,19},ebadmsg},{atom,{106,31},ebusy},{atom,{107,9},edeadlk},{atom,{107,21},edeadlock},{atom,{107,35},edquot},{atom,{108,9},eexist},{atom,{109,9},efault},{atom,{109,20},efbig},{atom,{109,30},eftype},{atom,{110,9},eintr},{atom,{110,19},einval},{atom,{110,30},eio},{atom,{110,38},eisdir},{atom,{111,9},eloop},{atom,{112,9},emfile},{atom,{112,20},emlink},{atom,{112,31},emultihop},{atom,{113,9},enametoolong},{atom,{113,26},enfile},{atom,{114,9},enobufs},{atom,{114,21},enodev},{atom,{114,32},enolck},{atom,{114,43},enolink},{atom,{114,55},enoent},{atom,{115,9},enomem},{atom,{115,20},enospc},{atom,{115,31},enosr},{atom,{115,41},enostr},{atom,{115,52},enosys},{atom,{116,9},enotblk},{atom,{116,21},enotdir},{atom,{116,33},enotsup},{atom,{116,45},enxio},{atom,{117,9},eopnotsupp},{atom,{117,24},eoverflow},{atom,{118,9},eperm},{atom,{118,19},epipe},{atom,{119,9},erange},{atom,{119,20},erofs},{atom,{120,9},espipe},{atom,{120,21},esrch},{atom,{120,32},estale},{atom,{121,9},etxtbsy},{atom,{122,9},exdev}]},[]}}]}},{{type,date_time,0},[{file,[102,105,108,101,46,101,114,108]},{location,123}],[<<45,116,121,112,101,32,100,97,116,101,95,116,105,109,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<77,117,115,116,32,100,101,110,111,116,101,32,97,32,118,97,108,105,100,32,100,97,116,101,32,97,110,100,32,116,105,109,101,46>>]}]},#{signature => [{attribute,{123,2},type,{date_time,{remote_type,{123,22},[{atom,{123,22},calendar},{atom,{123,31},datetime},[]]},[]}}]}},{{type,file_info,0},[{file,[102,105,108,101,46,101,114,108]},{location,86}],[<<45,116,121,112,101,32,102,105,108,101,95,105,110,102,111,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{86,2},type,{file_info,{type,{86,22},record,[{atom,{86,23},file_info}]},[]}}]}},{{type,location,0},[{file,[102,105,108,101,46,101,114,108]},{location,89}],[<<45,116,121,112,101,32,108,111,99,97,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{89,2},type,{location,{type,{89,22},union,[{type,{89,22},integer,[]},{type,{89,34},tuple,[{atom,{89,35},bof},{ann_type,{89,42},[{var,{89,42},'Offset'},{type,{89,52},integer,[]}]}]},{type,{90,22},tuple,[{atom,{90,23},cur},{ann_type,{90,30},[{var,{90,30},'Offset'},{type,{90,40},integer,[]}]}]},{type,{91,8},tuple,[{atom,{91,9},eof},{ann_type,{91,16},[{var,{91,16},'Offset'},{type,{91,26},integer,[]}]}]},{atom,{91,39},bof},{atom,{91,47},cur},{atom,{91,55},eof}]},[]}}]}},{{type,mode,0},[{file,[102,105,108,101,46,101,114,108]},{location,92}],[<<45,116,121,112,101,32,109,111,100,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{92,2},type,{mode,{type,{92,22},union,[{atom,{92,22},read},{atom,{92,31},write},{atom,{92,41},append},{atom,{93,22},exclusive},{atom,{93,36},raw},{atom,{93,44},binary},{type,{94,8},tuple,[{atom,{94,9},delayed_write},{ann_type,{95,23},[{var,{95,23},'Size'},{type,{95,31},non_neg_integer,[]}]},{ann_type,{96,23},[{var,{96,23},'Delay'},{type,{96,32},non_neg_integer,[]}]}]},{atom,{97,8},delayed_write},{type,{97,26},tuple,[{atom,{97,27},read_ahead},{ann_type,{97,41},[{var,{97,41},'Size'},{type,{97,49},pos_integer,[]}]}]},{atom,{98,8},read_ahead},{atom,{98,23},compressed},{type,{99,8},tuple,[{atom,{99,9},encoding},{remote_type,{99,21},[{atom,{99,21},unicode},{atom,{99,29},encoding},[]]}]},{atom,{100,8},sync}]},[]}}]}},{{type,file_info_option,0},[{file,[102,105,108,101,46,101,114,108]},{location,129}],[<<45,116,121,112,101,32,102,105,108,101,95,105,110,102,111,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{129,2},type,{file_info_option,{type,{129,29},union,[{type,{129,29},tuple,[{atom,{129,30},time},{atom,{129,38},local}]},{type,{129,49},tuple,[{atom,{129,50},time},{atom,{129,58},universal}]},{type,{130,8},tuple,[{atom,{130,9},time},{atom,{130,17},posix}]},{atom,{130,28},raw}]},[]}}]}}]}. \ No newline at end of file
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_altname_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_altname_1_func.txt
new file mode 100644
index 0000000000..7082445a78
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_altname_1_func.txt
@@ -0,0 +1,5 @@
+
+  altname/1
+
+ The documentation for altname/1 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_copy_opened_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_copy_opened_3_func.txt
new file mode 100644
index 0000000000..142c86eff4
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_copy_opened_3_func.txt
@@ -0,0 +1,6 @@
+
+  copy_opened/3
+
+ The documentation for copy_opened/3 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_1_func.txt
index 88be4438f6..5b66b4ba67 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_1_func.txt
@@ -2,6 +2,9 @@
-spec delete(Filename) -> ok | {error, Reason}
 when Filename :: name_all(), Reason :: posix() | badarg.
+Since:
+ OTP 24.0
+
Types:
-type delete_option() :: raw.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_2_func.txt
index 53c3185027..d8cc8befc7 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_delete_2_func.txt
@@ -5,6 +5,9 @@
 Opts :: [delete_option()],
 Reason :: posix() | badarg.
+Since:
+ OTP 24.0
+
Types:
-type delete_option() :: raw.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_3_func.txt
new file mode 100644
index 0000000000..85a88fa38f
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_3_func.txt
@@ -0,0 +1,6 @@
+
+  ipread_s32bu_p32bu/3
+
+ The documentation for ipread_s32bu_p32bu/3 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_int_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_int_3_func.txt
new file mode 100644
index 0000000000..de346114dd
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_ipread_s32bu_p32bu_int_3_func.txt
@@ -0,0 +1,6 @@
+
+  ipread_s32bu_p32bu_int/3
+
+ The documentation for ipread_s32bu_p32bu_int/3 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_open_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_open_2_func.txt
index 24ca2b24d6..b89e725d7b 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_open_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_open_2_func.txt
@@ -217,6 +217,15 @@
returned from this call can be used as an argument to the I/O
functions (see io(3)).
+ Warning:
+ While this function can be used to open any file, we recommend
+ against using it for NFS-mounted files, FIFOs, devices, or
+ similar since they can cause IO threads to hang forever.
+
+ If your application needs to interact with these kinds of
+ files we recommend breaking out those parts to a port program
+ instead.
+
Note:
In previous versions of file, modes were specified as one of
the atoms read, write, or read_write instead of a list.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_path_eval_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_path_eval_3_func.txt
new file mode 100644
index 0000000000..828e8cf9f8
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_path_eval_3_func.txt
@@ -0,0 +1,5 @@
+
+  path_eval/3
+
+ The documentation for path_eval/3 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_read_file_info_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_read_file_info_1_func.txt
new file mode 100644
index 0000000000..88576426f9
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_read_file_info_1_func.txt
@@ -0,0 +1,6 @@
+
+  raw_read_file_info/1
+
+ The documentation for raw_read_file_info/1 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_write_file_info_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_write_file_info_2_func.txt
new file mode 100644
index 0000000000..5b9650666c
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_raw_write_file_info_2_func.txt
@@ -0,0 +1,6 @@
+
+  raw_write_file_info/2
+
+ The documentation for raw_write_file_info/2 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_1_func.txt
index d997bdf4f1..c5d25d6581 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_1_func.txt
@@ -50,8 +50,9 @@
size = integer() >= 0:
Size of file in bytes.
- type = device | directory | other | regular | symlink:
- The type of the file.
+ type = device | directory | other | regular:
+ The type of the file. Can also contain symlink when returned
+ from read_link_info/1,2.
access = read | write | read_write | none:
The current system access to the file.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_2_func.txt
index c8ad4f7215..53a644dea1 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_read_file_info_2_func.txt
@@ -51,8 +51,9 @@
size = integer() >= 0:
Size of file in bytes.
- type = device | directory | other | regular | symlink:
- The type of the file.
+ type = device | directory | other | regular:
+ The type of the file. Can also contain symlink when returned
+ from read_link_info/1,2.
access = read | write | read_write | none:
The current system access to the file.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_2_func.txt
index d22adad04f..0ccfaf7e01 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_2_func.txt
@@ -2,7 +2,13 @@
-spec sendfile(Filename, Socket) ->
 {ok, non_neg_integer()} |
 {error, inet:posix() | closed | badarg | not_owner}
-  when Filename :: name_all(), Socket :: inet:socket().
+  when
+  Filename :: name_all(),
+  Socket ::
+  inet:socket() |
+  socket:socket() |
+  fun((iolist()) ->
+  ok | {error, inet:posix() | closed}).
Since:
OTP R15B
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_5_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_5_func.txt
index ae2cc29578..991f012cb5 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_5_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_file_sendfile_5_func.txt
@@ -4,7 +4,11 @@
 {error, inet:posix() | closed | badarg | not_owner}
 when
 RawFile :: fd(),
-  Socket :: inet:socket(),
+  Socket ::
+  inet:socket() |
+  socket:socket() |
+  fun((iolist()) ->
+  ok | {error, inet:posix() | closed}),
 Offset :: non_neg_integer(),
 Bytes :: non_neg_integer(),
 Opts :: [sendfile_option()].
@@ -23,7 +27,8 @@
The file used must be opened using the raw flag, and the process
calling sendfile must be the controlling process of the socket.
- See gen_tcp:controlling_process/2.
+ See gen_tcp:controlling_process/2 or module socket's level 
+ otp socket option controlling_process.
If the OS used does not support non-blocking sendfile, an Erlang
fallback using read/2 and gen_tcp:send/2 is used.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv.txt
new file mode 100644
index 0000000000..2392dee3c3
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv.txt
@@ -0,0 +1,5 @@
+
+ user_drv
+
+ The documentation for user_drv is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_cb.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_cb.txt
new file mode 100644
index 0000000000..d6ddedfc1a
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_cb.txt
@@ -0,0 +1,3 @@
+ user_drv
+
+There are no callbacks in this module
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_interfaces_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_interfaces_1_func.txt
new file mode 100644
index 0000000000..f693b67617
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_interfaces_1_func.txt
@@ -0,0 +1,6 @@
+
+  interfaces/1
+
+ The documentation for interfaces/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_2_func.txt
new file mode 100644
index 0000000000..a9c626e643
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_2_func.txt
@@ -0,0 +1,5 @@
+
+  server/2
+
+ The documentation for server/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_3_func.txt
new file mode 100644
index 0000000000..372628b879
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_server_3_func.txt
@@ -0,0 +1,5 @@
+
+  server/3
+
+ The documentation for server/3 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_0_func.txt
new file mode 100644
index 0000000000..7b93442257
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_0_func.txt
@@ -0,0 +1,5 @@
+
+  start/0
+
+ The documentation for start/0 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_1_func.txt
new file mode 100644
index 0000000000..123e70566a
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_1_func.txt
@@ -0,0 +1,5 @@
+
+  start/1
+
+ The documentation for start/1 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_2_func.txt
new file mode 100644
index 0000000000..cb801a2351
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_2_func.txt
@@ -0,0 +1,5 @@
+
+  start/2
+
+ The documentation for start/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_3_func.txt
new file mode 100644
index 0000000000..91d7dae25a
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_start_3_func.txt
@@ -0,0 +1,5 @@
+
+  start/3
+
+ The documentation for start/3 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_type.txt b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_type.txt
new file mode 100644
index 0000000000..5d7d0ce012
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/kernel_user_drv_type.txt
@@ -0,0 +1,3 @@
+ user_drv
+
+There are no types in this module
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/re.docs_v1 b/lib/stdlib/test/shell_docs_SUITE_data/re.docs_v1
index 3d2107fdcf..b4a7ae3e4d 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/re.docs_v1
+++ b/lib/stdlib/test/shell_docs_SUITE_data/re.docs_v1
@@ -1 +1 @@
-{docs_v1,[{file,[114,101,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<84,104,105,115,32,109,111,100,117,108,101,32,99,111,110,116,97,105,110,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,32,102,111,114,32,115,116,114,105,110,103,115,32,97,110,100,32,98,105,110,97,114,105,101,115,46>>]},{p,[],[<<84,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,101,103,101,120,112,95,115,121,110,116,97,120>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110>>]},<<32,115,121,110,116,97,120,32,97,110,100,32,115,101,109,97,110,116,105,99,115,32,114,101,115,101,109,98,108,101,32,116,104,97,116,32,111,102,32,80,101,114,108,46>>]},{p,[],[<<84,104,101,32,109,97,116,99,104,105,110,103,32,97,108,103,111,114,105,116,104,109,115,32,111,102,32,116,104,101,32,108,105,98,114,97,114,121,32,97,114,101,32,98,97,115,101,100,32,111,110,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,44,32,98,117,116,32,110,111,116,32,97,108,108,32,111,102,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,32,105,115,32,105,110,116,101,114,102,97,99,101,100,32,97,110,100,32,115,111,109,101,32,112,97,114,116,115,32,111,102,32,116,104,101,32,108,105,98,114,97,114,121,32,103,111,32,98,101,121,111,110,100,32,119,104,97,116,32,80,67,82,69,32,111,102,102,101,114,115,46,32,67,117,114,114,101,110,116,108,121,32,80,67,82,69,32,118,101,114,115,105,111,110,32,56,46,52,48,32,40,114,101,108,101,97,115,101,32,100,97,116,101,32,50,48,49,55,45,48,49,45,49,49,41,32,105,115,32,117,115,101,100,46,32,84,104,101,32,115,101,99,116,105,111,110,115,32,111,102,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,116,104,97,116,32,97,114,101,32,114,101,108,101,118,97,110,116,32,116,111,32,116,104,105,115,32,109,111,100,117,108,101,32,97,114,101,32,105,110,99,108,117,100,101,100,32,104,101,114,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,108,105,116,101,114,97,108,32,115,121,110,116,97,120,32,102,111,114,32,115,116,114,105,110,103,115,32,117,115,101,115,32,116,104,101,32,34,92,34,32,40,98,97,99,107,115,108,97,115,104,41,32,99,104,97,114,97,99,116,101,114,32,97,115,32,97,110,32,101,115,99,97,112,101,32,99,111,100,101,46,32,89,111,117,32,110,101,101,100,32,116,111,32,101,115,99,97,112,101,32,98,97,99,107,115,108,97,115,104,101,115,32,105,110,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,115,44,32,98,111,116,104,32,105,110,32,121,111,117,114,32,99,111,100,101,32,97,110,100,32,105,110,32,116,104,101,32,115,104,101,108,108,44,32,119,105,116,104,32,97,110,32,101,120,116,114,97,32,98,97,99,107,115,108,97,115,104,44,32,116,104,97,116,32,105,115,44,32,34,92,92,34,46>>]}]},{a,[{id,<<114,101,103,101,120,112,95,115,121,110,116,97,120>>}],[]},{h2,[],[<<80,101,114,108,45,76,105,107,101,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,83,121,110,116,97,120>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,32,99,111,110,116,97,105,110,32,114,101,102,101,114,101,110,99,101,32,109,97,116,101,114,105,97,108,32,102,111,114,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,117,115,101,100,32,98,121,32,116,104,105,115,32,109,111,100,117,108,101,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,32,119,105,116,104,32,99,104,97,110,103,101,115,32,119,104,101,114,101,32,116,104,105,115,32,109,111,100,117,108,101,32,98,101,104,97,118,101,115,32,100,105,102,102,101,114,101,110,116,108,121,32,116,111,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,46>>]},{a,[{id,<<114,101,103,101,120,112,95,115,121,110,116,97,120,95,100,101,116,97,105,108,115>>}],[]},{h2,[],[<<80,67,82,69,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,68,101,116,97,105,108,115>>]},{p,[],[<<84,104,101,32,115,121,110,116,97,120,32,97,110,100,32,115,101,109,97,110,116,105,99,115,32,111,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,67,82,69,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,100,101,116,97,105,108,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,46,32,80,101,114,108,39,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,105,116,115,32,111,119,110,32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,32,97,110,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,103,101,110,101,114,97,108,32,97,114,101,32,99,111,118,101,114,101,100,32,105,110,32,109,97,110,121,32,98,111,111,107,115,44,32,115,111,109,101,32,119,105,116,104,32,99,111,112,105,111,117,115,32,101,120,97,109,112,108,101,115,46,32,74,101,102,102,114,101,121,32,70,114,105,101,100,108,39,115,32,34,77,97,115,116,101,114,105,110,103,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,115,34,44,32,112,117,98,108,105,115,104,101,100,32,98,121,32,79,39,82,101,105,108,108,121,44,32,99,111,118,101,114,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,103,114,101,97,116,32,100,101,116,97,105,108,46,32,84,104,105,115,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,80,67,82,69,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,105,110,116,101,110,100,101,100,32,97,115,32,114,101,102,101,114,101,110,99,101,32,109,97,116,101,114,105,97,108,46>>]},{p,[],[<<84,104,101,32,114,101,102,101,114,101,110,99,101,32,109,97,116,101,114,105,97,108,32,105,115,32,100,105,118,105,100,101,100,32,105,110,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,112,101,99,105,97,108,32,83,116,97,114,116,45,111,102,45,80,97,116,116,101,114,110,32,73,116,101,109,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,104,97,114,97,99,116,101,114,115,32,97,110,100,32,77,101,116,97,99,104,97,114,97,99,116,101,114,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<66,97,99,107,115,108,97,115,104>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,105,114,99,117,109,102,108,101,120,32,97,110,100,32,68,111,108,108,97,114>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<70,117,108,108,32,83,116,111,112,32,40,80,101,114,105,111,100,44,32,68,111,116,41,32,97,110,100,32,92,78>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,54>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<77,97,116,99,104,105,110,103,32,97,32,83,105,110,103,108,101,32,68,97,116,97,32,85,110,105,116>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,55>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,113,117,97,114,101,32,66,114,97,99,107,101,116,115,32,97,110,100,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,56>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<80,111,115,105,120,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,57>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<86,101,114,116,105,99,97,108,32,66,97,114>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<73,110,116,101,114,110,97,108,32,79,112,116,105,111,110,32,83,101,116,116,105,110,103>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,97,109,101,100,32,83,117,98,112,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<82,101,112,101,116,105,116,105,111,110>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<65,116,111,109,105,99,32,71,114,111,117,112,105,110,103,32,97,110,100,32,80,111,115,115,101,115,115,105,118,101,32,81,117,97,110,116,105,102,105,101,114,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,54>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,55>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<65,115,115,101,114,116,105,111,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,56>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,111,110,100,105,116,105,111,110,97,108,32,83,117,98,112,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,57>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,111,109,109,101,110,116,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<82,101,99,117,114,115,105,118,101,32,80,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115,32,97,115,32,83,117,98,114,111,117,116,105,110,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<79,110,105,103,117,114,117,109,97,32,83,117,98,114,111,117,116,105,110,101,32,83,121,110,116,97,120>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,67,111,110,116,114,111,108>>]}]}]},{a,[{id,<<115,101,99,116,49>>}],[]},{h2,[],[<<83,112,101,99,105,97,108,32,83,116,97,114,116,45,111,102,45,80,97,116,116,101,114,110,32,73,116,101,109,115>>]},{p,[],[<<83,111,109,101,32,111,112,116,105,111,110,115,32,116,104,97,116,32,99,97,110,32,98,101,32,112,97,115,115,101,100,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,115,112,101,99,105,97,108,32,105,116,101,109,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,46,32,84,104,101,115,101,32,97,114,101,32,110,111,116,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,44,32,98,117,116,32,97,114,101,32,112,114,111,118,105,100,101,100,32,116,111,32,109,97,107,101,32,116,104,101,115,101,32,111,112,116,105,111,110,115,32,97,99,99,101,115,115,105,98,108,101,32,116,111,32,112,97,116,116,101,114,110,32,119,114,105,116,101,114,115,32,119,104,111,32,97,114,101,32,110,111,116,32,97,98,108,101,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,112,114,111,103,114,97,109,32,116,104,97,116,32,112,114,111,99,101,115,115,101,115,32,116,104,101,32,112,97,116,116,101,114,110,46,32,65,110,121,32,110,117,109,98,101,114,32,111,102,32,116,104,101,115,101,32,105,116,101,109,115,32,99,97,110,32,97,112,112,101,97,114,44,32,98,117,116,32,116,104,101,121,32,109,117,115,116,32,97,108,108,32,98,101,32,116,111,103,101,116,104,101,114,32,114,105,103,104,116,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,115,116,114,105,110,103,44,32,97,110,100,32,116,104,101,32,108,101,116,116,101,114,115,32,109,117,115,116,32,98,101,32,105,110,32,117,112,112,101,114,32,99,97,115,101,46>>]},{p,[],[{em,[],[<<85,84,70,32,83,117,112,112,111,114,116>>]}]},{p,[],[<<85,110,105,99,111,100,101,32,115,117,112,112,111,114,116,32,105,115,32,98,97,115,105,99,97,108,108,121,32,85,84,70,45,56,32,98,97,115,101,100,46,32,84,111,32,117,115,101,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,44,32,121,111,117,32,101,105,116,104,101,114,32,99,97,108,108,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,111,114,32,116,104,101,32,112,97,116,116,101,114,110,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,111,110,101,32,111,102,32,116,104,101,115,101,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,115,58>>]},{pre,[],[{code,[],[<<40,42,85,84,70,56,41,10,40,42,85,84,70,41>>]}]},{p,[],[<<66,111,116,104,32,111,112,116,105,111,110,115,32,103,105,118,101,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,44,32,116,104,101,32,105,110,112,117,116,32,115,116,114,105,110,103,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,85,84,70,45,56,46,32,78,111,116,105,99,101,32,116,104,97,116,32,119,105,116,104,32,116,104,101,115,101,32,105,110,115,116,114,117,99,116,105,111,110,115,44,32,116,104,101,32,97,117,116,111,109,97,116,105,99,32,99,111,110,118,101,114,115,105,111,110,32,111,102,32,108,105,115,116,115,32,116,111,32,85,84,70,45,56,32,105,115,32,110,111,116,32,112,101,114,102,111,114,109,101,100,32,98,121,32,116,104,101,32>>,{code,[],[<<114,101>>]},<<32,102,117,110,99,116,105,111,110,115,46,32,84,104,101,114,101,102,111,114,101,44,32,117,115,105,110,103,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,105,115,32,110,111,116,32,114,101,99,111,109,109,101,110,100,101,100,46,32,65,100,100,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,119,104,101,110,32,114,117,110,110,105,110,103,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,105,110,115,116,101,97,100,46>>]},{p,[],[<<83,111,109,101,32,97,112,112,108,105,99,97,116,105,111,110,115,32,116,104,97,116,32,97,108,108,111,119,32,116,104,101,105,114,32,117,115,101,114,115,32,116,111,32,115,117,112,112,108,121,32,112,97,116,116,101,114,110,115,32,99,97,110,32,119,105,115,104,32,116,111,32,114,101,115,116,114,105,99,116,32,116,104,101,109,32,116,111,32,110,111,110,45,85,84,70,32,100,97,116,97,32,102,111,114,32,115,101,99,117,114,105,116,121,32,114,101,97,115,111,110,115,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<110,101,118,101,114,95,117,116,102>>]},<<32,105,115,32,115,101,116,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,44,32,40,42,85,84,70,41,44,32,97,110,100,32,115,111,32,111,110,44,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,44,32,97,110,100,32,116,104,101,105,114,32,97,112,112,101,97,114,97,110,99,101,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,46>>]},{p,[],[{em,[],[<<85,110,105,99,111,100,101,32,80,114,111,112,101,114,116,121,32,83,117,112,112,111,114,116>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,97,110,111,116,104,101,114,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,32,116,104,97,116,32,99,97,110,32,97,112,112,101,97,114,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,42,85,67,80,41>>]}]},{p,[],[<<84,104,105,115,32,104,97,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<58,32,105,116,32,99,97,117,115,101,115,32,115,101,113,117,101,110,99,101,115,32,115,117,99,104,32,97,115,32,92,100,32,97,110,100,32,92,119,32,116,111,32,117,115,101,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,116,111,32,100,101,116,101,114,109,105,110,101,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,44,32,105,110,115,116,101,97,100,32,111,102,32,114,101,99,111,103,110,105,122,105,110,103,32,111,110,108,121,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,99,111,100,101,115,32,60,32,50,53,54,32,116,104,114,111,117,103,104,32,97,32,108,111,111,107,117,112,32,116,97,98,108,101,46>>]},{p,[],[{em,[],[<<68,105,115,97,98,108,105,110,103,32,83,116,97,114,116,117,112,32,79,112,116,105,109,105,122,97,116,105,111,110,115>>]}]},{p,[],[<<73,102,32,97,32,112,97,116,116,101,114,110,32,115,116,97,114,116,115,32,119,105,116,104,32>>,{code,[],[<<40,42,78,79,95,83,84,65,82,84,95,79,80,84,41>>]},<<44,32,105,116,32,104,97,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]},<<32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46>>]},{p,[],[{em,[],[<<78,101,119,108,105,110,101,32,67,111,110,118,101,110,116,105,111,110,115>>]}]},{a,[{id,<<110,101,119,108,105,110,101,95,99,111,110,118,101,110,116,105,111,110,115>>}],[]},{p,[],[<<80,67,82,69,32,115,117,112,112,111,114,116,115,32,102,105,118,101,32,99,111,110,118,101,110,116,105,111,110,115,32,102,111,114,32,105,110,100,105,99,97,116,105,110,103,32,108,105,110,101,32,98,114,101,97,107,115,32,105,110,32,115,116,114,105,110,103,115,58,32,97,32,115,105,110,103,108,101,32,67,82,32,40,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,41,32,99,104,97,114,97,99,116,101,114,44,32,97,32,115,105,110,103,108,101,32,76,70,32,40,108,105,110,101,32,102,101,101,100,41,32,99,104,97,114,97,99,116,101,114,44,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,44,32,97,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,112,114,101,99,101,100,105,110,103,44,32,97,110,100,32,97,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,46>>]},{p,[],[<<65,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,32,99,97,110,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,115,116,97,114,116,105,110,103,32,97,32,112,97,116,116,101,114,110,32,115,116,114,105,110,103,32,119,105,116,104,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,118,101,32,115,101,113,117,101,110,99,101,115,58>>]},{dl,[],[{dt,[],[<<40,42,67,82,41>>]},{dd,[],[<<67,97,114,114,105,97,103,101,32,114,101,116,117,114,110>>]},{dt,[],[<<40,42,76,70,41>>]},{dd,[],[<<76,105,110,101,32,102,101,101,100>>]},{dt,[],[<<40,42,67,82,76,70,41>>]},{dd,[],[<<62,67,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,102,111,108,108,111,119,101,100,32,98,121,32,108,105,110,101,32,102,101,101,100>>]},{dt,[],[<<40,42,65,78,89,67,82,76,70,41>>]},{dd,[],[<<65,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,97,98,111,118,101>>]},{dt,[],[<<40,42,65,78,89,41>>]},{dd,[],[<<65,108,108,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,115>>]}]},{p,[],[<<84,104,101,115,101,32,111,118,101,114,114,105,100,101,32,116,104,101,32,100,101,102,97,117,108,116,32,97,110,100,32,116,104,101,32,111,112,116,105,111,110,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,99,104,97,110,103,101,115,32,116,104,101,32,99,111,110,118,101,110,116,105,111,110,32,116,111,32,67,82,58>>]},{pre,[],[{code,[],[<<40,42,67,82,41,97,46,98>>]}]},{p,[],[<<84,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32>>,{code,[],[<<97,92,110,98>>]},<<44,32,97,115,32,76,70,32,105,115,32,110,111,32,108,111,110,103,101,114,32,97,32,110,101,119,108,105,110,101,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,111,102,32,116,104,101,109,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,32,108,97,115,116,32,111,110,101,32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,32,97,102,102,101,99,116,115,32,119,104,101,114,101,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,32,116,114,117,101,46,32,73,116,32,97,108,115,111,32,97,102,102,101,99,116,115,32,116,104,101,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,111,102,32,116,104,101,32,100,111,116,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,119,104,101,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,105,115,32,110,111,116,32,115,101,116,44,32,97,110,100,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,92,78,46,32,72,111,119,101,118,101,114,44,32,105,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,119,104,97,116,32,116,104,101,32,92,82,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,109,97,116,99,104,101,115,46,32,66,121,32,100,101,102,97,117,108,116,44,32,116,104,105,115,32,105,115,32,97,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,44,32,102,111,114,32,80,101,114,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,59,32,115,101,101,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,92,82,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,101,119,108,105,110,101,95,115,101,113,117,101,110,99,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,101,119,108,105,110,101,32,83,101,113,117,101,110,99,101,115>>]},<<46,32,65,32,99,104,97,110,103,101,32,111,102,32,116,104,101,32,92,82,32,115,101,116,116,105,110,103,32,99,97,110,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,97,32,99,104,97,110,103,101,32,111,102,32,116,104,101,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,46>>]},{p,[],[{em,[],[<<83,101,116,116,105,110,103,32,77,97,116,99,104,32,97,110,100,32,82,101,99,117,114,115,105,111,110,32,76,105,109,105,116,115>>]}]},{p,[],[<<84,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,99,97,110,32,115,101,116,32,97,32,108,105,109,105,116,32,111,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,116,104,101,32,105,110,116,101,114,110,97,108,32,109,97,116,99,104,40,41,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,97,110,100,32,111,110,32,116,104,101,32,109,97,120,105,109,117,109,32,100,101,112,116,104,32,111,102,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,115,46,32,84,104,101,115,101,32,102,97,99,105,108,105,116,105,101,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,116,111,32,99,97,116,99,104,32,114,117,110,97,119,97,121,32,109,97,116,99,104,101,115,32,116,104,97,116,32,97,114,101,32,112,114,111,118,111,107,101,100,32,98,121,32,112,97,116,116,101,114,110,115,32,119,105,116,104,32,104,117,103,101,32,109,97,116,99,104,105,110,103,32,116,114,101,101,115,32,40,97,32,116,121,112,105,99,97,108,32,101,120,97,109,112,108,101,32,105,115,32,97,32,112,97,116,116,101,114,110,32,119,105,116,104,32,110,101,115,116,101,100,32,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,115,41,32,97,110,100,32,116,111,32,97,118,111,105,100,32,114,117,110,110,105,110,103,32,111,117,116,32,111,102,32,115,121,115,116,101,109,32,115,116,97,99,107,32,98,121,32,116,111,111,32,109,117,99,104,32,114,101,99,117,114,115,105,111,110,46,32,87,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,108,105,109,105,116,115,32,105,115,32,114,101,97,99,104,101,100,44,32>>,{code,[],[<<112,99,114,101,95,101,120,101,99,40,41>>]},<<32,103,105,118,101,115,32,97,110,32,101,114,114,111,114,32,114,101,116,117,114,110,46,32,84,104,101,32,108,105,109,105,116,115,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,105,116,101,109,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{pre,[],[{code,[],[<<40,42,76,73,77,73,84,95,77,65,84,67,72,61,100,41,10,40,42,76,73,77,73,84,95,82,69,67,85,82,83,73,79,78,61,100,41>>]}]},{p,[],[<<72,101,114,101,32,100,32,105,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,100,101,99,105,109,97,108,32,100,105,103,105,116,115,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,115,101,116,116,105,110,103,32,109,117,115,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,116,104,101,32,118,97,108,117,101,32,115,101,116,32,98,121,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,102,111,114,32,105,116,32,116,111,32,104,97,118,101,32,97,110,121,32,101,102,102,101,99,116,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,112,97,116,116,101,114,110,32,119,114,105,116,101,114,32,99,97,110,32,108,111,119,101,114,32,116,104,101,32,108,105,109,105,116,32,115,101,116,32,98,121,32,116,104,101,32,112,114,111,103,114,97,109,109,101,114,44,32,98,117,116,32,110,111,116,32,114,97,105,115,101,32,105,116,46,32,73,102,32,116,104,101,114,101,32,105,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,101,116,116,105,110,103,32,111,102,32,111,110,101,32,111,102,32,116,104,101,115,101,32,108,105,109,105,116,115,44,32,116,104,101,32,108,111,119,101,114,32,118,97,108,117,101,32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,102,111,114,32,98,111,116,104,32,116,104,101,32,108,105,109,105,116,115,32,105,115,32,49,48,44,48,48,48,44,48,48,48,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,86,77,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,108,105,109,105,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,115,116,97,99,107,32,100,101,112,116,104,32,111,102,32,116,104,101,32,86,77,44,32,97,115,32,80,67,82,69,32,102,111,114,32,69,114,108,97,110,103,32,105,115,32,99,111,109,112,105,108,101,100,32,105,110,32,115,117,99,104,32,97,32,119,97,121,32,116,104,97,116,32,116,104,101,32,109,97,116,99,104,32,102,117,110,99,116,105,111,110,32,110,101,118,101,114,32,100,111,101,115,32,114,101,99,117,114,115,105,111,110,32,111,110,32,116,104,101,32,67,32,115,116,97,99,107,46>>]},{p,[],[<<78,111,116,101,32,116,104,97,116,32>>,{code,[],[<<76,73,77,73,84,95,77,65,84,67,72>>]},<<32,97,110,100,32>>,{code,[],[<<76,73,77,73,84,95,82,69,67,85,82,83,73,79,78>>]},<<32,99,97,110,32,111,110,108,121,32,114,101,100,117,99,101,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,108,105,109,105,116,115,32,115,101,116,32,98,121,32,116,104,101,32,99,97,108,108,101,114,44,32,110,111,116,32,105,110,99,114,101,97,115,101,32,116,104,101,109,46>>]},{a,[{id,<<115,101,99,116,50>>}],[]},{h2,[],[<<67,104,97,114,97,99,116,101,114,115,32,97,110,100,32,77,101,116,97,99,104,97,114,97,99,116,101,114,115>>]},{p,[],[<<65,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,97,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,46,32,77,111,115,116,32,99,104,97,114,97,99,116,101,114,115,32,115,116,97,110,100,32,102,111,114,32,116,104,101,109,115,101,108,118,101,115,32,105,110,32,97,32,112,97,116,116,101,114,110,32,97,110,100,32,109,97,116,99,104,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,65,115,32,97,32,116,114,105,118,105,97,108,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,32,112,111,114,116,105,111,110,32,111,102,32,97,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,116,104,97,116,32,105,115,32,105,100,101,110,116,105,99,97,108,32,116,111,32,105,116,115,101,108,102,58>>]},{pre,[],[{code,[],[<<84,104,101,32,113,117,105,99,107,32,98,114,111,119,110,32,102,111,120>>]}]},{p,[],[<<87,104,101,110,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,115,112,101,99,105,102,105,101,100,32,40,111,112,116,105,111,110,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<41,44,32,108,101,116,116,101,114,115,32,97,114,101,32,109,97,116,99,104,101,100,32,105,110,100,101,112,101,110,100,101,110,116,108,121,32,111,102,32,99,97,115,101,46>>]},{p,[],[<<84,104,101,32,112,111,119,101,114,32,111,102,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,99,111,109,101,115,32,102,114,111,109,32,116,104,101,32,97,98,105,108,105,116,121,32,116,111,32,105,110,99,108,117,100,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,110,100,32,114,101,112,101,116,105,116,105,111,110,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,101,115,101,32,97,114,101,32,101,110,99,111,100,101,100,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,98,121,32,116,104,101,32,117,115,101,32,111,102,32>>,{em,[],[<<109,101,116,97,99,104,97,114,97,99,116,101,114,115>>]},<<44,32,119,104,105,99,104,32,100,111,32,110,111,116,32,115,116,97,110,100,32,102,111,114,32,116,104,101,109,115,101,108,118,101,115,32,98,117,116,32,105,110,115,116,101,97,100,32,97,114,101,32,105,110,116,101,114,112,114,101,116,101,100,32,105,110,32,115,111,109,101,32,115,112,101,99,105,97,108,32,119,97,121,46>>]},{p,[],[<<84,119,111,32,115,101,116,115,32,111,102,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,101,120,105,115,116,58,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,97,110,121,119,104,101,114,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,101,120,99,101,112,116,32,119,105,116,104,105,110,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,44,32,97,110,100,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,119,105,116,104,105,110,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,46,32,79,117,116,115,105,100,101,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,44,32,116,104,101,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<92>>]},{dd,[],[<<71,101,110,101,114,97,108,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,109,97,110,121,32,117,115,101,115>>]},{dt,[],[<<94>>]},{dd,[],[<<65,115,115,101,114,116,32,115,116,97,114,116,32,111,102,32,115,116,114,105,110,103,32,40,111,114,32,108,105,110,101,44,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,41>>]},{dt,[],[<<36>>]},{dd,[],[<<65,115,115,101,114,116,32,101,110,100,32,111,102,32,115,116,114,105,110,103,32,40,111,114,32,108,105,110,101,44,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,41>>]},{dt,[],[<<46>>]},{dd,[],[<<77,97,116,99,104,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,101,120,99,101,112,116,32,110,101,119,108,105,110,101,32,40,98,121,32,100,101,102,97,117,108,116,41>>]},{dt,[],[<<91>>]},{dd,[],[<<83,116,97,114,116,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,100,101,102,105,110,105,116,105,111,110>>]},{dt,[],[<<124>>]},{dd,[],[<<83,116,97,114,116,32,111,102,32,97,108,116,101,114,110,97,116,105,118,101,32,98,114,97,110,99,104>>]},{dt,[],[<<40>>]},{dd,[],[<<83,116,97,114,116,32,115,117,98,112,97,116,116,101,114,110>>]},{dt,[],[<<41>>]},{dd,[],[<<69,110,100,32,115,117,98,112,97,116,116,101,114,110>>]},{dt,[],[<<63>>]},{dd,[],[<<69,120,116,101,110,100,115,32,116,104,101,32,109,101,97,110,105,110,103,32,111,102,32,40,44,32,97,108,115,111,32,48,32,111,114,32,49,32,113,117,97,110,116,105,102,105,101,114,44,32,97,108,115,111,32,113,117,97,110,116,105,102,105,101,114,32,109,105,110,105,109,105,122,101,114>>]},{dt,[],[<<42>>]},{dd,[],[<<48,32,111,114,32,109,111,114,101,32,113,117,97,110,116,105,102,105,101,114,115>>]},{dt,[],[<<43>>]},{dd,[],[<<49,32,111,114,32,109,111,114,101,32,113,117,97,110,116,105,102,105,101,114,44,32,97,108,115,111,32,34,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,34>>]},{dt,[],[<<123>>]},{dd,[],[<<83,116,97,114,116,32,109,105,110,47,109,97,120,32,113,117,97,110,116,105,102,105,101,114>>]}]},{p,[],[<<80,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,32,119,105,116,104,105,110,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,32,105,115,32,99,97,108,108,101,100,32,97,32,34,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,34,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,111,110,108,121,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,58>>]},{dl,[],[{dt,[],[<<92>>]},{dd,[],[<<71,101,110,101,114,97,108,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<94>>]},{dd,[],[<<78,101,103,97,116,101,32,116,104,101,32,99,108,97,115,115,44,32,98,117,116,32,111,110,108,121,32,105,102,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<45>>]},{dd,[],[<<73,110,100,105,99,97,116,101,115,32,99,104,97,114,97,99,116,101,114,32,114,97,110,103,101>>]},{dt,[],[<<91>>]},{dd,[],[<<80,111,115,105,120,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,40,111,110,108,121,32,105,102,32,102,111,108,108,111,119,101,100,32,98,121,32,80,111,115,105,120,32,115,121,110,116,97,120,41>>]},{dt,[],[<<93>>]},{dd,[],[<<84,101,114,109,105,110,97,116,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,32,100,101,115,99,114,105,98,101,32,116,104,101,32,117,115,101,32,111,102,32,101,97,99,104,32,109,101,116,97,99,104,97,114,97,99,116,101,114,46>>]},{a,[{id,<<115,101,99,116,51>>}],[]},{h2,[],[<<66,97,99,107,115,108,97,115,104>>]},{p,[],[<<84,104,101,32,98,97,99,107,115,108,97,115,104,32,99,104,97,114,97,99,116,101,114,32,104,97,115,32,109,97,110,121,32,117,115,101,115,46,32,70,105,114,115,116,44,32,105,102,32,105,116,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,110,117,109,98,101,114,32,111,114,32,97,32,108,101,116,116,101,114,44,32,105,116,32,116,97,107,101,115,32,97,119,97,121,32,97,110,121,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,116,104,97,116,32,97,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,104,97,118,101,46,32,84,104,105,115,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,97,115,32,97,110,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114,32,97,112,112,108,105,101,115,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,97,32,42,32,99,104,97,114,97,99,116,101,114,44,32,121,111,117,32,119,114,105,116,101,32,92,42,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,105,115,32,101,115,99,97,112,105,110,103,32,97,99,116,105,111,110,32,97,112,112,108,105,101,115,32,105,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,104,97,114,97,99,116,101,114,32,119,111,117,108,100,32,111,116,104,101,114,119,105,115,101,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,109,101,116,97,99,104,97,114,97,99,116,101,114,44,32,115,111,32,105,116,32,105,115,32,97,108,119,97,121,115,32,115,97,102,101,32,116,111,32,112,114,101,99,101,100,101,32,97,32,110,111,110,45,97,108,112,104,97,110,117,109,101,114,105,99,32,119,105,116,104,32,98,97,99,107,115,108,97,115,104,32,116,111,32,115,112,101,99,105,102,121,32,116,104,97,116,32,105,116,32,115,116,97,110,100,115,32,102,111,114,32,105,116,115,101,108,102,46,32,73,110,32,112,97,114,116,105,99,117,108,97,114,44,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,97,32,98,97,99,107,115,108,97,115,104,44,32,119,114,105,116,101,32,92,92,46>>]},{p,[],[<<73,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,109,111,100,101,44,32,111,110,108,121,32,65,83,67,73,73,32,110,117,109,98,101,114,115,32,97,110,100,32,108,101,116,116,101,114,115,32,104,97,118,101,32,97,110,121,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,97,102,116,101,114,32,97,32,98,97,99,107,115,108,97,115,104,46,32,65,108,108,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,32,112,97,114,116,105,99,117,108,97,114,44,32,116,104,111,115,101,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,62,32,49,50,55,41,32,97,114,101,32,116,114,101,97,116,101,100,32,97,115,32,108,105,116,101,114,97,108,115,46>>]},{p,[],[<<73,102,32,97,32,112,97,116,116,101,114,110,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<44,32,119,104,105,116,101,115,112,97,99,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,40,111,116,104,101,114,32,116,104,97,110,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,41,32,97,110,100,32,99,104,97,114,97,99,116,101,114,115,32,98,101,116,119,101,101,110,32,97,32,35,32,111,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,97,110,100,32,116,104,101,32,110,101,120,116,32,110,101,119,108,105,110,101,32,97,114,101,32,105,103,110,111,114,101,100,46,32,65,110,32,101,115,99,97,112,105,110,103,32,98,97,99,107,115,108,97,115,104,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,105,110,99,108,117,100,101,32,97,32,119,104,105,116,101,115,112,97,99,101,32,111,114,32,35,32,99,104,97,114,97,99,116,101,114,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<84,111,32,114,101,109,111,118,101,32,116,104,101,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,102,114,111,109,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,44,32,112,117,116,32,116,104,101,109,32,98,101,116,119,101,101,110,32,92,81,32,97,110,100,32,92,69,46,32,84,104,105,115,32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,80,101,114,108,32,105,110,32,116,104,97,116,32,36,32,97,110,100,32,64,32,97,114,101,32,104,97,110,100,108,101,100,32,97,115,32,108,105,116,101,114,97,108,115,32,105,110,32,92,81,46,46,46,92,69,32,115,101,113,117,101,110,99,101,115,32,105,110,32,80,67,82,69,44,32,119,104,105,108,101,32,36,32,97,110,100,32,64,32,99,97,117,115,101,32,118,97,114,105,97,98,108,101,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,105,110,32,80,101,114,108,46,32,78,111,116,105,99,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<80,97,116,116,101,114,110,32,32,32,32,32,32,32,32,32,32,32,32,80,67,82,69,32,109,97,116,99,104,101,115,32,32,32,80,101,114,108,32,109,97,116,99,104,101,115,10,10,92,81,97,98,99,36,120,121,122,92,69,32,32,32,32,32,32,32,32,97,98,99,36,120,121,122,32,32,32,32,32,32,32,32,97,98,99,32,102,111,108,108,111,119,101,100,32,98,121,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,36,120,121,122,10,92,81,97,98,99,92,36,120,121,122,92,69,32,32,32,32,32,32,32,97,98,99,92,36,120,121,122,32,32,32,32,32,32,32,97,98,99,92,36,120,121,122,10,92,81,97,98,99,92,69,92,36,92,81,120,121,122,92,69,32,32,32,97,98,99,36,120,121,122,32,32,32,32,32,32,32,32,97,98,99,36,120,121,122>>]}]},{p,[],[<<84,104,101,32,92,81,46,46,46,92,69,32,115,101,113,117,101,110,99,101,32,105,115,32,114,101,99,111,103,110,105,122,101,100,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,65,110,32,105,115,111,108,97,116,101,100,32,92,69,32,116,104,97,116,32,105,115,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,92,81,32,105,115,32,105,103,110,111,114,101,100,46,32,73,102,32,92,81,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32,92,69,32,108,97,116,101,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,44,32,116,104,101,32,108,105,116,101,114,97,108,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,99,111,110,116,105,110,117,101,115,32,116,111,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,40,116,104,97,116,32,105,115,44,32,92,69,32,105,115,32,97,115,115,117,109,101,100,32,97,116,32,116,104,101,32,101,110,100,41,46,32,73,102,32,116,104,101,32,105,115,111,108,97,116,101,100,32,92,81,32,105,115,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,104,105,115,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,44,32,97,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,105,115,32,110,111,116,32,116,101,114,109,105,110,97,116,101,100,46>>]},{p,[],[{em,[],[<<78,111,110,45,80,114,105,110,116,105,110,103,32,67,104,97,114,97,99,116,101,114,115>>]}]},{a,[{id,<<110,111,110,95,112,114,105,110,116,105,110,103,95,99,104,97,114,97,99,116,101,114,115>>}],[]},{p,[],[<<65,32,115,101,99,111,110,100,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,112,114,111,118,105,100,101,115,32,97,32,119,97,121,32,111,102,32,101,110,99,111,100,105,110,103,32,110,111,110,45,112,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,112,97,116,116,101,114,110,115,32,105,110,32,97,32,118,105,115,105,98,108,101,32,109,97,110,110,101,114,46,32,84,104,101,114,101,32,105,115,32,110,111,32,114,101,115,116,114,105,99,116,105,111,110,32,111,110,32,116,104,101,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,110,111,110,45,112,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,97,112,97,114,116,32,102,114,111,109,32,116,104,101,32,98,105,110,97,114,121,32,122,101,114,111,32,116,104,97,116,32,116,101,114,109,105,110,97,116,101,115,32,97,32,112,97,116,116,101,114,110,46,32,87,104,101,110,32,97,32,112,97,116,116,101,114,110,32,105,115,32,112,114,101,112,97,114,101,100,32,98,121,32,116,101,120,116,32,101,100,105,116,105,110,103,44,32,105,116,32,105,115,32,111,102,116,101,110,32,101,97,115,105,101,114,32,116,111,32,117,115,101,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,110,32,116,104,101,32,98,105,110,97,114,121,32,99,104,97,114,97,99,116,101,114,32,105,116,32,114,101,112,114,101,115,101,110,116,115,58>>]},{dl,[],[{dt,[],[<<92,97>>]},{dd,[],[<<65,108,97,114,109,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,66,69,76,32,99,104,97,114,97,99,116,101,114,32,40,104,101,120,32,48,55,41>>]},{dt,[],[<<92,99,120>>]},{dd,[],[<<34,67,111,110,116,114,111,108,45,120,34,44,32,119,104,101,114,101,32,120,32,105,115,32,97,110,121,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,101>>]},{dd,[],[<<69,115,99,97,112,101,32,40,104,101,120,32,49,66,41>>]},{dt,[],[<<92,102>>]},{dd,[],[<<70,111,114,109,32,102,101,101,100,32,40,104,101,120,32,48,67,41>>]},{dt,[],[<<92,110>>]},{dd,[],[<<76,105,110,101,32,102,101,101,100,32,40,104,101,120,32,48,65,41>>]},{dt,[],[<<92,114>>]},{dd,[],[<<67,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,40,104,101,120,32,48,68,41>>]},{dt,[],[<<92,116>>]},{dd,[],[<<84,97,98,32,40,104,101,120,32,48,57,41>>]},{dt,[],[<<92,48,100,100>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,48,100,100>>]},{dt,[],[<<92,100,100,100>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,100,100,100,44,32,111,114,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101>>]},{dt,[],[<<92,111,123,100,100,100,46,46,125>>]},{dd,[],[<<99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,100,100,100,46,46>>]},{dt,[],[<<92,120,104,104>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,104,101,120,32,99,111,100,101,32,104,104>>]},{dt,[],[<<92,120,123,104,104,104,46,46,125>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,104,101,120,32,99,111,100,101,32,104,104,104,46,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,92,48,100,100,32,105,115,32,97,108,119,97,121,115,32,97,110,32,111,99,116,97,108,32,99,111,100,101,44,32,97,110,100,32,116,104,97,116,32,92,56,32,97,110,100,32,92,57,32,97,114,101,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,56,34,32,97,110,100,32,34,57,34,46>>]}]},{p,[],[<<84,104,101,32,112,114,101,99,105,115,101,32,101,102,102,101,99,116,32,111,102,32,92,99,120,32,111,110,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,32,105,115,32,97,115,32,102,111,108,108,111,119,115,58,32,105,102,32,120,32,105,115,32,97,32,108,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,44,32,105,116,32,105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,117,112,112,101,114,32,99,97,115,101,46,32,84,104,101,110,32,98,105,116,32,54,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,40,104,101,120,32,52,48,41,32,105,115,32,105,110,118,101,114,116,101,100,46,32,84,104,117,115,32,92,99,65,32,116,111,32,92,99,90,32,98,101,99,111,109,101,32,104,101,120,32,48,49,32,116,111,32,104,101,120,32,49,65,32,40,65,32,105,115,32,52,49,44,32,90,32,105,115,32,53,65,41,44,32,98,117,116,32,92,99,123,32,98,101,99,111,109,101,115,32,104,101,120,32,51,66,32,40,123,32,105,115,32,55,66,41,44,32,97,110,100,32,92,99,59,32,98,101,99,111,109,101,115,32,104,101,120,32,55,66,32,40,59,32,105,115,32,51,66,41,46,32,73,102,32,116,104,101,32,100,97,116,97,32,105,116,101,109,32,40,98,121,116,101,32,111,114,32,49,54,45,98,105,116,32,118,97,108,117,101,41,32,102,111,108,108,111,119,105,110,103,32,92,99,32,104,97,115,32,97,32,118,97,108,117,101,32,62,32,49,50,55,44,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,32,111,99,99,117,114,115,46,32,84,104,105,115,32,108,111,99,107,115,32,111,117,116,32,110,111,110,45,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,97,108,108,32,109,111,100,101,115,46>>]},{p,[],[<<84,104,101,32,92,99,32,102,97,99,105,108,105,116,121,32,119,97,115,32,100,101,115,105,103,110,101,100,32,102,111,114,32,117,115,101,32,119,105,116,104,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,44,32,98,117,116,32,119,105,116,104,32,116,104,101,32,101,120,116,101,110,115,105,111,110,32,116,111,32,85,110,105,99,111,100,101,32,105,116,32,105,115,32,101,118,101,110,32,108,101,115,115,32,117,115,101,102,117,108,32,116,104,97,110,32,105,116,32,111,110,99,101,32,119,97,115,46>>]},{p,[],[<<65,102,116,101,114,32,92,48,32,117,112,32,116,111,32,116,119,111,32,102,117,114,116,104,101,114,32,111,99,116,97,108,32,100,105,103,105,116,115,32,97,114,101,32,114,101,97,100,46,32,73,102,32,116,104,101,114,101,32,97,114,101,32,102,101,119,101,114,32,116,104,97,110,32,116,119,111,32,100,105,103,105,116,115,44,32,106,117,115,116,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,112,114,101,115,101,110,116,32,97,114,101,32,117,115,101,100,46,32,84,104,117,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32,92,48,92,120,92,48,49,53,32,115,112,101,99,105,102,105,101,115,32,116,119,111,32,98,105,110,97,114,121,32,122,101,114,111,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,67,82,32,99,104,97,114,97,99,116,101,114,32,40,99,111,100,101,32,118,97,108,117,101,32,49,51,41,46,32,77,97,107,101,32,115,117,114,101,32,121,111,117,32,115,117,112,112,108,121,32,116,119,111,32,100,105,103,105,116,115,32,97,102,116,101,114,32,116,104,101,32,105,110,105,116,105,97,108,32,122,101,114,111,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,102,111,108,108,111,119,115,32,105,115,32,105,116,115,101,108,102,32,97,110,32,111,99,116,97,108,32,100,105,103,105,116,46>>]},{p,[],[<<84,104,101,32,101,115,99,97,112,101,32,92,111,32,109,117,115,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,111,99,116,97,108,32,100,105,103,105,116,115,44,32,101,110,99,108,111,115,101,100,32,105,110,32,98,114,97,99,101,115,46,32,65,110,32,101,114,114,111,114,32,111,99,99,117,114,115,32,105,102,32,116,104,105,115,32,105,115,32,110,111,116,32,116,104,101,32,99,97,115,101,46,32,84,104,105,115,32,101,115,99,97,112,101,32,105,115,32,97,32,114,101,99,101,110,116,32,97,100,100,105,116,105,111,110,32,116,111,32,80,101,114,108,59,32,105,116,32,112,114,111,118,105,100,101,115,32,119,97,121,32,111,102,32,115,112,101,99,105,102,121,105,110,103,32,99,104,97,114,97,99,116,101,114,32,99,111,100,101,32,112,111,105,110,116,115,32,97,115,32,111,99,116,97,108,32,110,117,109,98,101,114,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,48,55,55,55,44,32,97,110,100,32,105,116,32,97,108,115,111,32,97,108,108,111,119,115,32,111,99,116,97,108,32,110,117,109,98,101,114,115,32,97,110,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,98,101,32,117,110,97,109,98,105,103,117,111,117,115,108,121,32,115,112,101,99,105,102,105,101,100,46>>]},{p,[],[<<70,111,114,32,103,114,101,97,116,101,114,32,99,108,97,114,105,116,121,32,97,110,100,32,117,110,97,109,98,105,103,117,105,116,121,44,32,105,116,32,105,115,32,98,101,115,116,32,116,111,32,97,118,111,105,100,32,102,111,108,108,111,119,105,110,103,32,92,32,98,121,32,97,32,100,105,103,105,116,32,103,114,101,97,116,101,114,32,116,104,97,110,32,122,101,114,111,46,32,73,110,115,116,101,97,100,44,32,117,115,101,32,92,111,123,125,32,111,114,32,92,120,123,125,32,116,111,32,115,112,101,99,105,102,121,32,99,104,97,114,97,99,116,101,114,32,110,117,109,98,101,114,115,44,32,97,110,100,32,92,103,123,125,32,116,111,32,115,112,101,99,105,102,121,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,114,97,103,114,97,112,104,115,32,100,101,115,99,114,105,98,101,32,116,104,101,32,111,108,100,44,32,97,109,98,105,103,117,111,117,115,32,115,121,110,116,97,120,46>>]},{p,[],[<<84,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,97,32,98,97,99,107,115,108,97,115,104,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,100,105,103,105,116,32,111,116,104,101,114,32,116,104,97,110,32,48,32,105,115,32,99,111,109,112,108,105,99,97,116,101,100,44,32,97,110,100,32,80,101,114,108,32,104,97,115,32,99,104,97,110,103,101,100,32,105,110,32,114,101,99,101,110,116,32,114,101,108,101,97,115,101,115,44,32,99,97,117,115,105,110,103,32,80,67,82,69,32,97,108,115,111,32,116,111,32,99,104,97,110,103,101,46,32,79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,80,67,82,69,32,114,101,97,100,115,32,116,104,101,32,100,105,103,105,116,32,97,110,100,32,97,110,121,32,102,111,108,108,111,119,105,110,103,32,100,105,103,105,116,115,32,97,115,32,97,32,100,101,99,105,109,97,108,32,110,117,109,98,101,114,46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,105,115,32,60,32,56,44,32,111,114,32,105,102,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,32,97,116,32,108,101,97,115,116,32,116,104,97,116,32,109,97,110,121,32,112,114,101,118,105,111,117,115,32,99,97,112,116,117,114,105,110,103,32,108,101,102,116,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,44,32,116,104,101,32,101,110,116,105,114,101,32,115,101,113,117,101,110,99,101,32,105,115,32,116,97,107,101,110,32,97,115,32,97,32>>,{em,[],[<<98,97,99,107,32,114,101,102,101,114,101,110,99,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,104,111,119,32,116,104,105,115,32,119,111,114,107,115,32,105,115,32,112,114,111,118,105,100,101,100,32,108,97,116,101,114,44,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,100,105,115,99,117,115,115,105,111,110,32,111,102,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46>>]},{p,[],[<<73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,111,114,32,105,102,32,116,104,101,32,100,101,99,105,109,97,108,32,110,117,109,98,101,114,32,102,111,108,108,111,119,105,110,103,32,92,32,105,115,32,62,32,55,32,97,110,100,32,116,104,101,114,101,32,104,97,118,101,32,110,111,116,32,98,101,101,110,32,116,104,97,116,32,109,97,110,121,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,80,67,82,69,32,104,97,110,100,108,101,115,32,92,56,32,97,110,100,32,92,57,32,97,115,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,56,34,32,97,110,100,32,34,57,34,44,32,97,110,100,32,111,116,104,101,114,119,105,115,101,32,114,101,45,114,101,97,100,115,32,117,112,32,116,111,32,116,104,114,101,101,32,111,99,116,97,108,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,98,97,99,107,115,108,97,115,104,44,32,97,110,100,32,117,115,105,110,103,32,116,104,101,109,32,116,111,32,103,101,110,101,114,97,116,101,32,97,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114,46,32,65,110,121,32,115,117,98,115,101,113,117,101,110,116,32,100,105,103,105,116,115,32,115,116,97,110,100,32,102,111,114,32,116,104,101,109,115,101,108,118,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{dl,[],[{dt,[],[<<92,48,52,48>>]},{dd,[],[<<65,110,111,116,104,101,114,32,119,97,121,32,111,102,32,119,114,105,116,105,110,103,32,97,110,32,65,83,67,73,73,32,115,112,97,99,101>>]},{dt,[],[<<92,52,48>>]},{dd,[],[<<84,104,101,32,115,97,109,101,44,32,112,114,111,118,105,100,101,100,32,116,104,101,114,101,32,97,114,101,32,60,32,52,48,32,112,114,101,118,105,111,117,115,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115>>]},{dt,[],[<<92,55>>]},{dd,[],[<<65,108,119,97,121,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101>>]},{dt,[],[<<92,49,49>>]},{dd,[],[<<67,97,110,32,98,101,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,114,32,97,110,111,116,104,101,114,32,119,97,121,32,111,102,32,119,114,105,116,105,110,103,32,97,32,116,97,98>>]},{dt,[],[<<92,48,49,49>>]},{dd,[],[<<65,108,119,97,121,115,32,97,32,116,97,98>>]},{dt,[],[<<92,48,49,49,51>>]},{dd,[],[<<65,32,116,97,98,32,102,111,108,108,111,119,101,100,32,98,121,32,99,104,97,114,97,99,116,101,114,32,34,51,34>>]},{dt,[],[<<92,49,49,51>>]},{dd,[],[<<67,97,110,32,98,101,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,49,49,51>>]},{dt,[],[<<92,51,55,55>>]},{dd,[],[<<67,97,110,32,98,101,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,116,104,101,114,119,105,115,101,32,118,97,108,117,101,32,50,53,53,32,40,100,101,99,105,109,97,108,41>>]},{dt,[],[<<92,56,49>>]},{dd,[],[<<69,105,116,104,101,114,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,114,32,116,104,101,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,32,34,56,34,32,97,110,100,32,34,49,34>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,111,99,116,97,108,32,118,97,108,117,101,115,32,62,61,32,49,48,48,32,116,104,97,116,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,117,115,105,110,103,32,116,104,105,115,32,115,121,110,116,97,120,32,109,117,115,116,32,110,111,116,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,98,121,32,97,32,108,101,97,100,105,110,103,32,122,101,114,111,44,32,97,115,32,110,111,32,109,111,114,101,32,116,104,97,110,32,116,104,114,101,101,32,111,99,116,97,108,32,100,105,103,105,116,115,32,97,114,101,32,101,118,101,114,32,114,101,97,100,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,97,102,116,101,114,32,92,120,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32,123,44,32,102,114,111,109,32,122,101,114,111,32,116,111,32,116,119,111,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,115,32,97,114,101,32,114,101,97,100,32,40,108,101,116,116,101,114,115,32,99,97,110,32,98,101,32,105,110,32,117,112,112,101,114,32,111,114,32,108,111,119,101,114,32,99,97,115,101,41,46,32,65,110,121,32,110,117,109,98,101,114,32,111,102,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,115,32,109,97,121,32,97,112,112,101,97,114,32,98,101,116,119,101,101,110,32,92,120,123,32,97,110,100,32,125,46,32,73,102,32,97,32,99,104,97,114,97,99,116,101,114,32,111,116,104,101,114,32,116,104,97,110,32,97,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,32,97,112,112,101,97,114,115,32,98,101,116,119,101,101,110,32,92,120,123,32,97,110,100,32,125,44,32,111,114,32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,116,101,114,109,105,110,97,116,105,110,103,32,125,44,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46>>]},{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,118,97,108,117,101,32,105,115,32,108,101,115,115,32,116,104,97,110,32,50,53,54,32,99,97,110,32,98,101,32,100,101,102,105,110,101,100,32,98,121,32,101,105,116,104,101,114,32,111,102,32,116,104,101,32,116,119,111,32,115,121,110,116,97,120,101,115,32,102,111,114,32,92,120,46,32,84,104,101,114,101,32,105,115,32,110,111,32,100,105,102,102,101,114,101,110,99,101,32,105,110,32,116,104,101,32,119,97,121,32,116,104,101,121,32,97,114,101,32,104,97,110,100,108,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,92,120,100,99,32,105,115,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32,92,120,123,100,99,125,46>>]},{p,[],[{em,[],[<<67,111,110,115,116,114,97,105,110,116,115,32,111,110,32,99,104,97,114,97,99,116,101,114,32,118,97,108,117,101,115>>]}]},{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,117,115,105,110,103,32,111,99,116,97,108,32,111,114,32,104,101,120,97,100,101,99,105,109,97,108,32,110,117,109,98,101,114,115,32,97,114,101,32,108,105,109,105,116,101,100,32,116,111,32,99,101,114,116,97,105,110,32,118,97,108,117,101,115,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<56,45,98,105,116,32,110,111,110,45,85,84,70,32,109,111,100,101>>]},{dd,[],[{p,[],[<<60,32,48,120,49,48,48>>]}]},{dt,[],[<<56,45,98,105,116,32,85,84,70,45,56,32,109,111,100,101>>]},{dd,[],[{p,[],[<<60,32,48,120,49,48,102,102,102,102,32,97,110,100,32,97,32,118,97,108,105,100,32,99,111,100,101,112,111,105,110,116>>]}]}]},{p,[],[<<73,110,118,97,108,105,100,32,85,110,105,99,111,100,101,32,99,111,100,101,112,111,105,110,116,115,32,97,114,101,32,116,104,101,32,114,97,110,103,101,32,48,120,100,56,48,48,32,116,111,32,48,120,100,102,102,102,32,40,116,104,101,32,115,111,45,99,97,108,108,101,100,32,34,115,117,114,114,111,103,97,116,101,34,32,99,111,100,101,112,111,105,110,116,115,41,44,32,97,110,100,32,48,120,102,102,101,102,46>>]},{p,[],[{em,[],[<<69,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,105,110,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115>>]}]},{p,[],[<<65,108,108,32,116,104,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,116,32,100,101,102,105,110,101,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,118,97,108,117,101,32,99,97,110,32,98,101,32,117,115,101,100,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,65,108,115,111,44,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,92,98,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,116,104,101,32,98,97,99,107,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,32,40,104,101,120,32,48,56,41,46>>]},{p,[],[<<92,78,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,92,66,44,32,92,82,44,32,97,110,100,32,92,88,32,97,114,101,32,110,111,116,32,115,112,101,99,105,97,108,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,76,105,107,101,32,111,116,104,101,114,32,117,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,44,32,116,104,101,121,32,97,114,101,32,116,114,101,97,116,101,100,32,97,115,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,66,34,44,32,34,82,34,44,32,97,110,100,32,34,88,34,46,32,79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,115,46>>]},{p,[],[{em,[],[<<85,110,115,117,112,112,111,114,116,101,100,32,69,115,99,97,112,101,32,83,101,113,117,101,110,99,101,115>>]}]},{p,[],[<<73,110,32,80,101,114,108,44,32,116,104,101,32,115,101,113,117,101,110,99,101,115,32,92,108,44,32,92,76,44,32,92,117,44,32,97,110,100,32,92,85,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,98,121,32,105,116,115,32,115,116,114,105,110,103,32,104,97,110,100,108,101,114,32,97,110,100,32,117,115,101,100,32,116,111,32,109,111,100,105,102,121,32,116,104,101,32,99,97,115,101,32,111,102,32,102,111,108,108,111,119,105,110,103,32,99,104,97,114,97,99,116,101,114,115,46,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,101,115,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,46>>]},{p,[],[{em,[],[<<65,98,115,111,108,117,116,101,32,97,110,100,32,82,101,108,97,116,105,118,101,32,66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]}]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,32,92,103,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,117,110,115,105,103,110,101,100,32,111,114,32,97,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,44,32,111,112,116,105,111,110,97,108,108,121,32,101,110,99,108,111,115,101,100,32,105,110,32,98,114,97,99,101,115,44,32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,111,114,32,114,101,108,97,116,105,118,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,46,32,65,32,110,97,109,101,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,99,111,100,101,100,32,97,115,32,92,103,123,110,97,109,101,125,46,32,66,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,97,114,101,32,100,105,115,99,117,115,115,101,100,32,108,97,116,101,114,44,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,100,105,115,99,117,115,115,105,111,110,32,111,102,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46>>]},{p,[],[{em,[],[<<65,98,115,111,108,117,116,101,32,97,110,100,32,82,101,108,97,116,105,118,101,32,83,117,98,114,111,117,116,105,110,101,32,67,97,108,108,115>>]}]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,79,110,105,103,117,114,117,109,97,44,32,116,104,101,32,110,111,110,45,80,101,114,108,32,115,121,110,116,97,120,32,92,103,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,32,111,114,32,97,32,110,117,109,98,101,114,32,101,110,99,108,111,115,101,100,32,101,105,116,104,101,114,32,105,110,32,97,110,103,108,101,32,98,114,97,99,107,101,116,115,32,111,114,32,115,105,110,103,108,101,32,113,117,111,116,101,115,44,32,105,115,32,97,108,116,101,114,110,97,116,105,118,101,32,115,121,110,116,97,120,32,102,111,114,32,114,101,102,101,114,101,110,99,105,110,103,32,97,32,115,117,98,112,97,116,116,101,114,110,32,97,115,32,97,32,34,115,117,98,114,111,117,116,105,110,101,34,46,32,68,101,116,97,105,108,115,32,97,114,101,32,100,105,115,99,117,115,115,101,100,32,108,97,116,101,114,46,32,78,111,116,105,99,101,32,116,104,97,116,32,92,103,123,46,46,46,125,32,40,80,101,114,108,32,115,121,110,116,97,120,41,32,97,110,100,32,92,103,60,46,46,46,62,32,40,79,110,105,103,117,114,117,109,97,32,115,121,110,116,97,120,41,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,115,121,110,111,110,121,109,111,117,115,46,32,84,104,101,32,102,111,114,109,101,114,32,105,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,97,110,100,32,116,104,101,32,108,97,116,116,101,114,32,105,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,46>>]},{p,[],[{em,[],[<<71,101,110,101,114,105,99,32,67,104,97,114,97,99,116,101,114,32,84,121,112,101,115>>]}]},{a,[{id,<<103,101,110,101,114,105,99,95,99,104,97,114,97,99,116,101,114,95,116,121,112,101,115>>}],[]},{p,[],[<<65,110,111,116,104,101,114,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,105,115,32,102,111,114,32,115,112,101,99,105,102,121,105,110,103,32,103,101,110,101,114,105,99,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,58>>]},{dl,[],[{dt,[],[<<92,100>>]},{dd,[],[<<65,110,121,32,100,101,99,105,109,97,108,32,100,105,103,105,116>>]},{dt,[],[<<92,68>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,100,101,99,105,109,97,108,32,100,105,103,105,116>>]},{dt,[],[<<92,104>>]},{dd,[],[<<65,110,121,32,104,111,114,105,122,111,110,116,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,72>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,104,111,114,105,122,111,110,116,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,115>>]},{dd,[],[<<65,110,121,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,83>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,118>>]},{dd,[],[<<65,110,121,32,118,101,114,116,105,99,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,86>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,118,101,114,116,105,99,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,119>>]},{dd,[],[<<65,110,121,32,34,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,87>>]},{dd,[],[<<65,110,121,32,34,110,111,110,45,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114>>]}]},{p,[],[<<84,104,101,114,101,32,105,115,32,97,108,115,111,32,116,104,101,32,115,105,110,103,108,101,32,115,101,113,117,101,110,99,101,32,92,78,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,32,110,111,110,45,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,34,46,34,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,119,104,101,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,105,115,32,110,111,116,32,115,101,116,46,32,80,101,114,108,32,97,108,115,111,32,117,115,101,115,32,92,78,32,116,111,32,109,97,116,99,104,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,110,97,109,101,44,32,98,117,116,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,105,115,46>>]},{p,[],[<<69,97,99,104,32,112,97,105,114,32,111,102,32,108,111,119,101,114,99,97,115,101,32,97,110,100,32,117,112,112,101,114,99,97,115,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,112,97,114,116,105,116,105,111,110,115,32,116,104,101,32,99,111,109,112,108,101,116,101,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,105,110,116,111,32,116,119,111,32,100,105,115,106,111,105,110,116,32,115,101,116,115,46,32,65,110,121,32,103,105,118,101,110,32,99,104,97,114,97,99,116,101,114,32,109,97,116,99,104,101,115,32,111,110,101,44,32,97,110,100,32,111,110,108,121,32,111,110,101,44,32,111,102,32,101,97,99,104,32,112,97,105,114,46,32,84,104,101,32,115,101,113,117,101,110,99,101,115,32,99,97,110,32,97,112,112,101,97,114,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,84,104,101,121,32,101,97,99,104,32,109,97,116,99,104,32,111,110,101,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,116,121,112,101,46,32,73,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,108,108,32,102,97,105,108,44,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,99,104,97,114,97,99,116,101,114,32,116,111,32,109,97,116,99,104,46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,80,101,114,108,44,32,92,115,32,100,105,100,32,110,111,116,32,117,115,101,100,32,116,111,32,109,97,116,99,104,32,116,104,101,32,86,84,32,99,104,97,114,97,99,116,101,114,32,40,99,111,100,101,32,49,49,41,44,32,119,104,105,99,104,32,109,97,100,101,32,105,116,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,116,104,101,32,80,79,83,73,88,32,34,115,112,97,99,101,34,32,99,108,97,115,115,46,32,72,111,119,101,118,101,114,44,32,80,101,114,108,32,97,100,100,101,100,32,86,84,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,44,32,97,110,100,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,115,117,105,116,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46,32,84,104,101,32,100,101,102,97,117,108,116,32,92,115,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,110,111,119,32,72,84,32,40,57,41,44,32,76,70,32,40,49,48,41,44,32,86,84,32,40,49,49,41,44,32,70,70,32,40,49,50,41,44,32,67,82,32,40,49,51,41,44,32,97,110,100,32,115,112,97,99,101,32,40,51,50,41,44,32,119,104,105,99,104,32,97,114,101,32,100,101,102,105,110,101,100,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,32,105,110,32,116,104,101,32,34,67,34,32,108,111,99,97,108,101,46,32,84,104,105,115,32,108,105,115,116,32,109,97,121,32,118,97,114,121,32,105,102,32,108,111,99,97,108,101,45,115,112,101,99,105,102,105,99,32,109,97,116,99,104,105,110,103,32,105,115,32,116,97,107,105,110,103,32,112,108,97,99,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,115,111,109,101,32,108,111,99,97,108,101,115,32,116,104,101,32,34,110,111,110,45,98,114,101,97,107,105,110,103,32,115,112,97,99,101,34,32,99,104,97,114,97,99,116,101,114,32,40,92,120,65,48,41,32,105,115,32,114,101,99,111,103,110,105,122,101,100,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,44,32,97,110,100,32,105,110,32,111,116,104,101,114,115,32,116,104,101,32,86,84,32,99,104,97,114,97,99,116,101,114,32,105,115,32,110,111,116,46>>]},{p,[],[<<65,32,34,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114,32,105,115,32,97,110,32,117,110,100,101,114,115,99,111,114,101,32,111,114,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,97,32,108,101,116,116,101,114,32,111,114,32,97,32,100,105,103,105,116,46,32,66,121,32,100,101,102,97,117,108,116,44,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,108,101,116,116,101,114,115,32,97,110,100,32,100,105,103,105,116,115,32,105,115,32,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,32,80,67,82,69,32,108,111,119,45,118,97,108,117,101,100,32,99,104,97,114,97,99,116,101,114,32,116,97,98,108,101,115,44,32,105,110,32,69,114,108,97,110,103,39,115,32,99,97,115,101,32,40,97,110,100,32,119,105,116,104,111,117,116,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<41,44,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,105,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,109,111,100,101,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,44,32,116,104,97,116,32,105,115,44,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,111,117,116,115,105,100,101,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,44,32,110,101,118,101,114,32,109,97,116,99,104,32,92,100,44,32,92,115,44,32,111,114,32,92,119,44,32,97,110,100,32,97,108,119,97,121,115,32,109,97,116,99,104,32,92,68,44,32,92,83,44,32,97,110,100,32,92,87,46,32,84,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,114,101,116,97,105,110,32,116,104,101,105,114,32,111,114,105,103,105,110,97,108,32,109,101,97,110,105,110,103,115,32,102,114,111,109,32,98,101,102,111,114,101,32,85,84,70,32,115,117,112,112,111,114,116,32,119,97,115,32,97,118,97,105,108,97,98,108,101,44,32,109,97,105,110,108,121,32,102,111,114,32,101,102,102,105,99,105,101,110,99,121,32,114,101,97,115,111,110,115,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,98,101,104,97,118,105,111,114,32,105,115,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,117,115,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<92,100>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,92,112,123,78,100,125,32,109,97,116,99,104,101,115,32,40,100,101,99,105,109,97,108,32,100,105,103,105,116,41>>]},{dt,[],[<<92,115>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,92,112,123,90,125,32,111,114,32,92,104,32,111,114,32,92,118>>]},{dt,[],[<<92,119>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,109,97,116,99,104,101,115,32,92,112,123,76,125,32,111,114,32,92,112,123,78,125,32,109,97,116,99,104,101,115,44,32,112,108,117,115,32,117,110,100,101,114,115,99,111,114,101>>]}]},{p,[],[<<84,104,101,32,117,112,112,101,114,99,97,115,101,32,101,115,99,97,112,101,115,32,109,97,116,99,104,32,116,104,101,32,105,110,118,101,114,115,101,32,115,101,116,115,32,111,102,32,99,104,97,114,97,99,116,101,114,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,92,100,32,109,97,116,99,104,101,115,32,111,110,108,121,32,100,101,99,105,109,97,108,32,100,105,103,105,116,115,44,32,119,104,105,108,101,32,92,119,32,109,97,116,99,104,101,115,32,97,110,121,32,85,110,105,99,111,100,101,32,100,105,103,105,116,44,32,97,110,121,32,85,110,105,99,111,100,101,32,108,101,116,116,101,114,44,32,97,110,100,32,117,110,100,101,114,115,99,111,114,101,46,32,78,111,116,105,99,101,32,97,108,115,111,32,116,104,97,116,32>>,{code,[],[<<117,99,112>>]},<<32,97,102,102,101,99,116,115,32,92,98,32,97,110,100,32,92,66,44,32,97,115,32,116,104,101,121,32,97,114,101,32,100,101,102,105,110,101,100,32,105,110,32,116,101,114,109,115,32,111,102,32,92,119,32,97,110,100,32,92,87,46,32,77,97,116,99,104,105,110,103,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,105,115,32,110,111,116,105,99,101,97,98,108,121,32,115,108,111,119,101,114,32,119,104,101,110,32>>,{code,[],[<<117,99,112>>]},<<32,105,115,32,115,101,116,46>>]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,115,32,92,104,44,32,92,72,44,32,92,118,44,32,97,110,100,32,92,86,32,97,114,101,32,102,101,97,116,117,114,101,115,32,116,104,97,116,32,119,101,114,101,32,97,100,100,101,100,32,116,111,32,80,101,114,108,32,105,110,32,114,101,108,101,97,115,101,32,53,46,49,48,46,32,73,110,32,99,111,110,116,114,97,115,116,32,116,111,32,116,104,101,32,111,116,104,101,114,32,115,101,113,117,101,110,99,101,115,44,32,119,104,105,99,104,32,109,97,116,99,104,32,111,110,108,121,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,100,101,102,97,117,108,116,44,32,116,104,101,115,101,32,97,108,119,97,121,115,32,109,97,116,99,104,32,99,101,114,116,97,105,110,32,104,105,103,104,45,118,97,108,117,101,100,32,99,111,100,101,32,112,111,105,110,116,115,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32>>,{code,[],[<<117,99,112>>]},<<32,105,115,32,115,101,116,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,104,111,114,105,122,111,110,116,97,108,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,58>>]},{dl,[],[{dt,[],[<<85,43,48,48,48,57>>]},{dd,[],[<<72,111,114,105,122,111,110,116,97,108,32,116,97,98,32,40,72,84,41>>]},{dt,[],[<<85,43,48,48,50,48>>]},{dd,[],[<<83,112,97,99,101>>]},{dt,[],[<<85,43,48,48,65,48>>]},{dd,[],[<<78,111,110,45,98,114,101,97,107,32,115,112,97,99,101>>]},{dt,[],[<<85,43,49,54,56,48>>]},{dd,[],[<<79,103,104,97,109,32,115,112,97,99,101,32,109,97,114,107>>]},{dt,[],[<<85,43,49,56,48,69>>]},{dd,[],[<<77,111,110,103,111,108,105,97,110,32,118,111,119,101,108,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<85,43,50,48,48,48>>]},{dd,[],[<<69,110,32,113,117,97,100>>]},{dt,[],[<<85,43,50,48,48,49>>]},{dd,[],[<<69,109,32,113,117,97,100>>]},{dt,[],[<<85,43,50,48,48,50>>]},{dd,[],[<<69,110,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,51>>]},{dd,[],[<<69,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,52>>]},{dd,[],[<<84,104,114,101,101,45,112,101,114,45,101,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,53>>]},{dd,[],[<<70,111,117,114,45,112,101,114,45,101,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,54>>]},{dd,[],[<<83,105,120,45,112,101,114,45,101,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,55>>]},{dd,[],[<<70,105,103,117,114,101,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,56>>]},{dd,[],[<<80,117,110,99,116,117,97,116,105,111,110,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,57>>]},{dd,[],[<<84,104,105,110,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,65>>]},{dd,[],[<<72,97,105,114,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,50,70>>]},{dd,[],[<<78,97,114,114,111,119,32,110,111,45,98,114,101,97,107,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,53,70>>]},{dd,[],[<<77,101,100,105,117,109,32,109,97,116,104,101,109,97,116,105,99,97,108,32,115,112,97,99,101>>]},{dt,[],[<<85,43,51,48,48,48>>]},{dd,[],[<<73,100,101,111,103,114,97,112,104,105,99,32,115,112,97,99,101>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,118,101,114,116,105,99,97,108,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,58>>]},{dl,[],[{dt,[],[<<85,43,48,48,48,65>>]},{dd,[],[<<76,105,110,101,32,102,101,101,100,32,40,76,70,41>>]},{dt,[],[<<85,43,48,48,48,66>>]},{dd,[],[<<86,101,114,116,105,99,97,108,32,116,97,98,32,40,86,84,41>>]},{dt,[],[<<85,43,48,48,48,67>>]},{dd,[],[<<70,111,114,109,32,102,101,101,100,32,40,70,70,41>>]},{dt,[],[<<85,43,48,48,48,68>>]},{dd,[],[<<67,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,40,67,82,41>>]},{dt,[],[<<85,43,48,48,56,53>>]},{dd,[],[<<78,101,120,116,32,108,105,110,101,32,40,78,69,76,41>>]},{dt,[],[<<85,43,50,48,50,56>>]},{dd,[],[<<76,105,110,101,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<85,43,50,48,50,57>>]},{dd,[],[<<80,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114>>]}]},{p,[],[<<73,110,32,56,45,98,105,116,44,32,110,111,110,45,85,84,70,45,56,32,109,111,100,101,44,32,111,110,108,121,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,99,111,100,101,32,112,111,105,110,116,115,32,60,32,50,53,54,32,97,114,101,32,114,101,108,101,118,97,110,116,46>>]},{p,[],[{em,[],[<<78,101,119,108,105,110,101,32,83,101,113,117,101,110,99,101,115>>]}]},{a,[{id,<<110,101,119,108,105,110,101,95,115,101,113,117,101,110,99,101,115>>}],[]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,98,121,32,100,101,102,97,117,108,116,44,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,82,32,109,97,116,99,104,101,115,32,97,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,46,32,73,110,32,110,111,110,45,85,84,70,45,56,32,109,111,100,101,44,32,92,82,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{pre,[],[{code,[],[<<40,63,62,92,114,92,110,124,92,110,124,92,120,48,98,124,92,102,124,92,114,124,92,120,56,53,41>>]}]},{p,[],[<<84,104,105,115,32,105,115,32,97,110,32,101,120,97,109,112,108,101,32,111,102,32,97,110,32,34,97,116,111,109,105,99,32,103,114,111,117,112,34,44,32,100,101,116,97,105,108,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,98,101,108,111,119,46>>]},{p,[],[<<84,104,105,115,32,112,97,114,116,105,99,117,108,97,114,32,103,114,111,117,112,32,109,97,116,99,104,101,115,32,101,105,116,104,101,114,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,32,102,111,108,108,111,119,101,100,32,98,121,32,76,70,44,32,111,114,32,111,110,101,32,111,102,32,116,104,101,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,115,32,76,70,32,40,108,105,110,101,32,102,101,101,100,44,32,85,43,48,48,48,65,41,44,32,86,84,32,40,118,101,114,116,105,99,97,108,32,116,97,98,44,32,85,43,48,48,48,66,41,44,32,70,70,32,40,102,111,114,109,32,102,101,101,100,44,32,85,43,48,48,48,67,41,44,32,67,82,32,40,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,44,32,85,43,48,48,48,68,41,44,32,111,114,32,78,69,76,32,40,110,101,120,116,32,108,105,110,101,44,32,85,43,48,48,56,53,41,46,32,84,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,117,110,105,116,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,115,112,108,105,116,46>>]},{p,[],[<<73,110,32,85,110,105,99,111,100,101,32,109,111,100,101,44,32,116,119,111,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,62,32,50,53,53,32,97,114,101,32,97,100,100,101,100,58,32,76,83,32,40,108,105,110,101,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,56,41,32,97,110,100,32,80,83,32,40,112,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,57,41,46,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,32,105,115,32,110,111,116,32,110,101,101,100,101,100,32,102,111,114,32,116,104,101,115,101,32,99,104,97,114,97,99,116,101,114,115,32,116,111,32,98,101,32,114,101,99,111,103,110,105,122,101,100,46>>]},{p,[],[<<92,82,32,99,97,110,32,98,101,32,114,101,115,116,114,105,99,116,101,100,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,67,82,44,32,76,70,44,32,111,114,32,67,82,76,70,32,40,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,99,111,109,112,108,101,116,101,32,115,101,116,32,111,102,32,85,110,105,99,111,100,101,32,108,105,110,101,32,101,110,100,105,110,103,115,41,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<98,115,114,95,97,110,121,99,114,108,102>>]},<<32,101,105,116,104,101,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,32,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,109,97,116,99,104,101,100,46,32,40,66,83,82,32,105,115,32,97,110,32,97,99,114,111,110,121,109,32,102,111,114,32,34,98,97,99,107,115,108,97,115,104,32,82,34,46,41,32,84,104,105,115,32,99,97,110,32,98,101,32,109,97,100,101,32,116,104,101,32,100,101,102,97,117,108,116,32,119,104,101,110,32,80,67,82,69,32,105,115,32,98,117,105,108,116,59,32,105,102,32,115,111,44,32,116,104,101,32,111,116,104,101,114,32,98,101,104,97,118,105,111,114,32,99,97,110,32,98,101,32,114,101,113,117,101,115,116,101,100,32,116,104,114,111,117,103,104,32,111,112,116,105,111,110,32>>,{code,[],[<<98,115,114,95,117,110,105,99,111,100,101>>]},<<46,32,84,104,101,115,101,32,115,101,116,116,105,110,103,115,32,99,97,110,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,115,116,97,114,116,105,110,103,32,97,32,112,97,116,116,101,114,110,32,115,116,114,105,110,103,32,119,105,116,104,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,113,117,101,110,99,101,115,58>>]},{dl,[],[{dt,[],[<<40,42,66,83,82,95,65,78,89,67,82,76,70,41>>]},{dd,[],[<<67,82,44,32,76,70,44,32,111,114,32,67,82,76,70,32,111,110,108,121>>]},{dt,[],[<<40,42,66,83,82,95,85,78,73,67,79,68,69,41>>]},{dd,[],[<<65,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101>>]}]},{p,[],[<<84,104,101,115,101,32,111,118,101,114,114,105,100,101,32,116,104,101,32,100,101,102,97,117,108,116,32,97,110,100,32,116,104,101,32,111,112,116,105,111,110,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,116,104,101,32,99,111,109,112,105,108,105,110,103,32,102,117,110,99,116,105,111,110,44,32,98,117,116,32,116,104,101,121,32,99,97,110,32,116,104,101,109,115,101,108,118,101,115,32,98,101,32,111,118,101,114,114,105,100,100,101,110,32,98,121,32,111,112,116,105,111,110,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,97,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,115,101,32,115,112,101,99,105,97,108,32,115,101,116,116,105,110,103,115,44,32,119,104,105,99,104,32,97,114,101,32,110,111,116,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,44,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,111,110,108,121,32,97,116,32,116,104,101,32,118,101,114,121,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,44,32,97,110,100,32,116,104,97,116,32,116,104,101,121,32,109,117,115,116,32,98,101,32,105,110,32,117,112,112,101,114,32,99,97,115,101,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,111,102,32,116,104,101,109,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,32,108,97,115,116,32,111,110,101,32,105,115,32,117,115,101,100,46,32,84,104,101,121,32,99,97,110,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,97,32,99,104,97,110,103,101,32,111,102,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,59,32,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,112,97,116,116,101,114,110,32,99,97,110,32,115,116,97,114,116,32,119,105,116,104,58>>]},{pre,[],[{code,[],[<<40,42,65,78,89,41,40,42,66,83,82,95,65,78,89,67,82,76,70,41>>]}]},{p,[],[<<84,104,101,121,32,99,97,110,32,97,108,115,111,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,116,104,101,32,40,42,85,84,70,56,41,44,32,40,42,85,84,70,41,44,32,111,114,32,40,42,85,67,80,41,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,115,46,32,73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,92,82,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,117,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,44,32,97,110,100,32,115,111,32,109,97,116,99,104,101,115,32,116,104,101,32,108,101,116,116,101,114,32,34,82,34,32,98,121,32,100,101,102,97,117,108,116,46>>]},{p,[],[{em,[],[<<85,110,105,99,111,100,101,32,67,104,97,114,97,99,116,101,114,32,80,114,111,112,101,114,116,105,101,115>>]}]},{p,[],[<<84,104,114,101,101,32,109,111,114,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,116,32,109,97,116,99,104,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,115,112,101,99,105,102,105,99,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,97,118,97,105,108,97,98,108,101,46,32,87,104,101,110,32,105,110,32,56,45,98,105,116,32,110,111,110,45,85,84,70,45,56,32,109,111,100,101,44,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,97,114,101,32,108,105,109,105,116,101,100,32,116,111,32,116,101,115,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,60,32,50,53,54,44,32,98,117,116,32,116,104,101,121,32,100,111,32,119,111,114,107,32,105,110,32,116,104,105,115,32,109,111,100,101,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,101,120,116,114,97,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,58>>]},{dl,[],[{dt,[],[<<92,112,123>>,{em,[],[<<120,120>>]},<<125>>]},{dd,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,112,114,111,112,101,114,116,121,32>>,{em,[],[<<120,120>>]}]},{dt,[],[<<92,80,123>>,{em,[],[<<120,120>>]},<<125>>]},{dd,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,111,117,116,32,112,114,111,112,101,114,116,121,32>>,{em,[],[<<120,120>>]}]},{dt,[],[<<92,88>>]},{dd,[],[<<65,32,85,110,105,99,111,100,101,32,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114>>]}]},{p,[],[<<84,104,101,32,112,114,111,112,101,114,116,121,32,110,97,109,101,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32>>,{em,[],[<<120,120>>]},<<32,97,98,111,118,101,32,97,114,101,32,108,105,109,105,116,101,100,32,116,111,32,116,104,101,32,85,110,105,99,111,100,101,32,115,99,114,105,112,116,32,110,97,109,101,115,44,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,105,101,115,44,32,34,65,110,121,34,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,40,105,110,99,108,117,100,105,110,103,32,110,101,119,108,105,110,101,41,44,32,97,110,100,32,115,111,109,101,32,115,112,101,99,105,97,108,32,80,67,82,69,32,112,114,111,112,101,114,116,105,101,115,32,40,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41,46,32,79,116,104,101,114,32,80,101,114,108,32,112,114,111,112,101,114,116,105,101,115,44,32,115,117,99,104,32,97,115,32,34,73,110,77,117,115,105,99,97,108,83,121,109,98,111,108,115,34,44,32,97,114,101,32,99,117,114,114,101,110,116,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,67,82,69,46,32,78,111,116,105,99,101,32,116,104,97,116,32,92,80,123,65,110,121,125,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,97,110,100,32,97,108,119,97,121,115,32,99,97,117,115,101,115,32,97,32,109,97,116,99,104,32,102,97,105,108,117,114,101,46>>]},{p,[],[<<83,101,116,115,32,111,102,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,100,101,102,105,110,101,100,32,97,115,32,98,101,108,111,110,103,105,110,103,32,116,111,32,99,101,114,116,97,105,110,32,115,99,114,105,112,116,115,46,32,65,32,99,104,97,114,97,99,116,101,114,32,102,114,111,109,32,111,110,101,32,111,102,32,116,104,101,115,101,32,115,101,116,115,32,99,97,110,32,98,101,32,109,97,116,99,104,101,100,32,117,115,105,110,103,32,97,32,115,99,114,105,112,116,32,110,97,109,101,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<92,112,123,71,114,101,101,107,125,32,92,80,123,72,97,110,125>>]}]},{p,[],[<<84,104,111,115,101,32,116,104,97,116,32,97,114,101,32,110,111,116,32,112,97,114,116,32,111,102,32,97,110,32,105,100,101,110,116,105,102,105,101,100,32,115,99,114,105,112,116,32,97,114,101,32,108,117,109,112,101,100,32,116,111,103,101,116,104,101,114,32,97,115,32,34,67,111,109,109,111,110,34,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,108,105,115,116,32,111,102,32,115,99,114,105,112,116,115,58>>]},{ul,[],[{li,[],[<<65,114,97,98,105,99>>]},{li,[],[<<65,114,109,101,110,105,97,110>>]},{li,[],[<<65,118,101,115,116,97,110>>]},{li,[],[<<66,97,108,105,110,101,115,101>>]},{li,[],[<<66,97,109,117,109>>]},{li,[],[<<66,97,115,115,97,95,86,97,104>>]},{li,[],[<<66,97,116,97,107>>]},{li,[],[<<66,101,110,103,97,108,105>>]},{li,[],[<<66,111,112,111,109,111,102,111>>]},{li,[],[<<66,114,97,105,108,108,101>>]},{li,[],[<<66,117,103,105,110,101,115,101>>]},{li,[],[<<66,117,104,105,100>>]},{li,[],[<<67,97,110,97,100,105,97,110,95,65,98,111,114,105,103,105,110,97,108>>]},{li,[],[<<67,97,114,105,97,110>>]},{li,[],[<<67,97,117,99,97,115,105,97,110,95,65,108,98,97,110,105,97,110>>]},{li,[],[<<67,104,97,107,109,97>>]},{li,[],[<<67,104,97,109>>]},{li,[],[<<67,104,101,114,111,107,101,101>>]},{li,[],[<<67,111,109,109,111,110>>]},{li,[],[<<67,111,112,116,105,99>>]},{li,[],[<<67,117,110,101,105,102,111,114,109>>]},{li,[],[<<67,121,112,114,105,111,116>>]},{li,[],[<<67,121,114,105,108,108,105,99>>]},{li,[],[<<68,101,115,101,114,101,116>>]},{li,[],[<<68,101,118,97,110,97,103,97,114,105>>]},{li,[],[<<68,117,112,108,111,121,97,110>>]},{li,[],[<<69,103,121,112,116,105,97,110,95,72,105,101,114,111,103,108,121,112,104,115>>]},{li,[],[<<69,108,98,97,115,97,110>>]},{li,[],[<<69,116,104,105,111,112,105,99>>]},{li,[],[<<71,101,111,114,103,105,97,110>>]},{li,[],[<<71,108,97,103,111,108,105,116,105,99>>]},{li,[],[<<71,111,116,104,105,99>>]},{li,[],[<<71,114,97,110,116,104,97>>]},{li,[],[<<71,114,101,101,107>>]},{li,[],[<<71,117,106,97,114,97,116,105>>]},{li,[],[<<71,117,114,109,117,107,104,105>>]},{li,[],[<<72,97,110>>]},{li,[],[<<72,97,110,103,117,108>>]},{li,[],[<<72,97,110,117,110,111,111>>]},{li,[],[<<72,101,98,114,101,119>>]},{li,[],[<<72,105,114,97,103,97,110,97>>]},{li,[],[<<73,109,112,101,114,105,97,108,95,65,114,97,109,97,105,99>>]},{li,[],[<<73,110,104,101,114,105,116,101,100>>]},{li,[],[<<73,110,115,99,114,105,112,116,105,111,110,97,108,95,80,97,104,108,97,118,105>>]},{li,[],[<<73,110,115,99,114,105,112,116,105,111,110,97,108,95,80,97,114,116,104,105,97,110>>]},{li,[],[<<74,97,118,97,110,101,115,101>>]},{li,[],[<<75,97,105,116,104,105>>]},{li,[],[<<75,97,110,110,97,100,97>>]},{li,[],[<<75,97,116,97,107,97,110,97>>]},{li,[],[<<75,97,121,97,104,95,76,105>>]},{li,[],[<<75,104,97,114,111,115,104,116,104,105>>]},{li,[],[<<75,104,109,101,114>>]},{li,[],[<<75,104,111,106,107,105>>]},{li,[],[<<75,104,117,100,97,119,97,100,105>>]},{li,[],[<<76,97,111>>]},{li,[],[<<76,97,116,105,110>>]},{li,[],[<<76,101,112,99,104,97>>]},{li,[],[<<76,105,109,98,117>>]},{li,[],[<<76,105,110,101,97,114,95,65>>]},{li,[],[<<76,105,110,101,97,114,95,66>>]},{li,[],[<<76,105,115,117>>]},{li,[],[<<76,121,99,105,97,110>>]},{li,[],[<<76,121,100,105,97,110>>]},{li,[],[<<77,97,104,97,106,97,110,105>>]},{li,[],[<<77,97,108,97,121,97,108,97,109>>]},{li,[],[<<77,97,110,100,97,105,99>>]},{li,[],[<<77,97,110,105,99,104,97,101,97,110>>]},{li,[],[<<77,101,101,116,101,105,95,77,97,121,101,107>>]},{li,[],[<<77,101,110,100,101,95,75,105,107,97,107,117,105>>]},{li,[],[<<77,101,114,111,105,116,105,99,95,67,117,114,115,105,118,101>>]},{li,[],[<<77,101,114,111,105,116,105,99,95,72,105,101,114,111,103,108,121,112,104,115>>]},{li,[],[<<77,105,97,111>>]},{li,[],[<<77,111,100,105>>]},{li,[],[<<77,111,110,103,111,108,105,97,110>>]},{li,[],[<<77,114,111>>]},{li,[],[<<77,121,97,110,109,97,114>>]},{li,[],[<<78,97,98,97,116,97,101,97,110>>]},{li,[],[<<78,101,119,95,84,97,105,95,76,117,101>>]},{li,[],[<<78,107,111>>]},{li,[],[<<79,103,104,97,109>>]},{li,[],[<<79,108,95,67,104,105,107,105>>]},{li,[],[<<79,108,100,95,73,116,97,108,105,99>>]},{li,[],[<<79,108,100,95,78,111,114,116,104,95,65,114,97,98,105,97,110>>]},{li,[],[<<79,108,100,95,80,101,114,109,105,99>>]},{li,[],[<<79,108,100,95,80,101,114,115,105,97,110>>]},{li,[],[<<79,114,105,121,97>>]},{li,[],[<<79,108,100,95,83,111,117,116,104,95,65,114,97,98,105,97,110>>]},{li,[],[<<79,108,100,95,84,117,114,107,105,99>>]},{li,[],[<<79,115,109,97,110,121,97>>]},{li,[],[<<80,97,104,97,119,104,95,72,109,111,110,103>>]},{li,[],[<<80,97,108,109,121,114,101,110,101>>]},{li,[],[<<80,97,117,95,67,105,110,95,72,97,117>>]},{li,[],[<<80,104,97,103,115,95,80,97>>]},{li,[],[<<80,104,111,101,110,105,99,105,97,110>>]},{li,[],[<<80,115,97,108,116,101,114,95,80,97,104,108,97,118,105>>]},{li,[],[<<82,101,106,97,110,103>>]},{li,[],[<<82,117,110,105,99>>]},{li,[],[<<83,97,109,97,114,105,116,97,110>>]},{li,[],[<<83,97,117,114,97,115,104,116,114,97>>]},{li,[],[<<83,104,97,114,97,100,97>>]},{li,[],[<<83,104,97,118,105,97,110>>]},{li,[],[<<83,105,100,100,104,97,109>>]},{li,[],[<<83,105,110,104,97,108,97>>]},{li,[],[<<83,111,114,97,95,83,111,109,112,101,110,103>>]},{li,[],[<<83,117,110,100,97,110,101,115,101>>]},{li,[],[<<83,121,108,111,116,105,95,78,97,103,114,105>>]},{li,[],[<<83,121,114,105,97,99>>]},{li,[],[<<84,97,103,97,108,111,103>>]},{li,[],[<<84,97,103,98,97,110,119,97>>]},{li,[],[<<84,97,105,95,76,101>>]},{li,[],[<<84,97,105,95,84,104,97,109>>]},{li,[],[<<84,97,105,95,86,105,101,116>>]},{li,[],[<<84,97,107,114,105>>]},{li,[],[<<84,97,109,105,108>>]},{li,[],[<<84,101,108,117,103,117>>]},{li,[],[<<84,104,97,97,110,97>>]},{li,[],[<<84,104,97,105>>]},{li,[],[<<84,105,98,101,116,97,110>>]},{li,[],[<<84,105,102,105,110,97,103,104>>]},{li,[],[<<84,105,114,104,117,116,97>>]},{li,[],[<<85,103,97,114,105,116,105,99>>]},{li,[],[<<86,97,105>>]},{li,[],[<<87,97,114,97,110,103,95,67,105,116,105>>]},{li,[],[<<89,105>>]}]},{p,[],[<<69,97,99,104,32,99,104,97,114,97,99,116,101,114,32,104,97,115,32,101,120,97,99,116,108,121,32,111,110,101,32,85,110,105,99,111,100,101,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,121,44,32,115,112,101,99,105,102,105,101,100,32,98,121,32,97,32,116,119,111,45,108,101,116,116,101,114,32,97,99,114,111,110,121,109,46,32,70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,80,101,114,108,44,32,110,101,103,97,116,105,111,110,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,105,110,99,108,117,100,105,110,103,32,97,32,99,105,114,99,117,109,102,108,101,120,32,98,101,116,119,101,101,110,32,116,104,101,32,111,112,101,110,105,110,103,32,98,114,97,99,101,32,97,110,100,32,116,104,101,32,112,114,111,112,101,114,116,121,32,110,97,109,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,92,112,123,94,76,117,125,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,92,80,123,76,117,125,46>>]},{p,[],[<<73,102,32,111,110,108,121,32,111,110,101,32,108,101,116,116,101,114,32,105,115,32,115,112,101,99,105,102,105,101,100,32,119,105,116,104,32,92,112,32,111,114,32,92,80,44,32,105,116,32,105,110,99,108,117,100,101,115,32,97,108,108,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,105,101,115,32,116,104,97,116,32,115,116,97,114,116,32,119,105,116,104,32,116,104,97,116,32,108,101,116,116,101,114,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,105,110,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,32,110,101,103,97,116,105,111,110,44,32,116,104,101,32,99,117,114,108,121,32,98,114,97,99,107,101,116,115,32,105,110,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,97,114,101,32,111,112,116,105,111,110,97,108,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,116,119,111,32,101,120,97,109,112,108,101,115,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,58>>]},{pre,[],[{code,[],[<<92,112,123,76,125,10,92,112,76>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,121,32,99,111,100,101,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,58>>]},{dl,[],[{dt,[],[<<67>>]},{dd,[],[<<79,116,104,101,114>>]},{dt,[],[<<67,99>>]},{dd,[],[<<67,111,110,116,114,111,108>>]},{dt,[],[<<67,102>>]},{dd,[],[<<70,111,114,109,97,116>>]},{dt,[],[<<67,110>>]},{dd,[],[<<85,110,97,115,115,105,103,110,101,100>>]},{dt,[],[<<67,111>>]},{dd,[],[<<80,114,105,118,97,116,101,32,117,115,101>>]},{dt,[],[<<67,115>>]},{dd,[],[<<83,117,114,114,111,103,97,116,101>>]},{dt,[],[<<76>>]},{dd,[],[<<76,101,116,116,101,114>>]},{dt,[],[<<76,108>>]},{dd,[],[<<76,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114>>]},{dt,[],[<<76,109>>]},{dd,[],[<<77,111,100,105,102,105,101,114,32,108,101,116,116,101,114>>]},{dt,[],[<<76,111>>]},{dd,[],[<<79,116,104,101,114,32,108,101,116,116,101,114>>]},{dt,[],[<<76,116>>]},{dd,[],[<<84,105,116,108,101,32,99,97,115,101,32,108,101,116,116,101,114>>]},{dt,[],[<<76,117>>]},{dd,[],[<<85,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114>>]},{dt,[],[<<77>>]},{dd,[],[<<77,97,114,107>>]},{dt,[],[<<77,99>>]},{dd,[],[<<83,112,97,99,105,110,103,32,109,97,114,107>>]},{dt,[],[<<77,101>>]},{dd,[],[<<69,110,99,108,111,115,105,110,103,32,109,97,114,107>>]},{dt,[],[<<77,110>>]},{dd,[],[<<78,111,110,45,115,112,97,99,105,110,103,32,109,97,114,107>>]},{dt,[],[<<78>>]},{dd,[],[<<78,117,109,98,101,114>>]},{dt,[],[<<78,100>>]},{dd,[],[<<68,101,99,105,109,97,108,32,110,117,109,98,101,114>>]},{dt,[],[<<78,108>>]},{dd,[],[<<76,101,116,116,101,114,32,110,117,109,98,101,114>>]},{dt,[],[<<78,111>>]},{dd,[],[<<79,116,104,101,114,32,110,117,109,98,101,114>>]},{dt,[],[<<80>>]},{dd,[],[<<80,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,99>>]},{dd,[],[<<67,111,110,110,101,99,116,111,114,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,100>>]},{dd,[],[<<68,97,115,104,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,101>>]},{dd,[],[<<67,108,111,115,101,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,102>>]},{dd,[],[<<70,105,110,97,108,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,105>>]},{dd,[],[<<73,110,105,116,105,97,108,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,111>>]},{dd,[],[<<79,116,104,101,114,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,115>>]},{dd,[],[<<79,112,101,110,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<83>>]},{dd,[],[<<83,121,109,98,111,108>>]},{dt,[],[<<83,99>>]},{dd,[],[<<67,117,114,114,101,110,99,121,32,115,121,109,98,111,108>>]},{dt,[],[<<83,107>>]},{dd,[],[<<77,111,100,105,102,105,101,114,32,115,121,109,98,111,108>>]},{dt,[],[<<83,109>>]},{dd,[],[<<77,97,116,104,101,109,97,116,105,99,97,108,32,115,121,109,98,111,108>>]},{dt,[],[<<83,111>>]},{dd,[],[<<79,116,104,101,114,32,115,121,109,98,111,108>>]},{dt,[],[<<90>>]},{dd,[],[<<83,101,112,97,114,97,116,111,114>>]},{dt,[],[<<90,108>>]},{dd,[],[<<76,105,110,101,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<90,112>>]},{dd,[],[<<80,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<90,115>>]},{dd,[],[<<83,112,97,99,101,32,115,101,112,97,114,97,116,111,114>>]}]},{p,[],[<<84,104,101,32,115,112,101,99,105,97,108,32,112,114,111,112,101,114,116,121,32,76,38,32,105,115,32,97,108,115,111,32,115,117,112,112,111,114,116,101,100,46,32,73,116,32,109,97,116,99,104,101,115,32,97,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,104,97,115,32,116,104,101,32,76,117,44,32,76,108,44,32,111,114,32,76,116,32,112,114,111,112,101,114,116,121,44,32,116,104,97,116,32,105,115,44,32,97,32,108,101,116,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,99,108,97,115,115,105,102,105,101,100,32,97,115,32,97,32,109,111,100,105,102,105,101,114,32,111,114,32,34,111,116,104,101,114,34,46>>]},{p,[],[<<84,104,101,32,67,115,32,40,83,117,114,114,111,103,97,116,101,41,32,112,114,111,112,101,114,116,121,32,97,112,112,108,105,101,115,32,111,110,108,121,32,116,111,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,85,43,68,56,48,48,32,116,111,32,85,43,68,70,70,70,46,32,83,117,99,104,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,105,110,118,97,108,105,100,32,105,110,32,85,110,105,99,111,100,101,32,115,116,114,105,110,103,115,32,97,110,100,32,115,111,32,99,97,110,110,111,116,32,98,101,32,116,101,115,116,101,100,32,98,121,32,80,67,82,69,46,32,80,101,114,108,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,101,32,67,115,32,112,114,111,112,101,114,116,121,46>>]},{p,[],[<<84,104,101,32,108,111,110,103,32,115,121,110,111,110,121,109,115,32,102,111,114,32,112,114,111,112,101,114,116,121,32,110,97,109,101,115,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,101,114,108,32,40,115,117,99,104,32,97,115,32,92,112,123,76,101,116,116,101,114,125,41,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,67,82,69,46,32,73,116,32,105,115,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,116,111,32,112,114,101,102,105,120,32,97,110,121,32,111,102,32,116,104,101,115,101,32,112,114,111,112,101,114,116,105,101,115,32,119,105,116,104,32,34,73,115,34,46>>]},{p,[],[<<78,111,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,85,110,105,99,111,100,101,32,116,97,98,108,101,32,104,97,115,32,116,104,101,32,67,110,32,40,117,110,97,115,115,105,103,110,101,100,41,32,112,114,111,112,101,114,116,121,46,32,84,104,105,115,32,112,114,111,112,101,114,116,121,32,105,115,32,105,110,115,116,101,97,100,32,97,115,115,117,109,101,100,32,102,111,114,32,97,110,121,32,99,111,100,101,32,112,111,105,110,116,32,116,104,97,116,32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,85,110,105,99,111,100,101,32,116,97,98,108,101,46>>]},{p,[],[<<83,112,101,99,105,102,121,105,110,103,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,115,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,92,112,123,76,117,125,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,111,110,108,121,32,117,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114,115,46,32,84,104,105,115,32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,99,117,114,114,101,110,116,32,118,101,114,115,105,111,110,115,32,111,102,32,80,101,114,108,46>>]},{p,[],[<<77,97,116,99,104,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,105,115,32,110,111,116,32,102,97,115,116,44,32,97,115,32,80,67,82,69,32,109,117,115,116,32,100,111,32,97,32,109,117,108,116,105,115,116,97,103,101,32,116,97,98,108,101,32,108,111,111,107,117,112,32,116,111,32,102,105,110,100,32,97,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,121,46,32,84,104,97,116,32,105,115,32,119,104,121,32,116,104,101,32,116,114,97,100,105,116,105,111,110,97,108,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,115,117,99,104,32,97,115,32,92,100,32,97,110,100,32,92,119,32,100,111,32,110,111,116,32,117,115,101,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,105,110,32,80,67,82,69,32,98,121,32,100,101,102,97,117,108,116,46,32,72,111,119,101,118,101,114,44,32,121,111,117,32,99,97,110,32,109,97,107,101,32,116,104,101,109,32,100,111,32,115,111,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,111,114,32,98,121,32,115,116,97,114,116,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,119,105,116,104,32,40,42,85,67,80,41,46>>]},{p,[],[{em,[],[<<69,120,116,101,110,100,101,100,32,71,114,97,112,104,101,109,101,32,67,108,117,115,116,101,114,115>>]}]},{p,[],[<<84,104,101,32,92,88,32,101,115,99,97,112,101,32,109,97,116,99,104,101,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,102,111,114,109,32,97,110,32,34,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114,34,44,32,97,110,100,32,116,114,101,97,116,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,40,115,101,101,32,98,101,108,111,119,41,46,32,85,112,32,116,111,32,97,110,100,32,105,110,99,108,117,100,105,110,103,32,114,101,108,101,97,115,101,32,56,46,51,49,44,32,80,67,82,69,32,109,97,116,99,104,101,100,32,97,110,32,101,97,114,108,105,101,114,44,32,115,105,109,112,108,101,114,32,100,101,102,105,110,105,116,105,111,110,32,116,104,97,116,32,119,97,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<40,63,62,92,80,77,92,112,77,42,41>>]},<<46,32,84,104,97,116,32,105,115,44,32,105,116,32,109,97,116,99,104,101,100,32,97,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,111,117,116,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,44,32,102,111,108,108,111,119,101,100,32,98,121,32,122,101,114,111,32,111,114,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,46,32,67,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,32,97,114,101,32,116,121,112,105,99,97,108,108,121,32,110,111,110,45,115,112,97,99,105,110,103,32,97,99,99,101,110,116,115,32,116,104,97,116,32,97,102,102,101,99,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,99,104,97,114,97,99,116,101,114,46>>]},{p,[],[<<84,104,105,115,32,115,105,109,112,108,101,32,100,101,102,105,110,105,116,105,111,110,32,119,97,115,32,101,120,116,101,110,100,101,100,32,105,110,32,85,110,105,99,111,100,101,32,116,111,32,105,110,99,108,117,100,101,32,109,111,114,101,32,99,111,109,112,108,105,99,97,116,101,100,32,107,105,110,100,115,32,111,102,32,99,111,109,112,111,115,105,116,101,32,99,104,97,114,97,99,116,101,114,32,98,121,32,103,105,118,105,110,103,32,101,97,99,104,32,99,104,97,114,97,99,116,101,114,32,97,32,103,114,97,112,104,101,109,101,32,98,114,101,97,107,105,110,103,32,112,114,111,112,101,114,116,121,44,32,97,110,100,32,99,114,101,97,116,105,110,103,32,114,117,108,101,115,32,116,104,97,116,32,117,115,101,32,116,104,101,115,101,32,112,114,111,112,101,114,116,105,101,115,32,116,111,32,100,101,102,105,110,101,32,116,104,101,32,98,111,117,110,100,97,114,105,101,115,32,111,102,32,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114,115,46,32,73,110,32,80,67,82,69,32,114,101,108,101,97,115,101,115,32,108,97,116,101,114,32,116,104,97,110,32,56,46,51,49,44,32,92,88,32,109,97,116,99,104,101,115,32,111,110,101,32,111,102,32,116,104,101,115,101,32,99,108,117,115,116,101,114,115,46>>]},{p,[],[<<92,88,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,97,116,32,108,101,97,115,116,32,111,110,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,110,32,105,116,32,100,101,99,105,100,101,115,32,119,104,101,116,104,101,114,32,116,111,32,97,100,100,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,117,108,101,115,32,102,111,114,32,101,110,100,105,110,103,32,97,32,99,108,117,115,116,101,114,58>>]},{ol,[],[{li,[],[{p,[],[<<69,110,100,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,101,110,100,32,98,101,116,119,101,101,110,32,67,82,32,97,110,100,32,76,70,59,32,111,116,104,101,114,119,105,115,101,32,101,110,100,32,97,102,116,101,114,32,97,110,121,32,99,111,110,116,114,111,108,32,99,104,97,114,97,99,116,101,114,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,98,114,101,97,107,32,72,97,110,103,117,108,32,40,97,32,75,111,114,101,97,110,32,115,99,114,105,112,116,41,32,115,121,108,108,97,98,108,101,32,115,101,113,117,101,110,99,101,115,46,32,72,97,110,103,117,108,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,111,102,32,102,105,118,101,32,116,121,112,101,115,58,32,76,44,32,86,44,32,84,44,32,76,86,44,32,97,110,100,32,76,86,84,46,32,65,110,32,76,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,76,44,32,86,44,32,76,86,44,32,111,114,32,76,86,84,32,99,104,97,114,97,99,116,101,114,46,32,65,110,32,76,86,32,111,114,32,86,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,86,32,111,114,32,84,32,99,104,97,114,97,99,116,101,114,46,32,65,110,32,76,86,84,32,111,114,32,84,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,102,111,108,108,111,119,101,100,32,111,110,108,121,32,98,121,32,97,32,84,32,99,104,97,114,97,99,116,101,114,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,101,110,100,32,98,101,102,111,114,101,32,101,120,116,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,111,114,32,115,112,97,99,105,110,103,32,109,97,114,107,115,46,32,67,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,32,97,108,119,97,121,115,32,104,97,118,101,32,116,104,101,32,34,101,120,116,101,110,100,34,32,103,114,97,112,104,101,109,101,32,98,114,101,97,107,105,110,103,32,112,114,111,112,101,114,116,121,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,101,110,100,32,97,102,116,101,114,32,112,114,101,112,101,110,100,32,99,104,97,114,97,99,116,101,114,115,46>>]}]},{li,[],[{p,[],[<<79,116,104,101,114,119,105,115,101,44,32,101,110,100,32,116,104,101,32,99,108,117,115,116,101,114,46>>]}]}]},{p,[],[{em,[],[<<80,67,82,69,32,65,100,100,105,116,105,111,110,97,108,32,80,114,111,112,101,114,116,105,101,115>>]}]},{p,[],[<<73,110,32,97,100,100,105,116,105,111,110,32,116,111,32,116,104,101,32,115,116,97,110,100,97,114,100,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,44,32,80,67,82,69,32,115,117,112,112,111,114,116,115,32,102,111,117,114,32,109,111,114,101,32,116,104,97,116,32,109,97,107,101,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,99,111,110,118,101,114,116,32,116,114,97,100,105,116,105,111,110,97,108,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,44,32,115,117,99,104,32,97,115,32,92,119,32,97,110,100,32,92,115,32,116,111,32,117,115,101,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,46,32,80,67,82,69,32,117,115,101,115,32,116,104,101,115,101,32,110,111,110,45,115,116,97,110,100,97,114,100,44,32,110,111,110,45,80,101,114,108,32,112,114,111,112,101,114,116,105,101,115,32,105,110,116,101,114,110,97,108,108,121,32,119,104,101,110,32,116,104,101,32>>,{code,[],[<<117,99,112>>]},<<32,111,112,116,105,111,110,32,105,115,32,112,97,115,115,101,100,46,32,72,111,119,101,118,101,114,44,32,116,104,101,121,32,99,97,110,32,97,108,115,111,32,98,101,32,117,115,101,100,32,101,120,112,108,105,99,105,116,108,121,46,32,84,104,101,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<88,97,110>>]},{dd,[],[{p,[],[<<65,110,121,32,97,108,112,104,97,110,117,109,101,114,105,99,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,101,105,116,104,101,114,32,116,104,101,32,76,32,40,108,101,116,116,101,114,41,32,111,114,32,116,104,101,32,78,32,40,110,117,109,98,101,114,41,32,112,114,111,112,101,114,116,121,46>>]}]},{dt,[],[<<88,112,115>>]},{dd,[],[{p,[],[<<65,110,121,32,80,111,115,105,120,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,97,98,44,32,108,105,110,101,32,102,101,101,100,44,32,118,101,114,116,105,99,97,108,32,116,97,98,44,32,102,111,114,109,32,102,101,101,100,44,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,44,32,97,110,100,32,97,110,121,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,104,97,115,32,116,104,101,32,90,32,40,115,101,112,97,114,97,116,111,114,41,32,112,114,111,112,101,114,116,121,46>>]}]},{dt,[],[<<88,115,112>>]},{dd,[],[{p,[],[<<65,110,121,32,80,101,114,108,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,97,115,32,88,112,115,44,32,101,120,99,101,112,116,32,116,104,97,116,32,118,101,114,116,105,99,97,108,32,116,97,98,32,105,115,32,101,120,99,108,117,100,101,100,46>>]}]},{dt,[],[<<88,119,100>>]},{dd,[],[{p,[],[<<65,110,121,32,80,101,114,108,32,34,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,88,97,110,44,32,112,108,117,115,32,117,110,100,101,114,115,99,111,114,101,46>>]}]}]},{p,[],[<<80,101,114,108,32,97,110,100,32,80,79,83,73,88,32,115,112,97,99,101,32,97,114,101,32,110,111,119,32,116,104,101,32,115,97,109,101,46,32,80,101,114,108,32,97,100,100,101,100,32,86,84,32,116,111,32,105,116,115,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,32,115,101,116,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,32,97,110,100,32,80,67,82,69,32,99,104,97,110,103,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46>>]},{p,[],[<<88,97,110,32,109,97,116,99,104,101,115,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,101,105,116,104,101,114,32,116,104,101,32,76,32,40,108,101,116,116,101,114,41,32,111,114,32,116,104,101,32,78,32,40,110,117,109,98,101,114,41,32,112,114,111,112,101,114,116,121,46,32,88,112,115,32,109,97,116,99,104,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,97,98,44,32,108,105,110,101,102,101,101,100,44,32,118,101,114,116,105,99,97,108,32,116,97,98,44,32,102,111,114,109,32,102,101,101,100,44,32,111,114,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,44,32,97,110,100,32,97,110,121,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,104,97,115,32,116,104,101,32,90,32,40,115,101,112,97,114,97,116,111,114,41,32,112,114,111,112,101,114,116,121,46,32,88,115,112,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,88,112,115,59,32,105,116,32,117,115,101,100,32,116,111,32,101,120,99,108,117,100,101,32,118,101,114,116,105,99,97,108,32,116,97,98,44,32,102,111,114,32,80,101,114,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,44,32,98,117,116,32,80,101,114,108,32,99,104,97,110,103,101,100,44,32,97,110,100,32,115,111,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46,32,88,119,100,32,109,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,88,97,110,44,32,112,108,117,115,32,117,110,100,101,114,115,99,111,114,101,46>>]},{p,[],[<<84,104,101,114,101,32,105,115,32,97,110,111,116,104,101,114,32,110,111,110,45,115,116,97,110,100,97,114,100,32,112,114,111,112,101,114,116,121,44,32,88,117,99,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,85,110,105,118,101,114,115,97,108,32,67,104,97,114,97,99,116,101,114,32,78,97,109,101,32,105,110,32,67,43,43,32,97,110,100,32,111,116,104,101,114,32,112,114,111,103,114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,115,46,32,84,104,101,115,101,32,97,114,101,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,36,44,32,64,44,32,96,32,40,103,114,97,118,101,32,97,99,99,101,110,116,41,44,32,97,110,100,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,85,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,115,32,62,61,32,85,43,48,48,65,48,44,32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,115,117,114,114,111,103,97,116,101,115,32,85,43,68,56,48,48,32,116,111,32,85,43,68,70,70,70,46,32,78,111,116,105,99,101,32,116,104,97,116,32,109,111,115,116,32,98,97,115,101,32,40,65,83,67,73,73,41,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,101,120,99,108,117,100,101,100,46,32,40,85,110,105,118,101,114,115,97,108,32,67,104,97,114,97,99,116,101,114,32,78,97,109,101,115,32,97,114,101,32,111,102,32,116,104,101,32,102,111,114,109,32,92,117,72,72,72,72,32,111,114,32,92,85,72,72,72,72,72,72,72,72,44,32,119,104,101,114,101,32,72,32,105,115,32,97,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,88,117,99,32,112,114,111,112,101,114,116,121,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,98,117,116,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,116,104,101,121,32,114,101,112,114,101,115,101,110,116,46,41>>]},{p,[],[{em,[],[<<82,101,115,101,116,116,105,110,103,32,116,104,101,32,77,97,116,99,104,32,83,116,97,114,116>>]}]},{p,[],[<<84,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,75,32,99,97,117,115,101,115,32,97,110,121,32,112,114,101,118,105,111,117,115,108,121,32,109,97,116,99,104,101,100,32,99,104,97,114,97,99,116,101,114,115,32,110,111,116,32,116,111,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,102,105,110,97,108,32,109,97,116,99,104,101,100,32,115,101,113,117,101,110,99,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,102,111,111,98,97,114,34,44,32,98,117,116,32,114,101,112,111,114,116,115,32,116,104,97,116,32,105,116,32,104,97,115,32,109,97,116,99,104,101,100,32,34,98,97,114,34,58>>]},{pre,[],[{code,[],[<<102,111,111,92,75,98,97,114>>]}]},{p,[],[<<84,104,105,115,32,102,101,97,116,117,114,101,32,105,115,32,115,105,109,105,108,97,114,32,116,111,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,40,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,41,46,32,72,111,119,101,118,101,114,44,32,105,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,98,101,102,111,114,101,32,116,104,101,32,114,101,97,108,32,109,97,116,99,104,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,116,111,32,98,101,32,111,102,32,102,105,120,101,100,32,108,101,110,103,116,104,44,32,97,115,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,100,111,46,32,84,104,101,32,117,115,101,32,111,102,32,92,75,32,100,111,101,115,32,110,111,116,32,105,110,116,101,114,102,101,114,101,32,119,105,116,104,32,116,104,101,32,115,101,116,116,105,110,103,32,111,102,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,102,111,111,98,97,114,34,44,32,116,104,101,32,102,105,114,115,116,32,115,117,98,115,116,114,105,110,103,32,105,115,32,115,116,105,108,108,32,115,101,116,32,116,111,32,34,102,111,111,34,58>>]},{pre,[],[{code,[],[<<40,102,111,111,41,92,75,98,97,114>>]}]},{p,[],[<<80,101,114,108,32,100,111,99,117,109,101,110,116,115,32,116,104,97,116,32,116,104,101,32,117,115,101,32,111,102,32,92,75,32,119,105,116,104,105,110,32,97,115,115,101,114,116,105,111,110,115,32,105,115,32,34,110,111,116,32,119,101,108,108,32,100,101,102,105,110,101,100,34,46,32,73,110,32,80,67,82,69,44,32,92,75,32,105,115,32,97,99,116,101,100,32,117,112,111,110,32,119,104,101,110,32,105,116,32,111,99,99,117,114,115,32,105,110,115,105,100,101,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,44,32,98,117,116,32,105,115,32,105,103,110,111,114,101,100,32,105,110,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,78,111,116,101,32,116,104,97,116,32,119,104,101,110,32,97,32,112,97,116,116,101,114,110,32,115,117,99,104,32,97,115,32,40,63,61,97,98,92,75,41,32,109,97,116,99,104,101,115,44,32,116,104,101,32,114,101,112,111,114,116,101,100,32,115,116,97,114,116,32,111,102,32,116,104,101,32,109,97,116,99,104,32,99,97,110,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,109,97,116,99,104,46>>]},{p,[],[{em,[],[<<83,105,109,112,108,101,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<84,104,101,32,102,105,110,97,108,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,105,115,32,102,111,114,32,99,101,114,116,97,105,110,32,115,105,109,112,108,101,32,97,115,115,101,114,116,105,111,110,115,46,32,65,110,32,97,115,115,101,114,116,105,111,110,32,115,112,101,99,105,102,105,101,115,32,97,32,99,111,110,100,105,116,105,111,110,32,116,104,97,116,32,109,117,115,116,32,98,101,32,109,101,116,32,97,116,32,97,32,112,97,114,116,105,99,117,108,97,114,32,112,111,105,110,116,32,105,110,32,97,32,109,97,116,99,104,44,32,119,105,116,104,111,117,116,32,99,111,110,115,117,109,105,110,103,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,84,104,101,32,117,115,101,32,111,102,32,115,117,98,112,97,116,116,101,114,110,115,32,102,111,114,32,109,111,114,101,32,99,111,109,112,108,105,99,97,116,101,100,32,97,115,115,101,114,116,105,111,110,115,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,98,97,99,107,115,108,97,115,104,101,100,32,97,115,115,101,114,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[<<92,98>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,97,32,119,111,114,100,32,98,111,117,110,100,97,114,121,46>>]},{dt,[],[<<92,66>>]},{dd,[],[<<77,97,116,99,104,101,115,32,119,104,101,110,32,110,111,116,32,97,116,32,97,32,119,111,114,100,32,98,111,117,110,100,97,114,121,46>>]},{dt,[],[<<92,65>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46>>]},{dt,[],[<<92,90>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,97,110,100,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46>>]},{dt,[],[<<92,122>>]},{dd,[],[<<77,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46>>]},{dt,[],[<<92,71>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46>>]}]},{p,[],[<<73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,92,98,32,104,97,115,32,97,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,59,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,98,97,99,107,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,73,102,32,97,110,121,32,111,116,104,101,114,32,111,102,32,116,104,101,115,101,32,97,115,115,101,114,116,105,111,110,115,32,97,112,112,101,97,114,115,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,98,121,32,100,101,102,97,117,108,116,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,92,66,32,109,97,116,99,104,101,115,32,116,104,101,32,108,101,116,116,101,114,32,66,41,46>>]},{p,[],[<<65,32,119,111,114,100,32,98,111,117,110,100,97,114,121,32,105,115,32,97,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,119,104,101,114,101,32,116,104,101,32,99,117,114,114,101,110,116,32,99,104,97,114,97,99,116,101,114,32,97,110,100,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,104,97,114,97,99,116,101,114,32,100,111,32,110,111,116,32,98,111,116,104,32,109,97,116,99,104,32,92,119,32,111,114,32,92,87,32,40,116,104,97,116,32,105,115,44,32,111,110,101,32,109,97,116,99,104,101,115,32,92,119,32,97,110,100,32,116,104,101,32,111,116,104,101,114,32,109,97,116,99,104,101,115,32,92,87,41,44,32,111,114,32,116,104,101,32,115,116,97,114,116,32,111,114,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,105,102,32,116,104,101,32,102,105,114,115,116,32,111,114,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,32,109,97,116,99,104,101,115,32,92,119,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,73,110,32,85,84,70,32,109,111,100,101,44,32,116,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,92,119,32,97,110,100,32,92,87,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<46,32,87,104,101,110,32,116,104,105,115,32,105,115,32,100,111,110,101,44,32,105,116,32,97,108,115,111,32,97,102,102,101,99,116,115,32,92,98,32,97,110,100,32,92,66,46,32,80,67,82,69,32,97,110,100,32,80,101,114,108,32,100,111,32,110,111,116,32,104,97,118,101,32,97,32,115,101,112,97,114,97,116,101,32,34,115,116,97,114,116,32,111,102,32,119,111,114,100,34,32,111,114,32,34,101,110,100,32,111,102,32,119,111,114,100,34,32,109,101,116,97,115,101,113,117,101,110,99,101,46,32,72,111,119,101,118,101,114,44,32,119,104,97,116,101,118,101,114,32,102,111,108,108,111,119,115,32,92,98,32,110,111,114,109,97,108,108,121,32,100,101,116,101,114,109,105,110,101,115,32,119,104,105,99,104,32,105,116,32,105,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,114,97,103,109,101,110,116,32,92,98,97,32,109,97,116,99,104,101,115,32,34,97,34,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,119,111,114,100,46>>]},{p,[],[<<84,104,101,32,92,65,44,32,92,90,44,32,97,110,100,32,92,122,32,97,115,115,101,114,116,105,111,110,115,32,100,105,102,102,101,114,32,102,114,111,109,32,116,104,101,32,116,114,97,100,105,116,105,111,110,97,108,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,40,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41,32,105,110,32,116,104,97,116,32,116,104,101,121,32,111,110,108,121,32,101,118,101,114,32,109,97,116,99,104,32,97,116,32,116,104,101,32,118,101,114,121,32,115,116,97,114,116,32,97,110,100,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,119,104,97,116,101,118,101,114,32,111,112,116,105,111,110,115,32,97,114,101,32,115,101,116,46,32,84,104,117,115,44,32,116,104,101,121,32,97,114,101,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,46,32,84,104,101,115,101,32,116,104,114,101,101,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,32,110,111,116,32,97,102,102,101,99,116,101,100,32,98,121,32,111,112,116,105,111,110,115,32>>,{code,[],[<<110,111,116,98,111,108>>]},<<32,111,114,32>>,{code,[],[<<110,111,116,101,111,108>>]},<<44,32,119,104,105,99,104,32,97,102,102,101,99,116,32,111,110,108,121,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,46,32,72,111,119,101,118,101,114,44,32,105,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,105,115,32,110,111,110,45,122,101,114,111,44,32,105,110,100,105,99,97,116,105,110,103,32,116,104,97,116,32,109,97,116,99,104,105,110,103,32,105,115,32,116,111,32,115,116,97,114,116,32,97,116,32,97,32,112,111,105,110,116,32,111,116,104,101,114,32,116,104,97,110,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,92,65,32,99,97,110,32,110,101,118,101,114,32,109,97,116,99,104,46,32,84,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,101,116,119,101,101,110,32,92,90,32,97,110,100,32,92,122,32,105,115,32,116,104,97,116,32,92,90,32,109,97,116,99,104,101,115,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,97,110,100,32,97,116,32,116,104,101,32,118,101,114,121,32,101,110,100,44,32,119,104,105,108,101,32,92,122,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,46>>]},{p,[],[<<84,104,101,32,92,71,32,97,115,115,101,114,116,105,111,110,32,105,115,32,116,114,117,101,32,111,110,108,121,32,119,104,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,32,105,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,112,111,105,110,116,32,111,102,32,116,104,101,32,109,97,116,99,104,44,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<46,32,73,116,32,100,105,102,102,101,114,115,32,102,114,111,109,32,92,65,32,119,104,101,110,32,116,104,101,32,118,97,108,117,101,32,111,102,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,105,115,32,110,111,110,45,122,101,114,111,46,32,66,121,32,99,97,108,108,105,110,103,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,119,105,116,104,32,97,112,112,114,111,112,114,105,97,116,101,32,97,114,103,117,109,101,110,116,115,44,32,121,111,117,32,99,97,110,32,109,105,109,105,99,32,116,104,101,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,103>>]},<<44,32,97,110,100,32,105,116,32,105,115,32,105,110,32,116,104,105,115,32,107,105,110,100,32,111,102,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,119,104,101,114,101,32,92,71,32,99,97,110,32,98,101,32,117,115,101,102,117,108,46>>]},{p,[],[<<78,111,116,105,99,101,44,32,104,111,119,101,118,101,114,44,32,116,104,97,116,32,116,104,101,32,80,67,82,69,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,111,102,32,92,71,44,32,97,115,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,44,32,105,115,32,115,117,98,116,108,121,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,80,101,114,108,44,32,119,104,105,99,104,32,100,101,102,105,110,101,115,32,105,116,32,97,115,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,112,114,101,118,105,111,117,115,32,109,97,116,99,104,46,32,73,110,32,80,101,114,108,44,32,116,104,101,115,101,32,99,97,110,32,98,101,32,100,105,102,102,101,114,101,110,116,32,119,104,101,110,32,116,104,101,32,112,114,101,118,105,111,117,115,108,121,32,109,97,116,99,104,101,100,32,115,116,114,105,110,103,32,119,97,115,32,101,109,112,116,121,46,32,65,115,32,80,67,82,69,32,100,111,101,115,32,111,110,108,121,32,111,110,101,32,109,97,116,99,104,32,97,116,32,97,32,116,105,109,101,44,32,105,116,32,99,97,110,110,111,116,32,114,101,112,114,111,100,117,99,101,32,116,104,105,115,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<73,102,32,97,108,108,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,111,102,32,97,32,112,97,116,116,101,114,110,32,98,101,103,105,110,32,119,105,116,104,32,92,71,44,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,97,110,99,104,111,114,101,100,32,116,111,32,116,104,101,32,115,116,97,114,116,105,110,103,32,109,97,116,99,104,32,112,111,115,105,116,105,111,110,44,32,97,110,100,32,116,104,101,32,34,97,110,99,104,111,114,101,100,34,32,102,108,97,103,32,105,115,32,115,101,116,32,105,110,32,116,104,101,32,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{a,[{id,<<115,101,99,116,52>>}],[]},{h2,[],[<<67,105,114,99,117,109,102,108,101,120,32,97,110,100,32,68,111,108,108,97,114>>]},{p,[],[<<84,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,122,101,114,111,45,119,105,100,116,104,32,97,115,115,101,114,116,105,111,110,115,46,32,84,104,97,116,32,105,115,44,32,116,104,101,121,32,116,101,115,116,32,102,111,114,32,97,32,112,97,114,116,105,99,117,108,97,114,32,99,111,110,100,105,116,105,111,110,32,116,111,32,98,101,32,116,114,117,101,32,119,105,116,104,111,117,116,32,99,111,110,115,117,109,105,110,103,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,105,110,32,116,104,101,32,100,101,102,97,117,108,116,32,109,97,116,99,104,105,110,103,32,109,111,100,101,44,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,99,104,97,114,97,99,116,101,114,32,105,115,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,32,111,110,108,121,32,105,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,73,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,105,115,32,110,111,110,45,122,101,114,111,44,32,99,105,114,99,117,109,102,108,101,120,32,99,97,110,32,110,101,118,101,114,32,109,97,116,99,104,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,117,110,115,101,116,46,32,73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,99,105,114,99,117,109,102,108,101,120,32,104,97,115,32,97,110,32,101,110,116,105,114,101,108,121,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,32,40,115,101,101,32,98,101,108,111,119,41,46>>]},{p,[],[<<67,105,114,99,117,109,102,108,101,120,32,110,101,101,100,115,32,110,111,116,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,102,32,115,111,109,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,105,110,118,111,108,118,101,100,44,32,98,117,116,32,105,116,32,105,115,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,116,104,105,110,103,32,105,110,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,119,104,105,99,104,32,105,116,32,97,112,112,101,97,114,115,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,101,118,101,114,32,116,111,32,109,97,116,99,104,32,116,104,97,116,32,98,114,97,110,99,104,46,32,73,102,32,97,108,108,32,112,111,115,115,105,98,108,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,115,116,97,114,116,32,119,105,116,104,32,97,32,99,105,114,99,117,109,102,108,101,120,44,32,116,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,99,111,110,115,116,114,97,105,110,101,100,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,105,116,32,105,115,32,115,97,105,100,32,116,111,32,98,101,32,97,110,32,34,97,110,99,104,111,114,101,100,34,32,112,97,116,116,101,114,110,46,32,40,84,104,101,114,101,32,97,114,101,32,97,108,115,111,32,111,116,104,101,114,32,99,111,110,115,116,114,117,99,116,115,32,116,104,97,116,32,99,97,110,32,99,97,117,115,101,32,97,32,112,97,116,116,101,114,110,32,116,111,32,98,101,32,97,110,99,104,111,114,101,100,46,41>>]},{p,[],[<<84,104,101,32,100,111,108,108,97,114,32,99,104,97,114,97,99,116,101,114,32,105,115,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,32,111,110,108,121,32,105,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,111,114,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,40,98,121,32,100,101,102,97,117,108,116,41,46,32,78,111,116,105,99,101,32,104,111,119,101,118,101,114,32,116,104,97,116,32,105,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,110,101,119,108,105,110,101,46,32,68,111,108,108,97,114,32,110,101,101,100,115,32,110,111,116,32,116,111,32,98,101,32,116,104,101,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,102,32,115,111,109,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,105,110,118,111,108,118,101,100,44,32,98,117,116,32,105,116,32,105,115,32,116,111,32,98,101,32,116,104,101,32,108,97,115,116,32,105,116,101,109,32,105,110,32,97,110,121,32,98,114,97,110,99,104,32,105,110,32,119,104,105,99,104,32,105,116,32,97,112,112,101,97,114,115,46,32,68,111,108,108,97,114,32,104,97,115,32,110,111,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46>>]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,100,111,108,108,97,114,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,105,116,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,118,101,114,121,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]},<<32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46,32,84,104,105,115,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,92,90,32,97,115,115,101,114,116,105,111,110,46>>]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,99,104,97,110,103,101,100,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46,32,87,104,101,110,32,116,104,105,115,32,105,115,32,116,104,101,32,99,97,115,101,44,32,97,32,99,105,114,99,117,109,102,108,101,120,32,109,97,116,99,104,101,115,32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,105,110,116,101,114,110,97,108,32,110,101,119,108,105,110,101,115,32,97,110,100,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,73,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,97,102,116,101,114,32,97,32,110,101,119,108,105,110,101,32,116,104,97,116,32,101,110,100,115,32,116,104,101,32,115,116,114,105,110,103,46,32,65,32,100,111,108,108,97,114,32,109,97,116,99,104,101,115,32,98,101,102,111,114,101,32,97,110,121,32,110,101,119,108,105,110,101,115,32,105,110,32,116,104,101,32,115,116,114,105,110,103,44,32,97,110,100,32,97,116,32,116,104,101,32,118,101,114,121,32,101,110,100,44,32,119,104,101,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46,32,87,104,101,110,32,110,101,119,108,105,110,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,44,32,105,115,111,108,97,116,101,100,32,67,82,32,97,110,100,32,76,70,32,99,104,97,114,97,99,116,101,114,115,32,100,111,32,110,111,116,32,105,110,100,105,99,97,116,101,32,110,101,119,108,105,110,101,115,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,112,97,116,116,101,114,110,32,47,94,97,98,99,36,47,32,109,97,116,99,104,101,115,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,34,100,101,102,92,110,97,98,99,34,32,40,119,104,101,114,101,32,92,110,32,114,101,112,114,101,115,101,110,116,115,32,97,32,110,101,119,108,105,110,101,41,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,44,32,98,117,116,32,110,111,116,32,111,116,104,101,114,119,105,115,101,46,32,83,111,44,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,97,110,99,104,111,114,101,100,32,105,110,32,115,105,110,103,108,101,45,108,105,110,101,32,109,111,100,101,32,98,101,99,97,117,115,101,32,97,108,108,32,98,114,97,110,99,104,101,115,32,115,116,97,114,116,32,119,105,116,104,32,94,32,97,114,101,32,110,111,116,32,97,110,99,104,111,114,101,100,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,44,32,97,110,100,32,97,32,109,97,116,99,104,32,102,111,114,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,112,111,115,115,105,98,108,101,32,119,104,101,110,32,97,114,103,117,109,101,110,116,32>>,{em,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,105,115,32,110,111,110,45,122,101,114,111,46,32,79,112,116,105,111,110,32>>,{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]},<<32,105,115,32,105,103,110,111,114,101,100,32,105,102,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,115,101,113,117,101,110,99,101,115,32,92,65,44,32,92,90,44,32,97,110,100,32,92,122,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,97,116,99,104,32,116,104,101,32,115,116,97,114,116,32,97,110,100,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,110,32,98,111,116,104,32,109,111,100,101,115,46,32,73,102,32,97,108,108,32,98,114,97,110,99,104,101,115,32,111,102,32,97,32,112,97,116,116,101,114,110,32,115,116,97,114,116,32,119,105,116,104,32,92,65,44,32,105,116,32,105,115,32,97,108,119,97,121,115,32,97,110,99,104,111,114,101,100,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46>>]},{a,[{id,<<115,101,99,116,53>>}],[]},{h2,[],[<<70,117,108,108,32,83,116,111,112,32,40,80,101,114,105,111,100,44,32,68,111,116,41,32,97,110,100,32,92,78>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,32,100,111,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,101,120,99,101,112,116,32,40,98,121,32,100,101,102,97,117,108,116,41,32,97,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,115,105,103,110,105,102,105,101,115,32,116,104,101,32,101,110,100,32,111,102,32,97,32,108,105,110,101,46>>]},{p,[],[<<87,104,101,110,32,97,32,108,105,110,101,32,101,110,100,105,110,103,32,105,115,32,100,101,102,105,110,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,44,32,100,111,116,32,110,101,118,101,114,32,109,97,116,99,104,101,115,32,116,104,97,116,32,99,104,97,114,97,99,116,101,114,46,32,87,104,101,110,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,32,105,115,32,117,115,101,100,44,32,100,111,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,67,82,32,105,102,32,105,116,32,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,101,100,32,98,121,32,76,70,44,32,111,116,104,101,114,119,105,115,101,32,105,116,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,99,108,117,100,105,110,103,32,105,115,111,108,97,116,101,100,32,67,82,115,32,97,110,100,32,76,70,115,41,46,32,87,104,101,110,32,97,110,121,32,85,110,105,99,111,100,101,32,108,105,110,101,32,101,110,100,105,110,103,115,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,44,32,100,111,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,67,82,44,32,76,70,44,32,111,114,32,97,110,121,32,111,102,32,116,104,101,32,111,116,104,101,114,32,108,105,110,101,45,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,100,111,116,32,114,101,103,97,114,100,105,110,103,32,110,101,119,108,105,110,101,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,105,115,32,115,101,116,44,32,97,32,100,111,116,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,44,32,119,105,116,104,111,117,116,32,101,120,99,101,112,116,105,111,110,46,32,73,102,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,32,105,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,105,116,32,116,97,107,101,115,32,116,119,111,32,100,111,116,115,32,116,111,32,109,97,116,99,104,32,105,116,46>>]},{p,[],[<<84,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,100,111,116,32,105,115,32,101,110,116,105,114,101,108,121,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,116,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,44,32,116,104,101,32,111,110,108,121,32,114,101,108,97,116,105,111,110,115,104,105,112,32,105,115,32,116,104,97,116,32,98,111,116,104,32,105,110,118,111,108,118,101,32,110,101,119,108,105,110,101,115,46,32,68,111,116,32,104,97,115,32,110,111,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46>>]},{p,[],[<<84,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,78,32,98,101,104,97,118,101,115,32,108,105,107,101,32,97,32,100,111,116,44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,105,115,32,110,111,116,32,97,102,102,101,99,116,101,100,32,98,121,32,111,112,116,105,111,110,32>>,{code,[],[<<80,67,82,69,95,68,79,84,65,76,76>>]},<<46,32,84,104,97,116,32,105,115,44,32,105,116,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,101,120,99,101,112,116,32,111,110,101,32,116,104,97,116,32,115,105,103,110,105,102,105,101,115,32,116,104,101,32,101,110,100,32,111,102,32,97,32,108,105,110,101,46,32,80,101,114,108,32,97,108,115,111,32,117,115,101,115,32,92,78,32,116,111,32,109,97,116,99,104,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,110,97,109,101,32,98,117,116,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,105,115,46>>]},{a,[{id,<<115,101,99,116,54>>}],[]},{h2,[],[<<77,97,116,99,104,105,110,103,32,97,32,83,105,110,103,108,101,32,68,97,116,97,32,85,110,105,116>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,67,32,109,97,116,99,104,101,115,32,97,110,121,32,100,97,116,97,32,117,110,105,116,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32,97,32,85,84,70,32,109,111,100,101,32,105,115,32,115,101,116,46,32,79,110,101,32,100,97,116,97,32,117,110,105,116,32,105,115,32,111,110,101,32,98,121,116,101,46,32,85,110,108,105,107,101,32,97,32,100,111,116,44,32,92,67,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,108,105,110,101,45,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,102,101,97,116,117,114,101,32,105,115,32,112,114,111,118,105,100,101,100,32,105,110,32,80,101,114,108,32,116,111,32,109,97,116,99,104,32,105,110,100,105,118,105,100,117,97,108,32,98,121,116,101,115,32,105,110,32,85,84,70,45,56,32,109,111,100,101,44,32,98,117,116,32,105,116,32,105,115,32,117,110,99,108,101,97,114,32,104,111,119,32,105,116,32,99,97,110,32,117,115,101,102,117,108,108,121,32,98,101,32,117,115,101,100,46,32,65,115,32,92,67,32,98,114,101,97,107,115,32,117,112,32,99,104,97,114,97,99,116,101,114,115,32,105,110,116,111,32,105,110,100,105,118,105,100,117,97,108,32,100,97,116,97,32,117,110,105,116,115,44,32,109,97,116,99,104,105,110,103,32,111,110,101,32,117,110,105,116,32,119,105,116,104,32,92,67,32,105,110,32,97,32,85,84,70,32,109,111,100,101,32,109,101,97,110,115,32,116,104,97,116,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,116,114,105,110,103,32,99,97,110,32,115,116,97,114,116,32,119,105,116,104,32,97,32,109,97,108,102,111,114,109,101,100,32,85,84,70,32,99,104,97,114,97,99,116,101,114,46,32,84,104,105,115,32,104,97,115,32,117,110,100,101,102,105,110,101,100,32,114,101,115,117,108,116,115,44,32,97,115,32,80,67,82,69,32,97,115,115,117,109,101,115,32,116,104,97,116,32,105,116,32,100,101,97,108,115,32,119,105,116,104,32,118,97,108,105,100,32,85,84,70,32,115,116,114,105,110,103,115,46>>]},{p,[],[<<80,67,82,69,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,92,67,32,116,111,32,97,112,112,101,97,114,32,105,110,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,40,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,41,32,105,110,32,97,32,85,84,70,32,109,111,100,101,44,32,97,115,32,116,104,105,115,32,119,111,117,108,100,32,109,97,107,101,32,105,116,32,105,109,112,111,115,115,105,98,108,101,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,108,111,111,107,98,101,104,105,110,100,46>>]},{p,[],[<<84,104,101,32,92,67,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,115,32,98,101,115,116,32,97,118,111,105,100,101,100,46,32,72,111,119,101,118,101,114,44,32,111,110,101,32,119,97,121,32,111,102,32,117,115,105,110,103,32,105,116,32,116,104,97,116,32,97,118,111,105,100,115,32,116,104,101,32,112,114,111,98,108,101,109,32,111,102,32,109,97,108,102,111,114,109,101,100,32,85,84,70,32,99,104,97,114,97,99,116,101,114,115,32,105,115,32,116,111,32,117,115,101,32,97,32,108,111,111,107,97,104,101,97,100,32,116,111,32,99,104,101,99,107,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,44,32,97,115,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,97,32,85,84,70,45,56,32,115,116,114,105,110,103,32,40,105,103,110,111,114,101,32,119,104,105,116,101,115,112,97,99,101,32,97,110,100,32,108,105,110,101,32,98,114,101,97,107,115,41,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<40,63,124,32,40,63,61,91,92,120,48,48,45,92,120,55,102,93,41,40,92,67,41,32,124,10,32,32,32,32,40,63,61,91,92,120,56,48,45,92,120,123,55,102,102,125,93,41,40,92,67,41,40,92,67,41,32,124,10,32,32,32,32,40,63,61,91,92,120,123,56,48,48,125,45,92,120,123,102,102,102,102,125,93,41,40,92,67,41,40,92,67,41,40,92,67,41,32,124,10,32,32,32,32,40,63,61,91,92,120,123,49,48,48,48,48,125,45,92,120,123,49,102,102,102,102,102,125,93,41,40,92,67,41,40,92,67,41,40,92,67,41,40,92,67,41,41>>]}]},{p,[],[<<65,32,103,114,111,117,112,32,116,104,97,116,32,115,116,97,114,116,115,32,119,105,116,104,32,40,63,124,32,114,101,115,101,116,115,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,110,117,109,98,101,114,115,32,105,110,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]},<<41,46,32,84,104,101,32,97,115,115,101,114,116,105,111,110,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,101,97,99,104,32,98,114,97,110,99,104,32,99,104,101,99,107,32,116,104,101,32,110,101,120,116,32,85,84,70,45,56,32,99,104,97,114,97,99,116,101,114,32,102,111,114,32,118,97,108,117,101,115,32,119,104,111,115,101,32,101,110,99,111,100,105,110,103,32,117,115,101,115,32,49,44,32,50,44,32,51,44,32,111,114,32,52,32,98,121,116,101,115,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,84,104,101,32,105,110,100,105,118,105,100,117,97,108,32,98,121,116,101,115,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,97,114,101,32,116,104,101,110,32,99,97,112,116,117,114,101,100,32,98,121,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,110,117,109,98,101,114,32,111,102,32,103,114,111,117,112,115,46>>]},{a,[{id,<<115,101,99,116,55>>}],[]},{h2,[],[<<83,113,117,97,114,101,32,66,114,97,99,107,101,116,115,32,97,110,100,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]},{p,[],[<<65,110,32,111,112,101,110,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,105,110,116,114,111,100,117,99,101,115,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,101,114,109,105,110,97,116,101,100,32,98,121,32,97,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,46,32,65,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,111,110,32,105,116,115,32,111,119,110,32,105,115,32,110,111,116,32,115,112,101,99,105,97,108,32,98,121,32,100,101,102,97,117,108,116,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<80,67,82,69,95,74,65,86,65,83,67,82,73,80,84,95,67,79,77,80,65,84>>]},<<32,105,115,32,115,101,116,44,32,97,32,108,111,110,101,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,99,97,117,115,101,115,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,46,32,73,102,32,97,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,105,115,32,114,101,113,117,105,114,101,100,32,97,115,32,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,99,108,97,115,115,44,32,105,116,32,105,115,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,99,108,97,115,115,32,40,97,102,116,101,114,32,97,110,32,105,110,105,116,105,97,108,32,99,105,114,99,117,109,102,108,101,120,44,32,105,102,32,112,114,101,115,101,110,116,41,32,111,114,32,101,115,99,97,112,101,100,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,46>>]},{p,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,73,110,32,97,32,85,84,70,32,109,111,100,101,44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,100,97,116,97,32,117,110,105,116,32,108,111,110,103,46,32,65,32,109,97,116,99,104,101,100,32,99,104,97,114,97,99,116,101,114,32,109,117,115,116,32,98,101,32,105,110,32,116,104,101,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,100,101,102,105,110,101,100,32,98,121,32,116,104,101,32,99,108,97,115,115,44,32,117,110,108,101,115,115,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,99,108,97,115,115,32,100,101,102,105,110,105,116,105,111,110,32,105,115,32,97,32,99,105,114,99,117,109,102,108,101,120,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,116,104,101,32,115,117,98,106,101,99,116,32,99,104,97,114,97,99,116,101,114,32,109,117,115,116,32,110,111,116,32,98,101,32,105,110,32,116,104,101,32,115,101,116,32,100,101,102,105,110,101,100,32,98,121,32,116,104,101,32,99,108,97,115,115,46,32,73,102,32,97,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,114,101,113,117,105,114,101,100,32,97,115,32,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,99,108,97,115,115,44,32,101,110,115,117,114,101,32,116,104,97,116,32,105,116,32,105,115,32,110,111,116,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,101,115,99,97,112,101,32,105,116,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32>>,{code,[],[<<91,97,101,105,111,117,93>>]},<<32,109,97,116,99,104,101,115,32,97,110,121,32,108,111,119,101,114,99,97,115,101,32,118,111,119,101,108,44,32,119,104,105,108,101,32>>,{code,[],[<<91,94,97,101,105,111,117,93>>]},<<32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,108,111,119,101,114,99,97,115,101,32,118,111,119,101,108,46,32,78,111,116,105,99,101,32,116,104,97,116,32,97,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,106,117,115,116,32,97,32,99,111,110,118,101,110,105,101,110,116,32,110,111,116,97,116,105,111,110,32,102,111,114,32,115,112,101,99,105,102,121,105,110,103,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,105,110,32,116,104,101,32,99,108,97,115,115,32,98,121,32,101,110,117,109,101,114,97,116,105,110,103,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,110,111,116,46,32,65,32,99,108,97,115,115,32,116,104,97,116,32,115,116,97,114,116,115,32,119,105,116,104,32,97,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,110,111,116,32,97,110,32,97,115,115,101,114,116,105,111,110,59,32,105,116,32,115,116,105,108,108,32,99,111,110,115,117,109,101,115,32,97,32,99,104,97,114,97,99,116,101,114,32,102,114,111,109,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,105,116,32,102,97,105,108,115,32,105,102,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,105,110,116,101,114,32,105,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,46>>]},{p,[],[<<73,110,32,85,84,70,45,56,32,109,111,100,101,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,32,40,48,120,102,102,102,102,41,32,99,97,110,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,32,99,108,97,115,115,32,97,115,32,97,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,32,111,102,32,100,97,116,97,32,117,110,105,116,115,44,32,111,114,32,98,121,32,117,115,105,110,103,32,116,104,101,32,92,120,123,32,101,115,99,97,112,105,110,103,32,109,101,99,104,97,110,105,115,109,46>>]},{p,[],[<<87,104,101,110,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,115,101,116,44,32,97,110,121,32,108,101,116,116,101,114,115,32,105,110,32,97,32,99,108,97,115,115,32,114,101,112,114,101,115,101,110,116,32,98,111,116,104,32,116,104,101,105,114,32,117,112,112,101,114,99,97,115,101,32,97,110,100,32,108,111,119,101,114,99,97,115,101,32,118,101,114,115,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,32,99,97,115,101,108,101,115,115,32>>,{code,[],[<<91,97,101,105,111,117,93>>]},<<32,109,97,116,99,104,101,115,32,34,65,34,32,97,110,100,32,34,97,34,44,32,97,110,100,32,97,32,99,97,115,101,108,101,115,115,32>>,{code,[],[<<91,94,97,101,105,111,117,93>>]},<<32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,34,65,34,44,32,98,117,116,32,97,32,99,97,115,101,102,117,108,32,118,101,114,115,105,111,110,32,119,111,117,108,100,46,32,73,110,32,97,32,85,84,70,32,109,111,100,101,44,32,80,67,82,69,32,97,108,119,97,121,115,32,117,110,100,101,114,115,116,97,110,100,115,32,116,104,101,32,99,111,110,99,101,112,116,32,111,102,32,99,97,115,101,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,118,97,108,117,101,115,32,97,114,101,32,60,32,50,53,54,44,32,115,111,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,97,108,119,97,121,115,32,112,111,115,115,105,98,108,101,46,32,70,111,114,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,104,105,103,104,101,114,32,118,97,108,117,101,115,44,32,116,104,101,32,99,111,110,99,101,112,116,32,111,102,32,99,97,115,101,32,105,115,32,115,117,112,112,111,114,116,101,100,32,111,110,108,121,32,105,102,32,80,67,82,69,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,117,115,101,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,110,32,97,32,85,84,70,32,109,111,100,101,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,62,61,44,32,101,110,115,117,114,101,32,116,104,97,116,32,80,67,82,69,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,32,97,110,100,32,119,105,116,104,32,85,84,70,32,115,117,112,112,111,114,116,46>>]},{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,99,97,110,32,105,110,100,105,99,97,116,101,32,108,105,110,101,32,98,114,101,97,107,115,32,97,114,101,32,110,101,118,101,114,32,116,114,101,97,116,101,100,32,105,110,32,97,110,121,32,115,112,101,99,105,97,108,32,119,97,121,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,44,32,119,104,97,116,101,118,101,114,32,108,105,110,101,45,101,110,100,105,110,103,32,115,101,113,117,101,110,99,101,32,105,115,32,105,110,32,117,115,101,44,32,97,110,100,32,119,104,97,116,101,118,101,114,32,115,101,116,116,105,110,103,32,111,102,32,111,112,116,105,111,110,115,32>>,{code,[],[<<80,67,82,69,95,68,79,84,65,76,76>>]},<<32,97,110,100,32>>,{code,[],[<<80,67,82,69,95,77,85,76,84,73,76,73,78,69>>]},<<32,105,115,32,117,115,101,100,46,32,65,32,99,108,97,115,115,32,115,117,99,104,32,97,115,32,91,94,97,93,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,111,110,101,32,111,102,32,116,104,101,115,101,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,109,105,110,117,115,32,40,104,121,112,104,101,110,41,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,115,112,101,99,105,102,121,32,97,32,114,97,110,103,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,100,45,109,93,32,109,97,116,99,104,101,115,32,97,110,121,32,108,101,116,116,101,114,32,98,101,116,119,101,101,110,32,100,32,97,110,100,32,109,44,32,105,110,99,108,117,115,105,118,101,46,32,73,102,32,97,32,109,105,110,117,115,32,99,104,97,114,97,99,116,101,114,32,105,115,32,114,101,113,117,105,114,101,100,32,105,110,32,97,32,99,108,97,115,115,44,32,105,116,32,109,117,115,116,32,98,101,32,101,115,99,97,112,101,100,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,32,111,114,32,97,112,112,101,97,114,32,105,110,32,97,32,112,111,115,105,116,105,111,110,32,119,104,101,114,101,32,105,116,32,99,97,110,110,111,116,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,105,110,100,105,99,97,116,105,110,103,32,97,32,114,97,110,103,101,44,32,116,121,112,105,99,97,108,108,121,32,97,115,32,116,104,101,32,102,105,114,115,116,32,111,114,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,99,108,97,115,115,44,32,111,114,32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,97,32,114,97,110,103,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,98,45,100,45,122,93,32,109,97,116,99,104,101,115,32,108,101,116,116,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,98,32,116,111,32,100,44,32,97,32,104,121,112,104,101,110,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,122,46>>]},{p,[],[<<84,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,32,34,93,34,32,99,97,110,110,111,116,32,98,101,32,116,104,101,32,101,110,100,32,99,104,97,114,97,99,116,101,114,32,111,102,32,97,32,114,97,110,103,101,46,32,65,32,112,97,116,116,101,114,110,32,115,117,99,104,32,97,115,32,91,87,45,93,52,54,93,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,99,108,97,115,115,32,111,102,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,32,40,34,87,34,32,97,110,100,32,34,45,34,41,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,32,34,52,54,93,34,44,32,115,111,32,105,116,32,119,111,117,108,100,32,109,97,116,99,104,32,34,87,52,54,93,34,32,111,114,32,34,45,52,54,93,34,46,32,72,111,119,101,118,101,114,44,32,105,102,32,34,93,34,32,105,115,32,101,115,99,97,112,101,100,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,44,32,105,116,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,116,104,101,32,101,110,100,32,111,102,32,114,97,110,103,101,44,32,115,111,32,91,87,45,92,93,52,54,93,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,99,108,97,115,115,32,99,111,110,116,97,105,110,105,110,103,32,97,32,114,97,110,103,101,32,102,111,108,108,111,119,101,100,32,98,121,32,116,119,111,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,111,99,116,97,108,32,111,114,32,104,101,120,97,100,101,99,105,109,97,108,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,34,93,34,32,99,97,110,32,97,108,115,111,32,98,101,32,117,115,101,100,32,116,111,32,101,110,100,32,97,32,114,97,110,103,101,46>>]},{p,[],[<<65,110,32,101,114,114,111,114,32,105,115,32,103,101,110,101,114,97,116,101,100,32,105,102,32,97,32,80,79,83,73,88,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,40,115,101,101,32,98,101,108,111,119,41,32,111,114,32,97,110,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,111,116,104,101,114,32,116,104,97,110,32,111,110,101,32,116,104,97,116,32,100,101,102,105,110,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,97,112,112,101,97,114,115,32,97,116,32,97,32,112,111,105,110,116,32,119,104,101,114,101,32,97,32,114,97,110,103,101,32,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,32,105,115,32,101,120,112,101,99,116,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,122,45,92,120,102,102,93,32,105,115,32,118,97,108,105,100,44,32,98,117,116,32,91,65,45,92,100,93,32,97,110,100,32,91,65,45,91,58,100,105,103,105,116,58,93,93,32,97,114,101,32,110,111,116,46>>]},{p,[],[<<82,97,110,103,101,115,32,111,112,101,114,97,116,101,32,105,110,32,116,104,101,32,99,111,108,108,97,116,105,110,103,32,115,101,113,117,101,110,99,101,32,111,102,32,99,104,97,114,97,99,116,101,114,32,118,97,108,117,101,115,46,32,84,104,101,121,32,99,97,110,32,97,108,115,111,32,98,101,32,117,115,101,100,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,115,112,101,99,105,102,105,101,100,32,110,117,109,101,114,105,99,97,108,108,121,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,91,92,48,48,48,45,92,48,51,55,93,46,32,82,97,110,103,101,115,32,99,97,110,32,105,110,99,108,117,100,101,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,118,97,108,105,100,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,109,111,100,101,46>>]},{p,[],[<<73,102,32,97,32,114,97,110,103,101,32,116,104,97,116,32,105,110,99,108,117,100,101,115,32,108,101,116,116,101,114,115,32,105,115,32,117,115,101,100,32,119,104,101,110,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,115,101,116,44,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,108,101,116,116,101,114,115,32,105,110,32,101,105,116,104,101,114,32,99,97,115,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,87,45,99,93,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,91,93,91,92,92,94,95,96,119,120,121,122,97,98,99,93,44,32,109,97,116,99,104,101,100,32,99,97,115,101,108,101,115,115,108,121,46,32,73,110,32,97,32,110,111,110,45,85,84,70,32,109,111,100,101,44,32,105,102,32,99,104,97,114,97,99,116,101,114,32,116,97,98,108,101,115,32,102,111,114,32,97,32,70,114,101,110,99,104,32,108,111,99,97,108,101,32,97,114,101,32,105,110,32,117,115,101,44,32,91,92,120,99,56,45,92,120,99,98,93,32,109,97,116,99,104,101,115,32,97,99,99,101,110,116,101,100,32,69,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,98,111,116,104,32,99,97,115,101,115,46,32,73,110,32,85,84,70,32,109,111,100,101,115,44,32,80,67,82,69,32,115,117,112,112,111,114,116,115,32,116,104,101,32,99,111,110,99,101,112,116,32,111,102,32,99,97,115,101,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,32,111,110,108,121,32,119,104,101,110,32,105,116,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,46>>]},{p,[],[<<84,104,101,32,99,104,97,114,97,99,116,101,114,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,92,100,44,32,92,68,44,32,92,104,44,32,92,72,44,32,92,112,44,32,92,80,44,32,92,115,44,32,92,83,44,32,92,118,44,32,92,86,44,32,92,119,44,32,97,110,100,32,92,87,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,110,100,32,97,100,100,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,116,104,101,121,32,109,97,116,99,104,32,116,111,32,116,104,101,32,99,108,97,115,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,92,100,65,66,67,68,69,70,93,32,109,97,116,99,104,101,115,32,97,110,121,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,46,32,73,110,32,85,84,70,32,109,111,100,101,115,44,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,97,102,102,101,99,116,115,32,116,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,92,100,44,32,92,115,44,32,92,119,32,97,110,100,32,116,104,101,105,114,32,117,112,112,101,114,99,97,115,101,32,112,97,114,116,110,101,114,115,44,32,106,117,115,116,32,97,115,32,105,116,32,100,111,101,115,32,119,104,101,110,32,116,104,101,121,32,97,112,112,101,97,114,32,111,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,103,101,110,101,114,105,99,95,99,104,97,114,97,99,116,101,114,95,116,121,112,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<71,101,110,101,114,105,99,32,67,104,97,114,97,99,116,101,114,32,84,121,112,101,115>>]},<<32,101,97,114,108,105,101,114,46,32,84,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,98,32,104,97,115,32,97,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,59,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,98,97,99,107,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,115,101,113,117,101,110,99,101,115,32,92,66,44,32,92,78,44,32,92,82,44,32,97,110,100,32,92,88,32,97,114,101,32,110,111,116,32,115,112,101,99,105,97,108,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,76,105,107,101,32,97,110,121,32,111,116,104,101,114,32,117,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,44,32,116,104,101,121,32,97,114,101,32,116,114,101,97,116,101,100,32,97,115,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,66,34,44,32,34,78,34,44,32,34,82,34,44,32,97,110,100,32,34,88,34,46>>]},{p,[],[<<65,32,99,105,114,99,117,109,102,108,101,120,32,99,97,110,32,99,111,110,118,101,110,105,101,110,116,108,121,32,98,101,32,117,115,101,100,32,119,105,116,104,32,116,104,101,32,117,112,112,101,114,99,97,115,101,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,32,116,111,32,115,112,101,99,105,102,121,32,97,32,109,111,114,101,32,114,101,115,116,114,105,99,116,101,100,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,110,32,116,104,101,32,109,97,116,99,104,105,110,103,32,108,111,119,101,114,99,97,115,101,32,116,121,112,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,108,97,115,115,32,91,94,92,87,95,93,32,109,97,116,99,104,101,115,32,97,110,121,32,108,101,116,116,101,114,32,111,114,32,100,105,103,105,116,44,32,98,117,116,32,110,111,116,32,117,110,100,101,114,115,99,111,114,101,44,32,119,104,105,108,101,32,91,92,119,93,32,105,110,99,108,117,100,101,115,32,117,110,100,101,114,115,99,111,114,101,46,32,65,32,112,111,115,105,116,105,118,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,105,115,32,116,111,32,98,101,32,114,101,97,100,32,97,115,32,34,115,111,109,101,116,104,105,110,103,32,79,82,32,115,111,109,101,116,104,105,110,103,32,79,82,32,46,46,46,34,32,97,110,100,32,97,32,110,101,103,97,116,105,118,101,32,99,108,97,115,115,32,97,115,32,34,78,79,84,32,115,111,109,101,116,104,105,110,103,32,65,78,68,32,78,79,84,32,115,111,109,101,116,104,105,110,103,32,65,78,68,32,78,79,84,32,46,46,46,34,46>>]},{p,[],[<<79,110,108,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,105,110,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,58>>]},{ul,[],[{li,[],[<<66,97,99,107,115,108,97,115,104>>]},{li,[],[<<72,121,112,104,101,110,32,40,111,110,108,121,32,119,104,101,114,101,32,105,116,32,99,97,110,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,115,112,101,99,105,102,121,105,110,103,32,97,32,114,97,110,103,101,41>>]},{li,[],[<<67,105,114,99,117,109,102,108,101,120,32,40,111,110,108,121,32,97,116,32,116,104,101,32,115,116,97,114,116,41>>]},{li,[],[<<79,112,101,110,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,40,111,110,108,121,32,119,104,101,110,32,105,116,32,99,97,110,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,105,110,116,114,111,100,117,99,105,110,103,32,97,32,80,111,115,105,120,32,99,108,97,115,115,32,110,97,109,101,44,32,111,114,32,102,111,114,32,97,32,115,112,101,99,105,97,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,102,101,97,116,117,114,101,59,32,115,101,101,32,116,104,101,32,110,101,120,116,32,116,119,111,32,115,101,99,116,105,111,110,115,41>>]},{li,[],[<<84,101,114,109,105,110,97,116,105,110,103,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116>>]}]},{p,[],[<<72,111,119,101,118,101,114,44,32,101,115,99,97,112,105,110,103,32,111,116,104,101,114,32,110,111,110,45,97,108,112,104,97,110,117,109,101,114,105,99,32,99,104,97,114,97,99,116,101,114,115,32,100,111,101,115,32,110,111,32,104,97,114,109,46>>]},{a,[{id,<<115,101,99,116,56>>}],[]},{h2,[],[<<80,111,115,105,120,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]},{p,[],[<<80,101,114,108,32,115,117,112,112,111,114,116,115,32,116,104,101,32,80,111,115,105,120,32,110,111,116,97,116,105,111,110,32,102,111,114,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,84,104,105,115,32,117,115,101,115,32,110,97,109,101,115,32,101,110,99,108,111,115,101,100,32,98,121,32,91,58,32,97,110,100,32,58,93,32,119,105,116,104,105,110,32,116,104,101,32,101,110,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,46,32,80,67,82,69,32,97,108,115,111,32,115,117,112,112,111,114,116,115,32,116,104,105,115,32,110,111,116,97,116,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,48,34,44,32,34,49,34,44,32,97,110,121,32,97,108,112,104,97,98,101,116,105,99,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,34,37,34,58>>]},{pre,[],[{code,[],[<<91,48,49,91,58,97,108,112,104,97,58,93,37,93>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,115,117,112,112,111,114,116,101,100,32,99,108,97,115,115,32,110,97,109,101,115,58>>]},{dl,[],[{dt,[],[<<97,108,110,117,109>>]},{dd,[],[<<76,101,116,116,101,114,115,32,97,110,100,32,100,105,103,105,116,115>>]},{dt,[],[<<97,108,112,104,97>>]},{dd,[],[<<76,101,116,116,101,114,115>>]},{dt,[],[<<97,115,99,105,105>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,99,111,100,101,115,32,48,45,49,50,55>>]},{dt,[],[<<98,108,97,110,107>>]},{dd,[],[<<83,112,97,99,101,32,111,114,32,116,97,98,32,111,110,108,121>>]},{dt,[],[<<99,110,116,114,108>>]},{dd,[],[<<67,111,110,116,114,111,108,32,99,104,97,114,97,99,116,101,114,115>>]},{dt,[],[<<100,105,103,105,116>>]},{dd,[],[<<68,101,99,105,109,97,108,32,100,105,103,105,116,115,32,40,115,97,109,101,32,97,115,32,92,100,41>>]},{dt,[],[<<103,114,97,112,104>>]},{dd,[],[<<80,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,101,120,99,108,117,100,105,110,103,32,115,112,97,99,101>>]},{dt,[],[<<108,111,119,101,114>>]},{dd,[],[<<76,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,115>>]},{dt,[],[<<112,114,105,110,116>>]},{dd,[],[<<80,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,105,110,99,108,117,100,105,110,103,32,115,112,97,99,101>>]},{dt,[],[<<112,117,110,99,116>>]},{dd,[],[<<80,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,101,120,99,108,117,100,105,110,103,32,108,101,116,116,101,114,115,44,32,100,105,103,105,116,115,44,32,97,110,100,32,115,112,97,99,101>>]},{dt,[],[<<115,112,97,99,101>>]},{dd,[],[<<87,104,105,116,101,115,112,97,99,101,32,40,116,104,101,32,115,97,109,101,32,97,115,32,92,115,32,102,114,111,109,32,80,67,82,69,32,56,46,51,52,41>>]},{dt,[],[<<117,112,112,101,114>>]},{dd,[],[<<85,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114,115>>]},{dt,[],[<<119,111,114,100>>]},{dd,[],[<<34,87,111,114,100,34,32,99,104,97,114,97,99,116,101,114,115,32,40,115,97,109,101,32,97,115,32,92,119,41>>]},{dt,[],[<<120,100,105,103,105,116>>]},{dd,[],[<<72,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,115>>]}]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,34,115,112,97,99,101,34,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,72,84,32,40,57,41,44,32,76,70,32,40,49,48,41,44,32,86,84,32,40,49,49,41,44,32,70,70,32,40,49,50,41,44,32,67,82,32,40,49,51,41,44,32,97,110,100,32,115,112,97,99,101,32,40,51,50,41,46,32,73,102,32,108,111,99,97,108,101,45,115,112,101,99,105,102,105,99,32,109,97,116,99,104,105,110,103,32,105,115,32,116,97,107,105,110,103,32,112,108,97,99,101,44,32,116,104,101,32,108,105,115,116,32,111,102,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,109,97,121,32,98,101,32,100,105,102,102,101,114,101,110,116,59,32,116,104,101,114,101,32,109,97,121,32,98,101,32,102,101,119,101,114,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,109,46,32,34,83,112,97,99,101,34,32,117,115,101,100,32,116,111,32,98,101,32,100,105,102,102,101,114,101,110,116,32,116,111,32,92,115,44,32,119,104,105,99,104,32,100,105,100,32,110,111,116,32,105,110,99,108,117,100,101,32,86,84,44,32,102,111,114,32,80,101,114,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46,32,72,111,119,101,118,101,114,44,32,80,101,114,108,32,99,104,97,110,103,101,100,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,44,32,97,110,100,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46,32,34,83,112,97,99,101,34,32,97,110,100,32,92,115,32,110,111,119,32,109,97,116,99,104,32,116,104,101,32,115,97,109,101,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,110,97,109,101,32,34,119,111,114,100,34,32,105,115,32,97,32,80,101,114,108,32,101,120,116,101,110,115,105,111,110,44,32,97,110,100,32,34,98,108,97,110,107,34,32,105,115,32,97,32,71,78,85,32,101,120,116,101,110,115,105,111,110,32,102,114,111,109,32,80,101,114,108,32,53,46,56,46,32,65,110,111,116,104,101,114,32,80,101,114,108,32,101,120,116,101,110,115,105,111,110,32,105,115,32,110,101,103,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,94,32,99,104,97,114,97,99,116,101,114,32,97,102,116,101,114,32,116,104,101,32,99,111,108,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,49,34,44,32,34,50,34,44,32,111,114,32,97,110,121,32,110,111,110,45,100,105,103,105,116,58>>]},{pre,[],[{code,[],[<<91,49,50,91,58,94,100,105,103,105,116,58,93,93>>]}]},{p,[],[<<80,67,82,69,32,40,97,110,100,32,80,101,114,108,41,32,97,108,115,111,32,114,101,99,111,103,110,105,122,101,32,116,104,101,32,80,111,115,105,120,32,115,121,110,116,97,120,32,91,46,99,104,46,93,32,97,110,100,32,91,61,99,104,61,93,32,119,104,101,114,101,32,34,99,104,34,32,105,115,32,97,32,34,99,111,108,108,97,116,105,110,103,32,101,108,101,109,101,110,116,34,44,32,98,117,116,32,116,104,101,115,101,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,44,32,97,110,100,32,97,110,32,101,114,114,111,114,32,105,115,32,103,105,118,101,110,32,105,102,32,116,104,101,121,32,97,114,101,32,101,110,99,111,117,110,116,101,114,101,100,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,32,100,111,32,110,111,116,32,109,97,116,99,104,32,97,110,121,32,111,102,32,116,104,101,32,80,111,115,105,120,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<80,67,82,69,95,85,67,80>>]},<<32,105,115,32,112,97,115,115,101,100,32,116,111,32>>,{code,[],[<<112,99,114,101,95,99,111,109,112,105,108,101,40,41>>]},<<44,32,115,111,109,101,32,111,102,32,116,104,101,32,99,108,97,115,115,101,115,32,97,114,101,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,117,115,101,100,46,32,84,104,105,115,32,105,115,32,97,99,104,105,101,118,101,100,32,98,121,32,114,101,112,108,97,99,105,110,103,32,99,101,114,116,97,105,110,32,80,111,115,105,120,32,99,108,97,115,115,101,115,32,98,121,32,111,116,104,101,114,32,115,101,113,117,101,110,99,101,115,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<91,58,97,108,110,117,109,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,88,97,110,125>>]}]},{dt,[],[<<91,58,97,108,112,104,97,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,76,125>>]}]},{dt,[],[<<91,58,98,108,97,110,107,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,104>>]}]},{dt,[],[<<91,58,100,105,103,105,116,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,78,100,125>>]}]},{dt,[],[<<91,58,108,111,119,101,114,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,76,108,125>>]}]},{dt,[],[<<91,58,115,112,97,99,101,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,88,112,115,125>>]}]},{dt,[],[<<91,58,117,112,112,101,114,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,76,117,125>>]}]},{dt,[],[<<91,58,119,111,114,100,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,88,119,100,125>>]}]}]},{p,[],[<<78,101,103,97,116,101,100,32,118,101,114,115,105,111,110,115,44,32,115,117,99,104,32,97,115,32,91,58,94,97,108,112,104,97,58,93,44,32,117,115,101,32,92,80,32,105,110,115,116,101,97,100,32,111,102,32,92,112,46,32,84,104,114,101,101,32,111,116,104,101,114,32,80,79,83,73,88,32,99,108,97,115,115,101,115,32,97,114,101,32,104,97,110,100,108,101,100,32,115,112,101,99,105,97,108,108,121,32,105,110,32,85,67,80,32,109,111,100,101,58>>]},{dl,[],[{dt,[],[<<91,58,103,114,97,112,104,58,93>>]},{dd,[],[{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,103,108,121,112,104,115,32,116,104,97,116,32,109,97,114,107,32,116,104,101,32,112,97,103,101,32,119,104,101,110,32,112,114,105,110,116,101,100,46,32,73,110,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,116,101,114,109,115,44,32,105,116,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,76,44,32,77,44,32,78,44,32,80,44,32,83,44,32,111,114,32,67,102,32,112,114,111,112,101,114,116,105,101,115,44,32,101,120,99,101,112,116,32,102,111,114,58>>]},{dl,[],[{dt,[],[<<85,43,48,54,49,67>>]},{dd,[],[{p,[],[<<65,114,97,98,105,99,32,76,101,116,116,101,114,32,77,97,114,107>>]}]},{dt,[],[<<85,43,49,56,48,69>>]},{dd,[],[{p,[],[<<77,111,110,103,111,108,105,97,110,32,86,111,119,101,108,32,83,101,112,97,114,97,116,111,114>>]}]},{dt,[],[<<85,43,50,48,54,54,32,45,32,85,43,50,48,54,57>>]},{dd,[],[{p,[],[<<86,97,114,105,111,117,115,32,34,105,115,111,108,97,116,101,34,115>>]}]}]}]},{dt,[],[<<91,58,112,114,105,110,116,58,93>>]},{dd,[],[{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,91,58,103,114,97,112,104,58,93,32,112,108,117,115,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,99,111,110,116,114,111,108,115,44,32,116,104,97,116,32,105,115,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,90,115,32,112,114,111,112,101,114,116,121,46>>]}]},{dt,[],[<<91,58,112,117,110,99,116,58,93>>]},{dd,[],[{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,116,104,101,32,85,110,105,99,111,100,101,32,80,32,40,112,117,110,99,116,117,97,116,105,111,110,41,32,112,114,111,112,101,114,116,121,44,32,112,108,117,115,32,116,104,111,115,101,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,108,101,115,115,32,116,104,97,110,32,49,50,56,32,116,104,97,116,32,104,97,118,101,32,116,104,101,32,83,32,40,83,121,109,98,111,108,41,32,112,114,111,112,101,114,116,121,46>>]}]}]},{p,[],[<<84,104,101,32,111,116,104,101,114,32,80,79,83,73,88,32,99,108,97,115,115,101,115,32,97,114,101,32,117,110,99,104,97,110,103,101,100,44,32,97,110,100,32,109,97,116,99,104,32,111,110,108,121,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,99,111,100,101,32,112,111,105,110,116,115,32,108,101,115,115,32,116,104,97,110,32,49,50,56,46>>]},{p,[],[{em,[],[<<67,111,109,112,97,116,105,98,105,108,105,116,121,32,70,101,97,116,117,114,101,32,102,111,114,32,87,111,114,100,32,66,111,117,110,100,97,114,105,101,115>>]}]},{p,[],[<<73,110,32,116,104,101,32,80,79,83,73,88,46,50,32,99,111,109,112,108,105,97,110,116,32,108,105,98,114,97,114,121,32,116,104,97,116,32,119,97,115,32,105,110,99,108,117,100,101,100,32,105,110,32,52,46,52,66,83,68,32,85,110,105,120,44,32,116,104,101,32,117,103,108,121,32,115,121,110,116,97,120,32,91,91,58,60,58,93,93,32,97,110,100,32,91,91,58,62,58,93,93,32,105,115,32,117,115,101,100,32,102,111,114,32,109,97,116,99,104,105,110,103,32,34,115,116,97,114,116,32,111,102,32,119,111,114,100,34,32,97,110,100,32,34,101,110,100,32,111,102,32,119,111,114,100,34,46,32,80,67,82,69,32,116,114,101,97,116,115,32,116,104,101,115,101,32,105,116,101,109,115,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<91,91,58,60,58,93,93>>]},{dd,[],[{p,[],[<<105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,92,98,40,63,61,92,119,41>>]}]},{dt,[],[<<91,91,58,62,58,93,93>>]},{dd,[],[{p,[],[<<105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,92,98,40,63,60,61,92,119,41>>]}]}]},{p,[],[<<79,110,108,121,32,116,104,101,115,101,32,101,120,97,99,116,32,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,115,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,46,32,65,32,115,101,113,117,101,110,99,101,32,115,117,99,104,32,97,115,32,91,97,91,58,60,58,93,98,93,32,112,114,111,118,111,107,101,115,32,101,114,114,111,114,32,102,111,114,32,97,110,32,117,110,114,101,99,111,103,110,105,122,101,100,32,80,79,83,73,88,32,99,108,97,115,115,32,110,97,109,101,46,32,84,104,105,115,32,115,117,112,112,111,114,116,32,105,115,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,80,101,114,108,46,32,73,116,32,105,115,32,112,114,111,118,105,100,101,100,32,116,111,32,104,101,108,112,32,109,105,103,114,97,116,105,111,110,115,32,102,114,111,109,32,111,116,104,101,114,32,101,110,118,105,114,111,110,109,101,110,116,115,44,32,97,110,100,32,105,115,32,98,101,115,116,32,110,111,116,32,117,115,101,100,32,105,110,32,97,110,121,32,110,101,119,32,112,97,116,116,101,114,110,115,46,32,78,111,116,101,32,116,104,97,116,32,92,98,32,109,97,116,99,104,101,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,97,110,100,32,116,104,101,32,101,110,100,32,111,102,32,97,32,119,111,114,100,32,40,115,101,101,32,34,83,105,109,112,108,101,32,97,115,115,101,114,116,105,111,110,115,34,32,97,98,111,118,101,41,44,32,97,110,100,32,105,110,32,97,32,80,101,114,108,45,115,116,121,108,101,32,112,97,116,116,101,114,110,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,111,114,32,102,111,108,108,111,119,105,110,103,32,99,104,97,114,97,99,116,101,114,32,110,111,114,109,97,108,108,121,32,115,104,111,119,115,32,119,104,105,99,104,32,105,115,32,119,97,110,116,101,100,44,32,119,105,116,104,111,117,116,32,116,104,101,32,110,101,101,100,32,102,111,114,32,116,104,101,32,97,115,115,101,114,116,105,111,110,115,32,116,104,97,116,32,97,114,101,32,117,115,101,100,32,97,98,111,118,101,32,105,110,32,111,114,100,101,114,32,116,111,32,103,105,118,101,32,101,120,97,99,116,108,121,32,116,104,101,32,80,79,83,73,88,32,98,101,104,97,118,105,111,117,114,46>>]},{a,[{id,<<115,101,99,116,57>>}],[]},{h2,[],[<<86,101,114,116,105,99,97,108,32,66,97,114>>]},{p,[],[<<86,101,114,116,105,99,97,108,32,98,97,114,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,117,115,101,100,32,116,111,32,115,101,112,97,114,97,116,101,32,97,108,116,101,114,110,97,116,105,118,101,32,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,101,105,116,104,101,114,32,34,103,105,108,98,101,114,116,34,32,111,114,32,34,115,117,108,108,105,118,97,110,34,58>>]},{pre,[],[{code,[],[<<103,105,108,98,101,114,116,124,115,117,108,108,105,118,97,110>>]}]},{p,[],[<<65,110,121,32,110,117,109,98,101,114,32,111,102,32,97,108,116,101,114,110,97,116,105,118,101,115,32,99,97,110,32,97,112,112,101,97,114,44,32,97,110,100,32,97,110,32,101,109,112,116,121,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,112,101,114,109,105,116,116,101,100,32,40,109,97,116,99,104,105,110,103,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,41,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,115,115,32,116,114,105,101,115,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,117,114,110,44,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,44,32,97,110,100,32,116,104,101,32,102,105,114,115,116,32,116,104,97,116,32,115,117,99,99,101,101,100,115,32,105,115,32,117,115,101,100,46,32,73,102,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,119,105,116,104,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,100,101,102,105,110,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115>>]},<<41,44,32,34,115,117,99,99,101,101,100,115,34,32,109,101,97,110,115,32,109,97,116,99,104,105,110,103,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,109,97,105,110,32,112,97,116,116,101,114,110,32,97,110,100,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,46>>]},{a,[{id,<<115,101,99,116,49,48>>}],[]},{h2,[],[<<73,110,116,101,114,110,97,108,32,79,112,116,105,111,110,32,83,101,116,116,105,110,103>>]},{p,[],[<<84,104,101,32,115,101,116,116,105,110,103,115,32,111,102,32,116,104,101,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<44,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<44,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,102,114,111,109,32,119,105,116,104,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,98,121,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,80,101,114,108,32,111,112,116,105,111,110,32,108,101,116,116,101,114,115,32,101,110,99,108,111,115,101,100,32,98,101,116,119,101,101,110,32,34,40,63,34,32,97,110,100,32,34,41,34,46,32,84,104,101,32,111,112,116,105,111,110,32,108,101,116,116,101,114,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<105>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]}]},{dt,[],[<<109>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]}]},{dt,[],[<<115>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<100,111,116,97,108,108>>]}]},{dt,[],[<<120>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]}]}]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<40,63,105,109,41>>]},<<32,115,101,116,115,32,99,97,115,101,108,101,115,115,44,32,109,117,108,116,105,108,105,110,101,32,109,97,116,99,104,105,110,103,46,32,84,104,101,115,101,32,111,112,116,105,111,110,115,32,99,97,110,32,97,108,115,111,32,98,101,32,117,110,115,101,116,32,98,121,32,112,114,101,99,101,100,105,110,103,32,116,104,101,32,108,101,116,116,101,114,32,119,105,116,104,32,97,32,104,121,112,104,101,110,46,32,65,32,99,111,109,98,105,110,101,100,32,115,101,116,116,105,110,103,32,97,110,100,32,117,110,115,101,116,116,105,110,103,32,115,117,99,104,32,97,115,32>>,{code,[],[<<40,63,105,109,45,115,120,41>>]},<<44,32,119,104,105,99,104,32,115,101,116,115,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<32,97,110,100,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<44,32,119,104,105,108,101,32,117,110,115,101,116,116,105,110,103,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<44,32,105,115,32,97,108,115,111,32,112,101,114,109,105,116,116,101,100,46,32,73,102,32,97,32,108,101,116,116,101,114,32,97,112,112,101,97,114,115,32,98,111,116,104,32,98,101,102,111,114,101,32,97,110,100,32,97,102,116,101,114,32,116,104,101,32,104,121,112,104,101,110,44,32,116,104,101,32,111,112,116,105,111,110,32,105,115,32,117,110,115,101,116,46>>]},{p,[],[<<84,104,101,32,80,67,82,69,45,115,112,101,99,105,102,105,99,32,111,112,116,105,111,110,115,32>>,{code,[],[<<100,117,112,110,97,109,101,115>>]},<<44,32>>,{code,[],[<<117,110,103,114,101,101,100,121>>]},<<44,32,97,110,100,32>>,{code,[],[<<101,120,116,114,97>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,116,104,101,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,32,111,112,116,105,111,110,115,32,98,121,32,117,115,105,110,103,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,74,44,32,85,44,32,97,110,100,32,88,32,114,101,115,112,101,99,116,105,118,101,108,121,46>>]},{p,[],[<<87,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,111,112,116,105,111,110,32,99,104,97,110,103,101,115,32,111,99,99,117,114,115,32,97,116,32,116,111,112,45,108,101,118,101,108,32,40,116,104,97,116,32,105,115,44,32,110,111,116,32,105,110,115,105,100,101,32,115,117,98,112,97,116,116,101,114,110,32,112,97,114,101,110,116,104,101,115,101,115,41,44,32,116,104,101,32,99,104,97,110,103,101,32,97,112,112,108,105,101,115,32,116,111,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,116,104,97,116,32,102,111,108,108,111,119,115,46>>]},{p,[],[<<65,110,32,111,112,116,105,111,110,32,99,104,97,110,103,101,32,119,105,116,104,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115>>]},<<41,32,97,102,102,101,99,116,115,32,111,110,108,121,32,116,104,97,116,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,102,111,108,108,111,119,115,32,105,116,46,32,83,111,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,98,99,32,97,110,100,32,97,66,99,32,97,110,100,32,110,111,32,111,116,104,101,114,32,115,116,114,105,110,103,115,32,40,97,115,115,117,109,105,110,103,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<32,105,115,32,110,111,116,32,117,115,101,100,41,58>>]},{pre,[],[{code,[],[<<40,97,40,63,105,41,98,41,99>>]}]},{p,[],[<<66,121,32,116,104,105,115,32,109,101,97,110,115,44,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,109,97,100,101,32,116,111,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,115,101,116,116,105,110,103,115,32,105,110,32,100,105,102,102,101,114,101,110,116,32,112,97,114,116,115,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,46,32,65,110,121,32,99,104,97,110,103,101,115,32,109,97,100,101,32,105,110,32,111,110,101,32,97,108,116,101,114,110,97,116,105,118,101,32,100,111,32,99,97,114,114,121,32,111,110,32,105,110,116,111,32,115,117,98,115,101,113,117,101,110,116,32,98,114,97,110,99,104,101,115,32,119,105,116,104,105,110,32,116,104,101,32,115,97,109,101,32,115,117,98,112,97,116,116,101,114,110,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,40,63,105,41,98,124,99,41>>]}]},{p,[],[<<109,97,116,99,104,101,115,32,34,97,98,34,44,32,34,97,66,34,44,32,34,99,34,44,32,97,110,100,32,34,67,34,44,32,97,108,116,104,111,117,103,104,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,34,67,34,32,116,104,101,32,102,105,114,115,116,32,98,114,97,110,99,104,32,105,115,32,97,98,97,110,100,111,110,101,100,32,98,101,102,111,114,101,32,116,104,101,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,101,102,102,101,99,116,115,32,111,102,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,115,32,111,99,99,117,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46,32,84,104,101,114,101,32,119,111,117,108,100,32,98,101,32,115,111,109,101,32,119,101,105,114,100,32,98,101,104,97,118,105,111,114,32,111,116,104,101,114,119,105,115,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,116,104,101,114,32,80,67,82,69,45,115,112,101,99,105,102,105,99,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,119,104,101,110,32,116,104,101,32,99,111,109,112,105,108,105,110,103,32,111,114,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,99,97,108,108,101,100,46,32,83,111,109,101,116,105,109,101,115,32,116,104,101,32,112,97,116,116,101,114,110,32,99,97,110,32,99,111,110,116,97,105,110,32,115,112,101,99,105,97,108,32,108,101,97,100,105,110,103,32,115,101,113,117,101,110,99,101,115,44,32,115,117,99,104,32,97,115,32,40,42,67,82,76,70,41,44,32,116,111,32,111,118,101,114,114,105,100,101,32,119,104,97,116,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,104,97,115,32,115,101,116,32,111,114,32,119,104,97,116,32,104,97,115,32,98,101,101,110,32,100,101,102,97,117,108,116,101,100,46,32,68,101,116,97,105,108,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,101,119,108,105,110,101,95,115,101,113,117,101,110,99,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,101,119,108,105,110,101,32,83,101,113,117,101,110,99,101,115>>]},<<32,101,97,114,108,105,101,114,46>>]},{p,[],[<<84,104,101,32,40,42,85,84,70,56,41,32,97,110,100,32,40,42,85,67,80,41,32,108,101,97,100,105,110,103,32,115,101,113,117,101,110,99,101,115,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,115,101,116,32,85,84,70,32,97,110,100,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,109,111,100,101,115,46,32,84,104,101,121,32,97,114,101,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,115,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,97,110,100,32>>,{code,[],[<<117,99,112>>]},<<44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,84,104,101,32,40,42,85,84,70,41,32,115,101,113,117,101,110,99,101,32,105,115,32,97,32,103,101,110,101,114,105,99,32,118,101,114,115,105,111,110,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,97,110,121,32,111,102,32,116,104,101,32,108,105,98,114,97,114,105,101,115,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,99,97,110,32,115,101,116,32,111,112,116,105,111,110,32>>,{code,[],[<<110,101,118,101,114,95,117,116,102>>]},<<44,32,119,104,105,99,104,32,108,111,99,107,115,32,111,117,116,32,116,104,101,32,117,115,101,32,111,102,32,116,104,101,32,40,42,85,84,70,41,32,115,101,113,117,101,110,99,101,115,46>>]}]},{a,[{id,<<115,101,99,116,49,49>>}],[]},{h2,[],[<<83,117,98,112,97,116,116,101,114,110,115>>]},{p,[],[<<83,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,100,101,108,105,109,105,116,101,100,32,98,121,32,112,97,114,101,110,116,104,101,115,101,115,32,40,114,111,117,110,100,32,98,114,97,99,107,101,116,115,41,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,110,101,115,116,101,100,46,32,84,117,114,110,105,110,103,32,112,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,32,105,110,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,100,111,101,115,32,116,119,111,32,116,104,105,110,103,115,58>>]},{dl,[],[{dt,[],[<<49,46>>]},{dd,[],[{p,[],[<<73,116,32,108,111,99,97,108,105,122,101,115,32,97,32,115,101,116,32,111,102,32,97,108,116,101,114,110,97,116,105,118,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,99,97,116,97,114,97,99,116,34,44,32,34,99,97,116,101,114,112,105,108,108,97,114,34,44,32,111,114,32,34,99,97,116,34,58>>]},{pre,[],[{code,[],[<<99,97,116,40,97,114,97,99,116,124,101,114,112,105,108,108,97,114,124,41>>]}]},{p,[],[<<87,105,116,104,111,117,116,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,44,32,105,116,32,119,111,117,108,100,32,109,97,116,99,104,32,34,99,97,116,97,114,97,99,116,34,44,32,34,101,114,112,105,108,108,97,114,34,44,32,111,114,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,46>>]}]},{dt,[],[<<50,46>>]},{dd,[],[{p,[],[<<73,116,32,115,101,116,115,32,117,112,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,97,115,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,46,32,84,104,97,116,32,105,115,44,32,119,104,101,110,32,116,104,101,32,99,111,109,112,108,101,116,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,44,32,116,104,97,116,32,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,116,104,97,116,32,109,97,116,99,104,101,100,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,112,97,115,115,101,100,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,116,104,114,111,117,103,104,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<46>>]}]}]},{p,[],[<<79,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,99,111,117,110,116,101,100,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,32,40,115,116,97,114,116,105,110,103,32,102,114,111,109,32,49,41,32,116,111,32,111,98,116,97,105,110,32,110,117,109,98,101,114,115,32,102,111,114,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,116,104,101,32,115,116,114,105,110,103,32,34,116,104,101,32,114,101,100,32,107,105,110,103,34,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,34,114,101,100,32,107,105,110,103,34,44,32,34,114,101,100,34,44,32,97,110,100,32,34,107,105,110,103,34,44,32,97,110,100,32,97,114,101,32,110,117,109,98,101,114,101,100,32,49,44,32,50,44,32,97,110,100,32,51,44,32,114,101,115,112,101,99,116,105,118,101,108,121,58>>]},{pre,[],[{code,[],[<<116,104,101,32,40,40,114,101,100,124,119,104,105,116,101,41,32,40,107,105,110,103,124,113,117,101,101,110,41,41>>]}]},{p,[],[<<73,116,32,105,115,32,110,111,116,32,97,108,119,97,121,115,32,104,101,108,112,102,117,108,32,116,104,97,116,32,112,108,97,105,110,32,112,97,114,101,110,116,104,101,115,101,115,32,102,117,108,102,105,108,108,32,116,119,111,32,102,117,110,99,116,105,111,110,115,46,32,79,102,116,101,110,32,97,32,103,114,111,117,112,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,114,101,113,117,105,114,101,100,32,119,105,116,104,111,117,116,32,97,32,99,97,112,116,117,114,105,110,103,32,114,101,113,117,105,114,101,109,101,110,116,46,32,73,102,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,113,117,101,115,116,105,111,110,32,109,97,114,107,32,97,110,100,32,97,32,99,111,108,111,110,44,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,100,111,101,115,32,110,111,116,32,100,111,32,97,110,121,32,99,97,112,116,117,114,105,110,103,44,32,97,110,100,32,105,115,32,110,111,116,32,99,111,117,110,116,101,100,32,119,104,101,110,32,99,111,109,112,117,116,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,110,121,32,115,117,98,115,101,113,117,101,110,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,116,104,101,32,115,116,114,105,110,103,32,34,116,104,101,32,119,104,105,116,101,32,113,117,101,101,110,34,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,34,119,104,105,116,101,32,113,117,101,101,110,34,32,97,110,100,32,34,113,117,101,101,110,34,44,32,97,110,100,32,97,114,101,32,110,117,109,98,101,114,101,100,32,49,32,97,110,100,32,50,58>>]},{pre,[],[{code,[],[<<116,104,101,32,40,40,63,58,114,101,100,124,119,104,105,116,101,41,32,40,107,105,110,103,124,113,117,101,101,110,41,41>>]}]},{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,105,115,32,54,53,53,51,53,46>>]},{p,[],[<<65,115,32,97,32,99,111,110,118,101,110,105,101,110,116,32,115,104,111,114,116,104,97,110,100,44,32,105,102,32,97,110,121,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,115,32,97,114,101,32,114,101,113,117,105,114,101,100,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,110,111,110,45,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,44,32,116,104,101,32,111,112,116,105,111,110,32,108,101,116,116,101,114,115,32,99,97,110,32,97,112,112,101,97,114,32,98,101,116,119,101,101,110,32,34,63,34,32,97,110,100,32,34,58,34,46,32,84,104,117,115,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,116,119,111,32,112,97,116,116,101,114,110,115,32,109,97,116,99,104,32,116,104,101,32,115,97,109,101,32,115,101,116,32,111,102,32,115,116,114,105,110,103,115,58>>]},{pre,[],[{code,[],[<<40,63,105,58,115,97,116,117,114,100,97,121,124,115,117,110,100,97,121,41,10,40,63,58,40,63,105,41,115,97,116,117,114,100,97,121,124,115,117,110,100,97,121,41>>]}]},{p,[],[<<65,115,32,97,108,116,101,114,110,97,116,105,118,101,32,98,114,97,110,99,104,101,115,32,97,114,101,32,116,114,105,101,100,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,44,32,97,110,100,32,111,112,116,105,111,110,115,32,97,114,101,32,110,111,116,32,114,101,115,101,116,32,117,110,116,105,108,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,114,101,97,99,104,101,100,44,32,97,110,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,32,105,110,32,111,110,101,32,98,114,97,110,99,104,32,100,111,101,115,32,97,102,102,101,99,116,32,115,117,98,115,101,113,117,101,110,116,32,98,114,97,110,99,104,101,115,44,32,115,111,32,116,104,101,32,97,98,111,118,101,32,112,97,116,116,101,114,110,115,32,109,97,116,99,104,32,98,111,116,104,32,34,83,85,78,68,65,89,34,32,97,110,100,32,34,83,97,116,117,114,100,97,121,34,46>>]},{a,[{id,<<115,101,99,116,49,50>>}],[]},{h2,[],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]},{p,[],[<<80,101,114,108,32,53,46,49,48,32,105,110,116,114,111,100,117,99,101,100,32,97,32,102,101,97,116,117,114,101,32,119,104,101,114,101,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,117,115,101,115,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,115,32,102,111,114,32,105,116,115,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,46,32,83,117,99,104,32,97,32,115,117,98,112,97,116,116,101,114,110,32,115,116,97,114,116,115,32,119,105,116,104,32>>,{code,[],[<<40,63,124>>]},<<32,97,110,100,32,105,115,32,105,116,115,101,108,102,32,97,32,110,111,110,45,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,63,124,40,83,97,116,41,117,114,124,40,83,117,110,41,41,100,97,121>>]}]},{p,[],[<<65,115,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,105,110,115,105,100,101,32,97,32>>,{code,[],[<<40,63,124>>]},<<32,103,114,111,117,112,44,32,98,111,116,104,32,115,101,116,115,32,111,102,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,110,117,109,98,101,114,101,100,32,111,110,101,46,32,84,104,117,115,44,32,119,104,101,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,44,32,121,111,117,32,99,97,110,32,108,111,111,107,32,97,116,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,32,110,117,109,98,101,114,32,111,110,101,44,32,119,104,105,99,104,101,118,101,114,32,97,108,116,101,114,110,97,116,105,118,101,32,109,97,116,99,104,101,100,46,32,84,104,105,115,32,99,111,110,115,116,114,117,99,116,32,105,115,32,117,115,101,102,117,108,32,119,104,101,110,32,121,111,117,32,119,97,110,116,32,116,111,32,99,97,112,116,117,114,101,32,97,32,112,97,114,116,44,32,98,117,116,32,110,111,116,32,97,108,108,44,32,111,102,32,111,110,101,32,111,102,32,109,97,110,121,32,97,108,116,101,114,110,97,116,105,118,101,115,46,32,73,110,115,105,100,101,32,97,32>>,{code,[],[<<40,63,124>>]},<<32,103,114,111,117,112,44,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,110,117,109,98,101,114,101,100,32,97,115,32,117,115,117,97,108,44,32,98,117,116,32,116,104,101,32,110,117,109,98,101,114,32,105,115,32,114,101,115,101,116,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,101,97,99,104,32,98,114,97,110,99,104,46,32,84,104,101,32,110,117,109,98,101,114,115,32,111,102,32,97,110,121,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,102,111,108,108,111,119,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,115,116,97,114,116,32,97,102,116,101,114,32,116,104,101,32,104,105,103,104,101,115,116,32,110,117,109,98,101,114,32,117,115,101,100,32,105,110,32,97,110,121,32,98,114,97,110,99,104,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,105,115,32,102,114,111,109,32,116,104,101,32,80,101,114,108,32,100,111,99,117,109,101,110,116,97,116,105,111,110,59,32,116,104,101,32,110,117,109,98,101,114,115,32,117,110,100,101,114,110,101,97,116,104,32,115,104,111,119,32,105,110,32,119,104,105,99,104,32,98,117,102,102,101,114,32,116,104,101,32,99,97,112,116,117,114,101,100,32,99,111,110,116,101,110,116,32,105,115,32,115,116,111,114,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<35,32,98,101,102,111,114,101,32,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,98,114,97,110,99,104,45,114,101,115,101,116,45,45,45,45,45,45,45,45,45,45,45,32,97,102,116,101,114,10,47,32,40,32,97,32,41,32,32,40,63,124,32,120,32,40,32,121,32,41,32,122,32,124,32,40,112,32,40,113,41,32,114,41,32,124,32,40,116,41,32,117,32,40,118,41,32,41,32,40,32,122,32,41,32,47,120,10,35,32,49,32,32,32,32,32,32,32,32,32,32,32,32,50,32,32,32,32,32,32,32,32,32,50,32,32,51,32,32,32,32,32,32,32,32,50,32,32,32,32,32,51,32,32,32,32,32,52>>]}]},{p,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,97,32,110,117,109,98,101,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,117,115,101,115,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,118,97,108,117,101,32,116,104,97,116,32,105,115,32,115,101,116,32,102,111,114,32,116,104,97,116,32,110,117,109,98,101,114,32,98,121,32,97,110,121,32,115,117,98,112,97,116,116,101,114,110,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,97,98,99,97,98,99,34,32,111,114,32,34,100,101,102,100,101,102,34,58>>]},{pre,[],[{code,[],[<<47,40,63,124,40,97,98,99,41,124,40,100,101,102,41,41,92,49,47>>]}]},{p,[],[<<73,110,32,99,111,110,116,114,97,115,116,44,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,116,111,32,97,32,110,117,109,98,101,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,97,108,119,97,121,115,32,114,101,102,101,114,115,32,116,111,32,116,104,101,32,102,105,114,115,116,32,111,110,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,103,105,118,101,110,32,110,117,109,98,101,114,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,97,98,99,97,98,99,34,32,111,114,32,34,100,101,102,97,98,99,34,58>>]},{pre,[],[{code,[],[<<47,40,63,124,40,97,98,99,41,124,40,100,101,102,41,41,40,63,49,41,47>>]}]},{p,[],[<<73,102,32,97,32,99,111,110,100,105,116,105,111,110,32,116,101,115,116,32,102,111,114,32,97,32,115,117,98,112,97,116,116,101,114,110,32,104,97,118,105,110,103,32,109,97,116,99,104,101,100,32,114,101,102,101,114,115,32,116,111,32,97,32,110,111,110,45,117,110,105,113,117,101,32,110,117,109,98,101,114,44,32,116,104,101,32,116,101,115,116,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,116,104,97,116,32,110,117,109,98,101,114,32,104,97,118,101,32,109,97,116,99,104,101,100,46>>]},{p,[],[<<65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,97,112,112,114,111,97,99,104,32,117,115,105,110,103,32,116,104,105,115,32,34,98,114,97,110,99,104,32,114,101,115,101,116,34,32,102,101,97,116,117,114,101,32,105,115,32,116,111,32,117,115,101,32,100,117,112,108,105,99,97,116,101,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,46>>]},{a,[{id,<<115,101,99,116,49,51>>}],[]},{h2,[],[<<78,97,109,101,100,32,83,117,98,112,97,116,116,101,114,110,115>>]},{p,[],[<<73,100,101,110,116,105,102,121,105,110,103,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,98,121,32,110,117,109,98,101,114,32,105,115,32,115,105,109,112,108,101,44,32,98,117,116,32,105,116,32,99,97,110,32,98,101,32,104,97,114,100,32,116,111,32,107,101,101,112,32,116,114,97,99,107,32,111,102,32,116,104,101,32,110,117,109,98,101,114,115,32,105,110,32,99,111,109,112,108,105,99,97,116,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,46,32,65,108,115,111,44,32,105,102,32,97,110,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,109,111,100,105,102,105,101,100,44,32,116,104,101,32,110,117,109,98,101,114,115,32,99,97,110,32,99,104,97,110,103,101,46,32,84,111,32,104,101,108,112,32,119,105,116,104,32,116,104,105,115,32,100,105,102,102,105,99,117,108,116,121,44,32,80,67,82,69,32,115,117,112,112,111,114,116,115,32,116,104,101,32,110,97,109,105,110,103,32,111,102,32,115,117,98,112,97,116,116,101,114,110,115,46,32,84,104,105,115,32,102,101,97,116,117,114,101,32,119,97,115,32,110,111,116,32,97,100,100,101,100,32,116,111,32,80,101,114,108,32,117,110,116,105,108,32,114,101,108,101,97,115,101,32,53,46,49,48,46,32,80,121,116,104,111,110,32,104,97,100,32,116,104,101,32,102,101,97,116,117,114,101,32,101,97,114,108,105,101,114,44,32,97,110,100,32,80,67,82,69,32,105,110,116,114,111,100,117,99,101,100,32,105,116,32,97,116,32,114,101,108,101,97,115,101,32,52,46,48,44,32,117,115,105,110,103,32,116,104,101,32,80,121,116,104,111,110,32,115,121,110,116,97,120,46,32,80,67,82,69,32,110,111,119,32,115,117,112,112,111,114,116,115,32,98,111,116,104,32,116,104,101,32,80,101,114,108,32,97,110,100,32,116,104,101,32,80,121,116,104,111,110,32,115,121,110,116,97,120,46,32,80,101,114,108,32,97,108,108,111,119,115,32,105,100,101,110,116,105,99,97,108,108,121,32,110,117,109,98,101,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,44,32,98,117,116,32,80,67,82,69,32,100,111,101,115,32,110,111,116,46>>]},{p,[],[<<73,110,32,80,67,82,69,44,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,98,101,32,110,97,109,101,100,32,105,110,32,111,110,101,32,111,102,32,116,104,114,101,101,32,119,97,121,115,58,32>>,{code,[],[<<40,63,60,110,97,109,101,62,46,46,46,41>>]},<<32,111,114,32>>,{code,[],[<<40,63,39,110,97,109,101,39,46,46,46,41>>]},<<32,97,115,32,105,110,32,80,101,114,108,44,32,111,114,32>>,{code,[],[<<40,63,80,60,110,97,109,101,62,46,46,46,41>>]},<<32,97,115,32,105,110,32,80,121,116,104,111,110,46,32,82,101,102,101,114,101,110,99,101,115,32,116,111,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,102,114,111,109,32,111,116,104,101,114,32,112,97,114,116,115,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,44,32,115,117,99,104,32,97,115,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,44,32,114,101,99,117,114,115,105,111,110,44,32,97,110,100,32,99,111,110,100,105,116,105,111,110,115,44,32,99,97,110,32,98,101,32,109,97,100,101,32,98,121,32,110,97,109,101,32,97,110,100,32,98,121,32,110,117,109,98,101,114,46>>]},{p,[],[<<78,97,109,101,115,32,99,111,110,115,105,115,116,32,111,102,32,117,112,32,116,111,32,51,50,32,97,108,112,104,97,110,117,109,101,114,105,99,32,99,104,97,114,97,99,116,101,114,115,32,97,110,100,32,117,110,100,101,114,115,99,111,114,101,115,44,32,98,117,116,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,97,32,110,111,110,45,100,105,103,105,116,46,32,78,97,109,101,100,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,115,116,105,108,108,32,97,108,108,111,99,97,116,101,100,32,110,117,109,98,101,114,115,32,97,115,32,119,101,108,108,32,97,115,32,110,97,109,101,115,44,32,101,120,97,99,116,108,121,32,97,115,32,105,102,32,116,104,101,32,110,97,109,101,115,32,119,101,114,101,32,110,111,116,32,112,114,101,115,101,110,116,46,32,84,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,99,97,110,32,117,115,101,32,110,97,109,101,100,32,118,97,108,117,101,115,32,105,102,32,116,104,101,121,32,97,114,101,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,97,32,110,97,109,101,32,109,117,115,116,32,98,101,32,117,110,105,113,117,101,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,44,32,98,117,116,32,116,104,105,115,32,99,111,110,115,116,114,97,105,110,116,32,99,97,110,32,98,101,32,114,101,108,97,120,101,100,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<100,117,112,110,97,109,101,115>>]},<<32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46,32,40,68,117,112,108,105,99,97,116,101,32,110,97,109,101,115,32,97,114,101,32,97,108,115,111,32,97,108,119,97,121,115,32,112,101,114,109,105,116,116,101,100,32,102,111,114,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,44,32,115,101,116,32,117,112,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,101,99,116,105,111,110,46,41,32,68,117,112,108,105,99,97,116,101,32,110,97,109,101,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,102,111,114,32,112,97,116,116,101,114,110,115,32,119,104,101,114,101,32,111,110,108,121,32,111,110,101,32,105,110,115,116,97,110,99,101,32,111,102,32,116,104,101,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,109,97,116,99,104,46,32,83,117,112,112,111,115,101,32,116,104,97,116,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,119,101,101,107,100,97,121,44,32,101,105,116,104,101,114,32,97,115,32,97,32,51,45,108,101,116,116,101,114,32,97,98,98,114,101,118,105,97,116,105,111,110,32,111,114,32,97,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,44,32,97,110,100,32,105,110,32,98,111,116,104,32,99,97,115,101,115,32,121,111,117,32,119,97,110,116,32,116,111,32,101,120,116,114,97,99,116,32,116,104,101,32,97,98,98,114,101,118,105,97,116,105,111,110,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,40,105,103,110,111,114,105,110,103,32,116,104,101,32,108,105,110,101,32,98,114,101,97,107,115,41,32,100,111,101,115,32,116,104,101,32,106,111,98,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<40,63,60,68,78,62,77,111,110,124,70,114,105,124,83,117,110,41,40,63,58,100,97,121,41,63,124,10,40,63,60,68,78,62,84,117,101,41,40,63,58,115,100,97,121,41,63,124,10,40,63,60,68,78,62,87,101,100,41,40,63,58,110,101,115,100,97,121,41,63,124,10,40,63,60,68,78,62,84,104,117,41,40,63,58,114,115,100,97,121,41,63,124,10,40,63,60,68,78,62,83,97,116,41,40,63,58,117,114,100,97,121,41,63>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,102,105,118,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,115,116,114,105,110,103,115,44,32,98,117,116,32,111,110,108,121,32,111,110,101,32,105,115,32,101,118,101,114,32,115,101,116,32,97,102,116,101,114,32,97,32,109,97,116,99,104,46,32,40,65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,119,97,121,32,111,102,32,115,111,108,118,105,110,103,32,116,104,105,115,32,112,114,111,98,108,101,109,32,105,115,32,116,111,32,117,115,101,32,97,32,34,98,114,97,110,99,104,32,114,101,115,101,116,34,32,115,117,98,112,97,116,116,101,114,110,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,101,99,116,105,111,110,46,41>>]},{p,[],[<<70,111,114,32,99,97,112,116,117,114,105,110,103,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,119,104,105,99,104,32,110,97,109,101,115,32,97,114,101,32,110,111,116,32,117,110,105,113,117,101,44,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,111,99,99,117,114,114,101,110,99,101,32,40,99,111,117,110,116,101,100,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,41,32,105,115,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,105,102,32,116,104,101,32,110,97,109,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,101,32>>,{code,[],[<<118,97,108,117,101,115>>]},<<32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,115,116,97,116,101,109,101,110,116,46,32,84,104,101,32>>,{code,[],[<<97,108,108,95,110,97,109,101,115>>]},<<32,99,97,112,116,117,114,105,110,103,32,118,97,108,117,101,32,109,97,116,99,104,101,115,32,97,108,108,32,116,104,101,32,110,97,109,101,115,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<89,111,117,32,99,97,110,110,111,116,32,117,115,101,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,32,116,111,32,100,105,115,116,105,110,103,117,105,115,104,32,98,101,116,119,101,101,110,32,116,119,111,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,44,32,97,115,32,80,67,82,69,32,117,115,101,115,32,111,110,108,121,32,116,104,101,32,110,117,109,98,101,114,115,32,119,104,101,110,32,109,97,116,99,104,105,110,103,46,32,70,111,114,32,116,104,105,115,32,114,101,97,115,111,110,44,32,97,110,32,101,114,114,111,114,32,105,115,32,103,105,118,101,110,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,32,105,102,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,116,111,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,46,32,72,111,119,101,118,101,114,44,32,121,111,117,32,99,97,110,32,115,112,101,99,105,102,121,32,116,104,101,32,115,97,109,101,32,110,97,109,101,32,116,111,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,44,32,101,118,101,110,32,119,104,101,110,32>>,{code,[],[<<100,117,112,110,97,109,101,115>>]},<<32,105,115,32,110,111,116,32,115,101,116,46>>]}]},{a,[{id,<<115,101,99,116,49,52>>}],[]},{h2,[],[<<82,101,112,101,116,105,116,105,111,110>>]},{p,[],[<<82,101,112,101,116,105,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32,113,117,97,110,116,105,102,105,101,114,115,44,32,119,104,105,99,104,32,99,97,110,32,102,111,108,108,111,119,32,97,110,121,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,116,101,109,115,58>>]},{ul,[],[{li,[],[<<65,32,108,105,116,101,114,97,108,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114>>]},{li,[],[<<84,104,101,32,100,111,116,32,109,101,116,97,99,104,97,114,97,99,116,101,114>>]},{li,[],[<<84,104,101,32,92,67,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101>>]},{li,[],[<<84,104,101,32,92,88,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101>>]},{li,[],[<<84,104,101,32,92,82,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101>>]},{li,[],[<<65,110,32,101,115,99,97,112,101,32,115,117,99,104,32,97,115,32,92,100,32,111,114,32,92,112,76,32,116,104,97,116,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114>>]},{li,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115>>]},{li,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,40,115,101,101,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41>>]},{li,[],[<<65,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,32,40,105,110,99,108,117,100,105,110,103,32,97,115,115,101,114,116,105,111,110,115,41>>]},{li,[],[<<65,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,114,101,99,117,114,115,105,118,101,32,111,114,32,111,116,104,101,114,119,105,115,101,41>>]}]},{p,[],[<<84,104,101,32,103,101,110,101,114,97,108,32,114,101,112,101,116,105,116,105,111,110,32,113,117,97,110,116,105,102,105,101,114,32,115,112,101,99,105,102,105,101,115,32,97,32,109,105,110,105,109,117,109,32,97,110,100,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,101,114,109,105,116,116,101,100,32,109,97,116,99,104,101,115,44,32,98,121,32,103,105,118,105,110,103,32,116,104,101,32,116,119,111,32,110,117,109,98,101,114,115,32,105,110,32,99,117,114,108,121,32,98,114,97,99,107,101,116,115,32,40,98,114,97,99,101,115,41,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,97,32,99,111,109,109,97,46,32,84,104,101,32,110,117,109,98,101,114,115,32,109,117,115,116,32,98,101,32,60,32,54,53,53,51,54,44,32,97,110,100,32,116,104,101,32,102,105,114,115,116,32,109,117,115,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32,116,104,101,32,115,101,99,111,110,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,122,122,34,44,32,34,122,122,122,34,44,32,111,114,32,34,122,122,122,122,34,58>>]},{pre,[],[{code,[],[<<122,123,50,44,52,125>>]}]},{p,[],[<<65,32,99,108,111,115,105,110,103,32,98,114,97,99,101,32,111,110,32,105,116,115,32,111,119,110,32,105,115,32,110,111,116,32,97,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,46,32,73,102,32,116,104,101,32,115,101,99,111,110,100,32,110,117,109,98,101,114,32,105,115,32,111,109,105,116,116,101,100,44,32,98,117,116,32,116,104,101,32,99,111,109,109,97,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,114,101,32,105,115,32,110,111,32,117,112,112,101,114,32,108,105,109,105,116,46,32,73,102,32,116,104,101,32,115,101,99,111,110,100,32,110,117,109,98,101,114,32,97,110,100,32,116,104,101,32,99,111,109,109,97,32,97,114,101,32,98,111,116,104,32,111,109,105,116,116,101,100,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,115,112,101,99,105,102,105,101,115,32,97,110,32,101,120,97,99,116,32,110,117,109,98,101,114,32,111,102,32,114,101,113,117,105,114,101,100,32,109,97,116,99,104,101,115,46,32,84,104,117,115,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,116,32,108,101,97,115,116,32,116,104,114,101,101,32,115,117,99,99,101,115,115,105,118,101,32,118,111,119,101,108,115,44,32,98,117,116,32,99,97,110,32,109,97,116,99,104,32,109,97,110,121,32,109,111,114,101,58>>]},{pre,[],[{code,[],[<<91,97,101,105,111,117,93,123,51,44,125>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,101,120,97,99,116,108,121,32,101,105,103,104,116,32,100,105,103,105,116,115,58>>]},{pre,[],[{code,[],[<<92,100,123,56,125>>]}]},{p,[],[<<65,110,32,111,112,101,110,105,110,103,32,99,117,114,108,121,32,98,114,97,99,107,101,116,32,116,104,97,116,32,97,112,112,101,97,114,115,32,105,110,32,97,32,112,111,115,105,116,105,111,110,32,119,104,101,114,101,32,97,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,44,32,111,114,32,111,110,101,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,115,121,110,116,97,120,32,111,102,32,97,32,113,117,97,110,116,105,102,105,101,114,44,32,105,115,32,116,97,107,101,110,32,97,115,32,97,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,123,44,54,125,32,105,115,32,110,111,116,32,97,32,113,117,97,110,116,105,102,105,101,114,44,32,98,117,116,32,97,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,32,111,102,32,102,111,117,114,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<73,110,32,85,110,105,99,111,100,101,32,109,111,100,101,44,32,113,117,97,110,116,105,102,105,101,114,115,32,97,112,112,108,121,32,116,111,32,99,104,97,114,97,99,116,101,114,115,32,114,97,116,104,101,114,32,116,104,97,110,32,116,111,32,105,110,100,105,118,105,100,117,97,108,32,100,97,116,97,32,117,110,105,116,115,46,32,84,104,117,115,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,92,120,123,49,48,48,125,123,50,125,32,109,97,116,99,104,101,115,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,44,32,101,97,99,104,32,111,102,32,119,104,105,99,104,32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,50,45,98,121,116,101,32,115,101,113,117,101,110,99,101,32,105,110,32,97,32,85,84,70,45,56,32,115,116,114,105,110,103,46,32,83,105,109,105,108,97,114,108,121,44,32,92,88,123,51,125,32,109,97,116,99,104,101,115,32,116,104,114,101,101,32,85,110,105,99,111,100,101,32,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114,115,44,32,101,97,99,104,32,111,102,32,119,104,105,99,104,32,99,97,110,32,98,101,32,109,97,110,121,32,100,97,116,97,32,117,110,105,116,115,32,108,111,110,103,32,40,97,110,100,32,116,104,101,121,32,99,97,110,32,98,101,32,111,102,32,100,105,102,102,101,114,101,110,116,32,108,101,110,103,116,104,115,41,46>>]},{p,[],[<<84,104,101,32,113,117,97,110,116,105,102,105,101,114,32,123,48,125,32,105,115,32,112,101,114,109,105,116,116,101,100,44,32,99,97,117,115,105,110,103,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,116,111,32,98,101,104,97,118,101,32,97,115,32,105,102,32,116,104,101,32,112,114,101,118,105,111,117,115,32,105,116,101,109,32,97,110,100,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,119,101,114,101,32,110,111,116,32,112,114,101,115,101,110,116,46,32,84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,102,111,114,32,115,117,98,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,114,101,102,101,114,101,110,99,101,100,32,97,115,32,115,117,98,114,111,117,116,105,110,101,115,32,102,114,111,109,32,101,108,115,101,119,104,101,114,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,40,98,117,116,32,115,101,101,32,97,108,115,111,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,100,101,102,105,110,105,110,103,95,115,117,98,112,97,116,116,101,114,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,101,102,105,110,105,110,103,32,83,117,98,112,97,116,116,101,114,110,115,32,102,111,114,32,85,115,101,32,98,121,32,82,101,102,101,114,101,110,99,101,32,79,110,108,121>>]},<<41,46,32,73,116,101,109,115,32,111,116,104,101,114,32,116,104,97,110,32,115,117,98,112,97,116,116,101,114,110,115,32,116,104,97,116,32,104,97,118,101,32,97,32,123,48,125,32,113,117,97,110,116,105,102,105,101,114,32,97,114,101,32,111,109,105,116,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,109,112,105,108,101,100,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<70,111,114,32,99,111,110,118,101,110,105,101,110,99,101,44,32,116,104,101,32,116,104,114,101,101,32,109,111,115,116,32,99,111,109,109,111,110,32,113,117,97,110,116,105,102,105,101,114,115,32,104,97,118,101,32,115,105,110,103,108,101,45,99,104,97,114,97,99,116,101,114,32,97,98,98,114,101,118,105,97,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[<<42>>]},{dd,[],[<<69,113,117,105,118,97,108,101,110,116,32,116,111,32,123,48,44,125>>]},{dt,[],[<<43>>]},{dd,[],[<<69,113,117,105,118,97,108,101,110,116,32,116,111,32,123,49,44,125>>]},{dt,[],[<<63>>]},{dd,[],[<<69,113,117,105,118,97,108,101,110,116,32,116,111,32,123,48,44,49,125>>]}]},{p,[],[<<73,110,102,105,110,105,116,101,32,108,111,111,112,115,32,99,97,110,32,98,101,32,99,111,110,115,116,114,117,99,116,101,100,32,98,121,32,102,111,108,108,111,119,105,110,103,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,99,97,110,32,109,97,116,99,104,32,110,111,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,97,32,113,117,97,110,116,105,102,105,101,114,32,116,104,97,116,32,104,97,115,32,110,111,32,117,112,112,101,114,32,108,105,109,105,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,63,41,42>>]}]},{p,[],[<<69,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,111,102,32,80,101,114,108,32,97,110,100,32,80,67,82,69,32,117,115,101,100,32,116,111,32,103,105,118,101,32,97,110,32,101,114,114,111,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,32,102,111,114,32,115,117,99,104,32,112,97,116,116,101,114,110,115,46,32,72,111,119,101,118,101,114,44,32,97,115,32,116,104,101,114,101,32,97,114,101,32,99,97,115,101,115,32,119,104,101,114,101,32,116,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,44,32,115,117,99,104,32,112,97,116,116,101,114,110,115,32,97,114,101,32,110,111,119,32,97,99,99,101,112,116,101,100,46,32,72,111,119,101,118,101,114,44,32,105,102,32,97,110,121,32,114,101,112,101,116,105,116,105,111,110,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,110,111,32,99,104,97,114,97,99,116,101,114,115,44,32,116,104,101,32,108,111,111,112,32,105,115,32,102,111,114,99,105,98,108,121,32,98,114,111,107,101,110,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,34,103,114,101,101,100,121,34,44,32,116,104,97,116,32,105,115,44,32,116,104,101,121,32,109,97,116,99,104,32,97,115,32,109,117,99,104,32,97,115,32,112,111,115,115,105,98,108,101,32,40,117,112,32,116,111,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,101,114,109,105,116,116,101,100,32,116,105,109,101,115,41,44,32,119,105,116,104,111,117,116,32,99,97,117,115,105,110,103,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,116,111,32,102,97,105,108,46,32,84,104,101,32,99,108,97,115,115,105,99,32,101,120,97,109,112,108,101,32,111,102,32,119,104,101,114,101,32,116,104,105,115,32,103,105,118,101,115,32,112,114,111,98,108,101,109,115,32,105,115,32,105,110,32,116,114,121,105,110,103,32,116,111,32,109,97,116,99,104,32,99,111,109,109,101,110,116,115,32,105,110,32,67,32,112,114,111,103,114,97,109,115,46,32,84,104,101,115,101,32,97,112,112,101,97,114,32,98,101,116,119,101,101,110,32,47,42,32,97,110,100,32,42,47,46,32,87,105,116,104,105,110,32,116,104,101,32,99,111,109,109,101,110,116,44,32,105,110,100,105,118,105,100,117,97,108,32,42,32,97,110,100,32,47,32,99,104,97,114,97,99,116,101,114,115,32,99,97,110,32,97,112,112,101,97,114,46,32,65,110,32,97,116,116,101,109,112,116,32,116,111,32,109,97,116,99,104,32,67,32,99,111,109,109,101,110,116,115,32,98,121,32,97,112,112,108,121,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110>>]},{pre,[],[{code,[],[<<47,92,42,46,42,92,42,47>>]}]},{p,[],[<<116,111,32,116,104,101,32,115,116,114,105,110,103>>]},{pre,[],[{code,[],[<<47,42,32,102,105,114,115,116,32,99,111,109,109,101,110,116,32,42,47,32,32,110,111,116,32,99,111,109,109,101,110,116,32,32,47,42,32,115,101,99,111,110,100,32,99,111,109,109,101,110,116,32,42,47>>]}]},{p,[],[<<102,97,105,108,115,44,32,97,115,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,32,111,119,105,110,103,32,116,111,32,116,104,101,32,103,114,101,101,100,105,110,101,115,115,32,111,102,32,116,104,101,32,46,42,32,105,116,101,109,46>>]},{p,[],[<<72,111,119,101,118,101,114,44,32,105,102,32,97,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,113,117,101,115,116,105,111,110,32,109,97,114,107,44,32,105,116,32,99,101,97,115,101,115,32,116,111,32,98,101,32,103,114,101,101,100,121,44,32,97,110,100,32,105,110,115,116,101,97,100,32,109,97,116,99,104,101,115,32,116,104,101,32,109,105,110,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,112,111,115,115,105,98,108,101,44,32,115,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,100,111,101,115,32,116,104,101,32,114,105,103,104,116,32,116,104,105,110,103,32,119,105,116,104,32,116,104,101,32,67,32,99,111,109,109,101,110,116,115,58>>]},{pre,[],[{code,[],[<<47,92,42,46,42,63,92,42,47>>]}]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,116,104,101,32,118,97,114,105,111,117,115,32,113,117,97,110,116,105,102,105,101,114,115,32,105,115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32,99,104,97,110,103,101,100,44,32,111,110,108,121,32,116,104,101,32,112,114,101,102,101,114,114,101,100,32,110,117,109,98,101,114,32,111,102,32,109,97,116,99,104,101,115,46,32,68,111,32,110,111,116,32,99,111,110,102,117,115,101,32,116,104,105,115,32,117,115,101,32,111,102,32,113,117,101,115,116,105,111,110,32,109,97,114,107,32,119,105,116,104,32,105,116,115,32,117,115,101,32,97,115,32,97,32,113,117,97,110,116,105,102,105,101,114,32,105,110,32,105,116,115,32,111,119,110,32,114,105,103,104,116,46,32,65,115,32,105,116,32,104,97,115,32,116,119,111,32,117,115,101,115,44,32,105,116,32,99,97,110,32,115,111,109,101,116,105,109,101,115,32,97,112,112,101,97,114,32,100,111,117,98,108,101,100,44,32,97,115,32,105,110>>]},{pre,[],[{code,[],[<<92,100,63,63,92,100>>]}]},{p,[],[<<119,104,105,99,104,32,109,97,116,99,104,101,115,32,111,110,101,32,100,105,103,105,116,32,98,121,32,112,114,101,102,101,114,101,110,99,101,44,32,98,117,116,32,99,97,110,32,109,97,116,99,104,32,116,119,111,32,105,102,32,116,104,97,116,32,105,115,32,116,104,101,32,111,110,108,121,32,119,97,121,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,103,114,101,101,100,121>>]},<<32,105,115,32,115,101,116,32,40,97,110,32,111,112,116,105,111,110,32,116,104,97,116,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,80,101,114,108,41,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,110,111,116,32,103,114,101,101,100,121,32,98,121,32,100,101,102,97,117,108,116,44,32,98,117,116,32,105,110,100,105,118,105,100,117,97,108,32,111,110,101,115,32,99,97,110,32,98,101,32,109,97,100,101,32,103,114,101,101,100,121,32,98,121,32,102,111,108,108,111,119,105,110,103,32,116,104,101,109,32,119,105,116,104,32,97,32,113,117,101,115,116,105,111,110,32,109,97,114,107,46,32,84,104,97,116,32,105,115,44,32,105,116,32,105,110,118,101,114,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<87,104,101,110,32,97,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,113,117,97,110,116,105,102,105,101,100,32,119,105,116,104,32,97,32,109,105,110,105,109,117,109,32,114,101,112,101,97,116,32,99,111,117,110,116,32,116,104,97,116,32,105,115,32,62,32,49,32,111,114,32,119,105,116,104,32,97,32,108,105,109,105,116,101,100,32,109,97,120,105,109,117,109,44,32,109,111,114,101,32,109,101,109,111,114,121,32,105,115,32,114,101,113,117,105,114,101,100,32,102,111,114,32,116,104,101,32,99,111,109,112,105,108,101,100,32,112,97,116,116,101,114,110,44,32,105,110,32,112,114,111,112,111,114,116,105,111,110,32,116,111,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,105,110,105,109,117,109,32,111,114,32,109,97,120,105,109,117,109,46>>]},{p,[],[<<73,102,32,97,32,112,97,116,116,101,114,110,32,115,116,97,114,116,115,32,119,105,116,104,32,46,42,32,111,114,32,46,123,48,44,125,32,97,110,100,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,40,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,115>>]},<<41,32,105,115,32,115,101,116,44,32,116,104,117,115,32,97,108,108,111,119,105,110,103,32,116,104,101,32,100,111,116,32,116,111,32,109,97,116,99,104,32,110,101,119,108,105,110,101,115,44,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,105,109,112,108,105,99,105,116,108,121,32,97,110,99,104,111,114,101,100,44,32,98,101,99,97,117,115,101,32,119,104,97,116,101,118,101,114,32,102,111,108,108,111,119,115,32,105,115,32,116,114,105,101,100,32,97,103,97,105,110,115,116,32,101,118,101,114,121,32,99,104,97,114,97,99,116,101,114,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,83,111,44,32,116,104,101,114,101,32,105,115,32,110,111,32,112,111,105,110,116,32,105,110,32,114,101,116,114,121,105,110,103,32,116,104,101,32,111,118,101,114,97,108,108,32,109,97,116,99,104,32,97,116,32,97,110,121,32,112,111,115,105,116,105,111,110,32,97,102,116,101,114,32,116,104,101,32,102,105,114,115,116,46,32,80,67,82,69,32,110,111,114,109,97,108,108,121,32,116,114,101,97,116,115,32,115,117,99,104,32,97,32,112,97,116,116,101,114,110,32,97,115,32,105,102,32,105,116,32,119,97,115,32,112,114,101,99,101,100,101,100,32,98,121,32,92,65,46>>]},{p,[],[<<73,110,32,99,97,115,101,115,32,119,104,101,114,101,32,105,116,32,105,115,32,107,110,111,119,110,32,116,104,97,116,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,115,32,110,111,32,110,101,119,108,105,110,101,115,44,32,105,116,32,105,115,32,119,111,114,116,104,32,115,101,116,116,105,110,103,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,116,111,32,111,98,116,97,105,110,32,116,104,105,115,32,111,112,116,105,109,105,122,97,116,105,111,110,44,32,111,114,32,97,108,116,101,114,110,97,116,105,118,101,108,121,32,117,115,105,110,103,32,94,32,116,111,32,105,110,100,105,99,97,116,101,32,97,110,99,104,111,114,105,110,103,32,101,120,112,108,105,99,105,116,108,121,46>>]},{p,[],[<<72,111,119,101,118,101,114,44,32,116,104,101,114,101,32,97,114,101,32,115,111,109,101,32,99,97,115,101,115,32,119,104,101,114,101,32,116,104,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,46,32,87,104,101,110,32,46,42,32,105,115,32,105,110,115,105,100,101,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,116,104,101,32,115,117,98,106,101,99,116,32,111,102,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,101,108,115,101,119,104,101,114,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,44,32,97,32,109,97,116,99,104,32,97,116,32,116,104,101,32,115,116,97,114,116,32,99,97,110,32,102,97,105,108,32,119,104,101,114,101,32,97,32,108,97,116,101,114,32,111,110,101,32,115,117,99,99,101,101,100,115,46,32,67,111,110,115,105,100,101,114,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,46,42,41,97,98,99,92,49>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,120,121,122,49,50,51,97,98,99,49,50,51,34,44,32,116,104,101,32,109,97,116,99,104,32,112,111,105,110,116,32,105,115,32,116,104,101,32,102,111,117,114,116,104,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,114,101,102,111,114,101,44,32,115,117,99,104,32,97,32,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,105,109,112,108,105,99,105,116,108,121,32,97,110,99,104,111,114,101,100,46>>]},{p,[],[<<65,110,111,116,104,101,114,32,99,97,115,101,32,119,104,101,114,101,32,105,109,112,108,105,99,105,116,32,97,110,99,104,111,114,105,110,103,32,105,115,32,110,111,116,32,97,112,112,108,105,101,100,32,105,115,32,119,104,101,110,32,116,104,101,32,108,101,97,100,105,110,103,32,46,42,32,105,115,32,105,110,115,105,100,101,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,79,110,99,101,32,97,103,97,105,110,44,32,97,32,109,97,116,99,104,32,97,116,32,116,104,101,32,115,116,97,114,116,32,99,97,110,32,102,97,105,108,32,119,104,101,114,101,32,97,32,108,97,116,101,114,32,111,110,101,32,115,117,99,99,101,101,100,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,63,62,46,42,63,97,41,98>>]}]},{p,[],[<<73,116,32,109,97,116,99,104,101,115,32,34,97,98,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,34,97,97,98,34,46,32,84,104,101,32,117,115,101,32,111,102,32,116,104,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,111,110,116,114,111,108,32,118,101,114,98,115,32,40,42,80,82,85,78,69,41,32,97,110,100,32,40,42,83,75,73,80,41,32,97,108,115,111,32,100,105,115,97,98,108,101,32,116,104,105,115,32,111,112,116,105,109,105,122,97,116,105,111,110,46>>]},{p,[],[<<87,104,101,110,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,114,101,112,101,97,116,101,100,44,32,116,104,101,32,118,97,108,117,101,32,99,97,112,116,117,114,101,100,32,105,115,32,116,104,101,32,115,117,98,115,116,114,105,110,103,32,116,104,97,116,32,109,97,116,99,104,101,100,32,116,104,101,32,102,105,110,97,108,32,105,116,101,114,97,116,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,102,116,101,114>>]},{pre,[],[{code,[],[<<40,116,119,101,101,100,108,101,91,100,117,109,101,93,123,51,125,92,115,42,41,43>>]}]},{p,[],[<<104,97,115,32,109,97,116,99,104,101,100,32,34,116,119,101,101,100,108,101,100,117,109,32,116,119,101,101,100,108,101,100,101,101,34,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,32,105,115,32,34,116,119,101,101,100,108,101,100,101,101,34,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,114,101,32,97,114,101,32,110,101,115,116,101,100,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,99,97,112,116,117,114,101,100,32,118,97,108,117,101,115,32,99,97,110,32,104,97,118,101,32,98,101,101,110,32,115,101,116,32,105,110,32,112,114,101,118,105,111,117,115,32,105,116,101,114,97,116,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,102,116,101,114>>]},{pre,[],[{code,[],[<<47,40,97,124,40,98,41,41,43,47>>]}]},{p,[],[<<109,97,116,99,104,101,115,32,34,97,98,97,34,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,115,101,99,111,110,100,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,32,105,115,32,34,98,34,46>>]},{a,[{id,<<115,101,99,116,49,53>>}],[]},{h2,[],[<<65,116,111,109,105,99,32,71,114,111,117,112,105,110,103,32,97,110,100,32,80,111,115,115,101,115,115,105,118,101,32,81,117,97,110,116,105,102,105,101,114,115>>]},{p,[],[<<87,105,116,104,32,98,111,116,104,32,109,97,120,105,109,105,122,105,110,103,32,40,34,103,114,101,101,100,121,34,41,32,97,110,100,32,109,105,110,105,109,105,122,105,110,103,32,40,34,117,110,103,114,101,101,100,121,34,32,111,114,32,34,108,97,122,121,34,41,32,114,101,112,101,116,105,116,105,111,110,44,32,102,97,105,108,117,114,101,32,111,102,32,119,104,97,116,32,102,111,108,108,111,119,115,32,110,111,114,109,97,108,108,121,32,99,97,117,115,101,115,32,116,104,101,32,114,101,112,101,97,116,101,100,32,105,116,101,109,32,116,111,32,98,101,32,114,101,45,101,118,97,108,117,97,116,101,100,32,116,111,32,115,101,101,32,105,102,32,97,32,100,105,102,102,101,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,114,101,112,101,97,116,115,32,97,108,108,111,119,115,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,116,111,32,109,97,116,99,104,46,32,83,111,109,101,116,105,109,101,115,32,105,116,32,105,115,32,117,115,101,102,117,108,32,116,111,32,112,114,101,118,101,110,116,32,116,104,105,115,44,32,101,105,116,104,101,114,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,110,97,116,117,114,101,32,111,102,32,116,104,101,32,109,97,116,99,104,44,32,111,114,32,116,111,32,99,97,117,115,101,32,105,116,32,116,111,32,102,97,105,108,32,101,97,114,108,105,101,114,32,116,104,97,110,32,105,116,32,111,116,104,101,114,119,105,115,101,32,109,105,103,104,116,44,32,119,104,101,110,32,116,104,101,32,97,117,116,104,111,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,107,110,111,119,115,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,110,111,32,112,111,105,110,116,32,105,110,32,99,97,114,114,121,105,110,103,32,111,110,46>>]},{p,[],[<<67,111,110,115,105,100,101,114,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,112,97,116,116,101,114,110,32,92,100,43,102,111,111,32,119,104,101,110,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,117,98,106,101,99,116,32,108,105,110,101,58>>]},{pre,[],[{code,[],[<<49,50,51,52,53,54,98,97,114>>]}]},{p,[],[<<65,102,116,101,114,32,109,97,116,99,104,105,110,103,32,97,108,108,32,115,105,120,32,100,105,103,105,116,115,32,97,110,100,32,116,104,101,110,32,102,97,105,108,105,110,103,32,116,111,32,109,97,116,99,104,32,34,102,111,111,34,44,32,116,104,101,32,110,111,114,109,97,108,32,97,99,116,105,111,110,32,111,102,32,116,104,101,32,109,97,116,99,104,101,114,32,105,115,32,116,111,32,116,114,121,32,97,103,97,105,110,32,119,105,116,104,32,111,110,108,121,32,102,105,118,101,32,100,105,103,105,116,115,32,109,97,116,99,104,105,110,103,32,105,116,101,109,32,92,100,43,44,32,97,110,100,32,116,104,101,110,32,119,105,116,104,32,102,111,117,114,44,32,97,110,100,32,115,111,32,111,110,44,32,98,101,102,111,114,101,32,117,108,116,105,109,97,116,101,108,121,32,102,97,105,108,105,110,103,46,32,34,65,116,111,109,105,99,32,103,114,111,117,112,105,110,103,34,32,40,97,32,116,101,114,109,32,116,97,107,101,110,32,102,114,111,109,32,74,101,102,102,114,101,121,32,70,114,105,101,100,108,39,115,32,98,111,111,107,41,32,112,114,111,118,105,100,101,115,32,116,104,101,32,109,101,97,110,115,32,102,111,114,32,115,112,101,99,105,102,121,105,110,103,32,116,104,97,116,32,111,110,99,101,32,97,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,109,97,116,99,104,101,100,44,32,105,116,32,105,115,32,110,111,116,32,116,111,32,98,101,32,114,101,45,101,118,97,108,117,97,116,101,100,32,105,110,32,116,104,105,115,32,119,97,121,46>>]},{p,[],[<<73,102,32,97,116,111,109,105,99,32,103,114,111,117,112,105,110,103,32,105,115,32,117,115,101,100,32,102,111,114,32,116,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,44,32,116,104,101,32,109,97,116,99,104,101,114,32,103,105,118,101,115,32,117,112,32,105,109,109,101,100,105,97,116,101,108,121,32,111,110,32,102,97,105,108,105,110,103,32,116,111,32,109,97,116,99,104,32,34,102,111,111,34,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,46,32,84,104,101,32,110,111,116,97,116,105,111,110,32,105,115,32,97,32,107,105,110,100,32,111,102,32,115,112,101,99,105,97,108,32,112,97,114,101,110,116,104,101,115,105,115,44,32,115,116,97,114,116,105,110,103,32,119,105,116,104,32>>,{code,[],[<<40,63,62>>]},<<32,97,115,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,63,62,92,100,43,41,102,111,111>>]}]},{p,[],[<<84,104,105,115,32,107,105,110,100,32,111,102,32,112,97,114,101,110,116,104,101,115,105,115,32,34,108,111,99,107,115,32,117,112,34,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,116,32,99,111,110,116,97,105,110,115,32,111,110,99,101,32,105,116,32,104,97,115,32,109,97,116,99,104,101,100,44,32,97,110,100,32,97,32,102,97,105,108,117,114,101,32,102,117,114,116,104,101,114,32,105,110,116,111,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,112,114,101,118,101,110,116,101,100,32,102,114,111,109,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,105,116,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,112,97,115,116,32,105,116,32,116,111,32,112,114,101,118,105,111,117,115,32,105,116,101,109,115,44,32,104,111,119,101,118,101,114,44,32,119,111,114,107,115,32,97,115,32,110,111,114,109,97,108,46>>]},{p,[],[<<65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,101,115,99,114,105,112,116,105,111,110,32,105,115,32,116,104,97,116,32,97,32,115,117,98,112,97,116,116,101,114,110,32,111,102,32,116,104,105,115,32,116,121,112,101,32,109,97,116,99,104,101,115,32,116,104,101,32,115,116,114,105,110,103,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,110,32,105,100,101,110,116,105,99,97,108,32,115,116,97,110,100,97,108,111,110,101,32,112,97,116,116,101,114,110,32,119,111,117,108,100,32,109,97,116,99,104,44,32,105,102,32,97,110,99,104,111,114,101,100,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,105,110,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]},{p,[],[<<65,116,111,109,105,99,32,103,114,111,117,112,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,110,111,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,83,105,109,112,108,101,32,99,97,115,101,115,32,115,117,99,104,32,97,115,32,116,104,101,32,97,98,111,118,101,32,101,120,97,109,112,108,101,32,99,97,110,32,98,101,32,116,104,111,117,103,104,116,32,111,102,32,97,115,32,97,32,109,97,120,105,109,105,122,105,110,103,32,114,101,112,101,97,116,32,116,104,97,116,32,109,117,115,116,32,115,119,97,108,108,111,119,32,101,118,101,114,121,116,104,105,110,103,32,105,116,32,99,97,110,46,32,83,111,44,32,119,104,105,108,101,32,98,111,116,104,32,92,100,43,32,97,110,100,32,92,100,43,63,32,97,114,101,32,112,114,101,112,97,114,101,100,32,116,111,32,97,100,106,117,115,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,103,105,116,115,32,116,104,101,121,32,109,97,116,99,104,32,116,111,32,109,97,107,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,44,32>>,{code,[],[<<40,63,62,92,100,43,41>>]},<<32,99,97,110,32,111,110,108,121,32,109,97,116,99,104,32,97,110,32,101,110,116,105,114,101,32,115,101,113,117,101,110,99,101,32,111,102,32,100,105,103,105,116,115,46>>]},{p,[],[<<65,116,111,109,105,99,32,103,114,111,117,112,115,32,105,110,32,103,101,110,101,114,97,108,32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,99,111,109,112,108,105,99,97,116,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,97,110,100,32,99,97,110,32,98,101,32,110,101,115,116,101,100,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,102,111,114,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,105,115,32,106,117,115,116,32,97,32,115,105,110,103,108,101,32,114,101,112,101,97,116,101,100,32,105,116,101,109,44,32,97,115,32,105,110,32,116,104,101,32,101,120,97,109,112,108,101,32,97,98,111,118,101,44,32,97,32,115,105,109,112,108,101,114,32,110,111,116,97,116,105,111,110,44,32,99,97,108,108,101,100,32,97,32,34,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,34,32,99,97,110,32,98,101,32,117,115,101,100,46,32,84,104,105,115,32,99,111,110,115,105,115,116,115,32,111,102,32,97,110,32,101,120,116,114,97,32,43,32,99,104,97,114,97,99,116,101,114,32,102,111,108,108,111,119,105,110,103,32,97,32,113,117,97,110,116,105,102,105,101,114,46,32,85,115,105,110,103,32,116,104,105,115,32,110,111,116,97,116,105,111,110,44,32,116,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,32,99,97,110,32,98,101,32,114,101,119,114,105,116,116,101,110,32,97,115>>]},{pre,[],[{code,[],[<<92,100,43,43,102,111,111>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,97,110,32,101,110,116,105,114,101,32,103,114,111,117,112,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,98,99,124,120,121,122,41,123,50,44,51,125,43>>]}]},{p,[],[<<80,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,97,108,119,97,121,115,32,103,114,101,101,100,121,59,32,116,104,101,32,115,101,116,116,105,110,103,32,111,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,103,114,101,101,100,121>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,121,32,97,114,101,32,97,32,99,111,110,118,101,110,105,101,110,116,32,110,111,116,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,105,109,112,108,101,114,32,102,111,114,109,115,32,111,102,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,72,111,119,101,118,101,114,44,32,116,104,101,114,101,32,105,115,32,110,111,32,100,105,102,102,101,114,101,110,99,101,32,105,110,32,116,104,101,32,109,101,97,110,105,110,103,32,111,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,97,110,100,32,116,104,101,32,101,113,117,105,118,97,108,101,110,116,32,97,116,111,109,105,99,32,103,114,111,117,112,44,32,98,117,116,32,116,104,101,114,101,32,99,97,110,32,98,101,32,97,32,112,101,114,102,111,114,109,97,110,99,101,32,100,105,102,102,101,114,101,110,99,101,59,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,112,114,111,98,97,98,108,121,32,115,108,105,103,104,116,108,121,32,102,97,115,116,101,114,46>>]},{p,[],[<<84,104,101,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,115,121,110,116,97,120,32,105,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32,116,111,32,116,104,101,32,80,101,114,108,32,53,46,56,32,115,121,110,116,97,120,46,32,74,101,102,102,114,101,121,32,70,114,105,101,100,108,32,111,114,105,103,105,110,97,116,101,100,32,116,104,101,32,105,100,101,97,32,40,97,110,100,32,116,104,101,32,110,97,109,101,41,32,105,110,32,116,104,101,32,102,105,114,115,116,32,101,100,105,116,105,111,110,32,111,102,32,104,105,115,32,98,111,111,107,46,32,77,105,107,101,32,77,99,67,108,111,115,107,101,121,32,108,105,107,101,100,32,105,116,44,32,115,111,32,105,109,112,108,101,109,101,110,116,101,100,32,105,116,32,119,104,101,110,32,104,101,32,98,117,105,108,116,32,116,104,101,32,83,117,110,32,74,97,118,97,32,112,97,99,107,97,103,101,44,32,97,110,100,32,80,67,82,69,32,99,111,112,105,101,100,32,105,116,32,102,114,111,109,32,116,104,101,114,101,46,32,73,116,32,117,108,116,105,109,97,116,101,108,121,32,102,111,117,110,100,32,105,116,115,32,119,97,121,32,105,110,116,111,32,80,101,114,108,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,48,46>>]},{p,[],[<<80,67,82,69,32,104,97,115,32,97,110,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,34,112,111,115,115,101,115,115,105,102,105,101,115,34,32,99,101,114,116,97,105,110,32,115,105,109,112,108,101,32,112,97,116,116,101,114,110,32,99,111,110,115,116,114,117,99,116,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,115,101,113,117,101,110,99,101,32,65,43,66,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,65,43,43,66,44,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,112,111,105,110,116,32,105,110,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,65,58,115,32,119,104,101,110,32,66,32,109,117,115,116,32,102,111,108,108,111,119,46>>]},{p,[],[<<87,104,101,110,32,97,32,112,97,116,116,101,114,110,32,99,111,110,116,97,105,110,115,32,97,110,32,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,32,105,110,115,105,100,101,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,99,97,110,32,105,116,115,101,108,102,32,98,101,32,114,101,112,101,97,116,101,100,32,97,110,32,117,110,108,105,109,105,116,101,100,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,44,32,116,104,101,32,117,115,101,32,111,102,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,105,115,32,116,104,101,32,111,110,108,121,32,119,97,121,32,116,111,32,97,118,111,105,100,32,115,111,109,101,32,102,97,105,108,105,110,103,32,109,97,116,99,104,101,115,32,116,97,107,105,110,103,32,97,32,108,111,110,103,32,116,105,109,101,46,32,84,104,101,32,112,97,116,116,101,114,110>>]},{pre,[],[{code,[],[<<40,92,68,43,124,60,92,100,43,62,41,42,91,33,63,93>>]}]},{p,[],[<<109,97,116,99,104,101,115,32,97,110,32,117,110,108,105,109,105,116,101,100,32,110,117,109,98,101,114,32,111,102,32,115,117,98,115,116,114,105,110,103,115,32,116,104,97,116,32,101,105,116,104,101,114,32,99,111,110,115,105,115,116,32,111,102,32,110,111,110,45,100,105,103,105,116,115,44,32,111,114,32,100,105,103,105,116,115,32,101,110,99,108,111,115,101,100,32,105,110,32,60,62,44,32,102,111,108,108,111,119,101,100,32,98,121,32,33,32,111,114,32,63,46,32,87,104,101,110,32,105,116,32,109,97,116,99,104,101,115,44,32,105,116,32,114,117,110,115,32,113,117,105,99,107,108,121,46,32,72,111,119,101,118,101,114,44,32,105,102,32,105,116,32,105,115,32,97,112,112,108,105,101,100,32,116,111>>]},{pre,[],[{code,[],[<<97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97>>]}]},{p,[],[<<105,116,32,116,97,107,101,115,32,97,32,108,111,110,103,32,116,105,109,101,32,98,101,102,111,114,101,32,114,101,112,111,114,116,105,110,103,32,102,97,105,108,117,114,101,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,115,116,114,105,110,103,32,99,97,110,32,98,101,32,100,105,118,105,100,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,105,110,116,101,114,110,97,108,32,92,68,43,32,114,101,112,101,97,116,32,97,110,100,32,116,104,101,32,101,120,116,101,114,110,97,108,32,42,32,114,101,112,101,97,116,32,105,110,32,109,97,110,121,32,119,97,121,115,44,32,97,110,100,32,97,108,108,32,109,117,115,116,32,98,101,32,116,114,105,101,100,46,32,40,84,104,101,32,101,120,97,109,112,108,101,32,117,115,101,115,32,91,33,63,93,32,114,97,116,104,101,114,32,116,104,97,110,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,97,116,32,116,104,101,32,101,110,100,44,32,97,115,32,98,111,116,104,32,80,67,82,69,32,97,110,100,32,80,101,114,108,32,104,97,118,101,32,97,110,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,97,108,108,111,119,115,32,102,111,114,32,102,97,115,116,32,102,97,105,108,117,114,101,32,119,104,101,110,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,105,115,32,117,115,101,100,46,32,84,104,101,121,32,114,101,109,101,109,98,101,114,32,116,104,101,32,108,97,115,116,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,114,101,113,117,105,114,101,100,32,102,111,114,32,97,32,109,97,116,99,104,44,32,97,110,100,32,102,97,105,108,32,101,97,114,108,121,32,105,102,32,105,116,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,115,116,114,105,110,103,46,41,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,105,116,32,117,115,101,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,44,32,108,105,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,115,101,113,117,101,110,99,101,115,32,111,102,32,110,111,110,45,100,105,103,105,116,115,32,99,97,110,110,111,116,32,98,101,32,98,114,111,107,101,110,44,32,97,110,100,32,102,97,105,108,117,114,101,32,104,97,112,112,101,110,115,32,113,117,105,99,107,108,121,58>>]},{pre,[],[{code,[],[<<40,40,63,62,92,68,43,41,124,60,92,100,43,62,41,42,91,33,63,93>>]}]},{a,[{id,<<115,101,99,116,49,54>>}],[]},{h2,[],[<<66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,32,98,97,99,107,115,108,97,115,104,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,100,105,103,105,116,32,62,32,48,32,40,97,110,100,32,112,111,115,115,105,98,108,121,32,102,117,114,116,104,101,114,32,100,105,103,105,116,115,41,32,105,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,101,97,114,108,105,101,114,32,40,116,104,97,116,32,105,115,44,32,116,111,32,105,116,115,32,108,101,102,116,41,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,44,32,112,114,111,118,105,100,101,100,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,32,116,104,97,116,32,109,97,110,121,32,112,114,101,118,105,111,117,115,32,99,97,112,116,117,114,105,110,103,32,108,101,102,116,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,100,101,99,105,109,97,108,32,110,117,109,98,101,114,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,98,97,99,107,115,108,97,115,104,32,105,115,32,60,32,49,48,44,32,105,116,32,105,115,32,97,108,119,97,121,115,32,116,97,107,101,110,32,97,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,97,110,100,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,97,114,101,32,110,111,116,32,116,104,97,116,32,109,97,110,121,32,99,97,112,116,117,114,105,110,103,32,108,101,102,116,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,101,110,116,105,114,101,32,112,97,116,116,101,114,110,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,114,101,102,101,114,101,110,99,101,100,32,100,111,32,110,101,101,100,32,110,111,116,32,98,101,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,110,117,109,98,101,114,115,32,60,32,49,48,46,32,65,32,34,102,111,114,119,97,114,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,34,32,111,102,32,116,104,105,115,32,116,121,112,101,32,99,97,110,32,109,97,107,101,32,115,101,110,115,101,32,119,104,101,110,32,97,32,114,101,112,101,116,105,116,105,111,110,32,105,115,32,105,110,118,111,108,118,101,100,32,97,110,100,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,116,111,32,116,104,101,32,114,105,103,104,116,32,104,97,115,32,112,97,114,116,105,99,105,112,97,116,101,100,32,105,110,32,97,110,32,101,97,114,108,105,101,114,32,105,116,101,114,97,116,105,111,110,46>>]},{p,[],[<<73,116,32,105,115,32,110,111,116,32,112,111,115,115,105,98,108,101,32,116,111,32,104,97,118,101,32,97,32,110,117,109,101,114,105,99,97,108,32,34,102,111,114,119,97,114,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,34,32,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,119,104,111,115,101,32,110,117,109,98,101,114,32,105,115,32,49,48,32,111,114,32,109,111,114,101,32,117,115,105,110,103,32,116,104,105,115,32,115,121,110,116,97,120,44,32,97,115,32,97,32,115,101,113,117,101,110,99,101,32,115,117,99,104,32,97,115,32,92,53,48,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,99,104,97,114,97,99,116,101,114,32,100,101,102,105,110,101,100,32,105,110,32,111,99,116,97,108,46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,32,111,102,32,116,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,97,32,98,97,99,107,115,108,97,115,104,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,111,110,95,112,114,105,110,116,105,110,103,95,99,104,97,114,97,99,116,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,111,110,45,80,114,105,110,116,105,110,103,32,67,104,97,114,97,99,116,101,114,115>>]},<<32,101,97,114,108,105,101,114,46,32,84,104,101,114,101,32,105,115,32,110,111,32,115,117,99,104,32,112,114,111,98,108,101,109,32,119,104,101,110,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,117,115,101,100,46,32,65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,97,110,121,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,112,111,115,115,105,98,108,101,32,117,115,105,110,103,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,40,115,101,101,32,98,101,108,111,119,41,46>>]},{p,[],[<<65,110,111,116,104,101,114,32,119,97,121,32,116,111,32,97,118,111,105,100,32,116,104,101,32,97,109,98,105,103,117,105,116,121,32,105,110,104,101,114,101,110,116,32,105,110,32,116,104,101,32,117,115,101,32,111,102,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,97,32,98,97,99,107,115,108,97,115,104,32,105,115,32,116,111,32,117,115,101,32,116,104,101,32,92,103,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,46,32,84,104,105,115,32,101,115,99,97,112,101,32,109,117,115,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,117,110,115,105,103,110,101,100,32,110,117,109,98,101,114,32,111,114,32,97,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,44,32,111,112,116,105,111,110,97,108,108,121,32,101,110,99,108,111,115,101,100,32,105,110,32,98,114,97,99,101,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,115,32,97,114,101,32,105,100,101,110,116,105,99,97,108,58>>]},{pre,[],[{code,[],[<<40,114,105,110,103,41,44,32,92,49,10,40,114,105,110,103,41,44,32,92,103,49,10,40,114,105,110,103,41,44,32,92,103,123,49,125>>]}]},{p,[],[<<65,110,32,117,110,115,105,103,110,101,100,32,110,117,109,98,101,114,32,115,112,101,99,105,102,105,101,115,32,97,110,32,97,98,115,111,108,117,116,101,32,114,101,102,101,114,101,110,99,101,32,119,105,116,104,111,117,116,32,116,104,101,32,97,109,98,105,103,117,105,116,121,32,116,104,97,116,32,105,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,111,108,100,101,114,32,115,121,110,116,97,120,46,32,73,116,32,105,115,32,97,108,115,111,32,117,115,101,102,117,108,32,119,104,101,110,32,108,105,116,101,114,97,108,32,100,105,103,105,116,115,32,102,111,108,108,111,119,32,116,104,101,32,114,101,102,101,114,101,110,99,101,46,32,65,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,32,105,115,32,97,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,98,99,40,100,101,102,41,103,104,105,41,92,103,123,45,49,125>>]}]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,32,92,103,123,45,49,125,32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,115,116,97,114,116,101,100,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,98,101,102,111,114,101,32,92,103,44,32,116,104,97,116,32,105,115,44,32,105,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,92,50,32,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,46,32,83,105,109,105,108,97,114,108,121,44,32,92,103,123,45,50,125,32,119,111,117,108,100,32,98,101,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,92,49,46,32,84,104,101,32,117,115,101,32,111,102,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,115,32,99,97,110,32,98,101,32,104,101,108,112,102,117,108,32,105,110,32,108,111,110,103,32,112,97,116,116,101,114,110,115,44,32,97,110,100,32,97,108,115,111,32,105,110,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,99,114,101,97,116,101,100,32,98,121,32,106,111,105,110,105,110,103,32,102,114,97,103,109,101,110,116,115,32,99,111,110,116,97,105,110,105,110,103,32,114,101,102,101,114,101,110,99,101,115,32,119,105,116,104,105,110,32,116,104,101,109,115,101,108,118,101,115,46>>]},{p,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,109,97,116,99,104,101,115,32,119,104,97,116,101,118,101,114,32,109,97,116,99,104,101,100,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,114,97,116,104,101,114,32,116,104,97,110,32,97,110,121,116,104,105,110,103,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,116,115,101,108,102,32,40,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,32,97,115,32,83,117,98,114,111,117,116,105,110,101,115>>]},<<32,100,101,115,99,114,105,98,101,115,32,97,32,119,97,121,32,111,102,32,100,111,105,110,103,32,116,104,97,116,41,46,32,83,111,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,115,101,110,115,101,32,97,110,100,32,115,101,110,115,105,98,105,108,105,116,121,34,32,97,110,100,32,34,114,101,115,112,111,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,44,32,98,117,116,32,110,111,116,32,34,115,101,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,58>>]},{pre,[],[{code,[],[<<40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,92,49,105,98,105,108,105,116,121>>]}]},{p,[],[<<73,102,32,99,97,115,101,102,117,108,32,109,97,116,99,104,105,110,103,32,105,115,32,105,110,32,102,111,114,99,101,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,116,104,101,32,99,97,115,101,32,111,102,32,108,101,116,116,101,114,115,32,105,115,32,114,101,108,101,118,97,110,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,114,97,104,32,114,97,104,34,32,97,110,100,32,34,82,65,72,32,82,65,72,34,44,32,98,117,116,32,110,111,116,32,34,82,65,72,32,114,97,104,34,44,32,97,108,116,104,111,117,103,104,32,116,104,101,32,111,114,105,103,105,110,97,108,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,109,97,116,99,104,101,100,32,99,97,115,101,108,101,115,115,108,121,58>>]},{pre,[],[{code,[],[<<40,40,63,105,41,114,97,104,41,92,115,43,92,49>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,32,111,102,32,119,114,105,116,105,110,103,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46,32,84,104,101,32,46,78,69,84,32,115,121,110,116,97,120,32>>,{code,[],[<<92,107,123,110,97,109,101,125>>]},<<32,97,110,100,32,116,104,101,32,80,101,114,108,32,115,121,110,116,97,120,32>>,{code,[],[<<92,107,60,110,97,109,101,62>>]},<<32,111,114,32>>,{code,[],[<<92,107,39,110,97,109,101,39>>]},<<32,97,114,101,32,115,117,112,112,111,114,116,101,100,44,32,97,115,32,105,115,32,116,104,101,32,80,121,116,104,111,110,32,115,121,110,116,97,120,32>>,{code,[],[<<40,63,80,61,110,97,109,101,41>>]},<<46,32,84,104,101,32,117,110,105,102,105,101,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,115,121,110,116,97,120,32,105,110,32,80,101,114,108,32,53,46,49,48,44,32,105,110,32,119,104,105,99,104,32,92,103,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,98,111,116,104,32,110,117,109,101,114,105,99,32,97,110,100,32,110,97,109,101,100,32,114,101,102,101,114,101,110,99,101,115,44,32,105,115,32,97,108,115,111,32,115,117,112,112,111,114,116,101,100,46,32,84,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,32,99,97,110,32,98,101,32,114,101,119,114,105,116,116,101,110,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,119,97,121,115,58>>]},{pre,[],[{code,[],[<<40,63,60,112,49,62,40,63,105,41,114,97,104,41,92,115,43,92,107,60,112,49,62,10,40,63,39,112,49,39,40,63,105,41,114,97,104,41,92,115,43,92,107,123,112,49,125,10,40,63,80,60,112,49,62,40,63,105,41,114,97,104,41,92,115,43,40,63,80,61,112,49,41,10,40,63,60,112,49,62,40,63,105,41,114,97,104,41,92,115,43,92,103,123,112,49,125>>]}]},{p,[],[<<65,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,105,115,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32,110,97,109,101,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,98,101,102,111,114,101,32,111,114,32,97,102,116,101,114,32,116,104,101,32,114,101,102,101,114,101,110,99,101,46>>]},{p,[],[<<84,104,101,114,101,32,99,97,110,32,98,101,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,115,97,109,101,32,115,117,98,112,97,116,116,101,114,110,46,32,73,102,32,97,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,110,111,116,32,98,101,101,110,32,117,115,101,100,32,105,110,32,97,32,112,97,114,116,105,99,117,108,97,114,32,109,97,116,99,104,44,32,97,110,121,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,105,116,32,97,108,119,97,121,115,32,102,97,105,108,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,97,108,119,97,121,115,32,102,97,105,108,115,32,105,102,32,105,116,32,115,116,97,114,116,115,32,116,111,32,109,97,116,99,104,32,34,97,34,32,114,97,116,104,101,114,32,116,104,97,110,32,34,98,99,34,58>>]},{pre,[],[{code,[],[<<40,97,124,40,98,99,41,41,92,50>>]}]},{p,[],[<<65,115,32,116,104,101,114,101,32,99,97,110,32,98,101,32,109,97,110,121,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,97,108,108,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,98,97,99,107,115,108,97,115,104,32,97,114,101,32,116,97,107,101,110,32,97,115,32,112,97,114,116,32,111,102,32,97,32,112,111,116,101,110,116,105,97,108,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,110,117,109,98,101,114,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,99,111,110,116,105,110,117,101,115,32,119,105,116,104,32,97,32,100,105,103,105,116,32,99,104,97,114,97,99,116,101,114,44,32,115,111,109,101,32,100,101,108,105,109,105,116,101,114,32,109,117,115,116,32,98,101,32,117,115,101,100,32,116,111,32,116,101,114,109,105,110,97,116,101,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,105,115,32,115,101,116,44,32,116,104,105,115,32,99,97,110,32,98,101,32,119,104,105,116,101,115,112,97,99,101,46,32,79,116,104,101,114,119,105,115,101,32,97,110,32,101,109,112,116,121,32,99,111,109,109,101,110,116,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,57>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,111,109,109,101,110,116,115>>]},<<41,32,99,97,110,32,98,101,32,117,115,101,100,46>>]},{p,[],[{em,[],[<<82,101,99,117,114,115,105,118,101,32,66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]}]},{p,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,104,97,116,32,111,99,99,117,114,115,32,105,110,115,105,100,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,111,32,119,104,105,99,104,32,105,116,32,114,101,102,101,114,115,32,102,97,105,108,115,32,119,104,101,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,102,105,114,115,116,32,117,115,101,100,44,32,115,111,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,40,97,92,49,41,32,110,101,118,101,114,32,109,97,116,99,104,101,115,46,32,72,111,119,101,118,101,114,44,32,115,117,99,104,32,114,101,102,101,114,101,110,99,101,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,105,110,115,105,100,101,32,114,101,112,101,97,116,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,34,97,34,115,32,97,110,100,32,97,108,115,111,32,34,97,98,97,34,44,32,34,97,98,97,98,98,97,97,34,44,32,97,110,100,32,115,111,32,111,110,58>>]},{pre,[],[{code,[],[<<40,97,124,98,92,49,41,43>>]}]},{p,[],[<<65,116,32,101,97,99,104,32,105,116,101,114,97,116,105,111,110,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,44,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,109,97,116,99,104,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,112,114,101,118,105,111,117,115,32,105,116,101,114,97,116,105,111,110,46,32,73,110,32,111,114,100,101,114,32,102,111,114,32,116,104,105,115,32,116,111,32,119,111,114,107,44,32,116,104,101,32,112,97,116,116,101,114,110,32,109,117,115,116,32,98,101,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,102,105,114,115,116,32,105,116,101,114,97,116,105,111,110,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32,109,97,116,99,104,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,46,32,84,104,105,115,32,99,97,110,32,98,101,32,100,111,110,101,32,117,115,105,110,103,32,97,108,116,101,114,110,97,116,105,111,110,44,32,97,115,32,105,110,32,116,104,101,32,101,120,97,109,112,108,101,32,97,98,111,118,101,44,32,111,114,32,98,121,32,97,32,113,117,97,110,116,105,102,105,101,114,32,119,105,116,104,32,97,32,109,105,110,105,109,117,109,32,111,102,32,122,101,114,111,46>>]},{p,[],[<<66,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,111,102,32,116,104,105,115,32,116,121,112,101,32,99,97,117,115,101,32,116,104,101,32,103,114,111,117,112,32,116,104,97,116,32,116,104,101,121,32,114,101,102,101,114,101,110,99,101,32,116,111,32,98,101,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,79,110,99,101,32,116,104,101,32,119,104,111,108,101,32,103,114,111,117,112,32,104,97,115,32,98,101,101,110,32,109,97,116,99,104,101,100,44,32,97,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,99,97,110,110,111,116,32,99,97,117,115,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,116,104,101,32,109,105,100,100,108,101,32,111,102,32,116,104,101,32,103,114,111,117,112,46>>]},{a,[{id,<<115,101,99,116,49,55>>}],[]},{h2,[],[<<65,115,115,101,114,116,105,111,110,115>>]},{p,[],[<<65,110,32,97,115,115,101,114,116,105,111,110,32,105,115,32,97,32,116,101,115,116,32,111,110,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,102,111,108,108,111,119,105,110,103,32,111,114,32,112,114,101,99,101,100,105,110,103,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,99,111,110,115,117,109,101,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,115,105,109,112,108,101,32,97,115,115,101,114,116,105,111,110,115,32,99,111,100,101,100,32,97,115,32,92,98,44,32,92,66,44,32,92,65,44,32,92,71,44,32,92,90,44,32,92,122,44,32,94,44,32,97,110,100,32,36,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,101,99,116,105,111,110,115,46>>]},{p,[],[<<77,111,114,101,32,99,111,109,112,108,105,99,97,116,101,100,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,32,99,111,100,101,100,32,97,115,32,115,117,98,112,97,116,116,101,114,110,115,46,32,84,104,101,114,101,32,97,114,101,32,116,119,111,32,107,105,110,100,115,58,32,116,104,111,115,101,32,116,104,97,116,32,108,111,111,107,32,97,104,101,97,100,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,110,100,32,116,104,111,115,101,32,116,104,97,116,32,108,111,111,107,32,98,101,104,105,110,100,32,105,116,46,32,65,110,32,97,115,115,101,114,116,105,111,110,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,109,97,116,99,104,101,100,32,105,110,32,116,104,101,32,110,111,114,109,97,108,32,119,97,121,44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,100,111,101,115,32,110,111,116,32,99,97,117,115,101,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,32,116,111,32,98,101,32,99,104,97,110,103,101,100,46>>]},{p,[],[<<65,115,115,101,114,116,105,111,110,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,110,111,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,73,102,32,115,117,99,104,32,97,110,32,97,115,115,101,114,116,105,111,110,32,99,111,110,116,97,105,110,115,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,105,110,32,105,116,44,32,116,104,101,115,101,32,97,114,101,32,99,111,117,110,116,101,100,32,102,111,114,32,116,104,101,32,112,117,114,112,111,115,101,115,32,111,102,32,110,117,109,98,101,114,105,110,103,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,46,32,72,111,119,101,118,101,114,44,32,115,117,98,115,116,114,105,110,103,32,99,97,112,116,117,114,105,110,103,32,105,115,32,100,111,110,101,32,111,110,108,121,32,102,111,114,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,40,80,101,114,108,32,115,111,109,101,116,105,109,101,115,44,32,98,117,116,32,110,111,116,32,97,108,119,97,121,115,44,32,112,101,114,102,111,114,109,115,32,99,97,112,116,117,114,105,110,103,32,105,110,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,41>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,102,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,99,111,110,116,97,105,110,105,110,103,32,111,110,101,32,111,114,32,109,111,114,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,115,117,99,99,101,101,100,115,44,32,98,117,116,32,102,97,105,108,117,114,101,32,116,111,32,109,97,116,99,104,32,108,97,116,101,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,99,97,117,115,101,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,111,118,101,114,32,116,104,105,115,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,99,97,112,116,117,114,101,115,32,119,105,116,104,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,97,114,101,32,114,101,115,101,116,32,111,110,108,121,32,105,102,32,110,111,32,104,105,103,104,101,114,32,110,117,109,98,101,114,101,100,32,99,97,112,116,117,114,101,115,32,97,114,101,32,97,108,114,101,97,100,121,32,115,101,116,46,32,84,104,105,115,32,105,115,44,32,117,110,102,111,114,116,117,110,97,116,101,108,121,44,32,97,32,102,117,110,100,97,109,101,110,116,97,108,32,108,105,109,105,116,97,116,105,111,110,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,44,32,97,110,100,32,97,115,32,80,67,82,69,49,32,105,115,32,110,111,119,32,105,110,32,109,97,105,110,116,101,110,97,110,99,101,45,111,110,108,121,32,115,116,97,116,117,115,44,32,105,116,32,105,115,32,117,110,108,105,107,101,108,121,32,101,118,101,114,32,116,111,32,99,104,97,110,103,101,46>>]}]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,80,101,114,108,44,32,97,115,115,101,114,116,105,111,110,32,115,117,98,112,97,116,116,101,114,110,115,32,99,97,110,32,98,101,32,114,101,112,101,97,116,101,100,46,32,72,111,119,101,118,101,114,44,32,105,116,32,109,97,107,101,115,32,110,111,32,115,101,110,115,101,32,116,111,32,97,115,115,101,114,116,32,116,104,101,32,115,97,109,101,32,116,104,105,110,103,32,109,97,110,121,32,116,105,109,101,115,44,32,116,104,101,32,115,105,100,101,32,101,102,102,101,99,116,32,111,102,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,111,99,99,97,115,105,111,110,97,108,108,121,32,98,101,32,117,115,101,102,117,108,46,32,73,110,32,112,114,97,99,116,105,99,101,44,32,116,104,101,114,101,32,97,114,101,32,111,110,108,121,32,116,104,114,101,101,32,99,97,115,101,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,123,48,125,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,105,115,32,110,101,118,101,114,32,111,98,101,121,101,100,32,100,117,114,105,110,103,32,109,97,116,99,104,105,110,103,46,32,72,111,119,101,118,101,114,44,32,105,116,32,99,97,110,32,99,111,110,116,97,105,110,32,105,110,116,101,114,110,97,108,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,103,114,111,117,112,115,32,116,104,97,116,32,97,114,101,32,99,97,108,108,101,100,32,102,114,111,109,32,101,108,115,101,119,104,101,114,101,32,116,104,114,111,117,103,104,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,101,99,104,97,110,105,115,109,46>>]}]},{li,[],[{p,[],[<<73,102,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,123,48,44,110,125,44,32,119,104,101,114,101,32,110,32,62,32,48,44,32,105,116,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,105,102,32,105,116,32,119,97,115,32,123,48,44,49,125,46,32,65,116,32,114,117,110,116,105,109,101,44,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,32,105,115,32,116,114,105,101,100,32,119,105,116,104,32,97,110,100,32,119,105,116,104,111,117,116,32,116,104,101,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,111,114,100,101,114,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,103,114,101,101,100,105,110,101,115,115,32,111,102,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,46>>]}]},{li,[],[{p,[],[<<73,102,32,116,104,101,32,109,105,110,105,109,117,109,32,114,101,112,101,116,105,116,105,111,110,32,105,115,32,62,32,48,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,32,97,115,115,101,114,116,105,111,110,32,105,115,32,111,98,101,121,101,100,32,111,110,108,121,32,111,110,99,101,32,119,104,101,110,32,101,110,99,111,117,110,116,101,114,101,100,32,100,117,114,105,110,103,32,109,97,116,99,104,105,110,103,46>>]}]}]},{p,[],[{em,[],[<<76,111,111,107,97,104,101,97,100,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<76,111,111,107,97,104,101,97,100,32,97,115,115,101,114,116,105,111,110,115,32,115,116,97,114,116,32,119,105,116,104,32,40,63,61,32,102,111,114,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,97,110,100,32,40,63,33,32,102,111,114,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,32,119,111,114,100,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,115,101,109,105,99,111,108,111,110,44,32,98,117,116,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,116,104,101,32,115,101,109,105,99,111,108,111,110,32,105,110,32,116,104,101,32,109,97,116,99,104,58>>]},{pre,[],[{code,[],[<<92,119,43,40,63,61,59,41>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,110,121,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,102,111,111,34,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32,34,98,97,114,34,58>>]},{pre,[],[{code,[],[<<102,111,111,40,63,33,98,97,114,41>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,97,112,112,97,114,101,110,116,108,121,32,115,105,109,105,108,97,114,32,112,97,116,116,101,114,110>>]},{pre,[],[{code,[],[<<40,63,33,102,111,111,41,98,97,114>>]}]},{p,[],[<<100,111,101,115,32,110,111,116,32,102,105,110,100,32,97,110,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,114,34,32,116,104,97,116,32,105,115,32,112,114,101,99,101,100,101,100,32,98,121,32,115,111,109,101,116,104,105,110,103,32,111,116,104,101,114,32,116,104,97,110,32,34,102,111,111,34,46,32,73,116,32,102,105,110,100,115,32,97,110,121,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,114,34,32,119,104,97,116,115,111,101,118,101,114,44,32,97,115,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,40,63,33,102,111,111,41,32,105,115,32,97,108,119,97,121,115,32,116,114,117,101,32,119,104,101,110,32,116,104,101,32,110,101,120,116,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,34,98,97,114,34,46,32,65,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,105,115,32,110,101,101,100,101,100,32,116,111,32,97,99,104,105,101,118,101,32,116,104,101,32,111,116,104,101,114,32,101,102,102,101,99,116,46>>]},{p,[],[<<73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,102,111,114,99,101,32,97,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,97,116,32,115,111,109,101,32,112,111,105,110,116,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,116,104,101,32,109,111,115,116,32,99,111,110,118,101,110,105,101,110,116,32,119,97,121,32,116,111,32,100,111,32,105,116,32,105,115,32,119,105,116,104,32,40,63,33,41,44,32,97,115,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,46,32,83,111,44,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,114,101,113,117,105,114,101,115,32,116,104,101,114,101,32,105,115,32,110,111,116,32,116,111,32,98,101,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,109,117,115,116,32,97,108,119,97,121,115,32,102,97,105,108,46,32,84,104,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,111,110,116,114,111,108,32,118,101,114,98,32,40,42,70,65,73,76,41,32,111,114,32,40,42,70,41,32,105,115,32,97,32,115,121,110,111,110,121,109,32,102,111,114,32,40,63,33,41,46>>]},{p,[],[{em,[],[<<76,111,111,107,98,101,104,105,110,100,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<76,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,115,116,97,114,116,32,119,105,116,104,32,40,63,60,61,32,102,111,114,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,97,110,100,32,40,63,60,33,32,102,111,114,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,110,100,115,32,97,110,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,114,34,32,116,104,97,116,32,105,115,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,34,102,111,111,34,58>>]},{pre,[],[{code,[],[<<40,63,60,33,102,111,111,41,98,97,114>>]}]},{p,[],[<<84,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,97,114,101,32,114,101,115,116,114,105,99,116,101,100,32,115,117,99,104,32,116,104,97,116,32,97,108,108,32,116,104,101,32,115,116,114,105,110,103,115,32,105,116,32,109,97,116,99,104,101,115,32,109,117,115,116,32,104,97,118,101,32,97,32,102,105,120,101,100,32,108,101,110,103,116,104,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,114,101,32,97,114,101,32,109,97,110,121,32,116,111,112,45,108,101,118,101,108,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,116,104,101,121,32,100,111,32,110,111,116,32,97,108,108,32,104,97,118,101,32,116,111,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,102,105,120,101,100,32,108,101,110,103,116,104,46,32,84,104,117,115,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,112,101,114,109,105,116,116,101,100,58>>]},{pre,[],[{code,[],[<<40,63,60,61,98,117,108,108,111,99,107,124,100,111,110,107,101,121,41>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,58>>]},{pre,[],[{code,[],[<<40,63,60,33,100,111,103,115,63,124,99,97,116,115,63,41>>]}]},{p,[],[<<66,114,97,110,99,104,101,115,32,116,104,97,116,32,109,97,116,99,104,32,100,105,102,102,101,114,101,110,116,32,108,101,110,103,116,104,32,115,116,114,105,110,103,115,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,111,110,108,121,32,97,116,32,116,104,101,32,116,111,112,45,108,101,118,101,108,32,111,102,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,46,32,84,104,105,115,32,105,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32,99,111,109,112,97,114,101,100,32,119,105,116,104,32,80,101,114,108,44,32,119,104,105,99,104,32,114,101,113,117,105,114,101,115,32,97,108,108,32,98,114,97,110,99,104,101,115,32,116,111,32,109,97,116,99,104,32,116,104,101,32,115,97,109,101,32,108,101,110,103,116,104,32,111,102,32,115,116,114,105,110,103,46,32,65,110,32,97,115,115,101,114,116,105,111,110,32,115,117,99,104,32,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,110,111,116,32,112,101,114,109,105,116,116,101,100,44,32,97,115,32,105,116,115,32,115,105,110,103,108,101,32,116,111,112,45,108,101,118,101,108,32,98,114,97,110,99,104,32,99,97,110,32,109,97,116,99,104,32,116,119,111,32,100,105,102,102,101,114,101,110,116,32,108,101,110,103,116,104,115,58>>]},{pre,[],[{code,[],[<<40,63,60,61,97,98,40,99,124,100,101,41,41>>]}]},{p,[],[<<72,111,119,101,118,101,114,44,32,105,116,32,105,115,32,97,99,99,101,112,116,97,98,108,101,32,116,111,32,80,67,82,69,32,105,102,32,114,101,119,114,105,116,116,101,110,32,116,111,32,117,115,101,32,116,119,111,32,116,111,112,45,108,101,118,101,108,32,98,114,97,110,99,104,101,115,58>>]},{pre,[],[{code,[],[<<40,63,60,61,97,98,99,124,97,98,100,101,41>>]}]},{p,[],[<<83,111,109,101,116,105,109,101,115,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,75,32,40,115,101,101,32,97,98,111,118,101,41,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,111,102,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,116,111,32,103,101,116,32,114,111,117,110,100,32,116,104,101,32,102,105,120,101,100,45,108,101,110,103,116,104,32,114,101,115,116,114,105,99,116,105,111,110,46>>]},{p,[],[<<84,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,105,115,44,32,102,111,114,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,44,32,116,111,32,109,111,118,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,98,97,99,107,32,116,101,109,112,111,114,97,114,105,108,121,32,98,121,32,116,104,101,32,102,105,120,101,100,32,108,101,110,103,116,104,32,97,110,100,32,116,104,101,110,32,116,114,121,32,116,111,32,109,97,116,99,104,46,32,73,102,32,116,104,101,114,101,32,97,114,101,32,105,110,115,117,102,102,105,99,105,101,110,116,32,99,104,97,114,97,99,116,101,114,115,32,98,101,102,111,114,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,102,97,105,108,115,46>>]},{p,[],[<<73,110,32,97,32,85,84,70,32,109,111,100,101,44,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,116,104,101,32,92,67,32,101,115,99,97,112,101,32,40,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,100,97,116,97,32,117,110,105,116,32,101,118,101,110,32,105,110,32,97,32,85,84,70,32,109,111,100,101,41,32,116,111,32,97,112,112,101,97,114,32,105,110,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,44,32,97,115,32,105,116,32,109,97,107,101,115,32,105,116,32,105,109,112,111,115,115,105,98,108,101,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,108,111,111,107,98,101,104,105,110,100,46,32,84,104,101,32,92,88,32,97,110,100,32,92,82,32,101,115,99,97,112,101,115,44,32,119,104,105,99,104,32,99,97,110,32,109,97,116,99,104,32,100,105,102,102,101,114,101,110,116,32,110,117,109,98,101,114,115,32,111,102,32,100,97,116,97,32,117,110,105,116,115,44,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,101,105,116,104,101,114,46>>]},{p,[],[<<34,83,117,98,114,111,117,116,105,110,101,34,32,99,97,108,108,115,32,40,115,101,101,32,98,101,108,111,119,41,44,32,115,117,99,104,32,97,115,32,40,63,50,41,32,111,114,32,40,63,38,88,41,44,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,108,111,111,107,98,101,104,105,110,100,115,44,32,97,115,32,108,111,110,103,32,97,115,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,32,102,105,120,101,100,45,108,101,110,103,116,104,32,115,116,114,105,110,103,46,32,82,101,99,117,114,115,105,111,110,44,32,104,111,119,101,118,101,114,44,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46>>]},{p,[],[<<80,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,115,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,116,111,32,115,112,101,99,105,102,121,32,101,102,102,105,99,105,101,110,116,32,109,97,116,99,104,105,110,103,32,111,102,32,102,105,120,101,100,45,108,101,110,103,116,104,32,115,116,114,105,110,103,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,105,109,112,108,101,32,112,97,116,116,101,114,110,32,119,104,101,110,32,97,112,112,108,105,101,100,32,116,111,32,97,32,108,111,110,103,32,115,116,114,105,110,103,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,58>>]},{pre,[],[{code,[],[<<97,98,99,100,36>>]}]},{p,[],[<<65,115,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,101,100,115,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,44,32,80,67,82,69,32,108,111,111,107,115,32,102,111,114,32,101,97,99,104,32,34,97,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,97,110,100,32,116,104,101,110,32,115,101,101,115,32,105,102,32,119,104,97,116,32,102,111,108,108,111,119,115,32,109,97,116,99,104,101,115,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115>>]},{pre,[],[{code,[],[<<94,46,42,97,98,99,100,36>>]}]},{p,[],[<<116,104,101,32,105,110,105,116,105,97,108,32,46,42,32,109,97,116,99,104,101,115,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,32,97,116,32,102,105,114,115,116,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,116,104,105,115,32,102,97,105,108,115,32,40,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,102,111,108,108,111,119,105,110,103,32,34,97,34,41,44,32,105,116,32,98,97,99,107,116,114,97,99,107,115,32,116,111,32,109,97,116,99,104,32,97,108,108,32,98,117,116,32,116,104,101,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,44,32,116,104,101,110,32,97,108,108,32,98,117,116,32,116,104,101,32,108,97,115,116,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,44,32,97,110,100,32,115,111,32,111,110,46,32,79,110,99,101,32,97,103,97,105,110,32,116,104,101,32,115,101,97,114,99,104,32,102,111,114,32,34,97,34,32,99,111,118,101,114,115,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,44,32,102,114,111,109,32,114,105,103,104,116,32,116,111,32,108,101,102,116,44,32,115,111,32,119,101,32,97,114,101,32,110,111,32,98,101,116,116,101,114,32,111,102,102,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,119,114,105,116,116,101,110,32,97,115>>]},{pre,[],[{code,[],[<<94,46,42,43,40,63,60,61,97,98,99,100,41>>]}]},{p,[],[<<116,104,101,114,101,32,99,97,110,32,98,101,32,110,111,32,98,97,99,107,116,114,97,99,107,105,110,103,32,102,111,114,32,116,104,101,32,46,42,43,32,105,116,101,109,59,32,105,116,32,99,97,110,32,109,97,116,99,104,32,111,110,108,121,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,46,32,84,104,101,32,115,117,98,115,101,113,117,101,110,116,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,100,111,101,115,32,97,32,115,105,110,103,108,101,32,116,101,115,116,32,111,110,32,116,104,101,32,108,97,115,116,32,102,111,117,114,32,99,104,97,114,97,99,116,101,114,115,46,32,73,102,32,105,116,32,102,97,105,108,115,44,32,116,104,101,32,109,97,116,99,104,32,102,97,105,108,115,32,105,109,109,101,100,105,97,116,101,108,121,46,32,70,111,114,32,108,111,110,103,32,115,116,114,105,110,103,115,44,32,116,104,105,115,32,97,112,112,114,111,97,99,104,32,109,97,107,101,115,32,97,32,115,105,103,110,105,102,105,99,97,110,116,32,100,105,102,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,105,110,103,32,116,105,109,101,46>>]},{p,[],[{em,[],[<<85,115,105,110,103,32,77,117,108,116,105,112,108,101,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<77,97,110,121,32,97,115,115,101,114,116,105,111,110,115,32,40,111,102,32,97,110,121,32,115,111,114,116,41,32,99,97,110,32,111,99,99,117,114,32,105,110,32,115,117,99,99,101,115,115,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,102,111,111,34,32,112,114,101,99,101,100,101,100,32,98,121,32,116,104,114,101,101,32,100,105,103,105,116,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,34,57,57,57,34,58>>]},{pre,[],[{code,[],[<<40,63,60,61,92,100,123,51,125,41,40,63,60,33,57,57,57,41,102,111,111>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,101,97,99,104,32,111,102,32,116,104,101,32,97,115,115,101,114,116,105,111,110,115,32,105,115,32,97,112,112,108,105,101,100,32,105,110,100,101,112,101,110,100,101,110,116,108,121,32,97,116,32,116,104,101,32,115,97,109,101,32,112,111,105,110,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,70,105,114,115,116,32,116,104,101,114,101,32,105,115,32,97,32,99,104,101,99,107,32,116,104,97,116,32,116,104,101,32,112,114,101,118,105,111,117,115,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,97,108,108,32,100,105,103,105,116,115,44,32,97,110,100,32,116,104,101,110,32,116,104,101,114,101,32,105,115,32,97,32,99,104,101,99,107,32,116,104,97,116,32,116,104,101,32,115,97,109,101,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,110,111,116,32,34,57,57,57,34,46,32,84,104,105,115,32,112,97,116,116,101,114,110,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,109,97,116,99,104,32,34,102,111,111,34,32,112,114,101,99,101,100,101,100,32,98,121,32,115,105,120,32,99,104,97,114,97,99,116,101,114,115,44,32,116,104,101,32,102,105,114,115,116,32,111,102,32,119,104,105,99,104,32,97,114,101,32,100,105,103,105,116,115,32,97,110,100,32,116,104,101,32,108,97,115,116,32,116,104,114,101,101,32,111,102,32,119,104,105,99,104,32,97,114,101,32,110,111,116,32,34,57,57,57,34,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,34,49,50,51,97,98,99,102,111,111,34,46,32,65,32,112,97,116,116,101,114,110,32,116,111,32,100,111,32,116,104,97,116,32,105,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{pre,[],[{code,[],[<<40,63,60,61,92,100,123,51,125,46,46,46,41,40,63,60,33,57,57,57,41,102,111,111>>]}]},{p,[],[<<84,104,105,115,32,116,105,109,101,32,116,104,101,32,102,105,114,115,116,32,97,115,115,101,114,116,105,111,110,32,108,111,111,107,115,32,97,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,115,105,120,32,99,104,97,114,97,99,116,101,114,115,44,32,99,104,101,99,107,115,32,116,104,97,116,32,116,104,101,32,102,105,114,115,116,32,116,104,114,101,101,32,97,114,101,32,100,105,103,105,116,115,44,32,97,110,100,32,116,104,101,110,32,116,104,101,32,115,101,99,111,110,100,32,97,115,115,101,114,116,105,111,110,32,99,104,101,99,107,115,32,116,104,97,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,110,111,116,32,34,57,57,57,34,46>>]},{p,[],[<<65,115,115,101,114,116,105,111,110,115,32,99,97,110,32,98,101,32,110,101,115,116,101,100,32,105,110,32,97,110,121,32,99,111,109,98,105,110,97,116,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,110,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,122,34,32,116,104,97,116,32,105,115,32,112,114,101,99,101,100,101,100,32,98,121,32,34,98,97,114,34,44,32,119,104,105,99,104,32,105,110,32,116,117,114,110,32,105,115,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,34,102,111,111,34,58>>]},{pre,[],[{code,[],[<<40,63,60,61,40,63,60,33,102,111,111,41,98,97,114,41,98,97,122>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,102,111,111,34,32,112,114,101,99,101,100,101,100,32,98,121,32,116,104,114,101,101,32,100,105,103,105,116,115,32,97,110,100,32,97,110,121,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,34,57,57,57,34,58>>]},{pre,[],[{code,[],[<<40,63,60,61,92,100,123,51,125,40,63,33,57,57,57,41,46,46,46,41,102,111,111>>]}]},{a,[{id,<<115,101,99,116,49,56>>}],[]},{h2,[],[<<67,111,110,100,105,116,105,111,110,97,108,32,83,117,98,112,97,116,116,101,114,110,115>>]},{p,[],[<<73,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,99,97,117,115,101,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,115,115,32,116,111,32,111,98,101,121,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,111,110,100,105,116,105,111,110,97,108,108,121,32,111,114,32,116,111,32,99,104,111,111,115,101,32,98,101,116,119,101,101,110,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,32,115,117,98,112,97,116,116,101,114,110,115,44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,110,32,97,115,115,101,114,116,105,111,110,44,32,111,114,32,119,104,101,116,104,101,114,32,97,32,115,112,101,99,105,102,105,99,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,97,108,114,101,97,100,121,32,98,101,101,110,32,109,97,116,99,104,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,116,119,111,32,112,111,115,115,105,98,108,101,32,102,111,114,109,115,32,111,102,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,63,40,99,111,110,100,105,116,105,111,110,41,121,101,115,45,112,97,116,116,101,114,110,41,10,40,63,40,99,111,110,100,105,116,105,111,110,41,121,101,115,45,112,97,116,116,101,114,110,124,110,111,45,112,97,116,116,101,114,110,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,115,97,116,105,115,102,105,101,100,44,32,116,104,101,32,121,101,115,45,112,97,116,116,101,114,110,32,105,115,32,117,115,101,100,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,110,111,45,112,97,116,116,101,114,110,32,40,105,102,32,112,114,101,115,101,110,116,41,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,101,120,105,115,116,32,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,44,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,32,111,99,99,117,114,115,46,32,69,97,99,104,32,111,102,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,99,97,110,32,105,116,115,101,108,102,32,99,111,110,116,97,105,110,32,110,101,115,116,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,97,110,121,32,102,111,114,109,44,32,105,110,99,108,117,100,105,110,103,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,115,59,32,116,104,101,32,114,101,115,116,114,105,99,116,105,111,110,32,116,111,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,112,112,108,105,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,108,101,118,101,108,32,111,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,102,114,97,103,109,101,110,116,32,105,115,32,97,110,32,101,120,97,109,112,108,101,32,119,104,101,114,101,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,99,111,109,112,108,101,120,58>>]},{pre,[],[{code,[],[<<40,63,40,49,41,32,40,65,124,66,124,67,41,32,124,32,40,68,32,124,32,40,63,40,50,41,69,124,70,41,32,124,32,69,41,32,41>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,102,111,117,114,32,107,105,110,100,115,32,111,102,32,99,111,110,100,105,116,105,111,110,58,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,115,117,98,112,97,116,116,101,114,110,115,44,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,114,101,99,117,114,115,105,111,110,44,32,97,32,112,115,101,117,100,111,45,99,111,110,100,105,116,105,111,110,32,99,97,108,108,101,100,32,68,69,70,73,78,69,44,32,97,110,100,32,97,115,115,101,114,116,105,111,110,115,46>>]},{p,[],[{em,[],[<<67,104,101,99,107,105,110,103,32,102,111,114,32,97,32,85,115,101,100,32,83,117,98,112,97,116,116,101,114,110,32,66,121,32,78,117,109,98,101,114>>]}]},{p,[],[<<73,102,32,116,104,101,32,116,101,120,116,32,98,101,116,119,101,101,110,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,99,111,110,115,105,115,116,115,32,111,102,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,100,105,103,105,116,115,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,111,102,32,116,104,97,116,32,110,117,109,98,101,114,32,104,97,115,32,112,114,101,118,105,111,117,115,108,121,32,109,97,116,99,104,101,100,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,101,120,105,115,116,115,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]},<<32,101,97,114,108,105,101,114,41,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,102,32,116,104,101,109,32,104,97,118,101,32,109,97,116,99,104,101,100,46,32,65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,110,111,116,97,116,105,111,110,32,105,115,32,116,111,32,112,114,101,99,101,100,101,32,116,104,101,32,100,105,103,105,116,115,32,119,105,116,104,32,97,32,112,108,117,115,32,111,114,32,109,105,110,117,115,32,115,105,103,110,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,110,117,109,98,101,114,32,105,115,32,114,101,108,97,116,105,118,101,32,114,97,116,104,101,114,32,116,104,97,110,32,97,98,115,111,108,117,116,101,46,32,84,104,101,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32,40,63,40,45,49,41,44,32,116,104,101,32,110,101,120,116,32,109,111,115,116,32,114,101,99,101,110,116,32,98,121,32,40,63,40,45,50,41,44,32,97,110,100,32,115,111,32,111,110,46,32,73,110,115,105,100,101,32,108,111,111,112,115,44,32,105,116,32,99,97,110,32,97,108,115,111,32,109,97,107,101,32,115,101,110,115,101,32,116,111,32,114,101,102,101,114,32,116,111,32,115,117,98,115,101,113,117,101,110,116,32,103,114,111,117,112,115,46,32,84,104,101,32,110,101,120,116,32,112,97,114,101,110,116,104,101,115,101,115,32,116,111,32,98,101,32,111,112,101,110,101,100,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,32,97,115,32,40,63,40,43,49,41,44,32,97,110,100,32,115,111,32,111,110,46,32,40,84,104,101,32,118,97,108,117,101,32,122,101,114,111,32,105,110,32,97,110,121,32,111,102,32,116,104,101,115,101,32,102,111,114,109,115,32,105,115,32,110,111,116,32,117,115,101,100,59,32,105,116,32,112,114,111,118,111,107,101,115,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,46,41>>]},{p,[],[<<67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,99,111,110,116,97,105,110,115,32,110,111,110,45,115,105,103,110,105,102,105,99,97,110,116,32,119,104,105,116,101,115,112,97,99,101,32,116,111,32,109,97,107,101,32,105,116,32,109,111,114,101,32,114,101,97,100,97,98,108,101,32,40,97,115,115,117,109,101,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<41,32,97,110,100,32,116,111,32,100,105,118,105,100,101,32,105,116,32,105,110,116,111,32,116,104,114,101,101,32,112,97,114,116,115,32,102,111,114,32,101,97,115,101,32,111,102,32,100,105,115,99,117,115,115,105,111,110,58>>]},{pre,[],[{code,[],[<<40,32,92,40,32,41,63,32,32,32,32,91,94,40,41,93,43,32,32,32,32,40,63,40,49,41,32,92,41,32,41>>]}]},{p,[],[<<84,104,101,32,102,105,114,115,116,32,112,97,114,116,32,109,97,116,99,104,101,115,32,97,110,32,111,112,116,105,111,110,97,108,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,44,32,97,110,100,32,105,102,32,116,104,97,116,32,99,104,97,114,97,99,116,101,114,32,105,115,32,112,114,101,115,101,110,116,44,32,115,101,116,115,32,105,116,32,97,115,32,116,104,101,32,102,105,114,115,116,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,46,32,84,104,101,32,115,101,99,111,110,100,32,112,97,114,116,32,109,97,116,99,104,101,115,32,111,110,101,32,111,114,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,112,97,114,101,110,116,104,101,115,101,115,46,32,84,104,101,32,116,104,105,114,100,32,112,97,114,116,32,105,115,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,116,101,115,116,115,32,119,104,101,116,104,101,114,32,116,104,101,32,102,105,114,115,116,32,115,101,116,32,111,102,32,112,97,114,101,110,116,104,101,115,101,115,32,109,97,116,99,104,101,100,32,111,114,32,110,111,116,46,32,73,102,32,116,104,101,121,32,100,105,100,44,32,116,104,97,116,32,105,115,44,32,105,102,32,115,117,98,106,101,99,116,32,115,116,97,114,116,101,100,32,119,105,116,104,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,44,32,97,110,100,32,115,111,32,116,104,101,32,121,101,115,45,112,97,116,116,101,114,110,32,105,115,32,101,120,101,99,117,116,101,100,32,97,110,100,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,115,32,114,101,113,117,105,114,101,100,46,32,79,116,104,101,114,119,105,115,101,44,32,97,115,32,110,111,45,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,44,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,110,111,116,104,105,110,103,46,32,84,104,97,116,32,105,115,44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,44,32,111,112,116,105,111,110,97,108,108,121,32,101,110,99,108,111,115,101,100,32,105,110,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<73,102,32,116,104,105,115,32,112,97,116,116,101,114,110,32,105,115,32,101,109,98,101,100,100,101,100,32,105,110,32,97,32,108,97,114,103,101,114,32,111,110,101,44,32,97,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,117,115,101,100,58>>]},{pre,[],[{code,[],[<<46,46,46,111,116,104,101,114,32,115,116,117,102,102,46,46,46,32,40,32,92,40,32,41,63,32,32,32,32,91,94,40,41,93,43,32,32,32,32,40,63,40,45,49,41,32,92,41,32,41,32,46,46,46>>]}]},{p,[],[<<84,104,105,115,32,109,97,107,101,115,32,116,104,101,32,102,114,97,103,109,101,110,116,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,108,97,114,103,101,114,32,112,97,116,116,101,114,110,46>>]},{p,[],[{em,[],[<<67,104,101,99,107,105,110,103,32,102,111,114,32,97,32,85,115,101,100,32,83,117,98,112,97,116,116,101,114,110,32,66,121,32,78,97,109,101>>]}]},{p,[],[<<80,101,114,108,32,117,115,101,115,32,116,104,101,32,115,121,110,116,97,120,32,40,63,40,60,110,97,109,101,62,41,46,46,46,41,32,111,114,32,40,63,40,39,110,97,109,101,39,41,46,46,46,41,32,116,111,32,116,101,115,116,32,102,111,114,32,97,32,117,115,101,100,32,115,117,98,112,97,116,116,101,114,110,32,98,121,32,110,97,109,101,46,32,70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,101,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,111,102,32,80,67,82,69,44,32,119,104,105,99,104,32,104,97,100,32,116,104,105,115,32,102,97,99,105,108,105,116,121,32,98,101,102,111,114,101,32,80,101,114,108,44,32,116,104,101,32,115,121,110,116,97,120,32,40,63,40,110,97,109,101,41,46,46,46,41,32,105,115,32,97,108,115,111,32,114,101,99,111,103,110,105,122,101,100,46>>]},{p,[],[<<82,101,119,114,105,116,105,110,103,32,116,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,32,116,111,32,117,115,101,32,97,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,32,103,105,118,101,115,58>>]},{pre,[],[{code,[],[<<40,63,60,79,80,69,78,62,32,92,40,32,41,63,32,32,32,32,91,94,40,41,93,43,32,32,32,32,40,63,40,60,79,80,69,78,62,41,32,92,41,32,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,110,97,109,101,32,117,115,101,100,32,105,110,32,97,32,99,111,110,100,105,116,105,111,110,32,111,102,32,116,104,105,115,32,107,105,110,100,32,105,115,32,97,32,100,117,112,108,105,99,97,116,101,44,32,116,104,101,32,116,101,115,116,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,97,108,108,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,116,104,101,32,115,97,109,101,32,110,97,109,101,44,32,97,110,100,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,110,101,32,111,102,32,116,104,101,109,32,104,97,115,32,109,97,116,99,104,101,100,46>>]},{p,[],[{em,[],[<<67,104,101,99,107,105,110,103,32,102,111,114,32,80,97,116,116,101,114,110,32,82,101,99,117,114,115,105,111,110>>]}]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,104,101,32,115,116,114,105,110,103,32,40,82,41,44,32,97,110,100,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,110,97,109,101,32,82,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,97,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,116,111,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,32,111,114,32,97,110,121,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32,73,102,32,100,105,103,105,116,115,32,111,114,32,97,32,110,97,109,101,32,112,114,101,99,101,100,101,100,32,98,121,32,97,109,112,101,114,115,97,110,100,32,102,111,108,108,111,119,32,116,104,101,32,108,101,116,116,101,114,32,82,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,63,40,82,51,41,46,46,46,41,32,111,114,32,40,63,40,82,38,110,97,109,101,41,46,46,46,41>>]}]},{p,[],[<<116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,114,101,99,117,114,115,105,111,110,32,105,115,32,105,110,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,119,104,111,115,101,32,110,117,109,98,101,114,32,111,114,32,110,97,109,101,32,105,115,32,103,105,118,101,110,46,32,84,104,105,115,32,99,111,110,100,105,116,105,111,110,32,100,111,101,115,32,110,111,116,32,99,104,101,99,107,32,116,104,101,32,101,110,116,105,114,101,32,114,101,99,117,114,115,105,111,110,32,115,116,97,99,107,46,32,73,102,32,116,104,101,32,110,97,109,101,32,117,115,101,100,32,105,110,32,97,32,99,111,110,100,105,116,105,111,110,32,111,102,32,116,104,105,115,32,107,105,110,100,32,105,115,32,97,32,100,117,112,108,105,99,97,116,101,44,32,116,104,101,32,116,101,115,116,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,97,108,108,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,116,104,101,32,115,97,109,101,32,110,97,109,101,44,32,97,110,100,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,110,101,32,111,102,32,116,104,101,109,32,105,115,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,114,101,99,117,114,115,105,111,110,46>>]},{p,[],[<<65,116,32,34,116,111,112,45,108,101,118,101,108,34,44,32,97,108,108,32,116,104,101,115,101,32,114,101,99,117,114,115,105,111,110,32,116,101,115,116,32,99,111,110,100,105,116,105,111,110,115,32,97,114,101,32,102,97,108,115,101,46,32,84,104,101,32,115,121,110,116,97,120,32,102,111,114,32,114,101,99,117,114,115,105,118,101,32,112,97,116,116,101,114,110,115,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46>>]},{p,[],[{em,[],[<<68,101,102,105,110,105,110,103,32,83,117,98,112,97,116,116,101,114,110,115,32,102,111,114,32,85,115,101,32,66,121,32,82,101,102,101,114,101,110,99,101,32,79,110,108,121>>]}]},{a,[{id,<<100,101,102,105,110,105,110,103,95,115,117,98,112,97,116,116,101,114,110,115>>}],[]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,104,101,32,115,116,114,105,110,103,32,40,68,69,70,73,78,69,41,44,32,97,110,100,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,110,97,109,101,32,68,69,70,73,78,69,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,97,108,119,97,121,115,32,102,97,108,115,101,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,114,101,32,99,97,110,32,98,101,32,111,110,108,121,32,111,110,101,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,46,32,73,116,32,105,115,32,97,108,119,97,121,115,32,115,107,105,112,112,101,100,32,105,102,32,99,111,110,116,114,111,108,32,114,101,97,99,104,101,115,32,116,104,105,115,32,112,111,105,110,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,101,32,105,100,101,97,32,111,102,32,68,69,70,73,78,69,32,105,115,32,116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,100,101,102,105,110,101,32,34,115,117,98,114,111,117,116,105,110,101,115,34,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,32,102,114,111,109,32,101,108,115,101,119,104,101,114,101,46,32,40,84,104,101,32,117,115,101,32,111,102,32,115,117,98,114,111,117,116,105,110,101,115,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46,41,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,32,112,97,116,116,101,114,110,32,116,111,32,109,97,116,99,104,32,97,110,32,73,80,118,52,32,97,100,100,114,101,115,115,44,32,115,117,99,104,32,97,115,32,34,49,57,50,46,49,54,56,46,50,51,46,50,52,53,34,44,32,99,97,110,32,98,101,32,119,114,105,116,116,101,110,32,108,105,107,101,32,116,104,105,115,32,40,105,103,110,111,114,101,32,119,104,105,116,101,115,112,97,99,101,32,97,110,100,32,108,105,110,101,32,98,114,101,97,107,115,41,58>>]},{pre,[],[{code,[],[<<40,63,40,68,69,70,73,78,69,41,32,40,63,60,98,121,116,101,62,32,50,91,48,45,52,93,92,100,32,124,32,50,53,91,48,45,53,93,32,124,32,49,92,100,92,100,32,124,32,91,49,45,57,93,63,92,100,41,32,41,32,92,98,32,40,63,38,98,121,116,101,41,32,40,92,46,40,63,38,98,121,116,101,41,41,123,51,125,32,92,98>>]}]},{p,[],[<<84,104,101,32,102,105,114,115,116,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,97,32,68,69,70,73,78,69,32,103,114,111,117,112,32,105,110,115,105,100,101,32,119,104,105,99,104,32,105,115,32,97,32,97,110,111,116,104,101,114,32,103,114,111,117,112,32,110,97,109,101,100,32,34,98,121,116,101,34,32,105,115,32,100,101,102,105,110,101,100,46,32,84,104,105,115,32,109,97,116,99,104,101,115,32,97,110,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,112,111,110,101,110,116,32,111,102,32,97,110,32,73,80,118,52,32,97,100,100,114,101,115,115,32,40,97,32,110,117,109,98,101,114,32,60,32,50,53,54,41,46,32,87,104,101,110,32,109,97,116,99,104,105,110,103,32,116,97,107,101,115,32,112,108,97,99,101,44,32,116,104,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,115,107,105,112,112,101,100,44,32,97,115,32,68,69,70,73,78,69,32,97,99,116,115,32,108,105,107,101,32,97,32,102,97,108,115,101,32,99,111,110,100,105,116,105,111,110,46,32,84,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,117,115,101,115,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,116,104,101,32,110,97,109,101,100,32,103,114,111,117,112,32,116,111,32,109,97,116,99,104,32,116,104,101,32,102,111,117,114,32,100,111,116,45,115,101,112,97,114,97,116,101,100,32,99,111,109,112,111,110,101,110,116,115,32,111,102,32,97,110,32,73,80,118,52,32,97,100,100,114,101,115,115,44,32,105,110,115,105,115,116,105,110,103,32,111,110,32,97,32,119,111,114,100,32,98,111,117,110,100,97,114,121,32,97,116,32,101,97,99,104,32,101,110,100,46>>]},{p,[],[{em,[],[<<65,115,115,101,114,116,105,111,110,32,67,111,110,100,105,116,105,111,110,115>>]}]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,110,111,116,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,97,98,111,118,101,32,102,111,114,109,97,116,115,44,32,105,116,32,109,117,115,116,32,98,101,32,97,110,32,97,115,115,101,114,116,105,111,110,46,32,84,104,105,115,32,99,97,110,32,98,101,32,97,32,112,111,115,105,116,105,118,101,32,111,114,32,110,101,103,97,116,105,118,101,32,108,111,111,107,97,104,101,97,100,32,111,114,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,99,111,110,116,97,105,110,105,110,103,32,110,111,110,45,115,105,103,110,105,102,105,99,97,110,116,32,119,104,105,116,101,115,112,97,99,101,44,32,97,110,100,32,119,105,116,104,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,111,110,32,116,104,101,32,115,101,99,111,110,100,32,108,105,110,101,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<40,63,40,63,61,91,94,97,45,122,93,42,91,97,45,122,93,41,10,92,100,123,50,125,45,91,97,45,122,93,123,51,125,45,92,100,123,50,125,32,32,124,32,32,92,100,123,50,125,45,92,100,123,50,125,45,92,100,123,50,125,32,41>>]}]},{p,[],[<<84,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,108,111,111,107,97,104,101,97,100,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,109,97,116,99,104,101,115,32,97,110,32,111,112,116,105,111,110,97,108,32,115,101,113,117,101,110,99,101,32,111,102,32,110,111,110,45,108,101,116,116,101,114,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,108,101,116,116,101,114,46,32,84,104,97,116,32,105,115,44,32,105,116,32,116,101,115,116,115,32,102,111,114,32,116,104,101,32,112,114,101,115,101,110,99,101,32,111,102,32,97,116,32,108,101,97,115,116,32,111,110,101,32,108,101,116,116,101,114,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,73,102,32,97,32,108,101,116,116,101,114,32,105,115,32,102,111,117,110,100,44,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,105,114,115,116,32,97,108,116,101,114,110,97,116,105,118,101,44,32,111,116,104,101,114,119,105,115,101,32,105,116,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,115,101,99,111,110,100,46,32,84,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,115,116,114,105,110,103,115,32,105,110,32,111,110,101,32,111,102,32,116,104,101,32,116,119,111,32,102,111,114,109,115,32,100,100,45,97,97,97,45,100,100,32,111,114,32,100,100,45,100,100,45,100,100,44,32,119,104,101,114,101,32,97,97,97,32,97,114,101,32,108,101,116,116,101,114,115,32,97,110,100,32,100,100,32,97,114,101,32,100,105,103,105,116,115,46>>]},{a,[{id,<<115,101,99,116,49,57>>}],[]},{h2,[],[<<67,111,109,109,101,110,116,115>>]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,116,119,111,32,119,97,121,115,32,116,111,32,105,110,99,108,117,100,101,32,99,111,109,109,101,110,116,115,32,105,110,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,112,114,111,99,101,115,115,101,100,32,98,121,32,80,67,82,69,46,32,73,110,32,98,111,116,104,32,99,97,115,101,115,44,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,99,111,109,109,101,110,116,32,109,117,115,116,32,110,111,116,32,98,101,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,111,114,32,105,110,32,116,104,101,32,109,105,100,100,108,101,32,111,102,32,97,110,121,32,111,116,104,101,114,32,115,101,113,117,101,110,99,101,32,111,102,32,114,101,108,97,116,101,100,32,99,104,97,114,97,99,116,101,114,115,32,115,117,99,104,32,97,115,32,40,63,58,32,111,114,32,97,32,115,117,98,112,97,116,116,101,114,110,32,110,97,109,101,32,111,114,32,110,117,109,98,101,114,46,32,84,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,109,97,107,101,32,117,112,32,97,32,99,111,109,109,101,110,116,32,112,108,97,121,32,110,111,32,112,97,114,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,105,110,103,46>>]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,32,40,63,35,32,109,97,114,107,115,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,99,111,109,109,101,110,116,32,116,104,97,116,32,99,111,110,116,105,110,117,101,115,32,117,112,32,116,111,32,116,104,101,32,110,101,120,116,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,78,101,115,116,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,46,32,73,102,32,111,112,116,105,111,110,32,80,67,82,69,95,69,88,84,69,78,68,69,68,32,105,115,32,115,101,116,44,32,97,110,32,117,110,101,115,99,97,112,101,100,32,35,32,99,104,97,114,97,99,116,101,114,32,97,108,115,111,32,105,110,116,114,111,100,117,99,101,115,32,97,32,99,111,109,109,101,110,116,44,32,119,104,105,99,104,32,105,110,32,116,104,105,115,32,99,97,115,101,32,99,111,110,116,105,110,117,101,115,32,116,111,32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,116,104,101,32,110,101,120,116,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,32,111,114,32,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,87,104,105,99,104,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,110,101,119,108,105,110,101,115,32,105,115,32,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,32,111,112,116,105,111,110,115,32,112,97,115,115,101,100,32,116,111,32,97,32,99,111,109,112,105,108,105,110,103,32,102,117,110,99,116,105,111,110,32,111,114,32,98,121,32,97,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,101,119,108,105,110,101,95,99,111,110,118,101,110,116,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,101,119,108,105,110,101,32,67,111,110,118,101,110,116,105,111,110,115>>]},<<32,101,97,114,108,105,101,114,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,105,115,32,116,121,112,101,32,111,102,32,99,111,109,109,101,110,116,32,105,115,32,97,32,108,105,116,101,114,97,108,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,59,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,116,32,104,97,112,112,101,110,32,116,111,32,114,101,112,114,101,115,101,110,116,32,97,32,110,101,119,108,105,110,101,32,100,111,32,110,111,116,32,99,111,117,110,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,119,104,101,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,105,115,32,115,101,116,44,32,97,110,100,32,116,104,101,32,100,101,102,97,117,108,116,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,32,105,115,32,105,110,32,102,111,114,99,101,58>>]},{pre,[],[{code,[],[<<97,98,99,32,35,99,111,109,109,101,110,116,32,92,110,32,115,116,105,108,108,32,99,111,109,109,101,110,116>>]}]},{p,[],[<<79,110,32,101,110,99,111,117,110,116,101,114,105,110,103,32,99,104,97,114,97,99,116,101,114,32,35,44,32>>,{code,[],[<<112,99,114,101,95,99,111,109,112,105,108,101,40,41>>]},<<32,115,107,105,112,115,32,97,108,111,110,103,44,32,108,111,111,107,105,110,103,32,102,111,114,32,97,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,101,32,115,101,113,117,101,110,99,101,32,92,110,32,105,115,32,115,116,105,108,108,32,108,105,116,101,114,97,108,32,97,116,32,116,104,105,115,32,115,116,97,103,101,44,32,115,111,32,105,116,32,100,111,101,115,32,110,111,116,32,116,101,114,109,105,110,97,116,101,32,116,104,101,32,99,111,109,109,101,110,116,46,32,79,110,108,121,32,97,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,99,111,100,101,32,118,97,108,117,101,32,48,120,48,97,32,40,116,104,101,32,100,101,102,97,117,108,116,32,110,101,119,108,105,110,101,41,32,100,111,101,115,32,115,111,46>>]},{a,[{id,<<115,101,99,116,50,48>>}],[]},{h2,[],[<<82,101,99,117,114,115,105,118,101,32,80,97,116,116,101,114,110,115>>]},{p,[],[<<67,111,110,115,105,100,101,114,32,116,104,101,32,112,114,111,98,108,101,109,32,111,102,32,109,97,116,99,104,105,110,103,32,97,32,115,116,114,105,110,103,32,105,110,32,112,97,114,101,110,116,104,101,115,101,115,44,32,97,108,108,111,119,105,110,103,32,102,111,114,32,117,110,108,105,109,105,116,101,100,32,110,101,115,116,101,100,32,112,97,114,101,110,116,104,101,115,101,115,46,32,87,105,116,104,111,117,116,32,116,104,101,32,117,115,101,32,111,102,32,114,101,99,117,114,115,105,111,110,44,32,116,104,101,32,98,101,115,116,32,116,104,97,116,32,99,97,110,32,98,101,32,100,111,110,101,32,105,115,32,116,111,32,117,115,101,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,109,97,116,99,104,101,115,32,117,112,32,116,111,32,115,111,109,101,32,102,105,120,101,100,32,100,101,112,116,104,32,111,102,32,110,101,115,116,105,110,103,46,32,73,116,32,105,115,32,110,111,116,32,112,111,115,115,105,98,108,101,32,116,111,32,104,97,110,100,108,101,32,97,110,32,97,114,98,105,116,114,97,114,121,32,110,101,115,116,105,110,103,32,100,101,112,116,104,46>>]},{p,[],[<<70,111,114,32,115,111,109,101,32,116,105,109,101,44,32,80,101,114,108,32,104,97,115,32,112,114,111,118,105,100,101,100,32,97,32,102,97,99,105,108,105,116,121,32,116,104,97,116,32,97,108,108,111,119,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,116,111,32,114,101,99,117,114,115,101,32,40,97,109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,41,46,32,73,116,32,100,111,101,115,32,116,104,105,115,32,98,121,32,105,110,116,101,114,112,111,108,97,116,105,110,103,32,80,101,114,108,32,99,111,100,101,32,105,110,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,97,116,32,114,117,110,116,105,109,101,44,32,97,110,100,32,116,104,101,32,99,111,100,101,32,99,97,110,32,114,101,102,101,114,32,116,111,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,105,116,115,101,108,102,46,32,65,32,80,101,114,108,32,112,97,116,116,101,114,110,32,117,115,105,110,103,32,99,111,100,101,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,116,111,32,115,111,108,118,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,112,114,111,98,108,101,109,32,99,97,110,32,98,101,32,99,114,101,97,116,101,100,32,108,105,107,101,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<36,114,101,32,61,32,113,114,123,92,40,32,40,63,58,32,40,63,62,91,94,40,41,93,43,41,32,124,32,40,63,112,123,36,114,101,125,41,32,41,42,32,92,41,125,120,59>>]}]},{p,[],[<<73,116,101,109,32,40,63,112,123,46,46,46,125,41,32,105,110,116,101,114,112,111,108,97,116,101,115,32,80,101,114,108,32,99,111,100,101,32,97,116,32,114,117,110,116,105,109,101,44,32,97,110,100,32,105,110,32,116,104,105,115,32,99,97,115,101,32,114,101,102,101,114,115,32,114,101,99,117,114,115,105,118,101,108,121,32,116,111,32,116,104,101,32,112,97,116,116,101,114,110,32,105,110,32,119,104,105,99,104,32,105,116,32,97,112,112,101,97,114,115,46>>]},{p,[],[<<79,98,118,105,111,117,115,108,121,44,32,80,67,82,69,32,99,97,110,110,111,116,32,115,117,112,112,111,114,116,32,116,104,101,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,111,102,32,80,101,114,108,32,99,111,100,101,46,32,73,110,115,116,101,97,100,44,32,105,116,32,115,117,112,112,111,114,116,115,32,115,112,101,99,105,97,108,32,115,121,110,116,97,120,32,102,111,114,32,114,101,99,117,114,115,105,111,110,32,111,102,32,116,104,101,32,101,110,116,105,114,101,32,112,97,116,116,101,114,110,44,32,97,110,100,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,115,117,98,112,97,116,116,101,114,110,32,114,101,99,117,114,115,105,111,110,46,32,65,102,116,101,114,32,105,116,115,32,105,110,116,114,111,100,117,99,116,105,111,110,32,105,110,32,80,67,82,69,32,97,110,100,32,80,121,116,104,111,110,44,32,116,104,105,115,32,107,105,110,100,32,111,102,32,114,101,99,117,114,115,105,111,110,32,119,97,115,32,108,97,116,101,114,32,105,110,116,114,111,100,117,99,101,100,32,105,110,116,111,32,80,101,114,108,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,48,46>>]},{p,[],[<<65,32,115,112,101,99,105,97,108,32,105,116,101,109,32,116,104,97,116,32,99,111,110,115,105,115,116,115,32,111,102,32,40,63,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,117,109,98,101,114,32,62,32,48,32,97,110,100,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,115,32,97,32,114,101,99,117,114,115,105,118,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,111,102,32,116,104,101,32,103,105,118,101,110,32,110,117,109,98,101,114,44,32,105,102,32,105,116,32,111,99,99,117,114,115,32,105,110,115,105,100,101,32,116,104,97,116,32,115,117,98,112,97,116,116,101,114,110,46,32,40,73,102,32,110,111,116,44,32,105,116,32,105,115,32,97,32,110,111,110,45,114,101,99,117,114,115,105,118,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,44,32,119,104,105,99,104,32,105,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,46,41,32,84,104,101,32,115,112,101,99,105,97,108,32,105,116,101,109,32,40,63,82,41,32,111,114,32,40,63,48,41,32,105,115,32,97,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,111,102,32,116,104,101,32,101,110,116,105,114,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<84,104,105,115,32,80,67,82,69,32,112,97,116,116,101,114,110,32,115,111,108,118,101,115,32,116,104,101,32,110,101,115,116,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,112,114,111,98,108,101,109,32,40,97,115,115,117,109,101,32,116,104,97,116,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,105,115,32,115,101,116,32,115,111,32,116,104,97,116,32,119,104,105,116,101,115,112,97,99,101,32,105,115,32,105,103,110,111,114,101,100,41,58>>]},{pre,[],[{code,[],[<<92,40,32,40,32,91,94,40,41,93,43,43,32,124,32,40,63,82,41,32,41,42,32,92,41>>]}]},{p,[],[<<70,105,114,115,116,32,105,116,32,109,97,116,99,104,101,115,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,84,104,101,110,32,105,116,32,109,97,116,99,104,101,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,115,117,98,115,116,114,105,110,103,115,44,32,119,104,105,99,104,32,99,97,110,32,101,105,116,104,101,114,32,98,101,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,32,111,114,32,97,32,114,101,99,117,114,115,105,118,101,32,109,97,116,99,104,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,116,115,101,108,102,32,40,116,104,97,116,32,105,115,44,32,97,32,99,111,114,114,101,99,116,108,121,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,115,116,114,105,110,103,41,46,32,70,105,110,97,108,108,121,32,116,104,101,114,101,32,105,115,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,78,111,116,105,99,101,32,116,104,101,32,117,115,101,32,111,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,116,111,32,97,118,111,105,100,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,115,101,113,117,101,110,99,101,115,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<73,102,32,116,104,105,115,32,119,97,115,32,112,97,114,116,32,111,102,32,97,32,108,97,114,103,101,114,32,112,97,116,116,101,114,110,44,32,121,111,117,32,119,111,117,108,100,32,110,111,116,32,119,97,110,116,32,116,111,32,114,101,99,117,114,115,101,32,116,104,101,32,101,110,116,105,114,101,32,112,97,116,116,101,114,110,44,32,115,111,32,105,110,115,116,101,97,100,32,121,111,117,32,99,97,110,32,117,115,101,58>>]},{pre,[],[{code,[],[<<40,32,92,40,32,40,32,91,94,40,41,93,43,43,32,124,32,40,63,49,41,32,41,42,32,92,41,32,41>>]}]},{p,[],[<<84,104,101,32,112,97,116,116,101,114,110,32,105,115,32,104,101,114,101,32,119,105,116,104,105,110,32,112,97,114,101,110,116,104,101,115,101,115,32,115,111,32,116,104,97,116,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,114,101,102,101,114,115,32,116,111,32,116,104,101,109,32,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<73,110,32,97,32,108,97,114,103,101,114,32,112,97,116,116,101,114,110,44,32,107,101,101,112,105,110,103,32,116,114,97,99,107,32,111,102,32,112,97,114,101,110,116,104,101,115,105,115,32,110,117,109,98,101,114,115,32,99,97,110,32,98,101,32,116,114,105,99,107,121,46,32,84,104,105,115,32,105,115,32,109,97,100,101,32,101,97,115,105,101,114,32,98,121,32,116,104,101,32,117,115,101,32,111,102,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,115,46,32,73,110,115,116,101,97,100,32,111,102,32,40,63,49,41,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,97,98,111,118,101,44,32,121,111,117,32,99,97,110,32,119,114,105,116,101,32,40,63,45,50,41,32,116,111,32,114,101,102,101,114,32,116,111,32,116,104,101,32,115,101,99,111,110,100,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,112,114,101,99,101,100,105,110,103,32,116,104,101,32,114,101,99,117,114,115,105,111,110,46,32,84,104,97,116,32,105,115,44,32,97,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,32,99,111,117,110,116,115,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,108,101,102,116,119,97,114,100,115,32,102,114,111,109,32,116,104,101,32,112,111,105,110,116,32,97,116,32,119,104,105,99,104,32,105,116,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,46>>]},{p,[],[<<73,116,32,105,115,32,97,108,115,111,32,112,111,115,115,105,98,108,101,32,116,111,32,114,101,102,101,114,32,116,111,32,108,97,116,101,114,32,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,101,115,44,32,98,121,32,119,114,105,116,105,110,103,32,114,101,102,101,114,101,110,99,101,115,32,115,117,99,104,32,97,115,32,40,63,43,50,41,46,32,72,111,119,101,118,101,114,44,32,116,104,101,115,101,32,99,97,110,110,111,116,32,98,101,32,114,101,99,117,114,115,105,118,101,44,32,97,115,32,116,104,101,32,114,101,102,101,114,101,110,99,101,32,105,115,32,110,111,116,32,105,110,115,105,100,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,114,101,102,101,114,101,110,99,101,100,46,32,84,104,101,121,32,97,114,101,32,97,108,119,97,121,115,32,110,111,110,45,114,101,99,117,114,115,105,118,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,115,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,46>>]},{p,[],[<<65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,97,112,112,114,111,97,99,104,32,105,115,32,116,111,32,117,115,101,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,115,116,101,97,100,46,32,84,104,101,32,80,101,114,108,32,115,121,110,116,97,120,32,102,111,114,32,116,104,105,115,32,105,115,32,40,63,38,110,97,109,101,41,46,32,84,104,101,32,101,97,114,108,105,101,114,32,80,67,82,69,32,115,121,110,116,97,120,32,40,63,80,62,110,97,109,101,41,32,105,115,32,97,108,115,111,32,115,117,112,112,111,114,116,101,100,46,32,87,101,32,99,97,110,32,114,101,119,114,105,116,101,32,116,104,101,32,97,98,111,118,101,32,101,120,97,109,112,108,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{pre,[],[{code,[],[<<40,63,60,112,110,62,32,92,40,32,40,32,91,94,40,41,93,43,43,32,124,32,40,63,38,112,110,41,32,41,42,32,92,41,32,41>>]}]},{p,[],[<<73,102,32,116,104,101,114,101,32,105,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,97,109,101,44,32,116,104,101,32,101,97,114,108,105,101,115,116,32,111,110,101,32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,105,115,32,112,97,114,116,105,99,117,108,97,114,32,101,120,97,109,112,108,101,32,112,97,116,116,101,114,110,32,116,104,97,116,32,119,101,32,104,97,118,101,32,115,116,117,100,105,101,100,32,99,111,110,116,97,105,110,115,32,110,101,115,116,101,100,32,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,115,44,32,97,110,100,32,115,111,32,116,104,101,32,117,115,101,32,111,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,102,111,114,32,109,97,116,99,104,105,110,103,32,115,116,114,105,110,103,115,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,32,105,115,32,105,109,112,111,114,116,97,110,116,32,119,104,101,110,32,97,112,112,108,121,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,116,111,32,115,116,114,105,110,103,115,32,116,104,97,116,32,100,111,32,110,111,116,32,109,97,116,99,104,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32,116,104,105,115,32,112,97,116,116,101,114,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111>>]},{pre,[],[{code,[],[<<40,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,40,41>>]}]},{p,[],[<<105,116,32,103,105,118,101,115,32,34,110,111,32,109,97,116,99,104,34,32,113,117,105,99,107,108,121,46,32,72,111,119,101,118,101,114,44,32,105,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,110,111,116,32,117,115,101,100,44,32,116,104,101,32,109,97,116,99,104,32,114,117,110,115,32,102,111,114,32,97,32,108,111,110,103,32,116,105,109,101,44,32,97,115,32,116,104,101,114,101,32,97,114,101,32,115,111,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,32,116,104,101,32,43,32,97,110,100,32,42,32,114,101,112,101,97,116,115,32,99,97,110,32,99,97,114,118,101,32,117,112,32,116,104,101,32,115,117,98,106,101,99,116,44,32,97,110,100,32,97,108,108,32,109,117,115,116,32,98,101,32,116,101,115,116,101,100,32,98,101,102,111,114,101,32,102,97,105,108,117,114,101,32,99,97,110,32,98,101,32,114,101,112,111,114,116,101,100,46>>]},{p,[],[<<65,116,32,116,104,101,32,101,110,100,32,111,102,32,97,32,109,97,116,99,104,44,32,116,104,101,32,118,97,108,117,101,115,32,111,102,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,116,104,111,115,101,32,102,114,111,109,32,116,104,101,32,111,117,116,101,114,109,111,115,116,32,108,101,118,101,108,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,97,98,111,118,101,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116>>]},{pre,[],[{code,[],[<<40,97,98,40,99,100,41,101,102,41>>]}]},{p,[],[<<116,104,101,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,105,110,110,101,114,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,40,110,117,109,98,101,114,101,100,32,50,41,32,105,115,32,34,101,102,34,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,108,97,115,116,32,118,97,108,117,101,32,116,97,107,101,110,32,111,110,32,97,116,32,116,104,101,32,116,111,112,45,108,101,118,101,108,46,32,73,102,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,109,97,116,99,104,101,100,32,97,116,32,116,104,101,32,116,111,112,32,108,101,118,101,108,44,32,105,116,115,32,102,105,110,97,108,32,99,97,112,116,117,114,101,100,32,118,97,108,117,101,32,105,115,32,117,110,115,101,116,44,32,101,118,101,110,32,105,102,32,105,116,32,119,97,115,32,40,116,101,109,112,111,114,97,114,105,108,121,41,32,115,101,116,32,97,116,32,97,32,100,101,101,112,101,114,32,108,101,118,101,108,32,100,117,114,105,110,103,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<68,111,32,110,111,116,32,99,111,110,102,117,115,101,32,105,116,101,109,32,40,63,82,41,32,119,105,116,104,32,99,111,110,100,105,116,105,111,110,32,40,82,41,44,32,119,104,105,99,104,32,116,101,115,116,115,32,102,111,114,32,114,101,99,117,114,115,105,111,110,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,116,101,120,116,32,105,110,32,97,110,103,108,101,32,98,114,97,99,107,101,116,115,44,32,97,108,108,111,119,105,110,103,32,102,111,114,32,97,114,98,105,116,114,97,114,121,32,110,101,115,116,105,110,103,46,32,79,110,108,121,32,100,105,103,105,116,115,32,97,114,101,32,97,108,108,111,119,101,100,32,105,110,32,110,101,115,116,101,100,32,98,114,97,99,107,101,116,115,32,40,116,104,97,116,32,105,115,44,32,119,104,101,110,32,114,101,99,117,114,115,105,110,103,41,44,32,119,104,105,108,101,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,97,116,32,116,104,101,32,111,117,116,101,114,32,108,101,118,101,108,46>>]},{pre,[],[{code,[],[<<60,32,40,63,58,32,40,63,40,82,41,32,92,100,43,43,32,32,124,32,91,94,60,62,93,42,43,41,32,124,32,40,63,82,41,41,32,42,32,62>>]}]},{p,[],[<<72,101,114,101,32,40,63,40,82,41,32,105,115,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,44,32,119,105,116,104,32,116,119,111,32,100,105,102,102,101,114,101,110,116,32,97,108,116,101,114,110,97,116,105,118,101,115,32,102,111,114,32,116,104,101,32,114,101,99,117,114,115,105,118,101,32,97,110,100,32,110,111,110,45,114,101,99,117,114,115,105,118,101,32,99,97,115,101,115,46,32,73,116,101,109,32,40,63,82,41,32,105,115,32,116,104,101,32,97,99,116,117,97,108,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,46>>]},{p,[],[{em,[],[<<68,105,102,102,101,114,101,110,99,101,115,32,105,110,32,82,101,99,117,114,115,105,111,110,32,80,114,111,99,101,115,115,105,110,103,32,98,101,116,119,101,101,110,32,80,67,82,69,32,97,110,100,32,80,101,114,108>>]}]},{p,[],[<<82,101,99,117,114,115,105,111,110,32,112,114,111,99,101,115,115,105,110,103,32,105,110,32,80,67,82,69,32,100,105,102,102,101,114,115,32,102,114,111,109,32,80,101,114,108,32,105,110,32,116,119,111,32,105,109,112,111,114,116,97,110,116,32,119,97,121,115,46,32,73,110,32,80,67,82,69,32,40,108,105,107,101,32,80,121,116,104,111,110,44,32,98,117,116,32,117,110,108,105,107,101,32,80,101,114,108,41,44,32,97,32,114,101,99,117,114,115,105,118,101,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,32,105,115,32,97,108,119,97,121,115,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,84,104,97,116,32,105,115,44,32,111,110,99,101,32,105,116,32,104,97,115,32,109,97,116,99,104,101,100,32,115,111,109,101,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,105,116,32,105,115,32,110,101,118,101,114,32,114,101,45,101,110,116,101,114,101,100,44,32,101,118,101,110,32,105,102,32,105,116,32,99,111,110,116,97,105,110,115,32,117,110,116,114,105,101,100,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,110,100,32,116,104,101,114,101,32,105,115,32,97,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,46,32,84,104,105,115,32,99,97,110,32,98,101,32,105,108,108,117,115,116,114,97,116,101,100,32,98,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,109,101,97,110,115,32,116,111,32,109,97,116,99,104,32,97,32,112,97,108,105,110,100,114,111,109,105,99,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,97,110,32,111,100,100,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,34,97,34,44,32,34,97,98,97,34,44,32,34,97,98,99,98,97,34,44,32,34,97,98,99,100,99,98,97,34,41,58>>]},{pre,[],[{code,[],[<<94,40,46,124,40,46,41,40,63,49,41,92,50,41,36>>]}]},{p,[],[<<84,104,101,32,105,100,101,97,32,105,115,32,116,104,97,116,32,105,116,32,101,105,116,104,101,114,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,116,119,111,32,105,100,101,110,116,105,99,97,108,32,99,104,97,114,97,99,116,101,114,115,32,115,117,114,114,111,117,110,100,105,110,103,32,97,32,115,117,98,112,97,108,105,110,100,114,111,109,101,46,32,73,110,32,80,101,114,108,44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,119,111,114,107,115,59,32,105,110,32,80,67,82,69,32,105,116,32,100,111,101,115,32,110,111,116,32,119,111,114,107,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,34,97,98,99,98,97,34,46>>]},{p,[],[<<65,116,32,116,104,101,32,116,111,112,32,108,101,118,101,108,44,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,105,115,32,109,97,116,99,104,101,100,44,32,98,117,116,32,97,115,32,105,116,32,105,115,32,110,111,116,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,116,104,101,32,102,105,114,115,116,32,97,108,116,101,114,110,97,116,105,118,101,32,102,97,105,108,115,44,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,116,97,107,101,110,44,32,97,110,100,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,107,105,99,107,115,32,105,110,46,32,84,104,101,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,116,111,32,115,117,98,112,97,116,116,101,114,110,32,49,32,115,117,99,99,101,115,115,102,117,108,108,121,32,109,97,116,99,104,101,115,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40,34,98,34,41,46,32,40,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,97,110,100,32,101,110,100,32,111,102,32,108,105,110,101,32,116,101,115,116,115,32,97,114,101,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,99,117,114,115,105,111,110,46,41>>]},{p,[],[<<66,97,99,107,32,97,116,32,116,104,101,32,116,111,112,32,108,101,118,101,108,44,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40,34,99,34,41,32,105,115,32,99,111,109,112,97,114,101,100,32,119,105,116,104,32,119,104,97,116,32,115,117,98,112,97,116,116,101,114,110,32,50,32,109,97,116,99,104,101,100,44,32,119,104,105,99,104,32,119,97,115,32,34,97,34,46,32,84,104,105,115,32,102,97,105,108,115,46,32,65,115,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,44,32,116,104,101,114,101,32,97,114,101,32,110,111,119,32,110,111,32,98,97,99,107,116,114,97,99,107,105,110,103,32,112,111,105,110,116,115,44,32,97,110,100,32,115,111,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,102,97,105,108,115,46,32,40,80,101,114,108,32,99,97,110,32,110,111,119,32,114,101,45,101,110,116,101,114,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,97,110,100,32,116,114,121,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,46,41,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,119,114,105,116,116,101,110,32,119,105,116,104,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,105,110,32,116,104,101,32,111,116,104,101,114,32,111,114,100,101,114,44,32,116,104,105,110,103,115,32,97,114,101,32,100,105,102,102,101,114,101,110,116,58>>]},{pre,[],[{code,[],[<<94,40,40,46,41,40,63,49,41,92,50,124,46,41,36>>]}]},{p,[],[<<84,104,105,115,32,116,105,109,101,44,32,116,104,101,32,114,101,99,117,114,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,116,114,105,101,100,32,102,105,114,115,116,44,32,97,110,100,32,99,111,110,116,105,110,117,101,115,32,116,111,32,114,101,99,117,114,115,101,32,117,110,116,105,108,32,105,116,32,114,117,110,115,32,111,117,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,44,32,97,116,32,119,104,105,99,104,32,112,111,105,110,116,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,102,97,105,108,115,46,32,66,117,116,32,116,104,105,115,32,116,105,109,101,32,119,101,32,104,97,118,101,32,97,110,111,116,104,101,114,32,97,108,116,101,114,110,97,116,105,118,101,32,116,111,32,116,114,121,32,97,116,32,116,104,101,32,104,105,103,104,101,114,32,108,101,118,101,108,46,32,84,104,97,116,32,105,115,32,116,104,101,32,115,105,103,110,105,102,105,99,97,110,116,32,100,105,102,102,101,114,101,110,99,101,58,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,97,115,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,97,116,32,97,32,100,101,101,112,101,114,32,114,101,99,117,114,115,105,111,110,32,108,101,118,101,108,44,32,119,104,105,99,104,32,80,67,82,69,32,99,97,110,110,111,116,32,117,115,101,46>>]},{p,[],[<<84,111,32,99,104,97,110,103,101,32,116,104,101,32,112,97,116,116,101,114,110,32,115,111,32,116,104,97,116,32,105,116,32,109,97,116,99,104,101,115,32,97,108,108,32,112,97,108,105,110,100,114,111,109,105,99,32,115,116,114,105,110,103,115,44,32,110,111,116,32,111,110,108,121,32,116,104,111,115,101,32,119,105,116,104,32,97,110,32,111,100,100,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,44,32,105,116,32,105,115,32,116,101,109,112,116,105,110,103,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,112,97,116,116,101,114,110,32,116,111,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<94,40,40,46,41,40,63,49,41,92,50,124,46,63,41,36>>]}]},{p,[],[<<65,103,97,105,110,44,32,116,104,105,115,32,119,111,114,107,115,32,105,110,32,80,101,114,108,44,32,98,117,116,32,110,111,116,32,105,110,32,80,67,82,69,44,32,97,110,100,32,102,111,114,32,116,104,101,32,115,97,109,101,32,114,101,97,115,111,110,46,32,87,104,101,110,32,97,32,100,101,101,112,101,114,32,114,101,99,117,114,115,105,111,110,32,104,97,115,32,109,97,116,99,104,101,100,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,44,32,105,116,32,99,97,110,110,111,116,32,98,101,32,101,110,116,101,114,101,100,32,97,103,97,105,110,32,116,111,32,109,97,116,99,104,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,46,32,84,104,101,32,115,111,108,117,116,105,111,110,32,105,115,32,116,111,32,115,101,112,97,114,97,116,101,32,116,104,101,32,116,119,111,32,99,97,115,101,115,44,32,97,110,100,32,119,114,105,116,101,32,111,117,116,32,116,104,101,32,111,100,100,32,97,110,100,32,101,118,101,110,32,99,97,115,101,115,32,97,115,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,116,32,116,104,101,32,104,105,103,104,101,114,32,108,101,118,101,108,58>>]},{pre,[],[{code,[],[<<94,40,63,58,40,40,46,41,40,63,49,41,92,50,124,41,124,40,40,46,41,40,63,51,41,92,52,124,46,41,41>>]}]},{p,[],[<<73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,116,121,112,105,99,97,108,32,112,97,108,105,110,100,114,111,109,105,99,32,112,104,114,97,115,101,115,44,32,116,104,101,32,112,97,116,116,101,114,110,32,109,117,115,116,32,105,103,110,111,114,101,32,97,108,108,32,110,111,110,45,119,111,114,100,32,99,104,97,114,97,99,116,101,114,115,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,100,111,110,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{pre,[],[{code,[],[<<94,92,87,42,43,40,63,58,40,40,46,41,92,87,42,43,40,63,49,41,92,87,42,43,92,50,124,41,124,40,40,46,41,92,87,42,43,40,63,51,41,92,87,42,43,92,52,124,92,87,42,43,46,92,87,42,43,41,41,92,87,42,43,36>>]}]},{p,[],[<<73,102,32,114,117,110,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,112,104,114,97,115,101,115,32,115,117,99,104,32,97,115,32,34,65,32,109,97,110,44,32,97,32,112,108,97,110,44,32,97,32,99,97,110,97,108,58,32,80,97,110,97,109,97,33,34,32,97,110,100,32,105,116,32,119,111,114,107,115,32,119,101,108,108,32,105,110,32,98,111,116,104,32,80,67,82,69,32,97,110,100,32,80,101,114,108,46,32,78,111,116,105,99,101,32,116,104,101,32,117,115,101,32,111,102,32,116,104,101,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,42,43,32,116,111,32,97,118,111,105,100,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,115,101,113,117,101,110,99,101,115,32,111,102,32,110,111,110,45,119,111,114,100,32,99,104,97,114,97,99,116,101,114,115,46,32,87,105,116,104,111,117,116,32,116,104,105,115,44,32,80,67,82,69,32,116,97,107,101,115,32,109,117,99,104,32,108,111,110,103,101,114,32,40,49,48,32,116,105,109,101,115,32,111,114,32,109,111,114,101,41,32,116,111,32,109,97,116,99,104,32,116,121,112,105,99,97,108,32,112,104,114,97,115,101,115,44,32,97,110,100,32,80,101,114,108,32,116,97,107,101,115,32,115,111,32,108,111,110,103,32,116,104,97,116,32,121,111,117,32,116,104,105,110,107,32,105,116,32,104,97,115,32,103,111,110,101,32,105,110,116,111,32,97,32,108,111,111,112,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,112,97,108,105,110,100,114,111,109,101,45,109,97,116,99,104,105,110,103,32,112,97,116,116,101,114,110,115,32,97,98,111,118,101,32,119,111,114,107,32,111,110,108,121,32,105,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105,116,104,32,97,32,112,97,108,105,110,100,114,111,109,101,32,116,104,97,116,32,105,115,32,115,104,111,114,116,101,114,32,116,104,97,110,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,108,116,104,111,117,103,104,32,34,97,98,99,98,97,34,32,105,115,32,99,111,114,114,101,99,116,108,121,32,109,97,116,99,104,101,100,44,32,105,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,97,98,97,98,97,34,44,32,80,67,82,69,32,102,105,110,100,115,32,112,97,108,105,110,100,114,111,109,101,32,34,97,98,97,34,32,97,116,32,116,104,101,32,115,116,97,114,116,44,32,97,110,100,32,116,104,101,110,32,102,97,105,108,115,32,97,116,32,116,111,112,32,108,101,118,101,108,44,32,97,115,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,100,111,101,115,32,110,111,116,32,102,111,108,108,111,119,46,32,79,110,99,101,32,97,103,97,105,110,44,32,105,116,32,99,97,110,110,111,116,32,106,117,109,112,32,98,97,99,107,32,105,110,116,111,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,116,111,32,116,114,121,32,111,116,104,101,114,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,115,111,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,102,97,105,108,115,46>>]}]},{p,[],[<<84,104,101,32,115,101,99,111,110,100,32,119,97,121,32,105,110,32,119,104,105,99,104,32,80,67,82,69,32,97,110,100,32,80,101,114,108,32,100,105,102,102,101,114,32,105,110,32,116,104,101,105,114,32,114,101,99,117,114,115,105,111,110,32,112,114,111,99,101,115,115,105,110,103,32,105,115,32,105,110,32,116,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,99,97,112,116,117,114,101,100,32,118,97,108,117,101,115,46,32,73,110,32,80,101,114,108,44,32,119,104,101,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,99,97,108,108,101,100,32,114,101,99,117,114,115,105,118,101,108,121,32,111,114,32,97,115,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,115,101,101,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41,44,32,105,116,32,104,97,115,32,110,111,32,97,99,99,101,115,115,32,116,111,32,97,110,121,32,118,97,108,117,101,115,32,116,104,97,116,32,119,101,114,101,32,99,97,112,116,117,114,101,100,32,111,117,116,115,105,100,101,32,116,104,101,32,114,101,99,117,114,115,105,111,110,46,32,73,110,32,80,67,82,69,32,116,104,101,115,101,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<94,40,46,41,40,92,49,124,97,40,63,50,41,41>>]}]},{p,[],[<<73,110,32,80,67,82,69,44,32,105,116,32,109,97,116,99,104,101,115,32,34,98,97,98,34,46,32,84,104,101,32,102,105,114,115,116,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,109,97,116,99,104,32,34,98,34,44,32,116,104,101,110,32,105,110,32,116,104,101,32,115,101,99,111,110,100,32,103,114,111,117,112,44,32,119,104,101,110,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,92,49,32,102,97,105,108,115,32,116,111,32,109,97,116,99,104,32,34,98,34,44,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,32,109,97,116,99,104,101,115,32,34,97,34,44,32,97,110,100,32,116,104,101,110,32,114,101,99,117,114,115,101,115,46,32,73,110,32,116,104,101,32,114,101,99,117,114,115,105,111,110,44,32,92,49,32,100,111,101,115,32,110,111,119,32,109,97,116,99,104,32,34,98,34,32,97,110,100,32,115,111,32,116,104,101,32,119,104,111,108,101,32,109,97,116,99,104,32,115,117,99,99,101,101,100,115,46,32,73,110,32,80,101,114,108,44,32,116,104,101,32,112,97,116,116,101,114,110,32,102,97,105,108,115,32,116,111,32,109,97,116,99,104,32,98,101,99,97,117,115,101,32,105,110,115,105,100,101,32,116,104,101,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,92,49,32,99,97,110,110,111,116,32,97,99,99,101,115,115,32,116,104,101,32,101,120,116,101,114,110,97,108,108,121,32,115,101,116,32,118,97,108,117,101,46>>]},{a,[{id,<<115,101,99,116,50,49>>}],[]},{h2,[],[<<83,117,98,112,97,116,116,101,114,110,115,32,97,115,32,83,117,98,114,111,117,116,105,110,101,115>>]},{p,[],[<<73,102,32,116,104,101,32,115,121,110,116,97,120,32,102,111,114,32,97,32,114,101,99,117,114,115,105,118,101,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,32,40,101,105,116,104,101,114,32,98,121,32,110,117,109,98,101,114,32,111,114,32,98,121,32,110,97,109,101,41,32,105,115,32,117,115,101,100,32,111,117,116,115,105,100,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,111,32,119,104,105,99,104,32,105,116,32,114,101,102,101,114,115,44,32,105,116,32,111,112,101,114,97,116,101,115,32,108,105,107,101,32,97,32,115,117,98,114,111,117,116,105,110,101,32,105,110,32,97,32,112,114,111,103,114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,46,32,84,104,101,32,99,97,108,108,101,100,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,98,101,32,100,101,102,105,110,101,100,32,98,101,102,111,114,101,32,111,114,32,97,102,116,101,114,32,116,104,101,32,114,101,102,101,114,101,110,99,101,46,32,65,32,110,117,109,98,101,114,101,100,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,97,98,115,111,108,117,116,101,32,111,114,32,114,101,108,97,116,105,118,101,44,32,97,115,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<40,46,46,46,40,97,98,115,111,108,117,116,101,41,46,46,46,41,46,46,46,40,63,50,41,46,46,46,10,40,46,46,46,40,114,101,108,97,116,105,118,101,41,46,46,46,41,46,46,46,40,63,45,49,41,46,46,46,10,40,46,46,46,40,63,43,49,41,46,46,46,40,114,101,108,97,116,105,118,101,41,46,46,46>>]}]},{p,[],[<<65,110,32,101,97,114,108,105,101,114,32,101,120,97,109,112,108,101,32,112,111,105,110,116,101,100,32,111,117,116,32,116,104,97,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,115,101,110,115,101,32,97,110,100,32,115,101,110,115,105,98,105,108,105,116,121,34,32,97,110,100,32,34,114,101,115,112,111,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,44,32,98,117,116,32,110,111,116,32,34,115,101,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,58>>]},{pre,[],[{code,[],[<<40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,92,49,105,98,105,108,105,116,121>>]}]},{p,[],[<<73,102,32,105,110,115,116,101,97,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,105,115,32,117,115,101,100,44,32,105,116,32,109,97,116,99,104,101,115,32,34,115,101,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,32,97,110,100,32,116,104,101,32,111,116,104,101,114,32,116,119,111,32,115,116,114,105,110,103,115,58>>]},{pre,[],[{code,[],[<<40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,40,63,49,41,105,98,105,108,105,116,121>>]}]},{p,[],[<<65,110,111,116,104,101,114,32,101,120,97,109,112,108,101,32,105,115,32,112,114,111,118,105,100,101,100,32,105,110,32,116,104,101,32,100,105,115,99,117,115,115,105,111,110,32,111,102,32,68,69,70,73,78,69,32,101,97,114,108,105,101,114,46>>]},{p,[],[<<65,108,108,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,115,44,32,114,101,99,117,114,115,105,118,101,32,111,114,32,110,111,116,44,32,97,114,101,32,97,108,119,97,121,115,32,116,114,101,97,116,101,100,32,97,115,32,97,116,111,109,105,99,32,103,114,111,117,112,115,46,32,84,104,97,116,32,105,115,44,32,111,110,99,101,32,97,32,115,117,98,114,111,117,116,105,110,101,32,104,97,115,32,109,97,116,99,104,101,100,32,115,111,109,101,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,105,116,32,105,115,32,110,101,118,101,114,32,114,101,45,101,110,116,101,114,101,100,44,32,101,118,101,110,32,105,102,32,105,116,32,99,111,110,116,97,105,110,115,32,117,110,116,114,105,101,100,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,110,100,32,116,104,101,114,101,32,105,115,32,97,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,46,32,65,110,121,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,115,101,116,32,100,117,114,105,110,103,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,114,101,118,101,114,116,32,116,111,32,116,104,101,105,114,32,112,114,101,118,105,111,117,115,32,118,97,108,117,101,115,32,97,102,116,101,114,119,97,114,100,115,46>>]},{p,[],[<<80,114,111,99,101,115,115,105,110,103,32,111,112,116,105,111,110,115,32,115,117,99,104,32,97,115,32,99,97,115,101,45,105,110,100,101,112,101,110,100,101,110,99,101,32,97,114,101,32,102,105,120,101,100,32,119,104,101,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,100,101,102,105,110,101,100,44,32,115,111,32,105,102,32,105,116,32,105,115,32,117,115,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,44,32,115,117,99,104,32,111,112,116,105,111,110,115,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,102,111,114,32,100,105,102,102,101,114,101,110,116,32,99,97,108,108,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,97,98,99,97,98,99,34,32,98,117,116,32,110,111,116,32,34,97,98,99,65,66,67,34,44,32,97,115,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32,112,114,111,99,101,115,115,105,110,103,32,111,112,116,105,111,110,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,99,97,108,108,101,100,32,115,117,98,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,97,98,99,41,40,63,105,58,40,63,45,49,41,41>>]}]},{a,[{id,<<115,101,99,116,50,50>>}],[]},{h2,[],[<<79,110,105,103,117,114,117,109,97,32,83,117,98,114,111,117,116,105,110,101,32,83,121,110,116,97,120>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,79,110,105,103,117,114,117,109,97,44,32,116,104,101,32,110,111,110,45,80,101,114,108,32,115,121,110,116,97,120,32,92,103,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,32,111,114,32,97,32,110,117,109,98,101,114,32,101,110,99,108,111,115,101,100,32,101,105,116,104,101,114,32,105,110,32,97,110,103,108,101,32,98,114,97,99,107,101,116,115,32,111,114,32,115,105,110,103,108,101,32,113,117,111,116,101,115,44,32,105,115,32,97,108,116,101,114,110,97,116,105,118,101,32,115,121,110,116,97,120,32,102,111,114,32,114,101,102,101,114,101,110,99,105,110,103,32,97,32,115,117,98,112,97,116,116,101,114,110,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,44,32,112,111,115,115,105,98,108,121,32,114,101,99,117,114,115,105,118,101,108,121,46,32,72,101,114,101,32,102,111,108,108,111,119,115,32,116,119,111,32,111,102,32,116,104,101,32,101,120,97,109,112,108,101,115,32,117,115,101,100,32,97,98,111,118,101,44,32,114,101,119,114,105,116,116,101,110,32,117,115,105,110,103,32,116,104,105,115,32,115,121,110,116,97,120,58>>]},{pre,[],[{code,[],[<<40,63,60,112,110,62,32,92,40,32,40,32,40,63,62,91,94,40,41,93,43,41,32,124,32,92,103,60,112,110,62,32,41,42,32,92,41,32,41,10,40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,92,103,39,49,39,105,98,105,108,105,116,121>>]}]},{p,[],[<<80,67,82,69,32,115,117,112,112,111,114,116,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32,116,111,32,79,110,105,103,117,114,117,109,97,58,32,105,102,32,97,32,110,117,109,98,101,114,32,105,115,32,112,114,101,99,101,100,101,100,32,98,121,32,97,32,112,108,117,115,32,111,114,32,109,105,110,117,115,32,115,105,103,110,44,32,105,116,32,105,115,32,116,97,107,101,110,32,97,115,32,97,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,98,99,41,40,63,105,58,92,103,60,45,49,62,41>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,92,103,123,46,46,46,125,32,40,80,101,114,108,32,115,121,110,116,97,120,41,32,97,110,100,32,92,103,60,46,46,46,62,32,40,79,110,105,103,117,114,117,109,97,32,115,121,110,116,97,120,41,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,115,121,110,111,110,121,109,111,117,115,46,32,84,104,101,32,102,111,114,109,101,114,32,105,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,59,32,116,104,101,32,108,97,116,116,101,114,32,105,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,46>>]},{a,[{id,<<115,101,99,116,50,51>>}],[]},{h2,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,67,111,110,116,114,111,108>>]},{p,[],[<<80,101,114,108,32,53,46,49,48,32,105,110,116,114,111,100,117,99,101,100,32,115,111,109,101,32,34,83,112,101,99,105,97,108,32,66,97,99,107,116,114,97,99,107,105,110,103,32,67,111,110,116,114,111,108,32,86,101,114,98,115,34,44,32,119,104,105,99,104,32,97,114,101,32,115,116,105,108,108,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,80,101,114,108,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,97,115,32,34,101,120,112,101,114,105,109,101,110,116,97,108,32,97,110,100,32,115,117,98,106,101,99,116,32,116,111,32,99,104,97,110,103,101,32,111,114,32,114,101,109,111,118,97,108,32,105,110,32,97,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,32,111,102,32,80,101,114,108,34,46,32,73,116,32,103,111,101,115,32,111,110,32,116,111,32,115,97,121,58,32,34,84,104,101,105,114,32,117,115,97,103,101,32,105,110,32,112,114,111,100,117,99,116,105,111,110,32,99,111,100,101,32,115,104,111,117,108,100,32,98,101,32,110,111,116,101,100,32,116,111,32,97,118,111,105,100,32,112,114,111,98,108,101,109,115,32,100,117,114,105,110,103,32,117,112,103,114,97,100,101,115,46,34,32,84,104,101,32,115,97,109,101,32,114,101,109,97,114,107,115,32,97,112,112,108,121,32,116,111,32,116,104,101,32,80,67,82,69,32,102,101,97,116,117,114,101,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,105,115,32,115,101,99,116,105,111,110,46>>]},{p,[],[<<84,104,101,32,110,101,119,32,118,101,114,98,115,32,109,97,107,101,32,117,115,101,32,111,102,32,119,104,97,116,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,105,110,118,97,108,105,100,32,115,121,110,116,97,120,58,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,97,115,116,101,114,105,115,107,46,32,84,104,101,121,32,97,114,101,32,103,101,110,101,114,97,108,108,121,32,111,102,32,116,104,101,32,102,111,114,109,32,40,42,86,69,82,66,41,32,111,114,32,40,42,86,69,82,66,58,78,65,77,69,41,46,32,83,111,109,101,32,99,97,110,32,116,97,107,101,32,101,105,116,104,101,114,32,102,111,114,109,44,32,112,111,115,115,105,98,108,121,32,98,101,104,97,118,105,110,103,32,100,105,102,102,101,114,101,110,116,108,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,119,104,101,116,104,101,114,32,97,32,110,97,109,101,32,105,115,32,112,114,101,115,101,110,116,46,32,65,32,110,97,109,101,32,105,115,32,97,110,121,32,115,101,113,117,101,110,99,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,84,104,101,32,109,97,120,105,109,117,109,32,110,97,109,101,32,108,101,110,103,116,104,32,105,115,32,50,53,53,32,105,110,32,116,104,101,32,56,45,98,105,116,32,108,105,98,114,97,114,121,32,97,110,100,32,54,53,53,51,53,32,105,110,32,116,104,101,32,49,54,45,98,105,116,32,97,110,100,32,51,50,45,98,105,116,32,108,105,98,114,97,114,105,101,115,46,32,73,102,32,116,104,101,32,110,97,109,101,32,105,115,32,101,109,112,116,121,44,32,116,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,115,32,116,104,101,32,99,111,108,111,110,44,32,116,104,101,32,101,102,102,101,99,116,32,105,115,32,97,115,32,105,102,32,116,104,101,32,99,111,108,111,110,32,119,97,115,32,110,111,116,32,116,104,101,114,101,46,32,65,110,121,32,110,117,109,98,101,114,32,111,102,32,116,104,101,115,101,32,118,101,114,98,115,32,99,97,110,32,111,99,99,117,114,32,105,110,32,97,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,115,101,32,118,101,114,98,115,32,105,110,32,114,101,112,101,97,116,101,100,32,103,114,111,117,112,115,44,32,97,115,115,101,114,116,105,111,110,115,44,32,97,110,100,32,105,110,32,115,117,98,112,97,116,116,101,114,110,115,32,99,97,108,108,101,100,32,97,115,32,115,117,98,114,111,117,116,105,110,101,115,32,40,119,104,101,116,104,101,114,32,111,114,32,110,111,116,32,114,101,99,117,114,115,105,118,101,108,121,41,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46>>]},{p,[],[{em,[],[<<79,112,116,105,109,105,122,97,116,105,111,110,115,32,84,104,97,116,32,65,102,102,101,99,116,32,66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115>>]}]},{p,[],[<<80,67,82,69,32,99,111,110,116,97,105,110,115,32,115,111,109,101,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,116,104,97,116,32,97,114,101,32,117,115,101,100,32,116,111,32,115,112,101,101,100,32,117,112,32,109,97,116,99,104,105,110,103,32,98,121,32,114,117,110,110,105,110,103,32,115,111,109,101,32,99,104,101,99,107,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,101,97,99,104,32,109,97,116,99,104,32,97,116,116,101,109,112,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,99,97,110,32,107,110,111,119,32,116,104,101,32,109,105,110,105,109,117,109,32,108,101,110,103,116,104,32,111,102,32,109,97,116,99,104,105,110,103,32,115,117,98,106,101,99,116,44,32,111,114,32,116,104,97,116,32,97,32,112,97,114,116,105,99,117,108,97,114,32,99,104,97,114,97,99,116,101,114,32,109,117,115,116,32,98,101,32,112,114,101,115,101,110,116,46,32,87,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,98,121,112,97,115,115,101,115,32,116,104,101,32,114,117,110,110,105,110,103,32,111,102,32,97,32,109,97,116,99,104,44,32,97,110,121,32,105,110,99,108,117,100,101,100,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,97,114,101,32,110,111,116,32,112,114,111,99,101,115,115,101,100,46,32,112,114,111,99,101,115,115,101,100,46,32,89,111,117,32,99,97,110,32,115,117,112,112,114,101,115,115,32,116,104,101,32,115,116,97,114,116,45,111,102,45,109,97,116,99,104,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]},<<32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,111,114,32,98,121,32,115,116,97,114,116,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,119,105,116,104,32,40,42,78,79,95,83,84,65,82,84,95,79,80,84,41,46>>]},{p,[],[<<69,120,112,101,114,105,109,101,110,116,115,32,119,105,116,104,32,80,101,114,108,32,115,117,103,103,101,115,116,32,116,104,97,116,32,105,116,32,116,111,111,32,104,97,115,32,115,105,109,105,108,97,114,32,111,112,116,105,109,105,122,97,116,105,111,110,115,44,32,115,111,109,101,116,105,109,101,115,32,108,101,97,100,105,110,103,32,116,111,32,97,110,111,109,97,108,111,117,115,32,114,101,115,117,108,116,115,46>>]},{p,[],[{em,[],[<<86,101,114,98,115,32,84,104,97,116,32,65,99,116,32,73,109,109,101,100,105,97,116,101,108,121>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,115,32,97,99,116,32,97,115,32,115,111,111,110,32,97,115,32,116,104,101,121,32,97,114,101,32,101,110,99,111,117,110,116,101,114,101,100,46,32,84,104,101,121,32,109,117,115,116,32,110,111,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,46>>]},{pre,[],[{code,[],[<<40,42,65,67,67,69,80,84,41>>]}]},{p,[],[<<84,104,105,115,32,118,101,114,98,32,99,97,117,115,101,115,32,116,104,101,32,109,97,116,99,104,32,116,111,32,101,110,100,32,115,117,99,99,101,115,115,102,117,108,108,121,44,32,115,107,105,112,112,105,110,103,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,105,116,32,105,115,32,105,110,115,105,100,101,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,105,115,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,44,32,111,110,108,121,32,116,104,97,116,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,101,110,100,101,100,32,115,117,99,99,101,115,115,102,117,108,108,121,46,32,77,97,116,99,104,105,110,103,32,116,104,101,110,32,99,111,110,116,105,110,117,101,115,32,97,116,32,116,104,101,32,111,117,116,101,114,32,108,101,118,101,108,46,32,73,102,32,40,42,65,67,67,69,80,84,41,32,105,115,32,116,114,105,103,103,101,114,101,100,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,115,117,99,99,101,101,100,115,59,32,105,110,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,102,97,105,108,115,46>>]},{p,[],[<<73,102,32,40,42,65,67,67,69,80,84,41,32,105,115,32,105,110,115,105,100,101,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,44,32,116,104,101,32,100,97,116,97,32,115,111,32,102,97,114,32,105,115,32,99,97,112,116,117,114,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,65,66,34,44,32,34,65,65,68,34,44,32,111,114,32,34,65,67,68,34,46,32,87,104,101,110,32,105,116,32,109,97,116,99,104,101,115,32,34,65,66,34,44,32,34,66,34,32,105,115,32,99,97,112,116,117,114,101,100,32,98,121,32,116,104,101,32,111,117,116,101,114,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{pre,[],[{code,[],[<<65,40,40,63,58,65,124,66,40,42,65,67,67,69,80,84,41,124,67,41,68,41>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,32,99,97,117,115,101,115,32,97,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,44,32,102,111,114,99,105,110,103,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,111,32,111,99,99,117,114,46,32,73,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,40,63,33,41,32,98,117,116,32,101,97,115,105,101,114,32,116,111,32,114,101,97,100,46>>]},{pre,[],[{code,[],[<<40,42,70,65,73,76,41,32,111,114,32,40,42,70,41>>]}]},{p,[],[<<84,104,101,32,80,101,114,108,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,115,116,97,116,101,115,32,116,104,97,116,32,105,116,32,105,115,32,112,114,111,98,97,98,108,121,32,117,115,101,102,117,108,32,111,110,108,121,32,119,104,101,110,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,40,63,123,125,41,32,111,114,32,40,63,63,123,125,41,46,32,84,104,111,115,101,32,97,114,101,32,80,101,114,108,32,102,101,97,116,117,114,101,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,80,67,82,69,46>>]},{p,[],[<<65,32,109,97,116,99,104,32,119,105,116,104,32,116,104,101,32,115,116,114,105,110,103,32,34,97,97,97,97,34,32,97,108,119,97,121,115,32,102,97,105,108,115,44,32,98,117,116,32,116,104,101,32,99,97,108,108,111,117,116,32,105,115,32,116,97,107,101,110,32,98,101,102,111,114,101,32,101,97,99,104,32,98,97,99,107,116,114,97,99,107,32,111,99,99,117,114,115,32,40,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,44,32,49,48,32,116,105,109,101,115,41,46>>]},{p,[],[{em,[],[<<82,101,99,111,114,100,105,110,103,32,87,104,105,99,104,32,80,97,116,104,32,87,97,115,32,84,97,107,101,110>>]}]},{p,[],[<<84,104,101,32,109,97,105,110,32,112,117,114,112,111,115,101,32,111,102,32,116,104,105,115,32,118,101,114,98,32,105,115,32,116,111,32,116,114,97,99,107,32,104,111,119,32,97,32,109,97,116,99,104,32,119,97,115,32,97,114,114,105,118,101,100,32,97,116,44,32,97,108,116,104,111,117,103,104,32,105,116,32,97,108,115,111,32,104,97,115,32,97,32,115,101,99,111,110,100,97,114,121,32,117,115,101,32,105,110,32,119,105,116,104,32,97,100,118,97,110,99,105,110,103,32,116,104,101,32,109,97,116,99,104,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,32,40,115,101,101,32,40,42,83,75,73,80,41,32,98,101,108,111,119,41,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,110,32,69,114,108,97,110,103,44,32,116,104,101,114,101,32,105,115,32,110,111,32,105,110,116,101,114,102,97,99,101,32,116,111,32,114,101,116,114,105,101,118,101,32,97,32,109,97,114,107,32,119,105,116,104,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,50,44,51>>]}]},<<44,32,115,111,32,111,110,108,121,32,116,104,101,32,115,101,99,111,110,100,97,114,121,32,112,117,114,112,111,115,101,32,105,115,32,114,101,108,101,118,97,110,116,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,46>>]},{p,[],[<<84,104,101,32,114,101,115,116,32,111,102,32,116,104,105,115,32,115,101,99,116,105,111,110,32,105,115,32,116,104,101,114,101,102,111,114,101,32,100,101,108,105,98,101,114,97,116,101,108,121,32,110,111,116,32,97,100,97,112,116,101,100,32,102,111,114,32,114,101,97,100,105,110,103,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,44,32,98,117,116,32,116,104,101,32,101,120,97,109,112,108,101,115,32,99,97,110,32,104,101,108,112,32,105,110,32,117,110,100,101,114,115,116,97,110,100,105,110,103,32,78,65,77,69,83,32,97,115,32,116,104,101,121,32,99,97,110,32,98,101,32,117,115,101,100,32,98,121,32,40,42,83,75,73,80,41,46>>]}]},{pre,[],[{code,[],[<<40,42,77,65,82,75,58,78,65,77,69,41,32,111,114,32,40,42,58,78,65,77,69,41>>]}]},{p,[],[<<65,32,110,97,109,101,32,105,115,32,97,108,119,97,121,115,32,114,101,113,117,105,114,101,100,32,119,105,116,104,32,116,104,105,115,32,118,101,114,98,46,32,84,104,101,114,101,32,99,97,110,32,98,101,32,97,115,32,109,97,110,121,32,105,110,115,116,97,110,99,101,115,32,111,102,32,40,42,77,65,82,75,41,32,97,115,32,121,111,117,32,108,105,107,101,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,97,110,100,32,116,104,101,105,114,32,110,97,109,101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,116,111,32,98,101,32,117,110,105,113,117,101,46>>]},{p,[],[<<87,104,101,110,32,97,32,109,97,116,99,104,32,115,117,99,99,101,101,100,115,44,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,108,97,115,116,32,101,110,99,111,117,110,116,101,114,101,100,32,40,42,77,65,82,75,58,78,65,77,69,41,44,32,40,42,80,82,85,78,69,58,78,65,77,69,41,44,32,111,114,32,40,42,84,72,69,78,58,78,65,77,69,41,32,111,110,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,97,116,104,32,105,115,32,112,97,115,115,101,100,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,115,101,99,116,105,111,110,32,34,69,120,116,114,97,32,100,97,116,97,32,102,111,114,32>>,{code,[],[<<112,99,114,101,95,101,120,101,99,40,41>>]},<<34,32,105,110,32,116,104,101,32>>,{code,[],[<<112,99,114,101,97,112,105>>]},<<32,100,111,99,117,109,101,110,116,97,116,105,111,110,46,32,73,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,111,102,32>>,{code,[],[<<112,99,114,101,116,101,115,116>>]},<<32,111,117,116,112,117,116,44,32,116,104,101,32,47,75,32,109,111,100,105,102,105,101,114,32,114,101,113,117,101,115,116,115,32,116,104,101,32,114,101,116,114,105,101,118,97,108,32,97,110,100,32,111,117,116,112,117,116,116,105,110,103,32,111,102,32,40,42,77,65,82,75,41,32,100,97,116,97,58>>]},{pre,[],[{code,[],[<<32,32,114,101,62,32,47,88,40,42,77,65,82,75,58,65,41,89,124,88,40,42,77,65,82,75,58,66,41,90,47,75,10,100,97,116,97,62,32,88,89,10,32,48,58,32,88,89,10,77,75,58,32,65,10,88,90,10,32,48,58,32,88,90,10,77,75,58,32,66>>]}]},{p,[],[<<84,104,101,32,40,42,77,65,82,75,41,32,110,97,109,101,32,105,115,32,116,97,103,103,101,100,32,119,105,116,104,32,34,77,75,58,34,32,105,110,32,116,104,105,115,32,111,117,116,112,117,116,44,32,97,110,100,32,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,32,105,116,32,105,110,100,105,99,97,116,101,115,32,119,104,105,99,104,32,111,102,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,109,97,116,99,104,101,100,46,32,84,104,105,115,32,105,115,32,97,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,119,97,121,32,111,102,32,111,98,116,97,105,110,105,110,103,32,116,104,105,115,32,105,110,102,111,114,109,97,116,105,111,110,32,116,104,97,110,32,112,117,116,116,105,110,103,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,105,116,115,32,111,119,110,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<73,102,32,97,32,118,101,114,98,32,119,105,116,104,32,97,32,110,97,109,101,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,44,32,116,104,101,32,110,97,109,101,32,105,115,32,114,101,99,111,114,100,101,100,32,97,110,100,32,112,97,115,115,101,100,32,98,97,99,107,32,105,102,32,105,116,32,105,115,32,116,104,101,32,108,97,115,116,32,101,110,99,111,117,110,116,101,114,101,100,46,32,84,104,105,115,32,100,111,101,115,32,110,111,116,32,111,99,99,117,114,32,102,111,114,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,111,114,32,102,97,105,108,105,110,103,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46>>]},{p,[],[<<65,102,116,101,114,32,97,32,112,97,114,116,105,97,108,32,109,97,116,99,104,32,111,114,32,97,32,102,97,105,108,101,100,32,109,97,116,99,104,44,32,116,104,101,32,108,97,115,116,32,101,110,99,111,117,110,116,101,114,101,100,32,110,97,109,101,32,105,110,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,112,114,111,99,101,115,115,32,105,115,32,114,101,116,117,114,110,101,100,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<32,32,114,101,62,32,47,88,40,42,77,65,82,75,58,65,41,89,124,88,40,42,77,65,82,75,58,66,41,90,47,75,10,100,97,116,97,62,32,88,80,10,78,111,32,109,97,116,99,104,44,32,109,97,114,107,32,61,32,66>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,105,110,32,116,104,105,115,32,117,110,97,110,99,104,111,114,101,100,32,101,120,97,109,112,108,101,44,32,116,104,101,32,109,97,114,107,32,105,115,32,114,101,116,97,105,110,101,100,32,102,114,111,109,32,116,104,101,32,109,97,116,99,104,32,97,116,116,101,109,112,116,32,116,104,97,116,32,115,116,97,114,116,101,100,32,97,116,32,108,101,116,116,101,114,32,34,88,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,83,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,32,97,116,116,101,109,112,116,115,32,115,116,97,114,116,105,110,103,32,97,116,32,34,80,34,32,97,110,100,32,116,104,101,110,32,119,105,116,104,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,100,111,32,110,111,116,32,103,101,116,32,97,115,32,102,97,114,32,97,115,32,116,104,101,32,40,42,77,65,82,75,41,32,105,116,101,109,44,32,110,101,118,101,114,116,104,101,108,101,115,115,32,100,111,32,110,111,116,32,114,101,115,101,116,32,105,116,46>>]},{p,[],[{em,[],[<<86,101,114,98,115,32,84,104,97,116,32,65,99,116,32,97,102,116,101,114,32,66,97,99,107,116,114,97,99,107,105,110,103>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,115,32,100,111,32,110,111,116,104,105,110,103,32,119,104,101,110,32,116,104,101,121,32,97,114,101,32,101,110,99,111,117,110,116,101,114,101,100,46,32,77,97,116,99,104,105,110,103,32,99,111,110,116,105,110,117,101,115,32,119,105,116,104,32,119,104,97,116,32,102,111,108,108,111,119,115,44,32,98,117,116,32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,44,32,99,97,117,115,105,110,103,32,97,32,98,97,99,107,116,114,97,99,107,32,116,111,32,116,104,101,32,118,101,114,98,44,32,97,32,102,97,105,108,117,114,101,32,105,115,32,102,111,114,99,101,100,46,32,84,104,97,116,32,105,115,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,110,111,116,32,112,97,115,115,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,118,101,114,98,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,118,101,114,98,115,32,97,112,112,101,97,114,115,32,105,110,115,105,100,101,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,111,114,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,44,32,105,116,115,32,101,102,102,101,99,116,32,105,115,32,99,111,110,102,105,110,101,100,32,116,111,32,116,104,97,116,32,103,114,111,117,112,44,32,97,115,32,111,110,99,101,32,116,104,101,32,103,114,111,117,112,32,104,97,115,32,98,101,101,110,32,109,97,116,99,104,101,100,44,32,116,104,101,114,101,32,105,115,32,110,101,118,101,114,32,97,110,121,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,105,116,46,32,73,110,32,116,104,105,115,32,115,105,116,117,97,116,105,111,110,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,32,34,106,117,109,112,32,98,97,99,107,34,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,101,110,116,105,114,101,32,97,116,111,109,105,99,32,103,114,111,117,112,32,111,114,32,97,115,115,101,114,116,105,111,110,46,32,40,82,101,109,101,109,98,101,114,32,97,108,115,111,44,32,97,115,32,115,116,97,116,101,100,32,97,98,111,118,101,44,32,116,104,97,116,32,116,104,105,115,32,108,111,99,97,108,105,122,97,116,105,111,110,32,97,108,115,111,32,97,112,112,108,105,101,115,32,105,110,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,115,46,41>>]},{p,[],[<<84,104,101,115,101,32,118,101,114,98,115,32,100,105,102,102,101,114,32,105,110,32,101,120,97,99,116,108,121,32,119,104,97,116,32,107,105,110,100,32,111,102,32,102,97,105,108,117,114,101,32,111,99,99,117,114,115,32,119,104,101,110,32,98,97,99,107,116,114,97,99,107,105,110,103,32,114,101,97,99,104,101,115,32,116,104,101,109,46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,32,105,115,32,119,104,97,116,32,111,99,99,117,114,115,32,119,104,101,110,32,116,104,101,32,118,101,114,98,32,105,115,32,110,111,116,32,105,110,32,97,32,115,117,98,114,111,117,116,105,110,101,32,111,114,32,97,110,32,97,115,115,101,114,116,105,111,110,46,32,83,117,98,115,101,113,117,101,110,116,32,115,101,99,116,105,111,110,115,32,99,111,118,101,114,32,116,104,101,115,101,32,115,112,101,99,105,97,108,32,99,97,115,101,115,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,44,32,119,104,105,99,104,32,109,117,115,116,32,110,111,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,44,32,99,97,117,115,101,115,32,116,104,101,32,119,104,111,108,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,32,111,117,116,114,105,103,104,116,32,105,102,32,116,104,101,114,101,32,105,115,32,97,32,108,97,116,101,114,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,116,104,97,116,32,99,97,117,115,101,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,111,32,114,101,97,99,104,32,105,116,46,32,69,118,101,110,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,117,110,97,110,99,104,111,114,101,100,44,32,110,111,32,102,117,114,116,104,101,114,32,97,116,116,101,109,112,116,115,32,116,111,32,102,105,110,100,32,97,32,109,97,116,99,104,32,98,121,32,97,100,118,97,110,99,105,110,103,32,116,104,101,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,32,116,97,107,101,32,112,108,97,99,101,46>>]},{pre,[],[{code,[],[<<40,42,67,79,77,77,73,84,41>>]}]},{p,[],[<<73,102,32,40,42,67,79,77,77,73,84,41,32,105,115,32,116,104,101,32,111,110,108,121,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,32,116,104,97,116,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,44,32,111,110,99,101,32,105,116,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,50,44,51>>]}]},<<32,105,115,32,99,111,109,109,105,116,116,101,100,32,116,111,32,102,105,110,100,32,97,32,109,97,116,99,104,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,44,32,111,114,32,110,111,116,32,97,116,32,97,108,108,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<97,43,40,42,67,79,77,77,73,84,41,98>>]}]},{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,34,120,120,97,97,98,34,32,98,117,116,32,110,111,116,32,34,97,97,99,97,97,98,34,46,32,73,116,32,99,97,110,32,98,101,32,116,104,111,117,103,104,116,32,111,102,32,97,115,32,97,32,107,105,110,100,32,111,102,32,100,121,110,97,109,105,99,32,97,110,99,104,111,114,44,32,111,114,32,34,73,39,118,101,32,115,116,97,114,116,101,100,44,32,115,111,32,73,32,109,117,115,116,32,102,105,110,105,115,104,34,46,32,84,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,112,97,115,115,101,100,32,40,42,77,65,82,75,41,32,105,110,32,116,104,101,32,112,97,116,104,32,105,115,32,112,97,115,115,101,100,32,98,97,99,107,32,119,104,101,110,32,40,42,67,79,77,77,73,84,41,32,102,111,114,99,101,115,32,97,32,109,97,116,99,104,32,102,97,105,108,117,114,101,46>>]},{p,[],[<<73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,32,101,120,105,115,116,115,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,97,32,100,105,102,102,101,114,101,110,116,32,111,110,101,32,116,104,97,116,32,102,111,108,108,111,119,115,32,40,42,67,79,77,77,73,84,41,32,99,97,110,32,98,101,32,116,114,105,103,103,101,114,101,100,32,102,105,114,115,116,44,32,115,111,32,109,101,114,101,108,121,32,112,97,115,115,105,110,103,32,40,42,67,79,77,77,73,84,41,32,100,117,114,105,110,103,32,97,32,109,97,116,99,104,32,100,111,101,115,32,110,111,116,32,97,108,119,97,121,115,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,97,32,109,97,116,99,104,32,109,117,115,116,32,98,101,32,97,116,32,116,104,105,115,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,40,42,67,79,77,77,73,84,41,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,97,110,32,97,110,99,104,111,114,44,32,117,110,108,101,115,115,32,116,104,101,32,80,67,82,69,32,115,116,97,114,116,45,111,102,45,109,97,116,99,104,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,97,114,101,32,116,117,114,110,101,100,32,111,102,102,44,32,97,115,32,115,104,111,119,110,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<49,62,32,114,101,58,114,117,110,40,34,120,121,122,97,98,99,34,44,34,40,42,67,79,77,77,73,84,41,97,98,99,34,44,91,123,99,97,112,116,117,114,101,44,97,108,108,44,108,105,115,116,125,93,41,46,10,123,109,97,116,99,104,44,91,34,97,98,99,34,93,125,10,50,62,32,114,101,58,114,117,110,40,34,120,121,122,97,98,99,34,44,34,40,42,67,79,77,77,73,84,41,97,98,99,34,44,91,123,99,97,112,116,117,114,101,44,97,108,108,44,108,105,115,116,125,44,110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101,93,41,46,10,110,111,109,97,116,99,104>>]}]},{p,[],[<<70,111,114,32,116,104,105,115,32,112,97,116,116,101,114,110,44,32,80,67,82,69,32,107,110,111,119,115,32,116,104,97,116,32,97,110,121,32,109,97,116,99,104,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,34,97,34,44,32,115,111,32,116,104,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,115,107,105,112,115,32,97,108,111,110,103,32,116,104,101,32,115,117,98,106,101,99,116,32,116,111,32,34,97,34,32,98,101,102,111,114,101,32,97,112,112,108,121,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,116,111,32,116,104,101,32,102,105,114,115,116,32,115,101,116,32,111,102,32,100,97,116,97,46,32,84,104,101,32,109,97,116,99,104,32,97,116,116,101,109,112,116,32,116,104,101,110,32,115,117,99,99,101,101,100,115,46,32,73,110,32,116,104,101,32,115,101,99,111,110,100,32,99,97,108,108,32,116,104,101,32>>,{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]},<<32,100,105,115,97,98,108,101,115,32,116,104,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,115,107,105,112,115,32,97,108,111,110,103,32,116,111,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,112,97,116,116,101,114,110,32,105,115,32,110,111,119,32,97,112,112,108,105,101,100,32,115,116,97,114,116,105,110,103,32,97,116,32,34,120,34,44,32,97,110,100,32,115,111,32,116,104,101,32,40,42,67,79,77,77,73,84,41,32,99,97,117,115,101,115,32,116,104,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,32,119,105,116,104,111,117,116,32,116,114,121,105,110,103,32,97,110,121,32,111,116,104,101,114,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,115,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,32,99,97,117,115,101,115,32,116,104,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,114,116,105,110,103,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,105,102,32,116,104,101,114,101,32,105,115,32,97,32,108,97,116,101,114,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,116,104,97,116,32,99,97,117,115,101,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,111,32,114,101,97,99,104,32,105,116,58>>]},{pre,[],[{code,[],[<<40,42,80,82,85,78,69,41,32,111,114,32,40,42,80,82,85,78,69,58,78,65,77,69,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,117,110,97,110,99,104,111,114,101,100,44,32,116,104,101,32,110,111,114,109,97,108,32,34,98,117,109,112,97,108,111,110,103,34,32,97,100,118,97,110,99,101,32,116,111,32,116,104,101,32,110,101,120,116,32,115,116,97,114,116,105,110,103,32,99,104,97,114,97,99,116,101,114,32,116,104,101,110,32,111,99,99,117,114,115,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,32,111,99,99,117,114,32,97,115,32,117,115,117,97,108,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,40,42,80,82,85,78,69,41,44,32,98,101,102,111,114,101,32,105,116,32,105,115,32,114,101,97,99,104,101,100,44,32,111,114,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,116,111,32,116,104,101,32,114,105,103,104,116,32,111,102,32,40,42,80,82,85,78,69,41,44,32,98,117,116,32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,109,97,116,99,104,32,116,111,32,116,104,101,32,114,105,103,104,116,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,110,111,116,32,99,114,111,115,115,32,40,42,80,82,85,78,69,41,46,32,73,110,32,115,105,109,112,108,101,32,99,97,115,101,115,44,32,116,104,101,32,117,115,101,32,111,102,32,40,42,80,82,85,78,69,41,32,105,115,32,106,117,115,116,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,116,111,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,111,114,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,44,32,98,117,116,32,116,104,101,114,101,32,97,114,101,32,115,111,109,101,32,117,115,101,115,32,111,102,32,40,42,80,82,85,78,69,41,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,101,120,112,114,101,115,115,101,100,32,105,110,32,97,110,121,32,111,116,104,101,114,32,119,97,121,46,32,73,110,32,97,110,32,97,110,99,104,111,114,101,100,32,112,97,116,116,101,114,110,44,32,40,42,80,82,85,78,69,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,40,42,67,79,77,77,73,84,41,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,40,42,80,82,85,78,69,58,78,65,77,69,41,32,105,115,32,116,104,101,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,40,42,77,65,82,75,58,78,65,77,69,41,40,42,80,82,85,78,69,41,46,32,73,116,32,105,115,32,108,105,107,101,32,40,42,77,65,82,75,58,78,65,77,69,41,32,105,110,32,116,104,97,116,32,116,104,101,32,110,97,109,101,32,105,115,32,114,101,109,101,109,98,101,114,101,100,32,102,111,114,32,112,97,115,115,105,110,103,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,46,32,72,111,119,101,118,101,114,44,32,40,42,83,75,73,80,58,78,65,77,69,41,32,115,101,97,114,99,104,101,115,32,111,110,108,121,32,102,111,114,32,110,97,109,101,115,32,115,101,116,32,119,105,116,104,32,40,42,77,65,82,75,41,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,102,97,99,116,32,116,104,97,116,32,40,42,80,82,85,78,69,58,78,65,77,69,41,32,114,101,109,101,109,98,101,114,115,32,116,104,101,32,110,97,109,101,32,105,115,32,117,115,101,108,101,115,115,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,44,32,97,115,32,110,97,109,101,115,32,99,97,110,110,111,116,32,98,101,32,114,101,116,114,105,101,118,101,100,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,44,32,119,104,101,110,32,115,112,101,99,105,102,105,101,100,32,119,105,116,104,111,117,116,32,97,32,110,97,109,101,44,32,105,115,32,108,105,107,101,32,40,42,80,82,85,78,69,41,44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,117,110,97,110,99,104,111,114,101,100,44,32,116,104,101,32,34,98,117,109,112,97,108,111,110,103,34,32,97,100,118,97,110,99,101,32,105,115,32,110,111,116,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,44,32,98,117,116,32,116,111,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,119,104,101,114,101,32,40,42,83,75,73,80,41,32,119,97,115,32,101,110,99,111,117,110,116,101,114,101,100,46>>]},{pre,[],[{code,[],[<<40,42,83,75,73,80,41>>]}]},{p,[],[<<40,42,83,75,73,80,41,32,115,105,103,110,105,102,105,101,115,32,116,104,97,116,32,119,104,97,116,101,118,101,114,32,116,101,120,116,32,119,97,115,32,109,97,116,99,104,101,100,32,108,101,97,100,105,110,103,32,117,112,32,116,111,32,105,116,32,99,97,110,110,111,116,32,98,101,32,112,97,114,116,32,111,102,32,97,32,115,117,99,99,101,115,115,102,117,108,32,109,97,116,99,104,46,32,67,111,110,115,105,100,101,114,58>>]},{pre,[],[{code,[],[<<97,43,40,42,83,75,73,80,41,98>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,97,97,97,97,99,46,46,46,34,44,32,97,102,116,101,114,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,32,97,116,116,101,109,112,116,32,102,97,105,108,115,32,40,115,116,97,114,116,105,110,103,32,97,116,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,115,116,114,105,110,103,41,44,32,116,104,101,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,32,115,107,105,112,115,32,111,110,32,116,111,32,115,116,97,114,116,32,116,104,101,32,110,101,120,116,32,97,116,116,101,109,112,116,32,97,116,32,34,99,34,46,32,78,111,116,105,99,101,32,116,104,97,116,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,116,104,105,115,32,101,120,97,109,112,108,101,59,32,97,108,116,104,111,117,103,104,32,105,116,32,119,111,117,108,100,32,115,117,112,112,114,101,115,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,100,117,114,105,110,103,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,32,97,116,116,101,109,112,116,44,32,116,104,101,32,115,101,99,111,110,100,32,97,116,116,101,109,112,116,32,119,111,117,108,100,32,115,116,97,114,116,32,97,116,32,116,104,101,32,115,101,99,111,110,100,32,99,104,97,114,97,99,116,101,114,32,105,110,115,116,101,97,100,32,111,102,32,115,107,105,112,112,105,110,103,32,111,110,32,116,111,32,34,99,34,46>>]},{p,[],[<<87,104,101,110,32,40,42,83,75,73,80,41,32,104,97,115,32,97,110,32,97,115,115,111,99,105,97,116,101,100,32,110,97,109,101,44,32,105,116,115,32,98,101,104,97,118,105,111,114,32,105,115,32,109,111,100,105,102,105,101,100,58>>]},{pre,[],[{code,[],[<<40,42,83,75,73,80,58,78,65,77,69,41>>]}]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,105,115,32,116,114,105,103,103,101,114,101,100,44,32,116,104,101,32,112,114,101,118,105,111,117,115,32,112,97,116,104,32,116,104,114,111,117,103,104,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,115,101,97,114,99,104,101,100,32,102,111,114,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,40,42,77,65,82,75,41,32,116,104,97,116,32,104,97,115,32,116,104,101,32,115,97,109,101,32,110,97,109,101,46,32,73,102,32,111,110,101,32,105,115,32,102,111,117,110,100,44,32,116,104,101,32,34,98,117,109,112,97,108,111,110,103,34,32,97,100,118,97,110,99,101,32,105,115,32,116,111,32,116,104,101,32,115,117,98,106,101,99,116,32,112,111,115,105,116,105,111,110,32,116,104,97,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,97,116,32,40,42,77,65,82,75,41,32,105,110,115,116,101,97,100,32,111,102,32,116,111,32,119,104,101,114,101,32,40,42,83,75,73,80,41,32,119,97,115,32,101,110,99,111,117,110,116,101,114,101,100,46,32,73,102,32,110,111,32,40,42,77,65,82,75,41,32,119,105,116,104,32,97,32,109,97,116,99,104,105,110,103,32,110,97,109,101,32,105,115,32,102,111,117,110,100,44,32,40,42,83,75,73,80,41,32,105,115,32,105,103,110,111,114,101,100,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,40,42,83,75,73,80,58,78,65,77,69,41,32,115,101,97,114,99,104,101,115,32,111,110,108,121,32,102,111,114,32,110,97,109,101,115,32,115,101,116,32,98,121,32,40,42,77,65,82,75,58,78,65,77,69,41,46,32,73,116,32,105,103,110,111,114,101,115,32,110,97,109,101,115,32,116,104,97,116,32,97,114,101,32,115,101,116,32,98,121,32,40,42,80,82,85,78,69,58,78,65,77,69,41,32,111,114,32,40,42,84,72,69,78,58,78,65,77,69,41,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,32,99,97,117,115,101,115,32,97,32,115,107,105,112,32,116,111,32,116,104,101,32,110,101,120,116,32,105,110,110,101,114,109,111,115,116,32,97,108,116,101,114,110,97,116,105,118,101,32,119,104,101,110,32,98,97,99,107,116,114,97,99,107,105,110,103,32,114,101,97,99,104,101,115,32,105,116,46,32,84,104,97,116,32,105,115,44,32,105,116,32,99,97,110,99,101,108,115,32,97,110,121,32,102,117,114,116,104,101,114,32,98,97,99,107,116,114,97,99,107,105,110,103,32,119,105,116,104,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,97,108,116,101,114,110,97,116,105,118,101,46>>]},{pre,[],[{code,[],[<<40,42,84,72,69,78,41,32,111,114,32,40,42,84,72,69,78,58,78,65,77,69,41>>]}]},{p,[],[<<84,104,101,32,118,101,114,98,32,110,97,109,101,32,99,111,109,101,115,32,102,114,111,109,32,116,104,101,32,111,98,115,101,114,118,97,116,105,111,110,32,116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,97,32,112,97,116,116,101,114,110,45,98,97,115,101,100,32,105,102,45,116,104,101,110,45,101,108,115,101,32,98,108,111,99,107,58>>]},{pre,[],[{code,[],[<<40,32,67,79,78,68,49,32,40,42,84,72,69,78,41,32,70,79,79,32,124,32,67,79,78,68,50,32,40,42,84,72,69,78,41,32,66,65,82,32,124,32,67,79,78,68,51,32,40,42,84,72,69,78,41,32,66,65,90,32,41,32,46,46,46>>]}]},{p,[],[<<73,102,32,116,104,101,32,67,79,78,68,49,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,44,32,70,79,79,32,105,115,32,116,114,105,101,100,32,40,97,110,100,32,112,111,115,115,105,98,108,121,32,102,117,114,116,104,101,114,32,105,116,101,109,115,32,97,102,116,101,114,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,103,114,111,117,112,32,105,102,32,70,79,79,32,115,117,99,99,101,101,100,115,41,46,32,79,110,32,102,97,105,108,117,114,101,44,32,116,104,101,32,109,97,116,99,104,101,114,32,115,107,105,112,115,32,116,111,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,32,97,110,100,32,116,114,105,101,115,32,67,79,78,68,50,44,32,119,105,116,104,111,117,116,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,67,79,78,68,49,46,32,73,102,32,116,104,97,116,32,115,117,99,99,101,101,100,115,32,97,110,100,32,66,65,82,32,102,97,105,108,115,44,32,67,79,78,68,51,32,105,115,32,116,114,105,101,100,46,32,73,102,32,66,65,90,32,116,104,101,110,32,102,97,105,108,115,44,32,116,104,101,114,101,32,97,114,101,32,110,111,32,109,111,114,101,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,115,111,32,116,104,101,114,101,32,105,115,32,97,32,98,97,99,107,116,114,97,99,107,32,116,111,32,119,104,97,116,101,118,101,114,32,99,97,109,101,32,98,101,102,111,114,101,32,116,104,101,32,101,110,116,105,114,101,32,103,114,111,117,112,46,32,73,102,32,40,42,84,72,69,78,41,32,105,115,32,110,111,116,32,105,110,115,105,100,101,32,97,110,32,97,108,116,101,114,110,97,116,105,111,110,44,32,105,116,32,97,99,116,115,32,108,105,107,101,32,40,42,80,82,85,78,69,41,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,40,42,84,72,69,78,58,78,65,77,69,41,32,105,115,32,116,104,101,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,40,42,77,65,82,75,58,78,65,77,69,41,40,42,84,72,69,78,41,46,32,73,116,32,105,115,32,108,105,107,101,32,40,42,77,65,82,75,58,78,65,77,69,41,32,105,110,32,116,104,97,116,32,116,104,101,32,110,97,109,101,32,105,115,32,114,101,109,101,109,98,101,114,101,100,32,102,111,114,32,112,97,115,115,105,110,103,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,46,32,72,111,119,101,118,101,114,44,32,40,42,83,75,73,80,58,78,65,77,69,41,32,115,101,97,114,99,104,101,115,32,111,110,108,121,32,102,111,114,32,110,97,109,101,115,32,115,101,116,32,119,105,116,104,32,40,42,77,65,82,75,41,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,102,97,99,116,32,116,104,97,116,32,40,42,84,72,69,78,58,78,65,77,69,41,32,114,101,109,101,109,98,101,114,115,32,116,104,101,32,110,97,109,101,32,105,115,32,117,115,101,108,101,115,115,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,44,32,97,115,32,110,97,109,101,115,32,99,97,110,110,111,116,32,98,101,32,114,101,116,114,105,101,118,101,100,46>>]}]},{p,[],[<<65,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,97,32,124,32,99,104,97,114,97,99,116,101,114,32,105,115,32,106,117,115,116,32,97,32,112,97,114,116,32,111,102,32,116,104,101,32,101,110,99,108,111,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,59,32,105,116,32,105,115,32,110,111,116,32,97,32,110,101,115,116,101,100,32,97,108,116,101,114,110,97,116,105,111,110,32,119,105,116,104,32,111,110,108,121,32,111,110,101,32,97,108,116,101,114,110,97,116,105,118,101,46,32,84,104,101,32,101,102,102,101,99,116,32,111,102,32,40,42,84,72,69,78,41,32,101,120,116,101,110,100,115,32,98,101,121,111,110,100,32,115,117,99,104,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,111,32,116,104,101,32,101,110,99,108,111,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,101,114,101,32,65,44,32,66,44,32,97,110,100,32,115,111,32,111,110,44,32,97,114,101,32,99,111,109,112,108,101,120,32,112,97,116,116,101,114,110,32,102,114,97,103,109,101,110,116,115,32,116,104,97,116,32,100,111,32,110,111,116,32,99,111,110,116,97,105,110,32,97,110,121,32,124,32,99,104,97,114,97,99,116,101,114,115,32,97,116,32,116,104,105,115,32,108,101,118,101,108,58>>]},{pre,[],[{code,[],[<<65,32,40,66,40,42,84,72,69,78,41,67,41,32,124,32,68>>]}]},{p,[],[<<73,102,32,65,32,97,110,100,32,66,32,97,114,101,32,109,97,116,99,104,101,100,44,32,98,117,116,32,116,104,101,114,101,32,105,115,32,97,32,102,97,105,108,117,114,101,32,105,110,32,67,44,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,116,32,98,97,99,107,116,114,97,99,107,32,105,110,116,111,32,65,59,32,105,110,115,116,101,97,100,32,105,116,32,109,111,118,101,115,32,116,111,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,44,32,116,104,97,116,32,105,115,44,32,68,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,99,111,110,116,97,105,110,105,110,103,32,40,42,84,72,69,78,41,32,105,115,32,103,105,118,101,110,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,44,32,105,116,32,98,101,104,97,118,101,115,32,100,105,102,102,101,114,101,110,116,108,121,58>>]},{pre,[],[{code,[],[<<65,32,40,66,40,42,84,72,69,78,41,67,32,124,32,40,42,70,65,73,76,41,41,32,124,32,68>>]}]},{p,[],[<<84,104,101,32,101,102,102,101,99,116,32,111,102,32,40,42,84,72,69,78,41,32,105,115,32,110,111,119,32,99,111,110,102,105,110,101,100,32,116,111,32,116,104,101,32,105,110,110,101,114,32,115,117,98,112,97,116,116,101,114,110,46,32,65,102,116,101,114,32,97,32,102,97,105,108,117,114,101,32,105,110,32,67,44,32,109,97,116,99,104,105,110,103,32,109,111,118,101,115,32,116,111,32,40,42,70,65,73,76,41,44,32,119,104,105,99,104,32,99,97,117,115,101,115,32,116,104,101,32,119,104,111,108,101,32,115,117,98,112,97,116,116,101,114,110,32,116,111,32,102,97,105,108,44,32,97,115,32,116,104,101,114,101,32,97,114,101,32,110,111,32,109,111,114,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,116,111,32,116,114,121,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,119,32,98,97,99,107,116,114,97,99,107,32,105,110,116,111,32,65,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,99,111,110,115,105,100,101,114,101,100,32,97,115,32,104,97,118,105,110,103,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,97,115,32,111,110,108,121,32,111,110,101,32,105,115,32,101,118,101,114,32,117,115,101,100,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,124,32,99,104,97,114,97,99,116,101,114,32,105,110,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,97,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,46,32,73,103,110,111,114,105,110,103,32,119,104,105,116,101,115,112,97,99,101,44,32,99,111,110,115,105,100,101,114,58>>]},{pre,[],[{code,[],[<<94,46,42,63,32,40,63,40,63,61,97,41,32,97,32,124,32,98,40,42,84,72,69,78,41,99,32,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,98,97,34,44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,46,32,65,115,32,46,42,63,32,105,115,32,117,110,103,114,101,101,100,121,44,32,105,116,32,105,110,105,116,105,97,108,108,121,32,109,97,116,99,104,101,115,32,122,101,114,111,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,99,111,110,100,105,116,105,111,110,32,40,63,61,97,41,32,116,104,101,110,32,102,97,105,108,115,44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,34,98,34,32,105,115,32,109,97,116,99,104,101,100,44,32,98,117,116,32,34,99,34,32,105,115,32,110,111,116,46,32,65,116,32,116,104,105,115,32,112,111,105,110,116,44,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,116,32,98,97,99,107,116,114,97,99,107,32,116,111,32,46,42,63,32,97,115,32,99,97,110,32,112,101,114,104,97,112,115,32,98,101,32,101,120,112,101,99,116,101,100,32,102,114,111,109,32,116,104,101,32,112,114,101,115,101,110,99,101,32,111,102,32,116,104,101,32,124,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,115,105,110,103,108,101,32,97,108,116,101,114,110,97,116,105,118,101,32,116,104,97,116,32,99,111,109,112,114,105,115,101,115,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,44,32,97,110,100,32,115,111,32,116,104,101,32,109,97,116,99,104,32,102,97,105,108,115,46,32,40,73,102,32,116,104,101,114,101,32,119,97,115,32,97,32,98,97,99,107,116,114,97,99,107,32,105,110,116,111,32,46,42,63,44,32,97,108,108,111,119,105,110,103,32,105,116,32,116,111,32,109,97,116,99,104,32,34,98,34,44,32,116,104,101,32,109,97,116,99,104,32,119,111,117,108,100,32,115,117,99,99,101,101,100,46,41>>]},{p,[],[<<84,104,101,32,118,101,114,98,115,32,100,101,115,99,114,105,98,101,100,32,97,98,111,118,101,32,112,114,111,118,105,100,101,32,102,111,117,114,32,100,105,102,102,101,114,101,110,116,32,34,115,116,114,101,110,103,116,104,115,34,32,111,102,32,99,111,110,116,114,111,108,32,119,104,101,110,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,115,58>>]},{ul,[],[{li,[],[{p,[],[<<40,42,84,72,69,78,41,32,105,115,32,116,104,101,32,119,101,97,107,101,115,116,44,32,99,97,114,114,121,105,110,103,32,111,110,32,116,104,101,32,109,97,116,99,104,32,97,116,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,46>>]}]},{li,[],[{p,[],[<<40,42,80,82,85,78,69,41,32,99,111,109,101,115,32,110,101,120,116,44,32,102,97,105,108,115,32,116,104,101,32,109,97,116,99,104,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,114,116,105,110,103,32,112,111,115,105,116,105,111,110,44,32,98,117,116,32,97,108,108,111,119,115,32,97,110,32,97,100,118,97,110,99,101,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40,102,111,114,32,97,110,32,117,110,97,110,99,104,111,114,101,100,32,112,97,116,116,101,114,110,41,46>>]}]},{li,[],[{p,[],[<<40,42,83,75,73,80,41,32,105,115,32,115,105,109,105,108,97,114,44,32,101,120,99,101,112,116,32,116,104,97,116,32,116,104,101,32,97,100,118,97,110,99,101,32,99,97,110,32,98,101,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,99,104,97,114,97,99,116,101,114,46>>]}]},{li,[],[{p,[],[<<40,42,67,79,77,77,73,84,41,32,105,115,32,116,104,101,32,115,116,114,111,110,103,101,115,116,44,32,99,97,117,115,105,110,103,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46>>]}]}]},{p,[],[{em,[],[<<77,111,114,101,32,116,104,97,110,32,79,110,101,32,66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98>>]}]},{p,[],[<<73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,32,105,115,32,112,114,101,115,101,110,116,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,116,104,101,32,111,110,101,32,116,104,97,116,32,105,115,32,98,97,99,107,116,114,97,99,107,101,100,32,111,110,116,111,32,102,105,114,115,116,32,97,99,116,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,101,114,101,32,65,44,32,66,44,32,97,110,100,32,115,111,32,111,110,44,32,97,114,101,32,99,111,109,112,108,101,120,32,112,97,116,116,101,114,110,32,102,114,97,103,109,101,110,116,115,58>>]},{pre,[],[{code,[],[<<40,65,40,42,67,79,77,77,73,84,41,66,40,42,84,72,69,78,41,67,124,65,66,68,41>>]}]},{p,[],[<<73,102,32,65,32,109,97,116,99,104,101,115,32,98,117,116,32,66,32,102,97,105,108,115,44,32,116,104,101,32,98,97,99,107,116,114,97,99,107,32,116,111,32,40,42,67,79,77,77,73,84,41,32,99,97,117,115,101,115,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46,32,72,111,119,101,118,101,114,44,32,105,102,32,65,32,97,110,100,32,66,32,109,97,116,99,104,44,32,98,117,116,32,67,32,102,97,105,108,115,44,32,116,104,101,32,98,97,99,107,116,114,97,99,107,32,116,111,32,40,42,84,72,69,78,41,32,99,97,117,115,101,115,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,32,40,65,66,68,41,32,116,111,32,98,101,32,116,114,105,101,100,46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,105,115,32,99,111,110,115,105,115,116,101,110,116,44,32,98,117,116,32,105,115,32,110,111,116,32,97,108,119,97,121,115,32,116,104,101,32,115,97,109,101,32,97,115,32,105,110,32,80,101,114,108,46,32,73,116,32,109,101,97,110,115,32,116,104,97,116,32,105,102,32,116,119,111,32,111,114,32,109,111,114,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,97,112,112,101,97,114,32,105,110,32,115,117,99,99,101,115,115,105,111,110,44,32,116,104,101,32,108,97,115,116,32,111,102,32,116,104,101,109,32,104,97,115,32,110,111,32,101,102,102,101,99,116,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<46,46,46,40,42,67,79,77,77,73,84,41,40,42,80,82,85,78,69,41,46,46,46>>]}]},{p,[],[<<73,102,32,116,104,101,114,101,32,105,115,32,97,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,116,111,32,116,104,101,32,114,105,103,104,116,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,111,110,116,111,32,40,42,80,82,85,78,69,41,32,99,97,117,115,101,115,32,105,116,32,116,111,32,98,101,32,116,114,105,103,103,101,114,101,100,44,32,97,110,100,32,105,116,115,32,97,99,116,105,111,110,32,105,115,32,116,97,107,101,110,46,32,84,104,101,114,101,32,99,97,110,32,110,101,118,101,114,32,98,101,32,97,32,98,97,99,107,116,114,97,99,107,32,111,110,116,111,32,40,42,67,79,77,77,73,84,41,46>>]},{p,[],[{em,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115,32,105,110,32,82,101,112,101,97,116,101,100,32,71,114,111,117,112,115>>]}]},{p,[],[<<80,67,82,69,32,100,105,102,102,101,114,115,32,102,114,111,109,32,80,101,114,108,32,105,110,32,105,116,115,32,104,97,110,100,108,105,110,103,32,111,102,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,105,110,32,114,101,112,101,97,116,101,100,32,103,114,111,117,112,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,58>>]},{pre,[],[{code,[],[<<47,40,97,40,42,67,79,77,77,73,84,41,98,41,43,97,99,47>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,97,98,97,99,34,44,32,80,101,114,108,32,109,97,116,99,104,101,115,44,32,98,117,116,32,80,67,82,69,32,102,97,105,108,115,32,98,101,99,97,117,115,101,32,116,104,101,32,40,42,67,79,77,77,73,84,41,32,105,110,32,116,104,101,32,115,101,99,111,110,100,32,114,101,112,101,97,116,32,111,102,32,116,104,101,32,103,114,111,117,112,32,97,99,116,115,46>>]},{p,[],[{em,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115,32,105,110,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<40,42,70,65,73,76,41,32,105,110,32,97,110,32,97,115,115,101,114,116,105,111,110,32,104,97,115,32,105,116,115,32,110,111,114,109,97,108,32,101,102,102,101,99,116,58,32,105,116,32,102,111,114,99,101,115,32,97,110,32,105,109,109,101,100,105,97,116,101,32,98,97,99,107,116,114,97,99,107,46>>]},{p,[],[<<40,42,65,67,67,69,80,84,41,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,99,97,117,115,101,115,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,116,111,32,115,117,99,99,101,101,100,32,119,105,116,104,111,117,116,32,97,110,121,32,102,117,114,116,104,101,114,32,112,114,111,99,101,115,115,105,110,103,46,32,73,110,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,44,32,40,42,65,67,67,69,80,84,41,32,99,97,117,115,101,115,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,116,111,32,102,97,105,108,32,119,105,116,104,111,117,116,32,97,110,121,32,102,117,114,116,104,101,114,32,112,114,111,99,101,115,115,105,110,103,46>>]},{p,[],[<<84,104,101,32,111,116,104,101,114,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,97,114,101,32,110,111,116,32,116,114,101,97,116,101,100,32,115,112,101,99,105,97,108,108,121,32,105,102,32,116,104,101,121,32,97,112,112,101,97,114,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,46,32,73,110,32,112,97,114,116,105,99,117,108,97,114,44,32,40,42,84,72,69,78,41,32,115,107,105,112,115,32,116,111,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,105,110,110,101,114,109,111,115,116,32,101,110,99,108,111,115,105,110,103,32,103,114,111,117,112,32,116,104,97,116,32,104,97,115,32,97,108,116,101,114,110,97,116,105,111,110,115,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32,116,104,105,115,32,105,115,32,119,105,116,104,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,46>>]},{p,[],[<<78,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,44,32,104,111,119,101,118,101,114,44,32,100,105,102,102,101,114,101,110,116,44,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,99,104,97,110,103,105,110,103,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,105,110,116,111,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,99,104,97,110,103,101,115,32,105,116,115,32,114,101,115,117,108,116,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,40,42,67,79,77,77,73,84,41,44,32,40,42,83,75,73,80,41,44,32,111,114,32,40,42,80,82,85,78,69,41,32,99,97,117,115,101,115,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,116,111,32,98,101,32,116,114,117,101,44,32,119,105,116,104,111,117,116,32,99,111,110,115,105,100,101,114,105,110,103,32,97,110,121,32,102,117,114,116,104,101,114,32,97,108,116,101,114,110,97,116,105,118,101,32,98,114,97,110,99,104,101,115,32,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,40,42,84,72,69,78,41,32,99,97,117,115,101,115,32,105,116,32,116,111,32,115,107,105,112,32,116,111,32,116,104,101,32,110,101,120,116,32,101,110,99,108,111,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,32,119,105,116,104,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,40,116,104,101,32,110,111,114,109,97,108,32,98,101,104,97,118,105,111,114,41,44,32,98,117,116,32,105,102,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,115,117,99,104,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,44,32,40,42,84,72,69,78,41,32,98,101,104,97,118,101,115,32,108,105,107,101,32,40,42,80,82,85,78,69,41,46>>]},{p,[],[{em,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115,32,105,110,32,83,117,98,114,111,117,116,105,110,101,115>>]}]},{p,[],[<<84,104,101,115,101,32,98,101,104,97,118,105,111,114,115,32,111,99,99,117,114,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,99,97,108,108,101,100,32,114,101,99,117,114,115,105,118,101,108,121,46,32,84,104,101,32,116,114,101,97,116,109,101,110,116,32,111,102,32,115,117,98,114,111,117,116,105,110,101,115,32,105,110,32,80,101,114,108,32,105,115,32,100,105,102,102,101,114,101,110,116,32,105,110,32,115,111,109,101,32,99,97,115,101,115,46>>]},{ul,[],[{li,[],[{p,[],[<<40,42,70,65,73,76,41,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,104,97,115,32,105,116,115,32,110,111,114,109,97,108,32,101,102,102,101,99,116,58,32,105,116,32,102,111,114,99,101,115,32,97,110,32,105,109,109,101,100,105,97,116,101,32,98,97,99,107,116,114,97,99,107,46>>]}]},{li,[],[{p,[],[<<40,42,65,67,67,69,80,84,41,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,117,115,101,115,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,97,116,99,104,32,116,111,32,115,117,99,99,101,101,100,32,119,105,116,104,111,117,116,32,97,110,121,32,102,117,114,116,104,101,114,32,112,114,111,99,101,115,115,105,110,103,46,32,77,97,116,99,104,105,110,103,32,116,104,101,110,32,99,111,110,116,105,110,117,101,115,32,97,102,116,101,114,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,46>>]}]},{li,[],[{p,[],[<<40,42,67,79,77,77,73,84,41,44,32,40,42,83,75,73,80,41,44,32,97,110,100,32,40,42,80,82,85,78,69,41,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,117,115,101,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46>>]}]},{li,[],[{p,[],[<<40,42,84,72,69,78,41,32,115,107,105,112,115,32,116,111,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,105,110,110,101,114,109,111,115,116,32,101,110,99,108,111,115,105,110,103,32,103,114,111,117,112,32,119,105,116,104,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,104,97,115,32,97,108,116,101,114,110,97,116,105,118,101,115,46,32,73,102,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,99,104,32,103,114,111,117,112,32,119,105,116,104,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,44,32,40,42,84,72,69,78,41,32,99,97,117,115,101,115,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46>>]}]}]}]},#{name => <<114,101>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,114,101,46,120,109,108],types => #{{compile_option,0} => {attribute,27,type,{compile_option,{type,27,union,[{atom,27,unicode},{atom,27,anchored},{atom,27,caseless},{atom,27,dollar_endonly},{atom,28,dotall},{atom,28,extended},{atom,28,firstline},{atom,28,multiline},{atom,29,no_auto_capture},{atom,29,dupnames},{atom,29,ungreedy},{type,30,tuple,[{atom,30,newline},{user_type,30,nl_spec,[]}]},{atom,31,bsr_anycrlf},{atom,31,bsr_unicode},{atom,32,no_start_optimize},{atom,32,ucp},{atom,32,never_utf}]},[]}},{mp,0} => {attribute,23,type,{mp,{type,23,tuple,[{atom,23,re_pattern},{var,23,'_'},{var,23,'_'},{var,23,'_'},{var,23,'_'}]},[]}},{nl_spec,0} => {attribute,25,type,{nl_spec,{type,25,union,[{atom,25,cr},{atom,25,crlf},{atom,25,lf},{atom,25,anycrlf},{atom,25,any}]},[]}}}},[{{function,version,0},[{file,[114,101,46,101,114,108]},{location,40}],[<<118,101,114,115,105,111,110,47,48>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,97,32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,80,67,82,69,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,115,121,115,116,101,109,32,116,104,97,116,32,119,97,115,32,117,115,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,47,79,84,80,32,99,111,109,112,105,108,97,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,56,49>>,signature => [{attribute,40,spec,{{version,0},[{type,40,'fun',[{type,40,product,[]},{type,40,binary,[]}]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,compile,1},[{file,[114,101,46,101,114,108]},{location,49}],[<<99,111,109,112,105,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<99,111,109,112,105,108,101,40,82,101,103,101,120,112,44,91,93,41>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,56,57>>,signature => [{attribute,49,spec,{{compile,1},[{type,49,bounded_fun,[{type,49,'fun',[{type,49,product,[{var,49,'Regexp'}]},{type,49,union,[{type,49,tuple,[{atom,49,ok},{var,49,'MP'}]},{type,49,tuple,[{atom,49,error},{var,49,'ErrSpec'}]}]}]},[{type,50,constraint,[{atom,50,is_subtype},[{var,50,'Regexp'},{type,50,iodata,[]}]]},{type,51,constraint,[{atom,51,is_subtype},[{var,51,'MP'},{user_type,51,mp,[]}]]},{type,52,constraint,[{atom,52,is_subtype},[{var,52,'ErrSpec'},{type,52,tuple,[{ann_type,52,[{var,52,'ErrString'},{type,52,string,[]}]},{ann_type,52,[{var,52,'Position'},{type,52,non_neg_integer,[]}]}]}]]}]]}]}}]}},{{function,compile,2},[{file,[114,101,46,101,114,108]},{location,57}],[<<99,111,109,112,105,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,105,108,101,115,32,97,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,119,105,116,104,32,116,104,101,32,115,121,110,116,97,120,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,44,32,105,110,116,111,32,97,110,32,105,110,116,101,114,110,97,108,32,102,111,114,109,97,116,32,116,111,32,98,101,32,117,115,101,100,32,108,97,116,101,114,32,97,115,32,97,32,112,97,114,97,109,101,116,101,114,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<46>>]},{p,[],[<<67,111,109,112,105,108,105,110,103,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,98,101,102,111,114,101,32,109,97,116,99,104,105,110,103,32,105,115,32,117,115,101,102,117,108,32,105,102,32,116,104,101,32,115,97,109,101,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,109,97,116,99,104,105,110,103,32,97,103,97,105,110,115,116,32,109,117,108,116,105,112,108,101,32,115,117,98,106,101,99,116,115,32,100,117,114,105,110,103,32,116,104,101,32,108,105,102,101,116,105,109,101,32,111,102,32,116,104,101,32,112,114,111,103,114,97,109,46,32,67,111,109,112,105,108,105,110,103,32,111,110,99,101,32,97,110,100,32,101,120,101,99,117,116,105,110,103,32,109,97,110,121,32,116,105,109,101,115,32,105,115,32,102,97,114,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,111,109,112,105,108,105,110,103,32,101,97,99,104,32,116,105,109,101,32,111,110,101,32,119,97,110,116,115,32,116,111,32,109,97,116,99,104,46>>]},{p,[],[<<87,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<44,32,111,116,104,101,114,119,105,115,101,32,97,115,32,97,110,121,32,118,97,108,105,100,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<46>>]},{a,[{id,<<99,111,109,112,105,108,101,95,111,112,116,105,111,110,115>>}],[]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<117,110,105,99,111,100,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<32,97,110,100,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,99,111,100,101,32,105,115,32,116,111,32,98,101,32,114,117,110,32,97,103,97,105,110,115,116,32,97,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<32,115,117,98,106,101,99,116,46,32,65,108,115,111,32,99,111,110,115,105,100,101,114,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,119,104,101,110,32,117,115,105,110,103,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,46>>]}]},{dt,[],[{code,[],[<<97,110,99,104,111,114,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,97,116,116,101,114,110,32,105,115,32,102,111,114,99,101,100,32,116,111,32,98,101,32,34,97,110,99,104,111,114,101,100,34,44,32,116,104,97,116,32,105,115,44,32,105,116,32,105,115,32,99,111,110,115,116,114,97,105,110,101,100,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,97,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,110,32,116,104,101,32,115,116,114,105,110,103,32,116,104,97,116,32,105,115,32,115,101,97,114,99,104,101,100,32,40,116,104,101,32,34,115,117,98,106,101,99,116,32,115,116,114,105,110,103,34,41,46,32,84,104,105,115,32,101,102,102,101,99,116,32,99,97,110,32,97,108,115,111,32,98,101,32,97,99,104,105,101,118,101,100,32,98,121,32,97,112,112,114,111,112,114,105,97,116,101,32,99,111,110,115,116,114,117,99,116,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,105,116,115,101,108,102,46>>]}]},{dt,[],[{code,[],[<<99,97,115,101,108,101,115,115>>]}]},{dd,[],[{p,[],[<<76,101,116,116,101,114,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,32,98,111,116,104,32,117,112,112,101,114,99,97,115,101,32,97,110,100,32,108,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,115,46,32,73,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,105>>]},<<32,97,110,100,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,105,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,85,112,112,101,114,99,97,115,101,32,97,110,100,32,108,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,115,32,97,114,101,32,100,101,102,105,110,101,100,32,97,115,32,105,110,32,116,104,101,32,73,83,79,32,56,56,53,57,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,46>>]}]},{dt,[],[{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]}]},{dd,[],[{p,[],[<<65,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,87,105,116,104,111,117,116,32,116,104,105,115,32,111,112,116,105,111,110,44,32,97,32,100,111,108,108,97,114,32,97,108,115,111,32,109,97,116,99,104,101,115,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,40,98,117,116,32,110,111,116,32,98,101,102,111,114,101,32,97,110,121,32,111,116,104,101,114,32,110,101,119,108,105,110,101,115,41,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,105,103,110,111,114,101,100,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,46,32,84,104,101,114,101,32,105,115,32,110,111,32,101,113,117,105,118,97,108,101,110,116,32,111,112,116,105,111,110,32,105,110,32,80,101,114,108,44,32,97,110,100,32,105,116,32,99,97,110,110,111,116,32,98,101,32,115,101,116,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,46>>]}]},{dt,[],[{code,[],[<<100,111,116,97,108,108>>]}]},{dd,[],[{p,[],[<<65,32,100,111,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,44,32,105,110,99,108,117,100,105,110,103,32,116,104,111,115,101,32,105,110,100,105,99,97,116,105,110,103,32,110,101,119,108,105,110,101,46,32,87,105,116,104,111,117,116,32,105,116,44,32,97,32,100,111,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,119,104,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,105,115,32,97,116,32,97,32,110,101,119,108,105,110,101,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,115>>]},<<32,97,110,100,32,105,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,115,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,65,32,110,101,103,97,116,105,118,101,32,99,108,97,115,115,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<91,94,97,93>>]},<<44,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,44,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,116,104,101,32,115,101,116,116,105,110,103,32,111,102,32,116,104,105,115,32,111,112,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<101,120,116,101,110,100,101,100>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,101,116,44,32,109,111,115,116,32,119,104,105,116,101,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,97,114,101,32,116,111,116,97,108,108,121,32,105,103,110,111,114,101,100,32,101,120,99,101,112,116,32,119,104,101,110,32,101,115,99,97,112,101,100,32,111,114,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,72,111,119,101,118,101,114,44,32,119,104,105,116,101,32,115,112,97,99,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,119,105,116,104,105,110,32,115,101,113,117,101,110,99,101,115,32,115,117,99,104,32,97,115,32>>,{code,[],[<<40,63,62>>]},<<32,116,104,97,116,32,105,110,116,114,111,100,117,99,101,32,118,97,114,105,111,117,115,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,110,111,114,32,119,105,116,104,105,110,32,97,32,110,117,109,101,114,105,99,97,108,32,113,117,97,110,116,105,102,105,101,114,32,115,117,99,104,32,97,115,32>>,{code,[],[<<123,49,44,51,125>>]},<<46,32,72,111,119,101,118,101,114,44,32,105,103,110,111,114,97,98,108,101,32,119,104,105,116,101,32,115,112,97,99,101,32,105,115,32,112,101,114,109,105,116,116,101,100,32,98,101,116,119,101,101,110,32,97,110,32,105,116,101,109,32,97,110,100,32,97,32,102,111,108,108,111,119,105,110,103,32,113,117,97,110,116,105,102,105,101,114,32,97,110,100,32,98,101,116,119,101,101,110,32,97,32,113,117,97,110,116,105,102,105,101,114,32,97,110,100,32,97,32,102,111,108,108,111,119,105,110,103,32,43,32,116,104,97,116,32,105,110,100,105,99,97,116,101,115,32,112,111,115,115,101,115,115,105,118,101,110,101,115,115,46>>]},{p,[],[<<87,104,105,116,101,32,115,112,97,99,101,32,100,105,100,32,110,111,116,32,117,115,101,100,32,116,111,32,105,110,99,108,117,100,101,32,116,104,101,32,86,84,32,99,104,97,114,97,99,116,101,114,32,40,99,111,100,101,32,49,49,41,44,32,98,101,99,97,117,115,101,32,80,101,114,108,32,100,105,100,32,110,111,116,32,116,114,101,97,116,32,116,104,105,115,32,99,104,97,114,97,99,116,101,114,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,46,32,72,111,119,101,118,101,114,44,32,80,101,114,108,32,99,104,97,110,103,101,100,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,44,32,115,111,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,44,32,97,110,100,32,86,84,32,105,115,32,110,111,119,32,116,114,101,97,116,101,100,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,46>>]},{p,[],[<<84,104,105,115,32,97,108,115,111,32,99,97,117,115,101,115,32,99,104,97,114,97,99,116,101,114,115,32,98,101,116,119,101,101,110,32,97,110,32,117,110,101,115,99,97,112,101,100,32,35,32,111,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,97,110,100,32,116,104,101,32,110,101,120,116,32,110,101,119,108,105,110,101,44,32,105,110,99,108,117,115,105,118,101,44,32,116,111,32,98,101,32,105,103,110,111,114,101,100,46,32,84,104,105,115,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,39,115,32>>,{code,[],[<<47,120>>]},<<32,111,112,116,105,111,110,44,32,97,110,100,32,105,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,120,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46>>]},{p,[],[<<87,105,116,104,32,116,104,105,115,32,111,112,116,105,111,110,44,32,99,111,109,109,101,110,116,115,32,105,110,115,105,100,101,32,99,111,109,112,108,105,99,97,116,101,100,32,112,97,116,116,101,114,110,115,32,99,97,110,32,98,101,32,105,110,99,108,117,100,101,100,46,32,72,111,119,101,118,101,114,44,32,110,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,97,112,112,108,105,101,115,32,111,110,108,121,32,116,111,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114,115,46,32,87,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,99,97,110,32,110,101,118,101,114,32,97,112,112,101,97,114,32,119,105,116,104,105,110,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,115,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,102,111,114,32,101,120,97,109,112,108,101,32,119,105,116,104,105,110,32,115,101,113,117,101,110,99,101,32>>,{code,[],[<<40,63,40>>]},<<32,116,104,97,116,32,105,110,116,114,111,100,117,99,101,115,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,46>>]}]},{dt,[],[{code,[],[<<102,105,114,115,116,108,105,110,101>>]}]},{dd,[],[{p,[],[<<65,110,32,117,110,97,110,99,104,111,114,101,100,32,112,97,116,116,101,114,110,32,105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,109,97,116,99,104,32,98,101,102,111,114,101,32,111,114,32,97,116,32,116,104,101,32,102,105,114,115,116,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,108,116,104,111,117,103,104,32,116,104,101,32,109,97,116,99,104,101,100,32,116,101,120,116,32,99,97,110,32,99,111,110,116,105,110,117,101,32,111,118,101,114,32,116,104,101,32,110,101,119,108,105,110,101,46>>]}]},{dt,[],[{code,[],[<<109,117,108,116,105,108,105,110,101>>]}]},{dd,[],[{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,80,67,82,69,32,116,114,101,97,116,115,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,97,115,32,99,111,110,115,105,115,116,105,110,103,32,111,102,32,97,32,115,105,110,103,108,101,32,108,105,110,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,101,118,101,110,32,105,102,32,105,116,32,99,111,110,116,97,105,110,115,32,110,101,119,108,105,110,101,115,41,46,32,84,104,101,32,34,115,116,97,114,116,32,111,102,32,108,105,110,101,34,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,40>>,{code,[],[<<94>>]},<<41,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,119,104,105,108,101,32,116,104,101,32,34,101,110,100,32,111,102,32,108,105,110,101,34,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,40>>,{code,[],[<<36>>]},<<41,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,111,114,32,98,101,102,111,114,101,32,97,32,116,101,114,109,105,110,97,116,105,110,103,32,110,101,119,108,105,110,101,32,40,117,110,108,101,115,115,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,41,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,105,110,32,80,101,114,108,46>>]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,34,115,116,97,114,116,32,111,102,32,108,105,110,101,34,32,97,110,100,32,34,101,110,100,32,111,102,32,108,105,110,101,34,32,99,111,110,115,116,114,117,99,116,115,32,109,97,116,99,104,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,105,110,103,32,111,114,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,105,110,116,101,114,110,97,108,32,110,101,119,108,105,110,101,115,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,114,101,115,112,101,99,116,105,118,101,108,121,44,32,97,115,32,119,101,108,108,32,97,115,32,97,116,32,116,104,101,32,118,101,114,121,32,115,116,97,114,116,32,97,110,100,32,101,110,100,46,32,84,104,105,115,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,109>>]},<<32,97,110,100,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,109,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,73,102,32,116,104,101,114,101,32,97,114,101,32,110,111,32,110,101,119,108,105,110,101,115,32,105,110,32,97,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,111,114,32,110,111,32,111,99,99,117,114,114,101,110,99,101,115,32,111,102,32>>,{code,[],[<<94>>]},<<32,111,114,32>>,{code,[],[<<36>>]},<<32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,115,101,116,116,105,110,103,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,104,97,115,32,110,111,32,101,102,102,101,99,116,46>>]}]},{dt,[],[{code,[],[<<110,111,95,97,117,116,111,95,99,97,112,116,117,114,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,104,101,32,117,115,101,32,111,102,32,110,117,109,98,101,114,101,100,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,65,110,121,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32>>,{code,[],[<<63>>]},<<32,98,101,104,97,118,101,115,32,97,115,32,105,102,32,105,116,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32>>,{code,[],[<<63,58>>]},<<46,32,78,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,115,116,105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,99,97,112,116,117,114,105,110,103,32,40,97,110,100,32,116,104,101,121,32,97,99,113,117,105,114,101,32,110,117,109,98,101,114,115,32,105,110,32,116,104,101,32,117,115,117,97,108,32,119,97,121,41,46,32,84,104,101,114,101,32,105,115,32,110,111,32,101,113,117,105,118,97,108,101,110,116,32,111,112,116,105,111,110,32,105,110,32,80,101,114,108,46>>]}]},{dt,[],[{code,[],[<<100,117,112,110,97,109,101,115>>]}]},{dd,[],[{p,[],[<<78,97,109,101,115,32,117,115,101,100,32,116,111,32,105,100,101,110,116,105,102,121,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,110,101,101,100,32,110,111,116,32,98,101,32,117,110,105,113,117,101,46,32,84,104,105,115,32,99,97,110,32,98,101,32,104,101,108,112,102,117,108,32,102,111,114,32,99,101,114,116,97,105,110,32,116,121,112,101,115,32,111,102,32,112,97,116,116,101,114,110,32,119,104,101,110,32,105,116,32,105,115,32,107,110,111,119,110,32,116,104,97,116,32,111,110,108,121,32,111,110,101,32,105,110,115,116,97,110,99,101,32,111,102,32,116,104,101,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,101,118,101,114,32,98,101,32,109,97,116,99,104,101,100,46,32,77,111,114,101,32,100,101,116,97,105,108,115,32,111,102,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,98,101,108,111,119,46>>]}]},{dt,[],[{code,[],[<<117,110,103,114,101,101,100,121>>]}]},{dd,[],[{p,[],[<<73,110,118,101,114,116,115,32,116,104,101,32,34,103,114,101,101,100,105,110,101,115,115,34,32,111,102,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,115,32,115,111,32,116,104,97,116,32,116,104,101,121,32,97,114,101,32,110,111,116,32,103,114,101,101,100,121,32,98,121,32,100,101,102,97,117,108,116,44,32,98,117,116,32,98,101,99,111,109,101,32,103,114,101,101,100,121,32,105,102,32,102,111,108,108,111,119,101,100,32,98,121,32,34,63,34,46,32,73,116,32,105,115,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,80,101,114,108,46,32,73,116,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,97,32>>,{code,[],[<<40,63,85,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,32,119,105,116,104,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]}]},{dd,[],[{p,[],[<<79,118,101,114,114,105,100,101,115,32,116,104,101,32,100,101,102,97,117,108,116,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,97,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,119,104,105,99,104,32,105,115,32,76,70,32,40,65,83,67,73,73,32,49,48,41,32,105,110,32,69,114,108,97,110,103,46>>]},{dl,[],[{dt,[],[{code,[],[<<99,114>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32>>,{code,[],[<<99,114>>]},<<32,40,65,83,67,73,73,32,49,51,41,46>>]}]},{dt,[],[{code,[],[<<108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,76,70,32,40,65,83,67,73,73,32,49,48,41,44,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<99,114,108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,67,82,76,70,32,40,65,83,67,73,73,32,49,51,32,102,111,108,108,111,119,101,100,32,98,121,32,65,83,67,73,73,32,49,48,41,32,115,101,113,117,101,110,99,101,46>>]}]},{dt,[],[{code,[],[<<97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,112,114,101,99,101,100,105,110,103,32,115,101,113,117,101,110,99,101,115,32,105,115,32,116,111,32,98,101,32,114,101,99,111,103,110,105,122,101,100,46>>]}]},{dt,[],[{code,[],[<<97,110,121>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,115,32,97,98,111,118,101,44,32,97,110,100,32,116,104,101,32,85,110,105,99,111,100,101,32,115,101,113,117,101,110,99,101,115,32,86,84,32,40,118,101,114,116,105,99,97,108,32,116,97,98,44,32,85,43,48,48,48,66,41,44,32,70,70,32,40,102,111,114,109,102,101,101,100,44,32,85,43,48,48,48,67,41,44,32,78,69,76,32,40,110,101,120,116,32,108,105,110,101,44,32,85,43,48,48,56,53,41,44,32,76,83,32,40,108,105,110,101,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,56,41,44,32,97,110,100,32,80,83,32,40,112,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,57,41,46>>]}]}]}]},{dt,[],[{code,[],[<<98,115,114,95,97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,116,104,101,32,67,82,44,32,76,70,44,32,111,114,32,67,82,76,70,32,115,101,113,117,101,110,99,101,115,44,32,110,111,116,32,116,104,101,32,85,110,105,99,111,100,101,45,115,112,101,99,105,102,105,99,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,46>>]}]},{dt,[],[{code,[],[<<98,115,114,95,117,110,105,99,111,100,101>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,97,108,108,32,116,104,101,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,99,108,117,100,105,110,103,32,67,82,76,70,44,32,97,110,100,32,115,111,32,111,110,44,32,116,104,101,32,100,101,102,97,117,108,116,41,46>>]}]},{dt,[],[{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,99,97,110,32,109,97,108,102,117,110,99,116,105,111,110,32,105,102,32,34,83,112,101,99,105,97,108,32,115,116,97,114,116,45,111,102,45,112,97,116,116,101,114,110,32,105,116,101,109,115,34,32,97,114,101,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,65,32,116,121,112,105,99,97,108,32,101,120,97,109,112,108,101,32,119,111,117,108,100,32,98,101,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,34,68,69,70,65,66,67,34,32,97,103,97,105,110,115,116,32,34,40,42,67,79,77,77,73,84,41,65,66,67,34,44,32,119,104,101,114,101,32,116,104,101,32,115,116,97,114,116,32,111,112,116,105,109,105,122,97,116,105,111,110,32,111,102,32,80,67,82,69,32,119,111,117,108,100,32,115,107,105,112,32,116,104,101,32,115,117,98,106,101,99,116,32,117,112,32,116,111,32,34,65,34,32,97,110,100,32,110,101,118,101,114,32,114,101,97,108,105,122,101,32,116,104,97,116,32,116,104,101,32,40,42,67,79,77,77,73,84,41,32,105,110,115,116,114,117,99,116,105,111,110,32,105,115,32,116,111,32,104,97,118,101,32,109,97,100,101,32,116,104,101,32,109,97,116,99,104,105,110,103,32,102,97,105,108,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,111,110,108,121,32,114,101,108,101,118,97,110,116,32,105,102,32,121,111,117,32,117,115,101,32,34,115,116,97,114,116,45,111,102,45,112,97,116,116,101,114,110,32,105,116,101,109,115,34,44,32,97,115,32,100,105,115,99,117,115,115,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,101,103,101,120,112,95,115,121,110,116,97,120,95,100,101,116,97,105,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<80,67,82,69,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,68,101,116,97,105,108,115>>]},<<46>>]}]},{dt,[],[{code,[],[<<117,99,112>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,116,111,32,98,101,32,117,115,101,100,32,119,104,101,110,32,114,101,115,111,108,118,105,110,103,32,92,66,44,32,92,98,44,32,92,68,44,32,92,100,44,32,92,83,44,32,92,115,44,32,92,87,32,97,110,100,32,92,119,46,32,87,105,116,104,111,117,116,32,116,104,105,115,32,102,108,97,103,44,32,111,110,108,121,32,73,83,79,32,76,97,116,105,110,45,49,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,117,115,101,100,46,32,85,115,105,110,103,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,104,117,114,116,115,32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,117,116,32,105,115,32,115,101,109,97,110,116,105,99,97,108,108,121,32,99,111,114,114,101,99,116,32,119,104,101,110,32,119,111,114,107,105,110,103,32,119,105,116,104,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,98,101,121,111,110,100,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,114,97,110,103,101,46>>]}]},{dt,[],[{code,[],[<<110,101,118,101,114,95,117,116,102>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,116,104,101,32,40,42,85,84,70,41,32,97,110,100,47,111,114,32,40,42,85,84,70,56,41,32,34,115,116,97,114,116,45,111,102,45,112,97,116,116,101,114,110,32,105,116,101,109,115,34,32,97,114,101,32,102,111,114,98,105,100,100,101,110,46,32,84,104,105,115,32,102,108,97,103,32,99,97,110,110,111,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<46,32,85,115,101,102,117,108,32,105,102,32,73,83,79,32,76,97,116,105,110,45,49,32,112,97,116,116,101,114,110,115,32,102,114,111,109,32,97,110,32,101,120,116,101,114,110,97,108,32,115,111,117,114,99,101,32,97,114,101,32,116,111,32,98,101,32,99,111,109,112,105,108,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,57,55>>,signature => [{attribute,57,spec,{{compile,2},[{type,57,bounded_fun,[{type,57,'fun',[{type,57,product,[{var,57,'Regexp'},{var,57,'Options'}]},{type,57,union,[{type,57,tuple,[{atom,57,ok},{var,57,'MP'}]},{type,57,tuple,[{atom,57,error},{var,57,'ErrSpec'}]}]}]},[{type,58,constraint,[{atom,58,is_subtype},[{var,58,'Regexp'},{type,58,union,[{type,58,iodata,[]},{remote_type,58,[{atom,58,unicode},{atom,58,charlist},[]]}]}]]},{type,59,constraint,[{atom,59,is_subtype},[{var,59,'Options'},{type,59,list,[{var,59,'Option'}]}]]},{type,60,constraint,[{atom,60,is_subtype},[{var,60,'Option'},{user_type,60,compile_option,[]}]]},{type,61,constraint,[{atom,61,is_subtype},[{var,61,'MP'},{user_type,61,mp,[]}]]},{type,62,constraint,[{atom,62,is_subtype},[{var,62,'ErrSpec'},{type,62,tuple,[{ann_type,62,[{var,62,'ErrString'},{type,62,string,[]}]},{ann_type,62,[{var,62,'Position'},{type,62,non_neg_integer,[]}]}]}]]}]]}]}}]}},{{function,inspect,2},[{file,[114,101,46,101,114,108]},{location,143}],[<<105,110,115,112,101,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,97,107,101,115,32,97,32,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,110,100,32,97,110,32,105,116,101,109,44,32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,114,101,108,101,118,97,110,116,32,100,97,116,97,32,102,114,111,109,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,84,104,101,32,111,110,108,121,32,115,117,112,112,111,114,116,101,100,32,105,116,101,109,32,105,115,32>>,{code,[],[<<110,97,109,101,108,105,115,116>>]},<<44,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,110,97,109,101,108,105,115,116,44,32,91,98,105,110,97,114,121,40,41,93,125>>]},<<44,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,40,117,110,105,113,117,101,41,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<49,62,32,123,111,107,44,77,80,125,32,61,32,114,101,58,99,111,109,112,105,108,101,40,34,40,63,60,65,62,65,41,124,40,63,60,66,62,66,41,124,40,63,60,67,62,67,41,34,41,46,10,123,111,107,44,123,114,101,95,112,97,116,116,101,114,110,44,51,44,48,44,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,60,54,57,44,56,50,44,54,55,44,56,48,44,49,49,57,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,49,44,48,44,48,44,48,44,50,53,53,44,50,53,53,44,50,53,53,44,50,53,53,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,50,53,53,44,50,53,53,44,46,46,46,62,62,125,125,10,50,62,32,114,101,58,105,110,115,112,101,99,116,40,77,80,44,110,97,109,101,108,105,115,116,41,46,10,123,110,97,109,101,108,105,115,116,44,91,60,60,34,65,34,62,62,44,60,60,34,66,34,62,62,44,60,60,34,67,34,62,62,93,125,10,51,62,32,123,111,107,44,77,80,68,125,32,61,32,114,101,58,99,111,109,112,105,108,101,40,34,40,63,60,67,62,65,41,124,40,63,60,66,62,66,41,124,40,63,60,67,62,67,41,34,44,91,100,117,112,110,97,109,101,115,93,41,46,10,123,111,107,44,123,114,101,95,112,97,116,116,101,114,110,44,51,44,48,44,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,60,54,57,44,56,50,44,54,55,44,56,48,44,49,49,57,44,48,44,48,44,48,44,48,44,48,44,56,44,48,44,49,44,48,44,48,44,48,44,50,53,53,44,50,53,53,44,50,53,53,44,50,53,53,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,50,53,53,44,50,53,53,44,46,46,46,62,62,125,125,10,52,62,32,114,101,58,105,110,115,112,101,99,116,40,77,80,68,44,110,97,109,101,108,105,115,116,41,46,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,123,110,97,109,101,108,105,115,116,44,91,60,60,34,66,34,62,62,44,60,60,34,67,34,62,62,93,125>>]}]},{p,[],[<<78,111,116,105,99,101,32,105,110,32,116,104,101,32,115,101,99,111,110,100,32,101,120,97,109,112,108,101,32,116,104,97,116,32,116,104,101,32,100,117,112,108,105,99,97,116,101,32,110,97,109,101,32,111,110,108,121,32,111,99,99,117,114,115,32,111,110,99,101,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,44,32,97,110,100,32,116,104,97,116,32,116,104,101,32,108,105,115,116,32,105,115,32,105,110,32,97,108,112,104,97,98,101,116,105,99,97,108,32,111,114,100,101,114,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,114,101,32,116,104,101,32,110,97,109,101,115,32,97,114,101,32,112,111,115,105,116,105,111,110,101,100,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,110,97,109,101,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,111,114,100,101,114,32,111,102,32,99,97,112,116,117,114,101,100,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,105,102,32>>,{code,[],[<<123,99,97,112,116,117,114,101,44,32,97,108,108,95,110,97,109,101,115,125>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,110,32,111,112,116,105,111,110,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<46,32,89,111,117,32,99,97,110,32,116,104,101,114,101,102,111,114,101,32,99,114,101,97,116,101,32,97,32,110,97,109,101,45,116,111,45,118,97,108,117,101,32,109,97,112,112,105,110,103,32,102,114,111,109,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,108,105,107,101,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<49,62,32,123,111,107,44,77,80,125,32,61,32,114,101,58,99,111,109,112,105,108,101,40,34,40,63,60,65,62,65,41,124,40,63,60,66,62,66,41,124,40,63,60,67,62,67,41,34,41,46,10,123,111,107,44,123,114,101,95,112,97,116,116,101,114,110,44,51,44,48,44,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,60,54,57,44,56,50,44,54,55,44,56,48,44,49,49,57,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,49,44,48,44,48,44,48,44,50,53,53,44,50,53,53,44,50,53,53,44,50,53,53,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,50,53,53,44,50,53,53,44,46,46,46,62,62,125,125,10,50,62,32,123,110,97,109,101,108,105,115,116,44,32,78,125,32,61,32,114,101,58,105,110,115,112,101,99,116,40,77,80,44,110,97,109,101,108,105,115,116,41,46,10,123,110,97,109,101,108,105,115,116,44,91,60,60,34,65,34,62,62,44,60,60,34,66,34,62,62,44,60,60,34,67,34,62,62,93,125,10,51,62,32,123,109,97,116,99,104,44,76,125,32,61,32,114,101,58,114,117,110,40,34,65,65,34,44,77,80,44,91,123,99,97,112,116,117,114,101,44,97,108,108,95,110,97,109,101,115,44,98,105,110,97,114,121,125,93,41,46,10,123,109,97,116,99,104,44,91,60,60,34,65,34,62,62,44,60,60,62,62,44,60,60,62,62,93,125,10,52,62,32,78,97,109,101,77,97,112,32,61,32,108,105,115,116,115,58,122,105,112,40,78,44,76,41,46,10,91,123,60,60,34,65,34,62,62,44,60,60,34,65,34,62,62,125,44,123,60,60,34,66,34,62,62,44,60,60,62,62,125,44,123,60,60,34,67,34,62,62,44,60,60,62,62,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,51,48,54>>,signature => [{attribute,143,spec,{{inspect,2},[{type,143,bounded_fun,[{type,143,'fun',[{type,143,product,[{var,143,'MP'},{var,143,'Item'}]},{type,143,tuple,[{atom,143,namelist},{type,143,list,[{type,143,binary,[]}]}]}]},[{type,144,constraint,[{atom,144,is_subtype},[{var,144,'MP'},{user_type,144,mp,[]}]]},{type,145,constraint,[{atom,145,is_subtype},[{var,145,'Item'},{atom,145,namelist}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,replace,3},[{file,[114,101,46,101,114,108]},{location,353}],[<<114,101,112,108,97,99,101,47,51>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<114,101,112,108,97,99,101,40,83,117,98,106,101,99,116,44,32,82,69,44,32,82,101,112,108,97,99,101,109,101,110,116,44,32,91,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,51,53,48>>,signature => [{attribute,353,spec,{{replace,3},[{type,353,bounded_fun,[{type,353,'fun',[{type,353,product,[{var,353,'Subject'},{var,353,'RE'},{var,353,'Replacement'}]},{type,353,union,[{type,353,iodata,[]},{remote_type,353,[{atom,353,unicode},{atom,353,charlist},[]]}]}]},[{type,354,constraint,[{atom,354,is_subtype},[{var,354,'Subject'},{type,354,union,[{type,354,iodata,[]},{remote_type,354,[{atom,354,unicode},{atom,354,charlist},[]]}]}]]},{type,355,constraint,[{atom,355,is_subtype},[{var,355,'RE'},{type,355,union,[{user_type,355,mp,[]},{type,355,iodata,[]}]}]]},{type,356,constraint,[{atom,356,is_subtype},[{var,356,'Replacement'},{type,356,union,[{type,356,iodata,[]},{remote_type,356,[{atom,356,unicode},{atom,356,charlist},[]]}]}]]}]]}]}}]}},{{function,replace,4},[{file,[114,101,46,101,114,108]},{location,366}],[<<114,101,112,108,97,99,101,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,112,108,97,99,101,115,32,116,104,101,32,109,97,116,99,104,101,100,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32>>,{code,[],[<<82,101,112,108,97,99,101,109,101,110,116>>]},<<46>>]},{p,[],[<<84,104,101,32,112,101,114,109,105,115,115,105,98,108,101,32,111,112,116,105,111,110,115,32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,102,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,111,112,116,105,111,110>>,{code,[],[<<32,99,97,112,116,117,114,101>>]},<<32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,46,32,73,110,115,116,101,97,100,32,97,32>>,{code,[],[<<123,114,101,116,117,114,110,44,32,82,101,116,117,114,110,84,121,112,101,125>>]},<<32,105,115,32,112,114,101,115,101,110,116,46,32,84,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<44,32,99,111,110,115,116,114,117,99,116,101,100,32,105,110,32,97,32,119,97,121,32,116,111,32,109,105,110,105,109,105,122,101,32,99,111,112,121,105,110,103,46,32,84,104,101,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<32,114,101,115,117,108,116,32,99,97,110,32,98,101,32,117,115,101,100,32,100,105,114,101,99,116,108,121,32,105,110,32,109,97,110,121,32,73,47,79,32,111,112,101,114,97,116,105,111,110,115,46,32,73,102,32,97,32,102,108,97,116,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,105,115,32,100,101,115,105,114,101,100,44,32,115,112,101,99,105,102,121,32>>,{code,[],[<<123,114,101,116,117,114,110,44,32,108,105,115,116,125>>]},<<46,32,73,102,32,97,32,98,105,110,97,114,121,32,105,115,32,100,101,115,105,114,101,100,44,32,115,112,101,99,105,102,121,32>>,{code,[],[<<123,114,101,116,117,114,110,44,32,98,105,110,97,114,121,125>>]},<<46>>]},{p,[],[<<65,115,32,105,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<114,117,110,47,51>>]},<<44,32,97,110,32>>,{code,[],[<<109,112,40,41>>]},<<32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,114,101,113,117,105,114,101,115,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,116,111,32,98,101,32,97,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<46,32,73,102,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,105,109,112,108,105,99,105,116,108,121,32,97,110,100,32,116,104,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,98,111,116,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,110,100,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,97,114,101,32,116,111,32,115,112,101,99,105,102,105,101,100,32,97,115,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<115,46>>]},{p,[],[<<84,104,101,32,114,101,112,108,97,99,101,109,101,110,116,32,115,116,114,105,110,103,32,99,97,110,32,99,111,110,116,97,105,110,32,116,104,101,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,32>>,{code,[],[<<38>>]},<<44,32,119,104,105,99,104,32,105,110,115,101,114,116,115,32,116,104,101,32,119,104,111,108,101,32,109,97,116,99,104,105,110,103,32,101,120,112,114,101,115,115,105,111,110,32,105,110,32,116,104,101,32,114,101,115,117,108,116,44,32,97,110,100,32,116,104,101,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,32>>,{code,[],[<<92>>]},<<78,32,40,119,104,101,114,101,32,78,32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,62,32,48,41,44,32>>,{code,[],[<<92,103>>]},<<78,44,32,111,114,32>>,{code,[],[<<92,103,123>>]},<<78>>,{code,[],[<<125>>]},<<44,32,114,101,115,117,108,116,105,110,103,32,105,110,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,110,117,109,98,101,114,32,78,44,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,46,32,73,102,32,110,111,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,119,105,116,104,32,116,104,97,116,32,110,117,109,98,101,114,32,105,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,110,111,116,104,105,110,103,32,105,115,32,105,110,115,101,114,116,101,100,46>>]},{p,[],[<<84,111,32,105,110,115,101,114,116,32,97,110,32,38,32,111,114,32,97,32,92,32,105,110,32,116,104,101,32,114,101,115,117,108,116,44,32,112,114,101,99,101,100,101,32,105,116,32,119,105,116,104,32,97,32,92,46,32,78,111,116,105,99,101,32,116,104,97,116,32,69,114,108,97,110,103,32,97,108,114,101,97,100,121,32,103,105,118,101,115,32,97,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,116,111,32,92,32,105,110,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,115,44,32,115,111,32,97,32,115,105,110,103,108,101,32,92,32,109,117,115,116,32,98,101,32,119,114,105,116,116,101,110,32,97,115,32>>,{code,[],[<<34,92,92,34>>]},<<32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,97,32,100,111,117,98,108,101,32,92,32,97,115,32>>,{code,[],[<<34,92,92,92,92,34>>]},<<46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[],[<<114,101,58,114,101,112,108,97,99,101,40,34,97,98,99,100,34,44,34,99,34,44,34,91,38,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<34,97,98,91,99,93,100,34>>]}]},{p,[],[<<119,104,105,108,101>>]},{pre,[],[{code,[],[<<114,101,58,114,101,112,108,97,99,101,40,34,97,98,99,100,34,44,34,99,34,44,34,91,92,92,38,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<34,97,98,91,38,93,100,34>>]}]},{p,[],[<<65,115,32,119,105,116,104,32>>,{code,[],[<<114,117,110,47,51>>]},<<44,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,115,32,114,97,105,115,101,32,116,104,101,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,46,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,103,101,116,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,101,114,114,111,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,51,54,48>>,signature => [{attribute,366,spec,{{replace,4},[{type,366,bounded_fun,[{type,366,'fun',[{type,366,product,[{var,366,'Subject'},{var,366,'RE'},{var,366,'Replacement'},{var,366,'Options'}]},{type,366,union,[{type,366,iodata,[]},{remote_type,366,[{atom,366,unicode},{atom,366,charlist},[]]}]}]},[{type,367,constraint,[{atom,367,is_subtype},[{var,367,'Subject'},{type,367,union,[{type,367,iodata,[]},{remote_type,367,[{atom,367,unicode},{atom,367,charlist},[]]}]}]]},{type,368,constraint,[{atom,368,is_subtype},[{var,368,'RE'},{type,368,union,[{user_type,368,mp,[]},{type,368,iodata,[]},{remote_type,368,[{atom,368,unicode},{atom,368,charlist},[]]}]}]]},{type,369,constraint,[{atom,369,is_subtype},[{var,369,'Replacement'},{type,369,union,[{type,369,iodata,[]},{remote_type,369,[{atom,369,unicode},{atom,369,charlist},[]]}]}]]},{type,370,constraint,[{atom,370,is_subtype},[{var,370,'Options'},{type,370,list,[{var,370,'Option'}]}]]},{type,371,constraint,[{atom,371,is_subtype},[{var,371,'Option'},{type,371,union,[{atom,371,anchored},{atom,371,global},{atom,371,notbol},{atom,371,noteol},{atom,371,notempty},{atom,372,notempty_atstart},{type,373,tuple,[{atom,373,offset},{type,373,non_neg_integer,[]}]},{type,373,tuple,[{atom,373,newline},{var,373,'NLSpec'}]},{atom,373,bsr_anycrlf},{type,374,tuple,[{atom,374,match_limit},{type,374,non_neg_integer,[]}]},{type,375,tuple,[{atom,375,match_limit_recursion},{type,375,non_neg_integer,[]}]},{atom,376,bsr_unicode},{type,376,tuple,[{atom,376,return},{var,376,'ReturnType'}]},{var,376,'CompileOpt'}]}]]},{type,377,constraint,[{atom,377,is_subtype},[{var,377,'ReturnType'},{type,377,union,[{atom,377,iodata},{atom,377,list},{atom,377,binary}]}]]},{type,378,constraint,[{atom,378,is_subtype},[{var,378,'CompileOpt'},{user_type,378,compile_option,[]}]]},{type,379,constraint,[{atom,379,is_subtype},[{var,379,'NLSpec'},{type,379,union,[{atom,379,cr},{atom,379,crlf},{atom,379,lf},{atom,379,anycrlf},{atom,379,any}]}]]}]]}]}}]}},{{function,run,2},[{file,[114,101,46,101,114,108]},{location,67}],[<<114,117,110,47,50>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<114,117,110,40,83,117,98,106,101,99,116,44,82,69,44,91,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,52,49,48>>,signature => [{attribute,67,spec,{{run,2},[{type,67,bounded_fun,[{type,67,'fun',[{type,67,product,[{var,67,'Subject'},{var,67,'RE'}]},{type,67,union,[{type,67,tuple,[{atom,67,match},{var,67,'Captured'}]},{atom,67,nomatch}]}]},[{type,68,constraint,[{atom,68,is_subtype},[{var,68,'Subject'},{type,68,union,[{type,68,iodata,[]},{remote_type,68,[{atom,68,unicode},{atom,68,charlist},[]]}]}]]},{type,69,constraint,[{atom,69,is_subtype},[{var,69,'RE'},{type,69,union,[{user_type,69,mp,[]},{type,69,iodata,[]}]}]]},{type,70,constraint,[{atom,70,is_subtype},[{var,70,'Captured'},{type,70,list,[{var,70,'CaptureData'}]}]]},{type,71,constraint,[{atom,71,is_subtype},[{var,71,'CaptureData'},{type,71,tuple,[{type,71,integer,[]},{type,71,integer,[]}]}]]}]]}]}}]}},{{function,run,3},[{file,[114,101,46,101,114,108]},{location,76}],[<<114,117,110,47,51>>],#{<<101,110>> => [{p,[],[<<69,120,101,99,117,116,101,115,32,97,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,105,110,103,44,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<109,97,116,99,104,47,123,109,97,116,99,104,44,32,67,97,112,116,117,114,101,100,125>>]},<<32,111,114,32>>,{code,[],[<<110,111,109,97,116,99,104>>]},<<46,32,84,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,101,105,116,104,101,114,32,97,115,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,111,109,112,105,108,101,100,32,40,97,115,32,98,121,32>>,{code,[],[<<99,111,109,112,105,108,101,47,50>>]},<<41,32,97,110,100,32,101,120,101,99,117,116,101,100,44,32,111,114,32,97,115,32,97,32,112,114,101,99,111,109,112,105,108,101,100,32>>,{code,[],[<<109,112,40,41>>]},<<32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,105,116,32,105,115,32,101,120,101,99,117,116,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,115,117,98,106,101,99,116,32,100,105,114,101,99,116,108,121,46>>]},{p,[],[<<87,104,101,110,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,105,110,118,111,108,118,101,100,44,32,101,120,99,101,112,116,105,111,110,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,115,32,116,104,114,111,119,110,32,105,102,32,97,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46,32,67,97,108,108,32>>,{code,[],[<<99,111,109,112,105,108,101,47,50>>]},<<32,116,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,105,108,101,100,44,32,116,104,101,32,111,112,116,105,111,110,32,108,105,115,116,32,99,97,110,32,111,110,108,121,32,99,111,110,116,97,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{code,[],[<<97,110,99,104,111,114,101,100>>]}]},{li,[],[{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,125,47,123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,44,32,84,121,112,101,125>>]}]},{li,[],[{code,[],[<<103,108,111,98,97,108>>]}]},{li,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{li,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{li,[],[{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]}]},{li,[],[{code,[],[<<110,111,116,98,111,108>>]}]},{li,[],[{code,[],[<<110,111,116,101,109,112,116,121>>]}]},{li,[],[{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]}]},{li,[],[{code,[],[<<110,111,116,101,111,108>>]}]},{li,[],[{code,[],[<<123,111,102,102,115,101,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{li,[],[{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]}]}]},{p,[],[<<79,116,104,101,114,119,105,115,101,32,97,108,108,32,111,112,116,105,111,110,115,32,118,97,108,105,100,32,102,111,114,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<99,111,109,112,105,108,101,47,50>>]},<<32,97,114,101,32,97,108,115,111,32,97,108,108,111,119,101,100,46,32,79,112,116,105,111,110,115,32,97,108,108,111,119,101,100,32,98,111,116,104,32,102,111,114,32,99,111,109,112,105,108,97,116,105,111,110,32,97,110,100,32,101,120,101,99,117,116,105,111,110,32,111,102,32,97,32,109,97,116,99,104,44,32,110,97,109,101,108,121,32>>,{code,[],[<<97,110,99,104,111,114,101,100>>]},<<32,97,110,100,32>>,{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]},<<44,32,97,102,102,101,99,116,32,98,111,116,104,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,97,110,100,32,101,120,101,99,117,116,105,111,110,32,105,102,32,112,114,101,115,101,110,116,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,97,32,110,111,110,45,112,114,101,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,105,115,32,116,111,32,98,101,32,112,114,111,118,105,100,101,100,32,97,115,32,97,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<44,32,111,116,104,101,114,119,105,115,101,32,97,110,121,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<32,119,105,108,108,32,100,111,46,32,73,102,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,105,110,118,111,108,118,101,100,32,97,110,100,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,98,111,116,104,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,97,110,100,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,114,101,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,115,40,41>>]},<<46>>]},{p,[],[{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,125,47,123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,44,32,84,121,112,101,125>>]},<<32,100,101,102,105,110,101,115,32,119,104,97,116,32,116,111,32,114,101,116,117,114,110,32,102,114,111,109,32,116,104,101,32,102,117,110,99,116,105,111,110,32,117,112,111,110,32,115,117,99,99,101,115,115,102,117,108,32,109,97,116,99,104,105,110,103,46,32,84,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,116,117,112,108,101,32,99,97,110,32,99,111,110,116,97,105,110,32,98,111,116,104,32,97,32,118,97,108,117,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,116,101,108,108,105,110,103,32,119,104,105,99,104,32,111,102,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,44,32,97,110,100,32,97,32,116,121,112,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,116,101,108,108,105,110,103,32,104,111,119,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,32,40,97,115,32,105,110,100,101,120,32,116,117,112,108,101,115,44,32,108,105,115,116,115,44,32,111,114,32,98,105,110,97,114,105,101,115,41,46,32,84,104,101,32,111,112,116,105,111,110,115,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,100,101,116,97,105,108,32,98,101,108,111,119,46>>]},{p,[],[<<73,102,32,116,104,101,32,99,97,112,116,117,114,101,32,111,112,116,105,111,110,115,32,100,101,115,99,114,105,98,101,32,116,104,97,116,32,110,111,32,115,117,98,115,116,114,105,110,103,32,99,97,112,116,117,114,105,110,103,32,105,115,32,116,111,32,98,101,32,100,111,110,101,32,40>>,{code,[],[<<123,99,97,112,116,117,114,101,44,32,110,111,110,101,125>>]},<<41,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,115,105,110,103,108,101,32,97,116,111,109,32>>,{code,[],[<<109,97,116,99,104>>]},<<32,117,112,111,110,32,115,117,99,99,101,115,115,102,117,108,32,109,97,116,99,104,105,110,103,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,109,97,116,99,104,44,32,86,97,108,117,101,76,105,115,116,125>>]},<<46,32,68,105,115,97,98,108,105,110,103,32,99,97,112,116,117,114,105,110,103,32,99,97,110,32,98,101,32,100,111,110,101,32,101,105,116,104,101,114,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<110,111,110,101>>]},<<32,111,114,32,97,110,32,101,109,112,116,121,32,108,105,115,116,32,97,115,32>>,{code,[],[<<86,97,108,117,101,83,112,101,99>>]},<<46>>]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]},<<32,97,100,100,115,32,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,116,104,97,116,32,97,110,32,101,114,114,111,114,32,116,117,112,108,101,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,116,117,112,108,101,32,101,105,116,104,101,114,32,105,110,100,105,99,97,116,101,115,32,97,32,109,97,116,99,104,105,110,103,32,101,114,114,111,114,32,40>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,111,114,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]},<<41,44,32,111,114,32,97,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,44,32,119,104,101,114,101,32,116,104,101,32,101,114,114,111,114,32,116,117,112,108,101,32,104,97,115,32,116,104,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,101,114,114,111,114,44,32,123,99,111,109,112,105,108,101,44,32,67,111,109,112,105,108,101,69,114,114,125,125>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]},<<32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,110,101,118,101,114,32,114,101,116,117,114,110,115,32,101,114,114,111,114,32,116,117,112,108,101,115,44,32,98,117,116,32,114,101,112,111,114,116,115,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,115,32,97,115,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,97,110,100,32,102,97,105,108,101,100,32,109,97,116,99,104,101,115,32,98,101,99,97,117,115,101,32,111,102,32,101,120,99,101,101,100,101,100,32,109,97,116,99,104,32,108,105,109,105,116,115,32,115,105,109,112,108,121,32,97,115,32>>,{code,[],[<<110,111,109,97,116,99,104>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,32,97,114,101,32,114,101,108,101,118,97,110,116,32,102,111,114,32,101,120,101,99,117,116,105,111,110,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,110,99,104,111,114,101,100>>]}]},{dd,[],[{p,[],[<<76,105,109,105,116,115,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,116,111,32,109,97,116,99,104,105,110,103,32,97,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,46,32,73,102,32,97,32,112,97,116,116,101,114,110,32,119,97,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32>>,{code,[],[<<97,110,99,104,111,114,101,100>>]},<<44,32,111,114,32,116,117,114,110,101,100,32,111,117,116,32,116,111,32,98,101,32,97,110,99,104,111,114,101,100,32,98,121,32,118,105,114,116,117,101,32,111,102,32,105,116,115,32,99,111,110,116,101,110,116,115,44,32,105,116,32,99,97,110,110,111,116,32,98,101,32,109,97,100,101,32,117,110,97,110,99,104,111,114,101,100,32,97,116,32,109,97,116,99,104,105,110,103,32,116,105,109,101,44,32,104,101,110,99,101,32,116,104,101,114,101,32,105,115,32,110,111,32>>,{code,[],[<<117,110,97,110,99,104,111,114,101,100>>]},<<32,111,112,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<103,108,111,98,97,108>>]}]},{dd,[],[{p,[],[<<73,109,112,108,101,109,101,110,116,115,32,103,108,111,98,97,108,32,40,114,101,112,101,116,105,116,105,118,101,41,32,115,101,97,114,99,104,32,40,102,108,97,103,32>>,{code,[],[<<103>>]},<<32,105,110,32,80,101,114,108,41,46,32,69,97,99,104,32,109,97,116,99,104,32,105,115,32,114,101,116,117,114,110,101,100,32,97,115,32,97,32,115,101,112,97,114,97,116,101,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,115,112,101,99,105,102,105,99,32,109,97,116,99,104,32,97,110,100,32,97,110,121,32,109,97,116,99,104,105,110,103,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,40,111,114,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32,111,112,116,105,111,110,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<46,32,84,104,101,32>>,{code,[],[<<67,97,112,116,117,114,101,100>>]},<<32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,104,101,110,99,101,32,97,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,111,102,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<115,32,119,104,101,110,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,46>>]},{p,[],[<<84,104,101,32,105,110,116,101,114,97,99,116,105,111,110,32,111,102,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,119,105,116,104,32,97,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,116,104,97,116,32,109,97,116,99,104,101,115,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,115,117,114,112,114,105,115,101,115,32,115,111,109,101,32,117,115,101,114,115,46,32,87,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,104,97,110,100,108,101,115,32,101,109,112,116,121,32,109,97,116,99,104,101,115,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,80,101,114,108,58,32,97,32,122,101,114,111,45,108,101,110,103,116,104,32,109,97,116,99,104,32,97,116,32,97,110,121,32,112,111,105,110,116,32,105,115,32,97,108,115,111,32,114,101,116,114,105,101,100,32,119,105,116,104,32,111,112,116,105,111,110,115,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]},<<46,32,73,102,32,116,104,97,116,32,115,101,97,114,99,104,32,103,105,118,101,115,32,97,32,114,101,115,117,108,116,32,111,102,32,108,101,110,103,116,104,32,62,32,48,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,105,110,99,108,117,100,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,99,97,116,34,44,34,40,124,97,116,41,34,44,91,103,108,111,98,97,108,93,41,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,105,110,103,115,32,97,114,101,32,112,101,114,102,111,114,109,101,100,58>>]},{dl,[],[{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32>>,{code,[],[<<40,124,97,116,41>>]},<<32,102,105,114,115,116,32,109,97,116,99,104,32,97,116,32,116,104,101,32,105,110,105,116,105,97,108,32,112,111,115,105,116,105,111,110,32,111,102,32,115,116,114,105,110,103,32>>,{code,[],[<<99,97,116>>]},<<44,32,103,105,118,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,115,101,116,32>>,{code,[],[<<91,123,48,44,48,125,44,123,48,44,48,125,93>>]},<<32,40,116,104,101,32,115,101,99,111,110,100,32>>,{code,[],[<<123,48,44,48,125>>]},<<32,105,115,32,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,109,97,114,107,101,100,32,98,121,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,41,46,32,65,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,109,97,116,99,104,32,105,115,32,48,44,32,119,101,32,100,111,32,110,111,116,32,97,100,118,97,110,99,101,32,116,111,32,116,104,101,32,110,101,120,116,32,112,111,115,105,116,105,111,110,32,121,101,116,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<48>>]},<<32,119,105,116,104,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,101,97,114,99,104,32,105,115,32,114,101,116,114,105,101,100,32,119,105,116,104,32,111,112,116,105,111,110,115,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]},<<32,97,116,32,116,104,101,32,115,97,109,101,32,112,111,115,105,116,105,111,110,44,32,119,104,105,99,104,32,100,111,101,115,32,110,111,116,32,103,105,118,101,32,97,110,121,32,105,110,116,101,114,101,115,116,105,110,103,32,114,101,115,117,108,116,32,111,102,32,108,111,110,103,101,114,32,108,101,110,103,116,104,44,32,115,111,32,116,104,101,32,115,101,97,114,99,104,32,112,111,115,105,116,105,111,110,32,105,115,32,97,100,118,97,110,99,101,100,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40>>,{code,[],[<<97>>]},<<41,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<49>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,101,97,114,99,104,32,114,101,115,117,108,116,115,32,105,110,32>>,{code,[],[<<91,123,49,44,48,125,44,123,49,44,48,125,93>>]},<<44,32,115,111,32,116,104,105,115,32,115,101,97,114,99,104,32,105,115,32,97,108,115,111,32,114,101,112,101,97,116,101,100,32,119,105,116,104,32,116,104,101,32,101,120,116,114,97,32,111,112,116,105,111,110,115,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<49>>]},<<32,119,105,116,104,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]}]},{dd,[],[{p,[],[<<65,108,116,101,114,110,97,116,105,118,101,32>>,{code,[],[<<97,98>>]},<<32,105,115,32,102,111,117,110,100,32,97,110,100,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,91,123,49,44,50,125,44,123,49,44,50,125,93,46,32,84,104,101,32,114,101,115,117,108,116,32,105,115,32,97,100,100,101,100,32,116,111,32,116,104,101,32,108,105,115,116,32,111,102,32,114,101,115,117,108,116,115,32,97,110,100,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,101,97,114,99,104,32,115,116,114,105,110,103,32,105,115,32,97,100,118,97,110,99,101,100,32,116,119,111,32,115,116,101,112,115,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<51>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,101,97,114,99,104,32,111,110,99,101,32,97,103,97,105,110,32,109,97,116,99,104,101,115,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,44,32,103,105,118,105,110,103,32>>,{code,[],[<<91,123,51,44,48,125,44,123,51,44,48,125,93>>]},<<46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<49>>]},<<32,119,105,116,104,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,103,105,118,101,115,32,110,111,32,114,101,115,117,108,116,32,111,102,32,108,101,110,103,116,104,32,62,32,48,32,97,110,100,32,119,101,32,97,114,101,32,97,116,32,116,104,101,32,108,97,115,116,32,112,111,115,105,116,105,111,110,44,32,115,111,32,116,104,101,32,103,108,111,98,97,108,32,115,101,97,114,99,104,32,105,115,32,99,111,109,112,108,101,116,101,46>>]}]}]},{p,[],[<<84,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,99,97,108,108,32,105,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,91,123,48,44,48,125,44,123,48,44,48,125,93,44,91,123,49,44,48,125,44,123,49,44,48,125,93,44,91,123,49,44,50,125,44,123,49,44,50,125,93,44,91,123,51,44,48,125,44,123,51,44,48,125,93,93,125>>]}]}]},{dt,[],[{code,[],[<<110,111,116,101,109,112,116,121>>]}]},{dd,[],[{p,[],[<<65,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,32,97,32,118,97,108,105,100,32,109,97,116,99,104,32,105,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,46,32,73,102,32,97,108,116,101,114,110,97,116,105,118,101,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,101,120,105,115,116,44,32,116,104,101,121,32,97,114,101,32,116,114,105,101,100,46,32,73,102,32,97,108,108,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,109,97,116,99,104,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,44,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,102,97,105,108,115,46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{p,[],[<<73,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,97,32,115,116,114,105,110,103,32,110,111,116,32,98,101,103,105,110,110,105,110,103,32,119,105,116,104,32,34,97,34,32,111,114,32,34,98,34,44,32,105,116,32,119,111,117,108,100,32,110,111,114,109,97,108,108,121,32,109,97,116,99,104,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,58>>]},{pre,[],[{code,[],[<<97,63,98,63>>]}]},{p,[],[<<87,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,116,101,109,112,116,121>>]},<<44,32,116,104,105,115,32,109,97,116,99,104,32,105,115,32,105,110,118,97,108,105,100,44,32,115,111,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,115,101,97,114,99,104,101,115,32,102,117,114,116,104,101,114,32,105,110,116,111,32,116,104,101,32,115,116,114,105,110,103,32,102,111,114,32,111,99,99,117,114,114,101,110,99,101,115,32,111,102,32,34,97,34,32,111,114,32,34,98,34,46>>]}]},{dt,[],[{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]}]},{dd,[],[{p,[],[<<76,105,107,101,32>>,{code,[],[<<110,111,116,101,109,112,116,121>>]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,109,97,116,99,104,32,116,104,97,116,32,105,115,32,110,111,116,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,112,101,114,109,105,116,116,101,100,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,97,110,99,104,111,114,101,100,44,32,115,117,99,104,32,97,32,109,97,116,99,104,32,99,97,110,32,111,99,99,117,114,32,111,110,108,121,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,99,111,110,116,97,105,110,115,32,92,75,46>>]},{p,[],[<<80,101,114,108,32,104,97,115,32,110,111,32,100,105,114,101,99,116,32,101,113,117,105,118,97,108,101,110,116,32,111,102,32>>,{code,[],[<<110,111,116,101,109,112,116,121>>]},<<32,111,114,32>>,{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]},<<44,32,98,117,116,32,105,116,32,100,111,101,115,32,109,97,107,101,32,97,32,115,112,101,99,105,97,108,32,99,97,115,101,32,111,102,32,97,32,112,97,116,116,101,114,110,32,109,97,116,99,104,32,111,102,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,32,119,105,116,104,105,110,32,105,116,115,32,115,112,108,105,116,40,41,32,102,117,110,99,116,105,111,110,44,32,97,110,100,32,119,104,101,110,32,117,115,105,110,103,32,109,111,100,105,102,105,101,114,32>>,{code,[],[<<47,103>>]},<<46,32,84,104,101,32,80,101,114,108,32,98,101,104,97,118,105,111,114,32,99,97,110,32,98,101,32,101,109,117,108,97,116,101,100,32,97,102,116,101,114,32,109,97,116,99,104,105,110,103,32,97,32,110,117,108,108,32,115,116,114,105,110,103,32,98,121,32,102,105,114,115,116,32,116,114,121,105,110,103,32,116,104,101,32,109,97,116,99,104,32,97,103,97,105,110,32,97,116,32,116,104,101,32,115,97,109,101,32,111,102,102,115,101,116,32,119,105,116,104,32>>,{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]},<<32,97,110,100,32>>,{code,[],[<<97,110,99,104,111,114,101,100>>]},<<44,32,97,110,100,32,116,104,101,110,44,32,105,102,32,116,104,97,116,32,102,97,105,108,115,44,32,98,121,32,97,100,118,97,110,99,105,110,103,32,116,104,101,32,115,116,97,114,116,105,110,103,32,111,102,102,115,101,116,32,40,115,101,101,32,98,101,108,111,119,41,32,97,110,100,32,116,114,121,105,110,103,32,97,110,32,111,114,100,105,110,97,114,121,32,109,97,116,99,104,32,97,103,97,105,110,46>>]}]},{dt,[],[{code,[],[<<110,111,116,98,111,108>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,97,32,108,105,110,101,44,32,115,111,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,105,115,32,110,111,116,32,116,111,32,109,97,116,99,104,32,98,101,102,111,114,101,32,105,116,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,119,105,116,104,111,117,116,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,40,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,41,32,99,97,117,115,101,115,32,99,105,114,99,117,109,102,108,101,120,32,110,101,118,101,114,32,116,111,32,109,97,116,99,104,46,32,84,104,105,115,32,111,112,116,105,111,110,32,111,110,108,121,32,97,102,102,101,99,116,115,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,109,101,116,97,99,104,97,114,97,99,116,101,114,46,32,73,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,92,65,46>>]}]},{dt,[],[{code,[],[<<110,111,116,101,111,108>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,116,104,101,32,101,110,100,32,111,102,32,97,32,108,105,110,101,44,32,115,111,32,116,104,101,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,105,115,32,110,111,116,32,116,111,32,109,97,116,99,104,32,105,116,32,110,111,114,32,40,101,120,99,101,112,116,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,41,32,97,32,110,101,119,108,105,110,101,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,105,116,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,119,105,116,104,111,117,116,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,40,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,41,32,99,97,117,115,101,115,32,100,111,108,108,97,114,32,110,101,118,101,114,32,116,111,32,109,97,116,99,104,46,32,84,104,105,115,32,111,112,116,105,111,110,32,97,102,102,101,99,116,115,32,111,110,108,121,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,46,32,73,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,92,90,32,111,114,32,92,122,46>>]}]},{dt,[],[{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,98,101,116,116,101,114,32,99,111,110,116,114,111,108,32,111,102,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103,32,105,110,32>>,{code,[],[<<114,117,110,47,51>>]},<<46,32,87,104,101,110,32,115,112,101,99,105,102,105,101,100,44,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,115,32,40,105,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,110,111,116,32,97,108,114,101,97,100,121,32,99,111,109,112,105,108,101,100,41,32,97,110,100,32,114,117,110,116,105,109,101,32,101,114,114,111,114,115,32,97,114,101,32,101,120,112,108,105,99,105,116,108,121,32,114,101,116,117,114,110,101,100,32,97,115,32,97,110,32,101,114,114,111,114,32,116,117,112,108,101,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,112,111,115,115,105,98,108,101,32,114,117,110,116,105,109,101,32,101,114,114,111,114,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,32,115,101,116,115,32,97,32,108,105,109,105,116,32,111,110,32,104,111,119,32,109,97,110,121,32,116,105,109,101,115,32,116,104,101,32,105,110,116,101,114,110,97,108,32,109,97,116,99,104,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,99,97,108,108,101,100,46,32,68,101,102,97,117,108,116,115,32,116,111,32,49,48,44,48,48,48,44,48,48,48,32,105,110,32,116,104,101,32,108,105,98,114,97,114,121,32,99,111,109,112,105,108,101,100,32,102,111,114,32,69,114,108,97,110,103,46,32,73,102,32>>,{code,[],[<<123,101,114,114,111,114,44,32,109,97,116,99,104,95,108,105,109,105,116,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,111,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,104,97,115,32,114,101,97,99,104,101,100,32,116,104,105,115,32,108,105,109,105,116,46,32,84,104,105,115,32,105,115,32,110,111,114,109,97,108,108,121,32,116,111,32,98,101,32,114,101,103,97,114,100,101,100,32,97,115,32,97,32>>,{code,[],[<<110,111,109,97,116,99,104>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,118,97,108,117,101,32,119,104,101,110,32,116,104,105,115,32,111,99,99,117,114,115,44,32,98,117,116,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]},<<44,32,121,111,117,32,97,114,101,32,105,110,102,111,114,109,101,100,32,119,104,101,110,32,116,104,101,32,109,97,116,99,104,32,102,97,105,108,115,32,98,101,99,97,117,115,101,32,111,102,32,116,111,111,32,109,97,110,121,32,105,110,116,101,114,110,97,108,32,99,97,108,108,115,46>>]}]},{dt,[],[{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,101,114,114,111,114,32,105,115,32,118,101,114,121,32,115,105,109,105,108,97,114,32,116,111,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<44,32,98,117,116,32,111,99,99,117,114,115,32,119,104,101,110,32,116,104,101,32,105,110,116,101,114,110,97,108,32,109,97,116,99,104,32,102,117,110,99,116,105,111,110,32,111,102,32,80,67,82,69,32,105,115,32,34,114,101,99,117,114,115,105,118,101,108,121,34,32,99,97,108,108,101,100,32,109,111,114,101,32,116,105,109,101,115,32,116,104,97,110,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]},<<32,108,105,109,105,116,44,32,119,104,105,99,104,32,100,101,102,97,117,108,116,115,32,116,111,32,49,48,44,48,48,48,44,48,48,48,32,97,115,32,119,101,108,108,46,32,78,111,116,105,99,101,32,116,104,97,116,32,97,115,32,108,111,110,103,32,97,115,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,97,110,100,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,100,101,102,97,117,108,116>>]},<<32,118,97,108,117,101,115,32,97,114,101,32,107,101,112,116,32,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,115,44,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]},<<32,101,114,114,111,114,32,99,97,110,110,111,116,32,111,99,99,117,114,44,32,97,115,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,101,114,114,111,114,32,111,99,99,117,114,115,32,98,101,102,111,114,101,32,116,104,97,116,32,40,101,97,99,104,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,105,115,32,97,108,115,111,32,97,32,99,97,108,108,44,32,98,117,116,32,110,111,116,32,99,111,110,118,101,114,115,101,108,121,41,46,32,66,111,116,104,32,108,105,109,105,116,115,32,99,97,110,32,104,111,119,101,118,101,114,32,98,101,32,99,104,97,110,103,101,100,44,32,101,105,116,104,101,114,32,98,121,32,115,101,116,116,105,110,103,32,108,105,109,105,116,115,32,100,105,114,101,99,116,108,121,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,115,116,114,105,110,103,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,101,103,101,120,112,95,115,121,110,116,97,120,95,100,101,116,97,105,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<80,67,82,69,32,82,101,103,117,108,97,114,32,69,101,120,112,114,101,115,115,105,111,110,32,68,101,116,97,105,108,115>>]},<<41,32,111,114,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32,111,112,116,105,111,110,115,32,116,111,32>>,{code,[],[<<114,117,110,47,51>>]},<<46>>]}]}]},{p,[],[<<73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32,116,111,32,117,110,100,101,114,115,116,97,110,100,32,116,104,97,116,32,119,104,97,116,32,105,115,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,34,114,101,99,117,114,115,105,111,110,34,32,119,104,101,110,32,108,105,109,105,116,105,110,103,32,109,97,116,99,104,101,115,32,105,115,32,110,111,116,32,114,101,99,117,114,115,105,111,110,32,111,110,32,116,104,101,32,67,32,115,116,97,99,107,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,109,97,99,104,105,110,101,32,111,114,32,111,110,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,115,116,97,99,107,46,32,84,104,101,32,80,67,82,69,32,118,101,114,115,105,111,110,32,99,111,109,112,105,108,101,100,32,105,110,116,111,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,117,115,101,115,32,109,97,99,104,105,110,101,32,34,104,101,97,112,34,32,109,101,109,111,114,121,32,116,111,32,115,116,111,114,101,32,118,97,108,117,101,115,32,116,104,97,116,32,109,117,115,116,32,98,101,32,107,101,112,116,32,111,118,101,114,32,114,101,99,117,114,115,105,111,110,32,105,110,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<76,105,109,105,116,115,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,111,102,32,97,32,109,97,116,99,104,32,105,110,32,97,110,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,115,112,101,99,105,102,105,99,32,119,97,121,46,32,73,116,32,105,115,32,100,101,115,99,114,105,98,101,100,32,97,115,32,102,111,108,108,111,119,115,32,98,121,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,58>>]},{pre,[],[{code,[],[<<84,104,101,32,109,97,116,99,104,95,108,105,109,105,116,32,102,105,101,108,100,32,112,114,111,118,105,100,101,115,32,97,32,109,101,97,110,115,32,111,102,32,112,114,101,118,101,110,116,105,110,103,32,80,67,82,69,32,102,114,111,109,32,117,115,105,110,103,10,117,112,32,97,32,118,97,115,116,32,97,109,111,117,110,116,32,111,102,32,114,101,115,111,117,114,99,101,115,32,119,104,101,110,32,114,117,110,110,105,110,103,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,103,111,105,110,103,10,116,111,32,109,97,116,99,104,44,32,98,117,116,32,119,104,105,99,104,32,104,97,118,101,32,97,32,118,101,114,121,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,112,111,115,115,105,98,105,108,105,116,105,101,115,32,105,110,32,116,104,101,105,114,10,115,101,97,114,99,104,32,116,114,101,101,115,46,32,84,104,101,32,99,108,97,115,115,105,99,32,101,120,97,109,112,108,101,32,105,115,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,117,115,101,115,32,110,101,115,116,101,100,10,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,115,46,10,10,73,110,116,101,114,110,97,108,108,121,44,32,112,99,114,101,95,101,120,101,99,40,41,32,117,115,101,115,32,97,32,102,117,110,99,116,105,111,110,32,99,97,108,108,101,100,32,109,97,116,99,104,40,41,44,32,119,104,105,99,104,32,105,116,32,99,97,108,108,115,10,114,101,112,101,97,116,101,100,108,121,32,40,115,111,109,101,116,105,109,101,115,32,114,101,99,117,114,115,105,118,101,108,121,41,46,32,84,104,101,32,108,105,109,105,116,32,115,101,116,32,98,121,32,109,97,116,99,104,95,108,105,109,105,116,32,105,115,10,105,109,112,111,115,101,100,32,111,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,100,117,114,105,110,103,32,97,32,109,97,116,99,104,44,10,119,104,105,99,104,32,104,97,115,32,116,104,101,32,101,102,102,101,99,116,32,111,102,32,108,105,109,105,116,105,110,103,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,104,97,116,32,99,97,110,10,116,97,107,101,32,112,108,97,99,101,46,32,70,111,114,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,97,110,99,104,111,114,101,100,44,32,116,104,101,32,99,111,117,110,116,32,114,101,115,116,97,114,116,115,10,102,114,111,109,32,122,101,114,111,32,102,111,114,32,101,97,99,104,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]}]},{p,[],[<<84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,114,117,110,97,119,97,121,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,115,32,99,97,110,32,102,97,105,108,32,102,97,115,116,101,114,32,105,102,32,116,104,101,32,108,105,109,105,116,32,105,115,32,108,111,119,101,114,101,100,32,117,115,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,46,32,84,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,49,48,44,48,48,48,44,48,48,48,32,105,115,32,99,111,109,112,105,108,101,100,32,105,110,116,111,32,116,104,101,32,69,114,108,97,110,103,32,86,77,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,100,111,101,115,32,105,110,32,110,111,32,119,97,121,32,97,102,102,101,99,116,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,105,110,32,116,101,114,109,115,32,111,102,32,34,108,111,110,103,32,114,117,110,110,105,110,103,32,66,73,70,115,34,46,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,97,108,119,97,121,115,32,103,105,118,101,115,32,99,111,110,116,114,111,108,32,98,97,99,107,32,116,111,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,111,102,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,116,32,105,110,116,101,114,118,97,108,115,32,116,104,97,116,32,101,110,115,117,114,101,115,32,116,104,101,32,114,101,97,108,45,116,105,109,101,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,115,121,115,116,101,109,46>>]}]}]},{dt,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<76,105,109,105,116,115,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,97,110,100,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,32,111,102,32,97,32,109,97,116,99,104,32,105,110,32,97,110,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,115,112,101,99,105,102,105,99,32,119,97,121,44,32,118,101,114,121,32,115,105,109,105,108,97,114,32,116,111,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<46,32,73,116,32,105,115,32,100,101,115,99,114,105,98,101,100,32,97,115,32,102,111,108,108,111,119,115,32,98,121,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,58>>]},{pre,[],[{code,[],[<<84,104,101,32,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,32,102,105,101,108,100,32,105,115,32,115,105,109,105,108,97,114,32,116,111,32,109,97,116,99,104,95,108,105,109,105,116,44,32,98,117,116,32,105,110,115,116,101,97,100,10,111,102,32,108,105,109,105,116,105,110,103,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,116,104,97,116,32,109,97,116,99,104,40,41,32,105,115,32,99,97,108,108,101,100,44,32,105,116,10,108,105,109,105,116,115,32,116,104,101,32,100,101,112,116,104,32,111,102,32,114,101,99,117,114,115,105,111,110,46,32,84,104,101,32,114,101,99,117,114,115,105,111,110,32,100,101,112,116,104,32,105,115,32,97,32,115,109,97,108,108,101,114,32,110,117,109,98,101,114,10,116,104,97,110,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,99,97,108,108,115,44,32,98,101,99,97,117,115,101,32,110,111,116,32,97,108,108,32,99,97,108,108,115,32,116,111,32,109,97,116,99,104,40,41,32,97,114,101,10,114,101,99,117,114,115,105,118,101,46,32,84,104,105,115,32,108,105,109,105,116,32,105,115,32,111,102,32,117,115,101,32,111,110,108,121,32,105,102,32,105,116,32,105,115,32,115,101,116,32,115,109,97,108,108,101,114,32,116,104,97,110,10,109,97,116,99,104,95,108,105,109,105,116,46,10,10,76,105,109,105,116,105,110,103,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,100,101,112,116,104,32,108,105,109,105,116,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,109,97,99,104,105,110,101,32,115,116,97,99,107,32,116,104,97,116,10,99,97,110,32,98,101,32,117,115,101,100,44,32,111,114,44,32,119,104,101,110,32,80,67,82,69,32,104,97,115,32,98,101,101,110,32,99,111,109,112,105,108,101,100,32,116,111,32,117,115,101,32,109,101,109,111,114,121,32,111,110,32,116,104,101,32,104,101,97,112,10,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,115,116,97,99,107,44,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,104,101,97,112,32,109,101,109,111,114,121,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,46>>]}]},{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,86,77,32,117,115,101,115,32,97,32,80,67,82,69,32,108,105,98,114,97,114,121,32,119,104,101,114,101,32,104,101,97,112,32,109,101,109,111,114,121,32,105,115,32,117,115,101,100,32,119,104,101,110,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,32,114,101,99,117,114,115,105,111,110,32,111,99,99,117,114,115,46,32,84,104,105,115,32,116,104,101,114,101,102,111,114,101,32,108,105,109,105,116,115,32,116,104,101,32,117,115,101,32,111,102,32,109,97,99,104,105,110,101,32,104,101,97,112,44,32,110,111,116,32,67,32,115,116,97,99,107,46>>]},{p,[],[<<83,112,101,99,105,102,121,105,110,103,32,97,32,108,111,119,101,114,32,118,97,108,117,101,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,109,97,116,99,104,101,115,32,119,105,116,104,32,100,101,101,112,32,114,101,99,117,114,115,105,111,110,32,102,97,105,108,105,110,103,44,32,119,104,101,110,32,116,104,101,121,32,115,104,111,117,108,100,32,104,97,118,101,32,109,97,116,99,104,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<49,62,32,114,101,58,114,117,110,40,34,97,97,97,97,97,97,97,97,97,97,97,97,97,122,34,44,34,40,97,43,41,42,122,34,41,46,10,123,109,97,116,99,104,44,91,123,48,44,49,52,125,44,123,48,44,49,51,125,93,125,10,50,62,32,114,101,58,114,117,110,40,34,97,97,97,97,97,97,97,97,97,97,97,97,97,122,34,44,34,40,97,43,41,42,122,34,44,91,123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,53,125,93,41,46,10,110,111,109,97,116,99,104,10,51,62,32,114,101,58,114,117,110,40,34,97,97,97,97,97,97,97,97,97,97,97,97,97,122,34,44,34,40,97,43,41,42,122,34,44,91,123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,53,125,44,114,101,112,111,114,116,95,101,114,114,111,114,115,93,41,46,10,123,101,114,114,111,114,44,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,125>>]}]},{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,97,110,100,32,111,112,116,105,111,110,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,97,114,101,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,114,97,114,101,32,99,97,115,101,115,46,32,85,110,100,101,114,115,116,97,110,100,105,110,103,32,111,102,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,32,105,110,116,101,114,110,97,108,115,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,98,101,102,111,114,101,32,116,97,109,112,101,114,105,110,103,32,119,105,116,104,32,116,104,101,115,101,32,108,105,109,105,116,115,46>>]}]},{dt,[],[{code,[],[<<123,111,102,102,115,101,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,32,109,97,116,99,104,105,110,103,32,97,116,32,116,104,101,32,111,102,102,115,101,116,32,40,112,111,115,105,116,105,111,110,41,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,84,104,101,32,111,102,102,115,101,116,32,105,115,32,122,101,114,111,45,98,97,115,101,100,44,32,115,111,32,116,104,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<123,111,102,102,115,101,116,44,48,125>>]},<<32,40,97,108,108,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,41,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]}]},{dd,[],[{p,[],[<<79,118,101,114,114,105,100,101,115,32,116,104,101,32,100,101,102,97,117,108,116,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,97,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,119,104,105,99,104,32,105,115,32,76,70,32,40,65,83,67,73,73,32,49,48,41,32,105,110,32,69,114,108,97,110,103,46>>]},{dl,[],[{dt,[],[{code,[],[<<99,114>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,67,82,32,40,65,83,67,73,73,32,49,51,41,46>>]}]},{dt,[],[{code,[],[<<108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,76,70,32,40,65,83,67,73,73,32,49,48,41,44,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<99,114,108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,67,82,76,70,32,40,65,83,67,73,73,32,49,51,32,102,111,108,108,111,119,101,100,32,98,121,32,65,83,67,73,73,32,49,48,41,32,115,101,113,117,101,110,99,101,46>>]}]},{dt,[],[{code,[],[<<97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,112,114,101,99,101,100,105,110,103,32,115,101,113,117,101,110,99,101,115,32,105,115,32,98,101,32,114,101,99,111,103,110,105,122,101,100,46>>]}]},{dt,[],[{code,[],[<<97,110,121>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,115,32,97,98,111,118,101,44,32,97,110,100,32,116,104,101,32,85,110,105,99,111,100,101,32,115,101,113,117,101,110,99,101,115,32,86,84,32,40,118,101,114,116,105,99,97,108,32,116,97,98,44,32,85,43,48,48,48,66,41,44,32,70,70,32,40,102,111,114,109,102,101,101,100,44,32,85,43,48,48,48,67,41,44,32,78,69,76,32,40,110,101,120,116,32,108,105,110,101,44,32,85,43,48,48,56,53,41,44,32,76,83,32,40,108,105,110,101,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,56,41,44,32,97,110,100,32,80,83,32,40,112,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,57,41,46>>]}]}]}]},{dt,[],[{code,[],[<<98,115,114,95,97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,116,104,101,32,67,82,32,76,70,44,32,111,114,32,67,82,76,70,32,115,101,113,117,101,110,99,101,115,44,32,110,111,116,32,116,104,101,32,85,110,105,99,111,100,101,45,115,112,101,99,105,102,105,99,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,46,32,40,79,118,101,114,114,105,100,101,115,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,46,41>>]}]},{dt,[],[{code,[],[<<98,115,114,95,117,110,105,99,111,100,101>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,97,108,108,32,116,104,101,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,99,108,117,100,105,110,103,32,67,82,76,70,44,32,97,110,100,32,115,111,32,111,110,44,32,116,104,101,32,100,101,102,97,117,108,116,41,46,32,40,79,118,101,114,114,105,100,101,115,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,46,41>>]}]},{dt,[],[{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,125>>]},<<47>>,{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,44,32,84,121,112,101,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,119,104,105,99,104,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,110,100,32,105,110,32,119,104,97,116,32,102,111,114,109,97,116,46,32,66,121,32,100,101,102,97,117,108,116,44,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,99,97,112,116,117,114,101,115,32,97,108,108,32,111,102,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,115,116,114,105,110,103,32,97,110,100,32,97,108,108,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,40,97,108,108,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,97,112,116,117,114,101,100,41,46,32,84,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32,40,122,101,114,111,45,98,97,115,101,100,41,32,105,110,100,101,120,101,115,32,111,102,32,116,104,101,32,99,97,112,116,117,114,101,100,32,112,97,114,116,115,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,115,112,101,99,105,102,105,101,100,32,97,115,32>>,{code,[],[<<123,79,102,102,115,101,116,44,76,101,110,103,116,104,125>>]},<<32,112,97,105,114,115,32,40,116,104,101,32>>,{code,[],[<<105,110,100,101,120>>]},<<32>>,{code,[],[<<84,121,112,101>>]},<<32,111,102,32,99,97,112,116,117,114,105,110,103,41,46>>]},{p,[],[<<65,115,32,97,110,32,101,120,97,109,112,108,101,32,111,102,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,32,114,101,116,117,114,110,115,44,32,97,115,32,102,105,114,115,116,32,97,110,100,32,111,110,108,121,32,99,97,112,116,117,114,101,100,32,115,116,114,105,110,103,44,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,40,34,97,98,99,100,34,32,105,110,32,116,104,101,32,109,105,100,100,108,101,41,32,97,115,32,97,110,32,105,110,100,101,120,32,112,97,105,114,32>>,{code,[],[<<123,51,44,52,125>>]},<<44,32,119,104,101,114,101,32,99,104,97,114,97,99,116,101,114,32,112,111,115,105,116,105,111,110,115,32,97,114,101,32,122,101,114,111,45,98,97,115,101,100,44,32,106,117,115,116,32,97,115,32,105,110,32,111,102,102,115,101,116,115,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,97,98,99,100,34,44,91,93,41,46>>]}]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32,116,104,105,115,32,99,97,108,108,32,105,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,51,44,52,125,93,125>>]}]},{p,[],[<<65,110,111,116,104,101,114,32,40,97,110,100,32,113,117,105,116,101,32,99,111,109,109,111,110,41,32,99,97,115,101,32,105,115,32,119,104,101,114,101,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,115,32,97,108,108,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,97,98,99,100,46,42,34,44,91,93,41,46>>]}]},{p,[],[<<72,101,114,101,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,108,121,32,112,111,105,110,116,115,32,111,117,116,32,97,108,108,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,98,101,103,105,110,110,105,110,103,32,97,116,32,105,110,100,101,120,32,48,44,32,97,110,100,32,105,116,32,105,115,32,49,48,32,99,104,97,114,97,99,116,101,114,115,32,108,111,110,103,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,48,44,49,48,125,93,125>>]}]},{p,[],[<<73,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,115,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,108,105,107,101,32,105,110,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,97,98,99,100,41,46,42,34,44,91,93,41,46>>]}]},{p,[],[<<97,108,108,32,111,102,32,116,104,101,32,109,97,116,99,104,101,100,32,115,117,98,106,101,99,116,32,105,115,32,99,97,112,116,117,114,101,100,44,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,48,44,49,48,125,44,123,51,44,52,125,93,125>>]}]},{p,[],[<<84,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,112,97,116,116,101,114,110,32,97,108,119,97,121,115,32,103,105,118,101,115,32,116,104,101,32,102,105,114,115,116,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,110,32,116,104,101,32,108,105,115,116,32,97,110,100,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,111,114,100,101,114,32,116,104,101,121,32,111,99,99,117,114,114,101,100,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<84,104,101,32,99,97,112,116,117,114,101,32,116,117,112,108,101,32,105,115,32,98,117,105,108,116,32,117,112,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<86,97,108,117,101,83,112,101,99>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,119,104,105,99,104,32,99,97,112,116,117,114,101,100,32,40,115,117,98,41,112,97,116,116,101,114,110,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32>>,{code,[],[<<86,97,108,117,101,83,112,101,99>>]},<<32,99,97,110,32,101,105,116,104,101,114,32,98,101,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,97,32,112,114,101,100,101,102,105,110,101,100,32,115,101,116,32,111,102,32,114,101,116,117,114,110,32,118,97,108,117,101,115,44,32,111,114,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,105,110,100,101,120,101,115,32,111,114,32,116,104,101,32,110,97,109,101,115,32,111,102,32,115,112,101,99,105,102,105,99,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,114,101,116,117,114,110,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,112,114,101,100,101,102,105,110,101,100,32,115,101,116,115,32,111,102,32,115,117,98,112,97,116,116,101,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[{p,[],[<<65,108,108,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,115,116,114,105,110,103,46,32,84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<97,108,108,95,110,97,109,101,115>>]}]},{dd,[],[{p,[],[<<65,108,108,32>>,{em,[],[<<110,97,109,101,100>>]},<<32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,97,115,32,105,102,32,97,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,111,102,32,97,108,108,32,116,104,101,32,110,97,109,101,115,32>>,{em,[],[<<105,110,32,97,108,112,104,97,98,101,116,105,99,97,108,32,111,114,100,101,114>>]},<<32,119,97,115,32,115,112,101,99,105,102,105,101,100,46,32,84,104,101,32,108,105,115,116,32,111,102,32,97,108,108,32,110,97,109,101,115,32,99,97,110,32,97,108,115,111,32,98,101,32,114,101,116,114,105,101,118,101,100,32,119,105,116,104,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,105,110,115,112,101,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,110,115,112,101,99,116,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<102,105,114,115,116>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,116,104,101,32,102,105,114,115,116,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,105,115,32,97,108,119,97,121,115,32,116,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46,32,65,108,108,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,100,105,115,99,97,114,100,101,100,46>>]}]},{dt,[],[{code,[],[<<97,108,108,95,98,117,116,95,102,105,114,115,116>>]}]},{dd,[],[{p,[],[<<65,108,108,32,98,117,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,115,117,98,112,97,116,116,101,114,110,44,32,116,104,97,116,32,105,115,44,32,97,108,108,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,98,117,116,32,110,111,116,32,116,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,84,104,105,115,32,105,115,32,117,115,101,102,117,108,32,105,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,115,32,97,32,119,104,111,108,101,32,109,97,116,99,104,101,115,32,97,32,108,97,114,103,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,98,117,116,32,116,104,101,32,112,97,114,116,32,121,111,117,32,97,114,101,32,105,110,116,101,114,101,115,116,101,100,32,105,110,32,105,115,32,105,110,32,97,110,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,46,32,73,102,32,116,104,101,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32>>,{code,[],[<<108,105,115,116>>]},<<32,111,114,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<44,32,110,111,116,32,114,101,116,117,114,110,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,121,111,117,32,97,114,101,32,110,111,116,32,105,110,116,101,114,101,115,116,101,100,32,105,110,32,105,115,32,97,32,103,111,111,100,32,119,97,121,32,116,111,32,111,112,116,105,109,105,122,101,46>>]}]},{dt,[],[{code,[],[<<110,111,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,110,111,32,109,97,116,99,104,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,103,105,118,101,115,32,116,104,101,32,115,105,110,103,108,101,32,97,116,111,109,32>>,{code,[],[<<109,97,116,99,104>>]},<<32,97,115,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,115,117,99,99,101,115,115,102,117,108,108,121,32,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32>>,{code,[],[<<123,109,97,116,99,104,44,32,108,105,115,116,40,41,125>>]},<<32,114,101,116,117,114,110,46,32,83,112,101,99,105,102,121,105,110,103,32,97,110,32,101,109,112,116,121,32,108,105,115,116,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,98,101,104,97,118,105,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,118,97,108,117,101,32,108,105,115,116,32,105,115,32,97,32,108,105,115,116,32,111,102,32,105,110,100,101,120,101,115,32,102,111,114,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,114,101,116,117,114,110,44,32,119,104,101,114,101,32,105,110,100,101,120,32,48,32,105,115,32,102,111,114,32,97,108,108,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,44,32,97,110,100,32,49,32,105,115,32,102,111,114,32,116,104,101,32,102,105,114,115,116,32,101,120,112,108,105,99,105,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,97,110,100,32,115,111,32,111,110,46,32,87,104,101,110,32,117,115,105,110,103,32,110,97,109,101,100,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,40,115,101,101,32,98,101,108,111,119,41,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,111,110,101,32,99,97,110,32,117,115,101,32>>,{code,[],[<<97,116,111,109,40,41>>]},<<115,32,111,114,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<115,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,58>>]},{pre,[],[{code,[],[<<34,46,42,40,97,98,99,100,41,46,42,34>>]}]},{p,[],[<<109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,115,116,114,105,110,103,32,34,65,66,67,97,98,99,100,65,66,67,34,44,32,99,97,112,116,117,114,105,110,103,32,111,110,108,121,32,116,104,101,32,34,97,98,99,100,34,32,112,97,114,116,32,40,116,104,101,32,102,105,114,115,116,32,101,120,112,108,105,99,105,116,32,115,117,98,112,97,116,116,101,114,110,41,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,97,98,99,100,41,46,42,34,44,91,123,99,97,112,116,117,114,101,44,91,49,93,125,93,41,46>>]}]},{p,[],[<<84,104,101,32,99,97,108,108,32,103,105,118,101,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,101,115,117,108,116,44,32,97,115,32,116,104,101,32,102,105,114,115,116,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,34,40,97,98,99,100,41,34,44,32,109,97,116,99,104,105,110,103,32,34,97,98,99,100,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,44,32,97,116,32,40,122,101,114,111,45,98,97,115,101,100,41,32,112,111,115,105,116,105,111,110,32,51,44,32,111,102,32,108,101,110,103,116,104,32,52,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,51,44,52,125,93,125>>]}]},{p,[],[<<67,111,110,115,105,100,101,114,32,116,104,101,32,115,97,109,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,98,117,116,32,119,105,116,104,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,101,120,112,108,105,99,105,116,108,121,32,110,97,109,101,100,32,39,70,79,79,39,58>>]},{pre,[],[{code,[],[<<34,46,42,40,63,60,70,79,79,62,97,98,99,100,41,46,42,34>>]}]},{p,[],[<<87,105,116,104,32,116,104,105,115,32,101,120,112,114,101,115,115,105,111,110,44,32,119,101,32,99,111,117,108,100,32,115,116,105,108,108,32,103,105,118,101,32,116,104,101,32,105,110,100,101,120,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,63,60,70,79,79,62,97,98,99,100,41,46,42,34,44,91,123,99,97,112,116,117,114,101,44,91,49,93,125,93,41,46>>]}]},{p,[],[<<103,105,118,105,110,103,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,98,101,102,111,114,101,46,32,66,117,116,44,32,97,115,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,110,97,109,101,100,44,32,119,101,32,99,97,110,32,97,108,115,111,32,115,112,101,99,105,102,121,32,105,116,115,32,110,97,109,101,32,105,110,32,116,104,101,32,118,97,108,117,101,32,108,105,115,116,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,63,60,70,79,79,62,97,98,99,100,41,46,42,34,44,91,123,99,97,112,116,117,114,101,44,91,39,70,79,79,39,93,125,93,41,46>>]}]},{p,[],[<<84,104,105,115,32,119,111,117,108,100,32,103,105,118,101,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,116,104,101,32,101,97,114,108,105,101,114,32,101,120,97,109,112,108,101,115,44,32,110,97,109,101,108,121,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,51,44,52,125,93,125>>]}]},{p,[],[<<84,104,101,32,118,97,108,117,101,115,32,108,105,115,116,32,99,97,110,32,115,112,101,99,105,102,121,32,105,110,100,101,120,101,115,32,111,114,32,110,97,109,101,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,118,97,114,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,116,121,112,101,46,32,73,102,32,116,104,101,32,116,121,112,101,32,105,115,32>>,{code,[],[<<105,110,100,101,120>>]},<<44,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,45,49,44,48,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,102,111,114,32,118,97,108,117,101,115,32,119,105,116,104,32,110,111,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,98,117,116,32,102,111,114,32,116,104,101,32,111,116,104,101,114,32,116,121,112,101,115,32,40>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,97,110,100,32>>,{code,[],[<<108,105,115,116>>]},<<41,44,32,116,104,101,32,118,97,108,117,101,115,32,97,114,101,32,116,104,101,32,101,109,112,116,121,32,98,105,110,97,114,121,32,111,114,32,108,105,115,116,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46>>]}]},{dt,[],[{code,[],[<<84,121,112,101>>]}]},{dd,[],[{p,[],[<<79,112,116,105,111,110,97,108,108,121,32,115,112,101,99,105,102,105,101,115,32,104,111,119,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32,73,102,32,111,109,105,116,116,101,100,44,32,116,104,101,32,100,101,102,97,117,108,116,32,111,102,32>>,{code,[],[<<105,110,100,101,120>>]},<<32,105,115,32,117,115,101,100,46>>]},{p,[],[{code,[],[<<84,121,112,101>>]},<<32,99,97,110,32,98,101,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<105,110,100,101,120>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,115,32,112,97,105,114,115,32,111,102,32,98,121,116,101,32,105,110,100,101,120,101,115,32,105,110,116,111,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,97,110,100,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,116,114,105,110,103,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,40,97,115,32,105,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,119,97,115,32,102,108,97,116,116,101,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<32,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101,35,99,104,97,114,97,99,116,101,114,115,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,105,99,111,100,101,58,99,104,97,114,97,99,116,101,114,115,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<32,98,101,102,111,114,101,32,109,97,116,99,104,105,110,103,41,46,32,78,111,116,105,99,101,32,116,104,97,116,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,114,101,115,117,108,116,115,32,105,110,32>>,{em,[],[<<98,121,116,101,45,111,114,105,101,110,116,101,100>>]},<<32,105,110,100,101,120,101,115,32,105,110,32,97,32,40,112,111,115,115,105,98,108,121,32,118,105,114,116,117,97,108,41,32>>,{em,[],[<<85,84,70,45,56,32,101,110,99,111,100,101,100>>]},<<32,98,105,110,97,114,121,46,32,65,32,98,121,116,101,32,105,110,100,101,120,32,116,117,112,108,101,32>>,{code,[],[<<123,48,44,50,125>>]},<<32,99,97,110,32,116,104,101,114,101,102,111,114,101,32,114,101,112,114,101,115,101,110,116,32,111,110,101,32,111,114,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,32,119,104,101,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,105,110,32,101,102,102,101,99,116,46,32,84,104,105,115,32,99,97,110,32,115,101,101,109,32,99,111,117,110,116,101,114,45,105,110,116,117,105,116,105,118,101,44,32,98,117,116,32,104,97,115,32,98,101,101,110,32,100,101,101,109,101,100,32,116,104,101,32,109,111,115,116,32,101,102,102,101,99,116,105,118,101,32,97,110,100,32,117,115,101,102,117,108,32,119,97,121,32,116,111,32,100,111,32,105,116,46,32,84,111,32,114,101,116,117,114,110,32,108,105,115,116,115,32,105,110,115,116,101,97,100,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,115,105,109,112,108,101,114,32,99,111,100,101,32,105,102,32,116,104,97,116,32,105,115,32,100,101,115,105,114,101,100,46,32,84,104,105,115,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<108,105,115,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,109,97,116,99,104,105,110,103,32,115,117,98,115,116,114,105,110,103,115,32,97,115,32,108,105,115,116,115,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,69,114,108,97,110,103,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<115,41,46,32,73,116,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,117,115,101,100,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,92,67,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,97,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,99,111,110,116,97,105,110,32,98,121,116,101,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,118,97,108,105,100,32,85,84,70,45,56,32,40,92,67,32,109,97,116,99,104,101,115,32,98,121,116,101,115,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,99,104,97,114,97,99,116,101,114,32,101,110,99,111,100,105,110,103,41,46,32,73,110,32,116,104,97,116,32,99,97,115,101,32,116,104,101,32>>,{code,[],[<<108,105,115,116>>]},<<32,99,97,112,116,117,114,105,110,103,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,116,104,101,32,115,97,109,101,32,116,121,112,101,115,32,111,102,32,116,117,112,108,101,115,32,116,104,97,116,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101,35,99,104,97,114,97,99,116,101,114,115,95,116,111,95,108,105,115,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,105,99,111,100,101,58,99,104,97,114,97,99,116,101,114,115,95,116,111,95,108,105,115,116,47,50>>]}]},<<32,99,97,110,32,114,101,116,117,114,110,44,32,110,97,109,101,108,121,32,116,104,114,101,101,45,116,117,112,108,101,115,32,119,105,116,104,32,116,97,103,32>>,{code,[],[<<105,110,99,111,109,112,108,101,116,101>>]},<<32,111,114,32>>,{code,[],[<<101,114,114,111,114>>]},<<44,32,116,104,101,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,111,110,118,101,114,116,101,100,32,99,104,97,114,97,99,116,101,114,115,32,97,110,100,32,116,104,101,32,105,110,118,97,108,105,100,32,85,84,70,45,56,32,116,97,105,108,32,111,102,32,116,104,101,32,99,111,110,118,101,114,115,105,111,110,32,97,115,32,97,32,98,105,110,97,114,121,46,32,84,104,101,32,98,101,115,116,32,115,116,114,97,116,101,103,121,32,105,115,32,116,111,32,97,118,111,105,100,32,117,115,105,110,103,32,116,104,101,32,92,67,32,115,101,113,117,101,110,99,101,32,119,104,101,110,32,99,97,112,116,117,114,105,110,103,32,108,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,109,97,116,99,104,105,110,103,32,115,117,98,115,116,114,105,110,103,115,32,97,115,32,98,105,110,97,114,105,101,115,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,117,115,101,100,44,32,116,104,101,115,101,32,98,105,110,97,114,105,101,115,32,97,114,101,32,105,110,32,85,84,70,45,56,46,32,73,102,32,116,104,101,32,92,67,32,115,101,113,117,101,110,99,101,32,105,115,32,117,115,101,100,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,116,104,101,32,98,105,110,97,114,105,101,115,32,99,97,110,32,98,101,32,105,110,118,97,108,105,100,32,85,84,70,45,56,46>>]}]}]}]}]},{p,[],[<<73,110,32,103,101,110,101,114,97,108,44,32,115,117,98,112,97,116,116,101,114,110,115,32,116,104,97,116,32,119,101,114,101,32,110,111,116,32,97,115,115,105,103,110,101,100,32,97,32,118,97,108,117,101,32,105,110,32,116,104,101,32,109,97,116,99,104,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,45,49,44,48,125>>]},<<32,119,104,101,110,32>>,{code,[],[<<116,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<105,110,100,101,120>>]},<<46,32,85,110,97,115,115,105,103,110,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,116,104,101,32,101,109,112,116,121,32,98,105,110,97,114,121,32,111,114,32,108,105,115,116,44,32,114,101,115,112,101,99,116,105,118,101,108,121,44,32,102,111,114,32,111,116,104,101,114,32,114,101,116,117,114,110,32,116,121,112,101,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,58>>]},{pre,[],[{code,[],[<<34,46,42,40,40,63,60,70,79,79,62,97,98,100,100,41,124,97,40,46,46,100,41,41,46,42,34>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,119,104,101,114,101,32,116,104,101,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,112,111,115,105,116,105,111,110,32,100,101,116,101,114,109,105,110,101,115,32,116,104,101,32,111,114,100,101,114,32,105,110,32,116,104,101,32,114,101,115,117,108,116,44,32,104,101,110,99,101,32>>,{code,[],[<<40,40,63,60,70,79,79,62,97,98,100,100,41,124,97,40,46,46,100,41,41>>]},<<32,105,115,32,115,117,98,112,97,116,116,101,114,110,32,105,110,100,101,120,32,49,44,32>>,{code,[],[<<40,63,60,70,79,79,62,97,98,100,100,41>>]},<<32,105,115,32,115,117,98,112,97,116,116,101,114,110,32,105,110,100,101,120,32,50,44,32,97,110,100,32>>,{code,[],[<<40,46,46,100,41>>]},<<32,105,115,32,115,117,98,112,97,116,116,101,114,110,32,105,110,100,101,120,32,51,46,32,87,104,101,110,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,116,114,105,110,103,58>>]},{pre,[],[{code,[],[<<34,65,66,67,97,98,99,100,65,66,67,34>>]}]},{p,[],[<<116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,97,116,32,105,110,100,101,120,32,50,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,44,32,97,115,32,34,97,98,100,100,34,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,115,116,114,105,110,103,44,32,98,117,116,32,116,104,101,32,99,111,109,112,108,101,116,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,40,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,32>>,{code,[],[<<97,40,46,46,100,41>>]},<<41,46,32,84,104,101,32,115,117,98,112,97,116,116,101,114,110,32,97,116,32,105,110,100,101,120,32,50,32,105,115,32,116,104,101,114,101,102,111,114,101,32,117,110,97,115,115,105,103,110,101,100,32,97,110,100,32,116,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,48,44,49,48,125,44,123,51,44,52,125,44,123,45,49,44,48,125,44,123,52,44,51,125,93,125>>]}]},{p,[],[<<83,101,116,116,105,110,103,32,116,104,101,32,99,97,112,116,117,114,101,32>>,{code,[],[<<84,121,112,101>>]},<<32,116,111,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,103,105,118,101,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,60,60,34,65,66,67,97,98,99,100,65,66,67,34,62,62,44,60,60,34,97,98,99,100,34,62,62,44,60,60,62,62,44,60,60,34,98,99,100,34,62,62,93,125>>]}]},{p,[],[<<72,101,114,101,32,116,104,101,32,101,109,112,116,121,32,98,105,110,97,114,121,32,40>>,{code,[],[<<60,60,62,62>>]},<<41,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,117,110,97,115,115,105,103,110,101,100,32,115,117,98,112,97,116,116,101,114,110,46,32,73,110,32,116,104,101,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,99,97,115,101,44,32,115,111,109,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,97,116,99,104,105,110,103,32,105,115,32,116,104,101,114,101,102,111,114,101,32,108,111,115,116,44,32,97,115,32>>,{code,[],[<<60,60,62,62>>]},<<32,99,97,110,32,97,108,115,111,32,98,101,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,99,97,112,116,117,114,101,100,46>>]},{p,[],[<<73,102,32,100,105,102,102,101,114,101,110,116,105,97,116,105,111,110,32,98,101,116,119,101,101,110,32,101,109,112,116,121,32,109,97,116,99,104,101,115,32,97,110,100,32,110,111,110,45,101,120,105,115,116,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,105,115,32,110,101,99,101,115,115,97,114,121,44,32,117,115,101,32,116,104,101,32>>,{code,[],[<<116,121,112,101>>]},<<32>>,{code,[],[<<105,110,100,101,120>>]},<<32,97,110,100,32,100,111,32,116,104,101,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,116,104,101,32,102,105,110,97,108,32,116,121,112,101,32,105,110,32,69,114,108,97,110,103,32,99,111,100,101,46>>]},{p,[],[<<87,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,115,32,115,112,101,99,105,105,102,105,101,100,44,32,116,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,102,102,101,99,116,115,32,101,97,99,104,32,109,97,116,99,104,32,115,101,112,97,114,97,116,101,108,121,44,32,115,111,32,116,104,97,116,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,99,97,99,98,34,44,34,99,40,97,124,98,41,34,44,91,103,108,111,98,97,108,44,123,99,97,112,116,117,114,101,44,91,49,93,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,91,34,97,34,93,44,91,34,98,34,93,93,125>>]}]}]}]},{p,[],[<<70,111,114,32,97,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,111,112,116,105,111,110,115,32,111,110,108,121,32,97,102,102,101,99,116,105,110,103,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,115,116,101,112,44,32,115,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,52,49,57>>,signature => [{attribute,76,spec,{{run,3},[{type,76,bounded_fun,[{type,76,'fun',[{type,76,product,[{var,76,'Subject'},{var,76,'RE'},{var,76,'Options'}]},{type,76,union,[{type,76,tuple,[{atom,76,match},{var,76,'Captured'}]},{atom,77,match},{atom,78,nomatch},{type,79,tuple,[{atom,79,error},{var,79,'ErrType'}]}]}]},[{type,80,constraint,[{atom,80,is_subtype},[{var,80,'Subject'},{type,80,union,[{type,80,iodata,[]},{remote_type,80,[{atom,80,unicode},{atom,80,charlist},[]]}]}]]},{type,81,constraint,[{atom,81,is_subtype},[{var,81,'RE'},{type,81,union,[{user_type,81,mp,[]},{type,81,iodata,[]},{remote_type,81,[{atom,81,unicode},{atom,81,charlist},[]]}]}]]},{type,82,constraint,[{atom,82,is_subtype},[{var,82,'Options'},{type,82,list,[{var,82,'Option'}]}]]},{type,83,constraint,[{atom,83,is_subtype},[{var,83,'Option'},{type,83,union,[{atom,83,anchored},{atom,83,global},{atom,83,notbol},{atom,83,noteol},{atom,83,notempty},{atom,84,notempty_atstart},{atom,84,report_errors},{type,85,tuple,[{atom,85,offset},{type,85,non_neg_integer,[]}]},{type,86,tuple,[{atom,86,match_limit},{type,86,non_neg_integer,[]}]},{type,87,tuple,[{atom,87,match_limit_recursion},{type,87,non_neg_integer,[]}]},{type,88,tuple,[{atom,88,newline},{ann_type,88,[{var,88,'NLSpec'},{user_type,88,nl_spec,[]}]}]},{atom,89,bsr_anycrlf},{atom,89,bsr_unicode},{type,89,tuple,[{atom,89,capture},{var,89,'ValueSpec'}]},{type,90,tuple,[{atom,90,capture},{var,90,'ValueSpec'},{var,90,'Type'}]},{var,90,'CompileOpt'}]}]]},{type,91,constraint,[{atom,91,is_subtype},[{var,91,'Type'},{type,91,union,[{atom,91,index},{atom,91,list},{atom,91,binary}]}]]},{type,92,constraint,[{atom,92,is_subtype},[{var,92,'ValueSpec'},{type,92,union,[{atom,92,all},{atom,92,all_but_first},{atom,92,all_names},{atom,92,first},{atom,92,none},{var,92,'ValueList'}]}]]},{type,93,constraint,[{atom,93,is_subtype},[{var,93,'ValueList'},{type,93,list,[{var,93,'ValueID'}]}]]},{type,94,constraint,[{atom,94,is_subtype},[{var,94,'ValueID'},{type,94,union,[{type,94,integer,[]},{type,94,string,[]},{type,94,atom,[]}]}]]},{type,95,constraint,[{atom,95,is_subtype},[{var,95,'CompileOpt'},{user_type,95,compile_option,[]}]]},{type,96,constraint,[{atom,96,is_subtype},[{var,96,'Captured'},{type,96,union,[{type,96,list,[{var,96,'CaptureData'}]},{type,96,list,[{type,96,list,[{var,96,'CaptureData'}]}]}]}]]},{type,97,constraint,[{atom,97,is_subtype},[{var,97,'CaptureData'},{type,97,union,[{type,97,tuple,[{type,97,integer,[]},{type,97,integer,[]}]},{var,98,'ListConversionData'},{type,99,binary,[]}]}]]},{type,100,constraint,[{atom,100,is_subtype},[{var,100,'ListConversionData'},{type,100,union,[{type,100,string,[]},{type,101,tuple,[{atom,101,error},{type,101,string,[]},{type,101,binary,[]}]},{type,102,tuple,[{atom,102,incomplete},{type,102,string,[]},{type,102,binary,[]}]}]}]]},{type,103,constraint,[{atom,103,is_subtype},[{var,103,'ErrType'},{type,103,union,[{atom,103,match_limit},{atom,103,match_limit_recursion},{type,103,tuple,[{atom,103,compile},{var,103,'CompileErr'}]}]}]]},{type,104,constraint,[{atom,104,is_subtype},[{var,104,'CompileErr'},{type,104,tuple,[{ann_type,104,[{var,104,'ErrString'},{type,104,string,[]}]},{ann_type,104,[{var,104,'Position'},{type,104,non_neg_integer,[]}]}]}]]}]]}]}}]}},{{function,split,2},[{file,[114,101,46,101,114,108]},{location,153}],[<<115,112,108,105,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<115,112,108,105,116,40,83,117,98,106,101,99,116,44,32,82,69,44,32,91,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,57,57,52>>,signature => [{attribute,153,spec,{{split,2},[{type,153,bounded_fun,[{type,153,'fun',[{type,153,product,[{var,153,'Subject'},{var,153,'RE'}]},{var,153,'SplitList'}]},[{type,154,constraint,[{atom,154,is_subtype},[{var,154,'Subject'},{type,154,union,[{type,154,iodata,[]},{remote_type,154,[{atom,154,unicode},{atom,154,charlist},[]]}]}]]},{type,155,constraint,[{atom,155,is_subtype},[{var,155,'RE'},{type,155,union,[{user_type,155,mp,[]},{type,155,iodata,[]}]}]]},{type,156,constraint,[{atom,156,is_subtype},[{var,156,'SplitList'},{type,156,list,[{type,156,union,[{type,156,iodata,[]},{remote_type,156,[{atom,156,unicode},{atom,156,charlist},[]]}]}]}]]}]]}]}}]}},{{function,split,3},[{file,[114,101,46,101,114,108]},{location,166}],[<<115,112,108,105,116,47,51>>],#{<<101,110>> => [{p,[],[<<83,112,108,105,116,115,32,116,104,101,32,105,110,112,117,116,32,105,110,116,111,32,112,97,114,116,115,32,98,121,32,102,105,110,100,105,110,103,32,116,111,107,101,110,115,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,115,117,112,112,108,105,101,100,46,32,84,104,101,32,115,112,108,105,116,116,105,110,103,32,105,115,32,98,97,115,105,99,97,108,108,121,32,100,111,110,101,32,98,121,32,114,117,110,110,105,110,103,32,97,32,103,108,111,98,97,108,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,32,97,110,100,32,100,105,118,105,100,105,110,103,32,116,104,101,32,105,110,105,116,105,97,108,32,115,116,114,105,110,103,32,119,104,101,114,101,118,101,114,32,97,32,109,97,116,99,104,32,111,99,99,117,114,115,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,105,115,32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,104,101,32,111,117,116,112,117,116,46>>]},{p,[],[<<65,115,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,97,110,32>>,{code,[],[<<109,112,40,41>>]},<<32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,114,101,113,117,105,114,101,115,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,116,111,32,98,101,32,97,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<46,32,73,102,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,105,109,112,108,105,99,105,116,108,121,32,97,110,100,32,116,104,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,98,111,116,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,110,100,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,97,114,101,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<115,46>>]},{p,[],[<<84,104,101,32,114,101,115,117,108,116,32,105,115,32,103,105,118,101,110,32,97,115,32,97,32,108,105,115,116,32,111,102,32,34,115,116,114,105,110,103,115,34,44,32,116,104,101,32,112,114,101,102,101,114,114,101,100,32,100,97,116,97,32,116,121,112,101,32,115,112,101,99,105,102,105,101,100,32,105,110,32,111,112,116,105,111,110,32>>,{code,[],[<<114,101,116,117,114,110>>]},<<32,40,100,101,102,97,117,108,116,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<41,46>>]},{p,[],[<<73,102,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,32,97,115,32,119,101,108,108,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,110,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,34,44,34,103,34,93>>]}]},{p,[],[<<119,104,105,108,101>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,40,91,108,110,93,41,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,108,34,44,34,97,34,44,34,110,34,44,34,103,34,93>>]}]},{p,[],[<<84,104,101,32,116,101,120,116,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,40,109,97,114,107,101,100,32,98,121,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,41,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,108,105,115,116,32,119,104,101,114,101,32,105,116,32,119,97,115,32,102,111,117,110,100,46,32,84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,99,111,110,99,97,116,101,110,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,32,115,112,108,105,116,32,119,104,101,114,101,32,116,104,101,32,119,104,111,108,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,97,32,115,105,110,103,108,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,40,97,115,32,105,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,41,32,97,108,119,97,121,115,32,114,101,115,117,108,116,115,32,105,110,32,116,104,101,32,111,114,105,103,105,110,97,108,32,115,116,114,105,110,103,46>>]},{p,[],[<<65,115,32,116,104,101,114,101,32,105,115,32,110,111,32,109,97,116,99,104,105,110,103,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,102,111,114,32,116,104,101,32,108,97,115,116,32,112,97,114,116,32,105,110,32,116,104,101,32,101,120,97,109,112,108,101,32,40,116,104,101,32,34,103,34,41,44,32,110,111,116,104,105,110,103,32,105,115,32,105,110,115,101,114,116,101,100,32,97,102,116,101,114,32,116,104,97,116,46,32,84,111,32,109,97,107,101,32,116,104,101,32,103,114,111,117,112,32,111,102,32,115,116,114,105,110,103,115,32,97,110,100,32,116,104,101,32,112,97,114,116,115,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,109,111,114,101,32,111,98,118,105,111,117,115,44,32,111,110,101,32,99,97,110,32,117,115,101,32,111,112,116,105,111,110,32>>,{code,[],[<<103,114,111,117,112>>]},<<44,32,119,104,105,99,104,32,103,114,111,117,112,115,32,116,111,103,101,116,104,101,114,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,112,97,114,116,115,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,119,104,101,110,32,116,104,101,32,115,116,114,105,110,103,32,119,97,115,32,115,112,108,105,116,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,40,91,108,110,93,41,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,103,114,111,117,112,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,91,34,69,114,34,44,34,108,34,93,44,91,34,97,34,44,34,110,34,93,44,91,34,103,34,93,93>>]}]},{p,[],[<<72,101,114,101,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,102,105,114,115,116,32,109,97,116,99,104,101,100,32,116,104,101,32,34,108,34,44,32,99,97,117,115,105,110,103,32,34,69,114,34,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,112,97,114,116,32,105,110,32,116,104,101,32,114,101,115,117,108,116,46,32,87,104,101,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,100,44,32,116,104,101,32,40,111,110,108,121,41,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,98,111,117,110,100,32,116,111,32,116,104,101,32,34,108,34,44,32,115,111,32,116,104,101,32,34,108,34,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,32,116,104,101,32,103,114,111,117,112,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,34,69,114,34,46,32,84,104,101,32,110,101,120,116,32,109,97,116,99,104,32,105,115,32,111,102,32,116,104,101,32,34,110,34,44,32,109,97,107,105,110,103,32,34,97,34,32,116,104,101,32,110,101,120,116,32,112,97,114,116,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32,65,115,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,105,115,32,98,111,117,110,100,32,116,111,32,115,117,98,115,116,114,105,110,103,32,34,110,34,32,105,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32,34,110,34,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,116,111,32,116,104,105,115,32,103,114,111,117,112,46,32,84,104,101,32,108,97,115,116,32,103,114,111,117,112,32,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,116,114,105,110,103,44,32,97,115,32,110,111,32,109,111,114,101,32,109,97,116,99,104,101,115,32,97,114,101,32,102,111,117,110,100,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,97,108,108,32,112,97,114,116,115,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,115,44,32,97,114,101,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32,116,104,101,32,102,117,110,99,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,110,34,44,91,93,93>>]}]},{p,[],[<<97,115,32,116,104,101,32,109,97,116,99,104,105,110,103,32,111,102,32,116,104,101,32,34,103,34,32,105,110,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,108,101,97,118,101,115,32,97,110,32,101,109,112,116,121,32,114,101,115,116,44,32,119,104,105,99,104,32,105,115,32,97,108,115,111,32,114,101,116,117,114,110,101,100,46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,100,105,102,102,101,114,115,32,102,114,111,109,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,115,112,108,105,116,32,102,117,110,99,116,105,111,110,32,105,110,32,80,101,114,108,44,32,119,104,101,114,101,32,101,109,112,116,121,32,115,116,114,105,110,103,115,32,97,116,32,116,104,101,32,101,110,100,32,97,114,101,32,98,121,32,100,101,102,97,117,108,116,32,114,101,109,111,118,101,100,46,32,84,111,32,103,101,116,32,116,104,101,32,34,116,114,105,109,109,105,110,103,34,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32,80,101,114,108,44,32,115,112,101,99,105,102,121,32>>,{code,[],[<<116,114,105,109>>]},<<32,97,115,32,97,110,32,111,112,116,105,111,110,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,116,114,105,109,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,110,34,93>>]}]},{p,[],[<<84,104,101,32,34,116,114,105,109,34,32,111,112,116,105,111,110,32,115,97,121,115,59,32,34,103,105,118,101,32,109,101,32,97,115,32,109,97,110,121,32,112,97,114,116,115,32,97,115,32,112,111,115,115,105,98,108,101,32,101,120,99,101,112,116,32,116,104,101,32,101,109,112,116,121,32,111,110,101,115,34,44,32,119,104,105,99,104,32,115,111,109,101,116,105,109,101,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,46,32,89,111,117,32,99,97,110,32,97,108,115,111,32,115,112,101,99,105,102,121,32,104,111,119,32,109,97,110,121,32,112,97,114,116,115,32,121,111,117,32,119,97,110,116,44,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,112,97,114,116,115,44>>]},<<78>>,{code,[],[<<125>>]},<<58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,123,112,97,114,116,115,44,50,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,110,103,34,93>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,108,97,115,116,32,112,97,114,116,32,105,115,32,34,97,110,103,34,44,32,110,111,116,32,34,97,110,34,44,32,97,115,32,115,112,108,105,116,116,105,110,103,32,119,97,115,32,115,112,101,99,105,102,105,101,100,32,105,110,116,111,32,116,119,111,32,112,97,114,116,115,44,32,97,110,100,32,116,104,101,32,115,112,108,105,116,116,105,110,103,32,115,116,111,112,115,32,119,104,101,110,32,101,110,111,117,103,104,32,112,97,114,116,115,32,97,114,101,32,103,105,118,101,110,44,32,119,104,105,99,104,32,105,115,32,119,104,121,32,116,104,101,32,114,101,115,117,108,116,32,100,105,102,102,101,114,115,32,102,114,111,109,32,116,104,97,116,32,111,102,32>>,{code,[],[<<116,114,105,109>>]},<<46>>]},{p,[],[<<77,111,114,101,32,116,104,97,110,32,116,104,114,101,101,32,112,97,114,116,115,32,97,114,101,32,110,111,116,32,112,111,115,115,105,98,108,101,32,119,105,116,104,32,116,104,105,115,32,105,110,100,97,116,97,44,32,115,111>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,123,112,97,114,116,115,44,52,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,116,104,101,32,100,101,102,97,117,108,116,44,32,119,104,105,99,104,32,105,115,32,116,111,32,98,101,32,118,105,101,119,101,100,32,97,115,32,34,97,110,32,105,110,102,105,110,105,116,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,34,46>>]},{p,[],[<<83,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<48>>]},<<32,97,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,111,112,116,105,111,110,32>>,{code,[],[<<116,114,105,109>>]},<<46,32,73,102,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,99,97,112,116,117,114,101,100,44,32,101,109,112,116,121,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,109,97,116,99,104,101,100,32,97,116,32,116,104,101,32,101,110,100,32,97,114,101,32,97,108,115,111,32,115,116,114,105,112,112,101,100,32,102,114,111,109,32,116,104,101,32,114,101,115,117,108,116,32,105,102,32>>,{code,[],[<<116,114,105,109>>]},<<32,111,114,32>>,{code,[],[<<123,112,97,114,116,115,44,48,125>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<116,114,105,109>>]},<<32,98,101,104,97,118,105,111,114,32,99,111,114,114,101,115,112,111,110,100,115,32,101,120,97,99,116,108,121,32,116,111,32,116,104,101,32,80,101,114,108,32,100,101,102,97,117,108,116,46,32>>,{code,[],[<<123,112,97,114,116,115,44,78,125>>]},<<44,32,119,104,101,114,101,32,78,32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,44,32,99,111,114,114,101,115,112,111,110,100,115,32,101,120,97,99,116,108,121,32,116,111,32,116,104,101,32,80,101,114,108,32,98,101,104,97,118,105,111,114,32,119,105,116,104,32,97,32,112,111,115,105,116,105,118,101,32,110,117,109,101,114,105,99,97,108,32,116,104,105,114,100,32,112,97,114,97,109,101,116,101,114,46,32,84,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32>>,{code,[],[<<115,112,108,105,116,47,51>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,80,101,114,108,32,98,101,104,97,118,105,111,114,32,119,104,101,110,32,97,32,110,101,103,97,116,105,118,101,32,105,110,116,101,103,101,114,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,116,104,101,32,116,104,105,114,100,32,112,97,114,97,109,101,116,101,114,32,102,111,114,32,116,104,101,32,80,101,114,108,32,114,111,117,116,105,110,101,46>>]},{p,[],[<<83,117,109,109,97,114,121,32,111,102,32,111,112,116,105,111,110,115,32,110,111,116,32,112,114,101,118,105,111,117,115,108,121,32,100,101,115,99,114,105,98,101,100,32,102,111,114,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<114,117,110,47,51>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<123,114,101,116,117,114,110,44,82,101,116,117,114,110,84,121,112,101,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,104,111,119,32,116,104,101,32,112,97,114,116,115,32,111,102,32,116,104,101,32,111,114,105,103,105,110,97,108,32,115,116,114,105,110,103,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,108,105,115,116,46,32,86,97,108,105,100,32,116,121,112,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<105,111,100,97,116,97>>]}]},{dd,[],[{p,[],[<<84,104,101,32,118,97,114,105,97,110,116,32,111,102,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<32,116,104,97,116,32,103,105,118,101,115,32,116,104,101,32,108,101,97,115,116,32,99,111,112,121,105,110,103,32,111,102,32,100,97,116,97,32,119,105,116,104,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,40,111,102,116,101,110,32,97,32,98,105,110,97,114,121,44,32,98,117,116,32,100,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,105,116,41,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<65,108,108,32,112,97,114,116,115,32,114,101,116,117,114,110,101,100,32,97,115,32,98,105,110,97,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<108,105,115,116>>]}]},{dd,[],[{p,[],[<<65,108,108,32,112,97,114,116,115,32,114,101,116,117,114,110,101,100,32,97,115,32,108,105,115,116,115,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,34,115,116,114,105,110,103,115,34,41,46>>]}]}]}]},{dt,[],[{code,[],[<<103,114,111,117,112>>]}]},{dd,[],[{p,[],[<<71,114,111,117,112,115,32,116,111,103,101,116,104,101,114,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,112,97,114,116,115,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,111,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,102,114,111,109,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,105,110,32,116,104,105,115,32,99,97,115,101,32,97,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,111,102,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<115,46,32,69,97,99,104,32,115,117,98,108,105,115,116,32,98,101,103,105,110,115,32,119,105,116,104,32,116,104,101,32,115,116,114,105,110,103,32,112,105,99,107,101,100,32,111,117,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,102,111,108,108,111,119,101,100,32,98,121,32,116,104,101,32,112,97,114,116,115,32,109,97,116,99,104,105,110,103,32,101,97,99,104,32,111,102,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,111,114,100,101,114,32,111,102,32,111,99,99,117,114,114,101,110,99,101,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,112,97,114,116,115,44,78,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,105,115,32,116,111,32,98,101,32,115,112,108,105,116,32,105,110,116,111,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,105,115,32,116,111,32,98,101,32,97,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,32,102,111,114,32,97,32,115,112,101,99,105,102,105,99,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,44,32,97,110,100,32>>,{code,[],[<<105,110,102,105,110,105,116,121>>]},<<32,102,111,114,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,112,111,115,115,105,98,108,101,32,40,116,104,101,32,100,101,102,97,117,108,116,41,46,32,83,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,112,97,114,116,115,44,48,125>>]},<<32,103,105,118,101,115,32,97,115,32,109,97,110,121,32,112,97,114,116,115,32,97,115,32,112,111,115,115,105,98,108,101,32,100,105,115,114,101,103,97,114,100,105,110,103,32,101,109,112,116,121,32,112,97,114,116,115,32,97,116,32,116,104,101,32,101,110,100,44,32,116,104,101,32,115,97,109,101,32,97,115,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<116,114,105,109>>]},<<46>>]}]},{dt,[],[{code,[],[<<116,114,105,109>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,101,109,112,116,121,32,112,97,114,116,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,114,101,115,117,108,116,32,108,105,115,116,32,97,114,101,32,116,111,32,98,101,32,100,105,115,114,101,103,97,114,100,101,100,46,32,84,104,101,32,115,97,109,101,32,97,115,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,112,97,114,116,115,44,48,125>>]},<<46,32,84,104,105,115,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32>>,{code,[],[<<115,112,108,105,116>>]},<<32,98,117,105,108,116,45,105,110,32,102,117,110,99,116,105,111,110,32,105,110,32,80,101,114,108,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,49,48,48,51>>,signature => [{attribute,166,spec,{{split,3},[{type,166,bounded_fun,[{type,166,'fun',[{type,166,product,[{var,166,'Subject'},{var,166,'RE'},{var,166,'Options'}]},{var,166,'SplitList'}]},[{type,167,constraint,[{atom,167,is_subtype},[{var,167,'Subject'},{type,167,union,[{type,167,iodata,[]},{remote_type,167,[{atom,167,unicode},{atom,167,charlist},[]]}]}]]},{type,168,constraint,[{atom,168,is_subtype},[{var,168,'RE'},{type,168,union,[{user_type,168,mp,[]},{type,168,iodata,[]},{remote_type,168,[{atom,168,unicode},{atom,168,charlist},[]]}]}]]},{type,169,constraint,[{atom,169,is_subtype},[{var,169,'Options'},{type,169,list,[{var,169,'Option'}]}]]},{type,170,constraint,[{atom,170,is_subtype},[{var,170,'Option'},{type,170,union,[{atom,170,anchored},{atom,170,notbol},{atom,170,noteol},{atom,170,notempty},{atom,170,notempty_atstart},{type,171,tuple,[{atom,171,offset},{type,171,non_neg_integer,[]}]},{type,171,tuple,[{atom,171,newline},{user_type,171,nl_spec,[]}]},{type,172,tuple,[{atom,172,match_limit},{type,172,non_neg_integer,[]}]},{type,173,tuple,[{atom,173,match_limit_recursion},{type,173,non_neg_integer,[]}]},{atom,174,bsr_anycrlf},{atom,174,bsr_unicode},{type,174,tuple,[{atom,174,return},{var,174,'ReturnType'}]},{type,175,tuple,[{atom,175,parts},{var,175,'NumParts'}]},{atom,175,group},{atom,175,trim},{var,175,'CompileOpt'}]}]]},{type,176,constraint,[{atom,176,is_subtype},[{var,176,'NumParts'},{type,176,union,[{type,176,non_neg_integer,[]},{atom,176,infinity}]}]]},{type,177,constraint,[{atom,177,is_subtype},[{var,177,'ReturnType'},{type,177,union,[{atom,177,iodata},{atom,177,list},{atom,177,binary}]}]]},{type,178,constraint,[{atom,178,is_subtype},[{var,178,'CompileOpt'},{user_type,178,compile_option,[]}]]},{type,179,constraint,[{atom,179,is_subtype},[{var,179,'SplitList'},{type,179,union,[{type,179,list,[{var,179,'RetData'}]},{type,179,list,[{var,179,'GroupedRetData'}]}]}]]},{type,180,constraint,[{atom,180,is_subtype},[{var,180,'GroupedRetData'},{type,180,list,[{var,180,'RetData'}]}]]},{type,181,constraint,[{atom,181,is_subtype},[{var,181,'RetData'},{type,181,union,[{type,181,iodata,[]},{remote_type,181,[{atom,181,unicode},{atom,181,charlist},[]]},{type,181,binary,[]},{type,181,list,[]}]}]]}]]}]}}]}},{{type,mp,0},[{file,[114,101,46,101,114,108]},{location,23}],[<<45,116,121,112,101,32,109,112,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<79,112,97,113,117,101,32,100,97,116,97,32,116,121,112,101,32,99,111,110,116,97,105,110,105,110,103,32,97,32,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32>>,{code,[],[<<109,112,40,41>>]},<<32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,97,32,116,117,112,108,101,40,41,32,104,97,118,105,110,103,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<114,101,95,112,97,116,116,101,114,110>>]},<<32,97,115,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,116,111,32,97,108,108,111,119,32,102,111,114,32,109,97,116,99,104,105,110,103,32,105,110,32,103,117,97,114,100,115,46,32,84,104,101,32,97,114,105,116,121,32,111,102,32,116,104,101,32,116,117,112,108,101,32,111,114,32,116,104,101,32,99,111,110,116,101,110,116,32,111,102,32,116,104,101,32,111,116,104,101,114,32,102,105,101,108,100,115,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,102,117,116,117,114,101,32,69,114,108,97,110,103,47,79,84,80,32,114,101,108,101,97,115,101,115,46>>]}]},#{signature => [{attribute,23,type,{mp,{type,23,tuple,[{atom,23,re_pattern},{var,23,'_'},{var,23,'_'},{var,23,'_'},{var,23,'_'}]},[]}}]}},{{type,nl_spec,0},[{file,[114,101,46,101,114,108]},{location,25}],[<<45,116,121,112,101,32,110,108,95,115,112,101,99,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,25,type,{nl_spec,{type,25,union,[{atom,25,cr},{atom,25,crlf},{atom,25,lf},{atom,25,anycrlf},{atom,25,any}]},[]}}]}},{{type,compile_option,0},[{file,[114,101,46,101,114,108]},{location,27}],[<<45,116,121,112,101,32,99,111,109,112,105,108,101,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,27,type,{compile_option,{type,27,union,[{atom,27,unicode},{atom,27,anchored},{atom,27,caseless},{atom,27,dollar_endonly},{atom,28,dotall},{atom,28,extended},{atom,28,firstline},{atom,28,multiline},{atom,29,no_auto_capture},{atom,29,dupnames},{atom,29,ungreedy},{type,30,tuple,[{atom,30,newline},{user_type,30,nl_spec,[]}]},{atom,31,bsr_anycrlf},{atom,31,bsr_unicode},{atom,32,no_start_optimize},{atom,32,ucp},{atom,32,never_utf}]},[]}}]}}]}. \ No newline at end of file
+{docs_v1,[{file,[114,101,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<84,104,105,115,32,109,111,100,117,108,101,32,99,111,110,116,97,105,110,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,32,102,111,114,32,115,116,114,105,110,103,115,32,97,110,100,32,98,105,110,97,114,105,101,115,46>>]},{p,[],[<<84,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,101,103,101,120,112,95,115,121,110,116,97,120>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110>>]},<<32,115,121,110,116,97,120,32,97,110,100,32,115,101,109,97,110,116,105,99,115,32,114,101,115,101,109,98,108,101,32,116,104,97,116,32,111,102,32,80,101,114,108,46>>]},{p,[],[<<84,104,101,32,109,97,116,99,104,105,110,103,32,97,108,103,111,114,105,116,104,109,115,32,111,102,32,116,104,101,32,108,105,98,114,97,114,121,32,97,114,101,32,98,97,115,101,100,32,111,110,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,44,32,98,117,116,32,110,111,116,32,97,108,108,32,111,102,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,32,105,115,32,105,110,116,101,114,102,97,99,101,100,32,97,110,100,32,115,111,109,101,32,112,97,114,116,115,32,111,102,32,116,104,101,32,108,105,98,114,97,114,121,32,103,111,32,98,101,121,111,110,100,32,119,104,97,116,32,80,67,82,69,32,111,102,102,101,114,115,46,32,67,117,114,114,101,110,116,108,121,32,80,67,82,69,32,118,101,114,115,105,111,110,32,56,46,52,48,32,40,114,101,108,101,97,115,101,32,100,97,116,101,32,50,48,49,55,45,48,49,45,49,49,41,32,105,115,32,117,115,101,100,46,32,84,104,101,32,115,101,99,116,105,111,110,115,32,111,102,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,116,104,97,116,32,97,114,101,32,114,101,108,101,118,97,110,116,32,116,111,32,116,104,105,115,32,109,111,100,117,108,101,32,97,114,101,32,105,110,99,108,117,100,101,100,32,104,101,114,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,108,105,116,101,114,97,108,32,115,121,110,116,97,120,32,102,111,114,32,115,116,114,105,110,103,115,32,117,115,101,115,32,116,104,101,32,34,92,34,32,40,98,97,99,107,115,108,97,115,104,41,32,99,104,97,114,97,99,116,101,114,32,97,115,32,97,110,32,101,115,99,97,112,101,32,99,111,100,101,46,32,89,111,117,32,110,101,101,100,32,116,111,32,101,115,99,97,112,101,32,98,97,99,107,115,108,97,115,104,101,115,32,105,110,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,115,44,32,98,111,116,104,32,105,110,32,121,111,117,114,32,99,111,100,101,32,97,110,100,32,105,110,32,116,104,101,32,115,104,101,108,108,44,32,119,105,116,104,32,97,110,32,101,120,116,114,97,32,98,97,99,107,115,108,97,115,104,44,32,116,104,97,116,32,105,115,44,32,34,92,92,34,46>>]}]},{a,[{id,<<114,101,103,101,120,112,95,115,121,110,116,97,120>>}],[]},{h2,[],[<<80,101,114,108,45,76,105,107,101,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,83,121,110,116,97,120>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,32,99,111,110,116,97,105,110,32,114,101,102,101,114,101,110,99,101,32,109,97,116,101,114,105,97,108,32,102,111,114,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,117,115,101,100,32,98,121,32,116,104,105,115,32,109,111,100,117,108,101,46,32,84,104,101,32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,98,97,115,101,100,32,111,110,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,32,119,105,116,104,32,99,104,97,110,103,101,115,32,119,104,101,114,101,32,116,104,105,115,32,109,111,100,117,108,101,32,98,101,104,97,118,101,115,32,100,105,102,102,101,114,101,110,116,108,121,32,116,111,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,46>>]},{a,[{id,<<114,101,103,101,120,112,95,115,121,110,116,97,120,95,100,101,116,97,105,108,115>>}],[]},{h2,[],[<<80,67,82,69,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,68,101,116,97,105,108,115>>]},{p,[],[<<84,104,101,32,115,121,110,116,97,120,32,97,110,100,32,115,101,109,97,110,116,105,99,115,32,111,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,67,82,69,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,100,101,116,97,105,108,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,46,32,80,101,114,108,39,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,105,116,115,32,111,119,110,32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,32,97,110,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,103,101,110,101,114,97,108,32,97,114,101,32,99,111,118,101,114,101,100,32,105,110,32,109,97,110,121,32,98,111,111,107,115,44,32,115,111,109,101,32,119,105,116,104,32,99,111,112,105,111,117,115,32,101,120,97,109,112,108,101,115,46,32,74,101,102,102,114,101,121,32,70,114,105,101,100,108,39,115,32,34,77,97,115,116,101,114,105,110,103,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,115,34,44,32,112,117,98,108,105,115,104,101,100,32,98,121,32,79,39,82,101,105,108,108,121,44,32,99,111,118,101,114,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,103,114,101,97,116,32,100,101,116,97,105,108,46,32,84,104,105,115,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,80,67,82,69,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,105,115,32,105,110,116,101,110,100,101,100,32,97,115,32,114,101,102,101,114,101,110,99,101,32,109,97,116,101,114,105,97,108,46>>]},{p,[],[<<84,104,101,32,114,101,102,101,114,101,110,99,101,32,109,97,116,101,114,105,97,108,32,105,115,32,100,105,118,105,100,101,100,32,105,110,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,112,101,99,105,97,108,32,83,116,97,114,116,45,111,102,45,80,97,116,116,101,114,110,32,73,116,101,109,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,104,97,114,97,99,116,101,114,115,32,97,110,100,32,77,101,116,97,99,104,97,114,97,99,116,101,114,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<66,97,99,107,115,108,97,115,104>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,105,114,99,117,109,102,108,101,120,32,97,110,100,32,68,111,108,108,97,114>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<70,117,108,108,32,83,116,111,112,32,40,80,101,114,105,111,100,44,32,68,111,116,41,32,97,110,100,32,92,78>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,54>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<77,97,116,99,104,105,110,103,32,97,32,83,105,110,103,108,101,32,68,97,116,97,32,85,110,105,116>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,55>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,113,117,97,114,101,32,66,114,97,99,107,101,116,115,32,97,110,100,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,56>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<80,111,115,105,120,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,57>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<86,101,114,116,105,99,97,108,32,66,97,114>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<73,110,116,101,114,110,97,108,32,79,112,116,105,111,110,32,83,101,116,116,105,110,103>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,97,109,101,100,32,83,117,98,112,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,52>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<82,101,112,101,116,105,116,105,111,110>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,53>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<65,116,111,109,105,99,32,71,114,111,117,112,105,110,103,32,97,110,100,32,80,111,115,115,101,115,115,105,118,101,32,81,117,97,110,116,105,102,105,101,114,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,54>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,55>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<65,115,115,101,114,116,105,111,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,56>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,111,110,100,105,116,105,111,110,97,108,32,83,117,98,112,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,57>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,111,109,109,101,110,116,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<82,101,99,117,114,115,105,118,101,32,80,97,116,116,101,114,110,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115,32,97,115,32,83,117,98,114,111,117,116,105,110,101,115>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<79,110,105,103,117,114,117,109,97,32,83,117,98,114,111,117,116,105,110,101,32,83,121,110,116,97,120>>]}]},{li,[],[{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,67,111,110,116,114,111,108>>]}]}]},{a,[{id,<<115,101,99,116,49>>}],[]},{h2,[],[<<83,112,101,99,105,97,108,32,83,116,97,114,116,45,111,102,45,80,97,116,116,101,114,110,32,73,116,101,109,115>>]},{p,[],[<<83,111,109,101,32,111,112,116,105,111,110,115,32,116,104,97,116,32,99,97,110,32,98,101,32,112,97,115,115,101,100,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,115,112,101,99,105,97,108,32,105,116,101,109,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,46,32,84,104,101,115,101,32,97,114,101,32,110,111,116,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,44,32,98,117,116,32,97,114,101,32,112,114,111,118,105,100,101,100,32,116,111,32,109,97,107,101,32,116,104,101,115,101,32,111,112,116,105,111,110,115,32,97,99,99,101,115,115,105,98,108,101,32,116,111,32,112,97,116,116,101,114,110,32,119,114,105,116,101,114,115,32,119,104,111,32,97,114,101,32,110,111,116,32,97,98,108,101,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,112,114,111,103,114,97,109,32,116,104,97,116,32,112,114,111,99,101,115,115,101,115,32,116,104,101,32,112,97,116,116,101,114,110,46,32,65,110,121,32,110,117,109,98,101,114,32,111,102,32,116,104,101,115,101,32,105,116,101,109,115,32,99,97,110,32,97,112,112,101,97,114,44,32,98,117,116,32,116,104,101,121,32,109,117,115,116,32,97,108,108,32,98,101,32,116,111,103,101,116,104,101,114,32,114,105,103,104,116,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,115,116,114,105,110,103,44,32,97,110,100,32,116,104,101,32,108,101,116,116,101,114,115,32,109,117,115,116,32,98,101,32,105,110,32,117,112,112,101,114,32,99,97,115,101,46>>]},{p,[],[{em,[],[<<85,84,70,32,83,117,112,112,111,114,116>>]}]},{p,[],[<<85,110,105,99,111,100,101,32,115,117,112,112,111,114,116,32,105,115,32,98,97,115,105,99,97,108,108,121,32,85,84,70,45,56,32,98,97,115,101,100,46,32,84,111,32,117,115,101,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,44,32,121,111,117,32,101,105,116,104,101,114,32,99,97,108,108,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,111,114,32,116,104,101,32,112,97,116,116,101,114,110,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,111,110,101,32,111,102,32,116,104,101,115,101,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,115,58>>]},{pre,[],[{code,[],[<<40,42,85,84,70,56,41,10,40,42,85,84,70,41>>]}]},{p,[],[<<66,111,116,104,32,111,112,116,105,111,110,115,32,103,105,118,101,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,44,32,116,104,101,32,105,110,112,117,116,32,115,116,114,105,110,103,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,85,84,70,45,56,46,32,78,111,116,105,99,101,32,116,104,97,116,32,119,105,116,104,32,116,104,101,115,101,32,105,110,115,116,114,117,99,116,105,111,110,115,44,32,116,104,101,32,97,117,116,111,109,97,116,105,99,32,99,111,110,118,101,114,115,105,111,110,32,111,102,32,108,105,115,116,115,32,116,111,32,85,84,70,45,56,32,105,115,32,110,111,116,32,112,101,114,102,111,114,109,101,100,32,98,121,32,116,104,101,32>>,{code,[],[<<114,101>>]},<<32,102,117,110,99,116,105,111,110,115,46,32,84,104,101,114,101,102,111,114,101,44,32,117,115,105,110,103,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,105,115,32,110,111,116,32,114,101,99,111,109,109,101,110,100,101,100,46,32,65,100,100,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,119,104,101,110,32,114,117,110,110,105,110,103,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,105,110,115,116,101,97,100,46>>]},{p,[],[<<83,111,109,101,32,97,112,112,108,105,99,97,116,105,111,110,115,32,116,104,97,116,32,97,108,108,111,119,32,116,104,101,105,114,32,117,115,101,114,115,32,116,111,32,115,117,112,112,108,121,32,112,97,116,116,101,114,110,115,32,99,97,110,32,119,105,115,104,32,116,111,32,114,101,115,116,114,105,99,116,32,116,104,101,109,32,116,111,32,110,111,110,45,85,84,70,32,100,97,116,97,32,102,111,114,32,115,101,99,117,114,105,116,121,32,114,101,97,115,111,110,115,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<110,101,118,101,114,95,117,116,102>>]},<<32,105,115,32,115,101,116,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,44,32,40,42,85,84,70,41,44,32,97,110,100,32,115,111,32,111,110,44,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,44,32,97,110,100,32,116,104,101,105,114,32,97,112,112,101,97,114,97,110,99,101,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,46>>]},{p,[],[{em,[],[<<85,110,105,99,111,100,101,32,80,114,111,112,101,114,116,121,32,83,117,112,112,111,114,116>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,97,110,111,116,104,101,114,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,32,116,104,97,116,32,99,97,110,32,97,112,112,101,97,114,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,42,85,67,80,41>>]}]},{p,[],[<<84,104,105,115,32,104,97,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<58,32,105,116,32,99,97,117,115,101,115,32,115,101,113,117,101,110,99,101,115,32,115,117,99,104,32,97,115,32,92,100,32,97,110,100,32,92,119,32,116,111,32,117,115,101,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,116,111,32,100,101,116,101,114,109,105,110,101,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,44,32,105,110,115,116,101,97,100,32,111,102,32,114,101,99,111,103,110,105,122,105,110,103,32,111,110,108,121,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,99,111,100,101,115,32,60,32,50,53,54,32,116,104,114,111,117,103,104,32,97,32,108,111,111,107,117,112,32,116,97,98,108,101,46>>]},{p,[],[{em,[],[<<68,105,115,97,98,108,105,110,103,32,83,116,97,114,116,117,112,32,79,112,116,105,109,105,122,97,116,105,111,110,115>>]}]},{p,[],[<<73,102,32,97,32,112,97,116,116,101,114,110,32,115,116,97,114,116,115,32,119,105,116,104,32>>,{code,[],[<<40,42,78,79,95,83,84,65,82,84,95,79,80,84,41>>]},<<44,32,105,116,32,104,97,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]},<<32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46>>]},{p,[],[{em,[],[<<78,101,119,108,105,110,101,32,67,111,110,118,101,110,116,105,111,110,115>>]}]},{a,[{id,<<110,101,119,108,105,110,101,95,99,111,110,118,101,110,116,105,111,110,115>>}],[]},{p,[],[<<80,67,82,69,32,115,117,112,112,111,114,116,115,32,102,105,118,101,32,99,111,110,118,101,110,116,105,111,110,115,32,102,111,114,32,105,110,100,105,99,97,116,105,110,103,32,108,105,110,101,32,98,114,101,97,107,115,32,105,110,32,115,116,114,105,110,103,115,58,32,97,32,115,105,110,103,108,101,32,67,82,32,40,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,41,32,99,104,97,114,97,99,116,101,114,44,32,97,32,115,105,110,103,108,101,32,76,70,32,40,108,105,110,101,32,102,101,101,100,41,32,99,104,97,114,97,99,116,101,114,44,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,44,32,97,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,112,114,101,99,101,100,105,110,103,44,32,97,110,100,32,97,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,46>>]},{p,[],[<<65,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,32,99,97,110,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,115,116,97,114,116,105,110,103,32,97,32,112,97,116,116,101,114,110,32,115,116,114,105,110,103,32,119,105,116,104,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,118,101,32,115,101,113,117,101,110,99,101,115,58>>]},{dl,[],[{dt,[],[<<40,42,67,82,41>>]},{dd,[],[<<67,97,114,114,105,97,103,101,32,114,101,116,117,114,110>>]},{dt,[],[<<40,42,76,70,41>>]},{dd,[],[<<76,105,110,101,32,102,101,101,100>>]},{dt,[],[<<40,42,67,82,76,70,41>>]},{dd,[],[<<62,67,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,102,111,108,108,111,119,101,100,32,98,121,32,108,105,110,101,32,102,101,101,100>>]},{dt,[],[<<40,42,65,78,89,67,82,76,70,41>>]},{dd,[],[<<65,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,97,98,111,118,101>>]},{dt,[],[<<40,42,65,78,89,41>>]},{dd,[],[<<65,108,108,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,115>>]}]},{p,[],[<<84,104,101,115,101,32,111,118,101,114,114,105,100,101,32,116,104,101,32,100,101,102,97,117,108,116,32,97,110,100,32,116,104,101,32,111,112,116,105,111,110,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,99,104,97,110,103,101,115,32,116,104,101,32,99,111,110,118,101,110,116,105,111,110,32,116,111,32,67,82,58>>]},{pre,[],[{code,[],[<<40,42,67,82,41,97,46,98>>]}]},{p,[],[<<84,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32>>,{code,[],[<<97,92,110,98>>]},<<44,32,97,115,32,76,70,32,105,115,32,110,111,32,108,111,110,103,101,114,32,97,32,110,101,119,108,105,110,101,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,111,102,32,116,104,101,109,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,32,108,97,115,116,32,111,110,101,32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,32,97,102,102,101,99,116,115,32,119,104,101,114,101,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,32,116,114,117,101,46,32,73,116,32,97,108,115,111,32,97,102,102,101,99,116,115,32,116,104,101,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,111,102,32,116,104,101,32,100,111,116,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,119,104,101,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,105,115,32,110,111,116,32,115,101,116,44,32,97,110,100,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,92,78,46,32,72,111,119,101,118,101,114,44,32,105,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,119,104,97,116,32,116,104,101,32,92,82,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,109,97,116,99,104,101,115,46,32,66,121,32,100,101,102,97,117,108,116,44,32,116,104,105,115,32,105,115,32,97,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,44,32,102,111,114,32,80,101,114,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,59,32,115,101,101,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,92,82,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,101,119,108,105,110,101,95,115,101,113,117,101,110,99,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,101,119,108,105,110,101,32,83,101,113,117,101,110,99,101,115>>]},<<46,32,65,32,99,104,97,110,103,101,32,111,102,32,116,104,101,32,92,82,32,115,101,116,116,105,110,103,32,99,97,110,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,97,32,99,104,97,110,103,101,32,111,102,32,116,104,101,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,46>>]},{p,[],[{em,[],[<<83,101,116,116,105,110,103,32,77,97,116,99,104,32,97,110,100,32,82,101,99,117,114,115,105,111,110,32,76,105,109,105,116,115>>]}]},{p,[],[<<84,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,99,97,110,32,115,101,116,32,97,32,108,105,109,105,116,32,111,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,116,104,101,32,105,110,116,101,114,110,97,108,32,109,97,116,99,104,40,41,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,97,110,100,32,111,110,32,116,104,101,32,109,97,120,105,109,117,109,32,100,101,112,116,104,32,111,102,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,115,46,32,84,104,101,115,101,32,102,97,99,105,108,105,116,105,101,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,116,111,32,99,97,116,99,104,32,114,117,110,97,119,97,121,32,109,97,116,99,104,101,115,32,116,104,97,116,32,97,114,101,32,112,114,111,118,111,107,101,100,32,98,121,32,112,97,116,116,101,114,110,115,32,119,105,116,104,32,104,117,103,101,32,109,97,116,99,104,105,110,103,32,116,114,101,101,115,32,40,97,32,116,121,112,105,99,97,108,32,101,120,97,109,112,108,101,32,105,115,32,97,32,112,97,116,116,101,114,110,32,119,105,116,104,32,110,101,115,116,101,100,32,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,115,41,32,97,110,100,32,116,111,32,97,118,111,105,100,32,114,117,110,110,105,110,103,32,111,117,116,32,111,102,32,115,121,115,116,101,109,32,115,116,97,99,107,32,98,121,32,116,111,111,32,109,117,99,104,32,114,101,99,117,114,115,105,111,110,46,32,87,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,108,105,109,105,116,115,32,105,115,32,114,101,97,99,104,101,100,44,32>>,{code,[],[<<112,99,114,101,95,101,120,101,99,40,41>>]},<<32,103,105,118,101,115,32,97,110,32,101,114,114,111,114,32,114,101,116,117,114,110,46,32,84,104,101,32,108,105,109,105,116,115,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,105,116,101,109,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,111,114,109,115,58>>]},{pre,[],[{code,[],[<<40,42,76,73,77,73,84,95,77,65,84,67,72,61,100,41,10,40,42,76,73,77,73,84,95,82,69,67,85,82,83,73,79,78,61,100,41>>]}]},{p,[],[<<72,101,114,101,32,100,32,105,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,100,101,99,105,109,97,108,32,100,105,103,105,116,115,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,115,101,116,116,105,110,103,32,109,117,115,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,116,104,101,32,118,97,108,117,101,32,115,101,116,32,98,121,32,116,104,101,32,99,97,108,108,101,114,32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,102,111,114,32,105,116,32,116,111,32,104,97,118,101,32,97,110,121,32,101,102,102,101,99,116,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,112,97,116,116,101,114,110,32,119,114,105,116,101,114,32,99,97,110,32,108,111,119,101,114,32,116,104,101,32,108,105,109,105,116,32,115,101,116,32,98,121,32,116,104,101,32,112,114,111,103,114,97,109,109,101,114,44,32,98,117,116,32,110,111,116,32,114,97,105,115,101,32,105,116,46,32,73,102,32,116,104,101,114,101,32,105,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,101,116,116,105,110,103,32,111,102,32,111,110,101,32,111,102,32,116,104,101,115,101,32,108,105,109,105,116,115,44,32,116,104,101,32,108,111,119,101,114,32,118,97,108,117,101,32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,102,111,114,32,98,111,116,104,32,116,104,101,32,108,105,109,105,116,115,32,105,115,32,49,48,44,48,48,48,44,48,48,48,32,105,110,32,116,104,101,32,69,114,108,97,110,103,32,86,77,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,108,105,109,105,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,115,116,97,99,107,32,100,101,112,116,104,32,111,102,32,116,104,101,32,86,77,44,32,97,115,32,80,67,82,69,32,102,111,114,32,69,114,108,97,110,103,32,105,115,32,99,111,109,112,105,108,101,100,32,105,110,32,115,117,99,104,32,97,32,119,97,121,32,116,104,97,116,32,116,104,101,32,109,97,116,99,104,32,102,117,110,99,116,105,111,110,32,110,101,118,101,114,32,100,111,101,115,32,114,101,99,117,114,115,105,111,110,32,111,110,32,116,104,101,32,67,32,115,116,97,99,107,46>>]},{p,[],[<<78,111,116,101,32,116,104,97,116,32>>,{code,[],[<<76,73,77,73,84,95,77,65,84,67,72>>]},<<32,97,110,100,32>>,{code,[],[<<76,73,77,73,84,95,82,69,67,85,82,83,73,79,78>>]},<<32,99,97,110,32,111,110,108,121,32,114,101,100,117,99,101,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,108,105,109,105,116,115,32,115,101,116,32,98,121,32,116,104,101,32,99,97,108,108,101,114,44,32,110,111,116,32,105,110,99,114,101,97,115,101,32,116,104,101,109,46>>]},{a,[{id,<<115,101,99,116,50>>}],[]},{h2,[],[<<67,104,97,114,97,99,116,101,114,115,32,97,110,100,32,77,101,116,97,99,104,97,114,97,99,116,101,114,115>>]},{p,[],[<<65,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,97,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,46,32,77,111,115,116,32,99,104,97,114,97,99,116,101,114,115,32,115,116,97,110,100,32,102,111,114,32,116,104,101,109,115,101,108,118,101,115,32,105,110,32,97,32,112,97,116,116,101,114,110,32,97,110,100,32,109,97,116,99,104,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,65,115,32,97,32,116,114,105,118,105,97,108,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,32,112,111,114,116,105,111,110,32,111,102,32,97,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,116,104,97,116,32,105,115,32,105,100,101,110,116,105,99,97,108,32,116,111,32,105,116,115,101,108,102,58>>]},{pre,[],[{code,[],[<<84,104,101,32,113,117,105,99,107,32,98,114,111,119,110,32,102,111,120>>]}]},{p,[],[<<87,104,101,110,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,115,112,101,99,105,102,105,101,100,32,40,111,112,116,105,111,110,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<41,44,32,108,101,116,116,101,114,115,32,97,114,101,32,109,97,116,99,104,101,100,32,105,110,100,101,112,101,110,100,101,110,116,108,121,32,111,102,32,99,97,115,101,46>>]},{p,[],[<<84,104,101,32,112,111,119,101,114,32,111,102,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,99,111,109,101,115,32,102,114,111,109,32,116,104,101,32,97,98,105,108,105,116,121,32,116,111,32,105,110,99,108,117,100,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,110,100,32,114,101,112,101,116,105,116,105,111,110,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,101,115,101,32,97,114,101,32,101,110,99,111,100,101,100,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,98,121,32,116,104,101,32,117,115,101,32,111,102,32>>,{em,[],[<<109,101,116,97,99,104,97,114,97,99,116,101,114,115>>]},<<44,32,119,104,105,99,104,32,100,111,32,110,111,116,32,115,116,97,110,100,32,102,111,114,32,116,104,101,109,115,101,108,118,101,115,32,98,117,116,32,105,110,115,116,101,97,100,32,97,114,101,32,105,110,116,101,114,112,114,101,116,101,100,32,105,110,32,115,111,109,101,32,115,112,101,99,105,97,108,32,119,97,121,46>>]},{p,[],[<<84,119,111,32,115,101,116,115,32,111,102,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,101,120,105,115,116,58,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,97,110,121,119,104,101,114,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,101,120,99,101,112,116,32,119,105,116,104,105,110,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,44,32,97,110,100,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,119,105,116,104,105,110,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,46,32,79,117,116,115,105,100,101,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,44,32,116,104,101,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<92>>]},{dd,[],[<<71,101,110,101,114,97,108,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,109,97,110,121,32,117,115,101,115>>]},{dt,[],[<<94>>]},{dd,[],[<<65,115,115,101,114,116,32,115,116,97,114,116,32,111,102,32,115,116,114,105,110,103,32,40,111,114,32,108,105,110,101,44,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,41>>]},{dt,[],[<<36>>]},{dd,[],[<<65,115,115,101,114,116,32,101,110,100,32,111,102,32,115,116,114,105,110,103,32,40,111,114,32,108,105,110,101,44,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,41>>]},{dt,[],[<<46>>]},{dd,[],[<<77,97,116,99,104,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,101,120,99,101,112,116,32,110,101,119,108,105,110,101,32,40,98,121,32,100,101,102,97,117,108,116,41>>]},{dt,[],[<<91>>]},{dd,[],[<<83,116,97,114,116,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,100,101,102,105,110,105,116,105,111,110>>]},{dt,[],[<<124>>]},{dd,[],[<<83,116,97,114,116,32,111,102,32,97,108,116,101,114,110,97,116,105,118,101,32,98,114,97,110,99,104>>]},{dt,[],[<<40>>]},{dd,[],[<<83,116,97,114,116,32,115,117,98,112,97,116,116,101,114,110>>]},{dt,[],[<<41>>]},{dd,[],[<<69,110,100,32,115,117,98,112,97,116,116,101,114,110>>]},{dt,[],[<<63>>]},{dd,[],[<<69,120,116,101,110,100,115,32,116,104,101,32,109,101,97,110,105,110,103,32,111,102,32,40,44,32,97,108,115,111,32,48,32,111,114,32,49,32,113,117,97,110,116,105,102,105,101,114,44,32,97,108,115,111,32,113,117,97,110,116,105,102,105,101,114,32,109,105,110,105,109,105,122,101,114>>]},{dt,[],[<<42>>]},{dd,[],[<<48,32,111,114,32,109,111,114,101,32,113,117,97,110,116,105,102,105,101,114,115>>]},{dt,[],[<<43>>]},{dd,[],[<<49,32,111,114,32,109,111,114,101,32,113,117,97,110,116,105,102,105,101,114,44,32,97,108,115,111,32,34,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,34>>]},{dt,[],[<<123>>]},{dd,[],[<<83,116,97,114,116,32,109,105,110,47,109,97,120,32,113,117,97,110,116,105,102,105,101,114>>]}]},{p,[],[<<80,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,32,119,105,116,104,105,110,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,32,105,115,32,99,97,108,108,101,100,32,97,32,34,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,34,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,111,110,108,121,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,58>>]},{dl,[],[{dt,[],[<<92>>]},{dd,[],[<<71,101,110,101,114,97,108,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<94>>]},{dd,[],[<<78,101,103,97,116,101,32,116,104,101,32,99,108,97,115,115,44,32,98,117,116,32,111,110,108,121,32,105,102,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<45>>]},{dd,[],[<<73,110,100,105,99,97,116,101,115,32,99,104,97,114,97,99,116,101,114,32,114,97,110,103,101>>]},{dt,[],[<<91>>]},{dd,[],[<<80,111,115,105,120,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,40,111,110,108,121,32,105,102,32,102,111,108,108,111,119,101,100,32,98,121,32,80,111,115,105,120,32,115,121,110,116,97,120,41>>]},{dt,[],[<<93>>]},{dd,[],[<<84,101,114,109,105,110,97,116,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,99,116,105,111,110,115,32,100,101,115,99,114,105,98,101,32,116,104,101,32,117,115,101,32,111,102,32,101,97,99,104,32,109,101,116,97,99,104,97,114,97,99,116,101,114,46>>]},{a,[{id,<<115,101,99,116,51>>}],[]},{h2,[],[<<66,97,99,107,115,108,97,115,104>>]},{p,[],[<<84,104,101,32,98,97,99,107,115,108,97,115,104,32,99,104,97,114,97,99,116,101,114,32,104,97,115,32,109,97,110,121,32,117,115,101,115,46,32,70,105,114,115,116,44,32,105,102,32,105,116,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,110,117,109,98,101,114,32,111,114,32,97,32,108,101,116,116,101,114,44,32,105,116,32,116,97,107,101,115,32,97,119,97,121,32,97,110,121,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,116,104,97,116,32,97,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,104,97,118,101,46,32,84,104,105,115,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,97,115,32,97,110,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114,32,97,112,112,108,105,101,115,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,97,32,42,32,99,104,97,114,97,99,116,101,114,44,32,121,111,117,32,119,114,105,116,101,32,92,42,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,105,115,32,101,115,99,97,112,105,110,103,32,97,99,116,105,111,110,32,97,112,112,108,105,101,115,32,105,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,104,97,114,97,99,116,101,114,32,119,111,117,108,100,32,111,116,104,101,114,119,105,115,101,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,109,101,116,97,99,104,97,114,97,99,116,101,114,44,32,115,111,32,105,116,32,105,115,32,97,108,119,97,121,115,32,115,97,102,101,32,116,111,32,112,114,101,99,101,100,101,32,97,32,110,111,110,45,97,108,112,104,97,110,117,109,101,114,105,99,32,119,105,116,104,32,98,97,99,107,115,108,97,115,104,32,116,111,32,115,112,101,99,105,102,121,32,116,104,97,116,32,105,116,32,115,116,97,110,100,115,32,102,111,114,32,105,116,115,101,108,102,46,32,73,110,32,112,97,114,116,105,99,117,108,97,114,44,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,97,32,98,97,99,107,115,108,97,115,104,44,32,119,114,105,116,101,32,92,92,46>>]},{p,[],[<<73,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,109,111,100,101,44,32,111,110,108,121,32,65,83,67,73,73,32,110,117,109,98,101,114,115,32,97,110,100,32,108,101,116,116,101,114,115,32,104,97,118,101,32,97,110,121,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,97,102,116,101,114,32,97,32,98,97,99,107,115,108,97,115,104,46,32,65,108,108,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,32,112,97,114,116,105,99,117,108,97,114,44,32,116,104,111,115,101,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,62,32,49,50,55,41,32,97,114,101,32,116,114,101,97,116,101,100,32,97,115,32,108,105,116,101,114,97,108,115,46>>]},{p,[],[<<73,102,32,97,32,112,97,116,116,101,114,110,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<44,32,119,104,105,116,101,115,112,97,99,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,40,111,116,104,101,114,32,116,104,97,110,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,41,32,97,110,100,32,99,104,97,114,97,99,116,101,114,115,32,98,101,116,119,101,101,110,32,97,32,35,32,111,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,97,110,100,32,116,104,101,32,110,101,120,116,32,110,101,119,108,105,110,101,32,97,114,101,32,105,103,110,111,114,101,100,46,32,65,110,32,101,115,99,97,112,105,110,103,32,98,97,99,107,115,108,97,115,104,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,105,110,99,108,117,100,101,32,97,32,119,104,105,116,101,115,112,97,99,101,32,111,114,32,35,32,99,104,97,114,97,99,116,101,114,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<84,111,32,114,101,109,111,118,101,32,116,104,101,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,102,114,111,109,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,44,32,112,117,116,32,116,104,101,109,32,98,101,116,119,101,101,110,32,92,81,32,97,110,100,32,92,69,46,32,84,104,105,115,32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,80,101,114,108,32,105,110,32,116,104,97,116,32,36,32,97,110,100,32,64,32,97,114,101,32,104,97,110,100,108,101,100,32,97,115,32,108,105,116,101,114,97,108,115,32,105,110,32,92,81,46,46,46,92,69,32,115,101,113,117,101,110,99,101,115,32,105,110,32,80,67,82,69,44,32,119,104,105,108,101,32,36,32,97,110,100,32,64,32,99,97,117,115,101,32,118,97,114,105,97,98,108,101,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,105,110,32,80,101,114,108,46,32,78,111,116,105,99,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<80,97,116,116,101,114,110,32,32,32,32,32,32,32,32,32,32,32,32,80,67,82,69,32,109,97,116,99,104,101,115,32,32,32,80,101,114,108,32,109,97,116,99,104,101,115,10,10,92,81,97,98,99,36,120,121,122,92,69,32,32,32,32,32,32,32,32,97,98,99,36,120,121,122,32,32,32,32,32,32,32,32,97,98,99,32,102,111,108,108,111,119,101,100,32,98,121,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,36,120,121,122,10,92,81,97,98,99,92,36,120,121,122,92,69,32,32,32,32,32,32,32,97,98,99,92,36,120,121,122,32,32,32,32,32,32,32,97,98,99,92,36,120,121,122,10,92,81,97,98,99,92,69,92,36,92,81,120,121,122,92,69,32,32,32,97,98,99,36,120,121,122,32,32,32,32,32,32,32,32,97,98,99,36,120,121,122>>]}]},{p,[],[<<84,104,101,32,92,81,46,46,46,92,69,32,115,101,113,117,101,110,99,101,32,105,115,32,114,101,99,111,103,110,105,122,101,100,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,65,110,32,105,115,111,108,97,116,101,100,32,92,69,32,116,104,97,116,32,105,115,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,92,81,32,105,115,32,105,103,110,111,114,101,100,46,32,73,102,32,92,81,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32,92,69,32,108,97,116,101,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,44,32,116,104,101,32,108,105,116,101,114,97,108,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,99,111,110,116,105,110,117,101,115,32,116,111,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,40,116,104,97,116,32,105,115,44,32,92,69,32,105,115,32,97,115,115,117,109,101,100,32,97,116,32,116,104,101,32,101,110,100,41,46,32,73,102,32,116,104,101,32,105,115,111,108,97,116,101,100,32,92,81,32,105,115,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,104,105,115,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,44,32,97,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,105,115,32,110,111,116,32,116,101,114,109,105,110,97,116,101,100,46>>]},{p,[],[{em,[],[<<78,111,110,45,80,114,105,110,116,105,110,103,32,67,104,97,114,97,99,116,101,114,115>>]}]},{a,[{id,<<110,111,110,95,112,114,105,110,116,105,110,103,95,99,104,97,114,97,99,116,101,114,115>>}],[]},{p,[],[<<65,32,115,101,99,111,110,100,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,112,114,111,118,105,100,101,115,32,97,32,119,97,121,32,111,102,32,101,110,99,111,100,105,110,103,32,110,111,110,45,112,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,112,97,116,116,101,114,110,115,32,105,110,32,97,32,118,105,115,105,98,108,101,32,109,97,110,110,101,114,46,32,84,104,101,114,101,32,105,115,32,110,111,32,114,101,115,116,114,105,99,116,105,111,110,32,111,110,32,116,104,101,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,110,111,110,45,112,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,97,112,97,114,116,32,102,114,111,109,32,116,104,101,32,98,105,110,97,114,121,32,122,101,114,111,32,116,104,97,116,32,116,101,114,109,105,110,97,116,101,115,32,97,32,112,97,116,116,101,114,110,46,32,87,104,101,110,32,97,32,112,97,116,116,101,114,110,32,105,115,32,112,114,101,112,97,114,101,100,32,98,121,32,116,101,120,116,32,101,100,105,116,105,110,103,44,32,105,116,32,105,115,32,111,102,116,101,110,32,101,97,115,105,101,114,32,116,111,32,117,115,101,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,110,32,116,104,101,32,98,105,110,97,114,121,32,99,104,97,114,97,99,116,101,114,32,105,116,32,114,101,112,114,101,115,101,110,116,115,58>>]},{dl,[],[{dt,[],[<<92,97>>]},{dd,[],[<<65,108,97,114,109,44,32,116,104,97,116,32,105,115,44,32,116,104,101,32,66,69,76,32,99,104,97,114,97,99,116,101,114,32,40,104,101,120,32,48,55,41>>]},{dt,[],[<<92,99,120>>]},{dd,[],[<<34,67,111,110,116,114,111,108,45,120,34,44,32,119,104,101,114,101,32,120,32,105,115,32,97,110,121,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,101>>]},{dd,[],[<<69,115,99,97,112,101,32,40,104,101,120,32,49,66,41>>]},{dt,[],[<<92,102>>]},{dd,[],[<<70,111,114,109,32,102,101,101,100,32,40,104,101,120,32,48,67,41>>]},{dt,[],[<<92,110>>]},{dd,[],[<<76,105,110,101,32,102,101,101,100,32,40,104,101,120,32,48,65,41>>]},{dt,[],[<<92,114>>]},{dd,[],[<<67,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,40,104,101,120,32,48,68,41>>]},{dt,[],[<<92,116>>]},{dd,[],[<<84,97,98,32,40,104,101,120,32,48,57,41>>]},{dt,[],[<<92,48,100,100>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,48,100,100>>]},{dt,[],[<<92,100,100,100>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,100,100,100,44,32,111,114,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101>>]},{dt,[],[<<92,111,123,100,100,100,46,46,125>>]},{dd,[],[<<99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,100,100,100,46,46>>]},{dt,[],[<<92,120,104,104>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,104,101,120,32,99,111,100,101,32,104,104>>]},{dt,[],[<<92,120,123,104,104,104,46,46,125>>]},{dd,[],[<<67,104,97,114,97,99,116,101,114,32,119,105,116,104,32,104,101,120,32,99,111,100,101,32,104,104,104,46,46>>]}]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<78,111,116,101,32,116,104,97,116,32,92,48,100,100,32,105,115,32,97,108,119,97,121,115,32,97,110,32,111,99,116,97,108,32,99,111,100,101,44,32,97,110,100,32,116,104,97,116,32,92,56,32,97,110,100,32,92,57,32,97,114,101,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,56,34,32,97,110,100,32,34,57,34,46>>]}]},{p,[],[<<84,104,101,32,112,114,101,99,105,115,101,32,101,102,102,101,99,116,32,111,102,32,92,99,120,32,111,110,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,32,105,115,32,97,115,32,102,111,108,108,111,119,115,58,32,105,102,32,120,32,105,115,32,97,32,108,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,44,32,105,116,32,105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,117,112,112,101,114,32,99,97,115,101,46,32,84,104,101,110,32,98,105,116,32,54,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,40,104,101,120,32,52,48,41,32,105,115,32,105,110,118,101,114,116,101,100,46,32,84,104,117,115,32,92,99,65,32,116,111,32,92,99,90,32,98,101,99,111,109,101,32,104,101,120,32,48,49,32,116,111,32,104,101,120,32,49,65,32,40,65,32,105,115,32,52,49,44,32,90,32,105,115,32,53,65,41,44,32,98,117,116,32,92,99,123,32,98,101,99,111,109,101,115,32,104,101,120,32,51,66,32,40,123,32,105,115,32,55,66,41,44,32,97,110,100,32,92,99,59,32,98,101,99,111,109,101,115,32,104,101,120,32,55,66,32,40,59,32,105,115,32,51,66,41,46,32,73,102,32,116,104,101,32,100,97,116,97,32,105,116,101,109,32,40,98,121,116,101,32,111,114,32,49,54,45,98,105,116,32,118,97,108,117,101,41,32,102,111,108,108,111,119,105,110,103,32,92,99,32,104,97,115,32,97,32,118,97,108,117,101,32,62,32,49,50,55,44,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,32,111,99,99,117,114,115,46,32,84,104,105,115,32,108,111,99,107,115,32,111,117,116,32,110,111,110,45,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,97,108,108,32,109,111,100,101,115,46>>]},{p,[],[<<84,104,101,32,92,99,32,102,97,99,105,108,105,116,121,32,119,97,115,32,100,101,115,105,103,110,101,100,32,102,111,114,32,117,115,101,32,119,105,116,104,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,44,32,98,117,116,32,119,105,116,104,32,116,104,101,32,101,120,116,101,110,115,105,111,110,32,116,111,32,85,110,105,99,111,100,101,32,105,116,32,105,115,32,101,118,101,110,32,108,101,115,115,32,117,115,101,102,117,108,32,116,104,97,110,32,105,116,32,111,110,99,101,32,119,97,115,46>>]},{p,[],[<<65,102,116,101,114,32,92,48,32,117,112,32,116,111,32,116,119,111,32,102,117,114,116,104,101,114,32,111,99,116,97,108,32,100,105,103,105,116,115,32,97,114,101,32,114,101,97,100,46,32,73,102,32,116,104,101,114,101,32,97,114,101,32,102,101,119,101,114,32,116,104,97,110,32,116,119,111,32,100,105,103,105,116,115,44,32,106,117,115,116,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,112,114,101,115,101,110,116,32,97,114,101,32,117,115,101,100,46,32,84,104,117,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32,92,48,92,120,92,48,49,53,32,115,112,101,99,105,102,105,101,115,32,116,119,111,32,98,105,110,97,114,121,32,122,101,114,111,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,67,82,32,99,104,97,114,97,99,116,101,114,32,40,99,111,100,101,32,118,97,108,117,101,32,49,51,41,46,32,77,97,107,101,32,115,117,114,101,32,121,111,117,32,115,117,112,112,108,121,32,116,119,111,32,100,105,103,105,116,115,32,97,102,116,101,114,32,116,104,101,32,105,110,105,116,105,97,108,32,122,101,114,111,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,102,111,108,108,111,119,115,32,105,115,32,105,116,115,101,108,102,32,97,110,32,111,99,116,97,108,32,100,105,103,105,116,46>>]},{p,[],[<<84,104,101,32,101,115,99,97,112,101,32,92,111,32,109,117,115,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,111,99,116,97,108,32,100,105,103,105,116,115,44,32,101,110,99,108,111,115,101,100,32,105,110,32,98,114,97,99,101,115,46,32,65,110,32,101,114,114,111,114,32,111,99,99,117,114,115,32,105,102,32,116,104,105,115,32,105,115,32,110,111,116,32,116,104,101,32,99,97,115,101,46,32,84,104,105,115,32,101,115,99,97,112,101,32,105,115,32,97,32,114,101,99,101,110,116,32,97,100,100,105,116,105,111,110,32,116,111,32,80,101,114,108,59,32,105,116,32,112,114,111,118,105,100,101,115,32,119,97,121,32,111,102,32,115,112,101,99,105,102,121,105,110,103,32,99,104,97,114,97,99,116,101,114,32,99,111,100,101,32,112,111,105,110,116,115,32,97,115,32,111,99,116,97,108,32,110,117,109,98,101,114,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,48,55,55,55,44,32,97,110,100,32,105,116,32,97,108,115,111,32,97,108,108,111,119,115,32,111,99,116,97,108,32,110,117,109,98,101,114,115,32,97,110,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,98,101,32,117,110,97,109,98,105,103,117,111,117,115,108,121,32,115,112,101,99,105,102,105,101,100,46>>]},{p,[],[<<70,111,114,32,103,114,101,97,116,101,114,32,99,108,97,114,105,116,121,32,97,110,100,32,117,110,97,109,98,105,103,117,105,116,121,44,32,105,116,32,105,115,32,98,101,115,116,32,116,111,32,97,118,111,105,100,32,102,111,108,108,111,119,105,110,103,32,92,32,98,121,32,97,32,100,105,103,105,116,32,103,114,101,97,116,101,114,32,116,104,97,110,32,122,101,114,111,46,32,73,110,115,116,101,97,100,44,32,117,115,101,32,92,111,123,125,32,111,114,32,92,120,123,125,32,116,111,32,115,112,101,99,105,102,121,32,99,104,97,114,97,99,116,101,114,32,110,117,109,98,101,114,115,44,32,97,110,100,32,92,103,123,125,32,116,111,32,115,112,101,99,105,102,121,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,114,97,103,114,97,112,104,115,32,100,101,115,99,114,105,98,101,32,116,104,101,32,111,108,100,44,32,97,109,98,105,103,117,111,117,115,32,115,121,110,116,97,120,46>>]},{p,[],[<<84,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,97,32,98,97,99,107,115,108,97,115,104,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,100,105,103,105,116,32,111,116,104,101,114,32,116,104,97,110,32,48,32,105,115,32,99,111,109,112,108,105,99,97,116,101,100,44,32,97,110,100,32,80,101,114,108,32,104,97,115,32,99,104,97,110,103,101,100,32,105,110,32,114,101,99,101,110,116,32,114,101,108,101,97,115,101,115,44,32,99,97,117,115,105,110,103,32,80,67,82,69,32,97,108,115,111,32,116,111,32,99,104,97,110,103,101,46,32,79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,80,67,82,69,32,114,101,97,100,115,32,116,104,101,32,100,105,103,105,116,32,97,110,100,32,97,110,121,32,102,111,108,108,111,119,105,110,103,32,100,105,103,105,116,115,32,97,115,32,97,32,100,101,99,105,109,97,108,32,110,117,109,98,101,114,46,32,73,102,32,116,104,101,32,110,117,109,98,101,114,32,105,115,32,60,32,56,44,32,111,114,32,105,102,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,32,97,116,32,108,101,97,115,116,32,116,104,97,116,32,109,97,110,121,32,112,114,101,118,105,111,117,115,32,99,97,112,116,117,114,105,110,103,32,108,101,102,116,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,44,32,116,104,101,32,101,110,116,105,114,101,32,115,101,113,117,101,110,99,101,32,105,115,32,116,97,107,101,110,32,97,115,32,97,32>>,{em,[],[<<98,97,99,107,32,114,101,102,101,114,101,110,99,101>>]},<<46,32,65,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,104,111,119,32,116,104,105,115,32,119,111,114,107,115,32,105,115,32,112,114,111,118,105,100,101,100,32,108,97,116,101,114,44,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,100,105,115,99,117,115,115,105,111,110,32,111,102,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46>>]},{p,[],[<<73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,111,114,32,105,102,32,116,104,101,32,100,101,99,105,109,97,108,32,110,117,109,98,101,114,32,102,111,108,108,111,119,105,110,103,32,92,32,105,115,32,62,32,55,32,97,110,100,32,116,104,101,114,101,32,104,97,118,101,32,110,111,116,32,98,101,101,110,32,116,104,97,116,32,109,97,110,121,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,80,67,82,69,32,104,97,110,100,108,101,115,32,92,56,32,97,110,100,32,92,57,32,97,115,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,56,34,32,97,110,100,32,34,57,34,44,32,97,110,100,32,111,116,104,101,114,119,105,115,101,32,114,101,45,114,101,97,100,115,32,117,112,32,116,111,32,116,104,114,101,101,32,111,99,116,97,108,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,98,97,99,107,115,108,97,115,104,44,32,97,110,100,32,117,115,105,110,103,32,116,104,101,109,32,116,111,32,103,101,110,101,114,97,116,101,32,97,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114,46,32,65,110,121,32,115,117,98,115,101,113,117,101,110,116,32,100,105,103,105,116,115,32,115,116,97,110,100,32,102,111,114,32,116,104,101,109,115,101,108,118,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{dl,[],[{dt,[],[<<92,48,52,48>>]},{dd,[],[<<65,110,111,116,104,101,114,32,119,97,121,32,111,102,32,119,114,105,116,105,110,103,32,97,110,32,65,83,67,73,73,32,115,112,97,99,101>>]},{dt,[],[<<92,52,48>>]},{dd,[],[<<84,104,101,32,115,97,109,101,44,32,112,114,111,118,105,100,101,100,32,116,104,101,114,101,32,97,114,101,32,60,32,52,48,32,112,114,101,118,105,111,117,115,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115>>]},{dt,[],[<<92,55>>]},{dd,[],[<<65,108,119,97,121,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101>>]},{dt,[],[<<92,49,49>>]},{dd,[],[<<67,97,110,32,98,101,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,114,32,97,110,111,116,104,101,114,32,119,97,121,32,111,102,32,119,114,105,116,105,110,103,32,97,32,116,97,98>>]},{dt,[],[<<92,48,49,49>>]},{dd,[],[<<65,108,119,97,121,115,32,97,32,116,97,98>>]},{dt,[],[<<92,48,49,49,51>>]},{dd,[],[<<65,32,116,97,98,32,102,111,108,108,111,119,101,100,32,98,121,32,99,104,97,114,97,99,116,101,114,32,34,51,34>>]},{dt,[],[<<92,49,49,51>>]},{dd,[],[<<67,97,110,32,98,101,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,111,99,116,97,108,32,99,111,100,101,32,49,49,51>>]},{dt,[],[<<92,51,55,55>>]},{dd,[],[<<67,97,110,32,98,101,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,116,104,101,114,119,105,115,101,32,118,97,108,117,101,32,50,53,53,32,40,100,101,99,105,109,97,108,41>>]},{dt,[],[<<92,56,49>>]},{dd,[],[<<69,105,116,104,101,114,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,111,114,32,116,104,101,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,32,34,56,34,32,97,110,100,32,34,49,34>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,111,99,116,97,108,32,118,97,108,117,101,115,32,62,61,32,49,48,48,32,116,104,97,116,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,117,115,105,110,103,32,116,104,105,115,32,115,121,110,116,97,120,32,109,117,115,116,32,110,111,116,32,98,101,32,105,110,116,114,111,100,117,99,101,100,32,98,121,32,97,32,108,101,97,100,105,110,103,32,122,101,114,111,44,32,97,115,32,110,111,32,109,111,114,101,32,116,104,97,110,32,116,104,114,101,101,32,111,99,116,97,108,32,100,105,103,105,116,115,32,97,114,101,32,101,118,101,114,32,114,101,97,100,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,97,102,116,101,114,32,92,120,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32,123,44,32,102,114,111,109,32,122,101,114,111,32,116,111,32,116,119,111,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,115,32,97,114,101,32,114,101,97,100,32,40,108,101,116,116,101,114,115,32,99,97,110,32,98,101,32,105,110,32,117,112,112,101,114,32,111,114,32,108,111,119,101,114,32,99,97,115,101,41,46,32,65,110,121,32,110,117,109,98,101,114,32,111,102,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,115,32,109,97,121,32,97,112,112,101,97,114,32,98,101,116,119,101,101,110,32,92,120,123,32,97,110,100,32,125,46,32,73,102,32,97,32,99,104,97,114,97,99,116,101,114,32,111,116,104,101,114,32,116,104,97,110,32,97,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,32,97,112,112,101,97,114,115,32,98,101,116,119,101,101,110,32,92,120,123,32,97,110,100,32,125,44,32,111,114,32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,116,101,114,109,105,110,97,116,105,110,103,32,125,44,32,97,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46>>]},{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,118,97,108,117,101,32,105,115,32,108,101,115,115,32,116,104,97,110,32,50,53,54,32,99,97,110,32,98,101,32,100,101,102,105,110,101,100,32,98,121,32,101,105,116,104,101,114,32,111,102,32,116,104,101,32,116,119,111,32,115,121,110,116,97,120,101,115,32,102,111,114,32,92,120,46,32,84,104,101,114,101,32,105,115,32,110,111,32,100,105,102,102,101,114,101,110,99,101,32,105,110,32,116,104,101,32,119,97,121,32,116,104,101,121,32,97,114,101,32,104,97,110,100,108,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,92,120,100,99,32,105,115,32,101,120,97,99,116,108,121,32,116,104,101,32,115,97,109,101,32,97,115,32,92,120,123,100,99,125,46>>]},{p,[],[{em,[],[<<67,111,110,115,116,114,97,105,110,116,115,32,111,110,32,99,104,97,114,97,99,116,101,114,32,118,97,108,117,101,115>>]}]},{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,117,115,105,110,103,32,111,99,116,97,108,32,111,114,32,104,101,120,97,100,101,99,105,109,97,108,32,110,117,109,98,101,114,115,32,97,114,101,32,108,105,109,105,116,101,100,32,116,111,32,99,101,114,116,97,105,110,32,118,97,108,117,101,115,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<56,45,98,105,116,32,110,111,110,45,85,84,70,32,109,111,100,101>>]},{dd,[],[{p,[],[<<60,32,48,120,49,48,48>>]}]},{dt,[],[<<56,45,98,105,116,32,85,84,70,45,56,32,109,111,100,101>>]},{dd,[],[{p,[],[<<60,32,48,120,49,48,102,102,102,102,32,97,110,100,32,97,32,118,97,108,105,100,32,99,111,100,101,112,111,105,110,116>>]}]}]},{p,[],[<<73,110,118,97,108,105,100,32,85,110,105,99,111,100,101,32,99,111,100,101,112,111,105,110,116,115,32,97,114,101,32,116,104,101,32,114,97,110,103,101,32,48,120,100,56,48,48,32,116,111,32,48,120,100,102,102,102,32,40,116,104,101,32,115,111,45,99,97,108,108,101,100,32,34,115,117,114,114,111,103,97,116,101,34,32,99,111,100,101,112,111,105,110,116,115,41,44,32,97,110,100,32,48,120,102,102,101,102,46>>]},{p,[],[{em,[],[<<69,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,105,110,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115>>]}]},{p,[],[<<65,108,108,32,116,104,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,116,32,100,101,102,105,110,101,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,118,97,108,117,101,32,99,97,110,32,98,101,32,117,115,101,100,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,65,108,115,111,44,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,92,98,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,116,104,101,32,98,97,99,107,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,32,40,104,101,120,32,48,56,41,46>>]},{p,[],[<<92,78,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,92,66,44,32,92,82,44,32,97,110,100,32,92,88,32,97,114,101,32,110,111,116,32,115,112,101,99,105,97,108,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,76,105,107,101,32,111,116,104,101,114,32,117,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,44,32,116,104,101,121,32,97,114,101,32,116,114,101,97,116,101,100,32,97,115,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,66,34,44,32,34,82,34,44,32,97,110,100,32,34,88,34,46,32,79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,115,46>>]},{p,[],[{em,[],[<<85,110,115,117,112,112,111,114,116,101,100,32,69,115,99,97,112,101,32,83,101,113,117,101,110,99,101,115>>]}]},{p,[],[<<73,110,32,80,101,114,108,44,32,116,104,101,32,115,101,113,117,101,110,99,101,115,32,92,108,44,32,92,76,44,32,92,117,44,32,97,110,100,32,92,85,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,98,121,32,105,116,115,32,115,116,114,105,110,103,32,104,97,110,100,108,101,114,32,97,110,100,32,117,115,101,100,32,116,111,32,109,111,100,105,102,121,32,116,104,101,32,99,97,115,101,32,111,102,32,102,111,108,108,111,119,105,110,103,32,99,104,97,114,97,99,116,101,114,115,46,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,101,115,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,46>>]},{p,[],[{em,[],[<<65,98,115,111,108,117,116,101,32,97,110,100,32,82,101,108,97,116,105,118,101,32,66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]}]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,32,92,103,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,117,110,115,105,103,110,101,100,32,111,114,32,97,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,44,32,111,112,116,105,111,110,97,108,108,121,32,101,110,99,108,111,115,101,100,32,105,110,32,98,114,97,99,101,115,44,32,105,115,32,97,110,32,97,98,115,111,108,117,116,101,32,111,114,32,114,101,108,97,116,105,118,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,46,32,65,32,110,97,109,101,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,99,111,100,101,100,32,97,115,32,92,103,123,110,97,109,101,125,46,32,66,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,97,114,101,32,100,105,115,99,117,115,115,101,100,32,108,97,116,101,114,44,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,100,105,115,99,117,115,115,105,111,110,32,111,102,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46>>]},{p,[],[{em,[],[<<65,98,115,111,108,117,116,101,32,97,110,100,32,82,101,108,97,116,105,118,101,32,83,117,98,114,111,117,116,105,110,101,32,67,97,108,108,115>>]}]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,79,110,105,103,117,114,117,109,97,44,32,116,104,101,32,110,111,110,45,80,101,114,108,32,115,121,110,116,97,120,32,92,103,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,32,111,114,32,97,32,110,117,109,98,101,114,32,101,110,99,108,111,115,101,100,32,101,105,116,104,101,114,32,105,110,32,97,110,103,108,101,32,98,114,97,99,107,101,116,115,32,111,114,32,115,105,110,103,108,101,32,113,117,111,116,101,115,44,32,105,115,32,97,108,116,101,114,110,97,116,105,118,101,32,115,121,110,116,97,120,32,102,111,114,32,114,101,102,101,114,101,110,99,105,110,103,32,97,32,115,117,98,112,97,116,116,101,114,110,32,97,115,32,97,32,34,115,117,98,114,111,117,116,105,110,101,34,46,32,68,101,116,97,105,108,115,32,97,114,101,32,100,105,115,99,117,115,115,101,100,32,108,97,116,101,114,46,32,78,111,116,105,99,101,32,116,104,97,116,32,92,103,123,46,46,46,125,32,40,80,101,114,108,32,115,121,110,116,97,120,41,32,97,110,100,32,92,103,60,46,46,46,62,32,40,79,110,105,103,117,114,117,109,97,32,115,121,110,116,97,120,41,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,115,121,110,111,110,121,109,111,117,115,46,32,84,104,101,32,102,111,114,109,101,114,32,105,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,97,110,100,32,116,104,101,32,108,97,116,116,101,114,32,105,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,46>>]},{p,[],[{em,[],[<<71,101,110,101,114,105,99,32,67,104,97,114,97,99,116,101,114,32,84,121,112,101,115>>]}]},{a,[{id,<<103,101,110,101,114,105,99,95,99,104,97,114,97,99,116,101,114,95,116,121,112,101,115>>}],[]},{p,[],[<<65,110,111,116,104,101,114,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,105,115,32,102,111,114,32,115,112,101,99,105,102,121,105,110,103,32,103,101,110,101,114,105,99,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,58>>]},{dl,[],[{dt,[],[<<92,100>>]},{dd,[],[<<65,110,121,32,100,101,99,105,109,97,108,32,100,105,103,105,116>>]},{dt,[],[<<92,68>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,100,101,99,105,109,97,108,32,100,105,103,105,116>>]},{dt,[],[<<92,104>>]},{dd,[],[<<65,110,121,32,104,111,114,105,122,111,110,116,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,72>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,104,111,114,105,122,111,110,116,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,115>>]},{dd,[],[<<65,110,121,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,83>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,118>>]},{dd,[],[<<65,110,121,32,118,101,114,116,105,99,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,86>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,118,101,114,116,105,99,97,108,32,119,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,119>>]},{dd,[],[<<65,110,121,32,34,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114>>]},{dt,[],[<<92,87>>]},{dd,[],[<<65,110,121,32,34,110,111,110,45,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114>>]}]},{p,[],[<<84,104,101,114,101,32,105,115,32,97,108,115,111,32,116,104,101,32,115,105,110,103,108,101,32,115,101,113,117,101,110,99,101,32,92,78,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,32,110,111,110,45,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,34,46,34,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,119,104,101,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,105,115,32,110,111,116,32,115,101,116,46,32,80,101,114,108,32,97,108,115,111,32,117,115,101,115,32,92,78,32,116,111,32,109,97,116,99,104,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,110,97,109,101,44,32,98,117,116,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,105,115,46>>]},{p,[],[<<69,97,99,104,32,112,97,105,114,32,111,102,32,108,111,119,101,114,99,97,115,101,32,97,110,100,32,117,112,112,101,114,99,97,115,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,112,97,114,116,105,116,105,111,110,115,32,116,104,101,32,99,111,109,112,108,101,116,101,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,105,110,116,111,32,116,119,111,32,100,105,115,106,111,105,110,116,32,115,101,116,115,46,32,65,110,121,32,103,105,118,101,110,32,99,104,97,114,97,99,116,101,114,32,109,97,116,99,104,101,115,32,111,110,101,44,32,97,110,100,32,111,110,108,121,32,111,110,101,44,32,111,102,32,101,97,99,104,32,112,97,105,114,46,32,84,104,101,32,115,101,113,117,101,110,99,101,115,32,99,97,110,32,97,112,112,101,97,114,32,98,111,116,104,32,105,110,115,105,100,101,32,97,110,100,32,111,117,116,115,105,100,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,84,104,101,121,32,101,97,99,104,32,109,97,116,99,104,32,111,110,101,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,116,121,112,101,46,32,73,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,108,108,32,102,97,105,108,44,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,99,104,97,114,97,99,116,101,114,32,116,111,32,109,97,116,99,104,46>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,80,101,114,108,44,32,92,115,32,100,105,100,32,110,111,116,32,117,115,101,100,32,116,111,32,109,97,116,99,104,32,116,104,101,32,86,84,32,99,104,97,114,97,99,116,101,114,32,40,99,111,100,101,32,49,49,41,44,32,119,104,105,99,104,32,109,97,100,101,32,105,116,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,116,104,101,32,80,79,83,73,88,32,34,115,112,97,99,101,34,32,99,108,97,115,115,46,32,72,111,119,101,118,101,114,44,32,80,101,114,108,32,97,100,100,101,100,32,86,84,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,44,32,97,110,100,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,115,117,105,116,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46,32,84,104,101,32,100,101,102,97,117,108,116,32,92,115,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,110,111,119,32,72,84,32,40,57,41,44,32,76,70,32,40,49,48,41,44,32,86,84,32,40,49,49,41,44,32,70,70,32,40,49,50,41,44,32,67,82,32,40,49,51,41,44,32,97,110,100,32,115,112,97,99,101,32,40,51,50,41,44,32,119,104,105,99,104,32,97,114,101,32,100,101,102,105,110,101,100,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,32,105,110,32,116,104,101,32,34,67,34,32,108,111,99,97,108,101,46,32,84,104,105,115,32,108,105,115,116,32,109,97,121,32,118,97,114,121,32,105,102,32,108,111,99,97,108,101,45,115,112,101,99,105,102,105,99,32,109,97,116,99,104,105,110,103,32,105,115,32,116,97,107,105,110,103,32,112,108,97,99,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,115,111,109,101,32,108,111,99,97,108,101,115,32,116,104,101,32,34,110,111,110,45,98,114,101,97,107,105,110,103,32,115,112,97,99,101,34,32,99,104,97,114,97,99,116,101,114,32,40,92,120,65,48,41,32,105,115,32,114,101,99,111,103,110,105,122,101,100,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,44,32,97,110,100,32,105,110,32,111,116,104,101,114,115,32,116,104,101,32,86,84,32,99,104,97,114,97,99,116,101,114,32,105,115,32,110,111,116,46>>]},{p,[],[<<65,32,34,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114,32,105,115,32,97,110,32,117,110,100,101,114,115,99,111,114,101,32,111,114,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,97,32,108,101,116,116,101,114,32,111,114,32,97,32,100,105,103,105,116,46,32,66,121,32,100,101,102,97,117,108,116,44,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,108,101,116,116,101,114,115,32,97,110,100,32,100,105,103,105,116,115,32,105,115,32,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,32,80,67,82,69,32,108,111,119,45,118,97,108,117,101,100,32,99,104,97,114,97,99,116,101,114,32,116,97,98,108,101,115,44,32,105,110,32,69,114,108,97,110,103,39,115,32,99,97,115,101,32,40,97,110,100,32,119,105,116,104,111,117,116,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<41,44,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,105,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,109,111,100,101,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,44,32,116,104,97,116,32,105,115,44,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,111,117,116,115,105,100,101,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,44,32,110,101,118,101,114,32,109,97,116,99,104,32,92,100,44,32,92,115,44,32,111,114,32,92,119,44,32,97,110,100,32,97,108,119,97,121,115,32,109,97,116,99,104,32,92,68,44,32,92,83,44,32,97,110,100,32,92,87,46,32,84,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,114,101,116,97,105,110,32,116,104,101,105,114,32,111,114,105,103,105,110,97,108,32,109,101,97,110,105,110,103,115,32,102,114,111,109,32,98,101,102,111,114,101,32,85,84,70,32,115,117,112,112,111,114,116,32,119,97,115,32,97,118,97,105,108,97,98,108,101,44,32,109,97,105,110,108,121,32,102,111,114,32,101,102,102,105,99,105,101,110,99,121,32,114,101,97,115,111,110,115,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,105,115,32,115,101,116,44,32,116,104,101,32,98,101,104,97,118,105,111,114,32,105,115,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,117,115,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<92,100>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,92,112,123,78,100,125,32,109,97,116,99,104,101,115,32,40,100,101,99,105,109,97,108,32,100,105,103,105,116,41>>]},{dt,[],[<<92,115>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,92,112,123,90,125,32,111,114,32,92,104,32,111,114,32,92,118>>]},{dt,[],[<<92,119>>]},{dd,[],[<<65,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,109,97,116,99,104,101,115,32,92,112,123,76,125,32,111,114,32,92,112,123,78,125,32,109,97,116,99,104,101,115,44,32,112,108,117,115,32,117,110,100,101,114,115,99,111,114,101>>]}]},{p,[],[<<84,104,101,32,117,112,112,101,114,99,97,115,101,32,101,115,99,97,112,101,115,32,109,97,116,99,104,32,116,104,101,32,105,110,118,101,114,115,101,32,115,101,116,115,32,111,102,32,99,104,97,114,97,99,116,101,114,115,46,32,78,111,116,105,99,101,32,116,104,97,116,32,92,100,32,109,97,116,99,104,101,115,32,111,110,108,121,32,100,101,99,105,109,97,108,32,100,105,103,105,116,115,44,32,119,104,105,108,101,32,92,119,32,109,97,116,99,104,101,115,32,97,110,121,32,85,110,105,99,111,100,101,32,100,105,103,105,116,44,32,97,110,121,32,85,110,105,99,111,100,101,32,108,101,116,116,101,114,44,32,97,110,100,32,117,110,100,101,114,115,99,111,114,101,46,32,78,111,116,105,99,101,32,97,108,115,111,32,116,104,97,116,32>>,{code,[],[<<117,99,112>>]},<<32,97,102,102,101,99,116,115,32,92,98,32,97,110,100,32,92,66,44,32,97,115,32,116,104,101,121,32,97,114,101,32,100,101,102,105,110,101,100,32,105,110,32,116,101,114,109,115,32,111,102,32,92,119,32,97,110,100,32,92,87,46,32,77,97,116,99,104,105,110,103,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,105,115,32,110,111,116,105,99,101,97,98,108,121,32,115,108,111,119,101,114,32,119,104,101,110,32>>,{code,[],[<<117,99,112>>]},<<32,105,115,32,115,101,116,46>>]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,115,32,92,104,44,32,92,72,44,32,92,118,44,32,97,110,100,32,92,86,32,97,114,101,32,102,101,97,116,117,114,101,115,32,116,104,97,116,32,119,101,114,101,32,97,100,100,101,100,32,116,111,32,80,101,114,108,32,105,110,32,114,101,108,101,97,115,101,32,53,46,49,48,46,32,73,110,32,99,111,110,116,114,97,115,116,32,116,111,32,116,104,101,32,111,116,104,101,114,32,115,101,113,117,101,110,99,101,115,44,32,119,104,105,99,104,32,109,97,116,99,104,32,111,110,108,121,32,65,83,67,73,73,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,100,101,102,97,117,108,116,44,32,116,104,101,115,101,32,97,108,119,97,121,115,32,109,97,116,99,104,32,99,101,114,116,97,105,110,32,104,105,103,104,45,118,97,108,117,101,100,32,99,111,100,101,32,112,111,105,110,116,115,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32>>,{code,[],[<<117,99,112>>]},<<32,105,115,32,115,101,116,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,104,111,114,105,122,111,110,116,97,108,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,58>>]},{dl,[],[{dt,[],[<<85,43,48,48,48,57>>]},{dd,[],[<<72,111,114,105,122,111,110,116,97,108,32,116,97,98,32,40,72,84,41>>]},{dt,[],[<<85,43,48,48,50,48>>]},{dd,[],[<<83,112,97,99,101>>]},{dt,[],[<<85,43,48,48,65,48>>]},{dd,[],[<<78,111,110,45,98,114,101,97,107,32,115,112,97,99,101>>]},{dt,[],[<<85,43,49,54,56,48>>]},{dd,[],[<<79,103,104,97,109,32,115,112,97,99,101,32,109,97,114,107>>]},{dt,[],[<<85,43,49,56,48,69>>]},{dd,[],[<<77,111,110,103,111,108,105,97,110,32,118,111,119,101,108,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<85,43,50,48,48,48>>]},{dd,[],[<<69,110,32,113,117,97,100>>]},{dt,[],[<<85,43,50,48,48,49>>]},{dd,[],[<<69,109,32,113,117,97,100>>]},{dt,[],[<<85,43,50,48,48,50>>]},{dd,[],[<<69,110,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,51>>]},{dd,[],[<<69,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,52>>]},{dd,[],[<<84,104,114,101,101,45,112,101,114,45,101,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,53>>]},{dd,[],[<<70,111,117,114,45,112,101,114,45,101,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,54>>]},{dd,[],[<<83,105,120,45,112,101,114,45,101,109,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,55>>]},{dd,[],[<<70,105,103,117,114,101,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,56>>]},{dd,[],[<<80,117,110,99,116,117,97,116,105,111,110,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,57>>]},{dd,[],[<<84,104,105,110,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,48,65>>]},{dd,[],[<<72,97,105,114,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,50,70>>]},{dd,[],[<<78,97,114,114,111,119,32,110,111,45,98,114,101,97,107,32,115,112,97,99,101>>]},{dt,[],[<<85,43,50,48,53,70>>]},{dd,[],[<<77,101,100,105,117,109,32,109,97,116,104,101,109,97,116,105,99,97,108,32,115,112,97,99,101>>]},{dt,[],[<<85,43,51,48,48,48>>]},{dd,[],[<<73,100,101,111,103,114,97,112,104,105,99,32,115,112,97,99,101>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,118,101,114,116,105,99,97,108,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,58>>]},{dl,[],[{dt,[],[<<85,43,48,48,48,65>>]},{dd,[],[<<76,105,110,101,32,102,101,101,100,32,40,76,70,41>>]},{dt,[],[<<85,43,48,48,48,66>>]},{dd,[],[<<86,101,114,116,105,99,97,108,32,116,97,98,32,40,86,84,41>>]},{dt,[],[<<85,43,48,48,48,67>>]},{dd,[],[<<70,111,114,109,32,102,101,101,100,32,40,70,70,41>>]},{dt,[],[<<85,43,48,48,48,68>>]},{dd,[],[<<67,97,114,114,105,97,103,101,32,114,101,116,117,114,110,32,40,67,82,41>>]},{dt,[],[<<85,43,48,48,56,53>>]},{dd,[],[<<78,101,120,116,32,108,105,110,101,32,40,78,69,76,41>>]},{dt,[],[<<85,43,50,48,50,56>>]},{dd,[],[<<76,105,110,101,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<85,43,50,48,50,57>>]},{dd,[],[<<80,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114>>]}]},{p,[],[<<73,110,32,56,45,98,105,116,44,32,110,111,110,45,85,84,70,45,56,32,109,111,100,101,44,32,111,110,108,121,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,99,111,100,101,32,112,111,105,110,116,115,32,60,32,50,53,54,32,97,114,101,32,114,101,108,101,118,97,110,116,46>>]},{p,[],[{em,[],[<<78,101,119,108,105,110,101,32,83,101,113,117,101,110,99,101,115>>]}]},{a,[{id,<<110,101,119,108,105,110,101,95,115,101,113,117,101,110,99,101,115>>}],[]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,98,121,32,100,101,102,97,117,108,116,44,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,82,32,109,97,116,99,104,101,115,32,97,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,46,32,73,110,32,110,111,110,45,85,84,70,45,56,32,109,111,100,101,44,32,92,82,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{pre,[],[{code,[],[<<40,63,62,92,114,92,110,124,92,110,124,92,120,48,98,124,92,102,124,92,114,124,92,120,56,53,41>>]}]},{p,[],[<<84,104,105,115,32,105,115,32,97,110,32,101,120,97,109,112,108,101,32,111,102,32,97,110,32,34,97,116,111,109,105,99,32,103,114,111,117,112,34,44,32,100,101,116,97,105,108,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,98,101,108,111,119,46>>]},{p,[],[<<84,104,105,115,32,112,97,114,116,105,99,117,108,97,114,32,103,114,111,117,112,32,109,97,116,99,104,101,115,32,101,105,116,104,101,114,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,32,102,111,108,108,111,119,101,100,32,98,121,32,76,70,44,32,111,114,32,111,110,101,32,111,102,32,116,104,101,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,115,32,76,70,32,40,108,105,110,101,32,102,101,101,100,44,32,85,43,48,48,48,65,41,44,32,86,84,32,40,118,101,114,116,105,99,97,108,32,116,97,98,44,32,85,43,48,48,48,66,41,44,32,70,70,32,40,102,111,114,109,32,102,101,101,100,44,32,85,43,48,48,48,67,41,44,32,67,82,32,40,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,44,32,85,43,48,48,48,68,41,44,32,111,114,32,78,69,76,32,40,110,101,120,116,32,108,105,110,101,44,32,85,43,48,48,56,53,41,46,32,84,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,117,110,105,116,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,115,112,108,105,116,46>>]},{p,[],[<<73,110,32,85,110,105,99,111,100,101,32,109,111,100,101,44,32,116,119,111,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,62,32,50,53,53,32,97,114,101,32,97,100,100,101,100,58,32,76,83,32,40,108,105,110,101,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,56,41,32,97,110,100,32,80,83,32,40,112,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,57,41,46,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,32,105,115,32,110,111,116,32,110,101,101,100,101,100,32,102,111,114,32,116,104,101,115,101,32,99,104,97,114,97,99,116,101,114,115,32,116,111,32,98,101,32,114,101,99,111,103,110,105,122,101,100,46>>]},{p,[],[<<92,82,32,99,97,110,32,98,101,32,114,101,115,116,114,105,99,116,101,100,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,67,82,44,32,76,70,44,32,111,114,32,67,82,76,70,32,40,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,99,111,109,112,108,101,116,101,32,115,101,116,32,111,102,32,85,110,105,99,111,100,101,32,108,105,110,101,32,101,110,100,105,110,103,115,41,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<98,115,114,95,97,110,121,99,114,108,102>>]},<<32,101,105,116,104,101,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,32,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,109,97,116,99,104,101,100,46,32,40,66,83,82,32,105,115,32,97,110,32,97,99,114,111,110,121,109,32,102,111,114,32,34,98,97,99,107,115,108,97,115,104,32,82,34,46,41,32,84,104,105,115,32,99,97,110,32,98,101,32,109,97,100,101,32,116,104,101,32,100,101,102,97,117,108,116,32,119,104,101,110,32,80,67,82,69,32,105,115,32,98,117,105,108,116,59,32,105,102,32,115,111,44,32,116,104,101,32,111,116,104,101,114,32,98,101,104,97,118,105,111,114,32,99,97,110,32,98,101,32,114,101,113,117,101,115,116,101,100,32,116,104,114,111,117,103,104,32,111,112,116,105,111,110,32>>,{code,[],[<<98,115,114,95,117,110,105,99,111,100,101>>]},<<46,32,84,104,101,115,101,32,115,101,116,116,105,110,103,115,32,99,97,110,32,97,108,115,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,115,116,97,114,116,105,110,103,32,97,32,112,97,116,116,101,114,110,32,115,116,114,105,110,103,32,119,105,116,104,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,101,113,117,101,110,99,101,115,58>>]},{dl,[],[{dt,[],[<<40,42,66,83,82,95,65,78,89,67,82,76,70,41>>]},{dd,[],[<<67,82,44,32,76,70,44,32,111,114,32,67,82,76,70,32,111,110,108,121>>]},{dt,[],[<<40,42,66,83,82,95,85,78,73,67,79,68,69,41>>]},{dd,[],[<<65,110,121,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101>>]}]},{p,[],[<<84,104,101,115,101,32,111,118,101,114,114,105,100,101,32,116,104,101,32,100,101,102,97,117,108,116,32,97,110,100,32,116,104,101,32,111,112,116,105,111,110,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,116,104,101,32,99,111,109,112,105,108,105,110,103,32,102,117,110,99,116,105,111,110,44,32,98,117,116,32,116,104,101,121,32,99,97,110,32,116,104,101,109,115,101,108,118,101,115,32,98,101,32,111,118,101,114,114,105,100,100,101,110,32,98,121,32,111,112,116,105,111,110,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,97,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,115,101,32,115,112,101,99,105,97,108,32,115,101,116,116,105,110,103,115,44,32,119,104,105,99,104,32,97,114,101,32,110,111,116,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,44,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,111,110,108,121,32,97,116,32,116,104,101,32,118,101,114,121,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,44,32,97,110,100,32,116,104,97,116,32,116,104,101,121,32,109,117,115,116,32,98,101,32,105,110,32,117,112,112,101,114,32,99,97,115,101,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,111,102,32,116,104,101,109,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,32,108,97,115,116,32,111,110,101,32,105,115,32,117,115,101,100,46,32,84,104,101,121,32,99,97,110,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,97,32,99,104,97,110,103,101,32,111,102,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,59,32,102,111,114,32,101,120,97,109,112,108,101,44,32,97,32,112,97,116,116,101,114,110,32,99,97,110,32,115,116,97,114,116,32,119,105,116,104,58>>]},{pre,[],[{code,[],[<<40,42,65,78,89,41,40,42,66,83,82,95,65,78,89,67,82,76,70,41>>]}]},{p,[],[<<84,104,101,121,32,99,97,110,32,97,108,115,111,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,116,104,101,32,40,42,85,84,70,56,41,44,32,40,42,85,84,70,41,44,32,111,114,32,40,42,85,67,80,41,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,115,46,32,73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,92,82,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,117,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,44,32,97,110,100,32,115,111,32,109,97,116,99,104,101,115,32,116,104,101,32,108,101,116,116,101,114,32,34,82,34,32,98,121,32,100,101,102,97,117,108,116,46>>]},{p,[],[{em,[],[<<85,110,105,99,111,100,101,32,67,104,97,114,97,99,116,101,114,32,80,114,111,112,101,114,116,105,101,115>>]}]},{p,[],[<<84,104,114,101,101,32,109,111,114,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,116,32,109,97,116,99,104,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,115,112,101,99,105,102,105,99,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,97,118,97,105,108,97,98,108,101,46,32,87,104,101,110,32,105,110,32,56,45,98,105,116,32,110,111,110,45,85,84,70,45,56,32,109,111,100,101,44,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,97,114,101,32,108,105,109,105,116,101,100,32,116,111,32,116,101,115,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,60,32,50,53,54,44,32,98,117,116,32,116,104,101,121,32,100,111,32,119,111,114,107,32,105,110,32,116,104,105,115,32,109,111,100,101,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,101,120,116,114,97,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,58>>]},{dl,[],[{dt,[],[<<92,112,123>>,{em,[],[<<120,120>>]},<<125>>]},{dd,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,112,114,111,112,101,114,116,121,32>>,{em,[],[<<120,120>>]}]},{dt,[],[<<92,80,123>>,{em,[],[<<120,120>>]},<<125>>]},{dd,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,111,117,116,32,112,114,111,112,101,114,116,121,32>>,{em,[],[<<120,120>>]}]},{dt,[],[<<92,88>>]},{dd,[],[<<65,32,85,110,105,99,111,100,101,32,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114>>]}]},{p,[],[<<84,104,101,32,112,114,111,112,101,114,116,121,32,110,97,109,101,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32>>,{em,[],[<<120,120>>]},<<32,97,98,111,118,101,32,97,114,101,32,108,105,109,105,116,101,100,32,116,111,32,116,104,101,32,85,110,105,99,111,100,101,32,115,99,114,105,112,116,32,110,97,109,101,115,44,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,105,101,115,44,32,34,65,110,121,34,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,40,105,110,99,108,117,100,105,110,103,32,110,101,119,108,105,110,101,41,44,32,97,110,100,32,115,111,109,101,32,115,112,101,99,105,97,108,32,80,67,82,69,32,112,114,111,112,101,114,116,105,101,115,32,40,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41,46,32,79,116,104,101,114,32,80,101,114,108,32,112,114,111,112,101,114,116,105,101,115,44,32,115,117,99,104,32,97,115,32,34,73,110,77,117,115,105,99,97,108,83,121,109,98,111,108,115,34,44,32,97,114,101,32,99,117,114,114,101,110,116,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,67,82,69,46,32,78,111,116,105,99,101,32,116,104,97,116,32,92,80,123,65,110,121,125,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,97,110,100,32,97,108,119,97,121,115,32,99,97,117,115,101,115,32,97,32,109,97,116,99,104,32,102,97,105,108,117,114,101,46>>]},{p,[],[<<83,101,116,115,32,111,102,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,100,101,102,105,110,101,100,32,97,115,32,98,101,108,111,110,103,105,110,103,32,116,111,32,99,101,114,116,97,105,110,32,115,99,114,105,112,116,115,46,32,65,32,99,104,97,114,97,99,116,101,114,32,102,114,111,109,32,111,110,101,32,111,102,32,116,104,101,115,101,32,115,101,116,115,32,99,97,110,32,98,101,32,109,97,116,99,104,101,100,32,117,115,105,110,103,32,97,32,115,99,114,105,112,116,32,110,97,109,101,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<92,112,123,71,114,101,101,107,125,32,92,80,123,72,97,110,125>>]}]},{p,[],[<<84,104,111,115,101,32,116,104,97,116,32,97,114,101,32,110,111,116,32,112,97,114,116,32,111,102,32,97,110,32,105,100,101,110,116,105,102,105,101,100,32,115,99,114,105,112,116,32,97,114,101,32,108,117,109,112,101,100,32,116,111,103,101,116,104,101,114,32,97,115,32,34,67,111,109,109,111,110,34,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,116,104,101,32,99,117,114,114,101,110,116,32,108,105,115,116,32,111,102,32,115,99,114,105,112,116,115,58>>]},{ul,[],[{li,[],[<<65,114,97,98,105,99>>]},{li,[],[<<65,114,109,101,110,105,97,110>>]},{li,[],[<<65,118,101,115,116,97,110>>]},{li,[],[<<66,97,108,105,110,101,115,101>>]},{li,[],[<<66,97,109,117,109>>]},{li,[],[<<66,97,115,115,97,95,86,97,104>>]},{li,[],[<<66,97,116,97,107>>]},{li,[],[<<66,101,110,103,97,108,105>>]},{li,[],[<<66,111,112,111,109,111,102,111>>]},{li,[],[<<66,114,97,105,108,108,101>>]},{li,[],[<<66,117,103,105,110,101,115,101>>]},{li,[],[<<66,117,104,105,100>>]},{li,[],[<<67,97,110,97,100,105,97,110,95,65,98,111,114,105,103,105,110,97,108>>]},{li,[],[<<67,97,114,105,97,110>>]},{li,[],[<<67,97,117,99,97,115,105,97,110,95,65,108,98,97,110,105,97,110>>]},{li,[],[<<67,104,97,107,109,97>>]},{li,[],[<<67,104,97,109>>]},{li,[],[<<67,104,101,114,111,107,101,101>>]},{li,[],[<<67,111,109,109,111,110>>]},{li,[],[<<67,111,112,116,105,99>>]},{li,[],[<<67,117,110,101,105,102,111,114,109>>]},{li,[],[<<67,121,112,114,105,111,116>>]},{li,[],[<<67,121,114,105,108,108,105,99>>]},{li,[],[<<68,101,115,101,114,101,116>>]},{li,[],[<<68,101,118,97,110,97,103,97,114,105>>]},{li,[],[<<68,117,112,108,111,121,97,110>>]},{li,[],[<<69,103,121,112,116,105,97,110,95,72,105,101,114,111,103,108,121,112,104,115>>]},{li,[],[<<69,108,98,97,115,97,110>>]},{li,[],[<<69,116,104,105,111,112,105,99>>]},{li,[],[<<71,101,111,114,103,105,97,110>>]},{li,[],[<<71,108,97,103,111,108,105,116,105,99>>]},{li,[],[<<71,111,116,104,105,99>>]},{li,[],[<<71,114,97,110,116,104,97>>]},{li,[],[<<71,114,101,101,107>>]},{li,[],[<<71,117,106,97,114,97,116,105>>]},{li,[],[<<71,117,114,109,117,107,104,105>>]},{li,[],[<<72,97,110>>]},{li,[],[<<72,97,110,103,117,108>>]},{li,[],[<<72,97,110,117,110,111,111>>]},{li,[],[<<72,101,98,114,101,119>>]},{li,[],[<<72,105,114,97,103,97,110,97>>]},{li,[],[<<73,109,112,101,114,105,97,108,95,65,114,97,109,97,105,99>>]},{li,[],[<<73,110,104,101,114,105,116,101,100>>]},{li,[],[<<73,110,115,99,114,105,112,116,105,111,110,97,108,95,80,97,104,108,97,118,105>>]},{li,[],[<<73,110,115,99,114,105,112,116,105,111,110,97,108,95,80,97,114,116,104,105,97,110>>]},{li,[],[<<74,97,118,97,110,101,115,101>>]},{li,[],[<<75,97,105,116,104,105>>]},{li,[],[<<75,97,110,110,97,100,97>>]},{li,[],[<<75,97,116,97,107,97,110,97>>]},{li,[],[<<75,97,121,97,104,95,76,105>>]},{li,[],[<<75,104,97,114,111,115,104,116,104,105>>]},{li,[],[<<75,104,109,101,114>>]},{li,[],[<<75,104,111,106,107,105>>]},{li,[],[<<75,104,117,100,97,119,97,100,105>>]},{li,[],[<<76,97,111>>]},{li,[],[<<76,97,116,105,110>>]},{li,[],[<<76,101,112,99,104,97>>]},{li,[],[<<76,105,109,98,117>>]},{li,[],[<<76,105,110,101,97,114,95,65>>]},{li,[],[<<76,105,110,101,97,114,95,66>>]},{li,[],[<<76,105,115,117>>]},{li,[],[<<76,121,99,105,97,110>>]},{li,[],[<<76,121,100,105,97,110>>]},{li,[],[<<77,97,104,97,106,97,110,105>>]},{li,[],[<<77,97,108,97,121,97,108,97,109>>]},{li,[],[<<77,97,110,100,97,105,99>>]},{li,[],[<<77,97,110,105,99,104,97,101,97,110>>]},{li,[],[<<77,101,101,116,101,105,95,77,97,121,101,107>>]},{li,[],[<<77,101,110,100,101,95,75,105,107,97,107,117,105>>]},{li,[],[<<77,101,114,111,105,116,105,99,95,67,117,114,115,105,118,101>>]},{li,[],[<<77,101,114,111,105,116,105,99,95,72,105,101,114,111,103,108,121,112,104,115>>]},{li,[],[<<77,105,97,111>>]},{li,[],[<<77,111,100,105>>]},{li,[],[<<77,111,110,103,111,108,105,97,110>>]},{li,[],[<<77,114,111>>]},{li,[],[<<77,121,97,110,109,97,114>>]},{li,[],[<<78,97,98,97,116,97,101,97,110>>]},{li,[],[<<78,101,119,95,84,97,105,95,76,117,101>>]},{li,[],[<<78,107,111>>]},{li,[],[<<79,103,104,97,109>>]},{li,[],[<<79,108,95,67,104,105,107,105>>]},{li,[],[<<79,108,100,95,73,116,97,108,105,99>>]},{li,[],[<<79,108,100,95,78,111,114,116,104,95,65,114,97,98,105,97,110>>]},{li,[],[<<79,108,100,95,80,101,114,109,105,99>>]},{li,[],[<<79,108,100,95,80,101,114,115,105,97,110>>]},{li,[],[<<79,114,105,121,97>>]},{li,[],[<<79,108,100,95,83,111,117,116,104,95,65,114,97,98,105,97,110>>]},{li,[],[<<79,108,100,95,84,117,114,107,105,99>>]},{li,[],[<<79,115,109,97,110,121,97>>]},{li,[],[<<80,97,104,97,119,104,95,72,109,111,110,103>>]},{li,[],[<<80,97,108,109,121,114,101,110,101>>]},{li,[],[<<80,97,117,95,67,105,110,95,72,97,117>>]},{li,[],[<<80,104,97,103,115,95,80,97>>]},{li,[],[<<80,104,111,101,110,105,99,105,97,110>>]},{li,[],[<<80,115,97,108,116,101,114,95,80,97,104,108,97,118,105>>]},{li,[],[<<82,101,106,97,110,103>>]},{li,[],[<<82,117,110,105,99>>]},{li,[],[<<83,97,109,97,114,105,116,97,110>>]},{li,[],[<<83,97,117,114,97,115,104,116,114,97>>]},{li,[],[<<83,104,97,114,97,100,97>>]},{li,[],[<<83,104,97,118,105,97,110>>]},{li,[],[<<83,105,100,100,104,97,109>>]},{li,[],[<<83,105,110,104,97,108,97>>]},{li,[],[<<83,111,114,97,95,83,111,109,112,101,110,103>>]},{li,[],[<<83,117,110,100,97,110,101,115,101>>]},{li,[],[<<83,121,108,111,116,105,95,78,97,103,114,105>>]},{li,[],[<<83,121,114,105,97,99>>]},{li,[],[<<84,97,103,97,108,111,103>>]},{li,[],[<<84,97,103,98,97,110,119,97>>]},{li,[],[<<84,97,105,95,76,101>>]},{li,[],[<<84,97,105,95,84,104,97,109>>]},{li,[],[<<84,97,105,95,86,105,101,116>>]},{li,[],[<<84,97,107,114,105>>]},{li,[],[<<84,97,109,105,108>>]},{li,[],[<<84,101,108,117,103,117>>]},{li,[],[<<84,104,97,97,110,97>>]},{li,[],[<<84,104,97,105>>]},{li,[],[<<84,105,98,101,116,97,110>>]},{li,[],[<<84,105,102,105,110,97,103,104>>]},{li,[],[<<84,105,114,104,117,116,97>>]},{li,[],[<<85,103,97,114,105,116,105,99>>]},{li,[],[<<86,97,105>>]},{li,[],[<<87,97,114,97,110,103,95,67,105,116,105>>]},{li,[],[<<89,105>>]}]},{p,[],[<<69,97,99,104,32,99,104,97,114,97,99,116,101,114,32,104,97,115,32,101,120,97,99,116,108,121,32,111,110,101,32,85,110,105,99,111,100,101,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,121,44,32,115,112,101,99,105,102,105,101,100,32,98,121,32,97,32,116,119,111,45,108,101,116,116,101,114,32,97,99,114,111,110,121,109,46,32,70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,80,101,114,108,44,32,110,101,103,97,116,105,111,110,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,105,110,99,108,117,100,105,110,103,32,97,32,99,105,114,99,117,109,102,108,101,120,32,98,101,116,119,101,101,110,32,116,104,101,32,111,112,101,110,105,110,103,32,98,114,97,99,101,32,97,110,100,32,116,104,101,32,112,114,111,112,101,114,116,121,32,110,97,109,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,92,112,123,94,76,117,125,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,92,80,123,76,117,125,46>>]},{p,[],[<<73,102,32,111,110,108,121,32,111,110,101,32,108,101,116,116,101,114,32,105,115,32,115,112,101,99,105,102,105,101,100,32,119,105,116,104,32,92,112,32,111,114,32,92,80,44,32,105,116,32,105,110,99,108,117,100,101,115,32,97,108,108,32,116,104,101,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,105,101,115,32,116,104,97,116,32,115,116,97,114,116,32,119,105,116,104,32,116,104,97,116,32,108,101,116,116,101,114,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,105,110,32,116,104,101,32,97,98,115,101,110,99,101,32,111,102,32,110,101,103,97,116,105,111,110,44,32,116,104,101,32,99,117,114,108,121,32,98,114,97,99,107,101,116,115,32,105,110,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,97,114,101,32,111,112,116,105,111,110,97,108,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,116,119,111,32,101,120,97,109,112,108,101,115,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,58>>]},{pre,[],[{code,[],[<<92,112,123,76,125,10,92,112,76>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,103,101,110,101,114,97,108,32,99,97,116,101,103,111,114,121,32,112,114,111,112,101,114,116,121,32,99,111,100,101,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,58>>]},{dl,[],[{dt,[],[<<67>>]},{dd,[],[<<79,116,104,101,114>>]},{dt,[],[<<67,99>>]},{dd,[],[<<67,111,110,116,114,111,108>>]},{dt,[],[<<67,102>>]},{dd,[],[<<70,111,114,109,97,116>>]},{dt,[],[<<67,110>>]},{dd,[],[<<85,110,97,115,115,105,103,110,101,100>>]},{dt,[],[<<67,111>>]},{dd,[],[<<80,114,105,118,97,116,101,32,117,115,101>>]},{dt,[],[<<67,115>>]},{dd,[],[<<83,117,114,114,111,103,97,116,101>>]},{dt,[],[<<76>>]},{dd,[],[<<76,101,116,116,101,114>>]},{dt,[],[<<76,108>>]},{dd,[],[<<76,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114>>]},{dt,[],[<<76,109>>]},{dd,[],[<<77,111,100,105,102,105,101,114,32,108,101,116,116,101,114>>]},{dt,[],[<<76,111>>]},{dd,[],[<<79,116,104,101,114,32,108,101,116,116,101,114>>]},{dt,[],[<<76,116>>]},{dd,[],[<<84,105,116,108,101,32,99,97,115,101,32,108,101,116,116,101,114>>]},{dt,[],[<<76,117>>]},{dd,[],[<<85,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114>>]},{dt,[],[<<77>>]},{dd,[],[<<77,97,114,107>>]},{dt,[],[<<77,99>>]},{dd,[],[<<83,112,97,99,105,110,103,32,109,97,114,107>>]},{dt,[],[<<77,101>>]},{dd,[],[<<69,110,99,108,111,115,105,110,103,32,109,97,114,107>>]},{dt,[],[<<77,110>>]},{dd,[],[<<78,111,110,45,115,112,97,99,105,110,103,32,109,97,114,107>>]},{dt,[],[<<78>>]},{dd,[],[<<78,117,109,98,101,114>>]},{dt,[],[<<78,100>>]},{dd,[],[<<68,101,99,105,109,97,108,32,110,117,109,98,101,114>>]},{dt,[],[<<78,108>>]},{dd,[],[<<76,101,116,116,101,114,32,110,117,109,98,101,114>>]},{dt,[],[<<78,111>>]},{dd,[],[<<79,116,104,101,114,32,110,117,109,98,101,114>>]},{dt,[],[<<80>>]},{dd,[],[<<80,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,99>>]},{dd,[],[<<67,111,110,110,101,99,116,111,114,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,100>>]},{dd,[],[<<68,97,115,104,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,101>>]},{dd,[],[<<67,108,111,115,101,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,102>>]},{dd,[],[<<70,105,110,97,108,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,105>>]},{dd,[],[<<73,110,105,116,105,97,108,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,111>>]},{dd,[],[<<79,116,104,101,114,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<80,115>>]},{dd,[],[<<79,112,101,110,32,112,117,110,99,116,117,97,116,105,111,110>>]},{dt,[],[<<83>>]},{dd,[],[<<83,121,109,98,111,108>>]},{dt,[],[<<83,99>>]},{dd,[],[<<67,117,114,114,101,110,99,121,32,115,121,109,98,111,108>>]},{dt,[],[<<83,107>>]},{dd,[],[<<77,111,100,105,102,105,101,114,32,115,121,109,98,111,108>>]},{dt,[],[<<83,109>>]},{dd,[],[<<77,97,116,104,101,109,97,116,105,99,97,108,32,115,121,109,98,111,108>>]},{dt,[],[<<83,111>>]},{dd,[],[<<79,116,104,101,114,32,115,121,109,98,111,108>>]},{dt,[],[<<90>>]},{dd,[],[<<83,101,112,97,114,97,116,111,114>>]},{dt,[],[<<90,108>>]},{dd,[],[<<76,105,110,101,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<90,112>>]},{dd,[],[<<80,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114>>]},{dt,[],[<<90,115>>]},{dd,[],[<<83,112,97,99,101,32,115,101,112,97,114,97,116,111,114>>]}]},{p,[],[<<84,104,101,32,115,112,101,99,105,97,108,32,112,114,111,112,101,114,116,121,32,76,38,32,105,115,32,97,108,115,111,32,115,117,112,112,111,114,116,101,100,46,32,73,116,32,109,97,116,99,104,101,115,32,97,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,104,97,115,32,116,104,101,32,76,117,44,32,76,108,44,32,111,114,32,76,116,32,112,114,111,112,101,114,116,121,44,32,116,104,97,116,32,105,115,44,32,97,32,108,101,116,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,99,108,97,115,115,105,102,105,101,100,32,97,115,32,97,32,109,111,100,105,102,105,101,114,32,111,114,32,34,111,116,104,101,114,34,46>>]},{p,[],[<<84,104,101,32,67,115,32,40,83,117,114,114,111,103,97,116,101,41,32,112,114,111,112,101,114,116,121,32,97,112,112,108,105,101,115,32,111,110,108,121,32,116,111,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,85,43,68,56,48,48,32,116,111,32,85,43,68,70,70,70,46,32,83,117,99,104,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,105,110,118,97,108,105,100,32,105,110,32,85,110,105,99,111,100,101,32,115,116,114,105,110,103,115,32,97,110,100,32,115,111,32,99,97,110,110,111,116,32,98,101,32,116,101,115,116,101,100,32,98,121,32,80,67,82,69,46,32,80,101,114,108,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,101,32,67,115,32,112,114,111,112,101,114,116,121,46>>]},{p,[],[<<84,104,101,32,108,111,110,103,32,115,121,110,111,110,121,109,115,32,102,111,114,32,112,114,111,112,101,114,116,121,32,110,97,109,101,115,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,101,114,108,32,40,115,117,99,104,32,97,115,32,92,112,123,76,101,116,116,101,114,125,41,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,80,67,82,69,46,32,73,116,32,105,115,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,116,111,32,112,114,101,102,105,120,32,97,110,121,32,111,102,32,116,104,101,115,101,32,112,114,111,112,101,114,116,105,101,115,32,119,105,116,104,32,34,73,115,34,46>>]},{p,[],[<<78,111,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,85,110,105,99,111,100,101,32,116,97,98,108,101,32,104,97,115,32,116,104,101,32,67,110,32,40,117,110,97,115,115,105,103,110,101,100,41,32,112,114,111,112,101,114,116,121,46,32,84,104,105,115,32,112,114,111,112,101,114,116,121,32,105,115,32,105,110,115,116,101,97,100,32,97,115,115,117,109,101,100,32,102,111,114,32,97,110,121,32,99,111,100,101,32,112,111,105,110,116,32,116,104,97,116,32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,85,110,105,99,111,100,101,32,116,97,98,108,101,46>>]},{p,[],[<<83,112,101,99,105,102,121,105,110,103,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,115,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,92,112,123,76,117,125,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,111,110,108,121,32,117,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114,115,46,32,84,104,105,115,32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,99,117,114,114,101,110,116,32,118,101,114,115,105,111,110,115,32,111,102,32,80,101,114,108,46>>]},{p,[],[<<77,97,116,99,104,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,105,115,32,110,111,116,32,102,97,115,116,44,32,97,115,32,80,67,82,69,32,109,117,115,116,32,100,111,32,97,32,109,117,108,116,105,115,116,97,103,101,32,116,97,98,108,101,32,108,111,111,107,117,112,32,116,111,32,102,105,110,100,32,97,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,121,46,32,84,104,97,116,32,105,115,32,119,104,121,32,116,104,101,32,116,114,97,100,105,116,105,111,110,97,108,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,115,117,99,104,32,97,115,32,92,100,32,97,110,100,32,92,119,32,100,111,32,110,111,116,32,117,115,101,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,105,110,32,80,67,82,69,32,98,121,32,100,101,102,97,117,108,116,46,32,72,111,119,101,118,101,114,44,32,121,111,117,32,99,97,110,32,109,97,107,101,32,116,104,101,109,32,100,111,32,115,111,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,111,114,32,98,121,32,115,116,97,114,116,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,119,105,116,104,32,40,42,85,67,80,41,46>>]},{p,[],[{em,[],[<<69,120,116,101,110,100,101,100,32,71,114,97,112,104,101,109,101,32,67,108,117,115,116,101,114,115>>]}]},{p,[],[<<84,104,101,32,92,88,32,101,115,99,97,112,101,32,109,97,116,99,104,101,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,102,111,114,109,32,97,110,32,34,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114,34,44,32,97,110,100,32,116,114,101,97,116,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,40,115,101,101,32,98,101,108,111,119,41,46,32,85,112,32,116,111,32,97,110,100,32,105,110,99,108,117,100,105,110,103,32,114,101,108,101,97,115,101,32,56,46,51,49,44,32,80,67,82,69,32,109,97,116,99,104,101,100,32,97,110,32,101,97,114,108,105,101,114,44,32,115,105,109,112,108,101,114,32,100,101,102,105,110,105,116,105,111,110,32,116,104,97,116,32,119,97,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<40,63,62,92,80,77,92,112,77,42,41>>]},<<46,32,84,104,97,116,32,105,115,44,32,105,116,32,109,97,116,99,104,101,100,32,97,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,111,117,116,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,44,32,102,111,108,108,111,119,101,100,32,98,121,32,122,101,114,111,32,111,114,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,46,32,67,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,32,97,114,101,32,116,121,112,105,99,97,108,108,121,32,110,111,110,45,115,112,97,99,105,110,103,32,97,99,99,101,110,116,115,32,116,104,97,116,32,97,102,102,101,99,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,99,104,97,114,97,99,116,101,114,46>>]},{p,[],[<<84,104,105,115,32,115,105,109,112,108,101,32,100,101,102,105,110,105,116,105,111,110,32,119,97,115,32,101,120,116,101,110,100,101,100,32,105,110,32,85,110,105,99,111,100,101,32,116,111,32,105,110,99,108,117,100,101,32,109,111,114,101,32,99,111,109,112,108,105,99,97,116,101,100,32,107,105,110,100,115,32,111,102,32,99,111,109,112,111,115,105,116,101,32,99,104,97,114,97,99,116,101,114,32,98,121,32,103,105,118,105,110,103,32,101,97,99,104,32,99,104,97,114,97,99,116,101,114,32,97,32,103,114,97,112,104,101,109,101,32,98,114,101,97,107,105,110,103,32,112,114,111,112,101,114,116,121,44,32,97,110,100,32,99,114,101,97,116,105,110,103,32,114,117,108,101,115,32,116,104,97,116,32,117,115,101,32,116,104,101,115,101,32,112,114,111,112,101,114,116,105,101,115,32,116,111,32,100,101,102,105,110,101,32,116,104,101,32,98,111,117,110,100,97,114,105,101,115,32,111,102,32,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114,115,46,32,73,110,32,80,67,82,69,32,114,101,108,101,97,115,101,115,32,108,97,116,101,114,32,116,104,97,110,32,56,46,51,49,44,32,92,88,32,109,97,116,99,104,101,115,32,111,110,101,32,111,102,32,116,104,101,115,101,32,99,108,117,115,116,101,114,115,46>>]},{p,[],[<<92,88,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,97,116,32,108,101,97,115,116,32,111,110,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,110,32,105,116,32,100,101,99,105,100,101,115,32,119,104,101,116,104,101,114,32,116,111,32,97,100,100,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,117,108,101,115,32,102,111,114,32,101,110,100,105,110,103,32,97,32,99,108,117,115,116,101,114,58>>]},{ol,[],[{li,[],[{p,[],[<<69,110,100,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,101,110,100,32,98,101,116,119,101,101,110,32,67,82,32,97,110,100,32,76,70,59,32,111,116,104,101,114,119,105,115,101,32,101,110,100,32,97,102,116,101,114,32,97,110,121,32,99,111,110,116,114,111,108,32,99,104,97,114,97,99,116,101,114,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,98,114,101,97,107,32,72,97,110,103,117,108,32,40,97,32,75,111,114,101,97,110,32,115,99,114,105,112,116,41,32,115,121,108,108,97,98,108,101,32,115,101,113,117,101,110,99,101,115,46,32,72,97,110,103,117,108,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,111,102,32,102,105,118,101,32,116,121,112,101,115,58,32,76,44,32,86,44,32,84,44,32,76,86,44,32,97,110,100,32,76,86,84,46,32,65,110,32,76,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,76,44,32,86,44,32,76,86,44,32,111,114,32,76,86,84,32,99,104,97,114,97,99,116,101,114,46,32,65,110,32,76,86,32,111,114,32,86,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,86,32,111,114,32,84,32,99,104,97,114,97,99,116,101,114,46,32,65,110,32,76,86,84,32,111,114,32,84,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,102,111,108,108,111,119,101,100,32,111,110,108,121,32,98,121,32,97,32,84,32,99,104,97,114,97,99,116,101,114,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,101,110,100,32,98,101,102,111,114,101,32,101,120,116,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,111,114,32,115,112,97,99,105,110,103,32,109,97,114,107,115,46,32,67,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,34,109,97,114,107,34,32,112,114,111,112,101,114,116,121,32,97,108,119,97,121,115,32,104,97,118,101,32,116,104,101,32,34,101,120,116,101,110,100,34,32,103,114,97,112,104,101,109,101,32,98,114,101,97,107,105,110,103,32,112,114,111,112,101,114,116,121,46>>]}]},{li,[],[{p,[],[<<68,111,32,110,111,116,32,101,110,100,32,97,102,116,101,114,32,112,114,101,112,101,110,100,32,99,104,97,114,97,99,116,101,114,115,46>>]}]},{li,[],[{p,[],[<<79,116,104,101,114,119,105,115,101,44,32,101,110,100,32,116,104,101,32,99,108,117,115,116,101,114,46>>]}]}]},{p,[],[{em,[],[<<80,67,82,69,32,65,100,100,105,116,105,111,110,97,108,32,80,114,111,112,101,114,116,105,101,115>>]}]},{p,[],[<<73,110,32,97,100,100,105,116,105,111,110,32,116,111,32,116,104,101,32,115,116,97,110,100,97,114,100,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,100,101,115,99,114,105,98,101,100,32,101,97,114,108,105,101,114,44,32,80,67,82,69,32,115,117,112,112,111,114,116,115,32,102,111,117,114,32,109,111,114,101,32,116,104,97,116,32,109,97,107,101,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,99,111,110,118,101,114,116,32,116,114,97,100,105,116,105,111,110,97,108,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,44,32,115,117,99,104,32,97,115,32,92,119,32,97,110,100,32,92,115,32,116,111,32,117,115,101,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,46,32,80,67,82,69,32,117,115,101,115,32,116,104,101,115,101,32,110,111,110,45,115,116,97,110,100,97,114,100,44,32,110,111,110,45,80,101,114,108,32,112,114,111,112,101,114,116,105,101,115,32,105,110,116,101,114,110,97,108,108,121,32,119,104,101,110,32,116,104,101,32>>,{code,[],[<<117,99,112>>]},<<32,111,112,116,105,111,110,32,105,115,32,112,97,115,115,101,100,46,32,72,111,119,101,118,101,114,44,32,116,104,101,121,32,99,97,110,32,97,108,115,111,32,98,101,32,117,115,101,100,32,101,120,112,108,105,99,105,116,108,121,46,32,84,104,101,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<88,97,110>>]},{dd,[],[{p,[],[<<65,110,121,32,97,108,112,104,97,110,117,109,101,114,105,99,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,101,105,116,104,101,114,32,116,104,101,32,76,32,40,108,101,116,116,101,114,41,32,111,114,32,116,104,101,32,78,32,40,110,117,109,98,101,114,41,32,112,114,111,112,101,114,116,121,46>>]}]},{dt,[],[<<88,112,115>>]},{dd,[],[{p,[],[<<65,110,121,32,80,111,115,105,120,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,97,98,44,32,108,105,110,101,32,102,101,101,100,44,32,118,101,114,116,105,99,97,108,32,116,97,98,44,32,102,111,114,109,32,102,101,101,100,44,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,44,32,97,110,100,32,97,110,121,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,104,97,115,32,116,104,101,32,90,32,40,115,101,112,97,114,97,116,111,114,41,32,112,114,111,112,101,114,116,121,46>>]}]},{dt,[],[<<88,115,112>>]},{dd,[],[{p,[],[<<65,110,121,32,80,101,114,108,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,97,115,32,88,112,115,44,32,101,120,99,101,112,116,32,116,104,97,116,32,118,101,114,116,105,99,97,108,32,116,97,98,32,105,115,32,101,120,99,108,117,100,101,100,46>>]}]},{dt,[],[<<88,119,100>>]},{dd,[],[{p,[],[<<65,110,121,32,80,101,114,108,32,34,119,111,114,100,34,32,99,104,97,114,97,99,116,101,114,46,32,77,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,88,97,110,44,32,112,108,117,115,32,117,110,100,101,114,115,99,111,114,101,46>>]}]}]},{p,[],[<<80,101,114,108,32,97,110,100,32,80,79,83,73,88,32,115,112,97,99,101,32,97,114,101,32,110,111,119,32,116,104,101,32,115,97,109,101,46,32,80,101,114,108,32,97,100,100,101,100,32,86,84,32,116,111,32,105,116,115,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,32,115,101,116,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,32,97,110,100,32,80,67,82,69,32,99,104,97,110,103,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46>>]},{p,[],[<<88,97,110,32,109,97,116,99,104,101,115,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,101,105,116,104,101,114,32,116,104,101,32,76,32,40,108,101,116,116,101,114,41,32,111,114,32,116,104,101,32,78,32,40,110,117,109,98,101,114,41,32,112,114,111,112,101,114,116,121,46,32,88,112,115,32,109,97,116,99,104,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,97,98,44,32,108,105,110,101,102,101,101,100,44,32,118,101,114,116,105,99,97,108,32,116,97,98,44,32,102,111,114,109,32,102,101,101,100,44,32,111,114,32,99,97,114,114,105,97,103,101,32,114,101,116,117,114,110,44,32,97,110,100,32,97,110,121,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,104,97,115,32,116,104,101,32,90,32,40,115,101,112,97,114,97,116,111,114,41,32,112,114,111,112,101,114,116,121,46,32,88,115,112,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,88,112,115,59,32,105,116,32,117,115,101,100,32,116,111,32,101,120,99,108,117,100,101,32,118,101,114,116,105,99,97,108,32,116,97,98,44,32,102,111,114,32,80,101,114,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,44,32,98,117,116,32,80,101,114,108,32,99,104,97,110,103,101,100,44,32,97,110,100,32,115,111,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46,32,88,119,100,32,109,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,88,97,110,44,32,112,108,117,115,32,117,110,100,101,114,115,99,111,114,101,46>>]},{p,[],[<<84,104,101,114,101,32,105,115,32,97,110,111,116,104,101,114,32,110,111,110,45,115,116,97,110,100,97,114,100,32,112,114,111,112,101,114,116,121,44,32,88,117,99,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,85,110,105,118,101,114,115,97,108,32,67,104,97,114,97,99,116,101,114,32,78,97,109,101,32,105,110,32,67,43,43,32,97,110,100,32,111,116,104,101,114,32,112,114,111,103,114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,115,46,32,84,104,101,115,101,32,97,114,101,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,36,44,32,64,44,32,96,32,40,103,114,97,118,101,32,97,99,99,101,110,116,41,44,32,97,110,100,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,85,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,115,32,62,61,32,85,43,48,48,65,48,44,32,101,120,99,101,112,116,32,102,111,114,32,116,104,101,32,115,117,114,114,111,103,97,116,101,115,32,85,43,68,56,48,48,32,116,111,32,85,43,68,70,70,70,46,32,78,111,116,105,99,101,32,116,104,97,116,32,109,111,115,116,32,98,97,115,101,32,40,65,83,67,73,73,41,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,101,120,99,108,117,100,101,100,46,32,40,85,110,105,118,101,114,115,97,108,32,67,104,97,114,97,99,116,101,114,32,78,97,109,101,115,32,97,114,101,32,111,102,32,116,104,101,32,102,111,114,109,32,92,117,72,72,72,72,32,111,114,32,92,85,72,72,72,72,72,72,72,72,44,32,119,104,101,114,101,32,72,32,105,115,32,97,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,46,32,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,88,117,99,32,112,114,111,112,101,114,116,121,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,115,101,32,115,101,113,117,101,110,99,101,115,32,98,117,116,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,116,104,101,121,32,114,101,112,114,101,115,101,110,116,46,41>>]},{p,[],[{em,[],[<<82,101,115,101,116,116,105,110,103,32,116,104,101,32,77,97,116,99,104,32,83,116,97,114,116>>]}]},{p,[],[<<84,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,75,32,99,97,117,115,101,115,32,97,110,121,32,112,114,101,118,105,111,117,115,108,121,32,109,97,116,99,104,101,100,32,99,104,97,114,97,99,116,101,114,115,32,110,111,116,32,116,111,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,116,104,101,32,102,105,110,97,108,32,109,97,116,99,104,101,100,32,115,101,113,117,101,110,99,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,102,111,111,98,97,114,34,44,32,98,117,116,32,114,101,112,111,114,116,115,32,116,104,97,116,32,105,116,32,104,97,115,32,109,97,116,99,104,101,100,32,34,98,97,114,34,58>>]},{pre,[],[{code,[],[<<102,111,111,92,75,98,97,114>>]}]},{p,[],[<<84,104,105,115,32,102,101,97,116,117,114,101,32,105,115,32,115,105,109,105,108,97,114,32,116,111,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,40,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,41,46,32,72,111,119,101,118,101,114,44,32,105,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,98,101,102,111,114,101,32,116,104,101,32,114,101,97,108,32,109,97,116,99,104,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,116,111,32,98,101,32,111,102,32,102,105,120,101,100,32,108,101,110,103,116,104,44,32,97,115,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,100,111,46,32,84,104,101,32,117,115,101,32,111,102,32,92,75,32,100,111,101,115,32,110,111,116,32,105,110,116,101,114,102,101,114,101,32,119,105,116,104,32,116,104,101,32,115,101,116,116,105,110,103,32,111,102,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,102,111,111,98,97,114,34,44,32,116,104,101,32,102,105,114,115,116,32,115,117,98,115,116,114,105,110,103,32,105,115,32,115,116,105,108,108,32,115,101,116,32,116,111,32,34,102,111,111,34,58>>]},{pre,[],[{code,[],[<<40,102,111,111,41,92,75,98,97,114>>]}]},{p,[],[<<80,101,114,108,32,100,111,99,117,109,101,110,116,115,32,116,104,97,116,32,116,104,101,32,117,115,101,32,111,102,32,92,75,32,119,105,116,104,105,110,32,97,115,115,101,114,116,105,111,110,115,32,105,115,32,34,110,111,116,32,119,101,108,108,32,100,101,102,105,110,101,100,34,46,32,73,110,32,80,67,82,69,44,32,92,75,32,105,115,32,97,99,116,101,100,32,117,112,111,110,32,119,104,101,110,32,105,116,32,111,99,99,117,114,115,32,105,110,115,105,100,101,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,44,32,98,117,116,32,105,115,32,105,103,110,111,114,101,100,32,105,110,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,78,111,116,101,32,116,104,97,116,32,119,104,101,110,32,97,32,112,97,116,116,101,114,110,32,115,117,99,104,32,97,115,32,40,63,61,97,98,92,75,41,32,109,97,116,99,104,101,115,44,32,116,104,101,32,114,101,112,111,114,116,101,100,32,115,116,97,114,116,32,111,102,32,116,104,101,32,109,97,116,99,104,32,99,97,110,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,109,97,116,99,104,46>>]},{p,[],[{em,[],[<<83,105,109,112,108,101,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<84,104,101,32,102,105,110,97,108,32,117,115,101,32,111,102,32,98,97,99,107,115,108,97,115,104,32,105,115,32,102,111,114,32,99,101,114,116,97,105,110,32,115,105,109,112,108,101,32,97,115,115,101,114,116,105,111,110,115,46,32,65,110,32,97,115,115,101,114,116,105,111,110,32,115,112,101,99,105,102,105,101,115,32,97,32,99,111,110,100,105,116,105,111,110,32,116,104,97,116,32,109,117,115,116,32,98,101,32,109,101,116,32,97,116,32,97,32,112,97,114,116,105,99,117,108,97,114,32,112,111,105,110,116,32,105,110,32,97,32,109,97,116,99,104,44,32,119,105,116,104,111,117,116,32,99,111,110,115,117,109,105,110,103,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,84,104,101,32,117,115,101,32,111,102,32,115,117,98,112,97,116,116,101,114,110,115,32,102,111,114,32,109,111,114,101,32,99,111,109,112,108,105,99,97,116,101,100,32,97,115,115,101,114,116,105,111,110,115,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,98,97,99,107,115,108,97,115,104,101,100,32,97,115,115,101,114,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[<<92,98>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,97,32,119,111,114,100,32,98,111,117,110,100,97,114,121,46>>]},{dt,[],[<<92,66>>]},{dd,[],[<<77,97,116,99,104,101,115,32,119,104,101,110,32,110,111,116,32,97,116,32,97,32,119,111,114,100,32,98,111,117,110,100,97,114,121,46>>]},{dt,[],[<<92,65>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46>>]},{dt,[],[<<92,90>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,97,110,100,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46>>]},{dt,[],[<<92,122>>]},{dd,[],[<<77,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46>>]},{dt,[],[<<92,71>>]},{dd,[],[<<77,97,116,99,104,101,115,32,97,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46>>]}]},{p,[],[<<73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,92,98,32,104,97,115,32,97,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,59,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,98,97,99,107,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,73,102,32,97,110,121,32,111,116,104,101,114,32,111,102,32,116,104,101,115,101,32,97,115,115,101,114,116,105,111,110,115,32,97,112,112,101,97,114,115,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,98,121,32,100,101,102,97,117,108,116,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,92,66,32,109,97,116,99,104,101,115,32,116,104,101,32,108,101,116,116,101,114,32,66,41,46>>]},{p,[],[<<65,32,119,111,114,100,32,98,111,117,110,100,97,114,121,32,105,115,32,97,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,119,104,101,114,101,32,116,104,101,32,99,117,114,114,101,110,116,32,99,104,97,114,97,99,116,101,114,32,97,110,100,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,104,97,114,97,99,116,101,114,32,100,111,32,110,111,116,32,98,111,116,104,32,109,97,116,99,104,32,92,119,32,111,114,32,92,87,32,40,116,104,97,116,32,105,115,44,32,111,110,101,32,109,97,116,99,104,101,115,32,92,119,32,97,110,100,32,116,104,101,32,111,116,104,101,114,32,109,97,116,99,104,101,115,32,92,87,41,44,32,111,114,32,116,104,101,32,115,116,97,114,116,32,111,114,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,105,102,32,116,104,101,32,102,105,114,115,116,32,111,114,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,32,109,97,116,99,104,101,115,32,92,119,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,73,110,32,85,84,70,32,109,111,100,101,44,32,116,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,92,119,32,97,110,100,32,92,87,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<46,32,87,104,101,110,32,116,104,105,115,32,105,115,32,100,111,110,101,44,32,105,116,32,97,108,115,111,32,97,102,102,101,99,116,115,32,92,98,32,97,110,100,32,92,66,46,32,80,67,82,69,32,97,110,100,32,80,101,114,108,32,100,111,32,110,111,116,32,104,97,118,101,32,97,32,115,101,112,97,114,97,116,101,32,34,115,116,97,114,116,32,111,102,32,119,111,114,100,34,32,111,114,32,34,101,110,100,32,111,102,32,119,111,114,100,34,32,109,101,116,97,115,101,113,117,101,110,99,101,46,32,72,111,119,101,118,101,114,44,32,119,104,97,116,101,118,101,114,32,102,111,108,108,111,119,115,32,92,98,32,110,111,114,109,97,108,108,121,32,100,101,116,101,114,109,105,110,101,115,32,119,104,105,99,104,32,105,116,32,105,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,114,97,103,109,101,110,116,32,92,98,97,32,109,97,116,99,104,101,115,32,34,97,34,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,119,111,114,100,46>>]},{p,[],[<<84,104,101,32,92,65,44,32,92,90,44,32,97,110,100,32,92,122,32,97,115,115,101,114,116,105,111,110,115,32,100,105,102,102,101,114,32,102,114,111,109,32,116,104,101,32,116,114,97,100,105,116,105,111,110,97,108,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,40,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41,32,105,110,32,116,104,97,116,32,116,104,101,121,32,111,110,108,121,32,101,118,101,114,32,109,97,116,99,104,32,97,116,32,116,104,101,32,118,101,114,121,32,115,116,97,114,116,32,97,110,100,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,119,104,97,116,101,118,101,114,32,111,112,116,105,111,110,115,32,97,114,101,32,115,101,116,46,32,84,104,117,115,44,32,116,104,101,121,32,97,114,101,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,46,32,84,104,101,115,101,32,116,104,114,101,101,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,32,110,111,116,32,97,102,102,101,99,116,101,100,32,98,121,32,111,112,116,105,111,110,115,32>>,{code,[],[<<110,111,116,98,111,108>>]},<<32,111,114,32>>,{code,[],[<<110,111,116,101,111,108>>]},<<44,32,119,104,105,99,104,32,97,102,102,101,99,116,32,111,110,108,121,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,46,32,72,111,119,101,118,101,114,44,32,105,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,105,115,32,110,111,110,45,122,101,114,111,44,32,105,110,100,105,99,97,116,105,110,103,32,116,104,97,116,32,109,97,116,99,104,105,110,103,32,105,115,32,116,111,32,115,116,97,114,116,32,97,116,32,97,32,112,111,105,110,116,32,111,116,104,101,114,32,116,104,97,110,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,92,65,32,99,97,110,32,110,101,118,101,114,32,109,97,116,99,104,46,32,84,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,101,116,119,101,101,110,32,92,90,32,97,110,100,32,92,122,32,105,115,32,116,104,97,116,32,92,90,32,109,97,116,99,104,101,115,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,97,110,100,32,97,116,32,116,104,101,32,118,101,114,121,32,101,110,100,44,32,119,104,105,108,101,32,92,122,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,46>>]},{p,[],[<<84,104,101,32,92,71,32,97,115,115,101,114,116,105,111,110,32,105,115,32,116,114,117,101,32,111,110,108,121,32,119,104,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,32,105,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,112,111,105,110,116,32,111,102,32,116,104,101,32,109,97,116,99,104,44,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<46,32,73,116,32,100,105,102,102,101,114,115,32,102,114,111,109,32,92,65,32,119,104,101,110,32,116,104,101,32,118,97,108,117,101,32,111,102,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,105,115,32,110,111,110,45,122,101,114,111,46,32,66,121,32,99,97,108,108,105,110,103,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,32,119,105,116,104,32,97,112,112,114,111,112,114,105,97,116,101,32,97,114,103,117,109,101,110,116,115,44,32,121,111,117,32,99,97,110,32,109,105,109,105,99,32,116,104,101,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,103>>]},<<44,32,97,110,100,32,105,116,32,105,115,32,105,110,32,116,104,105,115,32,107,105,110,100,32,111,102,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,119,104,101,114,101,32,92,71,32,99,97,110,32,98,101,32,117,115,101,102,117,108,46>>]},{p,[],[<<78,111,116,105,99,101,44,32,104,111,119,101,118,101,114,44,32,116,104,97,116,32,116,104,101,32,80,67,82,69,32,105,110,116,101,114,112,114,101,116,97,116,105,111,110,32,111,102,32,92,71,44,32,97,115,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,44,32,105,115,32,115,117,98,116,108,121,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32,80,101,114,108,44,32,119,104,105,99,104,32,100,101,102,105,110,101,115,32,105,116,32,97,115,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,112,114,101,118,105,111,117,115,32,109,97,116,99,104,46,32,73,110,32,80,101,114,108,44,32,116,104,101,115,101,32,99,97,110,32,98,101,32,100,105,102,102,101,114,101,110,116,32,119,104,101,110,32,116,104,101,32,112,114,101,118,105,111,117,115,108,121,32,109,97,116,99,104,101,100,32,115,116,114,105,110,103,32,119,97,115,32,101,109,112,116,121,46,32,65,115,32,80,67,82,69,32,100,111,101,115,32,111,110,108,121,32,111,110,101,32,109,97,116,99,104,32,97,116,32,97,32,116,105,109,101,44,32,105,116,32,99,97,110,110,111,116,32,114,101,112,114,111,100,117,99,101,32,116,104,105,115,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<73,102,32,97,108,108,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,111,102,32,97,32,112,97,116,116,101,114,110,32,98,101,103,105,110,32,119,105,116,104,32,92,71,44,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,97,110,99,104,111,114,101,100,32,116,111,32,116,104,101,32,115,116,97,114,116,105,110,103,32,109,97,116,99,104,32,112,111,115,105,116,105,111,110,44,32,97,110,100,32,116,104,101,32,34,97,110,99,104,111,114,101,100,34,32,102,108,97,103,32,105,115,32,115,101,116,32,105,110,32,116,104,101,32,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{a,[{id,<<115,101,99,116,52>>}],[]},{h2,[],[<<67,105,114,99,117,109,102,108,101,120,32,97,110,100,32,68,111,108,108,97,114>>]},{p,[],[<<84,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,122,101,114,111,45,119,105,100,116,104,32,97,115,115,101,114,116,105,111,110,115,46,32,84,104,97,116,32,105,115,44,32,116,104,101,121,32,116,101,115,116,32,102,111,114,32,97,32,112,97,114,116,105,99,117,108,97,114,32,99,111,110,100,105,116,105,111,110,32,116,111,32,98,101,32,116,114,117,101,32,119,105,116,104,111,117,116,32,99,111,110,115,117,109,105,110,103,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,102,114,111,109,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,105,110,32,116,104,101,32,100,101,102,97,117,108,116,32,109,97,116,99,104,105,110,103,32,109,111,100,101,44,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,99,104,97,114,97,99,116,101,114,32,105,115,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,32,111,110,108,121,32,105,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,73,102,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,105,115,32,110,111,110,45,122,101,114,111,44,32,99,105,114,99,117,109,102,108,101,120,32,99,97,110,32,110,101,118,101,114,32,109,97,116,99,104,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,117,110,115,101,116,46,32,73,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,99,105,114,99,117,109,102,108,101,120,32,104,97,115,32,97,110,32,101,110,116,105,114,101,108,121,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,32,40,115,101,101,32,98,101,108,111,119,41,46>>]},{p,[],[<<67,105,114,99,117,109,102,108,101,120,32,110,101,101,100,115,32,110,111,116,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,102,32,115,111,109,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,105,110,118,111,108,118,101,100,44,32,98,117,116,32,105,116,32,105,115,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,116,104,105,110,103,32,105,110,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,119,104,105,99,104,32,105,116,32,97,112,112,101,97,114,115,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,101,118,101,114,32,116,111,32,109,97,116,99,104,32,116,104,97,116,32,98,114,97,110,99,104,46,32,73,102,32,97,108,108,32,112,111,115,115,105,98,108,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,115,116,97,114,116,32,119,105,116,104,32,97,32,99,105,114,99,117,109,102,108,101,120,44,32,116,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,99,111,110,115,116,114,97,105,110,101,100,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,105,116,32,105,115,32,115,97,105,100,32,116,111,32,98,101,32,97,110,32,34,97,110,99,104,111,114,101,100,34,32,112,97,116,116,101,114,110,46,32,40,84,104,101,114,101,32,97,114,101,32,97,108,115,111,32,111,116,104,101,114,32,99,111,110,115,116,114,117,99,116,115,32,116,104,97,116,32,99,97,110,32,99,97,117,115,101,32,97,32,112,97,116,116,101,114,110,32,116,111,32,98,101,32,97,110,99,104,111,114,101,100,46,41>>]},{p,[],[<<84,104,101,32,100,111,108,108,97,114,32,99,104,97,114,97,99,116,101,114,32,105,115,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,32,111,110,108,121,32,105,102,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,111,114,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,40,98,121,32,100,101,102,97,117,108,116,41,46,32,78,111,116,105,99,101,32,104,111,119,101,118,101,114,32,116,104,97,116,32,105,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,110,101,119,108,105,110,101,46,32,68,111,108,108,97,114,32,110,101,101,100,115,32,110,111,116,32,116,111,32,98,101,32,116,104,101,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,102,32,115,111,109,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,105,110,118,111,108,118,101,100,44,32,98,117,116,32,105,116,32,105,115,32,116,111,32,98,101,32,116,104,101,32,108,97,115,116,32,105,116,101,109,32,105,110,32,97,110,121,32,98,114,97,110,99,104,32,105,110,32,119,104,105,99,104,32,105,116,32,97,112,112,101,97,114,115,46,32,68,111,108,108,97,114,32,104,97,115,32,110,111,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46>>]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,100,111,108,108,97,114,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,105,116,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,118,101,114,121,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]},<<32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46,32,84,104,105,115,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,92,90,32,97,115,115,101,114,116,105,111,110,46>>]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,99,104,97,110,103,101,100,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46,32,87,104,101,110,32,116,104,105,115,32,105,115,32,116,104,101,32,99,97,115,101,44,32,97,32,99,105,114,99,117,109,102,108,101,120,32,109,97,116,99,104,101,115,32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,105,110,116,101,114,110,97,108,32,110,101,119,108,105,110,101,115,32,97,110,100,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,73,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,97,102,116,101,114,32,97,32,110,101,119,108,105,110,101,32,116,104,97,116,32,101,110,100,115,32,116,104,101,32,115,116,114,105,110,103,46,32,65,32,100,111,108,108,97,114,32,109,97,116,99,104,101,115,32,98,101,102,111,114,101,32,97,110,121,32,110,101,119,108,105,110,101,115,32,105,110,32,116,104,101,32,115,116,114,105,110,103,44,32,97,110,100,32,97,116,32,116,104,101,32,118,101,114,121,32,101,110,100,44,32,119,104,101,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46,32,87,104,101,110,32,110,101,119,108,105,110,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,44,32,105,115,111,108,97,116,101,100,32,67,82,32,97,110,100,32,76,70,32,99,104,97,114,97,99,116,101,114,115,32,100,111,32,110,111,116,32,105,110,100,105,99,97,116,101,32,110,101,119,108,105,110,101,115,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,112,97,116,116,101,114,110,32,47,94,97,98,99,36,47,32,109,97,116,99,104,101,115,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,34,100,101,102,92,110,97,98,99,34,32,40,119,104,101,114,101,32,92,110,32,114,101,112,114,101,115,101,110,116,115,32,97,32,110,101,119,108,105,110,101,41,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,44,32,98,117,116,32,110,111,116,32,111,116,104,101,114,119,105,115,101,46,32,83,111,44,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,97,110,99,104,111,114,101,100,32,105,110,32,115,105,110,103,108,101,45,108,105,110,101,32,109,111,100,101,32,98,101,99,97,117,115,101,32,97,108,108,32,98,114,97,110,99,104,101,115,32,115,116,97,114,116,32,119,105,116,104,32,94,32,97,114,101,32,110,111,116,32,97,110,99,104,111,114,101,100,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,44,32,97,110,100,32,97,32,109,97,116,99,104,32,102,111,114,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,112,111,115,115,105,98,108,101,32,119,104,101,110,32,97,114,103,117,109,101,110,116,32>>,{em,[],[<<115,116,97,114,116,111,102,102,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,105,115,32,110,111,110,45,122,101,114,111,46,32,79,112,116,105,111,110,32>>,{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]},<<32,105,115,32,105,103,110,111,114,101,100,32,105,102,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,115,101,113,117,101,110,99,101,115,32,92,65,44,32,92,90,44,32,97,110,100,32,92,122,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,109,97,116,99,104,32,116,104,101,32,115,116,97,114,116,32,97,110,100,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,110,32,98,111,116,104,32,109,111,100,101,115,46,32,73,102,32,97,108,108,32,98,114,97,110,99,104,101,115,32,111,102,32,97,32,112,97,116,116,101,114,110,32,115,116,97,114,116,32,119,105,116,104,32,92,65,44,32,105,116,32,105,115,32,97,108,119,97,121,115,32,97,110,99,104,111,114,101,100,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,101,116,46>>]},{a,[{id,<<115,101,99,116,53>>}],[]},{h2,[],[<<70,117,108,108,32,83,116,111,112,32,40,80,101,114,105,111,100,44,32,68,111,116,41,32,97,110,100,32,92,78>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,32,100,111,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,101,120,99,101,112,116,32,40,98,121,32,100,101,102,97,117,108,116,41,32,97,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,115,105,103,110,105,102,105,101,115,32,116,104,101,32,101,110,100,32,111,102,32,97,32,108,105,110,101,46>>]},{p,[],[<<87,104,101,110,32,97,32,108,105,110,101,32,101,110,100,105,110,103,32,105,115,32,100,101,102,105,110,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,44,32,100,111,116,32,110,101,118,101,114,32,109,97,116,99,104,101,115,32,116,104,97,116,32,99,104,97,114,97,99,116,101,114,46,32,87,104,101,110,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,32,105,115,32,117,115,101,100,44,32,100,111,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,67,82,32,105,102,32,105,116,32,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,101,100,32,98,121,32,76,70,44,32,111,116,104,101,114,119,105,115,101,32,105,116,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,99,108,117,100,105,110,103,32,105,115,111,108,97,116,101,100,32,67,82,115,32,97,110,100,32,76,70,115,41,46,32,87,104,101,110,32,97,110,121,32,85,110,105,99,111,100,101,32,108,105,110,101,32,101,110,100,105,110,103,115,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,44,32,100,111,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,67,82,44,32,76,70,44,32,111,114,32,97,110,121,32,111,102,32,116,104,101,32,111,116,104,101,114,32,108,105,110,101,45,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,100,111,116,32,114,101,103,97,114,100,105,110,103,32,110,101,119,108,105,110,101,115,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,105,115,32,115,101,116,44,32,97,32,100,111,116,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,44,32,119,105,116,104,111,117,116,32,101,120,99,101,112,116,105,111,110,46,32,73,102,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,67,82,76,70,32,105,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,105,116,32,116,97,107,101,115,32,116,119,111,32,100,111,116,115,32,116,111,32,109,97,116,99,104,32,105,116,46>>]},{p,[],[<<84,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,100,111,116,32,105,115,32,101,110,116,105,114,101,108,121,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,116,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,99,105,114,99,117,109,102,108,101,120,32,97,110,100,32,100,111,108,108,97,114,44,32,116,104,101,32,111,110,108,121,32,114,101,108,97,116,105,111,110,115,104,105,112,32,105,115,32,116,104,97,116,32,98,111,116,104,32,105,110,118,111,108,118,101,32,110,101,119,108,105,110,101,115,46,32,68,111,116,32,104,97,115,32,110,111,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46>>]},{p,[],[<<84,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,78,32,98,101,104,97,118,101,115,32,108,105,107,101,32,97,32,100,111,116,44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,105,115,32,110,111,116,32,97,102,102,101,99,116,101,100,32,98,121,32,111,112,116,105,111,110,32>>,{code,[],[<<80,67,82,69,95,68,79,84,65,76,76>>]},<<46,32,84,104,97,116,32,105,115,44,32,105,116,32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,101,120,99,101,112,116,32,111,110,101,32,116,104,97,116,32,115,105,103,110,105,102,105,101,115,32,116,104,101,32,101,110,100,32,111,102,32,97,32,108,105,110,101,46,32,80,101,114,108,32,97,108,115,111,32,117,115,101,115,32,92,78,32,116,111,32,109,97,116,99,104,32,99,104,97,114,97,99,116,101,114,115,32,98,121,32,110,97,109,101,32,98,117,116,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,105,115,46>>]},{a,[{id,<<115,101,99,116,54>>}],[]},{h2,[],[<<77,97,116,99,104,105,110,103,32,97,32,83,105,110,103,108,101,32,68,97,116,97,32,85,110,105,116>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,67,32,109,97,116,99,104,101,115,32,97,110,121,32,100,97,116,97,32,117,110,105,116,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32,97,32,85,84,70,32,109,111,100,101,32,105,115,32,115,101,116,46,32,79,110,101,32,100,97,116,97,32,117,110,105,116,32,105,115,32,111,110,101,32,98,121,116,101,46,32,85,110,108,105,107,101,32,97,32,100,111,116,44,32,92,67,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,108,105,110,101,45,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,102,101,97,116,117,114,101,32,105,115,32,112,114,111,118,105,100,101,100,32,105,110,32,80,101,114,108,32,116,111,32,109,97,116,99,104,32,105,110,100,105,118,105,100,117,97,108,32,98,121,116,101,115,32,105,110,32,85,84,70,45,56,32,109,111,100,101,44,32,98,117,116,32,105,116,32,105,115,32,117,110,99,108,101,97,114,32,104,111,119,32,105,116,32,99,97,110,32,117,115,101,102,117,108,108,121,32,98,101,32,117,115,101,100,46,32,65,115,32,92,67,32,98,114,101,97,107,115,32,117,112,32,99,104,97,114,97,99,116,101,114,115,32,105,110,116,111,32,105,110,100,105,118,105,100,117,97,108,32,100,97,116,97,32,117,110,105,116,115,44,32,109,97,116,99,104,105,110,103,32,111,110,101,32,117,110,105,116,32,119,105,116,104,32,92,67,32,105,110,32,97,32,85,84,70,32,109,111,100,101,32,109,101,97,110,115,32,116,104,97,116,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,116,114,105,110,103,32,99,97,110,32,115,116,97,114,116,32,119,105,116,104,32,97,32,109,97,108,102,111,114,109,101,100,32,85,84,70,32,99,104,97,114,97,99,116,101,114,46,32,84,104,105,115,32,104,97,115,32,117,110,100,101,102,105,110,101,100,32,114,101,115,117,108,116,115,44,32,97,115,32,80,67,82,69,32,97,115,115,117,109,101,115,32,116,104,97,116,32,105,116,32,100,101,97,108,115,32,119,105,116,104,32,118,97,108,105,100,32,85,84,70,32,115,116,114,105,110,103,115,46>>]},{p,[],[<<80,67,82,69,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,92,67,32,116,111,32,97,112,112,101,97,114,32,105,110,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,40,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,41,32,105,110,32,97,32,85,84,70,32,109,111,100,101,44,32,97,115,32,116,104,105,115,32,119,111,117,108,100,32,109,97,107,101,32,105,116,32,105,109,112,111,115,115,105,98,108,101,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,108,111,111,107,98,101,104,105,110,100,46>>]},{p,[],[<<84,104,101,32,92,67,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,115,32,98,101,115,116,32,97,118,111,105,100,101,100,46,32,72,111,119,101,118,101,114,44,32,111,110,101,32,119,97,121,32,111,102,32,117,115,105,110,103,32,105,116,32,116,104,97,116,32,97,118,111,105,100,115,32,116,104,101,32,112,114,111,98,108,101,109,32,111,102,32,109,97,108,102,111,114,109,101,100,32,85,84,70,32,99,104,97,114,97,99,116,101,114,115,32,105,115,32,116,111,32,117,115,101,32,97,32,108,111,111,107,97,104,101,97,100,32,116,111,32,99,104,101,99,107,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,44,32,97,115,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,97,32,85,84,70,45,56,32,115,116,114,105,110,103,32,40,105,103,110,111,114,101,32,119,104,105,116,101,115,112,97,99,101,32,97,110,100,32,108,105,110,101,32,98,114,101,97,107,115,41,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<40,63,124,32,40,63,61,91,92,120,48,48,45,92,120,55,102,93,41,40,92,67,41,32,124,10,32,32,32,32,40,63,61,91,92,120,56,48,45,92,120,123,55,102,102,125,93,41,40,92,67,41,40,92,67,41,32,124,10,32,32,32,32,40,63,61,91,92,120,123,56,48,48,125,45,92,120,123,102,102,102,102,125,93,41,40,92,67,41,40,92,67,41,40,92,67,41,32,124,10,32,32,32,32,40,63,61,91,92,120,123,49,48,48,48,48,125,45,92,120,123,49,102,102,102,102,102,125,93,41,40,92,67,41,40,92,67,41,40,92,67,41,40,92,67,41,41>>]}]},{p,[],[<<65,32,103,114,111,117,112,32,116,104,97,116,32,115,116,97,114,116,115,32,119,105,116,104,32,40,63,124,32,114,101,115,101,116,115,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,110,117,109,98,101,114,115,32,105,110,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]},<<41,46,32,84,104,101,32,97,115,115,101,114,116,105,111,110,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,101,97,99,104,32,98,114,97,110,99,104,32,99,104,101,99,107,32,116,104,101,32,110,101,120,116,32,85,84,70,45,56,32,99,104,97,114,97,99,116,101,114,32,102,111,114,32,118,97,108,117,101,115,32,119,104,111,115,101,32,101,110,99,111,100,105,110,103,32,117,115,101,115,32,49,44,32,50,44,32,51,44,32,111,114,32,52,32,98,121,116,101,115,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,84,104,101,32,105,110,100,105,118,105,100,117,97,108,32,98,121,116,101,115,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,97,114,101,32,116,104,101,110,32,99,97,112,116,117,114,101,100,32,98,121,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,110,117,109,98,101,114,32,111,102,32,103,114,111,117,112,115,46>>]},{a,[{id,<<115,101,99,116,55>>}],[]},{h2,[],[<<83,113,117,97,114,101,32,66,114,97,99,107,101,116,115,32,97,110,100,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]},{p,[],[<<65,110,32,111,112,101,110,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,105,110,116,114,111,100,117,99,101,115,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,116,101,114,109,105,110,97,116,101,100,32,98,121,32,97,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,46,32,65,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,111,110,32,105,116,115,32,111,119,110,32,105,115,32,110,111,116,32,115,112,101,99,105,97,108,32,98,121,32,100,101,102,97,117,108,116,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<80,67,82,69,95,74,65,86,65,83,67,82,73,80,84,95,67,79,77,80,65,84>>]},<<32,105,115,32,115,101,116,44,32,97,32,108,111,110,101,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,99,97,117,115,101,115,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,46,32,73,102,32,97,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,105,115,32,114,101,113,117,105,114,101,100,32,97,115,32,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,99,108,97,115,115,44,32,105,116,32,105,115,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,99,108,97,115,115,32,40,97,102,116,101,114,32,97,110,32,105,110,105,116,105,97,108,32,99,105,114,99,117,109,102,108,101,120,44,32,105,102,32,112,114,101,115,101,110,116,41,32,111,114,32,101,115,99,97,112,101,100,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,46>>]},{p,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,73,110,32,97,32,85,84,70,32,109,111,100,101,44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,100,97,116,97,32,117,110,105,116,32,108,111,110,103,46,32,65,32,109,97,116,99,104,101,100,32,99,104,97,114,97,99,116,101,114,32,109,117,115,116,32,98,101,32,105,110,32,116,104,101,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,100,101,102,105,110,101,100,32,98,121,32,116,104,101,32,99,108,97,115,115,44,32,117,110,108,101,115,115,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,99,108,97,115,115,32,100,101,102,105,110,105,116,105,111,110,32,105,115,32,97,32,99,105,114,99,117,109,102,108,101,120,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,116,104,101,32,115,117,98,106,101,99,116,32,99,104,97,114,97,99,116,101,114,32,109,117,115,116,32,110,111,116,32,98,101,32,105,110,32,116,104,101,32,115,101,116,32,100,101,102,105,110,101,100,32,98,121,32,116,104,101,32,99,108,97,115,115,46,32,73,102,32,97,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,114,101,113,117,105,114,101,100,32,97,115,32,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,99,108,97,115,115,44,32,101,110,115,117,114,101,32,116,104,97,116,32,105,116,32,105,115,32,110,111,116,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,101,115,99,97,112,101,32,105,116,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,46>>]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32>>,{code,[],[<<91,97,101,105,111,117,93>>]},<<32,109,97,116,99,104,101,115,32,97,110,121,32,108,111,119,101,114,99,97,115,101,32,118,111,119,101,108,44,32,119,104,105,108,101,32>>,{code,[],[<<91,94,97,101,105,111,117,93>>]},<<32,109,97,116,99,104,101,115,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,110,111,116,32,97,32,108,111,119,101,114,99,97,115,101,32,118,111,119,101,108,46,32,78,111,116,105,99,101,32,116,104,97,116,32,97,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,106,117,115,116,32,97,32,99,111,110,118,101,110,105,101,110,116,32,110,111,116,97,116,105,111,110,32,102,111,114,32,115,112,101,99,105,102,121,105,110,103,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,105,110,32,116,104,101,32,99,108,97,115,115,32,98,121,32,101,110,117,109,101,114,97,116,105,110,103,32,116,104,111,115,101,32,116,104,97,116,32,97,114,101,32,110,111,116,46,32,65,32,99,108,97,115,115,32,116,104,97,116,32,115,116,97,114,116,115,32,119,105,116,104,32,97,32,99,105,114,99,117,109,102,108,101,120,32,105,115,32,110,111,116,32,97,110,32,97,115,115,101,114,116,105,111,110,59,32,105,116,32,115,116,105,108,108,32,99,111,110,115,117,109,101,115,32,97,32,99,104,97,114,97,99,116,101,114,32,102,114,111,109,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,105,116,32,102,97,105,108,115,32,105,102,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,105,110,116,101,114,32,105,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,46>>]},{p,[],[<<73,110,32,85,84,70,45,56,32,109,111,100,101,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,32,40,48,120,102,102,102,102,41,32,99,97,110,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,32,99,108,97,115,115,32,97,115,32,97,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,32,111,102,32,100,97,116,97,32,117,110,105,116,115,44,32,111,114,32,98,121,32,117,115,105,110,103,32,116,104,101,32,92,120,123,32,101,115,99,97,112,105,110,103,32,109,101,99,104,97,110,105,115,109,46>>]},{p,[],[<<87,104,101,110,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,115,101,116,44,32,97,110,121,32,108,101,116,116,101,114,115,32,105,110,32,97,32,99,108,97,115,115,32,114,101,112,114,101,115,101,110,116,32,98,111,116,104,32,116,104,101,105,114,32,117,112,112,101,114,99,97,115,101,32,97,110,100,32,108,111,119,101,114,99,97,115,101,32,118,101,114,115,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,32,99,97,115,101,108,101,115,115,32>>,{code,[],[<<91,97,101,105,111,117,93>>]},<<32,109,97,116,99,104,101,115,32,34,65,34,32,97,110,100,32,34,97,34,44,32,97,110,100,32,97,32,99,97,115,101,108,101,115,115,32>>,{code,[],[<<91,94,97,101,105,111,117,93>>]},<<32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,34,65,34,44,32,98,117,116,32,97,32,99,97,115,101,102,117,108,32,118,101,114,115,105,111,110,32,119,111,117,108,100,46,32,73,110,32,97,32,85,84,70,32,109,111,100,101,44,32,80,67,82,69,32,97,108,119,97,121,115,32,117,110,100,101,114,115,116,97,110,100,115,32,116,104,101,32,99,111,110,99,101,112,116,32,111,102,32,99,97,115,101,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,118,97,108,117,101,115,32,97,114,101,32,60,32,50,53,54,44,32,115,111,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,97,108,119,97,121,115,32,112,111,115,115,105,98,108,101,46,32,70,111,114,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,104,105,103,104,101,114,32,118,97,108,117,101,115,44,32,116,104,101,32,99,111,110,99,101,112,116,32,111,102,32,99,97,115,101,32,105,115,32,115,117,112,112,111,114,116,101,100,32,111,110,108,121,32,105,102,32,80,67,82,69,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,117,115,101,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,110,32,97,32,85,84,70,32,109,111,100,101,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,62,61,44,32,101,110,115,117,114,101,32,116,104,97,116,32,80,67,82,69,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,32,97,110,100,32,119,105,116,104,32,85,84,70,32,115,117,112,112,111,114,116,46>>]},{p,[],[<<67,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,99,97,110,32,105,110,100,105,99,97,116,101,32,108,105,110,101,32,98,114,101,97,107,115,32,97,114,101,32,110,101,118,101,114,32,116,114,101,97,116,101,100,32,105,110,32,97,110,121,32,115,112,101,99,105,97,108,32,119,97,121,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,44,32,119,104,97,116,101,118,101,114,32,108,105,110,101,45,101,110,100,105,110,103,32,115,101,113,117,101,110,99,101,32,105,115,32,105,110,32,117,115,101,44,32,97,110,100,32,119,104,97,116,101,118,101,114,32,115,101,116,116,105,110,103,32,111,102,32,111,112,116,105,111,110,115,32>>,{code,[],[<<80,67,82,69,95,68,79,84,65,76,76>>]},<<32,97,110,100,32>>,{code,[],[<<80,67,82,69,95,77,85,76,84,73,76,73,78,69>>]},<<32,105,115,32,117,115,101,100,46,32,65,32,99,108,97,115,115,32,115,117,99,104,32,97,115,32,91,94,97,93,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,111,110,101,32,111,102,32,116,104,101,115,101,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,109,105,110,117,115,32,40,104,121,112,104,101,110,41,32,99,104,97,114,97,99,116,101,114,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,115,112,101,99,105,102,121,32,97,32,114,97,110,103,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,100,45,109,93,32,109,97,116,99,104,101,115,32,97,110,121,32,108,101,116,116,101,114,32,98,101,116,119,101,101,110,32,100,32,97,110,100,32,109,44,32,105,110,99,108,117,115,105,118,101,46,32,73,102,32,97,32,109,105,110,117,115,32,99,104,97,114,97,99,116,101,114,32,105,115,32,114,101,113,117,105,114,101,100,32,105,110,32,97,32,99,108,97,115,115,44,32,105,116,32,109,117,115,116,32,98,101,32,101,115,99,97,112,101,100,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,32,111,114,32,97,112,112,101,97,114,32,105,110,32,97,32,112,111,115,105,116,105,111,110,32,119,104,101,114,101,32,105,116,32,99,97,110,110,111,116,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,105,110,100,105,99,97,116,105,110,103,32,97,32,114,97,110,103,101,44,32,116,121,112,105,99,97,108,108,121,32,97,115,32,116,104,101,32,102,105,114,115,116,32,111,114,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,99,108,97,115,115,44,32,111,114,32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,97,32,114,97,110,103,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,98,45,100,45,122,93,32,109,97,116,99,104,101,115,32,108,101,116,116,101,114,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,98,32,116,111,32,100,44,32,97,32,104,121,112,104,101,110,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,122,46>>]},{p,[],[<<84,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,32,34,93,34,32,99,97,110,110,111,116,32,98,101,32,116,104,101,32,101,110,100,32,99,104,97,114,97,99,116,101,114,32,111,102,32,97,32,114,97,110,103,101,46,32,65,32,112,97,116,116,101,114,110,32,115,117,99,104,32,97,115,32,91,87,45,93,52,54,93,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,99,108,97,115,115,32,111,102,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,32,40,34,87,34,32,97,110,100,32,34,45,34,41,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,32,34,52,54,93,34,44,32,115,111,32,105,116,32,119,111,117,108,100,32,109,97,116,99,104,32,34,87,52,54,93,34,32,111,114,32,34,45,52,54,93,34,46,32,72,111,119,101,118,101,114,44,32,105,102,32,34,93,34,32,105,115,32,101,115,99,97,112,101,100,32,119,105,116,104,32,97,32,98,97,99,107,115,108,97,115,104,44,32,105,116,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,116,104,101,32,101,110,100,32,111,102,32,114,97,110,103,101,44,32,115,111,32,91,87,45,92,93,52,54,93,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,99,108,97,115,115,32,99,111,110,116,97,105,110,105,110,103,32,97,32,114,97,110,103,101,32,102,111,108,108,111,119,101,100,32,98,121,32,116,119,111,32,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,111,99,116,97,108,32,111,114,32,104,101,120,97,100,101,99,105,109,97,108,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,111,102,32,34,93,34,32,99,97,110,32,97,108,115,111,32,98,101,32,117,115,101,100,32,116,111,32,101,110,100,32,97,32,114,97,110,103,101,46>>]},{p,[],[<<65,110,32,101,114,114,111,114,32,105,115,32,103,101,110,101,114,97,116,101,100,32,105,102,32,97,32,80,79,83,73,88,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,40,115,101,101,32,98,101,108,111,119,41,32,111,114,32,97,110,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,111,116,104,101,114,32,116,104,97,110,32,111,110,101,32,116,104,97,116,32,100,101,102,105,110,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,97,112,112,101,97,114,115,32,97,116,32,97,32,112,111,105,110,116,32,119,104,101,114,101,32,97,32,114,97,110,103,101,32,101,110,100,105,110,103,32,99,104,97,114,97,99,116,101,114,32,105,115,32,101,120,112,101,99,116,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,122,45,92,120,102,102,93,32,105,115,32,118,97,108,105,100,44,32,98,117,116,32,91,65,45,92,100,93,32,97,110,100,32,91,65,45,91,58,100,105,103,105,116,58,93,93,32,97,114,101,32,110,111,116,46>>]},{p,[],[<<82,97,110,103,101,115,32,111,112,101,114,97,116,101,32,105,110,32,116,104,101,32,99,111,108,108,97,116,105,110,103,32,115,101,113,117,101,110,99,101,32,111,102,32,99,104,97,114,97,99,116,101,114,32,118,97,108,117,101,115,46,32,84,104,101,121,32,99,97,110,32,97,108,115,111,32,98,101,32,117,115,101,100,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,115,112,101,99,105,102,105,101,100,32,110,117,109,101,114,105,99,97,108,108,121,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,91,92,48,48,48,45,92,48,51,55,93,46,32,82,97,110,103,101,115,32,99,97,110,32,105,110,99,108,117,100,101,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,118,97,108,105,100,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,109,111,100,101,46>>]},{p,[],[<<73,102,32,97,32,114,97,110,103,101,32,116,104,97,116,32,105,110,99,108,117,100,101,115,32,108,101,116,116,101,114,115,32,105,115,32,117,115,101,100,32,119,104,101,110,32,99,97,115,101,108,101,115,115,32,109,97,116,99,104,105,110,103,32,105,115,32,115,101,116,44,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,108,101,116,116,101,114,115,32,105,110,32,101,105,116,104,101,114,32,99,97,115,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,87,45,99,93,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,91,93,91,92,92,94,95,96,119,120,121,122,97,98,99,93,44,32,109,97,116,99,104,101,100,32,99,97,115,101,108,101,115,115,108,121,46,32,73,110,32,97,32,110,111,110,45,85,84,70,32,109,111,100,101,44,32,105,102,32,99,104,97,114,97,99,116,101,114,32,116,97,98,108,101,115,32,102,111,114,32,97,32,70,114,101,110,99,104,32,108,111,99,97,108,101,32,97,114,101,32,105,110,32,117,115,101,44,32,91,92,120,99,56,45,92,120,99,98,93,32,109,97,116,99,104,101,115,32,97,99,99,101,110,116,101,100,32,69,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,98,111,116,104,32,99,97,115,101,115,46,32,73,110,32,85,84,70,32,109,111,100,101,115,44,32,80,67,82,69,32,115,117,112,112,111,114,116,115,32,116,104,101,32,99,111,110,99,101,112,116,32,111,102,32,99,97,115,101,32,102,111,114,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,32,111,110,108,121,32,119,104,101,110,32,105,116,32,105,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,115,117,112,112,111,114,116,46>>]},{p,[],[<<84,104,101,32,99,104,97,114,97,99,116,101,114,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,92,100,44,32,92,68,44,32,92,104,44,32,92,72,44,32,92,112,44,32,92,80,44,32,92,115,44,32,92,83,44,32,92,118,44,32,92,86,44,32,92,119,44,32,97,110,100,32,92,87,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,110,100,32,97,100,100,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,116,104,101,121,32,109,97,116,99,104,32,116,111,32,116,104,101,32,99,108,97,115,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,91,92,100,65,66,67,68,69,70,93,32,109,97,116,99,104,101,115,32,97,110,121,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,46,32,73,110,32,85,84,70,32,109,111,100,101,115,44,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,97,102,102,101,99,116,115,32,116,104,101,32,109,101,97,110,105,110,103,115,32,111,102,32,92,100,44,32,92,115,44,32,92,119,32,97,110,100,32,116,104,101,105,114,32,117,112,112,101,114,99,97,115,101,32,112,97,114,116,110,101,114,115,44,32,106,117,115,116,32,97,115,32,105,116,32,100,111,101,115,32,119,104,101,110,32,116,104,101,121,32,97,112,112,101,97,114,32,111,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,103,101,110,101,114,105,99,95,99,104,97,114,97,99,116,101,114,95,116,121,112,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<71,101,110,101,114,105,99,32,67,104,97,114,97,99,116,101,114,32,84,121,112,101,115>>]},<<32,101,97,114,108,105,101,114,46,32,84,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,98,32,104,97,115,32,97,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,59,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,98,97,99,107,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,115,101,113,117,101,110,99,101,115,32,92,66,44,32,92,78,44,32,92,82,44,32,97,110,100,32,92,88,32,97,114,101,32,110,111,116,32,115,112,101,99,105,97,108,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,76,105,107,101,32,97,110,121,32,111,116,104,101,114,32,117,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,44,32,116,104,101,121,32,97,114,101,32,116,114,101,97,116,101,100,32,97,115,32,116,104,101,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,115,32,34,66,34,44,32,34,78,34,44,32,34,82,34,44,32,97,110,100,32,34,88,34,46>>]},{p,[],[<<65,32,99,105,114,99,117,109,102,108,101,120,32,99,97,110,32,99,111,110,118,101,110,105,101,110,116,108,121,32,98,101,32,117,115,101,100,32,119,105,116,104,32,116,104,101,32,117,112,112,101,114,99,97,115,101,32,99,104,97,114,97,99,116,101,114,32,116,121,112,101,115,32,116,111,32,115,112,101,99,105,102,121,32,97,32,109,111,114,101,32,114,101,115,116,114,105,99,116,101,100,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,110,32,116,104,101,32,109,97,116,99,104,105,110,103,32,108,111,119,101,114,99,97,115,101,32,116,121,112,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,108,97,115,115,32,91,94,92,87,95,93,32,109,97,116,99,104,101,115,32,97,110,121,32,108,101,116,116,101,114,32,111,114,32,100,105,103,105,116,44,32,98,117,116,32,110,111,116,32,117,110,100,101,114,115,99,111,114,101,44,32,119,104,105,108,101,32,91,92,119,93,32,105,110,99,108,117,100,101,115,32,117,110,100,101,114,115,99,111,114,101,46,32,65,32,112,111,115,105,116,105,118,101,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,105,115,32,116,111,32,98,101,32,114,101,97,100,32,97,115,32,34,115,111,109,101,116,104,105,110,103,32,79,82,32,115,111,109,101,116,104,105,110,103,32,79,82,32,46,46,46,34,32,97,110,100,32,97,32,110,101,103,97,116,105,118,101,32,99,108,97,115,115,32,97,115,32,34,78,79,84,32,115,111,109,101,116,104,105,110,103,32,65,78,68,32,78,79,84,32,115,111,109,101,116,104,105,110,103,32,65,78,68,32,78,79,84,32,46,46,46,34,46>>]},{p,[],[<<79,110,108,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,101,116,97,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,32,105,110,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,58>>]},{ul,[],[{li,[],[<<66,97,99,107,115,108,97,115,104>>]},{li,[],[<<72,121,112,104,101,110,32,40,111,110,108,121,32,119,104,101,114,101,32,105,116,32,99,97,110,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,115,112,101,99,105,102,121,105,110,103,32,97,32,114,97,110,103,101,41>>]},{li,[],[<<67,105,114,99,117,109,102,108,101,120,32,40,111,110,108,121,32,97,116,32,116,104,101,32,115,116,97,114,116,41>>]},{li,[],[<<79,112,101,110,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,32,40,111,110,108,121,32,119,104,101,110,32,105,116,32,99,97,110,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,105,110,116,114,111,100,117,99,105,110,103,32,97,32,80,111,115,105,120,32,99,108,97,115,115,32,110,97,109,101,44,32,111,114,32,102,111,114,32,97,32,115,112,101,99,105,97,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,102,101,97,116,117,114,101,59,32,115,101,101,32,116,104,101,32,110,101,120,116,32,116,119,111,32,115,101,99,116,105,111,110,115,41>>]},{li,[],[<<84,101,114,109,105,110,97,116,105,110,103,32,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116>>]}]},{p,[],[<<72,111,119,101,118,101,114,44,32,101,115,99,97,112,105,110,103,32,111,116,104,101,114,32,110,111,110,45,97,108,112,104,97,110,117,109,101,114,105,99,32,99,104,97,114,97,99,116,101,114,115,32,100,111,101,115,32,110,111,32,104,97,114,109,46>>]},{a,[{id,<<115,101,99,116,56>>}],[]},{h2,[],[<<80,111,115,105,120,32,67,104,97,114,97,99,116,101,114,32,67,108,97,115,115,101,115>>]},{p,[],[<<80,101,114,108,32,115,117,112,112,111,114,116,115,32,116,104,101,32,80,111,115,105,120,32,110,111,116,97,116,105,111,110,32,102,111,114,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,84,104,105,115,32,117,115,101,115,32,110,97,109,101,115,32,101,110,99,108,111,115,101,100,32,98,121,32,91,58,32,97,110,100,32,58,93,32,119,105,116,104,105,110,32,116,104,101,32,101,110,99,108,111,115,105,110,103,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,46,32,80,67,82,69,32,97,108,115,111,32,115,117,112,112,111,114,116,115,32,116,104,105,115,32,110,111,116,97,116,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,48,34,44,32,34,49,34,44,32,97,110,121,32,97,108,112,104,97,98,101,116,105,99,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,34,37,34,58>>]},{pre,[],[{code,[],[<<91,48,49,91,58,97,108,112,104,97,58,93,37,93>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,115,117,112,112,111,114,116,101,100,32,99,108,97,115,115,32,110,97,109,101,115,58>>]},{dl,[],[{dt,[],[<<97,108,110,117,109>>]},{dd,[],[<<76,101,116,116,101,114,115,32,97,110,100,32,100,105,103,105,116,115>>]},{dt,[],[<<97,108,112,104,97>>]},{dd,[],[<<76,101,116,116,101,114,115>>]},{dt,[],[<<98,108,97,110,107>>]},{dd,[],[<<83,112,97,99,101,32,111,114,32,116,97,98,32,111,110,108,121>>]},{dt,[],[<<99,110,116,114,108>>]},{dd,[],[<<67,111,110,116,114,111,108,32,99,104,97,114,97,99,116,101,114,115>>]},{dt,[],[<<100,105,103,105,116>>]},{dd,[],[<<68,101,99,105,109,97,108,32,100,105,103,105,116,115,32,40,115,97,109,101,32,97,115,32,92,100,41>>]},{dt,[],[<<103,114,97,112,104>>]},{dd,[],[<<80,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,101,120,99,108,117,100,105,110,103,32,115,112,97,99,101>>]},{dt,[],[<<108,111,119,101,114>>]},{dd,[],[<<76,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,115>>]},{dt,[],[<<112,114,105,110,116>>]},{dd,[],[<<80,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,105,110,99,108,117,100,105,110,103,32,115,112,97,99,101>>]},{dt,[],[<<112,117,110,99,116>>]},{dd,[],[<<80,114,105,110,116,105,110,103,32,99,104,97,114,97,99,116,101,114,115,44,32,101,120,99,108,117,100,105,110,103,32,108,101,116,116,101,114,115,44,32,100,105,103,105,116,115,44,32,97,110,100,32,115,112,97,99,101>>]},{dt,[],[<<115,112,97,99,101>>]},{dd,[],[<<87,104,105,116,101,115,112,97,99,101,32,40,116,104,101,32,115,97,109,101,32,97,115,32,92,115,32,102,114,111,109,32,80,67,82,69,32,56,46,51,52,41>>]},{dt,[],[<<117,112,112,101,114>>]},{dd,[],[<<85,112,112,101,114,99,97,115,101,32,108,101,116,116,101,114,115>>]},{dt,[],[<<119,111,114,100>>]},{dd,[],[<<34,87,111,114,100,34,32,99,104,97,114,97,99,116,101,114,115,32,40,115,97,109,101,32,97,115,32,92,119,41>>]},{dt,[],[<<120,100,105,103,105,116>>]},{dd,[],[<<72,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,115>>]}]},{p,[],[<<84,104,101,114,101,32,105,115,32,97,110,111,116,104,101,114,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32>>,{code,[],[<<97,115,99,105,105>>]},<<44,32,116,104,97,116,32,101,114,114,111,110,101,111,117,115,108,121,32,109,97,116,99,104,101,115,32,76,97,116,105,110,45,49,32,99,104,97,114,97,99,116,101,114,115,32,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,48,45,49,50,55,32,114,97,110,103,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,80,79,83,73,88,46,32,84,104,105,115,32,99,97,110,110,111,116,32,98,101,32,102,105,120,101,100,32,119,105,116,104,111,117,116,32,97,108,116,101,114,105,110,103,32,116,104,101,32,98,101,104,97,118,105,111,117,114,32,111,102,32,111,116,104,101,114,32,99,108,97,115,115,101,115,44,32,115,111,32,119,101,32,114,101,99,111,109,109,101,110,100,32,109,97,116,99,104,105,110,103,32,116,104,101,32,114,97,110,103,101,32,119,105,116,104,32>>,{code,[],[<<91,92,92,48,45,92,120,55,102,93>>]},<<32,105,110,115,116,101,97,100,46>>]},{p,[],[<<84,104,101,32,100,101,102,97,117,108,116,32,34,115,112,97,99,101,34,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,72,84,32,40,57,41,44,32,76,70,32,40,49,48,41,44,32,86,84,32,40,49,49,41,44,32,70,70,32,40,49,50,41,44,32,67,82,32,40,49,51,41,44,32,97,110,100,32,115,112,97,99,101,32,40,51,50,41,46,32,73,102,32,108,111,99,97,108,101,45,115,112,101,99,105,102,105,99,32,109,97,116,99,104,105,110,103,32,105,115,32,116,97,107,105,110,103,32,112,108,97,99,101,44,32,116,104,101,32,108,105,115,116,32,111,102,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,109,97,121,32,98,101,32,100,105,102,102,101,114,101,110,116,59,32,116,104,101,114,101,32,109,97,121,32,98,101,32,102,101,119,101,114,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,109,46,32,34,83,112,97,99,101,34,32,117,115,101,100,32,116,111,32,98,101,32,100,105,102,102,101,114,101,110,116,32,116,111,32,92,115,44,32,119,104,105,99,104,32,100,105,100,32,110,111,116,32,105,110,99,108,117,100,101,32,86,84,44,32,102,111,114,32,80,101,114,108,32,99,111,109,112,97,116,105,98,105,108,105,116,121,46,32,72,111,119,101,118,101,114,44,32,80,101,114,108,32,99,104,97,110,103,101,100,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,44,32,97,110,100,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,46,32,34,83,112,97,99,101,34,32,97,110,100,32,92,115,32,110,111,119,32,109,97,116,99,104,32,116,104,101,32,115,97,109,101,32,115,101,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<84,104,101,32,110,97,109,101,32,34,119,111,114,100,34,32,105,115,32,97,32,80,101,114,108,32,101,120,116,101,110,115,105,111,110,44,32,97,110,100,32,34,98,108,97,110,107,34,32,105,115,32,97,32,71,78,85,32,101,120,116,101,110,115,105,111,110,32,102,114,111,109,32,80,101,114,108,32,53,46,56,46,32,65,110,111,116,104,101,114,32,80,101,114,108,32,101,120,116,101,110,115,105,111,110,32,105,115,32,110,101,103,97,116,105,111,110,44,32,119,104,105,99,104,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,94,32,99,104,97,114,97,99,116,101,114,32,97,102,116,101,114,32,116,104,101,32,99,111,108,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,49,34,44,32,34,50,34,44,32,111,114,32,97,110,121,32,110,111,110,45,100,105,103,105,116,58>>]},{pre,[],[{code,[],[<<91,49,50,91,58,94,100,105,103,105,116,58,93,93>>]}]},{p,[],[<<80,67,82,69,32,40,97,110,100,32,80,101,114,108,41,32,97,108,115,111,32,114,101,99,111,103,110,105,122,101,32,116,104,101,32,80,111,115,105,120,32,115,121,110,116,97,120,32,91,46,99,104,46,93,32,97,110,100,32,91,61,99,104,61,93,32,119,104,101,114,101,32,34,99,104,34,32,105,115,32,97,32,34,99,111,108,108,97,116,105,110,103,32,101,108,101,109,101,110,116,34,44,32,98,117,116,32,116,104,101,115,101,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,44,32,97,110,100,32,97,110,32,101,114,114,111,114,32,105,115,32,103,105,118,101,110,32,105,102,32,116,104,101,121,32,97,114,101,32,101,110,99,111,117,110,116,101,114,101,100,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,118,97,108,117,101,115,32,62,32,50,53,53,32,100,111,32,110,111,116,32,109,97,116,99,104,32,97,110,121,32,111,102,32,116,104,101,32,80,111,115,105,120,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,101,115,46,32,72,111,119,101,118,101,114,44,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<80,67,82,69,95,85,67,80>>]},<<32,105,115,32,112,97,115,115,101,100,32,116,111,32>>,{code,[],[<<112,99,114,101,95,99,111,109,112,105,108,101,40,41>>]},<<44,32,115,111,109,101,32,111,102,32,116,104,101,32,99,108,97,115,115,101,115,32,97,114,101,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,117,115,101,100,46,32,84,104,105,115,32,105,115,32,97,99,104,105,101,118,101,100,32,98,121,32,114,101,112,108,97,99,105,110,103,32,99,101,114,116,97,105,110,32,80,111,115,105,120,32,99,108,97,115,115,101,115,32,98,121,32,111,116,104,101,114,32,115,101,113,117,101,110,99,101,115,44,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<91,58,97,108,110,117,109,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,88,97,110,125>>]}]},{dt,[],[<<91,58,97,108,112,104,97,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,76,125>>]}]},{dt,[],[<<91,58,98,108,97,110,107,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,104>>]}]},{dt,[],[<<91,58,100,105,103,105,116,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,78,100,125>>]}]},{dt,[],[<<91,58,108,111,119,101,114,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,76,108,125>>]}]},{dt,[],[<<91,58,115,112,97,99,101,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,88,112,115,125>>]}]},{dt,[],[<<91,58,117,112,112,101,114,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,76,117,125>>]}]},{dt,[],[<<91,58,119,111,114,100,58,93>>]},{dd,[],[<<66,101,99,111,109,101,115,32>>,{em,[],[<<92,112,123,88,119,100,125>>]}]}]},{p,[],[<<78,101,103,97,116,101,100,32,118,101,114,115,105,111,110,115,44,32,115,117,99,104,32,97,115,32,91,58,94,97,108,112,104,97,58,93,44,32,117,115,101,32,92,80,32,105,110,115,116,101,97,100,32,111,102,32,92,112,46,32,84,104,114,101,101,32,111,116,104,101,114,32,80,79,83,73,88,32,99,108,97,115,115,101,115,32,97,114,101,32,104,97,110,100,108,101,100,32,115,112,101,99,105,97,108,108,121,32,105,110,32,85,67,80,32,109,111,100,101,58>>]},{dl,[],[{dt,[],[<<91,58,103,114,97,112,104,58,93>>]},{dd,[],[{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,103,108,121,112,104,115,32,116,104,97,116,32,109,97,114,107,32,116,104,101,32,112,97,103,101,32,119,104,101,110,32,112,114,105,110,116,101,100,46,32,73,110,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,116,101,114,109,115,44,32,105,116,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,76,44,32,77,44,32,78,44,32,80,44,32,83,44,32,111,114,32,67,102,32,112,114,111,112,101,114,116,105,101,115,44,32,101,120,99,101,112,116,32,102,111,114,58>>]},{dl,[],[{dt,[],[<<85,43,48,54,49,67>>]},{dd,[],[{p,[],[<<65,114,97,98,105,99,32,76,101,116,116,101,114,32,77,97,114,107>>]}]},{dt,[],[<<85,43,49,56,48,69>>]},{dd,[],[{p,[],[<<77,111,110,103,111,108,105,97,110,32,86,111,119,101,108,32,83,101,112,97,114,97,116,111,114>>]}]},{dt,[],[<<85,43,50,48,54,54,32,45,32,85,43,50,48,54,57>>]},{dd,[],[{p,[],[<<86,97,114,105,111,117,115,32,34,105,115,111,108,97,116,101,34,115>>]}]}]}]},{dt,[],[<<91,58,112,114,105,110,116,58,93>>]},{dd,[],[{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,116,104,101,32,115,97,109,101,32,99,104,97,114,97,99,116,101,114,115,32,97,115,32,91,58,103,114,97,112,104,58,93,32,112,108,117,115,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,99,111,110,116,114,111,108,115,44,32,116,104,97,116,32,105,115,44,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,116,104,101,32,90,115,32,112,114,111,112,101,114,116,121,46>>]}]},{dt,[],[<<91,58,112,117,110,99,116,58,93>>]},{dd,[],[{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,104,97,118,101,32,116,104,101,32,85,110,105,99,111,100,101,32,80,32,40,112,117,110,99,116,117,97,116,105,111,110,41,32,112,114,111,112,101,114,116,121,44,32,112,108,117,115,32,116,104,111,115,101,32,99,104,97,114,97,99,116,101,114,115,32,119,104,111,115,101,32,99,111,100,101,32,112,111,105,110,116,115,32,97,114,101,32,108,101,115,115,32,116,104,97,110,32,49,50,56,32,116,104,97,116,32,104,97,118,101,32,116,104,101,32,83,32,40,83,121,109,98,111,108,41,32,112,114,111,112,101,114,116,121,46>>]}]}]},{p,[],[<<84,104,101,32,111,116,104,101,114,32,80,79,83,73,88,32,99,108,97,115,115,101,115,32,97,114,101,32,117,110,99,104,97,110,103,101,100,44,32,97,110,100,32,109,97,116,99,104,32,111,110,108,121,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,99,111,100,101,32,112,111,105,110,116,115,32,108,101,115,115,32,116,104,97,110,32,49,50,56,46>>]},{p,[],[{em,[],[<<67,111,109,112,97,116,105,98,105,108,105,116,121,32,70,101,97,116,117,114,101,32,102,111,114,32,87,111,114,100,32,66,111,117,110,100,97,114,105,101,115>>]}]},{p,[],[<<73,110,32,116,104,101,32,80,79,83,73,88,46,50,32,99,111,109,112,108,105,97,110,116,32,108,105,98,114,97,114,121,32,116,104,97,116,32,119,97,115,32,105,110,99,108,117,100,101,100,32,105,110,32,52,46,52,66,83,68,32,85,110,105,120,44,32,116,104,101,32,117,103,108,121,32,115,121,110,116,97,120,32,91,91,58,60,58,93,93,32,97,110,100,32,91,91,58,62,58,93,93,32,105,115,32,117,115,101,100,32,102,111,114,32,109,97,116,99,104,105,110,103,32,34,115,116,97,114,116,32,111,102,32,119,111,114,100,34,32,97,110,100,32,34,101,110,100,32,111,102,32,119,111,114,100,34,46,32,80,67,82,69,32,116,114,101,97,116,115,32,116,104,101,115,101,32,105,116,101,109,115,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<91,91,58,60,58,93,93>>]},{dd,[],[{p,[],[<<105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,92,98,40,63,61,92,119,41>>]}]},{dt,[],[<<91,91,58,62,58,93,93>>]},{dd,[],[{p,[],[<<105,115,32,99,111,110,118,101,114,116,101,100,32,116,111,32,92,98,40,63,60,61,92,119,41>>]}]}]},{p,[],[<<79,110,108,121,32,116,104,101,115,101,32,101,120,97,99,116,32,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,115,32,97,114,101,32,114,101,99,111,103,110,105,122,101,100,46,32,65,32,115,101,113,117,101,110,99,101,32,115,117,99,104,32,97,115,32,91,97,91,58,60,58,93,98,93,32,112,114,111,118,111,107,101,115,32,101,114,114,111,114,32,102,111,114,32,97,110,32,117,110,114,101,99,111,103,110,105,122,101,100,32,80,79,83,73,88,32,99,108,97,115,115,32,110,97,109,101,46,32,84,104,105,115,32,115,117,112,112,111,114,116,32,105,115,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,80,101,114,108,46,32,73,116,32,105,115,32,112,114,111,118,105,100,101,100,32,116,111,32,104,101,108,112,32,109,105,103,114,97,116,105,111,110,115,32,102,114,111,109,32,111,116,104,101,114,32,101,110,118,105,114,111,110,109,101,110,116,115,44,32,97,110,100,32,105,115,32,98,101,115,116,32,110,111,116,32,117,115,101,100,32,105,110,32,97,110,121,32,110,101,119,32,112,97,116,116,101,114,110,115,46,32,78,111,116,101,32,116,104,97,116,32,92,98,32,109,97,116,99,104,101,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,97,110,100,32,116,104,101,32,101,110,100,32,111,102,32,97,32,119,111,114,100,32,40,115,101,101,32,34,83,105,109,112,108,101,32,97,115,115,101,114,116,105,111,110,115,34,32,97,98,111,118,101,41,44,32,97,110,100,32,105,110,32,97,32,80,101,114,108,45,115,116,121,108,101,32,112,97,116,116,101,114,110,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,111,114,32,102,111,108,108,111,119,105,110,103,32,99,104,97,114,97,99,116,101,114,32,110,111,114,109,97,108,108,121,32,115,104,111,119,115,32,119,104,105,99,104,32,105,115,32,119,97,110,116,101,100,44,32,119,105,116,104,111,117,116,32,116,104,101,32,110,101,101,100,32,102,111,114,32,116,104,101,32,97,115,115,101,114,116,105,111,110,115,32,116,104,97,116,32,97,114,101,32,117,115,101,100,32,97,98,111,118,101,32,105,110,32,111,114,100,101,114,32,116,111,32,103,105,118,101,32,101,120,97,99,116,108,121,32,116,104,101,32,80,79,83,73,88,32,98,101,104,97,118,105,111,117,114,46>>]},{a,[{id,<<115,101,99,116,57>>}],[]},{h2,[],[<<86,101,114,116,105,99,97,108,32,66,97,114>>]},{p,[],[<<86,101,114,116,105,99,97,108,32,98,97,114,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,117,115,101,100,32,116,111,32,115,101,112,97,114,97,116,101,32,97,108,116,101,114,110,97,116,105,118,101,32,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,101,105,116,104,101,114,32,34,103,105,108,98,101,114,116,34,32,111,114,32,34,115,117,108,108,105,118,97,110,34,58>>]},{pre,[],[{code,[],[<<103,105,108,98,101,114,116,124,115,117,108,108,105,118,97,110>>]}]},{p,[],[<<65,110,121,32,110,117,109,98,101,114,32,111,102,32,97,108,116,101,114,110,97,116,105,118,101,115,32,99,97,110,32,97,112,112,101,97,114,44,32,97,110,100,32,97,110,32,101,109,112,116,121,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,112,101,114,109,105,116,116,101,100,32,40,109,97,116,99,104,105,110,103,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,41,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,115,115,32,116,114,105,101,115,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,117,114,110,44,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,44,32,97,110,100,32,116,104,101,32,102,105,114,115,116,32,116,104,97,116,32,115,117,99,99,101,101,100,115,32,105,115,32,117,115,101,100,46,32,73,102,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,119,105,116,104,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,100,101,102,105,110,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115>>]},<<41,44,32,34,115,117,99,99,101,101,100,115,34,32,109,101,97,110,115,32,109,97,116,99,104,105,110,103,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,109,97,105,110,32,112,97,116,116,101,114,110,32,97,110,100,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,46>>]},{a,[{id,<<115,101,99,116,49,48>>}],[]},{h2,[],[<<73,110,116,101,114,110,97,108,32,79,112,116,105,111,110,32,83,101,116,116,105,110,103>>]},{p,[],[<<84,104,101,32,115,101,116,116,105,110,103,115,32,111,102,32,116,104,101,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,32,111,112,116,105,111,110,115,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<44,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<44,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,102,114,111,109,32,119,105,116,104,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,98,121,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,80,101,114,108,32,111,112,116,105,111,110,32,108,101,116,116,101,114,115,32,101,110,99,108,111,115,101,100,32,98,101,116,119,101,101,110,32,34,40,63,34,32,97,110,100,32,34,41,34,46,32,84,104,101,32,111,112,116,105,111,110,32,108,101,116,116,101,114,115,32,97,114,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[<<105>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]}]},{dt,[],[<<109>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]}]},{dt,[],[<<115>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<100,111,116,97,108,108>>]}]},{dt,[],[<<120>>]},{dd,[],[<<70,111,114,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]}]}]},{p,[],[<<70,111,114,32,101,120,97,109,112,108,101,44,32>>,{code,[],[<<40,63,105,109,41>>]},<<32,115,101,116,115,32,99,97,115,101,108,101,115,115,44,32,109,117,108,116,105,108,105,110,101,32,109,97,116,99,104,105,110,103,46,32,84,104,101,115,101,32,111,112,116,105,111,110,115,32,99,97,110,32,97,108,115,111,32,98,101,32,117,110,115,101,116,32,98,121,32,112,114,101,99,101,100,105,110,103,32,116,104,101,32,108,101,116,116,101,114,32,119,105,116,104,32,97,32,104,121,112,104,101,110,46,32,65,32,99,111,109,98,105,110,101,100,32,115,101,116,116,105,110,103,32,97,110,100,32,117,110,115,101,116,116,105,110,103,32,115,117,99,104,32,97,115,32>>,{code,[],[<<40,63,105,109,45,115,120,41>>]},<<44,32,119,104,105,99,104,32,115,101,116,115,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<32,97,110,100,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<44,32,119,104,105,108,101,32,117,110,115,101,116,116,105,110,103,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,97,110,100,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<44,32,105,115,32,97,108,115,111,32,112,101,114,109,105,116,116,101,100,46,32,73,102,32,97,32,108,101,116,116,101,114,32,97,112,112,101,97,114,115,32,98,111,116,104,32,98,101,102,111,114,101,32,97,110,100,32,97,102,116,101,114,32,116,104,101,32,104,121,112,104,101,110,44,32,116,104,101,32,111,112,116,105,111,110,32,105,115,32,117,110,115,101,116,46>>]},{p,[],[<<84,104,101,32,80,67,82,69,45,115,112,101,99,105,102,105,99,32,111,112,116,105,111,110,115,32>>,{code,[],[<<100,117,112,110,97,109,101,115>>]},<<44,32>>,{code,[],[<<117,110,103,114,101,101,100,121>>]},<<44,32,97,110,100,32>>,{code,[],[<<101,120,116,114,97>>]},<<32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,116,104,101,32,80,101,114,108,45,99,111,109,112,97,116,105,98,108,101,32,111,112,116,105,111,110,115,32,98,121,32,117,115,105,110,103,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,74,44,32,85,44,32,97,110,100,32,88,32,114,101,115,112,101,99,116,105,118,101,108,121,46>>]},{p,[],[<<87,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,111,112,116,105,111,110,32,99,104,97,110,103,101,115,32,111,99,99,117,114,115,32,97,116,32,116,111,112,45,108,101,118,101,108,32,40,116,104,97,116,32,105,115,44,32,110,111,116,32,105,110,115,105,100,101,32,115,117,98,112,97,116,116,101,114,110,32,112,97,114,101,110,116,104,101,115,101,115,41,44,32,116,104,101,32,99,104,97,110,103,101,32,97,112,112,108,105,101,115,32,116,111,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,116,104,97,116,32,102,111,108,108,111,119,115,46>>]},{p,[],[<<65,110,32,111,112,116,105,111,110,32,99,104,97,110,103,101,32,119,105,116,104,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,115>>]},<<41,32,97,102,102,101,99,116,115,32,111,110,108,121,32,116,104,97,116,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,102,111,108,108,111,119,115,32,105,116,46,32,83,111,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,98,99,32,97,110,100,32,97,66,99,32,97,110,100,32,110,111,32,111,116,104,101,114,32,115,116,114,105,110,103,115,32,40,97,115,115,117,109,105,110,103,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<32,105,115,32,110,111,116,32,117,115,101,100,41,58>>]},{pre,[],[{code,[],[<<40,97,40,63,105,41,98,41,99>>]}]},{p,[],[<<66,121,32,116,104,105,115,32,109,101,97,110,115,44,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,109,97,100,101,32,116,111,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,115,101,116,116,105,110,103,115,32,105,110,32,100,105,102,102,101,114,101,110,116,32,112,97,114,116,115,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,46,32,65,110,121,32,99,104,97,110,103,101,115,32,109,97,100,101,32,105,110,32,111,110,101,32,97,108,116,101,114,110,97,116,105,118,101,32,100,111,32,99,97,114,114,121,32,111,110,32,105,110,116,111,32,115,117,98,115,101,113,117,101,110,116,32,98,114,97,110,99,104,101,115,32,119,105,116,104,105,110,32,116,104,101,32,115,97,109,101,32,115,117,98,112,97,116,116,101,114,110,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,40,63,105,41,98,124,99,41>>]}]},{p,[],[<<109,97,116,99,104,101,115,32,34,97,98,34,44,32,34,97,66,34,44,32,34,99,34,44,32,97,110,100,32,34,67,34,44,32,97,108,116,104,111,117,103,104,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,34,67,34,32,116,104,101,32,102,105,114,115,116,32,98,114,97,110,99,104,32,105,115,32,97,98,97,110,100,111,110,101,100,32,98,101,102,111,114,101,32,116,104,101,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,101,102,102,101,99,116,115,32,111,102,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,115,32,111,99,99,117,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46,32,84,104,101,114,101,32,119,111,117,108,100,32,98,101,32,115,111,109,101,32,119,101,105,114,100,32,98,101,104,97,118,105,111,114,32,111,116,104,101,114,119,105,115,101,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<79,116,104,101,114,32,80,67,82,69,45,115,112,101,99,105,102,105,99,32,111,112,116,105,111,110,115,32,99,97,110,32,98,101,32,115,101,116,32,98,121,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,119,104,101,110,32,116,104,101,32,99,111,109,112,105,108,105,110,103,32,111,114,32,109,97,116,99,104,105,110,103,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,99,97,108,108,101,100,46,32,83,111,109,101,116,105,109,101,115,32,116,104,101,32,112,97,116,116,101,114,110,32,99,97,110,32,99,111,110,116,97,105,110,32,115,112,101,99,105,97,108,32,108,101,97,100,105,110,103,32,115,101,113,117,101,110,99,101,115,44,32,115,117,99,104,32,97,115,32,40,42,67,82,76,70,41,44,32,116,111,32,111,118,101,114,114,105,100,101,32,119,104,97,116,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,104,97,115,32,115,101,116,32,111,114,32,119,104,97,116,32,104,97,115,32,98,101,101,110,32,100,101,102,97,117,108,116,101,100,46,32,68,101,116,97,105,108,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,101,119,108,105,110,101,95,115,101,113,117,101,110,99,101,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,101,119,108,105,110,101,32,83,101,113,117,101,110,99,101,115>>]},<<32,101,97,114,108,105,101,114,46>>]},{p,[],[<<84,104,101,32,40,42,85,84,70,56,41,32,97,110,100,32,40,42,85,67,80,41,32,108,101,97,100,105,110,103,32,115,101,113,117,101,110,99,101,115,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,115,101,116,32,85,84,70,32,97,110,100,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,121,32,109,111,100,101,115,46,32,84,104,101,121,32,97,114,101,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,115,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,97,110,100,32>>,{code,[],[<<117,99,112>>]},<<44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,84,104,101,32,40,42,85,84,70,41,32,115,101,113,117,101,110,99,101,32,105,115,32,97,32,103,101,110,101,114,105,99,32,118,101,114,115,105,111,110,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,97,110,121,32,111,102,32,116,104,101,32,108,105,98,114,97,114,105,101,115,46,32,72,111,119,101,118,101,114,44,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,99,97,110,32,115,101,116,32,111,112,116,105,111,110,32>>,{code,[],[<<110,101,118,101,114,95,117,116,102>>]},<<44,32,119,104,105,99,104,32,108,111,99,107,115,32,111,117,116,32,116,104,101,32,117,115,101,32,111,102,32,116,104,101,32,40,42,85,84,70,41,32,115,101,113,117,101,110,99,101,115,46>>]}]},{a,[{id,<<115,101,99,116,49,49>>}],[]},{h2,[],[<<83,117,98,112,97,116,116,101,114,110,115>>]},{p,[],[<<83,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,100,101,108,105,109,105,116,101,100,32,98,121,32,112,97,114,101,110,116,104,101,115,101,115,32,40,114,111,117,110,100,32,98,114,97,99,107,101,116,115,41,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,110,101,115,116,101,100,46,32,84,117,114,110,105,110,103,32,112,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,32,105,110,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,100,111,101,115,32,116,119,111,32,116,104,105,110,103,115,58>>]},{dl,[],[{dt,[],[<<49,46>>]},{dd,[],[{p,[],[<<73,116,32,108,111,99,97,108,105,122,101,115,32,97,32,115,101,116,32,111,102,32,97,108,116,101,114,110,97,116,105,118,101,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,99,97,116,97,114,97,99,116,34,44,32,34,99,97,116,101,114,112,105,108,108,97,114,34,44,32,111,114,32,34,99,97,116,34,58>>]},{pre,[],[{code,[],[<<99,97,116,40,97,114,97,99,116,124,101,114,112,105,108,108,97,114,124,41>>]}]},{p,[],[<<87,105,116,104,111,117,116,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,44,32,105,116,32,119,111,117,108,100,32,109,97,116,99,104,32,34,99,97,116,97,114,97,99,116,34,44,32,34,101,114,112,105,108,108,97,114,34,44,32,111,114,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,46>>]}]},{dt,[],[<<50,46>>]},{dd,[],[{p,[],[<<73,116,32,115,101,116,115,32,117,112,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,97,115,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,46,32,84,104,97,116,32,105,115,44,32,119,104,101,110,32,116,104,101,32,99,111,109,112,108,101,116,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,44,32,116,104,97,116,32,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,116,104,97,116,32,109,97,116,99,104,101,100,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,112,97,115,115,101,100,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,116,104,114,111,117,103,104,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<46>>]}]}]},{p,[],[<<79,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,99,111,117,110,116,101,100,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,32,40,115,116,97,114,116,105,110,103,32,102,114,111,109,32,49,41,32,116,111,32,111,98,116,97,105,110,32,110,117,109,98,101,114,115,32,102,111,114,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,116,104,101,32,115,116,114,105,110,103,32,34,116,104,101,32,114,101,100,32,107,105,110,103,34,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,34,114,101,100,32,107,105,110,103,34,44,32,34,114,101,100,34,44,32,97,110,100,32,34,107,105,110,103,34,44,32,97,110,100,32,97,114,101,32,110,117,109,98,101,114,101,100,32,49,44,32,50,44,32,97,110,100,32,51,44,32,114,101,115,112,101,99,116,105,118,101,108,121,58>>]},{pre,[],[{code,[],[<<116,104,101,32,40,40,114,101,100,124,119,104,105,116,101,41,32,40,107,105,110,103,124,113,117,101,101,110,41,41>>]}]},{p,[],[<<73,116,32,105,115,32,110,111,116,32,97,108,119,97,121,115,32,104,101,108,112,102,117,108,32,116,104,97,116,32,112,108,97,105,110,32,112,97,114,101,110,116,104,101,115,101,115,32,102,117,108,102,105,108,108,32,116,119,111,32,102,117,110,99,116,105,111,110,115,46,32,79,102,116,101,110,32,97,32,103,114,111,117,112,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,114,101,113,117,105,114,101,100,32,119,105,116,104,111,117,116,32,97,32,99,97,112,116,117,114,105,110,103,32,114,101,113,117,105,114,101,109,101,110,116,46,32,73,102,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,113,117,101,115,116,105,111,110,32,109,97,114,107,32,97,110,100,32,97,32,99,111,108,111,110,44,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,100,111,101,115,32,110,111,116,32,100,111,32,97,110,121,32,99,97,112,116,117,114,105,110,103,44,32,97,110,100,32,105,115,32,110,111,116,32,99,111,117,110,116,101,100,32,119,104,101,110,32,99,111,109,112,117,116,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,97,110,121,32,115,117,98,115,101,113,117,101,110,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,116,104,101,32,115,116,114,105,110,103,32,34,116,104,101,32,119,104,105,116,101,32,113,117,101,101,110,34,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,34,119,104,105,116,101,32,113,117,101,101,110,34,32,97,110,100,32,34,113,117,101,101,110,34,44,32,97,110,100,32,97,114,101,32,110,117,109,98,101,114,101,100,32,49,32,97,110,100,32,50,58>>]},{pre,[],[{code,[],[<<116,104,101,32,40,40,63,58,114,101,100,124,119,104,105,116,101,41,32,40,107,105,110,103,124,113,117,101,101,110,41,41>>]}]},{p,[],[<<84,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,105,115,32,54,53,53,51,53,46>>]},{p,[],[<<65,115,32,97,32,99,111,110,118,101,110,105,101,110,116,32,115,104,111,114,116,104,97,110,100,44,32,105,102,32,97,110,121,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,115,32,97,114,101,32,114,101,113,117,105,114,101,100,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,110,111,110,45,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,44,32,116,104,101,32,111,112,116,105,111,110,32,108,101,116,116,101,114,115,32,99,97,110,32,97,112,112,101,97,114,32,98,101,116,119,101,101,110,32,34,63,34,32,97,110,100,32,34,58,34,46,32,84,104,117,115,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,116,119,111,32,112,97,116,116,101,114,110,115,32,109,97,116,99,104,32,116,104,101,32,115,97,109,101,32,115,101,116,32,111,102,32,115,116,114,105,110,103,115,58>>]},{pre,[],[{code,[],[<<40,63,105,58,115,97,116,117,114,100,97,121,124,115,117,110,100,97,121,41,10,40,63,58,40,63,105,41,115,97,116,117,114,100,97,121,124,115,117,110,100,97,121,41>>]}]},{p,[],[<<65,115,32,97,108,116,101,114,110,97,116,105,118,101,32,98,114,97,110,99,104,101,115,32,97,114,101,32,116,114,105,101,100,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,44,32,97,110,100,32,111,112,116,105,111,110,115,32,97,114,101,32,110,111,116,32,114,101,115,101,116,32,117,110,116,105,108,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,114,101,97,99,104,101,100,44,32,97,110,32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,32,105,110,32,111,110,101,32,98,114,97,110,99,104,32,100,111,101,115,32,97,102,102,101,99,116,32,115,117,98,115,101,113,117,101,110,116,32,98,114,97,110,99,104,101,115,44,32,115,111,32,116,104,101,32,97,98,111,118,101,32,112,97,116,116,101,114,110,115,32,109,97,116,99,104,32,98,111,116,104,32,34,83,85,78,68,65,89,34,32,97,110,100,32,34,83,97,116,117,114,100,97,121,34,46>>]},{a,[{id,<<115,101,99,116,49,50>>}],[]},{h2,[],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]},{p,[],[<<80,101,114,108,32,53,46,49,48,32,105,110,116,114,111,100,117,99,101,100,32,97,32,102,101,97,116,117,114,101,32,119,104,101,114,101,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,117,115,101,115,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,115,32,102,111,114,32,105,116,115,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,46,32,83,117,99,104,32,97,32,115,117,98,112,97,116,116,101,114,110,32,115,116,97,114,116,115,32,119,105,116,104,32>>,{code,[],[<<40,63,124>>]},<<32,97,110,100,32,105,115,32,105,116,115,101,108,102,32,97,32,110,111,110,45,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,63,124,40,83,97,116,41,117,114,124,40,83,117,110,41,41,100,97,121>>]}]},{p,[],[<<65,115,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,105,110,115,105,100,101,32,97,32>>,{code,[],[<<40,63,124>>]},<<32,103,114,111,117,112,44,32,98,111,116,104,32,115,101,116,115,32,111,102,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,110,117,109,98,101,114,101,100,32,111,110,101,46,32,84,104,117,115,44,32,119,104,101,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,44,32,121,111,117,32,99,97,110,32,108,111,111,107,32,97,116,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,32,110,117,109,98,101,114,32,111,110,101,44,32,119,104,105,99,104,101,118,101,114,32,97,108,116,101,114,110,97,116,105,118,101,32,109,97,116,99,104,101,100,46,32,84,104,105,115,32,99,111,110,115,116,114,117,99,116,32,105,115,32,117,115,101,102,117,108,32,119,104,101,110,32,121,111,117,32,119,97,110,116,32,116,111,32,99,97,112,116,117,114,101,32,97,32,112,97,114,116,44,32,98,117,116,32,110,111,116,32,97,108,108,44,32,111,102,32,111,110,101,32,111,102,32,109,97,110,121,32,97,108,116,101,114,110,97,116,105,118,101,115,46,32,73,110,115,105,100,101,32,97,32>>,{code,[],[<<40,63,124>>]},<<32,103,114,111,117,112,44,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,110,117,109,98,101,114,101,100,32,97,115,32,117,115,117,97,108,44,32,98,117,116,32,116,104,101,32,110,117,109,98,101,114,32,105,115,32,114,101,115,101,116,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,101,97,99,104,32,98,114,97,110,99,104,46,32,84,104,101,32,110,117,109,98,101,114,115,32,111,102,32,97,110,121,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,102,111,108,108,111,119,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,115,116,97,114,116,32,97,102,116,101,114,32,116,104,101,32,104,105,103,104,101,115,116,32,110,117,109,98,101,114,32,117,115,101,100,32,105,110,32,97,110,121,32,98,114,97,110,99,104,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,105,115,32,102,114,111,109,32,116,104,101,32,80,101,114,108,32,100,111,99,117,109,101,110,116,97,116,105,111,110,59,32,116,104,101,32,110,117,109,98,101,114,115,32,117,110,100,101,114,110,101,97,116,104,32,115,104,111,119,32,105,110,32,119,104,105,99,104,32,98,117,102,102,101,114,32,116,104,101,32,99,97,112,116,117,114,101,100,32,99,111,110,116,101,110,116,32,105,115,32,115,116,111,114,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<35,32,98,101,102,111,114,101,32,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,98,114,97,110,99,104,45,114,101,115,101,116,45,45,45,45,45,45,45,45,45,45,45,32,97,102,116,101,114,10,47,32,40,32,97,32,41,32,32,40,63,124,32,120,32,40,32,121,32,41,32,122,32,124,32,40,112,32,40,113,41,32,114,41,32,124,32,40,116,41,32,117,32,40,118,41,32,41,32,40,32,122,32,41,32,47,120,10,35,32,49,32,32,32,32,32,32,32,32,32,32,32,32,50,32,32,32,32,32,32,32,32,32,50,32,32,51,32,32,32,32,32,32,32,32,50,32,32,32,32,32,51,32,32,32,32,32,52>>]}]},{p,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,97,32,110,117,109,98,101,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,117,115,101,115,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,118,97,108,117,101,32,116,104,97,116,32,105,115,32,115,101,116,32,102,111,114,32,116,104,97,116,32,110,117,109,98,101,114,32,98,121,32,97,110,121,32,115,117,98,112,97,116,116,101,114,110,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,97,98,99,97,98,99,34,32,111,114,32,34,100,101,102,100,101,102,34,58>>]},{pre,[],[{code,[],[<<47,40,63,124,40,97,98,99,41,124,40,100,101,102,41,41,92,49,47>>]}]},{p,[],[<<73,110,32,99,111,110,116,114,97,115,116,44,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,116,111,32,97,32,110,117,109,98,101,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,97,108,119,97,121,115,32,114,101,102,101,114,115,32,116,111,32,116,104,101,32,102,105,114,115,116,32,111,110,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,103,105,118,101,110,32,110,117,109,98,101,114,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,97,98,99,97,98,99,34,32,111,114,32,34,100,101,102,97,98,99,34,58>>]},{pre,[],[{code,[],[<<47,40,63,124,40,97,98,99,41,124,40,100,101,102,41,41,40,63,49,41,47>>]}]},{p,[],[<<73,102,32,97,32,99,111,110,100,105,116,105,111,110,32,116,101,115,116,32,102,111,114,32,97,32,115,117,98,112,97,116,116,101,114,110,32,104,97,118,105,110,103,32,109,97,116,99,104,101,100,32,114,101,102,101,114,115,32,116,111,32,97,32,110,111,110,45,117,110,105,113,117,101,32,110,117,109,98,101,114,44,32,116,104,101,32,116,101,115,116,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,116,104,97,116,32,110,117,109,98,101,114,32,104,97,118,101,32,109,97,116,99,104,101,100,46>>]},{p,[],[<<65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,97,112,112,114,111,97,99,104,32,117,115,105,110,103,32,116,104,105,115,32,34,98,114,97,110,99,104,32,114,101,115,101,116,34,32,102,101,97,116,117,114,101,32,105,115,32,116,111,32,117,115,101,32,100,117,112,108,105,99,97,116,101,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,46>>]},{a,[{id,<<115,101,99,116,49,51>>}],[]},{h2,[],[<<78,97,109,101,100,32,83,117,98,112,97,116,116,101,114,110,115>>]},{p,[],[<<73,100,101,110,116,105,102,121,105,110,103,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,98,121,32,110,117,109,98,101,114,32,105,115,32,115,105,109,112,108,101,44,32,98,117,116,32,105,116,32,99,97,110,32,98,101,32,104,97,114,100,32,116,111,32,107,101,101,112,32,116,114,97,99,107,32,111,102,32,116,104,101,32,110,117,109,98,101,114,115,32,105,110,32,99,111,109,112,108,105,99,97,116,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,46,32,65,108,115,111,44,32,105,102,32,97,110,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,109,111,100,105,102,105,101,100,44,32,116,104,101,32,110,117,109,98,101,114,115,32,99,97,110,32,99,104,97,110,103,101,46,32,84,111,32,104,101,108,112,32,119,105,116,104,32,116,104,105,115,32,100,105,102,102,105,99,117,108,116,121,44,32,80,67,82,69,32,115,117,112,112,111,114,116,115,32,116,104,101,32,110,97,109,105,110,103,32,111,102,32,115,117,98,112,97,116,116,101,114,110,115,46,32,84,104,105,115,32,102,101,97,116,117,114,101,32,119,97,115,32,110,111,116,32,97,100,100,101,100,32,116,111,32,80,101,114,108,32,117,110,116,105,108,32,114,101,108,101,97,115,101,32,53,46,49,48,46,32,80,121,116,104,111,110,32,104,97,100,32,116,104,101,32,102,101,97,116,117,114,101,32,101,97,114,108,105,101,114,44,32,97,110,100,32,80,67,82,69,32,105,110,116,114,111,100,117,99,101,100,32,105,116,32,97,116,32,114,101,108,101,97,115,101,32,52,46,48,44,32,117,115,105,110,103,32,116,104,101,32,80,121,116,104,111,110,32,115,121,110,116,97,120,46,32,80,67,82,69,32,110,111,119,32,115,117,112,112,111,114,116,115,32,98,111,116,104,32,116,104,101,32,80,101,114,108,32,97,110,100,32,116,104,101,32,80,121,116,104,111,110,32,115,121,110,116,97,120,46,32,80,101,114,108,32,97,108,108,111,119,115,32,105,100,101,110,116,105,99,97,108,108,121,32,110,117,109,98,101,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,104,97,118,101,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,44,32,98,117,116,32,80,67,82,69,32,100,111,101,115,32,110,111,116,46>>]},{p,[],[<<73,110,32,80,67,82,69,44,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,98,101,32,110,97,109,101,100,32,105,110,32,111,110,101,32,111,102,32,116,104,114,101,101,32,119,97,121,115,58,32>>,{code,[],[<<40,63,60,110,97,109,101,62,46,46,46,41>>]},<<32,111,114,32>>,{code,[],[<<40,63,39,110,97,109,101,39,46,46,46,41>>]},<<32,97,115,32,105,110,32,80,101,114,108,44,32,111,114,32>>,{code,[],[<<40,63,80,60,110,97,109,101,62,46,46,46,41>>]},<<32,97,115,32,105,110,32,80,121,116,104,111,110,46,32,82,101,102,101,114,101,110,99,101,115,32,116,111,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,102,114,111,109,32,111,116,104,101,114,32,112,97,114,116,115,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,44,32,115,117,99,104,32,97,115,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,44,32,114,101,99,117,114,115,105,111,110,44,32,97,110,100,32,99,111,110,100,105,116,105,111,110,115,44,32,99,97,110,32,98,101,32,109,97,100,101,32,98,121,32,110,97,109,101,32,97,110,100,32,98,121,32,110,117,109,98,101,114,46>>]},{p,[],[<<78,97,109,101,115,32,99,111,110,115,105,115,116,32,111,102,32,117,112,32,116,111,32,51,50,32,97,108,112,104,97,110,117,109,101,114,105,99,32,99,104,97,114,97,99,116,101,114,115,32,97,110,100,32,117,110,100,101,114,115,99,111,114,101,115,44,32,98,117,116,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,97,32,110,111,110,45,100,105,103,105,116,46,32,78,97,109,101,100,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,115,116,105,108,108,32,97,108,108,111,99,97,116,101,100,32,110,117,109,98,101,114,115,32,97,115,32,119,101,108,108,32,97,115,32,110,97,109,101,115,44,32,101,120,97,99,116,108,121,32,97,115,32,105,102,32,116,104,101,32,110,97,109,101,115,32,119,101,114,101,32,110,111,116,32,112,114,101,115,101,110,116,46,32,84,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<32,99,97,110,32,117,115,101,32,110,97,109,101,100,32,118,97,108,117,101,115,32,105,102,32,116,104,101,121,32,97,114,101,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,97,32,110,97,109,101,32,109,117,115,116,32,98,101,32,117,110,105,113,117,101,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,44,32,98,117,116,32,116,104,105,115,32,99,111,110,115,116,114,97,105,110,116,32,99,97,110,32,98,101,32,114,101,108,97,120,101,100,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<100,117,112,110,97,109,101,115>>]},<<32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,46,32,40,68,117,112,108,105,99,97,116,101,32,110,97,109,101,115,32,97,114,101,32,97,108,115,111,32,97,108,119,97,121,115,32,112,101,114,109,105,116,116,101,100,32,102,111,114,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,44,32,115,101,116,32,117,112,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,101,99,116,105,111,110,46,41,32,68,117,112,108,105,99,97,116,101,32,110,97,109,101,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,102,111,114,32,112,97,116,116,101,114,110,115,32,119,104,101,114,101,32,111,110,108,121,32,111,110,101,32,105,110,115,116,97,110,99,101,32,111,102,32,116,104,101,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,109,97,116,99,104,46,32,83,117,112,112,111,115,101,32,116,104,97,116,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,116,104,101,32,110,97,109,101,32,111,102,32,97,32,119,101,101,107,100,97,121,44,32,101,105,116,104,101,114,32,97,115,32,97,32,51,45,108,101,116,116,101,114,32,97,98,98,114,101,118,105,97,116,105,111,110,32,111,114,32,97,115,32,116,104,101,32,102,117,108,108,32,110,97,109,101,44,32,97,110,100,32,105,110,32,98,111,116,104,32,99,97,115,101,115,32,121,111,117,32,119,97,110,116,32,116,111,32,101,120,116,114,97,99,116,32,116,104,101,32,97,98,98,114,101,118,105,97,116,105,111,110,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,40,105,103,110,111,114,105,110,103,32,116,104,101,32,108,105,110,101,32,98,114,101,97,107,115,41,32,100,111,101,115,32,116,104,101,32,106,111,98,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<40,63,60,68,78,62,77,111,110,124,70,114,105,124,83,117,110,41,40,63,58,100,97,121,41,63,124,10,40,63,60,68,78,62,84,117,101,41,40,63,58,115,100,97,121,41,63,124,10,40,63,60,68,78,62,87,101,100,41,40,63,58,110,101,115,100,97,121,41,63,124,10,40,63,60,68,78,62,84,104,117,41,40,63,58,114,115,100,97,121,41,63,124,10,40,63,60,68,78,62,83,97,116,41,40,63,58,117,114,100,97,121,41,63>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,102,105,118,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,115,116,114,105,110,103,115,44,32,98,117,116,32,111,110,108,121,32,111,110,101,32,105,115,32,101,118,101,114,32,115,101,116,32,97,102,116,101,114,32,97,32,109,97,116,99,104,46,32,40,65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,119,97,121,32,111,102,32,115,111,108,118,105,110,103,32,116,104,105,115,32,112,114,111,98,108,101,109,32,105,115,32,116,111,32,117,115,101,32,97,32,34,98,114,97,110,99,104,32,114,101,115,101,116,34,32,115,117,98,112,97,116,116,101,114,110,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,101,99,116,105,111,110,46,41>>]},{p,[],[<<70,111,114,32,99,97,112,116,117,114,105,110,103,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,119,104,105,99,104,32,110,97,109,101,115,32,97,114,101,32,110,111,116,32,117,110,105,113,117,101,44,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,111,99,99,117,114,114,101,110,99,101,32,40,99,111,117,110,116,101,100,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,41,32,105,115,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,105,102,32,116,104,101,32,110,97,109,101,32,105,115,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,101,32>>,{code,[],[<<118,97,108,117,101,115>>]},<<32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,115,116,97,116,101,109,101,110,116,46,32,84,104,101,32>>,{code,[],[<<97,108,108,95,110,97,109,101,115>>]},<<32,99,97,112,116,117,114,105,110,103,32,118,97,108,117,101,32,109,97,116,99,104,101,115,32,97,108,108,32,116,104,101,32,110,97,109,101,115,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<89,111,117,32,99,97,110,110,111,116,32,117,115,101,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,32,116,111,32,100,105,115,116,105,110,103,117,105,115,104,32,98,101,116,119,101,101,110,32,116,119,111,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,44,32,97,115,32,80,67,82,69,32,117,115,101,115,32,111,110,108,121,32,116,104,101,32,110,117,109,98,101,114,115,32,119,104,101,110,32,109,97,116,99,104,105,110,103,46,32,70,111,114,32,116,104,105,115,32,114,101,97,115,111,110,44,32,97,110,32,101,114,114,111,114,32,105,115,32,103,105,118,101,110,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,32,105,102,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,116,111,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,46,32,72,111,119,101,118,101,114,44,32,121,111,117,32,99,97,110,32,115,112,101,99,105,102,121,32,116,104,101,32,115,97,109,101,32,110,97,109,101,32,116,111,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,44,32,101,118,101,110,32,119,104,101,110,32>>,{code,[],[<<100,117,112,110,97,109,101,115>>]},<<32,105,115,32,110,111,116,32,115,101,116,46>>]}]},{a,[{id,<<115,101,99,116,49,52>>}],[]},{h2,[],[<<82,101,112,101,116,105,116,105,111,110>>]},{p,[],[<<82,101,112,101,116,105,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32,113,117,97,110,116,105,102,105,101,114,115,44,32,119,104,105,99,104,32,99,97,110,32,102,111,108,108,111,119,32,97,110,121,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,116,101,109,115,58>>]},{ul,[],[{li,[],[<<65,32,108,105,116,101,114,97,108,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114>>]},{li,[],[<<84,104,101,32,100,111,116,32,109,101,116,97,99,104,97,114,97,99,116,101,114>>]},{li,[],[<<84,104,101,32,92,67,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101>>]},{li,[],[<<84,104,101,32,92,88,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101>>]},{li,[],[<<84,104,101,32,92,82,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101>>]},{li,[],[<<65,110,32,101,115,99,97,112,101,32,115,117,99,104,32,97,115,32,92,100,32,111,114,32,92,112,76,32,116,104,97,116,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114>>]},{li,[],[<<65,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115>>]},{li,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,40,115,101,101,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41>>]},{li,[],[<<65,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,32,40,105,110,99,108,117,100,105,110,103,32,97,115,115,101,114,116,105,111,110,115,41>>]},{li,[],[<<65,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,114,101,99,117,114,115,105,118,101,32,111,114,32,111,116,104,101,114,119,105,115,101,41>>]}]},{p,[],[<<84,104,101,32,103,101,110,101,114,97,108,32,114,101,112,101,116,105,116,105,111,110,32,113,117,97,110,116,105,102,105,101,114,32,115,112,101,99,105,102,105,101,115,32,97,32,109,105,110,105,109,117,109,32,97,110,100,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,101,114,109,105,116,116,101,100,32,109,97,116,99,104,101,115,44,32,98,121,32,103,105,118,105,110,103,32,116,104,101,32,116,119,111,32,110,117,109,98,101,114,115,32,105,110,32,99,117,114,108,121,32,98,114,97,99,107,101,116,115,32,40,98,114,97,99,101,115,41,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,97,32,99,111,109,109,97,46,32,84,104,101,32,110,117,109,98,101,114,115,32,109,117,115,116,32,98,101,32,60,32,54,53,53,51,54,44,32,97,110,100,32,116,104,101,32,102,105,114,115,116,32,109,117,115,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,111,114,32,101,113,117,97,108,32,116,111,32,116,104,101,32,115,101,99,111,110,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,122,122,34,44,32,34,122,122,122,34,44,32,111,114,32,34,122,122,122,122,34,58>>]},{pre,[],[{code,[],[<<122,123,50,44,52,125>>]}]},{p,[],[<<65,32,99,108,111,115,105,110,103,32,98,114,97,99,101,32,111,110,32,105,116,115,32,111,119,110,32,105,115,32,110,111,116,32,97,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,46,32,73,102,32,116,104,101,32,115,101,99,111,110,100,32,110,117,109,98,101,114,32,105,115,32,111,109,105,116,116,101,100,44,32,98,117,116,32,116,104,101,32,99,111,109,109,97,32,105,115,32,112,114,101,115,101,110,116,44,32,116,104,101,114,101,32,105,115,32,110,111,32,117,112,112,101,114,32,108,105,109,105,116,46,32,73,102,32,116,104,101,32,115,101,99,111,110,100,32,110,117,109,98,101,114,32,97,110,100,32,116,104,101,32,99,111,109,109,97,32,97,114,101,32,98,111,116,104,32,111,109,105,116,116,101,100,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,115,112,101,99,105,102,105,101,115,32,97,110,32,101,120,97,99,116,32,110,117,109,98,101,114,32,111,102,32,114,101,113,117,105,114,101,100,32,109,97,116,99,104,101,115,46,32,84,104,117,115,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,116,32,108,101,97,115,116,32,116,104,114,101,101,32,115,117,99,99,101,115,115,105,118,101,32,118,111,119,101,108,115,44,32,98,117,116,32,99,97,110,32,109,97,116,99,104,32,109,97,110,121,32,109,111,114,101,58>>]},{pre,[],[{code,[],[<<91,97,101,105,111,117,93,123,51,44,125>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,101,120,97,99,116,108,121,32,101,105,103,104,116,32,100,105,103,105,116,115,58>>]},{pre,[],[{code,[],[<<92,100,123,56,125>>]}]},{p,[],[<<65,110,32,111,112,101,110,105,110,103,32,99,117,114,108,121,32,98,114,97,99,107,101,116,32,116,104,97,116,32,97,112,112,101,97,114,115,32,105,110,32,97,32,112,111,115,105,116,105,111,110,32,119,104,101,114,101,32,97,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,44,32,111,114,32,111,110,101,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,115,121,110,116,97,120,32,111,102,32,97,32,113,117,97,110,116,105,102,105,101,114,44,32,105,115,32,116,97,107,101,110,32,97,115,32,97,32,108,105,116,101,114,97,108,32,99,104,97,114,97,99,116,101,114,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,123,44,54,125,32,105,115,32,110,111,116,32,97,32,113,117,97,110,116,105,102,105,101,114,44,32,98,117,116,32,97,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,32,111,102,32,102,111,117,114,32,99,104,97,114,97,99,116,101,114,115,46>>]},{p,[],[<<73,110,32,85,110,105,99,111,100,101,32,109,111,100,101,44,32,113,117,97,110,116,105,102,105,101,114,115,32,97,112,112,108,121,32,116,111,32,99,104,97,114,97,99,116,101,114,115,32,114,97,116,104,101,114,32,116,104,97,110,32,116,111,32,105,110,100,105,118,105,100,117,97,108,32,100,97,116,97,32,117,110,105,116,115,46,32,84,104,117,115,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,92,120,123,49,48,48,125,123,50,125,32,109,97,116,99,104,101,115,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,44,32,101,97,99,104,32,111,102,32,119,104,105,99,104,32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,50,45,98,121,116,101,32,115,101,113,117,101,110,99,101,32,105,110,32,97,32,85,84,70,45,56,32,115,116,114,105,110,103,46,32,83,105,109,105,108,97,114,108,121,44,32,92,88,123,51,125,32,109,97,116,99,104,101,115,32,116,104,114,101,101,32,85,110,105,99,111,100,101,32,101,120,116,101,110,100,101,100,32,103,114,97,112,104,101,109,101,32,99,108,117,115,116,101,114,115,44,32,101,97,99,104,32,111,102,32,119,104,105,99,104,32,99,97,110,32,98,101,32,109,97,110,121,32,100,97,116,97,32,117,110,105,116,115,32,108,111,110,103,32,40,97,110,100,32,116,104,101,121,32,99,97,110,32,98,101,32,111,102,32,100,105,102,102,101,114,101,110,116,32,108,101,110,103,116,104,115,41,46>>]},{p,[],[<<84,104,101,32,113,117,97,110,116,105,102,105,101,114,32,123,48,125,32,105,115,32,112,101,114,109,105,116,116,101,100,44,32,99,97,117,115,105,110,103,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,116,111,32,98,101,104,97,118,101,32,97,115,32,105,102,32,116,104,101,32,112,114,101,118,105,111,117,115,32,105,116,101,109,32,97,110,100,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,119,101,114,101,32,110,111,116,32,112,114,101,115,101,110,116,46,32,84,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,102,111,114,32,115,117,98,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,114,101,102,101,114,101,110,99,101,100,32,97,115,32,115,117,98,114,111,117,116,105,110,101,115,32,102,114,111,109,32,101,108,115,101,119,104,101,114,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,40,98,117,116,32,115,101,101,32,97,108,115,111,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,100,101,102,105,110,105,110,103,95,115,117,98,112,97,116,116,101,114,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,101,102,105,110,105,110,103,32,83,117,98,112,97,116,116,101,114,110,115,32,102,111,114,32,85,115,101,32,98,121,32,82,101,102,101,114,101,110,99,101,32,79,110,108,121>>]},<<41,46,32,73,116,101,109,115,32,111,116,104,101,114,32,116,104,97,110,32,115,117,98,112,97,116,116,101,114,110,115,32,116,104,97,116,32,104,97,118,101,32,97,32,123,48,125,32,113,117,97,110,116,105,102,105,101,114,32,97,114,101,32,111,109,105,116,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,109,112,105,108,101,100,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<70,111,114,32,99,111,110,118,101,110,105,101,110,99,101,44,32,116,104,101,32,116,104,114,101,101,32,109,111,115,116,32,99,111,109,109,111,110,32,113,117,97,110,116,105,102,105,101,114,115,32,104,97,118,101,32,115,105,110,103,108,101,45,99,104,97,114,97,99,116,101,114,32,97,98,98,114,101,118,105,97,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[<<42>>]},{dd,[],[<<69,113,117,105,118,97,108,101,110,116,32,116,111,32,123,48,44,125>>]},{dt,[],[<<43>>]},{dd,[],[<<69,113,117,105,118,97,108,101,110,116,32,116,111,32,123,49,44,125>>]},{dt,[],[<<63>>]},{dd,[],[<<69,113,117,105,118,97,108,101,110,116,32,116,111,32,123,48,44,49,125>>]}]},{p,[],[<<73,110,102,105,110,105,116,101,32,108,111,111,112,115,32,99,97,110,32,98,101,32,99,111,110,115,116,114,117,99,116,101,100,32,98,121,32,102,111,108,108,111,119,105,110,103,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,99,97,110,32,109,97,116,99,104,32,110,111,32,99,104,97,114,97,99,116,101,114,115,32,119,105,116,104,32,97,32,113,117,97,110,116,105,102,105,101,114,32,116,104,97,116,32,104,97,115,32,110,111,32,117,112,112,101,114,32,108,105,109,105,116,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,63,41,42>>]}]},{p,[],[<<69,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,111,102,32,80,101,114,108,32,97,110,100,32,80,67,82,69,32,117,115,101,100,32,116,111,32,103,105,118,101,32,97,110,32,101,114,114,111,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,32,102,111,114,32,115,117,99,104,32,112,97,116,116,101,114,110,115,46,32,72,111,119,101,118,101,114,44,32,97,115,32,116,104,101,114,101,32,97,114,101,32,99,97,115,101,115,32,119,104,101,114,101,32,116,104,105,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,44,32,115,117,99,104,32,112,97,116,116,101,114,110,115,32,97,114,101,32,110,111,119,32,97,99,99,101,112,116,101,100,46,32,72,111,119,101,118,101,114,44,32,105,102,32,97,110,121,32,114,101,112,101,116,105,116,105,111,110,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,110,111,32,99,104,97,114,97,99,116,101,114,115,44,32,116,104,101,32,108,111,111,112,32,105,115,32,102,111,114,99,105,98,108,121,32,98,114,111,107,101,110,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,34,103,114,101,101,100,121,34,44,32,116,104,97,116,32,105,115,44,32,116,104,101,121,32,109,97,116,99,104,32,97,115,32,109,117,99,104,32,97,115,32,112,111,115,115,105,98,108,101,32,40,117,112,32,116,111,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,101,114,109,105,116,116,101,100,32,116,105,109,101,115,41,44,32,119,105,116,104,111,117,116,32,99,97,117,115,105,110,103,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,116,111,32,102,97,105,108,46,32,84,104,101,32,99,108,97,115,115,105,99,32,101,120,97,109,112,108,101,32,111,102,32,119,104,101,114,101,32,116,104,105,115,32,103,105,118,101,115,32,112,114,111,98,108,101,109,115,32,105,115,32,105,110,32,116,114,121,105,110,103,32,116,111,32,109,97,116,99,104,32,99,111,109,109,101,110,116,115,32,105,110,32,67,32,112,114,111,103,114,97,109,115,46,32,84,104,101,115,101,32,97,112,112,101,97,114,32,98,101,116,119,101,101,110,32,47,42,32,97,110,100,32,42,47,46,32,87,105,116,104,105,110,32,116,104,101,32,99,111,109,109,101,110,116,44,32,105,110,100,105,118,105,100,117,97,108,32,42,32,97,110,100,32,47,32,99,104,97,114,97,99,116,101,114,115,32,99,97,110,32,97,112,112,101,97,114,46,32,65,110,32,97,116,116,101,109,112,116,32,116,111,32,109,97,116,99,104,32,67,32,99,111,109,109,101,110,116,115,32,98,121,32,97,112,112,108,121,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110>>]},{pre,[],[{code,[],[<<47,92,42,46,42,92,42,47>>]}]},{p,[],[<<116,111,32,116,104,101,32,115,116,114,105,110,103>>]},{pre,[],[{code,[],[<<47,42,32,102,105,114,115,116,32,99,111,109,109,101,110,116,32,42,47,32,32,110,111,116,32,99,111,109,109,101,110,116,32,32,47,42,32,115,101,99,111,110,100,32,99,111,109,109,101,110,116,32,42,47>>]}]},{p,[],[<<102,97,105,108,115,44,32,97,115,32,105,116,32,109,97,116,99,104,101,115,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,32,111,119,105,110,103,32,116,111,32,116,104,101,32,103,114,101,101,100,105,110,101,115,115,32,111,102,32,116,104,101,32,46,42,32,105,116,101,109,46>>]},{p,[],[<<72,111,119,101,118,101,114,44,32,105,102,32,97,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,113,117,101,115,116,105,111,110,32,109,97,114,107,44,32,105,116,32,99,101,97,115,101,115,32,116,111,32,98,101,32,103,114,101,101,100,121,44,32,97,110,100,32,105,110,115,116,101,97,100,32,109,97,116,99,104,101,115,32,116,104,101,32,109,105,110,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,112,111,115,115,105,98,108,101,44,32,115,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,100,111,101,115,32,116,104,101,32,114,105,103,104,116,32,116,104,105,110,103,32,119,105,116,104,32,116,104,101,32,67,32,99,111,109,109,101,110,116,115,58>>]},{pre,[],[{code,[],[<<47,92,42,46,42,63,92,42,47>>]}]},{p,[],[<<84,104,101,32,109,101,97,110,105,110,103,32,111,102,32,116,104,101,32,118,97,114,105,111,117,115,32,113,117,97,110,116,105,102,105,101,114,115,32,105,115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32,99,104,97,110,103,101,100,44,32,111,110,108,121,32,116,104,101,32,112,114,101,102,101,114,114,101,100,32,110,117,109,98,101,114,32,111,102,32,109,97,116,99,104,101,115,46,32,68,111,32,110,111,116,32,99,111,110,102,117,115,101,32,116,104,105,115,32,117,115,101,32,111,102,32,113,117,101,115,116,105,111,110,32,109,97,114,107,32,119,105,116,104,32,105,116,115,32,117,115,101,32,97,115,32,97,32,113,117,97,110,116,105,102,105,101,114,32,105,110,32,105,116,115,32,111,119,110,32,114,105,103,104,116,46,32,65,115,32,105,116,32,104,97,115,32,116,119,111,32,117,115,101,115,44,32,105,116,32,99,97,110,32,115,111,109,101,116,105,109,101,115,32,97,112,112,101,97,114,32,100,111,117,98,108,101,100,44,32,97,115,32,105,110>>]},{pre,[],[{code,[],[<<92,100,63,63,92,100>>]}]},{p,[],[<<119,104,105,99,104,32,109,97,116,99,104,101,115,32,111,110,101,32,100,105,103,105,116,32,98,121,32,112,114,101,102,101,114,101,110,99,101,44,32,98,117,116,32,99,97,110,32,109,97,116,99,104,32,116,119,111,32,105,102,32,116,104,97,116,32,105,115,32,116,104,101,32,111,110,108,121,32,119,97,121,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,46>>]},{p,[],[<<73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,103,114,101,101,100,121>>]},<<32,105,115,32,115,101,116,32,40,97,110,32,111,112,116,105,111,110,32,116,104,97,116,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,80,101,114,108,41,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,110,111,116,32,103,114,101,101,100,121,32,98,121,32,100,101,102,97,117,108,116,44,32,98,117,116,32,105,110,100,105,118,105,100,117,97,108,32,111,110,101,115,32,99,97,110,32,98,101,32,109,97,100,101,32,103,114,101,101,100,121,32,98,121,32,102,111,108,108,111,119,105,110,103,32,116,104,101,109,32,119,105,116,104,32,97,32,113,117,101,115,116,105,111,110,32,109,97,114,107,46,32,84,104,97,116,32,105,115,44,32,105,116,32,105,110,118,101,114,116,115,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,46>>]},{p,[],[<<87,104,101,110,32,97,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,113,117,97,110,116,105,102,105,101,100,32,119,105,116,104,32,97,32,109,105,110,105,109,117,109,32,114,101,112,101,97,116,32,99,111,117,110,116,32,116,104,97,116,32,105,115,32,62,32,49,32,111,114,32,119,105,116,104,32,97,32,108,105,109,105,116,101,100,32,109,97,120,105,109,117,109,44,32,109,111,114,101,32,109,101,109,111,114,121,32,105,115,32,114,101,113,117,105,114,101,100,32,102,111,114,32,116,104,101,32,99,111,109,112,105,108,101,100,32,112,97,116,116,101,114,110,44,32,105,110,32,112,114,111,112,111,114,116,105,111,110,32,116,111,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,109,105,110,105,109,117,109,32,111,114,32,109,97,120,105,109,117,109,46>>]},{p,[],[<<73,102,32,97,32,112,97,116,116,101,114,110,32,115,116,97,114,116,115,32,119,105,116,104,32,46,42,32,111,114,32,46,123,48,44,125,32,97,110,100,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,40,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,115>>]},<<41,32,105,115,32,115,101,116,44,32,116,104,117,115,32,97,108,108,111,119,105,110,103,32,116,104,101,32,100,111,116,32,116,111,32,109,97,116,99,104,32,110,101,119,108,105,110,101,115,44,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,105,109,112,108,105,99,105,116,108,121,32,97,110,99,104,111,114,101,100,44,32,98,101,99,97,117,115,101,32,119,104,97,116,101,118,101,114,32,102,111,108,108,111,119,115,32,105,115,32,116,114,105,101,100,32,97,103,97,105,110,115,116,32,101,118,101,114,121,32,99,104,97,114,97,99,116,101,114,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,83,111,44,32,116,104,101,114,101,32,105,115,32,110,111,32,112,111,105,110,116,32,105,110,32,114,101,116,114,121,105,110,103,32,116,104,101,32,111,118,101,114,97,108,108,32,109,97,116,99,104,32,97,116,32,97,110,121,32,112,111,115,105,116,105,111,110,32,97,102,116,101,114,32,116,104,101,32,102,105,114,115,116,46,32,80,67,82,69,32,110,111,114,109,97,108,108,121,32,116,114,101,97,116,115,32,115,117,99,104,32,97,32,112,97,116,116,101,114,110,32,97,115,32,105,102,32,105,116,32,119,97,115,32,112,114,101,99,101,100,101,100,32,98,121,32,92,65,46>>]},{p,[],[<<73,110,32,99,97,115,101,115,32,119,104,101,114,101,32,105,116,32,105,115,32,107,110,111,119,110,32,116,104,97,116,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,115,32,110,111,32,110,101,119,108,105,110,101,115,44,32,105,116,32,105,115,32,119,111,114,116,104,32,115,101,116,116,105,110,103,32>>,{code,[],[<<100,111,116,97,108,108>>]},<<32,116,111,32,111,98,116,97,105,110,32,116,104,105,115,32,111,112,116,105,109,105,122,97,116,105,111,110,44,32,111,114,32,97,108,116,101,114,110,97,116,105,118,101,108,121,32,117,115,105,110,103,32,94,32,116,111,32,105,110,100,105,99,97,116,101,32,97,110,99,104,111,114,105,110,103,32,101,120,112,108,105,99,105,116,108,121,46>>]},{p,[],[<<72,111,119,101,118,101,114,44,32,116,104,101,114,101,32,97,114,101,32,115,111,109,101,32,99,97,115,101,115,32,119,104,101,114,101,32,116,104,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,46,32,87,104,101,110,32,46,42,32,105,115,32,105,110,115,105,100,101,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,116,104,101,32,115,117,98,106,101,99,116,32,111,102,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,101,108,115,101,119,104,101,114,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,44,32,97,32,109,97,116,99,104,32,97,116,32,116,104,101,32,115,116,97,114,116,32,99,97,110,32,102,97,105,108,32,119,104,101,114,101,32,97,32,108,97,116,101,114,32,111,110,101,32,115,117,99,99,101,101,100,115,46,32,67,111,110,115,105,100,101,114,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,46,42,41,97,98,99,92,49>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,120,121,122,49,50,51,97,98,99,49,50,51,34,44,32,116,104,101,32,109,97,116,99,104,32,112,111,105,110,116,32,105,115,32,116,104,101,32,102,111,117,114,116,104,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,114,101,102,111,114,101,44,32,115,117,99,104,32,97,32,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,105,109,112,108,105,99,105,116,108,121,32,97,110,99,104,111,114,101,100,46>>]},{p,[],[<<65,110,111,116,104,101,114,32,99,97,115,101,32,119,104,101,114,101,32,105,109,112,108,105,99,105,116,32,97,110,99,104,111,114,105,110,103,32,105,115,32,110,111,116,32,97,112,112,108,105,101,100,32,105,115,32,119,104,101,110,32,116,104,101,32,108,101,97,100,105,110,103,32,46,42,32,105,115,32,105,110,115,105,100,101,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,79,110,99,101,32,97,103,97,105,110,44,32,97,32,109,97,116,99,104,32,97,116,32,116,104,101,32,115,116,97,114,116,32,99,97,110,32,102,97,105,108,32,119,104,101,114,101,32,97,32,108,97,116,101,114,32,111,110,101,32,115,117,99,99,101,101,100,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,63,62,46,42,63,97,41,98>>]}]},{p,[],[<<73,116,32,109,97,116,99,104,101,115,32,34,97,98,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,34,97,97,98,34,46,32,84,104,101,32,117,115,101,32,111,102,32,116,104,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,111,110,116,114,111,108,32,118,101,114,98,115,32,40,42,80,82,85,78,69,41,32,97,110,100,32,40,42,83,75,73,80,41,32,97,108,115,111,32,100,105,115,97,98,108,101,32,116,104,105,115,32,111,112,116,105,109,105,122,97,116,105,111,110,46>>]},{p,[],[<<87,104,101,110,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,114,101,112,101,97,116,101,100,44,32,116,104,101,32,118,97,108,117,101,32,99,97,112,116,117,114,101,100,32,105,115,32,116,104,101,32,115,117,98,115,116,114,105,110,103,32,116,104,97,116,32,109,97,116,99,104,101,100,32,116,104,101,32,102,105,110,97,108,32,105,116,101,114,97,116,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,102,116,101,114>>]},{pre,[],[{code,[],[<<40,116,119,101,101,100,108,101,91,100,117,109,101,93,123,51,125,92,115,42,41,43>>]}]},{p,[],[<<104,97,115,32,109,97,116,99,104,101,100,32,34,116,119,101,101,100,108,101,100,117,109,32,116,119,101,101,100,108,101,100,101,101,34,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,32,105,115,32,34,116,119,101,101,100,108,101,100,101,101,34,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,114,101,32,97,114,101,32,110,101,115,116,101,100,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,99,97,112,116,117,114,101,100,32,118,97,108,117,101,115,32,99,97,110,32,104,97,118,101,32,98,101,101,110,32,115,101,116,32,105,110,32,112,114,101,118,105,111,117,115,32,105,116,101,114,97,116,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,102,116,101,114>>]},{pre,[],[{code,[],[<<47,40,97,124,40,98,41,41,43,47>>]}]},{p,[],[<<109,97,116,99,104,101,115,32,34,97,98,97,34,44,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,115,101,99,111,110,100,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,32,105,115,32,34,98,34,46>>]},{a,[{id,<<115,101,99,116,49,53>>}],[]},{h2,[],[<<65,116,111,109,105,99,32,71,114,111,117,112,105,110,103,32,97,110,100,32,80,111,115,115,101,115,115,105,118,101,32,81,117,97,110,116,105,102,105,101,114,115>>]},{p,[],[<<87,105,116,104,32,98,111,116,104,32,109,97,120,105,109,105,122,105,110,103,32,40,34,103,114,101,101,100,121,34,41,32,97,110,100,32,109,105,110,105,109,105,122,105,110,103,32,40,34,117,110,103,114,101,101,100,121,34,32,111,114,32,34,108,97,122,121,34,41,32,114,101,112,101,116,105,116,105,111,110,44,32,102,97,105,108,117,114,101,32,111,102,32,119,104,97,116,32,102,111,108,108,111,119,115,32,110,111,114,109,97,108,108,121,32,99,97,117,115,101,115,32,116,104,101,32,114,101,112,101,97,116,101,100,32,105,116,101,109,32,116,111,32,98,101,32,114,101,45,101,118,97,108,117,97,116,101,100,32,116,111,32,115,101,101,32,105,102,32,97,32,100,105,102,102,101,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,114,101,112,101,97,116,115,32,97,108,108,111,119,115,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,116,111,32,109,97,116,99,104,46,32,83,111,109,101,116,105,109,101,115,32,105,116,32,105,115,32,117,115,101,102,117,108,32,116,111,32,112,114,101,118,101,110,116,32,116,104,105,115,44,32,101,105,116,104,101,114,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,110,97,116,117,114,101,32,111,102,32,116,104,101,32,109,97,116,99,104,44,32,111,114,32,116,111,32,99,97,117,115,101,32,105,116,32,116,111,32,102,97,105,108,32,101,97,114,108,105,101,114,32,116,104,97,110,32,105,116,32,111,116,104,101,114,119,105,115,101,32,109,105,103,104,116,44,32,119,104,101,110,32,116,104,101,32,97,117,116,104,111,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,107,110,111,119,115,32,116,104,97,116,32,116,104,101,114,101,32,105,115,32,110,111,32,112,111,105,110,116,32,105,110,32,99,97,114,114,121,105,110,103,32,111,110,46>>]},{p,[],[<<67,111,110,115,105,100,101,114,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,112,97,116,116,101,114,110,32,92,100,43,102,111,111,32,119,104,101,110,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,117,98,106,101,99,116,32,108,105,110,101,58>>]},{pre,[],[{code,[],[<<49,50,51,52,53,54,98,97,114>>]}]},{p,[],[<<65,102,116,101,114,32,109,97,116,99,104,105,110,103,32,97,108,108,32,115,105,120,32,100,105,103,105,116,115,32,97,110,100,32,116,104,101,110,32,102,97,105,108,105,110,103,32,116,111,32,109,97,116,99,104,32,34,102,111,111,34,44,32,116,104,101,32,110,111,114,109,97,108,32,97,99,116,105,111,110,32,111,102,32,116,104,101,32,109,97,116,99,104,101,114,32,105,115,32,116,111,32,116,114,121,32,97,103,97,105,110,32,119,105,116,104,32,111,110,108,121,32,102,105,118,101,32,100,105,103,105,116,115,32,109,97,116,99,104,105,110,103,32,105,116,101,109,32,92,100,43,44,32,97,110,100,32,116,104,101,110,32,119,105,116,104,32,102,111,117,114,44,32,97,110,100,32,115,111,32,111,110,44,32,98,101,102,111,114,101,32,117,108,116,105,109,97,116,101,108,121,32,102,97,105,108,105,110,103,46,32,34,65,116,111,109,105,99,32,103,114,111,117,112,105,110,103,34,32,40,97,32,116,101,114,109,32,116,97,107,101,110,32,102,114,111,109,32,74,101,102,102,114,101,121,32,70,114,105,101,100,108,39,115,32,98,111,111,107,41,32,112,114,111,118,105,100,101,115,32,116,104,101,32,109,101,97,110,115,32,102,111,114,32,115,112,101,99,105,102,121,105,110,103,32,116,104,97,116,32,111,110,99,101,32,97,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,109,97,116,99,104,101,100,44,32,105,116,32,105,115,32,110,111,116,32,116,111,32,98,101,32,114,101,45,101,118,97,108,117,97,116,101,100,32,105,110,32,116,104,105,115,32,119,97,121,46>>]},{p,[],[<<73,102,32,97,116,111,109,105,99,32,103,114,111,117,112,105,110,103,32,105,115,32,117,115,101,100,32,102,111,114,32,116,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,44,32,116,104,101,32,109,97,116,99,104,101,114,32,103,105,118,101,115,32,117,112,32,105,109,109,101,100,105,97,116,101,108,121,32,111,110,32,102,97,105,108,105,110,103,32,116,111,32,109,97,116,99,104,32,34,102,111,111,34,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,46,32,84,104,101,32,110,111,116,97,116,105,111,110,32,105,115,32,97,32,107,105,110,100,32,111,102,32,115,112,101,99,105,97,108,32,112,97,114,101,110,116,104,101,115,105,115,44,32,115,116,97,114,116,105,110,103,32,119,105,116,104,32>>,{code,[],[<<40,63,62>>]},<<32,97,115,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,63,62,92,100,43,41,102,111,111>>]}]},{p,[],[<<84,104,105,115,32,107,105,110,100,32,111,102,32,112,97,114,101,110,116,104,101,115,105,115,32,34,108,111,99,107,115,32,117,112,34,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,116,32,99,111,110,116,97,105,110,115,32,111,110,99,101,32,105,116,32,104,97,115,32,109,97,116,99,104,101,100,44,32,97,110,100,32,97,32,102,97,105,108,117,114,101,32,102,117,114,116,104,101,114,32,105,110,116,111,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,112,114,101,118,101,110,116,101,100,32,102,114,111,109,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,105,116,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,112,97,115,116,32,105,116,32,116,111,32,112,114,101,118,105,111,117,115,32,105,116,101,109,115,44,32,104,111,119,101,118,101,114,44,32,119,111,114,107,115,32,97,115,32,110,111,114,109,97,108,46>>]},{p,[],[<<65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,100,101,115,99,114,105,112,116,105,111,110,32,105,115,32,116,104,97,116,32,97,32,115,117,98,112,97,116,116,101,114,110,32,111,102,32,116,104,105,115,32,116,121,112,101,32,109,97,116,99,104,101,115,32,116,104,101,32,115,116,114,105,110,103,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,110,32,105,100,101,110,116,105,99,97,108,32,115,116,97,110,100,97,108,111,110,101,32,112,97,116,116,101,114,110,32,119,111,117,108,100,32,109,97,116,99,104,44,32,105,102,32,97,110,99,104,111,114,101,100,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,105,110,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]},{p,[],[<<65,116,111,109,105,99,32,103,114,111,117,112,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,110,111,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,83,105,109,112,108,101,32,99,97,115,101,115,32,115,117,99,104,32,97,115,32,116,104,101,32,97,98,111,118,101,32,101,120,97,109,112,108,101,32,99,97,110,32,98,101,32,116,104,111,117,103,104,116,32,111,102,32,97,115,32,97,32,109,97,120,105,109,105,122,105,110,103,32,114,101,112,101,97,116,32,116,104,97,116,32,109,117,115,116,32,115,119,97,108,108,111,119,32,101,118,101,114,121,116,104,105,110,103,32,105,116,32,99,97,110,46,32,83,111,44,32,119,104,105,108,101,32,98,111,116,104,32,92,100,43,32,97,110,100,32,92,100,43,63,32,97,114,101,32,112,114,101,112,97,114,101,100,32,116,111,32,97,100,106,117,115,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,100,105,103,105,116,115,32,116,104,101,121,32,109,97,116,99,104,32,116,111,32,109,97,107,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,44,32>>,{code,[],[<<40,63,62,92,100,43,41>>]},<<32,99,97,110,32,111,110,108,121,32,109,97,116,99,104,32,97,110,32,101,110,116,105,114,101,32,115,101,113,117,101,110,99,101,32,111,102,32,100,105,103,105,116,115,46>>]},{p,[],[<<65,116,111,109,105,99,32,103,114,111,117,112,115,32,105,110,32,103,101,110,101,114,97,108,32,99,97,110,32,99,111,110,116,97,105,110,32,97,110,121,32,99,111,109,112,108,105,99,97,116,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,97,110,100,32,99,97,110,32,98,101,32,110,101,115,116,101,100,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,102,111,114,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,105,115,32,106,117,115,116,32,97,32,115,105,110,103,108,101,32,114,101,112,101,97,116,101,100,32,105,116,101,109,44,32,97,115,32,105,110,32,116,104,101,32,101,120,97,109,112,108,101,32,97,98,111,118,101,44,32,97,32,115,105,109,112,108,101,114,32,110,111,116,97,116,105,111,110,44,32,99,97,108,108,101,100,32,97,32,34,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,34,32,99,97,110,32,98,101,32,117,115,101,100,46,32,84,104,105,115,32,99,111,110,115,105,115,116,115,32,111,102,32,97,110,32,101,120,116,114,97,32,43,32,99,104,97,114,97,99,116,101,114,32,102,111,108,108,111,119,105,110,103,32,97,32,113,117,97,110,116,105,102,105,101,114,46,32,85,115,105,110,103,32,116,104,105,115,32,110,111,116,97,116,105,111,110,44,32,116,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,32,99,97,110,32,98,101,32,114,101,119,114,105,116,116,101,110,32,97,115>>]},{pre,[],[{code,[],[<<92,100,43,43,102,111,111>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,97,110,32,101,110,116,105,114,101,32,103,114,111,117,112,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,98,99,124,120,121,122,41,123,50,44,51,125,43>>]}]},{p,[],[<<80,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,97,108,119,97,121,115,32,103,114,101,101,100,121,59,32,116,104,101,32,115,101,116,116,105,110,103,32,111,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,103,114,101,101,100,121>>]},<<32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,121,32,97,114,101,32,97,32,99,111,110,118,101,110,105,101,110,116,32,110,111,116,97,116,105,111,110,32,102,111,114,32,116,104,101,32,115,105,109,112,108,101,114,32,102,111,114,109,115,32,111,102,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,72,111,119,101,118,101,114,44,32,116,104,101,114,101,32,105,115,32,110,111,32,100,105,102,102,101,114,101,110,99,101,32,105,110,32,116,104,101,32,109,101,97,110,105,110,103,32,111,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,97,110,100,32,116,104,101,32,101,113,117,105,118,97,108,101,110,116,32,97,116,111,109,105,99,32,103,114,111,117,112,44,32,98,117,116,32,116,104,101,114,101,32,99,97,110,32,98,101,32,97,32,112,101,114,102,111,114,109,97,110,99,101,32,100,105,102,102,101,114,101,110,99,101,59,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,115,32,97,114,101,32,112,114,111,98,97,98,108,121,32,115,108,105,103,104,116,108,121,32,102,97,115,116,101,114,46>>]},{p,[],[<<84,104,101,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,115,121,110,116,97,120,32,105,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32,116,111,32,116,104,101,32,80,101,114,108,32,53,46,56,32,115,121,110,116,97,120,46,32,74,101,102,102,114,101,121,32,70,114,105,101,100,108,32,111,114,105,103,105,110,97,116,101,100,32,116,104,101,32,105,100,101,97,32,40,97,110,100,32,116,104,101,32,110,97,109,101,41,32,105,110,32,116,104,101,32,102,105,114,115,116,32,101,100,105,116,105,111,110,32,111,102,32,104,105,115,32,98,111,111,107,46,32,77,105,107,101,32,77,99,67,108,111,115,107,101,121,32,108,105,107,101,100,32,105,116,44,32,115,111,32,105,109,112,108,101,109,101,110,116,101,100,32,105,116,32,119,104,101,110,32,104,101,32,98,117,105,108,116,32,116,104,101,32,83,117,110,32,74,97,118,97,32,112,97,99,107,97,103,101,44,32,97,110,100,32,80,67,82,69,32,99,111,112,105,101,100,32,105,116,32,102,114,111,109,32,116,104,101,114,101,46,32,73,116,32,117,108,116,105,109,97,116,101,108,121,32,102,111,117,110,100,32,105,116,115,32,119,97,121,32,105,110,116,111,32,80,101,114,108,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,48,46>>]},{p,[],[<<80,67,82,69,32,104,97,115,32,97,110,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,34,112,111,115,115,101,115,115,105,102,105,101,115,34,32,99,101,114,116,97,105,110,32,115,105,109,112,108,101,32,112,97,116,116,101,114,110,32,99,111,110,115,116,114,117,99,116,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,115,101,113,117,101,110,99,101,32,65,43,66,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,65,43,43,66,44,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,112,111,105,110,116,32,105,110,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,65,58,115,32,119,104,101,110,32,66,32,109,117,115,116,32,102,111,108,108,111,119,46>>]},{p,[],[<<87,104,101,110,32,97,32,112,97,116,116,101,114,110,32,99,111,110,116,97,105,110,115,32,97,110,32,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,32,105,110,115,105,100,101,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,99,97,110,32,105,116,115,101,108,102,32,98,101,32,114,101,112,101,97,116,101,100,32,97,110,32,117,110,108,105,109,105,116,101,100,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,44,32,116,104,101,32,117,115,101,32,111,102,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,105,115,32,116,104,101,32,111,110,108,121,32,119,97,121,32,116,111,32,97,118,111,105,100,32,115,111,109,101,32,102,97,105,108,105,110,103,32,109,97,116,99,104,101,115,32,116,97,107,105,110,103,32,97,32,108,111,110,103,32,116,105,109,101,46,32,84,104,101,32,112,97,116,116,101,114,110>>]},{pre,[],[{code,[],[<<40,92,68,43,124,60,92,100,43,62,41,42,91,33,63,93>>]}]},{p,[],[<<109,97,116,99,104,101,115,32,97,110,32,117,110,108,105,109,105,116,101,100,32,110,117,109,98,101,114,32,111,102,32,115,117,98,115,116,114,105,110,103,115,32,116,104,97,116,32,101,105,116,104,101,114,32,99,111,110,115,105,115,116,32,111,102,32,110,111,110,45,100,105,103,105,116,115,44,32,111,114,32,100,105,103,105,116,115,32,101,110,99,108,111,115,101,100,32,105,110,32,60,62,44,32,102,111,108,108,111,119,101,100,32,98,121,32,33,32,111,114,32,63,46,32,87,104,101,110,32,105,116,32,109,97,116,99,104,101,115,44,32,105,116,32,114,117,110,115,32,113,117,105,99,107,108,121,46,32,72,111,119,101,118,101,114,44,32,105,102,32,105,116,32,105,115,32,97,112,112,108,105,101,100,32,116,111>>]},{pre,[],[{code,[],[<<97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97>>]}]},{p,[],[<<105,116,32,116,97,107,101,115,32,97,32,108,111,110,103,32,116,105,109,101,32,98,101,102,111,114,101,32,114,101,112,111,114,116,105,110,103,32,102,97,105,108,117,114,101,46,32,84,104,105,115,32,105,115,32,98,101,99,97,117,115,101,32,116,104,101,32,115,116,114,105,110,103,32,99,97,110,32,98,101,32,100,105,118,105,100,101,100,32,98,101,116,119,101,101,110,32,116,104,101,32,105,110,116,101,114,110,97,108,32,92,68,43,32,114,101,112,101,97,116,32,97,110,100,32,116,104,101,32,101,120,116,101,114,110,97,108,32,42,32,114,101,112,101,97,116,32,105,110,32,109,97,110,121,32,119,97,121,115,44,32,97,110,100,32,97,108,108,32,109,117,115,116,32,98,101,32,116,114,105,101,100,46,32,40,84,104,101,32,101,120,97,109,112,108,101,32,117,115,101,115,32,91,33,63,93,32,114,97,116,104,101,114,32,116,104,97,110,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,97,116,32,116,104,101,32,101,110,100,44,32,97,115,32,98,111,116,104,32,80,67,82,69,32,97,110,100,32,80,101,114,108,32,104,97,118,101,32,97,110,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,97,108,108,111,119,115,32,102,111,114,32,102,97,115,116,32,102,97,105,108,117,114,101,32,119,104,101,110,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,105,115,32,117,115,101,100,46,32,84,104,101,121,32,114,101,109,101,109,98,101,114,32,116,104,101,32,108,97,115,116,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,116,104,97,116,32,105,115,32,114,101,113,117,105,114,101,100,32,102,111,114,32,97,32,109,97,116,99,104,44,32,97,110,100,32,102,97,105,108,32,101,97,114,108,121,32,105,102,32,105,116,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,115,116,114,105,110,103,46,41,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,99,104,97,110,103,101,100,32,115,111,32,116,104,97,116,32,105,116,32,117,115,101,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,44,32,108,105,107,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,115,101,113,117,101,110,99,101,115,32,111,102,32,110,111,110,45,100,105,103,105,116,115,32,99,97,110,110,111,116,32,98,101,32,98,114,111,107,101,110,44,32,97,110,100,32,102,97,105,108,117,114,101,32,104,97,112,112,101,110,115,32,113,117,105,99,107,108,121,58>>]},{pre,[],[{code,[],[<<40,40,63,62,92,68,43,41,124,60,92,100,43,62,41,42,91,33,63,93>>]}]},{a,[{id,<<115,101,99,116,49,54>>}],[]},{h2,[],[<<66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]},{p,[],[<<79,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,97,32,98,97,99,107,115,108,97,115,104,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,100,105,103,105,116,32,62,32,48,32,40,97,110,100,32,112,111,115,115,105,98,108,121,32,102,117,114,116,104,101,114,32,100,105,103,105,116,115,41,32,105,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,101,97,114,108,105,101,114,32,40,116,104,97,116,32,105,115,44,32,116,111,32,105,116,115,32,108,101,102,116,41,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,44,32,112,114,111,118,105,100,101,100,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,32,116,104,97,116,32,109,97,110,121,32,112,114,101,118,105,111,117,115,32,99,97,112,116,117,114,105,110,103,32,108,101,102,116,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,100,101,99,105,109,97,108,32,110,117,109,98,101,114,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,98,97,99,107,115,108,97,115,104,32,105,115,32,60,32,49,48,44,32,105,116,32,105,115,32,97,108,119,97,121,115,32,116,97,107,101,110,32,97,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,97,110,100,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,97,114,101,32,110,111,116,32,116,104,97,116,32,109,97,110,121,32,99,97,112,116,117,114,105,110,103,32,108,101,102,116,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,101,110,116,105,114,101,32,112,97,116,116,101,114,110,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,114,101,102,101,114,101,110,99,101,100,32,100,111,32,110,101,101,100,32,110,111,116,32,98,101,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,110,117,109,98,101,114,115,32,60,32,49,48,46,32,65,32,34,102,111,114,119,97,114,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,34,32,111,102,32,116,104,105,115,32,116,121,112,101,32,99,97,110,32,109,97,107,101,32,115,101,110,115,101,32,119,104,101,110,32,97,32,114,101,112,101,116,105,116,105,111,110,32,105,115,32,105,110,118,111,108,118,101,100,32,97,110,100,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,116,111,32,116,104,101,32,114,105,103,104,116,32,104,97,115,32,112,97,114,116,105,99,105,112,97,116,101,100,32,105,110,32,97,110,32,101,97,114,108,105,101,114,32,105,116,101,114,97,116,105,111,110,46>>]},{p,[],[<<73,116,32,105,115,32,110,111,116,32,112,111,115,115,105,98,108,101,32,116,111,32,104,97,118,101,32,97,32,110,117,109,101,114,105,99,97,108,32,34,102,111,114,119,97,114,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,34,32,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,119,104,111,115,101,32,110,117,109,98,101,114,32,105,115,32,49,48,32,111,114,32,109,111,114,101,32,117,115,105,110,103,32,116,104,105,115,32,115,121,110,116,97,120,44,32,97,115,32,97,32,115,101,113,117,101,110,99,101,32,115,117,99,104,32,97,115,32,92,53,48,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,97,32,99,104,97,114,97,99,116,101,114,32,100,101,102,105,110,101,100,32,105,110,32,111,99,116,97,108,46,32,70,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,32,111,102,32,116,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,97,32,98,97,99,107,115,108,97,115,104,44,32,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,111,110,95,112,114,105,110,116,105,110,103,95,99,104,97,114,97,99,116,101,114,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,111,110,45,80,114,105,110,116,105,110,103,32,67,104,97,114,97,99,116,101,114,115>>]},<<32,101,97,114,108,105,101,114,46,32,84,104,101,114,101,32,105,115,32,110,111,32,115,117,99,104,32,112,114,111,98,108,101,109,32,119,104,101,110,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,117,115,101,100,46,32,65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,97,110,121,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,112,111,115,115,105,98,108,101,32,117,115,105,110,103,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,40,115,101,101,32,98,101,108,111,119,41,46>>]},{p,[],[<<65,110,111,116,104,101,114,32,119,97,121,32,116,111,32,97,118,111,105,100,32,116,104,101,32,97,109,98,105,103,117,105,116,121,32,105,110,104,101,114,101,110,116,32,105,110,32,116,104,101,32,117,115,101,32,111,102,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,97,32,98,97,99,107,115,108,97,115,104,32,105,115,32,116,111,32,117,115,101,32,116,104,101,32,92,103,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,46,32,84,104,105,115,32,101,115,99,97,112,101,32,109,117,115,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,117,110,115,105,103,110,101,100,32,110,117,109,98,101,114,32,111,114,32,97,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,44,32,111,112,116,105,111,110,97,108,108,121,32,101,110,99,108,111,115,101,100,32,105,110,32,98,114,97,99,101,115,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,115,32,97,114,101,32,105,100,101,110,116,105,99,97,108,58>>]},{pre,[],[{code,[],[<<40,114,105,110,103,41,44,32,92,49,10,40,114,105,110,103,41,44,32,92,103,49,10,40,114,105,110,103,41,44,32,92,103,123,49,125>>]}]},{p,[],[<<65,110,32,117,110,115,105,103,110,101,100,32,110,117,109,98,101,114,32,115,112,101,99,105,102,105,101,115,32,97,110,32,97,98,115,111,108,117,116,101,32,114,101,102,101,114,101,110,99,101,32,119,105,116,104,111,117,116,32,116,104,101,32,97,109,98,105,103,117,105,116,121,32,116,104,97,116,32,105,115,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,111,108,100,101,114,32,115,121,110,116,97,120,46,32,73,116,32,105,115,32,97,108,115,111,32,117,115,101,102,117,108,32,119,104,101,110,32,108,105,116,101,114,97,108,32,100,105,103,105,116,115,32,102,111,108,108,111,119,32,116,104,101,32,114,101,102,101,114,101,110,99,101,46,32,65,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,32,105,115,32,97,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,98,99,40,100,101,102,41,103,104,105,41,92,103,123,45,49,125>>]}]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,32,92,103,123,45,49,125,32,105,115,32,97,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,115,116,97,114,116,101,100,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,98,101,102,111,114,101,32,92,103,44,32,116,104,97,116,32,105,115,44,32,105,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,92,50,32,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,46,32,83,105,109,105,108,97,114,108,121,44,32,92,103,123,45,50,125,32,119,111,117,108,100,32,98,101,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,92,49,46,32,84,104,101,32,117,115,101,32,111,102,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,115,32,99,97,110,32,98,101,32,104,101,108,112,102,117,108,32,105,110,32,108,111,110,103,32,112,97,116,116,101,114,110,115,44,32,97,110,100,32,97,108,115,111,32,105,110,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,99,114,101,97,116,101,100,32,98,121,32,106,111,105,110,105,110,103,32,102,114,97,103,109,101,110,116,115,32,99,111,110,116,97,105,110,105,110,103,32,114,101,102,101,114,101,110,99,101,115,32,119,105,116,104,105,110,32,116,104,101,109,115,101,108,118,101,115,46>>]},{p,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,109,97,116,99,104,101,115,32,119,104,97,116,101,118,101,114,32,109,97,116,99,104,101,100,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,114,97,116,104,101,114,32,116,104,97,110,32,97,110,121,116,104,105,110,103,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,116,115,101,108,102,32,40,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,50,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,117,98,112,97,116,116,101,114,110,32,97,115,32,83,117,98,114,111,117,116,105,110,101,115>>]},<<32,100,101,115,99,114,105,98,101,115,32,97,32,119,97,121,32,111,102,32,100,111,105,110,103,32,116,104,97,116,41,46,32,83,111,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,115,101,110,115,101,32,97,110,100,32,115,101,110,115,105,98,105,108,105,116,121,34,32,97,110,100,32,34,114,101,115,112,111,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,44,32,98,117,116,32,110,111,116,32,34,115,101,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,58>>]},{pre,[],[{code,[],[<<40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,92,49,105,98,105,108,105,116,121>>]}]},{p,[],[<<73,102,32,99,97,115,101,102,117,108,32,109,97,116,99,104,105,110,103,32,105,115,32,105,110,32,102,111,114,99,101,32,97,116,32,116,104,101,32,116,105,109,101,32,111,102,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,44,32,116,104,101,32,99,97,115,101,32,111,102,32,108,101,116,116,101,114,115,32,105,115,32,114,101,108,101,118,97,110,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,114,97,104,32,114,97,104,34,32,97,110,100,32,34,82,65,72,32,82,65,72,34,44,32,98,117,116,32,110,111,116,32,34,82,65,72,32,114,97,104,34,44,32,97,108,116,104,111,117,103,104,32,116,104,101,32,111,114,105,103,105,110,97,108,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,109,97,116,99,104,101,100,32,99,97,115,101,108,101,115,115,108,121,58>>]},{pre,[],[{code,[],[<<40,40,63,105,41,114,97,104,41,92,115,43,92,49>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,32,111,102,32,119,114,105,116,105,110,103,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46,32,84,104,101,32,46,78,69,84,32,115,121,110,116,97,120,32>>,{code,[],[<<92,107,123,110,97,109,101,125>>]},<<32,97,110,100,32,116,104,101,32,80,101,114,108,32,115,121,110,116,97,120,32>>,{code,[],[<<92,107,60,110,97,109,101,62>>]},<<32,111,114,32>>,{code,[],[<<92,107,39,110,97,109,101,39>>]},<<32,97,114,101,32,115,117,112,112,111,114,116,101,100,44,32,97,115,32,105,115,32,116,104,101,32,80,121,116,104,111,110,32,115,121,110,116,97,120,32>>,{code,[],[<<40,63,80,61,110,97,109,101,41>>]},<<46,32,84,104,101,32,117,110,105,102,105,101,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,115,121,110,116,97,120,32,105,110,32,80,101,114,108,32,53,46,49,48,44,32,105,110,32,119,104,105,99,104,32,92,103,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,98,111,116,104,32,110,117,109,101,114,105,99,32,97,110,100,32,110,97,109,101,100,32,114,101,102,101,114,101,110,99,101,115,44,32,105,115,32,97,108,115,111,32,115,117,112,112,111,114,116,101,100,46,32,84,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,32,99,97,110,32,98,101,32,114,101,119,114,105,116,116,101,110,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,119,97,121,115,58>>]},{pre,[],[{code,[],[<<40,63,60,112,49,62,40,63,105,41,114,97,104,41,92,115,43,92,107,60,112,49,62,10,40,63,39,112,49,39,40,63,105,41,114,97,104,41,92,115,43,92,107,123,112,49,125,10,40,63,80,60,112,49,62,40,63,105,41,114,97,104,41,92,115,43,40,63,80,61,112,49,41,10,40,63,60,112,49,62,40,63,105,41,114,97,104,41,92,115,43,92,103,123,112,49,125>>]}]},{p,[],[<<65,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,105,115,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32,110,97,109,101,32,99,97,110,32,97,112,112,101,97,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,98,101,102,111,114,101,32,111,114,32,97,102,116,101,114,32,116,104,101,32,114,101,102,101,114,101,110,99,101,46>>]},{p,[],[<<84,104,101,114,101,32,99,97,110,32,98,101,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,115,97,109,101,32,115,117,98,112,97,116,116,101,114,110,46,32,73,102,32,97,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,110,111,116,32,98,101,101,110,32,117,115,101,100,32,105,110,32,97,32,112,97,114,116,105,99,117,108,97,114,32,109,97,116,99,104,44,32,97,110,121,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,105,116,32,97,108,119,97,121,115,32,102,97,105,108,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,97,108,119,97,121,115,32,102,97,105,108,115,32,105,102,32,105,116,32,115,116,97,114,116,115,32,116,111,32,109,97,116,99,104,32,34,97,34,32,114,97,116,104,101,114,32,116,104,97,110,32,34,98,99,34,58>>]},{pre,[],[{code,[],[<<40,97,124,40,98,99,41,41,92,50>>]}]},{p,[],[<<65,115,32,116,104,101,114,101,32,99,97,110,32,98,101,32,109,97,110,121,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,97,108,108,32,100,105,103,105,116,115,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,98,97,99,107,115,108,97,115,104,32,97,114,101,32,116,97,107,101,110,32,97,115,32,112,97,114,116,32,111,102,32,97,32,112,111,116,101,110,116,105,97,108,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,110,117,109,98,101,114,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,99,111,110,116,105,110,117,101,115,32,119,105,116,104,32,97,32,100,105,103,105,116,32,99,104,97,114,97,99,116,101,114,44,32,115,111,109,101,32,100,101,108,105,109,105,116,101,114,32,109,117,115,116,32,98,101,32,117,115,101,100,32,116,111,32,116,101,114,109,105,110,97,116,101,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,105,115,32,115,101,116,44,32,116,104,105,115,32,99,97,110,32,98,101,32,119,104,105,116,101,115,112,97,99,101,46,32,79,116,104,101,114,119,105,115,101,32,97,110,32,101,109,112,116,121,32,99,111,109,109,101,110,116,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,57>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,111,109,109,101,110,116,115>>]},<<41,32,99,97,110,32,98,101,32,117,115,101,100,46>>]},{p,[],[{em,[],[<<82,101,99,117,114,115,105,118,101,32,66,97,99,107,32,82,101,102,101,114,101,110,99,101,115>>]}]},{p,[],[<<65,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,116,104,97,116,32,111,99,99,117,114,115,32,105,110,115,105,100,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,111,32,119,104,105,99,104,32,105,116,32,114,101,102,101,114,115,32,102,97,105,108,115,32,119,104,101,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,102,105,114,115,116,32,117,115,101,100,44,32,115,111,44,32,102,111,114,32,101,120,97,109,112,108,101,44,32,40,97,92,49,41,32,110,101,118,101,114,32,109,97,116,99,104,101,115,46,32,72,111,119,101,118,101,114,44,32,115,117,99,104,32,114,101,102,101,114,101,110,99,101,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,32,105,110,115,105,100,101,32,114,101,112,101,97,116,101,100,32,115,117,98,112,97,116,116,101,114,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,34,97,34,115,32,97,110,100,32,97,108,115,111,32,34,97,98,97,34,44,32,34,97,98,97,98,98,97,97,34,44,32,97,110,100,32,115,111,32,111,110,58>>]},{pre,[],[{code,[],[<<40,97,124,98,92,49,41,43>>]}]},{p,[],[<<65,116,32,101,97,99,104,32,105,116,101,114,97,116,105,111,110,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,44,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,109,97,116,99,104,101,115,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,115,116,114,105,110,103,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,112,114,101,118,105,111,117,115,32,105,116,101,114,97,116,105,111,110,46,32,73,110,32,111,114,100,101,114,32,102,111,114,32,116,104,105,115,32,116,111,32,119,111,114,107,44,32,116,104,101,32,112,97,116,116,101,114,110,32,109,117,115,116,32,98,101,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,102,105,114,115,116,32,105,116,101,114,97,116,105,111,110,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32,109,97,116,99,104,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,46,32,84,104,105,115,32,99,97,110,32,98,101,32,100,111,110,101,32,117,115,105,110,103,32,97,108,116,101,114,110,97,116,105,111,110,44,32,97,115,32,105,110,32,116,104,101,32,101,120,97,109,112,108,101,32,97,98,111,118,101,44,32,111,114,32,98,121,32,97,32,113,117,97,110,116,105,102,105,101,114,32,119,105,116,104,32,97,32,109,105,110,105,109,117,109,32,111,102,32,122,101,114,111,46>>]},{p,[],[<<66,97,99,107,32,114,101,102,101,114,101,110,99,101,115,32,111,102,32,116,104,105,115,32,116,121,112,101,32,99,97,117,115,101,32,116,104,101,32,103,114,111,117,112,32,116,104,97,116,32,116,104,101,121,32,114,101,102,101,114,101,110,99,101,32,116,111,32,98,101,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,79,110,99,101,32,116,104,101,32,119,104,111,108,101,32,103,114,111,117,112,32,104,97,115,32,98,101,101,110,32,109,97,116,99,104,101,100,44,32,97,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,99,97,110,110,111,116,32,99,97,117,115,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,116,104,101,32,109,105,100,100,108,101,32,111,102,32,116,104,101,32,103,114,111,117,112,46>>]},{a,[{id,<<115,101,99,116,49,55>>}],[]},{h2,[],[<<65,115,115,101,114,116,105,111,110,115>>]},{p,[],[<<65,110,32,97,115,115,101,114,116,105,111,110,32,105,115,32,97,32,116,101,115,116,32,111,110,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,102,111,108,108,111,119,105,110,103,32,111,114,32,112,114,101,99,101,100,105,110,103,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,99,111,110,115,117,109,101,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,115,105,109,112,108,101,32,97,115,115,101,114,116,105,111,110,115,32,99,111,100,101,100,32,97,115,32,92,98,44,32,92,66,44,32,92,65,44,32,92,71,44,32,92,90,44,32,92,122,44,32,94,44,32,97,110,100,32,36,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,115,101,99,116,105,111,110,115,46>>]},{p,[],[<<77,111,114,101,32,99,111,109,112,108,105,99,97,116,101,100,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,32,99,111,100,101,100,32,97,115,32,115,117,98,112,97,116,116,101,114,110,115,46,32,84,104,101,114,101,32,97,114,101,32,116,119,111,32,107,105,110,100,115,58,32,116,104,111,115,101,32,116,104,97,116,32,108,111,111,107,32,97,104,101,97,100,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,110,100,32,116,104,111,115,101,32,116,104,97,116,32,108,111,111,107,32,98,101,104,105,110,100,32,105,116,46,32,65,110,32,97,115,115,101,114,116,105,111,110,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,109,97,116,99,104,101,100,32,105,110,32,116,104,101,32,110,111,114,109,97,108,32,119,97,121,44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,100,111,101,115,32,110,111,116,32,99,97,117,115,101,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,32,116,111,32,98,101,32,99,104,97,110,103,101,100,46>>]},{p,[],[<<65,115,115,101,114,116,105,111,110,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,110,111,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,46,32,73,102,32,115,117,99,104,32,97,110,32,97,115,115,101,114,116,105,111,110,32,99,111,110,116,97,105,110,115,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,119,105,116,104,105,110,32,105,116,44,32,116,104,101,115,101,32,97,114,101,32,99,111,117,110,116,101,100,32,102,111,114,32,116,104,101,32,112,117,114,112,111,115,101,115,32,111,102,32,110,117,109,98,101,114,105,110,103,32,116,104,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,46,32,72,111,119,101,118,101,114,44,32,115,117,98,115,116,114,105,110,103,32,99,97,112,116,117,114,105,110,103,32,105,115,32,100,111,110,101,32,111,110,108,121,32,102,111,114,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,40,80,101,114,108,32,115,111,109,101,116,105,109,101,115,44,32,98,117,116,32,110,111,116,32,97,108,119,97,121,115,44,32,112,101,114,102,111,114,109,115,32,99,97,112,116,117,114,105,110,103,32,105,110,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,41>>]},{'div',[{class,<<119,97,114,110,105,110,103>>}],[{p,[],[<<73,102,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,99,111,110,116,97,105,110,105,110,103,32,111,110,101,32,111,114,32,109,111,114,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,115,117,99,99,101,101,100,115,44,32,98,117,116,32,102,97,105,108,117,114,101,32,116,111,32,109,97,116,99,104,32,108,97,116,101,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,99,97,117,115,101,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,111,118,101,114,32,116,104,105,115,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,99,97,112,116,117,114,101,115,32,119,105,116,104,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,97,114,101,32,114,101,115,101,116,32,111,110,108,121,32,105,102,32,110,111,32,104,105,103,104,101,114,32,110,117,109,98,101,114,101,100,32,99,97,112,116,117,114,101,115,32,97,114,101,32,97,108,114,101,97,100,121,32,115,101,116,46,32,84,104,105,115,32,105,115,44,32,117,110,102,111,114,116,117,110,97,116,101,108,121,44,32,97,32,102,117,110,100,97,109,101,110,116,97,108,32,108,105,109,105,116,97,116,105,111,110,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,44,32,97,110,100,32,97,115,32,80,67,82,69,49,32,105,115,32,110,111,119,32,105,110,32,109,97,105,110,116,101,110,97,110,99,101,45,111,110,108,121,32,115,116,97,116,117,115,44,32,105,116,32,105,115,32,117,110,108,105,107,101,108,121,32,101,118,101,114,32,116,111,32,99,104,97,110,103,101,46>>]}]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,80,101,114,108,44,32,97,115,115,101,114,116,105,111,110,32,115,117,98,112,97,116,116,101,114,110,115,32,99,97,110,32,98,101,32,114,101,112,101,97,116,101,100,46,32,72,111,119,101,118,101,114,44,32,105,116,32,109,97,107,101,115,32,110,111,32,115,101,110,115,101,32,116,111,32,97,115,115,101,114,116,32,116,104,101,32,115,97,109,101,32,116,104,105,110,103,32,109,97,110,121,32,116,105,109,101,115,44,32,116,104,101,32,115,105,100,101,32,101,102,102,101,99,116,32,111,102,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,111,99,99,97,115,105,111,110,97,108,108,121,32,98,101,32,117,115,101,102,117,108,46,32,73,110,32,112,114,97,99,116,105,99,101,44,32,116,104,101,114,101,32,97,114,101,32,111,110,108,121,32,116,104,114,101,101,32,99,97,115,101,115,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,123,48,125,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,105,115,32,110,101,118,101,114,32,111,98,101,121,101,100,32,100,117,114,105,110,103,32,109,97,116,99,104,105,110,103,46,32,72,111,119,101,118,101,114,44,32,105,116,32,99,97,110,32,99,111,110,116,97,105,110,32,105,110,116,101,114,110,97,108,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,103,114,111,117,112,115,32,116,104,97,116,32,97,114,101,32,99,97,108,108,101,100,32,102,114,111,109,32,101,108,115,101,119,104,101,114,101,32,116,104,114,111,117,103,104,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,101,99,104,97,110,105,115,109,46>>]}]},{li,[],[{p,[],[<<73,102,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,123,48,44,110,125,44,32,119,104,101,114,101,32,110,32,62,32,48,44,32,105,116,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,105,102,32,105,116,32,119,97,115,32,123,48,44,49,125,46,32,65,116,32,114,117,110,116,105,109,101,44,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,32,105,115,32,116,114,105,101,100,32,119,105,116,104,32,97,110,100,32,119,105,116,104,111,117,116,32,116,104,101,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,111,114,100,101,114,32,100,101,112,101,110,100,115,32,111,110,32,116,104,101,32,103,114,101,101,100,105,110,101,115,115,32,111,102,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,46>>]}]},{li,[],[{p,[],[<<73,102,32,116,104,101,32,109,105,110,105,109,117,109,32,114,101,112,101,116,105,116,105,111,110,32,105,115,32,62,32,48,44,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,32,97,115,115,101,114,116,105,111,110,32,105,115,32,111,98,101,121,101,100,32,111,110,108,121,32,111,110,99,101,32,119,104,101,110,32,101,110,99,111,117,110,116,101,114,101,100,32,100,117,114,105,110,103,32,109,97,116,99,104,105,110,103,46>>]}]}]},{p,[],[{em,[],[<<76,111,111,107,97,104,101,97,100,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<76,111,111,107,97,104,101,97,100,32,97,115,115,101,114,116,105,111,110,115,32,115,116,97,114,116,32,119,105,116,104,32,40,63,61,32,102,111,114,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,97,110,100,32,40,63,33,32,102,111,114,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,32,119,111,114,100,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,115,101,109,105,99,111,108,111,110,44,32,98,117,116,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,116,104,101,32,115,101,109,105,99,111,108,111,110,32,105,110,32,116,104,101,32,109,97,116,99,104,58>>]},{pre,[],[{code,[],[<<92,119,43,40,63,61,59,41>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,110,121,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,102,111,111,34,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32,34,98,97,114,34,58>>]},{pre,[],[{code,[],[<<102,111,111,40,63,33,98,97,114,41>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,97,112,112,97,114,101,110,116,108,121,32,115,105,109,105,108,97,114,32,112,97,116,116,101,114,110>>]},{pre,[],[{code,[],[<<40,63,33,102,111,111,41,98,97,114>>]}]},{p,[],[<<100,111,101,115,32,110,111,116,32,102,105,110,100,32,97,110,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,114,34,32,116,104,97,116,32,105,115,32,112,114,101,99,101,100,101,100,32,98,121,32,115,111,109,101,116,104,105,110,103,32,111,116,104,101,114,32,116,104,97,110,32,34,102,111,111,34,46,32,73,116,32,102,105,110,100,115,32,97,110,121,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,114,34,32,119,104,97,116,115,111,101,118,101,114,44,32,97,115,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,40,63,33,102,111,111,41,32,105,115,32,97,108,119,97,121,115,32,116,114,117,101,32,119,104,101,110,32,116,104,101,32,110,101,120,116,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,34,98,97,114,34,46,32,65,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,105,115,32,110,101,101,100,101,100,32,116,111,32,97,99,104,105,101,118,101,32,116,104,101,32,111,116,104,101,114,32,101,102,102,101,99,116,46>>]},{p,[],[<<73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,102,111,114,99,101,32,97,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,97,116,32,115,111,109,101,32,112,111,105,110,116,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,116,104,101,32,109,111,115,116,32,99,111,110,118,101,110,105,101,110,116,32,119,97,121,32,116,111,32,100,111,32,105,116,32,105,115,32,119,105,116,104,32,40,63,33,41,44,32,97,115,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,46,32,83,111,44,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,114,101,113,117,105,114,101,115,32,116,104,101,114,101,32,105,115,32,110,111,116,32,116,111,32,98,101,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,109,117,115,116,32,97,108,119,97,121,115,32,102,97,105,108,46,32,84,104,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,111,110,116,114,111,108,32,118,101,114,98,32,40,42,70,65,73,76,41,32,111,114,32,40,42,70,41,32,105,115,32,97,32,115,121,110,111,110,121,109,32,102,111,114,32,40,63,33,41,46>>]},{p,[],[{em,[],[<<76,111,111,107,98,101,104,105,110,100,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<76,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,115,116,97,114,116,32,119,105,116,104,32,40,63,60,61,32,102,111,114,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,97,110,100,32,40,63,60,33,32,102,111,114,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,110,100,115,32,97,110,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,114,34,32,116,104,97,116,32,105,115,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,34,102,111,111,34,58>>]},{pre,[],[{code,[],[<<40,63,60,33,102,111,111,41,98,97,114>>]}]},{p,[],[<<84,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,97,114,101,32,114,101,115,116,114,105,99,116,101,100,32,115,117,99,104,32,116,104,97,116,32,97,108,108,32,116,104,101,32,115,116,114,105,110,103,115,32,105,116,32,109,97,116,99,104,101,115,32,109,117,115,116,32,104,97,118,101,32,97,32,102,105,120,101,100,32,108,101,110,103,116,104,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,114,101,32,97,114,101,32,109,97,110,121,32,116,111,112,45,108,101,118,101,108,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,116,104,101,121,32,100,111,32,110,111,116,32,97,108,108,32,104,97,118,101,32,116,111,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,102,105,120,101,100,32,108,101,110,103,116,104,46,32,84,104,117,115,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,112,101,114,109,105,116,116,101,100,58>>]},{pre,[],[{code,[],[<<40,63,60,61,98,117,108,108,111,99,107,124,100,111,110,107,101,121,41>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,117,115,101,115,32,97,110,32,101,114,114,111,114,32,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,58>>]},{pre,[],[{code,[],[<<40,63,60,33,100,111,103,115,63,124,99,97,116,115,63,41>>]}]},{p,[],[<<66,114,97,110,99,104,101,115,32,116,104,97,116,32,109,97,116,99,104,32,100,105,102,102,101,114,101,110,116,32,108,101,110,103,116,104,32,115,116,114,105,110,103,115,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,111,110,108,121,32,97,116,32,116,104,101,32,116,111,112,45,108,101,118,101,108,32,111,102,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,46,32,84,104,105,115,32,105,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32,99,111,109,112,97,114,101,100,32,119,105,116,104,32,80,101,114,108,44,32,119,104,105,99,104,32,114,101,113,117,105,114,101,115,32,97,108,108,32,98,114,97,110,99,104,101,115,32,116,111,32,109,97,116,99,104,32,116,104,101,32,115,97,109,101,32,108,101,110,103,116,104,32,111,102,32,115,116,114,105,110,103,46,32,65,110,32,97,115,115,101,114,116,105,111,110,32,115,117,99,104,32,97,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,115,32,110,111,116,32,112,101,114,109,105,116,116,101,100,44,32,97,115,32,105,116,115,32,115,105,110,103,108,101,32,116,111,112,45,108,101,118,101,108,32,98,114,97,110,99,104,32,99,97,110,32,109,97,116,99,104,32,116,119,111,32,100,105,102,102,101,114,101,110,116,32,108,101,110,103,116,104,115,58>>]},{pre,[],[{code,[],[<<40,63,60,61,97,98,40,99,124,100,101,41,41>>]}]},{p,[],[<<72,111,119,101,118,101,114,44,32,105,116,32,105,115,32,97,99,99,101,112,116,97,98,108,101,32,116,111,32,80,67,82,69,32,105,102,32,114,101,119,114,105,116,116,101,110,32,116,111,32,117,115,101,32,116,119,111,32,116,111,112,45,108,101,118,101,108,32,98,114,97,110,99,104,101,115,58>>]},{pre,[],[{code,[],[<<40,63,60,61,97,98,99,124,97,98,100,101,41>>]}]},{p,[],[<<83,111,109,101,116,105,109,101,115,32,116,104,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,92,75,32,40,115,101,101,32,97,98,111,118,101,41,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,111,102,32,97,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,116,111,32,103,101,116,32,114,111,117,110,100,32,116,104,101,32,102,105,120,101,100,45,108,101,110,103,116,104,32,114,101,115,116,114,105,99,116,105,111,110,46>>]},{p,[],[<<84,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,105,115,44,32,102,111,114,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,44,32,116,111,32,109,111,118,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,98,97,99,107,32,116,101,109,112,111,114,97,114,105,108,121,32,98,121,32,116,104,101,32,102,105,120,101,100,32,108,101,110,103,116,104,32,97,110,100,32,116,104,101,110,32,116,114,121,32,116,111,32,109,97,116,99,104,46,32,73,102,32,116,104,101,114,101,32,97,114,101,32,105,110,115,117,102,102,105,99,105,101,110,116,32,99,104,97,114,97,99,116,101,114,115,32,98,101,102,111,114,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,102,97,105,108,115,46>>]},{p,[],[<<73,110,32,97,32,85,84,70,32,109,111,100,101,44,32,80,67,82,69,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,116,104,101,32,92,67,32,101,115,99,97,112,101,32,40,119,104,105,99,104,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,100,97,116,97,32,117,110,105,116,32,101,118,101,110,32,105,110,32,97,32,85,84,70,32,109,111,100,101,41,32,116,111,32,97,112,112,101,97,114,32,105,110,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,44,32,97,115,32,105,116,32,109,97,107,101,115,32,105,116,32,105,109,112,111,115,115,105,98,108,101,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,108,111,111,107,98,101,104,105,110,100,46,32,84,104,101,32,92,88,32,97,110,100,32,92,82,32,101,115,99,97,112,101,115,44,32,119,104,105,99,104,32,99,97,110,32,109,97,116,99,104,32,100,105,102,102,101,114,101,110,116,32,110,117,109,98,101,114,115,32,111,102,32,100,97,116,97,32,117,110,105,116,115,44,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,101,105,116,104,101,114,46>>]},{p,[],[<<34,83,117,98,114,111,117,116,105,110,101,34,32,99,97,108,108,115,32,40,115,101,101,32,98,101,108,111,119,41,44,32,115,117,99,104,32,97,115,32,40,63,50,41,32,111,114,32,40,63,38,88,41,44,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,105,110,32,108,111,111,107,98,101,104,105,110,100,115,44,32,97,115,32,108,111,110,103,32,97,115,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,32,102,105,120,101,100,45,108,101,110,103,116,104,32,115,116,114,105,110,103,46,32,82,101,99,117,114,115,105,111,110,44,32,104,111,119,101,118,101,114,44,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46>>]},{p,[],[<<80,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,115,32,99,97,110,32,98,101,32,117,115,101,100,32,119,105,116,104,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,115,32,116,111,32,115,112,101,99,105,102,121,32,101,102,102,105,99,105,101,110,116,32,109,97,116,99,104,105,110,103,32,111,102,32,102,105,120,101,100,45,108,101,110,103,116,104,32,115,116,114,105,110,103,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,105,109,112,108,101,32,112,97,116,116,101,114,110,32,119,104,101,110,32,97,112,112,108,105,101,100,32,116,111,32,97,32,108,111,110,103,32,115,116,114,105,110,103,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,58>>]},{pre,[],[{code,[],[<<97,98,99,100,36>>]}]},{p,[],[<<65,115,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,101,100,115,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,44,32,80,67,82,69,32,108,111,111,107,115,32,102,111,114,32,101,97,99,104,32,34,97,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,97,110,100,32,116,104,101,110,32,115,101,101,115,32,105,102,32,119,104,97,116,32,102,111,108,108,111,119,115,32,109,97,116,99,104,101,115,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115>>]},{pre,[],[{code,[],[<<94,46,42,97,98,99,100,36>>]}]},{p,[],[<<116,104,101,32,105,110,105,116,105,97,108,32,46,42,32,109,97,116,99,104,101,115,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,32,97,116,32,102,105,114,115,116,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,116,104,105,115,32,102,97,105,108,115,32,40,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,102,111,108,108,111,119,105,110,103,32,34,97,34,41,44,32,105,116,32,98,97,99,107,116,114,97,99,107,115,32,116,111,32,109,97,116,99,104,32,97,108,108,32,98,117,116,32,116,104,101,32,108,97,115,116,32,99,104,97,114,97,99,116,101,114,44,32,116,104,101,110,32,97,108,108,32,98,117,116,32,116,104,101,32,108,97,115,116,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,44,32,97,110,100,32,115,111,32,111,110,46,32,79,110,99,101,32,97,103,97,105,110,32,116,104,101,32,115,101,97,114,99,104,32,102,111,114,32,34,97,34,32,99,111,118,101,114,115,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,44,32,102,114,111,109,32,114,105,103,104,116,32,116,111,32,108,101,102,116,44,32,115,111,32,119,101,32,97,114,101,32,110,111,32,98,101,116,116,101,114,32,111,102,102,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,119,114,105,116,116,101,110,32,97,115>>]},{pre,[],[{code,[],[<<94,46,42,43,40,63,60,61,97,98,99,100,41>>]}]},{p,[],[<<116,104,101,114,101,32,99,97,110,32,98,101,32,110,111,32,98,97,99,107,116,114,97,99,107,105,110,103,32,102,111,114,32,116,104,101,32,46,42,43,32,105,116,101,109,59,32,105,116,32,99,97,110,32,109,97,116,99,104,32,111,110,108,121,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,46,32,84,104,101,32,115,117,98,115,101,113,117,101,110,116,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,32,100,111,101,115,32,97,32,115,105,110,103,108,101,32,116,101,115,116,32,111,110,32,116,104,101,32,108,97,115,116,32,102,111,117,114,32,99,104,97,114,97,99,116,101,114,115,46,32,73,102,32,105,116,32,102,97,105,108,115,44,32,116,104,101,32,109,97,116,99,104,32,102,97,105,108,115,32,105,109,109,101,100,105,97,116,101,108,121,46,32,70,111,114,32,108,111,110,103,32,115,116,114,105,110,103,115,44,32,116,104,105,115,32,97,112,112,114,111,97,99,104,32,109,97,107,101,115,32,97,32,115,105,103,110,105,102,105,99,97,110,116,32,100,105,102,102,101,114,101,110,99,101,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,105,110,103,32,116,105,109,101,46>>]},{p,[],[{em,[],[<<85,115,105,110,103,32,77,117,108,116,105,112,108,101,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<77,97,110,121,32,97,115,115,101,114,116,105,111,110,115,32,40,111,102,32,97,110,121,32,115,111,114,116,41,32,99,97,110,32,111,99,99,117,114,32,105,110,32,115,117,99,99,101,115,115,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,102,111,111,34,32,112,114,101,99,101,100,101,100,32,98,121,32,116,104,114,101,101,32,100,105,103,105,116,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,34,57,57,57,34,58>>]},{pre,[],[{code,[],[<<40,63,60,61,92,100,123,51,125,41,40,63,60,33,57,57,57,41,102,111,111>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,101,97,99,104,32,111,102,32,116,104,101,32,97,115,115,101,114,116,105,111,110,115,32,105,115,32,97,112,112,108,105,101,100,32,105,110,100,101,112,101,110,100,101,110,116,108,121,32,97,116,32,116,104,101,32,115,97,109,101,32,112,111,105,110,116,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,70,105,114,115,116,32,116,104,101,114,101,32,105,115,32,97,32,99,104,101,99,107,32,116,104,97,116,32,116,104,101,32,112,114,101,118,105,111,117,115,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,97,108,108,32,100,105,103,105,116,115,44,32,97,110,100,32,116,104,101,110,32,116,104,101,114,101,32,105,115,32,97,32,99,104,101,99,107,32,116,104,97,116,32,116,104,101,32,115,97,109,101,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,110,111,116,32,34,57,57,57,34,46,32,84,104,105,115,32,112,97,116,116,101,114,110,32,100,111,101,115,32>>,{em,[],[<<110,111,116>>]},<<32,109,97,116,99,104,32,34,102,111,111,34,32,112,114,101,99,101,100,101,100,32,98,121,32,115,105,120,32,99,104,97,114,97,99,116,101,114,115,44,32,116,104,101,32,102,105,114,115,116,32,111,102,32,119,104,105,99,104,32,97,114,101,32,100,105,103,105,116,115,32,97,110,100,32,116,104,101,32,108,97,115,116,32,116,104,114,101,101,32,111,102,32,119,104,105,99,104,32,97,114,101,32,110,111,116,32,34,57,57,57,34,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,34,49,50,51,97,98,99,102,111,111,34,46,32,65,32,112,97,116,116,101,114,110,32,116,111,32,100,111,32,116,104,97,116,32,105,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{pre,[],[{code,[],[<<40,63,60,61,92,100,123,51,125,46,46,46,41,40,63,60,33,57,57,57,41,102,111,111>>]}]},{p,[],[<<84,104,105,115,32,116,105,109,101,32,116,104,101,32,102,105,114,115,116,32,97,115,115,101,114,116,105,111,110,32,108,111,111,107,115,32,97,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,115,105,120,32,99,104,97,114,97,99,116,101,114,115,44,32,99,104,101,99,107,115,32,116,104,97,116,32,116,104,101,32,102,105,114,115,116,32,116,104,114,101,101,32,97,114,101,32,100,105,103,105,116,115,44,32,97,110,100,32,116,104,101,110,32,116,104,101,32,115,101,99,111,110,100,32,97,115,115,101,114,116,105,111,110,32,99,104,101,99,107,115,32,116,104,97,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,110,111,116,32,34,57,57,57,34,46>>]},{p,[],[<<65,115,115,101,114,116,105,111,110,115,32,99,97,110,32,98,101,32,110,101,115,116,101,100,32,105,110,32,97,110,121,32,99,111,109,98,105,110,97,116,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,97,110,32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,34,98,97,122,34,32,116,104,97,116,32,105,115,32,112,114,101,99,101,100,101,100,32,98,121,32,34,98,97,114,34,44,32,119,104,105,99,104,32,105,110,32,116,117,114,110,32,105,115,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,34,102,111,111,34,58>>]},{pre,[],[{code,[],[<<40,63,60,61,40,63,60,33,102,111,111,41,98,97,114,41,98,97,122>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,102,111,111,34,32,112,114,101,99,101,100,101,100,32,98,121,32,116,104,114,101,101,32,100,105,103,105,116,115,32,97,110,100,32,97,110,121,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,34,57,57,57,34,58>>]},{pre,[],[{code,[],[<<40,63,60,61,92,100,123,51,125,40,63,33,57,57,57,41,46,46,46,41,102,111,111>>]}]},{a,[{id,<<115,101,99,116,49,56>>}],[]},{h2,[],[<<67,111,110,100,105,116,105,111,110,97,108,32,83,117,98,112,97,116,116,101,114,110,115>>]},{p,[],[<<73,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,99,97,117,115,101,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,115,115,32,116,111,32,111,98,101,121,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,111,110,100,105,116,105,111,110,97,108,108,121,32,111,114,32,116,111,32,99,104,111,111,115,101,32,98,101,116,119,101,101,110,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,32,115,117,98,112,97,116,116,101,114,110,115,44,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,110,32,97,115,115,101,114,116,105,111,110,44,32,111,114,32,119,104,101,116,104,101,114,32,97,32,115,112,101,99,105,102,105,99,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,97,108,114,101,97,100,121,32,98,101,101,110,32,109,97,116,99,104,101,100,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,116,119,111,32,112,111,115,115,105,98,108,101,32,102,111,114,109,115,32,111,102,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,63,40,99,111,110,100,105,116,105,111,110,41,121,101,115,45,112,97,116,116,101,114,110,41,10,40,63,40,99,111,110,100,105,116,105,111,110,41,121,101,115,45,112,97,116,116,101,114,110,124,110,111,45,112,97,116,116,101,114,110,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,115,97,116,105,115,102,105,101,100,44,32,116,104,101,32,121,101,115,45,112,97,116,116,101,114,110,32,105,115,32,117,115,101,100,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,110,111,45,112,97,116,116,101,114,110,32,40,105,102,32,112,114,101,115,101,110,116,41,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,101,120,105,115,116,32,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,44,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,32,111,99,99,117,114,115,46,32,69,97,99,104,32,111,102,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,99,97,110,32,105,116,115,101,108,102,32,99,111,110,116,97,105,110,32,110,101,115,116,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,97,110,121,32,102,111,114,109,44,32,105,110,99,108,117,100,105,110,103,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,115,59,32,116,104,101,32,114,101,115,116,114,105,99,116,105,111,110,32,116,111,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,112,112,108,105,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,108,101,118,101,108,32,111,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,102,114,97,103,109,101,110,116,32,105,115,32,97,110,32,101,120,97,109,112,108,101,32,119,104,101,114,101,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,114,101,32,99,111,109,112,108,101,120,58>>]},{pre,[],[{code,[],[<<40,63,40,49,41,32,40,65,124,66,124,67,41,32,124,32,40,68,32,124,32,40,63,40,50,41,69,124,70,41,32,124,32,69,41,32,41>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,102,111,117,114,32,107,105,110,100,115,32,111,102,32,99,111,110,100,105,116,105,111,110,58,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,115,117,98,112,97,116,116,101,114,110,115,44,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,114,101,99,117,114,115,105,111,110,44,32,97,32,112,115,101,117,100,111,45,99,111,110,100,105,116,105,111,110,32,99,97,108,108,101,100,32,68,69,70,73,78,69,44,32,97,110,100,32,97,115,115,101,114,116,105,111,110,115,46>>]},{p,[],[{em,[],[<<67,104,101,99,107,105,110,103,32,102,111,114,32,97,32,85,115,101,100,32,83,117,98,112,97,116,116,101,114,110,32,66,121,32,78,117,109,98,101,114>>]}]},{p,[],[<<73,102,32,116,104,101,32,116,101,120,116,32,98,101,116,119,101,101,110,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,99,111,110,115,105,115,116,115,32,111,102,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,100,105,103,105,116,115,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,111,102,32,116,104,97,116,32,110,117,109,98,101,114,32,104,97,115,32,112,114,101,118,105,111,117,115,108,121,32,109,97,116,99,104,101,100,46,32,73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,101,120,105,115,116,115,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,115,101,99,116,49,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<68,117,112,108,105,99,97,116,101,32,83,117,98,112,97,116,116,101,114,110,32,78,117,109,98,101,114,115>>]},<<32,101,97,114,108,105,101,114,41,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,102,32,116,104,101,109,32,104,97,118,101,32,109,97,116,99,104,101,100,46,32,65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,110,111,116,97,116,105,111,110,32,105,115,32,116,111,32,112,114,101,99,101,100,101,32,116,104,101,32,100,105,103,105,116,115,32,119,105,116,104,32,97,32,112,108,117,115,32,111,114,32,109,105,110,117,115,32,115,105,103,110,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,110,117,109,98,101,114,32,105,115,32,114,101,108,97,116,105,118,101,32,114,97,116,104,101,114,32,116,104,97,110,32,97,98,115,111,108,117,116,101,46,32,84,104,101,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,32,98,121,32,40,63,40,45,49,41,44,32,116,104,101,32,110,101,120,116,32,109,111,115,116,32,114,101,99,101,110,116,32,98,121,32,40,63,40,45,50,41,44,32,97,110,100,32,115,111,32,111,110,46,32,73,110,115,105,100,101,32,108,111,111,112,115,44,32,105,116,32,99,97,110,32,97,108,115,111,32,109,97,107,101,32,115,101,110,115,101,32,116,111,32,114,101,102,101,114,32,116,111,32,115,117,98,115,101,113,117,101,110,116,32,103,114,111,117,112,115,46,32,84,104,101,32,110,101,120,116,32,112,97,114,101,110,116,104,101,115,101,115,32,116,111,32,98,101,32,111,112,101,110,101,100,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,32,97,115,32,40,63,40,43,49,41,44,32,97,110,100,32,115,111,32,111,110,46,32,40,84,104,101,32,118,97,108,117,101,32,122,101,114,111,32,105,110,32,97,110,121,32,111,102,32,116,104,101,115,101,32,102,111,114,109,115,32,105,115,32,110,111,116,32,117,115,101,100,59,32,105,116,32,112,114,111,118,111,107,101,115,32,97,32,99,111,109,112,105,108,101,45,116,105,109,101,32,101,114,114,111,114,46,41>>]},{p,[],[<<67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,99,111,110,116,97,105,110,115,32,110,111,110,45,115,105,103,110,105,102,105,99,97,110,116,32,119,104,105,116,101,115,112,97,99,101,32,116,111,32,109,97,107,101,32,105,116,32,109,111,114,101,32,114,101,97,100,97,98,108,101,32,40,97,115,115,117,109,101,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<41,32,97,110,100,32,116,111,32,100,105,118,105,100,101,32,105,116,32,105,110,116,111,32,116,104,114,101,101,32,112,97,114,116,115,32,102,111,114,32,101,97,115,101,32,111,102,32,100,105,115,99,117,115,115,105,111,110,58>>]},{pre,[],[{code,[],[<<40,32,92,40,32,41,63,32,32,32,32,91,94,40,41,93,43,32,32,32,32,40,63,40,49,41,32,92,41,32,41>>]}]},{p,[],[<<84,104,101,32,102,105,114,115,116,32,112,97,114,116,32,109,97,116,99,104,101,115,32,97,110,32,111,112,116,105,111,110,97,108,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,44,32,97,110,100,32,105,102,32,116,104,97,116,32,99,104,97,114,97,99,116,101,114,32,105,115,32,112,114,101,115,101,110,116,44,32,115,101,116,115,32,105,116,32,97,115,32,116,104,101,32,102,105,114,115,116,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,46,32,84,104,101,32,115,101,99,111,110,100,32,112,97,114,116,32,109,97,116,99,104,101,115,32,111,110,101,32,111,114,32,109,111,114,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,112,97,114,101,110,116,104,101,115,101,115,46,32,84,104,101,32,116,104,105,114,100,32,112,97,114,116,32,105,115,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,116,101,115,116,115,32,119,104,101,116,104,101,114,32,116,104,101,32,102,105,114,115,116,32,115,101,116,32,111,102,32,112,97,114,101,110,116,104,101,115,101,115,32,109,97,116,99,104,101,100,32,111,114,32,110,111,116,46,32,73,102,32,116,104,101,121,32,100,105,100,44,32,116,104,97,116,32,105,115,44,32,105,102,32,115,117,98,106,101,99,116,32,115,116,97,114,116,101,100,32,119,105,116,104,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,44,32,97,110,100,32,115,111,32,116,104,101,32,121,101,115,45,112,97,116,116,101,114,110,32,105,115,32,101,120,101,99,117,116,101,100,32,97,110,100,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,115,32,114,101,113,117,105,114,101,100,46,32,79,116,104,101,114,119,105,115,101,44,32,97,115,32,110,111,45,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,44,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,110,111,116,104,105,110,103,46,32,84,104,97,116,32,105,115,44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,44,32,111,112,116,105,111,110,97,108,108,121,32,101,110,99,108,111,115,101,100,32,105,110,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<73,102,32,116,104,105,115,32,112,97,116,116,101,114,110,32,105,115,32,101,109,98,101,100,100,101,100,32,105,110,32,97,32,108,97,114,103,101,114,32,111,110,101,44,32,97,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,117,115,101,100,58>>]},{pre,[],[{code,[],[<<46,46,46,111,116,104,101,114,32,115,116,117,102,102,46,46,46,32,40,32,92,40,32,41,63,32,32,32,32,91,94,40,41,93,43,32,32,32,32,40,63,40,45,49,41,32,92,41,32,41,32,46,46,46>>]}]},{p,[],[<<84,104,105,115,32,109,97,107,101,115,32,116,104,101,32,102,114,97,103,109,101,110,116,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,108,97,114,103,101,114,32,112,97,116,116,101,114,110,46>>]},{p,[],[{em,[],[<<67,104,101,99,107,105,110,103,32,102,111,114,32,97,32,85,115,101,100,32,83,117,98,112,97,116,116,101,114,110,32,66,121,32,78,97,109,101>>]}]},{p,[],[<<80,101,114,108,32,117,115,101,115,32,116,104,101,32,115,121,110,116,97,120,32,40,63,40,60,110,97,109,101,62,41,46,46,46,41,32,111,114,32,40,63,40,39,110,97,109,101,39,41,46,46,46,41,32,116,111,32,116,101,115,116,32,102,111,114,32,97,32,117,115,101,100,32,115,117,98,112,97,116,116,101,114,110,32,98,121,32,110,97,109,101,46,32,70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,101,97,114,108,105,101,114,32,118,101,114,115,105,111,110,115,32,111,102,32,80,67,82,69,44,32,119,104,105,99,104,32,104,97,100,32,116,104,105,115,32,102,97,99,105,108,105,116,121,32,98,101,102,111,114,101,32,80,101,114,108,44,32,116,104,101,32,115,121,110,116,97,120,32,40,63,40,110,97,109,101,41,46,46,46,41,32,105,115,32,97,108,115,111,32,114,101,99,111,103,110,105,122,101,100,46>>]},{p,[],[<<82,101,119,114,105,116,105,110,103,32,116,104,101,32,112,114,101,118,105,111,117,115,32,101,120,97,109,112,108,101,32,116,111,32,117,115,101,32,97,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,32,103,105,118,101,115,58>>]},{pre,[],[{code,[],[<<40,63,60,79,80,69,78,62,32,92,40,32,41,63,32,32,32,32,91,94,40,41,93,43,32,32,32,32,40,63,40,60,79,80,69,78,62,41,32,92,41,32,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,110,97,109,101,32,117,115,101,100,32,105,110,32,97,32,99,111,110,100,105,116,105,111,110,32,111,102,32,116,104,105,115,32,107,105,110,100,32,105,115,32,97,32,100,117,112,108,105,99,97,116,101,44,32,116,104,101,32,116,101,115,116,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,97,108,108,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,116,104,101,32,115,97,109,101,32,110,97,109,101,44,32,97,110,100,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,110,101,32,111,102,32,116,104,101,109,32,104,97,115,32,109,97,116,99,104,101,100,46>>]},{p,[],[{em,[],[<<67,104,101,99,107,105,110,103,32,102,111,114,32,80,97,116,116,101,114,110,32,82,101,99,117,114,115,105,111,110>>]}]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,104,101,32,115,116,114,105,110,103,32,40,82,41,44,32,97,110,100,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,110,97,109,101,32,82,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,97,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,116,111,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,32,111,114,32,97,110,121,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,98,101,101,110,32,109,97,100,101,46,32,73,102,32,100,105,103,105,116,115,32,111,114,32,97,32,110,97,109,101,32,112,114,101,99,101,100,101,100,32,98,121,32,97,109,112,101,114,115,97,110,100,32,102,111,108,108,111,119,32,116,104,101,32,108,101,116,116,101,114,32,82,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,63,40,82,51,41,46,46,46,41,32,111,114,32,40,63,40,82,38,110,97,109,101,41,46,46,46,41>>]}]},{p,[],[<<116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,114,117,101,32,105,102,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,114,101,99,117,114,115,105,111,110,32,105,115,32,105,110,116,111,32,97,32,115,117,98,112,97,116,116,101,114,110,32,119,104,111,115,101,32,110,117,109,98,101,114,32,111,114,32,110,97,109,101,32,105,115,32,103,105,118,101,110,46,32,84,104,105,115,32,99,111,110,100,105,116,105,111,110,32,100,111,101,115,32,110,111,116,32,99,104,101,99,107,32,116,104,101,32,101,110,116,105,114,101,32,114,101,99,117,114,115,105,111,110,32,115,116,97,99,107,46,32,73,102,32,116,104,101,32,110,97,109,101,32,117,115,101,100,32,105,110,32,97,32,99,111,110,100,105,116,105,111,110,32,111,102,32,116,104,105,115,32,107,105,110,100,32,105,115,32,97,32,100,117,112,108,105,99,97,116,101,44,32,116,104,101,32,116,101,115,116,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,97,108,108,32,115,117,98,112,97,116,116,101,114,110,115,32,111,102,32,116,104,101,32,115,97,109,101,32,110,97,109,101,44,32,97,110,100,32,105,115,32,116,114,117,101,32,105,102,32,97,110,121,32,111,110,101,32,111,102,32,116,104,101,109,32,105,115,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,114,101,99,117,114,115,105,111,110,46>>]},{p,[],[<<65,116,32,34,116,111,112,45,108,101,118,101,108,34,44,32,97,108,108,32,116,104,101,115,101,32,114,101,99,117,114,115,105,111,110,32,116,101,115,116,32,99,111,110,100,105,116,105,111,110,115,32,97,114,101,32,102,97,108,115,101,46,32,84,104,101,32,115,121,110,116,97,120,32,102,111,114,32,114,101,99,117,114,115,105,118,101,32,112,97,116,116,101,114,110,115,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46>>]},{p,[],[{em,[],[<<68,101,102,105,110,105,110,103,32,83,117,98,112,97,116,116,101,114,110,115,32,102,111,114,32,85,115,101,32,66,121,32,82,101,102,101,114,101,110,99,101,32,79,110,108,121>>]}]},{a,[{id,<<100,101,102,105,110,105,110,103,95,115,117,98,112,97,116,116,101,114,110,115>>}],[]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,116,104,101,32,115,116,114,105,110,103,32,40,68,69,70,73,78,69,41,44,32,97,110,100,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,110,97,109,101,32,68,69,70,73,78,69,44,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,97,108,119,97,121,115,32,102,97,108,115,101,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,114,101,32,99,97,110,32,98,101,32,111,110,108,121,32,111,110,101,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,46,32,73,116,32,105,115,32,97,108,119,97,121,115,32,115,107,105,112,112,101,100,32,105,102,32,99,111,110,116,114,111,108,32,114,101,97,99,104,101,115,32,116,104,105,115,32,112,111,105,110,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,101,32,105,100,101,97,32,111,102,32,68,69,70,73,78,69,32,105,115,32,116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,100,101,102,105,110,101,32,34,115,117,98,114,111,117,116,105,110,101,115,34,32,116,104,97,116,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,32,102,114,111,109,32,101,108,115,101,119,104,101,114,101,46,32,40,84,104,101,32,117,115,101,32,111,102,32,115,117,98,114,111,117,116,105,110,101,115,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46,41,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,32,112,97,116,116,101,114,110,32,116,111,32,109,97,116,99,104,32,97,110,32,73,80,118,52,32,97,100,100,114,101,115,115,44,32,115,117,99,104,32,97,115,32,34,49,57,50,46,49,54,56,46,50,51,46,50,52,53,34,44,32,99,97,110,32,98,101,32,119,114,105,116,116,101,110,32,108,105,107,101,32,116,104,105,115,32,40,105,103,110,111,114,101,32,119,104,105,116,101,115,112,97,99,101,32,97,110,100,32,108,105,110,101,32,98,114,101,97,107,115,41,58>>]},{pre,[],[{code,[],[<<40,63,40,68,69,70,73,78,69,41,32,40,63,60,98,121,116,101,62,32,50,91,48,45,52,93,92,100,32,124,32,50,53,91,48,45,53,93,32,124,32,49,92,100,92,100,32,124,32,91,49,45,57,93,63,92,100,41,32,41,32,92,98,32,40,63,38,98,121,116,101,41,32,40,92,46,40,63,38,98,121,116,101,41,41,123,51,125,32,92,98>>]}]},{p,[],[<<84,104,101,32,102,105,114,115,116,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,97,32,68,69,70,73,78,69,32,103,114,111,117,112,32,105,110,115,105,100,101,32,119,104,105,99,104,32,105,115,32,97,32,97,110,111,116,104,101,114,32,103,114,111,117,112,32,110,97,109,101,100,32,34,98,121,116,101,34,32,105,115,32,100,101,102,105,110,101,100,46,32,84,104,105,115,32,109,97,116,99,104,101,115,32,97,110,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,112,111,110,101,110,116,32,111,102,32,97,110,32,73,80,118,52,32,97,100,100,114,101,115,115,32,40,97,32,110,117,109,98,101,114,32,60,32,50,53,54,41,46,32,87,104,101,110,32,109,97,116,99,104,105,110,103,32,116,97,107,101,115,32,112,108,97,99,101,44,32,116,104,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,115,107,105,112,112,101,100,44,32,97,115,32,68,69,70,73,78,69,32,97,99,116,115,32,108,105,107,101,32,97,32,102,97,108,115,101,32,99,111,110,100,105,116,105,111,110,46,32,84,104,101,32,114,101,109,97,105,110,105,110,103,32,112,97,116,116,101,114,110,32,117,115,101,115,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,116,104,101,32,110,97,109,101,100,32,103,114,111,117,112,32,116,111,32,109,97,116,99,104,32,116,104,101,32,102,111,117,114,32,100,111,116,45,115,101,112,97,114,97,116,101,100,32,99,111,109,112,111,110,101,110,116,115,32,111,102,32,97,110,32,73,80,118,52,32,97,100,100,114,101,115,115,44,32,105,110,115,105,115,116,105,110,103,32,111,110,32,97,32,119,111,114,100,32,98,111,117,110,100,97,114,121,32,97,116,32,101,97,99,104,32,101,110,100,46>>]},{p,[],[{em,[],[<<65,115,115,101,114,116,105,111,110,32,67,111,110,100,105,116,105,111,110,115>>]}]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,110,111,116,32,105,110,32,97,110,121,32,111,102,32,116,104,101,32,97,98,111,118,101,32,102,111,114,109,97,116,115,44,32,105,116,32,109,117,115,116,32,98,101,32,97,110,32,97,115,115,101,114,116,105,111,110,46,32,84,104,105,115,32,99,97,110,32,98,101,32,97,32,112,111,115,105,116,105,118,101,32,111,114,32,110,101,103,97,116,105,118,101,32,108,111,111,107,97,104,101,97,100,32,111,114,32,108,111,111,107,98,101,104,105,110,100,32,97,115,115,101,114,116,105,111,110,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,99,111,110,116,97,105,110,105,110,103,32,110,111,110,45,115,105,103,110,105,102,105,99,97,110,116,32,119,104,105,116,101,115,112,97,99,101,44,32,97,110,100,32,119,105,116,104,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,111,110,32,116,104,101,32,115,101,99,111,110,100,32,108,105,110,101,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<40,63,40,63,61,91,94,97,45,122,93,42,91,97,45,122,93,41,10,92,100,123,50,125,45,91,97,45,122,93,123,51,125,45,92,100,123,50,125,32,32,124,32,32,92,100,123,50,125,45,92,100,123,50,125,45,92,100,123,50,125,32,41>>]}]},{p,[],[<<84,104,101,32,99,111,110,100,105,116,105,111,110,32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,108,111,111,107,97,104,101,97,100,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,109,97,116,99,104,101,115,32,97,110,32,111,112,116,105,111,110,97,108,32,115,101,113,117,101,110,99,101,32,111,102,32,110,111,110,45,108,101,116,116,101,114,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,108,101,116,116,101,114,46,32,84,104,97,116,32,105,115,44,32,105,116,32,116,101,115,116,115,32,102,111,114,32,116,104,101,32,112,114,101,115,101,110,99,101,32,111,102,32,97,116,32,108,101,97,115,116,32,111,110,101,32,108,101,116,116,101,114,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,73,102,32,97,32,108,101,116,116,101,114,32,105,115,32,102,111,117,110,100,44,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,105,114,115,116,32,97,108,116,101,114,110,97,116,105,118,101,44,32,111,116,104,101,114,119,105,115,101,32,105,116,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,115,101,99,111,110,100,46,32,84,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,115,116,114,105,110,103,115,32,105,110,32,111,110,101,32,111,102,32,116,104,101,32,116,119,111,32,102,111,114,109,115,32,100,100,45,97,97,97,45,100,100,32,111,114,32,100,100,45,100,100,45,100,100,44,32,119,104,101,114,101,32,97,97,97,32,97,114,101,32,108,101,116,116,101,114,115,32,97,110,100,32,100,100,32,97,114,101,32,100,105,103,105,116,115,46>>]},{a,[{id,<<115,101,99,116,49,57>>}],[]},{h2,[],[<<67,111,109,109,101,110,116,115>>]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,116,119,111,32,119,97,121,115,32,116,111,32,105,110,99,108,117,100,101,32,99,111,109,109,101,110,116,115,32,105,110,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,112,114,111,99,101,115,115,101,100,32,98,121,32,80,67,82,69,46,32,73,110,32,98,111,116,104,32,99,97,115,101,115,44,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,99,111,109,109,101,110,116,32,109,117,115,116,32,110,111,116,32,98,101,32,105,110,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,44,32,111,114,32,105,110,32,116,104,101,32,109,105,100,100,108,101,32,111,102,32,97,110,121,32,111,116,104,101,114,32,115,101,113,117,101,110,99,101,32,111,102,32,114,101,108,97,116,101,100,32,99,104,97,114,97,99,116,101,114,115,32,115,117,99,104,32,97,115,32,40,63,58,32,111,114,32,97,32,115,117,98,112,97,116,116,101,114,110,32,110,97,109,101,32,111,114,32,110,117,109,98,101,114,46,32,84,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,109,97,107,101,32,117,112,32,97,32,99,111,109,109,101,110,116,32,112,108,97,121,32,110,111,32,112,97,114,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,105,110,103,46>>]},{p,[],[<<84,104,101,32,115,101,113,117,101,110,99,101,32,40,63,35,32,109,97,114,107,115,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,99,111,109,109,101,110,116,32,116,104,97,116,32,99,111,110,116,105,110,117,101,115,32,117,112,32,116,111,32,116,104,101,32,110,101,120,116,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,78,101,115,116,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,110,111,116,32,112,101,114,109,105,116,116,101,100,46,32,73,102,32,111,112,116,105,111,110,32,80,67,82,69,95,69,88,84,69,78,68,69,68,32,105,115,32,115,101,116,44,32,97,110,32,117,110,101,115,99,97,112,101,100,32,35,32,99,104,97,114,97,99,116,101,114,32,97,108,115,111,32,105,110,116,114,111,100,117,99,101,115,32,97,32,99,111,109,109,101,110,116,44,32,119,104,105,99,104,32,105,110,32,116,104,105,115,32,99,97,115,101,32,99,111,110,116,105,110,117,101,115,32,116,111,32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,116,104,101,32,110,101,120,116,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,32,111,114,32,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,87,104,105,99,104,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,110,101,119,108,105,110,101,115,32,105,115,32,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,32,111,112,116,105,111,110,115,32,112,97,115,115,101,100,32,116,111,32,97,32,99,111,109,112,105,108,105,110,103,32,102,117,110,99,116,105,111,110,32,111,114,32,98,121,32,97,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,110,101,119,108,105,110,101,95,99,111,110,118,101,110,116,105,111,110,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<78,101,119,108,105,110,101,32,67,111,110,118,101,110,116,105,111,110,115>>]},<<32,101,97,114,108,105,101,114,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,105,115,32,116,121,112,101,32,111,102,32,99,111,109,109,101,110,116,32,105,115,32,97,32,108,105,116,101,114,97,108,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,59,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,115,32,116,104,97,116,32,104,97,112,112,101,110,32,116,111,32,114,101,112,114,101,115,101,110,116,32,97,32,110,101,119,108,105,110,101,32,100,111,32,110,111,116,32,99,111,117,110,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,119,104,101,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,105,115,32,115,101,116,44,32,97,110,100,32,116,104,101,32,100,101,102,97,117,108,116,32,110,101,119,108,105,110,101,32,99,111,110,118,101,110,116,105,111,110,32,105,115,32,105,110,32,102,111,114,99,101,58>>]},{pre,[],[{code,[],[<<97,98,99,32,35,99,111,109,109,101,110,116,32,92,110,32,115,116,105,108,108,32,99,111,109,109,101,110,116>>]}]},{p,[],[<<79,110,32,101,110,99,111,117,110,116,101,114,105,110,103,32,99,104,97,114,97,99,116,101,114,32,35,44,32>>,{code,[],[<<112,99,114,101,95,99,111,109,112,105,108,101,40,41>>]},<<32,115,107,105,112,115,32,97,108,111,110,103,44,32,108,111,111,107,105,110,103,32,102,111,114,32,97,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,84,104,101,32,115,101,113,117,101,110,99,101,32,92,110,32,105,115,32,115,116,105,108,108,32,108,105,116,101,114,97,108,32,97,116,32,116,104,105,115,32,115,116,97,103,101,44,32,115,111,32,105,116,32,100,111,101,115,32,110,111,116,32,116,101,114,109,105,110,97,116,101,32,116,104,101,32,99,111,109,109,101,110,116,46,32,79,110,108,121,32,97,32,99,104,97,114,97,99,116,101,114,32,119,105,116,104,32,99,111,100,101,32,118,97,108,117,101,32,48,120,48,97,32,40,116,104,101,32,100,101,102,97,117,108,116,32,110,101,119,108,105,110,101,41,32,100,111,101,115,32,115,111,46>>]},{a,[{id,<<115,101,99,116,50,48>>}],[]},{h2,[],[<<82,101,99,117,114,115,105,118,101,32,80,97,116,116,101,114,110,115>>]},{p,[],[<<67,111,110,115,105,100,101,114,32,116,104,101,32,112,114,111,98,108,101,109,32,111,102,32,109,97,116,99,104,105,110,103,32,97,32,115,116,114,105,110,103,32,105,110,32,112,97,114,101,110,116,104,101,115,101,115,44,32,97,108,108,111,119,105,110,103,32,102,111,114,32,117,110,108,105,109,105,116,101,100,32,110,101,115,116,101,100,32,112,97,114,101,110,116,104,101,115,101,115,46,32,87,105,116,104,111,117,116,32,116,104,101,32,117,115,101,32,111,102,32,114,101,99,117,114,115,105,111,110,44,32,116,104,101,32,98,101,115,116,32,116,104,97,116,32,99,97,110,32,98,101,32,100,111,110,101,32,105,115,32,116,111,32,117,115,101,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,109,97,116,99,104,101,115,32,117,112,32,116,111,32,115,111,109,101,32,102,105,120,101,100,32,100,101,112,116,104,32,111,102,32,110,101,115,116,105,110,103,46,32,73,116,32,105,115,32,110,111,116,32,112,111,115,115,105,98,108,101,32,116,111,32,104,97,110,100,108,101,32,97,110,32,97,114,98,105,116,114,97,114,121,32,110,101,115,116,105,110,103,32,100,101,112,116,104,46>>]},{p,[],[<<70,111,114,32,115,111,109,101,32,116,105,109,101,44,32,80,101,114,108,32,104,97,115,32,112,114,111,118,105,100,101,100,32,97,32,102,97,99,105,108,105,116,121,32,116,104,97,116,32,97,108,108,111,119,115,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,32,116,111,32,114,101,99,117,114,115,101,32,40,97,109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,41,46,32,73,116,32,100,111,101,115,32,116,104,105,115,32,98,121,32,105,110,116,101,114,112,111,108,97,116,105,110,103,32,80,101,114,108,32,99,111,100,101,32,105,110,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,97,116,32,114,117,110,116,105,109,101,44,32,97,110,100,32,116,104,101,32,99,111,100,101,32,99,97,110,32,114,101,102,101,114,32,116,111,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,105,116,115,101,108,102,46,32,65,32,80,101,114,108,32,112,97,116,116,101,114,110,32,117,115,105,110,103,32,99,111,100,101,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,116,111,32,115,111,108,118,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,112,114,111,98,108,101,109,32,99,97,110,32,98,101,32,99,114,101,97,116,101,100,32,108,105,107,101,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<36,114,101,32,61,32,113,114,123,92,40,32,40,63,58,32,40,63,62,91,94,40,41,93,43,41,32,124,32,40,63,112,123,36,114,101,125,41,32,41,42,32,92,41,125,120,59>>]}]},{p,[],[<<73,116,101,109,32,40,63,112,123,46,46,46,125,41,32,105,110,116,101,114,112,111,108,97,116,101,115,32,80,101,114,108,32,99,111,100,101,32,97,116,32,114,117,110,116,105,109,101,44,32,97,110,100,32,105,110,32,116,104,105,115,32,99,97,115,101,32,114,101,102,101,114,115,32,114,101,99,117,114,115,105,118,101,108,121,32,116,111,32,116,104,101,32,112,97,116,116,101,114,110,32,105,110,32,119,104,105,99,104,32,105,116,32,97,112,112,101,97,114,115,46>>]},{p,[],[<<79,98,118,105,111,117,115,108,121,44,32,80,67,82,69,32,99,97,110,110,111,116,32,115,117,112,112,111,114,116,32,116,104,101,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,111,102,32,80,101,114,108,32,99,111,100,101,46,32,73,110,115,116,101,97,100,44,32,105,116,32,115,117,112,112,111,114,116,115,32,115,112,101,99,105,97,108,32,115,121,110,116,97,120,32,102,111,114,32,114,101,99,117,114,115,105,111,110,32,111,102,32,116,104,101,32,101,110,116,105,114,101,32,112,97,116,116,101,114,110,44,32,97,110,100,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,115,117,98,112,97,116,116,101,114,110,32,114,101,99,117,114,115,105,111,110,46,32,65,102,116,101,114,32,105,116,115,32,105,110,116,114,111,100,117,99,116,105,111,110,32,105,110,32,80,67,82,69,32,97,110,100,32,80,121,116,104,111,110,44,32,116,104,105,115,32,107,105,110,100,32,111,102,32,114,101,99,117,114,115,105,111,110,32,119,97,115,32,108,97,116,101,114,32,105,110,116,114,111,100,117,99,101,100,32,105,110,116,111,32,80,101,114,108,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,48,46>>]},{p,[],[<<65,32,115,112,101,99,105,97,108,32,105,116,101,109,32,116,104,97,116,32,99,111,110,115,105,115,116,115,32,111,102,32,40,63,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,117,109,98,101,114,32,62,32,48,32,97,110,100,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,115,32,97,32,114,101,99,117,114,115,105,118,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,111,102,32,116,104,101,32,103,105,118,101,110,32,110,117,109,98,101,114,44,32,105,102,32,105,116,32,111,99,99,117,114,115,32,105,110,115,105,100,101,32,116,104,97,116,32,115,117,98,112,97,116,116,101,114,110,46,32,40,73,102,32,110,111,116,44,32,105,116,32,105,115,32,97,32,110,111,110,45,114,101,99,117,114,115,105,118,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,44,32,119,104,105,99,104,32,105,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,46,41,32,84,104,101,32,115,112,101,99,105,97,108,32,105,116,101,109,32,40,63,82,41,32,111,114,32,40,63,48,41,32,105,115,32,97,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,111,102,32,116,104,101,32,101,110,116,105,114,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<84,104,105,115,32,80,67,82,69,32,112,97,116,116,101,114,110,32,115,111,108,118,101,115,32,116,104,101,32,110,101,115,116,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,112,114,111,98,108,101,109,32,40,97,115,115,117,109,101,32,116,104,97,116,32,111,112,116,105,111,110,32>>,{code,[],[<<101,120,116,101,110,100,101,100>>]},<<32,105,115,32,115,101,116,32,115,111,32,116,104,97,116,32,119,104,105,116,101,115,112,97,99,101,32,105,115,32,105,103,110,111,114,101,100,41,58>>]},{pre,[],[{code,[],[<<92,40,32,40,32,91,94,40,41,93,43,43,32,124,32,40,63,82,41,32,41,42,32,92,41>>]}]},{p,[],[<<70,105,114,115,116,32,105,116,32,109,97,116,99,104,101,115,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,84,104,101,110,32,105,116,32,109,97,116,99,104,101,115,32,97,110,121,32,110,117,109,98,101,114,32,111,102,32,115,117,98,115,116,114,105,110,103,115,44,32,119,104,105,99,104,32,99,97,110,32,101,105,116,104,101,114,32,98,101,32,97,32,115,101,113,117,101,110,99,101,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,32,111,114,32,97,32,114,101,99,117,114,115,105,118,101,32,109,97,116,99,104,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,116,115,101,108,102,32,40,116,104,97,116,32,105,115,44,32,97,32,99,111,114,114,101,99,116,108,121,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,115,116,114,105,110,103,41,46,32,70,105,110,97,108,108,121,32,116,104,101,114,101,32,105,115,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,78,111,116,105,99,101,32,116,104,101,32,117,115,101,32,111,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,116,111,32,97,118,111,105,100,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,115,101,113,117,101,110,99,101,115,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<73,102,32,116,104,105,115,32,119,97,115,32,112,97,114,116,32,111,102,32,97,32,108,97,114,103,101,114,32,112,97,116,116,101,114,110,44,32,121,111,117,32,119,111,117,108,100,32,110,111,116,32,119,97,110,116,32,116,111,32,114,101,99,117,114,115,101,32,116,104,101,32,101,110,116,105,114,101,32,112,97,116,116,101,114,110,44,32,115,111,32,105,110,115,116,101,97,100,32,121,111,117,32,99,97,110,32,117,115,101,58>>]},{pre,[],[{code,[],[<<40,32,92,40,32,40,32,91,94,40,41,93,43,43,32,124,32,40,63,49,41,32,41,42,32,92,41,32,41>>]}]},{p,[],[<<84,104,101,32,112,97,116,116,101,114,110,32,105,115,32,104,101,114,101,32,119,105,116,104,105,110,32,112,97,114,101,110,116,104,101,115,101,115,32,115,111,32,116,104,97,116,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,114,101,102,101,114,115,32,116,111,32,116,104,101,109,32,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<73,110,32,97,32,108,97,114,103,101,114,32,112,97,116,116,101,114,110,44,32,107,101,101,112,105,110,103,32,116,114,97,99,107,32,111,102,32,112,97,114,101,110,116,104,101,115,105,115,32,110,117,109,98,101,114,115,32,99,97,110,32,98,101,32,116,114,105,99,107,121,46,32,84,104,105,115,32,105,115,32,109,97,100,101,32,101,97,115,105,101,114,32,98,121,32,116,104,101,32,117,115,101,32,111,102,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,115,46,32,73,110,115,116,101,97,100,32,111,102,32,40,63,49,41,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,97,98,111,118,101,44,32,121,111,117,32,99,97,110,32,119,114,105,116,101,32,40,63,45,50,41,32,116,111,32,114,101,102,101,114,32,116,111,32,116,104,101,32,115,101,99,111,110,100,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,112,114,101,99,101,100,105,110,103,32,116,104,101,32,114,101,99,117,114,115,105,111,110,46,32,84,104,97,116,32,105,115,44,32,97,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,32,99,111,117,110,116,115,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,108,101,102,116,119,97,114,100,115,32,102,114,111,109,32,116,104,101,32,112,111,105,110,116,32,97,116,32,119,104,105,99,104,32,105,116,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,46>>]},{p,[],[<<73,116,32,105,115,32,97,108,115,111,32,112,111,115,115,105,98,108,101,32,116,111,32,114,101,102,101,114,32,116,111,32,108,97,116,101,114,32,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,101,115,44,32,98,121,32,119,114,105,116,105,110,103,32,114,101,102,101,114,101,110,99,101,115,32,115,117,99,104,32,97,115,32,40,63,43,50,41,46,32,72,111,119,101,118,101,114,44,32,116,104,101,115,101,32,99,97,110,110,111,116,32,98,101,32,114,101,99,117,114,115,105,118,101,44,32,97,115,32,116,104,101,32,114,101,102,101,114,101,110,99,101,32,105,115,32,110,111,116,32,105,110,115,105,100,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,114,101,102,101,114,101,110,99,101,100,46,32,84,104,101,121,32,97,114,101,32,97,108,119,97,121,115,32,110,111,110,45,114,101,99,117,114,115,105,118,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,115,44,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,46>>]},{p,[],[<<65,110,32,97,108,116,101,114,110,97,116,105,118,101,32,97,112,112,114,111,97,99,104,32,105,115,32,116,111,32,117,115,101,32,110,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,115,116,101,97,100,46,32,84,104,101,32,80,101,114,108,32,115,121,110,116,97,120,32,102,111,114,32,116,104,105,115,32,105,115,32,40,63,38,110,97,109,101,41,46,32,84,104,101,32,101,97,114,108,105,101,114,32,80,67,82,69,32,115,121,110,116,97,120,32,40,63,80,62,110,97,109,101,41,32,105,115,32,97,108,115,111,32,115,117,112,112,111,114,116,101,100,46,32,87,101,32,99,97,110,32,114,101,119,114,105,116,101,32,116,104,101,32,97,98,111,118,101,32,101,120,97,109,112,108,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{pre,[],[{code,[],[<<40,63,60,112,110,62,32,92,40,32,40,32,91,94,40,41,93,43,43,32,124,32,40,63,38,112,110,41,32,41,42,32,92,41,32,41>>]}]},{p,[],[<<73,102,32,116,104,101,114,101,32,105,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,110,97,109,101,44,32,116,104,101,32,101,97,114,108,105,101,115,116,32,111,110,101,32,105,115,32,117,115,101,100,46>>]},{p,[],[<<84,104,105,115,32,112,97,114,116,105,99,117,108,97,114,32,101,120,97,109,112,108,101,32,112,97,116,116,101,114,110,32,116,104,97,116,32,119,101,32,104,97,118,101,32,115,116,117,100,105,101,100,32,99,111,110,116,97,105,110,115,32,110,101,115,116,101,100,32,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,115,44,32,97,110,100,32,115,111,32,116,104,101,32,117,115,101,32,111,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,102,111,114,32,109,97,116,99,104,105,110,103,32,115,116,114,105,110,103,115,32,111,102,32,110,111,110,45,112,97,114,101,110,116,104,101,115,101,115,32,105,115,32,105,109,112,111,114,116,97,110,116,32,119,104,101,110,32,97,112,112,108,121,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,116,111,32,115,116,114,105,110,103,115,32,116,104,97,116,32,100,111,32,110,111,116,32,109,97,116,99,104,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,119,104,101,110,32,116,104,105,115,32,112,97,116,116,101,114,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111>>]},{pre,[],[{code,[],[<<40,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,40,41>>]}]},{p,[],[<<105,116,32,103,105,118,101,115,32,34,110,111,32,109,97,116,99,104,34,32,113,117,105,99,107,108,121,46,32,72,111,119,101,118,101,114,44,32,105,102,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,105,115,32,110,111,116,32,117,115,101,100,44,32,116,104,101,32,109,97,116,99,104,32,114,117,110,115,32,102,111,114,32,97,32,108,111,110,103,32,116,105,109,101,44,32,97,115,32,116,104,101,114,101,32,97,114,101,32,115,111,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,119,97,121,115,32,116,104,101,32,43,32,97,110,100,32,42,32,114,101,112,101,97,116,115,32,99,97,110,32,99,97,114,118,101,32,117,112,32,116,104,101,32,115,117,98,106,101,99,116,44,32,97,110,100,32,97,108,108,32,109,117,115,116,32,98,101,32,116,101,115,116,101,100,32,98,101,102,111,114,101,32,102,97,105,108,117,114,101,32,99,97,110,32,98,101,32,114,101,112,111,114,116,101,100,46>>]},{p,[],[<<65,116,32,116,104,101,32,101,110,100,32,111,102,32,97,32,109,97,116,99,104,44,32,116,104,101,32,118,97,108,117,101,115,32,111,102,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,116,104,111,115,101,32,102,114,111,109,32,116,104,101,32,111,117,116,101,114,109,111,115,116,32,108,101,118,101,108,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,97,98,111,118,101,32,105,115,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116>>]},{pre,[],[{code,[],[<<40,97,98,40,99,100,41,101,102,41>>]}]},{p,[],[<<116,104,101,32,118,97,108,117,101,32,102,111,114,32,116,104,101,32,105,110,110,101,114,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,40,110,117,109,98,101,114,101,100,32,50,41,32,105,115,32,34,101,102,34,44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,108,97,115,116,32,118,97,108,117,101,32,116,97,107,101,110,32,111,110,32,97,116,32,116,104,101,32,116,111,112,45,108,101,118,101,108,46,32,73,102,32,97,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,109,97,116,99,104,101,100,32,97,116,32,116,104,101,32,116,111,112,32,108,101,118,101,108,44,32,105,116,115,32,102,105,110,97,108,32,99,97,112,116,117,114,101,100,32,118,97,108,117,101,32,105,115,32,117,110,115,101,116,44,32,101,118,101,110,32,105,102,32,105,116,32,119,97,115,32,40,116,101,109,112,111,114,97,114,105,108,121,41,32,115,101,116,32,97,116,32,97,32,100,101,101,112,101,114,32,108,101,118,101,108,32,100,117,114,105,110,103,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,114,111,99,101,115,115,46>>]},{p,[],[<<68,111,32,110,111,116,32,99,111,110,102,117,115,101,32,105,116,101,109,32,40,63,82,41,32,119,105,116,104,32,99,111,110,100,105,116,105,111,110,32,40,82,41,44,32,119,104,105,99,104,32,116,101,115,116,115,32,102,111,114,32,114,101,99,117,114,115,105,111,110,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,109,97,116,99,104,101,115,32,116,101,120,116,32,105,110,32,97,110,103,108,101,32,98,114,97,99,107,101,116,115,44,32,97,108,108,111,119,105,110,103,32,102,111,114,32,97,114,98,105,116,114,97,114,121,32,110,101,115,116,105,110,103,46,32,79,110,108,121,32,100,105,103,105,116,115,32,97,114,101,32,97,108,108,111,119,101,100,32,105,110,32,110,101,115,116,101,100,32,98,114,97,99,107,101,116,115,32,40,116,104,97,116,32,105,115,44,32,119,104,101,110,32,114,101,99,117,114,115,105,110,103,41,44,32,119,104,105,108,101,32,97,110,121,32,99,104,97,114,97,99,116,101,114,115,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,97,116,32,116,104,101,32,111,117,116,101,114,32,108,101,118,101,108,46>>]},{pre,[],[{code,[],[<<60,32,40,63,58,32,40,63,40,82,41,32,92,100,43,43,32,32,124,32,91,94,60,62,93,42,43,41,32,124,32,40,63,82,41,41,32,42,32,62>>]}]},{p,[],[<<72,101,114,101,32,40,63,40,82,41,32,105,115,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,44,32,119,105,116,104,32,116,119,111,32,100,105,102,102,101,114,101,110,116,32,97,108,116,101,114,110,97,116,105,118,101,115,32,102,111,114,32,116,104,101,32,114,101,99,117,114,115,105,118,101,32,97,110,100,32,110,111,110,45,114,101,99,117,114,115,105,118,101,32,99,97,115,101,115,46,32,73,116,101,109,32,40,63,82,41,32,105,115,32,116,104,101,32,97,99,116,117,97,108,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,46>>]},{p,[],[{em,[],[<<68,105,102,102,101,114,101,110,99,101,115,32,105,110,32,82,101,99,117,114,115,105,111,110,32,80,114,111,99,101,115,115,105,110,103,32,98,101,116,119,101,101,110,32,80,67,82,69,32,97,110,100,32,80,101,114,108>>]}]},{p,[],[<<82,101,99,117,114,115,105,111,110,32,112,114,111,99,101,115,115,105,110,103,32,105,110,32,80,67,82,69,32,100,105,102,102,101,114,115,32,102,114,111,109,32,80,101,114,108,32,105,110,32,116,119,111,32,105,109,112,111,114,116,97,110,116,32,119,97,121,115,46,32,73,110,32,80,67,82,69,32,40,108,105,107,101,32,80,121,116,104,111,110,44,32,98,117,116,32,117,110,108,105,107,101,32,80,101,114,108,41,44,32,97,32,114,101,99,117,114,115,105,118,101,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,32,105,115,32,97,108,119,97,121,115,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,46,32,84,104,97,116,32,105,115,44,32,111,110,99,101,32,105,116,32,104,97,115,32,109,97,116,99,104,101,100,32,115,111,109,101,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,105,116,32,105,115,32,110,101,118,101,114,32,114,101,45,101,110,116,101,114,101,100,44,32,101,118,101,110,32,105,102,32,105,116,32,99,111,110,116,97,105,110,115,32,117,110,116,114,105,101,100,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,110,100,32,116,104,101,114,101,32,105,115,32,97,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,46,32,84,104,105,115,32,99,97,110,32,98,101,32,105,108,108,117,115,116,114,97,116,101,100,32,98,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,109,101,97,110,115,32,116,111,32,109,97,116,99,104,32,97,32,112,97,108,105,110,100,114,111,109,105,99,32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,97,110,32,111,100,100,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,102,111,114,32,101,120,97,109,112,108,101,44,32,34,97,34,44,32,34,97,98,97,34,44,32,34,97,98,99,98,97,34,44,32,34,97,98,99,100,99,98,97,34,41,58>>]},{pre,[],[{code,[],[<<94,40,46,124,40,46,41,40,63,49,41,92,50,41,36>>]}]},{p,[],[<<84,104,101,32,105,100,101,97,32,105,115,32,116,104,97,116,32,105,116,32,101,105,116,104,101,114,32,109,97,116,99,104,101,115,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,116,119,111,32,105,100,101,110,116,105,99,97,108,32,99,104,97,114,97,99,116,101,114,115,32,115,117,114,114,111,117,110,100,105,110,103,32,97,32,115,117,98,112,97,108,105,110,100,114,111,109,101,46,32,73,110,32,80,101,114,108,44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,119,111,114,107,115,59,32,105,110,32,80,67,82,69,32,105,116,32,100,111,101,115,32,110,111,116,32,119,111,114,107,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,114,101,101,32,99,104,97,114,97,99,116,101,114,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,34,97,98,99,98,97,34,46>>]},{p,[],[<<65,116,32,116,104,101,32,116,111,112,32,108,101,118,101,108,44,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,105,115,32,109,97,116,99,104,101,100,44,32,98,117,116,32,97,115,32,105,116,32,105,115,32,110,111,116,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,116,104,101,32,102,105,114,115,116,32,97,108,116,101,114,110,97,116,105,118,101,32,102,97,105,108,115,44,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,116,97,107,101,110,44,32,97,110,100,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,107,105,99,107,115,32,105,110,46,32,84,104,101,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,116,111,32,115,117,98,112,97,116,116,101,114,110,32,49,32,115,117,99,99,101,115,115,102,117,108,108,121,32,109,97,116,99,104,101,115,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40,34,98,34,41,46,32,40,78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,97,110,100,32,101,110,100,32,111,102,32,108,105,110,101,32,116,101,115,116,115,32,97,114,101,32,110,111,116,32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,99,117,114,115,105,111,110,46,41>>]},{p,[],[<<66,97,99,107,32,97,116,32,116,104,101,32,116,111,112,32,108,101,118,101,108,44,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40,34,99,34,41,32,105,115,32,99,111,109,112,97,114,101,100,32,119,105,116,104,32,119,104,97,116,32,115,117,98,112,97,116,116,101,114,110,32,50,32,109,97,116,99,104,101,100,44,32,119,104,105,99,104,32,119,97,115,32,34,97,34,46,32,84,104,105,115,32,102,97,105,108,115,46,32,65,115,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,105,115,32,116,114,101,97,116,101,100,32,97,115,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,44,32,116,104,101,114,101,32,97,114,101,32,110,111,119,32,110,111,32,98,97,99,107,116,114,97,99,107,105,110,103,32,112,111,105,110,116,115,44,32,97,110,100,32,115,111,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,102,97,105,108,115,46,32,40,80,101,114,108,32,99,97,110,32,110,111,119,32,114,101,45,101,110,116,101,114,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,97,110,100,32,116,114,121,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,46,41,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,119,114,105,116,116,101,110,32,119,105,116,104,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,105,110,32,116,104,101,32,111,116,104,101,114,32,111,114,100,101,114,44,32,116,104,105,110,103,115,32,97,114,101,32,100,105,102,102,101,114,101,110,116,58>>]},{pre,[],[{code,[],[<<94,40,40,46,41,40,63,49,41,92,50,124,46,41,36>>]}]},{p,[],[<<84,104,105,115,32,116,105,109,101,44,32,116,104,101,32,114,101,99,117,114,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,116,114,105,101,100,32,102,105,114,115,116,44,32,97,110,100,32,99,111,110,116,105,110,117,101,115,32,116,111,32,114,101,99,117,114,115,101,32,117,110,116,105,108,32,105,116,32,114,117,110,115,32,111,117,116,32,111,102,32,99,104,97,114,97,99,116,101,114,115,44,32,97,116,32,119,104,105,99,104,32,112,111,105,110,116,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,102,97,105,108,115,46,32,66,117,116,32,116,104,105,115,32,116,105,109,101,32,119,101,32,104,97,118,101,32,97,110,111,116,104,101,114,32,97,108,116,101,114,110,97,116,105,118,101,32,116,111,32,116,114,121,32,97,116,32,116,104,101,32,104,105,103,104,101,114,32,108,101,118,101,108,46,32,84,104,97,116,32,105,115,32,116,104,101,32,115,105,103,110,105,102,105,99,97,110,116,32,100,105,102,102,101,114,101,110,99,101,58,32,105,110,32,116,104,101,32,112,114,101,118,105,111,117,115,32,99,97,115,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,32,105,115,32,97,116,32,97,32,100,101,101,112,101,114,32,114,101,99,117,114,115,105,111,110,32,108,101,118,101,108,44,32,119,104,105,99,104,32,80,67,82,69,32,99,97,110,110,111,116,32,117,115,101,46>>]},{p,[],[<<84,111,32,99,104,97,110,103,101,32,116,104,101,32,112,97,116,116,101,114,110,32,115,111,32,116,104,97,116,32,105,116,32,109,97,116,99,104,101,115,32,97,108,108,32,112,97,108,105,110,100,114,111,109,105,99,32,115,116,114,105,110,103,115,44,32,110,111,116,32,111,110,108,121,32,116,104,111,115,101,32,119,105,116,104,32,97,110,32,111,100,100,32,110,117,109,98,101,114,32,111,102,32,99,104,97,114,97,99,116,101,114,115,44,32,105,116,32,105,115,32,116,101,109,112,116,105,110,103,32,116,111,32,99,104,97,110,103,101,32,116,104,101,32,112,97,116,116,101,114,110,32,116,111,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<94,40,40,46,41,40,63,49,41,92,50,124,46,63,41,36>>]}]},{p,[],[<<65,103,97,105,110,44,32,116,104,105,115,32,119,111,114,107,115,32,105,110,32,80,101,114,108,44,32,98,117,116,32,110,111,116,32,105,110,32,80,67,82,69,44,32,97,110,100,32,102,111,114,32,116,104,101,32,115,97,109,101,32,114,101,97,115,111,110,46,32,87,104,101,110,32,97,32,100,101,101,112,101,114,32,114,101,99,117,114,115,105,111,110,32,104,97,115,32,109,97,116,99,104,101,100,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,44,32,105,116,32,99,97,110,110,111,116,32,98,101,32,101,110,116,101,114,101,100,32,97,103,97,105,110,32,116,111,32,109,97,116,99,104,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,46,32,84,104,101,32,115,111,108,117,116,105,111,110,32,105,115,32,116,111,32,115,101,112,97,114,97,116,101,32,116,104,101,32,116,119,111,32,99,97,115,101,115,44,32,97,110,100,32,119,114,105,116,101,32,111,117,116,32,116,104,101,32,111,100,100,32,97,110,100,32,101,118,101,110,32,99,97,115,101,115,32,97,115,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,116,32,116,104,101,32,104,105,103,104,101,114,32,108,101,118,101,108,58>>]},{pre,[],[{code,[],[<<94,40,63,58,40,40,46,41,40,63,49,41,92,50,124,41,124,40,40,46,41,40,63,51,41,92,52,124,46,41,41>>]}]},{p,[],[<<73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,109,97,116,99,104,32,116,121,112,105,99,97,108,32,112,97,108,105,110,100,114,111,109,105,99,32,112,104,114,97,115,101,115,44,32,116,104,101,32,112,97,116,116,101,114,110,32,109,117,115,116,32,105,103,110,111,114,101,32,97,108,108,32,110,111,110,45,119,111,114,100,32,99,104,97,114,97,99,116,101,114,115,44,32,119,104,105,99,104,32,99,97,110,32,98,101,32,100,111,110,101,32,97,115,32,102,111,108,108,111,119,115,58>>]},{pre,[],[{code,[],[<<94,92,87,42,43,40,63,58,40,40,46,41,92,87,42,43,40,63,49,41,92,87,42,43,92,50,124,41,124,40,40,46,41,92,87,42,43,40,63,51,41,92,87,42,43,92,52,124,92,87,42,43,46,92,87,42,43,41,41,92,87,42,43,36>>]}]},{p,[],[<<73,102,32,114,117,110,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<99,97,115,101,108,101,115,115>>]},<<44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,112,104,114,97,115,101,115,32,115,117,99,104,32,97,115,32,34,65,32,109,97,110,44,32,97,32,112,108,97,110,44,32,97,32,99,97,110,97,108,58,32,80,97,110,97,109,97,33,34,32,97,110,100,32,105,116,32,119,111,114,107,115,32,119,101,108,108,32,105,110,32,98,111,116,104,32,80,67,82,69,32,97,110,100,32,80,101,114,108,46,32,78,111,116,105,99,101,32,116,104,101,32,117,115,101,32,111,102,32,116,104,101,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,42,43,32,116,111,32,97,118,111,105,100,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,115,101,113,117,101,110,99,101,115,32,111,102,32,110,111,110,45,119,111,114,100,32,99,104,97,114,97,99,116,101,114,115,46,32,87,105,116,104,111,117,116,32,116,104,105,115,44,32,80,67,82,69,32,116,97,107,101,115,32,109,117,99,104,32,108,111,110,103,101,114,32,40,49,48,32,116,105,109,101,115,32,111,114,32,109,111,114,101,41,32,116,111,32,109,97,116,99,104,32,116,121,112,105,99,97,108,32,112,104,114,97,115,101,115,44,32,97,110,100,32,80,101,114,108,32,116,97,107,101,115,32,115,111,32,108,111,110,103,32,116,104,97,116,32,121,111,117,32,116,104,105,110,107,32,105,116,32,104,97,115,32,103,111,110,101,32,105,110,116,111,32,97,32,108,111,111,112,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,112,97,108,105,110,100,114,111,109,101,45,109,97,116,99,104,105,110,103,32,112,97,116,116,101,114,110,115,32,97,98,111,118,101,32,119,111,114,107,32,111,110,108,121,32,105,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105,116,104,32,97,32,112,97,108,105,110,100,114,111,109,101,32,116,104,97,116,32,105,115,32,115,104,111,114,116,101,114,32,116,104,97,110,32,116,104,101,32,101,110,116,105,114,101,32,115,116,114,105,110,103,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,97,108,116,104,111,117,103,104,32,34,97,98,99,98,97,34,32,105,115,32,99,111,114,114,101,99,116,108,121,32,109,97,116,99,104,101,100,44,32,105,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,97,98,97,98,97,34,44,32,80,67,82,69,32,102,105,110,100,115,32,112,97,108,105,110,100,114,111,109,101,32,34,97,98,97,34,32,97,116,32,116,104,101,32,115,116,97,114,116,44,32,97,110,100,32,116,104,101,110,32,102,97,105,108,115,32,97,116,32,116,111,112,32,108,101,118,101,108,44,32,97,115,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,100,111,101,115,32,110,111,116,32,102,111,108,108,111,119,46,32,79,110,99,101,32,97,103,97,105,110,44,32,105,116,32,99,97,110,110,111,116,32,106,117,109,112,32,98,97,99,107,32,105,110,116,111,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,116,111,32,116,114,121,32,111,116,104,101,114,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,115,111,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,102,97,105,108,115,46>>]}]},{p,[],[<<84,104,101,32,115,101,99,111,110,100,32,119,97,121,32,105,110,32,119,104,105,99,104,32,80,67,82,69,32,97,110,100,32,80,101,114,108,32,100,105,102,102,101,114,32,105,110,32,116,104,101,105,114,32,114,101,99,117,114,115,105,111,110,32,112,114,111,99,101,115,115,105,110,103,32,105,115,32,105,110,32,116,104,101,32,104,97,110,100,108,105,110,103,32,111,102,32,99,97,112,116,117,114,101,100,32,118,97,108,117,101,115,46,32,73,110,32,80,101,114,108,44,32,119,104,101,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,99,97,108,108,101,100,32,114,101,99,117,114,115,105,118,101,108,121,32,111,114,32,97,115,32,97,32,115,117,98,112,97,116,116,101,114,110,32,40,115,101,101,32,116,104,101,32,110,101,120,116,32,115,101,99,116,105,111,110,41,44,32,105,116,32,104,97,115,32,110,111,32,97,99,99,101,115,115,32,116,111,32,97,110,121,32,118,97,108,117,101,115,32,116,104,97,116,32,119,101,114,101,32,99,97,112,116,117,114,101,100,32,111,117,116,115,105,100,101,32,116,104,101,32,114,101,99,117,114,115,105,111,110,46,32,73,110,32,80,67,82,69,32,116,104,101,115,101,32,118,97,108,117,101,115,32,99,97,110,32,98,101,32,114,101,102,101,114,101,110,99,101,100,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<94,40,46,41,40,92,49,124,97,40,63,50,41,41>>]}]},{p,[],[<<73,110,32,80,67,82,69,44,32,105,116,32,109,97,116,99,104,101,115,32,34,98,97,98,34,46,32,84,104,101,32,102,105,114,115,116,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,109,97,116,99,104,32,34,98,34,44,32,116,104,101,110,32,105,110,32,116,104,101,32,115,101,99,111,110,100,32,103,114,111,117,112,44,32,119,104,101,110,32,116,104,101,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,32,92,49,32,102,97,105,108,115,32,116,111,32,109,97,116,99,104,32,34,98,34,44,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,32,109,97,116,99,104,101,115,32,34,97,34,44,32,97,110,100,32,116,104,101,110,32,114,101,99,117,114,115,101,115,46,32,73,110,32,116,104,101,32,114,101,99,117,114,115,105,111,110,44,32,92,49,32,100,111,101,115,32,110,111,119,32,109,97,116,99,104,32,34,98,34,32,97,110,100,32,115,111,32,116,104,101,32,119,104,111,108,101,32,109,97,116,99,104,32,115,117,99,99,101,101,100,115,46,32,73,110,32,80,101,114,108,44,32,116,104,101,32,112,97,116,116,101,114,110,32,102,97,105,108,115,32,116,111,32,109,97,116,99,104,32,98,101,99,97,117,115,101,32,105,110,115,105,100,101,32,116,104,101,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,92,49,32,99,97,110,110,111,116,32,97,99,99,101,115,115,32,116,104,101,32,101,120,116,101,114,110,97,108,108,121,32,115,101,116,32,118,97,108,117,101,46>>]},{a,[{id,<<115,101,99,116,50,49>>}],[]},{h2,[],[<<83,117,98,112,97,116,116,101,114,110,115,32,97,115,32,83,117,98,114,111,117,116,105,110,101,115>>]},{p,[],[<<73,102,32,116,104,101,32,115,121,110,116,97,120,32,102,111,114,32,97,32,114,101,99,117,114,115,105,118,101,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,32,40,101,105,116,104,101,114,32,98,121,32,110,117,109,98,101,114,32,111,114,32,98,121,32,110,97,109,101,41,32,105,115,32,117,115,101,100,32,111,117,116,115,105,100,101,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,116,111,32,119,104,105,99,104,32,105,116,32,114,101,102,101,114,115,44,32,105,116,32,111,112,101,114,97,116,101,115,32,108,105,107,101,32,97,32,115,117,98,114,111,117,116,105,110,101,32,105,110,32,97,32,112,114,111,103,114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,46,32,84,104,101,32,99,97,108,108,101,100,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,98,101,32,100,101,102,105,110,101,100,32,98,101,102,111,114,101,32,111,114,32,97,102,116,101,114,32,116,104,101,32,114,101,102,101,114,101,110,99,101,46,32,65,32,110,117,109,98,101,114,101,100,32,114,101,102,101,114,101,110,99,101,32,99,97,110,32,98,101,32,97,98,115,111,108,117,116,101,32,111,114,32,114,101,108,97,116,105,118,101,44,32,97,115,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,115,58>>]},{pre,[],[{code,[],[<<40,46,46,46,40,97,98,115,111,108,117,116,101,41,46,46,46,41,46,46,46,40,63,50,41,46,46,46,10,40,46,46,46,40,114,101,108,97,116,105,118,101,41,46,46,46,41,46,46,46,40,63,45,49,41,46,46,46,10,40,46,46,46,40,63,43,49,41,46,46,46,40,114,101,108,97,116,105,118,101,41,46,46,46>>]}]},{p,[],[<<65,110,32,101,97,114,108,105,101,114,32,101,120,97,109,112,108,101,32,112,111,105,110,116,101,100,32,111,117,116,32,116,104,97,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,115,101,110,115,101,32,97,110,100,32,115,101,110,115,105,98,105,108,105,116,121,34,32,97,110,100,32,34,114,101,115,112,111,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,44,32,98,117,116,32,110,111,116,32,34,115,101,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,58>>]},{pre,[],[{code,[],[<<40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,92,49,105,98,105,108,105,116,121>>]}]},{p,[],[<<73,102,32,105,110,115,116,101,97,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,105,115,32,117,115,101,100,44,32,105,116,32,109,97,116,99,104,101,115,32,34,115,101,110,115,101,32,97,110,100,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,34,32,97,110,100,32,116,104,101,32,111,116,104,101,114,32,116,119,111,32,115,116,114,105,110,103,115,58>>]},{pre,[],[{code,[],[<<40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,40,63,49,41,105,98,105,108,105,116,121>>]}]},{p,[],[<<65,110,111,116,104,101,114,32,101,120,97,109,112,108,101,32,105,115,32,112,114,111,118,105,100,101,100,32,105,110,32,116,104,101,32,100,105,115,99,117,115,115,105,111,110,32,111,102,32,68,69,70,73,78,69,32,101,97,114,108,105,101,114,46>>]},{p,[],[<<65,108,108,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,115,44,32,114,101,99,117,114,115,105,118,101,32,111,114,32,110,111,116,44,32,97,114,101,32,97,108,119,97,121,115,32,116,114,101,97,116,101,100,32,97,115,32,97,116,111,109,105,99,32,103,114,111,117,112,115,46,32,84,104,97,116,32,105,115,44,32,111,110,99,101,32,97,32,115,117,98,114,111,117,116,105,110,101,32,104,97,115,32,109,97,116,99,104,101,100,32,115,111,109,101,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,105,116,32,105,115,32,110,101,118,101,114,32,114,101,45,101,110,116,101,114,101,100,44,32,101,118,101,110,32,105,102,32,105,116,32,99,111,110,116,97,105,110,115,32,117,110,116,114,105,101,100,32,97,108,116,101,114,110,97,116,105,118,101,115,32,97,110,100,32,116,104,101,114,101,32,105,115,32,97,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,46,32,65,110,121,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,116,104,97,116,32,97,114,101,32,115,101,116,32,100,117,114,105,110,103,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,32,114,101,118,101,114,116,32,116,111,32,116,104,101,105,114,32,112,114,101,118,105,111,117,115,32,118,97,108,117,101,115,32,97,102,116,101,114,119,97,114,100,115,46>>]},{p,[],[<<80,114,111,99,101,115,115,105,110,103,32,111,112,116,105,111,110,115,32,115,117,99,104,32,97,115,32,99,97,115,101,45,105,110,100,101,112,101,110,100,101,110,99,101,32,97,114,101,32,102,105,120,101,100,32,119,104,101,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,100,101,102,105,110,101,100,44,32,115,111,32,105,102,32,105,116,32,105,115,32,117,115,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,44,32,115,117,99,104,32,111,112,116,105,111,110,115,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,102,111,114,32,100,105,102,102,101,114,101,110,116,32,99,97,108,108,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,34,97,98,99,97,98,99,34,32,98,117,116,32,110,111,116,32,34,97,98,99,65,66,67,34,44,32,97,115,32,116,104,101,32,99,104,97,110,103,101,32,111,102,32,112,114,111,99,101,115,115,105,110,103,32,111,112,116,105,111,110,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,99,97,108,108,101,100,32,115,117,98,112,97,116,116,101,114,110,58>>]},{pre,[],[{code,[],[<<40,97,98,99,41,40,63,105,58,40,63,45,49,41,41>>]}]},{a,[{id,<<115,101,99,116,50,50>>}],[]},{h2,[],[<<79,110,105,103,117,114,117,109,97,32,83,117,98,114,111,117,116,105,110,101,32,83,121,110,116,97,120>>]},{p,[],[<<70,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32,79,110,105,103,117,114,117,109,97,44,32,116,104,101,32,110,111,110,45,80,101,114,108,32,115,121,110,116,97,120,32,92,103,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,32,111,114,32,97,32,110,117,109,98,101,114,32,101,110,99,108,111,115,101,100,32,101,105,116,104,101,114,32,105,110,32,97,110,103,108,101,32,98,114,97,99,107,101,116,115,32,111,114,32,115,105,110,103,108,101,32,113,117,111,116,101,115,44,32,105,115,32,97,108,116,101,114,110,97,116,105,118,101,32,115,121,110,116,97,120,32,102,111,114,32,114,101,102,101,114,101,110,99,105,110,103,32,97,32,115,117,98,112,97,116,116,101,114,110,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,44,32,112,111,115,115,105,98,108,121,32,114,101,99,117,114,115,105,118,101,108,121,46,32,72,101,114,101,32,102,111,108,108,111,119,115,32,116,119,111,32,111,102,32,116,104,101,32,101,120,97,109,112,108,101,115,32,117,115,101,100,32,97,98,111,118,101,44,32,114,101,119,114,105,116,116,101,110,32,117,115,105,110,103,32,116,104,105,115,32,115,121,110,116,97,120,58>>]},{pre,[],[{code,[],[<<40,63,60,112,110,62,32,92,40,32,40,32,40,63,62,91,94,40,41,93,43,41,32,124,32,92,103,60,112,110,62,32,41,42,32,92,41,32,41,10,40,115,101,110,115,124,114,101,115,112,111,110,115,41,101,32,97,110,100,32,92,103,39,49,39,105,98,105,108,105,116,121>>]}]},{p,[],[<<80,67,82,69,32,115,117,112,112,111,114,116,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32,116,111,32,79,110,105,103,117,114,117,109,97,58,32,105,102,32,97,32,110,117,109,98,101,114,32,105,115,32,112,114,101,99,101,100,101,100,32,98,121,32,97,32,112,108,117,115,32,111,114,32,109,105,110,117,115,32,115,105,103,110,44,32,105,116,32,105,115,32,116,97,107,101,110,32,97,115,32,97,32,114,101,108,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<40,97,98,99,41,40,63,105,58,92,103,60,45,49,62,41>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,92,103,123,46,46,46,125,32,40,80,101,114,108,32,115,121,110,116,97,120,41,32,97,110,100,32,92,103,60,46,46,46,62,32,40,79,110,105,103,117,114,117,109,97,32,115,121,110,116,97,120,41,32,97,114,101,32>>,{em,[],[<<110,111,116>>]},<<32,115,121,110,111,110,121,109,111,117,115,46,32,84,104,101,32,102,111,114,109,101,114,32,105,115,32,97,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,59,32,116,104,101,32,108,97,116,116,101,114,32,105,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,46>>]},{a,[{id,<<115,101,99,116,50,51>>}],[]},{h2,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,67,111,110,116,114,111,108>>]},{p,[],[<<80,101,114,108,32,53,46,49,48,32,105,110,116,114,111,100,117,99,101,100,32,115,111,109,101,32,34,83,112,101,99,105,97,108,32,66,97,99,107,116,114,97,99,107,105,110,103,32,67,111,110,116,114,111,108,32,86,101,114,98,115,34,44,32,119,104,105,99,104,32,97,114,101,32,115,116,105,108,108,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,101,32,80,101,114,108,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,97,115,32,34,101,120,112,101,114,105,109,101,110,116,97,108,32,97,110,100,32,115,117,98,106,101,99,116,32,116,111,32,99,104,97,110,103,101,32,111,114,32,114,101,109,111,118,97,108,32,105,110,32,97,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,32,111,102,32,80,101,114,108,34,46,32,73,116,32,103,111,101,115,32,111,110,32,116,111,32,115,97,121,58,32,34,84,104,101,105,114,32,117,115,97,103,101,32,105,110,32,112,114,111,100,117,99,116,105,111,110,32,99,111,100,101,32,115,104,111,117,108,100,32,98,101,32,110,111,116,101,100,32,116,111,32,97,118,111,105,100,32,112,114,111,98,108,101,109,115,32,100,117,114,105,110,103,32,117,112,103,114,97,100,101,115,46,34,32,84,104,101,32,115,97,109,101,32,114,101,109,97,114,107,115,32,97,112,112,108,121,32,116,111,32,116,104,101,32,80,67,82,69,32,102,101,97,116,117,114,101,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,116,104,105,115,32,115,101,99,116,105,111,110,46>>]},{p,[],[<<84,104,101,32,110,101,119,32,118,101,114,98,115,32,109,97,107,101,32,117,115,101,32,111,102,32,119,104,97,116,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,105,110,118,97,108,105,100,32,115,121,110,116,97,120,58,32,97,110,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,97,110,32,97,115,116,101,114,105,115,107,46,32,84,104,101,121,32,97,114,101,32,103,101,110,101,114,97,108,108,121,32,111,102,32,116,104,101,32,102,111,114,109,32,40,42,86,69,82,66,41,32,111,114,32,40,42,86,69,82,66,58,78,65,77,69,41,46,32,83,111,109,101,32,99,97,110,32,116,97,107,101,32,101,105,116,104,101,114,32,102,111,114,109,44,32,112,111,115,115,105,98,108,121,32,98,101,104,97,118,105,110,103,32,100,105,102,102,101,114,101,110,116,108,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,119,104,101,116,104,101,114,32,97,32,110,97,109,101,32,105,115,32,112,114,101,115,101,110,116,46,32,65,32,110,97,109,101,32,105,115,32,97,110,121,32,115,101,113,117,101,110,99,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,105,110,99,108,117,100,101,32,97,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,46,32,84,104,101,32,109,97,120,105,109,117,109,32,110,97,109,101,32,108,101,110,103,116,104,32,105,115,32,50,53,53,32,105,110,32,116,104,101,32,56,45,98,105,116,32,108,105,98,114,97,114,121,32,97,110,100,32,54,53,53,51,53,32,105,110,32,116,104,101,32,49,54,45,98,105,116,32,97,110,100,32,51,50,45,98,105,116,32,108,105,98,114,97,114,105,101,115,46,32,73,102,32,116,104,101,32,110,97,109,101,32,105,115,32,101,109,112,116,121,44,32,116,104,97,116,32,105,115,44,32,105,102,32,116,104,101,32,99,108,111,115,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,115,32,116,104,101,32,99,111,108,111,110,44,32,116,104,101,32,101,102,102,101,99,116,32,105,115,32,97,115,32,105,102,32,116,104,101,32,99,111,108,111,110,32,119,97,115,32,110,111,116,32,116,104,101,114,101,46,32,65,110,121,32,110,117,109,98,101,114,32,111,102,32,116,104,101,115,101,32,118,101,114,98,115,32,99,97,110,32,111,99,99,117,114,32,105,110,32,97,32,112,97,116,116,101,114,110,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,115,101,32,118,101,114,98,115,32,105,110,32,114,101,112,101,97,116,101,100,32,103,114,111,117,112,115,44,32,97,115,115,101,114,116,105,111,110,115,44,32,97,110,100,32,105,110,32,115,117,98,112,97,116,116,101,114,110,115,32,99,97,108,108,101,100,32,97,115,32,115,117,98,114,111,117,116,105,110,101,115,32,40,119,104,101,116,104,101,114,32,111,114,32,110,111,116,32,114,101,99,117,114,115,105,118,101,108,121,41,32,105,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,46>>]},{p,[],[{em,[],[<<79,112,116,105,109,105,122,97,116,105,111,110,115,32,84,104,97,116,32,65,102,102,101,99,116,32,66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115>>]}]},{p,[],[<<80,67,82,69,32,99,111,110,116,97,105,110,115,32,115,111,109,101,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,116,104,97,116,32,97,114,101,32,117,115,101,100,32,116,111,32,115,112,101,101,100,32,117,112,32,109,97,116,99,104,105,110,103,32,98,121,32,114,117,110,110,105,110,103,32,115,111,109,101,32,99,104,101,99,107,115,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,101,97,99,104,32,109,97,116,99,104,32,97,116,116,101,109,112,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,116,32,99,97,110,32,107,110,111,119,32,116,104,101,32,109,105,110,105,109,117,109,32,108,101,110,103,116,104,32,111,102,32,109,97,116,99,104,105,110,103,32,115,117,98,106,101,99,116,44,32,111,114,32,116,104,97,116,32,97,32,112,97,114,116,105,99,117,108,97,114,32,99,104,97,114,97,99,116,101,114,32,109,117,115,116,32,98,101,32,112,114,101,115,101,110,116,46,32,87,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,98,121,112,97,115,115,101,115,32,116,104,101,32,114,117,110,110,105,110,103,32,111,102,32,97,32,109,97,116,99,104,44,32,97,110,121,32,105,110,99,108,117,100,101,100,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,97,114,101,32,110,111,116,32,112,114,111,99,101,115,115,101,100,46,32,112,114,111,99,101,115,115,101,100,46,32,89,111,117,32,99,97,110,32,115,117,112,112,114,101,115,115,32,116,104,101,32,115,116,97,114,116,45,111,102,45,109,97,116,99,104,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,98,121,32,115,101,116,116,105,110,103,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]},<<32,119,104,101,110,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,111,114,32,98,121,32,115,116,97,114,116,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,119,105,116,104,32,40,42,78,79,95,83,84,65,82,84,95,79,80,84,41,46>>]},{p,[],[<<69,120,112,101,114,105,109,101,110,116,115,32,119,105,116,104,32,80,101,114,108,32,115,117,103,103,101,115,116,32,116,104,97,116,32,105,116,32,116,111,111,32,104,97,115,32,115,105,109,105,108,97,114,32,111,112,116,105,109,105,122,97,116,105,111,110,115,44,32,115,111,109,101,116,105,109,101,115,32,108,101,97,100,105,110,103,32,116,111,32,97,110,111,109,97,108,111,117,115,32,114,101,115,117,108,116,115,46>>]},{p,[],[{em,[],[<<86,101,114,98,115,32,84,104,97,116,32,65,99,116,32,73,109,109,101,100,105,97,116,101,108,121>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,115,32,97,99,116,32,97,115,32,115,111,111,110,32,97,115,32,116,104,101,121,32,97,114,101,32,101,110,99,111,117,110,116,101,114,101,100,46,32,84,104,101,121,32,109,117,115,116,32,110,111,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,46>>]},{pre,[],[{code,[],[<<40,42,65,67,67,69,80,84,41>>]}]},{p,[],[<<84,104,105,115,32,118,101,114,98,32,99,97,117,115,101,115,32,116,104,101,32,109,97,116,99,104,32,116,111,32,101,110,100,32,115,117,99,99,101,115,115,102,117,108,108,121,44,32,115,107,105,112,112,105,110,103,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,105,116,32,105,115,32,105,110,115,105,100,101,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,105,115,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,44,32,111,110,108,121,32,116,104,97,116,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,101,110,100,101,100,32,115,117,99,99,101,115,115,102,117,108,108,121,46,32,77,97,116,99,104,105,110,103,32,116,104,101,110,32,99,111,110,116,105,110,117,101,115,32,97,116,32,116,104,101,32,111,117,116,101,114,32,108,101,118,101,108,46,32,73,102,32,40,42,65,67,67,69,80,84,41,32,105,115,32,116,114,105,103,103,101,114,101,100,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,115,117,99,99,101,101,100,115,59,32,105,110,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,44,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,102,97,105,108,115,46>>]},{p,[],[<<73,102,32,40,42,65,67,67,69,80,84,41,32,105,115,32,105,110,115,105,100,101,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,44,32,116,104,101,32,100,97,116,97,32,115,111,32,102,97,114,32,105,115,32,99,97,112,116,117,114,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,101,115,32,34,65,66,34,44,32,34,65,65,68,34,44,32,111,114,32,34,65,67,68,34,46,32,87,104,101,110,32,105,116,32,109,97,116,99,104,101,115,32,34,65,66,34,44,32,34,66,34,32,105,115,32,99,97,112,116,117,114,101,100,32,98,121,32,116,104,101,32,111,117,116,101,114,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{pre,[],[{code,[],[<<65,40,40,63,58,65,124,66,40,42,65,67,67,69,80,84,41,124,67,41,68,41>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,32,99,97,117,115,101,115,32,97,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,44,32,102,111,114,99,105,110,103,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,111,32,111,99,99,117,114,46,32,73,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,40,63,33,41,32,98,117,116,32,101,97,115,105,101,114,32,116,111,32,114,101,97,100,46>>]},{pre,[],[{code,[],[<<40,42,70,65,73,76,41,32,111,114,32,40,42,70,41>>]}]},{p,[],[<<84,104,101,32,80,101,114,108,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,115,116,97,116,101,115,32,116,104,97,116,32,105,116,32,105,115,32,112,114,111,98,97,98,108,121,32,117,115,101,102,117,108,32,111,110,108,121,32,119,104,101,110,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,40,63,123,125,41,32,111,114,32,40,63,63,123,125,41,46,32,84,104,111,115,101,32,97,114,101,32,80,101,114,108,32,102,101,97,116,117,114,101,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,80,67,82,69,46>>]},{p,[],[<<65,32,109,97,116,99,104,32,119,105,116,104,32,116,104,101,32,115,116,114,105,110,103,32,34,97,97,97,97,34,32,97,108,119,97,121,115,32,102,97,105,108,115,44,32,98,117,116,32,116,104,101,32,99,97,108,108,111,117,116,32,105,115,32,116,97,107,101,110,32,98,101,102,111,114,101,32,101,97,99,104,32,98,97,99,107,116,114,97,99,107,32,111,99,99,117,114,115,32,40,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,44,32,49,48,32,116,105,109,101,115,41,46>>]},{p,[],[{em,[],[<<82,101,99,111,114,100,105,110,103,32,87,104,105,99,104,32,80,97,116,104,32,87,97,115,32,84,97,107,101,110>>]}]},{p,[],[<<84,104,101,32,109,97,105,110,32,112,117,114,112,111,115,101,32,111,102,32,116,104,105,115,32,118,101,114,98,32,105,115,32,116,111,32,116,114,97,99,107,32,104,111,119,32,97,32,109,97,116,99,104,32,119,97,115,32,97,114,114,105,118,101,100,32,97,116,44,32,97,108,116,104,111,117,103,104,32,105,116,32,97,108,115,111,32,104,97,115,32,97,32,115,101,99,111,110,100,97,114,121,32,117,115,101,32,105,110,32,119,105,116,104,32,97,100,118,97,110,99,105,110,103,32,116,104,101,32,109,97,116,99,104,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,32,40,115,101,101,32,40,42,83,75,73,80,41,32,98,101,108,111,119,41,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<73,110,32,69,114,108,97,110,103,44,32,116,104,101,114,101,32,105,115,32,110,111,32,105,110,116,101,114,102,97,99,101,32,116,111,32,114,101,116,114,105,101,118,101,32,97,32,109,97,114,107,32,119,105,116,104,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,50,44,51>>]}]},<<44,32,115,111,32,111,110,108,121,32,116,104,101,32,115,101,99,111,110,100,97,114,121,32,112,117,114,112,111,115,101,32,105,115,32,114,101,108,101,118,97,110,116,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,46>>]},{p,[],[<<84,104,101,32,114,101,115,116,32,111,102,32,116,104,105,115,32,115,101,99,116,105,111,110,32,105,115,32,116,104,101,114,101,102,111,114,101,32,100,101,108,105,98,101,114,97,116,101,108,121,32,110,111,116,32,97,100,97,112,116,101,100,32,102,111,114,32,114,101,97,100,105,110,103,32,98,121,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,44,32,98,117,116,32,116,104,101,32,101,120,97,109,112,108,101,115,32,99,97,110,32,104,101,108,112,32,105,110,32,117,110,100,101,114,115,116,97,110,100,105,110,103,32,78,65,77,69,83,32,97,115,32,116,104,101,121,32,99,97,110,32,98,101,32,117,115,101,100,32,98,121,32,40,42,83,75,73,80,41,46>>]}]},{pre,[],[{code,[],[<<40,42,77,65,82,75,58,78,65,77,69,41,32,111,114,32,40,42,58,78,65,77,69,41>>]}]},{p,[],[<<65,32,110,97,109,101,32,105,115,32,97,108,119,97,121,115,32,114,101,113,117,105,114,101,100,32,119,105,116,104,32,116,104,105,115,32,118,101,114,98,46,32,84,104,101,114,101,32,99,97,110,32,98,101,32,97,115,32,109,97,110,121,32,105,110,115,116,97,110,99,101,115,32,111,102,32,40,42,77,65,82,75,41,32,97,115,32,121,111,117,32,108,105,107,101,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,97,110,100,32,116,104,101,105,114,32,110,97,109,101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,116,111,32,98,101,32,117,110,105,113,117,101,46>>]},{p,[],[<<87,104,101,110,32,97,32,109,97,116,99,104,32,115,117,99,99,101,101,100,115,44,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,108,97,115,116,32,101,110,99,111,117,110,116,101,114,101,100,32,40,42,77,65,82,75,58,78,65,77,69,41,44,32,40,42,80,82,85,78,69,58,78,65,77,69,41,44,32,111,114,32,40,42,84,72,69,78,58,78,65,77,69,41,32,111,110,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,97,116,104,32,105,115,32,112,97,115,115,101,100,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,32,97,115,32,100,101,115,99,114,105,98,101,100,32,105,110,32,115,101,99,116,105,111,110,32,34,69,120,116,114,97,32,100,97,116,97,32,102,111,114,32>>,{code,[],[<<112,99,114,101,95,101,120,101,99,40,41>>]},<<34,32,105,110,32,116,104,101,32>>,{code,[],[<<112,99,114,101,97,112,105>>]},<<32,100,111,99,117,109,101,110,116,97,116,105,111,110,46,32,73,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,111,102,32>>,{code,[],[<<112,99,114,101,116,101,115,116>>]},<<32,111,117,116,112,117,116,44,32,116,104,101,32,47,75,32,109,111,100,105,102,105,101,114,32,114,101,113,117,101,115,116,115,32,116,104,101,32,114,101,116,114,105,101,118,97,108,32,97,110,100,32,111,117,116,112,117,116,116,105,110,103,32,111,102,32,40,42,77,65,82,75,41,32,100,97,116,97,58>>]},{pre,[],[{code,[],[<<32,32,114,101,62,32,47,88,40,42,77,65,82,75,58,65,41,89,124,88,40,42,77,65,82,75,58,66,41,90,47,75,10,100,97,116,97,62,32,88,89,10,32,48,58,32,88,89,10,77,75,58,32,65,10,88,90,10,32,48,58,32,88,90,10,77,75,58,32,66>>]}]},{p,[],[<<84,104,101,32,40,42,77,65,82,75,41,32,110,97,109,101,32,105,115,32,116,97,103,103,101,100,32,119,105,116,104,32,34,77,75,58,34,32,105,110,32,116,104,105,115,32,111,117,116,112,117,116,44,32,97,110,100,32,105,110,32,116,104,105,115,32,101,120,97,109,112,108,101,32,105,116,32,105,110,100,105,99,97,116,101,115,32,119,104,105,99,104,32,111,102,32,116,104,101,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,32,109,97,116,99,104,101,100,46,32,84,104,105,115,32,105,115,32,97,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,119,97,121,32,111,102,32,111,98,116,97,105,110,105,110,103,32,116,104,105,115,32,105,110,102,111,114,109,97,116,105,111,110,32,116,104,97,110,32,112,117,116,116,105,110,103,32,101,97,99,104,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,105,116,115,32,111,119,110,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,46>>]},{p,[],[<<73,102,32,97,32,118,101,114,98,32,119,105,116,104,32,97,32,110,97,109,101,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,44,32,116,104,101,32,110,97,109,101,32,105,115,32,114,101,99,111,114,100,101,100,32,97,110,100,32,112,97,115,115,101,100,32,98,97,99,107,32,105,102,32,105,116,32,105,115,32,116,104,101,32,108,97,115,116,32,101,110,99,111,117,110,116,101,114,101,100,46,32,84,104,105,115,32,100,111,101,115,32,110,111,116,32,111,99,99,117,114,32,102,111,114,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,111,114,32,102,97,105,108,105,110,103,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,46>>]},{p,[],[<<65,102,116,101,114,32,97,32,112,97,114,116,105,97,108,32,109,97,116,99,104,32,111,114,32,97,32,102,97,105,108,101,100,32,109,97,116,99,104,44,32,116,104,101,32,108,97,115,116,32,101,110,99,111,117,110,116,101,114,101,100,32,110,97,109,101,32,105,110,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,112,114,111,99,101,115,115,32,105,115,32,114,101,116,117,114,110,101,100,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<32,32,114,101,62,32,47,88,40,42,77,65,82,75,58,65,41,89,124,88,40,42,77,65,82,75,58,66,41,90,47,75,10,100,97,116,97,62,32,88,80,10,78,111,32,109,97,116,99,104,44,32,109,97,114,107,32,61,32,66>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,105,110,32,116,104,105,115,32,117,110,97,110,99,104,111,114,101,100,32,101,120,97,109,112,108,101,44,32,116,104,101,32,109,97,114,107,32,105,115,32,114,101,116,97,105,110,101,100,32,102,114,111,109,32,116,104,101,32,109,97,116,99,104,32,97,116,116,101,109,112,116,32,116,104,97,116,32,115,116,97,114,116,101,100,32,97,116,32,108,101,116,116,101,114,32,34,88,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,46,32,83,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,32,97,116,116,101,109,112,116,115,32,115,116,97,114,116,105,110,103,32,97,116,32,34,80,34,32,97,110,100,32,116,104,101,110,32,119,105,116,104,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,100,111,32,110,111,116,32,103,101,116,32,97,115,32,102,97,114,32,97,115,32,116,104,101,32,40,42,77,65,82,75,41,32,105,116,101,109,44,32,110,101,118,101,114,116,104,101,108,101,115,115,32,100,111,32,110,111,116,32,114,101,115,101,116,32,105,116,46>>]},{p,[],[{em,[],[<<86,101,114,98,115,32,84,104,97,116,32,65,99,116,32,97,102,116,101,114,32,66,97,99,107,116,114,97,99,107,105,110,103>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,115,32,100,111,32,110,111,116,104,105,110,103,32,119,104,101,110,32,116,104,101,121,32,97,114,101,32,101,110,99,111,117,110,116,101,114,101,100,46,32,77,97,116,99,104,105,110,103,32,99,111,110,116,105,110,117,101,115,32,119,105,116,104,32,119,104,97,116,32,102,111,108,108,111,119,115,44,32,98,117,116,32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,44,32,99,97,117,115,105,110,103,32,97,32,98,97,99,107,116,114,97,99,107,32,116,111,32,116,104,101,32,118,101,114,98,44,32,97,32,102,97,105,108,117,114,101,32,105,115,32,102,111,114,99,101,100,46,32,84,104,97,116,32,105,115,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,110,111,116,32,112,97,115,115,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,118,101,114,98,46,32,72,111,119,101,118,101,114,44,32,119,104,101,110,32,111,110,101,32,111,102,32,116,104,101,115,101,32,118,101,114,98,115,32,97,112,112,101,97,114,115,32,105,110,115,105,100,101,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,111,114,32,97,110,32,97,115,115,101,114,116,105,111,110,32,116,104,97,116,32,105,115,32,116,114,117,101,44,32,105,116,115,32,101,102,102,101,99,116,32,105,115,32,99,111,110,102,105,110,101,100,32,116,111,32,116,104,97,116,32,103,114,111,117,112,44,32,97,115,32,111,110,99,101,32,116,104,101,32,103,114,111,117,112,32,104,97,115,32,98,101,101,110,32,109,97,116,99,104,101,100,44,32,116,104,101,114,101,32,105,115,32,110,101,118,101,114,32,97,110,121,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,105,116,46,32,73,110,32,116,104,105,115,32,115,105,116,117,97,116,105,111,110,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,32,34,106,117,109,112,32,98,97,99,107,34,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,101,110,116,105,114,101,32,97,116,111,109,105,99,32,103,114,111,117,112,32,111,114,32,97,115,115,101,114,116,105,111,110,46,32,40,82,101,109,101,109,98,101,114,32,97,108,115,111,44,32,97,115,32,115,116,97,116,101,100,32,97,98,111,118,101,44,32,116,104,97,116,32,116,104,105,115,32,108,111,99,97,108,105,122,97,116,105,111,110,32,97,108,115,111,32,97,112,112,108,105,101,115,32,105,110,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,115,46,41>>]},{p,[],[<<84,104,101,115,101,32,118,101,114,98,115,32,100,105,102,102,101,114,32,105,110,32,101,120,97,99,116,108,121,32,119,104,97,116,32,107,105,110,100,32,111,102,32,102,97,105,108,117,114,101,32,111,99,99,117,114,115,32,119,104,101,110,32,98,97,99,107,116,114,97,99,107,105,110,103,32,114,101,97,99,104,101,115,32,116,104,101,109,46,32,84,104,101,32,98,101,104,97,118,105,111,114,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,32,105,115,32,119,104,97,116,32,111,99,99,117,114,115,32,119,104,101,110,32,116,104,101,32,118,101,114,98,32,105,115,32,110,111,116,32,105,110,32,97,32,115,117,98,114,111,117,116,105,110,101,32,111,114,32,97,110,32,97,115,115,101,114,116,105,111,110,46,32,83,117,98,115,101,113,117,101,110,116,32,115,101,99,116,105,111,110,115,32,99,111,118,101,114,32,116,104,101,115,101,32,115,112,101,99,105,97,108,32,99,97,115,101,115,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,44,32,119,104,105,99,104,32,109,117,115,116,32,110,111,116,32,98,101,32,102,111,108,108,111,119,101,100,32,98,121,32,97,32,110,97,109,101,44,32,99,97,117,115,101,115,32,116,104,101,32,119,104,111,108,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,32,111,117,116,114,105,103,104,116,32,105,102,32,116,104,101,114,101,32,105,115,32,97,32,108,97,116,101,114,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,116,104,97,116,32,99,97,117,115,101,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,111,32,114,101,97,99,104,32,105,116,46,32,69,118,101,110,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,117,110,97,110,99,104,111,114,101,100,44,32,110,111,32,102,117,114,116,104,101,114,32,97,116,116,101,109,112,116,115,32,116,111,32,102,105,110,100,32,97,32,109,97,116,99,104,32,98,121,32,97,100,118,97,110,99,105,110,103,32,116,104,101,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,32,116,97,107,101,32,112,108,97,99,101,46>>]},{pre,[],[{code,[],[<<40,42,67,79,77,77,73,84,41>>]}]},{p,[],[<<73,102,32,40,42,67,79,77,77,73,84,41,32,105,115,32,116,104,101,32,111,110,108,121,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,32,116,104,97,116,32,105,115,32,101,110,99,111,117,110,116,101,114,101,100,44,32,111,110,99,101,32,105,116,32,104,97,115,32,98,101,101,110,32,112,97,115,115,101,100,44,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,50,44,51>>]}]},<<32,105,115,32,99,111,109,109,105,116,116,101,100,32,116,111,32,102,105,110,100,32,97,32,109,97,116,99,104,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,44,32,111,114,32,110,111,116,32,97,116,32,97,108,108,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<97,43,40,42,67,79,77,77,73,84,41,98>>]}]},{p,[],[<<84,104,105,115,32,109,97,116,99,104,101,115,32,34,120,120,97,97,98,34,32,98,117,116,32,110,111,116,32,34,97,97,99,97,97,98,34,46,32,73,116,32,99,97,110,32,98,101,32,116,104,111,117,103,104,116,32,111,102,32,97,115,32,97,32,107,105,110,100,32,111,102,32,100,121,110,97,109,105,99,32,97,110,99,104,111,114,44,32,111,114,32,34,73,39,118,101,32,115,116,97,114,116,101,100,44,32,115,111,32,73,32,109,117,115,116,32,102,105,110,105,115,104,34,46,32,84,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,108,121,32,112,97,115,115,101,100,32,40,42,77,65,82,75,41,32,105,110,32,116,104,101,32,112,97,116,104,32,105,115,32,112,97,115,115,101,100,32,98,97,99,107,32,119,104,101,110,32,40,42,67,79,77,77,73,84,41,32,102,111,114,99,101,115,32,97,32,109,97,116,99,104,32,102,97,105,108,117,114,101,46>>]},{p,[],[<<73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,32,101,120,105,115,116,115,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,97,32,100,105,102,102,101,114,101,110,116,32,111,110,101,32,116,104,97,116,32,102,111,108,108,111,119,115,32,40,42,67,79,77,77,73,84,41,32,99,97,110,32,98,101,32,116,114,105,103,103,101,114,101,100,32,102,105,114,115,116,44,32,115,111,32,109,101,114,101,108,121,32,112,97,115,115,105,110,103,32,40,42,67,79,77,77,73,84,41,32,100,117,114,105,110,103,32,97,32,109,97,116,99,104,32,100,111,101,115,32,110,111,116,32,97,108,119,97,121,115,32,103,117,97,114,97,110,116,101,101,32,116,104,97,116,32,97,32,109,97,116,99,104,32,109,117,115,116,32,98,101,32,97,116,32,116,104,105,115,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,40,42,67,79,77,77,73,84,41,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,97,32,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,97,110,32,97,110,99,104,111,114,44,32,117,110,108,101,115,115,32,116,104,101,32,80,67,82,69,32,115,116,97,114,116,45,111,102,45,109,97,116,99,104,32,111,112,116,105,109,105,122,97,116,105,111,110,115,32,97,114,101,32,116,117,114,110,101,100,32,111,102,102,44,32,97,115,32,115,104,111,119,110,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<49,62,32,114,101,58,114,117,110,40,34,120,121,122,97,98,99,34,44,34,40,42,67,79,77,77,73,84,41,97,98,99,34,44,91,123,99,97,112,116,117,114,101,44,97,108,108,44,108,105,115,116,125,93,41,46,10,123,109,97,116,99,104,44,91,34,97,98,99,34,93,125,10,50,62,32,114,101,58,114,117,110,40,34,120,121,122,97,98,99,34,44,34,40,42,67,79,77,77,73,84,41,97,98,99,34,44,91,123,99,97,112,116,117,114,101,44,97,108,108,44,108,105,115,116,125,44,110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101,93,41,46,10,110,111,109,97,116,99,104>>]}]},{p,[],[<<70,111,114,32,116,104,105,115,32,112,97,116,116,101,114,110,44,32,80,67,82,69,32,107,110,111,119,115,32,116,104,97,116,32,97,110,121,32,109,97,116,99,104,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,34,97,34,44,32,115,111,32,116,104,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,115,107,105,112,115,32,97,108,111,110,103,32,116,104,101,32,115,117,98,106,101,99,116,32,116,111,32,34,97,34,32,98,101,102,111,114,101,32,97,112,112,108,121,105,110,103,32,116,104,101,32,112,97,116,116,101,114,110,32,116,111,32,116,104,101,32,102,105,114,115,116,32,115,101,116,32,111,102,32,100,97,116,97,46,32,84,104,101,32,109,97,116,99,104,32,97,116,116,101,109,112,116,32,116,104,101,110,32,115,117,99,99,101,101,100,115,46,32,73,110,32,116,104,101,32,115,101,99,111,110,100,32,99,97,108,108,32,116,104,101,32>>,{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]},<<32,100,105,115,97,98,108,101,115,32,116,104,101,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,115,107,105,112,115,32,97,108,111,110,103,32,116,111,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,112,97,116,116,101,114,110,32,105,115,32,110,111,119,32,97,112,112,108,105,101,100,32,115,116,97,114,116,105,110,103,32,97,116,32,34,120,34,44,32,97,110,100,32,115,111,32,116,104,101,32,40,42,67,79,77,77,73,84,41,32,99,97,117,115,101,115,32,116,104,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,32,119,105,116,104,111,117,116,32,116,114,121,105,110,103,32,97,110,121,32,111,116,104,101,114,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,115,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,32,99,97,117,115,101,115,32,116,104,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,114,116,105,110,103,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,105,102,32,116,104,101,114,101,32,105,115,32,97,32,108,97,116,101,114,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,116,104,97,116,32,99,97,117,115,101,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,111,32,114,101,97,99,104,32,105,116,58>>]},{pre,[],[{code,[],[<<40,42,80,82,85,78,69,41,32,111,114,32,40,42,80,82,85,78,69,58,78,65,77,69,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,117,110,97,110,99,104,111,114,101,100,44,32,116,104,101,32,110,111,114,109,97,108,32,34,98,117,109,112,97,108,111,110,103,34,32,97,100,118,97,110,99,101,32,116,111,32,116,104,101,32,110,101,120,116,32,115,116,97,114,116,105,110,103,32,99,104,97,114,97,99,116,101,114,32,116,104,101,110,32,111,99,99,117,114,115,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,32,111,99,99,117,114,32,97,115,32,117,115,117,97,108,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,40,42,80,82,85,78,69,41,44,32,98,101,102,111,114,101,32,105,116,32,105,115,32,114,101,97,99,104,101,100,44,32,111,114,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,116,111,32,116,104,101,32,114,105,103,104,116,32,111,102,32,40,42,80,82,85,78,69,41,44,32,98,117,116,32,105,102,32,116,104,101,114,101,32,105,115,32,110,111,32,109,97,116,99,104,32,116,111,32,116,104,101,32,114,105,103,104,116,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,99,97,110,110,111,116,32,99,114,111,115,115,32,40,42,80,82,85,78,69,41,46,32,73,110,32,115,105,109,112,108,101,32,99,97,115,101,115,44,32,116,104,101,32,117,115,101,32,111,102,32,40,42,80,82,85,78,69,41,32,105,115,32,106,117,115,116,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,32,116,111,32,97,110,32,97,116,111,109,105,99,32,103,114,111,117,112,32,111,114,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,44,32,98,117,116,32,116,104,101,114,101,32,97,114,101,32,115,111,109,101,32,117,115,101,115,32,111,102,32,40,42,80,82,85,78,69,41,32,116,104,97,116,32,99,97,110,110,111,116,32,98,101,32,101,120,112,114,101,115,115,101,100,32,105,110,32,97,110,121,32,111,116,104,101,114,32,119,97,121,46,32,73,110,32,97,110,32,97,110,99,104,111,114,101,100,32,112,97,116,116,101,114,110,44,32,40,42,80,82,85,78,69,41,32,104,97,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,40,42,67,79,77,77,73,84,41,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,40,42,80,82,85,78,69,58,78,65,77,69,41,32,105,115,32,116,104,101,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,40,42,77,65,82,75,58,78,65,77,69,41,40,42,80,82,85,78,69,41,46,32,73,116,32,105,115,32,108,105,107,101,32,40,42,77,65,82,75,58,78,65,77,69,41,32,105,110,32,116,104,97,116,32,116,104,101,32,110,97,109,101,32,105,115,32,114,101,109,101,109,98,101,114,101,100,32,102,111,114,32,112,97,115,115,105,110,103,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,46,32,72,111,119,101,118,101,114,44,32,40,42,83,75,73,80,58,78,65,77,69,41,32,115,101,97,114,99,104,101,115,32,111,110,108,121,32,102,111,114,32,110,97,109,101,115,32,115,101,116,32,119,105,116,104,32,40,42,77,65,82,75,41,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,102,97,99,116,32,116,104,97,116,32,40,42,80,82,85,78,69,58,78,65,77,69,41,32,114,101,109,101,109,98,101,114,115,32,116,104,101,32,110,97,109,101,32,105,115,32,117,115,101,108,101,115,115,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,44,32,97,115,32,110,97,109,101,115,32,99,97,110,110,111,116,32,98,101,32,114,101,116,114,105,101,118,101,100,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,44,32,119,104,101,110,32,115,112,101,99,105,102,105,101,100,32,119,105,116,104,111,117,116,32,97,32,110,97,109,101,44,32,105,115,32,108,105,107,101,32,40,42,80,82,85,78,69,41,44,32,101,120,99,101,112,116,32,116,104,97,116,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,117,110,97,110,99,104,111,114,101,100,44,32,116,104,101,32,34,98,117,109,112,97,108,111,110,103,34,32,97,100,118,97,110,99,101,32,105,115,32,110,111,116,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,44,32,98,117,116,32,116,111,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,119,104,101,114,101,32,40,42,83,75,73,80,41,32,119,97,115,32,101,110,99,111,117,110,116,101,114,101,100,46>>]},{pre,[],[{code,[],[<<40,42,83,75,73,80,41>>]}]},{p,[],[<<40,42,83,75,73,80,41,32,115,105,103,110,105,102,105,101,115,32,116,104,97,116,32,119,104,97,116,101,118,101,114,32,116,101,120,116,32,119,97,115,32,109,97,116,99,104,101,100,32,108,101,97,100,105,110,103,32,117,112,32,116,111,32,105,116,32,99,97,110,110,111,116,32,98,101,32,112,97,114,116,32,111,102,32,97,32,115,117,99,99,101,115,115,102,117,108,32,109,97,116,99,104,46,32,67,111,110,115,105,100,101,114,58>>]},{pre,[],[{code,[],[<<97,43,40,42,83,75,73,80,41,98>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,97,97,97,97,99,46,46,46,34,44,32,97,102,116,101,114,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,32,97,116,116,101,109,112,116,32,102,97,105,108,115,32,40,115,116,97,114,116,105,110,103,32,97,116,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,115,116,114,105,110,103,41,44,32,116,104,101,32,115,116,97,114,116,105,110,103,32,112,111,105,110,116,32,115,107,105,112,115,32,111,110,32,116,111,32,115,116,97,114,116,32,116,104,101,32,110,101,120,116,32,97,116,116,101,109,112,116,32,97,116,32,34,99,34,46,32,78,111,116,105,99,101,32,116,104,97,116,32,97,32,112,111,115,115,101,115,115,105,118,101,32,113,117,97,110,116,105,102,105,101,114,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,116,104,105,115,32,101,120,97,109,112,108,101,59,32,97,108,116,104,111,117,103,104,32,105,116,32,119,111,117,108,100,32,115,117,112,112,114,101,115,115,32,98,97,99,107,116,114,97,99,107,105,110,103,32,100,117,114,105,110,103,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,32,97,116,116,101,109,112,116,44,32,116,104,101,32,115,101,99,111,110,100,32,97,116,116,101,109,112,116,32,119,111,117,108,100,32,115,116,97,114,116,32,97,116,32,116,104,101,32,115,101,99,111,110,100,32,99,104,97,114,97,99,116,101,114,32,105,110,115,116,101,97,100,32,111,102,32,115,107,105,112,112,105,110,103,32,111,110,32,116,111,32,34,99,34,46>>]},{p,[],[<<87,104,101,110,32,40,42,83,75,73,80,41,32,104,97,115,32,97,110,32,97,115,115,111,99,105,97,116,101,100,32,110,97,109,101,44,32,105,116,115,32,98,101,104,97,118,105,111,114,32,105,115,32,109,111,100,105,102,105,101,100,58>>]},{pre,[],[{code,[],[<<40,42,83,75,73,80,58,78,65,77,69,41>>]}]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,105,115,32,116,114,105,103,103,101,114,101,100,44,32,116,104,101,32,112,114,101,118,105,111,117,115,32,112,97,116,104,32,116,104,114,111,117,103,104,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,115,101,97,114,99,104,101,100,32,102,111,114,32,116,104,101,32,109,111,115,116,32,114,101,99,101,110,116,32,40,42,77,65,82,75,41,32,116,104,97,116,32,104,97,115,32,116,104,101,32,115,97,109,101,32,110,97,109,101,46,32,73,102,32,111,110,101,32,105,115,32,102,111,117,110,100,44,32,116,104,101,32,34,98,117,109,112,97,108,111,110,103,34,32,97,100,118,97,110,99,101,32,105,115,32,116,111,32,116,104,101,32,115,117,98,106,101,99,116,32,112,111,115,105,116,105,111,110,32,116,104,97,116,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,97,116,32,40,42,77,65,82,75,41,32,105,110,115,116,101,97,100,32,111,102,32,116,111,32,119,104,101,114,101,32,40,42,83,75,73,80,41,32,119,97,115,32,101,110,99,111,117,110,116,101,114,101,100,46,32,73,102,32,110,111,32,40,42,77,65,82,75,41,32,119,105,116,104,32,97,32,109,97,116,99,104,105,110,103,32,110,97,109,101,32,105,115,32,102,111,117,110,100,44,32,40,42,83,75,73,80,41,32,105,115,32,105,103,110,111,114,101,100,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,40,42,83,75,73,80,58,78,65,77,69,41,32,115,101,97,114,99,104,101,115,32,111,110,108,121,32,102,111,114,32,110,97,109,101,115,32,115,101,116,32,98,121,32,40,42,77,65,82,75,58,78,65,77,69,41,46,32,73,116,32,105,103,110,111,114,101,115,32,110,97,109,101,115,32,116,104,97,116,32,97,114,101,32,115,101,116,32,98,121,32,40,42,80,82,85,78,69,58,78,65,77,69,41,32,111,114,32,40,42,84,72,69,78,58,78,65,77,69,41,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,118,101,114,98,32,99,97,117,115,101,115,32,97,32,115,107,105,112,32,116,111,32,116,104,101,32,110,101,120,116,32,105,110,110,101,114,109,111,115,116,32,97,108,116,101,114,110,97,116,105,118,101,32,119,104,101,110,32,98,97,99,107,116,114,97,99,107,105,110,103,32,114,101,97,99,104,101,115,32,105,116,46,32,84,104,97,116,32,105,115,44,32,105,116,32,99,97,110,99,101,108,115,32,97,110,121,32,102,117,114,116,104,101,114,32,98,97,99,107,116,114,97,99,107,105,110,103,32,119,105,116,104,105,110,32,116,104,101,32,99,117,114,114,101,110,116,32,97,108,116,101,114,110,97,116,105,118,101,46>>]},{pre,[],[{code,[],[<<40,42,84,72,69,78,41,32,111,114,32,40,42,84,72,69,78,58,78,65,77,69,41>>]}]},{p,[],[<<84,104,101,32,118,101,114,98,32,110,97,109,101,32,99,111,109,101,115,32,102,114,111,109,32,116,104,101,32,111,98,115,101,114,118,97,116,105,111,110,32,116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,97,32,112,97,116,116,101,114,110,45,98,97,115,101,100,32,105,102,45,116,104,101,110,45,101,108,115,101,32,98,108,111,99,107,58>>]},{pre,[],[{code,[],[<<40,32,67,79,78,68,49,32,40,42,84,72,69,78,41,32,70,79,79,32,124,32,67,79,78,68,50,32,40,42,84,72,69,78,41,32,66,65,82,32,124,32,67,79,78,68,51,32,40,42,84,72,69,78,41,32,66,65,90,32,41,32,46,46,46>>]}]},{p,[],[<<73,102,32,116,104,101,32,67,79,78,68,49,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,44,32,70,79,79,32,105,115,32,116,114,105,101,100,32,40,97,110,100,32,112,111,115,115,105,98,108,121,32,102,117,114,116,104,101,114,32,105,116,101,109,115,32,97,102,116,101,114,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,103,114,111,117,112,32,105,102,32,70,79,79,32,115,117,99,99,101,101,100,115,41,46,32,79,110,32,102,97,105,108,117,114,101,44,32,116,104,101,32,109,97,116,99,104,101,114,32,115,107,105,112,115,32,116,111,32,116,104,101,32,115,101,99,111,110,100,32,97,108,116,101,114,110,97,116,105,118,101,32,97,110,100,32,116,114,105,101,115,32,67,79,78,68,50,44,32,119,105,116,104,111,117,116,32,98,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,67,79,78,68,49,46,32,73,102,32,116,104,97,116,32,115,117,99,99,101,101,100,115,32,97,110,100,32,66,65,82,32,102,97,105,108,115,44,32,67,79,78,68,51,32,105,115,32,116,114,105,101,100,46,32,73,102,32,66,65,90,32,116,104,101,110,32,102,97,105,108,115,44,32,116,104,101,114,101,32,97,114,101,32,110,111,32,109,111,114,101,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,115,111,32,116,104,101,114,101,32,105,115,32,97,32,98,97,99,107,116,114,97,99,107,32,116,111,32,119,104,97,116,101,118,101,114,32,99,97,109,101,32,98,101,102,111,114,101,32,116,104,101,32,101,110,116,105,114,101,32,103,114,111,117,112,46,32,73,102,32,40,42,84,72,69,78,41,32,105,115,32,110,111,116,32,105,110,115,105,100,101,32,97,110,32,97,108,116,101,114,110,97,116,105,111,110,44,32,105,116,32,97,99,116,115,32,108,105,107,101,32,40,42,80,82,85,78,69,41,46>>]},{p,[],[<<84,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,40,42,84,72,69,78,58,78,65,77,69,41,32,105,115,32,116,104,101,32,110,111,116,32,116,104,101,32,115,97,109,101,32,97,115,32,40,42,77,65,82,75,58,78,65,77,69,41,40,42,84,72,69,78,41,46,32,73,116,32,105,115,32,108,105,107,101,32,40,42,77,65,82,75,58,78,65,77,69,41,32,105,110,32,116,104,97,116,32,116,104,101,32,110,97,109,101,32,105,115,32,114,101,109,101,109,98,101,114,101,100,32,102,111,114,32,112,97,115,115,105,110,103,32,98,97,99,107,32,116,111,32,116,104,101,32,99,97,108,108,101,114,46,32,72,111,119,101,118,101,114,44,32,40,42,83,75,73,80,58,78,65,77,69,41,32,115,101,97,114,99,104,101,115,32,111,110,108,121,32,102,111,114,32,110,97,109,101,115,32,115,101,116,32,119,105,116,104,32,40,42,77,65,82,75,41,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,101,32,102,97,99,116,32,116,104,97,116,32,40,42,84,72,69,78,58,78,65,77,69,41,32,114,101,109,101,109,98,101,114,115,32,116,104,101,32,110,97,109,101,32,105,115,32,117,115,101,108,101,115,115,32,116,111,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,103,114,97,109,109,101,114,44,32,97,115,32,110,97,109,101,115,32,99,97,110,110,111,116,32,98,101,32,114,101,116,114,105,101,118,101,100,46>>]}]},{p,[],[<<65,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,97,32,124,32,99,104,97,114,97,99,116,101,114,32,105,115,32,106,117,115,116,32,97,32,112,97,114,116,32,111,102,32,116,104,101,32,101,110,99,108,111,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,59,32,105,116,32,105,115,32,110,111,116,32,97,32,110,101,115,116,101,100,32,97,108,116,101,114,110,97,116,105,111,110,32,119,105,116,104,32,111,110,108,121,32,111,110,101,32,97,108,116,101,114,110,97,116,105,118,101,46,32,84,104,101,32,101,102,102,101,99,116,32,111,102,32,40,42,84,72,69,78,41,32,101,120,116,101,110,100,115,32,98,101,121,111,110,100,32,115,117,99,104,32,97,32,115,117,98,112,97,116,116,101,114,110,32,116,111,32,116,104,101,32,101,110,99,108,111,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,101,114,101,32,65,44,32,66,44,32,97,110,100,32,115,111,32,111,110,44,32,97,114,101,32,99,111,109,112,108,101,120,32,112,97,116,116,101,114,110,32,102,114,97,103,109,101,110,116,115,32,116,104,97,116,32,100,111,32,110,111,116,32,99,111,110,116,97,105,110,32,97,110,121,32,124,32,99,104,97,114,97,99,116,101,114,115,32,97,116,32,116,104,105,115,32,108,101,118,101,108,58>>]},{pre,[],[{code,[],[<<65,32,40,66,40,42,84,72,69,78,41,67,41,32,124,32,68>>]}]},{p,[],[<<73,102,32,65,32,97,110,100,32,66,32,97,114,101,32,109,97,116,99,104,101,100,44,32,98,117,116,32,116,104,101,114,101,32,105,115,32,97,32,102,97,105,108,117,114,101,32,105,110,32,67,44,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,116,32,98,97,99,107,116,114,97,99,107,32,105,110,116,111,32,65,59,32,105,110,115,116,101,97,100,32,105,116,32,109,111,118,101,115,32,116,111,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,44,32,116,104,97,116,32,105,115,44,32,68,46,32,72,111,119,101,118,101,114,44,32,105,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,99,111,110,116,97,105,110,105,110,103,32,40,42,84,72,69,78,41,32,105,115,32,103,105,118,101,110,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,44,32,105,116,32,98,101,104,97,118,101,115,32,100,105,102,102,101,114,101,110,116,108,121,58>>]},{pre,[],[{code,[],[<<65,32,40,66,40,42,84,72,69,78,41,67,32,124,32,40,42,70,65,73,76,41,41,32,124,32,68>>]}]},{p,[],[<<84,104,101,32,101,102,102,101,99,116,32,111,102,32,40,42,84,72,69,78,41,32,105,115,32,110,111,119,32,99,111,110,102,105,110,101,100,32,116,111,32,116,104,101,32,105,110,110,101,114,32,115,117,98,112,97,116,116,101,114,110,46,32,65,102,116,101,114,32,97,32,102,97,105,108,117,114,101,32,105,110,32,67,44,32,109,97,116,99,104,105,110,103,32,109,111,118,101,115,32,116,111,32,40,42,70,65,73,76,41,44,32,119,104,105,99,104,32,99,97,117,115,101,115,32,116,104,101,32,119,104,111,108,101,32,115,117,98,112,97,116,116,101,114,110,32,116,111,32,102,97,105,108,44,32,97,115,32,116,104,101,114,101,32,97,114,101,32,110,111,32,109,111,114,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,116,111,32,116,114,121,46,32,73,110,32,116,104,105,115,32,99,97,115,101,44,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,119,32,98,97,99,107,116,114,97,99,107,32,105,110,116,111,32,65,46>>]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,110,111,116,32,99,111,110,115,105,100,101,114,101,100,32,97,115,32,104,97,118,105,110,103,32,116,119,111,32,97,108,116,101,114,110,97,116,105,118,101,115,44,32,97,115,32,111,110,108,121,32,111,110,101,32,105,115,32,101,118,101,114,32,117,115,101,100,46,32,84,104,97,116,32,105,115,44,32,116,104,101,32,124,32,99,104,97,114,97,99,116,101,114,32,105,110,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,104,97,115,32,97,32,100,105,102,102,101,114,101,110,116,32,109,101,97,110,105,110,103,46,32,73,103,110,111,114,105,110,103,32,119,104,105,116,101,115,112,97,99,101,44,32,99,111,110,115,105,100,101,114,58>>]},{pre,[],[{code,[],[<<94,46,42,63,32,40,63,40,63,61,97,41,32,97,32,124,32,98,40,42,84,72,69,78,41,99,32,41>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,98,97,34,44,32,116,104,105,115,32,112,97,116,116,101,114,110,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,46,32,65,115,32,46,42,63,32,105,115,32,117,110,103,114,101,101,100,121,44,32,105,116,32,105,110,105,116,105,97,108,108,121,32,109,97,116,99,104,101,115,32,122,101,114,111,32,99,104,97,114,97,99,116,101,114,115,46,32,84,104,101,32,99,111,110,100,105,116,105,111,110,32,40,63,61,97,41,32,116,104,101,110,32,102,97,105,108,115,44,32,116,104,101,32,99,104,97,114,97,99,116,101,114,32,34,98,34,32,105,115,32,109,97,116,99,104,101,100,44,32,98,117,116,32,34,99,34,32,105,115,32,110,111,116,46,32,65,116,32,116,104,105,115,32,112,111,105,110,116,44,32,109,97,116,99,104,105,110,103,32,100,111,101,115,32,110,111,116,32,98,97,99,107,116,114,97,99,107,32,116,111,32,46,42,63,32,97,115,32,99,97,110,32,112,101,114,104,97,112,115,32,98,101,32,101,120,112,101,99,116,101,100,32,102,114,111,109,32,116,104,101,32,112,114,101,115,101,110,99,101,32,111,102,32,116,104,101,32,124,32,99,104,97,114,97,99,116,101,114,46,32,84,104,101,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,112,97,114,116,32,111,102,32,116,104,101,32,115,105,110,103,108,101,32,97,108,116,101,114,110,97,116,105,118,101,32,116,104,97,116,32,99,111,109,112,114,105,115,101,115,32,116,104,101,32,119,104,111,108,101,32,112,97,116,116,101,114,110,44,32,97,110,100,32,115,111,32,116,104,101,32,109,97,116,99,104,32,102,97,105,108,115,46,32,40,73,102,32,116,104,101,114,101,32,119,97,115,32,97,32,98,97,99,107,116,114,97,99,107,32,105,110,116,111,32,46,42,63,44,32,97,108,108,111,119,105,110,103,32,105,116,32,116,111,32,109,97,116,99,104,32,34,98,34,44,32,116,104,101,32,109,97,116,99,104,32,119,111,117,108,100,32,115,117,99,99,101,101,100,46,41>>]},{p,[],[<<84,104,101,32,118,101,114,98,115,32,100,101,115,99,114,105,98,101,100,32,97,98,111,118,101,32,112,114,111,118,105,100,101,32,102,111,117,114,32,100,105,102,102,101,114,101,110,116,32,34,115,116,114,101,110,103,116,104,115,34,32,111,102,32,99,111,110,116,114,111,108,32,119,104,101,110,32,115,117,98,115,101,113,117,101,110,116,32,109,97,116,99,104,105,110,103,32,102,97,105,108,115,58>>]},{ul,[],[{li,[],[{p,[],[<<40,42,84,72,69,78,41,32,105,115,32,116,104,101,32,119,101,97,107,101,115,116,44,32,99,97,114,114,121,105,110,103,32,111,110,32,116,104,101,32,109,97,116,99,104,32,97,116,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,46>>]}]},{li,[],[{p,[],[<<40,42,80,82,85,78,69,41,32,99,111,109,101,115,32,110,101,120,116,44,32,102,97,105,108,115,32,116,104,101,32,109,97,116,99,104,32,97,116,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,114,116,105,110,103,32,112,111,115,105,116,105,111,110,44,32,98,117,116,32,97,108,108,111,119,115,32,97,110,32,97,100,118,97,110,99,101,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40,102,111,114,32,97,110,32,117,110,97,110,99,104,111,114,101,100,32,112,97,116,116,101,114,110,41,46>>]}]},{li,[],[{p,[],[<<40,42,83,75,73,80,41,32,105,115,32,115,105,109,105,108,97,114,44,32,101,120,99,101,112,116,32,116,104,97,116,32,116,104,101,32,97,100,118,97,110,99,101,32,99,97,110,32,98,101,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,99,104,97,114,97,99,116,101,114,46>>]}]},{li,[],[{p,[],[<<40,42,67,79,77,77,73,84,41,32,105,115,32,116,104,101,32,115,116,114,111,110,103,101,115,116,44,32,99,97,117,115,105,110,103,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46>>]}]}]},{p,[],[{em,[],[<<77,111,114,101,32,116,104,97,110,32,79,110,101,32,66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98>>]}]},{p,[],[<<73,102,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,32,105,115,32,112,114,101,115,101,110,116,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,116,104,101,32,111,110,101,32,116,104,97,116,32,105,115,32,98,97,99,107,116,114,97,99,107,101,100,32,111,110,116,111,32,102,105,114,115,116,32,97,99,116,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,44,32,119,104,101,114,101,32,65,44,32,66,44,32,97,110,100,32,115,111,32,111,110,44,32,97,114,101,32,99,111,109,112,108,101,120,32,112,97,116,116,101,114,110,32,102,114,97,103,109,101,110,116,115,58>>]},{pre,[],[{code,[],[<<40,65,40,42,67,79,77,77,73,84,41,66,40,42,84,72,69,78,41,67,124,65,66,68,41>>]}]},{p,[],[<<73,102,32,65,32,109,97,116,99,104,101,115,32,98,117,116,32,66,32,102,97,105,108,115,44,32,116,104,101,32,98,97,99,107,116,114,97,99,107,32,116,111,32,40,42,67,79,77,77,73,84,41,32,99,97,117,115,101,115,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46,32,72,111,119,101,118,101,114,44,32,105,102,32,65,32,97,110,100,32,66,32,109,97,116,99,104,44,32,98,117,116,32,67,32,102,97,105,108,115,44,32,116,104,101,32,98,97,99,107,116,114,97,99,107,32,116,111,32,40,42,84,72,69,78,41,32,99,97,117,115,101,115,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,32,40,65,66,68,41,32,116,111,32,98,101,32,116,114,105,101,100,46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,105,115,32,99,111,110,115,105,115,116,101,110,116,44,32,98,117,116,32,105,115,32,110,111,116,32,97,108,119,97,121,115,32,116,104,101,32,115,97,109,101,32,97,115,32,105,110,32,80,101,114,108,46,32,73,116,32,109,101,97,110,115,32,116,104,97,116,32,105,102,32,116,119,111,32,111,114,32,109,111,114,101,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,97,112,112,101,97,114,32,105,110,32,115,117,99,99,101,115,115,105,111,110,44,32,116,104,101,32,108,97,115,116,32,111,102,32,116,104,101,109,32,104,97,115,32,110,111,32,101,102,102,101,99,116,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<46,46,46,40,42,67,79,77,77,73,84,41,40,42,80,82,85,78,69,41,46,46,46>>]}]},{p,[],[<<73,102,32,116,104,101,114,101,32,105,115,32,97,32,109,97,116,99,104,105,110,103,32,102,97,105,108,117,114,101,32,116,111,32,116,104,101,32,114,105,103,104,116,44,32,98,97,99,107,116,114,97,99,107,105,110,103,32,111,110,116,111,32,40,42,80,82,85,78,69,41,32,99,97,117,115,101,115,32,105,116,32,116,111,32,98,101,32,116,114,105,103,103,101,114,101,100,44,32,97,110,100,32,105,116,115,32,97,99,116,105,111,110,32,105,115,32,116,97,107,101,110,46,32,84,104,101,114,101,32,99,97,110,32,110,101,118,101,114,32,98,101,32,97,32,98,97,99,107,116,114,97,99,107,32,111,110,116,111,32,40,42,67,79,77,77,73,84,41,46>>]},{p,[],[{em,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115,32,105,110,32,82,101,112,101,97,116,101,100,32,71,114,111,117,112,115>>]}]},{p,[],[<<80,67,82,69,32,100,105,102,102,101,114,115,32,102,114,111,109,32,80,101,114,108,32,105,110,32,105,116,115,32,104,97,110,100,108,105,110,103,32,111,102,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,105,110,32,114,101,112,101,97,116,101,100,32,103,114,111,117,112,115,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,58>>]},{pre,[],[{code,[],[<<47,40,97,40,42,67,79,77,77,73,84,41,98,41,43,97,99,47>>]}]},{p,[],[<<73,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,34,97,98,97,99,34,44,32,80,101,114,108,32,109,97,116,99,104,101,115,44,32,98,117,116,32,80,67,82,69,32,102,97,105,108,115,32,98,101,99,97,117,115,101,32,116,104,101,32,40,42,67,79,77,77,73,84,41,32,105,110,32,116,104,101,32,115,101,99,111,110,100,32,114,101,112,101,97,116,32,111,102,32,116,104,101,32,103,114,111,117,112,32,97,99,116,115,46>>]},{p,[],[{em,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115,32,105,110,32,65,115,115,101,114,116,105,111,110,115>>]}]},{p,[],[<<40,42,70,65,73,76,41,32,105,110,32,97,110,32,97,115,115,101,114,116,105,111,110,32,104,97,115,32,105,116,115,32,110,111,114,109,97,108,32,101,102,102,101,99,116,58,32,105,116,32,102,111,114,99,101,115,32,97,110,32,105,109,109,101,100,105,97,116,101,32,98,97,99,107,116,114,97,99,107,46>>]},{p,[],[<<40,42,65,67,67,69,80,84,41,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,99,97,117,115,101,115,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,116,111,32,115,117,99,99,101,101,100,32,119,105,116,104,111,117,116,32,97,110,121,32,102,117,114,116,104,101,114,32,112,114,111,99,101,115,115,105,110,103,46,32,73,110,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,44,32,40,42,65,67,67,69,80,84,41,32,99,97,117,115,101,115,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,116,111,32,102,97,105,108,32,119,105,116,104,111,117,116,32,97,110,121,32,102,117,114,116,104,101,114,32,112,114,111,99,101,115,115,105,110,103,46>>]},{p,[],[<<84,104,101,32,111,116,104,101,114,32,98,97,99,107,116,114,97,99,107,105,110,103,32,118,101,114,98,115,32,97,114,101,32,110,111,116,32,116,114,101,97,116,101,100,32,115,112,101,99,105,97,108,108,121,32,105,102,32,116,104,101,121,32,97,112,112,101,97,114,32,105,110,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,46,32,73,110,32,112,97,114,116,105,99,117,108,97,114,44,32,40,42,84,72,69,78,41,32,115,107,105,112,115,32,116,111,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,105,110,110,101,114,109,111,115,116,32,101,110,99,108,111,115,105,110,103,32,103,114,111,117,112,32,116,104,97,116,32,104,97,115,32,97,108,116,101,114,110,97,116,105,111,110,115,44,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32,116,104,105,115,32,105,115,32,119,105,116,104,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,46>>]},{p,[],[<<78,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,115,32,97,114,101,44,32,104,111,119,101,118,101,114,44,32,100,105,102,102,101,114,101,110,116,44,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,99,104,97,110,103,105,110,103,32,97,32,112,111,115,105,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,105,110,116,111,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,99,104,97,110,103,101,115,32,105,116,115,32,114,101,115,117,108,116,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,40,42,67,79,77,77,73,84,41,44,32,40,42,83,75,73,80,41,44,32,111,114,32,40,42,80,82,85,78,69,41,32,99,97,117,115,101,115,32,97,32,110,101,103,97,116,105,118,101,32,97,115,115,101,114,116,105,111,110,32,116,111,32,98,101,32,116,114,117,101,44,32,119,105,116,104,111,117,116,32,99,111,110,115,105,100,101,114,105,110,103,32,97,110,121,32,102,117,114,116,104,101,114,32,97,108,116,101,114,110,97,116,105,118,101,32,98,114,97,110,99,104,101,115,32,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,46,32,66,97,99,107,116,114,97,99,107,105,110,103,32,105,110,116,111,32,40,42,84,72,69,78,41,32,99,97,117,115,101,115,32,105,116,32,116,111,32,115,107,105,112,32,116,111,32,116,104,101,32,110,101,120,116,32,101,110,99,108,111,115,105,110,103,32,97,108,116,101,114,110,97,116,105,118,101,32,119,105,116,104,105,110,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,40,116,104,101,32,110,111,114,109,97,108,32,98,101,104,97,118,105,111,114,41,44,32,98,117,116,32,105,102,32,116,104,101,32,97,115,115,101,114,116,105,111,110,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,115,117,99,104,32,97,110,32,97,108,116,101,114,110,97,116,105,118,101,44,32,40,42,84,72,69,78,41,32,98,101,104,97,118,101,115,32,108,105,107,101,32,40,42,80,82,85,78,69,41,46>>]},{p,[],[{em,[],[<<66,97,99,107,116,114,97,99,107,105,110,103,32,86,101,114,98,115,32,105,110,32,83,117,98,114,111,117,116,105,110,101,115>>]}]},{p,[],[<<84,104,101,115,101,32,98,101,104,97,118,105,111,114,115,32,111,99,99,117,114,32,114,101,103,97,114,100,108,101,115,115,32,105,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,99,97,108,108,101,100,32,114,101,99,117,114,115,105,118,101,108,121,46,32,84,104,101,32,116,114,101,97,116,109,101,110,116,32,111,102,32,115,117,98,114,111,117,116,105,110,101,115,32,105,110,32,80,101,114,108,32,105,115,32,100,105,102,102,101,114,101,110,116,32,105,110,32,115,111,109,101,32,99,97,115,101,115,46>>]},{ul,[],[{li,[],[{p,[],[<<40,42,70,65,73,76,41,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,104,97,115,32,105,116,115,32,110,111,114,109,97,108,32,101,102,102,101,99,116,58,32,105,116,32,102,111,114,99,101,115,32,97,110,32,105,109,109,101,100,105,97,116,101,32,98,97,99,107,116,114,97,99,107,46>>]}]},{li,[],[{p,[],[<<40,42,65,67,67,69,80,84,41,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,117,115,101,115,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,97,116,99,104,32,116,111,32,115,117,99,99,101,101,100,32,119,105,116,104,111,117,116,32,97,110,121,32,102,117,114,116,104,101,114,32,112,114,111,99,101,115,115,105,110,103,46,32,77,97,116,99,104,105,110,103,32,116,104,101,110,32,99,111,110,116,105,110,117,101,115,32,97,102,116,101,114,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,99,97,108,108,46>>]}]},{li,[],[{p,[],[<<40,42,67,79,77,77,73,84,41,44,32,40,42,83,75,73,80,41,44,32,97,110,100,32,40,42,80,82,85,78,69,41,32,105,110,32,97,32,115,117,98,112,97,116,116,101,114,110,32,99,97,108,108,101,100,32,97,115,32,97,32,115,117,98,114,111,117,116,105,110,101,32,99,97,117,115,101,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46>>]}]},{li,[],[{p,[],[<<40,42,84,72,69,78,41,32,115,107,105,112,115,32,116,111,32,116,104,101,32,110,101,120,116,32,97,108,116,101,114,110,97,116,105,118,101,32,105,110,32,116,104,101,32,105,110,110,101,114,109,111,115,116,32,101,110,99,108,111,115,105,110,103,32,103,114,111,117,112,32,119,105,116,104,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,116,104,97,116,32,104,97,115,32,97,108,116,101,114,110,97,116,105,118,101,115,46,32,73,102,32,116,104,101,114,101,32,105,115,32,110,111,32,115,117,99,104,32,103,114,111,117,112,32,119,105,116,104,105,110,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,44,32,40,42,84,72,69,78,41,32,99,97,117,115,101,115,32,116,104,101,32,115,117,98,114,111,117,116,105,110,101,32,109,97,116,99,104,32,116,111,32,102,97,105,108,46>>]}]}]}]},#{name => <<114,101>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,114,101,46,120,109,108],types => #{{compile_option,0} => {attribute,{27,2},type,{compile_option,{type,{27,27},union,[{atom,{27,27},unicode},{atom,{27,37},anchored},{atom,{27,48},caseless},{atom,{27,59},dollar_endonly},{atom,{28,27},dotall},{atom,{28,36},extended},{atom,{28,47},firstline},{atom,{28,59},multiline},{atom,{29,27},no_auto_capture},{atom,{29,45},dupnames},{atom,{29,56},ungreedy},{type,{30,27},tuple,[{atom,{30,28},newline},{user_type,{30,37},nl_spec,[]}]},{atom,{31,27},bsr_anycrlf},{atom,{31,41},bsr_unicode},{atom,{32,27},no_start_optimize},{atom,{32,47},ucp},{atom,{32,53},never_utf}]},[]}},{mp,0} => {attribute,{23,2},type,{mp,{type,{23,15},tuple,[{atom,{23,16},re_pattern},{var,{23,28},'_'},{var,{23,31},'_'},{var,{23,34},'_'},{var,{23,37},'_'}]},[]}},{nl_spec,0} => {attribute,{25,2},type,{nl_spec,{type,{25,20},union,[{atom,{25,20},cr},{atom,{25,25},crlf},{atom,{25,32},lf},{atom,{25,37},anycrlf},{atom,{25,47},any}]},[]}}}},[{{function,grun,3},[{file,[114,101,46,101,114,108]},{location,0}],[<<103,114,117,110,47,51>>],hidden,#{}},{{function,internal_run,4},[{file,[114,101,46,101,114,108]},{location,0}],[<<105,110,116,101,114,110,97,108,95,114,117,110,47,52>>],hidden,#{}},{{function,ucompile,2},[{file,[114,101,46,101,114,108]},{location,0}],[<<117,99,111,109,112,105,108,101,47,50>>],hidden,#{}},{{function,urun,3},[{file,[114,101,46,101,114,108]},{location,0}],[<<117,114,117,110,47,51>>],hidden,#{}},{{function,version,0},[{file,[114,101,46,101,114,108]},{location,40}],[<<118,101,114,115,105,111,110,47,48>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,111,102,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,97,32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,80,67,82,69,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,115,121,115,116,101,109,32,116,104,97,116,32,119,97,115,32,117,115,101,100,32,105,110,32,116,104,101,32,69,114,108,97,110,103,47,79,84,80,32,99,111,109,112,105,108,97,116,105,111,110,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,56,49>>,signature => [{attribute,{40,2},spec,{{version,0},[{type,{40,14},'fun',[{type,{40,14},product,[]},{type,{40,20},binary,[]}]}]}}],since => <<79,84,80,32,50,48,46,48>>}},{{function,compile,1},[{file,[114,101,46,101,114,108]},{location,49}],[<<99,111,109,112,105,108,101,47,49>>],#{<<101,110>> => [{p,[],[<<84,104,101,32,115,97,109,101,32,97,115,32>>,{code,[],[<<99,111,109,112,105,108,101,40,82,101,103,101,120,112,44,91,93,41>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,56,57>>,signature => [{attribute,{49,2},spec,{{compile,1},[{type,{49,14},bounded_fun,[{type,{49,14},'fun',[{type,{49,14},product,[{var,{49,15},'Regexp'}]},{type,{49,26},union,[{type,{49,26},tuple,[{atom,{49,27},ok},{var,{49,31},'MP'}]},{type,{49,37},tuple,[{atom,{49,38},error},{var,{49,45},'ErrSpec'}]}]}]},[{type,{50,7},constraint,[{atom,{50,7},is_subtype},[{var,{50,7},'Regexp'},{type,{50,17},iodata,[]}]]},{type,{51,7},constraint,[{atom,{51,7},is_subtype},[{var,{51,7},'MP'},{user_type,{51,13},mp,[]}]]},{type,{52,7},constraint,[{atom,{52,7},is_subtype},[{var,{52,7},'ErrSpec'},{type,{52,18},tuple,[{ann_type,{52,19},[{var,{52,19},'ErrString'},{type,{52,32},string,[]}]},{ann_type,{52,42},[{var,{52,42},'Position'},{type,{52,54},non_neg_integer,[]}]}]}]]}]]}]}}]}},{{function,compile,2},[{file,[114,101,46,101,114,108]},{location,57}],[<<99,111,109,112,105,108,101,47,50>>],#{<<101,110>> => [{p,[],[<<67,111,109,112,105,108,101,115,32,97,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,119,105,116,104,32,116,104,101,32,115,121,110,116,97,120,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,44,32,105,110,116,111,32,97,110,32,105,110,116,101,114,110,97,108,32,102,111,114,109,97,116,32,116,111,32,98,101,32,117,115,101,100,32,108,97,116,101,114,32,97,115,32,97,32,112,97,114,97,109,101,116,101,114,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<46>>]},{p,[],[<<67,111,109,112,105,108,105,110,103,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,98,101,102,111,114,101,32,109,97,116,99,104,105,110,103,32,105,115,32,117,115,101,102,117,108,32,105,102,32,116,104,101,32,115,97,109,101,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,109,97,116,99,104,105,110,103,32,97,103,97,105,110,115,116,32,109,117,108,116,105,112,108,101,32,115,117,98,106,101,99,116,115,32,100,117,114,105,110,103,32,116,104,101,32,108,105,102,101,116,105,109,101,32,111,102,32,116,104,101,32,112,114,111,103,114,97,109,46,32,67,111,109,112,105,108,105,110,103,32,111,110,99,101,32,97,110,100,32,101,120,101,99,117,116,105,110,103,32,109,97,110,121,32,116,105,109,101,115,32,105,115,32,102,97,114,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,99,111,109,112,105,108,105,110,103,32,101,97,99,104,32,116,105,109,101,32,111,110,101,32,119,97,110,116,115,32,116,111,32,109,97,116,99,104,46>>]},{p,[],[<<87,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<44,32,111,116,104,101,114,119,105,115,101,32,97,115,32,97,110,121,32,118,97,108,105,100,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<46>>]},{a,[{id,<<99,111,109,112,105,108,101,95,111,112,116,105,111,110,115>>}],[]},{p,[],[<<79,112,116,105,111,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<117,110,105,99,111,100,101>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<32,97,110,100,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,99,111,100,101,32,105,115,32,116,111,32,98,101,32,114,117,110,32,97,103,97,105,110,115,116,32,97,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<32,115,117,98,106,101,99,116,46,32,65,108,115,111,32,99,111,110,115,105,100,101,114,32,111,112,116,105,111,110,32>>,{code,[],[<<117,99,112>>]},<<32,119,104,101,110,32,117,115,105,110,103,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,46>>]}]},{dt,[],[{code,[],[<<97,110,99,104,111,114,101,100>>]}]},{dd,[],[{p,[],[<<84,104,101,32,112,97,116,116,101,114,110,32,105,115,32,102,111,114,99,101,100,32,116,111,32,98,101,32,34,97,110,99,104,111,114,101,100,34,44,32,116,104,97,116,32,105,115,44,32,105,116,32,105,115,32,99,111,110,115,116,114,97,105,110,101,100,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,97,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,112,111,105,110,116,32,105,110,32,116,104,101,32,115,116,114,105,110,103,32,116,104,97,116,32,105,115,32,115,101,97,114,99,104,101,100,32,40,116,104,101,32,34,115,117,98,106,101,99,116,32,115,116,114,105,110,103,34,41,46,32,84,104,105,115,32,101,102,102,101,99,116,32,99,97,110,32,97,108,115,111,32,98,101,32,97,99,104,105,101,118,101,100,32,98,121,32,97,112,112,114,111,112,114,105,97,116,101,32,99,111,110,115,116,114,117,99,116,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,105,116,115,101,108,102,46>>]}]},{dt,[],[{code,[],[<<99,97,115,101,108,101,115,115>>]}]},{dd,[],[{p,[],[<<76,101,116,116,101,114,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,32,98,111,116,104,32,117,112,112,101,114,99,97,115,101,32,97,110,100,32,108,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,115,46,32,73,116,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,105>>]},<<32,97,110,100,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,105,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,85,112,112,101,114,99,97,115,101,32,97,110,100,32,108,111,119,101,114,99,97,115,101,32,108,101,116,116,101,114,115,32,97,114,101,32,100,101,102,105,110,101,100,32,97,115,32,105,110,32,116,104,101,32,73,83,79,32,56,56,53,57,45,49,32,99,104,97,114,97,99,116,101,114,32,115,101,116,46>>]}]},{dt,[],[{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]}]},{dd,[],[{p,[],[<<65,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,87,105,116,104,111,117,116,32,116,104,105,115,32,111,112,116,105,111,110,44,32,97,32,100,111,108,108,97,114,32,97,108,115,111,32,109,97,116,99,104,101,115,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,97,32,110,101,119,108,105,110,101,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,40,98,117,116,32,110,111,116,32,98,101,102,111,114,101,32,97,110,121,32,111,116,104,101,114,32,110,101,119,108,105,110,101,115,41,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,105,103,110,111,114,101,100,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,46,32,84,104,101,114,101,32,105,115,32,110,111,32,101,113,117,105,118,97,108,101,110,116,32,111,112,116,105,111,110,32,105,110,32,80,101,114,108,44,32,97,110,100,32,105,116,32,99,97,110,110,111,116,32,98,101,32,115,101,116,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,46>>]}]},{dt,[],[{code,[],[<<100,111,116,97,108,108>>]}]},{dd,[],[{p,[],[<<65,32,100,111,116,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101,114,115,44,32,105,110,99,108,117,100,105,110,103,32,116,104,111,115,101,32,105,110,100,105,99,97,116,105,110,103,32,110,101,119,108,105,110,101,46,32,87,105,116,104,111,117,116,32,105,116,44,32,97,32,100,111,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,119,104,101,110,32,116,104,101,32,99,117,114,114,101,110,116,32,112,111,115,105,116,105,111,110,32,105,115,32,97,116,32,97,32,110,101,119,108,105,110,101,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,115>>]},<<32,97,110,100,32,105,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,115,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,65,32,110,101,103,97,116,105,118,101,32,99,108,97,115,115,44,32,115,117,99,104,32,97,115,32>>,{code,[],[<<91,94,97,93>>]},<<44,32,97,108,119,97,121,115,32,109,97,116,99,104,101,115,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,44,32,105,110,100,101,112,101,110,100,101,110,116,32,111,102,32,116,104,101,32,115,101,116,116,105,110,103,32,111,102,32,116,104,105,115,32,111,112,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<101,120,116,101,110,100,101,100>>]}]},{dd,[],[{p,[],[<<73,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,101,116,44,32,109,111,115,116,32,119,104,105,116,101,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,97,114,101,32,116,111,116,97,108,108,121,32,105,103,110,111,114,101,100,32,101,120,99,101,112,116,32,119,104,101,110,32,101,115,99,97,112,101,100,32,111,114,32,105,110,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,46,32,72,111,119,101,118,101,114,44,32,119,104,105,116,101,32,115,112,97,99,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,119,105,116,104,105,110,32,115,101,113,117,101,110,99,101,115,32,115,117,99,104,32,97,115,32>>,{code,[],[<<40,63,62>>]},<<32,116,104,97,116,32,105,110,116,114,111,100,117,99,101,32,118,97,114,105,111,117,115,32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,110,111,114,32,119,105,116,104,105,110,32,97,32,110,117,109,101,114,105,99,97,108,32,113,117,97,110,116,105,102,105,101,114,32,115,117,99,104,32,97,115,32>>,{code,[],[<<123,49,44,51,125>>]},<<46,32,72,111,119,101,118,101,114,44,32,105,103,110,111,114,97,98,108,101,32,119,104,105,116,101,32,115,112,97,99,101,32,105,115,32,112,101,114,109,105,116,116,101,100,32,98,101,116,119,101,101,110,32,97,110,32,105,116,101,109,32,97,110,100,32,97,32,102,111,108,108,111,119,105,110,103,32,113,117,97,110,116,105,102,105,101,114,32,97,110,100,32,98,101,116,119,101,101,110,32,97,32,113,117,97,110,116,105,102,105,101,114,32,97,110,100,32,97,32,102,111,108,108,111,119,105,110,103,32,43,32,116,104,97,116,32,105,110,100,105,99,97,116,101,115,32,112,111,115,115,101,115,115,105,118,101,110,101,115,115,46>>]},{p,[],[<<87,104,105,116,101,32,115,112,97,99,101,32,100,105,100,32,110,111,116,32,117,115,101,100,32,116,111,32,105,110,99,108,117,100,101,32,116,104,101,32,86,84,32,99,104,97,114,97,99,116,101,114,32,40,99,111,100,101,32,49,49,41,44,32,98,101,99,97,117,115,101,32,80,101,114,108,32,100,105,100,32,110,111,116,32,116,114,101,97,116,32,116,104,105,115,32,99,104,97,114,97,99,116,101,114,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,46,32,72,111,119,101,118,101,114,44,32,80,101,114,108,32,99,104,97,110,103,101,100,32,97,116,32,114,101,108,101,97,115,101,32,53,46,49,56,44,32,115,111,32,80,67,82,69,32,102,111,108,108,111,119,101,100,32,97,116,32,114,101,108,101,97,115,101,32,56,46,51,52,44,32,97,110,100,32,86,84,32,105,115,32,110,111,119,32,116,114,101,97,116,101,100,32,97,115,32,119,104,105,116,101,32,115,112,97,99,101,46>>]},{p,[],[<<84,104,105,115,32,97,108,115,111,32,99,97,117,115,101,115,32,99,104,97,114,97,99,116,101,114,115,32,98,101,116,119,101,101,110,32,97,110,32,117,110,101,115,99,97,112,101,100,32,35,32,111,117,116,115,105,100,101,32,97,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,97,110,100,32,116,104,101,32,110,101,120,116,32,110,101,119,108,105,110,101,44,32,105,110,99,108,117,115,105,118,101,44,32,116,111,32,98,101,32,105,103,110,111,114,101,100,46,32,84,104,105,115,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,39,115,32>>,{code,[],[<<47,120>>]},<<32,111,112,116,105,111,110,44,32,97,110,100,32,105,116,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,120,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46>>]},{p,[],[<<87,105,116,104,32,116,104,105,115,32,111,112,116,105,111,110,44,32,99,111,109,109,101,110,116,115,32,105,110,115,105,100,101,32,99,111,109,112,108,105,99,97,116,101,100,32,112,97,116,116,101,114,110,115,32,99,97,110,32,98,101,32,105,110,99,108,117,100,101,100,46,32,72,111,119,101,118,101,114,44,32,110,111,116,105,99,101,32,116,104,97,116,32,116,104,105,115,32,97,112,112,108,105,101,115,32,111,110,108,121,32,116,111,32,100,97,116,97,32,99,104,97,114,97,99,116,101,114,115,46,32,87,104,105,116,101,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,99,97,110,32,110,101,118,101,114,32,97,112,112,101,97,114,32,119,105,116,104,105,110,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,115,32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,102,111,114,32,101,120,97,109,112,108,101,32,119,105,116,104,105,110,32,115,101,113,117,101,110,99,101,32>>,{code,[],[<<40,63,40>>]},<<32,116,104,97,116,32,105,110,116,114,111,100,117,99,101,115,32,97,32,99,111,110,100,105,116,105,111,110,97,108,32,115,117,98,112,97,116,116,101,114,110,46>>]}]},{dt,[],[{code,[],[<<102,105,114,115,116,108,105,110,101>>]}]},{dd,[],[{p,[],[<<65,110,32,117,110,97,110,99,104,111,114,101,100,32,112,97,116,116,101,114,110,32,105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,109,97,116,99,104,32,98,101,102,111,114,101,32,111,114,32,97,116,32,116,104,101,32,102,105,114,115,116,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,97,108,116,104,111,117,103,104,32,116,104,101,32,109,97,116,99,104,101,100,32,116,101,120,116,32,99,97,110,32,99,111,110,116,105,110,117,101,32,111,118,101,114,32,116,104,101,32,110,101,119,108,105,110,101,46>>]}]},{dt,[],[{code,[],[<<109,117,108,116,105,108,105,110,101>>]}]},{dd,[],[{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,80,67,82,69,32,116,114,101,97,116,115,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,97,115,32,99,111,110,115,105,115,116,105,110,103,32,111,102,32,97,32,115,105,110,103,108,101,32,108,105,110,101,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,101,118,101,110,32,105,102,32,105,116,32,99,111,110,116,97,105,110,115,32,110,101,119,108,105,110,101,115,41,46,32,84,104,101,32,34,115,116,97,114,116,32,111,102,32,108,105,110,101,34,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,40>>,{code,[],[<<94>>]},<<41,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,119,104,105,108,101,32,116,104,101,32,34,101,110,100,32,111,102,32,108,105,110,101,34,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,40>>,{code,[],[<<36>>]},<<41,32,109,97,116,99,104,101,115,32,111,110,108,121,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,111,114,32,98,101,102,111,114,101,32,97,32,116,101,114,109,105,110,97,116,105,110,103,32,110,101,119,108,105,110,101,32,40,117,110,108,101,115,115,32,111,112,116,105,111,110,32>>,{code,[],[<<100,111,108,108,97,114,95,101,110,100,111,110,108,121>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,41,46,32,84,104,105,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,105,110,32,80,101,114,108,46>>]},{p,[],[<<87,104,101,110,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,34,115,116,97,114,116,32,111,102,32,108,105,110,101,34,32,97,110,100,32,34,101,110,100,32,111,102,32,108,105,110,101,34,32,99,111,110,115,116,114,117,99,116,115,32,109,97,116,99,104,32,105,109,109,101,100,105,97,116,101,108,121,32,102,111,108,108,111,119,105,110,103,32,111,114,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,105,110,116,101,114,110,97,108,32,110,101,119,108,105,110,101,115,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,114,101,115,112,101,99,116,105,118,101,108,121,44,32,97,115,32,119,101,108,108,32,97,115,32,97,116,32,116,104,101,32,118,101,114,121,32,115,116,97,114,116,32,97,110,100,32,101,110,100,46,32,84,104,105,115,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,80,101,114,108,32,111,112,116,105,111,110,32>>,{code,[],[<<47,109>>]},<<32,97,110,100,32,99,97,110,32,98,101,32,99,104,97,110,103,101,100,32,119,105,116,104,105,110,32,97,32,112,97,116,116,101,114,110,32,98,121,32,97,32>>,{code,[],[<<40,63,109,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,46,32,73,102,32,116,104,101,114,101,32,97,114,101,32,110,111,32,110,101,119,108,105,110,101,115,32,105,110,32,97,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,111,114,32,110,111,32,111,99,99,117,114,114,101,110,99,101,115,32,111,102,32>>,{code,[],[<<94>>]},<<32,111,114,32>>,{code,[],[<<36>>]},<<32,105,110,32,97,32,112,97,116,116,101,114,110,44,32,115,101,116,116,105,110,103,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,104,97,115,32,110,111,32,101,102,102,101,99,116,46>>]}]},{dt,[],[{code,[],[<<110,111,95,97,117,116,111,95,99,97,112,116,117,114,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,116,104,101,32,117,115,101,32,111,102,32,110,117,109,98,101,114,101,100,32,99,97,112,116,117,114,105,110,103,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46,32,65,110,121,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,116,104,97,116,32,105,115,32,110,111,116,32,102,111,108,108,111,119,101,100,32,98,121,32>>,{code,[],[<<63>>]},<<32,98,101,104,97,118,101,115,32,97,115,32,105,102,32,105,116,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32>>,{code,[],[<<63,58>>]},<<46,32,78,97,109,101,100,32,112,97,114,101,110,116,104,101,115,101,115,32,99,97,110,32,115,116,105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,99,97,112,116,117,114,105,110,103,32,40,97,110,100,32,116,104,101,121,32,97,99,113,117,105,114,101,32,110,117,109,98,101,114,115,32,105,110,32,116,104,101,32,117,115,117,97,108,32,119,97,121,41,46,32,84,104,101,114,101,32,105,115,32,110,111,32,101,113,117,105,118,97,108,101,110,116,32,111,112,116,105,111,110,32,105,110,32,80,101,114,108,46>>]}]},{dt,[],[{code,[],[<<100,117,112,110,97,109,101,115>>]}]},{dd,[],[{p,[],[<<78,97,109,101,115,32,117,115,101,100,32,116,111,32,105,100,101,110,116,105,102,121,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,110,101,101,100,32,110,111,116,32,98,101,32,117,110,105,113,117,101,46,32,84,104,105,115,32,99,97,110,32,98,101,32,104,101,108,112,102,117,108,32,102,111,114,32,99,101,114,116,97,105,110,32,116,121,112,101,115,32,111,102,32,112,97,116,116,101,114,110,32,119,104,101,110,32,105,116,32,105,115,32,107,110,111,119,110,32,116,104,97,116,32,111,110,108,121,32,111,110,101,32,105,110,115,116,97,110,99,101,32,111,102,32,116,104,101,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,101,118,101,114,32,98,101,32,109,97,116,99,104,101,100,46,32,77,111,114,101,32,100,101,116,97,105,108,115,32,111,102,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,112,114,111,118,105,100,101,100,32,98,101,108,111,119,46>>]}]},{dt,[],[{code,[],[<<117,110,103,114,101,101,100,121>>]}]},{dd,[],[{p,[],[<<73,110,118,101,114,116,115,32,116,104,101,32,34,103,114,101,101,100,105,110,101,115,115,34,32,111,102,32,116,104,101,32,113,117,97,110,116,105,102,105,101,114,115,32,115,111,32,116,104,97,116,32,116,104,101,121,32,97,114,101,32,110,111,116,32,103,114,101,101,100,121,32,98,121,32,100,101,102,97,117,108,116,44,32,98,117,116,32,98,101,99,111,109,101,32,103,114,101,101,100,121,32,105,102,32,102,111,108,108,111,119,101,100,32,98,121,32,34,63,34,46,32,73,116,32,105,115,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,80,101,114,108,46,32,73,116,32,99,97,110,32,97,108,115,111,32,98,101,32,115,101,116,32,98,121,32,97,32>>,{code,[],[<<40,63,85,41>>]},<<32,111,112,116,105,111,110,32,115,101,116,116,105,110,103,32,119,105,116,104,105,110,32,116,104,101,32,112,97,116,116,101,114,110,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]}]},{dd,[],[{p,[],[<<79,118,101,114,114,105,100,101,115,32,116,104,101,32,100,101,102,97,117,108,116,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,97,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,119,104,105,99,104,32,105,115,32,76,70,32,40,65,83,67,73,73,32,49,48,41,32,105,110,32,69,114,108,97,110,103,46>>]},{dl,[],[{dt,[],[{code,[],[<<99,114>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32>>,{code,[],[<<99,114>>]},<<32,40,65,83,67,73,73,32,49,51,41,46>>]}]},{dt,[],[{code,[],[<<108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,76,70,32,40,65,83,67,73,73,32,49,48,41,44,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<99,114,108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,67,82,76,70,32,40,65,83,67,73,73,32,49,51,32,102,111,108,108,111,119,101,100,32,98,121,32,65,83,67,73,73,32,49,48,41,32,115,101,113,117,101,110,99,101,46>>]}]},{dt,[],[{code,[],[<<97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,112,114,101,99,101,100,105,110,103,32,115,101,113,117,101,110,99,101,115,32,105,115,32,116,111,32,98,101,32,114,101,99,111,103,110,105,122,101,100,46>>]}]},{dt,[],[{code,[],[<<97,110,121>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,115,32,97,98,111,118,101,44,32,97,110,100,32,116,104,101,32,85,110,105,99,111,100,101,32,115,101,113,117,101,110,99,101,115,32,86,84,32,40,118,101,114,116,105,99,97,108,32,116,97,98,44,32,85,43,48,48,48,66,41,44,32,70,70,32,40,102,111,114,109,102,101,101,100,44,32,85,43,48,48,48,67,41,44,32,78,69,76,32,40,110,101,120,116,32,108,105,110,101,44,32,85,43,48,48,56,53,41,44,32,76,83,32,40,108,105,110,101,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,56,41,44,32,97,110,100,32,80,83,32,40,112,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,57,41,46>>]}]}]}]},{dt,[],[{code,[],[<<98,115,114,95,97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,116,104,101,32,67,82,44,32,76,70,44,32,111,114,32,67,82,76,70,32,115,101,113,117,101,110,99,101,115,44,32,110,111,116,32,116,104,101,32,85,110,105,99,111,100,101,45,115,112,101,99,105,102,105,99,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,46>>]}]},{dt,[],[{code,[],[<<98,115,114,95,117,110,105,99,111,100,101>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,97,108,108,32,116,104,101,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,99,108,117,100,105,110,103,32,67,82,76,70,44,32,97,110,100,32,115,111,32,111,110,44,32,116,104,101,32,100,101,102,97,117,108,116,41,46>>]}]},{dt,[],[{code,[],[<<110,111,95,115,116,97,114,116,95,111,112,116,105,109,105,122,101>>]}]},{dd,[],[{p,[],[<<68,105,115,97,98,108,101,115,32,111,112,116,105,109,105,122,97,116,105,111,110,32,116,104,97,116,32,99,97,110,32,109,97,108,102,117,110,99,116,105,111,110,32,105,102,32,34,83,112,101,99,105,97,108,32,115,116,97,114,116,45,111,102,45,112,97,116,116,101,114,110,32,105,116,101,109,115,34,32,97,114,101,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,65,32,116,121,112,105,99,97,108,32,101,120,97,109,112,108,101,32,119,111,117,108,100,32,98,101,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,34,68,69,70,65,66,67,34,32,97,103,97,105,110,115,116,32,34,40,42,67,79,77,77,73,84,41,65,66,67,34,44,32,119,104,101,114,101,32,116,104,101,32,115,116,97,114,116,32,111,112,116,105,109,105,122,97,116,105,111,110,32,111,102,32,80,67,82,69,32,119,111,117,108,100,32,115,107,105,112,32,116,104,101,32,115,117,98,106,101,99,116,32,117,112,32,116,111,32,34,65,34,32,97,110,100,32,110,101,118,101,114,32,114,101,97,108,105,122,101,32,116,104,97,116,32,116,104,101,32,40,42,67,79,77,77,73,84,41,32,105,110,115,116,114,117,99,116,105,111,110,32,105,115,32,116,111,32,104,97,118,101,32,109,97,100,101,32,116,104,101,32,109,97,116,99,104,105,110,103,32,102,97,105,108,46,32,84,104,105,115,32,111,112,116,105,111,110,32,105,115,32,111,110,108,121,32,114,101,108,101,118,97,110,116,32,105,102,32,121,111,117,32,117,115,101,32,34,115,116,97,114,116,45,111,102,45,112,97,116,116,101,114,110,32,105,116,101,109,115,34,44,32,97,115,32,100,105,115,99,117,115,115,101,100,32,105,110,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,101,103,101,120,112,95,115,121,110,116,97,120,95,100,101,116,97,105,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<80,67,82,69,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,68,101,116,97,105,108,115>>]},<<46>>]}]},{dt,[],[{code,[],[<<117,99,112>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,116,111,32,98,101,32,117,115,101,100,32,119,104,101,110,32,114,101,115,111,108,118,105,110,103,32,92,66,44,32,92,98,44,32,92,68,44,32,92,100,44,32,92,83,44,32,92,115,44,32,92,87,32,97,110,100,32,92,119,46,32,87,105,116,104,111,117,116,32,116,104,105,115,32,102,108,97,103,44,32,111,110,108,121,32,73,83,79,32,76,97,116,105,110,45,49,32,112,114,111,112,101,114,116,105,101,115,32,97,114,101,32,117,115,101,100,46,32,85,115,105,110,103,32,85,110,105,99,111,100,101,32,112,114,111,112,101,114,116,105,101,115,32,104,117,114,116,115,32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,117,116,32,105,115,32,115,101,109,97,110,116,105,99,97,108,108,121,32,99,111,114,114,101,99,116,32,119,104,101,110,32,119,111,114,107,105,110,103,32,119,105,116,104,32,85,110,105,99,111,100,101,32,99,104,97,114,97,99,116,101,114,115,32,98,101,121,111,110,100,32,116,104,101,32,73,83,79,32,76,97,116,105,110,45,49,32,114,97,110,103,101,46>>]}]},{dt,[],[{code,[],[<<110,101,118,101,114,95,117,116,102>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,116,104,101,32,40,42,85,84,70,41,32,97,110,100,47,111,114,32,40,42,85,84,70,56,41,32,34,115,116,97,114,116,45,111,102,45,112,97,116,116,101,114,110,32,105,116,101,109,115,34,32,97,114,101,32,102,111,114,98,105,100,100,101,110,46,32,84,104,105,115,32,102,108,97,103,32,99,97,110,110,111,116,32,98,101,32,99,111,109,98,105,110,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<46,32,85,115,101,102,117,108,32,105,102,32,73,83,79,32,76,97,116,105,110,45,49,32,112,97,116,116,101,114,110,115,32,102,114,111,109,32,97,110,32,101,120,116,101,114,110,97,108,32,115,111,117,114,99,101,32,97,114,101,32,116,111,32,98,101,32,99,111,109,112,105,108,101,100,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,57,55>>,signature => [{attribute,{57,2},spec,{{compile,2},[{type,{57,14},bounded_fun,[{type,{57,14},'fun',[{type,{57,14},product,[{var,{57,15},'Regexp'},{var,{57,23},'Options'}]},{type,{57,35},union,[{type,{57,35},tuple,[{atom,{57,36},ok},{var,{57,40},'MP'}]},{type,{57,46},tuple,[{atom,{57,47},error},{var,{57,54},'ErrSpec'}]}]}]},[{type,{58,7},constraint,[{atom,{58,7},is_subtype},[{var,{58,7},'Regexp'},{type,{58,17},union,[{type,{58,17},iodata,[]},{remote_type,{58,28},[{atom,{58,28},unicode},{atom,{58,36},charlist},[]]}]}]]},{type,{59,7},constraint,[{atom,{59,7},is_subtype},[{var,{59,7},'Options'},{type,{59,18},list,[{var,{59,19},'Option'}]}]]},{type,{60,7},constraint,[{atom,{60,7},is_subtype},[{var,{60,7},'Option'},{user_type,{60,17},compile_option,[]}]]},{type,{61,7},constraint,[{atom,{61,7},is_subtype},[{var,{61,7},'MP'},{user_type,{61,13},mp,[]}]]},{type,{62,7},constraint,[{atom,{62,7},is_subtype},[{var,{62,7},'ErrSpec'},{type,{62,18},tuple,[{ann_type,{62,19},[{var,{62,19},'ErrString'},{type,{62,32},string,[]}]},{ann_type,{62,42},[{var,{62,42},'Position'},{type,{62,54},non_neg_integer,[]}]}]}]]}]]}]}}]}},{{function,inspect,2},[{file,[114,101,46,101,114,108]},{location,143}],[<<105,110,115,112,101,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<84,97,107,101,115,32,97,32,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,110,100,32,97,110,32,105,116,101,109,44,32,97,110,100,32,114,101,116,117,114,110,115,32,116,104,101,32,114,101,108,101,118,97,110,116,32,100,97,116,97,32,102,114,111,109,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,84,104,101,32,111,110,108,121,32,115,117,112,112,111,114,116,101,100,32,105,116,101,109,32,105,115,32>>,{code,[],[<<110,97,109,101,108,105,115,116>>]},<<44,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,110,97,109,101,108,105,115,116,44,32,91,98,105,110,97,114,121,40,41,93,125>>]},<<44,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,110,97,109,101,115,32,111,102,32,97,108,108,32,40,117,110,105,113,117,101,41,32,110,97,109,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<49,62,32,123,111,107,44,77,80,125,32,61,32,114,101,58,99,111,109,112,105,108,101,40,34,40,63,60,65,62,65,41,124,40,63,60,66,62,66,41,124,40,63,60,67,62,67,41,34,41,46,10,123,111,107,44,123,114,101,95,112,97,116,116,101,114,110,44,51,44,48,44,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,60,54,57,44,56,50,44,54,55,44,56,48,44,49,49,57,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,49,44,48,44,48,44,48,44,50,53,53,44,50,53,53,44,50,53,53,44,50,53,53,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,50,53,53,44,50,53,53,44,46,46,46,62,62,125,125,10,50,62,32,114,101,58,105,110,115,112,101,99,116,40,77,80,44,110,97,109,101,108,105,115,116,41,46,10,123,110,97,109,101,108,105,115,116,44,91,60,60,34,65,34,62,62,44,60,60,34,66,34,62,62,44,60,60,34,67,34,62,62,93,125,10,51,62,32,123,111,107,44,77,80,68,125,32,61,32,114,101,58,99,111,109,112,105,108,101,40,34,40,63,60,67,62,65,41,124,40,63,60,66,62,66,41,124,40,63,60,67,62,67,41,34,44,91,100,117,112,110,97,109,101,115,93,41,46,10,123,111,107,44,123,114,101,95,112,97,116,116,101,114,110,44,51,44,48,44,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,60,54,57,44,56,50,44,54,55,44,56,48,44,49,49,57,44,48,44,48,44,48,44,48,44,48,44,56,44,48,44,49,44,48,44,48,44,48,44,50,53,53,44,50,53,53,44,50,53,53,44,50,53,53,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,50,53,53,44,50,53,53,44,46,46,46,62,62,125,125,10,52,62,32,114,101,58,105,110,115,112,101,99,116,40,77,80,68,44,110,97,109,101,108,105,115,116,41,46,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,123,110,97,109,101,108,105,115,116,44,91,60,60,34,66,34,62,62,44,60,60,34,67,34,62,62,93,125>>]}]},{p,[],[<<78,111,116,105,99,101,32,105,110,32,116,104,101,32,115,101,99,111,110,100,32,101,120,97,109,112,108,101,32,116,104,97,116,32,116,104,101,32,100,117,112,108,105,99,97,116,101,32,110,97,109,101,32,111,110,108,121,32,111,99,99,117,114,115,32,111,110,99,101,32,105,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,108,105,115,116,44,32,97,110,100,32,116,104,97,116,32,116,104,101,32,108,105,115,116,32,105,115,32,105,110,32,97,108,112,104,97,98,101,116,105,99,97,108,32,111,114,100,101,114,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,119,104,101,114,101,32,116,104,101,32,110,97,109,101,115,32,97,114,101,32,112,111,115,105,116,105,111,110,101,100,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32,84,104,101,32,111,114,100,101,114,32,111,102,32,116,104,101,32,110,97,109,101,115,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,111,114,100,101,114,32,111,102,32,99,97,112,116,117,114,101,100,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,105,102,32>>,{code,[],[<<123,99,97,112,116,117,114,101,44,32,97,108,108,95,110,97,109,101,115,125>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,110,32,111,112,116,105,111,110,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<46,32,89,111,117,32,99,97,110,32,116,104,101,114,101,102,111,114,101,32,99,114,101,97,116,101,32,97,32,110,97,109,101,45,116,111,45,118,97,108,117,101,32,109,97,112,112,105,110,103,32,102,114,111,109,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,108,105,107,101,32,116,104,105,115,58>>]},{pre,[],[{code,[],[<<49,62,32,123,111,107,44,77,80,125,32,61,32,114,101,58,99,111,109,112,105,108,101,40,34,40,63,60,65,62,65,41,124,40,63,60,66,62,66,41,124,40,63,60,67,62,67,41,34,41,46,10,123,111,107,44,123,114,101,95,112,97,116,116,101,114,110,44,51,44,48,44,48,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,60,54,57,44,56,50,44,54,55,44,56,48,44,49,49,57,44,48,44,48,44,48,44,48,44,48,44,48,44,48,44,49,44,48,44,48,44,48,44,50,53,53,44,50,53,53,44,50,53,53,44,50,53,53,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,50,53,53,44,50,53,53,44,46,46,46,62,62,125,125,10,50,62,32,123,110,97,109,101,108,105,115,116,44,32,78,125,32,61,32,114,101,58,105,110,115,112,101,99,116,40,77,80,44,110,97,109,101,108,105,115,116,41,46,10,123,110,97,109,101,108,105,115,116,44,91,60,60,34,65,34,62,62,44,60,60,34,66,34,62,62,44,60,60,34,67,34,62,62,93,125,10,51,62,32,123,109,97,116,99,104,44,76,125,32,61,32,114,101,58,114,117,110,40,34,65,65,34,44,77,80,44,91,123,99,97,112,116,117,114,101,44,97,108,108,95,110,97,109,101,115,44,98,105,110,97,114,121,125,93,41,46,10,123,109,97,116,99,104,44,91,60,60,34,65,34,62,62,44,60,60,62,62,44,60,60,62,62,93,125,10,52,62,32,78,97,109,101,77,97,112,32,61,32,108,105,115,116,115,58,122,105,112,40,78,44,76,41,46,10,91,123,60,60,34,65,34,62,62,44,60,60,34,65,34,62,62,125,44,123,60,60,34,66,34,62,62,44,60,60,62,62,125,44,123,60,60,34,67,34,62,62,44,60,60,62,62,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,51,48,54>>,signature => [{attribute,{143,2},spec,{{inspect,2},[{type,{143,14},bounded_fun,[{type,{143,14},'fun',[{type,{143,14},product,[{var,{143,15},'MP'},{var,{143,18},'Item'}]},{type,{143,27},tuple,[{atom,{143,28},namelist},{type,{143,38},list,[{type,{143,40},binary,[]}]}]}]},[{type,{144,7},constraint,[{atom,{144,7},is_subtype},[{var,{144,7},'MP'},{user_type,{144,13},mp,[]}]]},{type,{145,7},constraint,[{atom,{145,7},is_subtype},[{var,{145,7},'Item'},{atom,{145,15},namelist}]]}]]}]}}],since => <<79,84,80,32,49,55,46,48>>}},{{function,replace,3},[{file,[114,101,46,101,114,108]},{location,353}],[<<114,101,112,108,97,99,101,47,51>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<114,101,112,108,97,99,101,40,83,117,98,106,101,99,116,44,32,82,69,44,32,82,101,112,108,97,99,101,109,101,110,116,44,32,91,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,51,53,48>>,signature => [{attribute,{353,2},spec,{{replace,3},[{type,{353,14},bounded_fun,[{type,{353,14},'fun',[{type,{353,14},product,[{var,{353,15},'Subject'},{var,{353,24},'RE'},{var,{353,28},'Replacement'}]},{type,{353,44},union,[{type,{353,44},iodata,[]},{remote_type,{353,55},[{atom,{353,55},unicode},{atom,{353,63},charlist},[]]}]}]},[{type,{354,7},constraint,[{atom,{354,7},is_subtype},[{var,{354,7},'Subject'},{type,{354,18},union,[{type,{354,18},iodata,[]},{remote_type,{354,29},[{atom,{354,29},unicode},{atom,{354,37},charlist},[]]}]}]]},{type,{355,7},constraint,[{atom,{355,7},is_subtype},[{var,{355,7},'RE'},{type,{355,13},union,[{user_type,{355,13},mp,[]},{type,{355,20},iodata,[]}]}]]},{type,{356,7},constraint,[{atom,{356,7},is_subtype},[{var,{356,7},'Replacement'},{type,{356,22},union,[{type,{356,22},iodata,[]},{remote_type,{356,33},[{atom,{356,33},unicode},{atom,{356,41},charlist},[]]}]}]]}]]}]}}]}},{{function,replace,4},[{file,[114,101,46,101,114,108]},{location,366}],[<<114,101,112,108,97,99,101,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,112,108,97,99,101,115,32,116,104,101,32,109,97,116,99,104,101,100,32,112,97,114,116,32,111,102,32,116,104,101,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32>>,{code,[],[<<82,101,112,108,97,99,101,109,101,110,116>>]},<<46>>]},{p,[],[<<84,104,101,32,112,101,114,109,105,115,115,105,98,108,101,32,111,112,116,105,111,110,115,32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,102,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,111,112,116,105,111,110>>,{code,[],[<<32,99,97,112,116,117,114,101>>]},<<32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,46,32,73,110,115,116,101,97,100,32,97,32>>,{code,[],[<<123,114,101,116,117,114,110,44,32,82,101,116,117,114,110,84,121,112,101,125>>]},<<32,105,115,32,112,114,101,115,101,110,116,46,32,84,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<44,32,99,111,110,115,116,114,117,99,116,101,100,32,105,110,32,97,32,119,97,121,32,116,111,32,109,105,110,105,109,105,122,101,32,99,111,112,121,105,110,103,46,32,84,104,101,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<32,114,101,115,117,108,116,32,99,97,110,32,98,101,32,117,115,101,100,32,100,105,114,101,99,116,108,121,32,105,110,32,109,97,110,121,32,73,47,79,32,111,112,101,114,97,116,105,111,110,115,46,32,73,102,32,97,32,102,108,97,116,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,105,115,32,100,101,115,105,114,101,100,44,32,115,112,101,99,105,102,121,32>>,{code,[],[<<123,114,101,116,117,114,110,44,32,108,105,115,116,125>>]},<<46,32,73,102,32,97,32,98,105,110,97,114,121,32,105,115,32,100,101,115,105,114,101,100,44,32,115,112,101,99,105,102,121,32>>,{code,[],[<<123,114,101,116,117,114,110,44,32,98,105,110,97,114,121,125>>]},<<46>>]},{p,[],[<<65,115,32,105,110,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<114,117,110,47,51>>]},<<44,32,97,110,32>>,{code,[],[<<109,112,40,41>>]},<<32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,114,101,113,117,105,114,101,115,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,116,111,32,98,101,32,97,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<46,32,73,102,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,105,109,112,108,105,99,105,116,108,121,32,97,110,100,32,116,104,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,98,111,116,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,110,100,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,97,114,101,32,116,111,32,115,112,101,99,105,102,105,101,100,32,97,115,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<115,46>>]},{p,[],[<<84,104,101,32,114,101,112,108,97,99,101,109,101,110,116,32,115,116,114,105,110,103,32,99,97,110,32,99,111,110,116,97,105,110,32,116,104,101,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,32>>,{code,[],[<<38>>]},<<44,32,119,104,105,99,104,32,105,110,115,101,114,116,115,32,116,104,101,32,119,104,111,108,101,32,109,97,116,99,104,105,110,103,32,101,120,112,114,101,115,115,105,111,110,32,105,110,32,116,104,101,32,114,101,115,117,108,116,44,32,97,110,100,32,116,104,101,32,115,112,101,99,105,97,108,32,115,101,113,117,101,110,99,101,32>>,{code,[],[<<92>>]},<<78,32,40,119,104,101,114,101,32,78,32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,62,32,48,41,44,32>>,{code,[],[<<92,103>>]},<<78,44,32,111,114,32>>,{code,[],[<<92,103,123>>]},<<78>>,{code,[],[<<125>>]},<<44,32,114,101,115,117,108,116,105,110,103,32,105,110,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,110,117,109,98,101,114,32,78,44,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,46,32,73,102,32,110,111,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,119,105,116,104,32,116,104,97,116,32,110,117,109,98,101,114,32,105,115,32,103,101,110,101,114,97,116,101,100,32,98,121,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,110,111,116,104,105,110,103,32,105,115,32,105,110,115,101,114,116,101,100,46>>]},{p,[],[<<84,111,32,105,110,115,101,114,116,32,97,110,32,38,32,111,114,32,97,32,92,32,105,110,32,116,104,101,32,114,101,115,117,108,116,44,32,112,114,101,99,101,100,101,32,105,116,32,119,105,116,104,32,97,32,92,46,32,78,111,116,105,99,101,32,116,104,97,116,32,69,114,108,97,110,103,32,97,108,114,101,97,100,121,32,103,105,118,101,115,32,97,32,115,112,101,99,105,97,108,32,109,101,97,110,105,110,103,32,116,111,32,92,32,105,110,32,108,105,116,101,114,97,108,32,115,116,114,105,110,103,115,44,32,115,111,32,97,32,115,105,110,103,108,101,32,92,32,109,117,115,116,32,98,101,32,119,114,105,116,116,101,110,32,97,115,32>>,{code,[],[<<34,92,92,34>>]},<<32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,97,32,100,111,117,98,108,101,32,92,32,97,115,32>>,{code,[],[<<34,92,92,92,92,34>>]},<<46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{pre,[],[{code,[],[<<114,101,58,114,101,112,108,97,99,101,40,34,97,98,99,100,34,44,34,99,34,44,34,91,38,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<34,97,98,91,99,93,100,34>>]}]},{p,[],[<<119,104,105,108,101>>]},{pre,[],[{code,[],[<<114,101,58,114,101,112,108,97,99,101,40,34,97,98,99,100,34,44,34,99,34,44,34,91,92,92,38,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<34,97,98,91,38,93,100,34>>]}]},{p,[],[<<65,115,32,119,105,116,104,32>>,{code,[],[<<114,117,110,47,51>>]},<<44,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,115,32,114,97,105,115,101,32,116,104,101,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,46,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,103,101,116,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,101,114,114,111,114,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,51,54,48>>,signature => [{attribute,{366,2},spec,{{replace,4},[{type,{366,14},bounded_fun,[{type,{366,14},'fun',[{type,{366,14},product,[{var,{366,15},'Subject'},{var,{366,24},'RE'},{var,{366,28},'Replacement'},{var,{366,41},'Options'}]},{type,{366,53},union,[{type,{366,53},iodata,[]},{remote_type,{366,64},[{atom,{366,64},unicode},{atom,{366,72},charlist},[]]}]}]},[{type,{367,7},constraint,[{atom,{367,7},is_subtype},[{var,{367,7},'Subject'},{type,{367,18},union,[{type,{367,18},iodata,[]},{remote_type,{367,29},[{atom,{367,29},unicode},{atom,{367,37},charlist},[]]}]}]]},{type,{368,7},constraint,[{atom,{368,7},is_subtype},[{var,{368,7},'RE'},{type,{368,13},union,[{user_type,{368,13},mp,[]},{type,{368,20},iodata,[]},{remote_type,{368,31},[{atom,{368,31},unicode},{atom,{368,39},charlist},[]]}]}]]},{type,{369,7},constraint,[{atom,{369,7},is_subtype},[{var,{369,7},'Replacement'},{type,{369,22},union,[{type,{369,22},iodata,[]},{remote_type,{369,33},[{atom,{369,33},unicode},{atom,{369,41},charlist},[]]}]}]]},{type,{370,7},constraint,[{atom,{370,7},is_subtype},[{var,{370,7},'Options'},{type,{370,18},list,[{var,{370,19},'Option'}]}]]},{type,{371,7},constraint,[{atom,{371,7},is_subtype},[{var,{371,7},'Option'},{type,{371,17},union,[{atom,{371,17},anchored},{atom,{371,28},global},{atom,{371,37},notbol},{atom,{371,46},noteol},{atom,{371,55},notempty},{atom,{372,10},notempty_atstart},{type,{373,17},tuple,[{atom,{373,18},offset},{type,{373,26},non_neg_integer,[]}]},{type,{373,47},tuple,[{atom,{373,48},newline},{var,{373,57},'NLSpec'}]},{atom,{373,67},bsr_anycrlf},{type,{374,17},tuple,[{atom,{374,18},match_limit},{type,{374,31},non_neg_integer,[]}]},{type,{375,17},tuple,[{atom,{375,18},match_limit_recursion},{type,{375,41},non_neg_integer,[]}]},{atom,{376,17},bsr_unicode},{type,{376,31},tuple,[{atom,{376,32},return},{var,{376,40},'ReturnType'}]},{var,{376,54},'CompileOpt'}]}]]},{type,{377,7},constraint,[{atom,{377,7},is_subtype},[{var,{377,7},'ReturnType'},{type,{377,21},union,[{atom,{377,21},iodata},{atom,{377,30},list},{atom,{377,37},binary}]}]]},{type,{378,7},constraint,[{atom,{378,7},is_subtype},[{var,{378,7},'CompileOpt'},{user_type,{378,21},compile_option,[]}]]},{type,{379,7},constraint,[{atom,{379,7},is_subtype},[{var,{379,7},'NLSpec'},{type,{379,17},union,[{atom,{379,17},cr},{atom,{379,22},crlf},{atom,{379,29},lf},{atom,{379,34},anycrlf},{atom,{379,44},any}]}]]}]]}]}}]}},{{function,run,2},[{file,[114,101,46,101,114,108]},{location,67}],[<<114,117,110,47,50>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<114,117,110,40,83,117,98,106,101,99,116,44,82,69,44,91,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,52,49,48>>,signature => [{attribute,{67,2},spec,{{run,2},[{type,{67,10},bounded_fun,[{type,{67,10},'fun',[{type,{67,10},product,[{var,{67,11},'Subject'},{var,{67,20},'RE'}]},{type,{67,27},union,[{type,{67,27},tuple,[{atom,{67,28},match},{var,{67,35},'Captured'}]},{atom,{67,47},nomatch}]}]},[{type,{68,7},constraint,[{atom,{68,7},is_subtype},[{var,{68,7},'Subject'},{type,{68,18},union,[{type,{68,18},iodata,[]},{remote_type,{68,29},[{atom,{68,29},unicode},{atom,{68,37},charlist},[]]}]}]]},{type,{69,7},constraint,[{atom,{69,7},is_subtype},[{var,{69,7},'RE'},{type,{69,13},union,[{user_type,{69,13},mp,[]},{type,{69,20},iodata,[]}]}]]},{type,{70,7},constraint,[{atom,{70,7},is_subtype},[{var,{70,7},'Captured'},{type,{70,19},list,[{var,{70,20},'CaptureData'}]}]]},{type,{71,7},constraint,[{atom,{71,7},is_subtype},[{var,{71,7},'CaptureData'},{type,{71,22},tuple,[{type,{71,23},integer,[]},{type,{71,34},integer,[]}]}]]}]]}]}}]}},{{function,run,3},[{file,[114,101,46,101,114,108]},{location,76}],[<<114,117,110,47,51>>],#{<<101,110>> => [{p,[],[<<69,120,101,99,117,116,101,115,32,97,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,105,110,103,44,32,97,110,100,32,114,101,116,117,114,110,115,32>>,{code,[],[<<109,97,116,99,104,47,123,109,97,116,99,104,44,32,67,97,112,116,117,114,101,100,125>>]},<<32,111,114,32>>,{code,[],[<<110,111,109,97,116,99,104>>]},<<46,32,84,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,101,105,116,104,101,114,32,97,115,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,105,116,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,111,109,112,105,108,101,100,32,40,97,115,32,98,121,32>>,{code,[],[<<99,111,109,112,105,108,101,47,50>>]},<<41,32,97,110,100,32,101,120,101,99,117,116,101,100,44,32,111,114,32,97,115,32,97,32,112,114,101,99,111,109,112,105,108,101,100,32>>,{code,[],[<<109,112,40,41>>]},<<32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,105,116,32,105,115,32,101,120,101,99,117,116,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,115,117,98,106,101,99,116,32,100,105,114,101,99,116,108,121,46>>]},{p,[],[<<87,104,101,110,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,105,110,118,111,108,118,101,100,44,32,101,120,99,101,112,116,105,111,110,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,105,115,32,116,104,114,111,119,110,32,105,102,32,97,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,32,111,99,99,117,114,115,46,32,67,97,108,108,32>>,{code,[],[<<99,111,109,112,105,108,101,47,50>>]},<<32,116,111,32,103,101,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104,101,32,101,114,114,111,114,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,105,108,101,100,44,32,116,104,101,32,111,112,116,105,111,110,32,108,105,115,116,32,99,97,110,32,111,110,108,121,32,99,111,110,116,97,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,58>>]},{ul,[],[{li,[],[{code,[],[<<97,110,99,104,111,114,101,100>>]}]},{li,[],[{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,125,47,123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,44,32,84,121,112,101,125>>]}]},{li,[],[{code,[],[<<103,108,111,98,97,108>>]}]},{li,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{li,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{li,[],[{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]}]},{li,[],[{code,[],[<<110,111,116,98,111,108>>]}]},{li,[],[{code,[],[<<110,111,116,101,109,112,116,121>>]}]},{li,[],[{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]}]},{li,[],[{code,[],[<<110,111,116,101,111,108>>]}]},{li,[],[{code,[],[<<123,111,102,102,115,101,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{li,[],[{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]}]}]},{p,[],[<<79,116,104,101,114,119,105,115,101,32,97,108,108,32,111,112,116,105,111,110,115,32,118,97,108,105,100,32,102,111,114,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<99,111,109,112,105,108,101,47,50>>]},<<32,97,114,101,32,97,108,115,111,32,97,108,108,111,119,101,100,46,32,79,112,116,105,111,110,115,32,97,108,108,111,119,101,100,32,98,111,116,104,32,102,111,114,32,99,111,109,112,105,108,97,116,105,111,110,32,97,110,100,32,101,120,101,99,117,116,105,111,110,32,111,102,32,97,32,109,97,116,99,104,44,32,110,97,109,101,108,121,32>>,{code,[],[<<97,110,99,104,111,114,101,100>>]},<<32,97,110,100,32>>,{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]},<<44,32,97,102,102,101,99,116,32,98,111,116,104,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,97,110,100,32,101,120,101,99,117,116,105,111,110,32,105,102,32,112,114,101,115,101,110,116,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,97,32,110,111,110,45,112,114,101,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<73,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,112,114,101,118,105,111,117,115,108,121,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,105,115,32,116,111,32,98,101,32,112,114,111,118,105,100,101,100,32,97,115,32,97,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<44,32,111,116,104,101,114,119,105,115,101,32,97,110,121,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<32,119,105,108,108,32,100,111,46,32,73,102,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,105,110,118,111,108,118,101,100,32,97,110,100,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,98,111,116,104,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,97,110,100,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,114,101,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,115,40,41>>]},<<46>>]},{p,[],[{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,125,47,123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,44,32,84,121,112,101,125>>]},<<32,100,101,102,105,110,101,115,32,119,104,97,116,32,116,111,32,114,101,116,117,114,110,32,102,114,111,109,32,116,104,101,32,102,117,110,99,116,105,111,110,32,117,112,111,110,32,115,117,99,99,101,115,115,102,117,108,32,109,97,116,99,104,105,110,103,46,32,84,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,116,117,112,108,101,32,99,97,110,32,99,111,110,116,97,105,110,32,98,111,116,104,32,97,32,118,97,108,117,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,116,101,108,108,105,110,103,32,119,104,105,99,104,32,111,102,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,44,32,97,110,100,32,97,32,116,121,112,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110,44,32,116,101,108,108,105,110,103,32,104,111,119,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,32,40,97,115,32,105,110,100,101,120,32,116,117,112,108,101,115,44,32,108,105,115,116,115,44,32,111,114,32,98,105,110,97,114,105,101,115,41,46,32,84,104,101,32,111,112,116,105,111,110,115,32,97,114,101,32,100,101,115,99,114,105,98,101,100,32,105,110,32,100,101,116,97,105,108,32,98,101,108,111,119,46>>]},{p,[],[<<73,102,32,116,104,101,32,99,97,112,116,117,114,101,32,111,112,116,105,111,110,115,32,100,101,115,99,114,105,98,101,32,116,104,97,116,32,110,111,32,115,117,98,115,116,114,105,110,103,32,99,97,112,116,117,114,105,110,103,32,105,115,32,116,111,32,98,101,32,100,111,110,101,32,40>>,{code,[],[<<123,99,97,112,116,117,114,101,44,32,110,111,110,101,125>>]},<<41,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,114,110,115,32,116,104,101,32,115,105,110,103,108,101,32,97,116,111,109,32>>,{code,[],[<<109,97,116,99,104>>]},<<32,117,112,111,110,32,115,117,99,99,101,115,115,102,117,108,32,109,97,116,99,104,105,110,103,44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,109,97,116,99,104,44,32,86,97,108,117,101,76,105,115,116,125>>]},<<46,32,68,105,115,97,98,108,105,110,103,32,99,97,112,116,117,114,105,110,103,32,99,97,110,32,98,101,32,100,111,110,101,32,101,105,116,104,101,114,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<110,111,110,101>>]},<<32,111,114,32,97,110,32,101,109,112,116,121,32,108,105,115,116,32,97,115,32>>,{code,[],[<<86,97,108,117,101,83,112,101,99>>]},<<46>>]},{p,[],[<<79,112,116,105,111,110,32>>,{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]},<<32,97,100,100,115,32,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,116,104,97,116,32,97,110,32,101,114,114,111,114,32,116,117,112,108,101,32,105,115,32,114,101,116,117,114,110,101,100,46,32,84,104,101,32,116,117,112,108,101,32,101,105,116,104,101,114,32,105,110,100,105,99,97,116,101,115,32,97,32,109,97,116,99,104,105,110,103,32,101,114,114,111,114,32,40>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,111,114,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]},<<41,44,32,111,114,32,97,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,44,32,119,104,101,114,101,32,116,104,101,32,101,114,114,111,114,32,116,117,112,108,101,32,104,97,115,32,116,104,101,32,102,111,114,109,97,116,32>>,{code,[],[<<123,101,114,114,111,114,44,32,123,99,111,109,112,105,108,101,44,32,67,111,109,112,105,108,101,69,114,114,125,125>>]},<<46,32,78,111,116,105,99,101,32,116,104,97,116,32,105,102,32,111,112,116,105,111,110,32>>,{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]},<<32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,110,101,118,101,114,32,114,101,116,117,114,110,115,32,101,114,114,111,114,32,116,117,112,108,101,115,44,32,98,117,116,32,114,101,112,111,114,116,115,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,115,32,97,115,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,101,120,99,101,112,116,105,111,110,32,97,110,100,32,102,97,105,108,101,100,32,109,97,116,99,104,101,115,32,98,101,99,97,117,115,101,32,111,102,32,101,120,99,101,101,100,101,100,32,109,97,116,99,104,32,108,105,109,105,116,115,32,115,105,109,112,108,121,32,97,115,32>>,{code,[],[<<110,111,109,97,116,99,104>>]},<<46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,111,112,116,105,111,110,115,32,97,114,101,32,114,101,108,101,118,97,110,116,32,102,111,114,32,101,120,101,99,117,116,105,111,110,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,110,99,104,111,114,101,100>>]}]},{dd,[],[{p,[],[<<76,105,109,105,116,115,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,116,111,32,109,97,116,99,104,105,110,103,32,97,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,112,111,115,105,116,105,111,110,46,32,73,102,32,97,32,112,97,116,116,101,114,110,32,119,97,115,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32>>,{code,[],[<<97,110,99,104,111,114,101,100>>]},<<44,32,111,114,32,116,117,114,110,101,100,32,111,117,116,32,116,111,32,98,101,32,97,110,99,104,111,114,101,100,32,98,121,32,118,105,114,116,117,101,32,111,102,32,105,116,115,32,99,111,110,116,101,110,116,115,44,32,105,116,32,99,97,110,110,111,116,32,98,101,32,109,97,100,101,32,117,110,97,110,99,104,111,114,101,100,32,97,116,32,109,97,116,99,104,105,110,103,32,116,105,109,101,44,32,104,101,110,99,101,32,116,104,101,114,101,32,105,115,32,110,111,32>>,{code,[],[<<117,110,97,110,99,104,111,114,101,100>>]},<<32,111,112,116,105,111,110,46>>]}]},{dt,[],[{code,[],[<<103,108,111,98,97,108>>]}]},{dd,[],[{p,[],[<<73,109,112,108,101,109,101,110,116,115,32,103,108,111,98,97,108,32,40,114,101,112,101,116,105,116,105,118,101,41,32,115,101,97,114,99,104,32,40,102,108,97,103,32>>,{code,[],[<<103>>]},<<32,105,110,32,80,101,114,108,41,46,32,69,97,99,104,32,109,97,116,99,104,32,105,115,32,114,101,116,117,114,110,101,100,32,97,115,32,97,32,115,101,112,97,114,97,116,101,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,115,112,101,99,105,102,105,99,32,109,97,116,99,104,32,97,110,100,32,97,110,121,32,109,97,116,99,104,105,110,103,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,40,111,114,32,97,115,32,115,112,101,99,105,102,105,101,100,32,98,121,32,111,112,116,105,111,110,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<46,32,84,104,101,32>>,{code,[],[<<67,97,112,116,117,114,101,100>>]},<<32,112,97,114,116,32,111,102,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,104,101,110,99,101,32,97,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,111,102,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<115,32,119,104,101,110,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,46>>]},{p,[],[<<84,104,101,32,105,110,116,101,114,97,99,116,105,111,110,32,111,102,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,119,105,116,104,32,97,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,116,104,97,116,32,109,97,116,99,104,101,115,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,115,117,114,112,114,105,115,101,115,32,115,111,109,101,32,117,115,101,114,115,46,32,87,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,104,97,110,100,108,101,115,32,101,109,112,116,121,32,109,97,116,99,104,101,115,32,105,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,97,115,32,80,101,114,108,58,32,97,32,122,101,114,111,45,108,101,110,103,116,104,32,109,97,116,99,104,32,97,116,32,97,110,121,32,112,111,105,110,116,32,105,115,32,97,108,115,111,32,114,101,116,114,105,101,100,32,119,105,116,104,32,111,112,116,105,111,110,115,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]},<<46,32,73,102,32,116,104,97,116,32,115,101,97,114,99,104,32,103,105,118,101,115,32,97,32,114,101,115,117,108,116,32,111,102,32,108,101,110,103,116,104,32,62,32,48,44,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,105,110,99,108,117,100,101,100,46,32,69,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,99,97,116,34,44,34,40,124,97,116,41,34,44,91,103,108,111,98,97,108,93,41,46>>]}]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,109,97,116,99,104,105,110,103,115,32,97,114,101,32,112,101,114,102,111,114,109,101,100,58>>]},{dl,[],[{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<48>>]}]},{dd,[],[{p,[],[<<84,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32>>,{code,[],[<<40,124,97,116,41>>]},<<32,102,105,114,115,116,32,109,97,116,99,104,32,97,116,32,116,104,101,32,105,110,105,116,105,97,108,32,112,111,115,105,116,105,111,110,32,111,102,32,115,116,114,105,110,103,32>>,{code,[],[<<99,97,116>>]},<<44,32,103,105,118,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,115,101,116,32>>,{code,[],[<<91,123,48,44,48,125,44,123,48,44,48,125,93>>]},<<32,40,116,104,101,32,115,101,99,111,110,100,32>>,{code,[],[<<123,48,44,48,125>>]},<<32,105,115,32,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,109,97,114,107,101,100,32,98,121,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,41,46,32,65,115,32,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,109,97,116,99,104,32,105,115,32,48,44,32,119,101,32,100,111,32,110,111,116,32,97,100,118,97,110,99,101,32,116,111,32,116,104,101,32,110,101,120,116,32,112,111,115,105,116,105,111,110,32,121,101,116,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<48>>]},<<32,119,105,116,104,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,101,97,114,99,104,32,105,115,32,114,101,116,114,105,101,100,32,119,105,116,104,32,111,112,116,105,111,110,115,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]},<<32,97,116,32,116,104,101,32,115,97,109,101,32,112,111,115,105,116,105,111,110,44,32,119,104,105,99,104,32,100,111,101,115,32,110,111,116,32,103,105,118,101,32,97,110,121,32,105,110,116,101,114,101,115,116,105,110,103,32,114,101,115,117,108,116,32,111,102,32,108,111,110,103,101,114,32,108,101,110,103,116,104,44,32,115,111,32,116,104,101,32,115,101,97,114,99,104,32,112,111,115,105,116,105,111,110,32,105,115,32,97,100,118,97,110,99,101,100,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,97,99,116,101,114,32,40>>,{code,[],[<<97>>]},<<41,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<49>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,101,97,114,99,104,32,114,101,115,117,108,116,115,32,105,110,32>>,{code,[],[<<91,123,49,44,48,125,44,123,49,44,48,125,93>>]},<<44,32,115,111,32,116,104,105,115,32,115,101,97,114,99,104,32,105,115,32,97,108,115,111,32,114,101,112,101,97,116,101,100,32,119,105,116,104,32,116,104,101,32,101,120,116,114,97,32,111,112,116,105,111,110,115,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<49>>]},<<32,119,105,116,104,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]}]},{dd,[],[{p,[],[<<65,108,116,101,114,110,97,116,105,118,101,32>>,{code,[],[<<97,98>>]},<<32,105,115,32,102,111,117,110,100,32,97,110,100,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,91,123,49,44,50,125,44,123,49,44,50,125,93,46,32,84,104,101,32,114,101,115,117,108,116,32,105,115,32,97,100,100,101,100,32,116,111,32,116,104,101,32,108,105,115,116,32,111,102,32,114,101,115,117,108,116,115,32,97,110,100,32,116,104,101,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,101,97,114,99,104,32,115,116,114,105,110,103,32,105,115,32,97,100,118,97,110,99,101,100,32,116,119,111,32,115,116,101,112,115,46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<51>>]}]},{dd,[],[{p,[],[<<84,104,101,32,115,101,97,114,99,104,32,111,110,99,101,32,97,103,97,105,110,32,109,97,116,99,104,101,115,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,44,32,103,105,118,105,110,103,32>>,{code,[],[<<91,123,51,44,48,125,44,123,51,44,48,125,93>>]},<<46>>]}]},{dt,[],[<<65,116,32,111,102,102,115,101,116,32>>,{code,[],[<<49>>]},<<32,119,105,116,104,32>>,{code,[],[<<91,97,110,99,104,111,114,101,100,44,32,110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116,93>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,103,105,118,101,115,32,110,111,32,114,101,115,117,108,116,32,111,102,32,108,101,110,103,116,104,32,62,32,48,32,97,110,100,32,119,101,32,97,114,101,32,97,116,32,116,104,101,32,108,97,115,116,32,112,111,115,105,116,105,111,110,44,32,115,111,32,116,104,101,32,103,108,111,98,97,108,32,115,101,97,114,99,104,32,105,115,32,99,111,109,112,108,101,116,101,46>>]}]}]},{p,[],[<<84,104,101,32,114,101,115,117,108,116,32,111,102,32,116,104,101,32,99,97,108,108,32,105,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,91,123,48,44,48,125,44,123,48,44,48,125,93,44,91,123,49,44,48,125,44,123,49,44,48,125,93,44,91,123,49,44,50,125,44,123,49,44,50,125,93,44,91,123,51,44,48,125,44,123,51,44,48,125,93,93,125>>]}]}]},{dt,[],[{code,[],[<<110,111,116,101,109,112,116,121>>]}]},{dd,[],[{p,[],[<<65,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,32,97,32,118,97,108,105,100,32,109,97,116,99,104,32,105,102,32,116,104,105,115,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,46,32,73,102,32,97,108,116,101,114,110,97,116,105,118,101,115,32,105,110,32,116,104,101,32,112,97,116,116,101,114,110,32,101,120,105,115,116,44,32,116,104,101,121,32,97,114,101,32,116,114,105,101,100,46,32,73,102,32,97,108,108,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,115,32,109,97,116,99,104,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,44,32,116,104,101,32,101,110,116,105,114,101,32,109,97,116,99,104,32,102,97,105,108,115,46>>]},{p,[],[{em,[],[<<69,120,97,109,112,108,101,58>>]}]},{p,[],[<<73,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,97,116,116,101,114,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,97,32,115,116,114,105,110,103,32,110,111,116,32,98,101,103,105,110,110,105,110,103,32,119,105,116,104,32,34,97,34,32,111,114,32,34,98,34,44,32,105,116,32,119,111,117,108,100,32,110,111,114,109,97,108,108,121,32,109,97,116,99,104,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,58>>]},{pre,[],[{code,[],[<<97,63,98,63>>]}]},{p,[],[<<87,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<110,111,116,101,109,112,116,121>>]},<<44,32,116,104,105,115,32,109,97,116,99,104,32,105,115,32,105,110,118,97,108,105,100,44,32,115,111,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,115,101,97,114,99,104,101,115,32,102,117,114,116,104,101,114,32,105,110,116,111,32,116,104,101,32,115,116,114,105,110,103,32,102,111,114,32,111,99,99,117,114,114,101,110,99,101,115,32,111,102,32,34,97,34,32,111,114,32,34,98,34,46>>]}]},{dt,[],[{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]}]},{dd,[],[{p,[],[<<76,105,107,101,32>>,{code,[],[<<110,111,116,101,109,112,116,121>>]},<<44,32,101,120,99,101,112,116,32,116,104,97,116,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,109,97,116,99,104,32,116,104,97,116,32,105,115,32,110,111,116,32,97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,105,115,32,112,101,114,109,105,116,116,101,100,46,32,73,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,97,110,99,104,111,114,101,100,44,32,115,117,99,104,32,97,32,109,97,116,99,104,32,99,97,110,32,111,99,99,117,114,32,111,110,108,121,32,105,102,32,116,104,101,32,112,97,116,116,101,114,110,32,99,111,110,116,97,105,110,115,32,92,75,46>>]},{p,[],[<<80,101,114,108,32,104,97,115,32,110,111,32,100,105,114,101,99,116,32,101,113,117,105,118,97,108,101,110,116,32,111,102,32>>,{code,[],[<<110,111,116,101,109,112,116,121>>]},<<32,111,114,32>>,{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]},<<44,32,98,117,116,32,105,116,32,100,111,101,115,32,109,97,107,101,32,97,32,115,112,101,99,105,97,108,32,99,97,115,101,32,111,102,32,97,32,112,97,116,116,101,114,110,32,109,97,116,99,104,32,111,102,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,32,119,105,116,104,105,110,32,105,116,115,32,115,112,108,105,116,40,41,32,102,117,110,99,116,105,111,110,44,32,97,110,100,32,119,104,101,110,32,117,115,105,110,103,32,109,111,100,105,102,105,101,114,32>>,{code,[],[<<47,103>>]},<<46,32,84,104,101,32,80,101,114,108,32,98,101,104,97,118,105,111,114,32,99,97,110,32,98,101,32,101,109,117,108,97,116,101,100,32,97,102,116,101,114,32,109,97,116,99,104,105,110,103,32,97,32,110,117,108,108,32,115,116,114,105,110,103,32,98,121,32,102,105,114,115,116,32,116,114,121,105,110,103,32,116,104,101,32,109,97,116,99,104,32,97,103,97,105,110,32,97,116,32,116,104,101,32,115,97,109,101,32,111,102,102,115,101,116,32,119,105,116,104,32>>,{code,[],[<<110,111,116,101,109,112,116,121,95,97,116,115,116,97,114,116>>]},<<32,97,110,100,32>>,{code,[],[<<97,110,99,104,111,114,101,100>>]},<<44,32,97,110,100,32,116,104,101,110,44,32,105,102,32,116,104,97,116,32,102,97,105,108,115,44,32,98,121,32,97,100,118,97,110,99,105,110,103,32,116,104,101,32,115,116,97,114,116,105,110,103,32,111,102,102,115,101,116,32,40,115,101,101,32,98,101,108,111,119,41,32,97,110,100,32,116,114,121,105,110,103,32,97,110,32,111,114,100,105,110,97,114,121,32,109,97,116,99,104,32,97,103,97,105,110,46>>]}]},{dt,[],[{code,[],[<<110,111,116,98,111,108>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,116,104,101,32,102,105,114,115,116,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,116,104,101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,97,32,108,105,110,101,44,32,115,111,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,105,115,32,110,111,116,32,116,111,32,109,97,116,99,104,32,98,101,102,111,114,101,32,105,116,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,119,105,116,104,111,117,116,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,40,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,41,32,99,97,117,115,101,115,32,99,105,114,99,117,109,102,108,101,120,32,110,101,118,101,114,32,116,111,32,109,97,116,99,104,46,32,84,104,105,115,32,111,112,116,105,111,110,32,111,110,108,121,32,97,102,102,101,99,116,115,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,99,105,114,99,117,109,102,108,101,120,32,109,101,116,97,99,104,97,114,97,99,116,101,114,46,32,73,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,92,65,46>>]}]},{dt,[],[{code,[],[<<110,111,116,101,111,108>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,116,104,101,32,101,110,100,32,111,102,32,97,32,108,105,110,101,44,32,115,111,32,116,104,101,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,32,105,115,32,110,111,116,32,116,111,32,109,97,116,99,104,32,105,116,32,110,111,114,32,40,101,120,99,101,112,116,32,105,110,32,109,117,108,116,105,108,105,110,101,32,109,111,100,101,41,32,97,32,110,101,119,108,105,110,101,32,105,109,109,101,100,105,97,116,101,108,121,32,98,101,102,111,114,101,32,105,116,46,32,83,101,116,116,105,110,103,32,116,104,105,115,32,119,105,116,104,111,117,116,32>>,{code,[],[<<109,117,108,116,105,108,105,110,101>>]},<<32,40,97,116,32,99,111,109,112,105,108,101,32,116,105,109,101,41,32,99,97,117,115,101,115,32,100,111,108,108,97,114,32,110,101,118,101,114,32,116,111,32,109,97,116,99,104,46,32,84,104,105,115,32,111,112,116,105,111,110,32,97,102,102,101,99,116,115,32,111,110,108,121,32,116,104,101,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,100,111,108,108,97,114,32,109,101,116,97,99,104,97,114,97,99,116,101,114,46,32,73,116,32,100,111,101,115,32,110,111,116,32,97,102,102,101,99,116,32,92,90,32,111,114,32,92,122,46>>]}]},{dt,[],[{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]}]},{dd,[],[{p,[],[<<71,105,118,101,115,32,98,101,116,116,101,114,32,99,111,110,116,114,111,108,32,111,102,32,116,104,101,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103,32,105,110,32>>,{code,[],[<<114,117,110,47,51>>]},<<46,32,87,104,101,110,32,115,112,101,99,105,102,105,101,100,44,32,99,111,109,112,105,108,97,116,105,111,110,32,101,114,114,111,114,115,32,40,105,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,110,111,116,32,97,108,114,101,97,100,121,32,99,111,109,112,105,108,101,100,41,32,97,110,100,32,114,117,110,116,105,109,101,32,101,114,114,111,114,115,32,97,114,101,32,101,120,112,108,105,99,105,116,108,121,32,114,101,116,117,114,110,101,100,32,97,115,32,97,110,32,101,114,114,111,114,32,116,117,112,108,101,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,112,111,115,115,105,98,108,101,32,114,117,110,116,105,109,101,32,101,114,114,111,114,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]}]},{dd,[],[{p,[],[<<84,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,32,115,101,116,115,32,97,32,108,105,109,105,116,32,111,110,32,104,111,119,32,109,97,110,121,32,116,105,109,101,115,32,116,104,101,32,105,110,116,101,114,110,97,108,32,109,97,116,99,104,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,99,97,108,108,101,100,46,32,68,101,102,97,117,108,116,115,32,116,111,32,49,48,44,48,48,48,44,48,48,48,32,105,110,32,116,104,101,32,108,105,98,114,97,114,121,32,99,111,109,112,105,108,101,100,32,102,111,114,32,69,114,108,97,110,103,46,32,73,102,32>>,{code,[],[<<123,101,114,114,111,114,44,32,109,97,116,99,104,95,108,105,109,105,116,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,44,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,111,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,104,97,115,32,114,101,97,99,104,101,100,32,116,104,105,115,32,108,105,109,105,116,46,32,84,104,105,115,32,105,115,32,110,111,114,109,97,108,108,121,32,116,111,32,98,101,32,114,101,103,97,114,100,101,100,32,97,115,32,97,32>>,{code,[],[<<110,111,109,97,116,99,104>>]},<<44,32,119,104,105,99,104,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,118,97,108,117,101,32,119,104,101,110,32,116,104,105,115,32,111,99,99,117,114,115,44,32,98,117,116,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<114,101,112,111,114,116,95,101,114,114,111,114,115>>]},<<44,32,121,111,117,32,97,114,101,32,105,110,102,111,114,109,101,100,32,119,104,101,110,32,116,104,101,32,109,97,116,99,104,32,102,97,105,108,115,32,98,101,99,97,117,115,101,32,111,102,32,116,111,111,32,109,97,110,121,32,105,110,116,101,114,110,97,108,32,99,97,108,108,115,46>>]}]},{dt,[],[{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]}]},{dd,[],[{p,[],[<<84,104,105,115,32,101,114,114,111,114,32,105,115,32,118,101,114,121,32,115,105,109,105,108,97,114,32,116,111,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<44,32,98,117,116,32,111,99,99,117,114,115,32,119,104,101,110,32,116,104,101,32,105,110,116,101,114,110,97,108,32,109,97,116,99,104,32,102,117,110,99,116,105,111,110,32,111,102,32,80,67,82,69,32,105,115,32,34,114,101,99,117,114,115,105,118,101,108,121,34,32,99,97,108,108,101,100,32,109,111,114,101,32,116,105,109,101,115,32,116,104,97,110,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]},<<32,108,105,109,105,116,44,32,119,104,105,99,104,32,100,101,102,97,117,108,116,115,32,116,111,32,49,48,44,48,48,48,44,48,48,48,32,97,115,32,119,101,108,108,46,32,78,111,116,105,99,101,32,116,104,97,116,32,97,115,32,108,111,110,103,32,97,115,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,97,110,100,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,100,101,102,97,117,108,116>>]},<<32,118,97,108,117,101,115,32,97,114,101,32,107,101,112,116,32,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,115,44,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110>>]},<<32,101,114,114,111,114,32,99,97,110,110,111,116,32,111,99,99,117,114,44,32,97,115,32,116,104,101,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,101,114,114,111,114,32,111,99,99,117,114,115,32,98,101,102,111,114,101,32,116,104,97,116,32,40,101,97,99,104,32,114,101,99,117,114,115,105,118,101,32,99,97,108,108,32,105,115,32,97,108,115,111,32,97,32,99,97,108,108,44,32,98,117,116,32,110,111,116,32,99,111,110,118,101,114,115,101,108,121,41,46,32,66,111,116,104,32,108,105,109,105,116,115,32,99,97,110,32,104,111,119,101,118,101,114,32,98,101,32,99,104,97,110,103,101,100,44,32,101,105,116,104,101,114,32,98,121,32,115,101,116,116,105,110,103,32,108,105,109,105,116,115,32,100,105,114,101,99,116,108,121,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,115,116,114,105,110,103,32,40,115,101,101,32,115,101,99,116,105,111,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,101,103,101,120,112,95,115,121,110,116,97,120,95,100,101,116,97,105,108,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<80,67,82,69,32,82,101,103,117,108,97,114,32,69,101,120,112,114,101,115,115,105,111,110,32,68,101,116,97,105,108,115>>]},<<41,32,111,114,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32,111,112,116,105,111,110,115,32,116,111,32>>,{code,[],[<<114,117,110,47,51>>]},<<46>>]}]}]},{p,[],[<<73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32,116,111,32,117,110,100,101,114,115,116,97,110,100,32,116,104,97,116,32,119,104,97,116,32,105,115,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,34,114,101,99,117,114,115,105,111,110,34,32,119,104,101,110,32,108,105,109,105,116,105,110,103,32,109,97,116,99,104,101,115,32,105,115,32,110,111,116,32,114,101,99,117,114,115,105,111,110,32,111,110,32,116,104,101,32,67,32,115,116,97,99,107,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,109,97,99,104,105,110,101,32,111,114,32,111,110,32,116,104,101,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,32,115,116,97,99,107,46,32,84,104,101,32,80,67,82,69,32,118,101,114,115,105,111,110,32,99,111,109,112,105,108,101,100,32,105,110,116,111,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,117,115,101,115,32,109,97,99,104,105,110,101,32,34,104,101,97,112,34,32,109,101,109,111,114,121,32,116,111,32,115,116,111,114,101,32,118,97,108,117,101,115,32,116,104,97,116,32,109,117,115,116,32,98,101,32,107,101,112,116,32,111,118,101,114,32,114,101,99,117,114,115,105,111,110,32,105,110,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,115,46>>]}]},{dt,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<76,105,109,105,116,115,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,111,102,32,97,32,109,97,116,99,104,32,105,110,32,97,110,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,115,112,101,99,105,102,105,99,32,119,97,121,46,32,73,116,32,105,115,32,100,101,115,99,114,105,98,101,100,32,97,115,32,102,111,108,108,111,119,115,32,98,121,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,58>>]},{pre,[],[{code,[],[<<84,104,101,32,109,97,116,99,104,95,108,105,109,105,116,32,102,105,101,108,100,32,112,114,111,118,105,100,101,115,32,97,32,109,101,97,110,115,32,111,102,32,112,114,101,118,101,110,116,105,110,103,32,80,67,82,69,32,102,114,111,109,32,117,115,105,110,103,10,117,112,32,97,32,118,97,115,116,32,97,109,111,117,110,116,32,111,102,32,114,101,115,111,117,114,99,101,115,32,119,104,101,110,32,114,117,110,110,105,110,103,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,103,111,105,110,103,10,116,111,32,109,97,116,99,104,44,32,98,117,116,32,119,104,105,99,104,32,104,97,118,101,32,97,32,118,101,114,121,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,112,111,115,115,105,98,105,108,105,116,105,101,115,32,105,110,32,116,104,101,105,114,10,115,101,97,114,99,104,32,116,114,101,101,115,46,32,84,104,101,32,99,108,97,115,115,105,99,32,101,120,97,109,112,108,101,32,105,115,32,97,32,112,97,116,116,101,114,110,32,116,104,97,116,32,117,115,101,115,32,110,101,115,116,101,100,10,117,110,108,105,109,105,116,101,100,32,114,101,112,101,97,116,115,46,10,10,73,110,116,101,114,110,97,108,108,121,44,32,112,99,114,101,95,101,120,101,99,40,41,32,117,115,101,115,32,97,32,102,117,110,99,116,105,111,110,32,99,97,108,108,101,100,32,109,97,116,99,104,40,41,44,32,119,104,105,99,104,32,105,116,32,99,97,108,108,115,10,114,101,112,101,97,116,101,100,108,121,32,40,115,111,109,101,116,105,109,101,115,32,114,101,99,117,114,115,105,118,101,108,121,41,46,32,84,104,101,32,108,105,109,105,116,32,115,101,116,32,98,121,32,109,97,116,99,104,95,108,105,109,105,116,32,105,115,10,105,109,112,111,115,101,100,32,111,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,100,117,114,105,110,103,32,97,32,109,97,116,99,104,44,10,119,104,105,99,104,32,104,97,115,32,116,104,101,32,101,102,102,101,99,116,32,111,102,32,108,105,109,105,116,105,110,103,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,98,97,99,107,116,114,97,99,107,105,110,103,32,116,104,97,116,32,99,97,110,10,116,97,107,101,32,112,108,97,99,101,46,32,70,111,114,32,112,97,116,116,101,114,110,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,97,110,99,104,111,114,101,100,44,32,116,104,101,32,99,111,117,110,116,32,114,101,115,116,97,114,116,115,10,102,114,111,109,32,122,101,114,111,32,102,111,114,32,101,97,99,104,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46>>]}]},{p,[],[<<84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,114,117,110,97,119,97,121,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,115,32,99,97,110,32,102,97,105,108,32,102,97,115,116,101,114,32,105,102,32,116,104,101,32,108,105,109,105,116,32,105,115,32,108,111,119,101,114,101,100,32,117,115,105,110,103,32,116,104,105,115,32,111,112,116,105,111,110,46,32,84,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,49,48,44,48,48,48,44,48,48,48,32,105,115,32,99,111,109,112,105,108,101,100,32,105,110,116,111,32,116,104,101,32,69,114,108,97,110,103,32,86,77,46>>]},{'div',[{class,<<110,111,116,101>>}],[{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,100,111,101,115,32,105,110,32,110,111,32,119,97,121,32,97,102,102,101,99,116,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,86,77,32,105,110,32,116,101,114,109,115,32,111,102,32,34,108,111,110,103,32,114,117,110,110,105,110,103,32,66,73,70,115,34,46,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,97,108,119,97,121,115,32,103,105,118,101,115,32,99,111,110,116,114,111,108,32,98,97,99,107,32,116,111,32,116,104,101,32,115,99,104,101,100,117,108,101,114,32,111,102,32,69,114,108,97,110,103,32,112,114,111,99,101,115,115,101,115,32,97,116,32,105,110,116,101,114,118,97,108,115,32,116,104,97,116,32,101,110,115,117,114,101,115,32,116,104,101,32,114,101,97,108,45,116,105,109,101,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,116,104,101,32,69,114,108,97,110,103,32,115,121,115,116,101,109,46>>]}]}]},{dt,[],[{code,[],[<<123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<76,105,109,105,116,115,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,97,110,100,32,109,101,109,111,114,121,32,99,111,110,115,117,109,112,116,105,111,110,32,111,102,32,97,32,109,97,116,99,104,32,105,110,32,97,110,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,45,115,112,101,99,105,102,105,99,32,119,97,121,44,32,118,101,114,121,32,115,105,109,105,108,97,114,32,116,111,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<46,32,73,116,32,105,115,32,100,101,115,99,114,105,98,101,100,32,97,115,32,102,111,108,108,111,119,115,32,98,121,32,116,104,101,32,80,67,82,69,32,100,111,99,117,109,101,110,116,97,116,105,111,110,58>>]},{pre,[],[{code,[],[<<84,104,101,32,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,32,102,105,101,108,100,32,105,115,32,115,105,109,105,108,97,114,32,116,111,32,109,97,116,99,104,95,108,105,109,105,116,44,32,98,117,116,32,105,110,115,116,101,97,100,10,111,102,32,108,105,109,105,116,105,110,103,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,116,104,97,116,32,109,97,116,99,104,40,41,32,105,115,32,99,97,108,108,101,100,44,32,105,116,10,108,105,109,105,116,115,32,116,104,101,32,100,101,112,116,104,32,111,102,32,114,101,99,117,114,115,105,111,110,46,32,84,104,101,32,114,101,99,117,114,115,105,111,110,32,100,101,112,116,104,32,105,115,32,97,32,115,109,97,108,108,101,114,32,110,117,109,98,101,114,10,116,104,97,110,32,116,104,101,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,99,97,108,108,115,44,32,98,101,99,97,117,115,101,32,110,111,116,32,97,108,108,32,99,97,108,108,115,32,116,111,32,109,97,116,99,104,40,41,32,97,114,101,10,114,101,99,117,114,115,105,118,101,46,32,84,104,105,115,32,108,105,109,105,116,32,105,115,32,111,102,32,117,115,101,32,111,110,108,121,32,105,102,32,105,116,32,105,115,32,115,101,116,32,115,109,97,108,108,101,114,32,116,104,97,110,10,109,97,116,99,104,95,108,105,109,105,116,46,10,10,76,105,109,105,116,105,110,103,32,116,104,101,32,114,101,99,117,114,115,105,111,110,32,100,101,112,116,104,32,108,105,109,105,116,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,109,97,99,104,105,110,101,32,115,116,97,99,107,32,116,104,97,116,10,99,97,110,32,98,101,32,117,115,101,100,44,32,111,114,44,32,119,104,101,110,32,80,67,82,69,32,104,97,115,32,98,101,101,110,32,99,111,109,112,105,108,101,100,32,116,111,32,117,115,101,32,109,101,109,111,114,121,32,111,110,32,116,104,101,32,104,101,97,112,10,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32,115,116,97,99,107,44,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,104,101,97,112,32,109,101,109,111,114,121,32,116,104,97,116,32,99,97,110,32,98,101,32,117,115,101,100,46>>]}]},{p,[],[<<84,104,101,32,69,114,108,97,110,103,32,86,77,32,117,115,101,115,32,97,32,80,67,82,69,32,108,105,98,114,97,114,121,32,119,104,101,114,101,32,104,101,97,112,32,109,101,109,111,114,121,32,105,115,32,117,115,101,100,32,119,104,101,110,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,32,114,101,99,117,114,115,105,111,110,32,111,99,99,117,114,115,46,32,84,104,105,115,32,116,104,101,114,101,102,111,114,101,32,108,105,109,105,116,115,32,116,104,101,32,117,115,101,32,111,102,32,109,97,99,104,105,110,101,32,104,101,97,112,44,32,110,111,116,32,67,32,115,116,97,99,107,46>>]},{p,[],[<<83,112,101,99,105,102,121,105,110,103,32,97,32,108,111,119,101,114,32,118,97,108,117,101,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,109,97,116,99,104,101,115,32,119,105,116,104,32,100,101,101,112,32,114,101,99,117,114,115,105,111,110,32,102,97,105,108,105,110,103,44,32,119,104,101,110,32,116,104,101,121,32,115,104,111,117,108,100,32,104,97,118,101,32,109,97,116,99,104,101,100,58>>]},{pre,[],[{code,[{type,<<110,111,110,101>>}],[<<49,62,32,114,101,58,114,117,110,40,34,97,97,97,97,97,97,97,97,97,97,97,97,97,122,34,44,34,40,97,43,41,42,122,34,41,46,10,123,109,97,116,99,104,44,91,123,48,44,49,52,125,44,123,48,44,49,51,125,93,125,10,50,62,32,114,101,58,114,117,110,40,34,97,97,97,97,97,97,97,97,97,97,97,97,97,122,34,44,34,40,97,43,41,42,122,34,44,91,123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,53,125,93,41,46,10,110,111,109,97,116,99,104,10,51,62,32,114,101,58,114,117,110,40,34,97,97,97,97,97,97,97,97,97,97,97,97,97,122,34,44,34,40,97,43,41,42,122,34,44,91,123,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,44,53,125,44,114,101,112,111,114,116,95,101,114,114,111,114,115,93,41,46,10,123,101,114,114,111,114,44,109,97,116,99,104,95,108,105,109,105,116,95,114,101,99,117,114,115,105,111,110,125>>]}]},{p,[],[<<84,104,105,115,32,111,112,116,105,111,110,32,97,110,100,32,111,112,116,105,111,110,32>>,{code,[],[<<109,97,116,99,104,95,108,105,109,105,116>>]},<<32,97,114,101,32,111,110,108,121,32,116,111,32,98,101,32,117,115,101,100,32,105,110,32,114,97,114,101,32,99,97,115,101,115,46,32,85,110,100,101,114,115,116,97,110,100,105,110,103,32,111,102,32,116,104,101,32,80,67,82,69,32,108,105,98,114,97,114,121,32,105,110,116,101,114,110,97,108,115,32,105,115,32,114,101,99,111,109,109,101,110,100,101,100,32,98,101,102,111,114,101,32,116,97,109,112,101,114,105,110,103,32,119,105,116,104,32,116,104,101,115,101,32,108,105,109,105,116,115,46>>]}]},{dt,[],[{code,[],[<<123,111,102,102,115,101,116,44,32,105,110,116,101,103,101,114,40,41,32,62,61,32,48,125>>]}]},{dd,[],[{p,[],[<<83,116,97,114,116,32,109,97,116,99,104,105,110,103,32,97,116,32,116,104,101,32,111,102,102,115,101,116,32,40,112,111,115,105,116,105,111,110,41,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,84,104,101,32,111,102,102,115,101,116,32,105,115,32,122,101,114,111,45,98,97,115,101,100,44,32,115,111,32,116,104,97,116,32,116,104,101,32,100,101,102,97,117,108,116,32,105,115,32>>,{code,[],[<<123,111,102,102,115,101,116,44,48,125>>]},<<32,40,97,108,108,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,41,46>>]}]},{dt,[],[{code,[],[<<123,110,101,119,108,105,110,101,44,32,78,76,83,112,101,99,125>>]}]},{dd,[],[{p,[],[<<79,118,101,114,114,105,100,101,115,32,116,104,101,32,100,101,102,97,117,108,116,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,97,32,110,101,119,108,105,110,101,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,119,104,105,99,104,32,105,115,32,76,70,32,40,65,83,67,73,73,32,49,48,41,32,105,110,32,69,114,108,97,110,103,46>>]},{dl,[],[{dt,[],[{code,[],[<<99,114>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,67,82,32,40,65,83,67,73,73,32,49,51,41,46>>]}]},{dt,[],[{code,[],[<<108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,32,76,70,32,40,65,83,67,73,73,32,49,48,41,44,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<99,114,108,102>>]}]},{dd,[],[{p,[],[<<78,101,119,108,105,110,101,32,105,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,116,104,101,32,116,119,111,45,99,104,97,114,97,99,116,101,114,32,67,82,76,70,32,40,65,83,67,73,73,32,49,51,32,102,111,108,108,111,119,101,100,32,98,121,32,65,83,67,73,73,32,49,48,41,32,115,101,113,117,101,110,99,101,46>>]}]},{dt,[],[{code,[],[<<97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,116,104,114,101,101,32,112,114,101,99,101,100,105,110,103,32,115,101,113,117,101,110,99,101,115,32,105,115,32,98,101,32,114,101,99,111,103,110,105,122,101,100,46>>]}]},{dt,[],[{code,[],[<<97,110,121>>]}]},{dd,[],[{p,[],[<<65,110,121,32,111,102,32,116,104,101,32,110,101,119,108,105,110,101,32,115,101,113,117,101,110,99,101,115,32,97,98,111,118,101,44,32,97,110,100,32,116,104,101,32,85,110,105,99,111,100,101,32,115,101,113,117,101,110,99,101,115,32,86,84,32,40,118,101,114,116,105,99,97,108,32,116,97,98,44,32,85,43,48,48,48,66,41,44,32,70,70,32,40,102,111,114,109,102,101,101,100,44,32,85,43,48,48,48,67,41,44,32,78,69,76,32,40,110,101,120,116,32,108,105,110,101,44,32,85,43,48,48,56,53,41,44,32,76,83,32,40,108,105,110,101,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,56,41,44,32,97,110,100,32,80,83,32,40,112,97,114,97,103,114,97,112,104,32,115,101,112,97,114,97,116,111,114,44,32,85,43,50,48,50,57,41,46>>]}]}]}]},{dt,[],[{code,[],[<<98,115,114,95,97,110,121,99,114,108,102>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,111,110,108,121,32,116,104,101,32,67,82,32,76,70,44,32,111,114,32,67,82,76,70,32,115,101,113,117,101,110,99,101,115,44,32,110,111,116,32,116,104,101,32,85,110,105,99,111,100,101,45,115,112,101,99,105,102,105,99,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,46,32,40,79,118,101,114,114,105,100,101,115,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,46,41>>]}]},{dt,[],[{code,[],[<<98,115,114,95,117,110,105,99,111,100,101>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,115,112,101,99,105,102,105,99,97,108,108,121,32,116,104,97,116,32,92,82,32,105,115,32,116,111,32,109,97,116,99,104,32,97,108,108,32,116,104,101,32,85,110,105,99,111,100,101,32,110,101,119,108,105,110,101,32,99,104,97,114,97,99,116,101,114,115,32,40,105,110,99,108,117,100,105,110,103,32,67,82,76,70,44,32,97,110,100,32,115,111,32,111,110,44,32,116,104,101,32,100,101,102,97,117,108,116,41,46,32,40,79,118,101,114,114,105,100,101,115,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,46,41>>]}]},{dt,[],[{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,125>>]},<<47>>,{code,[],[<<123,99,97,112,116,117,114,101,44,32,86,97,108,117,101,83,112,101,99,44,32,84,121,112,101,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,119,104,105,99,104,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,110,100,32,105,110,32,119,104,97,116,32,102,111,114,109,97,116,46,32,66,121,32,100,101,102,97,117,108,116,44,32>>,{code,[],[<<114,117,110,47,51>>]},<<32,99,97,112,116,117,114,101,115,32,97,108,108,32,111,102,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,115,116,114,105,110,103,32,97,110,100,32,97,108,108,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,40,97,108,108,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,32,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,99,97,112,116,117,114,101,100,41,46,32,84,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32,40,122,101,114,111,45,98,97,115,101,100,41,32,105,110,100,101,120,101,115,32,111,102,32,116,104,101,32,99,97,112,116,117,114,101,100,32,112,97,114,116,115,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,115,112,101,99,105,102,105,101,100,32,97,115,32>>,{code,[],[<<123,79,102,102,115,101,116,44,76,101,110,103,116,104,125>>]},<<32,112,97,105,114,115,32,40,116,104,101,32>>,{code,[],[<<105,110,100,101,120>>]},<<32>>,{code,[],[<<84,121,112,101>>]},<<32,111,102,32,99,97,112,116,117,114,105,110,103,41,46>>]},{p,[],[<<65,115,32,97,110,32,101,120,97,109,112,108,101,32,111,102,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,44,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,32,114,101,116,117,114,110,115,44,32,97,115,32,102,105,114,115,116,32,97,110,100,32,111,110,108,121,32,99,97,112,116,117,114,101,100,32,115,116,114,105,110,103,44,32,116,104,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,40,34,97,98,99,100,34,32,105,110,32,116,104,101,32,109,105,100,100,108,101,41,32,97,115,32,97,110,32,105,110,100,101,120,32,112,97,105,114,32>>,{code,[],[<<123,51,44,52,125>>]},<<44,32,119,104,101,114,101,32,99,104,97,114,97,99,116,101,114,32,112,111,115,105,116,105,111,110,115,32,97,114,101,32,122,101,114,111,45,98,97,115,101,100,44,32,106,117,115,116,32,97,115,32,105,110,32,111,102,102,115,101,116,115,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,97,98,99,100,34,44,91,93,41,46>>]}]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32,116,104,105,115,32,99,97,108,108,32,105,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,51,44,52,125,93,125>>]}]},{p,[],[<<65,110,111,116,104,101,114,32,40,97,110,100,32,113,117,105,116,101,32,99,111,109,109,111,110,41,32,99,97,115,101,32,105,115,32,119,104,101,114,101,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,115,32,97,108,108,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,97,98,99,100,46,42,34,44,91,93,41,46>>]}]},{p,[],[<<72,101,114,101,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,108,121,32,112,111,105,110,116,115,32,111,117,116,32,97,108,108,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,98,101,103,105,110,110,105,110,103,32,97,116,32,105,110,100,101,120,32,48,44,32,97,110,100,32,105,116,32,105,115,32,49,48,32,99,104,97,114,97,99,116,101,114,115,32,108,111,110,103,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,48,44,49,48,125,93,125>>]}]},{p,[],[<<73,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,115,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,108,105,107,101,32,105,110,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,97,98,99,100,41,46,42,34,44,91,93,41,46>>]}]},{p,[],[<<97,108,108,32,111,102,32,116,104,101,32,109,97,116,99,104,101,100,32,115,117,98,106,101,99,116,32,105,115,32,99,97,112,116,117,114,101,100,44,32,97,115,32,119,101,108,108,32,97,115,32,116,104,101,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,48,44,49,48,125,44,123,51,44,52,125,93,125>>]}]},{p,[],[<<84,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,112,97,116,116,101,114,110,32,97,108,119,97,121,115,32,103,105,118,101,115,32,116,104,101,32,102,105,114,115,116,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,110,32,116,104,101,32,108,105,115,116,32,97,110,100,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,97,100,100,101,100,32,105,110,32,116,104,101,32,111,114,100,101,114,32,116,104,101,121,32,111,99,99,117,114,114,101,100,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<84,104,101,32,99,97,112,116,117,114,101,32,116,117,112,108,101,32,105,115,32,98,117,105,108,116,32,117,112,32,97,115,32,102,111,108,108,111,119,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<86,97,108,117,101,83,112,101,99>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,119,104,105,99,104,32,99,97,112,116,117,114,101,100,32,40,115,117,98,41,112,97,116,116,101,114,110,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32>>,{code,[],[<<86,97,108,117,101,83,112,101,99>>]},<<32,99,97,110,32,101,105,116,104,101,114,32,98,101,32,97,110,32,97,116,111,109,32,100,101,115,99,114,105,98,105,110,103,32,97,32,112,114,101,100,101,102,105,110,101,100,32,115,101,116,32,111,102,32,114,101,116,117,114,110,32,118,97,108,117,101,115,44,32,111,114,32,97,32,108,105,115,116,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,105,110,100,101,120,101,115,32,111,114,32,116,104,101,32,110,97,109,101,115,32,111,102,32,115,112,101,99,105,102,105,99,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,114,101,116,117,114,110,46>>]},{p,[],[<<84,104,101,32,102,111,108,108,111,119,105,110,103,32,97,114,101,32,116,104,101,32,112,114,101,100,101,102,105,110,101,100,32,115,101,116,115,32,111,102,32,115,117,98,112,97,116,116,101,114,110,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<97,108,108>>]}]},{dd,[],[{p,[],[<<65,108,108,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,115,116,114,105,110,103,46,32,84,104,105,115,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<97,108,108,95,110,97,109,101,115>>]}]},{dd,[],[{p,[],[<<65,108,108,32>>,{em,[],[<<110,97,109,101,100>>]},<<32,115,117,98,112,97,116,116,101,114,110,115,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,97,115,32,105,102,32,97,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,111,102,32,97,108,108,32,116,104,101,32,110,97,109,101,115,32>>,{em,[],[<<105,110,32,97,108,112,104,97,98,101,116,105,99,97,108,32,111,114,100,101,114>>]},<<32,119,97,115,32,115,112,101,99,105,102,105,101,100,46,32,84,104,101,32,108,105,115,116,32,111,102,32,97,108,108,32,110,97,109,101,115,32,99,97,110,32,97,108,115,111,32,98,101,32,114,101,116,114,105,101,118,101,100,32,119,105,116,104,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,105,110,115,112,101,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,110,115,112,101,99,116,47,50>>]}]},<<46>>]}]},{dt,[],[{code,[],[<<102,105,114,115,116>>]}]},{dd,[],[{p,[],[<<79,110,108,121,32,116,104,101,32,102,105,114,115,116,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,44,32,119,104,105,99,104,32,105,115,32,97,108,119,97,121,115,32,116,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,46,32,65,108,108,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,100,105,115,99,97,114,100,101,100,46>>]}]},{dt,[],[{code,[],[<<97,108,108,95,98,117,116,95,102,105,114,115,116>>]}]},{dd,[],[{p,[],[<<65,108,108,32,98,117,116,32,116,104,101,32,102,105,114,115,116,32,109,97,116,99,104,105,110,103,32,115,117,98,112,97,116,116,101,114,110,44,32,116,104,97,116,32,105,115,44,32,97,108,108,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,44,32,98,117,116,32,110,111,116,32,116,104,101,32,99,111,109,112,108,101,116,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,46,32,84,104,105,115,32,105,115,32,117,115,101,102,117,108,32,105,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,115,32,97,32,119,104,111,108,101,32,109,97,116,99,104,101,115,32,97,32,108,97,114,103,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,44,32,98,117,116,32,116,104,101,32,112,97,114,116,32,121,111,117,32,97,114,101,32,105,110,116,101,114,101,115,116,101,100,32,105,110,32,105,115,32,105,110,32,97,110,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,46,32,73,102,32,116,104,101,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32>>,{code,[],[<<108,105,115,116>>]},<<32,111,114,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<44,32,110,111,116,32,114,101,116,117,114,110,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,121,111,117,32,97,114,101,32,110,111,116,32,105,110,116,101,114,101,115,116,101,100,32,105,110,32,105,115,32,97,32,103,111,111,100,32,119,97,121,32,116,111,32,111,112,116,105,109,105,122,101,46>>]}]},{dt,[],[{code,[],[<<110,111,110,101>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,110,111,32,109,97,116,99,104,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,103,105,118,101,115,32,116,104,101,32,115,105,110,103,108,101,32,97,116,111,109,32>>,{code,[],[<<109,97,116,99,104>>]},<<32,97,115,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,119,104,101,110,32,109,97,116,99,104,105,110,103,32,115,117,99,99,101,115,115,102,117,108,108,121,32,105,110,115,116,101,97,100,32,111,102,32,116,104,101,32>>,{code,[],[<<123,109,97,116,99,104,44,32,108,105,115,116,40,41,125>>]},<<32,114,101,116,117,114,110,46,32,83,112,101,99,105,102,121,105,110,103,32,97,110,32,101,109,112,116,121,32,108,105,115,116,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,98,101,104,97,118,105,111,114,46>>]}]}]},{p,[],[<<84,104,101,32,118,97,108,117,101,32,108,105,115,116,32,105,115,32,97,32,108,105,115,116,32,111,102,32,105,110,100,101,120,101,115,32,102,111,114,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,114,101,116,117,114,110,44,32,119,104,101,114,101,32,105,110,100,101,120,32,48,32,105,115,32,102,111,114,32,97,108,108,32,111,102,32,116,104,101,32,112,97,116,116,101,114,110,44,32,97,110,100,32,49,32,105,115,32,102,111,114,32,116,104,101,32,102,105,114,115,116,32,101,120,112,108,105,99,105,116,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,97,110,100,32,115,111,32,111,110,46,32,87,104,101,110,32,117,115,105,110,103,32,110,97,109,101,100,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,40,115,101,101,32,98,101,108,111,119,41,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,111,110,101,32,99,97,110,32,117,115,101,32>>,{code,[],[<<97,116,111,109,40,41>>]},<<115,32,111,114,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<115,32,116,111,32,115,112,101,99,105,102,121,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,115,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,58>>]},{pre,[],[{code,[],[<<34,46,42,40,97,98,99,100,41,46,42,34>>]}]},{p,[],[<<109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,115,116,114,105,110,103,32,34,65,66,67,97,98,99,100,65,66,67,34,44,32,99,97,112,116,117,114,105,110,103,32,111,110,108,121,32,116,104,101,32,34,97,98,99,100,34,32,112,97,114,116,32,40,116,104,101,32,102,105,114,115,116,32,101,120,112,108,105,99,105,116,32,115,117,98,112,97,116,116,101,114,110,41,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,97,98,99,100,41,46,42,34,44,91,123,99,97,112,116,117,114,101,44,91,49,93,125,93,41,46>>]}]},{p,[],[<<84,104,101,32,99,97,108,108,32,103,105,118,101,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,101,115,117,108,116,44,32,97,115,32,116,104,101,32,102,105,114,115,116,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,34,40,97,98,99,100,41,34,44,32,109,97,116,99,104,105,110,103,32,34,97,98,99,100,34,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,44,32,97,116,32,40,122,101,114,111,45,98,97,115,101,100,41,32,112,111,115,105,116,105,111,110,32,51,44,32,111,102,32,108,101,110,103,116,104,32,52,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,51,44,52,125,93,125>>]}]},{p,[],[<<67,111,110,115,105,100,101,114,32,116,104,101,32,115,97,109,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,98,117,116,32,119,105,116,104,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,101,120,112,108,105,99,105,116,108,121,32,110,97,109,101,100,32,39,70,79,79,39,58>>]},{pre,[],[{code,[],[<<34,46,42,40,63,60,70,79,79,62,97,98,99,100,41,46,42,34>>]}]},{p,[],[<<87,105,116,104,32,116,104,105,115,32,101,120,112,114,101,115,115,105,111,110,44,32,119,101,32,99,111,117,108,100,32,115,116,105,108,108,32,103,105,118,101,32,116,104,101,32,105,110,100,101,120,32,111,102,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,119,105,116,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,97,108,108,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,63,60,70,79,79,62,97,98,99,100,41,46,42,34,44,91,123,99,97,112,116,117,114,101,44,91,49,93,125,93,41,46>>]}]},{p,[],[<<103,105,118,105,110,103,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,98,101,102,111,114,101,46,32,66,117,116,44,32,97,115,32,116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,105,115,32,110,97,109,101,100,44,32,119,101,32,99,97,110,32,97,108,115,111,32,115,112,101,99,105,102,121,32,105,116,115,32,110,97,109,101,32,105,110,32,116,104,101,32,118,97,108,117,101,32,108,105,115,116,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,65,66,67,97,98,99,100,65,66,67,34,44,34,46,42,40,63,60,70,79,79,62,97,98,99,100,41,46,42,34,44,91,123,99,97,112,116,117,114,101,44,91,39,70,79,79,39,93,125,93,41,46>>]}]},{p,[],[<<84,104,105,115,32,119,111,117,108,100,32,103,105,118,101,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,116,104,101,32,101,97,114,108,105,101,114,32,101,120,97,109,112,108,101,115,44,32,110,97,109,101,108,121,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,51,44,52,125,93,125>>]}]},{p,[],[<<84,104,101,32,118,97,108,117,101,115,32,108,105,115,116,32,99,97,110,32,115,112,101,99,105,102,121,32,105,110,100,101,120,101,115,32,111,114,32,110,97,109,101,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,105,110,32,119,104,105,99,104,32,99,97,115,101,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,115,32,118,97,114,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,116,121,112,101,46,32,73,102,32,116,104,101,32,116,121,112,101,32,105,115,32>>,{code,[],[<<105,110,100,101,120>>]},<<44,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,45,49,44,48,125>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,102,111,114,32,118,97,108,117,101,115,32,119,105,116,104,32,110,111,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,115,117,98,112,97,116,116,101,114,110,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,98,117,116,32,102,111,114,32,116,104,101,32,111,116,104,101,114,32,116,121,112,101,115,32,40>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,97,110,100,32>>,{code,[],[<<108,105,115,116>>]},<<41,44,32,116,104,101,32,118,97,108,117,101,115,32,97,114,101,32,116,104,101,32,101,109,112,116,121,32,98,105,110,97,114,121,32,111,114,32,108,105,115,116,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46>>]}]},{dt,[],[{code,[],[<<84,121,112,101>>]}]},{dd,[],[{p,[],[<<79,112,116,105,111,110,97,108,108,121,32,115,112,101,99,105,102,105,101,115,32,104,111,119,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,114,101,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32,73,102,32,111,109,105,116,116,101,100,44,32,116,104,101,32,100,101,102,97,117,108,116,32,111,102,32>>,{code,[],[<<105,110,100,101,120>>]},<<32,105,115,32,117,115,101,100,46>>]},{p,[],[{code,[],[<<84,121,112,101>>]},<<32,99,97,110,32,98,101,32,111,110,101,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58>>]},{dl,[],[{dt,[],[{code,[],[<<105,110,100,101,120>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,99,97,112,116,117,114,101,100,32,115,117,98,115,116,114,105,110,103,115,32,97,115,32,112,97,105,114,115,32,111,102,32,98,121,116,101,32,105,110,100,101,120,101,115,32,105,110,116,111,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,97,110,100,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,116,114,105,110,103,32,105,110,32,116,104,101,32,115,117,98,106,101,99,116,32,40,97,115,32,105,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,119,97,115,32,102,108,97,116,116,101,110,101,100,32,119,105,116,104,32>>,{a,[{href,<<101,114,116,115,58,101,114,108,97,110,103,35,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,114,108,97,110,103,58,105,111,108,105,115,116,95,116,111,95,98,105,110,97,114,121,47,49>>]}]},<<32,111,114,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101,35,99,104,97,114,97,99,116,101,114,115,95,116,111,95,98,105,110,97,114,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,105,99,111,100,101,58,99,104,97,114,97,99,116,101,114,115,95,116,111,95,98,105,110,97,114,121,47,50>>]}]},<<32,98,101,102,111,114,101,32,109,97,116,99,104,105,110,103,41,46,32,78,111,116,105,99,101,32,116,104,97,116,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,114,101,115,117,108,116,115,32,105,110,32>>,{em,[],[<<98,121,116,101,45,111,114,105,101,110,116,101,100>>]},<<32,105,110,100,101,120,101,115,32,105,110,32,97,32,40,112,111,115,115,105,98,108,121,32,118,105,114,116,117,97,108,41,32>>,{em,[],[<<85,84,70,45,56,32,101,110,99,111,100,101,100>>]},<<32,98,105,110,97,114,121,46,32,65,32,98,121,116,101,32,105,110,100,101,120,32,116,117,112,108,101,32>>,{code,[],[<<123,48,44,50,125>>]},<<32,99,97,110,32,116,104,101,114,101,102,111,114,101,32,114,101,112,114,101,115,101,110,116,32,111,110,101,32,111,114,32,116,119,111,32,99,104,97,114,97,99,116,101,114,115,32,119,104,101,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,105,110,32,101,102,102,101,99,116,46,32,84,104,105,115,32,99,97,110,32,115,101,101,109,32,99,111,117,110,116,101,114,45,105,110,116,117,105,116,105,118,101,44,32,98,117,116,32,104,97,115,32,98,101,101,110,32,100,101,101,109,101,100,32,116,104,101,32,109,111,115,116,32,101,102,102,101,99,116,105,118,101,32,97,110,100,32,117,115,101,102,117,108,32,119,97,121,32,116,111,32,100,111,32,105,116,46,32,84,111,32,114,101,116,117,114,110,32,108,105,115,116,115,32,105,110,115,116,101,97,100,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,115,105,109,112,108,101,114,32,99,111,100,101,32,105,102,32,116,104,97,116,32,105,115,32,100,101,115,105,114,101,100,46,32,84,104,105,115,32,114,101,116,117,114,110,32,116,121,112,101,32,105,115,32,116,104,101,32,100,101,102,97,117,108,116,46>>]}]},{dt,[],[{code,[],[<<108,105,115,116>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,109,97,116,99,104,105,110,103,32,115,117,98,115,116,114,105,110,103,115,32,97,115,32,108,105,115,116,115,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,69,114,108,97,110,103,32>>,{code,[],[<<115,116,114,105,110,103,40,41>>]},<<115,41,46,32,73,116,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,117,115,101,100,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,116,104,101,32,92,67,32,115,101,113,117,101,110,99,101,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,97,32,99,97,112,116,117,114,101,100,32,115,117,98,112,97,116,116,101,114,110,32,99,97,110,32,99,111,110,116,97,105,110,32,98,121,116,101,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,118,97,108,105,100,32,85,84,70,45,56,32,40,92,67,32,109,97,116,99,104,101,115,32,98,121,116,101,115,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,99,104,97,114,97,99,116,101,114,32,101,110,99,111,100,105,110,103,41,46,32,73,110,32,116,104,97,116,32,99,97,115,101,32,116,104,101,32>>,{code,[],[<<108,105,115,116>>]},<<32,99,97,112,116,117,114,105,110,103,32,99,97,110,32,114,101,115,117,108,116,32,105,110,32,116,104,101,32,115,97,109,101,32,116,121,112,101,115,32,111,102,32,116,117,112,108,101,115,32,116,104,97,116,32>>,{a,[{href,<<115,116,100,108,105,98,58,117,110,105,99,111,100,101,35,99,104,97,114,97,99,116,101,114,115,95,116,111,95,108,105,115,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,105,99,111,100,101,58,99,104,97,114,97,99,116,101,114,115,95,116,111,95,108,105,115,116,47,50>>]}]},<<32,99,97,110,32,114,101,116,117,114,110,44,32,110,97,109,101,108,121,32,116,104,114,101,101,45,116,117,112,108,101,115,32,119,105,116,104,32,116,97,103,32>>,{code,[],[<<105,110,99,111,109,112,108,101,116,101>>]},<<32,111,114,32>>,{code,[],[<<101,114,114,111,114>>]},<<44,32,116,104,101,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,111,110,118,101,114,116,101,100,32,99,104,97,114,97,99,116,101,114,115,32,97,110,100,32,116,104,101,32,105,110,118,97,108,105,100,32,85,84,70,45,56,32,116,97,105,108,32,111,102,32,116,104,101,32,99,111,110,118,101,114,115,105,111,110,32,97,115,32,97,32,98,105,110,97,114,121,46,32,84,104,101,32,98,101,115,116,32,115,116,114,97,116,101,103,121,32,105,115,32,116,111,32,97,118,111,105,100,32,117,115,105,110,103,32,116,104,101,32,92,67,32,115,101,113,117,101,110,99,101,32,119,104,101,110,32,99,97,112,116,117,114,105,110,103,32,108,105,115,116,115,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<82,101,116,117,114,110,115,32,109,97,116,99,104,105,110,103,32,115,117,98,115,116,114,105,110,103,115,32,97,115,32,98,105,110,97,114,105,101,115,46,32,73,102,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,105,115,32,117,115,101,100,44,32,116,104,101,115,101,32,98,105,110,97,114,105,101,115,32,97,114,101,32,105,110,32,85,84,70,45,56,46,32,73,102,32,116,104,101,32,92,67,32,115,101,113,117,101,110,99,101,32,105,115,32,117,115,101,100,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<44,32,116,104,101,32,98,105,110,97,114,105,101,115,32,99,97,110,32,98,101,32,105,110,118,97,108,105,100,32,85,84,70,45,56,46>>]}]}]}]}]},{p,[],[<<73,110,32,103,101,110,101,114,97,108,44,32,115,117,98,112,97,116,116,101,114,110,115,32,116,104,97,116,32,119,101,114,101,32,110,111,116,32,97,115,115,105,103,110,101,100,32,97,32,118,97,108,117,101,32,105,110,32,116,104,101,32,109,97,116,99,104,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,116,104,101,32,116,117,112,108,101,32>>,{code,[],[<<123,45,49,44,48,125>>]},<<32,119,104,101,110,32>>,{code,[],[<<116,121,112,101>>]},<<32,105,115,32>>,{code,[],[<<105,110,100,101,120>>]},<<46,32,85,110,97,115,115,105,103,110,101,100,32,115,117,98,112,97,116,116,101,114,110,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,97,115,32,116,104,101,32,101,109,112,116,121,32,98,105,110,97,114,121,32,111,114,32,108,105,115,116,44,32,114,101,115,112,101,99,116,105,118,101,108,121,44,32,102,111,114,32,111,116,104,101,114,32,114,101,116,117,114,110,32,116,121,112,101,115,46,32,67,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,58>>]},{pre,[],[{code,[],[<<34,46,42,40,40,63,60,70,79,79,62,97,98,100,100,41,124,97,40,46,46,100,41,41,46,42,34>>]}]},{p,[],[<<84,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,101,120,112,108,105,99,105,116,108,121,32,99,97,112,116,117,114,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,44,32,119,104,101,114,101,32,116,104,101,32,111,112,101,110,105,110,103,32,112,97,114,101,110,116,104,101,115,105,115,32,112,111,115,105,116,105,111,110,32,100,101,116,101,114,109,105,110,101,115,32,116,104,101,32,111,114,100,101,114,32,105,110,32,116,104,101,32,114,101,115,117,108,116,44,32,104,101,110,99,101,32>>,{code,[],[<<40,40,63,60,70,79,79,62,97,98,100,100,41,124,97,40,46,46,100,41,41>>]},<<32,105,115,32,115,117,98,112,97,116,116,101,114,110,32,105,110,100,101,120,32,49,44,32>>,{code,[],[<<40,63,60,70,79,79,62,97,98,100,100,41>>]},<<32,105,115,32,115,117,98,112,97,116,116,101,114,110,32,105,110,100,101,120,32,50,44,32,97,110,100,32>>,{code,[],[<<40,46,46,100,41>>]},<<32,105,115,32,115,117,98,112,97,116,116,101,114,110,32,105,110,100,101,120,32,51,46,32,87,104,101,110,32,109,97,116,99,104,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,116,114,105,110,103,58>>]},{pre,[],[{code,[],[<<34,65,66,67,97,98,99,100,65,66,67,34>>]}]},{p,[],[<<116,104,101,32,115,117,98,112,97,116,116,101,114,110,32,97,116,32,105,110,100,101,120,32,50,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,44,32,97,115,32,34,97,98,100,100,34,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,116,104,101,32,115,116,114,105,110,103,44,32,98,117,116,32,116,104,101,32,99,111,109,112,108,101,116,101,32,112,97,116,116,101,114,110,32,109,97,116,99,104,101,115,32,40,98,101,99,97,117,115,101,32,111,102,32,116,104,101,32,97,108,116,101,114,110,97,116,105,118,101,32>>,{code,[],[<<97,40,46,46,100,41>>]},<<41,46,32,84,104,101,32,115,117,98,112,97,116,116,101,114,110,32,97,116,32,105,110,100,101,120,32,50,32,105,115,32,116,104,101,114,101,102,111,114,101,32,117,110,97,115,115,105,103,110,101,100,32,97,110,100,32,116,104,101,32,100,101,102,97,117,108,116,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,123,48,44,49,48,125,44,123,51,44,52,125,44,123,45,49,44,48,125,44,123,52,44,51,125,93,125>>]}]},{p,[],[<<83,101,116,116,105,110,103,32,116,104,101,32,99,97,112,116,117,114,101,32>>,{code,[],[<<84,121,112,101>>]},<<32,116,111,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,103,105,118,101,115,58>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,60,60,34,65,66,67,97,98,99,100,65,66,67,34,62,62,44,60,60,34,97,98,99,100,34,62,62,44,60,60,62,62,44,60,60,34,98,99,100,34,62,62,93,125>>]}]},{p,[],[<<72,101,114,101,32,116,104,101,32,101,109,112,116,121,32,98,105,110,97,114,121,32,40>>,{code,[],[<<60,60,62,62>>]},<<41,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,117,110,97,115,115,105,103,110,101,100,32,115,117,98,112,97,116,116,101,114,110,46,32,73,110,32,116,104,101,32>>,{code,[],[<<98,105,110,97,114,121>>]},<<32,99,97,115,101,44,32,115,111,109,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,97,116,99,104,105,110,103,32,105,115,32,116,104,101,114,101,102,111,114,101,32,108,111,115,116,44,32,97,115,32>>,{code,[],[<<60,60,62,62>>]},<<32,99,97,110,32,97,108,115,111,32,98,101,32,97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,32,99,97,112,116,117,114,101,100,46>>]},{p,[],[<<73,102,32,100,105,102,102,101,114,101,110,116,105,97,116,105,111,110,32,98,101,116,119,101,101,110,32,101,109,112,116,121,32,109,97,116,99,104,101,115,32,97,110,100,32,110,111,110,45,101,120,105,115,116,105,110,103,32,115,117,98,112,97,116,116,101,114,110,115,32,105,115,32,110,101,99,101,115,115,97,114,121,44,32,117,115,101,32,116,104,101,32>>,{code,[],[<<116,121,112,101>>]},<<32>>,{code,[],[<<105,110,100,101,120>>]},<<32,97,110,100,32,100,111,32,116,104,101,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,116,104,101,32,102,105,110,97,108,32,116,121,112,101,32,105,110,32,69,114,108,97,110,103,32,99,111,100,101,46>>]},{p,[],[<<87,104,101,110,32,111,112,116,105,111,110,32>>,{code,[],[<<103,108,111,98,97,108>>]},<<32,105,115,32,115,112,101,99,105,105,102,105,101,100,44,32,116,104,101,32>>,{code,[],[<<99,97,112,116,117,114,101>>]},<<32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,102,102,101,99,116,115,32,101,97,99,104,32,109,97,116,99,104,32,115,101,112,97,114,97,116,101,108,121,44,32,115,111,32,116,104,97,116,58>>]},{pre,[],[{code,[],[<<114,101,58,114,117,110,40,34,99,97,99,98,34,44,34,99,40,97,124,98,41,34,44,91,103,108,111,98,97,108,44,123,99,97,112,116,117,114,101,44,91,49,93,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<123,109,97,116,99,104,44,91,91,34,97,34,93,44,91,34,98,34,93,93,125>>]}]}]}]},{p,[],[<<70,111,114,32,97,32,100,101,115,99,114,105,112,116,105,111,110,115,32,111,102,32,111,112,116,105,111,110,115,32,111,110,108,121,32,97,102,102,101,99,116,105,110,103,32,116,104,101,32,99,111,109,112,105,108,97,116,105,111,110,32,115,116,101,112,44,32,115,101,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,99,111,109,112,105,108,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<99,111,109,112,105,108,101,47,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,52,49,57>>,signature => [{attribute,{76,2},spec,{{run,3},[{type,{76,10},bounded_fun,[{type,{76,10},'fun',[{type,{76,10},product,[{var,{76,11},'Subject'},{var,{76,20},'RE'},{var,{76,24},'Options'}]},{type,{76,36},union,[{type,{76,36},tuple,[{atom,{76,37},match},{var,{76,44},'Captured'}]},{atom,{77,36},match},{atom,{78,36},nomatch},{type,{79,8},tuple,[{atom,{79,9},error},{var,{79,16},'ErrType'}]}]}]},[{type,{80,7},constraint,[{atom,{80,7},is_subtype},[{var,{80,7},'Subject'},{type,{80,18},union,[{type,{80,18},iodata,[]},{remote_type,{80,29},[{atom,{80,29},unicode},{atom,{80,37},charlist},[]]}]}]]},{type,{81,7},constraint,[{atom,{81,7},is_subtype},[{var,{81,7},'RE'},{type,{81,13},union,[{user_type,{81,13},mp,[]},{type,{81,20},iodata,[]},{remote_type,{81,31},[{atom,{81,31},unicode},{atom,{81,39},charlist},[]]}]}]]},{type,{82,7},constraint,[{atom,{82,7},is_subtype},[{var,{82,7},'Options'},{type,{82,18},list,[{var,{82,19},'Option'}]}]]},{type,{83,7},constraint,[{atom,{83,7},is_subtype},[{var,{83,7},'Option'},{type,{83,17},union,[{atom,{83,17},anchored},{atom,{83,28},global},{atom,{83,37},notbol},{atom,{83,46},noteol},{atom,{83,55},notempty},{atom,{84,10},notempty_atstart},{atom,{84,29},report_errors},{type,{85,17},tuple,[{atom,{85,18},offset},{type,{85,26},non_neg_integer,[]}]},{type,{86,3},tuple,[{atom,{86,4},match_limit},{type,{86,17},non_neg_integer,[]}]},{type,{87,3},tuple,[{atom,{87,4},match_limit_recursion},{type,{87,27},non_neg_integer,[]}]},{type,{88,17},tuple,[{atom,{88,18},newline},{ann_type,{88,27},[{var,{88,27},'NLSpec'},{user_type,{88,37},nl_spec,[]}]}]},{atom,{89,17},bsr_anycrlf},{atom,{89,31},bsr_unicode},{type,{89,45},tuple,[{atom,{89,46},capture},{var,{89,55},'ValueSpec'}]},{type,{90,17},tuple,[{atom,{90,18},capture},{var,{90,27},'ValueSpec'},{var,{90,38},'Type'}]},{var,{90,46},'CompileOpt'}]}]]},{type,{91,7},constraint,[{atom,{91,7},is_subtype},[{var,{91,7},'Type'},{type,{91,15},union,[{atom,{91,15},index},{atom,{91,23},list},{atom,{91,30},binary}]}]]},{type,{92,7},constraint,[{atom,{92,7},is_subtype},[{var,{92,7},'ValueSpec'},{type,{92,20},union,[{atom,{92,20},all},{atom,{92,26},all_but_first},{atom,{92,42},all_names},{atom,{92,54},first},{atom,{92,62},none},{var,{92,69},'ValueList'}]}]]},{type,{93,7},constraint,[{atom,{93,7},is_subtype},[{var,{93,7},'ValueList'},{type,{93,20},list,[{var,{93,21},'ValueID'}]}]]},{type,{94,7},constraint,[{atom,{94,7},is_subtype},[{var,{94,7},'ValueID'},{type,{94,18},union,[{type,{94,18},integer,[]},{type,{94,30},string,[]},{type,{94,41},atom,[]}]}]]},{type,{95,7},constraint,[{atom,{95,7},is_subtype},[{var,{95,7},'CompileOpt'},{user_type,{95,21},compile_option,[]}]]},{type,{96,7},constraint,[{atom,{96,7},is_subtype},[{var,{96,7},'Captured'},{type,{96,19},union,[{type,{96,19},list,[{var,{96,20},'CaptureData'}]},{type,{96,35},list,[{type,{96,36},list,[{var,{96,37},'CaptureData'}]}]}]}]]},{type,{97,7},constraint,[{atom,{97,7},is_subtype},[{var,{97,7},'CaptureData'},{type,{97,22},union,[{type,{97,22},tuple,[{type,{97,23},integer,[]},{type,{97,34},integer,[]}]},{var,{98,22},'ListConversionData'},{type,{99,22},binary,[]}]}]]},{type,{100,7},constraint,[{atom,{100,7},is_subtype},[{var,{100,7},'ListConversionData'},{type,{100,29},union,[{type,{100,29},string,[]},{type,{101,29},tuple,[{atom,{101,30},error},{type,{101,37},string,[]},{type,{101,47},binary,[]}]},{type,{102,29},tuple,[{atom,{102,30},incomplete},{type,{102,42},string,[]},{type,{102,52},binary,[]}]}]}]]},{type,{103,7},constraint,[{atom,{103,7},is_subtype},[{var,{103,7},'ErrType'},{type,{103,18},union,[{atom,{103,18},match_limit},{atom,{103,32},match_limit_recursion},{type,{103,56},tuple,[{atom,{103,57},compile},{var,{103,67},'CompileErr'}]}]}]]},{type,{104,7},constraint,[{atom,{104,7},is_subtype},[{var,{104,7},'CompileErr'},{type,{104,21},tuple,[{ann_type,{104,22},[{var,{104,22},'ErrString'},{type,{104,35},string,[]}]},{ann_type,{104,45},[{var,{104,45},'Position'},{type,{104,57},non_neg_integer,[]}]}]}]]}]]}]}}]}},{{function,split,2},[{file,[114,101,46,101,114,108]},{location,153}],[<<115,112,108,105,116,47,50>>],#{<<101,110>> => [{p,[],[<<83,97,109,101,32,97,115,32>>,{code,[],[<<115,112,108,105,116,40,83,117,98,106,101,99,116,44,32,82,69,44,32,91,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,57,57,52>>,signature => [{attribute,{153,2},spec,{{split,2},[{type,{153,12},bounded_fun,[{type,{153,12},'fun',[{type,{153,12},product,[{var,{153,13},'Subject'},{var,{153,22},'RE'}]},{var,{153,29},'SplitList'}]},[{type,{154,7},constraint,[{atom,{154,7},is_subtype},[{var,{154,7},'Subject'},{type,{154,18},union,[{type,{154,18},iodata,[]},{remote_type,{154,29},[{atom,{154,29},unicode},{atom,{154,37},charlist},[]]}]}]]},{type,{155,7},constraint,[{atom,{155,7},is_subtype},[{var,{155,7},'RE'},{type,{155,13},union,[{user_type,{155,13},mp,[]},{type,{155,20},iodata,[]}]}]]},{type,{156,7},constraint,[{atom,{156,7},is_subtype},[{var,{156,7},'SplitList'},{type,{156,20},list,[{type,{156,21},union,[{type,{156,21},iodata,[]},{remote_type,{156,32},[{atom,{156,32},unicode},{atom,{156,40},charlist},[]]}]}]}]]}]]}]}}]}},{{function,split,3},[{file,[114,101,46,101,114,108]},{location,166}],[<<115,112,108,105,116,47,51>>],#{<<101,110>> => [{p,[],[<<83,112,108,105,116,115,32,116,104,101,32,105,110,112,117,116,32,105,110,116,111,32,112,97,114,116,115,32,98,121,32,102,105,110,100,105,110,103,32,116,111,107,101,110,115,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,115,117,112,112,108,105,101,100,46,32,84,104,101,32,115,112,108,105,116,116,105,110,103,32,105,115,32,98,97,115,105,99,97,108,108,121,32,100,111,110,101,32,98,121,32,114,117,110,110,105,110,103,32,97,32,103,108,111,98,97,108,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,32,97,110,100,32,100,105,118,105,100,105,110,103,32,116,104,101,32,105,110,105,116,105,97,108,32,115,116,114,105,110,103,32,119,104,101,114,101,118,101,114,32,97,32,109,97,116,99,104,32,111,99,99,117,114,115,46,32,84,104,101,32,109,97,116,99,104,105,110,103,32,112,97,114,116,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,105,115,32,114,101,109,111,118,101,100,32,102,114,111,109,32,116,104,101,32,111,117,116,112,117,116,46>>]},{p,[],[<<65,115,32,105,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,114,101,35,114,117,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,117,110,47,51>>]}]},<<44,32,97,110,32>>,{code,[],[<<109,112,40,41>>]},<<32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,111,112,116,105,111,110,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,114,101,113,117,105,114,101,115,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,116,111,32,98,101,32,97,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<46,32,73,102,32,99,111,109,112,105,108,97,116,105,111,110,32,105,115,32,100,111,110,101,32,105,109,112,108,105,99,105,116,108,121,32,97,110,100,32,116,104,101,32>>,{code,[],[<<117,110,105,99,111,100,101>>]},<<32,99,111,109,112,105,108,97,116,105,111,110,32,111,112,116,105,111,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,116,111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,44,32,98,111,116,104,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,97,110,100,32>>,{code,[],[<<83,117,98,106,101,99,116>>]},<<32,97,114,101,32,116,111,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,118,97,108,105,100,32,85,110,105,99,111,100,101,32>>,{code,[],[<<99,104,97,114,108,105,115,116,40,41>>]},<<115,46>>]},{p,[],[<<84,104,101,32,114,101,115,117,108,116,32,105,115,32,103,105,118,101,110,32,97,115,32,97,32,108,105,115,116,32,111,102,32,34,115,116,114,105,110,103,115,34,44,32,116,104,101,32,112,114,101,102,101,114,114,101,100,32,100,97,116,97,32,116,121,112,101,32,115,112,101,99,105,102,105,101,100,32,105,110,32,111,112,116,105,111,110,32>>,{code,[],[<<114,101,116,117,114,110>>]},<<32,40,100,101,102,97,117,108,116,32>>,{code,[],[<<105,111,100,97,116,97>>]},<<41,46>>]},{p,[],[<<73,102,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,115,112,101,99,105,102,105,101,100,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,44,32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,114,101,116,117,114,110,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,108,105,115,116,32,97,115,32,119,101,108,108,46,32,70,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,110,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,34,44,34,103,34,93>>]}]},{p,[],[<<119,104,105,108,101>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,40,91,108,110,93,41,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,108,34,44,34,97,34,44,34,110,34,44,34,103,34,93>>]}]},{p,[],[<<84,104,101,32,116,101,120,116,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,40,109,97,114,107,101,100,32,98,121,32,116,104,101,32,112,97,114,101,110,116,104,101,115,101,115,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,41,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,108,105,115,116,32,119,104,101,114,101,32,105,116,32,119,97,115,32,102,111,117,110,100,46,32,84,104,105,115,32,109,101,97,110,115,32,116,104,97,116,32,99,111,110,99,97,116,101,110,97,116,105,110,103,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,32,115,112,108,105,116,32,119,104,101,114,101,32,116,104,101,32,119,104,111,108,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,105,115,32,97,32,115,105,110,103,108,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,40,97,115,32,105,110,32,116,104,101,32,108,97,115,116,32,101,120,97,109,112,108,101,41,32,97,108,119,97,121,115,32,114,101,115,117,108,116,115,32,105,110,32,116,104,101,32,111,114,105,103,105,110,97,108,32,115,116,114,105,110,103,46>>]},{p,[],[<<65,115,32,116,104,101,114,101,32,105,115,32,110,111,32,109,97,116,99,104,105,110,103,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,102,111,114,32,116,104,101,32,108,97,115,116,32,112,97,114,116,32,105,110,32,116,104,101,32,101,120,97,109,112,108,101,32,40,116,104,101,32,34,103,34,41,44,32,110,111,116,104,105,110,103,32,105,115,32,105,110,115,101,114,116,101,100,32,97,102,116,101,114,32,116,104,97,116,46,32,84,111,32,109,97,107,101,32,116,104,101,32,103,114,111,117,112,32,111,102,32,115,116,114,105,110,103,115,32,97,110,100,32,116,104,101,32,112,97,114,116,115,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,109,111,114,101,32,111,98,118,105,111,117,115,44,32,111,110,101,32,99,97,110,32,117,115,101,32,111,112,116,105,111,110,32>>,{code,[],[<<103,114,111,117,112>>]},<<44,32,119,104,105,99,104,32,103,114,111,117,112,115,32,116,111,103,101,116,104,101,114,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,112,97,114,116,115,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,119,104,101,110,32,116,104,101,32,115,116,114,105,110,103,32,119,97,115,32,115,112,108,105,116,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,40,91,108,110,93,41,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,103,114,111,117,112,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,91,34,69,114,34,44,34,108,34,93,44,91,34,97,34,44,34,110,34,93,44,91,34,103,34,93,93>>]}]},{p,[],[<<72,101,114,101,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,102,105,114,115,116,32,109,97,116,99,104,101,100,32,116,104,101,32,34,108,34,44,32,99,97,117,115,105,110,103,32,34,69,114,34,32,116,111,32,98,101,32,116,104,101,32,102,105,114,115,116,32,112,97,114,116,32,105,110,32,116,104,101,32,114,101,115,117,108,116,46,32,87,104,101,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,109,97,116,99,104,101,100,44,32,116,104,101,32,40,111,110,108,121,41,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,98,111,117,110,100,32,116,111,32,116,104,101,32,34,108,34,44,32,115,111,32,116,104,101,32,34,108,34,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,32,116,104,101,32,103,114,111,117,112,32,116,111,103,101,116,104,101,114,32,119,105,116,104,32,34,69,114,34,46,32,84,104,101,32,110,101,120,116,32,109,97,116,99,104,32,105,115,32,111,102,32,116,104,101,32,34,110,34,44,32,109,97,107,105,110,103,32,34,97,34,32,116,104,101,32,110,101,120,116,32,112,97,114,116,32,116,111,32,98,101,32,114,101,116,117,114,110,101,100,46,32,65,115,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,32,105,115,32,98,111,117,110,100,32,116,111,32,115,117,98,115,116,114,105,110,103,32,34,110,34,32,105,110,32,116,104,105,115,32,99,97,115,101,44,32,116,104,101,32,34,110,34,32,105,115,32,105,110,115,101,114,116,101,100,32,105,110,116,111,32,116,104,105,115,32,103,114,111,117,112,46,32,84,104,101,32,108,97,115,116,32,103,114,111,117,112,32,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,116,114,105,110,103,44,32,97,115,32,110,111,32,109,111,114,101,32,109,97,116,99,104,101,115,32,97,114,101,32,102,111,117,110,100,46>>]},{p,[],[<<66,121,32,100,101,102,97,117,108,116,44,32,97,108,108,32,112,97,114,116,115,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,115,44,32,97,114,101,32,114,101,116,117,114,110,101,100,32,102,114,111,109,32,116,104,101,32,102,117,110,99,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,110,34,44,91,93,93>>]}]},{p,[],[<<97,115,32,116,104,101,32,109,97,116,99,104,105,110,103,32,111,102,32,116,104,101,32,34,103,34,32,105,110,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,108,101,97,118,101,115,32,97,110,32,101,109,112,116,121,32,114,101,115,116,44,32,119,104,105,99,104,32,105,115,32,97,108,115,111,32,114,101,116,117,114,110,101,100,46,32,84,104,105,115,32,98,101,104,97,118,105,111,114,32,100,105,102,102,101,114,115,32,102,114,111,109,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32,115,112,108,105,116,32,102,117,110,99,116,105,111,110,32,105,110,32,80,101,114,108,44,32,119,104,101,114,101,32,101,109,112,116,121,32,115,116,114,105,110,103,115,32,97,116,32,116,104,101,32,101,110,100,32,97,114,101,32,98,121,32,100,101,102,97,117,108,116,32,114,101,109,111,118,101,100,46,32,84,111,32,103,101,116,32,116,104,101,32,34,116,114,105,109,109,105,110,103,34,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32,80,101,114,108,44,32,115,112,101,99,105,102,121,32>>,{code,[],[<<116,114,105,109>>]},<<32,97,115,32,97,110,32,111,112,116,105,111,110,58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,116,114,105,109,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,110,34,93>>]}]},{p,[],[<<84,104,101,32,34,116,114,105,109,34,32,111,112,116,105,111,110,32,115,97,121,115,59,32,34,103,105,118,101,32,109,101,32,97,115,32,109,97,110,121,32,112,97,114,116,115,32,97,115,32,112,111,115,115,105,98,108,101,32,101,120,99,101,112,116,32,116,104,101,32,101,109,112,116,121,32,111,110,101,115,34,44,32,119,104,105,99,104,32,115,111,109,101,116,105,109,101,115,32,99,97,110,32,98,101,32,117,115,101,102,117,108,46,32,89,111,117,32,99,97,110,32,97,108,115,111,32,115,112,101,99,105,102,121,32,104,111,119,32,109,97,110,121,32,112,97,114,116,115,32,121,111,117,32,119,97,110,116,44,32,98,121,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,112,97,114,116,115,44>>]},<<78>>,{code,[],[<<125>>]},<<58>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,123,112,97,114,116,115,44,50,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115>>]},{pre,[],[{code,[],[<<91,34,69,114,34,44,34,97,110,103,34,93>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32,116,104,101,32,108,97,115,116,32,112,97,114,116,32,105,115,32,34,97,110,103,34,44,32,110,111,116,32,34,97,110,34,44,32,97,115,32,115,112,108,105,116,116,105,110,103,32,119,97,115,32,115,112,101,99,105,102,105,101,100,32,105,110,116,111,32,116,119,111,32,112,97,114,116,115,44,32,97,110,100,32,116,104,101,32,115,112,108,105,116,116,105,110,103,32,115,116,111,112,115,32,119,104,101,110,32,101,110,111,117,103,104,32,112,97,114,116,115,32,97,114,101,32,103,105,118,101,110,44,32,119,104,105,99,104,32,105,115,32,119,104,121,32,116,104,101,32,114,101,115,117,108,116,32,100,105,102,102,101,114,115,32,102,114,111,109,32,116,104,97,116,32,111,102,32>>,{code,[],[<<116,114,105,109>>]},<<46>>]},{p,[],[<<77,111,114,101,32,116,104,97,110,32,116,104,114,101,101,32,112,97,114,116,115,32,97,114,101,32,110,111,116,32,112,111,115,115,105,98,108,101,32,119,105,116,104,32,116,104,105,115,32,105,110,100,97,116,97,44,32,115,111>>]},{pre,[],[{code,[],[<<114,101,58,115,112,108,105,116,40,34,69,114,108,97,110,103,34,44,34,91,108,103,93,34,44,91,123,114,101,116,117,114,110,44,108,105,115,116,125,44,123,112,97,114,116,115,44,52,125,93,41,46>>]}]},{p,[],[<<103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,114,101,115,117,108,116,32,97,115,32,116,104,101,32,100,101,102,97,117,108,116,44,32,119,104,105,99,104,32,105,115,32,116,111,32,98,101,32,118,105,101,119,101,100,32,97,115,32,34,97,110,32,105,110,102,105,110,105,116,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,34,46>>]},{p,[],[<<83,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<48>>]},<<32,97,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,103,105,118,101,115,32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116,32,97,115,32,111,112,116,105,111,110,32>>,{code,[],[<<116,114,105,109>>]},<<46,32,73,102,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,97,114,101,32,99,97,112,116,117,114,101,100,44,32,101,109,112,116,121,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,109,97,116,99,104,101,100,32,97,116,32,116,104,101,32,101,110,100,32,97,114,101,32,97,108,115,111,32,115,116,114,105,112,112,101,100,32,102,114,111,109,32,116,104,101,32,114,101,115,117,108,116,32,105,102,32>>,{code,[],[<<116,114,105,109>>]},<<32,111,114,32>>,{code,[],[<<123,112,97,114,116,115,44,48,125>>]},<<32,105,115,32,115,112,101,99,105,102,105,101,100,46>>]},{p,[],[<<84,104,101,32>>,{code,[],[<<116,114,105,109>>]},<<32,98,101,104,97,118,105,111,114,32,99,111,114,114,101,115,112,111,110,100,115,32,101,120,97,99,116,108,121,32,116,111,32,116,104,101,32,80,101,114,108,32,100,101,102,97,117,108,116,46,32>>,{code,[],[<<123,112,97,114,116,115,44,78,125>>]},<<44,32,119,104,101,114,101,32,78,32,105,115,32,97,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,44,32,99,111,114,114,101,115,112,111,110,100,115,32,101,120,97,99,116,108,121,32,116,111,32,116,104,101,32,80,101,114,108,32,98,101,104,97,118,105,111,114,32,119,105,116,104,32,97,32,112,111,115,105,116,105,118,101,32,110,117,109,101,114,105,99,97,108,32,116,104,105,114,100,32,112,97,114,97,109,101,116,101,114,46,32,84,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32>>,{code,[],[<<115,112,108,105,116,47,51>>]},<<32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,80,101,114,108,32,98,101,104,97,118,105,111,114,32,119,104,101,110,32,97,32,110,101,103,97,116,105,118,101,32,105,110,116,101,103,101,114,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,116,104,101,32,116,104,105,114,100,32,112,97,114,97,109,101,116,101,114,32,102,111,114,32,116,104,101,32,80,101,114,108,32,114,111,117,116,105,110,101,46>>]},{p,[],[<<83,117,109,109,97,114,121,32,111,102,32,111,112,116,105,111,110,115,32,110,111,116,32,112,114,101,118,105,111,117,115,108,121,32,100,101,115,99,114,105,98,101,100,32,102,111,114,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<114,117,110,47,51>>]},<<58>>]},{dl,[],[{dt,[],[{code,[],[<<123,114,101,116,117,114,110,44,82,101,116,117,114,110,84,121,112,101,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,104,111,119,32,116,104,101,32,112,97,114,116,115,32,111,102,32,116,104,101,32,111,114,105,103,105,110,97,108,32,115,116,114,105,110,103,32,97,114,101,32,112,114,101,115,101,110,116,101,100,32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,108,105,115,116,46,32,86,97,108,105,100,32,116,121,112,101,115,58>>]},{dl,[],[{dt,[],[{code,[],[<<105,111,100,97,116,97>>]}]},{dd,[],[{p,[],[<<84,104,101,32,118,97,114,105,97,110,116,32,111,102,32>>,{code,[],[<<105,111,100,97,116,97,40,41>>]},<<32,116,104,97,116,32,103,105,118,101,115,32,116,104,101,32,108,101,97,115,116,32,99,111,112,121,105,110,103,32,111,102,32,100,97,116,97,32,119,105,116,104,32,116,104,101,32,99,117,114,114,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,40,111,102,116,101,110,32,97,32,98,105,110,97,114,121,44,32,98,117,116,32,100,111,32,110,111,116,32,100,101,112,101,110,100,32,111,110,32,105,116,41,46>>]}]},{dt,[],[{code,[],[<<98,105,110,97,114,121>>]}]},{dd,[],[{p,[],[<<65,108,108,32,112,97,114,116,115,32,114,101,116,117,114,110,101,100,32,97,115,32,98,105,110,97,114,105,101,115,46>>]}]},{dt,[],[{code,[],[<<108,105,115,116>>]}]},{dd,[],[{p,[],[<<65,108,108,32,112,97,114,116,115,32,114,101,116,117,114,110,101,100,32,97,115,32,108,105,115,116,115,32,111,102,32,99,104,97,114,97,99,116,101,114,115,32,40,34,115,116,114,105,110,103,115,34,41,46>>]}]}]}]},{dt,[],[{code,[],[<<103,114,111,117,112>>]}]},{dd,[],[{p,[],[<<71,114,111,117,112,115,32,116,111,103,101,116,104,101,114,32,116,104,101,32,112,97,114,116,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,119,105,116,104,32,116,104,101,32,112,97,114,116,115,32,111,102,32,116,104,101,32,115,116,114,105,110,103,32,109,97,116,99,104,105,110,103,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,111,102,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]},{p,[],[<<84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,102,114,111,109,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,105,110,32,116,104,105,115,32,99,97,115,101,32,97,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<32,111,102,32>>,{code,[],[<<108,105,115,116,40,41>>]},<<115,46,32,69,97,99,104,32,115,117,98,108,105,115,116,32,98,101,103,105,110,115,32,119,105,116,104,32,116,104,101,32,115,116,114,105,110,103,32,112,105,99,107,101,100,32,111,117,116,32,111,102,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,44,32,102,111,108,108,111,119,101,100,32,98,121,32,116,104,101,32,112,97,114,116,115,32,109,97,116,99,104,105,110,103,32,101,97,99,104,32,111,102,32,116,104,101,32,115,117,98,101,120,112,114,101,115,115,105,111,110,115,32,105,110,32,111,114,100,101,114,32,111,102,32,111,99,99,117,114,114,101,110,99,101,32,105,110,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46>>]}]},{dt,[],[{code,[],[<<123,112,97,114,116,115,44,78,125>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,116,104,101,32,115,117,98,106,101,99,116,32,115,116,114,105,110,103,32,105,115,32,116,111,32,98,101,32,115,112,108,105,116,32,105,110,116,111,46>>]},{p,[],[<<84,104,101,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,105,115,32,116,111,32,98,101,32,97,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,32,102,111,114,32,97,32,115,112,101,99,105,102,105,99,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,44,32,97,110,100,32>>,{code,[],[<<105,110,102,105,110,105,116,121>>]},<<32,102,111,114,32,116,104,101,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115,32,112,111,115,115,105,98,108,101,32,40,116,104,101,32,100,101,102,97,117,108,116,41,46,32,83,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,112,97,114,116,115,44,48,125>>]},<<32,103,105,118,101,115,32,97,115,32,109,97,110,121,32,112,97,114,116,115,32,97,115,32,112,111,115,115,105,98,108,101,32,100,105,115,114,101,103,97,114,100,105,110,103,32,101,109,112,116,121,32,112,97,114,116,115,32,97,116,32,116,104,101,32,101,110,100,44,32,116,104,101,32,115,97,109,101,32,97,115,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<116,114,105,109>>]},<<46>>]}]},{dt,[],[{code,[],[<<116,114,105,109>>]}]},{dd,[],[{p,[],[<<83,112,101,99,105,102,105,101,115,32,116,104,97,116,32,101,109,112,116,121,32,112,97,114,116,115,32,97,116,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,114,101,115,117,108,116,32,108,105,115,116,32,97,114,101,32,116,111,32,98,101,32,100,105,115,114,101,103,97,114,100,101,100,46,32,84,104,101,32,115,97,109,101,32,97,115,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,112,97,114,116,115,44,48,125>>]},<<46,32,84,104,105,115,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,100,101,102,97,117,108,116,32,98,101,104,97,118,105,111,114,32,111,102,32,116,104,101,32>>,{code,[],[<<115,112,108,105,116>>]},<<32,98,117,105,108,116,45,105,110,32,102,117,110,99,116,105,111,110,32,105,110,32,80,101,114,108,46>>]}]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,114,101,46,120,109,108,35,76,49,48,48,51>>,signature => [{attribute,{166,2},spec,{{split,3},[{type,{166,12},bounded_fun,[{type,{166,12},'fun',[{type,{166,12},product,[{var,{166,13},'Subject'},{var,{166,22},'RE'},{var,{166,26},'Options'}]},{var,{166,38},'SplitList'}]},[{type,{167,7},constraint,[{atom,{167,7},is_subtype},[{var,{167,7},'Subject'},{type,{167,18},union,[{type,{167,18},iodata,[]},{remote_type,{167,29},[{atom,{167,29},unicode},{atom,{167,37},charlist},[]]}]}]]},{type,{168,7},constraint,[{atom,{168,7},is_subtype},[{var,{168,7},'RE'},{type,{168,13},union,[{user_type,{168,13},mp,[]},{type,{168,20},iodata,[]},{remote_type,{168,31},[{atom,{168,31},unicode},{atom,{168,39},charlist},[]]}]}]]},{type,{169,7},constraint,[{atom,{169,7},is_subtype},[{var,{169,7},'Options'},{type,{169,18},list,[{var,{169,20},'Option'}]}]]},{type,{170,7},constraint,[{atom,{170,7},is_subtype},[{var,{170,7},'Option'},{type,{170,17},union,[{atom,{170,17},anchored},{atom,{170,28},notbol},{atom,{170,37},noteol},{atom,{170,46},notempty},{atom,{170,57},notempty_atstart},{type,{171,17},tuple,[{atom,{171,18},offset},{type,{171,26},non_neg_integer,[]}]},{type,{171,47},tuple,[{atom,{171,48},newline},{user_type,{171,57},nl_spec,[]}]},{type,{172,17},tuple,[{atom,{172,18},match_limit},{type,{172,31},non_neg_integer,[]}]},{type,{173,17},tuple,[{atom,{173,18},match_limit_recursion},{type,{173,41},non_neg_integer,[]}]},{atom,{174,17},bsr_anycrlf},{atom,{174,31},bsr_unicode},{type,{174,45},tuple,[{atom,{174,46},return},{var,{174,54},'ReturnType'}]},{type,{175,17},tuple,[{atom,{175,18},parts},{var,{175,25},'NumParts'}]},{atom,{175,37},group},{atom,{175,45},trim},{var,{175,52},'CompileOpt'}]}]]},{type,{176,7},constraint,[{atom,{176,7},is_subtype},[{var,{176,7},'NumParts'},{type,{176,19},union,[{type,{176,19},non_neg_integer,[]},{atom,{176,39},infinity}]}]]},{type,{177,7},constraint,[{atom,{177,7},is_subtype},[{var,{177,7},'ReturnType'},{type,{177,21},union,[{atom,{177,21},iodata},{atom,{177,30},list},{atom,{177,37},binary}]}]]},{type,{178,7},constraint,[{atom,{178,7},is_subtype},[{var,{178,7},'CompileOpt'},{user_type,{178,21},compile_option,[]}]]},{type,{179,7},constraint,[{atom,{179,7},is_subtype},[{var,{179,7},'SplitList'},{type,{179,20},union,[{type,{179,20},list,[{var,{179,21},'RetData'}]},{type,{179,32},list,[{var,{179,33},'GroupedRetData'}]}]}]]},{type,{180,7},constraint,[{atom,{180,7},is_subtype},[{var,{180,7},'GroupedRetData'},{type,{180,25},list,[{var,{180,26},'RetData'}]}]]},{type,{181,7},constraint,[{atom,{181,7},is_subtype},[{var,{181,7},'RetData'},{type,{181,18},union,[{type,{181,18},iodata,[]},{remote_type,{181,29},[{atom,{181,29},unicode},{atom,{181,37},charlist},[]]},{type,{181,50},binary,[]},{type,{181,61},list,[]}]}]]}]]}]}}]}},{{type,mp,0},[{file,[114,101,46,101,114,108]},{location,23}],[<<45,116,121,112,101,32,109,112,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<79,112,97,113,117,101,32,100,97,116,97,32,116,121,112,101,32,99,111,110,116,97,105,110,105,110,103,32,97,32,99,111,109,112,105,108,101,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,32>>,{code,[],[<<109,112,40,41>>]},<<32,105,115,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,97,32,116,117,112,108,101,40,41,32,104,97,118,105,110,103,32,116,104,101,32,97,116,111,109,32>>,{code,[],[<<114,101,95,112,97,116,116,101,114,110>>]},<<32,97,115,32,105,116,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116,44,32,116,111,32,97,108,108,111,119,32,102,111,114,32,109,97,116,99,104,105,110,103,32,105,110,32,103,117,97,114,100,115,46,32,84,104,101,32,97,114,105,116,121,32,111,102,32,116,104,101,32,116,117,112,108,101,32,111,114,32,116,104,101,32,99,111,110,116,101,110,116,32,111,102,32,116,104,101,32,111,116,104,101,114,32,102,105,101,108,100,115,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,102,117,116,117,114,101,32,69,114,108,97,110,103,47,79,84,80,32,114,101,108,101,97,115,101,115,46>>]}]},#{signature => [{attribute,{23,2},type,{mp,{type,{23,15},tuple,[{atom,{23,16},re_pattern},{var,{23,28},'_'},{var,{23,31},'_'},{var,{23,34},'_'},{var,{23,37},'_'}]},[]}}]}},{{type,nl_spec,0},[{file,[114,101,46,101,114,108]},{location,25}],[<<45,116,121,112,101,32,110,108,95,115,112,101,99,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{25,2},type,{nl_spec,{type,{25,20},union,[{atom,{25,20},cr},{atom,{25,25},crlf},{atom,{25,32},lf},{atom,{25,37},anycrlf},{atom,{25,47},any}]},[]}}]}},{{type,compile_option,0},[{file,[114,101,46,101,114,108]},{location,27}],[<<45,116,121,112,101,32,99,111,109,112,105,108,101,95,111,112,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{27,2},type,{compile_option,{type,{27,27},union,[{atom,{27,27},unicode},{atom,{27,37},anchored},{atom,{27,48},caseless},{atom,{27,59},dollar_endonly},{atom,{28,27},dotall},{atom,{28,36},extended},{atom,{28,47},firstline},{atom,{28,59},multiline},{atom,{29,27},no_auto_capture},{atom,{29,45},dupnames},{atom,{29,56},ungreedy},{type,{30,27},tuple,[{atom,{30,28},newline},{user_type,{30,37},nl_spec,[]}]},{atom,{31,27},bsr_anycrlf},{atom,{31,41},bsr_unicode},{atom,{32,27},no_start_optimize},{atom,{32,47},ucp},{atom,{32,53},never_utf}]},[]}}]}}]}. \ No newline at end of file
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/shell_docs_SUITE.docs_v1 b/lib/stdlib/test/shell_docs_SUITE_data/shell_docs_SUITE.docs_v1
new file mode 100644
index 0000000000..1989756bc4
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/shell_docs_SUITE.docs_v1
@@ -0,0 +1 @@
+{docs_v1,0,erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,none,#{generated => true,otp_doc_vsn => {1,0,0}},[{{function,suite,0},{32,1},[<<115,117,105,116,101,47,48>>],none,#{}},{{function,all,0},{35,1},[<<97,108,108,47,48>>],none,#{}},{{function,groups,0},{38,1},[<<103,114,111,117,112,115,47,48>>],none,#{}},{{function,init_per_suite,1},{46,1},[<<105,110,105,116,95,112,101,114,95,115,117,105,116,101,47,49>>],none,#{signature => [{attribute,{43,2},spec,{{init_per_suite,1},[{type,{43,21},bounded_fun,[{type,{43,21},'fun',[{type,{43,21},product,[{var,{43,22},'Config1'}]},{var,{43,34},'Config2'}]},[{type,{44,7},constraint,[{atom,{44,7},is_subtype},[{var,{44,7},'Config1'},{type,{44,18},list,[{type,{44,23},tuple,[{type,{44,24},atom,[]},{type,{44,31},term,[]}]}]}]]},{type,{45,7},constraint,[{atom,{45,7},is_subtype},[{var,{45,7},'Config2'},{type,{45,18},list,[{type,{45,23},tuple,[{type,{45,24},atom,[]},{type,{45,31},term,[]}]}]}]]}]]}]}}]}},{{function,end_per_suite,1},{50,1},[<<101,110,100,95,112,101,114,95,115,117,105,116,101,47,49>>],none,#{}},{{function,init_per_group,2},{53,1},[<<105,110,105,116,95,112,101,114,95,103,114,111,117,112,47,50>>],none,#{}},{{function,end_per_group,2},{58,1},[<<101,110,100,95,112,101,114,95,103,114,111,117,112,47,50>>],none,#{}},{{function,render,1},{76,1},[<<114,101,110,100,101,114,47,49>>],none,#{}},{{function,update_render,0},{96,1},[<<117,112,100,97,116,101,95,114,101,110,100,101,114,47,48>>],none,#{}},{{function,update_render,1},{100,1},[<<117,112,100,97,116,101,95,114,101,110,100,101,114,47,49>>],none,#{}},{{function,render_smoke,1},{115,1},[<<114,101,110,100,101,114,95,115,109,111,107,101,47,49>>],none,#{}},{{function,render_prop,1},{163,1},[<<114,101,110,100,101,114,95,112,114,111,112,47,49>>],none,#{}},{{function,links,1},{168,1},[<<108,105,110,107,115,47,49>>],none,#{}},{{function,check_links,2},{187,1},[<<99,104,101,99,107,95,108,105,110,107,115,47,50>>],none,#{}},{{function,normalize,1},{221,1},[<<110,111,114,109,97,108,105,122,101,47,49>>],none,#{}},{{function,b2a,1},{233,1},[<<98,50,97,47,49>>],none,#{}},{{function,render_non_native,1},{240,1},[<<114,101,110,100,101,114,95,110,111,110,95,110,97,116,105,118,101,47,49>>],none,#{}},{{function,render_all,1},{258,1},[<<114,101,110,100,101,114,95,97,108,108,47,49>>],none,#{}},{{function,render_module,2},{277,1},[<<114,101,110,100,101,114,95,109,111,100,117,108,101,47,50>>],none,#{}},{{function,sanitize,1},{312,1},[<<115,97,110,105,116,105,122,101,47,49>>],none,#{}},{{function,docsmap,1},{315,1},[<<100,111,99,115,109,97,112,47,49>>],none,#{}}]}. \ No newline at end of file
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/sofs.docs_v1 b/lib/stdlib/test/shell_docs_SUITE_data/sofs.docs_v1
index e4a4c4cfb7..f1aecb2830 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/sofs.docs_v1
+++ b/lib/stdlib/test/shell_docs_SUITE_data/sofs.docs_v1
@@ -1 +1 @@
-{docs_v1,[{file,[115,111,102,115,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<84,104,105,115,32,109,111,100,117,108,101,32,112,114,111,118,105,100,101,115,32,111,112,101,114,97,116,105,111,110,115,32,111,110,32,102,105,110,105,116,101,32,115,101,116,115,32,97,110,100,32,114,101,108,97,116,105,111,110,115,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32,115,101,116,115,46,32,73,110,116,117,105,116,105,118,101,108,121,44,32,97,32,115,101,116,32,105,115,32,97,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,101,108,101,109,101,110,116,115,59,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,98,101,108,111,110,103,115,32,116,111,32,116,104,101,32,115,101,116,44,32,97,110,100,32,116,104,101,32,115,101,116,32,99,111,110,116,97,105,110,115,32,101,118,101,114,121,32,101,108,101,109,101,110,116,46>>]},{p,[],[<<71,105,118,101,110,32,97,32,115,101,116,32,65,32,97,110,100,32,97,32,115,101,110,116,101,110,99,101,32,83,40,120,41,44,32,119,104,101,114,101,32,120,32,105,115,32,97,32,102,114,101,101,32,118,97,114,105,97,98,108,101,44,32,97,32,110,101,119,32,115,101,116,32,66,32,119,104,111,115,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,101,120,97,99,116,108,121,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,102,111,114,32,119,104,105,99,104,32,83,40,120,41,32,104,111,108,100,115,32,99,97,110,32,98,101,32,102,111,114,109,101,100,44,32,116,104,105,115,32,105,115,32,100,101,110,111,116,101,100,32,66,194,160,61,32,123,120,194,160,105,110,194,160,65,194,160,58,32,83,40,120,41,125,46,32,83,101,110,116,101,110,99,101,115,32,97,114,101,32,101,120,112,114,101,115,115,101,100,32,117,115,105,110,103,32,116,104,101,32,108,111,103,105,99,97,108,32,111,112,101,114,97,116,111,114,115,32,34,102,111,114,32,115,111,109,101,34,32,40,111,114,32,34,116,104,101,114,101,32,101,120,105,115,116,115,34,41,44,32,34,102,111,114,32,97,108,108,34,44,32,34,97,110,100,34,44,32,34,111,114,34,44,32,34,110,111,116,34,46,32,73,102,32,116,104,101,32,101,120,105,115,116,101,110,99,101,32,111,102,32,97,32,115,101,116,32,99,111,110,116,97,105,110,105,110,103,32,97,108,108,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,101,108,101,109,101,110,116,115,32,105,115,32,107,110,111,119,110,32,40,97,115,32,105,115,32,97,108,119,97,121,115,32,116,104,101,32,99,97,115,101,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,41,44,32,116,104,105,115,32,105,115,32,100,101,110,111,116,101,100,32,66,194,160,61,32,123,120,194,160,58,32,83,40,120,41,125,46>>]},{ul,[],[{li,[],[{p,[],[<<84,104,101,32>>,{em,[],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,97,44,32,98,44,32,97,110,100,32,99,32,105,115,32,100,101,110,111,116,101,100,32,123,97,44,194,160,98,44,194,160,99,125,46,32,84,104,105,115,32,110,111,116,97,116,105,111,110,32,105,115,32,110,111,116,32,116,111,32,98,101,32,99,111,110,102,117,115,101,100,32,119,105,116,104,32,116,117,112,108,101,115,46>>]},{p,[],[<<84,104,101,32>>,{em,[],[<<111,114,100,101,114,101,100,32,112,97,105,114>>]},<<32,111,102,32,97,32,97,110,100,32,98,44,32,119,105,116,104,32,102,105,114,115,116,32>>,{em,[],[<<99,111,111,114,100,105,110,97,116,101>>]},<<32,97,32,97,110,100,32,115,101,99,111,110,100,32,99,111,111,114,100,105,110,97,116,101,32,98,44,32,105,115,32,100,101,110,111,116,101,100,32,40,97,44,194,160,98,41,46,32,65,110,32,111,114,100,101,114,101,100,32,112,97,105,114,32,105,115,32,97,110,32>>,{em,[],[<<111,114,100,101,114,101,100,32,115,101,116>>]},<<32,111,102,32,116,119,111,32,101,108,101,109,101,110,116,115,46,32,73,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,111,114,100,101,114,101,100,32,115,101,116,115,32,99,97,110,32,99,111,110,116,97,105,110,32,111,110,101,44,32,116,119,111,44,32,111,114,32,109,111,114,101,32,101,108,101,109,101,110,116,115,44,32,97,110,100,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,117,115,101,100,32,116,111,32,101,110,99,108,111,115,101,32,116,104,101,32,101,108,101,109,101,110,116,115,46>>]},{p,[],[<<85,110,111,114,100,101,114,101,100,32,115,101,116,115,32,97,110,100,32,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,111,114,116,104,111,103,111,110,97,108,44,32,97,103,97,105,110,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,59,32,116,104,101,114,101,32,105,115,32,110,111,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,101,113,117,97,108,32,116,111,32,97,110,121,32,111,114,100,101,114,101,100,32,115,101,116,46>>]}]},{li,[],[{p,[],[<<84,104,101,32>>,{em,[],[<<101,109,112,116,121,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,115,32,110,111,32,101,108,101,109,101,110,116,115,46>>]},{p,[],[<<83,101,116,32,65,32,105,115,32>>,{a,[{id,<<101,113,117,97,108>>}],[]},{em,[],[<<101,113,117,97,108>>]},<<32,116,111,32,115,101,116,32,66,32,105,102,32,116,104,101,121,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32,101,108,101,109,101,110,116,115,44,32,119,104,105,99,104,32,105,115,32,100,101,110,111,116,101,100,32,65,194,160,61,194,160,66,46,32,84,119,111,32,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,101,113,117,97,108,32,105,102,32,116,104,101,121,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,97,110,100,32,104,97,118,101,32,101,113,117,97,108,32,101,108,101,109,101,110,116,115,32,97,116,32,101,97,99,104,32,99,111,111,114,100,105,110,97,116,101,46>>]},{p,[],[<<83,101,116,32,66,32,105,115,32,97,32>>,{a,[{id,<<115,117,98,115,101,116>>}],[]},{em,[],[<<115,117,98,115,101,116>>]},<<32,111,102,32,115,101,116,32,65,32,105,102,32,65,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,66,32,99,111,110,116,97,105,110,115,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<117,110,105,111,110>>}],[]},{em,[],[<<117,110,105,111,110>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,65,32,97,110,100,32,66,32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,97,110,100,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,66,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<105,110,116,101,114,115,101,99,116,105,111,110>>}],[]},{em,[],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,65,32,97,110,100,32,66,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,66,46>>]},{p,[],[<<84,119,111,32,115,101,116,115,32,97,114,101,32>>,{a,[{id,<<100,105,115,106,111,105,110,116>>}],[]},{em,[],[<<100,105,115,106,111,105,110,116>>]},<<32,105,102,32,116,104,101,105,114,32,105,110,116,101,114,115,101,99,116,105,111,110,32,105,115,32,116,104,101,32,101,109,112,116,121,32,115,101,116,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<100,105,102,102,101,114,101,110,99,101>>}],[]},{em,[],[<<100,105,102,102,101,114,101,110,99,101>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,65,32,97,110,100,32,66,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,116,104,97,116,32,100,111,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32,66,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<115,121,109,109,101,116,114,105,99,95,100,105,102,102,101,114,101,110,99,101>>}],[]},{em,[],[<<115,121,109,109,101,116,114,105,99,32,100,105,102,102,101,114,101,110,99,101>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,116,104,111,115,101,32,101,108,101,109,101,110,116,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,101,105,116,104,101,114,32,111,102,32,116,104,101,32,116,119,111,32,115,101,116,115,44,32,98,117,116,32,110,111,116,32,98,111,116,104,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<117,110,105,111,110,95,110>>}],[]},{em,[],[<<117,110,105,111,110>>]},<<32,111,102,32,97,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,115,101,116,115,32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,116,104,101,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,97,116,32,108,101,97,115,116,32,111,110,101,32,115,101,116,32,111,102,32,116,104,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<105,110,116,101,114,115,101,99,116,105,111,110,95,110>>}],[]},{em,[],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32,97,32,110,111,110,45,101,109,112,116,121,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,115,101,116,115,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,101,118,101,114,121,32,115,101,116,32,111,102,32,116,104,101,32,99,111,108,108,101,99,116,105,111,110,46>>]}]},{li,[],[{p,[],[<<84,104,101,32>>,{a,[{id,<<67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,88,32,97,110,100,32,89,44,32,100,101,110,111,116,101,100,32,88,194,160,195,151,194,160,89,44,32,105,115,32,116,104,101,32,115,101,116,32,123,97,194,160,58,32,97,194,160,61,32,40,120,44,194,160,121,41,32,102,111,114,32,115,111,109,101,32,120,194,160,105,110,194,160,88,32,97,110,100,32,102,111,114,32,115,111,109,101,32,121,194,160,105,110,194,160,89,125,46>>]},{p,[],[<<65,32>>,{a,[{id,<<114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<114,101,108,97,116,105,111,110>>]},<<32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,88,194,160,195,151,194,160,89,46,32,76,101,116,32,82,32,98,101,32,97,32,114,101,108,97,116,105,111,110,46,32,84,104,101,32,102,97,99,116,32,116,104,97,116,32,40,120,44,194,160,121,41,32,98,101,108,111,110,103,115,32,116,111,32,82,32,105,115,32,119,114,105,116,116,101,110,32,97,115,32,120,194,160,82,194,160,121,46,32,65,115,32,114,101,108,97,116,105,111,110,115,32,97,114,101,32,115,101,116,115,44,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,115,32,111,102,32,116,104,101,32,108,97,115,116,32,105,116,101,109,32,40,115,117,98,115,101,116,44,32,117,110,105,111,110,44,32,97,110,100,32,115,111,32,111,110,41,32,97,112,112,108,121,32,116,111,32,114,101,108,97,116,105,111,110,115,32,97,115,32,119,101,108,108,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<100,111,109,97,105,110>>}],[]},{em,[],[<<100,111,109,97,105,110>>]},<<32,111,102,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,120,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,121,194,160,105,110,194,160,89,125,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<114,97,110,103,101>>}],[]},{em,[],[<<114,97,110,103,101>>]},<<32,111,102,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,121,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,120,194,160,105,110,194,160,88,125,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<99,111,110,118,101,114,115,101>>}],[]},{em,[],[<<99,111,110,118,101,114,115,101>>]},<<32,111,102,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,97,194,160,58,32,97,194,160,61,32,40,121,44,194,160,120,41,32,102,111,114,32,115,111,109,101,32,40,120,44,194,160,121,41,194,160,105,110,194,160,82,125,46>>]},{p,[],[<<73,102,32,65,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,88,44,32,116,104,101,32>>,{a,[{id,<<105,109,97,103,101>>}],[]},{em,[],[<<105,109,97,103,101>>]},<<32,111,102,32,65,32,117,110,100,101,114,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,121,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,120,194,160,105,110,194,160,65,125,46,32,73,102,32,66,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,89,44,32,116,104,101,32>>,{a,[{id,<<105,110,118,101,114,115,101,95,105,109,97,103,101>>}],[]},{em,[],[<<105,110,118,101,114,115,101,32,105,109,97,103,101>>]},<<32,111,102,32,66,32,105,115,32,116,104,101,32,115,101,116,32,123,120,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,121,194,160,105,110,194,160,66,125,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,88,32,116,111,32,89,44,32,97,110,100,32,83,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,89,32,116,111,32,90,44,32,116,104,101,32>>,{a,[{id,<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,82,32,97,110,100,32,83,32,105,115,32,116,104,101,32,114,101,108,97,116,105,111,110,32,84,32,102,114,111,109,32,88,32,116,111,32,90,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,84,194,160,122,32,105,102,32,97,110,100,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,101,120,105,115,116,115,32,97,110,32,101,108,101,109,101,110,116,32,121,32,105,110,32,89,32,115,117,99,104,32,116,104,97,116,32,120,194,160,82,194,160,121,32,97,110,100,32,121,194,160,83,194,160,122,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<114,101,115,116,114,105,99,116,105,111,110>>}],[]},{em,[],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32,82,32,116,111,32,65,32,105,115,32,116,104,101,32,115,101,116,32,83,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,83,194,160,121,32,105,102,32,97,110,100,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,101,120,105,115,116,115,32,97,110,32,101,108,101,109,101,110,116,32,120,32,105,110,32,65,32,115,117,99,104,32,116,104,97,116,32,120,194,160,82,194,160,121,46>>]},{p,[],[<<73,102,32,83,32,105,115,32,97,32,114,101,115,116,114,105,99,116,105,111,110,32,111,102,32,82,32,116,111,32,65,44,32,116,104,101,110,32,82,32,105,115,32,97,110,32>>,{a,[{id,<<101,120,116,101,110,115,105,111,110>>}],[]},{em,[],[<<101,120,116,101,110,115,105,111,110>>]},<<32,111,102,32,83,32,116,111,32,88,46>>]},{p,[],[<<73,102,32,88,194,160,61,194,160,89,44,32,116,104,101,110,32,82,32,105,115,32,99,97,108,108,101,100,32,97,32,114,101,108,97,116,105,111,110,32>>,{em,[],[<<105,110>>]},<<32,88,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<102,105,101,108,100>>}],[]},{em,[],[<<102,105,101,108,100>>]},<<32,111,102,32,97,32,114,101,108,97,116,105,111,110,32,82,32,105,110,32,88,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,82,32,97,110,100,32,116,104,101,32,114,97,110,103,101,32,111,102,32,82,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,97,110,100,32,105,102,32,83,32,105,115,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,83,194,160,121,32,105,102,32,120,194,160,82,194,160,121,32,97,110,100,32,110,111,116,32,120,194,160,61,194,160,121,44,32,116,104,101,110,32,83,32,105,115,32,116,104,101,32>>,{a,[{id,<<115,116,114,105,99,116,95,114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<115,116,114,105,99,116>>]},<<32,114,101,108,97,116,105,111,110,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,82,46,32,67,111,110,118,101,114,115,101,108,121,44,32,105,102,32,83,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,97,110,100,32,105,102,32,82,32,105,115,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,82,194,160,121,32,105,102,32,120,194,160,83,194,160,121,32,111,114,32,120,194,160,61,194,160,121,44,32,116,104,101,110,32,82,32,105,115,32,116,104,101,32>>,{a,[{id,<<119,101,97,107,95,114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<119,101,97,107>>]},<<32,114,101,108,97,116,105,111,110,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,83,46>>]},{p,[],[<<65,32,114,101,108,97,116,105,111,110,32,82,32,105,110,32,88,32,105,115,32>>,{em,[],[<<114,101,102,108,101,120,105,118,101>>]},<<32,105,102,32,120,194,160,82,194,160,120,32,102,111,114,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,120,32,111,102,32,88,44,32,105,116,32,105,115,32>>,{em,[],[<<115,121,109,109,101,116,114,105,99>>]},<<32,105,102,32,120,194,160,82,194,160,121,32,105,109,112,108,105,101,115,32,116,104,97,116,32,121,194,160,82,194,160,120,44,32,97,110,100,32,105,116,32,105,115,32>>,{em,[],[<<116,114,97,110,115,105,116,105,118,101>>]},<<32,105,102,32,120,194,160,82,194,160,121,32,97,110,100,32,121,194,160,82,194,160,122,32,105,109,112,108,121,32,116,104,97,116,32,120,194,160,82,194,160,122,46>>]}]},{li,[],[{p,[],[<<65,32>>,{a,[{id,<<102,117,110,99,116,105,111,110>>}],[]},{em,[],[<<102,117,110,99,116,105,111,110>>]},<<32,70,32,105,115,32,97,32,114,101,108,97,116,105,111,110,44,32,97,32,115,117,98,115,101,116,32,111,102,32,88,194,160,195,151,194,160,89,44,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,70,32,105,115,32,101,113,117,97,108,32,116,111,32,88,32,97,110,100,32,115,117,99,104,32,116,104,97,116,32,102,111,114,32,101,118,101,114,121,32,120,32,105,110,32,88,32,116,104,101,114,101,32,105,115,32,97,32,117,110,105,113,117,101,32,101,108,101,109,101,110,116,32,121,32,105,110,32,89,32,119,105,116,104,32,40,120,44,194,160,121,41,32,105,110,32,70,46,32,84,104,101,32,108,97,116,116,101,114,32,99,111,110,100,105,116,105,111,110,32,99,97,110,32,98,101,32,102,111,114,109,117,108,97,116,101,100,32,97,115,32,102,111,108,108,111,119,115,58,32,105,102,32,120,194,160,70,194,160,121,32,97,110,100,32,120,194,160,70,194,160,122,44,32,116,104,101,110,32,121,194,160,61,194,160,122,46,32,73,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,105,116,32,105,115,32,110,111,116,32,114,101,113,117,105,114,101,100,32,116,104,97,116,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,70,32,105,115,32,101,113,117,97,108,32,116,111,32,88,32,102,111,114,32,97,32,114,101,108,97,116,105,111,110,32,116,111,32,98,101,32,99,111,110,115,105,100,101,114,101,100,32,97,32,102,117,110,99,116,105,111,110,46>>]},{p,[],[<<73,110,115,116,101,97,100,32,111,102,32,119,114,105,116,105,110,103,32,40,120,44,194,160,121,41,194,160,105,110,194,160,70,32,111,114,32,120,194,160,70,194,160,121,44,32,119,101,32,119,114,105,116,101,32,70,40,120,41,194,160,61,194,160,121,32,119,104,101,110,32,70,32,105,115,32,97,32,102,117,110,99,116,105,111,110,44,32,97,110,100,32,115,97,121,32,116,104,97,116,32,70,32,109,97,112,115,32,120,32,111,110,116,111,32,121,44,32,111,114,32,116,104,97,116,32,116,104,101,32,118,97,108,117,101,32,111,102,32,70,32,97,116,32,120,32,105,115,32,121,46>>]},{p,[],[<<65,115,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,114,101,108,97,116,105,111,110,115,44,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,115,32,111,102,32,116,104,101,32,108,97,115,116,32,105,116,101,109,32,40,100,111,109,97,105,110,44,32,114,97,110,103,101,44,32,97,110,100,32,115,111,32,111,110,41,32,97,112,112,108,121,32,116,111,32,102,117,110,99,116,105,111,110,115,32,97,115,32,119,101,108,108,46>>]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,118,101,114,115,101,32,111,102,32,97,32,102,117,110,99,116,105,111,110,32,70,32,105,115,32,97,32,102,117,110,99,116,105,111,110,32,70,39,44,32,116,104,101,110,32,70,39,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{a,[{id,<<105,110,118,101,114,115,101>>}],[]},{em,[],[<<105,110,118,101,114,115,101>>]},<<32,111,102,32,70,46>>]},{p,[],[<<84,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,116,119,111,32,102,117,110,99,116,105,111,110,115,32,70,49,32,97,110,100,32,70,50,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{a,[{id,<<99,111,109,112,111,115,105,116,101>>}],[]},{em,[],[<<99,111,109,112,111,115,105,116,101>>]},<<32,111,102,32,70,49,32,97,110,100,32,70,50,32,105,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,70,49,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,70,50,46>>]}]},{li,[],[{p,[],[<<83,111,109,101,116,105,109,101,115,44,32,119,104,101,110,32,116,104,101,32,114,97,110,103,101,32,111,102,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,109,111,114,101,32,105,109,112,111,114,116,97,110,116,32,116,104,97,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,116,115,101,108,102,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,97,32>>,{em,[],[<<102,97,109,105,108,121>>]},<<46>>]},{p,[],[<<84,104,101,32,100,111,109,97,105,110,32,111,102,32,97,32,102,97,109,105,108,121,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{em,[],[<<105,110,100,101,120,32,115,101,116>>]},<<44,32,97,110,100,32,116,104,101,32,114,97,110,103,101,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{em,[],[<<105,110,100,101,120,101,100,32,115,101,116>>]},<<46>>]},{p,[],[<<73,102,32,120,32,105,115,32,97,32,102,97,109,105,108,121,32,102,114,111,109,32,73,32,116,111,32,88,44,32,116,104,101,110,32,120,91,105,93,32,100,101,110,111,116,101,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,97,116,32,105,110,100,101,120,32,105,46,32,84,104,101,32,110,111,116,97,116,105,111,110,32,34,97,32,102,97,109,105,108,121,32,105,110,32,88,34,32,105,115,32,117,115,101,100,32,102,111,114,32,115,117,99,104,32,97,32,102,97,109,105,108,121,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,105,110,100,101,120,101,100,32,115,101,116,32,105,115,32,97,32,115,101,116,32,111,102,32,115,117,98,115,101,116,115,32,111,102,32,97,32,115,101,116,32,88,44,32,119,101,32,99,97,108,108,32,120,32,97,32>>,{a,[{id,<<102,97,109,105,108,121>>}],[]},{em,[],[<<102,97,109,105,108,121,32,111,102,32,115,117,98,115,101,116,115>>]},<<32,111,102,32,88,46>>]},{p,[],[<<73,102,32,120,32,105,115,32,97,32,102,97,109,105,108,121,32,111,102,32,115,117,98,115,101,116,115,32,111,102,32,88,44,32,116,104,101,32,117,110,105,111,110,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,120,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{em,[],[<<117,110,105,111,110,32,111,102,32,116,104,101,32,102,97,109,105,108,121>>]},<<32,120,46>>]},{p,[],[<<73,102,32,120,32,105,115,32,110,111,110,45,101,109,112,116,121,32,40,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,110,111,110,45,101,109,112,116,121,41,44,32,116,104,101,32>>,{em,[],[<<105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32,116,104,101,32,102,97,109,105,108,121>>]},<<32,120,32,105,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,120,46>>]},{p,[],[<<73,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,116,104,101,32,111,110,108,121,32,102,97,109,105,108,105,101,115,32,116,104,97,116,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,97,114,101,32,102,97,109,105,108,105,101,115,32,111,102,32,115,117,98,115,101,116,115,32,111,102,32,115,111,109,101,32,115,101,116,32,88,59,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,116,104,101,32,119,111,114,100,32,34,102,97,109,105,108,121,34,32,105,115,32,117,115,101,100,32,102,111,114,32,115,117,99,104,32,102,97,109,105,108,105,101,115,32,111,102,32,115,117,98,115,101,116,115,46>>]}]},{li,[],[{p,[],[<<65,32>>,{a,[{id,<<112,97,114,116,105,116,105,111,110>>}],[]},{em,[],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32,97,32,115,101,116,32,88,32,105,115,32,97,32,99,111,108,108,101,99,116,105,111,110,32,83,32,111,102,32,110,111,110,45,101,109,112,116,121,32,115,117,98,115,101,116,115,32,111,102,32,88,32,119,104,111,115,101,32,117,110,105,111,110,32,105,115,32,88,32,97,110,100,32,119,104,111,115,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,112,97,105,114,119,105,115,101,32,100,105,115,106,111,105,110,116,46>>]},{p,[],[<<65,32,114,101,108,97,116,105,111,110,32,105,110,32,97,32,115,101,116,32,105,115,32,97,110,32>>,{em,[],[<<101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110>>]},<<32,105,102,32,105,116,32,105,115,32,114,101,102,108,101,120,105,118,101,44,32,115,121,109,109,101,116,114,105,99,44,32,97,110,100,32,116,114,97,110,115,105,116,105,118,101,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,110,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,97,110,100,32,120,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,88,44,32,116,104,101,32>>,{a,[{id,<<101,113,117,105,118,97,108,101,110,99,101,95,99,108,97,115,115>>}],[]},{em,[],[<<101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115>>]},<<32,111,102,32,120,32,119,105,116,104,32,114,101,115,112,101,99,116,32,116,111,32,82,32,105,115,32,116,104,101,32,115,101,116,32,111,102,32,97,108,108,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,121,32,111,102,32,88,32,102,111,114,32,119,104,105,99,104,32,120,194,160,82,194,160,121,32,104,111,108,100,115,46,32,84,104,101,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,101,115,32,99,111,110,115,116,105,116,117,116,101,32,97,32,112,97,114,116,105,116,105,111,110,105,110,103,32,111,102,32,88,46,32,67,111,110,118,101,114,115,101,108,121,44,32,105,102,32,67,32,105,115,32,97,32,112,97,114,116,105,116,105,111,110,32,111,102,32,88,44,32,116,104,101,32,114,101,108,97,116,105,111,110,32,116,104,97,116,32,104,111,108,100,115,32,102,111,114,32,97,110,121,32,116,119,111,32,101,108,101,109,101,110,116,115,32,111,102,32,88,32,105,102,32,116,104,101,121,32,98,101,108,111,110,103,32,116,111,32,116,104,101,32,115,97,109,101,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,44,32,105,115,32,97,110,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,100,117,99,101,100,32,98,121,32,116,104,101,32,112,97,114,116,105,116,105,111,110,32,67,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,110,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,116,104,101,32>>,{a,[{id,<<99,97,110,111,110,105,99,97,108,95,109,97,112>>}],[]},{em,[],[<<99,97,110,111,110,105,99,97,108,32,109,97,112>>]},<<32,105,115,32,116,104,101,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,109,97,112,115,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,111,102,32,88,32,111,110,116,111,32,105,116,115,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,46>>]}]},{li,[],[{p,[],[{a,[{id,<<98,105,110,97,114,121,95,114,101,108,97,116,105,111,110>>}],[]},<<82,101,108,97,116,105,111,110,115,32,97,115,32,100,101,102,105,110,101,100,32,97,98,111,118,101,32,40,97,115,32,115,101,116,115,32,111,102,32,111,114,100,101,114,101,100,32,112,97,105,114,115,41,32,97,114,101,32,102,114,111,109,32,110,111,119,32,111,110,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32>>,{em,[],[<<98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115>>]},<<46>>]},{p,[],[<<87,101,32,99,97,108,108,32,97,32,115,101,116,32,111,102,32,111,114,100,101,114,101,100,32,115,101,116,115,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,32,97,110,32>>,{a,[{id,<<110,95,97,114,121,95,114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<40,110,45,97,114,121,41,32,114,101,108,97,116,105,111,110>>]},<<44,32,97,110,100,32,115,97,121,32,116,104,97,116,32,116,104,101,32,114,101,108,97,116,105,111,110,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,101,32>>,{a,[{id,<<67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116,95,116,117,112,108,101>>}],[]},<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116,32,88,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,88,91,110,93,44,32,119,104,101,114,101,32,120,91,105,93,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,88,91,105,93,44,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<112,114,111,106,101,99,116,105,111,110>>}],[]},{em,[],[<<112,114,111,106,101,99,116,105,111,110>>]},<<32,111,102,32,97,110,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,32,82,32,111,110,116,111,32,99,111,111,114,100,105,110,97,116,101,32,105,32,105,115,32,116,104,101,32,115,101,116,32,123,120,91,105,93,194,160,58,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,105,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,32,105,110,32,82,32,102,111,114,32,115,111,109,101,32,120,91,106,93,194,160,105,110,194,160,88,91,106,93,44,32,49,194,160,60,61,194,160,106,194,160,60,61,194,160,110,32,97,110,100,32,110,111,116,32,105,194,160,61,194,160,106,125,46,32,84,104,101,32,112,114,111,106,101,99,116,105,111,110,115,32,111,102,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,82,32,111,110,116,111,32,116,104,101,32,102,105,114,115,116,32,97,110,100,32,115,101,99,111,110,100,32,99,111,111,114,100,105,110,97,116,101,115,32,97,114,101,32,116,104,101,32,100,111,109,97,105,110,32,97,110,100,32,116,104,101,32,114,97,110,103,101,32,111,102,32,82,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46>>]},{p,[],[<<84,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,99,97,110,32,98,101,32,103,101,110,101,114,97,108,105,122,101,100,32,116,111,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,115,32,97,115,32,102,111,108,108,111,119,115,46,32,76,101,116,32,84,82,32,98,101,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,102,114,111,109,32,88,32,116,111,32,89,91,105,93,32,97,110,100,32,83,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,40,89,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,89,91,110,93,41,32,116,111,32,90,46,32,84,104,101,32>>,{a,[{id,<<116,117,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,84,82,32,97,110,100,32,83,32,105,115,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,84,32,102,114,111,109,32,88,32,116,111,32,90,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,84,194,160,122,32,105,102,32,97,110,100,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,101,120,105,115,116,115,32,97,110,32,101,108,101,109,101,110,116,32,121,91,105,93,32,105,110,32,89,91,105,93,32,102,111,114,32,101,97,99,104,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,32,115,117,99,104,32,116,104,97,116,32,120,194,160,82,91,105,93,194,160,121,91,105,93,32,97,110,100,32,40,121,91,49,93,44,194,160,46,46,46,44,194,160,121,91,110,93,41,194,160,83,194,160,122,46,32,78,111,119,32,108,101,116,32,84,82,32,98,101,32,97,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,102,114,111,109,32,88,91,105,93,32,116,111,32,89,91,105,93,32,97,110,100,32,83,32,97,32,115,117,98,115,101,116,32,111,102,32,88,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,88,91,110,93,46,32,84,104,101,32>>,{a,[{id,<<109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<109,117,108,116,105,112,108,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,84,82,32,97,110,100,32,83,32,105,115,32,100,101,102,105,110,101,100,32,116,111,32,98,101,32,116,104,101,32,115,101,116,32,123,122,194,160,58,32,122,194,160,61,32,40,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,44,32,40,121,91,49,93,44,46,46,46,44,121,91,110,93,41,41,32,102,111,114,32,115,111,109,101,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,194,160,105,110,194,160,83,32,97,110,100,32,102,111,114,32,115,111,109,101,32,40,120,91,105,93,44,194,160,121,91,105,93,41,32,105,110,32,82,91,105,93,44,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,125,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<110,97,116,117,114,97,108,95,106,111,105,110>>}],[]},{em,[],[<<110,97,116,117,114,97,108,32,106,111,105,110>>]},<<32,111,102,32,97,110,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,32,82,32,97,110,100,32,97,110,32,109,45,97,114,121,32,114,101,108,97,116,105,111,110,32,83,32,111,110,32,99,111,111,114,100,105,110,97,116,101,32,105,32,97,110,100,32,106,32,105,115,32,100,101,102,105,110,101,100,32,116,111,32,98,101,32,116,104,101,32,115,101,116,32,123,122,194,160,58,32,122,194,160,61,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,44,194,160,32,121,91,49,93,44,194,160,46,46,46,44,194,160,121,91,106,45,49,93,44,194,160,121,91,106,43,49,93,44,194,160,46,46,46,44,194,160,121,91,109,93,41,32,102,111,114,32,115,111,109,101,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,194,160,105,110,194,160,82,32,97,110,100,32,102,111,114,32,115,111,109,101,32,40,121,91,49,93,44,194,160,46,46,46,44,194,160,121,91,109,93,41,194,160,105,110,194,160,83,32,115,117,99,104,32,116,104,97,116,32,120,91,105,93,194,160,61,194,160,121,91,106,93,125,46>>]}]},{li,[],[{p,[],[{a,[{id,<<115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>}],[]},<<84,104,101,32,115,101,116,115,32,114,101,99,111,103,110,105,122,101,100,32,98,121,32,116,104,105,115,32,109,111,100,117,108,101,32,97,114,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,114,101,108,97,116,105,111,110,32,83,101,116,115,44,32,119,104,105,99,104,32,105,115,32,100,101,102,105,110,101,100,32,97,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,115,101,116,32,115,117,99,104,32,116,104,97,116,58>>]},{ul,[],[{li,[],[{p,[],[<<70,111,114,32,101,118,101,114,121,32,97,116,111,109,32,84,44,32,101,120,99,101,112,116,32,39,95,39,44,32,97,110,100,32,102,111,114,32,101,118,101,114,121,32,116,101,114,109,32,88,44,32,40,84,44,194,160,88,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40>>,{em,[],[<<97,116,111,109,105,99,32,115,101,116,115>>]},<<41,46>>]}]},{li,[],[{p,[],[<<40,91,39,95,39,93,44,194,160,91,93,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40,116,104,101,32>>,{em,[],[<<117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116>>]},<<41,46>>]}]},{li,[],[{p,[],[<<70,111,114,32,101,118,101,114,121,32,116,117,112,108,101,32,84,194,160,61,32,123,84,91,49,93,44,194,160,46,46,46,44,194,160,84,91,110,93,125,32,97,110,100,32,102,111,114,32,101,118,101,114,121,32,116,117,112,108,101,32,88,194,160,61,32,123,88,91,49,93,44,194,160,46,46,46,44,194,160,88,91,110,93,125,44,32,105,102,32,40,84,91,105,93,44,194,160,88,91,105,93,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,102,111,114,32,101,118,101,114,121,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,44,32,116,104,101,110,32,40,84,44,194,160,88,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40>>,{em,[],[<<111,114,100,101,114,101,100,32,115,101,116,115>>]},<<41,46>>]}]},{li,[],[{p,[],[<<70,111,114,32,101,118,101,114,121,32,116,101,114,109,32,84,44,32,105,102,32,88,32,105,115,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32,111,114,32,97,32,110,111,110,45,101,109,112,116,121,32,115,111,114,116,101,100,32,108,105,115,116,32,91,88,91,49,93,44,194,160,46,46,46,44,194,160,88,91,110,93,93,32,119,105,116,104,111,117,116,32,100,117,112,108,105,99,97,116,101,115,32,115,117,99,104,32,116,104,97,116,32,40,84,44,194,160,88,91,105,93,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,102,111,114,32,101,118,101,114,121,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,44,32,116,104,101,110,32,40,91,84,93,44,194,160,88,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40>>,{em,[],[<<116,121,112,101,100,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115>>]},<<41,46>>]}]}]},{p,[],[<<65,110,32>>,{a,[{id,<<101,120,116,101,114,110,97,108,95,115,101,116>>}],[]},{em,[],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,83,101,116,115,46>>]},{p,[],[<<65,32>>,{a,[{id,<<116,121,112,101>>}],[]},{em,[],[<<116,121,112,101>>]},<<32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,83,101,116,115,46>>]},{p,[],[<<73,102,32,83,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,40,84,44,194,160,88,41,32,111,102,32,83,101,116,115,44,32,116,104,101,110,32,84,32,105,115,32,97,32>>,{a,[{id,<<118,97,108,105,100,95,116,121,112,101>>}],[]},{em,[],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,111,102,32,88,44,32,84,32,105,115,32,116,104,101,32,116,121,112,101,32,111,102,32,83,44,32,97,110,100,32,88,32,105,115,32,116,104,101,32,101,120,116,101,114,110,97,108,32,115,101,116,32,111,102,32,83,46,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,116,101,114,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,116,101,114,109,47,50>>]}]},<<32,99,114,101,97,116,101,115,32,97,32,115,101,116,32,102,114,111,109,32,97,32,116,121,112,101,32,97,110,100,32,97,110,32,69,114,108,97,110,103,32,116,101,114,109,32,116,117,114,110,101,100,32,105,110,116,111,32,97,110,32,101,120,116,101,114,110,97,108,32,115,101,116,46>>]},{p,[],[<<84,104,101,32,115,101,116,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,83,101,116,115,32,97,114,101,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,102,117,110,99,116,105,111,110,32,83,101,116,32,102,114,111,109,32,83,101,116,115,32,116,111,32,69,114,108,97,110,103,32,116,101,114,109,115,32,97,110,100,32,115,101,116,115,32,111,102,32,69,114,108,97,110,103,32,116,101,114,109,115,58>>]},{ul,[],[{li,[],[<<83,101,116,40,84,44,84,101,114,109,41,194,160,61,32,84,101,114,109,44,32,119,104,101,114,101,32,84,32,105,115,32,97,110,32,97,116,111,109>>]},{li,[],[<<83,101,116,40,123,84,91,49,93,44,194,160,46,46,46,44,194,160,84,91,110,93,125,44,194,160,123,88,91,49,93,44,194,160,46,46,46,44,32,194,160,88,91,110,93,125,41,194,160,61,32,40,83,101,116,40,84,91,49,93,44,194,160,88,91,49,93,41,44,194,160,46,46,46,44,194,160,32,83,101,116,40,84,91,110,93,44,194,160,88,91,110,93,41,41>>]},{li,[],[<<83,101,116,40,91,84,93,44,194,160,91,88,91,49,93,44,194,160,46,46,46,44,194,160,88,91,110,93,93,41,194,160,61,32,123,83,101,116,40,84,44,194,160,88,91,49,93,41,44,194,160,46,46,46,44,194,160,83,101,116,40,84,44,194,160,88,91,110,93,41,125>>]},{li,[],[<<83,101,116,40,91,84,93,44,194,160,91,93,41,194,160,61,32,123,125>>]}]},{p,[],[<<87,104,101,110,32,116,104,101,114,101,32,105,115,32,110,111,32,114,105,115,107,32,111,102,32,99,111,110,102,117,115,105,111,110,44,32,101,108,101,109,101,110,116,115,32,111,102,32,83,101,116,115,32,97,114,101,32,105,100,101,110,116,105,102,105,101,100,32,119,105,116,104,32,116,104,101,32,115,101,116,115,32,116,104,101,121,32,114,101,112,114,101,115,101,110,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,85,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,105,111,110,47,50>>]}]},<<32,119,105,116,104,32,83,49,32,97,110,100,32,83,50,32,97,115,32,97,114,103,117,109,101,110,116,115,44,32,116,104,101,110,32,85,32,105,115,32,115,97,105,100,32,116,111,32,98,101,32,116,104,101,32,117,110,105,111,110,32,111,102,32,83,49,32,97,110,100,32,83,50,46,32,65,32,109,111,114,101,32,112,114,101,99,105,115,101,32,102,111,114,109,117,108,97,116,105,111,110,32,105,115,32,116,104,97,116,32,83,101,116,40,85,41,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32,83,101,116,40,83,49,41,32,97,110,100,32,83,101,116,40,83,50,41,46>>]}]}]},{p,[],[<<84,104,101,32,116,121,112,101,115,32,97,114,101,32,117,115,101,100,32,116,111,32,105,109,112,108,101,109,101,110,116,32,116,104,101,32,118,97,114,105,111,117,115,32,99,111,110,100,105,116,105,111,110,115,32,116,104,97,116,32,115,101,116,115,32,109,117,115,116,32,102,117,108,102,105,108,108,46,32,65,115,32,97,110,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,116,119,111,32,115,101,116,115,32,82,32,97,110,100,32,83,44,32,97,110,100,32,114,101,99,97,108,108,32,116,104,97,116,32,116,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,82,32,97,110,100,32,83,32,105,115,32,100,101,102,105,110,101,100,32,105,102,32,82,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,116,111,32,89,32,97,110,100,32,83,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,89,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>]}]},<<44,32,99,104,101,99,107,115,32,116,104,97,116,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,114,101,112,114,101,115,101,110,116,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,98,121,32,109,97,116,99,104,105,110,103,32,91,123,65,44,66,125,93,32,97,103,97,105,110,115,116,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,65,114,103,49,32,115,97,121,41,44,32,97,110,100,32,91,123,67,44,68,125,93,32,97,103,97,105,110,115,116,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,40,65,114,103,50,32,115,97,121,41,46,32,84,104,101,32,102,97,99,116,32,116,104,97,116,32,91,123,65,44,66,125,93,32,109,97,116,99,104,101,115,32,116,104,101,32,116,121,112,101,32,111,102,32,65,114,103,49,32,105,115,32,116,111,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,65,114,103,49,32,114,101,112,114,101,115,101,110,116,105,110,103,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,88,32,116,111,32,89,44,32,119,104,101,114,101,32,88,32,105,115,32,100,101,102,105,110,101,100,32,97,115,32,97,108,108,32,115,101,116,115,32,83,101,116,40,120,41,32,102,111,114,32,115,111,109,101,32,101,108,101,109,101,110,116,32,120,32,105,110,32,83,101,116,115,32,116,104,101,32,116,121,112,101,32,111,102,32,119,104,105,99,104,32,105,115,32,65,44,32,97,110,100,32,115,105,109,105,108,97,114,108,121,32,102,111,114,32,89,46,32,73,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,65,114,103,50,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,87,32,116,111,32,90,46,32,70,105,110,97,108,108,121,32,105,116,32,105,115,32,99,104,101,99,107,101,100,32,116,104,97,116,32,66,32,109,97,116,99,104,101,115,32,67,44,32,119,104,105,99,104,32,105,115,32,115,117,102,102,105,99,105,101,110,116,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,87,32,105,115,32,101,113,117,97,108,32,116,111,32,89,46,32,84,104,101,32,117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116,32,105,115,32,104,97,110,100,108,101,100,32,115,101,112,97,114,97,116,101,108,121,58,32,105,116,115,32,116,121,112,101,44,32,91,39,95,39,93,44,32,109,97,116,99,104,101,115,32,116,104,101,32,116,121,112,101,32,111,102,32,97,110,121,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46>>]},{p,[],[<<65,32,102,101,119,32,102,117,110,99,116,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,32,40>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,114,101,115,116,114,105,99,116,105,111,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,114,101,115,116,114,105,99,116,105,111,110,47,51>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,97,114,116,105,116,105,111,110,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,114,111,106,101,99,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,106,101,99,116,105,111,110,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,115,116,114,105,99,116,105,111,110,47,51>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,117,98,115,116,105,116,117,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,117,98,115,116,105,116,117,116,105,111,110,47,50>>]}]},<<41,32,97,99,99,101,112,116,32,97,110,32,69,114,108,97,110,103,32,102,117,110,99,116,105,111,110,32,97,115,32,97,32,109,101,97,110,115,32,116,111,32,109,111,100,105,102,121,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,97,32,103,105,118,101,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46,32>>,{a,[{id,<<115,101,116,95,102,117,110>>}],[]},<<83,117,99,104,32,97,32,102,117,110,99,116,105,111,110,44,32,99,97,108,108,101,100,32,83,101,116,70,117,110,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,102,117,110,99,116,105,111,110,97,108,32,111,98,106,101,99,116,32,40,102,117,110,41,44,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,194,160,70,117,110,125>>]},<<44,32,111,114,32,97,110,32,105,110,116,101,103,101,114,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,83,101,116,70,117,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,102,117,110,44,32,116,104,101,32,102,117,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,103,105,118,101,110,32,115,101,116,32,97,110,100,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,115,115,117,109,101,100,32,116,111,32,98,101,32,97,32,115,101,116,46>>]}]},{li,[],[{p,[],[<<73,102,32,83,101,116,70,117,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,32,70,117,110,125>>]},<<44,32,70,117,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32,101,120,116,101,114,110,97,108,32,115,101,116,32,111,102,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,103,105,118,101,110,32,115,101,116,32,97,110,100,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,115,115,117,109,101,100,32,116,111,32,98,101,32,97,110,32,101,120,116,101,114,110,97,108,32,115,101,116,46,32,83,101,108,101,99,116,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,97,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,97,115,32,101,120,116,101,114,110,97,108,32,115,101,116,115,32,97,110,100,32,97,115,115,101,109,98,108,105,110,103,32,97,32,110,101,119,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,102,114,111,109,32,97,32,108,105,115,116,32,111,102,32,101,120,116,101,114,110,97,108,32,115,101,116,115,32,105,115,32,105,110,32,116,104,101,32,112,114,101,115,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,109,111,100,105,102,121,105,110,103,32,101,97,99,104,32,101,108,101,109,101,110,116,32,97,115,32,97,32,115,101,116,46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,111,112,116,105,109,105,122,97,116,105,111,110,32,99,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,119,104,101,110,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,97,114,101,32,97,116,111,109,105,99,32,111,114,32,111,114,100,101,114,101,100,32,115,101,116,115,46,32,73,116,32,109,117,115,116,32,97,108,115,111,32,98,101,32,116,104,101,32,99,97,115,101,32,116,104,97,116,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,101,108,101,109,101,110,116,115,32,109,97,116,99,104,101,115,32,115,111,109,101,32,99,108,97,117,115,101,32,111,102,32,70,117,110,32,40,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,99,114,101,97,116,101,100,32,115,101,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32,70,117,110,32,116,111,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,103,105,118,101,110,32,115,101,116,41,44,32,97,110,100,32,116,104,97,116,32,70,117,110,32,100,111,101,115,32,110,111,116,104,105,110,103,32,98,117,116,32,115,101,108,101,99,116,105,110,103,44,32,100,117,112,108,105,99,97,116,105,110,103,44,32,111,114,32,114,101,97,114,114,97,110,103,105,110,103,32,112,97,114,116,115,32,111,102,32,116,104,101,32,101,108,101,109,101,110,116,115,46>>]}]},{li,[],[{p,[],[<<83,112,101,99,105,102,121,105,110,103,32,97,32,83,101,116,70,117,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,32,73,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,88,41,194,160,45,62,32,101,108,101,109,101,110,116,40,73,44,194,160,88,41,194,160,101,110,100,125>>]},<<44,32,98,117,116,32,105,115,32,116,111,32,98,101,32,112,114,101,102,101,114,114,101,100,44,32,97,115,32,105,116,32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,104,97,110,100,108,101,32,116,104,105,115,32,99,97,115,101,32,101,118,101,110,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,108,121,46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,115,32,111,102,32,83,101,116,70,117,110,115,58>>]},{pre,[],[{code,[],[<<102,117,110,32,115,111,102,115,58,117,110,105,111,110,47,49,10,102,117,110,40,83,41,32,45,62,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,49,44,32,83,41,32,101,110,100,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,65,41,32,45,62,32,65,32,101,110,100,125,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,65,44,95,44,67,125,41,32,45,62,32,123,67,44,65,125,32,101,110,100,125,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,95,44,123,95,44,67,125,125,41,32,45,62,32,67,32,101,110,100,125,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,95,44,123,95,44,123,95,44,69,125,61,67,125,125,41,32,45,62,32,123,69,44,123,69,44,67,125,125,32,101,110,100,125,10,50>>]}]},{p,[],[<<84,104,101,32,111,114,100,101,114,32,105,110,32,119,104,105,99,104,32,97,32,83,101,116,70,117,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,97,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,101,100,44,32,97,110,100,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,46>>]},{p,[],[<<84,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,32,105,115,32,100,111,109,105,110,97,116,101,100,32,98,121,32,116,104,101,32,116,105,109,101,32,105,116,32,116,97,107,101,115,32,116,111,32,115,111,114,116,32,108,105,115,116,115,46,32,87,104,101,110,32,110,111,32,115,111,114,116,105,110,103,32,105,115,32,110,101,101,100,101,100,44,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,105,115,32,105,110,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,112,114,111,112,111,114,116,105,111,110,97,108,32,116,111,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,115,105,122,101,115,32,111,102,32,116,104,101,32,105,110,112,117,116,32,97,114,103,117,109,101,110,116,115,32,97,110,100,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,46,32,65,32,102,101,119,32,102,117,110,99,116,105,111,110,115,32,101,120,101,99,117,116,101,32,105,110,32,99,111,110,115,116,97,110,116,32,116,105,109,101,58,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,115,95,101,109,112,116,121,95,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,101,109,112,116,121,95,115,101,116,47,49>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,115,95,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,115,101,116,47,49>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,115,95,115,111,102,115,95,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,115,111,102,115,95,115,101,116,47,49>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,111,95,101,120,116,101,114,110,97,108,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,111,95,101,120,116,101,114,110,97,108,47,49>>]}]},<<32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,121,112,101,47,49>>]}]},<<46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,32,101,120,105,116,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<44,32>>,{code,[],[<<98,97,100,95,102,117,110,99,116,105,111,110>>]},<<44,32,111,114,32>>,{code,[],[<<116,121,112,101,95,109,105,115,109,97,116,99,104>>]},<<32,109,101,115,115,97,103,101,32,119,104,101,110,32,103,105,118,101,110,32,98,97,100,108,121,32,102,111,114,109,101,100,32,97,114,103,117,109,101,110,116,115,32,111,114,32,115,101,116,115,32,116,104,101,32,116,121,112,101,115,32,111,102,32,119,104,105,99,104,32,97,114,101,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,46>>]},{p,[],[<<87,104,101,110,32,99,111,109,112,97,114,105,110,103,32,101,120,116,101,114,110,97,108,32,115,101,116,115,44,32,111,112,101,114,97,116,111,114,32>>,{code,[],[<<61,61,47,50>>]},<<32,105,115,32,117,115,101,100,46>>]},{h2,[],[<<83,101,101,32,65,108,115,111>>]},{p,[],[{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,105,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,99,116,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,105,103,114,97,112,104>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,103,114,97,112,104,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,111,114,100,100,105,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,114,100,100,105,99,116,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,111,114,100,115,101,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,114,100,115,101,116,115,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,116,115,40,51,41>>]}]}]}]},#{name => <<115,111,102,115>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,115,111,102,115,46,120,109,108],types => #{{a_function,0} => {attribute,120,type,{a_function,{user_type,120,relation,[]},[]}},{a_set,0} => {attribute,124,opaque,{a_set,{type,124,record,[{atom,124,'Set'}]},[]}},{anyset,0} => {attribute,117,type,{anyset,{type,117,union,[{user_type,117,ordset,[]},{user_type,117,a_set,[]}]},[]}},{binary_relation,0} => {attribute,118,type,{binary_relation,{user_type,118,relation,[]},[]}},{external_set,0} => {attribute,119,type,{external_set,{type,119,term,[]},[]}},{family,0} => {attribute,121,type,{family,{user_type,121,a_function,[]},[]}},{ordset,0} => {attribute,122,opaque,{ordset,{type,122,record,[{atom,122,'OrdSet'}]},[]}},{relation,0} => {attribute,123,type,{relation,{user_type,123,a_set,[]},[]}},{set_fun,0} => {attribute,126,type,{set_fun,{type,126,union,[{type,126,pos_integer,[]},{type,127,tuple,[{atom,127,external},{type,127,'fun',[{type,127,product,[{user_type,127,external_set,[]}]},{user_type,127,external_set,[]}]}]},{type,128,'fun',[{type,128,product,[{user_type,128,anyset,[]}]},{user_type,128,anyset,[]}]}]},[]}},{set_of_sets,0} => {attribute,125,type,{set_of_sets,{user_type,125,a_set,[]},[]}},{spec_fun,0} => {attribute,129,type,{spec_fun,{type,129,union,[{type,129,tuple,[{atom,129,external},{type,129,'fun',[{type,129,product,[{user_type,129,external_set,[]}]},{type,129,boolean,[]}]}]},{type,130,'fun',[{type,130,product,[{user_type,130,anyset,[]}]},{type,130,boolean,[]}]}]},[]}},{tuple_of,1} => {attribute,133,type,{tuple_of,{type,133,tuple,any},[{var,133,'_T'}]}},{type,0} => {attribute,131,type,{type,{type,131,term,[]},[]}}}},[{{function,a_function,2},[{file,[115,111,102,115,46,101,114,108]},{location,277}],[<<97,95,102,117,110,99,116,105,111,110,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,53,56>>,equiv => {function,a_function,1},signature => [{attribute,277,spec,{{a_function,2},[{type,277,bounded_fun,[{type,277,'fun',[{type,277,product,[{var,277,'Tuples'},{var,277,'Type'}]},{var,277,'Function'}]},[{type,278,constraint,[{atom,278,is_subtype},[{var,278,'Function'},{user_type,278,a_function,[]}]]},{type,279,constraint,[{atom,279,is_subtype},[{var,279,'Tuples'},{type,279,list,[{type,279,tuple,any}]}]]},{type,280,constraint,[{atom,280,is_subtype},[{var,280,'Type'},{user_type,280,type,[]}]]}]]}]}}]}},{{function,a_function,1},[{file,[115,111,102,115,46,101,114,108]},{location,265}],[<<97,95,102,117,110,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<46,32>>,{code,[],[<<97,95,102,117,110,99,116,105,111,110,40,70,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,70,44,194,160,84,41>>]},<<32,105,102,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,102,117,110,99,116,105,111,110,46,32,73,102,32,110,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<91,123,97,116,111,109,44,194,160,97,116,111,109,125,93>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,102,117,110,99,116,105,111,110,32,116,121,112,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,53,56>>,signature => [{attribute,265,spec,{{a_function,1},[{type,265,bounded_fun,[{type,265,'fun',[{type,265,product,[{var,265,'Tuples'}]},{var,265,'Function'}]},[{type,266,constraint,[{atom,266,is_subtype},[{var,266,'Function'},{user_type,266,a_function,[]}]]},{type,267,constraint,[{atom,267,is_subtype},[{var,267,'Tuples'},{type,267,list,[{type,267,tuple,any}]}]]}]]}]}}]}},{{function,canonical_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,577}],[<<99,97,110,111,110,105,99,97,108,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,40,69,44,194,160,83,101,116,41,32,115,117,99,104,32,116,104,97,116,32,83,101,116,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,97,110,100,32,69,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,46,32,73,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32,97,32,115,101,116,32,88,32,97,110,100,32,82,32,105,115,32,116,104,101,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,32,88,32,105,110,100,117,99,101,100,32,98,121,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<44,32,116,104,101,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,114,101,108,97,116,105,111,110,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,97,110,111,110,105,99,97,108,95,109,97,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,97,110,111,110,105,99,97,108,32,109,97,112>>]},<<32,102,114,111,109,32,88,32,111,110,116,111,32,116,104,101,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,101,115,32,119,105,116,104,32,114,101,115,112,101,99,116,32,116,111,32,82,46>>]},{pre,[],[{code,[],[<<49,62,32,83,115,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,97,44,98,93,44,91,98,44,99,93,93,41,44,10,67,82,32,61,32,115,111,102,115,58,99,97,110,111,110,105,99,97,108,95,114,101,108,97,116,105,111,110,40,83,115,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,67,82,41,46,10,91,123,97,44,91,97,44,98,93,125,44,123,98,44,91,97,44,98,93,125,44,123,98,44,91,98,44,99,93,125,44,123,99,44,91,98,44,99,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,55,50>>,signature => [{attribute,577,spec,{{canonical_relation,1},[{type,577,bounded_fun,[{type,577,'fun',[{type,577,product,[{var,577,'SetOfSets'}]},{var,577,'BinRel'}]},[{type,578,constraint,[{atom,578,is_subtype},[{var,578,'BinRel'},{user_type,578,binary_relation,[]}]]},{type,579,constraint,[{atom,579,is_subtype},[{var,579,'SetOfSets'},{user_type,579,set_of_sets,[]}]]}]]}]}}]}},{{function,composite,2},[{file,[115,111,102,115,46,101,114,108]},{location,844}],[<<99,111,109,112,111,115,105,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,111,109,112,111,115,105,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,109,112,111,115,105,116,101>>]},<<32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32>>,{code,[],[<<70,117,110,99,116,105,111,110,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,117,110,99,116,105,111,110,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,97,95,102,117,110,99,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,44,123,99,44,50,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,97,95,102,117,110,99,116,105,111,110,40,91,123,49,44,120,125,44,123,50,44,121,125,44,123,51,44,122,125,93,41,44,10,70,32,61,32,115,111,102,115,58,99,111,109,112,111,115,105,116,101,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,120,125,44,123,98,44,121,125,44,123,99,44,121,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,57,50>>,signature => [{attribute,844,spec,{{composite,2},[{type,844,bounded_fun,[{type,844,'fun',[{type,844,product,[{var,844,'Function1'},{var,844,'Function2'}]},{var,844,'Function3'}]},[{type,845,constraint,[{atom,845,is_subtype},[{var,845,'Function1'},{user_type,845,a_function,[]}]]},{type,846,constraint,[{atom,846,is_subtype},[{var,846,'Function2'},{user_type,846,a_function,[]}]]},{type,847,constraint,[{atom,847,is_subtype},[{var,847,'Function3'},{user_type,847,a_function,[]}]]}]]}]}}]}},{{function,constant_function,2},[{file,[115,111,102,115,46,101,114,108]},{location,465}],[<<99,111,110,115,116,97,110,116,95,102,117,110,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<32,116,104,97,116,32,109,97,112,115,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,115,101,116,32>>,{code,[],[<<83,101,116>>]},<<32,111,110,116,111,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,115,101,116,40,91,97,44,98,93,41,44,10,69,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,49,41,44,10,82,32,61,32,115,111,102,115,58,99,111,110,115,116,97,110,116,95,102,117,110,99,116,105,111,110,40,83,44,32,69,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,41,46,10,91,123,97,44,49,125,44,123,98,44,49,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,48,56>>,signature => [{attribute,465,spec,{{constant_function,2},[{type,465,bounded_fun,[{type,465,'fun',[{type,465,product,[{var,465,'Set'},{var,465,'AnySet'}]},{var,465,'Function'}]},[{type,466,constraint,[{atom,466,is_subtype},[{var,466,'AnySet'},{user_type,466,anyset,[]}]]},{type,467,constraint,[{atom,467,is_subtype},[{var,467,'Function'},{user_type,467,a_function,[]}]]},{type,468,constraint,[{atom,468,is_subtype},[{var,468,'Set'},{user_type,468,a_set,[]}]]}]]}]}}]}},{{function,converse,1},[{file,[115,111,102,115,46,101,114,108]},{location,707}],[<<99,111,110,118,101,114,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,111,110,118,101,114,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,110,118,101,114,115,101>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,97,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,99,111,110,118,101,114,115,101,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,97,44,49,125,44,123,97,44,51,125,44,123,98,44,50,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,50,52>>,signature => [{attribute,707,spec,{{converse,1},[{type,707,bounded_fun,[{type,707,'fun',[{type,707,product,[{var,707,'BinRel1'}]},{var,707,'BinRel2'}]},[{type,708,constraint,[{atom,708,is_subtype},[{var,708,'BinRel1'},{user_type,708,binary_relation,[]}]]},{type,709,constraint,[{atom,709,is_subtype},[{var,709,'BinRel2'},{user_type,709,binary_relation,[]}]]}]]}]}}]}},{{function,difference,2},[{file,[115,111,102,115,46,101,114,108]},{location,398}],[<<100,105,102,102,101,114,101,110,99,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,105,102,102,101,114,101,110,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,102,102,101,114,101,110,99,101>>]},<<32,111,102,32,116,104,101,32,115,101,116,115,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,51,56>>,signature => [{attribute,398,spec,{{difference,2},[{type,398,bounded_fun,[{type,398,'fun',[{type,398,product,[{var,398,'Set1'},{var,398,'Set2'}]},{var,398,'Set3'}]},[{type,399,constraint,[{atom,399,is_subtype},[{var,399,'Set1'},{user_type,399,a_set,[]}]]},{type,400,constraint,[{atom,400,is_subtype},[{var,400,'Set2'},{user_type,400,a_set,[]}]]},{type,401,constraint,[{atom,401,is_subtype},[{var,401,'Set3'},{user_type,401,a_set,[]}]]}]]}]}}]}},{{function,digraph_to_family,2},[{file,[115,111,102,115,46,101,114,108]},{location,1520}],[<<100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,52,55>>,equiv => {function,digraph_to_family,1},signature => [{attribute,1520,spec,{{digraph_to_family,2},[{type,1520,bounded_fun,[{type,1520,'fun',[{type,1520,product,[{var,1520,'Graph'},{var,1520,'Type'}]},{var,1520,'Family'}]},[{type,1521,constraint,[{atom,1521,is_subtype},[{var,1521,'Graph'},{remote_type,1521,[{atom,1521,digraph},{atom,1521,graph},[]]}]]},{type,1522,constraint,[{atom,1522,is_subtype},[{var,1522,'Family'},{user_type,1522,family,[]}]]},{type,1523,constraint,[{atom,1523,is_subtype},[{var,1523,'Type'},{user_type,1523,type,[]}]]}]]}]}}]}},{{function,digraph_to_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,1511}],[<<100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,102,114,111,109,32,116,104,101,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,32>>,{code,[],[<<71,114,97,112,104>>]},<<46,32,69,97,99,104,32,118,101,114,116,101,120,32,97,32,111,102,32>>,{code,[],[<<71,114,97,112,104>>]},<<32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,112,97,105,114,32,40,97,44,194,160,123,98,91,49,93,44,194,160,46,46,46,44,194,160,98,91,110,93,125,41,44,32,119,104,101,114,101,32,116,104,101,32,98,91,105,93,58,115,32,97,114,101,32,116,104,101,32,111,117,116,45,110,101,105,103,104,98,111,114,115,32,111,102,32,97,46,32,73,102,32,110,111,32,116,121,112,101,32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32,91,123,97,116,111,109,44,194,160,91,97,116,111,109,93,125,93,32,105,115,32,117,115,101,100,32,97,115,32,116,121,112,101,32,111,102,32,116,104,101,32,102,97,109,105,108,121,46,32,73,116,32,105,115,32,97,115,115,117,109,101,100,32,116,104,97,116,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,118,97,108,105,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,111,102,32,116,104,101,32,101,120,116,101,114,110,97,108,32,115,101,116,32,111,102,32,116,104,101,32,102,97,109,105,108,121,46>>]},{p,[],[<<73,102,32,71,32,105,115,32,97,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,44,32,105,116,32,104,111,108,100,115,32,116,104,97,116,32,116,104,101,32,118,101,114,116,105,99,101,115,32,97,110,100,32,101,100,103,101,115,32,111,102,32,71,32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,118,101,114,116,105,99,101,115,32,97,110,100,32,101,100,103,101,115,32,111,102,32>>,{code,[],[<<102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,40,100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,40,71,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,52,55>>,signature => [{attribute,1511,spec,{{digraph_to_family,1},[{type,1511,bounded_fun,[{type,1511,'fun',[{type,1511,product,[{var,1511,'Graph'}]},{var,1511,'Family'}]},[{type,1512,constraint,[{atom,1512,is_subtype},[{var,1512,'Graph'},{remote_type,1512,[{atom,1512,digraph},{atom,1512,graph},[]]}]]},{type,1513,constraint,[{atom,1513,is_subtype},[{var,1513,'Family'},{user_type,1513,family,[]}]]}]]}]}}]}},{{function,domain,1},[{file,[115,111,102,115,46,101,114,108]},{location,612}],[<<100,111,109,97,105,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,98,125,44,123,50,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,100,111,109,97,105,110,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,49,44,50,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,54,55>>,signature => [{attribute,612,spec,{{domain,1},[{type,612,bounded_fun,[{type,612,'fun',[{type,612,product,[{var,612,'BinRel'}]},{var,612,'Set'}]},[{type,613,constraint,[{atom,613,is_subtype},[{var,613,'BinRel'},{user_type,613,binary_relation,[]}]]},{type,614,constraint,[{atom,614,is_subtype},[{var,614,'Set'},{user_type,614,a_set,[]}]]}]]}]}}]}},{{function,drestriction,2},[{file,[115,111,102,115,46,101,114,108]},{location,833}],[<<100,114,101,115,116,114,105,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,101,116,119,101,101,110,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,97,110,100,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,116,111,32>>,{code,[],[<<83,101,116>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,50,44,52,44,54,93,41,44,10,82,50,32,61,32,115,111,102,115,58,100,114,101,115,116,114,105,99,116,105,111,110,40,82,49,44,32,83,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,97,125,44,123,51,44,99,125,93>>]}]},{p,[],[{code,[],[<<100,114,101,115,116,114,105,99,116,105,111,110,40,82,44,194,160,83,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<100,105,102,102,101,114,101,110,99,101,40,82,44,194,160,114,101,115,116,114,105,99,116,105,111,110,40,82,44,194,160,83,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,56,49>>,signature => [{attribute,833,spec,{{drestriction,2},[{type,833,bounded_fun,[{type,833,'fun',[{type,833,product,[{var,833,'BinRel1'},{var,833,'Set'}]},{var,833,'BinRel2'}]},[{type,834,constraint,[{atom,834,is_subtype},[{var,834,'BinRel1'},{user_type,834,binary_relation,[]}]]},{type,835,constraint,[{atom,835,is_subtype},[{var,835,'BinRel2'},{user_type,835,binary_relation,[]}]]},{type,836,constraint,[{atom,836,is_subtype},[{var,836,'Set'},{user_type,836,a_set,[]}]]}]]}]}}]}},{{function,drestriction,3},[{file,[115,111,102,115,46,101,114,108]},{location,960}],[<<100,114,101,115,116,114,105,99,116,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,100,111,32,110,111,116,32,103,105,118,101,32,97,110,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<83,101,116,50>>]},<<32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,101,116,70,117,110,32,61,32,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,95,65,44,66,44,67,125,41,32,45,62,32,123,66,44,67,125,32,101,110,100,125,44,10,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,97,97,44,49,125,44,123,98,44,98,98,44,50,125,44,123,99,44,99,99,44,51,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,98,98,44,50,125,44,123,99,99,44,51,125,44,123,100,100,44,52,125,93,41,44,10,82,51,32,61,32,115,111,102,115,58,100,114,101,115,116,114,105,99,116,105,111,110,40,83,101,116,70,117,110,44,32,82,49,44,32,82,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,51,41,46,10,91,123,97,44,97,97,44,49,125,93>>]}]},{p,[],[{code,[],[<<100,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<100,105,102,102,101,114,101,110,99,101,40,83,49,44,194,160,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,48,48>>,signature => [{attribute,960,spec,{{drestriction,3},[{type,960,bounded_fun,[{type,960,'fun',[{type,960,product,[{var,960,'SetFun'},{var,960,'Set1'},{var,960,'Set2'}]},{var,960,'Set3'}]},[{type,961,constraint,[{atom,961,is_subtype},[{var,961,'SetFun'},{user_type,961,set_fun,[]}]]},{type,962,constraint,[{atom,962,is_subtype},[{var,962,'Set1'},{user_type,962,a_set,[]}]]},{type,963,constraint,[{atom,963,is_subtype},[{var,963,'Set2'},{user_type,963,a_set,[]}]]},{type,964,constraint,[{atom,964,is_subtype},[{var,964,'Set3'},{user_type,964,a_set,[]}]]}]]}]}}]}},{{function,empty_set,0},[{file,[115,111,102,115,46,101,114,108]},{location,178}],[<<101,109,112,116,121,95,115,101,116,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116>>]},<<46,32>>,{code,[],[<<101,109,112,116,121,95,115,101,116,40,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,91,93,44,194,160,91,39,95,39,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,50,48>>,signature => [{attribute,178,spec,{{empty_set,0},[{type,178,bounded_fun,[{type,178,'fun',[{type,178,product,[]},{var,178,'Set'}]},[{type,179,constraint,[{atom,179,is_subtype},[{var,179,'Set'},{user_type,179,a_set,[]}]]}]]}]}}]}},{{function,extension,3},[{file,[115,111,102,115,46,101,114,108]},{location,779}],[<<101,120,116,101,110,115,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,110,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,110,115,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,115,117,99,104,32,116,104,97,116,32,102,111,114,32,101,97,99,104,32,101,108,101,109,101,110,116,32,69,32,105,110,32>>,{code,[],[<<83,101,116>>]},<<32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<44,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,112,97,105,114,32,40,69,44,194,160>>,{code,[],[<<65,110,121,83,101,116>>]},<<41,46>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,115,101,116,40,91,98,44,99,93,41,44,10,65,32,61,32,115,111,102,115,58,101,109,112,116,121,95,115,101,116,40,41,44,10,82,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,93,125,93,41,44,10,88,32,61,32,115,111,102,115,58,101,120,116,101,110,115,105,111,110,40,82,44,32,83,44,32,65,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,88,41,46,10,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,93,125,44,123,99,44,91,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,51,48>>,signature => [{attribute,779,spec,{{extension,3},[{type,779,bounded_fun,[{type,779,'fun',[{type,779,product,[{var,779,'BinRel1'},{var,779,'Set'},{var,779,'AnySet'}]},{var,779,'BinRel2'}]},[{type,780,constraint,[{atom,780,is_subtype},[{var,780,'AnySet'},{user_type,780,anyset,[]}]]},{type,781,constraint,[{atom,781,is_subtype},[{var,781,'BinRel1'},{user_type,781,binary_relation,[]}]]},{type,782,constraint,[{atom,782,is_subtype},[{var,782,'BinRel2'},{user_type,782,binary_relation,[]}]]},{type,783,constraint,[{atom,783,is_subtype},[{var,783,'Set'},{user_type,783,a_set,[]}]]}]]}]}}]}},{{function,family,2},[{file,[115,111,102,115,46,101,114,108]},{location,302}],[<<102,97,109,105,108,121,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,53,48>>,equiv => {function,family,1},signature => [{attribute,302,spec,{{family,2},[{type,302,bounded_fun,[{type,302,'fun',[{type,302,product,[{var,302,'Tuples'},{var,302,'Type'}]},{var,302,'Family'}]},[{type,303,constraint,[{atom,303,is_subtype},[{var,303,'Family'},{user_type,303,family,[]}]]},{type,304,constraint,[{atom,304,is_subtype},[{var,304,'Tuples'},{type,304,list,[{type,304,tuple,any}]}]]},{type,305,constraint,[{atom,305,is_subtype},[{var,305,'Type'},{user_type,305,type,[]}]]}]]}]}}]}},{{function,family,1},[{file,[115,111,102,115,46,101,114,108]},{location,290}],[<<102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121,32,111,102,32,115,117,98,115,101,116,115>>]},<<46,32>>,{code,[],[<<102,97,109,105,108,121,40,70,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,70,44,194,160,84,41>>]},<<32,105,102,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,102,97,109,105,108,121,46,32,73,102,32,110,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<91,123,97,116,111,109,44,194,160,91,97,116,111,109,93,125,93>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,102,97,109,105,108,121,32,116,121,112,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,53,48>>,signature => [{attribute,290,spec,{{family,1},[{type,290,bounded_fun,[{type,290,'fun',[{type,290,product,[{var,290,'Tuples'}]},{var,290,'Family'}]},[{type,291,constraint,[{atom,291,is_subtype},[{var,291,'Family'},{user_type,291,family,[]}]]},{type,292,constraint,[{atom,292,is_subtype},[{var,292,'Tuples'},{type,292,list,[{type,292,tuple,any}]}]]}]]}]}}]}},{{function,family_difference,2},[{file,[115,111,102,115,46,101,114,108]},{location,1385}],[<<102,97,109,105,108,121,95,100,105,102,102,101,114,101,110,99,101,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,105,101,115>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,101,113,117,97,108,32,116,111,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<91,105,93,32,105,115,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,101,116,119,101,101,110,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,102,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,109,97,112,115,32,105,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,97,109,105,108,121,49,91,105,93>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,98,44,91,52,44,53,93,125,44,123,99,44,91,54,44,55,93,125,93,41,44,10,70,51,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,100,105,102,102,101,114,101,110,99,101,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,51,41,46,10,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,54,52>>,signature => [{attribute,1385,spec,{{family_difference,2},[{type,1385,bounded_fun,[{type,1385,'fun',[{type,1385,product,[{var,1385,'Family1'},{var,1385,'Family2'}]},{var,1385,'Family3'}]},[{type,1386,constraint,[{atom,1386,is_subtype},[{var,1386,'Family1'},{user_type,1386,family,[]}]]},{type,1387,constraint,[{atom,1387,is_subtype},[{var,1387,'Family2'},{user_type,1387,family,[]}]]},{type,1388,constraint,[{atom,1388,is_subtype},[{var,1388,'Family3'},{user_type,1388,family,[]}]]}]]}]}}]}},{{function,family_domain,1},[{file,[115,111,102,115,46,101,114,108]},{location,1341}],[<<102,97,109,105,108,121,95,100,111,109,97,105,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49,91,105,93>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,82,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,125,44,123,98,44,91,93,125,44,123,99,44,91,123,52,44,100,125,44,123,53,44,101,125,93,125,93,41,44,10,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,100,111,109,97,105,110,40,70,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,93,125,44,123,99,44,91,52,44,53,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,56,53>>,signature => [{attribute,1341,spec,{{family_domain,1},[{type,1341,bounded_fun,[{type,1341,'fun',[{type,1341,product,[{var,1341,'Family1'}]},{var,1341,'Family2'}]},[{type,1342,constraint,[{atom,1342,is_subtype},[{var,1342,'Family1'},{user_type,1342,family,[]}]]},{type,1343,constraint,[{atom,1343,is_subtype},[{var,1343,'Family2'},{user_type,1343,family,[]}]]}]]}]}}]}},{{function,family_field,1},[{file,[115,111,102,115,46,101,114,108]},{location,1365}],[<<102,97,109,105,108,121,95,102,105,101,108,100,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,105,101,108,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,101,108,100>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,82,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,125,44,123,98,44,91,93,125,44,123,99,44,91,123,52,44,100,125,44,123,53,44,101,125,93,125,93,41,44,10,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,102,105,101,108,100,40,70,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,91,49,44,50,44,51,44,97,44,98,44,99,93,125,44,123,98,44,91,93,125,44,123,99,44,91,52,44,53,44,100,44,101,93,125,93>>]}]},{p,[],[{code,[],[<<102,97,109,105,108,121,95,102,105,101,108,100,40,70,97,109,105,108,121,49,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,97,109,105,108,121,95,117,110,105,111,110,40,102,97,109,105,108,121,95,100,111,109,97,105,110,40,70,97,109,105,108,121,49,41,44,32,102,97,109,105,108,121,95,114,97,110,103,101,40,70,97,109,105,108,121,49,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,48,54>>,signature => [{attribute,1365,spec,{{family_field,1},[{type,1365,bounded_fun,[{type,1365,'fun',[{type,1365,product,[{var,1365,'Family1'}]},{var,1365,'Family2'}]},[{type,1366,constraint,[{atom,1366,is_subtype},[{var,1366,'Family1'},{user_type,1366,family,[]}]]},{type,1367,constraint,[{atom,1367,is_subtype},[{var,1367,'Family2'},{user_type,1367,family,[]}]]}]]}]}}]}},{{function,family_intersection,1},[{file,[115,111,102,115,46,101,114,108]},{location,1325}],[<<102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,115,101,116,32,111,102,32,115,101,116,115,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,116,101,114,115,101,99,116,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,110,32,101,109,112,116,121,32,115,101,116,32,102,111,114,32,115,111,109,101,32,105,44,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,109,101,115,115,97,103,101,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,91,49,44,50,44,51,93,44,91,50,44,51,44,52,93,93,125,44,123,98,44,91,91,120,44,121,44,122,93,44,91,120,44,121,93,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,40,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,97,44,91,50,44,51,93,125,44,123,98,44,91,120,44,121,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,51,48>>,signature => [{attribute,1325,spec,{{family_intersection,1},[{type,1325,bounded_fun,[{type,1325,'fun',[{type,1325,product,[{var,1325,'Family1'}]},{var,1325,'Family2'}]},[{type,1326,constraint,[{atom,1326,is_subtype},[{var,1326,'Family1'},{user_type,1326,family,[]}]]},{type,1327,constraint,[{atom,1327,is_subtype},[{var,1327,'Family2'},{user_type,1327,family,[]}]]}]]}]}}]}},{{function,family_intersection,2},[{file,[115,111,102,115,46,101,114,108]},{location,1378}],[<<102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,105,101,115>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<58,115,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<58,115,32,105,110,100,101,120,32,115,101,116,115,44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<91,105,93,32,105,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,93,125,44,123,99,44,91,53,44,54,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,98,44,91,52,44,53,93,125,44,123,99,44,91,55,44,56,93,125,44,123,100,44,91,57,44,49,48,93,125,93,41,44,10,70,51,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,51,41,46,10,91,123,98,44,91,52,93,125,44,123,99,44,91,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,53,52>>,signature => [{attribute,1378,spec,{{family_intersection,2},[{type,1378,bounded_fun,[{type,1378,'fun',[{type,1378,product,[{var,1378,'Family1'},{var,1378,'Family2'}]},{var,1378,'Family3'}]},[{type,1379,constraint,[{atom,1379,is_subtype},[{var,1379,'Family1'},{user_type,1379,family,[]}]]},{type,1380,constraint,[{atom,1380,is_subtype},[{var,1380,'Family2'},{user_type,1380,family,[]}]]},{type,1381,constraint,[{atom,1381,is_subtype},[{var,1381,'Family3'},{user_type,1381,family,[]}]]}]]}]}}]}},{{function,family_projection,2},[{file,[115,111,102,115,46,101,114,108]},{location,1451}],[<<102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,99,97,108,108,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,119,105,116,104,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,91,49,44,50,93,44,91,50,44,51,93,93,125,44,123,98,44,91,91,93,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,40,102,117,110,32,115,111,102,115,58,117,110,105,111,110,47,49,44,32,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,55,52>>,signature => [{attribute,1451,spec,{{family_projection,2},[{type,1451,bounded_fun,[{type,1451,'fun',[{type,1451,product,[{var,1451,'SetFun'},{var,1451,'Family1'}]},{var,1451,'Family2'}]},[{type,1452,constraint,[{atom,1452,is_subtype},[{var,1452,'SetFun'},{user_type,1452,set_fun,[]}]]},{type,1453,constraint,[{atom,1453,is_subtype},[{var,1453,'Family1'},{user_type,1453,family,[]}]]},{type,1454,constraint,[{atom,1454,is_subtype},[{var,1454,'Family2'},{user_type,1454,family,[]}]]}]]}]}}]}},{{function,family_range,1},[{file,[115,111,102,115,46,101,114,108]},{location,1353}],[<<102,97,109,105,108,121,95,114,97,110,103,101,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,97,110,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,97,110,103,101>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,82,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,125,44,123,98,44,91,93,125,44,123,99,44,91,123,52,44,100,125,44,123,53,44,101,125,93,125,93,41,44,10,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,114,97,110,103,101,40,70,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,91,97,44,98,44,99,93,125,44,123,98,44,91,93,125,44,123,99,44,91,100,44,101,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,57,51>>,signature => [{attribute,1353,spec,{{family_range,1},[{type,1353,bounded_fun,[{type,1353,'fun',[{type,1353,product,[{var,1353,'Family1'}]},{var,1353,'Family2'}]},[{type,1354,constraint,[{atom,1354,is_subtype},[{var,1354,'Family1'},{user_type,1354,family,[]}]]},{type,1355,constraint,[{atom,1355,is_subtype},[{var,1355,'Family2'},{user_type,1355,family,[]}]]}]]}]}}]}},{{function,family_specification,2},[{file,[115,111,102,115,46,101,114,108]},{location,1265}],[<<102,97,109,105,108,121,95,115,112,101,99,105,102,105,99,97,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,116,111,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,105,32,111,102,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,102,111,114,32,119,104,105,99,104,32>>,{code,[],[<<70,117,110>>]},<<32,97,112,112,108,105,101,100,32,116,111,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,194,160,70,117,110,50,125>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,117,110,50>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,49,44,50,93,125,44,123,99,44,91,49,93,125,93,41,44,10,83,112,101,99,70,117,110,32,61,32,102,117,110,40,83,41,32,45,62,32,115,111,102,115,58,110,111,95,101,108,101,109,101,110,116,115,40,83,41,32,61,58,61,32,50,32,101,110,100,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,115,112,101,99,105,102,105,99,97,116,105,111,110,40,83,112,101,99,70,117,110,44,32,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,98,44,91,49,44,50,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,49,52>>,signature => [{attribute,1265,spec,{{family_specification,2},[{type,1265,bounded_fun,[{type,1265,'fun',[{type,1265,product,[{var,1265,'Fun'},{var,1265,'Family1'}]},{var,1265,'Family2'}]},[{type,1266,constraint,[{atom,1266,is_subtype},[{var,1266,'Fun'},{user_type,1266,spec_fun,[]}]]},{type,1267,constraint,[{atom,1267,is_subtype},[{var,1267,'Family1'},{user_type,1267,family,[]}]]},{type,1268,constraint,[{atom,1268,is_subtype},[{var,1268,'Family2'},{user_type,1268,family,[]}]]}]]}]}}]}},{{function,family_to_digraph,2},[{file,[115,111,102,115,46,101,114,108]},{location,1489}],[<<102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,51,57>>,equiv => {function,family_to_digraph,1},signature => [{attribute,1489,spec,{{family_to_digraph,2},[{type,1489,bounded_fun,[{type,1489,'fun',[{type,1489,product,[{var,1489,'Family'},{var,1489,'GraphType'}]},{var,1489,'Graph'}]},[{type,1490,constraint,[{atom,1490,is_subtype},[{var,1490,'Graph'},{remote_type,1490,[{atom,1490,digraph},{atom,1490,graph},[]]}]]},{type,1491,constraint,[{atom,1491,is_subtype},[{var,1491,'Family'},{user_type,1491,family,[]}]]},{type,1492,constraint,[{atom,1492,is_subtype},[{var,1492,'GraphType'},{type,1492,list,[{remote_type,1492,[{atom,1492,digraph},{atom,1492,d_type},[]]}]}]]}]]}]}}]}},{{function,family_to_digraph,1},[{file,[115,111,102,115,46,101,114,108]},{location,1479}],[<<102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,32,102,114,111,109,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<46,32,70,111,114,32,101,97,99,104,32,112,97,105,114,32,40,97,44,194,160,123,98,91,49,93,44,194,160,46,46,46,44,194,160,98,91,110,93,125,41,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<44,32,118,101,114,116,101,120,32,97,32,97,110,100,32,116,104,101,32,101,100,103,101,115,32,40,97,44,194,160,98,91,105,93,41,32,102,111,114,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,32,97,114,101,32,97,100,100,101,100,32,116,111,32,97,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,46>>]},{p,[],[<<73,102,32,110,111,32,103,114,97,112,104,32,116,121,112,101,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32>>,{a,[{href,<<115,116,100,108,105,98,58,100,105,103,114,97,112,104,35,110,101,119,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,105,103,114,97,112,104,58,110,101,119,47,48>>]}]},<<32,105,115,32,117,115,101,100,32,102,111,114,32,99,114,101,97,116,105,110,103,32,116,104,101,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,44,32,111,116,104,101,114,119,105,115,101,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<71,114,97,112,104,84,121,112,101>>]},<<32,105,115,32,112,97,115,115,101,100,32,111,110,32,97,115,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,100,105,103,114,97,112,104,35,110,101,119,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,105,103,114,97,112,104,58,110,101,119,47,49>>]}]},<<46>>]},{p,[],[<<73,116,32,70,32,105,115,32,97,32,102,97,109,105,108,121,44,32,105,116,32,104,111,108,100,115,32,116,104,97,116,32,70,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,40,102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,40,70,41,44,194,160,116,121,112,101,40,70,41,41>>]},<<46,32,69,113,117,97,108,105,116,121,32,104,111,108,100,115,32,105,102,32>>,{code,[],[<<117,110,105,111,110,95,111,102,95,102,97,109,105,108,121,40,70,41>>]},<<32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<100,111,109,97,105,110,40,70,41>>]},<<46>>]},{p,[],[<<67,114,101,97,116,105,110,103,32,97,32,99,121,99,108,101,32,105,110,32,97,110,32,97,99,121,99,108,105,99,32,103,114,97,112,104,32,101,120,105,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<99,121,99,108,105,99>>]},<<32,109,101,115,115,97,103,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,51,57>>,signature => [{attribute,1479,spec,{{family_to_digraph,1},[{type,1479,bounded_fun,[{type,1479,'fun',[{type,1479,product,[{var,1479,'Family'}]},{var,1479,'Graph'}]},[{type,1480,constraint,[{atom,1480,is_subtype},[{var,1480,'Graph'},{remote_type,1480,[{atom,1480,digraph},{atom,1480,graph},[]]}]]},{type,1481,constraint,[{atom,1481,is_subtype},[{var,1481,'Family'},{user_type,1481,family,[]}]]}]]}]}}]}},{{function,family_to_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,1253}],[<<102,97,109,105,108,121,95,116,111,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,99,111,110,116,97,105,110,105,110,103,32,97,108,108,32,112,97,105,114,115,32,40,105,44,194,160,120,41,32,115,117,99,104,32,116,104,97,116,32,105,32,98,101,108,111,110,103,115,32,116,111,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,97,110,100,32,120,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,93,125,44,32,123,98,44,91,49,93,125,44,32,123,99,44,91,50,44,51,93,125,93,41,44,10,82,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,116,111,95,114,101,108,97,116,105,111,110,40,70,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,41,46,10,91,123,98,44,49,125,44,123,99,44,50,125,44,123,99,44,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,54,53>>,signature => [{attribute,1253,spec,{{family_to_relation,1},[{type,1253,bounded_fun,[{type,1253,'fun',[{type,1253,product,[{var,1253,'Family'}]},{var,1253,'BinRel'}]},[{type,1254,constraint,[{atom,1254,is_subtype},[{var,1254,'Family'},{user_type,1254,family,[]}]]},{type,1255,constraint,[{atom,1255,is_subtype},[{var,1255,'BinRel'},{user_type,1255,binary_relation,[]}]]}]]}]}}]}},{{function,family_union,1},[{file,[115,111,102,115,46,101,114,108]},{location,1314}],[<<102,97,109,105,108,121,95,117,110,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,115,101,116,32,111,102,32,115,101,116,115,32,102,111,114,32,101,97,99,104,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,91,49,44,50,93,44,91,50,44,51,93,93,125,44,123,98,44,91,91,93,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,117,110,105,111,110,40,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,93,125,93>>]}]},{p,[],[{code,[],[<<102,97,109,105,108,121,95,117,110,105,111,110,40,70,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,40,102,117,110,32,115,111,102,115,58,117,110,105,111,110,47,49,44,194,160,70,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,56,51>>,signature => [{attribute,1314,spec,{{family_union,1},[{type,1314,bounded_fun,[{type,1314,'fun',[{type,1314,product,[{var,1314,'Family1'}]},{var,1314,'Family2'}]},[{type,1315,constraint,[{atom,1315,is_subtype},[{var,1315,'Family1'},{user_type,1315,family,[]}]]},{type,1316,constraint,[{atom,1316,is_subtype},[{var,1316,'Family2'},{user_type,1316,family,[]}]]}]]}]}}]}},{{function,family_union,2},[{file,[115,111,102,115,46,101,114,108]},{location,1371}],[<<102,97,109,105,108,121,95,117,110,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,105,101,115>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<58,115,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<58,115,32,105,110,100,101,120,32,115,101,116,115,44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<91,105,93,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,102,32,98,111,116,104,32,109,97,112,32,105,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,111,114,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,93,125,44,123,99,44,91,53,44,54,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,98,44,91,52,44,53,93,125,44,123,99,44,91,55,44,56,93,125,44,123,100,44,91,57,44,49,48,93,125,93,41,44,10,70,51,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,117,110,105,111,110,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,51,41,46,10,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,44,53,93,125,44,123,99,44,91,53,44,54,44,55,44,56,93,125,44,123,100,44,91,57,44,49,48,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,48,54>>,signature => [{attribute,1371,spec,{{family_union,2},[{type,1371,bounded_fun,[{type,1371,'fun',[{type,1371,product,[{var,1371,'Family1'},{var,1371,'Family2'}]},{var,1371,'Family3'}]},[{type,1372,constraint,[{atom,1372,is_subtype},[{var,1372,'Family1'},{user_type,1372,family,[]}]]},{type,1373,constraint,[{atom,1373,is_subtype},[{var,1373,'Family2'},{user_type,1373,family,[]}]]},{type,1374,constraint,[{atom,1374,is_subtype},[{var,1374,'Family3'},{user_type,1374,family,[]}]]}]]}]}}]}},{{function,field,1},[{file,[115,111,102,115,46,101,114,108]},{location,632}],[<<102,105,101,108,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,105,101,108,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,101,108,100>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,98,125,44,123,50,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,102,105,101,108,100,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,49,44,50,44,97,44,98,44,99,93>>]}]},{p,[],[{code,[],[<<102,105,101,108,100,40,82,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<117,110,105,111,110,40,100,111,109,97,105,110,40,82,41,44,32,114,97,110,103,101,40,82,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,50,56>>,signature => [{attribute,632,spec,{{field,1},[{type,632,bounded_fun,[{type,632,'fun',[{type,632,product,[{var,632,'BinRel'}]},{var,632,'Set'}]},[{type,633,constraint,[{atom,633,is_subtype},[{var,633,'BinRel'},{user_type,633,binary_relation,[]}]]},{type,634,constraint,[{atom,634,is_subtype},[{var,634,'Set'},{user_type,634,a_set,[]}]]}]]}]}}]}},{{function,from_external,2},[{file,[115,111,102,115,46,101,114,108]},{location,169}],[<<102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,115,101,116,32,102,114,111,109,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32>>,{code,[],[<<69,120,116,101,114,110,97,108,83,101,116>>]},<<32,97,110,100,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32>>,{code,[],[<<84,121,112,101>>]},<<46,32,73,116,32,105,115,32,97,115,115,117,109,101,100,32,116,104,97,116,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,118,97,108,105,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,111,102,32>>,{code,[],[<<69,120,116,101,114,110,97,108,83,101,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,52,52>>,signature => [{attribute,169,spec,{{from_external,2},[{type,169,bounded_fun,[{type,169,'fun',[{type,169,product,[{var,169,'ExternalSet'},{var,169,'Type'}]},{var,169,'AnySet'}]},[{type,170,constraint,[{atom,170,is_subtype},[{var,170,'ExternalSet'},{user_type,170,external_set,[]}]]},{type,171,constraint,[{atom,171,is_subtype},[{var,171,'AnySet'},{user_type,171,anyset,[]}]]},{type,172,constraint,[{atom,172,is_subtype},[{var,172,'Type'},{user_type,172,type,[]}]]}]]}]}}]}},{{function,from_sets,1},[{file,[115,111,102,115,46,101,114,108]},{location,220}],[<<102,114,111,109,95,115,101,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,115,101,116,115,32,111,102,32,108,105,115,116,32>>,{code,[],[<<76,105,115,116,79,102,83,101,116,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,93,41,44,10,83,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,120,44,51,125,44,123,121,44,52,125,93,41,44,10,83,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,91,83,49,44,83,50,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,91,123,97,44,49,125,44,123,98,44,50,125,93,44,91,123,120,44,51,125,44,123,121,44,52,125,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,53,55>>,signature => [{attribute,220,spec,{{from_sets,1},[{type,220,bounded_fun,[{type,220,'fun',[{type,220,product,[{var,220,'ListOfSets'}]},{var,220,'Set'}]},[{type,221,constraint,[{atom,221,is_subtype},[{var,221,'Set'},{user_type,221,a_set,[]}]]},{type,222,constraint,[{atom,222,is_subtype},[{var,222,'ListOfSets'},{type,222,list,[{user_type,222,anyset,[]}]}]]}]]}]}}]}},{{function,from_sets,1},[{file,[115,111,102,115,46,101,114,108]},{location,220}],[<<102,114,111,109,95,115,101,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<111,114,100,101,114,101,100,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,115,101,116,115,32,111,102,32,116,104,101,32,110,111,110,45,101,109,112,116,121,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,79,102,83,101,116,115>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,55,51>>,signature => [{attribute,220,spec,{{from_sets,1},[{type,223,bounded_fun,[{type,223,'fun',[{type,223,product,[{var,223,'TupleOfSets'}]},{var,223,'Ordset'}]},[{type,224,constraint,[{atom,224,is_subtype},[{var,224,'Ordset'},{user_type,224,ordset,[]}]]},{type,225,constraint,[{atom,225,is_subtype},[{var,225,'TupleOfSets'},{user_type,225,tuple_of,[{user_type,225,anyset,[]}]}]]}]]}]}}]}},{{function,from_term,2},[{file,[115,111,102,115,46,101,114,108]},{location,155}],[<<102,114,111,109,95,116,101,114,109,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,56,51>>,equiv => {function,from_term,1},signature => [{attribute,155,spec,{{from_term,2},[{type,155,bounded_fun,[{type,155,'fun',[{type,155,product,[{var,155,'Term'},{var,155,'Type'}]},{var,155,'AnySet'}]},[{type,156,constraint,[{atom,156,is_subtype},[{var,156,'AnySet'},{user_type,156,anyset,[]}]]},{type,157,constraint,[{atom,157,is_subtype},[{var,157,'Term'},{type,157,term,[]}]]},{type,158,constraint,[{atom,158,is_subtype},[{var,158,'Type'},{user_type,158,type,[]}]]}]]}]}}]}},{{function,from_term,1},[{file,[115,111,102,115,46,101,114,108]},{location,143}],[<<102,114,111,109,95,116,101,114,109,47,49>>],#{<<101,110>> => [{p,[],[{a,[{id,<<102,114,111,109,95,116,101,114,109>>}],[]},<<67,114,101,97,116,101,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,101,116,115>>]},<<32,98,121,32,116,114,97,118,101,114,115,105,110,103,32,116,101,114,109,32>>,{code,[],[<<84,101,114,109>>]},<<44,32,115,111,114,116,105,110,103,32,108,105,115,116,115,44,32,114,101,109,111,118,105,110,103,32,100,117,112,108,105,99,97,116,101,115,44,32,97,110,100,32,100,101,114,105,118,105,110,103,32,111,114,32,118,101,114,105,102,121,105,110,103,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,118,97,108,105,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,102,111,114,32,116,104,101,32,115,111,32,111,98,116,97,105,110,101,100,32,101,120,116,101,114,110,97,108,32,115,101,116,46,32,65,110,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32>>,{code,[],[<<84,121,112,101>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,108,105,109,105,116,32,116,104,101,32,100,101,112,116,104,32,111,102,32,116,104,101,32,116,114,97,118,101,114,115,97,108,59,32,97,110,32,97,116,111,109,105,99,32,116,121,112,101,32,115,116,111,112,115,32,116,104,101,32,116,114,97,118,101,114,115,97,108,44,32,97,115,32,115,104,111,119,110,32,98,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,119,104,101,114,101,32>>,{code,[],[<<34,102,111,111,34>>]},<<32,97,110,100,32>>,{code,[],[<<123,34,102,111,111,34,125>>]},<<32,97,114,101,32,108,101,102,116,32,117,110,109,111,100,105,102,105,101,100,58>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,123,34,102,111,111,34,125,44,91,49,44,49,93,125,44,123,34,102,111,111,34,44,91,50,44,50,93,125,93,44,10,91,123,97,116,111,109,44,91,97,116,111,109,93,125,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,123,123,34,102,111,111,34,125,44,91,49,93,125,44,123,34,102,111,111,34,44,91,50,93,125,93>>]}]},{p,[],[{code,[],[<<102,114,111,109,95,116,101,114,109>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,99,114,101,97,116,105,110,103,32,97,116,111,109,105,99,32,111,114,32,111,114,100,101,114,101,100,32,115,101,116,115,46,32,84,104,101,32,111,110,108,121,32,112,117,114,112,111,115,101,32,111,102,32,115,117,99,104,32,97,32,115,101,116,32,105,115,32,116,104,97,116,32,111,102,32,108,97,116,101,114,32,98,117,105,108,100,105,110,103,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,44,32,97,115,32,97,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,32,116,104,97,116,32>>,{em,[],[<<100,111>>]},<<32,97,110,121,116,104,105,110,103,32,111,112,101,114,97,116,101,32,111,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,46,32,67,114,101,97,116,105,110,103,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,32,102,114,111,109,32,97,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,111,114,100,101,114,101,100,32,115,101,116,115,32,99,97,110,32,98,101,32,116,104,101,32,119,97,121,32,116,111,32,103,111,32,105,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,98,105,103,32,97,110,100,32,111,110,101,32,100,111,101,115,32,110,111,116,32,119,97,110,116,32,116,111,32,119,97,115,116,101,32,104,101,97,112,32,98,121,32,114,101,98,117,105,108,100,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,115,104,111,119,115,32,116,104,97,116,32,97,32,115,101,116,32,99,97,110,32,98,101,32,98,117,105,108,116,32,34,108,97,121,101,114,32,98,121,32,108,97,121,101,114,34,58>>]},{pre,[],[{code,[],[<<49,62,32,65,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,97,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,44,51,93,41,44,10,80,49,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,123,65,44,83,125,41,44,10,80,50,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,123,98,44,91,54,44,53,44,52,93,125,41,44,10,83,115,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,91,80,49,44,80,50,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,115,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,52,44,53,44,54,93,125,93>>]}]},{p,[],[<<79,116,104,101,114,32,102,117,110,99,116,105,111,110,115,32,116,104,97,116,32,99,114,101,97,116,101,32,115,101,116,115,32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,115,101,116,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,115,101,116,115,47,49>>]}]},<<46,32,83,112,101,99,105,97,108,32,99,97,115,101,115,32,111,102,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,47,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,97,95,102,117,110,99,116,105,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,95,102,117,110,99,116,105,111,110,47,49,44,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,109,112,116,121,95,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,109,112,116,121,95,115,101,116,47,48>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,97,109,105,108,121,47,49,44,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,108,97,116,105,111,110,47,49,44,50>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,101,116,47,49,44,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,56,51>>,signature => [{attribute,143,spec,{{from_term,1},[{type,143,bounded_fun,[{type,143,'fun',[{type,143,product,[{var,143,'Term'}]},{var,143,'AnySet'}]},[{type,144,constraint,[{atom,144,is_subtype},[{var,144,'AnySet'},{user_type,144,anyset,[]}]]},{type,145,constraint,[{atom,145,is_subtype},[{var,145,'Term'},{type,145,term,[]}]]}]]}]}}]}},{{function,image,2},[{file,[115,111,102,115,46,101,114,108]},{location,717}],[<<105,109,97,103,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,109,97,103,101>>]},<<32,111,102,32,115,101,116,32>>,{code,[],[<<83,101,116,49>>]},<<32,117,110,100,101,114,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,50,44,99,125,44,123,51,44,100,125,93,41,44,10,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,93,41,44,10,83,50,32,61,32,115,111,102,115,58,105,109,97,103,101,40,82,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,97,44,98,44,99,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,51,51>>,signature => [{attribute,717,spec,{{image,2},[{type,717,bounded_fun,[{type,717,'fun',[{type,717,product,[{var,717,'BinRel'},{var,717,'Set1'}]},{var,717,'Set2'}]},[{type,718,constraint,[{atom,718,is_subtype},[{var,718,'BinRel'},{user_type,718,binary_relation,[]}]]},{type,719,constraint,[{atom,719,is_subtype},[{var,719,'Set1'},{user_type,719,a_set,[]}]]},{type,720,constraint,[{atom,720,is_subtype},[{var,720,'Set2'},{user_type,720,a_set,[]}]]}]]}]}}]}},{{function,intersection,1},[{file,[115,111,102,115,46,101,114,108]},{location,563}],[<<105,110,116,101,114,115,101,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,116,101,114,115,101,99,116,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,115,101,116,115,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<46>>]},{p,[],[<<73,110,116,101,114,115,101,99,116,105,110,103,32,97,110,32,101,109,112,116,121,32,115,101,116,32,111,102,32,115,101,116,115,32,101,120,105,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,109,101,115,115,97,103,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,52,57>>,signature => [{attribute,563,spec,{{intersection,1},[{type,563,bounded_fun,[{type,563,'fun',[{type,563,product,[{var,563,'SetOfSets'}]},{var,563,'Set'}]},[{type,564,constraint,[{atom,564,is_subtype},[{var,564,'Set'},{user_type,564,a_set,[]}]]},{type,565,constraint,[{atom,565,is_subtype},[{var,565,'SetOfSets'},{user_type,565,set_of_sets,[]}]]}]]}]}}]}},{{function,intersection,2},[{file,[115,111,102,115,46,101,114,108]},{location,388}],[<<105,110,116,101,114,115,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,116,101,114,115,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,54,49>>,signature => [{attribute,388,spec,{{intersection,2},[{type,388,bounded_fun,[{type,388,'fun',[{type,388,product,[{var,388,'Set1'},{var,388,'Set2'}]},{var,388,'Set3'}]},[{type,389,constraint,[{atom,389,is_subtype},[{var,389,'Set1'},{user_type,389,a_set,[]}]]},{type,390,constraint,[{atom,390,is_subtype},[{var,390,'Set2'},{user_type,390,a_set,[]}]]},{type,391,constraint,[{atom,391,is_subtype},[{var,391,'Set3'},{user_type,391,a_set,[]}]]}]]}]}}]}},{{function,intersection_of_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,1299}],[<<105,110,116,101,114,115,101,99,116,105,111,110,95,111,102,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<46>>]},{p,[],[<<73,110,116,101,114,115,101,99,116,105,110,103,32,97,110,32,101,109,112,116,121,32,102,97,109,105,108,121,32,101,120,105,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,109,101,115,115,97,103,101,46>>]},{pre,[],[{code,[],[<<49,62,32,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,48,44,50,44,52,93,125,44,123,98,44,91,48,44,49,44,50,93,125,44,123,99,44,91,50,44,51,93,125,93,41,44,10,83,32,61,32,115,111,102,115,58,105,110,116,101,114,115,101,99,116,105,111,110,95,111,102,95,102,97,109,105,108,121,40,70,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,50,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,55,49>>,signature => [{attribute,1299,spec,{{intersection_of_family,1},[{type,1299,bounded_fun,[{type,1299,'fun',[{type,1299,product,[{var,1299,'Family'}]},{var,1299,'Set'}]},[{type,1300,constraint,[{atom,1300,is_subtype},[{var,1300,'Family'},{user_type,1300,family,[]}]]},{type,1301,constraint,[{atom,1301,is_subtype},[{var,1301,'Set'},{user_type,1301,a_set,[]}]]}]]}]}}]}},{{function,inverse,1},[{file,[115,111,102,115,46,101,114,108]},{location,872}],[<<105,110,118,101,114,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,118,101,114,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,118,101,114,115,101>>]},<<32,111,102,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<70,117,110,99,116,105,111,110,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,105,110,118,101,114,115,101,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,97,44,49,125,44,123,98,44,50,125,44,123,99,44,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,56,56>>,signature => [{attribute,872,spec,{{inverse,1},[{type,872,bounded_fun,[{type,872,'fun',[{type,872,product,[{var,872,'Function1'}]},{var,872,'Function2'}]},[{type,873,constraint,[{atom,873,is_subtype},[{var,873,'Function1'},{user_type,873,a_function,[]}]]},{type,874,constraint,[{atom,874,is_subtype},[{var,874,'Function2'},{user_type,874,a_function,[]}]]}]]}]}}]}},{{function,inverse_image,2},[{file,[115,111,102,115,46,101,114,108]},{location,734}],[<<105,110,118,101,114,115,101,95,105,109,97,103,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,118,101,114,115,101,95,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,118,101,114,115,101,32,105,109,97,103,101>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,117,110,100,101,114,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,50,44,99,125,44,123,51,44,100,125,93,41,44,10,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,99,44,100,44,101,93,41,44,10,83,50,32,61,32,115,111,102,115,58,105,110,118,101,114,115,101,95,105,109,97,103,101,40,82,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,50,44,51,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,48,50>>,signature => [{attribute,734,spec,{{inverse_image,2},[{type,734,bounded_fun,[{type,734,'fun',[{type,734,product,[{var,734,'BinRel'},{var,734,'Set1'}]},{var,734,'Set2'}]},[{type,735,constraint,[{atom,735,is_subtype},[{var,735,'BinRel'},{user_type,735,binary_relation,[]}]]},{type,736,constraint,[{atom,736,is_subtype},[{var,736,'Set1'},{user_type,736,a_set,[]}]]},{type,737,constraint,[{atom,737,is_subtype},[{var,737,'Set2'},{user_type,737,a_set,[]}]]}]]}]}}]}},{{function,is_a_function,1},[{file,[115,111,102,115,46,101,114,108]},{location,812}],[<<105,115,95,97,95,102,117,110,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<32,111,114,32,116,104,101,32,117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,49,57>>,signature => [{attribute,812,spec,{{is_a_function,1},[{type,812,bounded_fun,[{type,812,'fun',[{type,812,product,[{var,812,'BinRel'}]},{var,812,'Bool'}]},[{type,813,constraint,[{atom,813,is_subtype},[{var,813,'Bool'},{type,813,boolean,[]}]]},{type,814,constraint,[{atom,814,is_subtype},[{var,814,'BinRel'},{user_type,814,binary_relation,[]}]]}]]}]}}]}},{{function,is_disjoint,2},[{file,[115,111,102,115,46,101,114,108]},{location,535}],[<<105,115,95,100,105,115,106,111,105,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,105,115,106,111,105,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,115,106,111,105,110,116>>]},<<44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,50,57>>,signature => [{attribute,535,spec,{{is_disjoint,2},[{type,535,bounded_fun,[{type,535,'fun',[{type,535,product,[{var,535,'Set1'},{var,535,'Set2'}]},{var,535,'Bool'}]},[{type,536,constraint,[{atom,536,is_subtype},[{var,536,'Bool'},{type,536,boolean,[]}]]},{type,537,constraint,[{atom,537,is_subtype},[{var,537,'Set1'},{user_type,537,a_set,[]}]]},{type,538,constraint,[{atom,538,is_subtype},[{var,538,'Set2'},{user_type,538,a_set,[]}]]}]]}]}}]}},{{function,is_empty_set,1},[{file,[115,111,102,115,46,101,114,108]},{location,527}],[<<105,115,95,101,109,112,116,121,95,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<32,105,115,32,97,110,32,101,109,112,116,121,32,117,110,111,114,100,101,114,101,100,32,115,101,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,52,48>>,signature => [{attribute,527,spec,{{is_empty_set,1},[{type,527,bounded_fun,[{type,527,'fun',[{type,527,product,[{var,527,'AnySet'}]},{var,527,'Bool'}]},[{type,528,constraint,[{atom,528,is_subtype},[{var,528,'AnySet'},{user_type,528,anyset,[]}]]},{type,529,constraint,[{atom,529,is_subtype},[{var,529,'Bool'},{type,529,boolean,[]}]]}]]}]}}]}},{{function,is_equal,2},[{file,[115,111,102,115,46,101,114,108]},{location,480}],[<<105,115,95,101,113,117,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<65,110,121,83,101,116,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,113,117,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,113,117,97,108>>]},<<44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,115,104,111,119,115,32,116,104,97,116,32>>,{code,[],[<<61,61,47,50>>]},<<32,105,115,32,117,115,101,100,32,119,104,101,110,32,99,111,109,112,97,114,105,110,103,32,115,101,116,115,32,102,111,114,32,101,113,117,97,108,105,116,121,58>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,46,48,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,49,93,41,44,10,115,111,102,115,58,105,115,95,101,113,117,97,108,40,83,49,44,32,83,50,41,46,10,116,114,117,101>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,52,57>>,signature => [{attribute,480,spec,{{is_equal,2},[{type,480,bounded_fun,[{type,480,'fun',[{type,480,product,[{var,480,'AnySet1'},{var,480,'AnySet2'}]},{var,480,'Bool'}]},[{type,481,constraint,[{atom,481,is_subtype},[{var,481,'AnySet1'},{user_type,481,anyset,[]}]]},{type,482,constraint,[{atom,482,is_subtype},[{var,482,'AnySet2'},{user_type,482,anyset,[]}]]},{type,483,constraint,[{atom,483,is_subtype},[{var,483,'Bool'},{type,483,boolean,[]}]]}]]}]}}]}},{{function,is_set,1},[{file,[115,111,102,115,46,101,114,108]},{location,519}],[<<105,115,95,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<32,105,115,32,97,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<32,105,115,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,32,111,114,32,97,110,32,97,116,111,109,105,99,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,54,54>>,signature => [{attribute,519,spec,{{is_set,1},[{type,519,bounded_fun,[{type,519,'fun',[{type,519,product,[{var,519,'AnySet'}]},{var,519,'Bool'}]},[{type,520,constraint,[{atom,520,is_subtype},[{var,520,'AnySet'},{user_type,520,anyset,[]}]]},{type,521,constraint,[{atom,521,is_subtype},[{var,521,'Bool'},{type,521,boolean,[]}]]}]]}]}}]}},{{function,is_sofs_set,1},[{file,[115,111,102,115,46,101,114,108]},{location,509}],[<<105,115,95,115,111,102,115,95,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<44,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,44,32,111,114,32,97,110,32,97,116,111,109,105,99,32,115,101,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,55,55>>,signature => [{attribute,509,spec,{{is_sofs_set,1},[{type,509,bounded_fun,[{type,509,'fun',[{type,509,product,[{var,509,'Term'}]},{var,509,'Bool'}]},[{type,510,constraint,[{atom,510,is_subtype},[{var,510,'Bool'},{type,510,boolean,[]}]]},{type,511,constraint,[{atom,511,is_subtype},[{var,511,'Term'},{type,511,term,[]}]]}]]}]}}]}},{{function,is_subset,2},[{file,[115,111,102,115,46,101,114,108]},{location,499}],[<<105,115,95,115,117,98,115,101,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,117,98,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,117,98,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,50>>]},<<44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,56,55>>,signature => [{attribute,499,spec,{{is_subset,2},[{type,499,bounded_fun,[{type,499,'fun',[{type,499,product,[{var,499,'Set1'},{var,499,'Set2'}]},{var,499,'Bool'}]},[{type,500,constraint,[{atom,500,is_subtype},[{var,500,'Bool'},{type,500,boolean,[]}]]},{type,501,constraint,[{atom,501,is_subtype},[{var,501,'Set1'},{user_type,501,a_set,[]}]]},{type,502,constraint,[{atom,502,is_subtype},[{var,502,'Set2'},{user_type,502,a_set,[]}]]}]]}]}}]}},{{function,is_type,1},[{file,[115,111,102,115,46,101,114,108]},{location,183}],[<<105,115,95,116,121,112,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,101,114,109,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,57,55>>,signature => [{attribute,183,spec,{{is_type,1},[{type,183,bounded_fun,[{type,183,'fun',[{type,183,product,[{var,183,'Term'}]},{var,183,'Bool'}]},[{type,184,constraint,[{atom,184,is_subtype},[{var,184,'Bool'},{type,184,boolean,[]}]]},{type,185,constraint,[{atom,185,is_subtype},[{var,185,'Term'},{type,185,term,[]}]]}]]}]}}]}},{{function,join,4},[{file,[115,111,102,115,46,101,114,108]},{location,1206}],[<<106,111,105,110,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,110,97,116,117,114,97,108,95,106,111,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<110,97,116,117,114,97,108,32,106,111,105,110>>]},<<32,111,102,32,116,104,101,32,114,101,108,97,116,105,111,110,115,32>>,{code,[],[<<82,101,108,97,116,105,111,110,49>>]},<<32,97,110,100,32>>,{code,[],[<<82,101,108,97,116,105,111,110,50>>]},<<32,111,110,32,99,111,111,114,100,105,110,97,116,101,115,32>>,{code,[],[<<73>>]},<<32,97,110,100,32>>,{code,[],[<<74>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,120,44,49,125,44,123,98,44,121,44,50,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,102,44,103,125,44,123,49,44,104,44,105,125,44,123,50,44,51,44,52,125,93,41,44,10,74,32,61,32,115,111,102,115,58,106,111,105,110,40,82,49,44,32,51,44,32,82,50,44,32,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,74,41,46,10,91,123,97,44,120,44,49,44,102,44,103,125,44,123,97,44,120,44,49,44,104,44,105,125,44,123,98,44,121,44,50,44,51,44,52,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,48,54>>,signature => [{attribute,1206,spec,{{join,4},[{type,1206,bounded_fun,[{type,1206,'fun',[{type,1206,product,[{var,1206,'Relation1'},{var,1206,'I'},{var,1206,'Relation2'},{var,1206,'J'}]},{var,1206,'Relation3'}]},[{type,1207,constraint,[{atom,1207,is_subtype},[{var,1207,'Relation1'},{user_type,1207,relation,[]}]]},{type,1208,constraint,[{atom,1208,is_subtype},[{var,1208,'Relation2'},{user_type,1208,relation,[]}]]},{type,1209,constraint,[{atom,1209,is_subtype},[{var,1209,'Relation3'},{user_type,1209,relation,[]}]]},{type,1210,constraint,[{atom,1210,is_subtype},[{var,1210,'I'},{type,1210,pos_integer,[]}]]},{type,1211,constraint,[{atom,1211,is_subtype},[{var,1211,'J'},{type,1211,pos_integer,[]}]]}]]}]}}]}},{{function,multiple_relative_product,2},[{file,[115,111,102,115,46,101,114,108]},{location,1190}],[<<109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<84,117,112,108,101,79,102,66,105,110,82,101,108,115>>]},<<32,105,115,32,97,32,110,111,110,45,101,109,112,116,121,32,116,117,112,108,101,32,123,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,125,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,44,32,116,104,101,110,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<109,117,108,116,105,112,108,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,105,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,105,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,44,123,99,44,51,125,93,41,44,10,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,98,125,44,123,98,44,99,125,44,123,99,44,97,125,93,41,44,10,77,80,32,61,32,115,111,102,115,58,109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,123,82,105,44,32,82,105,125,44,32,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,114,97,110,103,101,40,77,80,41,41,46,10,91,123,49,44,50,125,44,123,50,44,51,125,44,123,51,44,49,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,50,51>>,signature => [{attribute,1190,spec,{{multiple_relative_product,2},[{type,1190,bounded_fun,[{type,1190,'fun',[{type,1190,product,[{var,1190,'TupleOfBinRels'},{var,1190,'BinRel1'}]},{var,1190,'BinRel2'}]},[{type,1191,constraint,[{atom,1191,is_subtype},[{var,1191,'TupleOfBinRels'},{user_type,1191,tuple_of,[{var,1191,'BinRel'}]}]]},{type,1192,constraint,[{atom,1192,is_subtype},[{var,1192,'BinRel'},{user_type,1192,binary_relation,[]}]]},{type,1193,constraint,[{atom,1193,is_subtype},[{var,1193,'BinRel1'},{user_type,1193,binary_relation,[]}]]},{type,1194,constraint,[{atom,1194,is_subtype},[{var,1194,'BinRel2'},{user_type,1194,binary_relation,[]}]]}]]}]}}]}},{{function,no_elements,1},[{file,[115,111,102,115,46,101,114,108]},{location,349}],[<<110,111,95,101,108,101,109,101,110,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,111,114,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32>>,{code,[],[<<65,83,101,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,52,52>>,signature => [{attribute,349,spec,{{no_elements,1},[{type,349,bounded_fun,[{type,349,'fun',[{type,349,product,[{var,349,'ASet'}]},{var,349,'NoElements'}]},[{type,350,constraint,[{atom,350,is_subtype},[{var,350,'ASet'},{type,350,union,[{user_type,350,a_set,[]},{user_type,350,ordset,[]}]}]]},{type,351,constraint,[{atom,351,is_subtype},[{var,351,'NoElements'},{type,351,non_neg_integer,[]}]]}]]}]}}]}},{{function,partition,1},[{file,[115,111,102,115,46,101,114,108]},{location,1091}],[<<112,97,114,116,105,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32,116,104,101,32,117,110,105,111,110,32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,115,101,116,115,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,119,111,32,101,108,101,109,101,110,116,115,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,101,113,117,97,108,32,105,102,32,116,104,101,121,32,98,101,108,111,110,103,32,116,111,32,116,104,101,32,115,97,109,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,101,116,115,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,97,44,98,44,99,93,44,91,100,44,101,44,102,93,44,91,103,44,104,44,105,93,93,41,44,10,83,101,116,115,50,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,98,44,99,44,100,93,44,91,101,44,102,44,103,93,44,91,104,44,105,44,106,93,93,41,44,10,80,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,115,111,102,115,58,117,110,105,111,110,40,83,101,116,115,49,44,32,83,101,116,115,50,41,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,41,46,10,91,91,97,93,44,91,98,44,99,93,44,91,100,93,44,91,101,44,102,93,44,91,103,93,44,91,104,44,105,93,44,91,106,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,53,51>>,signature => [{attribute,1091,spec,{{partition,1},[{type,1091,bounded_fun,[{type,1091,'fun',[{type,1091,product,[{var,1091,'SetOfSets'}]},{var,1091,'Partition'}]},[{type,1092,constraint,[{atom,1092,is_subtype},[{var,1092,'SetOfSets'},{user_type,1092,set_of_sets,[]}]]},{type,1093,constraint,[{atom,1093,is_subtype},[{var,1093,'Partition'},{user_type,1093,a_set,[]}]]}]]}]}}]}},{{function,partition,2},[{file,[115,111,102,115,46,101,114,108]},{location,1099}],[<<112,97,114,116,105,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,119,111,32,101,108,101,109,101,110,116,115,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,101,113,117,97,108,32,105,102,32,116,104,101,32,114,101,115,117,108,116,115,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,97,114,101,32,101,113,117,97,108,46>>]},{pre,[],[{code,[],[<<49,62,32,83,115,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,97,93,44,91,98,93,44,91,99,44,100,93,44,91,101,44,102,93,93,41,44,10,83,101,116,70,117,110,32,61,32,102,117,110,40,83,41,32,45,62,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,115,111,102,115,58,110,111,95,101,108,101,109,101,110,116,115,40,83,41,41,32,101,110,100,44,10,80,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,83,101,116,70,117,110,44,32,83,115,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,41,46,10,91,91,91,97,93,44,91,98,93,93,44,91,91,99,44,100,93,44,91,101,44,102,93,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,55,48>>,signature => [{attribute,1099,spec,{{partition,2},[{type,1099,bounded_fun,[{type,1099,'fun',[{type,1099,product,[{var,1099,'SetFun'},{var,1099,'Set'}]},{var,1099,'Partition'}]},[{type,1100,constraint,[{atom,1100,is_subtype},[{var,1100,'SetFun'},{user_type,1100,set_fun,[]}]]},{type,1101,constraint,[{atom,1101,is_subtype},[{var,1101,'Partition'},{user_type,1101,a_set,[]}]]},{type,1102,constraint,[{atom,1102,is_subtype},[{var,1102,'Set'},{user_type,1102,a_set,[]}]]}]]}]}}]}},{{function,partition,3},[{file,[115,111,102,115,46,101,114,108]},{location,1118}],[<<112,97,114,116,105,116,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,97,105,114,32,111,102,32,115,101,116,115,32,116,104,97,116,44,32,114,101,103,97,114,100,101,100,32,97,115,32,99,111,110,115,116,105,116,117,116,105,110,103,32,97,32,115,101,116,44,32,102,111,114,109,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<46,32,73,102,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,116,111,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,103,105,118,101,115,32,97,110,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<83,101,116,50>>]},<<44,32,116,104,101,32,101,108,101,109,101,110,116,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<83,101,116,51>>]},<<44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,101,108,101,109,101,110,116,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<83,101,116,52>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,50,44,52,44,54,93,41,44,10,123,82,50,44,82,51,125,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,49,44,32,82,49,44,32,83,41,44,10,123,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,44,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,51,41,125,46,10,123,91,123,50,44,98,125,93,44,91,123,49,44,97,125,44,123,51,44,99,125,93,125>>]}]},{p,[],[{code,[],[<<112,97,114,116,105,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<123,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41,44,32,100,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41,125>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,56,54>>,signature => [{attribute,1118,spec,{{partition,3},[{type,1118,bounded_fun,[{type,1118,'fun',[{type,1118,product,[{var,1118,'SetFun'},{var,1118,'Set1'},{var,1118,'Set2'}]},{type,1118,tuple,[{var,1118,'Set3'},{var,1118,'Set4'}]}]},[{type,1119,constraint,[{atom,1119,is_subtype},[{var,1119,'SetFun'},{user_type,1119,set_fun,[]}]]},{type,1120,constraint,[{atom,1120,is_subtype},[{var,1120,'Set1'},{user_type,1120,a_set,[]}]]},{type,1121,constraint,[{atom,1121,is_subtype},[{var,1121,'Set2'},{user_type,1121,a_set,[]}]]},{type,1122,constraint,[{atom,1122,is_subtype},[{var,1122,'Set3'},{user_type,1122,a_set,[]}]]},{type,1123,constraint,[{atom,1123,is_subtype},[{var,1123,'Set4'},{user_type,1123,a_set,[]}]]}]]}]}}]}},{{function,partition_family,2},[{file,[115,111,102,115,46,101,114,108]},{location,1404}],[<<112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,119,104,101,114,101,32,116,104,101,32,105,110,100,101,120,101,100,32,115,101,116,32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,119,111,32,101,108,101,109,101,110,116,115,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,101,113,117,97,108,32,105,102,32,116,104,101,32,114,101,115,117,108,116,115,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,105,46,32,84,104,105,115,32,105,32,105,115,32,116,104,101,32,105,110,100,101,120,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,109,97,112,115,32,111,110,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,113,117,105,118,97,108,101,110,99,101,95,99,108,97,115,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,97,44,97,44,97,125,44,123,97,44,97,44,98,44,98,125,44,123,97,44,98,44,98,44,98,125,93,41,44,10,83,101,116,70,117,110,32,61,32,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,65,44,95,44,67,44,95,125,41,32,45,62,32,123,65,44,67,125,32,101,110,100,125,44,10,70,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,40,83,101,116,70,117,110,44,32,83,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,123,97,44,97,125,44,91,123,97,44,97,44,97,44,97,125,93,125,44,123,123,97,44,98,125,44,91,123,97,44,97,44,98,44,98,125,44,123,97,44,98,44,98,44,98,125,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,48,57>>,signature => [{attribute,1404,spec,{{partition_family,2},[{type,1404,bounded_fun,[{type,1404,'fun',[{type,1404,product,[{var,1404,'SetFun'},{var,1404,'Set'}]},{var,1404,'Family'}]},[{type,1405,constraint,[{atom,1405,is_subtype},[{var,1405,'Family'},{user_type,1405,family,[]}]]},{type,1406,constraint,[{atom,1406,is_subtype},[{var,1406,'SetFun'},{user_type,1406,set_fun,[]}]]},{type,1407,constraint,[{atom,1407,is_subtype},[{var,1407,'Set'},{user_type,1407,a_set,[]}]]}]]}]}}]}},{{function,product,1},[{file,[115,111,102,115,46,101,114,108]},{location,444}],[<<112,114,111,100,117,99,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116,95,116,117,112,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,110,111,110,45,101,109,112,116,121,32,116,117,112,108,101,32,111,102,32,115,101,116,115,32>>,{code,[],[<<84,117,112,108,101,79,102,83,101,116,115>>]},<<46,32,73,102,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<82,101,108,97,116,105,111,110>>]},<<44,32,116,104,101,110,32,120,91,105,93,32,105,115,32,100,114,97,119,110,32,102,114,111,109,32,101,108,101,109,101,110,116,32,105,32,111,102,32>>,{code,[],[<<84,117,112,108,101,79,102,83,101,116,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,97,44,98,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,93,41,44,10,83,51,32,61,32,115,111,102,115,58,115,101,116,40,91,120,44,121,93,41,44,10,80,51,32,61,32,115,111,102,115,58,112,114,111,100,117,99,116,40,123,83,49,44,83,50,44,83,51,125,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,51,41,46,10,91,123,97,44,49,44,120,125,44,123,97,44,49,44,121,125,44,123,97,44,50,44,120,125,44,123,97,44,50,44,121,125,44,123,98,44,49,44,120,125,44,123,98,44,49,44,121,125,44,123,98,44,50,44,120,125,44,123,98,44,50,44,121,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,51,48>>,signature => [{attribute,444,spec,{{product,1},[{type,444,bounded_fun,[{type,444,'fun',[{type,444,product,[{var,444,'TupleOfSets'}]},{var,444,'Relation'}]},[{type,445,constraint,[{atom,445,is_subtype},[{var,445,'Relation'},{user_type,445,relation,[]}]]},{type,446,constraint,[{atom,446,is_subtype},[{var,446,'TupleOfSets'},{user_type,446,tuple_of,[{user_type,446,a_set,[]}]}]]}]]}]}}]}},{{function,product,2},[{file,[115,111,102,115,46,101,114,108]},{location,430}],[<<112,114,111,100,117,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,97,44,98,93,41,44,10,82,32,61,32,115,111,102,115,58,112,114,111,100,117,99,116,40,83,49,44,32,83,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,41,46,10,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,97,125,44,123,50,44,98,125,93>>]}]},{p,[],[{code,[],[<<112,114,111,100,117,99,116,40,83,49,44,194,160,83,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<112,114,111,100,117,99,116,40,123,83,49,44,194,160,83,50,125,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,52,57>>,signature => [{attribute,430,spec,{{product,2},[{type,430,bounded_fun,[{type,430,'fun',[{type,430,product,[{var,430,'Set1'},{var,430,'Set2'}]},{var,430,'BinRel'}]},[{type,431,constraint,[{atom,431,is_subtype},[{var,431,'BinRel'},{user_type,431,binary_relation,[]}]]},{type,432,constraint,[{atom,432,is_subtype},[{var,432,'Set1'},{user_type,432,a_set,[]}]]},{type,433,constraint,[{atom,433,is_subtype},[{var,433,'Set2'},{user_type,433,a_set,[]}]]}]]}]}}]}},{{function,projection,2},[{file,[115,111,102,115,46,101,114,108]},{location,1029}],[<<112,114,111,106,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,101,116,32,99,114,101,97,116,101,100,32,98,121,32,115,117,98,115,116,105,116,117,116,105,110,103,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,98,121,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,116,111,32,116,104,101,32,101,108,101,109,101,110,116,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,105,115,32,97,32,110,117,109,98,101,114,32,105,194,160,62,61,194,160,49,32,97,110,100,32>>,{code,[],[<<83,101,116,49>>]},<<32,105,115,32,97,32,114,101,108,97,116,105,111,110,44,32,116,104,101,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,115,101,116,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,114,111,106,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,114,111,106,101,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,111,110,116,111,32,99,111,111,114,100,105,110,97,116,101,32,105,46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,97,125,93,41,44,10,83,50,32,61,32,115,111,102,115,58,112,114,111,106,101,99,116,105,111,110,40,50,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,97,44,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,54,55>>,signature => [{attribute,1029,spec,{{projection,2},[{type,1029,bounded_fun,[{type,1029,'fun',[{type,1029,product,[{var,1029,'SetFun'},{var,1029,'Set1'}]},{var,1029,'Set2'}]},[{type,1030,constraint,[{atom,1030,is_subtype},[{var,1030,'SetFun'},{user_type,1030,set_fun,[]}]]},{type,1031,constraint,[{atom,1031,is_subtype},[{var,1031,'Set1'},{user_type,1031,a_set,[]}]]},{type,1032,constraint,[{atom,1032,is_subtype},[{var,1032,'Set2'},{user_type,1032,a_set,[]}]]}]]}]}}]}},{{function,range,1},[{file,[115,111,102,115,46,101,114,108]},{location,622}],[<<114,97,110,103,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,97,110,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,97,110,103,101>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,98,125,44,123,50,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,114,97,110,103,101,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,97,44,98,44,99,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,56,54>>,signature => [{attribute,622,spec,{{range,1},[{type,622,bounded_fun,[{type,622,'fun',[{type,622,product,[{var,622,'BinRel'}]},{var,622,'Set'}]},[{type,623,constraint,[{atom,623,is_subtype},[{var,623,'BinRel'},{user_type,623,binary_relation,[]}]]},{type,624,constraint,[{atom,624,is_subtype},[{var,624,'Set'},{user_type,624,a_set,[]}]]}]]}]}}]}},{{function,relation,2},[{file,[115,111,102,115,46,101,114,108]},{location,255}],[<<114,101,108,97,116,105,111,110,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,48,48>>,equiv => {function,relation,1},signature => [{attribute,255,spec,{{relation,2},[{type,255,bounded_fun,[{type,255,'fun',[{type,255,product,[{var,255,'Tuples'},{var,255,'Type'}]},{var,255,'Relation'}]},[{type,256,constraint,[{atom,256,is_subtype},[{var,256,'N'},{type,256,integer,[]}]]},{type,257,constraint,[{atom,257,is_subtype},[{var,257,'Type'},{type,257,union,[{var,257,'N'},{user_type,257,type,[]}]}]]},{type,258,constraint,[{atom,258,is_subtype},[{var,258,'Relation'},{user_type,258,relation,[]}]]},{type,259,constraint,[{atom,259,is_subtype},[{var,259,'Tuples'},{type,259,list,[{type,259,tuple,any}]}]]}]]}]}}]}},{{function,relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,243}],[<<114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,111,110>>]},<<46,32>>,{code,[],[<<114,101,108,97,116,105,111,110,40,82,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,82,44,194,160,84,41>>]},<<44,32,105,102,32,84,32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,97,110,100,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,114,101,108,97,116,105,111,110,46,32,73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,78,44,32,116,104,101,110,32>>,{code,[],[<<91,123,97,116,111,109,44,194,160,46,46,46,44,194,160,97,116,111,109,125,93,41>>]},<<44,32,119,104,101,114,101,32,116,104,101,32,116,117,112,108,101,32,115,105,122,101,32,105,115,32,78,44,32,105,115,32,117,115,101,100,32,97,115,32,116,121,112,101,32,111,102,32,116,104,101,32,114,101,108,97,116,105,111,110,46,32,73,102,32,110,111,32,116,121,112,101,32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,102,105,114,115,116,32,116,117,112,108,101,32,111,102,32>>,{code,[],[<<84,117,112,108,101,115>>]},<<32,105,115,32,117,115,101,100,32,105,102,32,116,104,101,114,101,32,105,115,32,115,117,99,104,32,97,32,116,117,112,108,101,46,32>>,{code,[],[<<114,101,108,97,116,105,111,110,40,91,93,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<114,101,108,97,116,105,111,110,40,91,93,44,194,160,50,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,48,48>>,signature => [{attribute,243,spec,{{relation,1},[{type,243,bounded_fun,[{type,243,'fun',[{type,243,product,[{var,243,'Tuples'}]},{var,243,'Relation'}]},[{type,244,constraint,[{atom,244,is_subtype},[{var,244,'Relation'},{user_type,244,relation,[]}]]},{type,245,constraint,[{atom,245,is_subtype},[{var,245,'Tuples'},{type,245,list,[{type,245,tuple,any}]}]]}]]}]}}]}},{{function,relation_to_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,600}],[<<114,101,108,97,116,105,111,110,95,116,111,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,101,113,117,97,108,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,109,97,103,101>>]},<<32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,105,32,117,110,100,101,114,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,98,44,49,125,44,123,99,44,50,125,44,123,99,44,51,125,93,41,44,10,70,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,95,116,111,95,102,97,109,105,108,121,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,98,44,91,49,93,125,44,123,99,44,91,50,44,51,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,49,57>>,signature => [{attribute,600,spec,{{relation_to_family,1},[{type,600,bounded_fun,[{type,600,'fun',[{type,600,product,[{var,600,'BinRel'}]},{var,600,'Family'}]},[{type,601,constraint,[{atom,601,is_subtype},[{var,601,'Family'},{user_type,601,family,[]}]]},{type,602,constraint,[{atom,602,is_subtype},[{var,602,'BinRel'},{user_type,602,binary_relation,[]}]]}]]}]}}]}},{{function,relative_product,2},[{file,[115,111,102,115,46,101,114,108]},{location,657}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,51,55>>,equiv => {function,relative_product,1},signature => [{attribute,657,spec,{{relative_product,2},[{type,657,bounded_fun,[{type,657,'fun',[{type,657,product,[{var,657,'ListOfBinRels'},{var,657,'BinRel1'}]},{var,657,'BinRel2'}]},[{type,658,constraint,[{atom,658,is_subtype},[{var,658,'ListOfBinRels'},{type,658,nonempty_list,[{var,658,'BinRel'}]}]]},{type,659,constraint,[{atom,659,is_subtype},[{var,659,'BinRel'},{user_type,659,binary_relation,[]}]]},{type,660,constraint,[{atom,660,is_subtype},[{var,660,'BinRel1'},{user_type,660,binary_relation,[]}]]},{type,661,constraint,[{atom,661,is_subtype},[{var,661,'BinRel2'},{user_type,661,binary_relation,[]}]]}]]}]}}]}},{{function,relative_product,1},[{file,[115,111,102,115,46,101,114,108]},{location,641}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<76,105,115,116,79,102,66,105,110,82,101,108,115>>]},<<32,105,115,32,97,32,110,111,110,45,101,109,112,116,121,32,108,105,115,116,32,91,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,93,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,44,32,116,104,101,110,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,117,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,105,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,105,115,32,111,109,105,116,116,101,100,44,32,116,104,101,32,114,101,108,97,116,105,111,110,32,111,102,32,101,113,117,97,108,105,116,121,32,98,101,116,119,101,101,110,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116,95,116,117,112,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,114,97,110,103,101,115,32,111,102,32,82,91,105,93,44,32,114,97,110,103,101,194,160,82,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,114,97,110,103,101,194,160,82,91,110,93,44,32,105,115,32,117,115,101,100,32,105,110,115,116,101,97,100,32,40,105,110,116,117,105,116,105,118,101,108,121,44,32,110,111,116,104,105,110,103,32,105,115,32,34,108,111,115,116,34,41,46>>]},{pre,[],[{code,[],[<<49,62,32,84,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,97,97,125,44,123,50,44,98,125,93,41,44,10,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,117,125,44,123,50,44,118,125,44,123,51,44,99,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,91,84,82,44,32,82,49,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,123,97,44,117,125,125,44,123,49,44,123,97,97,44,117,125,125,44,123,50,44,123,98,44,118,125,125,93>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,91,82,49,93,44,194,160,82,50,41>>]},<<32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32>>,{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,82,49,44,194,160,82,50,41>>]},<<59,32,116,104,101,32,108,105,115,116,32,111,102,32,111,110,101,32,101,108,101,109,101,110,116,32,105,115,32,110,111,116,32,105,100,101,110,116,105,102,105,101,100,32,119,105,116,104,32,116,104,101,32,101,108,101,109,101,110,116,32,105,116,115,101,108,102,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,51,55>>,signature => [{attribute,641,spec,{{relative_product,1},[{type,641,bounded_fun,[{type,641,'fun',[{type,641,product,[{var,641,'ListOfBinRels'}]},{var,641,'BinRel2'}]},[{type,642,constraint,[{atom,642,is_subtype},[{var,642,'ListOfBinRels'},{type,642,nonempty_list,[{var,642,'BinRel'}]}]]},{type,643,constraint,[{atom,643,is_subtype},[{var,643,'BinRel'},{user_type,643,binary_relation,[]}]]},{type,644,constraint,[{atom,644,is_subtype},[{var,644,'BinRel2'},{user_type,644,binary_relation,[]}]]}]]}]}}]}},{{function,relative_product,2},[{file,[115,111,102,115,46,101,114,108]},{location,657}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,54,56>>,signature => [{attribute,657,spec,{{relative_product,2},[{type,662,bounded_fun,[{type,662,'fun',[{type,662,product,[{var,662,'BinRel1'},{var,662,'BinRel2'}]},{var,662,'BinRel3'}]},[{type,663,constraint,[{atom,663,is_subtype},[{var,663,'BinRel1'},{user_type,663,binary_relation,[]}]]},{type,664,constraint,[{atom,664,is_subtype},[{var,664,'BinRel2'},{user_type,664,binary_relation,[]}]]},{type,665,constraint,[{atom,665,is_subtype},[{var,665,'BinRel3'},{user_type,665,binary_relation,[]}]]}]]}]}}]}},{{function,relative_product1,2},[{file,[115,111,102,115,46,101,114,108]},{location,685}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,111,110,118,101,114,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,110,118,101,114,115,101>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,97,110,100,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,97,97,125,44,123,50,44,98,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,117,125,44,123,50,44,118,125,44,123,51,44,99,125,93,41,44,10,82,51,32,61,32,115,111,102,115,58,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,40,82,49,44,32,82,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,51,41,46,10,91,123,97,44,117,125,44,123,97,97,44,117,125,44,123,98,44,118,125,93>>]}]},{p,[],[{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,40,82,49,44,194,160,82,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,99,111,110,118,101,114,115,101,40,82,49,41,44,194,160,82,50,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,55,57>>,signature => [{attribute,685,spec,{{relative_product1,2},[{type,685,bounded_fun,[{type,685,'fun',[{type,685,product,[{var,685,'BinRel1'},{var,685,'BinRel2'}]},{var,685,'BinRel3'}]},[{type,686,constraint,[{atom,686,is_subtype},[{var,686,'BinRel1'},{user_type,686,binary_relation,[]}]]},{type,687,constraint,[{atom,687,is_subtype},[{var,687,'BinRel2'},{user_type,687,binary_relation,[]}]]},{type,688,constraint,[{atom,688,is_subtype},[{var,688,'BinRel3'},{user_type,688,binary_relation,[]}]]}]]}]}}]}},{{function,restriction,2},[{file,[115,111,102,115,46,101,114,108]},{location,826}],[<<114,101,115,116,114,105,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,116,111,32>>,{code,[],[<<83,101,116>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,44,52,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,115,116,114,105,99,116,105,111,110,40,82,49,44,32,83,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,97,125,44,123,50,44,98,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,48,48>>,signature => [{attribute,826,spec,{{restriction,2},[{type,826,bounded_fun,[{type,826,'fun',[{type,826,product,[{var,826,'BinRel1'},{var,826,'Set'}]},{var,826,'BinRel2'}]},[{type,827,constraint,[{atom,827,is_subtype},[{var,827,'BinRel1'},{user_type,827,binary_relation,[]}]]},{type,828,constraint,[{atom,828,is_subtype},[{var,828,'BinRel2'},{user_type,828,binary_relation,[]}]]},{type,829,constraint,[{atom,829,is_subtype},[{var,829,'Set'},{user_type,829,a_set,[]}]]}]]}]}}]}},{{function,restriction,3},[{file,[115,111,102,115,46,101,114,108]},{location,892}],[<<114,101,115,116,114,105,99,116,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,103,105,118,101,115,32,97,110,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<83,101,116,50>>]},<<32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,98,44,99,44,100,93,41,44,10,83,51,32,61,32,115,111,102,115,58,114,101,115,116,114,105,99,116,105,111,110,40,50,44,32,83,49,44,32,83,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,51,41,46,10,91,123,50,44,98,125,44,123,51,44,99,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,49,54>>,signature => [{attribute,892,spec,{{restriction,3},[{type,892,bounded_fun,[{type,892,'fun',[{type,892,product,[{var,892,'SetFun'},{var,892,'Set1'},{var,892,'Set2'}]},{var,892,'Set3'}]},[{type,893,constraint,[{atom,893,is_subtype},[{var,893,'SetFun'},{user_type,893,set_fun,[]}]]},{type,894,constraint,[{atom,894,is_subtype},[{var,894,'Set1'},{user_type,894,a_set,[]}]]},{type,895,constraint,[{atom,895,is_subtype},[{var,895,'Set2'},{user_type,895,a_set,[]}]]},{type,896,constraint,[{atom,896,is_subtype},[{var,896,'Set3'},{user_type,896,a_set,[]}]]}]]}]}}]}},{{function,set,2},[{file,[115,111,102,115,46,101,114,108]},{location,204}],[<<115,101,116,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,51,50>>,equiv => {function,set,1},signature => [{attribute,204,spec,{{set,2},[{type,204,bounded_fun,[{type,204,'fun',[{type,204,product,[{var,204,'Terms'},{var,204,'Type'}]},{var,204,'Set'}]},[{type,205,constraint,[{atom,205,is_subtype},[{var,205,'Set'},{user_type,205,a_set,[]}]]},{type,206,constraint,[{atom,206,is_subtype},[{var,206,'Terms'},{type,206,list,[{type,206,term,[]}]}]]},{type,207,constraint,[{atom,207,is_subtype},[{var,207,'Type'},{user_type,207,type,[]}]]}]]}]}}]}},{{function,set,1},[{file,[115,111,102,115,46,101,114,108]},{location,195}],[<<115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<46,32>>,{code,[],[<<115,101,116,40,76,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,76,44,194,160,84,41>>]},<<44,32,105,102,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46,32,73,102,32,110,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<91,97,116,111,109,93>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,115,101,116,32,116,121,112,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,51,50>>,signature => [{attribute,195,spec,{{set,1},[{type,195,bounded_fun,[{type,195,'fun',[{type,195,product,[{var,195,'Terms'}]},{var,195,'Set'}]},[{type,196,constraint,[{atom,196,is_subtype},[{var,196,'Set'},{user_type,196,a_set,[]}]]},{type,197,constraint,[{atom,197,is_subtype},[{var,197,'Terms'},{type,197,list,[{type,197,term,[]}]}]]}]]}]}}]}},{{function,specification,2},[{file,[115,111,102,115,46,101,114,108]},{location,359}],[<<115,112,101,99,105,102,105,99,97,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,101,116,32,99,111,110,116,97,105,110,105,110,103,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,102,111,114,32,119,104,105,99,104,32>>,{code,[],[<<70,117,110>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,194,160,70,117,110,50,125>>]},<<44,32>>,{code,[],[<<70,117,110,50>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,111,102,32,101,97,99,104,32,101,108,101,109,101,110,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,101,97,99,104,32,101,108,101,109,101,110,116,46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,120,44,49,125,44,123,120,44,50,125,44,123,121,44,51,125,93,41,44,10,83,49,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,91,82,49,44,82,50,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,112,101,99,105,102,105,99,97,116,105,111,110,40,102,117,110,32,115,111,102,115,58,105,115,95,97,95,102,117,110,99,116,105,111,110,47,49,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,91,123,97,44,49,125,44,123,98,44,50,125,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,52,53>>,signature => [{attribute,359,spec,{{specification,2},[{type,359,bounded_fun,[{type,359,'fun',[{type,359,product,[{var,359,'Fun'},{var,359,'Set1'}]},{var,359,'Set2'}]},[{type,360,constraint,[{atom,360,is_subtype},[{var,360,'Fun'},{user_type,360,spec_fun,[]}]]},{type,361,constraint,[{atom,361,is_subtype},[{var,361,'Set1'},{user_type,361,a_set,[]}]]},{type,362,constraint,[{atom,362,is_subtype},[{var,362,'Set2'},{user_type,362,a_set,[]}]]}]]}]}}]}},{{function,strict_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,752}],[<<115,116,114,105,99,116,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,116,114,105,99,116,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,116,114,105,99,116,32,114,101,108,97,116,105,111,110>>]},<<32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,49,125,44,123,49,44,50,125,44,123,50,44,49,125,44,123,50,44,50,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,115,116,114,105,99,116,95,114,101,108,97,116,105,111,110,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,50,125,44,123,50,44,49,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,54,54>>,signature => [{attribute,752,spec,{{strict_relation,1},[{type,752,bounded_fun,[{type,752,'fun',[{type,752,product,[{var,752,'BinRel1'}]},{var,752,'BinRel2'}]},[{type,753,constraint,[{atom,753,is_subtype},[{var,753,'BinRel1'},{user_type,753,binary_relation,[]}]]},{type,754,constraint,[{atom,754,is_subtype},[{var,754,'BinRel2'},{user_type,754,binary_relation,[]}]]}]]}]}}]}},{{function,substitution,2},[{file,[115,111,102,115,46,101,114,108]},{location,1048}],[<<115,117,98,115,116,105,116,117,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,102,117,110,99,116,105,111,110,44,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,119,104,105,99,104,32,105,115,32>>,{code,[],[<<83,101,116,49>>]},<<46,32,84,104,101,32,118,97,108,117,101,32,111,102,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,116,111,32,116,104,101,32,101,108,101,109,101,110,116,46>>]},{pre,[],[{code,[],[<<49,62,32,76,32,61,32,91,123,97,44,49,125,44,123,98,44,50,125,93,46,10,91,123,97,44,49,125,44,123,98,44,50,125,93,10,50,62,32,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,112,114,111,106,101,99,116,105,111,110,40,49,44,115,111,102,115,58,114,101,108,97,116,105,111,110,40,76,41,41,41,46,10,91,97,44,98,93,10,51,62,32,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,115,117,98,115,116,105,116,117,116,105,111,110,40,49,44,115,111,102,115,58,114,101,108,97,116,105,111,110,40,76,41,41,41,46,10,91,123,123,97,44,49,125,44,97,125,44,123,123,98,44,50,125,44,98,125,93,10,52,62,32,83,101,116,70,117,110,32,61,32,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,65,44,95,125,61,69,41,32,45,62,32,123,69,44,65,125,32,101,110,100,125,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,112,114,111,106,101,99,116,105,111,110,40,83,101,116,70,117,110,44,115,111,102,115,58,114,101,108,97,116,105,111,110,40,76,41,41,41,46,10,91,123,123,97,44,49,125,44,97,125,44,123,123,98,44,50,125,44,98,125,93>>]}]},{p,[],[<<84,104,101,32,114,101,108,97,116,105,111,110,32,111,102,32,101,113,117,97,108,105,116,121,32,98,101,116,119,101,101,110,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,123,97,44,98,44,99,125,58>>]},{pre,[],[{code,[],[<<49,62,32,73,32,61,32,115,111,102,115,58,115,117,98,115,116,105,116,117,116,105,111,110,40,102,117,110,40,65,41,32,45,62,32,65,32,101,110,100,44,32,115,111,102,115,58,115,101,116,40,91,97,44,98,44,99,93,41,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,73,41,46,10,91,123,97,44,97,125,44,123,98,44,98,125,44,123,99,44,99,125,93>>]}]},{p,[],[<<76,101,116,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,98,101,32,97,32,115,101,116,32,111,102,32,115,101,116,115,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,109,97,112,115,32,101,97,99,104,32,101,108,101,109,101,110,116,32>>,{code,[],[<<83,101,116>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,111,110,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,109,97,103,101>>]},<<32,111,102,32>>,{code,[],[<<83,101,116>>]},<<32,117,110,100,101,114,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,98,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,117,110,99,116,105,111,110,58>>]},{pre,[],[{code,[],[<<105,109,97,103,101,115,40,83,101,116,79,102,83,101,116,115,44,32,66,105,110,82,101,108,41,32,45,62,10,32,32,32,70,117,110,32,61,32,102,117,110,40,83,101,116,41,32,45,62,32,115,111,102,115,58,105,109,97,103,101,40,66,105,110,82,101,108,44,32,83,101,116,41,32,101,110,100,44,10,32,32,32,115,111,102,115,58,115,117,98,115,116,105,116,117,116,105,111,110,40,70,117,110,44,32,83,101,116,79,102,83,101,116,115,41,46>>]}]},{p,[],[<<69,120,116,101,114,110,97,108,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32,115,111,114,116,101,100,32,108,105,115,116,115,46,32,83,111,44,32,99,114,101,97,116,105,110,103,32,116,104,101,32,105,109,97,103,101,32,111,102,32,97,32,115,101,116,32,117,110,100,101,114,32,97,32,114,101,108,97,116,105,111,110,32,82,32,99,97,110,32,116,114,97,118,101,114,115,101,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,82,32,40,116,111,32,116,104,97,116,32,99,111,109,101,115,32,116,104,101,32,115,111,114,116,105,110,103,32,111,102,32,114,101,115,117,108,116,115,44,32,116,104,101,32,105,109,97,103,101,41,46,32,73,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,109,97,103,101,47,50>>]}]},<<44,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,116,114,97,118,101,114,115,101,100,32,111,110,99,101,32,102,111,114,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,116,97,107,101,32,116,111,111,32,108,111,110,103,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,102,102,105,99,105,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,117,110,100,101,114,32,116,104,101,32,97,115,115,117,109,112,116,105,111,110,32,116,104,97,116,32,116,104,101,32,105,109,97,103,101,32,111,102,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,117,110,100,101,114,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,110,111,110,45,101,109,112,116,121,58>>]},{pre,[],[{code,[],[<<105,109,97,103,101,115,50,40,83,101,116,79,102,83,101,116,115,44,32,66,105,110,82,101,108,41,32,45,62,10,32,32,32,67,82,32,61,32,115,111,102,115,58,99,97,110,111,110,105,99,97,108,95,114,101,108,97,116,105,111,110,40,83,101,116,79,102,83,101,116,115,41,44,10,32,32,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,40,67,82,44,32,66,105,110,82,101,108,41,44,10,32,32,32,115,111,102,115,58,114,101,108,97,116,105,111,110,95,116,111,95,102,97,109,105,108,121,40,82,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,56,50>>,signature => [{attribute,1048,spec,{{substitution,2},[{type,1048,bounded_fun,[{type,1048,'fun',[{type,1048,product,[{var,1048,'SetFun'},{var,1048,'Set1'}]},{var,1048,'Set2'}]},[{type,1049,constraint,[{atom,1049,is_subtype},[{var,1049,'SetFun'},{user_type,1049,set_fun,[]}]]},{type,1050,constraint,[{atom,1050,is_subtype},[{var,1050,'Set1'},{user_type,1050,a_set,[]}]]},{type,1051,constraint,[{atom,1051,is_subtype},[{var,1051,'Set2'},{user_type,1051,a_set,[]}]]}]]}]}}]}},{{function,symdiff,2},[{file,[115,111,102,115,46,101,114,108]},{location,408}],[<<115,121,109,100,105,102,102,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,121,109,109,101,116,114,105,99,95,100,105,102,102,101,114,101,110,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,121,109,109,101,116,114,105,99,32,100,105,102,102,101,114,101,110,99,101>>]},<<32,40,111,114,32,116,104,101,32,66,111,111,108,101,97,110,32,115,117,109,41,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,44,51,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,50,44,51,44,52,93,41,44,10,80,32,61,32,115,111,102,115,58,115,121,109,100,105,102,102,40,83,49,44,32,83,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,41,46,10,91,49,44,52,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,51,49>>,signature => [{attribute,408,spec,{{symdiff,2},[{type,408,bounded_fun,[{type,408,'fun',[{type,408,product,[{var,408,'Set1'},{var,408,'Set2'}]},{var,408,'Set3'}]},[{type,409,constraint,[{atom,409,is_subtype},[{var,409,'Set1'},{user_type,409,a_set,[]}]]},{type,410,constraint,[{atom,410,is_subtype},[{var,410,'Set2'},{user_type,410,a_set,[]}]]},{type,411,constraint,[{atom,411,is_subtype},[{var,411,'Set3'},{user_type,411,a_set,[]}]]}]]}]}}]}},{{function,symmetric_partition,2},[{file,[115,111,102,115,46,101,114,108]},{location,418}],[<<115,121,109,109,101,116,114,105,99,95,112,97,114,116,105,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,114,105,112,108,101,32,111,102,32,115,101,116,115,58>>]},{ul,[],[{li,[],[{code,[],[<<83,101,116,51>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,116,104,97,116,32,100,111,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{li,[],[{code,[],[<<83,101,116,52>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{li,[],[{code,[],[<<83,101,116,53>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,50>>]},<<32,116,104,97,116,32,100,111,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32>>,{code,[],[<<83,101,116,49>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,52,55>>,signature => [{attribute,418,spec,{{symmetric_partition,2},[{type,418,bounded_fun,[{type,418,'fun',[{type,418,product,[{var,418,'Set1'},{var,418,'Set2'}]},{type,418,tuple,[{var,418,'Set3'},{var,418,'Set4'},{var,418,'Set5'}]}]},[{type,419,constraint,[{atom,419,is_subtype},[{var,419,'Set1'},{user_type,419,a_set,[]}]]},{type,420,constraint,[{atom,420,is_subtype},[{var,420,'Set2'},{user_type,420,a_set,[]}]]},{type,421,constraint,[{atom,421,is_subtype},[{var,421,'Set3'},{user_type,421,a_set,[]}]]},{type,422,constraint,[{atom,422,is_subtype},[{var,422,'Set4'},{user_type,422,a_set,[]}]]},{type,423,constraint,[{atom,423,is_subtype},[{var,423,'Set5'},{user_type,423,a_set,[]}]]}]]}]}}]}},{{function,to_external,1},[{file,[115,111,102,115,46,101,114,108]},{location,319}],[<<116,111,95,101,120,116,101,114,110,97,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,111,102,32,97,110,32,97,116,111,109,105,99,44,32,111,114,100,101,114,101,100,44,32,111,114,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,54,56>>,signature => [{attribute,319,spec,{{to_external,1},[{type,319,bounded_fun,[{type,319,'fun',[{type,319,product,[{var,319,'AnySet'}]},{var,319,'ExternalSet'}]},[{type,320,constraint,[{atom,320,is_subtype},[{var,320,'ExternalSet'},{user_type,320,external_set,[]}]]},{type,321,constraint,[{atom,321,is_subtype},[{var,321,'AnySet'},{user_type,321,anyset,[]}]]}]]}]}}]}},{{function,to_sets,1},[{file,[115,111,102,115,46,101,114,108]},{location,335}],[<<116,111,95,115,101,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,32>>,{code,[],[<<65,83,101,116>>]},<<32,97,115,32,97,32,116,117,112,108,101,32,111,102,32,115,101,116,115,44,32,97,110,100,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32>>,{code,[],[<<65,83,101,116>>]},<<32,97,115,32,97,32,115,111,114,116,101,100,32,108,105,115,116,32,111,102,32,115,101,116,115,32,119,105,116,104,111,117,116,32,100,117,112,108,105,99,97,116,101,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,55,55>>,signature => [{attribute,335,spec,{{to_sets,1},[{type,335,bounded_fun,[{type,335,'fun',[{type,335,product,[{var,335,'ASet'}]},{var,335,'Sets'}]},[{type,336,constraint,[{atom,336,is_subtype},[{var,336,'ASet'},{type,336,union,[{user_type,336,a_set,[]},{user_type,336,ordset,[]}]}]]},{type,337,constraint,[{atom,337,is_subtype},[{var,337,'Sets'},{type,337,union,[{user_type,337,tuple_of,[{var,337,'AnySet'}]},{type,337,list,[{var,337,'AnySet'}]}]}]]},{type,338,constraint,[{atom,338,is_subtype},[{var,338,'AnySet'},{user_type,338,anyset,[]}]]}]]}]}}]}},{{function,type,1},[{file,[115,111,102,115,46,101,114,108]},{location,327}],[<<116,121,112,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,111,102,32,97,110,32,97,116,111,109,105,99,44,32,111,114,100,101,114,101,100,44,32,111,114,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,56,56>>,signature => [{attribute,327,spec,{{type,1},[{type,327,bounded_fun,[{type,327,'fun',[{type,327,product,[{var,327,'AnySet'}]},{var,327,'Type'}]},[{type,328,constraint,[{atom,328,is_subtype},[{var,328,'AnySet'},{user_type,328,anyset,[]}]]},{type,329,constraint,[{atom,329,is_subtype},[{var,329,'Type'},{user_type,329,type,[]}]]}]]}]}}]}},{{function,union,1},[{file,[115,111,102,115,46,101,114,108]},{location,553}],[<<117,110,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,105,111,110>>]},<<32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,115,101,116,115,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,57,55>>,signature => [{attribute,553,spec,{{union,1},[{type,553,bounded_fun,[{type,553,'fun',[{type,553,product,[{var,553,'SetOfSets'}]},{var,553,'Set'}]},[{type,554,constraint,[{atom,554,is_subtype},[{var,554,'Set'},{user_type,554,a_set,[]}]]},{type,555,constraint,[{atom,555,is_subtype},[{var,555,'SetOfSets'},{user_type,555,set_of_sets,[]}]]}]]}]}}]}},{{function,union,2},[{file,[115,111,102,115,46,101,114,108]},{location,378}],[<<117,110,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,55,48,54>>,signature => [{attribute,378,spec,{{union,2},[{type,378,bounded_fun,[{type,378,'fun',[{type,378,product,[{var,378,'Set1'},{var,378,'Set2'}]},{var,378,'Set3'}]},[{type,379,constraint,[{atom,379,is_subtype},[{var,379,'Set1'},{user_type,379,a_set,[]}]]},{type,380,constraint,[{atom,380,is_subtype},[{var,380,'Set2'},{user_type,380,a_set,[]}]]},{type,381,constraint,[{atom,381,is_subtype},[{var,381,'Set3'},{user_type,381,a_set,[]}]]}]]}]}}]}},{{function,union_of_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,1288}],[<<117,110,105,111,110,95,111,102,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,48,44,50,44,52,93,125,44,123,98,44,91,48,44,49,44,50,93,125,44,123,99,44,91,50,44,51,93,125,93,41,44,10,83,32,61,32,115,111,102,115,58,117,110,105,111,110,95,111,102,95,102,97,109,105,108,121,40,70,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,48,44,49,44,50,44,51,44,52,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,55,49,53>>,signature => [{attribute,1288,spec,{{union_of_family,1},[{type,1288,bounded_fun,[{type,1288,'fun',[{type,1288,product,[{var,1288,'Family'}]},{var,1288,'Set'}]},[{type,1289,constraint,[{atom,1289,is_subtype},[{var,1289,'Family'},{user_type,1289,family,[]}]]},{type,1290,constraint,[{atom,1290,is_subtype},[{var,1290,'Set'},{user_type,1290,a_set,[]}]]}]]}]}}]}},{{function,weak_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,763}],[<<119,101,97,107,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,117,98,115,101,116,32,83,32,111,102,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,119,101,97,107,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<119,101,97,107,32,114,101,108,97,116,105,111,110>>]},<<32,87,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46,32,76,101,116,32,70,32,98,101,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,105,101,108,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,101,108,100>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46,32,84,104,101,32,115,117,98,115,101,116,32,83,32,105,115,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,32,83,32,121,32,105,102,32,120,32,87,32,121,32,102,111,114,32,115,111,109,101,32,120,32,105,110,32,70,32,97,110,100,32,102,111,114,32,115,111,109,101,32,121,32,105,110,32,70,46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,49,125,44,123,49,44,50,125,44,123,51,44,49,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,119,101,97,107,95,114,101,108,97,116,105,111,110,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,49,125,44,123,49,44,50,125,44,123,50,44,50,125,44,123,51,44,49,125,44,123,51,44,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,55,50,57>>,signature => [{attribute,763,spec,{{weak_relation,1},[{type,763,bounded_fun,[{type,763,'fun',[{type,763,product,[{var,763,'BinRel1'}]},{var,763,'BinRel2'}]},[{type,764,constraint,[{atom,764,is_subtype},[{var,764,'BinRel1'},{user_type,764,binary_relation,[]}]]},{type,765,constraint,[{atom,765,is_subtype},[{var,765,'BinRel2'},{user_type,765,binary_relation,[]}]]}]]}]}}]}},{{type,anyset,0},[{file,[115,111,102,115,46,101,114,108]},{location,117}],[<<45,116,121,112,101,32,97,110,121,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,121,32,107,105,110,100,32,111,102,32,115,101,116,32,40,97,108,115,111,32,105,110,99,108,117,100,101,100,32,97,114,101,32,116,104,101,32,97,116,111,109,105,99,32,115,101,116,115,41,46>>]}]},#{signature => [{attribute,117,type,{anyset,{type,117,union,[{user_type,117,ordset,[]},{user_type,117,a_set,[]}]},[]}}]}},{{type,binary_relation,0},[{file,[115,111,102,115,46,101,114,108]},{location,118}],[<<45,116,121,112,101,32,98,105,110,97,114,121,95,114,101,108,97,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,98,105,110,97,114,121,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<98,105,110,97,114,121,32,114,101,108,97,116,105,111,110>>]},<<46>>]}]},#{signature => [{attribute,118,type,{binary_relation,{user_type,118,relation,[]},[]}}]}},{{type,external_set,0},[{file,[115,111,102,115,46,101,114,108]},{location,119}],[<<45,116,121,112,101,32,101,120,116,101,114,110,97,108,95,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<46>>]}]},#{signature => [{attribute,119,type,{external_set,{type,119,term,[]},[]}}]}},{{type,family,0},[{file,[115,111,102,115,46,101,114,108]},{location,121}],[<<45,116,121,112,101,32,102,97,109,105,108,121,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,40,111,102,32,115,117,98,115,101,116,115,41,46>>]}]},#{signature => [{attribute,121,type,{family,{user_type,121,a_function,[]},[]}}]}},{{type,a_function,0},[{file,[115,111,102,115,46,101,114,108]},{location,120}],[<<45,116,121,112,101,32,97,95,102,117,110,99,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<46>>]}]},#{signature => [{attribute,120,type,{a_function,{user_type,120,relation,[]},[]}}]}},{{type,ordset,0},[{file,[115,111,102,115,46,101,114,108]},{location,122}],[<<45,116,121,112,101,32,111,114,100,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<111,114,100,101,114,101,100,32,115,101,116>>]},<<46>>]}]},#{signature => [{attribute,122,opaque,{ordset,{type,122,record,[{atom,122,'OrdSet'}]},[]}}]}},{{type,relation,0},[{file,[115,111,102,115,46,101,114,108]},{location,123}],[<<45,116,121,112,101,32,114,101,108,97,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,110,95,97,114,121,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<110,45,97,114,121,32,114,101,108,97,116,105,111,110>>]},<<46>>]}]},#{signature => [{attribute,123,type,{relation,{user_type,123,a_set,[]},[]}}]}},{{type,a_set,0},[{file,[115,111,102,115,46,101,114,108]},{location,124}],[<<45,116,121,112,101,32,97,95,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<46>>]}]},#{signature => [{attribute,124,opaque,{a_set,{type,124,record,[{atom,124,'Set'}]},[]}}]}},{{type,set_of_sets,0},[{file,[115,111,102,115,46,101,114,108]},{location,125}],[<<45,116,121,112,101,32,115,101,116,95,111,102,95,115,101,116,115,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<32,111,102,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,46>>]}]},#{signature => [{attribute,125,type,{set_of_sets,{user_type,125,a_set,[]},[]}}]}},{{type,set_fun,0},[{file,[115,111,102,115,46,101,114,108]},{location,126}],[<<45,116,121,112,101,32,115,101,116,95,102,117,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,95,102,117,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,101,116,70,117,110>>]},<<46>>]}]},#{signature => [{attribute,126,type,{set_fun,{type,126,union,[{type,126,pos_integer,[]},{type,127,tuple,[{atom,127,external},{type,127,'fun',[{type,127,product,[{user_type,127,external_set,[]}]},{user_type,127,external_set,[]}]}]},{type,128,'fun',[{type,128,product,[{user_type,128,anyset,[]}]},{user_type,128,anyset,[]}]}]},[]}}]}},{{type,spec_fun,0},[{file,[115,111,102,115,46,101,114,108]},{location,129}],[<<45,116,121,112,101,32,115,112,101,99,95,102,117,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,129,type,{spec_fun,{type,129,union,[{type,129,tuple,[{atom,129,external},{type,129,'fun',[{type,129,product,[{user_type,129,external_set,[]}]},{type,129,boolean,[]}]}]},{type,130,'fun',[{type,130,product,[{user_type,130,anyset,[]}]},{type,130,boolean,[]}]}]},[]}}]}},{{type,type,0},[{file,[115,111,102,115,46,101,114,108]},{location,131}],[<<45,116,121,112,101,32,116,121,112,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<46>>]}]},#{signature => [{attribute,131,type,{type,{type,131,term,[]},[]}}]}},{{type,tuple_of,1},[{file,[115,111,102,115,46,101,114,108]},{location,133}],[<<116,117,112,108,101,95,111,102,40,84,41>>],#{<<101,110>> => [{p,[],[<<65,32,116,117,112,108,101,32,119,104,101,114,101,32,116,104,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,111,102,32,116,121,112,101,32>>,{code,[],[<<84>>]},<<46>>]}]},#{signature => [{attribute,133,type,{tuple_of,{type,133,tuple,any},[{var,133,'_T'}]}}]}}]}. \ No newline at end of file
+{docs_v1,[{file,[115,111,102,115,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,#{<<101,110>> => [{p,[],[<<84,104,105,115,32,109,111,100,117,108,101,32,112,114,111,118,105,100,101,115,32,111,112,101,114,97,116,105,111,110,115,32,111,110,32,102,105,110,105,116,101,32,115,101,116,115,32,97,110,100,32,114,101,108,97,116,105,111,110,115,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32,115,101,116,115,46,32,73,110,116,117,105,116,105,118,101,108,121,44,32,97,32,115,101,116,32,105,115,32,97,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,101,108,101,109,101,110,116,115,59,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,98,101,108,111,110,103,115,32,116,111,32,116,104,101,32,115,101,116,44,32,97,110,100,32,116,104,101,32,115,101,116,32,99,111,110,116,97,105,110,115,32,101,118,101,114,121,32,101,108,101,109,101,110,116,46>>]},{p,[],[<<71,105,118,101,110,32,97,32,115,101,116,32,65,32,97,110,100,32,97,32,115,101,110,116,101,110,99,101,32,83,40,120,41,44,32,119,104,101,114,101,32,120,32,105,115,32,97,32,102,114,101,101,32,118,97,114,105,97,98,108,101,44,32,97,32,110,101,119,32,115,101,116,32,66,32,119,104,111,115,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,101,120,97,99,116,108,121,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,102,111,114,32,119,104,105,99,104,32,83,40,120,41,32,104,111,108,100,115,32,99,97,110,32,98,101,32,102,111,114,109,101,100,44,32,116,104,105,115,32,105,115,32,100,101,110,111,116,101,100,32,66,194,160,61,32,123,120,194,160,105,110,194,160,65,194,160,58,32,83,40,120,41,125,46,32,83,101,110,116,101,110,99,101,115,32,97,114,101,32,101,120,112,114,101,115,115,101,100,32,117,115,105,110,103,32,116,104,101,32,108,111,103,105,99,97,108,32,111,112,101,114,97,116,111,114,115,32,34,102,111,114,32,115,111,109,101,34,32,40,111,114,32,34,116,104,101,114,101,32,101,120,105,115,116,115,34,41,44,32,34,102,111,114,32,97,108,108,34,44,32,34,97,110,100,34,44,32,34,111,114,34,44,32,34,110,111,116,34,46,32,73,102,32,116,104,101,32,101,120,105,115,116,101,110,99,101,32,111,102,32,97,32,115,101,116,32,99,111,110,116,97,105,110,105,110,103,32,97,108,108,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,101,108,101,109,101,110,116,115,32,105,115,32,107,110,111,119,110,32,40,97,115,32,105,115,32,97,108,119,97,121,115,32,116,104,101,32,99,97,115,101,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,41,44,32,116,104,105,115,32,105,115,32,100,101,110,111,116,101,100,32,66,194,160,61,32,123,120,194,160,58,32,83,40,120,41,125,46>>]},{ul,[],[{li,[],[{p,[],[<<84,104,101,32>>,{em,[],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,97,44,32,98,44,32,97,110,100,32,99,32,105,115,32,100,101,110,111,116,101,100,32,123,97,44,194,160,98,44,194,160,99,125,46,32,84,104,105,115,32,110,111,116,97,116,105,111,110,32,105,115,32,110,111,116,32,116,111,32,98,101,32,99,111,110,102,117,115,101,100,32,119,105,116,104,32,116,117,112,108,101,115,46>>]},{p,[],[<<84,104,101,32>>,{em,[],[<<111,114,100,101,114,101,100,32,112,97,105,114>>]},<<32,111,102,32,97,32,97,110,100,32,98,44,32,119,105,116,104,32,102,105,114,115,116,32>>,{em,[],[<<99,111,111,114,100,105,110,97,116,101>>]},<<32,97,32,97,110,100,32,115,101,99,111,110,100,32,99,111,111,114,100,105,110,97,116,101,32,98,44,32,105,115,32,100,101,110,111,116,101,100,32,40,97,44,194,160,98,41,46,32,65,110,32,111,114,100,101,114,101,100,32,112,97,105,114,32,105,115,32,97,110,32>>,{em,[],[<<111,114,100,101,114,101,100,32,115,101,116>>]},<<32,111,102,32,116,119,111,32,101,108,101,109,101,110,116,115,46,32,73,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,111,114,100,101,114,101,100,32,115,101,116,115,32,99,97,110,32,99,111,110,116,97,105,110,32,111,110,101,44,32,116,119,111,44,32,111,114,32,109,111,114,101,32,101,108,101,109,101,110,116,115,44,32,97,110,100,32,112,97,114,101,110,116,104,101,115,101,115,32,97,114,101,32,117,115,101,100,32,116,111,32,101,110,99,108,111,115,101,32,116,104,101,32,101,108,101,109,101,110,116,115,46>>]},{p,[],[<<85,110,111,114,100,101,114,101,100,32,115,101,116,115,32,97,110,100,32,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,111,114,116,104,111,103,111,110,97,108,44,32,97,103,97,105,110,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,59,32,116,104,101,114,101,32,105,115,32,110,111,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,101,113,117,97,108,32,116,111,32,97,110,121,32,111,114,100,101,114,101,100,32,115,101,116,46>>]}]},{li,[],[{p,[],[<<84,104,101,32>>,{em,[],[<<101,109,112,116,121,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,115,32,110,111,32,101,108,101,109,101,110,116,115,46>>]},{p,[],[<<83,101,116,32,65,32,105,115,32>>,{a,[{id,<<101,113,117,97,108>>}],[]},{em,[],[<<101,113,117,97,108>>]},<<32,116,111,32,115,101,116,32,66,32,105,102,32,116,104,101,121,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32,101,108,101,109,101,110,116,115,44,32,119,104,105,99,104,32,105,115,32,100,101,110,111,116,101,100,32,65,194,160,61,194,160,66,46,32,84,119,111,32,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,101,113,117,97,108,32,105,102,32,116,104,101,121,32,99,111,110,116,97,105,110,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,97,110,100,32,104,97,118,101,32,101,113,117,97,108,32,101,108,101,109,101,110,116,115,32,97,116,32,101,97,99,104,32,99,111,111,114,100,105,110,97,116,101,46>>]},{p,[],[<<83,101,116,32,66,32,105,115,32,97,32>>,{a,[{id,<<115,117,98,115,101,116>>}],[]},{em,[],[<<115,117,98,115,101,116>>]},<<32,111,102,32,115,101,116,32,65,32,105,102,32,65,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,66,32,99,111,110,116,97,105,110,115,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<117,110,105,111,110>>}],[]},{em,[],[<<117,110,105,111,110>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,65,32,97,110,100,32,66,32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,97,110,100,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,66,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<105,110,116,101,114,115,101,99,116,105,111,110>>}],[]},{em,[],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,65,32,97,110,100,32,66,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,66,46>>]},{p,[],[<<84,119,111,32,115,101,116,115,32,97,114,101,32>>,{a,[{id,<<100,105,115,106,111,105,110,116>>}],[]},{em,[],[<<100,105,115,106,111,105,110,116>>]},<<32,105,102,32,116,104,101,105,114,32,105,110,116,101,114,115,101,99,116,105,111,110,32,105,115,32,116,104,101,32,101,109,112,116,121,32,115,101,116,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<100,105,102,102,101,114,101,110,99,101>>}],[]},{em,[],[<<100,105,102,102,101,114,101,110,99,101>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,65,32,97,110,100,32,66,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,65,32,116,104,97,116,32,100,111,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32,66,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<115,121,109,109,101,116,114,105,99,95,100,105,102,102,101,114,101,110,99,101>>}],[]},{em,[],[<<115,121,109,109,101,116,114,105,99,32,100,105,102,102,101,114,101,110,99,101>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,116,104,111,115,101,32,101,108,101,109,101,110,116,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,101,105,116,104,101,114,32,111,102,32,116,104,101,32,116,119,111,32,115,101,116,115,44,32,98,117,116,32,110,111,116,32,98,111,116,104,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<117,110,105,111,110,95,110>>}],[]},{em,[],[<<117,110,105,111,110>>]},<<32,111,102,32,97,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,115,101,116,115,32,105,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,116,104,101,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,97,116,32,108,101,97,115,116,32,111,110,101,32,115,101,116,32,111,102,32,116,104,101,32,99,111,108,108,101,99,116,105,111,110,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<105,110,116,101,114,115,101,99,116,105,111,110,95,110>>}],[]},{em,[],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32,97,32,110,111,110,45,101,109,112,116,121,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,115,101,116,115,32,105,115,32,116,104,101,32,115,101,116,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,97,108,108,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32,101,118,101,114,121,32,115,101,116,32,111,102,32,116,104,101,32,99,111,108,108,101,99,116,105,111,110,46>>]}]},{li,[],[{p,[],[<<84,104,101,32>>,{a,[{id,<<67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,119,111,32,115,101,116,115,32,88,32,97,110,100,32,89,44,32,100,101,110,111,116,101,100,32,88,194,160,195,151,194,160,89,44,32,105,115,32,116,104,101,32,115,101,116,32,123,97,194,160,58,32,97,194,160,61,32,40,120,44,194,160,121,41,32,102,111,114,32,115,111,109,101,32,120,194,160,105,110,194,160,88,32,97,110,100,32,102,111,114,32,115,111,109,101,32,121,194,160,105,110,194,160,89,125,46>>]},{p,[],[<<65,32>>,{a,[{id,<<114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<114,101,108,97,116,105,111,110>>]},<<32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,88,194,160,195,151,194,160,89,46,32,76,101,116,32,82,32,98,101,32,97,32,114,101,108,97,116,105,111,110,46,32,84,104,101,32,102,97,99,116,32,116,104,97,116,32,40,120,44,194,160,121,41,32,98,101,108,111,110,103,115,32,116,111,32,82,32,105,115,32,119,114,105,116,116,101,110,32,97,115,32,120,194,160,82,194,160,121,46,32,65,115,32,114,101,108,97,116,105,111,110,115,32,97,114,101,32,115,101,116,115,44,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,115,32,111,102,32,116,104,101,32,108,97,115,116,32,105,116,101,109,32,40,115,117,98,115,101,116,44,32,117,110,105,111,110,44,32,97,110,100,32,115,111,32,111,110,41,32,97,112,112,108,121,32,116,111,32,114,101,108,97,116,105,111,110,115,32,97,115,32,119,101,108,108,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<100,111,109,97,105,110>>}],[]},{em,[],[<<100,111,109,97,105,110>>]},<<32,111,102,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,120,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,121,194,160,105,110,194,160,89,125,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<114,97,110,103,101>>}],[]},{em,[],[<<114,97,110,103,101>>]},<<32,111,102,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,121,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,120,194,160,105,110,194,160,88,125,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<99,111,110,118,101,114,115,101>>}],[]},{em,[],[<<99,111,110,118,101,114,115,101>>]},<<32,111,102,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,97,194,160,58,32,97,194,160,61,32,40,121,44,194,160,120,41,32,102,111,114,32,115,111,109,101,32,40,120,44,194,160,121,41,194,160,105,110,194,160,82,125,46>>]},{p,[],[<<73,102,32,65,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,88,44,32,116,104,101,32>>,{a,[{id,<<105,109,97,103,101>>}],[]},{em,[],[<<105,109,97,103,101>>]},<<32,111,102,32,65,32,117,110,100,101,114,32,82,32,105,115,32,116,104,101,32,115,101,116,32,123,121,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,120,194,160,105,110,194,160,65,125,46,32,73,102,32,66,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,89,44,32,116,104,101,32>>,{a,[{id,<<105,110,118,101,114,115,101,95,105,109,97,103,101>>}],[]},{em,[],[<<105,110,118,101,114,115,101,32,105,109,97,103,101>>]},<<32,111,102,32,66,32,105,115,32,116,104,101,32,115,101,116,32,123,120,194,160,58,32,120,194,160,82,194,160,121,32,102,111,114,32,115,111,109,101,32,121,194,160,105,110,194,160,66,125,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,88,32,116,111,32,89,44,32,97,110,100,32,83,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,89,32,116,111,32,90,44,32,116,104,101,32>>,{a,[{id,<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,82,32,97,110,100,32,83,32,105,115,32,116,104,101,32,114,101,108,97,116,105,111,110,32,84,32,102,114,111,109,32,88,32,116,111,32,90,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,84,194,160,122,32,105,102,32,97,110,100,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,101,120,105,115,116,115,32,97,110,32,101,108,101,109,101,110,116,32,121,32,105,110,32,89,32,115,117,99,104,32,116,104,97,116,32,120,194,160,82,194,160,121,32,97,110,100,32,121,194,160,83,194,160,122,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<114,101,115,116,114,105,99,116,105,111,110>>}],[]},{em,[],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32,82,32,116,111,32,65,32,105,115,32,116,104,101,32,115,101,116,32,83,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,83,194,160,121,32,105,102,32,97,110,100,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,101,120,105,115,116,115,32,97,110,32,101,108,101,109,101,110,116,32,120,32,105,110,32,65,32,115,117,99,104,32,116,104,97,116,32,120,194,160,82,194,160,121,46>>]},{p,[],[<<73,102,32,83,32,105,115,32,97,32,114,101,115,116,114,105,99,116,105,111,110,32,111,102,32,82,32,116,111,32,65,44,32,116,104,101,110,32,82,32,105,115,32,97,110,32>>,{a,[{id,<<101,120,116,101,110,115,105,111,110>>}],[]},{em,[],[<<101,120,116,101,110,115,105,111,110>>]},<<32,111,102,32,83,32,116,111,32,88,46>>]},{p,[],[<<73,102,32,88,194,160,61,194,160,89,44,32,116,104,101,110,32,82,32,105,115,32,99,97,108,108,101,100,32,97,32,114,101,108,97,116,105,111,110,32>>,{em,[],[<<105,110>>]},<<32,88,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<102,105,101,108,100>>}],[]},{em,[],[<<102,105,101,108,100>>]},<<32,111,102,32,97,32,114,101,108,97,116,105,111,110,32,82,32,105,110,32,88,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,82,32,97,110,100,32,116,104,101,32,114,97,110,103,101,32,111,102,32,82,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,97,110,100,32,105,102,32,83,32,105,115,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,83,194,160,121,32,105,102,32,120,194,160,82,194,160,121,32,97,110,100,32,110,111,116,32,120,194,160,61,194,160,121,44,32,116,104,101,110,32,83,32,105,115,32,116,104,101,32>>,{a,[{id,<<115,116,114,105,99,116,95,114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<115,116,114,105,99,116>>]},<<32,114,101,108,97,116,105,111,110,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,82,46,32,67,111,110,118,101,114,115,101,108,121,44,32,105,102,32,83,32,105,115,32,97,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,97,110,100,32,105,102,32,82,32,105,115,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,82,194,160,121,32,105,102,32,120,194,160,83,194,160,121,32,111,114,32,120,194,160,61,194,160,121,44,32,116,104,101,110,32,82,32,105,115,32,116,104,101,32>>,{a,[{id,<<119,101,97,107,95,114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<119,101,97,107>>]},<<32,114,101,108,97,116,105,111,110,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,83,46>>]},{p,[],[<<65,32,114,101,108,97,116,105,111,110,32,82,32,105,110,32,88,32,105,115,32>>,{em,[],[<<114,101,102,108,101,120,105,118,101>>]},<<32,105,102,32,120,194,160,82,194,160,120,32,102,111,114,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,120,32,111,102,32,88,44,32,105,116,32,105,115,32>>,{em,[],[<<115,121,109,109,101,116,114,105,99>>]},<<32,105,102,32,120,194,160,82,194,160,121,32,105,109,112,108,105,101,115,32,116,104,97,116,32,121,194,160,82,194,160,120,44,32,97,110,100,32,105,116,32,105,115,32>>,{em,[],[<<116,114,97,110,115,105,116,105,118,101>>]},<<32,105,102,32,120,194,160,82,194,160,121,32,97,110,100,32,121,194,160,82,194,160,122,32,105,109,112,108,121,32,116,104,97,116,32,120,194,160,82,194,160,122,46>>]}]},{li,[],[{p,[],[<<65,32>>,{a,[{id,<<102,117,110,99,116,105,111,110>>}],[]},{em,[],[<<102,117,110,99,116,105,111,110>>]},<<32,70,32,105,115,32,97,32,114,101,108,97,116,105,111,110,44,32,97,32,115,117,98,115,101,116,32,111,102,32,88,194,160,195,151,194,160,89,44,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,70,32,105,115,32,101,113,117,97,108,32,116,111,32,88,32,97,110,100,32,115,117,99,104,32,116,104,97,116,32,102,111,114,32,101,118,101,114,121,32,120,32,105,110,32,88,32,116,104,101,114,101,32,105,115,32,97,32,117,110,105,113,117,101,32,101,108,101,109,101,110,116,32,121,32,105,110,32,89,32,119,105,116,104,32,40,120,44,194,160,121,41,32,105,110,32,70,46,32,84,104,101,32,108,97,116,116,101,114,32,99,111,110,100,105,116,105,111,110,32,99,97,110,32,98,101,32,102,111,114,109,117,108,97,116,101,100,32,97,115,32,102,111,108,108,111,119,115,58,32,105,102,32,120,194,160,70,194,160,121,32,97,110,100,32,120,194,160,70,194,160,122,44,32,116,104,101,110,32,121,194,160,61,194,160,122,46,32,73,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,105,116,32,105,115,32,110,111,116,32,114,101,113,117,105,114,101,100,32,116,104,97,116,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,70,32,105,115,32,101,113,117,97,108,32,116,111,32,88,32,102,111,114,32,97,32,114,101,108,97,116,105,111,110,32,116,111,32,98,101,32,99,111,110,115,105,100,101,114,101,100,32,97,32,102,117,110,99,116,105,111,110,46>>]},{p,[],[<<73,110,115,116,101,97,100,32,111,102,32,119,114,105,116,105,110,103,32,40,120,44,194,160,121,41,194,160,105,110,194,160,70,32,111,114,32,120,194,160,70,194,160,121,44,32,119,101,32,119,114,105,116,101,32,70,40,120,41,194,160,61,194,160,121,32,119,104,101,110,32,70,32,105,115,32,97,32,102,117,110,99,116,105,111,110,44,32,97,110,100,32,115,97,121,32,116,104,97,116,32,70,32,109,97,112,115,32,120,32,111,110,116,111,32,121,44,32,111,114,32,116,104,97,116,32,116,104,101,32,118,97,108,117,101,32,111,102,32,70,32,97,116,32,120,32,105,115,32,121,46>>]},{p,[],[<<65,115,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,114,101,108,97,116,105,111,110,115,44,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,115,32,111,102,32,116,104,101,32,108,97,115,116,32,105,116,101,109,32,40,100,111,109,97,105,110,44,32,114,97,110,103,101,44,32,97,110,100,32,115,111,32,111,110,41,32,97,112,112,108,121,32,116,111,32,102,117,110,99,116,105,111,110,115,32,97,115,32,119,101,108,108,46>>]},{p,[],[<<73,102,32,116,104,101,32,99,111,110,118,101,114,115,101,32,111,102,32,97,32,102,117,110,99,116,105,111,110,32,70,32,105,115,32,97,32,102,117,110,99,116,105,111,110,32,70,39,44,32,116,104,101,110,32,70,39,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{a,[{id,<<105,110,118,101,114,115,101>>}],[]},{em,[],[<<105,110,118,101,114,115,101>>]},<<32,111,102,32,70,46>>]},{p,[],[<<84,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,116,119,111,32,102,117,110,99,116,105,111,110,115,32,70,49,32,97,110,100,32,70,50,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{a,[{id,<<99,111,109,112,111,115,105,116,101>>}],[]},{em,[],[<<99,111,109,112,111,115,105,116,101>>]},<<32,111,102,32,70,49,32,97,110,100,32,70,50,32,105,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,70,49,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,70,50,46>>]}]},{li,[],[{p,[],[<<83,111,109,101,116,105,109,101,115,44,32,119,104,101,110,32,116,104,101,32,114,97,110,103,101,32,111,102,32,97,32,102,117,110,99,116,105,111,110,32,105,115,32,109,111,114,101,32,105,109,112,111,114,116,97,110,116,32,116,104,97,110,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,116,115,101,108,102,44,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100,32,97,32>>,{em,[],[<<102,97,109,105,108,121>>]},<<46>>]},{p,[],[<<84,104,101,32,100,111,109,97,105,110,32,111,102,32,97,32,102,97,109,105,108,121,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{em,[],[<<105,110,100,101,120,32,115,101,116>>]},<<44,32,97,110,100,32,116,104,101,32,114,97,110,103,101,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{em,[],[<<105,110,100,101,120,101,100,32,115,101,116>>]},<<46>>]},{p,[],[<<73,102,32,120,32,105,115,32,97,32,102,97,109,105,108,121,32,102,114,111,109,32,73,32,116,111,32,88,44,32,116,104,101,110,32,120,91,105,93,32,100,101,110,111,116,101,115,32,116,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,32,97,116,32,105,110,100,101,120,32,105,46,32,84,104,101,32,110,111,116,97,116,105,111,110,32,34,97,32,102,97,109,105,108,121,32,105,110,32,88,34,32,105,115,32,117,115,101,100,32,102,111,114,32,115,117,99,104,32,97,32,102,97,109,105,108,121,46>>]},{p,[],[<<87,104,101,110,32,116,104,101,32,105,110,100,101,120,101,100,32,115,101,116,32,105,115,32,97,32,115,101,116,32,111,102,32,115,117,98,115,101,116,115,32,111,102,32,97,32,115,101,116,32,88,44,32,119,101,32,99,97,108,108,32,120,32,97,32>>,{a,[{id,<<102,97,109,105,108,121>>}],[]},{em,[],[<<102,97,109,105,108,121,32,111,102,32,115,117,98,115,101,116,115>>]},<<32,111,102,32,88,46>>]},{p,[],[<<73,102,32,120,32,105,115,32,97,32,102,97,109,105,108,121,32,111,102,32,115,117,98,115,101,116,115,32,111,102,32,88,44,32,116,104,101,32,117,110,105,111,110,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,120,32,105,115,32,99,97,108,108,101,100,32,116,104,101,32>>,{em,[],[<<117,110,105,111,110,32,111,102,32,116,104,101,32,102,97,109,105,108,121>>]},<<32,120,46>>]},{p,[],[<<73,102,32,120,32,105,115,32,110,111,110,45,101,109,112,116,121,32,40,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,110,111,110,45,101,109,112,116,121,41,44,32,116,104,101,32>>,{em,[],[<<105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32,116,104,101,32,102,97,109,105,108,121>>]},<<32,120,32,105,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,120,46>>]},{p,[],[<<73,110,32,116,104,105,115,32,109,111,100,117,108,101,44,32,116,104,101,32,111,110,108,121,32,102,97,109,105,108,105,101,115,32,116,104,97,116,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,97,114,101,32,102,97,109,105,108,105,101,115,32,111,102,32,115,117,98,115,101,116,115,32,111,102,32,115,111,109,101,32,115,101,116,32,88,59,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,116,104,101,32,119,111,114,100,32,34,102,97,109,105,108,121,34,32,105,115,32,117,115,101,100,32,102,111,114,32,115,117,99,104,32,102,97,109,105,108,105,101,115,32,111,102,32,115,117,98,115,101,116,115,46>>]}]},{li,[],[{p,[],[<<65,32>>,{a,[{id,<<112,97,114,116,105,116,105,111,110>>}],[]},{em,[],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32,97,32,115,101,116,32,88,32,105,115,32,97,32,99,111,108,108,101,99,116,105,111,110,32,83,32,111,102,32,110,111,110,45,101,109,112,116,121,32,115,117,98,115,101,116,115,32,111,102,32,88,32,119,104,111,115,101,32,117,110,105,111,110,32,105,115,32,88,32,97,110,100,32,119,104,111,115,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,112,97,105,114,119,105,115,101,32,100,105,115,106,111,105,110,116,46>>]},{p,[],[<<65,32,114,101,108,97,116,105,111,110,32,105,110,32,97,32,115,101,116,32,105,115,32,97,110,32>>,{em,[],[<<101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110>>]},<<32,105,102,32,105,116,32,105,115,32,114,101,102,108,101,120,105,118,101,44,32,115,121,109,109,101,116,114,105,99,44,32,97,110,100,32,116,114,97,110,115,105,116,105,118,101,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,110,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,97,110,100,32,120,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,88,44,32,116,104,101,32>>,{a,[{id,<<101,113,117,105,118,97,108,101,110,99,101,95,99,108,97,115,115>>}],[]},{em,[],[<<101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115>>]},<<32,111,102,32,120,32,119,105,116,104,32,114,101,115,112,101,99,116,32,116,111,32,82,32,105,115,32,116,104,101,32,115,101,116,32,111,102,32,97,108,108,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,121,32,111,102,32,88,32,102,111,114,32,119,104,105,99,104,32,120,194,160,82,194,160,121,32,104,111,108,100,115,46,32,84,104,101,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,101,115,32,99,111,110,115,116,105,116,117,116,101,32,97,32,112,97,114,116,105,116,105,111,110,105,110,103,32,111,102,32,88,46,32,67,111,110,118,101,114,115,101,108,121,44,32,105,102,32,67,32,105,115,32,97,32,112,97,114,116,105,116,105,111,110,32,111,102,32,88,44,32,116,104,101,32,114,101,108,97,116,105,111,110,32,116,104,97,116,32,104,111,108,100,115,32,102,111,114,32,97,110,121,32,116,119,111,32,101,108,101,109,101,110,116,115,32,111,102,32,88,32,105,102,32,116,104,101,121,32,98,101,108,111,110,103,32,116,111,32,116,104,101,32,115,97,109,101,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,44,32,105,115,32,97,110,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,100,117,99,101,100,32,98,121,32,116,104,101,32,112,97,114,116,105,116,105,111,110,32,67,46>>]},{p,[],[<<73,102,32,82,32,105,115,32,97,110,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,32,88,44,32,116,104,101,32>>,{a,[{id,<<99,97,110,111,110,105,99,97,108,95,109,97,112>>}],[]},{em,[],[<<99,97,110,111,110,105,99,97,108,32,109,97,112>>]},<<32,105,115,32,116,104,101,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,109,97,112,115,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,111,102,32,88,32,111,110,116,111,32,105,116,115,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,46>>]}]},{li,[],[{p,[],[{a,[{id,<<98,105,110,97,114,121,95,114,101,108,97,116,105,111,110>>}],[]},<<82,101,108,97,116,105,111,110,115,32,97,115,32,100,101,102,105,110,101,100,32,97,98,111,118,101,32,40,97,115,32,115,101,116,115,32,111,102,32,111,114,100,101,114,101,100,32,112,97,105,114,115,41,32,97,114,101,32,102,114,111,109,32,110,111,119,32,111,110,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32>>,{em,[],[<<98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115>>]},<<46>>]},{p,[],[<<87,101,32,99,97,108,108,32,97,32,115,101,116,32,111,102,32,111,114,100,101,114,101,100,32,115,101,116,115,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,32,97,110,32>>,{a,[{id,<<110,95,97,114,121,95,114,101,108,97,116,105,111,110>>}],[]},{em,[],[<<40,110,45,97,114,121,41,32,114,101,108,97,116,105,111,110>>]},<<44,32,97,110,100,32,115,97,121,32,116,104,97,116,32,116,104,101,32,114,101,108,97,116,105,111,110,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32,116,104,101,32>>,{a,[{id,<<67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116,95,116,117,112,108,101>>}],[]},<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116,32,88,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,88,91,110,93,44,32,119,104,101,114,101,32,120,91,105,93,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,88,91,105,93,44,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<112,114,111,106,101,99,116,105,111,110>>}],[]},{em,[],[<<112,114,111,106,101,99,116,105,111,110>>]},<<32,111,102,32,97,110,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,32,82,32,111,110,116,111,32,99,111,111,114,100,105,110,97,116,101,32,105,32,105,115,32,116,104,101,32,115,101,116,32,123,120,91,105,93,194,160,58,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,105,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,32,105,110,32,82,32,102,111,114,32,115,111,109,101,32,120,91,106,93,194,160,105,110,194,160,88,91,106,93,44,32,49,194,160,60,61,194,160,106,194,160,60,61,194,160,110,32,97,110,100,32,110,111,116,32,105,194,160,61,194,160,106,125,46,32,84,104,101,32,112,114,111,106,101,99,116,105,111,110,115,32,111,102,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,82,32,111,110,116,111,32,116,104,101,32,102,105,114,115,116,32,97,110,100,32,115,101,99,111,110,100,32,99,111,111,114,100,105,110,97,116,101,115,32,97,114,101,32,116,104,101,32,100,111,109,97,105,110,32,97,110,100,32,116,104,101,32,114,97,110,103,101,32,111,102,32,82,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46>>]},{p,[],[<<84,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,99,97,110,32,98,101,32,103,101,110,101,114,97,108,105,122,101,100,32,116,111,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,115,32,97,115,32,102,111,108,108,111,119,115,46,32,76,101,116,32,84,82,32,98,101,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,102,114,111,109,32,88,32,116,111,32,89,91,105,93,32,97,110,100,32,83,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,40,89,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,89,91,110,93,41,32,116,111,32,90,46,32,84,104,101,32>>,{a,[{id,<<116,117,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,84,82,32,97,110,100,32,83,32,105,115,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,84,32,102,114,111,109,32,88,32,116,111,32,90,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,194,160,84,194,160,122,32,105,102,32,97,110,100,32,111,110,108,121,32,105,102,32,116,104,101,114,101,32,101,120,105,115,116,115,32,97,110,32,101,108,101,109,101,110,116,32,121,91,105,93,32,105,110,32,89,91,105,93,32,102,111,114,32,101,97,99,104,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,32,115,117,99,104,32,116,104,97,116,32,120,194,160,82,91,105,93,194,160,121,91,105,93,32,97,110,100,32,40,121,91,49,93,44,194,160,46,46,46,44,194,160,121,91,110,93,41,194,160,83,194,160,122,46,32,78,111,119,32,108,101,116,32,84,82,32,98,101,32,97,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,102,114,111,109,32,88,91,105,93,32,116,111,32,89,91,105,93,32,97,110,100,32,83,32,97,32,115,117,98,115,101,116,32,111,102,32,88,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,88,91,110,93,46,32,84,104,101,32>>,{a,[{id,<<109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>}],[]},{em,[],[<<109,117,108,116,105,112,108,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,84,82,32,97,110,100,32,83,32,105,115,32,100,101,102,105,110,101,100,32,116,111,32,98,101,32,116,104,101,32,115,101,116,32,123,122,194,160,58,32,122,194,160,61,32,40,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,44,32,40,121,91,49,93,44,46,46,46,44,121,91,110,93,41,41,32,102,111,114,32,115,111,109,101,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,194,160,105,110,194,160,83,32,97,110,100,32,102,111,114,32,115,111,109,101,32,40,120,91,105,93,44,194,160,121,91,105,93,41,32,105,110,32,82,91,105,93,44,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,125,46>>]},{p,[],[<<84,104,101,32>>,{a,[{id,<<110,97,116,117,114,97,108,95,106,111,105,110>>}],[]},{em,[],[<<110,97,116,117,114,97,108,32,106,111,105,110>>]},<<32,111,102,32,97,110,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,32,82,32,97,110,100,32,97,110,32,109,45,97,114,121,32,114,101,108,97,116,105,111,110,32,83,32,111,110,32,99,111,111,114,100,105,110,97,116,101,32,105,32,97,110,100,32,106,32,105,115,32,100,101,102,105,110,101,100,32,116,111,32,98,101,32,116,104,101,32,115,101,116,32,123,122,194,160,58,32,122,194,160,61,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,44,194,160,32,121,91,49,93,44,194,160,46,46,46,44,194,160,121,91,106,45,49,93,44,194,160,121,91,106,43,49,93,44,194,160,46,46,46,44,194,160,121,91,109,93,41,32,102,111,114,32,115,111,109,101,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,194,160,105,110,194,160,82,32,97,110,100,32,102,111,114,32,115,111,109,101,32,40,121,91,49,93,44,194,160,46,46,46,44,194,160,121,91,109,93,41,194,160,105,110,194,160,83,32,115,117,99,104,32,116,104,97,116,32,120,91,105,93,194,160,61,194,160,121,91,106,93,125,46>>]}]},{li,[],[{p,[],[{a,[{id,<<115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>}],[]},<<84,104,101,32,115,101,116,115,32,114,101,99,111,103,110,105,122,101,100,32,98,121,32,116,104,105,115,32,109,111,100,117,108,101,32,97,114,101,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,114,101,108,97,116,105,111,110,32,83,101,116,115,44,32,119,104,105,99,104,32,105,115,32,100,101,102,105,110,101,100,32,97,115,32,116,104,101,32,115,109,97,108,108,101,115,116,32,115,101,116,32,115,117,99,104,32,116,104,97,116,58>>]},{ul,[],[{li,[],[{p,[],[<<70,111,114,32,101,118,101,114,121,32,97,116,111,109,32,84,44,32,101,120,99,101,112,116,32,39,95,39,44,32,97,110,100,32,102,111,114,32,101,118,101,114,121,32,116,101,114,109,32,88,44,32,40,84,44,194,160,88,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40>>,{em,[],[<<97,116,111,109,105,99,32,115,101,116,115>>]},<<41,46>>]}]},{li,[],[{p,[],[<<40,91,39,95,39,93,44,194,160,91,93,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40,116,104,101,32>>,{em,[],[<<117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116>>]},<<41,46>>]}]},{li,[],[{p,[],[<<70,111,114,32,101,118,101,114,121,32,116,117,112,108,101,32,84,194,160,61,32,123,84,91,49,93,44,194,160,46,46,46,44,194,160,84,91,110,93,125,32,97,110,100,32,102,111,114,32,101,118,101,114,121,32,116,117,112,108,101,32,88,194,160,61,32,123,88,91,49,93,44,194,160,46,46,46,44,194,160,88,91,110,93,125,44,32,105,102,32,40,84,91,105,93,44,194,160,88,91,105,93,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,102,111,114,32,101,118,101,114,121,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,44,32,116,104,101,110,32,40,84,44,194,160,88,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40>>,{em,[],[<<111,114,100,101,114,101,100,32,115,101,116,115>>]},<<41,46>>]}]},{li,[],[{p,[],[<<70,111,114,32,101,118,101,114,121,32,116,101,114,109,32,84,44,32,105,102,32,88,32,105,115,32,116,104,101,32,101,109,112,116,121,32,108,105,115,116,32,111,114,32,97,32,110,111,110,45,101,109,112,116,121,32,115,111,114,116,101,100,32,108,105,115,116,32,91,88,91,49,93,44,194,160,46,46,46,44,194,160,88,91,110,93,93,32,119,105,116,104,111,117,116,32,100,117,112,108,105,99,97,116,101,115,32,115,117,99,104,32,116,104,97,116,32,40,84,44,194,160,88,91,105,93,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,102,111,114,32,101,118,101,114,121,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,44,32,116,104,101,110,32,40,91,84,93,44,194,160,88,41,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,115,32,40>>,{em,[],[<<116,121,112,101,100,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115>>]},<<41,46>>]}]}]},{p,[],[<<65,110,32>>,{a,[{id,<<101,120,116,101,114,110,97,108,95,115,101,116>>}],[]},{em,[],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,83,101,116,115,46>>]},{p,[],[<<65,32>>,{a,[{id,<<116,121,112,101>>}],[]},{em,[],[<<116,121,112,101>>]},<<32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,83,101,116,115,46>>]},{p,[],[<<73,102,32,83,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,40,84,44,194,160,88,41,32,111,102,32,83,101,116,115,44,32,116,104,101,110,32,84,32,105,115,32,97,32>>,{a,[{id,<<118,97,108,105,100,95,116,121,112,101>>}],[]},{em,[],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,111,102,32,88,44,32,84,32,105,115,32,116,104,101,32,116,121,112,101,32,111,102,32,83,44,32,97,110,100,32,88,32,105,115,32,116,104,101,32,101,120,116,101,114,110,97,108,32,115,101,116,32,111,102,32,83,46,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,116,101,114,109,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,116,101,114,109,47,50>>]}]},<<32,99,114,101,97,116,101,115,32,97,32,115,101,116,32,102,114,111,109,32,97,32,116,121,112,101,32,97,110,100,32,97,110,32,69,114,108,97,110,103,32,116,101,114,109,32,116,117,114,110,101,100,32,105,110,116,111,32,97,110,32,101,120,116,101,114,110,97,108,32,115,101,116,46>>]},{p,[],[<<84,104,101,32,115,101,116,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,83,101,116,115,32,97,114,101,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,102,117,110,99,116,105,111,110,32,83,101,116,32,102,114,111,109,32,83,101,116,115,32,116,111,32,69,114,108,97,110,103,32,116,101,114,109,115,32,97,110,100,32,115,101,116,115,32,111,102,32,69,114,108,97,110,103,32,116,101,114,109,115,58>>]},{ul,[],[{li,[],[<<83,101,116,40,84,44,84,101,114,109,41,194,160,61,32,84,101,114,109,44,32,119,104,101,114,101,32,84,32,105,115,32,97,110,32,97,116,111,109>>]},{li,[],[<<83,101,116,40,123,84,91,49,93,44,194,160,46,46,46,44,194,160,84,91,110,93,125,44,194,160,123,88,91,49,93,44,194,160,46,46,46,44,32,194,160,88,91,110,93,125,41,194,160,61,32,40,83,101,116,40,84,91,49,93,44,194,160,88,91,49,93,41,44,194,160,46,46,46,44,194,160,32,83,101,116,40,84,91,110,93,44,194,160,88,91,110,93,41,41>>]},{li,[],[<<83,101,116,40,91,84,93,44,194,160,91,88,91,49,93,44,194,160,46,46,46,44,194,160,88,91,110,93,93,41,194,160,61,32,123,83,101,116,40,84,44,194,160,88,91,49,93,41,44,194,160,46,46,46,44,194,160,83,101,116,40,84,44,194,160,88,91,110,93,41,125>>]},{li,[],[<<83,101,116,40,91,84,93,44,194,160,91,93,41,194,160,61,32,123,125>>]}]},{p,[],[<<87,104,101,110,32,116,104,101,114,101,32,105,115,32,110,111,32,114,105,115,107,32,111,102,32,99,111,110,102,117,115,105,111,110,44,32,101,108,101,109,101,110,116,115,32,111,102,32,83,101,116,115,32,97,114,101,32,105,100,101,110,116,105,102,105,101,100,32,119,105,116,104,32,116,104,101,32,115,101,116,115,32,116,104,101,121,32,114,101,112,114,101,115,101,110,116,46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105,102,32,85,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,99,97,108,108,105,110,103,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<117,110,105,111,110,47,50>>]}]},<<32,119,105,116,104,32,83,49,32,97,110,100,32,83,50,32,97,115,32,97,114,103,117,109,101,110,116,115,44,32,116,104,101,110,32,85,32,105,115,32,115,97,105,100,32,116,111,32,98,101,32,116,104,101,32,117,110,105,111,110,32,111,102,32,83,49,32,97,110,100,32,83,50,46,32,65,32,109,111,114,101,32,112,114,101,99,105,115,101,32,102,111,114,109,117,108,97,116,105,111,110,32,105,115,32,116,104,97,116,32,83,101,116,40,85,41,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32,83,101,116,40,83,49,41,32,97,110,100,32,83,101,116,40,83,50,41,46>>]}]}]},{p,[],[<<84,104,101,32,116,121,112,101,115,32,97,114,101,32,117,115,101,100,32,116,111,32,105,109,112,108,101,109,101,110,116,32,116,104,101,32,118,97,114,105,111,117,115,32,99,111,110,100,105,116,105,111,110,115,32,116,104,97,116,32,115,101,116,115,32,109,117,115,116,32,102,117,108,102,105,108,108,46,32,65,115,32,97,110,32,101,120,97,109,112,108,101,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,116,119,111,32,115,101,116,115,32,82,32,97,110,100,32,83,44,32,97,110,100,32,114,101,99,97,108,108,32,116,104,97,116,32,116,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,32,111,102,32,82,32,97,110,100,32,83,32,105,115,32,100,101,102,105,110,101,100,32,105,102,32,82,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,116,111,32,89,32,97,110,100,32,83,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,89,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116,44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>]}]},<<44,32,99,104,101,99,107,115,32,116,104,97,116,32,116,104,101,32,97,114,103,117,109,101,110,116,115,32,114,101,112,114,101,115,101,110,116,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,98,121,32,109,97,116,99,104,105,110,103,32,91,123,65,44,66,125,93,32,97,103,97,105,110,115,116,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,65,114,103,49,32,115,97,121,41,44,32,97,110,100,32,91,123,67,44,68,125,93,32,97,103,97,105,110,115,116,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,40,65,114,103,50,32,115,97,121,41,46,32,84,104,101,32,102,97,99,116,32,116,104,97,116,32,91,123,65,44,66,125,93,32,109,97,116,99,104,101,115,32,116,104,101,32,116,121,112,101,32,111,102,32,65,114,103,49,32,105,115,32,116,111,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,65,114,103,49,32,114,101,112,114,101,115,101,110,116,105,110,103,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,88,32,116,111,32,89,44,32,119,104,101,114,101,32,88,32,105,115,32,100,101,102,105,110,101,100,32,97,115,32,97,108,108,32,115,101,116,115,32,83,101,116,40,120,41,32,102,111,114,32,115,111,109,101,32,101,108,101,109,101,110,116,32,120,32,105,110,32,83,101,116,115,32,116,104,101,32,116,121,112,101,32,111,102,32,119,104,105,99,104,32,105,115,32,65,44,32,97,110,100,32,115,105,109,105,108,97,114,108,121,32,102,111,114,32,89,46,32,73,110,32,116,104,101,32,115,97,109,101,32,119,97,121,32,65,114,103,50,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,114,111,109,32,87,32,116,111,32,90,46,32,70,105,110,97,108,108,121,32,105,116,32,105,115,32,99,104,101,99,107,101,100,32,116,104,97,116,32,66,32,109,97,116,99,104,101,115,32,67,44,32,119,104,105,99,104,32,105,115,32,115,117,102,102,105,99,105,101,110,116,32,116,111,32,101,110,115,117,114,101,32,116,104,97,116,32,87,32,105,115,32,101,113,117,97,108,32,116,111,32,89,46,32,84,104,101,32,117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116,32,105,115,32,104,97,110,100,108,101,100,32,115,101,112,97,114,97,116,101,108,121,58,32,105,116,115,32,116,121,112,101,44,32,91,39,95,39,93,44,32,109,97,116,99,104,101,115,32,116,104,101,32,116,121,112,101,32,111,102,32,97,110,121,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46>>]},{p,[],[<<65,32,102,101,119,32,102,117,110,99,116,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,32,40>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,114,101,115,116,114,105,99,116,105,111,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,114,101,115,116,114,105,99,116,105,111,110,47,51>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,97,114,116,105,116,105,111,110,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,114,111,106,101,99,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<112,114,111,106,101,99,116,105,111,110,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110,47,51>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,115,116,114,105,99,116,105,111,110,47,51>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,117,98,115,116,105,116,117,116,105,111,110,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,117,98,115,116,105,116,117,116,105,111,110,47,50>>]}]},<<41,32,97,99,99,101,112,116,32,97,110,32,69,114,108,97,110,103,32,102,117,110,99,116,105,111,110,32,97,115,32,97,32,109,101,97,110,115,32,116,111,32,109,111,100,105,102,121,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,97,32,103,105,118,101,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46,32>>,{a,[{id,<<115,101,116,95,102,117,110>>}],[]},<<83,117,99,104,32,97,32,102,117,110,99,116,105,111,110,44,32,99,97,108,108,101,100,32,83,101,116,70,117,110,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,44,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,102,117,110,99,116,105,111,110,97,108,32,111,98,106,101,99,116,32,40,102,117,110,41,44,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,194,160,70,117,110,125>>]},<<44,32,111,114,32,97,110,32,105,110,116,101,103,101,114,58>>]},{ul,[],[{li,[],[{p,[],[<<73,102,32,83,101,116,70,117,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,102,117,110,44,32,116,104,101,32,102,117,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,103,105,118,101,110,32,115,101,116,32,97,110,100,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,115,115,117,109,101,100,32,116,111,32,98,101,32,97,32,115,101,116,46>>]}]},{li,[],[{p,[],[<<73,102,32,83,101,116,70,117,110,32,105,115,32,115,112,101,99,105,102,105,101,100,32,97,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,32,70,117,110,125>>]},<<44,32,70,117,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32,101,120,116,101,114,110,97,108,32,115,101,116,32,111,102,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,103,105,118,101,110,32,115,101,116,32,97,110,100,32,116,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,115,32,97,115,115,117,109,101,100,32,116,111,32,98,101,32,97,110,32,101,120,116,101,114,110,97,108,32,115,101,116,46,32,83,101,108,101,99,116,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,97,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,97,115,32,101,120,116,101,114,110,97,108,32,115,101,116,115,32,97,110,100,32,97,115,115,101,109,98,108,105,110,103,32,97,32,110,101,119,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,102,114,111,109,32,97,32,108,105,115,116,32,111,102,32,101,120,116,101,114,110,97,108,32,115,101,116,115,32,105,115,32,105,110,32,116,104,101,32,112,114,101,115,101,110,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,32,116,104,97,110,32,109,111,100,105,102,121,105,110,103,32,101,97,99,104,32,101,108,101,109,101,110,116,32,97,115,32,97,32,115,101,116,46,32,72,111,119,101,118,101,114,44,32,116,104,105,115,32,111,112,116,105,109,105,122,97,116,105,111,110,32,99,97,110,32,111,110,108,121,32,98,101,32,117,115,101,100,32,119,104,101,110,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,97,114,101,32,97,116,111,109,105,99,32,111,114,32,111,114,100,101,114,101,100,32,115,101,116,115,46,32,73,116,32,109,117,115,116,32,97,108,115,111,32,98,101,32,116,104,101,32,99,97,115,101,32,116,104,97,116,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,101,108,101,109,101,110,116,115,32,109,97,116,99,104,101,115,32,115,111,109,101,32,99,108,97,117,115,101,32,111,102,32,70,117,110,32,40,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,99,114,101,97,116,101,100,32,115,101,116,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32,70,117,110,32,116,111,32,116,104,101,32,116,121,112,101,32,111,102,32,116,104,101,32,103,105,118,101,110,32,115,101,116,41,44,32,97,110,100,32,116,104,97,116,32,70,117,110,32,100,111,101,115,32,110,111,116,104,105,110,103,32,98,117,116,32,115,101,108,101,99,116,105,110,103,44,32,100,117,112,108,105,99,97,116,105,110,103,44,32,111,114,32,114,101,97,114,114,97,110,103,105,110,103,32,112,97,114,116,115,32,111,102,32,116,104,101,32,101,108,101,109,101,110,116,115,46>>]}]},{li,[],[{p,[],[<<83,112,101,99,105,102,121,105,110,103,32,97,32,83,101,116,70,117,110,32,97,115,32,97,110,32,105,110,116,101,103,101,114,32,73,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,112,101,99,105,102,121,105,110,103,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,88,41,194,160,45,62,32,101,108,101,109,101,110,116,40,73,44,194,160,88,41,194,160,101,110,100,125>>]},<<44,32,98,117,116,32,105,115,32,116,111,32,98,101,32,112,114,101,102,101,114,114,101,100,44,32,97,115,32,105,116,32,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,108,101,32,116,111,32,104,97,110,100,108,101,32,116,104,105,115,32,99,97,115,101,32,101,118,101,110,32,109,111,114,101,32,101,102,102,105,99,105,101,110,116,108,121,46>>]}]}]},{p,[],[<<69,120,97,109,112,108,101,115,32,111,102,32,83,101,116,70,117,110,115,58>>]},{pre,[],[{code,[],[<<102,117,110,32,115,111,102,115,58,117,110,105,111,110,47,49,10,102,117,110,40,83,41,32,45,62,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,49,44,32,83,41,32,101,110,100,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,65,41,32,45,62,32,65,32,101,110,100,125,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,65,44,95,44,67,125,41,32,45,62,32,123,67,44,65,125,32,101,110,100,125,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,95,44,123,95,44,67,125,125,41,32,45,62,32,67,32,101,110,100,125,10,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,95,44,123,95,44,123,95,44,69,125,61,67,125,125,41,32,45,62,32,123,69,44,123,69,44,67,125,125,32,101,110,100,125,10,50>>]}]},{p,[],[<<84,104,101,32,111,114,100,101,114,32,105,110,32,119,104,105,99,104,32,97,32,83,101,116,70,117,110,32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,97,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,101,100,44,32,97,110,100,32,99,97,110,32,99,104,97,110,103,101,32,105,110,32,102,117,116,117,114,101,32,118,101,114,115,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,46>>]},{p,[],[<<84,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,32,105,115,32,100,111,109,105,110,97,116,101,100,32,98,121,32,116,104,101,32,116,105,109,101,32,105,116,32,116,97,107,101,115,32,116,111,32,115,111,114,116,32,108,105,115,116,115,46,32,87,104,101,110,32,110,111,32,115,111,114,116,105,110,103,32,105,115,32,110,101,101,100,101,100,44,32,116,104,101,32,101,120,101,99,117,116,105,111,110,32,116,105,109,101,32,105,115,32,105,110,32,116,104,101,32,119,111,114,115,116,32,99,97,115,101,32,112,114,111,112,111,114,116,105,111,110,97,108,32,116,111,32,116,104,101,32,115,117,109,32,111,102,32,116,104,101,32,115,105,122,101,115,32,111,102,32,116,104,101,32,105,110,112,117,116,32,97,114,103,117,109,101,110,116,115,32,97,110,100,32,116,104,101,32,114,101,116,117,114,110,101,100,32,118,97,108,117,101,46,32,65,32,102,101,119,32,102,117,110,99,116,105,111,110,115,32,101,120,101,99,117,116,101,32,105,110,32,99,111,110,115,116,97,110,116,32,116,105,109,101,58,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,115,95,101,109,112,116,121,95,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,101,109,112,116,121,95,115,101,116,47,49>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,115,95,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,115,101,116,47,49>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,115,95,115,111,102,115,95,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,115,95,115,111,102,115,95,115,101,116,47,49>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,111,95,101,120,116,101,114,110,97,108,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,111,95,101,120,116,101,114,110,97,108,47,49>>]}]},<<32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<116,121,112,101,47,49>>]}]},<<46>>]},{p,[],[<<84,104,101,32,102,117,110,99,116,105,111,110,115,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,32,101,120,105,116,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<44,32>>,{code,[],[<<98,97,100,95,102,117,110,99,116,105,111,110>>]},<<44,32,111,114,32>>,{code,[],[<<116,121,112,101,95,109,105,115,109,97,116,99,104>>]},<<32,109,101,115,115,97,103,101,32,119,104,101,110,32,103,105,118,101,110,32,98,97,100,108,121,32,102,111,114,109,101,100,32,97,114,103,117,109,101,110,116,115,32,111,114,32,115,101,116,115,32,116,104,101,32,116,121,112,101,115,32,111,102,32,119,104,105,99,104,32,97,114,101,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,46>>]},{p,[],[<<87,104,101,110,32,99,111,109,112,97,114,105,110,103,32,101,120,116,101,114,110,97,108,32,115,101,116,115,44,32,111,112,101,114,97,116,111,114,32>>,{code,[],[<<61,61,47,50>>]},<<32,105,115,32,117,115,101,100,46>>]},{h2,[],[<<83,101,101,32,65,108,115,111>>]},{p,[],[{a,[{href,<<115,116,100,108,105,98,58,100,105,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,99,116,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,100,105,103,114,97,112,104>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<100,105,103,114,97,112,104,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,111,114,100,100,105,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,114,100,100,105,99,116,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,111,114,100,115,101,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<111,114,100,115,101,116,115,40,51,41>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,101,116,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[{code,[],[<<115,101,116,115,40,51,41>>]}]}]}]},#{name => <<115,111,102,115>>,otp_doc_vsn => {1,0,0},source => [46,46,47,120,109,108,47,115,111,102,115,46,120,109,108],types => #{{a_function,0} => {attribute,{120,2},type,{a_function,{user_type,{120,23},relation,[]},[]}},{a_set,0} => {attribute,{124,2},opaque,{a_set,{type,{124,20},record,[{atom,{124,22},'Set'}]},[]}},{anyset,0} => {attribute,{117,2},type,{anyset,{type,{117,19},union,[{user_type,{117,19},ordset,[]},{user_type,{117,30},a_set,[]}]},[]}},{binary_relation,0} => {attribute,{118,2},type,{binary_relation,{user_type,{118,28},relation,[]},[]}},{external_set,0} => {attribute,{119,2},type,{external_set,{type,{119,25},term,[]},[]}},{family,0} => {attribute,{121,2},type,{family,{user_type,{121,19},a_function,[]},[]}},{ordset,0} => {attribute,{122,2},opaque,{ordset,{type,{122,21},record,[{atom,{122,23},'OrdSet'}]},[]}},{relation,0} => {attribute,{123,2},type,{relation,{user_type,{123,21},a_set,[]},[]}},{set_fun,0} => {attribute,{126,2},type,{set_fun,{type,{126,20},union,[{type,{126,20},pos_integer,[]},{type,{127,20},tuple,[{atom,{127,21},external},{type,{127,35},'fun',[{type,{127,35},product,[{user_type,{127,36},external_set,[]}]},{user_type,{127,55},external_set,[]}]}]},{type,{128,24},'fun',[{type,{128,24},product,[{user_type,{128,25},anyset,[]}]},{user_type,{128,38},anyset,[]}]}]},[]}},{set_of_sets,0} => {attribute,{125,2},type,{set_of_sets,{user_type,{125,24},a_set,[]},[]}},{spec_fun,0} => {attribute,{129,2},type,{spec_fun,{type,{129,21},union,[{type,{129,21},tuple,[{atom,{129,22},external},{type,{129,36},'fun',[{type,{129,36},product,[{user_type,{129,37},external_set,[]}]},{type,{129,56},boolean,[]}]}]},{type,{130,25},'fun',[{type,{130,25},product,[{user_type,{130,26},anyset,[]}]},{type,{130,39},boolean,[]}]}]},[]}},{tuple_of,1} => {attribute,{133,2},type,{tuple_of,{type,{133,23},tuple,any},[{var,{133,16},'_T'}]}},{type,0} => {attribute,{131,2},type,{type,{type,{131,17},term,[]},[]}}}},[{{function,fam2rel,1},[{file,[115,111,102,115,46,101,114,108]},{location,0}],[<<102,97,109,50,114,101,108,47,49>>],hidden,#{}},{{function,rel2fam,1},[{file,[115,111,102,115,46,101,114,108]},{location,0}],[<<114,101,108,50,102,97,109,47,49>>],hidden,#{}},{{function,a_function,2},[{file,[115,111,102,115,46,101,114,108]},{location,277}],[<<97,95,102,117,110,99,116,105,111,110,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,53,56>>,equiv => {function,a_function,1},signature => [{attribute,{277,2},spec,{{a_function,2},[{type,{277,17},bounded_fun,[{type,{277,17},'fun',[{type,{277,17},product,[{var,{277,18},'Tuples'},{var,{277,26},'Type'}]},{var,{277,35},'Function'}]},[{type,{278,7},constraint,[{atom,{278,7},is_subtype},[{var,{278,7},'Function'},{user_type,{278,19},a_function,[]}]]},{type,{279,7},constraint,[{atom,{279,7},is_subtype},[{var,{279,7},'Tuples'},{type,{279,17},list,[{type,{279,18},tuple,any}]}]]},{type,{280,7},constraint,[{atom,{280,7},is_subtype},[{var,{280,7},'Type'},{user_type,{280,15},type,[]}]]}]]}]}}]}},{{function,a_function,1},[{file,[115,111,102,115,46,101,114,108]},{location,265}],[<<97,95,102,117,110,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<46,32>>,{code,[],[<<97,95,102,117,110,99,116,105,111,110,40,70,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,70,44,194,160,84,41>>]},<<32,105,102,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,102,117,110,99,116,105,111,110,46,32,73,102,32,110,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<91,123,97,116,111,109,44,194,160,97,116,111,109,125,93>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,102,117,110,99,116,105,111,110,32,116,121,112,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,53,56>>,signature => [{attribute,{265,2},spec,{{a_function,1},[{type,{265,17},bounded_fun,[{type,{265,17},'fun',[{type,{265,17},product,[{var,{265,18},'Tuples'}]},{var,{265,29},'Function'}]},[{type,{266,7},constraint,[{atom,{266,7},is_subtype},[{var,{266,7},'Function'},{user_type,{266,19},a_function,[]}]]},{type,{267,7},constraint,[{atom,{267,7},is_subtype},[{var,{267,7},'Tuples'},{type,{267,17},list,[{type,{267,18},tuple,any}]}]]}]]}]}}]}},{{function,canonical_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,577}],[<<99,97,110,111,110,105,99,97,108,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,40,69,44,194,160,83,101,116,41,32,115,117,99,104,32,116,104,97,116,32,83,101,116,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,97,110,100,32,69,32,98,101,108,111,110,103,115,32,116,111,32,83,101,116,46,32,73,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32,97,32,115,101,116,32,88,32,97,110,100,32,82,32,105,115,32,116,104,101,32,101,113,117,105,118,97,108,101,110,99,101,32,114,101,108,97,116,105,111,110,32,105,110,32,88,32,105,110,100,117,99,101,100,32,98,121,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<44,32,116,104,101,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,114,101,108,97,116,105,111,110,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,97,110,111,110,105,99,97,108,95,109,97,112>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,97,110,111,110,105,99,97,108,32,109,97,112>>]},<<32,102,114,111,109,32,88,32,111,110,116,111,32,116,104,101,32,101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,101,115,32,119,105,116,104,32,114,101,115,112,101,99,116,32,116,111,32,82,46>>]},{pre,[],[{code,[],[<<49,62,32,83,115,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,97,44,98,93,44,91,98,44,99,93,93,41,44,10,67,82,32,61,32,115,111,102,115,58,99,97,110,111,110,105,99,97,108,95,114,101,108,97,116,105,111,110,40,83,115,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,67,82,41,46,10,91,123,97,44,91,97,44,98,93,125,44,123,98,44,91,97,44,98,93,125,44,123,98,44,91,98,44,99,93,125,44,123,99,44,91,98,44,99,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,55,50>>,signature => [{attribute,{577,2},spec,{{canonical_relation,1},[{type,{577,25},bounded_fun,[{type,{577,25},'fun',[{type,{577,25},product,[{var,{577,26},'SetOfSets'}]},{var,{577,40},'BinRel'}]},[{type,{578,7},constraint,[{atom,{578,7},is_subtype},[{var,{578,7},'BinRel'},{user_type,{578,17},binary_relation,[]}]]},{type,{579,7},constraint,[{atom,{579,7},is_subtype},[{var,{579,7},'SetOfSets'},{user_type,{579,20},set_of_sets,[]}]]}]]}]}}]}},{{function,composite,2},[{file,[115,111,102,115,46,101,114,108]},{location,844}],[<<99,111,109,112,111,115,105,116,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,111,109,112,111,115,105,116,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,109,112,111,115,105,116,101>>]},<<32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,115,32>>,{code,[],[<<70,117,110,99,116,105,111,110,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,117,110,99,116,105,111,110,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,97,95,102,117,110,99,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,44,123,99,44,50,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,97,95,102,117,110,99,116,105,111,110,40,91,123,49,44,120,125,44,123,50,44,121,125,44,123,51,44,122,125,93,41,44,10,70,32,61,32,115,111,102,115,58,99,111,109,112,111,115,105,116,101,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,120,125,44,123,98,44,121,125,44,123,99,44,121,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,52,57,50>>,signature => [{attribute,{844,2},spec,{{composite,2},[{type,{844,16},bounded_fun,[{type,{844,16},'fun',[{type,{844,16},product,[{var,{844,17},'Function1'},{var,{844,28},'Function2'}]},{var,{844,42},'Function3'}]},[{type,{845,7},constraint,[{atom,{845,7},is_subtype},[{var,{845,7},'Function1'},{user_type,{845,20},a_function,[]}]]},{type,{846,7},constraint,[{atom,{846,7},is_subtype},[{var,{846,7},'Function2'},{user_type,{846,20},a_function,[]}]]},{type,{847,7},constraint,[{atom,{847,7},is_subtype},[{var,{847,7},'Function3'},{user_type,{847,20},a_function,[]}]]}]]}]}}]}},{{function,constant_function,2},[{file,[115,111,102,115,46,101,114,108]},{location,465}],[<<99,111,110,115,116,97,110,116,95,102,117,110,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<32,116,104,97,116,32,109,97,112,115,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32,115,101,116,32>>,{code,[],[<<83,101,116>>]},<<32,111,110,116,111,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,115,101,116,40,91,97,44,98,93,41,44,10,69,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,49,41,44,10,82,32,61,32,115,111,102,115,58,99,111,110,115,116,97,110,116,95,102,117,110,99,116,105,111,110,40,83,44,32,69,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,41,46,10,91,123,97,44,49,125,44,123,98,44,49,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,48,56>>,signature => [{attribute,{465,2},spec,{{constant_function,2},[{type,{465,24},bounded_fun,[{type,{465,24},'fun',[{type,{465,24},product,[{var,{465,25},'Set'},{var,{465,30},'AnySet'}]},{var,{465,41},'Function'}]},[{type,{466,7},constraint,[{atom,{466,7},is_subtype},[{var,{466,7},'AnySet'},{user_type,{466,17},anyset,[]}]]},{type,{467,7},constraint,[{atom,{467,7},is_subtype},[{var,{467,7},'Function'},{user_type,{467,19},a_function,[]}]]},{type,{468,7},constraint,[{atom,{468,7},is_subtype},[{var,{468,7},'Set'},{user_type,{468,14},a_set,[]}]]}]]}]}}]}},{{function,converse,1},[{file,[115,111,102,115,46,101,114,108]},{location,707}],[<<99,111,110,118,101,114,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,111,110,118,101,114,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,110,118,101,114,115,101>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,97,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,99,111,110,118,101,114,115,101,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,97,44,49,125,44,123,97,44,51,125,44,123,98,44,50,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,50,52>>,signature => [{attribute,{707,2},spec,{{converse,1},[{type,{707,15},bounded_fun,[{type,{707,15},'fun',[{type,{707,15},product,[{var,{707,16},'BinRel1'}]},{var,{707,28},'BinRel2'}]},[{type,{708,7},constraint,[{atom,{708,7},is_subtype},[{var,{708,7},'BinRel1'},{user_type,{708,18},binary_relation,[]}]]},{type,{709,7},constraint,[{atom,{709,7},is_subtype},[{var,{709,7},'BinRel2'},{user_type,{709,18},binary_relation,[]}]]}]]}]}}]}},{{function,difference,2},[{file,[115,111,102,115,46,101,114,108]},{location,398}],[<<100,105,102,102,101,114,101,110,99,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,105,102,102,101,114,101,110,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,102,102,101,114,101,110,99,101>>]},<<32,111,102,32,116,104,101,32,115,101,116,115,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,51,56>>,signature => [{attribute,{398,2},spec,{{difference,2},[{type,{398,17},bounded_fun,[{type,{398,17},'fun',[{type,{398,17},product,[{var,{398,18},'Set1'},{var,{398,24},'Set2'}]},{var,{398,33},'Set3'}]},[{type,{399,7},constraint,[{atom,{399,7},is_subtype},[{var,{399,7},'Set1'},{user_type,{399,15},a_set,[]}]]},{type,{400,7},constraint,[{atom,{400,7},is_subtype},[{var,{400,7},'Set2'},{user_type,{400,15},a_set,[]}]]},{type,{401,7},constraint,[{atom,{401,7},is_subtype},[{var,{401,7},'Set3'},{user_type,{401,15},a_set,[]}]]}]]}]}}]}},{{function,digraph_to_family,2},[{file,[115,111,102,115,46,101,114,108]},{location,1520}],[<<100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,52,55>>,equiv => {function,digraph_to_family,1},signature => [{attribute,{1520,2},spec,{{digraph_to_family,2},[{type,{1520,24},bounded_fun,[{type,{1520,24},'fun',[{type,{1520,24},product,[{var,{1520,25},'Graph'},{var,{1520,32},'Type'}]},{var,{1520,41},'Family'}]},[{type,{1521,7},constraint,[{atom,{1521,7},is_subtype},[{var,{1521,7},'Graph'},{remote_type,{1521,16},[{atom,{1521,16},digraph},{atom,{1521,24},graph},[]]}]]},{type,{1522,7},constraint,[{atom,{1522,7},is_subtype},[{var,{1522,7},'Family'},{user_type,{1522,17},family,[]}]]},{type,{1523,7},constraint,[{atom,{1523,7},is_subtype},[{var,{1523,7},'Type'},{user_type,{1523,15},type,[]}]]}]]}]}}]}},{{function,digraph_to_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,1511}],[<<100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,102,114,111,109,32,116,104,101,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,32>>,{code,[],[<<71,114,97,112,104>>]},<<46,32,69,97,99,104,32,118,101,114,116,101,120,32,97,32,111,102,32>>,{code,[],[<<71,114,97,112,104>>]},<<32,105,115,32,114,101,112,114,101,115,101,110,116,101,100,32,98,121,32,97,32,112,97,105,114,32,40,97,44,194,160,123,98,91,49,93,44,194,160,46,46,46,44,194,160,98,91,110,93,125,41,44,32,119,104,101,114,101,32,116,104,101,32,98,91,105,93,58,115,32,97,114,101,32,116,104,101,32,111,117,116,45,110,101,105,103,104,98,111,114,115,32,111,102,32,97,46,32,73,102,32,110,111,32,116,121,112,101,32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32,91,123,97,116,111,109,44,194,160,91,97,116,111,109,93,125,93,32,105,115,32,117,115,101,100,32,97,115,32,116,121,112,101,32,111,102,32,116,104,101,32,102,97,109,105,108,121,46,32,73,116,32,105,115,32,97,115,115,117,109,101,100,32,116,104,97,116,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,118,97,108,105,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,111,102,32,116,104,101,32,101,120,116,101,114,110,97,108,32,115,101,116,32,111,102,32,116,104,101,32,102,97,109,105,108,121,46>>]},{p,[],[<<73,102,32,71,32,105,115,32,97,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,44,32,105,116,32,104,111,108,100,115,32,116,104,97,116,32,116,104,101,32,118,101,114,116,105,99,101,115,32,97,110,100,32,101,100,103,101,115,32,111,102,32,71,32,97,114,101,32,116,104,101,32,115,97,109,101,32,97,115,32,116,104,101,32,118,101,114,116,105,99,101,115,32,97,110,100,32,101,100,103,101,115,32,111,102,32>>,{code,[],[<<102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,40,100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,40,71,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,52,55>>,signature => [{attribute,{1511,2},spec,{{digraph_to_family,1},[{type,{1511,24},bounded_fun,[{type,{1511,24},'fun',[{type,{1511,24},product,[{var,{1511,25},'Graph'}]},{var,{1511,35},'Family'}]},[{type,{1512,7},constraint,[{atom,{1512,7},is_subtype},[{var,{1512,7},'Graph'},{remote_type,{1512,16},[{atom,{1512,16},digraph},{atom,{1512,24},graph},[]]}]]},{type,{1513,7},constraint,[{atom,{1513,7},is_subtype},[{var,{1513,7},'Family'},{user_type,{1513,17},family,[]}]]}]]}]}}]}},{{function,domain,1},[{file,[115,111,102,115,46,101,114,108]},{location,612}],[<<100,111,109,97,105,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,98,125,44,123,50,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,100,111,109,97,105,110,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,49,44,50,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,54,55>>,signature => [{attribute,{612,2},spec,{{domain,1},[{type,{612,13},bounded_fun,[{type,{612,13},'fun',[{type,{612,13},product,[{var,{612,14},'BinRel'}]},{var,{612,25},'Set'}]},[{type,{613,7},constraint,[{atom,{613,7},is_subtype},[{var,{613,7},'BinRel'},{user_type,{613,17},binary_relation,[]}]]},{type,{614,7},constraint,[{atom,{614,7},is_subtype},[{var,{614,7},'Set'},{user_type,{614,14},a_set,[]}]]}]]}]}}]}},{{function,drestriction,2},[{file,[115,111,102,115,46,101,114,108]},{location,833}],[<<100,114,101,115,116,114,105,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,101,116,119,101,101,110,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,97,110,100,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,116,111,32>>,{code,[],[<<83,101,116>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,50,44,52,44,54,93,41,44,10,82,50,32,61,32,115,111,102,115,58,100,114,101,115,116,114,105,99,116,105,111,110,40,82,49,44,32,83,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,97,125,44,123,51,44,99,125,93>>]}]},{p,[],[{code,[],[<<100,114,101,115,116,114,105,99,116,105,111,110,40,82,44,194,160,83,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<100,105,102,102,101,114,101,110,99,101,40,82,44,194,160,114,101,115,116,114,105,99,116,105,111,110,40,82,44,194,160,83,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,53,56,49>>,signature => [{attribute,{833,2},spec,{{drestriction,2},[{type,{833,19},bounded_fun,[{type,{833,19},'fun',[{type,{833,19},product,[{var,{833,20},'BinRel1'},{var,{833,29},'Set'}]},{var,{833,37},'BinRel2'}]},[{type,{834,7},constraint,[{atom,{834,7},is_subtype},[{var,{834,7},'BinRel1'},{user_type,{834,18},binary_relation,[]}]]},{type,{835,7},constraint,[{atom,{835,7},is_subtype},[{var,{835,7},'BinRel2'},{user_type,{835,18},binary_relation,[]}]]},{type,{836,7},constraint,[{atom,{836,7},is_subtype},[{var,{836,7},'Set'},{user_type,{836,14},a_set,[]}]]}]]}]}}]}},{{function,drestriction,3},[{file,[115,111,102,115,46,101,114,108]},{location,960}],[<<100,114,101,115,116,114,105,99,116,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,100,111,32,110,111,116,32,103,105,118,101,32,97,110,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<83,101,116,50>>]},<<32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,101,116,70,117,110,32,61,32,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,95,65,44,66,44,67,125,41,32,45,62,32,123,66,44,67,125,32,101,110,100,125,44,10,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,97,97,44,49,125,44,123,98,44,98,98,44,50,125,44,123,99,44,99,99,44,51,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,98,98,44,50,125,44,123,99,99,44,51,125,44,123,100,100,44,52,125,93,41,44,10,82,51,32,61,32,115,111,102,115,58,100,114,101,115,116,114,105,99,116,105,111,110,40,83,101,116,70,117,110,44,32,82,49,44,32,82,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,51,41,46,10,91,123,97,44,97,97,44,49,125,93>>]}]},{p,[],[{code,[],[<<100,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<100,105,102,102,101,114,101,110,99,101,40,83,49,44,194,160,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,48,48>>,signature => [{attribute,{960,2},spec,{{drestriction,3},[{type,{960,19},bounded_fun,[{type,{960,19},'fun',[{type,{960,19},product,[{var,{960,20},'SetFun'},{var,{960,28},'Set1'},{var,{960,34},'Set2'}]},{var,{960,43},'Set3'}]},[{type,{961,7},constraint,[{atom,{961,7},is_subtype},[{var,{961,7},'SetFun'},{user_type,{961,17},set_fun,[]}]]},{type,{962,7},constraint,[{atom,{962,7},is_subtype},[{var,{962,7},'Set1'},{user_type,{962,15},a_set,[]}]]},{type,{963,7},constraint,[{atom,{963,7},is_subtype},[{var,{963,7},'Set2'},{user_type,{963,15},a_set,[]}]]},{type,{964,7},constraint,[{atom,{964,7},is_subtype},[{var,{964,7},'Set3'},{user_type,{964,15},a_set,[]}]]}]]}]}}]}},{{function,empty_set,0},[{file,[115,111,102,115,46,101,114,108]},{location,178}],[<<101,109,112,116,121,95,115,101,116,47,48>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116>>]},<<46,32>>,{code,[],[<<101,109,112,116,121,95,115,101,116,40,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,91,93,44,194,160,91,39,95,39,93,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,50,48>>,signature => [{attribute,{178,2},spec,{{empty_set,0},[{type,{178,16},bounded_fun,[{type,{178,16},'fun',[{type,{178,16},product,[]},{var,{178,22},'Set'}]},[{type,{179,7},constraint,[{atom,{179,7},is_subtype},[{var,{179,7},'Set'},{user_type,{179,14},a_set,[]}]]}]]}]}}]}},{{function,extension,3},[{file,[115,111,102,115,46,101,114,108]},{location,779}],[<<101,120,116,101,110,115,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,110,115,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,110,115,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,115,117,99,104,32,116,104,97,116,32,102,111,114,32,101,97,99,104,32,101,108,101,109,101,110,116,32,69,32,105,110,32>>,{code,[],[<<83,101,116>>]},<<32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<44,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,112,97,105,114,32,40,69,44,194,160>>,{code,[],[<<65,110,121,83,101,116>>]},<<41,46>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,115,101,116,40,91,98,44,99,93,41,44,10,65,32,61,32,115,111,102,115,58,101,109,112,116,121,95,115,101,116,40,41,44,10,82,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,93,125,93,41,44,10,88,32,61,32,115,111,102,115,58,101,120,116,101,110,115,105,111,110,40,82,44,32,83,44,32,65,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,88,41,46,10,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,93,125,44,123,99,44,91,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,51,48>>,signature => [{attribute,{779,2},spec,{{extension,3},[{type,{779,16},bounded_fun,[{type,{779,16},'fun',[{type,{779,16},product,[{var,{779,17},'BinRel1'},{var,{779,26},'Set'},{var,{779,31},'AnySet'}]},{var,{779,42},'BinRel2'}]},[{type,{780,7},constraint,[{atom,{780,7},is_subtype},[{var,{780,7},'AnySet'},{user_type,{780,17},anyset,[]}]]},{type,{781,7},constraint,[{atom,{781,7},is_subtype},[{var,{781,7},'BinRel1'},{user_type,{781,18},binary_relation,[]}]]},{type,{782,7},constraint,[{atom,{782,7},is_subtype},[{var,{782,7},'BinRel2'},{user_type,{782,18},binary_relation,[]}]]},{type,{783,7},constraint,[{atom,{783,7},is_subtype},[{var,{783,7},'Set'},{user_type,{783,14},a_set,[]}]]}]]}]}}]}},{{function,family,2},[{file,[115,111,102,115,46,101,114,108]},{location,302}],[<<102,97,109,105,108,121,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,53,48>>,equiv => {function,family,1},signature => [{attribute,{302,2},spec,{{family,2},[{type,{302,13},bounded_fun,[{type,{302,13},'fun',[{type,{302,13},product,[{var,{302,14},'Tuples'},{var,{302,22},'Type'}]},{var,{302,31},'Family'}]},[{type,{303,7},constraint,[{atom,{303,7},is_subtype},[{var,{303,7},'Family'},{user_type,{303,17},family,[]}]]},{type,{304,7},constraint,[{atom,{304,7},is_subtype},[{var,{304,7},'Tuples'},{type,{304,17},list,[{type,{304,18},tuple,any}]}]]},{type,{305,7},constraint,[{atom,{305,7},is_subtype},[{var,{305,7},'Type'},{user_type,{305,15},type,[]}]]}]]}]}}]}},{{function,family,1},[{file,[115,111,102,115,46,101,114,108]},{location,290}],[<<102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121,32,111,102,32,115,117,98,115,101,116,115>>]},<<46,32>>,{code,[],[<<102,97,109,105,108,121,40,70,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,70,44,194,160,84,41>>]},<<32,105,102,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,102,97,109,105,108,121,46,32,73,102,32,110,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<91,123,97,116,111,109,44,194,160,91,97,116,111,109,93,125,93>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,102,97,109,105,108,121,32,116,121,112,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,53,48>>,signature => [{attribute,{290,2},spec,{{family,1},[{type,{290,13},bounded_fun,[{type,{290,13},'fun',[{type,{290,13},product,[{var,{290,14},'Tuples'}]},{var,{290,25},'Family'}]},[{type,{291,7},constraint,[{atom,{291,7},is_subtype},[{var,{291,7},'Family'},{user_type,{291,17},family,[]}]]},{type,{292,7},constraint,[{atom,{292,7},is_subtype},[{var,{292,7},'Tuples'},{type,{292,17},list,[{type,{292,18},tuple,any}]}]]}]]}]}}]}},{{function,family_difference,2},[{file,[115,111,102,115,46,101,114,108]},{location,1385}],[<<102,97,109,105,108,121,95,100,105,102,102,101,114,101,110,99,101,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,105,101,115>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,101,113,117,97,108,32,116,111,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<91,105,93,32,105,115,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,101,116,119,101,101,110,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,102,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,109,97,112,115,32,105,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,97,109,105,108,121,49,91,105,93>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,98,44,91,52,44,53,93,125,44,123,99,44,91,54,44,55,93,125,93,41,44,10,70,51,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,100,105,102,102,101,114,101,110,99,101,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,51,41,46,10,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,54,52>>,signature => [{attribute,{1385,2},spec,{{family_difference,2},[{type,{1385,24},bounded_fun,[{type,{1385,24},'fun',[{type,{1385,24},product,[{var,{1385,25},'Family1'},{var,{1385,34},'Family2'}]},{var,{1385,46},'Family3'}]},[{type,{1386,7},constraint,[{atom,{1386,7},is_subtype},[{var,{1386,7},'Family1'},{user_type,{1386,18},family,[]}]]},{type,{1387,7},constraint,[{atom,{1387,7},is_subtype},[{var,{1387,7},'Family2'},{user_type,{1387,18},family,[]}]]},{type,{1388,7},constraint,[{atom,{1388,7},is_subtype},[{var,{1388,7},'Family3'},{user_type,{1388,18},family,[]}]]}]]}]}}]}},{{function,family_domain,1},[{file,[115,111,102,115,46,101,114,108]},{location,1341}],[<<102,97,109,105,108,121,95,100,111,109,97,105,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49,91,105,93>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,82,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,125,44,123,98,44,91,93,125,44,123,99,44,91,123,52,44,100,125,44,123,53,44,101,125,93,125,93,41,44,10,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,100,111,109,97,105,110,40,70,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,93,125,44,123,99,44,91,52,44,53,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,54,56,53>>,signature => [{attribute,{1341,2},spec,{{family_domain,1},[{type,{1341,20},bounded_fun,[{type,{1341,20},'fun',[{type,{1341,20},product,[{var,{1341,21},'Family1'}]},{var,{1341,33},'Family2'}]},[{type,{1342,7},constraint,[{atom,{1342,7},is_subtype},[{var,{1342,7},'Family1'},{user_type,{1342,18},family,[]}]]},{type,{1343,7},constraint,[{atom,{1343,7},is_subtype},[{var,{1343,7},'Family2'},{user_type,{1343,18},family,[]}]]}]]}]}}]}},{{function,family_field,1},[{file,[115,111,102,115,46,101,114,108]},{location,1365}],[<<102,97,109,105,108,121,95,102,105,101,108,100,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,105,101,108,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,101,108,100>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,82,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,125,44,123,98,44,91,93,125,44,123,99,44,91,123,52,44,100,125,44,123,53,44,101,125,93,125,93,41,44,10,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,102,105,101,108,100,40,70,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,91,49,44,50,44,51,44,97,44,98,44,99,93,125,44,123,98,44,91,93,125,44,123,99,44,91,52,44,53,44,100,44,101,93,125,93>>]}]},{p,[],[{code,[],[<<102,97,109,105,108,121,95,102,105,101,108,100,40,70,97,109,105,108,121,49,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,97,109,105,108,121,95,117,110,105,111,110,40,102,97,109,105,108,121,95,100,111,109,97,105,110,40,70,97,109,105,108,121,49,41,44,32,102,97,109,105,108,121,95,114,97,110,103,101,40,70,97,109,105,108,121,49,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,48,54>>,signature => [{attribute,{1365,2},spec,{{family_field,1},[{type,{1365,19},bounded_fun,[{type,{1365,19},'fun',[{type,{1365,19},product,[{var,{1365,20},'Family1'}]},{var,{1365,32},'Family2'}]},[{type,{1366,7},constraint,[{atom,{1366,7},is_subtype},[{var,{1366,7},'Family1'},{user_type,{1366,18},family,[]}]]},{type,{1367,7},constraint,[{atom,{1367,7},is_subtype},[{var,{1367,7},'Family2'},{user_type,{1367,18},family,[]}]]}]]}]}}]}},{{function,family_intersection,1},[{file,[115,111,102,115,46,101,114,108]},{location,1325}],[<<102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,115,101,116,32,111,102,32,115,101,116,115,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,116,101,114,115,101,99,116,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,110,32,101,109,112,116,121,32,115,101,116,32,102,111,114,32,115,111,109,101,32,105,44,32,116,104,101,32,112,114,111,99,101,115,115,32,101,120,105,116,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,109,101,115,115,97,103,101,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,91,49,44,50,44,51,93,44,91,50,44,51,44,52,93,93,125,44,123,98,44,91,91,120,44,121,44,122,93,44,91,120,44,121,93,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,40,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,97,44,91,50,44,51,93,125,44,123,98,44,91,120,44,121,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,51,48>>,signature => [{attribute,{1325,2},spec,{{family_intersection,1},[{type,{1325,26},bounded_fun,[{type,{1325,26},'fun',[{type,{1325,26},product,[{var,{1325,27},'Family1'}]},{var,{1325,39},'Family2'}]},[{type,{1326,7},constraint,[{atom,{1326,7},is_subtype},[{var,{1326,7},'Family1'},{user_type,{1326,18},family,[]}]]},{type,{1327,7},constraint,[{atom,{1327,7},is_subtype},[{var,{1327,7},'Family2'},{user_type,{1327,18},family,[]}]]}]]}]}}]}},{{function,family_intersection,2},[{file,[115,111,102,115,46,101,114,108]},{location,1378}],[<<102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,105,101,115>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<58,115,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<58,115,32,105,110,100,101,120,32,115,101,116,115,44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<91,105,93,32,105,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,93,125,44,123,99,44,91,53,44,54,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,98,44,91,52,44,53,93,125,44,123,99,44,91,55,44,56,93,125,44,123,100,44,91,57,44,49,48,93,125,93,41,44,10,70,51,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,105,110,116,101,114,115,101,99,116,105,111,110,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,51,41,46,10,91,123,98,44,91,52,93,125,44,123,99,44,91,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,53,52>>,signature => [{attribute,{1378,2},spec,{{family_intersection,2},[{type,{1378,26},bounded_fun,[{type,{1378,26},'fun',[{type,{1378,26},product,[{var,{1378,27},'Family1'},{var,{1378,36},'Family2'}]},{var,{1378,48},'Family3'}]},[{type,{1379,7},constraint,[{atom,{1379,7},is_subtype},[{var,{1379,7},'Family1'},{user_type,{1379,18},family,[]}]]},{type,{1380,7},constraint,[{atom,{1380,7},is_subtype},[{var,{1380,7},'Family2'},{user_type,{1380,18},family,[]}]]},{type,{1381,7},constraint,[{atom,{1381,7},is_subtype},[{var,{1381,7},'Family3'},{user_type,{1381,18},family,[]}]]}]]}]}}]}},{{function,family_projection,2},[{file,[115,111,102,115,46,101,114,108]},{location,1451}],[<<102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,99,97,108,108,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,119,105,116,104,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,115,32,97,114,103,117,109,101,110,116,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,91,49,44,50,93,44,91,50,44,51,93,93,125,44,123,98,44,91,91,93,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,40,102,117,110,32,115,111,102,115,58,117,110,105,111,110,47,49,44,32,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,55,52>>,signature => [{attribute,{1451,2},spec,{{family_projection,2},[{type,{1451,24},bounded_fun,[{type,{1451,24},'fun',[{type,{1451,24},product,[{var,{1451,25},'SetFun'},{var,{1451,33},'Family1'}]},{var,{1451,45},'Family2'}]},[{type,{1452,7},constraint,[{atom,{1452,7},is_subtype},[{var,{1452,7},'SetFun'},{user_type,{1452,17},set_fun,[]}]]},{type,{1453,7},constraint,[{atom,{1453,7},is_subtype},[{var,{1453,7},'Family1'},{user_type,{1453,18},family,[]}]]},{type,{1454,7},constraint,[{atom,{1454,7},is_subtype},[{var,{1454,7},'Family2'},{user_type,{1454,18},family,[]}]]}]]}]}}]}},{{function,family_range,1},[{file,[115,111,102,115,46,101,114,108]},{location,1353}],[<<102,97,109,105,108,121,95,114,97,110,103,101,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,102,111,114,32,101,118,101,114,121,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,97,110,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,97,110,103,101>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,82,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,125,44,123,98,44,91,93,125,44,123,99,44,91,123,52,44,100,125,44,123,53,44,101,125,93,125,93,41,44,10,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,114,97,110,103,101,40,70,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,97,44,91,97,44,98,44,99,93,125,44,123,98,44,91,93,125,44,123,99,44,91,100,44,101,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,55,57,51>>,signature => [{attribute,{1353,2},spec,{{family_range,1},[{type,{1353,19},bounded_fun,[{type,{1353,19},'fun',[{type,{1353,19},product,[{var,{1353,20},'Family1'}]},{var,{1353,32},'Family2'}]},[{type,{1354,7},constraint,[{atom,{1354,7},is_subtype},[{var,{1354,7},'Family1'},{user_type,{1354,18},family,[]}]]},{type,{1355,7},constraint,[{atom,{1355,7},is_subtype},[{var,{1355,7},'Family2'},{user_type,{1355,18},family,[]}]]}]]}]}}]}},{{function,family_specification,2},[{file,[115,111,102,115,46,101,114,108]},{location,1265}],[<<102,97,109,105,108,121,95,115,112,101,99,105,102,105,99,97,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,116,111,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,105,32,111,102,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,102,111,114,32,119,104,105,99,104,32>>,{code,[],[<<70,117,110>>]},<<32,97,112,112,108,105,101,100,32,116,111,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,194,160,70,117,110,50,125>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,117,110,50>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,49,44,50,93,125,44,123,99,44,91,49,93,125,93,41,44,10,83,112,101,99,70,117,110,32,61,32,102,117,110,40,83,41,32,45,62,32,115,111,102,115,58,110,111,95,101,108,101,109,101,110,116,115,40,83,41,32,61,58,61,32,50,32,101,110,100,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,115,112,101,99,105,102,105,99,97,116,105,111,110,40,83,112,101,99,70,117,110,44,32,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,98,44,91,49,44,50,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,49,52>>,signature => [{attribute,{1265,2},spec,{{family_specification,2},[{type,{1265,27},bounded_fun,[{type,{1265,27},'fun',[{type,{1265,27},product,[{var,{1265,28},'Fun'},{var,{1265,33},'Family1'}]},{var,{1265,45},'Family2'}]},[{type,{1266,7},constraint,[{atom,{1266,7},is_subtype},[{var,{1266,7},'Fun'},{user_type,{1266,14},spec_fun,[]}]]},{type,{1267,7},constraint,[{atom,{1267,7},is_subtype},[{var,{1267,7},'Family1'},{user_type,{1267,18},family,[]}]]},{type,{1268,7},constraint,[{atom,{1268,7},is_subtype},[{var,{1268,7},'Family2'},{user_type,{1268,18},family,[]}]]}]]}]}}]}},{{function,family_to_digraph,2},[{file,[115,111,102,115,46,101,114,108]},{location,1489}],[<<102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,51,57>>,equiv => {function,family_to_digraph,1},signature => [{attribute,{1489,2},spec,{{family_to_digraph,2},[{type,{1489,24},bounded_fun,[{type,{1489,24},'fun',[{type,{1489,24},product,[{var,{1489,25},'Family'},{var,{1489,33},'GraphType'}]},{var,{1489,47},'Graph'}]},[{type,{1490,7},constraint,[{atom,{1490,7},is_subtype},[{var,{1490,7},'Graph'},{remote_type,{1490,16},[{atom,{1490,16},digraph},{atom,{1490,24},graph},[]]}]]},{type,{1491,7},constraint,[{atom,{1491,7},is_subtype},[{var,{1491,7},'Family'},{user_type,{1491,17},family,[]}]]},{type,{1492,7},constraint,[{atom,{1492,7},is_subtype},[{var,{1492,7},'GraphType'},{type,{1492,20},list,[{remote_type,{1492,21},[{atom,{1492,21},digraph},{atom,{1492,29},d_type},[]]}]}]]}]]}]}}]}},{{function,family_to_digraph,1},[{file,[115,111,102,115,46,101,114,108]},{location,1479}],[<<102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,32,102,114,111,109,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<46,32,70,111,114,32,101,97,99,104,32,112,97,105,114,32,40,97,44,194,160,123,98,91,49,93,44,194,160,46,46,46,44,194,160,98,91,110,93,125,41,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<44,32,118,101,114,116,101,120,32,97,32,97,110,100,32,116,104,101,32,101,100,103,101,115,32,40,97,44,194,160,98,91,105,93,41,32,102,111,114,32,49,194,160,60,61,194,160,105,194,160,60,61,194,160,110,32,97,114,101,32,97,100,100,101,100,32,116,111,32,97,32,110,101,119,108,121,32,99,114,101,97,116,101,100,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,46>>]},{p,[],[<<73,102,32,110,111,32,103,114,97,112,104,32,116,121,112,101,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32>>,{a,[{href,<<115,116,100,108,105,98,58,100,105,103,114,97,112,104,35,110,101,119,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,105,103,114,97,112,104,58,110,101,119,47,48>>]}]},<<32,105,115,32,117,115,101,100,32,102,111,114,32,99,114,101,97,116,105,110,103,32,116,104,101,32,100,105,114,101,99,116,101,100,32,103,114,97,112,104,44,32,111,116,104,101,114,119,105,115,101,32,97,114,103,117,109,101,110,116,32>>,{code,[],[<<71,114,97,112,104,84,121,112,101>>]},<<32,105,115,32,112,97,115,115,101,100,32,111,110,32,97,115,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,116,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,100,105,103,114,97,112,104,35,110,101,119,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<100,105,103,114,97,112,104,58,110,101,119,47,49>>]}]},<<46>>]},{p,[],[<<73,116,32,70,32,105,115,32,97,32,102,97,109,105,108,121,44,32,105,116,32,104,111,108,100,115,32,116,104,97,116,32,70,32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<100,105,103,114,97,112,104,95,116,111,95,102,97,109,105,108,121,40,102,97,109,105,108,121,95,116,111,95,100,105,103,114,97,112,104,40,70,41,44,194,160,116,121,112,101,40,70,41,41>>]},<<46,32,69,113,117,97,108,105,116,121,32,104,111,108,100,115,32,105,102,32>>,{code,[],[<<117,110,105,111,110,95,111,102,95,102,97,109,105,108,121,40,70,41>>]},<<32,105,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<100,111,109,97,105,110,40,70,41>>]},<<46>>]},{p,[],[<<67,114,101,97,116,105,110,103,32,97,32,99,121,99,108,101,32,105,110,32,97,110,32,97,99,121,99,108,105,99,32,103,114,97,112,104,32,101,120,105,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<99,121,99,108,105,99>>]},<<32,109,101,115,115,97,103,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,51,57>>,signature => [{attribute,{1479,2},spec,{{family_to_digraph,1},[{type,{1479,24},bounded_fun,[{type,{1479,24},'fun',[{type,{1479,24},product,[{var,{1479,25},'Family'}]},{var,{1479,36},'Graph'}]},[{type,{1480,7},constraint,[{atom,{1480,7},is_subtype},[{var,{1480,7},'Graph'},{remote_type,{1480,16},[{atom,{1480,16},digraph},{atom,{1480,24},graph},[]]}]]},{type,{1481,7},constraint,[{atom,{1481,7},is_subtype},[{var,{1481,7},'Family'},{user_type,{1481,17},family,[]}]]}]]}]}}]}},{{function,family_to_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,1253}],[<<102,97,109,105,108,121,95,116,111,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32,99,111,110,116,97,105,110,105,110,103,32,97,108,108,32,112,97,105,114,115,32,40,105,44,194,160,120,41,32,115,117,99,104,32,116,104,97,116,32,105,32,98,101,108,111,110,103,115,32,116,111,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,97,110,100,32,120,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,93,125,44,32,123,98,44,91,49,93,125,44,32,123,99,44,91,50,44,51,93,125,93,41,44,10,82,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,116,111,95,114,101,108,97,116,105,111,110,40,70,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,41,46,10,91,123,98,44,49,125,44,123,99,44,50,125,44,123,99,44,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,54,53>>,signature => [{attribute,{1253,2},spec,{{family_to_relation,1},[{type,{1253,25},bounded_fun,[{type,{1253,25},'fun',[{type,{1253,25},product,[{var,{1253,26},'Family'}]},{var,{1253,37},'BinRel'}]},[{type,{1254,7},constraint,[{atom,{1254,7},is_subtype},[{var,{1254,7},'Family'},{user_type,{1254,17},family,[]}]]},{type,{1255,7},constraint,[{atom,{1255,7},is_subtype},[{var,{1255,7},'BinRel'},{user_type,{1255,17},binary_relation,[]}]]}]]}]}}]}},{{function,family_union,1},[{file,[115,111,102,115,46,101,114,108]},{location,1314}],[<<102,97,109,105,108,121,95,117,110,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,105,115,32,97,32,115,101,116,32,111,102,32,115,101,116,115,32,102,111,114,32,101,97,99,104,32,105,32,105,110,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,115,101,116,32,97,115,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,115,117,99,104,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,97,44,91,91,49,44,50,93,44,91,50,44,51,93,93,125,44,123,98,44,91,91,93,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,117,110,105,111,110,40,70,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,50,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,93,125,93>>]}]},{p,[],[{code,[],[<<102,97,109,105,108,121,95,117,110,105,111,110,40,70,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,97,109,105,108,121,95,112,114,111,106,101,99,116,105,111,110,40,102,117,110,32,115,111,102,115,58,117,110,105,111,110,47,49,44,194,160,70,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,56,56,51>>,signature => [{attribute,{1314,2},spec,{{family_union,1},[{type,{1314,19},bounded_fun,[{type,{1314,19},'fun',[{type,{1314,19},product,[{var,{1314,20},'Family1'}]},{var,{1314,32},'Family2'}]},[{type,{1315,7},constraint,[{atom,{1315,7},is_subtype},[{var,{1315,7},'Family1'},{user_type,{1315,18},family,[]}]]},{type,{1316,7},constraint,[{atom,{1316,7},is_subtype},[{var,{1316,7},'Family2'},{user_type,{1316,18},family,[]}]]}]]}]}}]}},{{function,family_union,2},[{file,[115,111,102,115,46,101,114,108]},{location,1371}],[<<102,97,109,105,108,121,95,117,110,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,105,101,115>>]},<<44,32,116,104,101,110,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<32,105,115,32,116,104,101,32,102,97,109,105,108,121,32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<58,115,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<58,115,32,105,110,100,101,120,32,115,101,116,115,44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,51>>]},<<91,105,93,32,105,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,32,105,102,32,98,111,116,104,32,109,97,112,32,105,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,97,109,105,108,121,49>>]},<<91,105,93,32,111,114,32>>,{code,[],[<<70,97,109,105,108,121,50>>]},<<91,105,93,46>>]},{pre,[],[{code,[],[<<49,62,32,70,49,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,93,125,44,123,99,44,91,53,44,54,93,125,93,41,44,10,70,50,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,98,44,91,52,44,53,93,125,44,123,99,44,91,55,44,56,93,125,44,123,100,44,91,57,44,49,48,93,125,93,41,44,10,70,51,32,61,32,115,111,102,115,58,102,97,109,105,108,121,95,117,110,105,111,110,40,70,49,44,32,70,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,51,41,46,10,91,123,97,44,91,49,44,50,93,125,44,123,98,44,91,51,44,52,44,53,93,125,44,123,99,44,91,53,44,54,44,55,44,56,93,125,44,123,100,44,91,57,44,49,48,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,48,54>>,signature => [{attribute,{1371,2},spec,{{family_union,2},[{type,{1371,19},bounded_fun,[{type,{1371,19},'fun',[{type,{1371,19},product,[{var,{1371,20},'Family1'},{var,{1371,29},'Family2'}]},{var,{1371,41},'Family3'}]},[{type,{1372,7},constraint,[{atom,{1372,7},is_subtype},[{var,{1372,7},'Family1'},{user_type,{1372,18},family,[]}]]},{type,{1373,7},constraint,[{atom,{1373,7},is_subtype},[{var,{1373,7},'Family2'},{user_type,{1373,18},family,[]}]]},{type,{1374,7},constraint,[{atom,{1374,7},is_subtype},[{var,{1374,7},'Family3'},{user_type,{1374,18},family,[]}]]}]]}]}}]}},{{function,field,1},[{file,[115,111,102,115,46,101,114,108]},{location,632}],[<<102,105,101,108,100,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,105,101,108,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,101,108,100>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,98,125,44,123,50,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,102,105,101,108,100,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,49,44,50,44,97,44,98,44,99,93>>]}]},{p,[],[{code,[],[<<102,105,101,108,100,40,82,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<117,110,105,111,110,40,100,111,109,97,105,110,40,82,41,44,32,114,97,110,103,101,40,82,41,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,50,56>>,signature => [{attribute,{632,2},spec,{{field,1},[{type,{632,12},bounded_fun,[{type,{632,12},'fun',[{type,{632,12},product,[{var,{632,13},'BinRel'}]},{var,{632,24},'Set'}]},[{type,{633,7},constraint,[{atom,{633,7},is_subtype},[{var,{633,7},'BinRel'},{user_type,{633,17},binary_relation,[]}]]},{type,{634,7},constraint,[{atom,{634,7},is_subtype},[{var,{634,7},'Set'},{user_type,{634,14},a_set,[]}]]}]]}]}}]}},{{function,from_external,2},[{file,[115,111,102,115,46,101,114,108]},{location,169}],[<<102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32,115,101,116,32,102,114,111,109,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32>>,{code,[],[<<69,120,116,101,114,110,97,108,83,101,116>>]},<<32,97,110,100,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32>>,{code,[],[<<84,121,112,101>>]},<<46,32,73,116,32,105,115,32,97,115,115,117,109,101,100,32,116,104,97,116,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,118,97,108,105,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,111,102,32>>,{code,[],[<<69,120,116,101,114,110,97,108,83,101,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,52,52>>,signature => [{attribute,{169,2},spec,{{from_external,2},[{type,{169,20},bounded_fun,[{type,{169,20},'fun',[{type,{169,20},product,[{var,{169,21},'ExternalSet'},{var,{169,34},'Type'}]},{var,{169,43},'AnySet'}]},[{type,{170,7},constraint,[{atom,{170,7},is_subtype},[{var,{170,7},'ExternalSet'},{user_type,{170,22},external_set,[]}]]},{type,{171,7},constraint,[{atom,{171,7},is_subtype},[{var,{171,7},'AnySet'},{user_type,{171,17},anyset,[]}]]},{type,{172,7},constraint,[{atom,{172,7},is_subtype},[{var,{172,7},'Type'},{user_type,{172,15},type,[]}]]}]]}]}}]}},{{function,from_sets,1},[{file,[115,111,102,115,46,101,114,108]},{location,220}],[<<102,114,111,109,95,115,101,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,115,101,116,115,32,111,102,32,108,105,115,116,32>>,{code,[],[<<76,105,115,116,79,102,83,101,116,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,93,41,44,10,83,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,120,44,51,125,44,123,121,44,52,125,93,41,44,10,83,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,91,83,49,44,83,50,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,91,123,97,44,49,125,44,123,98,44,50,125,93,44,91,123,120,44,51,125,44,123,121,44,52,125,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,53,55>>,signature => [{attribute,{220,2},spec,{{from_sets,1},[{type,{220,16},bounded_fun,[{type,{220,16},'fun',[{type,{220,16},product,[{var,{220,17},'ListOfSets'}]},{var,{220,32},'Set'}]},[{type,{221,7},constraint,[{atom,{221,7},is_subtype},[{var,{221,7},'Set'},{user_type,{221,14},a_set,[]}]]},{type,{222,7},constraint,[{atom,{222,7},is_subtype},[{var,{222,7},'ListOfSets'},{type,{222,21},list,[{user_type,{222,22},anyset,[]}]}]]}]]}]}}]}},{{function,from_sets,1},[{file,[115,111,102,115,46,101,114,108]},{location,220}],[<<102,114,111,109,95,115,101,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<111,114,100,101,114,101,100,32,115,101,116>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,115,101,116,115,32,111,102,32,116,104,101,32,110,111,110,45,101,109,112,116,121,32,116,117,112,108,101,32>>,{code,[],[<<84,117,112,108,101,79,102,83,101,116,115>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,55,51>>,signature => [{attribute,{220,2},spec,{{from_sets,1},[{type,{223,16},bounded_fun,[{type,{223,16},'fun',[{type,{223,16},product,[{var,{223,17},'TupleOfSets'}]},{var,{223,33},'Ordset'}]},[{type,{224,7},constraint,[{atom,{224,7},is_subtype},[{var,{224,7},'Ordset'},{user_type,{224,17},ordset,[]}]]},{type,{225,7},constraint,[{atom,{225,7},is_subtype},[{var,{225,7},'TupleOfSets'},{user_type,{225,22},tuple_of,[{user_type,{225,31},anyset,[]}]}]]}]]}]}}]}},{{function,from_term,2},[{file,[115,111,102,115,46,101,114,108]},{location,155}],[<<102,114,111,109,95,116,101,114,109,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,56,51>>,equiv => {function,from_term,1},signature => [{attribute,{155,2},spec,{{from_term,2},[{type,{155,16},bounded_fun,[{type,{155,16},'fun',[{type,{155,16},product,[{var,{155,17},'Term'},{var,{155,23},'Type'}]},{var,{155,32},'AnySet'}]},[{type,{156,7},constraint,[{atom,{156,7},is_subtype},[{var,{156,7},'AnySet'},{user_type,{156,17},anyset,[]}]]},{type,{157,7},constraint,[{atom,{157,7},is_subtype},[{var,{157,7},'Term'},{type,{157,15},term,[]}]]},{type,{158,7},constraint,[{atom,{158,7},is_subtype},[{var,{158,7},'Type'},{user_type,{158,15},type,[]}]]}]]}]}}]}},{{function,from_term,1},[{file,[115,111,102,115,46,101,114,108]},{location,143}],[<<102,114,111,109,95,116,101,114,109,47,49>>],#{<<101,110>> => [{p,[],[{a,[{id,<<102,114,111,109,95,116,101,114,109>>}],[]},<<67,114,101,97,116,101,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,101,116,115>>]},<<32,98,121,32,116,114,97,118,101,114,115,105,110,103,32,116,101,114,109,32>>,{code,[],[<<84,101,114,109>>]},<<44,32,115,111,114,116,105,110,103,32,108,105,115,116,115,44,32,114,101,109,111,118,105,110,103,32,100,117,112,108,105,99,97,116,101,115,44,32,97,110,100,32,100,101,114,105,118,105,110,103,32,111,114,32,118,101,114,105,102,121,105,110,103,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,118,97,108,105,100,95,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<118,97,108,105,100,32,116,121,112,101>>]},<<32,102,111,114,32,116,104,101,32,115,111,32,111,98,116,97,105,110,101,100,32,101,120,116,101,114,110,97,108,32,115,101,116,46,32,65,110,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32>>,{code,[],[<<84,121,112,101>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,108,105,109,105,116,32,116,104,101,32,100,101,112,116,104,32,111,102,32,116,104,101,32,116,114,97,118,101,114,115,97,108,59,32,97,110,32,97,116,111,109,105,99,32,116,121,112,101,32,115,116,111,112,115,32,116,104,101,32,116,114,97,118,101,114,115,97,108,44,32,97,115,32,115,104,111,119,110,32,98,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,119,104,101,114,101,32>>,{code,[],[<<34,102,111,111,34>>]},<<32,97,110,100,32>>,{code,[],[<<123,34,102,111,111,34,125>>]},<<32,97,114,101,32,108,101,102,116,32,117,110,109,111,100,105,102,105,101,100,58>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,123,34,102,111,111,34,125,44,91,49,44,49,93,125,44,123,34,102,111,111,34,44,91,50,44,50,93,125,93,44,10,91,123,97,116,111,109,44,91,97,116,111,109,93,125,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,123,123,34,102,111,111,34,125,44,91,49,93,125,44,123,34,102,111,111,34,44,91,50,93,125,93>>]}]},{p,[],[{code,[],[<<102,114,111,109,95,116,101,114,109>>]},<<32,99,97,110,32,98,101,32,117,115,101,100,32,102,111,114,32,99,114,101,97,116,105,110,103,32,97,116,111,109,105,99,32,111,114,32,111,114,100,101,114,101,100,32,115,101,116,115,46,32,84,104,101,32,111,110,108,121,32,112,117,114,112,111,115,101,32,111,102,32,115,117,99,104,32,97,32,115,101,116,32,105,115,32,116,104,97,116,32,111,102,32,108,97,116,101,114,32,98,117,105,108,100,105,110,103,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,44,32,97,115,32,97,108,108,32,102,117,110,99,116,105,111,110,115,32,105,110,32,116,104,105,115,32,109,111,100,117,108,101,32,116,104,97,116,32>>,{em,[],[<<100,111>>]},<<32,97,110,121,116,104,105,110,103,32,111,112,101,114,97,116,101,32,111,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,46,32,67,114,101,97,116,105,110,103,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,32,102,114,111,109,32,97,32,99,111,108,108,101,99,116,105,111,110,32,111,102,32,111,114,100,101,114,101,100,32,115,101,116,115,32,99,97,110,32,98,101,32,116,104,101,32,119,97,121,32,116,111,32,103,111,32,105,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,98,105,103,32,97,110,100,32,111,110,101,32,100,111,101,115,32,110,111,116,32,119,97,110,116,32,116,111,32,119,97,115,116,101,32,104,101,97,112,32,98,121,32,114,101,98,117,105,108,100,105,110,103,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,115,104,111,119,115,32,116,104,97,116,32,97,32,115,101,116,32,99,97,110,32,98,101,32,98,117,105,108,116,32,34,108,97,121,101,114,32,98,121,32,108,97,121,101,114,34,58>>]},{pre,[],[{code,[],[<<49,62,32,65,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,97,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,44,51,93,41,44,10,80,49,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,123,65,44,83,125,41,44,10,80,50,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,123,98,44,91,54,44,53,44,52,93,125,41,44,10,83,115,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,91,80,49,44,80,50,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,115,41,46,10,91,123,97,44,91,49,44,50,44,51,93,125,44,123,98,44,91,52,44,53,44,54,93,125,93>>]}]},{p,[],[<<79,116,104,101,114,32,102,117,110,99,116,105,111,110,115,32,116,104,97,116,32,99,114,101,97,116,101,32,115,101,116,115,32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,101,120,116,101,114,110,97,108,47,50>>]}]},<<32,97,110,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,114,111,109,95,115,101,116,115,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,114,111,109,95,115,101,116,115,47,49>>]}]},<<46,32,83,112,101,99,105,97,108,32,99,97,115,101,115,32,111,102,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,47,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,97,95,102,117,110,99,116,105,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<97,95,102,117,110,99,116,105,111,110,47,49,44,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,109,112,116,121,95,115,101,116,47,48>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<101,109,112,116,121,95,115,101,116,47,48>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<102,97,109,105,108,121,47,49,44,50>>]}]},<<44,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,111,110,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<114,101,108,97,116,105,111,110,47,49,44,50>>]}]},<<44,32,97,110,100,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,47,49>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<115,101,116,47,49,44,50>>]}]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,57,56,51>>,signature => [{attribute,{143,2},spec,{{from_term,1},[{type,{143,16},bounded_fun,[{type,{143,16},'fun',[{type,{143,16},product,[{var,{143,17},'Term'}]},{var,{143,26},'AnySet'}]},[{type,{144,7},constraint,[{atom,{144,7},is_subtype},[{var,{144,7},'AnySet'},{user_type,{144,17},anyset,[]}]]},{type,{145,7},constraint,[{atom,{145,7},is_subtype},[{var,{145,7},'Term'},{type,{145,15},term,[]}]]}]]}]}}]}},{{function,image,2},[{file,[115,111,102,115,46,101,114,108]},{location,717}],[<<105,109,97,103,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,109,97,103,101>>]},<<32,111,102,32,115,101,116,32>>,{code,[],[<<83,101,116,49>>]},<<32,117,110,100,101,114,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,50,44,99,125,44,123,51,44,100,125,93,41,44,10,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,93,41,44,10,83,50,32,61,32,115,111,102,115,58,105,109,97,103,101,40,82,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,97,44,98,44,99,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,51,51>>,signature => [{attribute,{717,2},spec,{{image,2},[{type,{717,12},bounded_fun,[{type,{717,12},'fun',[{type,{717,12},product,[{var,{717,13},'BinRel'},{var,{717,21},'Set1'}]},{var,{717,30},'Set2'}]},[{type,{718,7},constraint,[{atom,{718,7},is_subtype},[{var,{718,7},'BinRel'},{user_type,{718,17},binary_relation,[]}]]},{type,{719,7},constraint,[{atom,{719,7},is_subtype},[{var,{719,7},'Set1'},{user_type,{719,15},a_set,[]}]]},{type,{720,7},constraint,[{atom,{720,7},is_subtype},[{var,{720,7},'Set2'},{user_type,{720,15},a_set,[]}]]}]]}]}}]}},{{function,intersection,1},[{file,[115,111,102,115,46,101,114,108]},{location,563}],[<<105,110,116,101,114,115,101,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,116,101,114,115,101,99,116,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,115,101,116,115,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<46>>]},{p,[],[<<73,110,116,101,114,115,101,99,116,105,110,103,32,97,110,32,101,109,112,116,121,32,115,101,116,32,111,102,32,115,101,116,115,32,101,120,105,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,109,101,115,115,97,103,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,52,57>>,signature => [{attribute,{563,2},spec,{{intersection,1},[{type,{563,19},bounded_fun,[{type,{563,19},'fun',[{type,{563,19},product,[{var,{563,20},'SetOfSets'}]},{var,{563,34},'Set'}]},[{type,{564,7},constraint,[{atom,{564,7},is_subtype},[{var,{564,7},'Set'},{user_type,{564,14},a_set,[]}]]},{type,{565,7},constraint,[{atom,{565,7},is_subtype},[{var,{565,7},'SetOfSets'},{user_type,{565,20},set_of_sets,[]}]]}]]}]}}]}},{{function,intersection,2},[{file,[115,111,102,115,46,101,114,108]},{location,388}],[<<105,110,116,101,114,115,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,116,101,114,115,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,116,101,114,115,101,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,54,49>>,signature => [{attribute,{388,2},spec,{{intersection,2},[{type,{388,19},bounded_fun,[{type,{388,19},'fun',[{type,{388,19},product,[{var,{388,20},'Set1'},{var,{388,26},'Set2'}]},{var,{388,35},'Set3'}]},[{type,{389,7},constraint,[{atom,{389,7},is_subtype},[{var,{389,7},'Set1'},{user_type,{389,15},a_set,[]}]]},{type,{390,7},constraint,[{atom,{390,7},is_subtype},[{var,{390,7},'Set2'},{user_type,{390,15},a_set,[]}]]},{type,{391,7},constraint,[{atom,{391,7},is_subtype},[{var,{391,7},'Set3'},{user_type,{391,15},a_set,[]}]]}]]}]}}]}},{{function,intersection_of_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,1299}],[<<105,110,116,101,114,115,101,99,116,105,111,110,95,111,102,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<46>>]},{p,[],[<<73,110,116,101,114,115,101,99,116,105,110,103,32,97,110,32,101,109,112,116,121,32,102,97,109,105,108,121,32,101,120,105,116,115,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,116,104,32,97,32>>,{code,[],[<<98,97,100,97,114,103>>]},<<32,109,101,115,115,97,103,101,46>>]},{pre,[],[{code,[],[<<49,62,32,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,48,44,50,44,52,93,125,44,123,98,44,91,48,44,49,44,50,93,125,44,123,99,44,91,50,44,51,93,125,93,41,44,10,83,32,61,32,115,111,102,115,58,105,110,116,101,114,115,101,99,116,105,111,110,95,111,102,95,102,97,109,105,108,121,40,70,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,50,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,55,49>>,signature => [{attribute,{1299,2},spec,{{intersection_of_family,1},[{type,{1299,29},bounded_fun,[{type,{1299,29},'fun',[{type,{1299,29},product,[{var,{1299,30},'Family'}]},{var,{1299,41},'Set'}]},[{type,{1300,7},constraint,[{atom,{1300,7},is_subtype},[{var,{1300,7},'Family'},{user_type,{1300,17},family,[]}]]},{type,{1301,7},constraint,[{atom,{1301,7},is_subtype},[{var,{1301,7},'Set'},{user_type,{1301,14},a_set,[]}]]}]]}]}}]}},{{function,inverse,1},[{file,[115,111,102,115,46,101,114,108]},{location,872}],[<<105,110,118,101,114,115,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,118,101,114,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,118,101,114,115,101>>]},<<32,111,102,32,102,117,110,99,116,105,111,110,32>>,{code,[],[<<70,117,110,99,116,105,111,110,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,105,110,118,101,114,115,101,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,97,44,49,125,44,123,98,44,50,125,44,123,99,44,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,48,56,56>>,signature => [{attribute,{872,2},spec,{{inverse,1},[{type,{872,14},bounded_fun,[{type,{872,14},'fun',[{type,{872,14},product,[{var,{872,15},'Function1'}]},{var,{872,29},'Function2'}]},[{type,{873,7},constraint,[{atom,{873,7},is_subtype},[{var,{873,7},'Function1'},{user_type,{873,20},a_function,[]}]]},{type,{874,7},constraint,[{atom,{874,7},is_subtype},[{var,{874,7},'Function2'},{user_type,{874,20},a_function,[]}]]}]]}]}}]}},{{function,inverse_image,2},[{file,[115,111,102,115,46,101,114,108]},{location,734}],[<<105,110,118,101,114,115,101,95,105,109,97,103,101,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,110,118,101,114,115,101,95,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,110,118,101,114,115,101,32,105,109,97,103,101>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,117,110,100,101,114,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,50,44,99,125,44,123,51,44,100,125,93,41,44,10,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,99,44,100,44,101,93,41,44,10,83,50,32,61,32,115,111,102,115,58,105,110,118,101,114,115,101,95,105,109,97,103,101,40,82,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,50,44,51,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,48,50>>,signature => [{attribute,{734,2},spec,{{inverse_image,2},[{type,{734,20},bounded_fun,[{type,{734,20},'fun',[{type,{734,20},product,[{var,{734,21},'BinRel'},{var,{734,29},'Set1'}]},{var,{734,38},'Set2'}]},[{type,{735,7},constraint,[{atom,{735,7},is_subtype},[{var,{735,7},'BinRel'},{user_type,{735,17},binary_relation,[]}]]},{type,{736,7},constraint,[{atom,{736,7},is_subtype},[{var,{736,7},'Set1'},{user_type,{736,15},a_set,[]}]]},{type,{737,7},constraint,[{atom,{737,7},is_subtype},[{var,{737,7},'Set2'},{user_type,{737,15},a_set,[]}]]}]]}]}}]}},{{function,is_a_function,1},[{file,[115,111,102,115,46,101,114,108]},{location,812}],[<<105,115,95,97,95,102,117,110,99,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<32,111,114,32,116,104,101,32,117,110,116,121,112,101,100,32,101,109,112,116,121,32,115,101,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,49,57>>,signature => [{attribute,{812,2},spec,{{is_a_function,1},[{type,{812,20},bounded_fun,[{type,{812,20},'fun',[{type,{812,20},product,[{var,{812,21},'BinRel'}]},{var,{812,32},'Bool'}]},[{type,{813,7},constraint,[{atom,{813,7},is_subtype},[{var,{813,7},'Bool'},{type,{813,15},boolean,[]}]]},{type,{814,7},constraint,[{atom,{814,7},is_subtype},[{var,{814,7},'BinRel'},{user_type,{814,17},binary_relation,[]}]]}]]}]}}]}},{{function,is_disjoint,2},[{file,[115,111,102,115,46,101,114,108]},{location,535}],[<<105,115,95,100,105,115,106,111,105,110,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,105,115,106,111,105,110,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,105,115,106,111,105,110,116>>]},<<44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,50,57>>,signature => [{attribute,{535,2},spec,{{is_disjoint,2},[{type,{535,18},bounded_fun,[{type,{535,18},'fun',[{type,{535,18},product,[{var,{535,19},'Set1'},{var,{535,25},'Set2'}]},{var,{535,34},'Bool'}]},[{type,{536,7},constraint,[{atom,{536,7},is_subtype},[{var,{536,7},'Bool'},{type,{536,15},boolean,[]}]]},{type,{537,7},constraint,[{atom,{537,7},is_subtype},[{var,{537,7},'Set1'},{user_type,{537,15},a_set,[]}]]},{type,{538,7},constraint,[{atom,{538,7},is_subtype},[{var,{538,7},'Set2'},{user_type,{538,15},a_set,[]}]]}]]}]}}]}},{{function,is_empty_set,1},[{file,[115,111,102,115,46,101,114,108]},{location,527}],[<<105,115,95,101,109,112,116,121,95,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<32,105,115,32,97,110,32,101,109,112,116,121,32,117,110,111,114,100,101,114,101,100,32,115,101,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,52,48>>,signature => [{attribute,{527,2},spec,{{is_empty_set,1},[{type,{527,19},bounded_fun,[{type,{527,19},'fun',[{type,{527,19},product,[{var,{527,20},'AnySet'}]},{var,{527,31},'Bool'}]},[{type,{528,7},constraint,[{atom,{528,7},is_subtype},[{var,{528,7},'AnySet'},{user_type,{528,17},anyset,[]}]]},{type,{529,7},constraint,[{atom,{529,7},is_subtype},[{var,{529,7},'Bool'},{type,{529,15},boolean,[]}]]}]]}]}}]}},{{function,is_equal,2},[{file,[115,111,102,115,46,101,114,108]},{location,480}],[<<105,115,95,101,113,117,97,108,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<65,110,121,83,101,116,50>>]},<<32,97,114,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,113,117,97,108>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,113,117,97,108>>]},<<44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,120,97,109,112,108,101,32,115,104,111,119,115,32,116,104,97,116,32>>,{code,[],[<<61,61,47,50>>]},<<32,105,115,32,117,115,101,100,32,119,104,101,110,32,99,111,109,112,97,114,105,110,103,32,115,101,116,115,32,102,111,114,32,101,113,117,97,108,105,116,121,58>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,46,48,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,49,93,41,44,10,115,111,102,115,58,105,115,95,101,113,117,97,108,40,83,49,44,32,83,50,41,46,10,116,114,117,101>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,52,57>>,signature => [{attribute,{480,2},spec,{{is_equal,2},[{type,{480,15},bounded_fun,[{type,{480,15},'fun',[{type,{480,15},product,[{var,{480,16},'AnySet1'},{var,{480,25},'AnySet2'}]},{var,{480,37},'Bool'}]},[{type,{481,7},constraint,[{atom,{481,7},is_subtype},[{var,{481,7},'AnySet1'},{user_type,{481,18},anyset,[]}]]},{type,{482,7},constraint,[{atom,{482,7},is_subtype},[{var,{482,7},'AnySet2'},{user_type,{482,18},anyset,[]}]]},{type,{483,7},constraint,[{atom,{483,7},is_subtype},[{var,{483,7},'Bool'},{type,{483,15},boolean,[]}]]}]]}]}}]}},{{function,is_set,1},[{file,[115,111,102,115,46,101,114,108]},{location,519}],[<<105,115,95,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<32,105,115,32,97,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<44,32,97,110,100,32>>,{code,[],[<<102,97,108,115,101>>]},<<32,105,102,32>>,{code,[],[<<65,110,121,83,101,116>>]},<<32,105,115,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,32,111,114,32,97,110,32,97,116,111,109,105,99,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,54,54>>,signature => [{attribute,{519,2},spec,{{is_set,1},[{type,{519,13},bounded_fun,[{type,{519,13},'fun',[{type,{519,13},product,[{var,{519,14},'AnySet'}]},{var,{519,25},'Bool'}]},[{type,{520,7},constraint,[{atom,{520,7},is_subtype},[{var,{520,7},'AnySet'},{user_type,{520,17},anyset,[]}]]},{type,{521,7},constraint,[{atom,{521,7},is_subtype},[{var,{521,7},'Bool'},{type,{521,15},boolean,[]}]]}]]}]}}]}},{{function,is_sofs_set,1},[{file,[115,111,102,115,46,101,114,108]},{location,509}],[<<105,115,95,115,111,102,115,95,115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<44,32,97,110,32,111,114,100,101,114,101,100,32,115,101,116,44,32,111,114,32,97,110,32,97,116,111,109,105,99,32,115,101,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,55,55>>,signature => [{attribute,{509,2},spec,{{is_sofs_set,1},[{type,{509,18},bounded_fun,[{type,{509,18},'fun',[{type,{509,18},product,[{var,{509,19},'Term'}]},{var,{509,28},'Bool'}]},[{type,{510,7},constraint,[{atom,{510,7},is_subtype},[{var,{510,7},'Bool'},{type,{510,15},boolean,[]}]]},{type,{511,7},constraint,[{atom,{511,7},is_subtype},[{var,{511,7},'Term'},{type,{511,15},term,[]}]]}]]}]}}]}},{{function,is_subset,2},[{file,[115,111,102,115,46,101,114,108]},{location,499}],[<<105,115,95,115,117,98,115,101,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,117,98,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,117,98,115,101,116>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,50>>]},<<44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<102,97,108,115,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,56,55>>,signature => [{attribute,{499,2},spec,{{is_subset,2},[{type,{499,16},bounded_fun,[{type,{499,16},'fun',[{type,{499,16},product,[{var,{499,17},'Set1'},{var,{499,23},'Set2'}]},{var,{499,32},'Bool'}]},[{type,{500,7},constraint,[{atom,{500,7},is_subtype},[{var,{500,7},'Bool'},{type,{500,15},boolean,[]}]]},{type,{501,7},constraint,[{atom,{501,7},is_subtype},[{var,{501,7},'Set1'},{user_type,{501,15},a_set,[]}]]},{type,{502,7},constraint,[{atom,{502,7},is_subtype},[{var,{502,7},'Set2'},{user_type,{502,15},a_set,[]}]]}]]}]}}]}},{{function,is_type,1},[{file,[115,111,102,115,46,101,114,108]},{location,183}],[<<105,115,95,116,121,112,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<32,105,102,32,116,101,114,109,32>>,{code,[],[<<84,101,114,109>>]},<<32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,49,57,55>>,signature => [{attribute,{183,2},spec,{{is_type,1},[{type,{183,14},bounded_fun,[{type,{183,14},'fun',[{type,{183,14},product,[{var,{183,15},'Term'}]},{var,{183,24},'Bool'}]},[{type,{184,7},constraint,[{atom,{184,7},is_subtype},[{var,{184,7},'Bool'},{type,{184,15},boolean,[]}]]},{type,{185,7},constraint,[{atom,{185,7},is_subtype},[{var,{185,7},'Term'},{type,{185,15},term,[]}]]}]]}]}}]}},{{function,join,4},[{file,[115,111,102,115,46,101,114,108]},{location,1206}],[<<106,111,105,110,47,52>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,110,97,116,117,114,97,108,95,106,111,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<110,97,116,117,114,97,108,32,106,111,105,110>>]},<<32,111,102,32,116,104,101,32,114,101,108,97,116,105,111,110,115,32>>,{code,[],[<<82,101,108,97,116,105,111,110,49>>]},<<32,97,110,100,32>>,{code,[],[<<82,101,108,97,116,105,111,110,50>>]},<<32,111,110,32,99,111,111,114,100,105,110,97,116,101,115,32>>,{code,[],[<<73>>]},<<32,97,110,100,32>>,{code,[],[<<74>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,120,44,49,125,44,123,98,44,121,44,50,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,102,44,103,125,44,123,49,44,104,44,105,125,44,123,50,44,51,44,52,125,93,41,44,10,74,32,61,32,115,111,102,115,58,106,111,105,110,40,82,49,44,32,51,44,32,82,50,44,32,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,74,41,46,10,91,123,97,44,120,44,49,44,102,44,103,125,44,123,97,44,120,44,49,44,104,44,105,125,44,123,98,44,121,44,50,44,51,44,52,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,48,54>>,signature => [{attribute,{1206,2},spec,{{join,4},[{type,{1206,11},bounded_fun,[{type,{1206,11},'fun',[{type,{1206,11},product,[{var,{1206,12},'Relation1'},{var,{1206,23},'I'},{var,{1206,26},'Relation2'},{var,{1206,37},'J'}]},{var,{1206,43},'Relation3'}]},[{type,{1207,7},constraint,[{atom,{1207,7},is_subtype},[{var,{1207,7},'Relation1'},{user_type,{1207,20},relation,[]}]]},{type,{1208,7},constraint,[{atom,{1208,7},is_subtype},[{var,{1208,7},'Relation2'},{user_type,{1208,20},relation,[]}]]},{type,{1209,7},constraint,[{atom,{1209,7},is_subtype},[{var,{1209,7},'Relation3'},{user_type,{1209,20},relation,[]}]]},{type,{1210,7},constraint,[{atom,{1210,7},is_subtype},[{var,{1210,7},'I'},{type,{1210,12},pos_integer,[]}]]},{type,{1211,7},constraint,[{atom,{1211,7},is_subtype},[{var,{1211,7},'J'},{type,{1211,12},pos_integer,[]}]]}]]}]}}]}},{{function,multiple_relative_product,2},[{file,[115,111,102,115,46,101,114,108]},{location,1190}],[<<109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<84,117,112,108,101,79,102,66,105,110,82,101,108,115>>]},<<32,105,115,32,97,32,110,111,110,45,101,109,112,116,121,32,116,117,112,108,101,32,123,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,125,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,44,32,116,104,101,110,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<109,117,108,116,105,112,108,101,32,114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,105,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,105,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,44,123,99,44,51,125,93,41,44,10,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,98,125,44,123,98,44,99,125,44,123,99,44,97,125,93,41,44,10,77,80,32,61,32,115,111,102,115,58,109,117,108,116,105,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,123,82,105,44,32,82,105,125,44,32,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,114,97,110,103,101,40,77,80,41,41,46,10,91,123,49,44,50,125,44,123,50,44,51,125,44,123,51,44,49,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,50,51>>,signature => [{attribute,{1190,2},spec,{{multiple_relative_product,2},[{type,{1190,32},bounded_fun,[{type,{1190,32},'fun',[{type,{1190,32},product,[{var,{1190,33},'TupleOfBinRels'},{var,{1190,49},'BinRel1'}]},{var,{1190,61},'BinRel2'}]},[{type,{1191,7},constraint,[{atom,{1191,7},is_subtype},[{var,{1191,7},'TupleOfBinRels'},{user_type,{1191,25},tuple_of,[{var,{1191,34},'BinRel'}]}]]},{type,{1192,7},constraint,[{atom,{1192,7},is_subtype},[{var,{1192,7},'BinRel'},{user_type,{1192,17},binary_relation,[]}]]},{type,{1193,7},constraint,[{atom,{1193,7},is_subtype},[{var,{1193,7},'BinRel1'},{user_type,{1193,18},binary_relation,[]}]]},{type,{1194,7},constraint,[{atom,{1194,7},is_subtype},[{var,{1194,7},'BinRel2'},{user_type,{1194,18},binary_relation,[]}]]}]]}]}}]}},{{function,no_elements,1},[{file,[115,111,102,115,46,101,114,108]},{location,349}],[<<110,111,95,101,108,101,109,101,110,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,111,114,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32>>,{code,[],[<<65,83,101,116>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,52,52>>,signature => [{attribute,{349,2},spec,{{no_elements,1},[{type,{349,18},bounded_fun,[{type,{349,18},'fun',[{type,{349,18},product,[{var,{349,19},'ASet'}]},{var,{349,28},'NoElements'}]},[{type,{350,7},constraint,[{atom,{350,7},is_subtype},[{var,{350,7},'ASet'},{type,{350,15},union,[{user_type,{350,15},a_set,[]},{user_type,{350,25},ordset,[]}]}]]},{type,{351,7},constraint,[{atom,{351,7},is_subtype},[{var,{351,7},'NoElements'},{type,{351,21},non_neg_integer,[]}]]}]]}]}}]}},{{function,partition,1},[{file,[115,111,102,115,46,101,114,108]},{location,1091}],[<<112,97,114,116,105,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32,116,104,101,32,117,110,105,111,110,32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,115,101,116,115,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,119,111,32,101,108,101,109,101,110,116,115,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,101,113,117,97,108,32,105,102,32,116,104,101,121,32,98,101,108,111,110,103,32,116,111,32,116,104,101,32,115,97,109,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,101,116,115,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,97,44,98,44,99,93,44,91,100,44,101,44,102,93,44,91,103,44,104,44,105,93,93,41,44,10,83,101,116,115,50,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,98,44,99,44,100,93,44,91,101,44,102,44,103,93,44,91,104,44,105,44,106,93,93,41,44,10,80,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,115,111,102,115,58,117,110,105,111,110,40,83,101,116,115,49,44,32,83,101,116,115,50,41,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,41,46,10,91,91,97,93,44,91,98,44,99,93,44,91,100,93,44,91,101,44,102,93,44,91,103,93,44,91,104,44,105,93,44,91,106,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,53,51>>,signature => [{attribute,{1091,2},spec,{{partition,1},[{type,{1091,16},bounded_fun,[{type,{1091,16},'fun',[{type,{1091,16},product,[{var,{1091,17},'SetOfSets'}]},{var,{1091,31},'Partition'}]},[{type,{1092,7},constraint,[{atom,{1092,7},is_subtype},[{var,{1092,7},'SetOfSets'},{user_type,{1092,20},set_of_sets,[]}]]},{type,{1093,7},constraint,[{atom,{1093,7},is_subtype},[{var,{1093,7},'Partition'},{user_type,{1093,20},a_set,[]}]]}]]}]}}]}},{{function,partition,2},[{file,[115,111,102,115,46,101,114,108]},{location,1099}],[<<112,97,114,116,105,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,119,111,32,101,108,101,109,101,110,116,115,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,101,113,117,97,108,32,105,102,32,116,104,101,32,114,101,115,117,108,116,115,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,97,114,101,32,101,113,117,97,108,46>>]},{pre,[],[{code,[],[<<49,62,32,83,115,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,91,97,93,44,91,98,93,44,91,99,44,100,93,44,91,101,44,102,93,93,41,44,10,83,101,116,70,117,110,32,61,32,102,117,110,40,83,41,32,45,62,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,115,111,102,115,58,110,111,95,101,108,101,109,101,110,116,115,40,83,41,41,32,101,110,100,44,10,80,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,83,101,116,70,117,110,44,32,83,115,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,41,46,10,91,91,91,97,93,44,91,98,93,93,44,91,91,99,44,100,93,44,91,101,44,102,93,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,55,48>>,signature => [{attribute,{1099,2},spec,{{partition,2},[{type,{1099,16},bounded_fun,[{type,{1099,16},'fun',[{type,{1099,16},product,[{var,{1099,17},'SetFun'},{var,{1099,25},'Set'}]},{var,{1099,33},'Partition'}]},[{type,{1100,7},constraint,[{atom,{1100,7},is_subtype},[{var,{1100,7},'SetFun'},{user_type,{1100,17},set_fun,[]}]]},{type,{1101,7},constraint,[{atom,{1101,7},is_subtype},[{var,{1101,7},'Partition'},{user_type,{1101,20},a_set,[]}]]},{type,{1102,7},constraint,[{atom,{1102,7},is_subtype},[{var,{1102,7},'Set'},{user_type,{1102,14},a_set,[]}]]}]]}]}}]}},{{function,partition,3},[{file,[115,111,102,115,46,101,114,108]},{location,1118}],[<<112,97,114,116,105,116,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,112,97,105,114,32,111,102,32,115,101,116,115,32,116,104,97,116,44,32,114,101,103,97,114,100,101,100,32,97,115,32,99,111,110,115,116,105,116,117,116,105,110,103,32,97,32,115,101,116,44,32,102,111,114,109,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<46,32,73,102,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,116,111,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,103,105,118,101,115,32,97,110,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<83,101,116,50>>]},<<44,32,116,104,101,32,101,108,101,109,101,110,116,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<83,101,116,51>>]},<<44,32,111,116,104,101,114,119,105,115,101,32,116,104,101,32,101,108,101,109,101,110,116,32,98,101,108,111,110,103,115,32,116,111,32>>,{code,[],[<<83,101,116,52>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,50,44,52,44,54,93,41,44,10,123,82,50,44,82,51,125,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,40,49,44,32,82,49,44,32,83,41,44,10,123,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,44,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,51,41,125,46,10,123,91,123,50,44,98,125,93,44,91,123,49,44,97,125,44,123,51,44,99,125,93,125>>]}]},{p,[],[{code,[],[<<112,97,114,116,105,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<123,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41,44,32,100,114,101,115,116,114,105,99,116,105,111,110,40,70,44,194,160,83,49,44,194,160,83,50,41,125>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,50,56,54>>,signature => [{attribute,{1118,2},spec,{{partition,3},[{type,{1118,16},bounded_fun,[{type,{1118,16},'fun',[{type,{1118,16},product,[{var,{1118,17},'SetFun'},{var,{1118,25},'Set1'},{var,{1118,31},'Set2'}]},{type,{1118,40},tuple,[{var,{1118,41},'Set3'},{var,{1118,47},'Set4'}]}]},[{type,{1119,7},constraint,[{atom,{1119,7},is_subtype},[{var,{1119,7},'SetFun'},{user_type,{1119,17},set_fun,[]}]]},{type,{1120,7},constraint,[{atom,{1120,7},is_subtype},[{var,{1120,7},'Set1'},{user_type,{1120,15},a_set,[]}]]},{type,{1121,7},constraint,[{atom,{1121,7},is_subtype},[{var,{1121,7},'Set2'},{user_type,{1121,15},a_set,[]}]]},{type,{1122,7},constraint,[{atom,{1122,7},is_subtype},[{var,{1122,7},'Set3'},{user_type,{1122,15},a_set,[]}]]},{type,{1123,7},constraint,[{atom,{1123,7},is_subtype},[{var,{1123,7},'Set4'},{user_type,{1123,15},a_set,[]}]]}]]}]}}]}},{{function,partition_family,2},[{file,[115,111,102,115,46,101,114,108]},{location,1404}],[<<112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,119,104,101,114,101,32,116,104,101,32,105,110,100,101,120,101,100,32,115,101,116,32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,97,114,116,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,97,114,116,105,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,119,111,32,101,108,101,109,101,110,116,115,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,101,113,117,97,108,32,105,102,32,116,104,101,32,114,101,115,117,108,116,115,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,97,114,101,32,116,104,101,32,115,97,109,101,32,118,97,108,117,101,32,105,46,32,84,104,105,115,32,105,32,105,115,32,116,104,101,32,105,110,100,101,120,32,116,104,97,116,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,109,97,112,115,32,111,110,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,113,117,105,118,97,108,101,110,99,101,95,99,108,97,115,115>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,97,44,97,44,97,125,44,123,97,44,97,44,98,44,98,125,44,123,97,44,98,44,98,44,98,125,93,41,44,10,83,101,116,70,117,110,32,61,32,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,65,44,95,44,67,44,95,125,41,32,45,62,32,123,65,44,67,125,32,101,110,100,125,44,10,70,32,61,32,115,111,102,115,58,112,97,114,116,105,116,105,111,110,95,102,97,109,105,108,121,40,83,101,116,70,117,110,44,32,83,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,123,97,44,97,125,44,91,123,97,44,97,44,97,44,97,125,93,125,44,123,123,97,44,98,125,44,91,123,97,44,97,44,98,44,98,125,44,123,97,44,98,44,98,44,98,125,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,48,57>>,signature => [{attribute,{1404,2},spec,{{partition_family,2},[{type,{1404,23},bounded_fun,[{type,{1404,23},'fun',[{type,{1404,23},product,[{var,{1404,24},'SetFun'},{var,{1404,32},'Set'}]},{var,{1404,40},'Family'}]},[{type,{1405,7},constraint,[{atom,{1405,7},is_subtype},[{var,{1405,7},'Family'},{user_type,{1405,17},family,[]}]]},{type,{1406,7},constraint,[{atom,{1406,7},is_subtype},[{var,{1406,7},'SetFun'},{user_type,{1406,17},set_fun,[]}]]},{type,{1407,7},constraint,[{atom,{1407,7},is_subtype},[{var,{1407,7},'Set'},{user_type,{1407,14},a_set,[]}]]}]]}]}}]}},{{function,product,1},[{file,[115,111,102,115,46,101,114,108]},{location,444}],[<<112,114,111,100,117,99,116,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116,95,116,117,112,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,110,111,110,45,101,109,112,116,121,32,116,117,112,108,101,32,111,102,32,115,101,116,115,32>>,{code,[],[<<84,117,112,108,101,79,102,83,101,116,115>>]},<<46,32,73,102,32,40,120,91,49,93,44,194,160,46,46,46,44,194,160,120,91,110,93,41,32,105,115,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,110,45,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<82,101,108,97,116,105,111,110>>]},<<44,32,116,104,101,110,32,120,91,105,93,32,105,115,32,100,114,97,119,110,32,102,114,111,109,32,101,108,101,109,101,110,116,32,105,32,111,102,32>>,{code,[],[<<84,117,112,108,101,79,102,83,101,116,115>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,97,44,98,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,93,41,44,10,83,51,32,61,32,115,111,102,115,58,115,101,116,40,91,120,44,121,93,41,44,10,80,51,32,61,32,115,111,102,115,58,112,114,111,100,117,99,116,40,123,83,49,44,83,50,44,83,51,125,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,51,41,46,10,91,123,97,44,49,44,120,125,44,123,97,44,49,44,121,125,44,123,97,44,50,44,120,125,44,123,97,44,50,44,121,125,44,123,98,44,49,44,120,125,44,123,98,44,49,44,121,125,44,123,98,44,50,44,120,125,44,123,98,44,50,44,121,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,51,48>>,signature => [{attribute,{444,2},spec,{{product,1},[{type,{444,14},bounded_fun,[{type,{444,14},'fun',[{type,{444,14},product,[{var,{444,15},'TupleOfSets'}]},{var,{444,31},'Relation'}]},[{type,{445,7},constraint,[{atom,{445,7},is_subtype},[{var,{445,7},'Relation'},{user_type,{445,19},relation,[]}]]},{type,{446,7},constraint,[{atom,{446,7},is_subtype},[{var,{446,7},'TupleOfSets'},{user_type,{446,22},tuple_of,[{user_type,{446,31},a_set,[]}]}]]}]]}]}}]}},{{function,product,2},[{file,[115,111,102,115,46,101,114,108]},{location,430}],[<<112,114,111,100,117,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,97,44,98,93,41,44,10,82,32,61,32,115,111,102,115,58,112,114,111,100,117,99,116,40,83,49,44,32,83,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,41,46,10,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,97,125,44,123,50,44,98,125,93>>]}]},{p,[],[{code,[],[<<112,114,111,100,117,99,116,40,83,49,44,194,160,83,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<112,114,111,100,117,99,116,40,123,83,49,44,194,160,83,50,125,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,52,57>>,signature => [{attribute,{430,2},spec,{{product,2},[{type,{430,14},bounded_fun,[{type,{430,14},'fun',[{type,{430,14},product,[{var,{430,15},'Set1'},{var,{430,21},'Set2'}]},{var,{430,30},'BinRel'}]},[{type,{431,7},constraint,[{atom,{431,7},is_subtype},[{var,{431,7},'BinRel'},{user_type,{431,17},binary_relation,[]}]]},{type,{432,7},constraint,[{atom,{432,7},is_subtype},[{var,{432,7},'Set1'},{user_type,{432,15},a_set,[]}]]},{type,{433,7},constraint,[{atom,{433,7},is_subtype},[{var,{433,7},'Set2'},{user_type,{433,15},a_set,[]}]]}]]}]}}]}},{{function,projection,2},[{file,[115,111,102,115,46,101,114,108]},{location,1029}],[<<112,114,111,106,101,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,101,116,32,99,114,101,97,116,101,100,32,98,121,32,115,117,98,115,116,105,116,117,116,105,110,103,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,98,121,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,116,111,32,116,104,101,32,101,108,101,109,101,110,116,46>>]},{p,[],[<<73,102,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,105,115,32,97,32,110,117,109,98,101,114,32,105,194,160,62,61,194,160,49,32,97,110,100,32>>,{code,[],[<<83,101,116,49>>]},<<32,105,115,32,97,32,114,101,108,97,116,105,111,110,44,32,116,104,101,110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,115,101,116,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,112,114,111,106,101,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<112,114,111,106,101,99,116,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,111,110,116,111,32,99,111,111,114,100,105,110,97,116,101,32,105,46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,102,114,111,109,95,116,101,114,109,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,97,125,93,41,44,10,83,50,32,61,32,115,111,102,115,58,112,114,111,106,101,99,116,105,111,110,40,50,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,97,44,98,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,54,55>>,signature => [{attribute,{1029,2},spec,{{projection,2},[{type,{1029,17},bounded_fun,[{type,{1029,17},'fun',[{type,{1029,17},product,[{var,{1029,18},'SetFun'},{var,{1029,26},'Set1'}]},{var,{1029,35},'Set2'}]},[{type,{1030,7},constraint,[{atom,{1030,7},is_subtype},[{var,{1030,7},'SetFun'},{user_type,{1030,17},set_fun,[]}]]},{type,{1031,7},constraint,[{atom,{1031,7},is_subtype},[{var,{1031,7},'Set1'},{user_type,{1031,15},a_set,[]}]]},{type,{1032,7},constraint,[{atom,{1032,7},is_subtype},[{var,{1032,7},'Set2'},{user_type,{1032,15},a_set,[]}]]}]]}]}}]}},{{function,range,1},[{file,[115,111,102,115,46,101,114,108]},{location,622}],[<<114,97,110,103,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,97,110,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,97,110,103,101>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,98,125,44,123,50,44,98,125,44,123,50,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,114,97,110,103,101,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,97,44,98,44,99,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,51,56,54>>,signature => [{attribute,{622,2},spec,{{range,1},[{type,{622,12},bounded_fun,[{type,{622,12},'fun',[{type,{622,12},product,[{var,{622,13},'BinRel'}]},{var,{622,24},'Set'}]},[{type,{623,7},constraint,[{atom,{623,7},is_subtype},[{var,{623,7},'BinRel'},{user_type,{623,17},binary_relation,[]}]]},{type,{624,7},constraint,[{atom,{624,7},is_subtype},[{var,{624,7},'Set'},{user_type,{624,14},a_set,[]}]]}]]}]}}]}},{{function,relation,2},[{file,[115,111,102,115,46,101,114,108]},{location,255}],[<<114,101,108,97,116,105,111,110,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,48,48>>,equiv => {function,relation,1},signature => [{attribute,{255,2},spec,{{relation,2},[{type,{255,15},bounded_fun,[{type,{255,15},'fun',[{type,{255,15},product,[{var,{255,16},'Tuples'},{var,{255,24},'Type'}]},{var,{255,33},'Relation'}]},[{type,{256,7},constraint,[{atom,{256,7},is_subtype},[{var,{256,7},'N'},{type,{256,12},integer,[]}]]},{type,{257,7},constraint,[{atom,{257,7},is_subtype},[{var,{257,7},'Type'},{type,{257,15},union,[{var,{257,15},'N'},{user_type,{257,19},type,[]}]}]]},{type,{258,7},constraint,[{atom,{258,7},is_subtype},[{var,{258,7},'Relation'},{user_type,{258,19},relation,[]}]]},{type,{259,7},constraint,[{atom,{259,7},is_subtype},[{var,{259,7},'Tuples'},{type,{259,17},list,[{type,{259,18},tuple,any}]}]]}]]}]}}]}},{{function,relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,243}],[<<114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,111,110>>]},<<46,32>>,{code,[],[<<114,101,108,97,116,105,111,110,40,82,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,82,44,194,160,84,41>>]},<<44,32,105,102,32,84,32,105,115,32,97,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,97,110,100,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,32,114,101,108,97,116,105,111,110,46,32,73,102,32>>,{code,[],[<<84,121,112,101>>]},<<32,105,115,32,97,110,32,105,110,116,101,103,101,114,32,78,44,32,116,104,101,110,32>>,{code,[],[<<91,123,97,116,111,109,44,194,160,46,46,46,44,194,160,97,116,111,109,125,93,41>>]},<<44,32,119,104,101,114,101,32,116,104,101,32,116,117,112,108,101,32,115,105,122,101,32,105,115,32,78,44,32,105,115,32,117,115,101,100,32,97,115,32,116,121,112,101,32,111,102,32,116,104,101,32,114,101,108,97,116,105,111,110,46,32,73,102,32,110,111,32,116,121,112,101,32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,102,105,114,115,116,32,116,117,112,108,101,32,111,102,32>>,{code,[],[<<84,117,112,108,101,115>>]},<<32,105,115,32,117,115,101,100,32,105,102,32,116,104,101,114,101,32,105,115,32,115,117,99,104,32,97,32,116,117,112,108,101,46,32>>,{code,[],[<<114,101,108,97,116,105,111,110,40,91,93,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<114,101,108,97,116,105,111,110,40,91,93,44,194,160,50,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,48,48>>,signature => [{attribute,{243,2},spec,{{relation,1},[{type,{243,15},bounded_fun,[{type,{243,15},'fun',[{type,{243,15},product,[{var,{243,16},'Tuples'}]},{var,{243,27},'Relation'}]},[{type,{244,7},constraint,[{atom,{244,7},is_subtype},[{var,{244,7},'Relation'},{user_type,{244,19},relation,[]}]]},{type,{245,7},constraint,[{atom,{245,7},is_subtype},[{var,{245,7},'Tuples'},{type,{245,17},list,[{type,{245,18},tuple,any}]}]]}]]}]}}]}},{{function,relation_to_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,600}],[<<114,101,108,97,116,105,111,110,95,116,111,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<32,115,117,99,104,32,116,104,97,116,32,116,104,101,32,105,110,100,101,120,32,115,101,116,32,105,115,32,101,113,117,97,108,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,100,111,109,97,105,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<100,111,109,97,105,110>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<44,32,97,110,100,32>>,{code,[],[<<70,97,109,105,108,121>>]},<<91,105,93,32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,109,97,103,101>>]},<<32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,105,32,117,110,100,101,114,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,98,44,49,125,44,123,99,44,50,125,44,123,99,44,51,125,93,41,44,10,70,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,95,116,111,95,102,97,109,105,108,121,40,82,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,70,41,46,10,91,123,98,44,91,49,93,125,44,123,99,44,91,50,44,51,93,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,49,57>>,signature => [{attribute,{600,2},spec,{{relation_to_family,1},[{type,{600,25},bounded_fun,[{type,{600,25},'fun',[{type,{600,25},product,[{var,{600,26},'BinRel'}]},{var,{600,37},'Family'}]},[{type,{601,7},constraint,[{atom,{601,7},is_subtype},[{var,{601,7},'Family'},{user_type,{601,17},family,[]}]]},{type,{602,7},constraint,[{atom,{602,7},is_subtype},[{var,{602,7},'BinRel'},{user_type,{602,17},binary_relation,[]}]]}]]}]}}]}},{{function,relative_product,2},[{file,[115,111,102,115,46,101,114,108]},{location,657}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,51,55>>,equiv => {function,relative_product,1},signature => [{attribute,{657,2},spec,{{relative_product,2},[{type,{657,23},bounded_fun,[{type,{657,23},'fun',[{type,{657,23},product,[{var,{657,24},'ListOfBinRels'},{var,{657,39},'BinRel1'}]},{var,{657,51},'BinRel2'}]},[{type,{658,7},constraint,[{atom,{658,7},is_subtype},[{var,{658,7},'ListOfBinRels'},{type,{658,24},nonempty_list,[{var,{658,25},'BinRel'}]}]]},{type,{659,7},constraint,[{atom,{659,7},is_subtype},[{var,{659,7},'BinRel'},{user_type,{659,17},binary_relation,[]}]]},{type,{660,7},constraint,[{atom,{660,7},is_subtype},[{var,{660,7},'BinRel1'},{user_type,{660,18},binary_relation,[]}]]},{type,{661,7},constraint,[{atom,{661,7},is_subtype},[{var,{661,7},'BinRel2'},{user_type,{661,18},binary_relation,[]}]]}]]}]}}]}},{{function,relative_product,1},[{file,[115,111,102,115,46,101,114,108]},{location,641}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,49>>],#{<<101,110>> => [{p,[],[<<73,102,32>>,{code,[],[<<76,105,115,116,79,102,66,105,110,82,101,108,115>>]},<<32,105,115,32,97,32,110,111,110,45,101,109,112,116,121,32,108,105,115,116,32,91,82,91,49,93,44,194,160,46,46,46,44,194,160,82,91,110,93,93,32,111,102,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,105,115,32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,44,32,116,104,101,110,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<32,105,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,117,112,108,101,95,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,32,40,82,91,105,93,44,194,160,46,46,46,44,194,160,82,91,110,93,41,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{p,[],[<<73,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,105,115,32,111,109,105,116,116,101,100,44,32,116,104,101,32,114,101,108,97,116,105,111,110,32,111,102,32,101,113,117,97,108,105,116,121,32,98,101,116,119,101,101,110,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,67,97,114,116,101,115,105,97,110,95,112,114,111,100,117,99,116,95,116,117,112,108,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<67,97,114,116,101,115,105,97,110,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,114,97,110,103,101,115,32,111,102,32,82,91,105,93,44,32,114,97,110,103,101,194,160,82,91,49,93,194,160,195,151,194,160,46,46,46,194,160,195,151,194,160,114,97,110,103,101,194,160,82,91,110,93,44,32,105,115,32,117,115,101,100,32,105,110,115,116,101,97,100,32,40,105,110,116,117,105,116,105,118,101,108,121,44,32,110,111,116,104,105,110,103,32,105,115,32,34,108,111,115,116,34,41,46>>]},{pre,[],[{code,[],[<<49,62,32,84,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,97,97,125,44,123,50,44,98,125,93,41,44,10,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,117,125,44,123,50,44,118,125,44,123,51,44,99,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,91,84,82,44,32,82,49,93,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,123,97,44,117,125,125,44,123,49,44,123,97,97,44,117,125,125,44,123,50,44,123,98,44,118,125,125,93>>]}]},{p,[],[<<78,111,116,105,99,101,32,116,104,97,116,32>>,{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,91,82,49,93,44,194,160,82,50,41>>]},<<32,105,115,32,100,105,102,102,101,114,101,110,116,32,102,114,111,109,32>>,{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,82,49,44,194,160,82,50,41>>]},<<59,32,116,104,101,32,108,105,115,116,32,111,102,32,111,110,101,32,101,108,101,109,101,110,116,32,105,115,32,110,111,116,32,105,100,101,110,116,105,102,105,101,100,32,119,105,116,104,32,116,104,101,32,101,108,101,109,101,110,116,32,105,116,115,101,108,102,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,51,55>>,signature => [{attribute,{641,2},spec,{{relative_product,1},[{type,{641,23},bounded_fun,[{type,{641,23},'fun',[{type,{641,23},product,[{var,{641,24},'ListOfBinRels'}]},{var,{641,42},'BinRel2'}]},[{type,{642,7},constraint,[{atom,{642,7},is_subtype},[{var,{642,7},'ListOfBinRels'},{type,{642,24},nonempty_list,[{var,{642,25},'BinRel'}]}]]},{type,{643,7},constraint,[{atom,{643,7},is_subtype},[{var,{643,7},'BinRel'},{user_type,{643,17},binary_relation,[]}]]},{type,{644,7},constraint,[{atom,{644,7},is_subtype},[{var,{644,7},'BinRel2'},{user_type,{644,18},binary_relation,[]}]]}]]}]}}]}},{{function,relative_product,2},[{file,[115,111,102,115,46,101,114,108]},{location,657}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,115,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,54,56>>,signature => [{attribute,{657,2},spec,{{relative_product,2},[{type,{662,23},bounded_fun,[{type,{662,23},'fun',[{type,{662,23},product,[{var,{662,24},'BinRel1'},{var,{662,33},'BinRel2'}]},{var,{662,45},'BinRel3'}]},[{type,{663,7},constraint,[{atom,{663,7},is_subtype},[{var,{663,7},'BinRel1'},{user_type,{663,18},binary_relation,[]}]]},{type,{664,7},constraint,[{atom,{664,7},is_subtype},[{var,{664,7},'BinRel2'},{user_type,{664,18},binary_relation,[]}]]},{type,{665,7},constraint,[{atom,{665,7},is_subtype},[{var,{665,7},'BinRel3'},{user_type,{665,18},binary_relation,[]}]]}]]}]}}]}},{{function,relative_product1,2},[{file,[115,111,102,115,46,101,114,108]},{location,685}],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,108,97,116,105,118,101,32,112,114,111,100,117,99,116>>]},<<32,111,102,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,99,111,110,118,101,114,115,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<99,111,110,118,101,114,115,101>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,97,110,100,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,49,44,97,97,125,44,123,50,44,98,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,117,125,44,123,50,44,118,125,44,123,51,44,99,125,93,41,44,10,82,51,32,61,32,115,111,102,115,58,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,40,82,49,44,32,82,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,51,41,46,10,91,123,97,44,117,125,44,123,97,97,44,117,125,44,123,98,44,118,125,93>>]}]},{p,[],[{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,40,82,49,44,194,160,82,50,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,40,99,111,110,118,101,114,115,101,40,82,49,41,44,194,160,82,50,41>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,52,55,57>>,signature => [{attribute,{685,2},spec,{{relative_product1,2},[{type,{685,24},bounded_fun,[{type,{685,24},'fun',[{type,{685,24},product,[{var,{685,25},'BinRel1'},{var,{685,34},'BinRel2'}]},{var,{685,46},'BinRel3'}]},[{type,{686,7},constraint,[{atom,{686,7},is_subtype},[{var,{686,7},'BinRel1'},{user_type,{686,18},binary_relation,[]}]]},{type,{687,7},constraint,[{atom,{687,7},is_subtype},[{var,{687,7},'BinRel2'},{user_type,{687,18},binary_relation,[]}]]},{type,{688,7},constraint,[{atom,{688,7},is_subtype},[{var,{688,7},'BinRel3'},{user_type,{688,18},binary_relation,[]}]]}]]}]}}]}},{{function,restriction,2},[{file,[115,111,102,115,46,101,114,108]},{location,826}],[<<114,101,115,116,114,105,99,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,114,101,115,116,114,105,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<114,101,115,116,114,105,99,116,105,111,110>>]},<<32,111,102,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<32,116,111,32>>,{code,[],[<<83,101,116>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,44,52,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,115,116,114,105,99,116,105,111,110,40,82,49,44,32,83,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,97,125,44,123,50,44,98,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,48,48>>,signature => [{attribute,{826,2},spec,{{restriction,2},[{type,{826,18},bounded_fun,[{type,{826,18},'fun',[{type,{826,18},product,[{var,{826,19},'BinRel1'},{var,{826,28},'Set'}]},{var,{826,36},'BinRel2'}]},[{type,{827,7},constraint,[{atom,{827,7},is_subtype},[{var,{827,7},'BinRel1'},{user_type,{827,18},binary_relation,[]}]]},{type,{828,7},constraint,[{atom,{828,7},is_subtype},[{var,{828,7},'BinRel2'},{user_type,{828,18},binary_relation,[]}]]},{type,{829,7},constraint,[{atom,{829,7},is_subtype},[{var,{829,7},'Set'},{user_type,{829,14},a_set,[]}]]}]]}]}}]}},{{function,restriction,3},[{file,[115,111,102,115,46,101,114,108]},{location,892}],[<<114,101,115,116,114,105,99,116,105,111,110,47,51>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,117,98,115,101,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,99,111,110,116,97,105,110,105,110,103,32,116,104,111,115,101,32,101,108,101,109,101,110,116,115,32,116,104,97,116,32,103,105,118,101,115,32,97,110,32,101,108,101,109,101,110,116,32,105,110,32>>,{code,[],[<<83,101,116,50>>]},<<32,97,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,97,125,44,123,50,44,98,125,44,123,51,44,99,125,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,98,44,99,44,100,93,41,44,10,83,51,32,61,32,115,111,102,115,58,114,101,115,116,114,105,99,116,105,111,110,40,50,44,32,83,49,44,32,83,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,51,41,46,10,91,123,50,44,98,125,44,123,51,44,99,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,49,54>>,signature => [{attribute,{892,2},spec,{{restriction,3},[{type,{892,18},bounded_fun,[{type,{892,18},'fun',[{type,{892,18},product,[{var,{892,19},'SetFun'},{var,{892,27},'Set1'},{var,{892,33},'Set2'}]},{var,{892,42},'Set3'}]},[{type,{893,7},constraint,[{atom,{893,7},is_subtype},[{var,{893,7},'SetFun'},{user_type,{893,17},set_fun,[]}]]},{type,{894,7},constraint,[{atom,{894,7},is_subtype},[{var,{894,7},'Set1'},{user_type,{894,15},a_set,[]}]]},{type,{895,7},constraint,[{atom,{895,7},is_subtype},[{var,{895,7},'Set2'},{user_type,{895,15},a_set,[]}]]},{type,{896,7},constraint,[{atom,{896,7},is_subtype},[{var,{896,7},'Set3'},{user_type,{896,15},a_set,[]}]]}]]}]}}]}},{{function,set,2},[{file,[115,111,102,115,46,101,114,108]},{location,204}],[<<115,101,116,47,50>>],#{},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,51,50>>,equiv => {function,set,1},signature => [{attribute,{204,2},spec,{{set,2},[{type,{204,10},bounded_fun,[{type,{204,10},'fun',[{type,{204,10},product,[{var,{204,11},'Terms'},{var,{204,18},'Type'}]},{var,{204,27},'Set'}]},[{type,{205,7},constraint,[{atom,{205,7},is_subtype},[{var,{205,7},'Set'},{user_type,{205,14},a_set,[]}]]},{type,{206,7},constraint,[{atom,{206,7},is_subtype},[{var,{206,7},'Terms'},{type,{206,16},list,[{type,{206,17},term,[]}]}]]},{type,{207,7},constraint,[{atom,{207,7},is_subtype},[{var,{207,7},'Type'},{user_type,{207,15},type,[]}]]}]]}]}}]}},{{function,set,1},[{file,[115,111,102,115,46,101,114,108]},{location,195}],[<<115,101,116,47,49>>],#{<<101,110>> => [{p,[],[<<67,114,101,97,116,101,115,32,97,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<46,32>>,{code,[],[<<115,101,116,40,76,44,194,160,84,41>>]},<<32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32>>,{code,[],[<<102,114,111,109,95,116,101,114,109,40,76,44,194,160,84,41>>]},<<44,32,105,102,32,116,104,101,32,114,101,115,117,108,116,32,105,115,32,97,110,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46,32,73,102,32,110,111,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,105,115,32,101,120,112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,101,100,44,32>>,{code,[],[<<91,97,116,111,109,93>>]},<<32,105,115,32,117,115,101,100,32,97,115,32,116,104,101,32,115,101,116,32,116,121,112,101,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,51,50>>,signature => [{attribute,{195,2},spec,{{set,1},[{type,{195,10},bounded_fun,[{type,{195,10},'fun',[{type,{195,10},product,[{var,{195,11},'Terms'}]},{var,{195,21},'Set'}]},[{type,{196,7},constraint,[{atom,{196,7},is_subtype},[{var,{196,7},'Set'},{user_type,{196,14},a_set,[]}]]},{type,{197,7},constraint,[{atom,{197,7},is_subtype},[{var,{197,7},'Terms'},{type,{197,16},list,[{type,{197,17},term,[]}]}]]}]]}]}}]}},{{function,specification,2},[{file,[115,111,102,115,46,101,114,108]},{location,359}],[<<115,112,101,99,105,102,105,99,97,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,115,101,116,32,99,111,110,116,97,105,110,105,110,103,32,101,118,101,114,121,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,102,111,114,32,119,104,105,99,104,32>>,{code,[],[<<70,117,110>>]},<<32,114,101,116,117,114,110,115,32>>,{code,[],[<<116,114,117,101>>]},<<46,32,73,102,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,32,116,117,112,108,101,32>>,{code,[],[<<123,101,120,116,101,114,110,97,108,44,194,160,70,117,110,50,125>>]},<<44,32>>,{code,[],[<<70,117,110,50>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,111,102,32,101,97,99,104,32,101,108,101,109,101,110,116,44,32,111,116,104,101,114,119,105,115,101,32>>,{code,[],[<<70,117,110>>]},<<32,105,115,32,97,112,112,108,105,101,100,32,116,111,32,101,97,99,104,32,101,108,101,109,101,110,116,46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,97,44,49,125,44,123,98,44,50,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,120,44,49,125,44,123,120,44,50,125,44,123,121,44,51,125,93,41,44,10,83,49,32,61,32,115,111,102,115,58,102,114,111,109,95,115,101,116,115,40,91,82,49,44,82,50,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,112,101,99,105,102,105,99,97,116,105,111,110,40,102,117,110,32,115,111,102,115,58,105,115,95,97,95,102,117,110,99,116,105,111,110,47,49,44,32,83,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,50,41,46,10,91,91,123,97,44,49,125,44,123,98,44,50,125,93,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,52,53>>,signature => [{attribute,{359,2},spec,{{specification,2},[{type,{359,20},bounded_fun,[{type,{359,20},'fun',[{type,{359,20},product,[{var,{359,21},'Fun'},{var,{359,26},'Set1'}]},{var,{359,35},'Set2'}]},[{type,{360,7},constraint,[{atom,{360,7},is_subtype},[{var,{360,7},'Fun'},{user_type,{360,14},spec_fun,[]}]]},{type,{361,7},constraint,[{atom,{361,7},is_subtype},[{var,{361,7},'Set1'},{user_type,{361,15},a_set,[]}]]},{type,{362,7},constraint,[{atom,{362,7},is_subtype},[{var,{362,7},'Set2'},{user_type,{362,15},a_set,[]}]]}]]}]}}]}},{{function,strict_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,752}],[<<115,116,114,105,99,116,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,116,114,105,99,116,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,116,114,105,99,116,32,114,101,108,97,116,105,111,110>>]},<<32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,49,125,44,123,49,44,50,125,44,123,50,44,49,125,44,123,50,44,50,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,115,116,114,105,99,116,95,114,101,108,97,116,105,111,110,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,50,125,44,123,50,44,49,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,54,54>>,signature => [{attribute,{752,2},spec,{{strict_relation,1},[{type,{752,22},bounded_fun,[{type,{752,22},'fun',[{type,{752,22},product,[{var,{752,23},'BinRel1'}]},{var,{752,35},'BinRel2'}]},[{type,{753,7},constraint,[{atom,{753,7},is_subtype},[{var,{753,7},'BinRel1'},{user_type,{753,18},binary_relation,[]}]]},{type,{754,7},constraint,[{atom,{754,7},is_subtype},[{var,{754,7},'BinRel2'},{user_type,{754,18},binary_relation,[]}]]}]]}]}}]}},{{function,substitution,2},[{file,[115,111,102,115,46,101,114,108]},{location,1048}],[<<115,117,98,115,116,105,116,117,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,102,117,110,99,116,105,111,110,44,32,116,104,101,32,100,111,109,97,105,110,32,111,102,32,119,104,105,99,104,32,105,115,32>>,{code,[],[<<83,101,116,49>>]},<<46,32,84,104,101,32,118,97,108,117,101,32,111,102,32,97,110,32,101,108,101,109,101,110,116,32,111,102,32,116,104,101,32,100,111,109,97,105,110,32,105,115,32,116,104,101,32,114,101,115,117,108,116,32,111,102,32,97,112,112,108,121,105,110,103,32>>,{code,[],[<<83,101,116,70,117,110>>]},<<32,116,111,32,116,104,101,32,101,108,101,109,101,110,116,46>>]},{pre,[],[{code,[],[<<49,62,32,76,32,61,32,91,123,97,44,49,125,44,123,98,44,50,125,93,46,10,91,123,97,44,49,125,44,123,98,44,50,125,93,10,50,62,32,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,112,114,111,106,101,99,116,105,111,110,40,49,44,115,111,102,115,58,114,101,108,97,116,105,111,110,40,76,41,41,41,46,10,91,97,44,98,93,10,51,62,32,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,115,117,98,115,116,105,116,117,116,105,111,110,40,49,44,115,111,102,115,58,114,101,108,97,116,105,111,110,40,76,41,41,41,46,10,91,123,123,97,44,49,125,44,97,125,44,123,123,98,44,50,125,44,98,125,93,10,52,62,32,83,101,116,70,117,110,32,61,32,123,101,120,116,101,114,110,97,108,44,32,102,117,110,40,123,65,44,95,125,61,69,41,32,45,62,32,123,69,44,65,125,32,101,110,100,125,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,115,111,102,115,58,112,114,111,106,101,99,116,105,111,110,40,83,101,116,70,117,110,44,115,111,102,115,58,114,101,108,97,116,105,111,110,40,76,41,41,41,46,10,91,123,123,97,44,49,125,44,97,125,44,123,123,98,44,50,125,44,98,125,93>>]}]},{p,[],[<<84,104,101,32,114,101,108,97,116,105,111,110,32,111,102,32,101,113,117,97,108,105,116,121,32,98,101,116,119,101,101,110,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,123,97,44,98,44,99,125,58>>]},{pre,[],[{code,[],[<<49,62,32,73,32,61,32,115,111,102,115,58,115,117,98,115,116,105,116,117,116,105,111,110,40,102,117,110,40,65,41,32,45,62,32,65,32,101,110,100,44,32,115,111,102,115,58,115,101,116,40,91,97,44,98,44,99,93,41,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,73,41,46,10,91,123,97,44,97,125,44,123,98,44,98,125,44,123,99,44,99,125,93>>]}]},{p,[],[<<76,101,116,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,98,101,32,97,32,115,101,116,32,111,102,32,115,101,116,115,32,97,110,100,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,97,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,46,32,84,104,101,32,102,117,110,99,116,105,111,110,32,116,104,97,116,32,109,97,112,115,32,101,97,99,104,32,101,108,101,109,101,110,116,32>>,{code,[],[<<83,101,116>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,111,110,116,111,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<105,109,97,103,101>>]},<<32,111,102,32>>,{code,[],[<<83,101,116>>]},<<32,117,110,100,101,114,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,114,101,116,117,114,110,101,100,32,98,121,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,117,110,99,116,105,111,110,58>>]},{pre,[],[{code,[],[<<105,109,97,103,101,115,40,83,101,116,79,102,83,101,116,115,44,32,66,105,110,82,101,108,41,32,45,62,10,32,32,32,70,117,110,32,61,32,102,117,110,40,83,101,116,41,32,45,62,32,115,111,102,115,58,105,109,97,103,101,40,66,105,110,82,101,108,44,32,83,101,116,41,32,101,110,100,44,10,32,32,32,115,111,102,115,58,115,117,98,115,116,105,116,117,116,105,111,110,40,70,117,110,44,32,83,101,116,79,102,83,101,116,115,41,46>>]}]},{p,[],[<<69,120,116,101,114,110,97,108,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,32,97,114,101,32,114,101,112,114,101,115,101,110,116,101,100,32,97,115,32,115,111,114,116,101,100,32,108,105,115,116,115,46,32,83,111,44,32,99,114,101,97,116,105,110,103,32,116,104,101,32,105,109,97,103,101,32,111,102,32,97,32,115,101,116,32,117,110,100,101,114,32,97,32,114,101,108,97,116,105,111,110,32,82,32,99,97,110,32,116,114,97,118,101,114,115,101,32,97,108,108,32,101,108,101,109,101,110,116,115,32,111,102,32,82,32,40,116,111,32,116,104,97,116,32,99,111,109,101,115,32,116,104,101,32,115,111,114,116,105,110,103,32,111,102,32,114,101,115,117,108,116,115,44,32,116,104,101,32,105,109,97,103,101,41,46,32,73,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,105,109,97,103,101,47,50>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,109,102,97>>}],[{code,[],[<<105,109,97,103,101,47,50>>]}]},<<44,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,116,114,97,118,101,114,115,101,100,32,111,110,99,101,32,102,111,114,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<44,32,119,104,105,99,104,32,99,97,110,32,116,97,107,101,32,116,111,111,32,108,111,110,103,46,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,101,102,102,105,99,105,101,110,116,32,102,117,110,99,116,105,111,110,32,99,97,110,32,98,101,32,117,115,101,100,32,105,110,115,116,101,97,100,32,117,110,100,101,114,32,116,104,101,32,97,115,115,117,109,112,116,105,111,110,32,116,104,97,116,32,116,104,101,32,105,109,97,103,101,32,111,102,32,101,97,99,104,32,101,108,101,109,101,110,116,32,111,102,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<32,117,110,100,101,114,32>>,{code,[],[<<66,105,110,82,101,108>>]},<<32,105,115,32,110,111,110,45,101,109,112,116,121,58>>]},{pre,[],[{code,[],[<<105,109,97,103,101,115,50,40,83,101,116,79,102,83,101,116,115,44,32,66,105,110,82,101,108,41,32,45,62,10,32,32,32,67,82,32,61,32,115,111,102,115,58,99,97,110,111,110,105,99,97,108,95,114,101,108,97,116,105,111,110,40,83,101,116,79,102,83,101,116,115,41,44,10,32,32,32,82,32,61,32,115,111,102,115,58,114,101,108,97,116,105,118,101,95,112,114,111,100,117,99,116,49,40,67,82,44,32,66,105,110,82,101,108,41,44,10,32,32,32,115,111,102,115,58,114,101,108,97,116,105,111,110,95,116,111,95,102,97,109,105,108,121,40,82,41,46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,53,56,50>>,signature => [{attribute,{1048,2},spec,{{substitution,2},[{type,{1048,19},bounded_fun,[{type,{1048,19},'fun',[{type,{1048,19},product,[{var,{1048,20},'SetFun'},{var,{1048,28},'Set1'}]},{var,{1048,37},'Set2'}]},[{type,{1049,7},constraint,[{atom,{1049,7},is_subtype},[{var,{1049,7},'SetFun'},{user_type,{1049,17},set_fun,[]}]]},{type,{1050,7},constraint,[{atom,{1050,7},is_subtype},[{var,{1050,7},'Set1'},{user_type,{1050,15},a_set,[]}]]},{type,{1051,7},constraint,[{atom,{1051,7},is_subtype},[{var,{1051,7},'Set2'},{user_type,{1051,15},a_set,[]}]]}]]}]}}]}},{{function,symdiff,2},[{file,[115,111,102,115,46,101,114,108]},{location,408}],[<<115,121,109,100,105,102,102,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,121,109,109,101,116,114,105,99,95,100,105,102,102,101,114,101,110,99,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<115,121,109,109,101,116,114,105,99,32,100,105,102,102,101,114,101,110,99,101>>]},<<32,40,111,114,32,116,104,101,32,66,111,111,108,101,97,110,32,115,117,109,41,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,83,49,32,61,32,115,111,102,115,58,115,101,116,40,91,49,44,50,44,51,93,41,44,10,83,50,32,61,32,115,111,102,115,58,115,101,116,40,91,50,44,51,44,52,93,41,44,10,80,32,61,32,115,111,102,115,58,115,121,109,100,105,102,102,40,83,49,44,32,83,50,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,80,41,46,10,91,49,44,52,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,51,49>>,signature => [{attribute,{408,2},spec,{{symdiff,2},[{type,{408,14},bounded_fun,[{type,{408,14},'fun',[{type,{408,14},product,[{var,{408,15},'Set1'},{var,{408,21},'Set2'}]},{var,{408,30},'Set3'}]},[{type,{409,7},constraint,[{atom,{409,7},is_subtype},[{var,{409,7},'Set1'},{user_type,{409,15},a_set,[]}]]},{type,{410,7},constraint,[{atom,{410,7},is_subtype},[{var,{410,7},'Set2'},{user_type,{410,15},a_set,[]}]]},{type,{411,7},constraint,[{atom,{411,7},is_subtype},[{var,{411,7},'Set3'},{user_type,{411,15},a_set,[]}]]}]]}]}}]}},{{function,symmetric_partition,2},[{file,[115,111,102,115,46,101,114,108]},{location,418}],[<<115,121,109,109,101,116,114,105,99,95,112,97,114,116,105,116,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,116,114,105,112,108,101,32,111,102,32,115,101,116,115,58>>]},{ul,[],[{li,[],[{code,[],[<<83,101,116,51>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,116,104,97,116,32,100,111,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{li,[],[{code,[],[<<83,101,116,52>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,116,104,97,116,32,98,101,108,111,110,103,32,116,111,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]},{li,[],[{code,[],[<<83,101,116,53>>]},<<32,99,111,110,116,97,105,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32>>,{code,[],[<<83,101,116,50>>]},<<32,116,104,97,116,32,100,111,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32>>,{code,[],[<<83,101,116,49>>]},<<46>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,52,55>>,signature => [{attribute,{418,2},spec,{{symmetric_partition,2},[{type,{418,26},bounded_fun,[{type,{418,26},'fun',[{type,{418,26},product,[{var,{418,27},'Set1'},{var,{418,33},'Set2'}]},{type,{418,42},tuple,[{var,{418,43},'Set3'},{var,{418,49},'Set4'},{var,{418,55},'Set5'}]}]},[{type,{419,7},constraint,[{atom,{419,7},is_subtype},[{var,{419,7},'Set1'},{user_type,{419,15},a_set,[]}]]},{type,{420,7},constraint,[{atom,{420,7},is_subtype},[{var,{420,7},'Set2'},{user_type,{420,15},a_set,[]}]]},{type,{421,7},constraint,[{atom,{421,7},is_subtype},[{var,{421,7},'Set3'},{user_type,{421,15},a_set,[]}]]},{type,{422,7},constraint,[{atom,{422,7},is_subtype},[{var,{422,7},'Set4'},{user_type,{422,15},a_set,[]}]]},{type,{423,7},constraint,[{atom,{423,7},is_subtype},[{var,{423,7},'Set5'},{user_type,{423,15},a_set,[]}]]}]]}]}}]}},{{function,to_external,1},[{file,[115,111,102,115,46,101,114,108]},{location,319}],[<<116,111,95,101,120,116,101,114,110,97,108,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<32,111,102,32,97,110,32,97,116,111,109,105,99,44,32,111,114,100,101,114,101,100,44,32,111,114,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,54,56>>,signature => [{attribute,{319,2},spec,{{to_external,1},[{type,{319,18},bounded_fun,[{type,{319,18},'fun',[{type,{319,18},product,[{var,{319,19},'AnySet'}]},{var,{319,30},'ExternalSet'}]},[{type,{320,7},constraint,[{atom,{320,7},is_subtype},[{var,{320,7},'ExternalSet'},{user_type,{320,22},external_set,[]}]]},{type,{321,7},constraint,[{atom,{321,7},is_subtype},[{var,{321,7},'AnySet'},{user_type,{321,17},anyset,[]}]]}]]}]}}]}},{{function,to_sets,1},[{file,[115,111,102,115,46,101,114,108]},{location,335}],[<<116,111,95,115,101,116,115,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,111,114,100,101,114,101,100,32,115,101,116,32>>,{code,[],[<<65,83,101,116>>]},<<32,97,115,32,97,32,116,117,112,108,101,32,111,102,32,115,101,116,115,44,32,97,110,100,32,116,104,101,32,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,32,117,110,111,114,100,101,114,101,100,32,115,101,116,32>>,{code,[],[<<65,83,101,116>>]},<<32,97,115,32,97,32,115,111,114,116,101,100,32,108,105,115,116,32,111,102,32,115,101,116,115,32,119,105,116,104,111,117,116,32,100,117,112,108,105,99,97,116,101,115,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,55,55>>,signature => [{attribute,{335,2},spec,{{to_sets,1},[{type,{335,14},bounded_fun,[{type,{335,14},'fun',[{type,{335,14},product,[{var,{335,15},'ASet'}]},{var,{335,24},'Sets'}]},[{type,{336,7},constraint,[{atom,{336,7},is_subtype},[{var,{336,7},'ASet'},{type,{336,15},union,[{user_type,{336,15},a_set,[]},{user_type,{336,25},ordset,[]}]}]]},{type,{337,7},constraint,[{atom,{337,7},is_subtype},[{var,{337,7},'Sets'},{type,{337,15},union,[{user_type,{337,15},tuple_of,[{var,{337,24},'AnySet'}]},{type,{337,34},list,[{var,{337,35},'AnySet'}]}]}]]},{type,{338,7},constraint,[{atom,{338,7},is_subtype},[{var,{338,7},'AnySet'},{user_type,{338,17},anyset,[]}]]}]]}]}}]}},{{function,type,1},[{file,[115,111,102,115,46,101,114,108]},{location,327}],[<<116,121,112,101,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<32,111,102,32,97,110,32,97,116,111,109,105,99,44,32,111,114,100,101,114,101,100,44,32,111,114,32,117,110,111,114,100,101,114,101,100,32,115,101,116,46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,56,56>>,signature => [{attribute,{327,2},spec,{{type,1},[{type,{327,11},bounded_fun,[{type,{327,11},'fun',[{type,{327,11},product,[{var,{327,12},'AnySet'}]},{var,{327,23},'Type'}]},[{type,{328,7},constraint,[{atom,{328,7},is_subtype},[{var,{328,7},'AnySet'},{user_type,{328,17},anyset,[]}]]},{type,{329,7},constraint,[{atom,{329,7},is_subtype},[{var,{329,7},'Type'},{user_type,{329,15},type,[]}]]}]]}]}}]}},{{function,union,1},[{file,[115,111,102,115,46,101,114,108]},{location,553}],[<<117,110,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110,95,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,105,111,110>>]},<<32,111,102,32,116,104,101,32,115,101,116,32,111,102,32,115,101,116,115,32>>,{code,[],[<<83,101,116,79,102,83,101,116,115>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,54,57,55>>,signature => [{attribute,{553,2},spec,{{union,1},[{type,{553,12},bounded_fun,[{type,{553,12},'fun',[{type,{553,12},product,[{var,{553,13},'SetOfSets'}]},{var,{553,27},'Set'}]},[{type,{554,7},constraint,[{atom,{554,7},is_subtype},[{var,{554,7},'Set'},{user_type,{554,14},a_set,[]}]]},{type,{555,7},constraint,[{atom,{555,7},is_subtype},[{var,{555,7},'SetOfSets'},{user_type,{555,20},set_of_sets,[]}]]}]]}]}}]}},{{function,union,2},[{file,[115,111,102,115,46,101,114,108]},{location,378}],[<<117,110,105,111,110,47,50>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,117,110,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,105,111,110>>]},<<32,111,102,32>>,{code,[],[<<83,101,116,49>>]},<<32,97,110,100,32>>,{code,[],[<<83,101,116,50>>]},<<46>>]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,55,48,54>>,signature => [{attribute,{378,2},spec,{{union,2},[{type,{378,12},bounded_fun,[{type,{378,12},'fun',[{type,{378,12},product,[{var,{378,13},'Set1'},{var,{378,19},'Set2'}]},{var,{378,28},'Set3'}]},[{type,{379,7},constraint,[{atom,{379,7},is_subtype},[{var,{379,7},'Set1'},{user_type,{379,15},a_set,[]}]]},{type,{380,7},constraint,[{atom,{380,7},is_subtype},[{var,{380,7},'Set2'},{user_type,{380,15},a_set,[]}]]},{type,{381,7},constraint,[{atom,{381,7},is_subtype},[{var,{381,7},'Set3'},{user_type,{381,15},a_set,[]}]]}]]}]}}]}},{{function,union_of_family,1},[{file,[115,111,102,115,46,101,114,108]},{location,1288}],[<<117,110,105,111,110,95,111,102,95,102,97,109,105,108,121,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,116,104,101,32,117,110,105,111,110,32,111,102,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32>>,{code,[],[<<70,97,109,105,108,121>>]},<<46>>]},{pre,[],[{code,[],[<<49,62,32,70,32,61,32,115,111,102,115,58,102,97,109,105,108,121,40,91,123,97,44,91,48,44,50,44,52,93,125,44,123,98,44,91,48,44,49,44,50,93,125,44,123,99,44,91,50,44,51,93,125,93,41,44,10,83,32,61,32,115,111,102,115,58,117,110,105,111,110,95,111,102,95,102,97,109,105,108,121,40,70,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,83,41,46,10,91,48,44,49,44,50,44,51,44,52,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,55,49,53>>,signature => [{attribute,{1288,2},spec,{{union_of_family,1},[{type,{1288,22},bounded_fun,[{type,{1288,22},'fun',[{type,{1288,22},product,[{var,{1288,23},'Family'}]},{var,{1288,34},'Set'}]},[{type,{1289,7},constraint,[{atom,{1289,7},is_subtype},[{var,{1289,7},'Family'},{user_type,{1289,17},family,[]}]]},{type,{1290,7},constraint,[{atom,{1290,7},is_subtype},[{var,{1290,7},'Set'},{user_type,{1290,14},a_set,[]}]]}]]}]}}]}},{{function,weak_relation,1},[{file,[115,111,102,115,46,101,114,108]},{location,763}],[<<119,101,97,107,95,114,101,108,97,116,105,111,110,47,49>>],#{<<101,110>> => [{p,[],[<<82,101,116,117,114,110,115,32,97,32,115,117,98,115,101,116,32,83,32,111,102,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,119,101,97,107,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<119,101,97,107,32,114,101,108,97,116,105,111,110>>]},<<32,87,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,116,111,32,116,104,101,32,98,105,110,97,114,121,32,114,101,108,97,116,105,111,110,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46,32,76,101,116,32,70,32,98,101,32,116,104,101,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,105,101,108,100>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,105,101,108,100>>]},<<32,111,102,32>>,{code,[],[<<66,105,110,82,101,108,49>>]},<<46,32,84,104,101,32,115,117,98,115,101,116,32,83,32,105,115,32,100,101,102,105,110,101,100,32,115,111,32,116,104,97,116,32,120,32,83,32,121,32,105,102,32,120,32,87,32,121,32,102,111,114,32,115,111,109,101,32,120,32,105,110,32,70,32,97,110,100,32,102,111,114,32,115,111,109,101,32,121,32,105,110,32,70,46>>]},{pre,[],[{code,[],[<<49,62,32,82,49,32,61,32,115,111,102,115,58,114,101,108,97,116,105,111,110,40,91,123,49,44,49,125,44,123,49,44,50,125,44,123,51,44,49,125,93,41,44,10,82,50,32,61,32,115,111,102,115,58,119,101,97,107,95,114,101,108,97,116,105,111,110,40,82,49,41,44,10,115,111,102,115,58,116,111,95,101,120,116,101,114,110,97,108,40,82,50,41,46,10,91,123,49,44,49,125,44,123,49,44,50,125,44,123,50,44,50,125,44,123,51,44,49,125,44,123,51,44,51,125,93>>]}]}]},#{edit_url => <<104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,101,114,108,97,110,103,47,111,116,112,47,101,100,105,116,47,109,97,105,110,116,47,108,105,98,47,115,116,100,108,105,98,47,100,111,99,47,115,114,99,47,115,111,102,115,46,120,109,108,35,76,49,55,50,57>>,signature => [{attribute,{763,2},spec,{{weak_relation,1},[{type,{763,20},bounded_fun,[{type,{763,20},'fun',[{type,{763,20},product,[{var,{763,21},'BinRel1'}]},{var,{763,33},'BinRel2'}]},[{type,{764,7},constraint,[{atom,{764,7},is_subtype},[{var,{764,7},'BinRel1'},{user_type,{764,18},binary_relation,[]}]]},{type,{765,7},constraint,[{atom,{765,7},is_subtype},[{var,{765,7},'BinRel2'},{user_type,{765,18},binary_relation,[]}]]}]]}]}}]}},{{type,anyset,0},[{file,[115,111,102,115,46,101,114,108]},{location,117}],[<<45,116,121,112,101,32,97,110,121,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,121,32,107,105,110,100,32,111,102,32,115,101,116,32,40,97,108,115,111,32,105,110,99,108,117,100,101,100,32,97,114,101,32,116,104,101,32,97,116,111,109,105,99,32,115,101,116,115,41,46>>]}]},#{signature => [{attribute,{117,2},type,{anyset,{type,{117,19},union,[{user_type,{117,19},ordset,[]},{user_type,{117,30},a_set,[]}]},[]}}]}},{{type,binary_relation,0},[{file,[115,111,102,115,46,101,114,108]},{location,118}],[<<45,116,121,112,101,32,98,105,110,97,114,121,95,114,101,108,97,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,98,105,110,97,114,121,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<98,105,110,97,114,121,32,114,101,108,97,116,105,111,110>>]},<<46>>]}]},#{signature => [{attribute,{118,2},type,{binary_relation,{user_type,{118,28},relation,[]},[]}}]}},{{type,external_set,0},[{file,[115,111,102,115,46,101,114,108]},{location,119}],[<<45,116,121,112,101,32,101,120,116,101,114,110,97,108,95,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,101,120,116,101,114,110,97,108,95,115,101,116>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<101,120,116,101,114,110,97,108,32,115,101,116>>]},<<46>>]}]},#{signature => [{attribute,{119,2},type,{external_set,{type,{119,25},term,[]},[]}}]}},{{type,family,0},[{file,[115,111,102,115,46,101,114,108]},{location,121}],[<<45,116,121,112,101,32,102,97,109,105,108,121,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,97,109,105,108,121>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,97,109,105,108,121>>]},<<32,40,111,102,32,115,117,98,115,101,116,115,41,46>>]}]},#{signature => [{attribute,{121,2},type,{family,{user_type,{121,19},a_function,[]},[]}}]}},{{type,a_function,0},[{file,[115,111,102,115,46,101,114,108]},{location,120}],[<<45,116,121,112,101,32,97,95,102,117,110,99,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,102,117,110,99,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<102,117,110,99,116,105,111,110>>]},<<46>>]}]},#{signature => [{attribute,{120,2},type,{a_function,{user_type,{120,23},relation,[]},[]}}]}},{{type,ordset,0},[{file,[115,111,102,115,46,101,114,108]},{location,122}],[<<45,116,121,112,101,32,111,114,100,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<111,114,100,101,114,101,100,32,115,101,116>>]},<<46>>]}]},#{signature => [{attribute,{122,2},opaque,{ordset,{type,{122,21},record,[{atom,{122,23},'OrdSet'}]},[]}}]}},{{type,relation,0},[{file,[115,111,102,115,46,101,114,108]},{location,123}],[<<45,116,121,112,101,32,114,101,108,97,116,105,111,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,110,95,97,114,121,95,114,101,108,97,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<110,45,97,114,121,32,114,101,108,97,116,105,111,110>>]},<<46>>]}]},#{signature => [{attribute,{123,2},type,{relation,{user_type,{123,21},a_set,[]},[]}}]}},{{type,a_set,0},[{file,[115,111,102,115,46,101,114,108]},{location,124}],[<<45,116,121,112,101,32,97,95,115,101,116,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<46>>]}]},#{signature => [{attribute,{124,2},opaque,{a_set,{type,{124,20},record,[{atom,{124,22},'Set'}]},[]}}]}},{{type,set_of_sets,0},[{file,[115,111,102,115,46,101,114,108]},{location,125}],[<<45,116,121,112,101,32,115,101,116,95,111,102,95,115,101,116,115,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,110,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,115,95,100,101,102,105,110,105,116,105,111,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<117,110,111,114,100,101,114,101,100,32,115,101,116>>]},<<32,111,102,32,117,110,111,114,100,101,114,101,100,32,115,101,116,115,46>>]}]},#{signature => [{attribute,{125,2},type,{set_of_sets,{user_type,{125,24},a_set,[]},[]}}]}},{{type,set_fun,0},[{file,[115,111,102,115,46,101,114,108]},{location,126}],[<<45,116,121,112,101,32,115,101,116,95,102,117,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,115,101,116,95,102,117,110>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<83,101,116,70,117,110>>]},<<46>>]}]},#{signature => [{attribute,{126,2},type,{set_fun,{type,{126,20},union,[{type,{126,20},pos_integer,[]},{type,{127,20},tuple,[{atom,{127,21},external},{type,{127,35},'fun',[{type,{127,35},product,[{user_type,{127,36},external_set,[]}]},{user_type,{127,55},external_set,[]}]}]},{type,{128,24},'fun',[{type,{128,24},product,[{user_type,{128,25},anyset,[]}]},{user_type,{128,38},anyset,[]}]}]},[]}}]}},{{type,spec_fun,0},[{file,[115,111,102,115,46,101,114,108]},{location,129}],[<<45,116,121,112,101,32,115,112,101,99,95,102,117,110,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{},#{signature => [{attribute,{129,2},type,{spec_fun,{type,{129,21},union,[{type,{129,21},tuple,[{atom,{129,22},external},{type,{129,36},'fun',[{type,{129,36},product,[{user_type,{129,37},external_set,[]}]},{type,{129,56},boolean,[]}]}]},{type,{130,25},'fun',[{type,{130,25},product,[{user_type,{130,26},anyset,[]}]},{type,{130,39},boolean,[]}]}]},[]}}]}},{{type,type,0},[{file,[115,111,102,115,46,101,114,108]},{location,131}],[<<45,116,121,112,101,32,116,121,112,101,40,41,32,58,58,32,116,101,114,109,40,41,46>>],#{<<101,110>> => [{p,[],[<<65,32>>,{a,[{href,<<115,116,100,108,105,98,58,115,111,102,115,35,116,121,112,101>>},{rel,<<104,116,116,112,115,58,47,47,101,114,108,97,110,103,46,111,114,103,47,100,111,99,47,108,105,110,107,47,115,101,101,101,114,108>>}],[<<116,121,112,101>>]},<<46>>]}]},#{signature => [{attribute,{131,2},type,{type,{type,{131,17},term,[]},[]}}]}},{{type,tuple_of,1},[{file,[115,111,102,115,46,101,114,108]},{location,133}],[<<116,117,112,108,101,95,111,102,40,84,41>>],#{<<101,110>> => [{p,[],[<<65,32,116,117,112,108,101,32,119,104,101,114,101,32,116,104,101,32,101,108,101,109,101,110,116,115,32,97,114,101,32,111,102,32,116,121,112,101,32>>,{code,[],[<<84>>]},<<46>>]}]},#{signature => [{attribute,{133,2},type,{tuple_of,{type,{133,23},tuple,any},[{var,{133,16},'_T'}]}}]}}]}. \ No newline at end of file
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re.txt b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re.txt
index 21a3dbf487..2d8a293de2 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re.txt
@@ -1645,9 +1645,6 @@
alpha:
Letters
- ascii:
- Character codes 0-127
-
blank:
Space or tab only
@@ -1681,6 +1678,12 @@
xdigit:
Hexadecimal digits
+ There is another character class, ascii, that erroneously
+ matches Latin-1 characters instead of the 0-127 range specified by
+ POSIX. This cannot be fixed without altering the behaviour of
+ other classes, so we recommend matching the range with [\\0-\x7f]
+ instead.
+
The default "space" characters are HT (9), LF (10), VT (11), FF
(12), CR (13), and space (32). If locale-specific matching is
taking place, the list of space characters may be different; there
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_grun_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_grun_3_func.txt
new file mode 100644
index 0000000000..6f0af3fc67
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_grun_3_func.txt
@@ -0,0 +1,5 @@
+
+  grun/3
+
+ The documentation for grun/3 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_internal_run_4_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_internal_run_4_func.txt
new file mode 100644
index 0000000000..d896aabce3
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_internal_run_4_func.txt
@@ -0,0 +1,6 @@
+
+  internal_run/4
+
+ The documentation for internal_run/4 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_ucompile_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_ucompile_2_func.txt
new file mode 100644
index 0000000000..148c48a4b0
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_ucompile_2_func.txt
@@ -0,0 +1,5 @@
+
+  ucompile/2
+
+ The documentation for ucompile/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_urun_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_urun_3_func.txt
new file mode 100644
index 0000000000..ddfb951486
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_re_urun_3_func.txt
@@ -0,0 +1,5 @@
+
+  urun/3
+
+ The documentation for urun/3 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_fam2rel_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_fam2rel_1_func.txt
new file mode 100644
index 0000000000..1eafcb4078
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_fam2rel_1_func.txt
@@ -0,0 +1,5 @@
+
+  fam2rel/1
+
+ The documentation for fam2rel/1 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_rel2fam_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_rel2fam_1_func.txt
new file mode 100644
index 0000000000..d41d2c6c18
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/stdlib_sofs_rel2fam_1_func.txt
@@ -0,0 +1,5 @@
+
+  rel2fam/1
+
+ The documentation for rel2fam/1 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_!_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_!_2_func.txt
new file mode 100644
index 0000000000..222e852764
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_!_2_func.txt
@@ -0,0 +1,5 @@
+
+  '!'/2
+
+ The documentation for '!'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_*_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_*_2_func.txt
new file mode 100644
index 0000000000..ff7f8595a1
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_*_2_func.txt
@@ -0,0 +1,5 @@
+
+  '*'/2
+
+ The documentation for '*'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_++_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_++_2_func.txt
new file mode 100644
index 0000000000..5dcd568da5
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_++_2_func.txt
@@ -0,0 +1,5 @@
+
+  '++'/2
+
+ The documentation for '++'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_1_func.txt
new file mode 100644
index 0000000000..e3ecf4bf3c
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_1_func.txt
@@ -0,0 +1,5 @@
+
+  '+'/1
+
+ The documentation for '+'/1 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_2_func.txt
new file mode 100644
index 0000000000..bf738628fc
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_+_2_func.txt
@@ -0,0 +1,5 @@
+
+  '+'/2
+
+ The documentation for '+'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_--_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_--_2_func.txt
new file mode 100644
index 0000000000..797d1d5b45
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_--_2_func.txt
@@ -0,0 +1,5 @@
+
+  '--'/2
+
+ The documentation for '--'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_1_func.txt
new file mode 100644
index 0000000000..51cf374386
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_1_func.txt
@@ -0,0 +1,5 @@
+
+  '-'/1
+
+ The documentation for '-'/1 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_2_func.txt
new file mode 100644
index 0000000000..797a700c86
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_-_2_func.txt
@@ -0,0 +1,5 @@
+
+  '-'/2
+
+ The documentation for '-'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_<_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_<_2_func.txt
new file mode 100644
index 0000000000..64323d56c2
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_<_2_func.txt
@@ -0,0 +1,5 @@
+
+  '<'/2
+
+ The documentation for '<'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=<_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=<_2_func.txt
new file mode 100644
index 0000000000..fce7453bc2
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=<_2_func.txt
@@ -0,0 +1,5 @@
+
+  '=<'/2
+
+ The documentation for '=<'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_==_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_==_2_func.txt
new file mode 100644
index 0000000000..eab30981c2
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_==_2_func.txt
@@ -0,0 +1,5 @@
+
+  '=='/2
+
+ The documentation for '=='/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=_=_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=_=_2_func.txt
new file mode 100644
index 0000000000..00c8120ad8
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_=_=_2_func.txt
@@ -0,0 +1,5 @@
+
+  '=:='/2
+
+ The documentation for '=:='/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>=_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>=_2_func.txt
new file mode 100644
index 0000000000..16f4e2b4e5
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>=_2_func.txt
@@ -0,0 +1,5 @@
+
+  '>='/2
+
+ The documentation for '>='/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>_2_func.txt
new file mode 100644
index 0000000000..013f679ceb
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_>_2_func.txt
@@ -0,0 +1,5 @@
+
+  '>'/2
+
+ The documentation for '>'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang__=_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang__=_2_func.txt
new file mode 100644
index 0000000000..37d8260593
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang__=_2_func.txt
@@ -0,0 +1,5 @@
+
+  '/='/2
+
+ The documentation for '/='/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang___2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang___2_func.txt
new file mode 100644
index 0000000000..688a861491
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang___2_func.txt
@@ -0,0 +1,5 @@
+
+  '/'/2
+
+ The documentation for '/'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_0_func.txt
index 0b0446302f..150c8604b9 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_0_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_0_func.txt
@@ -2,7 +2,7 @@
-spec alias() -> Alias when Alias :: reference().
Since:
- OTP @OTP-16718@
+ OTP 24.0
Create an alias which can be used when sending messages to the
process that created the alias. When the alias has been
@@ -19,3 +19,36 @@
The alias will be automatically deactivated when a reply
message sent via the alias is received. The alias can also
still be deactivated via a call to unalias/1.
+
+ Example:
+
+ server() ->
+ receive
+ {request, AliasReqId, Request} ->
+ Result = perform_request(Request),
+ AliasReqId ! {reply, AliasReqId, Result}
+ end,
+ server().
+
+ client(ServerPid, Request) ->
+ AliasReqId = alias([reply]),
+ ServerPid ! {request, AliasReqId, Request},
+ %% Alias will be automatically deactivated if we receive a reply
+ %% since we used the 'reply' option...
+ receive
+ {reply, AliasReqId, Result} -> Result
+ after 5000 ->
+ unalias(AliasReqId),
+ %% Flush message queue in case the reply arrived
+ %% just before the alias was deactivated...
+ receive {reply, AliasReqId, Result} -> Result
+ after 0 -> exit(timeout)
+ end
+ end.
+
+
+ Note that both the server and the client in this example must be
+ executing on at least OTP 24 systems in order for this to work.
+
+ For more information on process aliases see the Process Aliases
+ section of the Erlang Reference Manual.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_1_func.txt
index 291db25ac3..03aa38c1cd 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alias_1_func.txt
@@ -5,7 +5,7 @@
 Opts :: [explicit_unalias | reply].
Since:
- OTP @OTP-16718@
+ OTP 24.0
Create an alias which can be used when sending messages to the
process that created the alias. When the alias has been
@@ -22,3 +22,36 @@
The alias will be automatically deactivated when a reply
message sent via the alias is received. The alias can also
still be deactivated via a call to unalias/1.
+
+ Example:
+
+ server() ->
+ receive
+ {request, AliasReqId, Request} ->
+ Result = perform_request(Request),
+ AliasReqId ! {reply, AliasReqId, Result}
+ end,
+ server().
+
+ client(ServerPid, Request) ->
+ AliasReqId = alias([reply]),
+ ServerPid ! {request, AliasReqId, Request},
+ %% Alias will be automatically deactivated if we receive a reply
+ %% since we used the 'reply' option...
+ receive
+ {reply, AliasReqId, Result} -> Result
+ after 5000 ->
+ unalias(AliasReqId),
+ %% Flush message queue in case the reply arrived
+ %% just before the alias was deactivated...
+ receive {reply, AliasReqId, Result} -> Result
+ after 0 -> exit(timeout)
+ end
+ end.
+
+
+ Note that both the server and the client in this example must be
+ executing on at least OTP 24 systems in order for this to work.
+
+ For more information on process aliases see the Process Aliases
+ section of the Erlang Reference Manual.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_info_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_info_1_func.txt
new file mode 100644
index 0000000000..110bd44e53
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_info_1_func.txt
@@ -0,0 +1,6 @@
+
+  alloc_info/1
+
+ The documentation for alloc_info/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_sizes_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_sizes_1_func.txt
new file mode 100644
index 0000000000..e2abffaa6e
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_alloc_sizes_1_func.txt
@@ -0,0 +1,6 @@
+
+  alloc_sizes/1
+
+ The documentation for alloc_sizes/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_and_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_and_2_func.txt
new file mode 100644
index 0000000000..820cf83475
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_and_2_func.txt
@@ -0,0 +1,5 @@
+
+  'and'/2
+
+ The documentation for 'and'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_append_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_append_2_func.txt
new file mode 100644
index 0000000000..a65746afaf
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_append_2_func.txt
@@ -0,0 +1,5 @@
+
+  append/2
+
+ The documentation for append/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_band_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_band_2_func.txt
new file mode 100644
index 0000000000..f3781ac0e0
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_band_2_func.txt
@@ -0,0 +1,5 @@
+
+  'band'/2
+
+ The documentation for 'band'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_1_func.txt
index 53488792d3..413260f6a8 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_1_func.txt
@@ -11,7 +11,10 @@
hello
Warning:
- When decoding binaries from untrusted sources, consider using 
- binary_to_term/2 to prevent Denial of Service attacks.
+ When decoding binaries from untrusted sources, the untrusted
+ source may submit data in a way to create resources, such as
+ atoms and remote references, that cannot be garbage collected
+ and lead to Denial of Service attack. In such cases, consider
+ using binary_to_term/2 with the safe option.
See also term_to_binary/1 and binary_to_term/2.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_2_func.txt
index 026b8d18cb..60e6109348 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_binary_to_term_2_func.txt
@@ -16,7 +16,7 @@
source.
When enabled, it prevents decoding data that can be used to
- attack the Erlang system. In the event of receiving unsafe
+ attack the Erlang runtime. In the event of receiving unsafe
data, decoding fails with a badarg error.
This prevents creation of new atoms directly, creation of new
@@ -33,6 +33,14 @@
> binary_to_term(<<131,100,0,5,"hello">>, [safe]).
hello
+ Warning:
+ The safe option ensures the data is safely processed by
+ the Erlang runtime but it does not guarantee the data is
+ safe to your application. You must always validate data
+ from untrusted sources. If the binary is stored or
+ transits through untrusted sources, you should also
+ consider cryptographically signing it.
+
used:
Changes the return value to {Term, Used} where Used is the
number of bytes actually read from Binary.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bnot_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bnot_1_func.txt
new file mode 100644
index 0000000000..7fb3acadcc
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bnot_1_func.txt
@@ -0,0 +1,5 @@
+
+  'bnot'/1
+
+ The documentation for 'bnot'/1 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bor_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bor_2_func.txt
new file mode 100644
index 0000000000..698de2bfe3
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bor_2_func.txt
@@ -0,0 +1,5 @@
+
+  'bor'/2
+
+ The documentation for 'bor'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsl_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsl_2_func.txt
new file mode 100644
index 0000000000..65b26f4c03
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsl_2_func.txt
@@ -0,0 +1,5 @@
+
+  'bsl'/2
+
+ The documentation for 'bsl'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsr_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsr_2_func.txt
new file mode 100644
index 0000000000..6b6849672f
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bsr_2_func.txt
@@ -0,0 +1,5 @@
+
+  'bsr'/2
+
+ The documentation for 'bsr'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bxor_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bxor_2_func.txt
new file mode 100644
index 0000000000..76aa3fbe7e
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_bxor_2_func.txt
@@ -0,0 +1,5 @@
+
+  'bxor'/2
+
+ The documentation for 'bxor'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_call_on_load_function_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_call_on_load_function_1_func.txt
new file mode 100644
index 0000000000..abf49640cc
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_call_on_load_function_1_func.txt
@@ -0,0 +1,6 @@
+
+  call_on_load_function/1
+
+ The documentation for call_on_load_function/1 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_delay_trap_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_delay_trap_2_func.txt
new file mode 100644
index 0000000000..6e1f78dcaa
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_delay_trap_2_func.txt
@@ -0,0 +1,6 @@
+
+  delay_trap/2
+
+ The documentation for delay_trap/2 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_nl_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_nl_0_func.txt
new file mode 100644
index 0000000000..4378ba670f
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_nl_0_func.txt
@@ -0,0 +1,6 @@
+
+  display_nl/0
+
+ The documentation for display_nl/0 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_string_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_string_1_func.txt
new file mode 100644
index 0000000000..2d5267009a
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_display_string_1_func.txt
@@ -0,0 +1,6 @@
+
+  display_string/1
+
+ The documentation for display_string/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dist_get_stat_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dist_get_stat_1_func.txt
new file mode 100644
index 0000000000..141fe118ae
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dist_get_stat_1_func.txt
@@ -0,0 +1,6 @@
+
+  dist_get_stat/1
+
+ The documentation for dist_get_stat/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_div_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_div_2_func.txt
new file mode 100644
index 0000000000..1b349e7ecf
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_div_2_func.txt
@@ -0,0 +1,5 @@
+
+  'div'/2
+
+ The documentation for 'div'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dmonitor_node_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dmonitor_node_3_func.txt
new file mode 100644
index 0000000000..a8ae905063
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dmonitor_node_3_func.txt
@@ -0,0 +1,6 @@
+
+  dmonitor_node/3
+
+ The documentation for dmonitor_node/3 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_append_vm_tag_data_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_append_vm_tag_data_1_func.txt
new file mode 100644
index 0000000000..456b93faba
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_append_vm_tag_data_1_func.txt
@@ -0,0 +1,6 @@
+
+  dt_append_vm_tag_data/1
+
+ The documentation for dt_append_vm_tag_data/1 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_0_func.txt
new file mode 100644
index 0000000000..0b06a2134f
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_0_func.txt
@@ -0,0 +1,6 @@
+
+  dt_get_tag/0
+
+ The documentation for dt_get_tag/0 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_data_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_data_0_func.txt
new file mode 100644
index 0000000000..b7f39991ef
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_get_tag_data_0_func.txt
@@ -0,0 +1,6 @@
+
+  dt_get_tag_data/0
+
+ The documentation for dt_get_tag_data/0 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_prepend_vm_tag_data_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_prepend_vm_tag_data_1_func.txt
new file mode 100644
index 0000000000..59c1834649
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_prepend_vm_tag_data_1_func.txt
@@ -0,0 +1,6 @@
+
+  dt_prepend_vm_tag_data/1
+
+ The documentation for dt_prepend_vm_tag_data/1 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_put_tag_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_put_tag_1_func.txt
new file mode 100644
index 0000000000..83906151a7
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_put_tag_1_func.txt
@@ -0,0 +1,6 @@
+
+  dt_put_tag/1
+
+ The documentation for dt_put_tag/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_restore_tag_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_restore_tag_1_func.txt
new file mode 100644
index 0000000000..bf52d2f5d2
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_restore_tag_1_func.txt
@@ -0,0 +1,6 @@
+
+  dt_restore_tag/1
+
+ The documentation for dt_restore_tag/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_spread_tag_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_spread_tag_1_func.txt
new file mode 100644
index 0000000000..6a8496bc58
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_dt_spread_tag_1_func.txt
@@ -0,0 +1,6 @@
+
+  dt_spread_tag/1
+
+ The documentation for dt_spread_tag/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_1_func.txt
index 6324d2884e..18c0010a75 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_1_func.txt
@@ -1,15 +1,14 @@
-spec error(Reason) -> no_return() when Reason :: term().
- Raises an exception of class error with the reason Reason,
- where Reason is any term. The error reason is {Reason, Where},
- where Where is a list of the functions most recently called (the
- current function first). As evaluating this function causes an
- exception to be thrown, it has no return value. The intent of the
- exception class error is to signal that an unexpected error has
- happened (for example, a function is called with a parameter that
- has an incorrect type). See the guide about errors and error
- handling for additional information. Example:
+ Raises an exception of class error with the reason Reason. As
+ evaluating this function causes an exception to be thrown, it has
+ no return value.
+
+ The intent of the exception class error is to signal that an
+ unexpected error has happened (for example, a function is called
+ with a parameter that has an incorrect type). See the guide about
+ errors and error handling for additional information. Example:
> catch error(foobar).
{'EXIT',{foobar,[{shell,apply_fun,3,
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_2_func.txt
index 0b91e45030..9a87a345bb 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_2_func.txt
@@ -1,19 +1,19 @@
-spec error(Reason, Args) -> no_return()
-  when Reason :: term(), Args :: [term()].
+  when Reason :: term(), Args :: [term()] | none.
- Raises an exception of class error with the reason Reason,
- where Reason is any term. The error reason is {Reason, Where},
- where Where is a list of the functions most recently called (the
- current function first). Args is expected to be the list of
- arguments for the current function; it is used to provide the
- arguments for the current function in the term Where. As
- evaluating this function causes an exception to be raised, it has
- no return value. The intent of the exception class error is to
- signal that an unexpected error has happened (for example, a
- function is called with a parameter that has an incorrect type).
- See the guide about errors and error handling for additional
- information. Example:
+ Raises an exception of class error with the reason Reason. 
+ Args is expected to be the list of arguments for the current
+ function or the atom none. If it is a list, it is used to
+ provide the arguments for the current function in the stack
+ back-trace. If it is none, the arity of the calling function is
+ used in the stacktrace. As evaluating this function causes an
+ exception to be raised, it has no return value.
+
+ The intent of the exception class error is to signal that an
+ unexpected error has happened (for example, a function is called
+ with a parameter that has an incorrect type). See the guide about
+ errors and error handling for additional information. Example:
test.erl:
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_3_func.txt
index 0af05f72c5..73f183013f 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_3_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_error_3_func.txt
@@ -2,7 +2,7 @@
-spec error(Reason, Args, Options) -> no_return()
 when
 Reason :: term(),
-  Args :: [term()],
+  Args :: [term()] | none,
 Options :: [Option],
 Option :: {error_info, ErrorInfoMap},
 ErrorInfoMap ::
@@ -11,18 +11,27 @@
 function => atom()}.
Since:
- 24.0
+ OTP 24.0
- Raises an exception of class error with the reason Reason,
- where Reason is any term. Args is expected to be the list of
- arguments for the current function; it is used to provide the
- arguments for the current function in the stack back-trace. If the 
- {error_info, ErrorInfoMap} option is given, it will be injected
- into the stacktrace.
+ Raises an exception of class error with the reason Reason. 
+ Args is expected to be the list of arguments for the current
+ function or the atom none. If it is a list, it is used to
+ provide the arguments for the current function in the stack
+ back-trace. If it is none, the arity of the calling function is
+ used in the stacktrace. As evaluating this function causes an
+ exception to be raised, it has no return value.
- As evaluating this function causes an exception to be raised, it
- has no return value. The intent of the exception class error is
- to signal that an unexpected error has happened (for example, a
- function is called with a parameter that has an incorrect type).
- See the guide about errors and error handling for additional
- information.
+ If the error_info option is given, the ErrorInfoMap will be
+ inserted into the stacktrace. The information given in the 
+ ErrorInfoMap is to be used by error formatters such as erl_error
+ to provide more context around an error.
+
+ The default module of the ErrorInfoMap is the module that the
+ call to error/3 is made. The default function is format_error.
+ See format_error/2 for more details on how this
+ Module:Function/2 is to be used
+
+ The intent of the exception class error is to signal that an
+ unexpected error has happened (for example, a function is called
+ with a parameter that has an incorrect type). See the guide about
+ errors and error handling for additional information.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_1_func.txt
index f97e38039c..481fd9f793 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_1_func.txt
@@ -1,13 +1,17 @@
-spec exit(Reason) -> no_return() when Reason :: term().
- Raises an exception of class exit with exit reason Reason,
- where Reason is any term. As evaluating this function causes an
- exception to be raised, it has no return value. This function
- should be used when the intent is to stop the current process.
- This function differ from erlang:error/1 and erlang:error/2 by
- causing an exception of a different class and by having a reason
- that does not include the list of functions from the call stack.
+ Raises an exception of class exit with exit reason Reason. As
+ evaluating this function causes an exception to be raised, it has
+ no return value.
+
+ The intent of the exception class exit is that the current
+ process should be stopped (for example when a message telling a
+ process to stop is received).
+
+ This function differ from error/1,2,3 by causing an exception of
+ a different class and by having a reason that does not include the
+ list of functions from the call stack.
See the guide about errors and error handling for additional
information.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_signal_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_signal_2_func.txt
new file mode 100644
index 0000000000..e952dad6a8
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_exit_signal_2_func.txt
@@ -0,0 +1,6 @@
+
+  exit_signal/2
+
+ The documentation for exit_signal/2 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_after_on_load_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_after_on_load_2_func.txt
new file mode 100644
index 0000000000..63b677da23
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_after_on_load_2_func.txt
@@ -0,0 +1,6 @@
+
+  finish_after_on_load/2
+
+ The documentation for finish_after_on_load/2 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_loading_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_loading_1_func.txt
new file mode 100644
index 0000000000..c22cf49f7d
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_finish_loading_1_func.txt
@@ -0,0 +1,6 @@
+
+  finish_loading/1
+
+ The documentation for finish_loading/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_format_cpu_topology_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_format_cpu_topology_1_func.txt
new file mode 100644
index 0000000000..7ef9f0481c
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_format_cpu_topology_1_func.txt
@@ -0,0 +1,6 @@
+
+  format_cpu_topology/1
+
+ The documentation for format_cpu_topology/1 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_fun_info_mfa_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_fun_info_mfa_1_func.txt
new file mode 100644
index 0000000000..26bd5c979a
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_fun_info_mfa_1_func.txt
@@ -0,0 +1,6 @@
+
+  fun_info_mfa/1
+
+ The documentation for fun_info_mfa/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_function_exported_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_function_exported_3_func.txt
index 4ea9703aa4..0b7f45f6fb 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_function_exported_3_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_function_exported_3_func.txt
@@ -5,11 +5,7 @@
 Function :: atom(),
 Arity :: arity().
- Returns true if the module Module is loaded and contains an
+ Returns true if the module Module is current and contains an
exported function Function/Arity, or if there is a BIF (a
built-in function implemented in C) with the specified name,
otherwise returns false.
-
- Note:
- This function used to return false for BIFs before
- Erlang/OTP 18.0.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_garbage_collect_message_area_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_garbage_collect_message_area_0_func.txt
new file mode 100644
index 0000000000..4ffd915f60
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_garbage_collect_message_area_0_func.txt
@@ -0,0 +1,6 @@
+
+  garbage_collect_message_area/0
+
+ The documentation for garbage_collect_message_area/0 is hidden.
+ This probably means that it is internal and not to be used by
+ other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_gather_gc_info_result_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_gather_gc_info_result_1_func.txt
new file mode 100644
index 0000000000..594193be73
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_gather_gc_info_result_1_func.txt
@@ -0,0 +1,6 @@
+
+  gather_gc_info_result/1
+
+ The documentation for gather_gc_info_result/1 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_cookie_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_cookie_1_func.txt
new file mode 100644
index 0000000000..3e996d198d
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_cookie_1_func.txt
@@ -0,0 +1,9 @@
+
+ -spec erlang:get_cookie(Node) -> Cookie | nocookie
+  when Node :: node(), Cookie :: atom().
+
+Since:
+ OTP @OTP-17538@
+
+ Returns the magic cookie for node Node if the local node is
+ alive, otherwise the atom nocookie.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_1_func.txt
new file mode 100644
index 0000000000..15653bba3e
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_1_func.txt
@@ -0,0 +1,6 @@
+
+  get_module_info/1
+
+ The documentation for get_module_info/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_2_func.txt
new file mode 100644
index 0000000000..831a63cadb
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_get_module_info_2_func.txt
@@ -0,0 +1,6 @@
+
+  get_module_info/2
+
+ The documentation for get_module_info/2 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_group_leader_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_group_leader_2_func.txt
index 592d6bd6e5..ef2ca2637c 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_group_leader_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_group_leader_2_func.txt
@@ -10,5 +10,9 @@
supervision tree, because OTP assumes the group leader of their
processes is their application master.
+ Setting the group leader follows the signal ordering guarentees
+ described in the Processes Chapter in the Erlang Reference
+ Manual.
+
See also group_leader/0 and OTP design principles related to
starting and stopping applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_has_prepared_code_on_load_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_has_prepared_code_on_load_1_func.txt
new file mode 100644
index 0000000000..c012053e6d
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_has_prepared_code_on_load_1_func.txt
@@ -0,0 +1,6 @@
+
+  has_prepared_code_on_load/1
+
+ The documentation for has_prepared_code_on_load/1 is hidden.
+ This probably means that it is internal and not to be used by
+ other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_hibernate_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_hibernate_3_func.txt
index bc61de77bd..92b9b0302b 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_hibernate_3_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_hibernate_3_func.txt
@@ -13,7 +13,8 @@
resumes in Module:Function with the arguments specified by Args
with the call stack emptied, meaning that the process terminates
when that function returns. Thus erlang:hibernate/3 never
- returns to its caller.
+ returns to its caller. The resume function Module:Function/Arity
+ must be exported (Arity =:= length(Args)).
If the process has any message in its message queue, the process
is awakened immediately in the same way as described earlier.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_iolist_to_iovec_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_iolist_to_iovec_1_func.txt
index e362ef610a..83cb5ad81c 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_iolist_to_iovec_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_iolist_to_iovec_1_func.txt
@@ -8,4 +8,27 @@
OTP 20.1
Returns an iovec that is made from the integers and binaries in 
- IoListOrBinary.
+ IoListOrBinary. This function is useful when you want to flatten
+ an iolist but you do not need a single binary. This can be useful
+ for passing the data to nif functions such as enif_inspect_iovec
+ or do more efficient message passing. The advantage of using this
+ function over iolist_to_binary/1 is that it does not have to
+ copy off-heap binaries. Example:
+
+ > Bin1 = <<1,2,3>>.
+ <<1,2,3>>
+ > Bin2 = <<4,5>>.
+ <<4,5>>
+ > Bin3 = <<6>>.
+ <<6>>
+ %% If you pass small binaries and integers it works as iolist_to_binary
+ > erlang:iolist_to_iovec([Bin1,1,[2,3,Bin2],4|Bin3]).
+ [<<1,2,3,1,2,3,4,5,4,6>>]
+ %% If you pass larger binaries, they are split and returned in a form
+ %% optimized for calling the C function writev.
+ > erlang:iolist_to_iovec([<<1>>,<<2:8096>>,<<3:8096>>]).
+ [<<1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,...>>,
+ <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ ...>>,
+ <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...>>]
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_is_process_alive_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_is_process_alive_1_func.txt
index 919d6b4f68..d3490cd2a2 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_is_process_alive_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_is_process_alive_1_func.txt
@@ -19,6 +19,5 @@
is_process_alive(P2Pid),
% P2 is not alive (the call above always return false)
- See the documentation about communication in Erlang and
- erlang:exit/2 for more information about signals and exit
- singnals.
+ See the documentation about signals and erlang:exit/2 for more
+ information about signals and exit singnals.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_link_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_link_1_func.txt
index 6286448237..407d8c7fa7 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_link_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_link_1_func.txt
@@ -1,25 +1,51 @@
-spec link(PidOrPort) -> true when PidOrPort :: pid() | port().
- Creates a link between the calling process and another process (or
- port) PidOrPort. If the link already exists or a process
- attempts to create a link to itself, nothing is done. Returns 
- true if the link is set up.
+ Sets up and activates a link between the calling process and
+ another process or a port identified by PidOrPort. We will from
+ here on call the identified process or port linkee. If the linkee
+ is a port, it must reside on the same node as the caller.
- If PidOrPort does not exist and checking it is cheap, a noproc
- error is raised. Currently, checking is cheap if the PidOrPort
- is local and the caller does not trap exits (see process_flag/2 
- ).
+ If one of the participants of a link terminates, it will send an
+ exit signal to the other participant. The exit signal will
+ contain the exit reason of the terminated participant. Other
+ cases when exit signals are triggered due to a link are when no
+ linkee exist (noproc exit reason) and when the connection
+ between linked processes on different nodes is lost or cannot be
+ established (noconnection exit reason).
- Apart from any exit signals from the linked process itself, two
- special exit signals may be sent to the calling process:
+ An existing link can be removed by calling unlink/1. For more
+ information on links and exit signals due to links, see the
+ Processes chapter in the Erlang Reference Manual:
- • noproc is sent immediately if PidOrPort does not exist at
- the time of linking (if the caller is trapping exits or 
- PidOrPort is remote).
+ • Links
- • noconnection if PidOrPort is remote and a connection
- between the nodes could not be established or was severed.
+ • Sending Exit Signals
- See Processes ➜ Links in the Erlang Reference Manual for more
- details.
+ • Receiving Exit Signals
+
+ For historical reasons, link/1 has a strange semi-synchronous
+ behavior when it is "cheap" to check if the linkee exists or not,
+ and the caller does not trap exits. If the above is true and the
+ linkee does not exist, link/1 will raise a noproc error
+ exception. The expected behavior would instead have been that 
+ link/1 returned true, and the caller later was sent an exit
+ signal with noproc exit reason, but this is unfortunately not
+ the case. The noproc exception is not to be confused with an
+ exit signal with exit reason noproc. Currently it is "cheap" to
+ check if the linkee exists when it is supposed to reside on the
+ same node as the calling process.
+
+ The link setup and activation is performed asynchronously. If the
+ link already exists, or if the caller attempts to create a link to
+ itself, nothing is done. A detailed description of the link
+ protocol can be found in the Distribution Protocol chapter of
+ the ERTS User's Guide.
+
+ Failure:
+
+ • badarg if PidOrPort does not identify a process or a node
+ local port.
+
+ • noproc linkee does not exist and it is "cheap" to check if
+ it exists as described above.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_list_to_existing_atom_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_list_to_existing_atom_1_func.txt
index d89f63af15..315d160be9 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_list_to_existing_atom_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_list_to_existing_atom_1_func.txt
@@ -2,7 +2,9 @@
-spec list_to_existing_atom(String) -> atom() when String :: string().
Returns the atom whose text representation is String, but only
- if there already exists such atom.
+ if there already exists such atom. An atom exists if it has been
+ created by the run-time system by either loading code or creating
+ a term in which the atom is part.
Failure: badarg if there does not already exist an atom whose
text representation is String.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_load_module_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_load_module_2_func.txt
index 6b3d2b5a1f..b9368aba59 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_load_module_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_load_module_2_func.txt
@@ -23,6 +23,12 @@
Binary contains a module that cannot be loaded because old
code for this module already exists.
+ on_load:
+ The code in Binary contains an on_load declaration that
+ must be executed before Binary can become the current code.
+ Any previous current code for Module will remain until the 
+ on_load call has finished.
+
Warning:
This BIF is intended for the code server (see code(3)) and
is not to be used elsewhere.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_fun_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_fun_3_func.txt
new file mode 100644
index 0000000000..b88f7a06ac
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_fun_3_func.txt
@@ -0,0 +1,5 @@
+
+  make_fun/3
+
+ The documentation for make_fun/3 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_ref_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_ref_0_func.txt
index b282e3b375..64f347e9c3 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_ref_0_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_make_ref_0_func.txt
@@ -5,7 +5,7 @@
connected nodes.
Warning:
- Known issue: When a node is restarted multiple times with the
+ Before OTP-23 when a node is restarted multiple times with the
same node name, references created on a newer node can be
mistaken for a reference created on an older node with the
same node name.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_memory_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_memory_0_func.txt
index e440dfd550..d87777c8de 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_memory_0_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_memory_0_func.txt
@@ -59,13 +59,6 @@
This memory is part of the memory presented as system
memory.
- low:
- Only on 64-bit halfword emulator. The total amount of memory
- allocated in low memory areas that are restricted to < 4 GB,
- although the system can have more memory.
-
- Can be removed in a future release of the halfword emulator.
-
maximum:
The maximum total amount of memory allocated since the
emulator was started. This tuple is only present when the
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_message_queue_data_0_type.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_message_queue_data_0_type.txt
index c4789ef677..5799c41b4d 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_message_queue_data_0_type.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_message_queue_data_0_type.txt
@@ -5,5 +5,5 @@
-type message_queue_data() :: off_heap | on_heap.
- Process message queue data configuration. For more info see 
- process_flag(message_queue_data, MQD)
+ Process message queue data configuration. For more information,
+ see process_flag(message_queue_data, MQD)
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_2_func.txt
index c88c266702..f569717945 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_2_func.txt
@@ -54,8 +54,8 @@
Object:
The monitored entity, which triggered the event. When
- monitoring a local process or port, Object will be equal to
- the pid() or port() that was being monitored. When
+ monitoring a process or a local port, Object will be equal
+ to the pid() or port() that was being monitored. When
monitoring process or port by name, Object will have format 
{RegisteredName, Node} where RegisteredName is the name
which has been used with monitor/2 call and Node is local
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_3_func.txt
index 35cab15b0d..d2568b9d01 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_3_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_3_func.txt
@@ -10,7 +10,7 @@
 when MonitorRef :: reference().
Since:
- OTP @OTP-16718@
+ OTP 24.0
Types:
-type monitor_port_identifier() :: port() | registered_name().
@@ -59,8 +59,86 @@
removed using the unalias/1 BIF, the monitor will still
be left active.
+ Example:
+
+ server() ->
+ receive
+ {request, AliasReqId, Request} ->
+ Result = perform_request(Request),
+ AliasReqId ! {reply, AliasReqId, Result}
+ end,
+ server().
+
+ client(ServerPid, Request) ->
+ AliasMonReqId = monitor(process, ServerPid, [{alias, reply_demonitor}]),
+ ServerPid ! {request, AliasMonReqId, Request},
+ %% Alias as well as monitor will be automatically deactivated if we
+ %% receive a reply or a 'DOWN' message since we used 'reply_demonitor'
+ %% as unalias option...
+ receive
+ {reply, AliasMonReqId, Result} ->
+ Result;
+ {'DOWN', AliasMonReqId, process, ServerPid, ExitReason} ->
+ error(ExitReason)
+ end.
+
+
+ Note that both the server and the client in this example must
+ be executing on at least OTP 24 systems in order for this to
+ work.
+
+ For more information on process aliases see the Process
+ Aliases section of the Erlang Reference Manual.
+
{tag, UserDefinedTag}:
Replace the default Tag with UserDefinedTag in the
monitor message delivered when the monitor is triggered. For
example, when monitoring a process, the 'DOWN' tag in the
down message will be replaced by UserDefinedTag.
+
+ An example of how the {tag, UserDefinedTag} option can be
+ used in order to enable the new selective receive
+ optimization, introduced in OTP 24, when making multiple
+ requests to different servers:
+
+ server() ->
+ receive
+ {request, From, ReqId, Request} ->
+ Result = perform_request(Request),
+ From ! {reply, self(), ReqId, Result}
+ end,
+ server().
+
+ client(ServerPids, Request) when is_list(ServerPids) ->
+ ReqId = make_ref(),
+ lists:foreach(fun (ServerPid) ->
+ _ = monitor(process, ServerPid,
+ [{tag, {'DOWN', ReqId}}]),
+ ServerPid ! {request, self(), ReqId, Request}
+ end,
+ ServerPids),
+ receive_replies(ReqId, length(ServerPids), []).
+
+ receive_replies(_ReqId, 0, Acc) ->
+ Acc;
+ receive_replies(ReqId, N, Acc) ->
+ %% The compiler will detect that we match on the 'ReqId'
+ %% reference in all clauses, and will enable the selective
+ %% receive optimization which makes the receive able to
+ %% skip past all messages present in the message queue at
+ %% the time when the 'ReqId' reference was created...
+ Res = receive
+ {reply, ServerPid, ReqId, Result} ->
+ %% Here we typically would have deactivated the
+ %% monitor by a call to demonitor(Mon, [flush]) but
+ %% we ignore this in this example for simplicity...
+ {ok, ServerPid, Result};
+ {{'DOWN', ReqId}, _Mon, process, ServerPid, ExitReason} ->
+ {error, ServerPid, ExitReason}
+ end,
+ receive_replies(ReqId, N-1, [Res | Acc]).
+
+
+ In order for this example to work as intended, the client must
+ be executing on at least an OTP 24 system, but the servers may
+ execute on older systems.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_node_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_node_2_func.txt
index c137ca38fd..89561c41ad 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_node_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_monitor_node_2_func.txt
@@ -17,6 +17,12 @@
to Node, an attempt is made to create one. If this fails, a 
nodedown message is delivered.
+ The delivery of the nodedown signal is not ordered with respect
+ to other link or monitor signals from the node that goes down. If
+ you need a guarantee that all signals from the remote node has
+ been delivered before the nodedown signal is sent, you should
+ use net_kernel:monitor_nodes/1.
+
Nodes connected through hidden connections can be monitored as any
other nodes.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_not_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_not_1_func.txt
new file mode 100644
index 0000000000..bc2eb81305
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_not_1_func.txt
@@ -0,0 +1,5 @@
+
+  'not'/1
+
+ The documentation for 'not'/1 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_or_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_or_2_func.txt
new file mode 100644
index 0000000000..5d8fcc2497
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_or_2_func.txt
@@ -0,0 +1,5 @@
+
+  'or'/2
+
+ The documentation for 'or'/2 is hidden. This probably means that
+ it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_call_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_call_2_func.txt
new file mode 100644
index 0000000000..bb00bda40f
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_call_2_func.txt
@@ -0,0 +1,5 @@
+
+  port_call/2
+
+ The documentation for port_call/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_get_data_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_get_data_1_func.txt
new file mode 100644
index 0000000000..090db5838b
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_get_data_1_func.txt
@@ -0,0 +1,6 @@
+
+  port_get_data/1
+
+ The documentation for port_get_data/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_set_data_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_set_data_2_func.txt
new file mode 100644
index 0000000000..d27a36b7e8
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_port_set_data_2_func.txt
@@ -0,0 +1,6 @@
+
+  port_set_data/2
+
+ The documentation for port_set_data/2 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_posixtime_to_universaltime_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_posixtime_to_universaltime_1_func.txt
new file mode 100644
index 0000000000..6f39b81c43
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_posixtime_to_universaltime_1_func.txt
@@ -0,0 +1,6 @@
+
+  posixtime_to_universaltime/1
+
+ The documentation for posixtime_to_universaltime/1 is hidden.
+ This probably means that it is internal and not to be used by
+ other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_pre_loaded_0_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_pre_loaded_0_func.txt
index 795a78ef0e..efaf2aaba9 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_pre_loaded_0_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_pre_loaded_0_func.txt
@@ -1,7 +1,7 @@
-spec pre_loaded() -> [module()].
- Returns a list of Erlang modules that are preloaded in the system.
- As all loading of code is done through the file system, the file
- system must have been loaded previously. Hence, at least the
- module init must be preloaded.
+ Returns a list of Erlang modules that are preloaded in the
+ run-time system. Pre-loaded modules are Erlang modules that are
+ needed to bootstrap the system to load the first Erlang modules
+ from either disk or by using erl_boot_server.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_prepare_loading_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_prepare_loading_2_func.txt
new file mode 100644
index 0000000000..4b551a5b91
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_prepare_loading_2_func.txt
@@ -0,0 +1,6 @@
+
+  prepare_loading/2
+
+ The documentation for prepare_loading/2 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_flag_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_flag_2_func.txt
index dac53ad065..8c7b6640dd 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_flag_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_flag_2_func.txt
@@ -2,6 +2,14 @@
-spec process_flag(save_calls, N) -> OldN
 when N :: 0..10000, OldN :: 0..10000.
+ -spec process_flag(fullsweep_after, FullsweepAfter) -> OldFullsweepAfter
+  when
+  FullsweepAfter :: non_neg_integer(),
+  OldFullsweepAfter :: non_neg_integer().
+
+Since:
+ OTP 24.0
+
-spec process_flag(min_bin_vheap_size, MinBinVHeapSize) ->
 OldMinBinVHeapSize
 when
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_info_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_info_2_func.txt
index 8a5af38f1c..2684ab78e8 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_info_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_process_info_2_func.txt
@@ -117,6 +117,10 @@
Items in the same order as the Items were included in ItemList.
Valid Items can be included multiple times in ItemList.
+ Getting process informations follows the signal ordering
+ guarantees described in the Processes Chapter in the Erlang
+ Reference Manual.
+
Note:
If registered_name is part of ItemList and the process has
no name registered, a {registered_name, []}, InfoTuple
@@ -138,8 +142,8 @@
implementation BinInfo is a list of tuples. The tuples
contain; BinaryId, BinarySize, BinaryRefcCount.
- The message queue is on the heap depending on the process flag 
- message_queue_data.
+ Depending on the value of the message_queue_data process
+ flag the message queue may be stored on the heap.
{catchlevel, CatchLevel}:
CatchLevel is the number of currently active catches in this
@@ -251,10 +255,10 @@
the local node name.
{message_queue_data, MQD}:
- Returns the current state of process flag message_queue_data. 
- MQD is either off_heap or on_heap. For more information,
- see the documentation of process_flag(message_queue_data,
- MQD).
+ MQD is the current value of the message_queue_data process
+ flag, which can be either off_heap or on_heap. For more
+ information, see the documentation of 
+ process_flag(message_queue_data, MQD).
{priority, Level}:
Level is the current priority level for the process. For more
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_raise_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_raise_3_func.txt
index 407a06aab4..e661585ba6 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_raise_3_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_raise_3_func.txt
@@ -3,14 +3,13 @@
 when
 Class :: error | exit | throw,
 Reason :: term(),
-  Stacktrace :: raise_stacktrace().
+  Stacktrace ::
+  raise_stacktrace() | stacktrace().
Types:
-type raise_stacktrace() ::
[{module(), atom(), arity() | [term()]} |
- {function(), [term()]}] |
- [{module(), atom(), arity() | [term()], [{atom(), term()}]} |
- {function(), [term()], [{atom(), term()}]}].
+ {function(), arity() | [term()]}].
Raises an exception of the specified class, reason, and call stack
backtrace (stacktrace).
@@ -31,12 +30,12 @@
end
That is, a list of four-tuples {Module, Function, Arity | Args,
- Location}, where Module and Function are atoms, and the third
- element is an integer arity or an argument list. The stacktrace
- can also contain {Fun, Args, Location} tuples, where Fun is a
- local fun and Args is an argument list.
+ ExtraInfo}, where Module and Function are atoms, and the
+ third element is an integer arity or an argument list. The
+ stacktrace can also contain {Fun, Args, ExtraInfo} tuples, where 
+ Fun is a local fun and Args is an argument list.
- Element Location at the end is optional. Omitting it is
+ Element ExtraInfo at the end is optional. Omitting it is
equivalent to specifying an empty list.
The stacktrace is used as the exception stacktrace for the calling
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_register_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_register_2_func.txt
index aa1ea7ef8d..b4b5c8a543 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_register_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_register_2_func.txt
@@ -2,14 +2,19 @@
-spec register(RegName, PidOrPort) -> true
 when RegName :: atom(), PidOrPort :: port() | pid().
- Associates the name RegName with a process identifier (pid) or a
- port identifier. RegName, which must be an atom, can be used
- instead of the pid or port identifier in send operator (RegName !
- Message). Example:
+ Registers the name RegName with a process identifier (pid) or a
+ port identifier in the name registry. RegName, which must be
+ an atom, can be used instead of the pid or port identifier in send
+ operator (RegName ! Message) and most other BIFs that take a pid
+ or port identifies as an argument. Example:
> register(db, Pid).
true
+ The registered name is considered a Directly Visible Erlang
+ Resource and is automatically unregistered when the process
+ terminates.
+
Failures:
badarg:
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_rem_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_rem_2_func.txt
new file mode 100644
index 0000000000..d1f2d8eb5e
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_rem_2_func.txt
@@ -0,0 +1,5 @@
+
+  'rem'/2
+
+ The documentation for 'rem'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_send_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_send_2_func.txt
index 67721a962c..08871de4ea 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_send_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_send_2_func.txt
@@ -12,9 +12,9 @@
Sends a message and returns Msg. This is the same as using the
send operator: Dest ! Msg.
- Dest can be a remote or local process identifier, a (local) port,
- a locally registered name, or a tuple {RegName, Node} for a
- registered name at another node.
+ Dest can be a remote or local process identifier, an alias, a
+ (local) port, a locally registered name, or a tuple {RegName,
+ Node} for a registered name at another node.
The function fails with a badarg run-time error if Dest is an
atom name, but this name is not registered. This is the only case
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_2_func.txt
new file mode 100644
index 0000000000..eac7f6352c
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_2_func.txt
@@ -0,0 +1,5 @@
+
+  seq_trace/2
+
+ The documentation for seq_trace/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_info_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_info_1_func.txt
new file mode 100644
index 0000000000..6dc372826e
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_info_1_func.txt
@@ -0,0 +1,6 @@
+
+  seq_trace_info/1
+
+ The documentation for seq_trace_info/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_1_func.txt
new file mode 100644
index 0000000000..d0ae337121
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_1_func.txt
@@ -0,0 +1,6 @@
+
+  seq_trace_print/1
+
+ The documentation for seq_trace_print/1 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_2_func.txt
new file mode 100644
index 0000000000..54905aa1a9
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_seq_trace_print_2_func.txt
@@ -0,0 +1,6 @@
+
+  seq_trace_print/2
+
+ The documentation for seq_trace_print/2 is hidden. This probably
+ means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_1_func.txt
new file mode 100644
index 0000000000..76a75e6bdb
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_1_func.txt
@@ -0,0 +1,12 @@
+
+ -spec erlang:set_cookie(Cookie) -> true when Cookie :: atom().
+
+Since:
+ OTP @OTP-17538@
+
+ Sets the magic cookie of the local node to the atom Cookie,
+ which is also the cookie for all nodes that have no explicit
+ cookie set with set_cookie/2 Cookie (see section Distributed
+ Erlang in the Erlang Reference Manual in System Documentation).
+
+ Failure: function_clause if the local node is not alive.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_2_func.txt
index 841be9c7cd..571d771ae8 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cookie_2_func.txt
@@ -2,9 +2,10 @@
-spec erlang:set_cookie(Node, Cookie) -> true
 when Node :: node(), Cookie :: atom().
- Sets the magic cookie of Node to the atom Cookie. If Node is
- the local node, the function also sets the cookie of all other
- unknown nodes to Cookie (see section Distributed Erlang in the
- Erlang Reference Manual in System Documentation).
+ Sets the magic cookie for Node to the atom Cookie. If Node
+ is the local node, the function sets the cookie of all other nodes
+ (that have no explicit cookie set with this function) to Cookie
+ (see section Distributed Erlang in the Erlang Reference Manual
+ in System Documentation).
Failure: function_clause if the local node is not alive.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cpu_topology_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cpu_topology_1_func.txt
new file mode 100644
index 0000000000..1b44778f1a
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_set_cpu_topology_1_func.txt
@@ -0,0 +1,6 @@
+
+  set_cpu_topology/1
+
+ The documentation for set_cpu_topology/1 is hidden. This
+ probably means that it is internal and not to be used by other
+ applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_2_func.txt
new file mode 100644
index 0000000000..93491f7786
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_2_func.txt
@@ -0,0 +1,5 @@
+
+  setnode/2
+
+ The documentation for setnode/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_3_func.txt
new file mode 100644
index 0000000000..0e2112a100
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_setnode_3_func.txt
@@ -0,0 +1,5 @@
+
+  setnode/3
+
+ The documentation for setnode/3 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_spawn_opt_4_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_spawn_opt_4_func.txt
index 7a7ab7a819..22956f6ce9 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_spawn_opt_4_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_spawn_opt_4_func.txt
@@ -125,8 +125,9 @@
process_flag(max_heap_size, Size).
{message_queue_data, MQD}:
- Sets the state of the message_queue_data process flag. MQD
- is to be either off_heap or on_heap. The default 
- message_queue_data process flag is determined by command-line
- argument +hmqd in erl(1). For more information, see the
- documentation of process_flag(message_queue_data, MQD).
+ Sets the value of the message_queue_data process flag. MQD
+ can be either off_heap or on_heap. The default value of
+ the message_queue_data process flag is determined by the
+ command-line argument +hmqd in erl(1). For more
+ information, see the documentation of 
+ process_flag(message_queue_data, MQD).
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_0_type.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_0_type.txt
new file mode 100644
index 0000000000..9d02af6aa5
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_0_type.txt
@@ -0,0 +1,10 @@
+
+ -type stacktrace() ::
+  [{module(),
+  atom(),
+  arity() | [term()],
+  [stacktrace_extrainfo()]} |
+  {function(), arity() | [term()], [stacktrace_extrainfo()]}].
+
+ An Erlang stacktrace as described by Errors and Error Handling
+ section in the Erlang Reference Manual.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_extrainfo_0_type.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_extrainfo_0_type.txt
new file mode 100644
index 0000000000..acdcdd1eb4
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_stacktrace_extrainfo_0_type.txt
@@ -0,0 +1,10 @@
+
+ -type stacktrace_extrainfo() ::
+  {line, pos_integer()} |
+  {file, unicode:chardata()} |
+  {error_info,
+  #{module => module(), function => atom(), cause => term()}} |
+  {atom(), term()}.
+
+ An Erlang stacktrace as described by Errors and Error Handling
+ section in the Erlang Reference Manual.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_statistics_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_statistics_1_func.txt
index e54fa13ce6..f9bb276f72 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_statistics_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_statistics_1_func.txt
@@ -24,16 +24,6 @@
 Input :: non_neg_integer(),
 Output :: non_neg_integer().
- -spec statistics(scheduler_wall_time) ->
-  [{SchedulerId, ActiveTime, TotalTime}] | undefined
-  when
-  SchedulerId :: pos_integer(),
-  ActiveTime :: non_neg_integer(),
-  TotalTime :: non_neg_integer().
-
-Since:
- OTP R15B01
-
-spec statistics(active_tasks_all) -> [ActiveTasks]
 when ActiveTasks :: non_neg_integer().
@@ -71,6 +61,16 @@
 Wallclock_Time_Since_Last_Call ::
 non_neg_integer().
+ -spec statistics(scheduler_wall_time) ->
+  [{SchedulerId, ActiveTime, TotalTime}] | undefined
+  when
+  SchedulerId :: pos_integer(),
+  ActiveTime :: non_neg_integer(),
+  TotalTime :: non_neg_integer().
+
+Since:
+ OTP R15B01
+
-spec statistics(exact_reductions) ->
 {Total_Exact_Reductions,
 Exact_Reductions_Since_Last_Call}
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_subtract_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_subtract_2_func.txt
new file mode 100644
index 0000000000..b3e9734abf
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_subtract_2_func.txt
@@ -0,0 +1,5 @@
+
+  subtract/2
+
+ The documentation for subtract/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_system_info_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_system_info_1_func.txt
index 958bee44a1..1015fbac90 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_system_info_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_system_info_1_func.txt
@@ -198,10 +198,10 @@
message_queue_data:
Returns the default value of the message_queue_data process
- flag, which is either off_heap or on_heap. This default is
- set by command-line argument +hmqd in erl(1). For more
- information on the message_queue_data process flag, see
- documentation of process_flag(message_queue_data, MQD).
+ flag, which can be either off_heap or on_heap. The default
+ value is set by the command-line argument +hmqd in erl(1).
+ For more information, see the documentation of 
+ process_flag(message_queue_data, MQD).
min_heap_size:
Returns {min_heap_size, MinHeapSize}, where MinHeapSize is
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_binary_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_binary_2_func.txt
index 5c2cc9e708..914d4f49cd 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_binary_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_binary_2_func.txt
@@ -5,6 +5,7 @@
 Options ::
 [compressed |
 {compressed, Level :: 0..9} |
+  deterministic |
 {minor_version, Version :: 0..2}].
Returns a binary data object that is the result of encoding Term
@@ -61,4 +62,10 @@
default in a future major release of Erlang/OTP. Erlang/OTP
systems as of R16B can decode this representation.
+ Option deterministic (introduced in OTP 24.1) can be used to
+ ensure that within the same major release of Erlang/OTP, the same
+ encoded representation is returned for the same term. There is
+ still no guarantee that the encoded representation remains the
+ same between major releases of Erlang/OTP.
+
See also binary_to_term/1.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_iovec_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_iovec_2_func.txt
index 176c8eef09..1379c95c36 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_iovec_2_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_term_to_iovec_2_func.txt
@@ -5,6 +5,7 @@
 Options ::
 [compressed |
 {compressed, Level :: 0..9} |
+  deterministic |
 {minor_version, Version :: 0..2}].
Since:
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_trace_3_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_trace_3_func.txt
index 1712d8dca3..46b04a1c4a 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_trace_3_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_trace_3_func.txt
@@ -328,9 +328,6 @@
{trace, PidPort, getting_unlinked, Pid2}:
When PidPort gets unlinked from a process Pid2.
- {trace, Pid, exit, Reason}:
- When Pid exits with reason Reason.
-
{trace, Port, open, Pid, Driver}:
When Pid opens a new port Port with the running Driver.
@@ -412,6 +409,12 @@
The total size of binaries allowed in the virtual old heap
in the process before doing a garbage collection.
+ wordsize:
+ For the gc_minor_start event it is the size of the need
+ that triggered the GC. For the corresponding gc_minor_end
+ event it is the size of reclaimed memory = start 
+ heap_size - end heap_size.
+
All sizes are in words.
{trace, Pid, gc_max_heap_size, Info}:
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_type.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_type.txt
index 89aa1c4acc..b2eb88fd94 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_type.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_type.txt
@@ -52,3 +52,17 @@ These types are documented in this module:
 error_logger => boolean()}.
-type message_queue_data() :: off_heap | on_heap.
+
+ -type stacktrace_extrainfo() ::
+  {line, pos_integer()} |
+  {file, unicode:chardata()} |
+  {error_info,
+  #{module => module(), function => atom(), cause => term()}} |
+  {atom(), term()}.
+
+ -type stacktrace() ::
+  [{module(),
+  atom(),
+  arity() | [term()],
+  [stacktrace_extrainfo()]} |
+  {function(), arity() | [term()], [stacktrace_extrainfo()]}].
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unalias_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unalias_1_func.txt
index d4e54f4156..308c28a1e4 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unalias_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unalias_1_func.txt
@@ -2,7 +2,7 @@
-spec unalias(Alias) -> boolean() when Alias :: reference().
Since:
- OTP @OTP-16718@
+ OTP 24.0
Deactivate the alias Alias previously created by the calling
process. An alias can for example be created via alias/0, or 
@@ -11,3 +11,6 @@
Returns true if Alias was a currently active alias for current
processes; otherwise, false.
+
+ For more information on process aliases see the Process Aliases
+ section of the Erlang Reference Manual.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_universaltime_to_posixtime_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_universaltime_to_posixtime_1_func.txt
new file mode 100644
index 0000000000..a749876149
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_universaltime_to_posixtime_1_func.txt
@@ -0,0 +1,6 @@
+
+  universaltime_to_posixtime/1
+
+ The documentation for universaltime_to_posixtime/1 is hidden.
+ This probably means that it is internal and not to be used by
+ other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unlink_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unlink_1_func.txt
index 23fecba59c..9668d64fe3 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unlink_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unlink_1_func.txt
@@ -1,23 +1,31 @@
-spec unlink(Id) -> true when Id :: pid() | port().
- Removes the link, if there is one, between the calling process and
- the process or port referred to by Id.
+ Removes a link between the calling process and another process or
+ a port identified by Id. We will from here on call the
+ identified process or port unlinkee.
- Returns true and does not fail, even if there is no link to Id,
- or if Id does not exist.
+ A link can be set up using the link/1 BIF. For more information
+ on links and exit signals due to links, see the Processes
+ chapter in the Erlang Reference Manual:
- Once unlink(Id) has returned, it is guaranteed that the link
- between the caller and the entity referred to by Id has no
- effect on the caller in the future (unless the link is setup
- again). If the caller is trapping exits, an {'EXIT', Id, _}
- message from the link can have been placed in the caller's message
- queue before the call.
+ • Links
+
+ • Sending Exit Signals
- Notice that the {'EXIT', Id, _} message can be the result of the
- link, but can also be the result of Id calling exit/2.
- Therefore, it can be appropriate to clean up the message queue
- when trapping exits after the call to unlink(Id), as follows:
+ • Receiving Exit Signals
+
+ Once unlink(Id) has returned, it is guaranteed that the link
+ between the caller and the unlinkee has no effect on the caller in
+ the future (unless the link is setup again). Note that if the
+ caller is trapping exits, an {'EXIT', Id, ExitReason} message
+ due to the link may have been placed in the message queue of the
+ caller before the unlink(Id) call completed. Also note that the 
+ {'EXIT', Id, ExitReason} message may be the result of the link,
+ but may also be the result of the unlikee sending the caller an
+ exit signal by calling the exit/2 BIF. Therefore, it may or may
+ not be appropriate to clean up the message queue after a call to 
+ unlink(Id) as follows, when trapping exits:
unlink(Id),
receive
@@ -27,13 +35,10 @@
true
end
- Note:
- Before Erlang/OTP R11B (ERTS 5.5) unlink/1 behaved
- completely asynchronously, that is, the link was active until
- the "unlink signal" reached the linked entity. This had an
- undesirable effect, as you could never know when you were
- guaranteed not to be effected by the link.
+ The link removal is performed asynchronously. If such a link does
+ not exist, nothing is done. A detailed description of the link
+ protocol can be found in the Distribution Protocol chapter of
+ the ERTS User's Guide.
- The current behavior can be viewed as two combined operations:
- asynchronously send an "unlink signal" to the linked entity
- and ignore any future results of the link.
+ Failure: badarg if Id does not identify a process or a node
+ local port.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unregister_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unregister_1_func.txt
index 4e25c97d02..3697bac815 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unregister_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_unregister_1_func.txt
@@ -1,12 +1,17 @@
-spec unregister(RegName) -> true when RegName :: atom().
- Removes the registered name RegName associated with a process
- identifier or a port identifier, for example:
+ Removes the registered name RegName associated with a process
+ identifier or a port identifier from the name registry. For
+ example:
> unregister(db).
true
+ Keep in mind that you can still receive signals associated with
+ the registered name after it has been unregistered as the sender
+ may have looked up the name before sending to it.
+
Users are advised not to unregister system processes.
Failure: badarg if RegName is not a registered name.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_whereis_1_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_whereis_1_func.txt
index 757ec8a7e1..6a432f954c 100644
--- a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_whereis_1_func.txt
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_whereis_1_func.txt
@@ -2,9 +2,9 @@
-spec whereis(RegName) -> pid() | port() | undefined
 when RegName :: atom().
- Returns the process identifier or port identifier with the
- registered name RegName. Returns undefined if the name is not
- registered. Example:
+ Returns the process identifier or port identifier with the 
+ registered name RegName from the name registry. Returns 
+ undefined if the name is not registered. Example:
> whereis(db).
<0.43.0>
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_xor_2_func.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_xor_2_func.txt
new file mode 100644
index 0000000000..3a833a1dfb
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_erlang_xor_2_func.txt
@@ -0,0 +1,5 @@
+
+  'xor'/2
+
+ The documentation for 'xor'/2 is hidden. This probably means
+ that it is internal and not to be used by other applications.
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE.txt
new file mode 100644
index 0000000000..3c3f49196d
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE.txt
@@ -0,0 +1,4 @@
+
+ shell_docs_SUITE
+
+ There is no documentation for shell_docs_SUITE
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_cb.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_cb.txt
new file mode 100644
index 0000000000..917fb3b6a7
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_cb.txt
@@ -0,0 +1,3 @@
+ shell_docs_SUITE
+
+There are no callbacks in this module
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_type.txt b/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_type.txt
new file mode 100644
index 0000000000..ad4b506280
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/unknown_shell_docs_SUITE_type.txt
@@ -0,0 +1,3 @@
+ shell_docs_SUITE
+
+There are no types in this module
diff --git a/lib/stdlib/test/shell_docs_SUITE_data/user_drv.docs_v1 b/lib/stdlib/test/shell_docs_SUITE_data/user_drv.docs_v1
new file mode 100644
index 0000000000..43ca532712
--- /dev/null
+++ b/lib/stdlib/test/shell_docs_SUITE_data/user_drv.docs_v1
@@ -0,0 +1 @@
+{docs_v1,[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],erlang,<<97,112,112,108,105,99,97,116,105,111,110,47,101,114,108,97,110,103,43,104,116,109,108>>,hidden,#{otp_doc_vsn => {1,0,0}},[{{function,interfaces,1},[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],[<<105,110,116,101,114,102,97,99,101,115,47,49>>],hidden,#{}},{{function,server,2},[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],[<<115,101,114,118,101,114,47,50>>],hidden,#{}},{{function,server,3},[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],[<<115,101,114,118,101,114,47,51>>],hidden,#{}},{{function,start,0},[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],[<<115,116,97,114,116,47,48>>],hidden,#{}},{{function,start,1},[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],[<<115,116,97,114,116,47,49>>],hidden,#{}},{{function,start,2},[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],[<<115,116,97,114,116,47,50>>],hidden,#{}},{{function,start,3},[{file,[117,115,101,114,95,100,114,118,46,101,114,108]},{location,0}],[<<115,116,97,114,116,47,51>>],hidden,#{}}]}. \ No newline at end of file
diff --git a/lib/stdlib/test/stdlib_SUITE.erl b/lib/stdlib/test/stdlib_SUITE.erl
index 7e05723036..b30974cd0f 100644
--- a/lib/stdlib/test/stdlib_SUITE.erl
+++ b/lib/stdlib/test/stdlib_SUITE.erl
@@ -27,7 +27,7 @@
init_per_testcase/2, end_per_testcase/2,
app_test/1, appup_test/1, assert_test/1]).
--compile(r21).
+-compile(r22).
suite() -> [{ct_hooks,[ts_install_cth]}].
diff --git a/lib/stdlib/test/stdlib_bench_SUITE.erl b/lib/stdlib/test/stdlib_bench_SUITE.erl
index 81764a5913..4ccbdb9b57 100644
--- a/lib/stdlib/test/stdlib_bench_SUITE.erl
+++ b/lib/stdlib/test/stdlib_bench_SUITE.erl
@@ -52,7 +52,7 @@ groups() ->
encode_list, encode_list_to_string,
mime_binary_decode, mime_binary_decode_to_string,
mime_list_decode, mime_list_decode_to_string]},
- {io, [{repeat, 5}], [double_random_to_list]},
+ {io, [{repeat, 5}], [double_random_to_list, double_random_to_list_array]},
{gen_server, [{repeat,5}], cases(gen_server)},
{gen_statem, [{repeat,3}], cases(gen_statem)},
{gen_server_comparison, [],
@@ -283,14 +283,17 @@ mbb(N, Acc) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-define(MAX_DOUBLE, (1 bsl 62) - 1).
--define(DOUBLE_SAMPLE, 10000).
+-define(DOUBLE_SAMPLE, 100000).
-define(SMALL_DIGITS, 6).
double_random_to_list(_Config) ->
- comment(test_double(io_lib_format, fwrite_g, 0)).
+ comment(test_double(0)).
+
+double_random_to_list_array(_Config) ->
+ comment(test_double_array(0)).
double_small_digit_to_list(_Config) ->
- comment(test_double(io_lib_format, fwrite_g, ?SMALL_DIGITS)).
+ comment(test_double(?SMALL_DIGITS)).
double(0) ->
Int = rand:uniform(?MAX_DOUBLE),
@@ -319,17 +322,34 @@ exp10(Acc, 0) ->
exp10(Acc, X) ->
exp10(Acc, X - 1).
-test_double(Mod, Fun, SmallDigits) ->
- test_double(?DOUBLE_SAMPLE, Mod, Fun, SmallDigits).
-test_double(Iter, Mod, Fun, SmallDigits) ->
- F = fun() -> loop_double(Iter, Mod, Fun, SmallDigits) end,
+test_double(Samples) when is_list(Samples) ->
+ F = fun() -> loop_double(Samples) end,
{Time, ok} = timer:tc(fun() -> lspawn(F) end),
- report_mfa(Iter, Time, Mod).
+ report_mfa(?DOUBLE_SAMPLE, Time, io_lib_format);
+test_double(SmallDigits) when is_integer(SmallDigits) ->
+ rand:seed(exsplus, {1201,855653,380975}),
+ Samples = [double(SmallDigits) || _ <- lists:seq(1, ?DOUBLE_SAMPLE)],
+ test_double(Samples).
+
+loop_double([]) -> garbage_collect(), ok;
+loop_double([Sample | Rest]) ->
+ _ = io_lib_format:fwrite_g(Sample),
+ loop_double(Rest).
+
+test_double_array(SmallDigits) when is_integer(SmallDigits) ->
+ rand:seed(exsplus, {1201,855653,380975}),
+ Samples = [double(SmallDigits) || _ <- lists:seq(1, ?DOUBLE_SAMPLE)],
+ Samples_array = array:from_list(Samples),
+ test_double_array(?DOUBLE_SAMPLE - 1, Samples_array).
+test_double_array(Iter, Samples_array) ->
+ F = fun() -> loop_double_array(Iter, Samples_array) end,
+ {Time, ok} = timer:tc(fun() -> lspawn(F) end),
+ report_mfa(?DOUBLE_SAMPLE, Time, io_lib_format).
-loop_double(0, _M, _F, _SmallDigits) -> garbage_collect(), ok;
-loop_double(N, M, F, SmallDigits) ->
- _ = apply(M, F, [double(SmallDigits)]),
- loop_double(N - 1, M, F, SmallDigits).
+loop_double_array(0, _Samples_array) -> garbage_collect(), ok;
+loop_double_array(Iter, Samples_array) ->
+ _ = io_lib_format:fwrite_g(array:get(Iter, Samples_array)),
+ loop_double_array(Iter - 1, Samples_array).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/stdlib/test/timer_SUITE.erl b/lib/stdlib/test/timer_SUITE.erl
index 9062cbae80..84b008f1d3 100644
--- a/lib/stdlib/test/timer_SUITE.erl
+++ b/lib/stdlib/test/timer_SUITE.erl
@@ -132,7 +132,7 @@ big_loop(C, N, Pids) ->
%%Pids2=Pids1,
%% wait a little while
- timer:sleep(rand:uniform(200)*3),
+ ok = timer:sleep(rand:uniform(200)*3),
%% spawn zero, one or two nrev to get some load ;-/
Pids3 = start_nrev(Pids2, rand:uniform(100)),
@@ -168,7 +168,7 @@ s_a_t(C, TimeOut) ->
a_t(C, TimeOut) ->
start_watchdog(self(), TimeOut),
Start = system_time(),
- timer:send_after(TimeOut, self(), now),
+ {ok, _} = timer:send_after(TimeOut, self(), now),
receive
now ->
Stop = system_time(),
@@ -202,12 +202,12 @@ i_wait(Start, Prev, Times, TimeOut, Times, Ref, C) ->
interval ->
Now = system_time(),
report_interval(C, {final,Times}, Start, Prev, Now, TimeOut),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
exit(done);
watchdog ->
Now = system_time(),
report_interval(C, {final,Times}, Start, Prev, Now, TimeOut),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
ok = io:format("Internal watchdog timeout (i), not good!!~n",
[]),
exit(done)
@@ -358,7 +358,7 @@ system_time() ->
%% ------------------------------------------------------- %%
do_nrev(Sleep) ->
- timer:sleep(Sleep),
+ ok = timer:sleep(Sleep),
test(1000,"abcdefghijklmnopqrstuvxyz1234"),
exit(done).
diff --git a/lib/stdlib/test/timer_simple_SUITE.erl b/lib/stdlib/test/timer_simple_SUITE.erl
index 1a582ae95a..889d859a04 100644
--- a/lib/stdlib/test/timer_simple_SUITE.erl
+++ b/lib/stdlib/test/timer_simple_SUITE.erl
@@ -21,25 +21,43 @@
-module(timer_simple_SUITE).
+%% This test suite matches on opaque tref() return values from the *_after
+%% and *_interval functions, namely {instant, _}, {send_local, _}, {once, _}
+%% and {interval, _}.
+%% If the implementation changes, the test suite has to be changed accordingly.
+
%% external
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
init_per_testcase/2,
- apply_after/1,
+ apply_after1/1,
+ apply_after2/1,
+ apply_after_invalid_args/1,
send_after1/1,
send_after2/1,
send_after3/1,
+ send_after4/1,
+ send_after_invalid_args/1,
exit_after1/1,
exit_after2/1,
+ exit_after3/1,
kill_after1/1,
kill_after2/1,
- apply_interval/1,
+ kill_after3/1,
+ apply_interval1/1,
+ apply_interval_invalid_args/1,
send_interval1/1,
send_interval2/1,
send_interval3/1,
send_interval4/1,
+ send_interval_invalid_args/1,
cancel1/1,
cancel2/1,
+ cancel3/1,
+ cancel4/1,
+ cancel_invalid_args/1,
+ sleep1/1,
+ sleep2/1,
tc/1,
unique_refs/1,
timer_perf/1]).
@@ -60,15 +78,107 @@ suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,10}}].
-all() ->
- [apply_after, send_after1, send_after2, send_after3,
- exit_after1, exit_after2, kill_after1, kill_after2,
- apply_interval, send_interval1, send_interval2,
- send_interval3, send_interval4, cancel1, cancel2, tc,
- unique_refs, timer_perf].
+all() ->
+ [
+ {group, apply_after},
+ {group, send_after},
+ {group, exit_after},
+ {group, kill_after},
+ {group, apply_interval},
+ {group, send_interval},
+ {group, cancel},
+ {group, sleep},
+ {group, misc}
+ ].
groups() ->
- [].
+ [
+ {
+ apply_after,
+ [],
+ [
+ apply_after1,
+ apply_after2,
+ apply_after_invalid_args
+ ]
+ },
+ {
+ send_after,
+ [],
+ [
+ send_after1,
+ send_after2,
+ send_after3,
+ send_after4,
+ send_after_invalid_args
+ ]
+ },
+ {
+ exit_after,
+ [],
+ [
+ exit_after1,
+ exit_after2,
+ exit_after3
+ ]
+ },
+ {
+ kill_after,
+ [],
+ [
+ kill_after1,
+ kill_after2,
+ kill_after3
+ ]
+ },
+ {
+ apply_interval,
+ [],
+ [
+ apply_interval1,
+ apply_interval_invalid_args
+ ]
+ },
+ {
+ send_interval,
+ [],
+ [
+ send_interval1,
+ send_interval2,
+ send_interval3,
+ send_interval4,
+ send_interval_invalid_args
+ ]
+ },
+ {
+ cancel,
+ [],
+ [
+ cancel1,
+ cancel2,
+ cancel3,
+ cancel4,
+ cancel_invalid_args
+ ]
+ },
+ {
+ sleep,
+ [],
+ [
+ sleep1,
+ sleep2
+ ]
+ },
+ {
+ misc,
+ [],
+ [
+ tc,
+ unique_refs,
+ timer_perf
+ ]
+ }
+ ].
init_per_suite(Config) ->
Config.
@@ -84,24 +194,37 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_, Config) when is_list(Config) ->
- timer:start(),
+ ok = timer:start(),
Config.
%% Testing timer interface!!
-%% Test of apply_after, with sending of message.
-apply_after(Config) when is_list(Config) ->
- timer:apply_after(500, ?MODULE, send, [self(), ok_apply]),
+%% Test of apply_after with time = 0, with sending of message.
+apply_after1(Config) when is_list(Config) ->
+ {ok, {instant, _}} = timer:apply_after(0, ?MODULE, send, [self(), ok_apply]),
+ ok = get_mess(1000, ok_apply).
+
+%% Test of apply_after with time = 500, with sending of message.
+apply_after2(Config) when is_list(Config) ->
+ {ok, {once, _}} = timer:apply_after(500, ?MODULE, send, [self(), ok_apply]),
ok = get_mess(1000, ok_apply).
+%% Test that apply_after rejects invalid arguments.
+apply_after_invalid_args(Config) when is_list(Config) ->
+ {error, badarg} = timer:apply_after(-1, foo, bar, []),
+ {error, badarg} = timer:apply_after(0, "foo", bar, []),
+ {error, badarg} = timer:apply_after(0, foo, "bar", []),
+ {error, badarg} = timer:apply_after(0, foo, bar, baz),
+ ok.
+
%% Test of send_after with time = 0.
send_after1(Config) when is_list(Config) ->
- timer:send_after(0, ok_send1),
+ {ok, {instant, _}} = timer:send_after(0, ok_send1),
ok = get_mess(1000, ok_send1).
%% Test of send_after with time = 500.
send_after2(Config) when is_list(Config) ->
- timer:send_after(500, self(), ok_send2),
+ {ok, {send_local, _}} = timer:send_after(500, self(), ok_send2),
ok = get_mess(2000, ok_send2).
%% Test of send_after with time = 500, with receiver a registered
@@ -109,15 +232,32 @@ send_after2(Config) when is_list(Config) ->
send_after3(Config) when is_list(Config) ->
Name = list_to_atom(pid_to_list(self())),
register(Name, self()),
- timer:send_after(500, Name, ok_send3),
+ {ok, {once, _}} = timer:send_after(500, Name, ok_send3),
ok = get_mess(2000, ok_send3),
unregister(Name).
+%% Test that send_after works if the destination is a registered
+%% name which gets registered after the timer is started.
+send_after4(Config) when is_list(Config) ->
+ Name = list_to_atom(pid_to_list(self())),
+ {ok, {once, _}} = timer:send_after(500, Name, ok_send4),
+ register(Name, self()),
+ ok = get_mess(2000, ok_send4),
+ unregister(Name).
+
+%% Test that send_after rejects invalid arguments.
+send_after_invalid_args(Config) when is_list(Config) ->
+ {error, badarg} = timer:send_after(-1, test),
+ {error, badarg} = timer:send_after(-1, self(), test),
+ {error, badarg} = timer:send_after(-1, ?MODULE, test),
+ {error, badarg} = timer:send_after(0, "", test),
+ ok.
+
%% Test of exit_after with time = 1000.
exit_after1(Config) when is_list(Config) ->
process_flag(trap_exit, true),
Pid = spawn_link(?MODULE, forever, []),
- timer:exit_after(1000, Pid, exit_test1),
+ {ok, {once, _}} = timer:exit_after(1000, Pid, exit_test1),
ok = get_mess(5000, {'EXIT', Pid, exit_test1}).
%% Test of exit_after with time = 1000. The process to exit is the
@@ -127,14 +267,25 @@ exit_after2(Config) when is_list(Config) ->
Pid = spawn_link(?MODULE, forever, []),
Name = list_to_atom(pid_to_list(Pid)),
register(Name, Pid),
- timer:exit_after(1000, Name, exit_test2),
+ {ok, {once, _}} = timer:exit_after(1000, Name, exit_test2),
ok = get_mess(2000, {'EXIT', Pid, exit_test2}).
+%% Test of exit_after for sending an exit to self.
+exit_after3(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ Pid = spawn_link(
+ fun () ->
+ {ok, {once, _}} = timer:exit_after(1000, exit_test3),
+ forever()
+ end
+ ),
+ ok = get_mess(2000, {'EXIT', Pid, exit_test3}).
+
%% Test of kill_after with time = 1000.
kill_after1(Config) when is_list(Config) ->
process_flag(trap_exit, true),
Pid = spawn_link(?MODULE, forever, []),
- timer:kill_after(1000, Pid),
+ {ok, {once, _}} = timer:kill_after(1000, Pid),
ok = get_mess(2000, {'EXIT', Pid, killed}).
%% Test of kill_after with time = 1000. The process to exit is the
@@ -144,25 +295,44 @@ kill_after2(Config) when is_list(Config) ->
Pid = spawn_link(?MODULE, forever, []),
Name = list_to_atom(pid_to_list(Pid)),
register(Name, Pid),
- timer:kill_after(1000, Name),
+ {ok, {once, _}} = timer:kill_after(1000, Name),
+ ok = get_mess(2000, {'EXIT', Pid, killed}).
+
+%% Test of kill_after for self-killing.
+kill_after3(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ Pid = spawn_link(
+ fun () ->
+ {ok, {once, _}} = timer:kill_after(1000),
+ forever()
+ end
+ ),
ok = get_mess(2000, {'EXIT', Pid, killed}).
%% Test of apply_interval by sending messages. Receive
%% 3 messages, cancel the timer, and check that we do
%% not get any more messages.
-apply_interval(Config) when is_list(Config) ->
+apply_interval1(Config) when is_list(Config) ->
{ok, Ref} = timer:apply_interval(1000, ?MODULE, send,
[self(), apply_int]),
ok = get_mess(1500, apply_int, 3),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
nor = get_mess(1000, apply_int).
+%% Test that apply_interval rejects invalid arguments.
+apply_interval_invalid_args(Config) when is_list(Config) ->
+ {error, badarg} = timer:apply_interval(-1, foo, bar, []),
+ {error, badarg} = timer:apply_interval(0, "foo", bar, []),
+ {error, badarg} = timer:apply_interval(0, foo, "bar", []),
+ {error, badarg} = timer:apply_interval(0, foo, bar, baz),
+ ok.
+
%% Test of send_interval/2. Receive 5 messages, cancel the timer, and
%% check that we do not get any more messages.
send_interval1(Config) when is_list(Config) ->
{ok, Ref} = timer:send_interval(1000, send_int),
ok = get_mess(1500, send_int, 5),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
nor = get_mess(1000, send_int). % We should receive only five
%% Test of send_interval/3. Receive 2 messages, cancel the timer, and
@@ -170,7 +340,7 @@ send_interval1(Config) when is_list(Config) ->
send_interval2(Config) when is_list(Config) ->
{ok, Ref} = timer:send_interval(1000, self(), send_int2),
ok = get_mess(1500, send_int2, 2),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
nor = get_mess(1000, send_int2). % We should receive only two
%% Test of send_interval/3. Receive 2 messages, cancel the timer, and
@@ -182,32 +352,97 @@ send_interval3(Config) when is_list(Config) ->
register(Name, self()),
{ok, Ref} = timer:send_interval(1000, Name, send_int3),
ok = get_mess(1500, send_int3, 2),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
nor = get_mess(1000, send_int3), % We should receive only two
unregister(Name).
%% Test that send interval stops sending msg when the receiving
%% process terminates.
send_interval4(Config) when is_list(Config) ->
- timer:send_interval(500, one_time_only),
+ {ok, {interval, Ref}} = timer:send_interval(500, one_time_only),
receive
one_time_only -> ok
end,
- timer_server ! {'EXIT', self(), normal}, % Should remove the timer
- timer:send_after(600, send_intv_ok),
+ timer_server ! {'DOWN', Ref, process, self(), test},
+ {ok, {send_local, _}} = timer:send_after(600, send_intv_ok),
send_intv_ok = receive
Msg -> Msg
end.
-%% Test that we can cancel a timer.
+%% Test that send_interval rejects invalid arguments.
+send_interval_invalid_args(Config) when is_list(Config) ->
+ {error, badarg} = timer:send_interval(-1, test),
+ {error, badarg} = timer:send_interval(-1, self(), test),
+ {error, badarg} = timer:send_interval(-1, ?MODULE, test),
+ {error, badarg} = timer:send_interval(0, "", test),
+ ok.
+
+%% Test that we can cancel a send-once timer.
cancel1(Config) when is_list(Config) ->
{ok, Ref} = timer:send_after(1000, this_should_be_canceled),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
nor = get_mess(2000, this_should_be_canceled). % We should rec 0 msgs
-%% Test cancel/1 with bad argument.
+%% Test that we can cancel an apply-once timer.
cancel2(Config) when is_list(Config) ->
- {error, badarg} = timer:cancel(no_reference).
+ {ok, Ref} = timer:apply_after(1000, erlang, send, [self(), this_should_be_canceled]),
+ {ok, cancel} = timer:cancel(Ref),
+ nor = get_mess(2000, this_should_be_canceled).
+
+%% Test that we can cancel a send-interval timer.
+cancel3(Config) when is_list(Config) ->
+ {ok, Ref} = timer:send_interval(500, one_time_only),
+ receive
+ one_time_only -> ok
+ end,
+ {ok, cancel} = timer:cancel(Ref),
+ {ok, {send_local, _}} = timer:send_after(600, send_intv_ok),
+ send_intv_ok = receive
+ Msg -> Msg
+ end.
+
+%% Test that we can cancel an apply-interval timer.
+cancel4(Config) when is_list(Config) ->
+ {ok, Ref} = timer:apply_interval(500, erlang, send, [self(), one_time_only]),
+ receive
+ one_time_only -> ok
+ end,
+ {ok, cancel} = timer:cancel(Ref),
+ {ok, {send_local, _}} = timer:send_after(600, send_intv_ok),
+ send_intv_ok = receive
+ Msg -> Msg
+ end.
+
+%% Test that cancel rejects invalid arguments.
+cancel_invalid_args(Config) when is_list(Config) ->
+ {error, badarg} = timer:cancel(no_reference),
+ {error, badarg} = timer:cancel({foo, make_ref()}),
+ {error, badarg} = timer:cancel({once, foo}),
+ {error, badarg} = timer:cancel({interval, foo}),
+ {error, badarg} = timer:cancel({instant, foo}),
+ ok.
+
+%% Test that sleep pauses the calling process for
+%% at least the given time.
+sleep1(Config) when is_list(Config) ->
+ T0 = erlang:monotonic_time(millisecond),
+ ok = timer:sleep(1000),
+ T1 = erlang:monotonic_time(millisecond),
+ true = T1 - T0 >= 1000,
+ ok.
+
+%% Test that sleep accepts times >(2^32)-1, which is
+%% the maximum time for the after clause of a receive
+%% operation, at the time of this writing.
+sleep2(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ Pid = spawn_link(
+ fun () ->
+ {ok, {once, _}} = timer:kill_after(1000),
+ ok = timer:sleep(16#ffffffff+1)
+ end
+ ),
+ ok = get_mess(2000, {'EXIT', Pid, killed}).
%% Test sleep/1 and tc/3.
tc(Config) when is_list(Config) ->
@@ -220,7 +455,7 @@ tc(Config) when is_list(Config) ->
end,
%% tc/2
- {Res2, ok} = timer:tc(fun(T) -> timer:sleep(T) end, [500]),
+ {Res2, ok} = timer:tc(fun(T) -> ok = timer:sleep(T) end, [500]),
ok = if
Res2 < 500*1000 -> {too_early, Res2}; % Too early
Res2 > 800*1000 -> {too_late, Res2}; % Too much time
@@ -228,7 +463,7 @@ tc(Config) when is_list(Config) ->
end,
%% tc/1
- {Res3, ok} = timer:tc(fun() -> timer:sleep(500) end),
+ {Res3, ok} = timer:tc(fun() -> ok = timer:sleep(500) end),
ok = if
Res3 < 500*1000 -> {too_early, Res3}; % Too early
Res3 > 800*1000 -> {too_late, Res3}; % Too much time
@@ -293,19 +528,19 @@ set_and_cancel_one_shots(0) ->
set_and_cancel_one_shots(N) ->
{ok, Ref} = timer:send_after(7000, self(), kalle),
%% Cancel twice
- timer:cancel(Ref),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
set_and_cancel_one_shots(N-1).
cancel([T| Ts]) ->
- timer:cancel(T),
+ {ok, cancel} = timer:cancel(T),
cancel(Ts);
cancel([]) ->
ok.
num_timers() ->
- {{_, TotalTimers},{_, _IntervalTimers}} = timer:get_status(),
- TotalTimers.
+ Tab = sys:get_state(timer_server),
+ ets:info(Tab, size).
receive_nisse() ->
receive
@@ -326,7 +561,7 @@ get_mess(Time, Mess, N) ->
end.
forever() ->
- timer:sleep(1000),
+ ok = timer:sleep(1000),
forever().
@@ -395,7 +630,7 @@ timer(apply, Mod, T, Pid) ->
Pid ! {self(), ok, (After-Before) div 1000, T}
after T*3 + 300 -> % Watch dog
io:format("WARNING TIMER WATCHDOG timed out: ~w ~n", [T]),
- timer:cancel(Ref),
+ {ok, cancel} = timer:cancel(Ref),
Pid ! {self(), watch_dog_timed_out}
end.
diff --git a/lib/tools/emacs/erlang_appwiz.el b/lib/tools/emacs/erlang_appwiz.el
index b71c180739..73605c7858 100644
--- a/lib/tools/emacs/erlang_appwiz.el
+++ b/lib/tools/emacs/erlang_appwiz.el
@@ -23,7 +23,7 @@
;;(defvar erlang-skel-makefile-src
;; '((erlang-skel-include erlang-skel-nomodule-header)
;; "CC_ROOT := $(shell pwd | sed 's/erts.*$$//')" n
-;; "AUTOCONF := $(CC_ROOT)/erts/autoconf" n
+;; "AUTOCONF := $(CC_ROOT)/make/autoconf" n
;; "TARGET := $(shell $(AUTOCONF)/config.guess)"
;; "include $(CC_ROOT)/internal_tools/make/$(TARGET)/otp.mk" n
;; n
diff --git a/lib/wx/Makefile b/lib/wx/Makefile
index 002887d9da..cbd7ef5715 100644
--- a/lib/wx/Makefile
+++ b/lib/wx/Makefile
@@ -21,7 +21,6 @@
include ./vsn.mk
ifdef TERTIARY_BOOTSTRAP
- INSIDE_ERLSRC = true
SUBDIRS = src
else # Normal build
include ./config.mk
diff --git a/lib/wx/autoconf/config.guess b/lib/wx/autoconf/config.guess
deleted file mode 100755
index 1972fda8eb..0000000000
--- a/lib/wx/autoconf/config.guess
+++ /dev/null
@@ -1,1700 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright 1992-2021 Free Software Foundation, Inc.
-
-timestamp='2021-01-25'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
-#
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
-#
-# Please send patches to <config-patches@gnu.org>.
-
-
-me=$(echo "$0" | sed -e 's,.*/,,')
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Options:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2021 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-tmp=
-# shellcheck disable=SC2172
-trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
-
-set_cc_for_build() {
- # prevent multiple calls if $tmp is already set
- test "$tmp" && return 0
- : "${TMPDIR=/tmp}"
- # shellcheck disable=SC2039
- { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
- dummy=$tmp/dummy
- case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
- ,,) echo "int x;" > "$dummy.c"
- for driver in cc gcc c89 c99 ; do
- if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$driver"
- break
- fi
- done
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
- esac
-}
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if test -f /.attbin/uname ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown
-UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown
-UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown
-UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
-
-case "$UNAME_SYSTEM" in
-Linux|GNU|GNU/*)
- LIBC=unknown
-
- set_cc_for_build
- cat <<-EOF > "$dummy.c"
- #include <features.h>
- #if defined(__UCLIBC__)
- LIBC=uclibc
- #elif defined(__dietlibc__)
- LIBC=dietlibc
- #elif defined(__GLIBC__)
- LIBC=gnu
- #else
- #include <stdarg.h>
- /* First heuristic to detect musl libc. */
- #ifdef __DEFINED_va_list
- LIBC=musl
- #endif
- #endif
- EOF
- eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
-
- # Second heuristic to detect musl libc.
- if [ "$LIBC" = unknown ] &&
- command -v ldd >/dev/null &&
- ldd --version 2>&1 | grep -q ^musl; then
- LIBC=musl
- fi
-
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- if [ "$LIBC" = unknown ]; then
- LIBC=gnu
- fi
- ;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
- /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
- /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
- echo unknown))
- case "$UNAME_MACHINE_ARCH" in
- aarch64eb) machine=aarch64_be-unknown ;;
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- earmv*)
- arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,')
- endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p')
- machine="${arch}${endian}"-unknown
- ;;
- *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently (or will in the future) and ABI.
- case "$UNAME_MACHINE_ARCH" in
- earm*)
- os=netbsdelf
- ;;
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # Determine ABI tags.
- case "$UNAME_MACHINE_ARCH" in
- earm*)
- expr='s/^earmv[0-9]/-eabi/;s/eb$//'
- abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "$UNAME_VERSION" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi-}"
- exit ;;
- *:Bitrig:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
- exit ;;
- *:LibertyBSD:*:*)
- UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
- echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
- exit ;;
- *:MidnightBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
- exit ;;
- *:ekkoBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
- exit ;;
- *:SolidBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
- exit ;;
- *:OS108:*:*)
- echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
- *:MirBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
- *:Sortix:*:*)
- echo "$UNAME_MACHINE"-unknown-sortix
- exit ;;
- *:Twizzler:*:*)
- echo "$UNAME_MACHINE"-unknown-twizzler
- exit ;;
- *:Redox:*:*)
- echo "$UNAME_MACHINE"-unknown-redox
- exit ;;
- mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
- ;;
- *5.*)
- UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1)
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE=alpha ;;
- "EV4.5 (21064)")
- UNAME_MACHINE=alpha ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE=alpha ;;
- "EV5 (21164)")
- UNAME_MACHINE=alphaev5 ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE=alphaev56 ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE=alphapca56 ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE=alphapca57 ;;
- "EV6 (21264)")
- UNAME_MACHINE=alphaev6 ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE=alphaev67 ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE=alphaev69 ;;
- "EV7 (21364)")
- UNAME_MACHINE=alphaev7 ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE=alphaev79 ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)"
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix"$UNAME_RELEASE"
- exit ;;
- arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "$( (/bin/universe) 2>/dev/null)" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case $(/usr/bin/uname -p) in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
- exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
- exit ;;
- i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux"$UNAME_RELEASE"
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- set_cc_for_build
- SUN_ARCH=i386
- # If there is a compiler, see if it is configured for 64-bit objects.
- # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- # This test works for both compilers.
- if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- SUN_ARCH=x86_64
- fi
- fi
- echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- sun4*:SunOS:*:*)
- case "$(/usr/bin/arch -k)" in
- Series*|S4*)
- UNAME_RELEASE=$(uname -v)
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null)
- test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "$(/bin/arch)" in
- sun3)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- ;;
- sun4)
- echo sparc-sun-sunos"$UNAME_RELEASE"
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos"$UNAME_RELEASE"
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint"$UNAME_RELEASE"
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint"$UNAME_RELEASE"
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint"$UNAME_RELEASE"
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten"$UNAME_RELEASE"
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten"$UNAME_RELEASE"
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix"$UNAME_RELEASE"
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix"$UNAME_RELEASE"
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix"$UNAME_RELEASE"
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
- dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') &&
- SYSTEM_NAME=$("$dummy" "$dummyarg") &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos"$UNAME_RELEASE"
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=$(/usr/bin/uname -p)
- if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
- then
- if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
- test "$TARGET_BINARY_INTERFACE"x = x
- then
- echo m88k-dg-dgux"$UNAME_RELEASE"
- else
- echo m88k-dg-dguxbcs"$UNAME_RELEASE"
- fi
- else
- echo i586-dg-dgux"$UNAME_RELEASE"
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if test -x /usr/bin/oslevel ; then
- IBM_REV=$(/usr/bin/oslevel)
- else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
- fi
- echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[4567])
- IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }')
- if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if test -x /usr/bin/lslpp ; then
- IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc |
- awk -F: '{ print $3 }' | sed s/[0-9]*$/0/)
- else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
- fi
- echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
- case "$UNAME_MACHINE" in
- 9000/31?) HP_ARCH=m68000 ;;
- 9000/[34]??) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if test -x /usr/bin/getconf; then
- sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null)
- sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null)
- case "$sc_cpu_version" in
- 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
- 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "$sc_kernel_bits" in
- 32) HP_ARCH=hppa2.0n ;;
- 64) HP_ARCH=hppa2.0w ;;
- '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if test "$HP_ARCH" = ""; then
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy")
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if test "$HP_ARCH" = hppa2.0w
- then
- set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
- grep -q __LP64__
- then
- HP_ARCH=hppa2.0w
- else
- HP_ARCH=hppa64
- fi
- fi
- echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
- echo ia64-hp-hpux"$HPUX_REV"
- exit ;;
- 3050*:HI-UX:*:*)
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if test -x /usr/sbin/sysversion ; then
- echo "$UNAME_MACHINE"-unknown-osf1mk
- else
- echo "$UNAME_MACHINE"-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
- FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
- FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/')
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
- FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/')
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
- *:BSD/OS:*:*)
- echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
- arm:FreeBSD:*:*)
- UNAME_PROCESSOR=$(uname -p)
- set_cc_for_build
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
- else
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
- fi
- exit ;;
- *:FreeBSD:*:*)
- UNAME_PROCESSOR=$(/usr/bin/uname -p)
- case "$UNAME_PROCESSOR" in
- amd64)
- UNAME_PROCESSOR=x86_64 ;;
- i386)
- UNAME_PROCESSOR=i586 ;;
- esac
- echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
- exit ;;
- i*:CYGWIN*:*)
- echo "$UNAME_MACHINE"-pc-cygwin
- exit ;;
- *:MINGW64*:*)
- echo "$UNAME_MACHINE"-pc-mingw64
- exit ;;
- *:MINGW*:*)
- echo "$UNAME_MACHINE"-pc-mingw32
- exit ;;
- *:MSYS*:*)
- echo "$UNAME_MACHINE"-pc-msys
- exit ;;
- i*:PW*:*)
- echo "$UNAME_MACHINE"-pc-pw32
- exit ;;
- *:Interix*:*)
- case "$UNAME_MACHINE" in
- x86)
- echo i586-pc-interix"$UNAME_RELEASE"
- exit ;;
- authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix"$UNAME_RELEASE"
- exit ;;
- IA64)
- echo ia64-unknown-interix"$UNAME_RELEASE"
- exit ;;
- esac ;;
- i*:UWIN*:*)
- echo "$UNAME_MACHINE"-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-pc-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
- exit ;;
- *:Minix:*:*)
- echo "$UNAME_MACHINE"-unknown-minix
- exit ;;
- aarch64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- aarch64_be:Linux:*:*)
- UNAME_MACHINE=aarch64_be
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- alpha:Linux:*:*)
- case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arm*:Linux:*:*)
- set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- else
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
- else
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
- fi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- cris:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
- crisv32:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
- e2k:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- frv:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- hexagon:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- i*86:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
- ia64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- k1om:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- m32r*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- m68*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- mips:Linux:*:* | mips64:Linux:*:*)
- set_cc_for_build
- IS_GLIBC=0
- test x"${LIBC}" = xgnu && IS_GLIBC=1
- sed 's/^ //' << EOF > "$dummy.c"
- #undef CPU
- #undef mips
- #undef mipsel
- #undef mips64
- #undef mips64el
- #if ${IS_GLIBC} && defined(_ABI64)
- LIBCABI=gnuabi64
- #else
- #if ${IS_GLIBC} && defined(_ABIN32)
- LIBCABI=gnuabin32
- #else
- LIBCABI=${LIBC}
- #endif
- #endif
-
- #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
- CPU=mipsisa64r6
- #else
- #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
- CPU=mipsisa32r6
- #else
- #if defined(__mips64)
- CPU=mips64
- #else
- CPU=mips
- #endif
- #endif
- #endif
-
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- MIPS_ENDIAN=el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- MIPS_ENDIAN=
- #else
- MIPS_ENDIAN=
- #endif
- #endif
-EOF
- eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
- test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
- ;;
- mips64el:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- openrisc*:Linux:*:*)
- echo or1k-unknown-linux-"$LIBC"
- exit ;;
- or32:Linux:*:* | or1k*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-"$LIBC"
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-"$LIBC"
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in
- PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
- PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
- *) echo hppa-unknown-linux-"$LIBC" ;;
- esac
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-"$LIBC"
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-"$LIBC"
- exit ;;
- ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-"$LIBC"
- exit ;;
- ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-"$LIBC"
- exit ;;
- riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
- exit ;;
- sh64*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- sh*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- tile*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- vax:Linux:*:*)
- echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
- exit ;;
- x86_64:Linux:*:*)
- set_cc_for_build
- LIBCABI=$LIBC
- if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_X32 >/dev/null
- then
- LIBCABI="$LIBC"x32
- fi
- fi
- echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
- exit ;;
- xtensa*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo "$UNAME_MACHINE"-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo "$UNAME_MACHINE"-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo "$UNAME_MACHINE"-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo "$UNAME_MACHINE"-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- i*86:*DOS:*:*)
- echo "$UNAME_MACHINE"-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:*)
- UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//')
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
- else
- echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case $(/bin/uname -X | grep "^Machine") in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
- echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
- else
- echo "$UNAME_MACHINE"-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
- # Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configure will decide that
- # this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv"$UNAME_RELEASE"
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=$( (uname -p) 2>/dev/null)
- echo "$UNAME_MACHINE"-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo "$UNAME_MACHINE"-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux"$UNAME_RELEASE"
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if test -d /usr/nec; then
- echo mips-nec-sysv"$UNAME_RELEASE"
- else
- echo mips-unknown-sysv"$UNAME_RELEASE"
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-ACE:SUPER-UX:*:*)
- echo sxace-nec-superux"$UNAME_RELEASE"
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
- *:Rhapsody:*:*)
- echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
- arm64:Darwin:*:*)
- echo aarch64-apple-darwin"$UNAME_RELEASE"
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=$(uname -p)
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- if command -v xcode-select > /dev/null 2> /dev/null && \
- ! xcode-select --print-path > /dev/null 2> /dev/null ; then
- # Avoid executing cc if there is no toolchain installed as
- # cc will be a stub that puts up a graphical alert
- # prompting the user to install developer tools.
- CC_FOR_BUILD=no_compiler_found
- else
- set_cc_for_build
- fi
- if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
- fi
- elif test "$UNAME_PROCESSOR" = i386 ; then
- # uname -m returns i386 or x86_64
- UNAME_PROCESSOR=$UNAME_MACHINE
- fi
- echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=$(uname -p)
- if test "$UNAME_PROCESSOR" = x86; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NEO-*:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSR-*:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSV-*:NONSTOP_KERNEL:*:*)
- echo nsv-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSX-*:NONSTOP_KERNEL:*:*)
- echo nsx-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- # shellcheck disable=SC2154
- if test "$cputype" = 386; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo "$UNAME_MACHINE"-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux"$UNAME_RELEASE"
- exit ;;
- *:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=$( (uname -p) 2>/dev/null)
- case "$UNAME_MACHINE" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
- exit ;;
- i*86:rdos:*:*)
- echo "$UNAME_MACHINE"-pc-rdos
- exit ;;
- *:AROS:*:*)
- echo "$UNAME_MACHINE"-unknown-aros
- exit ;;
- x86_64:VMkernel:*:*)
- echo "$UNAME_MACHINE"-unknown-esx
- exit ;;
- amd64:Isilon\ OneFS:*:*)
- echo x86_64-unknown-onefs
- exit ;;
- *:Unleashed:*:*)
- echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
- exit ;;
-esac
-
-# No uname command or uname output not recognized.
-set_cc_for_build
-cat > "$dummy.c" <<EOF
-#ifdef _SEQUENT_
-#include <sys/types.h>
-#include <sys/utsname.h>
-#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#include <signal.h>
-#if defined(_SIZE_T_) || defined(SIGLOST)
-#include <sys/utsname.h>
-#endif
-#endif
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-#endif
-
-#if defined (vax)
-#if !defined (ultrix)
-#include <sys/param.h>
-#if defined (BSD)
-#if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-#else
-#if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#else
- printf ("vax-dec-bsd\n"); exit (0);
-#endif
-#endif
-#else
- printf ("vax-dec-bsd\n"); exit (0);
-#endif
-#else
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname un;
- uname (&un);
- printf ("vax-dec-ultrix%s\n", un.release); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
-#endif
-#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname *un;
- uname (&un);
- printf ("mips-dec-ultrix%s\n", un.release); exit (0);
-#else
- printf ("mips-dec-ultrix\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
-
-echo "$0: unable to guess system type" >&2
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
- mips:Linux | mips64:Linux)
- # If we got here on MIPS GNU/Linux, output extra information.
- cat >&2 <<EOF
-
-NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
-the system type. Please install a C compiler and try again.
-EOF
- ;;
-esac
-
-cat >&2 <<EOF
-
-This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite *all*
-copies of config.guess and config.sub with the latest versions from:
-
- https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
-and
- https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
-EOF
-
-year=$(echo $timestamp | sed 's,-.*,,')
-# shellcheck disable=SC2003
-if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then
- cat >&2 <<EOF
-
-If $0 has already been updated, send the following data and any
-information you think might be pertinent to config-patches@gnu.org to
-provide the necessary information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = $( (uname -m) 2>/dev/null || echo unknown)
-uname -r = $( (uname -r) 2>/dev/null || echo unknown)
-uname -s = $( (uname -s) 2>/dev/null || echo unknown)
-uname -v = $( (uname -v) 2>/dev/null || echo unknown)
-
-/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
-/bin/uname -X = $( (/bin/uname -X) 2>/dev/null)
-
-hostinfo = $( (hostinfo) 2>/dev/null)
-/bin/universe = $( (/bin/universe) 2>/dev/null)
-/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null)
-/bin/arch = $( (/bin/arch) 2>/dev/null)
-/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null)
-/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
-
-UNAME_MACHINE = "$UNAME_MACHINE"
-UNAME_RELEASE = "$UNAME_RELEASE"
-UNAME_SYSTEM = "$UNAME_SYSTEM"
-UNAME_VERSION = "$UNAME_VERSION"
-EOF
-fi
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/lib/wx/autoconf/config.sub b/lib/wx/autoconf/config.sub
deleted file mode 100755
index 63c1f1c8b5..0000000000
--- a/lib/wx/autoconf/config.sub
+++ /dev/null
@@ -1,1860 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright 1992-2021 Free Software Foundation, Inc.
-
-timestamp='2021-01-08'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=$(echo "$0" | sed -e 's,.*/,,')
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
-
-Canonicalize a configuration name.
-
-Options:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2021 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo "$1"
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Split fields of configuration type
-# shellcheck disable=SC2162
-IFS="-" read field1 field2 field3 field4 <<EOF
-$1
-EOF
-
-# Separate into logical components for further validation
-case $1 in
- *-*-*-*-*)
- echo Invalid configuration \`"$1"\': more than four components >&2
- exit 1
- ;;
- *-*-*-*)
- basic_machine=$field1-$field2
- basic_os=$field3-$field4
- ;;
- *-*-*)
- # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
- # parts
- maybe_os=$field2-$field3
- case $maybe_os in
- nto-qnx* | linux-* | uclinux-uclibc* \
- | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
- | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
- | storm-chaos* | os2-emx* | rtmk-nova*)
- basic_machine=$field1
- basic_os=$maybe_os
- ;;
- android-linux)
- basic_machine=$field1-unknown
- basic_os=linux-android
- ;;
- *)
- basic_machine=$field1-$field2
- basic_os=$field3
- ;;
- esac
- ;;
- *-*)
- # A lone config we happen to match not fitting any pattern
- case $field1-$field2 in
- decstation-3100)
- basic_machine=mips-dec
- basic_os=
- ;;
- *-*)
- # Second component is usually, but not always the OS
- case $field2 in
- # Prevent following clause from handling this valid os
- sun*os*)
- basic_machine=$field1
- basic_os=$field2
- ;;
- # Manufacturers
- dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
- | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
- | unicom* | ibm* | next | hp | isi* | apollo | altos* \
- | convergent* | ncr* | news | 32* | 3600* | 3100* \
- | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
- | ultra | tti* | harris | dolphin | highlevel | gould \
- | cbm | ns | masscomp | apple | axis | knuth | cray \
- | microblaze* | sim | cisco \
- | oki | wec | wrs | winbond)
- basic_machine=$field1-$field2
- basic_os=
- ;;
- *)
- basic_machine=$field1
- basic_os=$field2
- ;;
- esac
- ;;
- esac
- ;;
- *)
- # Convert single-component short-hands not valid as part of
- # multi-component configurations.
- case $field1 in
- 386bsd)
- basic_machine=i386-pc
- basic_os=bsd
- ;;
- a29khif)
- basic_machine=a29k-amd
- basic_os=udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- basic_os=scout
- ;;
- alliant)
- basic_machine=fx80-alliant
- basic_os=
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- basic_os=
- ;;
- am29k)
- basic_machine=a29k-none
- basic_os=bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- basic_os=sysv
- ;;
- amiga)
- basic_machine=m68k-unknown
- basic_os=
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- basic_os=amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- basic_os=sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- basic_os=sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- basic_os=bsd
- ;;
- aros)
- basic_machine=i386-pc
- basic_os=aros
- ;;
- aux)
- basic_machine=m68k-apple
- basic_os=aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- basic_os=dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- basic_os=linux
- ;;
- cegcc)
- basic_machine=arm-unknown
- basic_os=cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- basic_os=bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- basic_os=bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- basic_os=bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- basic_os=bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- basic_os=bsd
- ;;
- cray)
- basic_machine=j90-cray
- basic_os=unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- basic_os=
- ;;
- da30)
- basic_machine=m68k-da30
- basic_os=
- ;;
- decstation | pmax | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- basic_os=
- ;;
- delta88)
- basic_machine=m88k-motorola
- basic_os=sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- basic_os=dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- basic_os=msdosdjgpp
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- basic_os=ebmon
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- basic_os=ose
- ;;
- gmicro)
- basic_machine=tron-gmicro
- basic_os=sysv
- ;;
- go32)
- basic_machine=i386-pc
- basic_os=go32
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- basic_os=hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- basic_os=xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- basic_os=hms
- ;;
- harris)
- basic_machine=m88k-harris
- basic_os=sysv3
- ;;
- hp300 | hp300hpux)
- basic_machine=m68k-hp
- basic_os=hpux
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- basic_os=bsd
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- basic_os=osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- basic_os=proelf
- ;;
- i386mach)
- basic_machine=i386-mach
- basic_os=mach
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- basic_os=sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- basic_os=linux
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- basic_os=sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- basic_os=sysv
- ;;
- mingw64)
- basic_machine=x86_64-pc
- basic_os=mingw64
- ;;
- mingw32)
- basic_machine=i686-pc
- basic_os=mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- basic_os=mingw32ce
- ;;
- monitor)
- basic_machine=m68k-rom68k
- basic_os=coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- basic_os=morphos
- ;;
- moxiebox)
- basic_machine=moxie-unknown
- basic_os=moxiebox
- ;;
- msdos)
- basic_machine=i386-pc
- basic_os=msdos
- ;;
- msys)
- basic_machine=i686-pc
- basic_os=msys
- ;;
- mvs)
- basic_machine=i370-ibm
- basic_os=mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- basic_os=nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- basic_os=sysv4
- ;;
- netbsd386)
- basic_machine=i386-pc
- basic_os=netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- basic_os=linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- basic_os=newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- basic_os=newsos
- ;;
- necv70)
- basic_machine=v70-nec
- basic_os=sysv
- ;;
- nh3000)
- basic_machine=m68k-harris
- basic_os=cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- basic_os=cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- basic_os=nindy
- ;;
- mon960)
- basic_machine=i960-intel
- basic_os=mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- basic_os=nonstopux
- ;;
- os400)
- basic_machine=powerpc-ibm
- basic_os=os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- basic_os=ose
- ;;
- os68k)
- basic_machine=m68k-none
- basic_os=os68k
- ;;
- paragon)
- basic_machine=i860-intel
- basic_os=osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- basic_os=linux
- ;;
- psp)
- basic_machine=mipsallegrexel-sony
- basic_os=psp
- ;;
- pw32)
- basic_machine=i586-unknown
- basic_os=pw32
- ;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- basic_os=rdos
- ;;
- rdos32)
- basic_machine=i386-pc
- basic_os=rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- basic_os=coff
- ;;
- sa29200)
- basic_machine=a29k-amd
- basic_os=udi
- ;;
- sei)
- basic_machine=mips-sei
- basic_os=seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- basic_os=
- ;;
- sps7)
- basic_machine=m68k-bull
- basic_os=sysv2
- ;;
- st2000)
- basic_machine=m68k-tandem
- basic_os=
- ;;
- stratus)
- basic_machine=i860-stratus
- basic_os=sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- basic_os=
- ;;
- sun2os3)
- basic_machine=m68000-sun
- basic_os=sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- basic_os=sunos4
- ;;
- sun3)
- basic_machine=m68k-sun
- basic_os=
- ;;
- sun3os3)
- basic_machine=m68k-sun
- basic_os=sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- basic_os=sunos4
- ;;
- sun4)
- basic_machine=sparc-sun
- basic_os=
- ;;
- sun4os3)
- basic_machine=sparc-sun
- basic_os=sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- basic_os=sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- basic_os=solaris2
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- basic_os=
- ;;
- sv1)
- basic_machine=sv1-cray
- basic_os=unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- basic_os=dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- basic_os=unicos
- ;;
- t90)
- basic_machine=t90-cray
- basic_os=unicos
- ;;
- toad1)
- basic_machine=pdp10-xkl
- basic_os=tops20
- ;;
- tpf)
- basic_machine=s390x-ibm
- basic_os=tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- basic_os=udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- basic_os=sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- basic_os=none
- ;;
- vaxv)
- basic_machine=vax-dec
- basic_os=sysv
- ;;
- vms)
- basic_machine=vax-dec
- basic_os=vms
- ;;
- vsta)
- basic_machine=i386-pc
- basic_os=vsta
- ;;
- vxworks960)
- basic_machine=i960-wrs
- basic_os=vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- basic_os=vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- basic_os=vxworks
- ;;
- xbox)
- basic_machine=i686-pc
- basic_os=mingw32
- ;;
- ymp)
- basic_machine=ymp-cray
- basic_os=unicos
- ;;
- *)
- basic_machine=$1
- basic_os=
- ;;
- esac
- ;;
-esac
-
-# Decode 1-component or ad-hoc basic machines
-case $basic_machine in
- # Here we handle the default manufacturer of certain CPU types. It is in
- # some cases the only manufacturer, in others, it is the most popular.
- w89k)
- cpu=hppa1.1
- vendor=winbond
- ;;
- op50n)
- cpu=hppa1.1
- vendor=oki
- ;;
- op60c)
- cpu=hppa1.1
- vendor=oki
- ;;
- ibm*)
- cpu=i370
- vendor=ibm
- ;;
- orion105)
- cpu=clipper
- vendor=highlevel
- ;;
- mac | mpw | mac-mpw)
- cpu=m68k
- vendor=apple
- ;;
- pmac | pmac-mpw)
- cpu=powerpc
- vendor=apple
- ;;
-
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- cpu=m68000
- vendor=att
- ;;
- 3b*)
- cpu=we32k
- vendor=att
- ;;
- bluegene*)
- cpu=powerpc
- vendor=ibm
- basic_os=cnk
- ;;
- decsystem10* | dec10*)
- cpu=pdp10
- vendor=dec
- basic_os=tops10
- ;;
- decsystem20* | dec20*)
- cpu=pdp10
- vendor=dec
- basic_os=tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- cpu=m68k
- vendor=motorola
- ;;
- dpx2*)
- cpu=m68k
- vendor=bull
- basic_os=sysv3
- ;;
- encore | umax | mmax)
- cpu=ns32k
- vendor=encore
- ;;
- elxsi)
- cpu=elxsi
- vendor=elxsi
- basic_os=${basic_os:-bsd}
- ;;
- fx2800)
- cpu=i860
- vendor=alliant
- ;;
- genix)
- cpu=ns32k
- vendor=ns
- ;;
- h3050r* | hiux*)
- cpu=hppa1.1
- vendor=hitachi
- basic_os=hiuxwe2
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- cpu=m68000
- vendor=hp
- ;;
- hp9k3[2-9][0-9])
- cpu=m68k
- vendor=hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- cpu=hppa1.1
- vendor=hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
- ;;
- i*86v32)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=sysv32
- ;;
- i*86v4*)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=sysv4
- ;;
- i*86v)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=sysv
- ;;
- i*86sol2)
- cpu=$(echo "$1" | sed -e 's/86.*/86/')
- vendor=pc
- basic_os=solaris2
- ;;
- j90 | j90-cray)
- cpu=j90
- vendor=cray
- basic_os=${basic_os:-unicos}
- ;;
- iris | iris4d)
- cpu=mips
- vendor=sgi
- case $basic_os in
- irix*)
- ;;
- *)
- basic_os=irix4
- ;;
- esac
- ;;
- miniframe)
- cpu=m68000
- vendor=convergent
- ;;
- *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
- cpu=m68k
- vendor=atari
- basic_os=mint
- ;;
- news-3600 | risc-news)
- cpu=mips
- vendor=sony
- basic_os=newsos
- ;;
- next | m*-next)
- cpu=m68k
- vendor=next
- case $basic_os in
- openstep*)
- ;;
- nextstep*)
- ;;
- ns2*)
- basic_os=nextstep2
- ;;
- *)
- basic_os=nextstep3
- ;;
- esac
- ;;
- np1)
- cpu=np1
- vendor=gould
- ;;
- op50n-* | op60c-*)
- cpu=hppa1.1
- vendor=oki
- basic_os=proelf
- ;;
- pa-hitachi)
- cpu=hppa1.1
- vendor=hitachi
- basic_os=hiuxwe2
- ;;
- pbd)
- cpu=sparc
- vendor=tti
- ;;
- pbb)
- cpu=m68k
- vendor=tti
- ;;
- pc532)
- cpu=ns32k
- vendor=pc532
- ;;
- pn)
- cpu=pn
- vendor=gould
- ;;
- power)
- cpu=power
- vendor=ibm
- ;;
- ps2)
- cpu=i386
- vendor=ibm
- ;;
- rm[46]00)
- cpu=mips
- vendor=siemens
- ;;
- rtpc | rtpc-*)
- cpu=romp
- vendor=ibm
- ;;
- sde)
- cpu=mipsisa32
- vendor=sde
- basic_os=${basic_os:-elf}
- ;;
- simso-wrs)
- cpu=sparclite
- vendor=wrs
- basic_os=vxworks
- ;;
- tower | tower-32)
- cpu=m68k
- vendor=ncr
- ;;
- vpp*|vx|vx-*)
- cpu=f301
- vendor=fujitsu
- ;;
- w65)
- cpu=w65
- vendor=wdc
- ;;
- w89k-*)
- cpu=hppa1.1
- vendor=winbond
- basic_os=proelf
- ;;
- none)
- cpu=none
- vendor=none
- ;;
- leon|leon[3-9])
- cpu=sparc
- vendor=$basic_machine
- ;;
- leon-*|leon[3-9]-*)
- cpu=sparc
- vendor=$(echo "$basic_machine" | sed 's/-.*//')
- ;;
-
- *-*)
- # shellcheck disable=SC2162
- IFS="-" read cpu vendor <<EOF
-$basic_machine
-EOF
- ;;
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- cpu=$basic_machine
- vendor=pc
- ;;
- # These rules are duplicated from below for sake of the special case above;
- # i.e. things that normalized to x86 arches should also default to "pc"
- pc98)
- cpu=i386
- vendor=pc
- ;;
- x64 | amd64)
- cpu=x86_64
- vendor=pc
- ;;
- # Recognize the basic CPU types without company name.
- *)
- cpu=$basic_machine
- vendor=unknown
- ;;
-esac
-
-unset -v basic_machine
-
-# Decode basic machines in the full and proper CPU-Company form.
-case $cpu-$vendor in
- # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
- # some cases the only manufacturer, in others, it is the most popular.
- craynv-unknown)
- vendor=cray
- basic_os=${basic_os:-unicosmp}
- ;;
- c90-unknown | c90-cray)
- vendor=cray
- basic_os=${Basic_os:-unicos}
- ;;
- fx80-unknown)
- vendor=alliant
- ;;
- romp-unknown)
- vendor=ibm
- ;;
- mmix-unknown)
- vendor=knuth
- ;;
- microblaze-unknown | microblazeel-unknown)
- vendor=xilinx
- ;;
- rs6000-unknown)
- vendor=ibm
- ;;
- vax-unknown)
- vendor=dec
- ;;
- pdp11-unknown)
- vendor=dec
- ;;
- we32k-unknown)
- vendor=att
- ;;
- cydra-unknown)
- vendor=cydrome
- ;;
- i370-ibm*)
- vendor=ibm
- ;;
- orion-unknown)
- vendor=highlevel
- ;;
- xps-unknown | xps100-unknown)
- cpu=xps100
- vendor=honeywell
- ;;
-
- # Here we normalize CPU types with a missing or matching vendor
- dpx20-unknown | dpx20-bull)
- cpu=rs6000
- vendor=bull
- basic_os=${basic_os:-bosx}
- ;;
-
- # Here we normalize CPU types irrespective of the vendor
- amd64-*)
- cpu=x86_64
- ;;
- blackfin-*)
- cpu=bfin
- basic_os=linux
- ;;
- c54x-*)
- cpu=tic54x
- ;;
- c55x-*)
- cpu=tic55x
- ;;
- c6x-*)
- cpu=tic6x
- ;;
- e500v[12]-*)
- cpu=powerpc
- basic_os=${basic_os}"spe"
- ;;
- mips3*-*)
- cpu=mips64
- ;;
- ms1-*)
- cpu=mt
- ;;
- m68knommu-*)
- cpu=m68k
- basic_os=linux
- ;;
- m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
- cpu=s12z
- ;;
- openrisc-*)
- cpu=or32
- ;;
- parisc-*)
- cpu=hppa
- basic_os=linux
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- cpu=i586
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
- cpu=i686
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- cpu=i686
- ;;
- pentium4-*)
- cpu=i786
- ;;
- pc98-*)
- cpu=i386
- ;;
- ppc-* | ppcbe-*)
- cpu=powerpc
- ;;
- ppcle-* | powerpclittle-*)
- cpu=powerpcle
- ;;
- ppc64-*)
- cpu=powerpc64
- ;;
- ppc64le-* | powerpc64little-*)
- cpu=powerpc64le
- ;;
- sb1-*)
- cpu=mipsisa64sb1
- ;;
- sb1el-*)
- cpu=mipsisa64sb1el
- ;;
- sh5e[lb]-*)
- cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
- ;;
- spur-*)
- cpu=spur
- ;;
- strongarm-* | thumb-*)
- cpu=arm
- ;;
- tx39-*)
- cpu=mipstx39
- ;;
- tx39el-*)
- cpu=mipstx39el
- ;;
- x64-*)
- cpu=x86_64
- ;;
- xscale-* | xscalee[bl]-*)
- cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
- ;;
- arm64-*)
- cpu=aarch64
- ;;
-
- # Recognize the canonical CPU Types that limit and/or modify the
- # company names they are paired with.
- cr16-*)
- basic_os=${basic_os:-elf}
- ;;
- crisv32-* | etraxfs*-*)
- cpu=crisv32
- vendor=axis
- ;;
- cris-* | etrax*-*)
- cpu=cris
- vendor=axis
- ;;
- crx-*)
- basic_os=${basic_os:-elf}
- ;;
- neo-tandem)
- cpu=neo
- vendor=tandem
- ;;
- nse-tandem)
- cpu=nse
- vendor=tandem
- ;;
- nsr-tandem)
- cpu=nsr
- vendor=tandem
- ;;
- nsv-tandem)
- cpu=nsv
- vendor=tandem
- ;;
- nsx-tandem)
- cpu=nsx
- vendor=tandem
- ;;
- mipsallegrexel-sony)
- cpu=mipsallegrexel
- vendor=sony
- ;;
- tile*-*)
- basic_os=${basic_os:-linux-gnu}
- ;;
-
- *)
- # Recognize the canonical CPU types that are allowed with any
- # company name.
- case $cpu in
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | abacus \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
- | alphapca5[67] | alpha64pca5[67] \
- | am33_2.0 \
- | amdgcn \
- | arc | arceb \
- | arm | arm[lb]e | arme[lb] | armv* \
- | avr | avr32 \
- | asmjs \
- | ba \
- | be32 | be64 \
- | bfin | bpf | bs2000 \
- | c[123]* | c30 | [cjt]90 | c4x \
- | c8051 | clipper | craynv | csky | cydra \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | elxsi | epiphany \
- | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
- | h8300 | h8500 \
- | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i*86 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | loongarch32 | loongarch64 | loongarchx32 \
- | m32c | m32r | m32rle \
- | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
- | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
- | m88110 | m88k | maxq | mb | mcore | mep | metag \
- | microblaze | microblazeel \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64eb | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mmix \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nfp \
- | nios | nios2 | nios2eb | nios2el \
- | none | np1 | ns16k | ns32k | nvptx \
- | open8 \
- | or1k* \
- | or32 \
- | orion \
- | picochip \
- | pdp10 | pdp11 | pj | pjl | pn | power \
- | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
- | pru \
- | pyramid \
- | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
- | rl78 | romp | rs6000 | rx \
- | s390 | s390x \
- | score \
- | sh | shl \
- | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
- | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
- | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
- | spu \
- | tahoe \
- | thumbv7* \
- | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
- | tron \
- | ubicom32 \
- | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
- | vax \
- | visium \
- | w65 \
- | wasm32 | wasm64 \
- | we32k \
- | x86 | x86_64 | xc16x | xgate | xps100 \
- | xstormy16 | xtensa* \
- | ymp \
- | z8k | z80)
- ;;
-
- *)
- echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
- exit 1
- ;;
- esac
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $vendor in
- digital*)
- vendor=dec
- ;;
- commodore*)
- vendor=cbm
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if test x$basic_os != x
-then
-
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
-# set os.
-case $basic_os in
- gnu/linux*)
- kernel=linux
- os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
- ;;
- os2-emx)
- kernel=os2
- os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
- ;;
- nto-qnx*)
- kernel=nto
- os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
- ;;
- *-*)
- # shellcheck disable=SC2162
- IFS="-" read kernel os <<EOF
-$basic_os
-EOF
- ;;
- # Default OS when just kernel was specified
- nto*)
- kernel=nto
- os=$(echo $basic_os | sed -e 's|nto|qnx|')
- ;;
- linux*)
- kernel=linux
- os=$(echo $basic_os | sed -e 's|linux|gnu|')
- ;;
- *)
- kernel=
- os=$basic_os
- ;;
-esac
-
-# Now, normalize the OS (knowing we just have one component, it's not a kernel,
-# etc.)
-case $os in
- # First match some system type aliases that might get confused
- # with valid system types.
- # solaris* is a basic system type, with this one exception.
- auroraux)
- os=auroraux
- ;;
- bluegene*)
- os=cnk
- ;;
- solaris1 | solaris1.*)
- os=$(echo $os | sed -e 's|solaris1|sunos4|')
- ;;
- solaris)
- os=solaris2
- ;;
- unixware*)
- os=sysv4.2uw
- ;;
- # es1800 is here to avoid being matched by es* (a different OS)
- es1800*)
- os=ose
- ;;
- # Some version numbers need modification
- chorusos*)
- os=chorusos
- ;;
- isc)
- os=isc2.2
- ;;
- sco6)
- os=sco5v6
- ;;
- sco5)
- os=sco3.2v5
- ;;
- sco4)
- os=sco3.2v4
- ;;
- sco3.2.[4-9]*)
- os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
- ;;
- sco*v* | scout)
- # Don't match below
- ;;
- sco*)
- os=sco3.2v2
- ;;
- psos*)
- os=psos
- ;;
- qnx*)
- os=qnx
- ;;
- hiux*)
- os=hiuxwe2
- ;;
- lynx*178)
- os=lynxos178
- ;;
- lynx*5)
- os=lynxos5
- ;;
- lynxos*)
- # don't get caught up in next wildcard
- ;;
- lynx*)
- os=lynxos
- ;;
- mac[0-9]*)
- os=$(echo "$os" | sed -e 's|mac|macos|')
- ;;
- opened*)
- os=openedition
- ;;
- os400*)
- os=os400
- ;;
- sunos5*)
- os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
- ;;
- sunos6*)
- os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
- ;;
- wince*)
- os=wince
- ;;
- utek*)
- os=bsd
- ;;
- dynix*)
- os=bsd
- ;;
- acis*)
- os=aos
- ;;
- atheos*)
- os=atheos
- ;;
- syllable*)
- os=syllable
- ;;
- 386bsd)
- os=bsd
- ;;
- ctix* | uts*)
- os=sysv
- ;;
- nova*)
- os=rtmk-nova
- ;;
- ns2)
- os=nextstep2
- ;;
- # Preserve the version number of sinix5.
- sinix5.*)
- os=$(echo $os | sed -e 's|sinix|sysv|')
- ;;
- sinix*)
- os=sysv4
- ;;
- tpf*)
- os=tpf
- ;;
- triton*)
- os=sysv3
- ;;
- oss*)
- os=sysv3
- ;;
- svr4*)
- os=sysv4
- ;;
- svr3)
- os=sysv3
- ;;
- sysvr4)
- os=sysv4
- ;;
- ose*)
- os=ose
- ;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
- os=mint
- ;;
- dicos*)
- os=dicos
- ;;
- pikeos*)
- # Until real need of OS specific support for
- # particular features comes up, bare metal
- # configurations are quite functional.
- case $cpu in
- arm*)
- os=eabi
- ;;
- *)
- os=elf
- ;;
- esac
- ;;
- *)
- # No normalization, but not necessarily accepted, that comes below.
- ;;
-esac
-
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-kernel=
-case $cpu-$vendor in
- score-*)
- os=elf
- ;;
- spu-*)
- os=elf
- ;;
- *-acorn)
- os=riscix1.2
- ;;
- arm*-rebel)
- kernel=linux
- os=gnu
- ;;
- arm*-semi)
- os=aout
- ;;
- c4x-* | tic4x-*)
- os=coff
- ;;
- c8051-*)
- os=elf
- ;;
- clipper-intergraph)
- os=clix
- ;;
- hexagon-*)
- os=elf
- ;;
- tic54x-*)
- os=coff
- ;;
- tic55x-*)
- os=coff
- ;;
- tic6x-*)
- os=coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=tops20
- ;;
- pdp11-*)
- os=none
- ;;
- *-dec | vax-*)
- os=ultrix4.2
- ;;
- m68*-apollo)
- os=domain
- ;;
- i386-sun)
- os=sunos4.0.2
- ;;
- m68000-sun)
- os=sunos3
- ;;
- m68*-cisco)
- os=aout
- ;;
- mep-*)
- os=elf
- ;;
- mips*-cisco)
- os=elf
- ;;
- mips*-*)
- os=elf
- ;;
- or32-*)
- os=coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=sysv3
- ;;
- sparc-* | *-sun)
- os=sunos4.1.1
- ;;
- pru-*)
- os=elf
- ;;
- *-be)
- os=beos
- ;;
- *-ibm)
- os=aix
- ;;
- *-knuth)
- os=mmixware
- ;;
- *-wec)
- os=proelf
- ;;
- *-winbond)
- os=proelf
- ;;
- *-oki)
- os=proelf
- ;;
- *-hp)
- os=hpux
- ;;
- *-hitachi)
- os=hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=sysv
- ;;
- *-cbm)
- os=amigaos
- ;;
- *-dg)
- os=dgux
- ;;
- *-dolphin)
- os=sysv3
- ;;
- m68k-ccur)
- os=rtu
- ;;
- m88k-omron*)
- os=luna
- ;;
- *-next)
- os=nextstep
- ;;
- *-sequent)
- os=ptx
- ;;
- *-crds)
- os=unos
- ;;
- *-ns)
- os=genix
- ;;
- i370-*)
- os=mvs
- ;;
- *-gould)
- os=sysv
- ;;
- *-highlevel)
- os=bsd
- ;;
- *-encore)
- os=bsd
- ;;
- *-sgi)
- os=irix
- ;;
- *-siemens)
- os=sysv4
- ;;
- *-masscomp)
- os=rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=uxpv
- ;;
- *-rom68k)
- os=coff
- ;;
- *-*bug)
- os=coff
- ;;
- *-apple)
- os=macos
- ;;
- *-atari*)
- os=mint
- ;;
- *-wrs)
- os=vxworks
- ;;
- *)
- os=none
- ;;
-esac
-
-fi
-
-# Now, validate our (potentially fixed-up) OS.
-case $os in
- # Sometimes we do "kernel-libc", so those need to count as OSes.
- musl* | newlib* | uclibc*)
- ;;
- # Likewise for "kernel-abi"
- eabi* | gnueabi*)
- ;;
- # VxWorks passes extra cpu info in the 4th filed.
- simlinux | simwindows | spe)
- ;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
- | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
- | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
- | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
- | hiux* | abug | nacl* | netware* | windows* \
- | os9* | macos* | osx* | ios* \
- | mpw* | magic* | mmixware* | mon960* | lnews* \
- | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
- | aos* | aros* | cloudabi* | sortix* | twizzler* \
- | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
- | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
- | mirbsd* | netbsd* | dicos* | openedition* | ose* \
- | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
- | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
- | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
- | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
- | udi* | lites* | ieee* | go32* | aux* | hcos* \
- | chorusrdb* | cegcc* | glidix* \
- | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
- | midipix* | mingw32* | mingw64* | mint* \
- | uxpv* | beos* | mpeix* | udk* | moxiebox* \
- | interix* | uwin* | mks* | rhapsody* | darwin* \
- | openstep* | oskit* | conix* | pw32* | nonstopux* \
- | storm-chaos* | tops10* | tenex* | tops20* | its* \
- | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
- | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
- | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
- | skyos* | haiku* | rdos* | toppers* | drops* | es* \
- | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
- | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
- | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
- ;;
- # This one is extra strict with allowed versions
- sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- ;;
- none)
- ;;
- *)
- echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# As a final step for OS-related things, validate the OS-kernel combination
-# (given a valid OS), if there is a kernel.
-case $kernel-$os in
- linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
- ;;
- uclinux-uclibc* )
- ;;
- -dietlibc* | -newlib* | -musl* | -uclibc* )
- # These are just libc implementations, not actual OSes, and thus
- # require a kernel.
- echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
- exit 1
- ;;
- kfreebsd*-gnu* | kopensolaris*-gnu*)
- ;;
- vxworks-simlinux | vxworks-simwindows | vxworks-spe)
- ;;
- nto-qnx*)
- ;;
- os2-emx)
- ;;
- *-eabi* | *-gnueabi*)
- ;;
- -*)
- # Blank kernel with real OS is always fine.
- ;;
- *-*)
- echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
- exit 1
- ;;
-esac
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-case $vendor in
- unknown)
- case $cpu-$os in
- *-riscix*)
- vendor=acorn
- ;;
- *-sunos*)
- vendor=sun
- ;;
- *-cnk* | *-aix*)
- vendor=ibm
- ;;
- *-beos*)
- vendor=be
- ;;
- *-hpux*)
- vendor=hp
- ;;
- *-mpeix*)
- vendor=hp
- ;;
- *-hiux*)
- vendor=hitachi
- ;;
- *-unos*)
- vendor=crds
- ;;
- *-dgux*)
- vendor=dg
- ;;
- *-luna*)
- vendor=omron
- ;;
- *-genix*)
- vendor=ns
- ;;
- *-clix*)
- vendor=intergraph
- ;;
- *-mvs* | *-opened*)
- vendor=ibm
- ;;
- *-os400*)
- vendor=ibm
- ;;
- s390-* | s390x-*)
- vendor=ibm
- ;;
- *-ptx*)
- vendor=sequent
- ;;
- *-tpf*)
- vendor=ibm
- ;;
- *-vxsim* | *-vxworks* | *-windiss*)
- vendor=wrs
- ;;
- *-aux*)
- vendor=apple
- ;;
- *-hms*)
- vendor=hitachi
- ;;
- *-mpw* | *-macos*)
- vendor=apple
- ;;
- *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
- vendor=atari
- ;;
- *-vos*)
- vendor=stratus
- ;;
- esac
- ;;
-esac
-
-echo "$cpu-$vendor-${kernel:+$kernel-}$os"
-exit
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/lib/wx/autoconf/install-sh b/lib/wx/autoconf/install-sh
deleted file mode 100755
index ec298b5374..0000000000
--- a/lib/wx/autoconf/install-sh
+++ /dev/null
@@ -1,541 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2020-11-14.01; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab=' '
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-# Create dirs (including intermediate dirs) using mode 755.
-# This is like GNU 'install' as of coreutils 8.32 (2020).
-mkdir_umask=22
-
-backupsuffix=
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -p pass -p to $cpprog.
- -s $stripprog installed files.
- -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-
-By default, rm is invoked with -f; when overridden with RMPROG,
-it's up to you to specify -f if you want it.
-
-If -S is not specified, no backups are attempted.
-
-Email bug reports to bug-automake@gnu.org.
-Automake home page: https://www.gnu.org/software/automake/
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -p) cpprog="$cpprog -p";;
-
- -s) stripcmd=$stripprog;;
-
- -S) backupsuffix="$2"
- shift;;
-
- -t)
- is_target_a_directory=always
- dst_arg=$2
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- shift;;
-
- -T) is_target_a_directory=never;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
- if test -n "$dst_arg"; then
- echo "$0: target directory not allowed when installing a directory." >&2
- exit 1
- fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call 'install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- if test $# -gt 1 || test "$is_target_a_directory" = always; then
- if test ! -d "$dst_arg"; then
- echo "$0: $dst_arg: Is not a directory." >&2
- exit 1
- fi
- fi
-fi
-
-if test -z "$dir_arg"; then
- do_exit='(exit $ret); exit $ret'
- trap "ret=129; $do_exit" 1
- trap "ret=130; $do_exit" 2
- trap "ret=141; $do_exit" 13
- trap "ret=143; $do_exit" 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names problematic for 'test' and other utilities.
- case $src in
- -* | [=\(\)!]) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- # Don't chown directories that already exist.
- if test $dstdir_status = 0; then
- chowncmd=""
- fi
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
- dst=$dst_arg
-
- # If destination is a directory, append the input filename.
- if test -d "$dst"; then
- if test "$is_target_a_directory" = never; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dstbase=`basename "$src"`
- case $dst in
- */) dst=$dst$dstbase;;
- *) dst=$dst/$dstbase;;
- esac
- dstdir_status=0
- else
- dstdir=`dirname "$dst"`
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- case $dstdir in
- */) dstdirslash=$dstdir;;
- *) dstdirslash=$dstdir/;;
- esac
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- # The $RANDOM variable is not portable (e.g., dash). Use it
- # here however when possible just to lower collision chance.
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
- trap '
- ret=$?
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
- exit $ret
- ' 0
-
- # Because "mkdir -p" follows existing symlinks and we likely work
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
- # directory is successfully created first before we actually test
- # 'mkdir -p'.
- if (umask $mkdir_umask &&
- $mkdirprog $mkdir_mode "$tmpdir" &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- test_tmpdir="$tmpdir/a"
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
- fi
- trap '' 0;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- [-=\(\)!]*) prefix='./';;
- *) prefix='';;
- esac
-
- oIFS=$IFS
- IFS=/
- set -f
- set fnord $dstdir
- shift
- set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test X"$d" = X && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=${dstdirslash}_inst.$$_
- rmtmp=${dstdirslash}_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask &&
- { test -z "$stripcmd" || {
- # Create $dsttmp read-write so that cp doesn't create it read-only,
- # which would cause strip to fail.
- if test -z "$doit"; then
- : >"$dsttmp" # No need to fork-exec 'touch'.
- else
- $doit touch "$dsttmp"
- fi
- }
- } &&
- $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
- set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- set +f &&
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # If $backupsuffix is set, and the file being installed
- # already exists, attempt a backup. Don't worry if it fails,
- # e.g., if mv doesn't support -f.
- if test -n "$backupsuffix" && test -f "$dst"; then
- $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
- fi
-
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/lib/wx/config.mk.in b/lib/wx/config.mk.in
index 2fa09209d2..8b1b42b5f2 100644
--- a/lib/wx/config.mk.in
+++ b/lib/wx/config.mk.in
@@ -17,20 +17,12 @@
#
# %CopyrightEnd%
#
-INSIDE_ERLSRC = @WX_BUILDING_INSIDE_ERLSRC@
SYS_TYPE = @WXERL_SYS_TYPE@
CAN_BUILD_DRIVER = @WXERL_CAN_BUILD_DRIVER@
VSN = $(WX_VSN)
-ifeq ($(INSIDE_ERLSRC), true)
-
include $(ERL_TOP)/make/target.mk
include $(ERL_TOP)/make/$(TARGET)/otp.mk
RELSYSDIR = $(RELEASE_PATH)/lib/wx-$(VSN)
-
-else
-INSTALLDIR=@ERLANG_ROOT_DIR@/lib
-endif
-
diff --git a/lib/wx/configure b/lib/wx/configure
index d9b49ea5fe..80947ea51c 100755
--- a/lib/wx/configure
+++ b/lib/wx/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +221,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +253,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +292,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +310,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +332,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +380,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +398,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +430,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +459,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +503,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +517,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +534,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,49 +606,45 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
WXERL_SYS_TYPE
@@ -649,15 +676,12 @@ WX_CFLAGS
WX_CPPFLAGS
WX_CONFIG_PATH
ERLANG_ROOT_DIR
-WX_BUILDING_INSIDE_ERLSRC
ERLC
DEBUG_CXXFLAGS
DEBUG_CFLAGS
GL_LIBS
OBJC_CFLAGS
OBJC_CC
-EGREP
-GREP
MIXED_MINGW
MIXED_VC
CPP
@@ -673,6 +697,10 @@ LDFLAGS
CFLAGS
CC
TARGET
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -810,8 +838,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -852,9 +878,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -878,9 +904,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1091,9 +1117,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1107,9 +1133,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1153,9 +1179,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1171,7 +1197,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1235,7 +1261,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1353,6 +1379,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1410,9 +1437,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1440,7 +1467,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1448,7 +1476,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1458,9 +1486,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1477,14 +1505,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1492,14 +1520,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1515,14 +1544,14 @@ fi
ac_fn_cxx_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1530,14 +1559,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_cxx_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1559,7 +1589,7 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1567,14 +1597,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } > conftest.i && {
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
test ! -s conftest.err
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1586,8 +1617,8 @@ fi
# ac_fn_c_try_run LINENO
# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
ac_fn_c_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1597,25 +1628,26 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
@@ -1640,7 +1672,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0;
@@ -1650,14 +1682,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=0 ac_mid=0
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1667,9 +1700,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid; break
-else
+else $as_nop
as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
@@ -1677,14 +1711,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0;
@@ -1694,14 +1728,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=-1 ac_mid=-1
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0;
@@ -1711,9 +1746,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=$ac_mid; break
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
@@ -1721,14 +1757,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
ac_lo= ac_hi=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -1736,7 +1772,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -1746,12 +1782,13 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
case $ac_lo in #((
?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -1761,12 +1798,12 @@ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.val", "w");
@@ -1794,9 +1831,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
ac_retval=1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -1816,131 +1854,46 @@ rm -f conftest.val
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
# ac_fn_cxx_try_link LINENO
# -------------------------
# Try to link conftest.$ac_ext, and return whether this succeeded.
ac_fn_cxx_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1948,17 +1901,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_cxx_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1980,17 +1934,18 @@ fi
ac_fn_c_check_type ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
eval "$3=no"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof ($2))
return 0;
@@ -1998,12 +1953,13 @@ if (sizeof ($2))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
if (sizeof (($2)))
return 0;
@@ -2011,18 +1967,19 @@ if (sizeof (($2)))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
eval "$3=yes"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_type
@@ -2034,37 +1991,59 @@ $as_echo "$ac_res" >&6; }
ac_fn_cxx_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_cxx_check_header_compile
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -2097,8 +2076,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2133,7 +2116,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2168,11 +2151,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2183,8 +2168,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2208,7 +2193,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2216,14 +2201,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2231,15 +2216,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2247,8 +2232,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2262,63 +2247,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2328,19 +2298,650 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+# Test code for whether the C++ compiler supports C++98 (global declarations)
+ac_cxx_conftest_cxx98_globals='
+// Does the compiler advertise C++98 conformance?
+#if !defined __cplusplus || __cplusplus < 199711L
+# error "Compiler does not advertise C++98 conformance"
+#endif
+
+// These inclusions are to reject old compilers that
+// lack the unsuffixed header files.
+#include <cstdlib>
+#include <exception>
+
+// <cassert> and <cstring> are *not* freestanding headers in C++98.
+extern void assert (int);
+namespace std {
+ extern int strcmp (const char *, const char *);
+}
+
+// Namespaces, exceptions, and templates were all added after "C++ 2.0".
+using std::exception;
+using std::strcmp;
+
+namespace {
+
+void test_exception_syntax()
+{
+ try {
+ throw "test";
+ } catch (const char *s) {
+ // Extra parentheses suppress a warning when building autoconf itself,
+ // due to lint rules shared with more typical C programs.
+ assert (!(strcmp) (s, "test"));
+ }
+}
+
+template <typename T> struct test_template
+{
+ T const val;
+ explicit test_template(T t) : val(t) {}
+ template <typename U> T add(U u) { return static_cast<T>(u) + val; }
+};
+
+} // anonymous namespace
+'
+
+# Test code for whether the C++ compiler supports C++98 (body of main)
+ac_cxx_conftest_cxx98_main='
+ assert (argc);
+ assert (! argv[0]);
+{
+ test_exception_syntax ();
+ test_template<double> tt (2.0);
+ assert (tt.add (4) == 6.0);
+ assert (true && !false);
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (global declarations)
+ac_cxx_conftest_cxx11_globals='
+// Does the compiler advertise C++ 2011 conformance?
+#if !defined __cplusplus || __cplusplus < 201103L
+# error "Compiler does not advertise C++11 conformance"
+#endif
+
+namespace cxx11test
+{
+ constexpr int get_val() { return 20; }
+
+ struct testinit
+ {
+ int i;
+ double d;
+ };
+
+ class delegate
+ {
+ public:
+ delegate(int n) : n(n) {}
+ delegate(): delegate(2354) {}
+
+ virtual int getval() { return this->n; };
+ protected:
+ int n;
+ };
+
+ class overridden : public delegate
+ {
+ public:
+ overridden(int n): delegate(n) {}
+ virtual int getval() override final { return this->n * 2; }
+ };
+
+ class nocopy
+ {
+ public:
+ nocopy(int i): i(i) {}
+ nocopy() = default;
+ nocopy(const nocopy&) = delete;
+ nocopy & operator=(const nocopy&) = delete;
+ private:
+ int i;
+ };
+
+ // for testing lambda expressions
+ template <typename Ret, typename Fn> Ret eval(Fn f, Ret v)
+ {
+ return f(v);
+ }
+
+ // for testing variadic templates and trailing return types
+ template <typename V> auto sum(V first) -> V
+ {
+ return first;
+ }
+ template <typename V, typename... Args> auto sum(V first, Args... rest) -> V
+ {
+ return first + sum(rest...);
+ }
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (body of main)
+ac_cxx_conftest_cxx11_main='
+{
+ // Test auto and decltype
+ auto a1 = 6538;
+ auto a2 = 48573953.4;
+ auto a3 = "String literal";
+
+ int total = 0;
+ for (auto i = a3; *i; ++i) { total += *i; }
+
+ decltype(a2) a4 = 34895.034;
+}
+{
+ // Test constexpr
+ short sa[cxx11test::get_val()] = { 0 };
+}
+{
+ // Test initializer lists
+ cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+ // Test range-based for
+ int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3,
+ 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+ for (auto &x : array) { x += 23; }
+}
+{
+ // Test lambda expressions
+ using cxx11test::eval;
+ assert (eval ([](int x) { return x*2; }, 21) == 42);
+ double d = 2.0;
+ assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0);
+ assert (d == 5.0);
+ assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0);
+ assert (d == 5.0);
+}
+{
+ // Test use of variadic templates
+ using cxx11test::sum;
+ auto a = sum(1);
+ auto b = sum(1, 2);
+ auto c = sum(1.0, 2.0, 3.0);
+}
+{
+ // Test constructor delegation
+ cxx11test::delegate d1;
+ cxx11test::delegate d2();
+ cxx11test::delegate d3(45);
+}
+{
+ // Test override and final
+ cxx11test::overridden o1(55464);
+}
+{
+ // Test nullptr
+ char *c = nullptr;
+}
+{
+ // Test template brackets
+ test_template<::test_template<int>> v(test_template<int>(12));
+}
+{
+ // Unicode literals
+ char const *utf8 = u8"UTF-8 string \u2500";
+ char16_t const *utf16 = u"UTF-8 string \u2500";
+ char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+'
+
+# Test code for whether the C compiler supports C++11 (complete).
+ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals}
+${ac_cxx_conftest_cxx11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ ${ac_cxx_conftest_cxx11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C++98 (complete).
+ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals}
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2351,12 +2952,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2365,24 +2966,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2392,11 +2993,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2410,110 +3012,138 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_aux_dir=
-for ac_dir in $srcdir/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in $srcdir/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-## Delete previous failed configure results
-if test -f ./CONF_INFO; then
- rm ./CONF_INFO
-fi
-if test -z "$ERL_TOP" || test ! -d $ERL_TOP ; then
- as_fn_error $? "ERL_TOP is not set" "$LINENO" 5
-else
- erl_top=${ERL_TOP}
- ac_aux_dir=
-for ac_dir in $erl_top/erts/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in $erl_top/erts/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
- WX_BUILDING_INSIDE_ERLSRC=true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Delete previous failed configure results
+if test -f ./CONF_INFO; then
+ rm ./CONF_INFO
fi
+
+
# Check whether --with-wx was given.
-if test "${with_wx+set}" = set; then :
+if test ${with_wx+y}
+then :
withval=$with_wx;
fi
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2532,21 +3162,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2565,10 +3196,108 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=win32
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
fi
+
case $host_os in
mingw32)
if test "X$host" = "X"; then
@@ -2582,6 +3311,15 @@ esac
TARGET=$host
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2590,11 +3328,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2602,11 +3341,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2617,11 +3360,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2630,11 +3373,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2642,11 +3386,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2657,11 +3405,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2669,8 +3417,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2683,11 +3431,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2695,11 +3444,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2710,11 +3463,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2723,11 +3476,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2736,15 +3490,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2760,18 +3518,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2782,11 +3540,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2794,11 +3553,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2809,11 +3572,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2826,11 +3589,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2838,11 +3602,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2853,11 +3621,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2869,8 +3637,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2878,25 +3646,129 @@ esac
fi
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -2906,7 +3778,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -2914,7 +3786,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -2926,9 +3798,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -2949,11 +3821,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -2970,7 +3843,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -2986,44 +3859,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3037,15 +3912,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -3054,7 +3929,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -3066,8 +3941,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -3075,10 +3950,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -3086,39 +3961,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3132,11 +4008,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -3145,31 +4022,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3179,29 +4057,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3210,57 +4092,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3275,94 +4160,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3371,6 +4306,12 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3381,15 +4322,16 @@ if test -z "$CXX"; then
CXX=$CCC
else
if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
@@ -3397,11 +4339,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3412,11 +4358,11 @@ fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+printf "%s\n" "$CXX" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3425,15 +4371,16 @@ fi
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CXX"; then
ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
else
@@ -3441,11 +4388,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3456,11 +4407,11 @@ fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+printf "%s\n" "$ac_ct_CXX" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3472,8 +4423,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CXX=$ac_ct_CXX
@@ -3483,7 +4434,7 @@ fi
fi
fi
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
set X $ac_compile
ac_compiler=$2
for ac_option in --version -v -V -qversion; do
@@ -3493,7 +4444,7 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -3503,20 +4454,21 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5
+printf %s "checking whether the compiler supports GNU C++... " >&6; }
+if test ${ac_cv_cxx_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3526,29 +4478,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GXX=yes
else
GXX=
fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_test_CXXFLAGS=${CXXFLAGS+y}
ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+printf %s "checking whether $CXX accepts -g... " >&6; }
+if test ${ac_cv_prog_cxx_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
ac_cxx_werror_flag=yes
ac_cv_prog_cxx_g=no
@@ -3557,57 +4513,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
ac_cv_prog_cxx_g=yes
-else
+else $as_nop
CXXFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
CXXFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
ac_cv_prog_cxx_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+printf "%s\n" "$ac_cv_prog_cxx_g" >&6; }
+if test $ac_test_CXXFLAGS; then
CXXFLAGS=$ac_save_CXXFLAGS
elif test $ac_cv_prog_cxx_g = yes; then
if test "$GXX" = yes; then
@@ -3622,6 +4581,100 @@ else
CXXFLAGS=
fi
fi
+ac_prog_cxx_stdcxx=no
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
+printf %s "checking for $CXX option to enable C++11 features... " >&6; }
+if test ${ac_cv_prog_cxx_11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_11=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx11_program
+_ACEOF
+for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA
+do
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+fi
+
+if test "x$ac_cv_prog_cxx_cxx11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx11"
+fi
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+ ac_prog_cxx_stdcxx=cxx11
+fi
+fi
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
+printf %s "checking for $CXX option to enable C++98 features... " >&6; }
+if test ${ac_cv_prog_cxx_98+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_98=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx98_program
+_ACEOF
+for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA
+do
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx98=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx98" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+fi
+
+if test "x$ac_cv_prog_cxx_cxx98" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx98" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx98"
+fi
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98
+ ac_prog_cxx_stdcxx=cxx98
+fi
+fi
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3631,11 +4684,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
@@ -3643,11 +4697,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3658,11 +4716,11 @@ fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3671,11 +4729,12 @@ if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
@@ -3683,11 +4742,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3698,11 +4761,11 @@ fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_RANLIB" = x; then
@@ -3710,8 +4773,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
RANLIB=$ac_ct_RANLIB
@@ -3725,40 +4788,36 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
do
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
Syntax error
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
-else
+else $as_nop
# Broken: fails on valid input.
continue
fi
@@ -3770,10 +4829,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
# Broken: success on invalid input.
continue
-else
+else $as_nop
# Passes both tests.
ac_preproc_ok=:
break
@@ -3783,7 +4843,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
break
fi
@@ -3795,29 +4856,24 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
Syntax error
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
-else
+else $as_nop
# Broken: fails on valid input.
continue
fi
@@ -3829,10 +4885,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
# Broken: success on invalid input.
continue
-else
+else $as_nop
# Passes both tests.
ac_preproc_ok=:
break
@@ -3842,11 +4899,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -3871,19 +4929,20 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#error "broken C++"
#endif
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
-else
+else $as_nop
CXX=;
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3896,15 +4955,15 @@ if test "X$CXX" = X ; then
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "Can not find C++ compiler" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can not find C++ compiler" >&5
-$as_echo "$as_me: WARNING: Can not find C++ compiler" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Can not find C++ compiler" >&5
+printf "%s\n" "$as_me: WARNING: Can not find C++ compiler" >&2;}
fi
fi
WXERL_CAN_BUILD_DRIVER=false
-{ $as_echo "$as_me:${as_lineno-$LINENO}: Building for $host_os" >&5
-$as_echo "$as_me: Building for $host_os" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Building for $host_os" >&5
+printf "%s\n" "$as_me: Building for $host_os" >&6;}
WXERL_CAN_BUILD_DRIVER=true
@@ -3918,111 +4977,111 @@ MIXED_VSL=no
MIXED_VC=no
MIXED_MINGW=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
-$as_echo_n "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
+printf %s "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
-$as_echo "MSYS and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
+printf "%s\n" "MSYS and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
-$as_echo "Cygwin and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
+printf "%s\n" "Cygwin and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /bin/wslpath; then
CFLAGS="$CFLAGS -O2"
MIXED_WSL=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
-$as_echo "WSL and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
+printf "%s\n" "WSL and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not within any known env" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$MIXED_MSYS" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
-$as_echo_n "checking for mixed cygwin and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
+printf %s "checking for mixed cygwin and native MinGW environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with cygwin" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
-$as_echo_n "checking for mixed MSYS and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
+printf %s "checking for mixed MSYS and native MinGW environment... " >&6; }
if test "x$GCC" = x"yes"; then
if test -x /usr/bin/msys-=.0.dll; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with msys" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
-$as_echo_n "checking if we mix cygwin with any native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
+printf %s "checking if we mix cygwin with any native compiler... " >&6; }
if test "X$MIXED_CYGWIN" = "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
-$as_echo_n "checking if we mix msys with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
+printf %s "checking if we mix msys with another native compiler... " >&6; }
if test "X$MIXED_MSYS" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
-$as_echo_n "checking if we mix WSL with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
+printf %s "checking if we mix WSL with another native compiler... " >&6; }
if test "X$MIXED_WSL" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
@@ -4035,281 +5094,52 @@ if test X"$MIXED_VC" = X"yes" ; then
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
+done
-fi
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-fi
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
fi
-
-done
-
-
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -4318,14 +5148,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
@@ -4334,44 +5162,46 @@ PTHR_CFLAGS="-D_THREAD_SAFE -D_REENTRANT"
OBJC_CC=$CC
OBJC_CFLAGS=""
CXXFLAGS=""
-case $host_os in
- darwin*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking wxWidgets for min version:" >&5
-$as_echo_n "checking Checking wxWidgets for min version:... " >&6; }
+case $host_os in #(
+ darwin*) :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Checking wxWidgets for min version:" >&5
+printf %s "checking Checking wxWidgets for min version:... " >&6; }
WX_CC=`wx-config --cc`
MAC_MIN=`echo "$WX_CC" | sed 's/^[^ ]*\ *//'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAC_MIN" >&5
-$as_echo "$MAC_MIN" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAC_MIN" >&5
+printf "%s\n" "$MAC_MIN" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -ObjC" >&5
-$as_echo_n "checking if compiler accepts -ObjC... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -ObjC" >&5
+printf %s "checking if compiler accepts -ObjC... " >&6; }
CFLAGS="$CFLAGS -ObjC"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
accept_objc_flag=true
-else
+else $as_nop
accept_objc_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test "X$accept_objc_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
C_ONLY_FLAGS="-ObjC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Cocoa compliant Objective C compiler" >&5
-$as_echo_n "checking for a Cocoa compliant Objective C compiler... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a Cocoa compliant Objective C compiler" >&5
+printf %s "checking for a Cocoa compliant Objective C compiler... " >&6; }
SEARCHFOR=""
SEARCHFORXX=""
save_IFS=$IFS
@@ -4400,20 +5230,20 @@ $as_echo_n "checking for a Cocoa compliant Objective C compiler... " >&6; }
done
IFS=$save_IFS
if test X$APPLE_CC = X -o X$APPLE_CXX = X; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
echo "Can not find compiler to compile Cocoa applications" >> ./CONF_INFO
WXERL_CAN_BUILD_DRIVER=false
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "Can not find compiler to compile Cocoa applications" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can not find compiler to compile Cocoa applications" >&5
-$as_echo "$as_me: WARNING: Can not find compiler to compile Cocoa applications" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Can not find compiler to compile Cocoa applications" >&5
+printf "%s\n" "$as_me: WARNING: Can not find compiler to compile Cocoa applications" >&2;}
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $APPLE_CC ($APPLE_CXX)" >&5
-$as_echo "$APPLE_CC ($APPLE_CXX)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $APPLE_CC ($APPLE_CXX)" >&5
+printf "%s\n" "$APPLE_CC ($APPLE_CXX)" >&6; }
CC=$APPLE_CC
CXX=$APPLE_CXX
#CXXFLAGS="-x c++ $CXXFLAGS"
@@ -4423,22 +5253,25 @@ $as_echo "$APPLE_CC ($APPLE_CXX)" >&6; }
fi
CFLAGS="$USER_CFLAGS $MAC_MIN -Wno-deprecated-declarations"
CPPFLAGS="$CPPFLAGS -D_MACOSX $PTHR_CFLAGS"
- ;;
- mingw32)
+ ;; #(
+ mingw32) :
+
CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0600 -D_WINDOWS -D_UNICODE -DUNICODE"
CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Reverting to 32-bit time_t" >&5
-$as_echo "$as_me: WARNING: Reverting to 32-bit time_t" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Reverting to 32-bit time_t" >&5
+printf "%s\n" "$as_me: WARNING: Reverting to 32-bit time_t" >&2;}
CPPFLAGS="$CPPFLAGS -D_USE_32BIT_TIME_T"
- ;;
- win32)
+ ;; #(
+ win32) :
+
CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0600 -D_WINDOWS -D_UNICODE -DUNICODE"
CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
- ;;
- *)
+ ;; #(
+ *) :
+
CFLAGS="$CFLAGS -Wno-deprecated-declarations"
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE $PTHR_CFLAGS"
- ;;
+ ;;
esac
@@ -4489,198 +5322,202 @@ case $host_os in
esac
-if test "x$GCC" = xyes -a X"$host_os" != X"win32" ; then
+if test "x$GCC" = xyes -a X"$host_os" != X"win32"
+then :
+
CXXNOOPT="-O1"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-move-loop-invariants to CXXNOOPT (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -fno-move-loop-invariants to CXXNOOPT (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-move-loop-invariants to CXXNOOPT (via CFLAGS)" >&5
+printf %s "checking if we can add -fno-move-loop-invariants to CXXNOOPT (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fno-move-loop-invariants $CXXNOOPT";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CXXNOOPT="-fno-move-loop-invariants $CXXNOOPT"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-var-tracking-assignments to CXXNOOPT (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -fno-var-tracking-assignments to CXXNOOPT (via CFLAGS)... " >&6; }
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-var-tracking-assignments to CXXNOOPT (via CFLAGS)" >&5
+printf %s "checking if we can add -fno-var-tracking-assignments to CXXNOOPT (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fno-var-tracking-assignments $CXXNOOPT";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CXXNOOPT="-fno-var-tracking-assignments $CXXNOOPT"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-if test X"$host_os" != X"win32" ; then
- for ac_header in GL/gl.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_gl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GL_GL_H 1
-_ACEOF
+fi
-else
- for ac_header in OpenGL/gl.h
+
+if test X"$host_os" != X"win32"
+then :
+
+ for ac_header in GL/gl.h
do :
- ac_fn_c_check_header_mongrel "$LINENO" "OpenGL/gl.h" "ac_cv_header_OpenGL_gl_h" "$ac_includes_default"
-if test "x$ac_cv_header_OpenGL_gl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_OPENGL_GL_H 1
-_ACEOF
+ ac_fn_c_check_header_compile "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
+if test "x$ac_cv_header_GL_gl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GL_GL_H 1" >>confdefs.h
-fi
+else $as_nop
+ ac_fn_c_check_header_compile "$LINENO" "OpenGL/gl.h" "ac_cv_header_OpenGL_gl_h" "$ac_includes_default"
+if test "x$ac_cv_header_OpenGL_gl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_OPENGL_GL_H 1" >>confdefs.h
-done
+fi
fi
done
+ if test X"$ac_cv_header_GL_gl_h" != Xyes && test X"$ac_cv_header_OpenGL_gl_h" != Xyes
+then :
- if test X"$ac_cv_header_GL_gl_h" != Xyes &&
- test X"$ac_cv_header_OpenGL_gl_h" != Xyes
- then
saved_CPPFLAGS="$CPPFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: Checking for OpenGL headers in /usr/X11R6" >&5
-$as_echo "$as_me: Checking for OpenGL headers in /usr/X11R6" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking for OpenGL headers in /usr/X11R6" >&5
+printf "%s\n" "$as_me: Checking for OpenGL headers in /usr/X11R6" >&6;}
CPPFLAGS="-isystem /usr/X11R6/include $CPPFLAGS"
$as_unset ac_cv_header_GL_gl_h
- for ac_header in GL/gl.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_gl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GL_GL_H 1
-_ACEOF
+ ac_fn_c_check_header_compile "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
+if test "x$ac_cv_header_GL_gl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GL_GL_H 1" >>confdefs.h
fi
-done
+ if test X"$ac_cv_header_GL_gl_h" != Xyes
+then :
- if test X"$ac_cv_header_GL_gl_h" != Xyes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: Checking for OpenGL headers in /usr/local" >&5
-$as_echo "$as_me: Checking for OpenGL headers in /usr/local" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking for OpenGL headers in /usr/local" >&5
+printf "%s\n" "$as_me: Checking for OpenGL headers in /usr/local" >&6;}
CPPFLAGS="-isystem /usr/local/include $saved_CPPFLAGS"
$as_unset ac_cv_header_GL_gl_h
- for ac_header in GL/gl.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_gl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GL_GL_H 1
-_ACEOF
+ ac_fn_c_check_header_compile "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
+if test "x$ac_cv_header_GL_gl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GL_GL_H 1" >>confdefs.h
fi
-done
+ if test X"$ac_cv_header_GL_gl_h" != Xyes
+then :
- if test X"$ac_cv_header_GL_gl_h" != Xyes ; then
echo "No OpenGL headers found, wx will NOT be usable" >> ./CONF_INFO
WXERL_CAN_BUILD_DRIVER=false
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "No OpenGL headers found, wx will NOT be usable" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No OpenGL headers found, wx will NOT be usable" >&5
-$as_echo "$as_me: WARNING: No OpenGL headers found, wx will NOT be usable" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: No OpenGL headers found, wx will NOT be usable" >&5
+printf "%s\n" "$as_me: WARNING: No OpenGL headers found, wx will NOT be usable" >&2;}
fi
CPPFLAGS="$saved_CPPFLAGS"
- else
+
+else $as_nop
+
GL_LIBS="-L/usr/local/lib $GL_LIBS"
- fi
- else
+
+fi
+
+else $as_nop
+
GL_LIBS="-L/usr/X11R6/lib $GL_LIBS"
- fi
- fi
-else
- for ac_header in gl/gl.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "gl/gl.h" "ac_cv_header_gl_gl_h" "#include <windows.h>
+
+fi
+
+fi
+
+else $as_nop
+
+ ac_fn_c_check_header_compile "$LINENO" "gl/gl.h" "ac_cv_header_gl_gl_h" "#include <windows.h>
"
-if test "x$ac_cv_header_gl_gl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GL_GL_H 1
-_ACEOF
+if test "x$ac_cv_header_gl_gl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GL_GL_H 1" >>confdefs.h
fi
-done
fi
-if test X"$host_os" != X"win32" ; then
- for ac_header in GL/glu.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_glu_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GL_GLU_H 1
-_ACEOF
+if test X"$host_os" != X"win32"
+then :
-else
- for ac_header in OpenGL/glu.h
+ for ac_header in GL/glu.h
do :
- ac_fn_c_check_header_mongrel "$LINENO" "OpenGL/glu.h" "ac_cv_header_OpenGL_glu_h" "$ac_includes_default"
-if test "x$ac_cv_header_OpenGL_glu_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_OPENGL_GLU_H 1
-_ACEOF
+ ac_fn_c_check_header_compile "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" "$ac_includes_default"
+if test "x$ac_cv_header_GL_glu_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GL_GLU_H 1" >>confdefs.h
-fi
+else $as_nop
+ ac_fn_c_check_header_compile "$LINENO" "OpenGL/glu.h" "ac_cv_header_OpenGL_glu_h" "$ac_includes_default"
+if test "x$ac_cv_header_OpenGL_glu_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_OPENGL_GLU_H 1" >>confdefs.h
-done
+fi
fi
done
-
if test X"$ac_cv_header_GL_glu_h" != Xyes &&
test X"$ac_cv_header_OpenGL_glu_h" != Xyes
then
@@ -4689,24 +5526,22 @@ done
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "No GLU headers found, wx will NOT be usable" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No GLU headers found, wx will NOT be usable" >&5
-$as_echo "$as_me: WARNING: No GLU headers found, wx will NOT be usable" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: No GLU headers found, wx will NOT be usable" >&5
+printf "%s\n" "$as_me: WARNING: No GLU headers found, wx will NOT be usable" >&2;}
fi
fi
-else
- for ac_header in gl/glu.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "gl/glu.h" "ac_cv_header_gl_glu_h" "#include <windows.h>
+
+else $as_nop
+
+ ac_fn_c_check_header_compile "$LINENO" "gl/glu.h" "ac_cv_header_gl_glu_h" "#include <windows.h>
"
-if test "x$ac_cv_header_gl_glu_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GL_GLU_H 1
-_ACEOF
+if test "x$ac_cv_header_gl_glu_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GL_GLU_H 1" >>confdefs.h
fi
-done
fi
@@ -4729,18 +5564,22 @@ ERLANG_ROOT_DIR=$ERL_TOP
+if test "$cross_compiling" = "yes"
+then :
-if test "$cross_compiling" = "yes"; then
echo "Cross compilation of the wx driver is not supported yet, wx will NOT be usable" >> ./CONF_INFO
WXERL_CAN_BUILD_DRIVER=false
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "Cross compilation of the wx driver is not supported yet, wx will NOT be usable" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cross compilation of the wx driver is not supported yet, wx will NOT be usable" >&5
-$as_echo "$as_me: WARNING: Cross compilation of the wx driver is not supported yet, wx will NOT be usable" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cross compilation of the wx driver is not supported yet, wx will NOT be usable" >&5
+printf "%s\n" "$as_me: WARNING: Cross compilation of the wx driver is not supported yet, wx will NOT be usable" >&2;}
fi
-elif test X"$MIXED_VC" = X"no"; then
+
+elif test X"$MIXED_VC" = X"no"
+then :
+
@@ -4794,30 +5633,34 @@ elif test X"$MIXED_VC" = X"no"; then
# Check whether --with-wxdir was given.
-if test "${with_wxdir+set}" = set; then :
+if test ${with_wxdir+y}
+then :
withval=$with_wxdir; wx_config_name="$withval/wx-config"
wx_config_args="--inplace"
fi
# Check whether --with-wx-config was given.
-if test "${with_wx_config+set}" = set; then :
+if test ${with_wx_config+y}
+then :
withval=$with_wx_config; wx_config_name="$withval"
fi
# Check whether --with-wx-prefix was given.
-if test "${with_wx_prefix+set}" = set; then :
+if test ${with_wx_prefix+y}
+then :
withval=$with_wx_prefix; wx_config_prefix="$withval"
-else
+else $as_nop
wx_config_prefix=""
fi
# Check whether --with-wx-exec-prefix was given.
-if test "${with_wx_exec_prefix+set}" = set; then :
+if test ${with_wx_exec_prefix+y}
+then :
withval=$with_wx_exec_prefix; wx_config_exec_prefix="$withval"
-else
+else $as_nop
wx_config_exec_prefix=""
fi
@@ -4846,19 +5689,20 @@ fi
fi
if test -x "$WX_CONFIG_NAME" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wx-config" >&5
-$as_echo_n "checking for wx-config... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wx-config" >&5
+printf %s "checking for wx-config... " >&6; }
WX_CONFIG_PATH="$WX_CONFIG_NAME"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
-$as_echo "$WX_CONFIG_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
+printf "%s\n" "$WX_CONFIG_PATH" >&6; }
else
# Extract the first word of "$WX_CONFIG_NAME", so it can be a program name with args.
set dummy $WX_CONFIG_NAME; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_WX_CONFIG_PATH+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_WX_CONFIG_PATH+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $WX_CONFIG_PATH in
[\\/]* | ?:[\\/]*)
ac_cv_path_WX_CONFIG_PATH="$WX_CONFIG_PATH" # Let the user override the test with a path.
@@ -4869,11 +5713,15 @@ as_dummy=""$WX_LOOKUP_PATH:$PATH""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_WX_CONFIG_PATH="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_WX_CONFIG_PATH="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4886,11 +5734,11 @@ esac
fi
WX_CONFIG_PATH=$ac_cv_path_WX_CONFIG_PATH
if test -n "$WX_CONFIG_PATH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
-$as_echo "$WX_CONFIG_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
+printf "%s\n" "$WX_CONFIG_PATH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4901,11 +5749,11 @@ fi
min_wx_version=$reqwx
if test -z "--unicode" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version" >&5
-$as_echo_n "checking for wxWidgets version >= $min_wx_version... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version" >&5
+printf %s "checking for wxWidgets version >= $min_wx_version... " >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version (--unicode)" >&5
-$as_echo_n "checking for wxWidgets version >= $min_wx_version (--unicode)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version (--unicode)" >&5
+printf %s "checking for wxWidgets version >= $min_wx_version (--unicode)... " >&6; }
fi
WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args --unicode"
@@ -4947,19 +5795,19 @@ $as_echo_n "checking for wxWidgets version >= $min_wx_version (--unicode)... " >
if test -n "$wx_ver_ok"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $WX_VERSION)" >&5
-$as_echo "yes (version $WX_VERSION)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (version $WX_VERSION)" >&5
+printf "%s\n" "yes (version $WX_VERSION)" >&6; }
WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs core,base,html,webview`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets static library" >&5
-$as_echo_n "checking for wxWidgets static library... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets static library" >&5
+printf %s "checking for wxWidgets static library... " >&6; }
WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs core,base,html,webview 2>/dev/null`
if test "x$WX_LIBS_STATIC" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
fi
wx_has_cppflags=""
@@ -5016,11 +5864,11 @@ $as_echo "yes" >&6; }
else
if test "x$WX_VERSION" = x; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (version $WX_VERSION is not new enough)" >&5
-$as_echo "no (version $WX_VERSION is not new enough)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (version $WX_VERSION is not new enough)" >&5
+printf "%s\n" "no (version $WX_VERSION is not new enough)" >&6; }
fi
WX_CFLAGS=""
@@ -5053,8 +5901,8 @@ $as_echo "no (version $WX_VERSION is not new enough)" >&6; }
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "$wx_error_message" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $wx_error_message" >&5
-$as_echo "$as_me: WARNING: $wx_error_message" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $wx_error_message" >&5
+printf "%s\n" "$as_me: WARNING: $wx_error_message" >&2;}
fi
@@ -5090,8 +5938,8 @@ $as_echo "$as_me: WARNING: $wx_error_message" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxwidgets webview" >&5
-$as_echo_n "checking for wxwidgets webview... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxwidgets webview" >&5
+printf %s "checking for wxwidgets webview... " >&6; }
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5110,7 +5958,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
#include "wx/webview.h"
int
-main ()
+main (void)
{
wxWebView::New();
@@ -5119,12 +5967,13 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
+if ac_fn_cxx_try_link "$LINENO"
+then :
HAVE_WEBVIEW_SUPPORT=yes
-else
+else $as_nop
HAVE_WEBVIEW_SUPPORT=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CXXFLAGS=$saved_CXXFLAGS
@@ -5135,15 +5984,15 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_WEBVIEW_SUPPORT" >&5
-$as_echo "$HAVE_WEBVIEW_SUPPORT" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAVE_WEBVIEW_SUPPORT" >&5
+printf "%s\n" "$HAVE_WEBVIEW_SUPPORT" >&6; }
if test X"$HAVE_WEBVIEW_SUPPORT" != X"yes" ; then
WXELIBS=stc,xrc,html,adv,xml,core,base,gl,aui
echo "wxWidgets was not compiled with --enable-webview or wxWebView developer package is not installed, wxWebView will NOT be available" >> ./CONF_INFO
else
WXELIBS=stc,xrc,html,adv,xml,core,base,gl,aui,webview
- $as_echo "#define WXE_WEBVIEW 1" >>confdefs.h
+ printf "%s\n" "#define WXE_WEBVIEW 1" >>confdefs.h
fi
@@ -5171,19 +6020,20 @@ $as_echo "$HAVE_WEBVIEW_SUPPORT" >&6; }
fi
if test -x "$WX_CONFIG_NAME" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wx-config" >&5
-$as_echo_n "checking for wx-config... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wx-config" >&5
+printf %s "checking for wx-config... " >&6; }
WX_CONFIG_PATH="$WX_CONFIG_NAME"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
-$as_echo "$WX_CONFIG_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
+printf "%s\n" "$WX_CONFIG_PATH" >&6; }
else
# Extract the first word of "$WX_CONFIG_NAME", so it can be a program name with args.
set dummy $WX_CONFIG_NAME; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_WX_CONFIG_PATH+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_WX_CONFIG_PATH+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $WX_CONFIG_PATH in
[\\/]* | ?:[\\/]*)
ac_cv_path_WX_CONFIG_PATH="$WX_CONFIG_PATH" # Let the user override the test with a path.
@@ -5194,11 +6044,15 @@ as_dummy=""$WX_LOOKUP_PATH:$PATH""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_WX_CONFIG_PATH="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_WX_CONFIG_PATH="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5211,11 +6065,11 @@ esac
fi
WX_CONFIG_PATH=$ac_cv_path_WX_CONFIG_PATH
if test -n "$WX_CONFIG_PATH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
-$as_echo "$WX_CONFIG_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
+printf "%s\n" "$WX_CONFIG_PATH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5226,11 +6080,11 @@ fi
min_wx_version=$reqwx
if test -z "--unicode --debug=yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version" >&5
-$as_echo_n "checking for wxWidgets version >= $min_wx_version... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version" >&5
+printf %s "checking for wxWidgets version >= $min_wx_version... " >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version (--unicode --debug=yes)" >&5
-$as_echo_n "checking for wxWidgets version >= $min_wx_version (--unicode --debug=yes)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version (--unicode --debug=yes)" >&5
+printf %s "checking for wxWidgets version >= $min_wx_version (--unicode --debug=yes)... " >&6; }
fi
WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args --unicode --debug=yes"
@@ -5272,19 +6126,19 @@ $as_echo_n "checking for wxWidgets version >= $min_wx_version (--unicode --debug
if test -n "$wx_ver_ok"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $WX_VERSION)" >&5
-$as_echo "yes (version $WX_VERSION)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (version $WX_VERSION)" >&5
+printf "%s\n" "yes (version $WX_VERSION)" >&6; }
WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs $WXELIBS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets static library" >&5
-$as_echo_n "checking for wxWidgets static library... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets static library" >&5
+printf %s "checking for wxWidgets static library... " >&6; }
WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs $WXELIBS 2>/dev/null`
if test "x$WX_LIBS_STATIC" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
fi
wx_has_cppflags=""
@@ -5341,11 +6195,11 @@ $as_echo "yes" >&6; }
else
if test "x$WX_VERSION" = x; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (version $WX_VERSION is not new enough)" >&5
-$as_echo "no (version $WX_VERSION is not new enough)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (version $WX_VERSION is not new enough)" >&5
+printf "%s\n" "no (version $WX_VERSION is not new enough)" >&6; }
fi
WX_CFLAGS=""
@@ -5408,14 +6262,14 @@ $as_echo "no (version $WX_VERSION is not new enough)" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for debug build of wxWidgets" >&5
-$as_echo_n "checking for debug build of wxWidgets... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for debug build of wxWidgets" >&5
+printf %s "checking for debug build of wxWidgets... " >&6; }
if test "$wxWinWithGLDBG" = 1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; };
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; };
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; };
fi
DEBUG_WX_CFLAGS=$WX_CFLAGS
@@ -5450,19 +6304,20 @@ $as_echo "no" >&6; };
fi
if test -x "$WX_CONFIG_NAME" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wx-config" >&5
-$as_echo_n "checking for wx-config... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wx-config" >&5
+printf %s "checking for wx-config... " >&6; }
WX_CONFIG_PATH="$WX_CONFIG_NAME"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
-$as_echo "$WX_CONFIG_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
+printf "%s\n" "$WX_CONFIG_PATH" >&6; }
else
# Extract the first word of "$WX_CONFIG_NAME", so it can be a program name with args.
set dummy $WX_CONFIG_NAME; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_WX_CONFIG_PATH+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_WX_CONFIG_PATH+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $WX_CONFIG_PATH in
[\\/]* | ?:[\\/]*)
ac_cv_path_WX_CONFIG_PATH="$WX_CONFIG_PATH" # Let the user override the test with a path.
@@ -5473,11 +6328,15 @@ as_dummy=""$WX_LOOKUP_PATH:$PATH""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_WX_CONFIG_PATH="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_WX_CONFIG_PATH="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5490,11 +6349,11 @@ esac
fi
WX_CONFIG_PATH=$ac_cv_path_WX_CONFIG_PATH
if test -n "$WX_CONFIG_PATH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
-$as_echo "$WX_CONFIG_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WX_CONFIG_PATH" >&5
+printf "%s\n" "$WX_CONFIG_PATH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5505,11 +6364,11 @@ fi
min_wx_version=$reqwx
if test -z "--unicode --debug=no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version" >&5
-$as_echo_n "checking for wxWidgets version >= $min_wx_version... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version" >&5
+printf %s "checking for wxWidgets version >= $min_wx_version... " >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version (--unicode --debug=no)" >&5
-$as_echo_n "checking for wxWidgets version >= $min_wx_version (--unicode --debug=no)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets version >= $min_wx_version (--unicode --debug=no)" >&5
+printf %s "checking for wxWidgets version >= $min_wx_version (--unicode --debug=no)... " >&6; }
fi
WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args --unicode --debug=no"
@@ -5551,19 +6410,19 @@ $as_echo_n "checking for wxWidgets version >= $min_wx_version (--unicode --debug
if test -n "$wx_ver_ok"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $WX_VERSION)" >&5
-$as_echo "yes (version $WX_VERSION)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (version $WX_VERSION)" >&5
+printf "%s\n" "yes (version $WX_VERSION)" >&6; }
WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs $WXELIBS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets static library" >&5
-$as_echo_n "checking for wxWidgets static library... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets static library" >&5
+printf %s "checking for wxWidgets static library... " >&6; }
WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs $WXELIBS 2>/dev/null`
if test "x$WX_LIBS_STATIC" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
fi
wx_has_cppflags=""
@@ -5620,11 +6479,11 @@ $as_echo "yes" >&6; }
else
if test "x$WX_VERSION" = x; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (version $WX_VERSION is not new enough)" >&5
-$as_echo "no (version $WX_VERSION is not new enough)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (version $WX_VERSION is not new enough)" >&5
+printf "%s\n" "no (version $WX_VERSION is not new enough)" >&6; }
fi
WX_CFLAGS=""
@@ -5687,14 +6546,14 @@ $as_echo "no (version $WX_VERSION is not new enough)" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard build of wxWidgets" >&5
-$as_echo_n "checking for standard build of wxWidgets... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard build of wxWidgets" >&5
+printf %s "checking for standard build of wxWidgets... " >&6; }
if test "$wxWinWithGL" = 1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; };
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; };
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; };
fi
if test "x$WX_LIBS_STATIC" = "x"; then
@@ -5744,7 +6603,7 @@ $as_echo "no" >&6; };
is in LD_LIBRARY_PATH or equivalent variable and
wxWidgets version is $reqwx or above." "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING:
wxWidgets must be installed on your system.
Please check that wx-config is in path, the directory
@@ -5752,7 +6611,7 @@ $as_echo "no" >&6; };
'wx-config --libs' or 'wx-config --static --libs' command)
is in LD_LIBRARY_PATH or equivalent variable and
wxWidgets version is $reqwx or above." >&5
-$as_echo "$as_me: WARNING:
+printf "%s\n" "$as_me: WARNING:
wxWidgets must be installed on your system.
Please check that wx-config is in path, the directory
@@ -5763,13 +6622,15 @@ $as_echo "$as_me: WARNING:
fi
fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxWidgets in standard locations" >&5
-$as_echo_n "checking for wxWidgets in standard locations... " >&6; }
+
+else $as_nop
+ #else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxWidgets in standard locations" >&5
+printf %s "checking for wxWidgets in standard locations... " >&6; }
echo
# Check whether --with-wxdir was given.
- { $as_echo "$as_me:${as_lineno-$LINENO}: OptionCheck: $with_wxdir $with_wx_prefix" >&5
-$as_echo "$as_me: OptionCheck: $with_wxdir $with_wx_prefix" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: OptionCheck: $with_wxdir $with_wx_prefix" >&5
+printf "%s\n" "$as_me: OptionCheck: $with_wxdir $with_wx_prefix" >&6;}
if test "${with_wxdir+set}" = set; then :
withval=$with_wxdir; CWXWIN0=$withval
@@ -5822,8 +6683,8 @@ $as_echo "$as_me: OptionCheck: $with_wxdir $with_wx_prefix" >&6;}
CWXPATH="$CWXWIN0 $CWXWIN1 $CWXWIN2 $CWX_DOCUMENTED $CWXWIN3 $CWXWIN4"
for dir in $CWXPATH; do
- { $as_echo "$as_me:${as_lineno-$LINENO}: Checking: $dir" >&5
-$as_echo "$as_me: Checking: $dir" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking: $dir" >&5
+printf "%s\n" "$as_me: Checking: $dir" >&6;}
if test -f $dir/include/wx/wx.h; then
WXINCLUDE_MSVC=$dir/include/msvc
WXINCLUDE_PLAIN=$dir/include
@@ -5846,37 +6707,37 @@ $as_echo "$as_me: Checking: $dir" >&6;}
WX_LIBS_STATIC="$WX_LIBS_STATIC -l$lib"
done
WXDIR=$dir
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Found: $dir" >&5
-$as_echo "Found: $dir" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Found: $dir" >&5
+printf "%s\n" "Found: $dir" >&6; }
break
fi
fi
done
if test -z "$WX_LIBS_STATIC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
echo "Cannot find core lib version for wxWidgets" >> ./CONF_INFO
WXERL_CAN_BUILD_DRIVER=false
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "Cannot find core lib version for wxWidgets" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find core lib version for wxWidgets" >&5
-$as_echo "$as_me: WARNING: Cannot find core lib version for wxWidgets" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find core lib version for wxWidgets" >&5
+printf "%s\n" "$as_me: WARNING: Cannot find core lib version for wxWidgets" >&2;}
fi
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for edge webview loader" >&5
-$as_echo_n "checking for edge webview loader... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for edge webview loader" >&5
+printf %s "checking for edge webview loader... " >&6; }
WEBVIEW_DLL=$WXDIR/3rdparty/webview2/build/native/$WX_ARCH/WebView2Loader.dll
if test -f "$WEBVIEW_DLL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WEBVIEW_DLL" >&5
-$as_echo "$WEBVIEW_DLL" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WEBVIEW_DLL" >&5
+printf "%s\n" "$WEBVIEW_DLL" >&6; }
WX_WEBVIEW_DLL=$WEBVIEW_DLL
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found in $WEBVIEW_DLL" >&5
-$as_echo "not found in $WEBVIEW_DLL" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found in $WEBVIEW_DLL" >&5
+printf "%s\n" "not found in $WEBVIEW_DLL" >&6; }
WX_WEBVIEW_DLL=
fi
@@ -5887,17 +6748,20 @@ $as_echo "not found in $WEBVIEW_DLL" >&6; }
- $as_echo "#define WXE_WEBVIEW 1" >>confdefs.h
+ printf "%s\n" "#define WXE_WEBVIEW 1" >>confdefs.h
+
fi
-if test "$WXERL_CAN_BUILD_DRIVER" != "false"; then
+if test "$WXERL_CAN_BUILD_DRIVER" != "false"
+then :
+
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxwidgets 3.0 compatibility " >&5
-$as_echo_n "checking for wxwidgets 3.0 compatibility ... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxwidgets 3.0 compatibility " >&5
+printf %s "checking for wxwidgets 3.0 compatibility ... " >&6; }
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5916,7 +6780,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#include "wx/wx.h"
int
-main ()
+main (void)
{
#if wxMAJOR_VERSION > 2 && (wxMINOR_VERSION == 0 || WXWIN_COMPATIBILITY_3_0 == 1)
@@ -5929,12 +6793,13 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
HAVE_COMPAT30_SUPPORT=yes
-else
+else $as_nop
HAVE_COMPAT30_SUPPORT=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CXXFLAGS=$saved_CXXFLAGS
ac_ext=c
@@ -5943,8 +6808,8 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_COMPAT30_SUPPORT" >&5
-$as_echo "$HAVE_COMPAT30_SUPPORT" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAVE_COMPAT30_SUPPORT" >&5
+printf "%s\n" "$HAVE_COMPAT30_SUPPORT" >&6; }
if test X"$HAVE_COMPAT30_SUPPORT" != X"yes" ; then
echo "wxWidgets was not compiled with --enable-compat30, wx will NOT be useable" >> ./CONF_INFO
@@ -5952,14 +6817,14 @@ if test X"$HAVE_COMPAT30_SUPPORT" != X"yes" ; then
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "wxWidgets was not compiled with --enable-compat30, wx will NOT be useable" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: wxWidgets was not compiled with --enable-compat30, wx will NOT be useable" >&5
-$as_echo "$as_me: WARNING: wxWidgets was not compiled with --enable-compat30, wx will NOT be useable" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: wxWidgets was not compiled with --enable-compat30, wx will NOT be useable" >&5
+printf "%s\n" "$as_me: WARNING: wxWidgets was not compiled with --enable-compat30, wx will NOT be useable" >&2;}
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wxwidgets opengl support" >&5
-$as_echo_n "checking for wxwidgets opengl support... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wxwidgets opengl support" >&5
+printf %s "checking for wxwidgets opengl support... " >&6; }
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5978,7 +6843,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#include "wx/wx.h"
int
-main ()
+main (void)
{
#if wxUSE_GLCANVAS
@@ -5991,15 +6856,16 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
HAVE_GL_SUPPORT=yes
-$as_echo "#define HAVE_GL_SUPPORT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GL_SUPPORT 1" >>confdefs.h
-else
+else $as_nop
HAVE_GL_SUPPORT=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CXXFLAGS=$saved_CXXFLAGS
ac_ext=c
@@ -6008,8 +6874,8 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_GL_SUPPORT" >&5
-$as_echo "$HAVE_GL_SUPPORT" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAVE_GL_SUPPORT" >&5
+printf "%s\n" "$HAVE_GL_SUPPORT" >&6; }
if test X"$HAVE_GL_SUPPORT" != X"yes" ; then
@@ -6018,8 +6884,8 @@ if test X"$HAVE_GL_SUPPORT" != X"yes" ; then
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "wxWidgets don't have gl support, wx will NOT be useable" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: wxWidgets don't have gl support, wx will NOT be useable" >&5
-$as_echo "$as_me: WARNING: wxWidgets don't have gl support, wx will NOT be useable" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: wxWidgets don't have gl support, wx will NOT be useable" >&5
+printf "%s\n" "$as_me: WARNING: wxWidgets don't have gl support, wx will NOT be useable" >&2;}
fi
fi
@@ -6035,11 +6901,10 @@ ac_fn_c_check_type "$LINENO" "GLintptr" "ac_cv_type_GLintptr" "#ifdef WIN32
#endif
"
-if test "x$ac_cv_type_GLintptr" = xyes; then :
+if test "x$ac_cv_type_GLintptr" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_GLINTPTR 1
-_ACEOF
+printf "%s\n" "#define HAVE_GLINTPTR 1" >>confdefs.h
fi
@@ -6053,11 +6918,10 @@ ac_fn_c_check_type "$LINENO" "GLintptrARB" "ac_cv_type_GLintptrARB" "#ifdef WIN3
#endif
"
-if test "x$ac_cv_type_GLintptrARB" = xyes; then :
+if test "x$ac_cv_type_GLintptrARB" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_GLINTPTRARB 1
-_ACEOF
+printf "%s\n" "#define HAVE_GLINTPTRARB 1" >>confdefs.h
fi
@@ -6071,11 +6935,10 @@ ac_fn_c_check_type "$LINENO" "GLchar" "ac_cv_type_GLchar" "#ifdef WIN32
#endif
"
-if test "x$ac_cv_type_GLchar" = xyes; then :
+if test "x$ac_cv_type_GLchar" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_GLCHAR 1
-_ACEOF
+printf "%s\n" "#define HAVE_GLCHAR 1" >>confdefs.h
fi
@@ -6089,11 +6952,10 @@ ac_fn_c_check_type "$LINENO" "GLcharARB" "ac_cv_type_GLcharARB" "#ifdef WIN32
#endif
"
-if test "x$ac_cv_type_GLcharARB" = xyes; then :
+if test "x$ac_cv_type_GLcharARB" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_GLCHARARB 1
-_ACEOF
+printf "%s\n" "#define HAVE_GLCHARARB 1" >>confdefs.h
fi
@@ -6107,11 +6969,10 @@ ac_fn_c_check_type "$LINENO" "GLhalfARB" "ac_cv_type_GLhalfARB" "#ifdef WIN32
#endif
"
-if test "x$ac_cv_type_GLhalfARB" = xyes; then :
+if test "x$ac_cv_type_GLhalfARB" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_GLHALFARB 1
-_ACEOF
+printf "%s\n" "#define HAVE_GLHALFARB 1" >>confdefs.h
fi
@@ -6125,18 +6986,17 @@ ac_fn_c_check_type "$LINENO" "GLint64EXT" "ac_cv_type_GLint64EXT" "#ifdef WIN32
#endif
"
-if test "x$ac_cv_type_GLint64EXT" = xyes; then :
+if test "x$ac_cv_type_GLint64EXT" = xyes
+then :
-cat >>confdefs.h <<_ACEOF
-#define HAVE_GLINT64EXT 1
-_ACEOF
+printf "%s\n" "#define HAVE_GLINT64EXT 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking GLU Callbacks uses Tiger Style" >&5
-$as_echo_n "checking GLU Callbacks uses Tiger Style... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking GLU Callbacks uses Tiger Style" >&5
+printf %s "checking GLU Callbacks uses Tiger Style... " >&6; }
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -6163,7 +7023,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
void CALLBACK foo() {};
int
-main ()
+main (void)
{
GLUtesselator* tess;
@@ -6173,40 +7033,40 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
TESS_CB_TIGER_STYLE=yes
-$as_echo "#define TESS_CB_TIGER_STYLE 1" >>confdefs.h
+printf "%s\n" "#define TESS_CB_TIGER_STYLE 1" >>confdefs.h
-else
+else $as_nop
TESS_CB_TIGER_STYLE=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $TESS_CB_TIGER_STYLE" >&5
-$as_echo "$TESS_CB_TIGER_STYLE" >&6; }
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TESS_CB_TIGER_STYLE" >&5
+printf "%s\n" "$TESS_CB_TIGER_STYLE" >&6; }
-for ac_header in wx/stc/stc.h
+ for ac_header in wx/stc/stc.h
do :
ac_fn_cxx_check_header_compile "$LINENO" "wx/stc/stc.h" "ac_cv_header_wx_stc_stc_h" "#ifdef WIN32
# include <windows.h>
#endif
#include \"wx/wx.h\"
"
-if test "x$ac_cv_header_wx_stc_stc_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_WX_STC_STC_H 1
-_ACEOF
+if test "x$ac_cv_header_wx_stc_stc_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WX_STC_STC_H 1" >>confdefs.h
-else
+else $as_nop
echo "Can not find wx/stc/stc.h $CXXFLAGS" >> ./CONF_INFO
WXERL_CAN_BUILD_DRIVER=false
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "Can not find wx/stc/stc.h $CXXFLAGS" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can not find wx/stc/stc.h $CXXFLAGS" >&5
-$as_echo "$as_me: WARNING: Can not find wx/stc/stc.h $CXXFLAGS" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Can not find wx/stc/stc.h $CXXFLAGS" >&5
+printf "%s\n" "$as_me: WARNING: Can not find wx/stc/stc.h $CXXFLAGS" >&2;}
fi
@@ -6215,9 +7075,8 @@ fi
done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can link wxwidgets programs" >&5
-$as_echo_n "checking if we can link wxwidgets programs... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can link wxwidgets programs" >&5
+printf %s "checking if we can link wxwidgets programs... " >&6; }
saved_LIBS=$LIBS
if test X"$WX_HAVE_STATIC_LIBS" = X"true" ; then
@@ -6247,16 +7106,17 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
IMPLEMENT_APP(MyApp)
_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
+if ac_fn_cxx_try_link "$LINENO"
+then :
CAN_LINK_WX=yes
-else
+else $as_nop
CAN_LINK_WX=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CXXFLAGS=$saved_CXXFLAGS
@@ -6267,8 +7127,8 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAN_LINK_WX" >&5
-$as_echo "$CAN_LINK_WX" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CAN_LINK_WX" >&5
+printf "%s\n" "$CAN_LINK_WX" >&6; }
if test X"$CAN_LINK_WX" != X"yes" ; then
echo "Can not link wx program are all developer packages installed?" >> ./CONF_INFO
@@ -6276,87 +7136,104 @@ if test X"$CAN_LINK_WX" != X"yes" ; then
if test X"$with_wx" = X"yes" ; then
as_fn_error $? "Can not link wx program are all developer packages installed?" "$LINENO" 5
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can not link wx program are all developer packages installed?" >&5
-$as_echo "$as_me: WARNING: Can not link wx program are all developer packages installed?" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Can not link wx program are all developer packages installed?" >&5
+printf "%s\n" "$as_me: WARNING: Can not link wx program are all developer packages installed?" >&2;}
fi
fi
+
fi
-if test "x$GCC" = xyes; then
+if test "x$GCC" = xyes
+then :
+
# Treat certain GCC warnings as errors
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CFLAGS="-Werror=return-type $CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CXXFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to CXXFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to CXXFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to CXXFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $CXXFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
CXXFLAGS="-Werror=return-type $CXXFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+
fi
# Check whether --enable-sanitizers was given.
-if test "${enable_sanitizers+set}" = set; then :
+if test ${enable_sanitizers+y}
+then :
enableval=$enable_sanitizers;
case "$enableval" in
no) sanitizers= ;;
@@ -6386,12 +7263,7 @@ esac
-
-if test X"$WX_BUILDING_INSIDE_ERLSRC" != X"true" ; then
- WXERL_SYS_TYPE=`erl -noshell -eval 'io:format("~s~n",[erlang:system_info(system_architecture)])' -s erlang halt`
-else
- WXERL_SYS_TYPE=$TARGET
-fi
+WXERL_SYS_TYPE=$TARGET
@@ -6429,8 +7301,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -6460,15 +7332,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -6482,8 +7354,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -6536,7 +7408,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -6552,8 +7424,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -6576,14 +7448,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -6593,46 +7467,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -6641,13 +7515,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -6656,8 +7523,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -6669,30 +7540,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -6705,13 +7556,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -6738,18 +7590,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -6761,12 +7615,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -6797,7 +7652,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -6819,6 +7674,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -6832,6 +7691,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -6873,7 +7738,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -6882,7 +7747,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -6945,7 +7810,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -6994,14 +7859,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -7038,21 +7905,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -7080,7 +7947,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -7094,7 +7961,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -7120,7 +7987,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -7348,7 +8215,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -7356,17 +8223,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -7383,7 +8250,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -7407,9 +8274,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -7462,8 +8329,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -7505,9 +8372,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -7554,8 +8421,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
@@ -7566,3 +8433,4 @@ fi
+
diff --git a/lib/wx/configure.in b/lib/wx/configure.ac
index acc2710f83..ce329e11e6 100644
--- a/lib/wx/configure.in
+++ b/lib/wx/configure.ac
@@ -18,11 +18,13 @@ dnl limitations under the License.
dnl
dnl %CopyrightEnd%
-AC_INIT()
+AC_INIT
-AC_CONFIG_AUX_DIRS($srcdir/autoconf)
+m4_include([otp.m4])
-AC_PREREQ(2.59)
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
+
+AC_PREREQ([2.71])
## Delete previous failed configure results
if test -f ./CONF_INFO; then
@@ -39,25 +41,12 @@ AC_DEFUN([WX_MSG_ERROR],
fi
])
-
-if test -z "$ERL_TOP" || test ! -d $ERL_TOP ; then
- AC_MSG_ERROR([ERL_TOP is not set])
-else
- erl_top=${ERL_TOP}
- AC_CONFIG_AUX_DIRS($erl_top/erts/autoconf)
- WX_BUILDING_INSIDE_ERLSRC=true
-fi
-
AC_ARG_WITH(wx,
[ --with-wxdir=PATH specify location of wxWidgets include and lib
--with-wx use wxWidgets (default)
--without-wx don't use wxWidgets])
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
-else
- host_os=win32
-fi
+ERL_CANONICAL_SYSTEM_TYPE
case $host_os in
mingw32)
@@ -108,8 +97,10 @@ OBJC_CC=$CC
OBJC_CFLAGS=""
CXXFLAGS=""
dnl NOTE: CPPFLAGS will be included in CFLAGS at the end
-case $host_os in
- darwin*)
+AS_CASE([$host_os],
+
+ [darwin*],
+ [
AC_MSG_CHECKING([Checking wxWidgets for min version:])
WX_CC=`wx-config --cc`
MAC_MIN=`echo "$WX_CC" | sed 's/^[[^ ]]*\ *//'`
@@ -117,7 +108,7 @@ case $host_os in
AC_MSG_CHECKING([if compiler accepts -ObjC])
CFLAGS="$CFLAGS -ObjC"
- AC_TRY_COMPILE([],[;], accept_objc_flag=true, accept_objc_flag=false)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[;]])],[accept_objc_flag=true],[accept_objc_flag=false])
if test "X$accept_objc_flag" = "Xtrue"; then
AC_MSG_RESULT([yes])
C_ONLY_FLAGS="-ObjC"
@@ -177,22 +168,26 @@ case $host_os in
fi
CFLAGS="$USER_CFLAGS $MAC_MIN -Wno-deprecated-declarations"
CPPFLAGS="$CPPFLAGS -D_MACOSX $PTHR_CFLAGS"
- ;;
- mingw32)
+ ],
+
+ [mingw32],
+ [
CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0600 -D_WINDOWS -D_UNICODE -DUNICODE"
CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
AC_MSG_WARN([Reverting to 32-bit time_t])
CPPFLAGS="$CPPFLAGS -D_USE_32BIT_TIME_T"
- ;;
- win32)
+ ],
+
+ [win32],
+ [
CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0600 -D_WINDOWS -D_UNICODE -DUNICODE"
CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
- ;;
- *)
+ ],
+
+ [
CFLAGS="$CFLAGS -Wno-deprecated-declarations"
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE $PTHR_CFLAGS"
- ;;
-esac
+ ])
AC_SUBST(OBJC_CC)
AC_SUBST(OBJC_CFLAGS)
@@ -249,47 +244,54 @@ dnl Use -O1 -fno-move-loop-invariants for wxe_funcs.cpp to reduce
dnl compilation time
dnl
-if test "x$GCC" = xyes -a X"$host_os" != X"win32" ; then
+AS_IF([test "x$GCC" = xyes -a X"$host_os" != X"win32"],
+ [
CXXNOOPT="-O1"
LM_TRY_ENABLE_CFLAG([-fno-move-loop-invariants], [CXXNOOPT])
LM_TRY_ENABLE_CFLAG([-fno-var-tracking-assignments], [CXXNOOPT])
-fi
+ ])
dnl
dnl Opengl tests
dnl
-if test X"$host_os" != X"win32" ; then
+AS_IF([test X"$host_os" != X"win32"],
+ [
AC_CHECK_HEADERS([GL/gl.h], [],
[AC_CHECK_HEADERS([OpenGL/gl.h])])
- if test X"$ac_cv_header_GL_gl_h" != Xyes &&
- test X"$ac_cv_header_OpenGL_gl_h" != Xyes
- then
+ AS_IF([test X"$ac_cv_header_GL_gl_h" != Xyes && test X"$ac_cv_header_OpenGL_gl_h" != Xyes],
+ [
saved_CPPFLAGS="$CPPFLAGS"
AC_MSG_NOTICE(Checking for OpenGL headers in /usr/X11R6)
CPPFLAGS="-isystem /usr/X11R6/include $CPPFLAGS"
$as_unset ac_cv_header_GL_gl_h
AC_CHECK_HEADERS([GL/gl.h])
- if test X"$ac_cv_header_GL_gl_h" != Xyes ; then
+ AS_IF([test X"$ac_cv_header_GL_gl_h" != Xyes],
+ [
AC_MSG_NOTICE(Checking for OpenGL headers in /usr/local)
CPPFLAGS="-isystem /usr/local/include $saved_CPPFLAGS"
$as_unset ac_cv_header_GL_gl_h
AC_CHECK_HEADERS([GL/gl.h])
- if test X"$ac_cv_header_GL_gl_h" != Xyes ; then
+ AS_IF([test X"$ac_cv_header_GL_gl_h" != Xyes],
+ [
WX_MSG_ERROR([No OpenGL headers found, wx will NOT be usable])
CPPFLAGS="$saved_CPPFLAGS"
- else
+ ],
+ [
GL_LIBS="-L/usr/local/lib $GL_LIBS"
- fi
- else
+ ])
+ ],
+ [
GL_LIBS="-L/usr/X11R6/lib $GL_LIBS"
- fi
- fi
-else
+ ])
+ ])
+ ],
+ [
AC_CHECK_HEADERS([gl/gl.h],[],[],[#include <windows.h>])
-fi
+ ])
-if test X"$host_os" != X"win32" ; then
+AS_IF([test X"$host_os" != X"win32"],
+ [
AC_CHECK_HEADERS([GL/glu.h], [],
[AC_CHECK_HEADERS([OpenGL/glu.h])])
if test X"$ac_cv_header_GL_glu_h" != Xyes &&
@@ -297,9 +299,10 @@ if test X"$host_os" != X"win32" ; then
then
WX_MSG_ERROR([No GLU headers found, wx will NOT be usable])
fi
-else
+ ],
+ [
AC_CHECK_HEADERS([gl/glu.h],[],[],[#include <windows.h>])
-fi
+ ])
AC_SUBST(GL_LIBS)
@@ -318,15 +321,19 @@ ERL=erl
ERLANG_ROOT_DIR=$ERL_TOP
AC_SUBST(ERLC)
-AC_SUBST(WX_BUILDING_INSIDE_ERLSRC)
AC_SUBST(ERLANG_ROOT_DIR)
dnl
dnl Check for wxwidgets
dnl
-if test "$cross_compiling" = "yes"; then
+AS_IF(
+ [test "$cross_compiling" = "yes"],
+ [
WX_MSG_ERROR([Cross compilation of the wx driver is not supported yet, wx will NOT be usable])
-elif test X"$MIXED_VC" = X"no"; then
+ ],
+
+ [test X"$MIXED_VC" = X"no"],
+ [
m4_include(wxwin-nothrow.m4)
AM_OPTIONS_WXCONFIG
@@ -426,7 +433,9 @@ elif test X"$MIXED_VC" = X"no"; then
is in LD_LIBRARY_PATH or equivalent variable and
wxWidgets version is $reqwx or above.])
fi
-else
+ ],
+
+ [ #else
AC_MSG_CHECKING(for wxWidgets in standard locations)
echo
# Check whether --with-wxdir was given.
@@ -535,9 +544,10 @@ else
AC_SUBST(WX_RESCOMP)
AC_SUBST(WX_WEBVIEW_DLL)
AC_DEFINE([WXE_WEBVIEW])
-fi
+ ])
-if test "$WXERL_CAN_BUILD_DRIVER" != "false"; then
+AS_IF([test "$WXERL_CAN_BUILD_DRIVER" != "false"],
+[
AC_SUBST(WX_HAVE_STATIC_LIBS)
AC_SUBST(RC_FILE_TYPE)
@@ -624,7 +634,7 @@ AC_LANG_PUSH(C++)
saved_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS"
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#ifdef WIN32
# include <windows.h>
# include <gl/glu.h>
@@ -637,14 +647,11 @@ AC_TRY_COMPILE([
# define CALLBACK
#endif
void CALLBACK foo() {};
- ],
- [
+ ]], [[
GLUtesselator* tess;
gluTessCallback(tess,GLU_TESS_VERTEX,(GLvoid (*)(...)) foo);
- ],
- [TESS_CB_TIGER_STYLE=yes
- AC_DEFINE(TESS_CB_TIGER_STYLE, [1], [GLU Callbacks are Tiger style])],
- TESS_CB_TIGER_STYLE=no)
+ ]])],[TESS_CB_TIGER_STYLE=yes
+ AC_DEFINE(TESS_CB_TIGER_STYLE, [1], [GLU Callbacks are Tiger style])],[TESS_CB_TIGER_STYLE=no])
AC_MSG_RESULT($TESS_CB_TIGER_STYLE)
AC_SUBST(TESS_CB_TIGER_STYLE)
@@ -672,13 +679,13 @@ if test X"$WX_HAVE_STATIC_LIBS" = X"true" ; then
LIBS=$WX_LIBS_STATIC
fi
-AC_LINK_IFELSE([AC_LANG_SOURCE([
+AC_LINK_IFELSE([AC_LANG_SOURCE([[
#ifdef WIN32
# include <windows.h>
#endif
#include "wx/wx.h"
#include "wx/stc/stc.h"
- ])
+
class MyApp : public wxApp
{
@@ -691,7 +698,7 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([
};
};
IMPLEMENT_APP(MyApp)
- ],
+ ]])],
[
CAN_LINK_WX=yes
],
@@ -708,15 +715,16 @@ if test X"$CAN_LINK_WX" != X"yes" ; then
WX_MSG_ERROR([Can not link wx program are all developer packages installed?])
fi
-fi dnl - if test "$WXERL_CAN_BUILD_DRIVER" != "false"
+]) dnl - if test "$WXERL_CAN_BUILD_DRIVER" != "false"
AC_SUBST(WXERL_CAN_BUILD_DRIVER)
-if test "x$GCC" = xyes; then
+AS_IF([test "x$GCC" = xyes],
+ [
# Treat certain GCC warnings as errors
LM_TRY_ENABLE_CFLAG([-Werror=return-type], [CFLAGS])
LM_TRY_ENABLE_CFLAG([-Werror=return-type], [CXXFLAGS])
-fi
+ ])
dnl ----------------------------------------------------------------------
dnl Enable -fsanitize= flags.
@@ -756,13 +764,7 @@ AC_SUBST(SO_EXT)
AC_SUBST(RUN_ERL)
AC_SUBST(CXXNOOPTFLAGS)
-
-if test X"$WX_BUILDING_INSIDE_ERLSRC" != X"true" ; then
- dnl Find driver directory name according to erlang
- WXERL_SYS_TYPE=`erl -noshell -eval 'io:format("~s~n",[[erlang:system_info(system_architecture)]])' -s erlang halt`
-else
- WXERL_SYS_TYPE=$TARGET
-fi
+WXERL_SYS_TYPE=$TARGET
AC_SUBST(WXERL_SYS_TYPE)
diff --git a/lib/wx/src/wx.app.src b/lib/wx/src/wx.app.src
index 92984f13b5..1091e8acad 100644
--- a/lib/wx/src/wx.app.src
+++ b/lib/wx/src/wx.app.src
@@ -35,5 +35,5 @@
{registered, []},
{applications, [stdlib, kernel]},
{env, []},
- {runtime_dependencies, ["stdlib-2.0","kernel-3.0","erts-6.0"]}
+ {runtime_dependencies, ["stdlib-3.13","kernel-3.0","erts-6.0"]}
]}.
diff --git a/lib/common_test/priv/auxdir/config.guess b/make/autoconf/config.guess
index 1972fda8eb..1972fda8eb 100755
--- a/lib/common_test/priv/auxdir/config.guess
+++ b/make/autoconf/config.guess
diff --git a/lib/common_test/priv/auxdir/config.sub b/make/autoconf/config.sub
index 63c1f1c8b5..63c1f1c8b5 100755
--- a/lib/common_test/priv/auxdir/config.sub
+++ b/make/autoconf/config.sub
diff --git a/lib/common_test/priv/auxdir/install-sh b/make/autoconf/install-sh
index ec298b5374..ec298b5374 100755
--- a/lib/common_test/priv/auxdir/install-sh
+++ b/make/autoconf/install-sh
diff --git a/erts/aclocal.m4 b/make/autoconf/otp.m4
index 0af9ae8d3c..1bcb2ebbf3 100644
--- a/erts/aclocal.m4
+++ b/make/autoconf/otp.m4
@@ -1,4 +1,4 @@
-dnl
+dnl -*-Autoconf-*-
dnl %CopyrightBegin%
dnl
dnl Copyright Ericsson AB 1998-2020. All Rights Reserved.
@@ -19,13 +19,69 @@ dnl %CopyrightEnd%
dnl
dnl
-dnl aclocal.m4
+dnl otp.m4
+dnl
+dnl Local macros that can be used in `configure.ac` files in OTP. To use
+dnl any of the macros your `configure.ac` file should include this file
+dnl using `m4_include([otp.m4])` after AC_INIT.
dnl
-dnl Local macros used in configure.in. The Local Macros which
-dnl could/should be part of autoconf are prefixed LM_, macros specific
-dnl to the Erlang system are prefixed ERL_.
+dnl The Local Macros which could be part of autoconf are prefixed LM_,
+dnl macros specific dnl to the Erlang system are prefixed ERL_ (this is
+dnl not always consistently made...).
dnl
+AC_DEFUN([ERL_CANONICAL_SYSTEM_TYPE],
+[
+ AC_CANONICAL_HOST
+ # Adjust for local legacy windows hack...
+ AS_CASE([$host],
+ [local-*-windows],
+ [
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ])
+
+ AC_CANONICAL_BUILD
+ # Adjust for local legacy windows hack...
+ AS_CASE([$build],
+ [local-*-windows],
+ [
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ])
+
+ AC_CANONICAL_TARGET
+ # Adjust for local legacy windows hack...
+ AS_CASE([$target],
+ [local-*-windows],
+ [
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ])
+
+ AS_IF([test "$cross_compiling" = "yes" -a "$build" = "$host"],
+ [AC_MSG_ERROR([
+ Cross compiling with the same canonicalized 'host' value
+ as the canonicalized 'build' value.
+
+ We are cross compiling since the '--host=$host_alias'
+ and the '--build=$build_alias' arguments differ. When
+ cross compiling Erlang/OTP, also the canonicalized values of
+ the '--build' and the '--host' arguments *must* differ. The
+ canonicalized values of these arguments however both equals:
+ $host
+
+ You can check the canonical value by passing a value as
+ argument to the 'make/autoconf/config.sub' script.
+ ])])
+])
+
AC_DEFUN(LM_PRECIOUS_VARS,
[
@@ -90,13 +146,18 @@ fi
AC_DEFUN(LM_CHECK_GETCONF,
[
-if test "$cross_compiling" != "yes"; then
+AS_IF(
+ [test "$cross_compiling" != "yes"],
+ [
AC_CHECK_PROG([GETCONF], [getconf], [getconf], [false])
-else
+ ],
+ [
dnl First check if we got a `<HOST>-getconf' in $PATH
host_getconf="$host_alias-getconf"
AC_CHECK_PROG([GETCONF], [$host_getconf], [$host_getconf], [false])
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ AS_IF(
+ [test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""],
+ [
dnl We should perhaps give up if we have'nt found it by now, but at
dnl least in one Tilera MDE `getconf' under sysroot is a bourne
dnl shell script which we can use. We try to find `<HOST>-getconf'
@@ -107,8 +168,8 @@ else
prfx="$erl_xcomp_sysroot"
AC_PATH_TOOL([GETCONF], [getconf], [false],
["$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin"])
- fi
-fi
+ ])
+ ])
])
dnl ----------------------------------------------------------------------
@@ -235,7 +296,7 @@ AC_DEFUN(LM_FIND_EMU_CC,
[AC_CACHE_CHECK(for a compiler that handles jumptables,
ac_cv_prog_emu_cc,
[
-AC_TRY_COMPILE([],[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
#if defined(__clang_major__) && __clang_major__ >= 3
/* clang 3.x or later is fine */
#elif defined(__llvm__)
@@ -254,7 +315,7 @@ lbl1:
return 1;
lbl2:
return 2;
-],ac_cv_prog_emu_cc="$CC",ac_cv_prog_emu_cc=no)
+]])],[ac_cv_prog_emu_cc="$CC"],[ac_cv_prog_emu_cc=no])
if test "$ac_cv_prog_emu_cc" = no; then
for ac_progname in emu_cc.sh gcc-4.2 gcc; do
@@ -274,14 +335,15 @@ if test "$ac_cv_prog_emu_cc" = no; then
done
fi
-if test "$ac_cv_prog_emu_cc" != no; then
+AS_IF([test "$ac_cv_prog_emu_cc" != no],
+ [
save_CC="$CC"
save_CFLAGS=$CFLAGS
save_CPPFLAGS=$CPPFLAGS
CC="$ac_cv_prog_emu_cc"
CFLAGS=""
CPPFLAGS=""
- AC_TRY_COMPILE([],[
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
#if defined(__clang_major__) && __clang_major__ >= 3
/* clang 3.x or later is fine */
#elif defined(__llvm__)
@@ -300,11 +362,11 @@ if test "$ac_cv_prog_emu_cc" != no; then
return 1;
lbl2:
return 2;
- ],ac_cv_prog_emu_cc="$CC",ac_cv_prog_emu_cc=no)
+ ]])],[ac_cv_prog_emu_cc="$CC"],[ac_cv_prog_emu_cc=no])
CC=$save_CC
CFLAGS=$save_CFLAGS
CPPFLAGS=$save_CPPFLAGS
-fi
+ ])
])
if test "$ac_cv_prog_emu_cc" = no; then
AC_DEFINE(NO_JUMP_TABLE,[],[Defined if no found C compiler can handle jump tables])
@@ -383,9 +445,7 @@ dnl Check if the system has the SO_BSDCOMPAT flag on sockets (linux)
dnl
AC_DEFUN(LM_DECL_SO_BSDCOMPAT,
[AC_CACHE_CHECK([for SO_BSDCOMPAT declaration], ac_cv_decl_so_bsdcompat,
-AC_TRY_COMPILE([#include <sys/socket.h>], [int i = SO_BSDCOMPAT;],
- ac_cv_decl_so_bsdcompat=yes,
- ac_cv_decl_so_bsdcompat=no))
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[int i = SO_BSDCOMPAT;]])],[ac_cv_decl_so_bsdcompat=yes],[ac_cv_decl_so_bsdcompat=no]))
case "${ac_cv_decl_so_bsdcompat}" in
"yes" ) AC_DEFINE(HAVE_SO_BSDCOMPAT,[],
@@ -405,31 +465,28 @@ dnl
AC_DEFUN(LM_DECL_INADDR_LOOPBACK,
[AC_CACHE_CHECK([for INADDR_LOOPBACK in netinet/in.h],
ac_cv_decl_inaddr_loopback,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <netinet/in.h>], [int i = INADDR_LOOPBACK;],
-ac_cv_decl_inaddr_loopback=yes, ac_cv_decl_inaddr_loopback=no)
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <netinet/in.h>]], [[int i = INADDR_LOOPBACK;]])],[ac_cv_decl_inaddr_loopback=yes],[ac_cv_decl_inaddr_loopback=no])
])
-if test ${ac_cv_decl_inaddr_loopback} = no; then
+AS_IF(
+ [test ${ac_cv_decl_inaddr_loopback} = no],
+ [
AC_CACHE_CHECK([for INADDR_LOOPBACK in rpc/types.h],
ac_cv_decl_inaddr_loopback_rpc,
- AC_TRY_COMPILE([#include <rpc/types.h>],
- [int i = INADDR_LOOPBACK;],
- ac_cv_decl_inaddr_loopback_rpc=yes,
- ac_cv_decl_inaddr_loopback_rpc=no))
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <rpc/types.h>]], [[int i = INADDR_LOOPBACK;]])],[ac_cv_decl_inaddr_loopback_rpc=yes],[ac_cv_decl_inaddr_loopback_rpc=no]))
- case "${ac_cv_decl_inaddr_loopback_rpc}" in
- "yes" )
+ AS_IF(
+ [test "${ac_cv_decl_inaddr_loopback_rpc}" = "yes"],
+ [
AC_DEFINE(DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H,[],
- [Define if you need to include rpc/types.h to get INADDR_LOOPBACK defined]) ;;
- * )
+ [Define if you need to include rpc/types.h to get INADDR_LOOPBACK defined])
+ ],
+ [
AC_CACHE_CHECK([for INADDR_LOOPBACK in winsock2.h],
ac_cv_decl_inaddr_loopback_winsock2,
- AC_TRY_COMPILE([#define WIN32_LEAN_AND_MEAN
- #include <winsock2.h>],
- [int i = INADDR_LOOPBACK;],
- ac_cv_decl_inaddr_loopback_winsock2=yes,
- ac_cv_decl_inaddr_loopback_winsock2=no))
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define WIN32_LEAN_AND_MEAN
+ #include <winsock2.h>]], [[int i = INADDR_LOOPBACK;]])],[ac_cv_decl_inaddr_loopback_winsock2=yes],[ac_cv_decl_inaddr_loopback_winsock2=no]))
case "${ac_cv_decl_inaddr_loopback_winsock2}" in
"yes" )
AC_DEFINE(DEF_INADDR_LOOPBACK_IN_WINSOCK2_H,[],
@@ -438,9 +495,9 @@ if test ${ac_cv_decl_inaddr_loopback} = no; then
# couldn't find it anywhere
AC_DEFINE(HAVE_NO_INADDR_LOOPBACK,[],
[Define if you don't have a definition of INADDR_LOOPBACK]) ;;
- esac;;
- esac
-fi
+ esac
+ ])
+ ])
])
@@ -454,9 +511,8 @@ dnl
AC_DEFUN(LM_STRUCT_SOCKADDR_SA_LEN,
[AC_CACHE_CHECK([whether struct sockaddr has sa_len field],
ac_cv_struct_sockaddr_sa_len,
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/socket.h>], [struct sockaddr s; s.sa_len = 10;],
- ac_cv_struct_sockaddr_sa_len=yes, ac_cv_struct_sockaddr_sa_len=no))
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <sys/socket.h>]], [[struct sockaddr s; s.sa_len = 10;]])],[ac_cv_struct_sockaddr_sa_len=yes],[ac_cv_struct_sockaddr_sa_len=no]))
dnl FIXME convbreak
case ${ac_cv_struct_sockaddr_sa_len} in
@@ -477,28 +533,28 @@ AC_DEFUN(LM_SYS_IPV6,
[AC_MSG_CHECKING(for IP version 6 support)
AC_CACHE_VAL(ac_cv_sys_ipv6_support,
[ok_so_far=yes
- AC_TRY_COMPILE([#include <sys/types.h>
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
#ifdef __WIN32__
#include <winsock2.h>
#include <ws2tcpip.h>
#else
#include <netinet/in.h>
-#endif],
- [struct in6_addr a6; struct sockaddr_in6 s6;], ok_so_far=yes, ok_so_far=no)
+#endif]], [[struct in6_addr a6; struct sockaddr_in6 s6;]])],[ok_so_far=yes],[ok_so_far=no])
-if test $ok_so_far = yes; then
+AS_IF(
+ [test $ok_so_far = yes],
+ [
ac_cv_sys_ipv6_support=yes
-else
- AC_TRY_COMPILE([#include <sys/types.h>
+ ],
+ [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
#ifdef __WIN32__
#include <winsock2.h>
#include <ws2tcpip.h>
#else
#include <netinet/in.h>
-#endif],
- [struct in_addr6 a6; struct sockaddr_in6 s6;],
- ac_cv_sys_ipv6_support=in_addr6, ac_cv_sys_ipv6_support=no)
-fi
+#endif]], [[struct in_addr6 a6; struct sockaddr_in6 s6;]])],[ac_cv_sys_ipv6_support=in_addr6],[ac_cv_sys_ipv6_support=no])
+ ])
])dnl
dnl
@@ -533,7 +589,8 @@ dnl
AC_DEFUN(LM_SYS_MULTICAST,
[AC_CACHE_CHECK([for multicast support], ac_cv_sys_multicast_support,
-[AC_EGREP_CPP(^yes$,
+[
+AC_EGREP_CPP(^yes$,
[#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@@ -559,9 +616,8 @@ dnl
AC_DEFUN(LM_DECL_SYS_ERRLIST,
[AC_CACHE_CHECK([for sys_errlist declaration in stdio.h or errno.h],
ac_cv_decl_sys_errlist,
-[AC_TRY_COMPILE([#include <stdio.h>
-#include <errno.h>], [char *msg = *(sys_errlist + 1);],
- ac_cv_decl_sys_errlist=yes, ac_cv_decl_sys_errlist=no)])
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
+#include <errno.h>]], [[char *msg = *(sys_errlist + 1);]])],[ac_cv_decl_sys_errlist=yes],[ac_cv_decl_sys_errlist=no])])
if test $ac_cv_decl_sys_errlist = yes; then
AC_DEFINE(SYS_ERRLIST_DECLARED,[],
[define if the variable sys_errlist is declared in a system header file])
@@ -586,10 +642,10 @@ dnl
AC_DEFUN(LM_CHECK_FUNC_DECL,
[AC_MSG_CHECKING([for conflicting declaration of $1])
AC_CACHE_VAL(ac_cv_func_decl_$1,
-[AC_TRY_COMPILE([#include <stdio.h>
-$3],[$2
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
+$3]], [[$2
char *c = (char *)$1;
-], eval "ac_cv_func_decl_$1=no", eval "ac_cv_func_decl_$1=yes")])
+]])],[eval "ac_cv_func_decl_$1=no"],[eval "ac_cv_func_decl_$1=yes"])])
if eval "test \"`echo '$ac_cv_func_decl_'$1`\" = yes"; then
AC_MSG_RESULT(yes)
ifelse([$4], , :, [$4])
@@ -695,7 +751,7 @@ case $ac_cv_c_double_middle_endian in
[AC_MSG_WARN([unknown double endianness
presetting ac_cv_c_double_middle_endian=no (or yes) will help])]) ;;
esac
-])# AC_C_DOUBLE_MIDDLE_ENDIAN
+])dnl # AC_C_DOUBLE_MIDDLE_ENDIAN
AC_DEFUN(ERL_MONOTONIC_CLOCK,
@@ -743,57 +799,52 @@ AC_DEFUN(ERL_MONOTONIC_CLOCK,
AC_CACHE_CHECK([for clock_gettime(CLOCK_MONOTONIC_RAW, _)], erl_cv_clock_gettime_monotonic_raw,
[
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <time.h>
$trust_test
- ],
- [
+ ]], [[
struct timespec ts;
long long result;
clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
result = ((long long) ts.tv_sec) * 1000000000LL +
((long long) ts.tv_nsec);
- ],
- erl_cv_clock_gettime_monotonic_raw=yes,
- erl_cv_clock_gettime_monotonic_raw=no)
+ ]])],[erl_cv_clock_gettime_monotonic_raw=yes],[erl_cv_clock_gettime_monotonic_raw=no])
])
AC_CACHE_CHECK([for clock_gettime() with ${check_msg}monotonic clock type], erl_cv_clock_gettime_monotonic_$1,
[
for clock_type in $prefer_resolution_clock_gettime_monotonic $default_resolution_clock_gettime_monotonic $high_resolution_clock_gettime_monotonic $low_resolution_clock_gettime_monotonic; do
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <time.h>
$trust_test
- ],
- [
+ ]], [[
struct timespec ts;
long long result;
clock_gettime($clock_type,&ts);
result = ((long long) ts.tv_sec) * 1000000000LL +
((long long) ts.tv_nsec);
- ],
- erl_cv_clock_gettime_monotonic_$1=$clock_type,
- erl_cv_clock_gettime_monotonic_$1=no)
+ ]])],[erl_cv_clock_gettime_monotonic_$1=$clock_type],[erl_cv_clock_gettime_monotonic_$1=no])
test $erl_cv_clock_gettime_monotonic_$1 = no || break
done
])
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
+ AS_IF(
+ [test "$LD_MAY_BE_WEAK" != "no"],
+ [
AC_CHECK_FUNCS([clock_get_attributes gethrtime])
- else
+ ],
+ [
AC_CHECK_FUNCS([clock_getres clock_get_attributes gethrtime])
- fi
-
+ ])
AC_CACHE_CHECK([for mach clock_get_time() with monotonic clock type], erl_cv_mach_clock_get_time_monotonic,
[
- AC_TRY_COMPILE([
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <mach/clock.h>
#include <mach/mach.h>
- ],
- [
+ ]], [[
kern_return_t res;
clock_serv_t clk_srv;
mach_timespec_t time_spec;
@@ -801,9 +852,7 @@ $trust_test
host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &clk_srv);
res = clock_get_time(clk_srv, &time_spec);
mach_port_deallocate(mach_task_self(), clk_srv);
- ],
- erl_cv_mach_clock_get_time_monotonic=yes,
- erl_cv_mach_clock_get_time_monotonic=no)
+ ]])],[erl_cv_mach_clock_get_time_monotonic=yes],[erl_cv_mach_clock_get_time_monotonic=no])
])
erl_corrected_monotonic_clock=no
@@ -908,40 +957,35 @@ AC_DEFUN(ERL_WALL_CLOCK,
AC_CACHE_CHECK([for clock_gettime() with ${check_msg}wall clock type], erl_cv_clock_gettime_wall_$1,
[
for clock_type in $prefer_resolution_clock_gettime_wall $default_resolution_clock_gettime_wall $high_resolution_clock_gettime_wall $low_resolution_clock_gettime_wall; do
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <time.h>
$trust_test
- ],
- [
+ ]], [[
struct timespec ts;
long long result;
clock_gettime($clock_type,&ts);
result = ((long long) ts.tv_sec) * 1000000000LL +
((long long) ts.tv_nsec);
- ],
- erl_cv_clock_gettime_wall_$1=$clock_type,
- erl_cv_clock_gettime_wall_$1=no)
+ ]])],[erl_cv_clock_gettime_wall_$1=$clock_type],[erl_cv_clock_gettime_wall_$1=no])
test $erl_cv_clock_gettime_wall_$1 = no || break
done
])
LIBS="$save_LIBS"
- if test "$LD_MAY_BE_WEAK" != "no"; then
- check_for_clock_getres=
- else
- check_for_clock_getres=clock_getres
- fi
+ AS_IF([test "$LD_MAY_BE_WEAK" = "no"],
+ [
+ AC_CHECK_FUNCS([clock_getres])
+ ])
- AC_CHECK_FUNCS([$check_for_clock_getres clock_get_attributes gettimeofday])
+ AC_CHECK_FUNCS([clock_get_attributes gettimeofday])
AC_CACHE_CHECK([for mach clock_get_time() with wall clock type], erl_cv_mach_clock_get_time_wall,
[
- AC_TRY_COMPILE([
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <mach/clock.h>
#include <mach/mach.h>
- ],
- [
+ ]], [[
kern_return_t res;
clock_serv_t clk_srv;
mach_timespec_t time_spec;
@@ -949,9 +993,7 @@ $trust_test
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &clk_srv);
res = clock_get_time(clk_srv, &time_spec);
mach_port_deallocate(mach_task_self(), clk_srv);
- ],
- erl_cv_mach_clock_get_time_wall=yes,
- erl_cv_mach_clock_get_time_wall=no)
+ ]])],[erl_cv_mach_clock_get_time_wall=yes],[erl_cv_mach_clock_get_time_wall=no])
])
erl_wall_clock_lib=
@@ -1003,13 +1045,16 @@ NEED_NPTL_PTHREAD_H=no
dnl win32?
AC_MSG_CHECKING([for native win32 threads])
-if test "X$host_os" = "Xwin32"; then
+AS_IF(
+ [test "X$host_os" = "Xwin32"],
+ [
AC_MSG_RESULT(yes)
THR_DEFS="-DWIN32_THREADS"
THR_LIBS=
THR_LIB_NAME=win32_threads
THR_LIB_TYPE=win32_threads
-else
+ ],
+ [
AC_MSG_RESULT(no)
THR_DEFS=
THR_LIBS=
@@ -1022,42 +1067,50 @@ dnl The usual pthread lib...
AC_CHECK_LIB(pthread, pthread_create, THR_LIBS="-lpthread")
dnl Very old versions of FreeBSD have pthreads in special c library, c_r...
- if test "x$THR_LIBS" = "x"; then
- AC_CHECK_LIB(c_r, pthread_create, THR_LIBS="-lc_r")
- fi
+ AS_IF([test "x$THR_LIBS" = "x"],
+ [
+ AC_CHECK_LIB([c_r], [pthread_create], [THR_LIBS="-lc_r"])
+ ])
dnl QNX has pthreads in standard C library
- if test "x$THR_LIBS" = "x"; then
- AC_CHECK_FUNC(pthread_create, THR_LIBS="none_needed")
- fi
+ AS_IF([test "x$THR_LIBS" = "x"],
+ [
+ AC_CHECK_FUNC([pthread_create], [THR_LIBS="none_needed"])
+ ])
dnl On ofs1 the '-pthread' switch should be used
- if test "x$THR_LIBS" = "x"; then
+ AS_IF(
+ [test "x$THR_LIBS" = "x"],
+ [
AC_MSG_CHECKING([if the '-pthread' switch can be used])
saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -pthread"
- AC_TRY_LINK([#include <pthread.h>],
- pthread_create((void*)0,(void*)0,(void*)0,(void*)0);,
- [THR_DEFS="-pthread"
- THR_LIBS="-pthread"])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[pthread_create((void*)0,(void*)0,(void*)0,(void*)0);]])],[THR_DEFS="-pthread"
+ THR_LIBS="-pthread"],[])
CFLAGS=$saved_cflags
if test "x$THR_LIBS" != "x"; then
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
- fi
+ ])
- if test "x$THR_LIBS" != "x"; then
+ AS_IF(
+ [test "x$THR_LIBS" != "x"],
+ [
THR_DEFS="$THR_DEFS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS"
THR_LIB_NAME=pthread
if test "x$THR_LIBS" = "xnone_needed"; then
THR_LIBS=
fi
- case $host_os in
- solaris*)
- THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;;
- linux*)
+ AS_CASE(
+ [$host_os],
+ [solaris*],
+ [
+ THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS"
+ ],
+ [linux*],
+ [
THR_DEFS="$THR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS"
LM_CHECK_GETCONF
@@ -1082,13 +1135,17 @@ dnl On ofs1 the '-pthread' switch should be used
nptl=yes
AC_MSG_WARN([result yes guessed because of cross compilation])
fi
- if test $nptl = yes; then
+ AS_IF(
+ [test $nptl = yes],
+ [
THR_LIB_TYPE=posix_nptl
need_nptl_incldir=no
- AC_CHECK_HEADER(nptl/pthread.h,
+ AC_CHECK_HEADER([nptl/pthread.h],
[need_nptl_incldir=yes
NEED_NPTL_PTHREAD_H=yes])
- if test $need_nptl_incldir = yes; then
+ AS_IF(
+ [test $need_nptl_incldir = yes],
+ [
# Ahh...
nptl_path="$C_INCLUDE_PATH:$CPATH"
if test X$cross_compiling != Xyes; then
@@ -1109,8 +1166,8 @@ dnl On ofs1 the '-pthread' switch should be used
IFS=$save_ifs
nptl_incldir=
for dir in $nptl_ws_path; do
- AC_CHECK_HEADER($dir/nptl/pthread.h,
- nptl_incldir=$dir/nptl)
+ AC_CHECK_HEADER([$dir/nptl/pthread.h],
+ [nptl_incldir=$dir/nptl])
if test "x$nptl_incldir" != "x"; then
THR_DEFS="$THR_DEFS -isystem $nptl_incldir"
break
@@ -1119,11 +1176,9 @@ dnl On ofs1 the '-pthread' switch should be used
if test "x$nptl_incldir" = "x"; then
AC_MSG_ERROR(Failed to locate nptl system include directory)
fi
- fi
- fi
- ;;
- *) ;;
- esac
+ ])
+ ])
+ ])
dnl We sometimes need THR_DEFS in order to find certain headers
dnl (at least for pthread.h on osf1).
@@ -1146,8 +1201,8 @@ dnl On ofs1 the '-pthread' switch should be used
dnl restore CPPFLAGS
CPPFLAGS=$saved_cppflags
- fi
-fi
+ ])
+ ])
])
@@ -1204,17 +1259,17 @@ AC_DEFUN(ETHR_CHK_GCC_ATOMIC_OP__,
AC_CACHE_CHECK([for 32-bit $1()], ethr_cv_32bit_$1,
[
ethr_cv_32bit_$1=no
- AC_TRY_LINK([], [$atomic32_call], [ethr_cv_32bit_$1=yes])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[$atomic32_call]])],[ethr_cv_32bit_$1=yes],[])
])
AC_CACHE_CHECK([for 64-bit $1()], ethr_cv_64bit_$1,
[
ethr_cv_64bit_$1=no
- AC_TRY_LINK([], [$atomic64_call], [ethr_cv_64bit_$1=yes])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[$atomic64_call]])],[ethr_cv_64bit_$1=yes],[])
])
AC_CACHE_CHECK([for 128-bit $1()], ethr_cv_128bit_$1,
[
ethr_cv_128bit_$1=no
- AC_TRY_LINK([], [$atomic128_call], [ethr_cv_128bit_$1=yes])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[$atomic128_call]])],[ethr_cv_128bit_$1=yes],[])
])
case $ethr_cv_128bit_$1-$ethr_cv_64bit_$1-$ethr_cv_32bit_$1 in
@@ -1303,9 +1358,7 @@ AC_DEFUN(ETHR_CHK_GCC_ATOMIC_OPS,
AC_CACHE_CHECK([for a working __sync_synchronize()], ethr_cv___sync_synchronize,
[
ethr_cv___sync_synchronize=no
- AC_TRY_LINK([],
- [ __sync_synchronize(); ],
- [ethr_cv___sync_synchronize=yes])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ __sync_synchronize(); ]])],[ethr_cv___sync_synchronize=yes],[])
if test $ethr_cv___sync_synchronize = yes; then
#
# Old gcc versions on at least x86 have a buggy
@@ -1346,16 +1399,16 @@ AC_DEFUN(ETHR_CHK_GCC_ATOMIC_OPS,
ethr_arm_dbm_sy_instr_val=0
ethr_arm_dbm_st_instr_val=0
ethr_arm_dbm_ld_instr_val=0
- case "$GCC-$host_cpu" in
- yes-arm*|yes-aarch*)
+ AS_CASE(
+ ["$GCC-$host_cpu"],
+ [yes-arm*|yes-aarch*],
+ [
AC_CACHE_CHECK([for ARM 'dmb sy' instruction], ethr_cv_arm_dbm_sy_instr,
[
ethr_cv_arm_dbm_sy_instr=no
- AC_TRY_LINK([],
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
__asm__ __volatile__("dmb sy" : : : "memory");
- ],
- [ethr_cv_arm_dbm_sy_instr=yes])
+ ]])],[ethr_cv_arm_dbm_sy_instr=yes],[])
])
if test $ethr_cv_arm_dbm_sy_instr = yes; then
ethr_arm_dbm_sy_instr_val=1
@@ -1365,11 +1418,9 @@ AC_DEFUN(ETHR_CHK_GCC_ATOMIC_OPS,
AC_CACHE_CHECK([for ARM 'dmb st' instruction], ethr_cv_arm_dbm_st_instr,
[
ethr_cv_arm_dbm_st_instr=no
- AC_TRY_LINK([],
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
__asm__ __volatile__("dmb st" : : : "memory");
- ],
- [ethr_cv_arm_dbm_st_instr=yes])
+ ]])],[ethr_cv_arm_dbm_st_instr=yes],[])
])
if test $ethr_cv_arm_dbm_st_instr = yes; then
ethr_arm_dbm_st_instr_val=1
@@ -1377,18 +1428,15 @@ AC_DEFUN(ETHR_CHK_GCC_ATOMIC_OPS,
AC_CACHE_CHECK([for ARM 'dmb ld' instruction], ethr_cv_arm_dbm_ld_instr,
[
ethr_cv_arm_dbm_ld_instr=no
- AC_TRY_LINK([],
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
__asm__ __volatile__("dmb ld" : : : "memory");
- ],
- [ethr_cv_arm_dbm_ld_instr=yes])
+ ]])],[ethr_cv_arm_dbm_ld_instr=yes],[])
])
if test $ethr_cv_arm_dbm_ld_instr = yes; then
ethr_arm_dbm_ld_instr_val=1
- fi;;
- *)
- ;;
- esac
+ fi
+ ])
+
AC_DEFINE_UNQUOTED([ETHR_HAVE_GCC_ASM_ARM_DMB_INSTRUCTION], [$ethr_arm_dbm_sy_instr_val], [Define as a boolean indicating whether you have a gcc compatible compiler capable of generating the ARM 'dmb sy' instruction, and are compiling for an ARM processor with ARM DMB instruction support, or not])
AC_DEFINE_UNQUOTED([ETHR_HAVE_GCC_ASM_ARM_DMB_ST_INSTRUCTION], [$ethr_arm_dbm_st_instr_val], [Define as a boolean indicating whether you have a gcc compatible compiler capable of generating the ARM 'dmb st' instruction, and are compiling for an ARM processor with ARM DMB instruction support, or not])
AC_DEFINE_UNQUOTED([ETHR_HAVE_GCC_ASM_ARM_DMB_LD_INSTRUCTION], [$ethr_arm_dbm_ld_instr_val], [Define as a boolean indicating whether you have a gcc compatible compiler capable of generating the ARM 'dmb ld' instruction, and are compiling for an ARM processor with ARM DMB instruction support, or not])
@@ -1424,20 +1472,17 @@ AC_DEFUN(ETHR_CHK_INTERLOCKED,
"4") ilckd_call="${ilckd}(var, ($3) 0, ($3) 0, arr);";;
esac
have_interlocked_op=no
- AC_TRY_LINK(
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <intrin.h>
- ],
- [
+ ]], [[
volatile $3 *var;
volatile $3 arr[2];
$ilckd_call
return 0;
- ],
- [have_interlocked_op=yes])
+ ]])],[have_interlocked_op=yes],[])
test $have_interlocked_op = yes && $4
AC_MSG_RESULT([$have_interlocked_op])
])
@@ -1580,9 +1625,10 @@ AS_HELP_STRING([--without-threadnames],
dnl Name of lib where ethread implementation is located
ethr_lib_name=ethread
-case "$THR_LIB_NAME" in
-
- win32_threads)
+AS_CASE(
+ ["$THR_LIB_NAME"],
+ [win32_threads],
+ [
ETHR_THR_LIB_BASE_DIR=win
# * _WIN32_WINNT >= 0x0400 is needed for
# TryEnterCriticalSection
@@ -1654,9 +1700,9 @@ case "$THR_LIB_NAME" in
ethr_native_atomic_implementation=windows
ethr_have_native_spinlock=yes
fi
- ;;
-
- pthread)
+ ],
+ [pthread],
+ [
ETHR_THR_LIB_BASE_DIR=pthread
AC_DEFINE(ETHR_PTHREADS, 1, [Define if you have pthreads])
case $host_os in
@@ -1751,15 +1797,9 @@ case "$THR_LIB_NAME" in
AC_DEFINE(ETHR_HAVE_SYS_TIME_H, 1, \
[Define if you have the <sys/time.h> header file.]))
- AC_TRY_COMPILE([#include <time.h>
- #include <sys/time.h>],
- [struct timeval *tv; return 0;],
- AC_DEFINE(ETHR_TIME_WITH_SYS_TIME, 1, \
-[Define if you can safely include both <sys/time.h> and <time.h>.]))
-
AC_MSG_CHECKING([for usable PTHREAD_STACK_MIN])
pthread_stack_min=no
- AC_TRY_COMPILE([
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <limits.h>
#if defined(ETHR_NEED_NPTL_PTHREAD_H)
#include <nptl/pthread.h>
@@ -1768,9 +1808,7 @@ case "$THR_LIB_NAME" in
#elif defined(ETHR_HAVE_PTHREAD_H)
#include <pthread.h>
#endif
- ],
- [return PTHREAD_STACK_MIN;],
- [pthread_stack_min=yes])
+ ]], [[return PTHREAD_STACK_MIN;]])],[pthread_stack_min=yes],[])
AC_MSG_RESULT([$pthread_stack_min])
test $pthread_stack_min != yes || {
@@ -1780,43 +1818,47 @@ case "$THR_LIB_NAME" in
dnl
dnl Check for functions
dnl
- AC_CHECK_FUNC(pthread_spin_lock, \
+ AC_CHECK_FUNC([pthread_spin_lock], \
[ethr_have_native_spinlock=yes \
AC_DEFINE(ETHR_HAVE_PTHREAD_SPIN_LOCK, 1, \
[Define if you have the pthread_spin_lock function.])])
have_sched_yield=no
have_librt_sched_yield=no
- AC_CHECK_FUNC(sched_yield, [have_sched_yield=yes])
- if test $have_sched_yield = no; then
- AC_CHECK_LIB(rt, sched_yield,
+ AC_CHECK_FUNC([sched_yield], [have_sched_yield=yes])
+ AS_IF(
+ [test $have_sched_yield = no],
+ [
+ AC_CHECK_LIB([rt], [sched_yield],
[have_librt_sched_yield=yes
ETHR_X_LIBS="$ETHR_X_LIBS -lrt"])
- fi
- if test $have_sched_yield = yes || test $have_librt_sched_yield = yes; then
+ ])
+ AS_IF(
+ [test $have_sched_yield = yes || test $have_librt_sched_yield = yes],
+ [
AC_DEFINE(ETHR_HAVE_SCHED_YIELD, 1, [Define if you have the sched_yield() function.])
AC_MSG_CHECKING([whether sched_yield() returns an int])
sched_yield_ret_int=no
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#ifdef ETHR_HAVE_SCHED_H
#include <sched.h>
#endif
- ],
- [int sched_yield();],
- [sched_yield_ret_int=yes])
+ ]], [[int sched_yield();]])],[sched_yield_ret_int=yes],[])
AC_MSG_RESULT([$sched_yield_ret_int])
if test $sched_yield_ret_int = yes; then
AC_DEFINE(ETHR_SCHED_YIELD_RET_INT, 1, [Define if sched_yield() returns an int.])
fi
- fi
+ ])
have_pthread_yield=no
- AC_CHECK_FUNC(pthread_yield, [have_pthread_yield=yes])
- if test $have_pthread_yield = yes; then
+ AC_CHECK_FUNC([pthread_yield], [have_pthread_yield=yes])
+ AS_IF(
+ [test $have_pthread_yield = yes],
+ [
AC_DEFINE(ETHR_HAVE_PTHREAD_YIELD, 1, [Define if you have the pthread_yield() function.])
AC_MSG_CHECKING([whether pthread_yield() returns an int])
pthread_yield_ret_int=no
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(ETHR_NEED_NPTL_PTHREAD_H)
#include <nptl/pthread.h>
#elif defined(ETHR_HAVE_MIT_PTHREAD_H)
@@ -1824,30 +1866,31 @@ case "$THR_LIB_NAME" in
#elif defined(ETHR_HAVE_PTHREAD_H)
#include <pthread.h>
#endif
- ],
- [int pthread_yield();],
- [pthread_yield_ret_int=yes])
+ ]], [[int pthread_yield();]])],[pthread_yield_ret_int=yes],[])
AC_MSG_RESULT([$pthread_yield_ret_int])
if test $pthread_yield_ret_int = yes; then
AC_DEFINE(ETHR_PTHREAD_YIELD_RET_INT, 1, [Define if pthread_yield() returns an int.])
fi
- fi
+ ])
have_pthread_rwlock_init=no
AC_CHECK_FUNC(pthread_rwlock_init, [have_pthread_rwlock_init=yes])
- if test $have_pthread_rwlock_init = yes; then
-
+ AS_IF(
+ [test $have_pthread_rwlock_init = yes],
+ [
ethr_have_pthread_rwlockattr_setkind_np=no
AC_CHECK_FUNC(pthread_rwlockattr_setkind_np,
[ethr_have_pthread_rwlockattr_setkind_np=yes])
- if test $ethr_have_pthread_rwlockattr_setkind_np = yes; then
+ AS_IF(
+ [test $ethr_have_pthread_rwlockattr_setkind_np = yes],
+ [
AC_DEFINE(ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP, 1, \
[Define if you have the pthread_rwlockattr_setkind_np() function.])
AC_MSG_CHECKING([for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP])
ethr_pthread_rwlock_writer_nonrecursive_initializer_np=no
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(ETHR_NEED_NPTL_PTHREAD_H)
#include <nptl/pthread.h>
#elif defined(ETHR_HAVE_MIT_PTHREAD_H)
@@ -1855,20 +1898,18 @@ case "$THR_LIB_NAME" in
#elif defined(ETHR_HAVE_PTHREAD_H)
#include <pthread.h>
#endif
- ],
- [
+ ]], [[
pthread_rwlockattr_t *attr;
return pthread_rwlockattr_setkind_np(attr,
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
- ],
- [ethr_pthread_rwlock_writer_nonrecursive_initializer_np=yes])
+ ]])],[ethr_pthread_rwlock_writer_nonrecursive_initializer_np=yes],[])
AC_MSG_RESULT([$ethr_pthread_rwlock_writer_nonrecursive_initializer_np])
if test $ethr_pthread_rwlock_writer_nonrecursive_initializer_np = yes; then
AC_DEFINE(ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 1, \
[Define if you have the PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP rwlock attribute.])
fi
- fi
- fi
+ ])
+ ])
if test "$force_pthread_rwlocks" = "yes"; then
@@ -1886,10 +1927,12 @@ case "$THR_LIB_NAME" in
AC_DEFINE(ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE, 1, \
[Define if you have the pthread_attr_setguardsize function.]))
- if test "x$erl_monotonic_clock_id" != "x"; then
+ AS_IF(
+ [test "x$erl_monotonic_clock_id" != "x"],
+ [
AC_MSG_CHECKING(whether pthread_cond_timedwait() can use the monotonic clock $erl_monotonic_clock_id for timeout)
pthread_cond_timedwait_monotonic=no
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(ETHR_NEED_NPTL_PTHREAD_H)
# include <nptl/pthread.h>
#elif defined(ETHR_HAVE_MIT_PTHREAD_H)
@@ -1897,22 +1940,15 @@ case "$THR_LIB_NAME" in
#elif defined(ETHR_HAVE_PTHREAD_H)
# include <pthread.h>
#endif
- #ifdef ETHR_TIME_WITH_SYS_TIME
- # include <time.h>
+ #include <time.h>
+ #ifdef ETHR_HAVE_SYS_TIME_H
# include <sys/time.h>
- #else
- # ifdef ETHR_HAVE_SYS_TIME_H
- # include <sys/time.h>
- # else
- # include <time.h>
- # endif
#endif
#if defined(ETHR_HAVE_MACH_CLOCK_GET_TIME)
# include <mach/clock.h>
# include <mach/mach.h>
#endif
- ],
- [
+ ]], [[
int res;
pthread_condattr_t attr;
pthread_cond_t cond;
@@ -1922,31 +1958,28 @@ case "$THR_LIB_NAME" in
res = pthread_condattr_setclock(&attr, ETHR_MONOTONIC_CLOCK_ID);
res = pthread_cond_init(&cond, &attr);
res = pthread_cond_timedwait(&cond, &mutex, &cond_timeout);
- ],
- [pthread_cond_timedwait_monotonic=yes])
+ ]])],[pthread_cond_timedwait_monotonic=yes],[])
AC_MSG_RESULT([$pthread_cond_timedwait_monotonic])
if test $pthread_cond_timedwait_monotonic = yes; then
AC_DEFINE(ETHR_HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC, [1], [Define if pthread_cond_timedwait() can be used with a monotonic clock])
fi
- fi
+ ])
linux_futex=no
AC_MSG_CHECKING([for Linux futexes])
- AC_TRY_LINK([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <sys/syscall.h>
#include <unistd.h>
#include <linux/futex.h>
#include <sys/time.h>
- ],
- [
+ ]], [[
int i = 1;
syscall(__NR_futex, (void *) &i, FUTEX_WAKE, 1,
(void*)0,(void*)0, 0);
syscall(__NR_futex, (void *) &i, FUTEX_WAIT, 0,
(void*)0,(void*)0, 0);
return 0;
- ],
- linux_futex=yes)
+ ]])],[linux_futex=yes],[])
AC_MSG_RESULT([$linux_futex])
test $linux_futex = yes && AC_DEFINE(ETHR_HAVE_LINUX_FUTEX, 1, [Define if you have a linux futex implementation.])
@@ -1954,18 +1987,12 @@ case "$THR_LIB_NAME" in
AC_MSG_CHECKING([for pthread_setname_np])
old_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror"
- AC_TRY_LINK([#define __USE_GNU
- #include <pthread.h>],
- [pthread_setname_np(pthread_self(), "name");],
- pthread_setname=linux)
- AC_TRY_LINK([#define __USE_GNU
- #include <pthread.h>],
- [pthread_set_name_np(pthread_self(), "name");],
- pthread_setname=bsd)
- AC_TRY_LINK([#define _DARWIN_C_SOURCE
- #include <pthread.h>],
- [pthread_setname_np("name");],
- pthread_setname=darwin)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define __USE_GNU
+ #include <pthread.h>]], [[pthread_setname_np(pthread_self(), "name");]])],[pthread_setname=linux],[])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define __USE_GNU
+ #include <pthread.h>]], [[pthread_set_name_np(pthread_self(), "name");]])],[pthread_setname=bsd],[])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define _DARWIN_C_SOURCE
+ #include <pthread.h>]], [[pthread_setname_np("name");]])],[pthread_setname=darwin],[])
AC_MSG_RESULT([$pthread_setname])
case $with_threadnames-$pthread_setname in
yes-linux) AC_DEFINE(ETHR_HAVE_PTHREAD_SETNAME_NP_2, 1,
@@ -1979,16 +2006,12 @@ case "$THR_LIB_NAME" in
pthread_getname=no
AC_MSG_CHECKING([for pthread_getname_np])
- AC_TRY_LINK([#define __USE_GNU
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define __USE_GNU
#define _DARWIN_C_SOURCE
- #include <pthread.h>],
- [char buff[256]; pthread_getname_np(pthread_self(), buff, 256);],
- pthread_getname=linux)
- AC_TRY_LINK([#define __USE_GNU
+ #include <pthread.h>]], [[char buff[256]; pthread_getname_np(pthread_self(), buff, 256);]])],[pthread_getname=linux],[])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define __USE_GNU
#define _DARWIN_C_SOURCE
- #include <pthread.h>],
- [char buff[256]; pthread_getname_np(pthread_self(), buff);],
- pthread_getname=ibm)
+ #include <pthread.h>]], [[char buff[256]; pthread_getname_np(pthread_self(), buff);]])],[pthread_getname=ibm],[])
AC_MSG_RESULT([$pthread_getname])
case $pthread_getname in
linux) AC_DEFINE(ETHR_HAVE_PTHREAD_GETNAME_NP_3, 1,
@@ -1999,10 +2022,12 @@ case "$THR_LIB_NAME" in
esac
CFLAGS=$old_CFLAGS
- if test "X$disable_native_ethr_impls" = "Xyes"; then
+ AS_IF(
+ [test "X$disable_native_ethr_impls" = "Xyes"],
+ [
ethr_have_native_atomics=no
- else
-
+ ],
+ [
ETHR_CHK_GCC_ATOMIC_OPS([])
AC_MSG_CHECKING([for a usable libatomic_ops implementation])
@@ -2019,8 +2044,7 @@ case "$THR_LIB_NAME" in
fi;;
esac
ethr_have_libatomic_ops=no
- AC_TRY_LINK([#include "atomic_ops.h"],
- [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "atomic_ops.h"]], [[
volatile AO_t x;
AO_t y;
int z;
@@ -2051,12 +2075,13 @@ case "$THR_LIB_NAME" in
#else
#error No compare_and_swap
#endif
- ],
- [ethr_have_native_atomics=yes
+ ]])],[ethr_have_native_atomics=yes
ethr_native_atomic_implementation=libatomic_ops
- ethr_have_libatomic_ops=yes])
+ ethr_have_libatomic_ops=yes],[])
AC_MSG_RESULT([$ethr_have_libatomic_ops])
- if test $ethr_have_libatomic_ops = yes; then
+ AS_IF(
+ [test $ethr_have_libatomic_ops = yes],
+ [
AC_CHECK_SIZEOF(AO_t, ,
[
#include <stdio.h>
@@ -2069,9 +2094,11 @@ case "$THR_LIB_NAME" in
AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations])
fi
ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include"
- elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then
+ ],
+ [test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"],
+ [
AC_MSG_ERROR([No usable libatomic_ops implementation found])
- fi
+ ])
case "$host_cpu" in
sparc | sun4u | sparc64 | sun4v)
@@ -2103,7 +2130,7 @@ case "$THR_LIB_NAME" in
;;
esac
- fi
+ ])
test ethr_have_native_atomics = "yes" && ethr_have_native_spinlock=yes
@@ -2112,10 +2139,7 @@ case "$THR_LIB_NAME" in
dnl restore CPPFLAGS
CPPFLAGS=$saved_cppflags
- ;;
- *)
- ;;
-esac
+ ])
AC_MSG_CHECKING([whether default stack size should be modified])
if test "x$ethr_modified_default_stack_size" != "x"; then
@@ -2167,32 +2191,30 @@ esac
AC_C_DOUBLE_MIDDLE_ENDIAN
ETHR_X86_SSE2_ASM=no
-case "$GCC-$ac_cv_sizeof_void_p-$host_cpu" in
- yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64)
+AS_CASE(
+ ["$GCC-$ac_cv_sizeof_void_p-$host_cpu"],
+ [yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64],
+ [
AC_MSG_CHECKING([for gcc sse2 asm support])
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -msse2"
gcc_sse2_asm=no
- AC_TRY_COMPILE([],
- [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
long long x, *y;
__asm__ __volatile__("movq %1, %0\n\t" : "=x"(x) : "m"(*y) : "memory");
- ],
- [gcc_sse2_asm=yes])
+ ]])],[gcc_sse2_asm=yes],[])
CFLAGS="$save_CFLAGS"
AC_MSG_RESULT([$gcc_sse2_asm])
if test "$gcc_sse2_asm" = "yes"; then
AC_DEFINE(ETHR_GCC_HAVE_SSE2_ASM_SUPPORT, 1, [Define if you use a gcc that supports -msse2 and understand sse2 specific asm statements])
ETHR_X86_SSE2_ASM=yes
fi
- ;;
- *)
- ;;
-esac
-
-case "$GCC-$host_cpu" in
- yes-i86pc | yes-i*86 | yes-x86_64 | yes-amd64)
+ ])
+AS_CASE(
+ ["$GCC-$host_cpu"],
+ [yes-i86pc | yes-i*86 | yes-x86_64 | yes-amd64],
+ [
if test $ac_cv_sizeof_void_p = 4; then
dw_cmpxchg="cmpxchg8b"
else
@@ -2221,8 +2243,7 @@ case "$GCC-$host_cpu" in
AC_MSG_CHECKING([for gcc $pic_text$dw_cmpxchg plain asm support])
plain_cmpxchg=no
- AC_TRY_COMPILE([],
- [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
char xchgd;
long new[2], xchg[2], *p;
__asm__ __volatile__(
@@ -2235,8 +2256,7 @@ case "$GCC-$host_cpu" in
: "=m"(*p), "=d"(xchg[1]), "=a"(xchg[0]), "=q"(xchgd)
: "m"(*p), "1"(xchg[1]), "2"(xchg[0]), "c"(new[1]), "b"(new[0])
: "cc", "memory");
- ],
- [plain_cmpxchg=yes])
+ ]])],[plain_cmpxchg=yes],[])
AC_MSG_RESULT([$plain_cmpxchg])
@@ -2255,15 +2275,12 @@ case "$GCC-$host_cpu" in
# as input to the asm on 32-bit x86 and old gcc
# compilers (gcc vsn < 5).
- AC_TRY_COMPILE([],
- [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
#if !defined(__PIC__) || !__PIC__
# error no pic
#endif
- ],
- [pic_cmpxchg=yes
- gcc_cflags_pic=yes],
- [pic_cmpxchg=no])
+ ]])],[pic_cmpxchg=yes
+ gcc_cflags_pic=yes],[pic_cmpxchg=no])
if test $pic_cmpxchg = yes; then
gcc_pic_dw_cmpxchg_asm=$gcc_dw_cmpxchg_asm
@@ -2275,15 +2292,16 @@ case "$GCC-$host_cpu" in
done
- if test $gcc_pic_dw_cmpxchg_asm = no && test $ac_cv_sizeof_void_p = 4; then
+ AS_IF(
+ [test $gcc_pic_dw_cmpxchg_asm = no && test $ac_cv_sizeof_void_p = 4],
+ [
AC_MSG_CHECKING([for gcc pic cmpxchg8b asm support with EBX workaround])
# Check if we can work around it by managing the ebx
# register explicitly in the asm...
- AC_TRY_COMPILE([],
- [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
char xchgd;
long new[2], xchg[2], *p;
__asm__ __volatile__(
@@ -2295,21 +2313,21 @@ case "$GCC-$host_cpu" in
: "=m"(*p), "=d"(xchg[1]), "=a"(xchg[0]), "=q"(xchgd)
: "m"(*p), "1"(xchg[1]), "2"(xchg[0]), "c"(new[1]), "r"(new[0])
: "cc", "memory");
- ],
- [gcc_pic_dw_cmpxchg_asm=yes
- gcc_cmpxchg8b_pic_no_clobber_ebx=yes])
+ ]])],[gcc_pic_dw_cmpxchg_asm=yes
+ gcc_cmpxchg8b_pic_no_clobber_ebx=yes],[])
AC_MSG_RESULT([$gcc_pic_dw_cmpxchg_asm])
- if test $gcc_pic_dw_cmpxchg_asm = no; then
+ AS_IF(
+ [test $gcc_pic_dw_cmpxchg_asm = no],
+ [
AC_MSG_CHECKING([for gcc pic cmpxchg8b asm support with EBX and register shortage workarounds])
# If no optimization is enabled we sometimes get a
# register shortage. Check if we can work around
# this...
- AC_TRY_COMPILE([],
- [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
char xchgd;
long new[2], xchg[2], *p;
__asm__ __volatile__(
@@ -2323,19 +2341,17 @@ case "$GCC-$host_cpu" in
: "m"(*p), "1"(xchg[1]), "2"(xchg[0]), "r"(new)
: "cc", "memory");
- ],
- [gcc_pic_dw_cmpxchg_asm=yes
+ ]])],[gcc_pic_dw_cmpxchg_asm=yes
gcc_cmpxchg8b_pic_no_clobber_ebx=yes
- gcc_cmpxchg8b_pic_no_clobber_ebx_register_shortage=yes])
+ gcc_cmpxchg8b_pic_no_clobber_ebx_register_shortage=yes],[])
AC_MSG_RESULT([$gcc_pic_dw_cmpxchg_asm])
- fi
+ ])
if test $gcc_cflags_pic = yes; then
gcc_dw_cmpxchg_asm=$gcc_pic_dw_cmpxchg_asm
fi
-
- fi
+ ])
CFLAGS="$save_CFLAGS"
@@ -2347,10 +2363,8 @@ case "$GCC-$host_cpu" in
fi
if test "$gcc_dw_cmpxchg_asm" = "yes"; then
AC_DEFINE(ETHR_GCC_HAVE_DW_CMPXCHG_ASM_SUPPORT, 1, [Define if you use a gcc that supports the double word cmpxchg instruction])
- fi;;
- *)
- ;;
-esac
+ fi
+ ])
AC_DEFINE(ETHR_HAVE_ETHREAD_DEFINES, 1, \
[Define if you have all ethread defines])
@@ -2417,7 +2431,9 @@ case "$with_clock_resolution" in
;;
esac
-if test "$force_gettimeofday_os_system_time" = "yes"; then
+AS_IF(
+ [test "$force_gettimeofday_os_system_time" = "yes"],
+ [
AC_CHECK_FUNCS([gettimeofday])
if test "$ac_cv_func_gettimeofday" = "yes"; then
@@ -2425,8 +2441,9 @@ if test "$force_gettimeofday_os_system_time" = "yes"; then
else
AC_MSG_ERROR([No gettimeofday() available])
fi
-
-else # $force_gettimeofday_os_system_time != yes
+ ],
+ [
+ # $force_gettimeofday_os_system_time != yes
case "$with_clock_gettime_realtime_id" in
""|no)
@@ -2445,16 +2462,22 @@ case "$with_clock_gettime_realtime_id" in
;;
esac
-case "$with_clock_resolution-$with_clock_gettime_realtime_id" in
- high-no)
- ERL_WALL_CLOCK(high_resolution);;
- low-no)
- ERL_WALL_CLOCK(low_resolution);;
- default-no)
- ERL_WALL_CLOCK(default_resolution);;
- *)
- ERL_WALL_CLOCK(custom_resolution, $with_clock_gettime_realtime_id);;
-esac
+AS_CASE(["$with_clock_resolution-$with_clock_gettime_realtime_id"],
+ [high-no],
+ [
+ ERL_WALL_CLOCK([high_resolution])
+ ],
+ [low-no],
+ [
+ ERL_WALL_CLOCK([low_resolution])
+ ],
+ [default-no],
+ [
+ ERL_WALL_CLOCK([default_resolution])
+ ],
+ [
+ ERL_WALL_CLOCK([custom_resolution], [$with_clock_gettime_realtime_id])
+ ])
case "$erl_wall_clock_func-$erl_wall_clock_id-$with_clock_gettime_realtime_id" in
*-*-no)
@@ -2488,7 +2511,7 @@ if test "x$erl_wall_clock_id" != "x"; then
AC_DEFINE_UNQUOTED(WALL_CLOCK_ID, [$erl_wall_clock_id], [Define to wall clock id to use])
fi
-fi # $force_gettimeofday_os_system_time != yes
+ ]) # $force_gettimeofday_os_system_time != yes
case "$with_clock_gettime_monotonic_id" in
""|no)
@@ -2507,16 +2530,22 @@ case "$with_clock_gettime_monotonic_id" in
;;
esac
-case "$with_clock_resolution-$with_clock_gettime_monotonic_id" in
- high-no)
- ERL_MONOTONIC_CLOCK(high_resolution, undefined, $prefer_elapsed_monotonic_time_during_suspend);;
- low-no)
- ERL_MONOTONIC_CLOCK(low_resolution, undefined, $prefer_elapsed_monotonic_time_during_suspend);;
- default-no)
- ERL_MONOTONIC_CLOCK(default_resolution, undefined, $prefer_elapsed_monotonic_time_during_suspend);;
- *)
- ERL_MONOTONIC_CLOCK(custom_resolution, $with_clock_gettime_monotonic_id, $prefer_elapsed_monotonic_time_during_suspend);;
-esac
+AS_CASE(["$with_clock_resolution-$with_clock_gettime_monotonic_id"],
+ [high-no],
+ [
+ ERL_MONOTONIC_CLOCK([high_resolution], [undefined], [$prefer_elapsed_monotonic_time_during_suspend])
+ ],
+ [low-no],
+ [
+ ERL_MONOTONIC_CLOCK([low_resolution], [undefined], [$prefer_elapsed_monotonic_time_during_suspend])
+ ],
+ [default-no],
+ [
+ ERL_MONOTONIC_CLOCK([default_resolution], [undefined], [$prefer_elapsed_monotonic_time_during_suspend])
+ ],
+ [
+ ERL_MONOTONIC_CLOCK([custom_resolution], [$with_clock_gettime_monotonic_id], [$prefer_elapsed_monotonic_time_during_suspend])
+ ])
case "$erl_monotonic_clock_func-$erl_monotonic_clock_id-$with_clock_gettime_monotonic_id" in
*-*-no)
@@ -2569,7 +2598,7 @@ if test $erl_cv_clock_gettime_monotonic_raw = yes; then
AC_DEFINE(HAVE_CLOCK_GETTIME_MONOTONIC_RAW, [1], [Define if you have clock_gettime(CLOCK_MONOTONIC_RAW, _)])
fi
-ERL_MONOTONIC_CLOCK(high_resolution, undefined, no)
+ERL_MONOTONIC_CLOCK([high_resolution], [undefined], [no])
case $erl_monotonic_clock_low_resolution-$erl_monotonic_clock_func in
no-mach_clock_get_time)
@@ -2605,7 +2634,7 @@ dnl or (yet to be written) write to the procfs ctl file.
dnl
AC_MSG_CHECKING([if gethrvtime works and how to use it])
-AC_TRY_RUN([
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
/* gethrvtime procfs ioctl test */
/* These need to be undef:ed to not break activation of
* micro level process accounting on /proc/self
@@ -2653,10 +2682,7 @@ int main() {
exit(5);
exit(0); return 0;
}
-],
-erl_gethrvtime=procfs_ioctl,
-erl_gethrvtime=false,
-[
+]])],[erl_gethrvtime=procfs_ioctl],[erl_gethrvtime=false],[
case X$erl_xcomp_gethrvtime_procfs_ioctl in
X)
erl_gethrvtime=cross;;
@@ -2672,13 +2698,13 @@ esac
])
LIBRT=$xrtlib
-case $erl_gethrvtime in
- procfs_ioctl)
+AS_IF([test "$erl_gethrvtime" = "procfs_ioctl"],
+ [
AC_DEFINE(HAVE_GETHRVTIME_PROCFS_IOCTL,[1],
[define if gethrvtime() works and uses ioctl() to /proc/self])
AC_MSG_RESULT(uses ioctl to procfs)
- ;;
- *)
+ ],
+ [
if test $erl_gethrvtime = cross; then
erl_gethrvtime=false
AC_MSG_RESULT(cross)
@@ -2694,7 +2720,7 @@ case $erl_gethrvtime in
AC_MSG_CHECKING([if clock_gettime can be used to get thread CPU time])
save_libs=$LIBS
LIBS="-lrt"
- AC_TRY_RUN([
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
@@ -2717,10 +2743,7 @@ case $erl_gethrvtime in
exit(5);
exit(0); return 0;
}
- ],
- erl_clock_gettime_cpu_time=yes,
- erl_clock_gettime_cpu_time=no,
- [
+ ]])],[erl_clock_gettime_cpu_time=yes],[erl_clock_gettime_cpu_time=no],[
case X$erl_xcomp_clock_gettime_cpu_time in
X) erl_clock_gettime_cpu_time=cross;;
Xyes|Xno) erl_clock_gettime_cpu_time=$erl_xcomp_clock_gettime_cpu_time;;
@@ -2742,8 +2765,7 @@ case $erl_gethrvtime in
*)
;;
esac
- ;;
-esac
+ ])
AC_SUBST(LIBRT)
])dnl
@@ -2762,29 +2784,35 @@ AC_DEFUN([LM_TRY_ENABLE_CFLAG], [
AC_MSG_CHECKING([if we can add $1 to $2 (via CFLAGS)])
saved_CFLAGS=$CFLAGS;
CFLAGS="$1 $$2";
- AC_TRY_COMPILE([],[return 0;],can_enable_flag=true,can_enable_flag=false)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[can_enable_flag=true],[can_enable_flag=false])
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
+ AS_IF(
+ [test "X$can_enable_flag" = "Xtrue"],
+ [
AC_MSG_RESULT([yes])
AS_VAR_SET($2, "$1 $$2")
- else
+ ],
+ [
AC_MSG_RESULT([no])
- fi
+ ])
])
AC_DEFUN([LM_CHECK_ENABLE_CFLAG], [
AC_MSG_CHECKING([whether $CC accepts $1...])
saved_CFLAGS=$CFLAGS;
CFLAGS="$1 $CFLAGS";
- AC_TRY_COMPILE([],[return 0;],can_enable_flag=true,can_enable_flag=false)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[can_enable_flag=true],[can_enable_flag=false])
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
+ AS_IF(
+ [test "X$can_enable_flag" = "Xtrue"],
+ [
AS_VAR_SET($2, true)
AC_MSG_RESULT([yes])
- else
+ ],
+ [
AS_VAR_SET($2, false)
AC_MSG_RESULT([no])
- fi
+ ])
])
dnl
@@ -2798,23 +2826,26 @@ AC_DEFUN([LM_CHECK_RUN_CFLAG], [
AC_MSG_CHECKING([whether $CC accepts $1...])
saved_CFLAGS=$CFLAGS;
CFLAGS="$1 $CFLAGS";
- AC_TRY_RUN([],[return 0;],can_enable_flag=true,can_enable_flag=false)
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[]])],[return 0;],[can_enable_flag=true],[can_enable_flag=false])
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
+ AS_IF(
+ [test "X$can_enable_flag" = "Xtrue"],
+ [
AS_VAR_SET($2, true)
AC_MSG_RESULT([yes])
- else
+ ],
+ [
AS_VAR_SET($2, false)
AC_MSG_RESULT([no])
- fi
+ ])
])
dnl ERL_TRY_LINK_JAVA(CLASSES, FUNCTION-BODY
dnl [ACTION_IF_FOUND [, ACTION-IF-NOT-FOUND]])
-dnl Freely inspired by AC_TRY_LINK. (Maybe better to create a
+dnl Freely inspired by AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]). (Maybe better to create a
dnl AC_LANG_JAVA instead...)
AC_DEFUN(ERL_TRY_LINK_JAVA,
-[java_link='$JAVAC conftest.java 1>&AC_FD_CC'
+[java_link='$JAVAC conftest.java 1>&AS_MESSAGE_LOG_FD'
changequote(, )dnl
cat > conftest.java <<EOF
$1
@@ -2823,20 +2854,24 @@ class conftest { public static void main(String[] args) {
; return; }}
EOF
changequote([, ])dnl
-if AC_TRY_EVAL(java_link) && test -s conftest.class; then
+AS_IF(
+ [AC_TRY_EVAL(java_link) && test -s conftest.class],
+ [
ifelse([$3], , :, [rm -rf conftest*
$3])
-else
- echo "configure: failed program was:" 1>&AC_FD_CC
- cat conftest.java 1>&AC_FD_CC
- echo "configure: PATH was $PATH" 1>&AC_FD_CC
+
+ ],
+ [
+ echo "configure: failed program was:" 1>&AS_MESSAGE_LOG_FD
+ cat conftest.java 1>&AS_MESSAGE_LOG_FD
+ echo "configure: PATH was $PATH" 1>&AS_MESSAGE_LOG_FD
ifelse([$4], , , [ rm -rf conftest*
$4
])dnl
-fi
-rm -f conftest*])
-#define UNSAFE_MASK 0xc0000000 /* Mask for bits that must be constant */
+ ])
+rm -f conftest*])
+dnl #define UNSAFE_MASK 0xc0000000 /* Mask for bits that must be constant */
dnl ----------------------------------------------------------------------
dnl
@@ -3004,7 +3039,9 @@ else
fi
# DED_EMU_THR_DEFS=$EMU_THR_DEFS
DED_CFLAGS="$CFLAGS $CPPFLAGS $DED_CFLAGS"
-if test "x$GCC" = xyes; then
+AS_IF(
+ [test "x$GCC" = xyes],
+ [
# Use -fno-common for gcc, that is link error if multiple definitions of
# global variables are encountered. This is ISO C compliant.
# Until version 10, gcc has had -fcommon as default, which allows and merges
@@ -3015,7 +3052,7 @@ if test "x$GCC" = xyes; then
DED_CFLAGS="$DED_CFLAGS -fPIC"
# Remove -fPIE and -fno-PIE
DED_CFLAGS=`echo $DED_CFLAGS | sed 's/-f\(no-\)\?PIE//g'`
-fi
+ ])
DED_EXT=so
case $host_os in
diff --git a/erts/autoconf/win32.config.cache.static b/make/autoconf/win32.config.cache.static
index b3328e5414..790ea9ab00 100755
--- a/erts/autoconf/win32.config.cache.static
+++ b/make/autoconf/win32.config.cache.static
@@ -36,11 +36,11 @@ ac_cv_env_CXX_value=cc.sh
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_build_alias_set=set
-ac_cv_env_build_alias_value=win32
+ac_cv_env_build_alias_value=local-x86-pc-windows
ac_cv_env_host_alias_set=set
-ac_cv_env_host_alias_value=win32
+ac_cv_env_host_alias_value=local-x86-pc-windows
ac_cv_env_target_alias_set=set
-ac_cv_env_target_alias_value=win32
+ac_cv_env_target_alias_value=local-x86-pc-windows
ac_cv_exeext=${ac_cv_exeext=.exe}
ac_cv_func___brk=${ac_cv_func___brk=no}
ac_cv_func___sbrk=${ac_cv_func___sbrk=no}
diff --git a/erts/autoconf/win64.config.cache.static b/make/autoconf/win64.config.cache.static
index c7d92c7000..73146cbb86 100755
--- a/erts/autoconf/win64.config.cache.static
+++ b/make/autoconf/win64.config.cache.static
@@ -40,11 +40,11 @@ ac_cv_env_CXX_value=cc.sh
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_build_alias_set=set
-ac_cv_env_build_alias_value=win32
+ac_cv_env_build_alias_value=local-x86_64-pc-windows
ac_cv_env_host_alias_set=set
-ac_cv_env_host_alias_value=win32
+ac_cv_env_host_alias_value=local-x86_64-pc-windows
ac_cv_env_target_alias_set=set
-ac_cv_env_target_alias_value=win32
+ac_cv_env_target_alias_value=local-x86_64-pc-windows
ac_cv_exeext=${ac_cv_exeext=.exe}
ac_cv_func___brk=${ac_cv_func___brk=no}
ac_cv_func___sbrk=${ac_cv_func___sbrk=no}
diff --git a/make/configure b/make/configure
index 02204f72d0..6df40104c9 100755
--- a/make/configure
+++ b/make/configure
@@ -1,9 +1,10 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.71.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -14,14 +15,16 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else
+else \$as_nop
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
-else
+else \$as_nop
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
+ if (eval "$as_required") 2>/dev/null
+then :
as_have_required=yes
-else
+else $as_nop
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
-else
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
+ as_shell=$as_dir$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
break 2
fi
fi
@@ -228,14 +221,21 @@ fi
esac
as_found=false
done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
IFS=$as_save_IFS
+if $as_found
+then :
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
- if test "x$CONFIG_SHELL" != x; then :
+
+ if test "x$CONFIG_SHELL" != x
+then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,18 +253,19 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -291,6 +292,7 @@ as_fn_unset ()
}
as_unset=as_fn_unset
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -308,6 +310,14 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -322,7 +332,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -370,12 +380,13 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -387,18 +398,27 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -410,9 +430,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -439,7 +459,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -483,7 +503,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -497,6 +517,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -510,6 +534,13 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -575,49 +606,45 @@ MFLAGS=
MAKEFLAGS=
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PACKAGE_STRING=''
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
# Factoring default headers for most tests.
ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
#endif
#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
+ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
DED_OSTYPE
@@ -633,8 +660,6 @@ DED_SYS_INCLUDE
DED_EXT
DED_GCC
DED_CC
-EGREP
-GREP
DEFAULT_VERBOSITY
OTP_VSN
OTP_REL
@@ -655,6 +680,10 @@ ac_ct_CC
BOOTSTRAP_ONLY
CROSS_COMPILING
TARGET
+target_os
+target_vendor
+target_cpu
+target
host_os
host_vendor
host_cpu
@@ -879,8 +908,6 @@ do
*) ac_optarg=yes ;;
esac
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -921,9 +948,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -947,9 +974,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1160,9 +1187,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1176,9 +1203,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1222,9 +1249,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1240,7 +1267,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1304,7 +1331,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1422,6 +1449,7 @@ _ACEOF
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
_ACEOF
fi
@@ -1609,9 +1637,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1639,7 +1667,8 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1647,7 +1676,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1657,9 +1686,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.71
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1676,14 +1705,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1691,14 +1720,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1714,14 +1744,14 @@ fi
ac_fn_cxx_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
+ rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1729,14 +1759,15 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_cxx_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
+ } && test -s conftest.$ac_objext
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1752,14 +1783,14 @@ fi
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1767,17 +1798,18 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }; then :
+ }
+then :
ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1798,11 +1830,12 @@ fi
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -1810,16 +1843,9 @@ else
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ which can conflict with char $2 (); below. */
+#include <limits.h>
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -1837,156 +1863,66 @@ choke me
#endif
int
-main ()
+main (void)
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
eval "$3=yes"
-else
+else $as_nop
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-} # ac_fn_c_check_header_mongrel
+} # ac_fn_c_check_header_compile
# ac_fn_c_try_run LINENO
# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
ac_fn_c_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1996,25 +1932,26 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
@@ -2025,37 +1962,6 @@ fi
} # ac_fn_c_try_run
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
# --------------------------------------------
# Tries to find the compile-time value of EXPR in a program that includes
@@ -2070,7 +1976,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0;
@@ -2080,14 +1986,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=0 ac_mid=0
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -2097,9 +2004,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid; break
-else
+else $as_nop
as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
@@ -2107,14 +2015,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0;
@@ -2124,14 +2032,15 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=-1 ac_mid=-1
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0;
@@ -2141,9 +2050,10 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_lo=$ac_mid; break
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
@@ -2151,14 +2061,14 @@ else
fi
as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else
+else $as_nop
ac_lo= ac_hi=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -2166,7 +2076,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
/* end confdefs.h. */
$4
int
-main ()
+main (void)
{
static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0;
@@ -2176,12 +2086,13 @@ return test_array [0];
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_hi=$ac_mid
-else
+else $as_nop
as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
case $ac_lo in #((
?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -2191,12 +2102,12 @@ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.val", "w");
@@ -2224,9 +2135,10 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
ac_retval=1
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -2238,14 +2150,34 @@ rm -f conftest.val
as_fn_set_status $ac_retval
} # ac_fn_c_compute_int
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
- $ $0 $@
+ $ $0$ac_configure_args_raw
_ACEOF
exec 5>>config.log
@@ -2278,8 +2210,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2314,7 +2250,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2349,11 +2285,13 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- $as_echo "## ---------------- ##
+ printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2364,8 +2302,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2389,7 +2327,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- $as_echo "## ----------------- ##
+ printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2397,14 +2335,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
+ printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2412,15 +2350,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- $as_echo "## ----------- ##
+ printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2428,8 +2366,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2443,63 +2381,48 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
+ ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2509,19 +2432,650 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+# Test code for whether the C++ compiler supports C++98 (global declarations)
+ac_cxx_conftest_cxx98_globals='
+// Does the compiler advertise C++98 conformance?
+#if !defined __cplusplus || __cplusplus < 199711L
+# error "Compiler does not advertise C++98 conformance"
+#endif
+
+// These inclusions are to reject old compilers that
+// lack the unsuffixed header files.
+#include <cstdlib>
+#include <exception>
+
+// <cassert> and <cstring> are *not* freestanding headers in C++98.
+extern void assert (int);
+namespace std {
+ extern int strcmp (const char *, const char *);
+}
+
+// Namespaces, exceptions, and templates were all added after "C++ 2.0".
+using std::exception;
+using std::strcmp;
+
+namespace {
+
+void test_exception_syntax()
+{
+ try {
+ throw "test";
+ } catch (const char *s) {
+ // Extra parentheses suppress a warning when building autoconf itself,
+ // due to lint rules shared with more typical C programs.
+ assert (!(strcmp) (s, "test"));
+ }
+}
+
+template <typename T> struct test_template
+{
+ T const val;
+ explicit test_template(T t) : val(t) {}
+ template <typename U> T add(U u) { return static_cast<T>(u) + val; }
+};
+
+} // anonymous namespace
+'
+
+# Test code for whether the C++ compiler supports C++98 (body of main)
+ac_cxx_conftest_cxx98_main='
+ assert (argc);
+ assert (! argv[0]);
+{
+ test_exception_syntax ();
+ test_template<double> tt (2.0);
+ assert (tt.add (4) == 6.0);
+ assert (true && !false);
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (global declarations)
+ac_cxx_conftest_cxx11_globals='
+// Does the compiler advertise C++ 2011 conformance?
+#if !defined __cplusplus || __cplusplus < 201103L
+# error "Compiler does not advertise C++11 conformance"
+#endif
+
+namespace cxx11test
+{
+ constexpr int get_val() { return 20; }
+
+ struct testinit
+ {
+ int i;
+ double d;
+ };
+
+ class delegate
+ {
+ public:
+ delegate(int n) : n(n) {}
+ delegate(): delegate(2354) {}
+
+ virtual int getval() { return this->n; };
+ protected:
+ int n;
+ };
+
+ class overridden : public delegate
+ {
+ public:
+ overridden(int n): delegate(n) {}
+ virtual int getval() override final { return this->n * 2; }
+ };
+
+ class nocopy
+ {
+ public:
+ nocopy(int i): i(i) {}
+ nocopy() = default;
+ nocopy(const nocopy&) = delete;
+ nocopy & operator=(const nocopy&) = delete;
+ private:
+ int i;
+ };
+
+ // for testing lambda expressions
+ template <typename Ret, typename Fn> Ret eval(Fn f, Ret v)
+ {
+ return f(v);
+ }
+
+ // for testing variadic templates and trailing return types
+ template <typename V> auto sum(V first) -> V
+ {
+ return first;
+ }
+ template <typename V, typename... Args> auto sum(V first, Args... rest) -> V
+ {
+ return first + sum(rest...);
+ }
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (body of main)
+ac_cxx_conftest_cxx11_main='
+{
+ // Test auto and decltype
+ auto a1 = 6538;
+ auto a2 = 48573953.4;
+ auto a3 = "String literal";
+
+ int total = 0;
+ for (auto i = a3; *i; ++i) { total += *i; }
+
+ decltype(a2) a4 = 34895.034;
+}
+{
+ // Test constexpr
+ short sa[cxx11test::get_val()] = { 0 };
+}
+{
+ // Test initializer lists
+ cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+ // Test range-based for
+ int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3,
+ 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+ for (auto &x : array) { x += 23; }
+}
+{
+ // Test lambda expressions
+ using cxx11test::eval;
+ assert (eval ([](int x) { return x*2; }, 21) == 42);
+ double d = 2.0;
+ assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0);
+ assert (d == 5.0);
+ assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0);
+ assert (d == 5.0);
+}
+{
+ // Test use of variadic templates
+ using cxx11test::sum;
+ auto a = sum(1);
+ auto b = sum(1, 2);
+ auto c = sum(1.0, 2.0, 3.0);
+}
+{
+ // Test constructor delegation
+ cxx11test::delegate d1;
+ cxx11test::delegate d2();
+ cxx11test::delegate d3(45);
+}
+{
+ // Test override and final
+ cxx11test::overridden o1(55464);
+}
+{
+ // Test nullptr
+ char *c = nullptr;
+}
+{
+ // Test template brackets
+ test_template<::test_template<int>> v(test_template<int>(12));
+}
+{
+ // Unicode literals
+ char const *utf8 = u8"UTF-8 string \u2500";
+ char16_t const *utf16 = u"UTF-8 string \u2500";
+ char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+'
+
+# Test code for whether the C compiler supports C++11 (complete).
+ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals}
+${ac_cxx_conftest_cxx11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ ${ac_cxx_conftest_cxx11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C++98 (complete).
+ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals}
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="install-sh config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${ERL_TOP}/make/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2532,12 +3086,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2546,24 +3100,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2573,11 +3127,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2636,6 +3191,95 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
default_cache_file=./config.cache
if test "x$no_recursion" != "xyes" -a "x$OVERRIDE_CONFIG_CACHE" = "x"; then
@@ -2690,58 +3334,32 @@ esac
test "X$ERL_TOP" != "X" || as_fn_error $? "ERL_TOP not set" "$LINENO" 5
-ac_aux_dir=
-for ac_dir in ${ERL_TOP}/erts/autoconf "$srcdir"/${ERL_TOP}/erts/autoconf; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ${ERL_TOP}/erts/autoconf \"$srcdir\"/${ERL_TOP}/erts/autoconf" "$LINENO" 5
-fi
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2760,21 +3378,22 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2793,31 +3412,112 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+printf %s "checking target system type... " >&6; }
+if test ${ac_cv_target+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
else
- host_os=$host
+ ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
fi
-TARGET=$host
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+printf "%s\n" "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-if test "$cross_compiling" = "yes"; then
- if test "$build" = "$host"; then
- as_fn_error $? "
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+ # Adjust for local legacy windows hack...
+ case $host in #(
+ local-*-windows) :
+
+ host=win32
+ host_os=win32
+ host_vendor=
+ host_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $build in #(
+ local-*-windows) :
+
+ build=win32
+ build_os=win32
+ build_vendor=
+ build_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+ # Adjust for local legacy windows hack...
+ case $target in #(
+ local-*-windows) :
+
+ target=win32
+ target_os=win32
+ target_vendor=
+ target_cpu=
+ ;; #(
+ *) :
+ ;;
+esac
+
+ if test "$cross_compiling" = "yes" -a "$build" = "$host"
+then :
+ as_fn_error $? "
Cross compiling with the same canonicalized 'host' value
as the canonicalized 'build' value.
We are cross compiling since the '--host=$host_alias'
and the '--build=$build_alias' arguments differ. When
- cross compiling Erlang/OTP also the canonicalized values of
+ cross compiling Erlang/OTP, also the canonicalized values of
the '--build' and the '--host' arguments *must* differ. The
canonicalized values of these arguments however both equals:
$host
You can check the canonical value by passing a value as
- argument to the 'erts/autoconf/config.sub' script.
- " "$LINENO" 5
- fi
+ argument to the 'make/autoconf/config.sub' script.
+ " "$LINENO" 5
+fi
+
+
+TARGET=$host
+
+
+if test "$cross_compiling" = "yes"; then
CROSS_COMPILING=yes
else
CROSS_COMPILING=no
@@ -2825,14 +3525,15 @@ fi
# Check whether --enable-bootstrap-only was given.
-if test "${enable_bootstrap_only+set}" = set; then :
+if test ${enable_bootstrap_only+y}
+then :
enableval=$enable_bootstrap_only; if test "X$enableval" = "Xyes"; then
BOOTSTRAP_ONLY=yes
else
BOOTSTRAP_ONLY=no
fi
-else
+else $as_nop
BOOTSTRAP_ONLY=no
fi
@@ -2844,6 +3545,15 @@ if test $CROSS_COMPILING = yes -a $BOOTSTRAP_ONLY = yes; then
fi
+
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2852,11 +3562,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2864,11 +3575,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2879,11 +3594,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2892,11 +3607,12 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2904,11 +3620,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2919,11 +3639,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2931,8 +3651,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2945,11 +3665,12 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2957,11 +3678,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2972,11 +3697,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -2985,11 +3710,12 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2998,15 +3724,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3022,18 +3752,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3044,11 +3774,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -3056,11 +3787,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3071,11 +3806,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3088,11 +3823,12 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -3100,11 +3836,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3115,11 +3855,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3131,8 +3871,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -3140,25 +3880,129 @@ esac
fi
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -3168,7 +4012,7 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -3176,7 +4020,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3188,9 +4032,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -3211,11 +4055,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -3232,7 +4077,7 @@ do
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -3248,44 +4093,46 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else
+else $as_nop
ac_file=''
fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3299,15 +4146,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -3316,7 +4163,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
int
-main ()
+main (void)
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -3328,8 +4175,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -3337,10 +4184,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -3348,39 +4195,40 @@ $as_echo "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
@@ -3394,11 +4242,12 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -3407,31 +4256,32 @@ $as_echo "$ac_try_echo"; } >&5
break;;
esac
done
-else
- $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3441,29 +4291,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3472,57 +4326,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
-else
+else $as_nop
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3537,94 +4394,144 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
+ if ac_fn_c_try_compile "$LINENO"
+then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
fi
ac_ext=c
@@ -3633,6 +4540,12 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3643,15 +4556,16 @@ if test -z "$CXX"; then
CXX=$CCC
else
if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
@@ -3659,11 +4573,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3674,11 +4592,11 @@ fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+printf "%s\n" "$CXX" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3687,15 +4605,16 @@ fi
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_CXX"; then
ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
else
@@ -3703,11 +4622,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3718,11 +4641,11 @@ fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+printf "%s\n" "$ac_ct_CXX" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3734,8 +4657,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CXX=$ac_ct_CXX
@@ -3745,7 +4668,7 @@ fi
fi
fi
# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
set X $ac_compile
ac_compiler=$2
for ac_option in --version -v -V -qversion; do
@@ -3755,7 +4678,7 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -3765,20 +4688,21 @@ $as_echo "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5
+printf %s "checking whether the compiler supports GNU C++... " >&6; }
+if test ${ac_cv_cxx_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
#ifndef __GNUC__
choke me
@@ -3788,29 +4712,33 @@ main ()
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
ac_compiler_gnu=yes
-else
+else $as_nop
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
if test $ac_compiler_gnu = yes; then
GXX=yes
else
GXX=
fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_test_CXXFLAGS=${CXXFLAGS+y}
ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+printf %s "checking whether $CXX accepts -g... " >&6; }
+if test ${ac_cv_prog_cxx_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
ac_cxx_werror_flag=yes
ac_cv_prog_cxx_g=no
@@ -3819,57 +4747,60 @@ else
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
ac_cv_prog_cxx_g=yes
-else
+else $as_nop
CXXFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
-else
+else $as_nop
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
CXXFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"
+then :
ac_cv_prog_cxx_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+printf "%s\n" "$ac_cv_prog_cxx_g" >&6; }
+if test $ac_test_CXXFLAGS; then
CXXFLAGS=$ac_save_CXXFLAGS
elif test $ac_cv_prog_cxx_g = yes; then
if test "$GXX" = yes; then
@@ -3884,6 +4815,100 @@ else
CXXFLAGS=
fi
fi
+ac_prog_cxx_stdcxx=no
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
+printf %s "checking for $CXX option to enable C++11 features... " >&6; }
+if test ${ac_cv_prog_cxx_11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_11=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx11_program
+_ACEOF
+for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA
+do
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+fi
+
+if test "x$ac_cv_prog_cxx_cxx11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx11"
+fi
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+ ac_prog_cxx_stdcxx=cxx11
+fi
+fi
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
+printf %s "checking for $CXX option to enable C++98 features... " >&6; }
+if test ${ac_cv_prog_cxx_98+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_98=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx98_program
+_ACEOF
+for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA
+do
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx98=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx98" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+fi
+
+if test "x$ac_cv_prog_cxx_cxx98" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx98" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx98"
+fi
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98
+ ac_prog_cxx_stdcxx=cxx98
+fi
+fi
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3893,11 +4918,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
@@ -3905,11 +4931,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3920,11 +4950,11 @@ fi
fi
LD=$ac_cv_prog_LD
if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -3933,11 +4963,12 @@ if test -z "$ac_cv_prog_LD"; then
ac_ct_LD=$LD
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_LD"; then
ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test.
else
@@ -3945,11 +4976,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3960,11 +4995,11 @@ fi
fi
ac_ct_LD=$ac_cv_prog_ac_ct_LD
if test -n "$ac_ct_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
-$as_echo "$ac_ct_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
+printf "%s\n" "$ac_ct_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_LD" = x; then
@@ -3972,8 +5007,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
LD=$ac_ct_LD
@@ -3994,111 +5029,111 @@ MIXED_VSL=no
MIXED_VC=no
MIXED_MINGW=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
-$as_echo_n "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed mingw-gcc and native VC++ environment" >&5
+printf %s "checking for mixed mingw-gcc and native VC++ environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
-$as_echo "MSYS and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: MSYS and VC" >&5
+printf "%s\n" "MSYS and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
-$as_echo "Cygwin and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Cygwin and VC" >&5
+printf "%s\n" "Cygwin and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
elif test -x /bin/wslpath; then
CFLAGS="$CFLAGS -O2"
MIXED_WSL=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
-$as_echo "WSL and VC" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: WSL and VC" >&5
+printf "%s\n" "WSL and VC" >&6; }
MIXED_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not within any known env" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$MIXED_MSYS" != "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
-$as_echo_n "checking for mixed cygwin and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed cygwin and native MinGW environment" >&5
+printf %s "checking for mixed cygwin and native MinGW environment... " >&6; }
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with cygwin" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
-$as_echo_n "checking for mixed MSYS and native MinGW environment... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mixed MSYS and native MinGW environment" >&5
+printf %s "checking for mixed MSYS and native MinGW environment... " >&6; }
if test "x$GCC" = x"yes"; then
if test -x /usr/bin/msys-=.0.dll; then
CFLAGS="$CFLAGS -O2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
MIXED_MINGW=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MINGW"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
-$as_echo "undeterminable" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: undeterminable" >&5
+printf "%s\n" "undeterminable" >&6; }
as_fn_error cannot handle this! "Seems to be mixed windows but not with msys" "$LINENO" 5
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
-$as_echo_n "checking if we mix cygwin with any native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix cygwin with any native compiler" >&5
+printf %s "checking if we mix cygwin with any native compiler... " >&6; }
if test "X$MIXED_CYGWIN" = "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
-$as_echo_n "checking if we mix msys with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix msys with another native compiler" >&5
+printf %s "checking if we mix msys with another native compiler... " >&6; }
if test "X$MIXED_MSYS" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
-$as_echo_n "checking if we mix WSL with another native compiler... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we mix WSL with another native compiler" >&5
+printf %s "checking if we mix WSL with another native compiler... " >&6; }
if test "X$MIXED_WSL" = "Xyes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
fi
@@ -4108,11 +5143,12 @@ _search_path=/bin:/usr/bin:/usr/local/bin:$PATH
# Extract the first word of "env", so it can be a program name with args.
set dummy env; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ENV+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ENV+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ENV in
[\\/]* | ?:[\\/]*)
ac_cv_path_ENV="$ENV" # Let the user override the test with a path.
@@ -4122,11 +5158,15 @@ else
for as_dir in $_search_path
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ENV="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ENV="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4139,11 +5179,11 @@ esac
fi
ENV=$ac_cv_path_ENV
if test -n "$ENV"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENV" >&5
-$as_echo "$ENV" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ENV" >&5
+printf "%s\n" "$ENV" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4154,8 +5194,8 @@ fi
#
# We need GNU make, complain if we can't find it
#
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5
-$as_echo_n "checking for GNU make... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5
+printf %s "checking for GNU make... " >&6; }
# If there is a Makefile created we don't want make to start making, run
# in a subdirectory and -f /dev/null
MAKE_PROG=x
@@ -4184,17 +5224,18 @@ if test X"$MAKE_PROG" = X"x"; then
fi
rm -rf conftestmake
case $MAKE_PROG in
- x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ x) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
as_fn_error $? "GNU make is required!" "$LINENO" 5
;;
- *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($MAKE_PROG)" >&5
-$as_echo "yes ($MAKE_PROG)" >&6; }
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($MAKE_PROG)" >&5
+printf "%s\n" "yes ($MAKE_PROG)" >&6; }
;;
esac
-# Find a good install program. We prefer a C program (faster),
+
+ # Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
@@ -4208,20 +5249,25 @@ esac
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+if test ${ac_cv_path_install+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+ ./ | /[cC]/* | \
/etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
/usr/ucb/* ) ;;
@@ -4231,13 +5277,13 @@ case $as_dir/ in #((
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# program-specific install script used by HP pwplus--don't use.
:
else
@@ -4245,12 +5291,12 @@ case $as_dir/ in #((
echo one > conftest.one
echo two > conftest.two
mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
test -s conftest.one && test -s conftest.two &&
test -s conftest.dir/conftest.one &&
test -s conftest.dir/conftest.two
then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
break 3
fi
fi
@@ -4266,7 +5312,7 @@ IFS=$as_save_IFS
rm -rf conftest.one conftest.two conftest.dir
fi
- if test "${ac_cv_path_install+set}" = set; then
+ if test ${ac_cv_path_install+y}; then
INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. Don't cache a
@@ -4276,8 +5322,8 @@ fi
INSTALL=$ac_install_sh
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
@@ -4294,25 +5340,26 @@ if test X"${INSTALL}" = "X${ac_aux_dir}/install-sh -c" && test -f /usr/ucb/insta
esac
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
@@ -4320,11 +5367,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4335,11 +5386,11 @@ fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4348,11 +5399,12 @@ if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
@@ -4360,11 +5412,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4375,11 +5431,11 @@ fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_RANLIB" = x; then
@@ -4387,8 +5443,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
RANLIB=$ac_ct_RANLIB
@@ -4401,11 +5457,12 @@ for ac_prog in perl5 perl
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PERL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $PERL in
[\\/]* | ?:[\\/]*)
ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
@@ -4416,11 +5473,15 @@ as_dummy="/usr/local/bin:/opt/local/bin:/usr/local/gnu/bin:${PATH}"
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4432,11 +5493,11 @@ esac
fi
PERL=$ac_cv_path_PERL
if test -n "$PERL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+printf "%s\n" "$PERL" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -4456,209 +5517,236 @@ fi
#
# Get erts version from erts/vsn.mk
#
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ERTS version" >&5
-$as_echo_n "checking ERTS version... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ERTS version" >&5
+printf %s "checking ERTS version... " >&6; }
ERTS_VSN=`sed -n "s/^VSN[ ]*=[ ]*\(.*\)/\1/p" < $ERL_TOP/erts/vsn.mk`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ERTS_VSN" >&5
-$as_echo "$ERTS_VSN" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ERTS_VSN" >&5
+printf "%s\n" "$ERTS_VSN" >&6; }
#
# Get OTP release and OTP version from $ERL_TOP/OTP_VERSION
#
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking OTP release" >&5
-$as_echo_n "checking OTP release... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking OTP release" >&5
+printf %s "checking OTP release... " >&6; }
OTP_REL=`cat $ERL_TOP/OTP_VERSION | sed "s|\([0-9]*\).*|\1|"`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTP_REL" >&5
-$as_echo "$OTP_REL" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTP_REL" >&5
+printf "%s\n" "$OTP_REL" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking OTP version" >&5
-$as_echo_n "checking OTP version... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking OTP version" >&5
+printf %s "checking OTP version... " >&6; }
OTP_VSN=`cat $ERL_TOP/OTP_VERSION`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTP_VSN" >&5
-$as_echo "$OTP_VSN" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTP_VSN" >&5
+printf "%s\n" "$OTP_VSN" >&6; }
# Check whether --enable-parallel-configure was given.
-if test "${enable_parallel_configure+set}" = set; then :
+if test ${enable_parallel_configure+y}
+then :
enableval=$enable_parallel_configure;
fi
# Check whether --enable-dirty-schedulers was given.
-if test "${enable_dirty_schedulers+set}" = set; then :
+if test ${enable_dirty_schedulers+y}
+then :
enableval=$enable_dirty_schedulers;
fi
# Check whether --enable-plain-emulator was given.
-if test "${enable_plain_emulator+set}" = set; then :
+if test ${enable_plain_emulator+y}
+then :
enableval=$enable_plain_emulator;
fi
# Check whether --with-termcap was given.
-if test "${with_termcap+set}" = set; then :
+if test ${with_termcap+y}
+then :
withval=$with_termcap;
fi
# Check whether --enable-kernel-poll was given.
-if test "${enable_kernel_poll+set}" = set; then :
+if test ${enable_kernel_poll+y}
+then :
enableval=$enable_kernel_poll;
fi
# Check whether --enable-sctp was given.
-if test "${enable_sctp+set}" = set; then :
+if test ${enable_sctp+y}
+then :
enableval=$enable_sctp;
fi
# Check whether --with-dynamic-trace was given.
-if test "${with_dynamic_trace+set}" = set; then :
+if test ${with_dynamic_trace+y}
+then :
withval=$with_dynamic_trace;
fi
# Check whether --enable-vm-probes was given.
-if test "${enable_vm_probes+set}" = set; then :
+if test ${enable_vm_probes+y}
+then :
enableval=$enable_vm_probes;
fi
# Check whether --with-javac was given.
-if test "${with_javac+set}" = set; then :
+if test ${with_javac+y}
+then :
withval=$with_javac;
fi
# Check whether --enable-megaco_flex_scanner_lineno was given.
-if test "${enable_megaco_flex_scanner_lineno+set}" = set; then :
+if test ${enable_megaco_flex_scanner_lineno+y}
+then :
enableval=$enable_megaco_flex_scanner_lineno;
fi
# Check whether --enable-megaco_reentrant_flex_scanner was given.
-if test "${enable_megaco_reentrant_flex_scanner+set}" = set; then :
+if test ${enable_megaco_reentrant_flex_scanner+y}
+then :
enableval=$enable_megaco_reentrant_flex_scanner;
fi
# Check whether --with-ssl was given.
-if test "${with_ssl+set}" = set; then :
+if test ${with_ssl+y}
+then :
withval=$with_ssl;
fi
# Check whether --with-ssl-incl was given.
-if test "${with_ssl_incl+set}" = set; then :
+if test ${with_ssl_incl+y}
+then :
withval=$with_ssl_incl;
fi
# Check whether --with-ssl-zlib was given.
-if test "${with_ssl_zlib+set}" = set; then :
+if test ${with_ssl_zlib+y}
+then :
withval=$with_ssl_zlib;
fi
# Check whether --with-ssl-lib-subdir was given.
-if test "${with_ssl_lib_subdir+set}" = set; then :
+if test ${with_ssl_lib_subdir+y}
+then :
withval=$with_ssl_lib_subdir;
fi
# Check whether --with-ssl-rpath was given.
-if test "${with_ssl_rpath+set}" = set; then :
+if test ${with_ssl_rpath+y}
+then :
withval=$with_ssl_rpath;
fi
# Check whether --enable-dynamic-ssl-lib was given.
-if test "${enable_dynamic_ssl_lib+set}" = set; then :
+if test ${enable_dynamic_ssl_lib+y}
+then :
enableval=$enable_dynamic_ssl_lib;
fi
# Check whether --enable-fips was given.
-if test "${enable_fips+set}" = set; then :
+if test ${enable_fips+y}
+then :
enableval=$enable_fips;
fi
# Check whether --enable-builtin-zlib was given.
-if test "${enable_builtin_zlib+set}" = set; then :
+if test ${enable_builtin_zlib+y}
+then :
enableval=$enable_builtin_zlib;
fi
# Check whether --enable-esock was given.
-if test "${enable_esock+set}" = set; then :
+if test ${enable_esock+y}
+then :
enableval=$enable_esock;
fi
# Check whether --enable-sharing-preserving was given.
-if test "${enable_sharing_preserving+set}" = set; then :
+if test ${enable_sharing_preserving+y}
+then :
enableval=$enable_sharing_preserving;
fi
# Check whether --enable-m64-build was given.
-if test "${enable_m64_build+set}" = set; then :
+if test ${enable_m64_build+y}
+then :
enableval=$enable_m64_build; case "$enableval" in
no) enable_m64_build=no ;;
*) enable_m64_build=yes ;;
esac
-else
+else $as_nop
enable_m64_build=no
fi
# Check whether --enable-m32-build was given.
-if test "${enable_m32_build+set}" = set; then :
+if test ${enable_m32_build+y}
+then :
enableval=$enable_m32_build; case "$enableval" in
no) enable_m32_build=no ;;
*) enable_m32_build=yes ;;
esac
-else
+else $as_nop
enable_m32_build=no
fi
# Check whether --enable-pie was given.
-if test "${enable_pie+set}" = set; then :
+if test ${enable_pie+y}
+then :
enableval=$enable_pie;
fi
# Check whether --with-libatomic_ops was given.
-if test "${with_libatomic_ops+set}" = set; then :
+if test ${with_libatomic_ops+y}
+then :
withval=$with_libatomic_ops;
fi
# Check whether --enable-sanitizers was given.
-if test "${enable_sanitizers+set}" = set; then :
+if test ${enable_sanitizers+y}
+then :
enableval=$enable_sanitizers;
fi
# Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
+if test ${enable_silent_rules+y}
+then :
enableval=$enable_silent_rules;
fi
@@ -4683,404 +5771,36 @@ if test X${enable_m32_build} = Xyes; then
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
+done
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-fi
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-fi
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
fi
-done
-
-
-
USER_LD=$LD
USER_LDFLAGS="$LDFLAGS"
@@ -5089,29 +5809,34 @@ USER_LDFLAGS="$LDFLAGS"
NEED_NPTL_PTHREAD_H=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
-$as_echo_n "checking for native win32 threads... " >&6; }
-if test "X$host_os" = "Xwin32"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for native win32 threads" >&5
+printf %s "checking for native win32 threads... " >&6; }
+if test "X$host_os" = "Xwin32"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
THR_DEFS="-DWIN32_THREADS"
THR_LIBS=
THR_LIB_NAME=win32_threads
THR_LIB_TYPE=win32_threads
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
THR_DEFS=
THR_LIBS=
THR_LIB_NAME=
THR_LIB_TYPE=posix_unknown
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+printf %s "checking for pthread_create in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lpthread $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5120,40 +5845,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_pthread_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_pthread_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes
+then :
THR_LIBS="-lpthread"
fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
+printf %s "checking for pthread_create in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lc_r $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5162,96 +5889,112 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
char pthread_create ();
int
-main ()
+main (void)
{
return pthread_create ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
ac_cv_lib_c_r_pthread_create=yes
-else
+else $as_nop
ac_cv_lib_c_r_pthread_create=no
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_create" = xyes
+then :
THR_LIBS="-lc_r"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
-if test "x$ac_cv_func_pthread_create" = xyes; then :
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create"
+if test "x$ac_cv_func_pthread_create" = xyes
+then :
THR_LIBS="none_needed"
fi
- fi
- if test "x$THR_LIBS" = "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
-$as_echo_n "checking if the '-pthread' switch can be used... " >&6; }
+fi
+
+ if test "x$THR_LIBS" = "x"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the '-pthread' switch can be used" >&5
+printf %s "checking if the '-pthread' switch can be used... " >&6; }
saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -pthread"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
-main ()
+main (void)
{
pthread_create((void*)0,(void*)0,(void*)0,(void*)0);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
THR_DEFS="-pthread"
THR_LIBS="-pthread"
fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
CFLAGS=$saved_cflags
if test "x$THR_LIBS" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- fi
- if test "x$THR_LIBS" != "x"; then
+fi
+
+ if test "x$THR_LIBS" != "x"
+then :
+
THR_DEFS="$THR_DEFS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS"
THR_LIB_NAME=pthread
if test "x$THR_LIBS" = "xnone_needed"; then
THR_LIBS=
fi
- case $host_os in
- solaris*)
- THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;;
- linux*)
+ case $host_os in #(
+ solaris*) :
+
+ THR_DEFS="$THR_DEFS -D_POSIX_PTHREAD_SEMANTICS"
+ ;; #(
+ linux*) :
+
THR_DEFS="$THR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS"
-if test "$cross_compiling" != "yes"; then
+if test "$cross_compiling" != "yes"
+then :
+
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -5259,11 +6002,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5275,23 +6022,26 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
-else
+
+else $as_nop
+
host_getconf="$host_alias-getconf"
# Extract the first word of "$host_getconf", so it can be a program name with args.
set dummy $host_getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$GETCONF"; then
ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
else
@@ -5299,11 +6049,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_GETCONF="$host_getconf"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5315,25 +6069,28 @@ fi
fi
GETCONF=$ac_cv_prog_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
- if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""; then
+ if test "$GETCONF" = "false" && test "$erl_xcomp_sysroot" != ""
+then :
+
GETCONF=
prfx="$erl_xcomp_sysroot"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
set dummy ${ac_tool_prefix}getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path.
@@ -5344,11 +6101,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5360,11 +6121,11 @@ esac
fi
GETCONF=$ac_cv_path_GETCONF
if test -n "$GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
-$as_echo "$GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5
+printf "%s\n" "$GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5373,11 +6134,12 @@ if test -z "$ac_cv_path_GETCONF"; then
ac_pt_GETCONF=$GETCONF
# Extract the first word of "getconf", so it can be a program name with args.
set dummy getconf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_GETCONF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_GETCONF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
case $ac_pt_GETCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_GETCONF="$ac_pt_GETCONF" # Let the user override the test with a path.
@@ -5388,11 +6150,15 @@ as_dummy=""$prfx/usr/bin:$prfx/bin:$prfx/usr/local/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_GETCONF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_GETCONF="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5404,11 +6170,11 @@ esac
fi
ac_pt_GETCONF=$ac_cv_path_ac_pt_GETCONF
if test -n "$ac_pt_GETCONF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
-$as_echo "$ac_pt_GETCONF" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GETCONF" >&5
+printf "%s\n" "$ac_pt_GETCONF" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_pt_GETCONF" = x; then
@@ -5416,8 +6182,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
GETCONF=$ac_pt_GETCONF
@@ -5426,11 +6192,13 @@ else
GETCONF="$ac_cv_path_GETCONF"
fi
- fi
+
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
-$as_echo_n "checking for Native POSIX Thread Library... " >&6; }
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Native POSIX Thread Library" >&5
+printf %s "checking for Native POSIX Thread Library... " >&6; }
libpthr_vsn=`$GETCONF GNU_LIBPTHREAD_VERSION 2>/dev/null`
if test $? -eq 0; then
case "$libpthr_vsn" in
@@ -5446,24 +6214,28 @@ $as_echo_n "checking for Native POSIX Thread Library... " >&6; }
else
nptl=no
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
-$as_echo "$nptl" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nptl" >&5
+printf "%s\n" "$nptl" >&6; }
if test $nptl = cross; then
nptl=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result yes guessed because of cross compilation" >&5
+printf "%s\n" "$as_me: WARNING: result yes guessed because of cross compilation" >&2;}
fi
- if test $nptl = yes; then
+ if test $nptl = yes
+then :
+
THR_LIB_TYPE=posix_nptl
need_nptl_incldir=no
- ac_fn_c_check_header_mongrel "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_nptl_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "nptl/pthread.h" "ac_cv_header_nptl_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_nptl_pthread_h" = xyes
+then :
need_nptl_incldir=yes
NEED_NPTL_PTHREAD_H=yes
fi
+ if test $need_nptl_incldir = yes
+then :
- if test $need_nptl_incldir = yes; then
# Ahh...
nptl_path="$C_INCLUDE_PATH:$CPATH"
if test X$cross_compiling != Xyes; then
@@ -5484,13 +6256,13 @@ fi
IFS=$save_ifs
nptl_incldir=
for dir in $nptl_ws_path; do
- as_ac_Header=`$as_echo "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$dir/nptl/pthread.h" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$dir/nptl/pthread.h" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
nptl_incldir=$dir/nptl
fi
-
if test "x$nptl_incldir" != "x"; then
THR_DEFS="$THR_DEFS -isystem $nptl_incldir"
break
@@ -5499,38 +6271,43 @@ fi
if test "x$nptl_incldir" = "x"; then
as_fn_error $? "Failed to locate nptl system include directory" "$LINENO" 5
fi
- fi
- fi
- ;;
- *) ;;
- esac
+
+fi
+
+fi
+ ;; #(
+ *) :
+ ;;
+esac
saved_cppflags=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $THR_DEFS"
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h
fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes; then :
+ ac_fn_c_check_header_compile "$LINENO" "pthread/mit/pthread.h" "ac_cv_header_pthread_mit_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_mit_pthread_h" = xyes
+then :
\
-$as_echo "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MIT_PTHREAD_H 1" >>confdefs.h
fi
-
CPPFLAGS=$saved_cppflags
- fi
+
+fi
+
fi
@@ -5562,133 +6339,157 @@ case "$host_cpu" in
esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Wdeclaration-after-statement to DED_WARN_FLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Wdeclaration-after-statement $DED_WARN_FLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WARN_FLAGS="-Wdeclaration-after-statement $DED_WARN_FLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=return-type to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=return-type $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=return-type $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=implicit to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=implicit $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=implicit $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -Werror=undef to DED_WERRORFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-Werror=undef $DED_WERRORFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_WERRORFLAGS="-Werror=undef $DED_WERRORFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
DED_SYS_INCLUDE="-I${ERL_TOP}/erts/emulator/beam -I${ERL_TOP}/erts/include -I${ERL_TOP}/erts/include/$host -I${ERL_TOP}/erts/include/internal -I${ERL_TOP}/erts/include/internal/$host -I${ERL_TOP}/erts/emulator/sys/$DED_OSTYPE -I${ERL_TOP}/erts/emulator/sys/common"
@@ -5701,48 +6502,57 @@ else
fi
# DED_EMU_THR_DEFS=$EMU_THR_DEFS
DED_CFLAGS="$CFLAGS $CPPFLAGS $DED_CFLAGS"
-if test "x$GCC" = xyes; then
+if test "x$GCC" = xyes
+then :
+
# Use -fno-common for gcc, that is link error if multiple definitions of
# global variables are encountered. This is ISO C compliant.
# Until version 10, gcc has had -fcommon as default, which allows and merges
# such dubious duplicates.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)" >&5
-$as_echo_n "checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)" >&5
+printf %s "checking if we can add -fno-common to DED_CFLAGS (via CFLAGS)... " >&6; }
saved_CFLAGS=$CFLAGS;
CFLAGS="-fno-common $DED_CFLAGS";
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main ()
+main (void)
{
return 0;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
can_enable_flag=true
-else
+else $as_nop
can_enable_flag=false
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS=$saved_CFLAGS;
- if test "X$can_enable_flag" = "Xtrue"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test "X$can_enable_flag" = "Xtrue"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
DED_CFLAGS="-fno-common $DED_CFLAGS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
DED_STATIC_CFLAGS="$DED_CFLAGS"
DED_CFLAGS="$DED_CFLAGS -fPIC"
# Remove -fPIE and -fno-PIE
DED_CFLAGS=`echo $DED_CFLAGS | sed 's/-f\(no-\)\?PIE//g'`
+
fi
DED_EXT=so
@@ -5820,17 +6630,19 @@ case $host_os in
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
@@ -5839,14 +6651,12 @@ See \`config.log' for more details" "$LINENO" 5; }
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
case "$ac_cv_sizeof_void_p" in
@@ -5913,11 +6723,12 @@ test "$DED_LDFLAGS_CONFTEST" != "" || DED_LDFLAGS_CONFTEST="$DED_LDFLAGS"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DED_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DED_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$DED_LD"; then
ac_cv_prog_DED_LD="$DED_LD" # Let the user override the test.
else
@@ -5925,11 +6736,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_DED_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5940,11 +6755,11 @@ fi
fi
DED_LD=$ac_cv_prog_DED_LD
if test -n "$DED_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
-$as_echo "$DED_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
+printf "%s\n" "$DED_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
@@ -5953,11 +6768,12 @@ if test -z "$ac_cv_prog_DED_LD"; then
ac_ct_DED_LD=$DED_LD
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DED_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DED_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
if test -n "$ac_ct_DED_LD"; then
ac_cv_prog_ac_ct_DED_LD="$ac_ct_DED_LD" # Let the user override the test.
else
@@ -5965,11 +6781,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DED_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5980,11 +6800,11 @@ fi
fi
ac_ct_DED_LD=$ac_cv_prog_ac_ct_DED_LD
if test -n "$ac_ct_DED_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DED_LD" >&5
-$as_echo "$ac_ct_DED_LD" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DED_LD" >&5
+printf "%s\n" "$ac_ct_DED_LD" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_DED_LD" = x; then
@@ -5992,8 +6812,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
DED_LD=$ac_ct_DED_LD
@@ -6004,37 +6824,37 @@ fi
test "$DED_LD" != "false" || as_fn_error $? "No linker found" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for static compiler flags" >&5
-$as_echo_n "checking for static compiler flags... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static compiler flags" >&5
+printf %s "checking for static compiler flags... " >&6; }
DED_STATIC_CFLAGS="$DED_WERRORFLAGS $DED_WFLAGS $DED_THR_DEFS $DED_STATIC_CFLAGS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_STATIC_CFLAGS" >&5
-$as_echo "$DED_STATIC_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for basic compiler flags for loadable drivers" >&5
-$as_echo_n "checking for basic compiler flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_STATIC_CFLAGS" >&5
+printf "%s\n" "$DED_STATIC_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for basic compiler flags for loadable drivers" >&5
+printf %s "checking for basic compiler flags for loadable drivers... " >&6; }
DED_BASIC_CFLAGS=$DED_CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
-$as_echo "$DED_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler flags for loadable drivers" >&5
-$as_echo_n "checking for compiler flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
+printf "%s\n" "$DED_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler flags for loadable drivers" >&5
+printf %s "checking for compiler flags for loadable drivers... " >&6; }
DED_CFLAGS="$DED_WERRORFLAGS $DED_WARN_FLAGS $DED_THR_DEFS $DED_CFLAGS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
-$as_echo "$DED_CFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker for loadable drivers" >&5
-$as_echo_n "checking for linker for loadable drivers... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
-$as_echo "$DED_LD" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker flags for loadable drivers" >&5
-$as_echo_n "checking for linker flags for loadable drivers... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LDFLAGS" >&5
-$as_echo "$DED_LDFLAGS" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for 'runtime library path' linker flag" >&5
-$as_echo_n "checking for 'runtime library path' linker flag... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_CFLAGS" >&5
+printf "%s\n" "$DED_CFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linker for loadable drivers" >&5
+printf %s "checking for linker for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD" >&5
+printf "%s\n" "$DED_LD" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linker flags for loadable drivers" >&5
+printf %s "checking for linker flags for loadable drivers... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LDFLAGS" >&5
+printf "%s\n" "$DED_LDFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 'runtime library path' linker flag" >&5
+printf %s "checking for 'runtime library path' linker flag... " >&6; }
if test "x$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" != "x"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&5
-$as_echo "$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&5
+printf "%s\n" "$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+printf "%s\n" "not found" >&6; }
fi
@@ -6088,8 +6908,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -6119,15 +6939,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -6141,8 +6961,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -6195,7 +7015,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -6211,8 +7031,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -6235,14 +7055,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else
+else $as_nop
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -6252,46 +7074,46 @@ esac
fi
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -6300,13 +7122,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -6315,8 +7130,12 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
done
IFS=$as_save_IFS
@@ -6328,30 +7147,10 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -6364,13 +7163,14 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- $as_echo "$as_me: error: $2" >&2
+ printf "%s\n" "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
+
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -6397,18 +7197,20 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
+
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else
+else $as_nop
as_fn_append ()
{
eval $1=\$$1\$2
@@ -6420,12 +7222,13 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else
+else $as_nop
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -6456,7 +7259,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -6478,6 +7281,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -6491,6 +7298,12 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -6532,7 +7345,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -6541,7 +7354,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -6604,7 +7417,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -6653,14 +7466,16 @@ $config_files
Report bugs to the package provider."
_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -6698,21 +7513,21 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
+ printf "%s\n" "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
+ printf "%s\n" "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -6740,7 +7555,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -6754,7 +7569,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- $as_echo "$ac_log"
+ printf "%s\n" "$ac_log"
} >&5
_ACEOF
@@ -6782,7 +7597,7 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -7010,7 +7825,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -7018,17 +7833,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -7045,7 +7860,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -7069,9 +7884,9 @@ $as_echo X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -7128,8 +7943,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -7172,9 +7987,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -7226,7 +8041,8 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
diff --git a/make/configure.in b/make/configure.ac
index 92a7542b4b..ba3ab4fa59 100644
--- a/make/configure.in
+++ b/make/configure.ac
@@ -18,9 +18,11 @@ dnl limitations under the License.
dnl
dnl %CopyrightEnd%
-AC_PREREQ(2.8)dnl
+AC_PREREQ([2.71])dnl
-AC_INIT()
+AC_INIT
+
+m4_include([otp.m4])
LM_PRECIOUS_VARS
@@ -82,42 +84,14 @@ AC_SUBST(ERL_TOP)
dnl
dnl Aux programs are found in erts/autoconf
dnl
-AC_CONFIG_AUX_DIR(${ERL_TOP}/erts/autoconf)
+AC_CONFIG_AUX_DIRS([${ERL_TOP}/make/autoconf])
-dnl
-dnl Figure out what we are running on. And in violation of autoconf
-dnl style assume that $host is also what we are building for. I would
-dnl like to get cross compiling working, since we actually have
-dnl systems we cross compile for!
-dnl
-
-if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then
- AC_CANONICAL_HOST
- AC_CANONICAL_BUILD
-else
- host_os=$host
-fi
+ERL_CANONICAL_SYSTEM_TYPE
TARGET=$host
AC_SUBST(TARGET)
if test "$cross_compiling" = "yes"; then
- if test "$build" = "$host"; then
- AC_MSG_ERROR([
- Cross compiling with the same canonicalized 'host' value
- as the canonicalized 'build' value.
-
- We are cross compiling since the '--host=$host_alias'
- and the '--build=$build_alias' arguments differ. When
- cross compiling Erlang/OTP also the canonicalized values of
- the '--build' and the '--host' arguments *must* differ. The
- canonicalized values of these arguments however both equals:
- $host
-
- You can check the canonical value by passing a value as
- argument to the 'erts/autoconf/config.sub' script.
- ])
- fi
CROSS_COMPILING=yes
else
CROSS_COMPILING=no
diff --git a/make/doc.mk b/make/doc.mk
index 0e12447dc9..e023e52724 100644
--- a/make/doc.mk
+++ b/make/doc.mk
@@ -30,7 +30,7 @@ RELCHUNKSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
APP_DIR = $(ERL_TOP)/lib/$(APPLICATION)
APP_SRC_DIR = $(APP_DIR)/src
-APP_EBIN_DIR = $(APP_DIR)/src
+APP_EBIN_DIR = $(APP_DIR)/ebin
# ----------------------------------------------------
HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
@@ -71,7 +71,7 @@ endif
CHUNK_REF3_FILES = $(filter-out $(NO_CHUNKS), $(XML_ALL_REF3_FILES))
CHUNK_FILES = $(CHUNK_REF3_FILES:%.xml=$(CHUNKSDIR)/%.chunk)
-ERL_CHUNK_FILES = $(patsubst $(APP_EBIN_DIR)/%.BEAM,$(CHUNKSDIR)/%.chunk,$(wildcard $(APP_EBIN_DIR)/*.beam))
+ERL_CHUNK_FILES = $(patsubst $(APP_EBIN_DIR)/%.beam,$(CHUNKSDIR)/%.chunk,$(wildcard $(APP_EBIN_DIR)/*.beam))
EMPTY_CHUNK_FILES = $(filter-out $(NO_CHUNKS:%.xml=$(CHUNKSDIR)/%.chunk) $(CHUNK_FILES), $(ERL_CHUNK_FILES))
diff --git a/make/otp_version_tickets_in_merge b/make/otp_version_tickets_in_merge
index 553ca835d2..e69de29bb2 100644
--- a/make/otp_version_tickets_in_merge
+++ b/make/otp_version_tickets_in_merge
@@ -1,8 +0,0 @@
-OTP-17393
-OTP-17657
-OTP-17658
-OTP-17659
-OTP-17666
-OTP-17668
-OTP-17670
-OTP-17672
diff --git a/make/target.mk b/make/target.mk
index 3bcb6e91d3..c0ffe53d05 100644
--- a/make/target.mk
+++ b/make/target.mk
@@ -24,7 +24,7 @@ ifeq ($(OVERRIDE_TARGET),)
ifeq ($(TARGET),)
-TARGET := $(shell $(ERL_TOP)/erts/autoconf/config.guess)
+TARGET := $(shell $(ERL_TOP)/make/autoconf/config.guess)
else
@@ -55,7 +55,7 @@ endif
ifneq ($(TARGET),)
ifneq ($(TARGET),win32)
-override TARGET := $(shell $(ERL_TOP)/erts/autoconf/config.sub $(TARGET))
+override TARGET := $(shell $(ERL_TOP)/make/autoconf/config.sub $(TARGET))
else
endif
else
diff --git a/make/test_target_script.sh b/make/test_target_script.sh
index 1bc4893c39..3cd26a7bc8 100755
--- a/make/test_target_script.sh
+++ b/make/test_target_script.sh
@@ -160,7 +160,7 @@ fi
DIR=`pwd`
if [ "$DIR" -ef "$ERL_TOP" ]
then
- TARGET_SYS=`$ERL_TOP/erts/autoconf/config.guess`
+ TARGET_SYS=`$ERL_TOP/make/autoconf/config.guess`
REL_DIR="$ERL_TOP/release/$TARGET_SYS"
cd "$REL_DIR"
./Install -minimal "`pwd`"
diff --git a/otp_build b/otp_build
index d7bbab9543..e22cabec7e 100755
--- a/otp_build
+++ b/otp_build
@@ -19,15 +19,13 @@
# %CopyrightEnd%
#
-USE_AUTOCONF_VERSION=2.69
+USE_AUTOCONF_VERSION=2.71
-aclocal_dirs="make ./lib/crypto ./lib/erl_interface ./lib/odbc ./lib/wx ./lib/megaco"
-autoconf_aux_dirs="./lib/common_test/priv/auxdir ./lib/erl_interface/src/auxdir ./lib/common_test/test_server ./lib/wx/autoconf"
+autoconf_aux_dirs="./erts/autoconf ./lib/common_test/test_server"
-aclocal_master="./erts/aclocal.m4"
-install_sh_master="./erts/autoconf/install-sh"
-config_guess_master="./erts/autoconf/config.guess"
-config_sub_master="./erts/autoconf/config.sub"
+install_sh_master="./make/autoconf/install-sh"
+config_guess_master="./make/autoconf/config.guess"
+config_sub_master="./make/autoconf/config.sub"
# Global configuration variables
#
@@ -119,7 +117,7 @@ check_erltop ()
{
ERLTOP_FORCED=false
if [ "X$ERL_TOP" = "X" ]; then
- if [ -f ./otp_build -a -f ./erts/autoconf/config.guess ]; then
+ if [ -f ./otp_build -a -f ./make/autoconf/config.guess ]; then
ERLTOP_FORCED=true
ERL_TOP=`pwd`
export ERL_TOP
@@ -171,11 +169,13 @@ set_config_flags ()
# (in the cross compilation case the whole command line as well as
# the cross configuration have been moved here).
- if target_contains free_source; then
- CONFIG_FLAGS="$CONFIG_FLAGS --host=$TARGET"
- fi
if target_contains win32; then
- CONFIG_FLAGS="--build=$BUILDSYS build_alias=win32 --host=win32 --target=win32 $CONFIG_FLAGS"
+ if [ "$CONFIG_SUBTYPE" = "win64" ]; then
+ bht_type=local-x86_64-pc-windows
+ else
+ bht_type=local-x86-pc-windows
+ fi
+ CONFIG_FLAGS="--build=$bht_type --host=$bht_type --target=$bht_type $CONFIG_FLAGS"
fi
@@ -196,7 +196,8 @@ NL="\
do_update_configure ()
{
get_do_commit $1
-
+
+ export AUTOCONF_VERSION="$USE_AUTOCONF_VERSION"
ac_ver_blob=`autoconf --version`
if [ $? -ne 0 ]; then
echo "ERROR: Failed to check autoconf version! You need to have autoconf of version $USE_AUTOCONF_VERSION in path." 1>&2
@@ -213,10 +214,6 @@ do_update_configure ()
out_files=
- for dir in $aclocal_dirs; do
- $install_sh_master -m 644 -t "$dir" "$aclocal_master"
- done
-
install_sh=`basename $install_sh_master`
config_guess=`basename $config_guess_master`
config_sub=`basename $config_sub_master`
@@ -236,7 +233,7 @@ do_update_configure ()
export TARGET
for d in $AUTOCONF_SUBDIRS; do
- file="$d/configure.in"
+ file="$d/configure.ac"
[ -f "$file" ] || continue
echo ""
[ ! -d "$d/autom4te.cache" ] || {
@@ -249,12 +246,12 @@ do_update_configure ()
}
echo "=== running autoconf in $d"
- ( cd "$d" && autoconf ) || exit 1
+ ( cd "$d" && autoconf -B "$ERL_TOP/make/autoconf") || exit 1
out_files="$out_files $d/configure"
chdr=`cat "$file" | sed -n "s|.*\(AC_CONFIG_HEADER\).*|\1|p"`
[ "$chdr" = "AC_CONFIG_HEADER" ] || continue
echo "=== running autoheader in $d"
- ( cd "$d" && autoheader ) || exit 1
+ ( cd "$d" && autoheader -B "$ERL_TOP/make/autoconf") || exit 1
out_files="$out_files $d/config.h.in"
done
@@ -350,8 +347,8 @@ try_cross_configure ()
test "X$build_value" != "X" || build_value="$BUILDSYS"
- build_sys=`"$ERL_TOP/erts/autoconf/config.sub" "$build_value"` || exit 1
- host_sys=`"$ERL_TOP/erts/autoconf/config.sub" "$host_value"` || exit 1
+ build_sys=`"$ERL_TOP/make/autoconf/config.sub" "$build_value"` || exit 1
+ host_sys=`"$ERL_TOP/make/autoconf/config.sub" "$host_value"` || exit 1
test "$host_sys" = "$build_sys" || cross_configure=yes
@@ -655,15 +652,15 @@ echo_env_cygwin ()
echo_setenv AR ar.sh ';'
echo_setenv RANLIB true ';'
if [ X"$X64" = X"true" ]; then
- if [ -f "$ERL_TOP/erts/autoconf/win64.config.cache.static" ]; then
- echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/win64.config.cache.static" ';'
+ if [ -f "$ERL_TOP/make/autoconf/win64.config.cache.static" ]; then
+ echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/make/autoconf/win64.config.cache.static" ';'
fi
- echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win64.config.cache" ';'
+ echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/make/autoconf/win64.config.cache" ';'
else
- if [ -f "$ERL_TOP/erts/autoconf/win32.config.cache.static" ]; then
- echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/win32.config.cache.static" ';'
+ if [ -f "$ERL_TOP/make/autoconf/win32.config.cache.static" ]; then
+ echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/make/autoconf/win32.config.cache.static" ';'
fi
- echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win32.config.cache" ';'
+ echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/make/autoconf/win32.config.cache" ';'
fi
echo_setenv WIN32_WRAPPER_PATH "$WIN32_WRAPPER_PATH" ';'
echo_setenv PATH "$WIN32_WRAPPER_PATH:$P3" ';'
@@ -720,15 +717,15 @@ echo_env_msys ()
echo_setenv AR ar.sh ';'
echo_setenv RANLIB true ';'
if [ X"$X64" = X"true" ]; then
- if [ -f "$ERL_TOP/erts/autoconf/win64.config.cache.static" ]; then
- echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/win64.config.cache.static" ';'
+ if [ -f "$ERL_TOP/make/autoconf/win64.config.cache.static" ]; then
+ echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/make/autoconf/win64.config.cache.static" ';'
fi
- echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win64.config.cache" ';'
+ echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/make/autoconf/win64.config.cache" ';'
else
- if [ -f "$ERL_TOP/erts/autoconf/win32.config.cache.static" ]; then
- echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/win32.config.cache.static" ';'
+ if [ -f "$ERL_TOP/make/autoconf/win32.config.cache.static" ]; then
+ echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/make/autoconf/win32.config.cache.static" ';'
fi
- echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win32.config.cache" ';'
+ echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/make/autoconf/win32.config.cache" ';'
fi
echo_setenv WIN32_WRAPPER_PATH "$WIN32_WRAPPER_PATH" ';'
echo_setenv PATH "$WIN32_WRAPPER_PATH:$P3" ';'
@@ -769,15 +766,15 @@ echo_env_wsl ()
echo_setenv AR ar.sh ';'
echo_setenv RANLIB true ';'
if [ X"$X64" = X"true" ]; then
- if [ -f "$ERL_TOP/erts/autoconf/win64.config.cache.static" ]; then
- echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/win64.config.cache.static" ';'
+ if [ -f "$ERL_TOP/make/autoconf/win64.config.cache.static" ]; then
+ echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/make/autoconf/win64.config.cache.static" ';'
fi
- echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win64.config.cache" ';'
+ echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/make/autoconf/win64.config.cache" ';'
else
- if [ -f "$ERL_TOP/erts/autoconf/win32.config.cache.static" ]; then
- echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/win32.config.cache.static" ';'
+ if [ -f "$ERL_TOP/make/autoconf/win32.config.cache.static" ]; then
+ echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/make/autoconf/win32.config.cache.static" ';'
fi
- echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win32.config.cache" ';'
+ echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/make/autoconf/win32.config.cache" ';'
fi
echo_setenv WIN32_WRAPPER_PATH "$WIN32_WRAPPER_PATH" ';'
echo_setenv PATH "$WIN32_WRAPPER_PATH:$PATH" ';'
@@ -1115,7 +1112,7 @@ unset ${erl_otp_flags}
# Target first guess, won't necessarily hold, may be changed for
# certain parameters.
if [ X"$TARGET" = X"" ]; then
- TARGET=`"$ERL_TOP/erts/autoconf/config.guess"`
+ TARGET=`"$ERL_TOP/make/autoconf/config.guess"`
fi
BUILDSYS=$TARGET
diff --git a/otp_patch_apply b/otp_patch_apply
index 3ff929ccbb..997b306d92 100755
--- a/otp_patch_apply
+++ b/otp_patch_apply
@@ -223,7 +223,7 @@ export ERL_TOP="$sdir"
test -f "$sdir/otp_build" || error "$ERL_TOP" $invalid_src
test -f "$sdir/OTP_VERSION" || error "$ERL_TOP" $invalid_src
test -f "$sdir/otp_versions.table" || error "$ERL_TOP" $invalid_src
-test -f "$sdir/erts/autoconf/config.guess" || error "$ERL_TOP" $invalid_src
+test -f "$sdir/make/autoconf/config.guess" || error "$ERL_TOP" $invalid_src
test -f "$sdir/make/verify_runtime_dependencies" || error "$ERL_TOP" $invalid_src
test -x "$sdir/bootstrap/bin/erl" || error $not_built
test -x "$sdir/bootstrap/bin/erlc" || error $not_built
@@ -293,7 +293,7 @@ mkdir=`find_prog mkdir`
# Setup build stuff
if [ "x$TARGET" = "x" ]; then
- TARGET=`$ERL_TOP/erts/autoconf/config.guess`
+ TARGET=`$ERL_TOP/make/autoconf/config.guess`
fi
BUILDSYS=$TARGET
if [ -z "$MAKE" ]; then
diff --git a/scripts/build-otp-tar b/scripts/build-otp-tar
index 3f11026564..aef05d6845 100755
--- a/scripts/build-otp-tar
+++ b/scripts/build-otp-tar
@@ -551,7 +551,7 @@ if [ ! -d $src_dir -o ! -f $src_dir/otp_build ]; then
fi
progress "Checking target directory name"
-target_dirname=`$prebld_dir/erts/autoconf/config.guess`
+target_dirname=`$prebld_dir/make/autoconf/config.guess`
if [ $? -ne 0 ]; then
error "Failed to check target directory name"
fi
diff --git a/scripts/pre-push b/scripts/pre-push
index 978f8cceef..5759406182 100755
--- a/scripts/pre-push
+++ b/scripts/pre-push
@@ -23,14 +23,14 @@
#
# Bump this version to give users an update notification.
-PRE_PUSH_SCRIPT_VERSION=2
+PRE_PUSH_SCRIPT_VERSION=3
-NEW_RELEASES="23 22 21 20 19 18 17"
+NEW_RELEASES="24 23 22 21 20 19 18 17"
OLD_RELEASES="r16 r15 r14 r13"
RELEASES="$NEW_RELEASES $OLD_RELEASES"
# First commit on master, not allowed in other branches
-MASTER_ONLY=740b29ecc21c73a4bf4ebfc494490865d3c31978
+MASTER_ONLY=a20c39812082068a8b9e3b73276de41fbb0338af
# Number of commits and files allowed in one push by this script
NCOMMITS_MAX=100
diff --git a/scripts/run-dialyzer b/scripts/run-dialyzer
index e50bf16998..cad04a3514 100755
--- a/scripts/run-dialyzer
+++ b/scripts/run-dialyzer
@@ -16,7 +16,7 @@ if [ "X$ERL_TOP" != "X" ] && [ -d $ERL_TOP/lib ]; then
else
LIB_DIR=$(erl -noshell -eval 'io:format("~ts~n",[code:lib_dir()])' -s init stop)
fi
-ALL_APPLICATIONS=$(ls -d -1 $LIB_DIR/*/ | sed "s:^$LIB_DIR/\\([^/\-]\+\\).*$:\1:g")
+ALL_APPLICATIONS=$(ls -d -1 $LIB_DIR/*/ | sed "s:^$LIB_DIR/::g" | sed "s:/$::g")
ALL_APPLICATIONS="erts $ALL_APPLICATIONS"
echo "All applications: $ALL_APPLICATIONS" |tr '\n' ' ' && echo ""
@@ -44,7 +44,7 @@ if [ -f $ERL_TOP/bin/dialyzer ]; then
DIALYZER=$ERL_TOP/bin/dialyzer
fi
-PLT=$(mktemp --suffix=.plt)
+PLT="$(mktemp).plt"
set -x
diff --git a/system/doc/efficiency_guide/commoncaveats.xmlsrc b/system/doc/efficiency_guide/commoncaveats.xmlsrc
index fb004da203..6c5aa2b233 100644
--- a/system/doc/efficiency_guide/commoncaveats.xmlsrc
+++ b/system/doc/efficiency_guide/commoncaveats.xmlsrc
@@ -39,11 +39,16 @@
marker="erts:erlang#send_after/3">erlang:send_after/3</seemfa>
and
<seemfa marker="erts:erlang#start_timer/3">erlang:start_timer/3</seemfa>,
- is much more efficient than using the timers provided by the
- <seeerl marker="stdlib:timer">timer</seeerl> module in STDLIB.
- The <c>timer</c> module uses a separate process to manage the timers.
- That process can easily become overloaded if many processes
- create and cancel timers frequently.</p>
+ is more efficient than using the timers provided by the
+ <seeerl marker="stdlib:timer">timer</seeerl> module in STDLIB.</p>
+ <p>The <c>timer</c> module uses a separate process to manage the timers.
+ Before OTP 25, this management overhead was substantial and increasing
+ with the number of timers, especially when they were short-lived, so the
+ timer server process could easily become overloaded and unresponsive.
+ In OTP 25, the timer module was improved by removing most of the management
+ overhead and the resulting performance penalty. Still, the timer server
+ remains a single process, and it may at some point become a bottleneck
+ of an application.</p>
<p>The functions in the <c>timer</c> module that do not manage timers
(such as <c>timer:tc/3</c> or <c>timer:sleep/1</c>), do not call the
diff --git a/system/doc/tutorial/c_port.xmlsrc b/system/doc/tutorial/c_port.xmlsrc
index e9a85b2f1d..5d24908fef 100644
--- a/system/doc/tutorial/c_port.xmlsrc
+++ b/system/doc/tutorial/c_port.xmlsrc
@@ -158,7 +158,7 @@ Eshell V4.9.1.2 (abort with ^G)
{ok,complex1}</pre>
<p><em>Step 3.</em> Run the example:</p>
<pre>
-2> <input>complex1:start("extprg").</input>
+2> <input>complex1:start("./extprg").</input>
&lt;0.34.0>
3> <input>complex1:foo(3).</input>
4
diff --git a/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf b/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf
index ac6cd0ca1e..eb7ac89dbf 100644
--- a/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf
+++ b/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf
@@ -47,16 +47,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=tile
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-arm-android.conf b/xcomp/erl-xcomp-arm-android.conf
index 307a834d8c..d4cedb1662 100644
--- a/xcomp/erl-xcomp-arm-android.conf
+++ b/xcomp/erl-xcomp-arm-android.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=arm-linux-androideabi
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-arm-linux.conf b/xcomp/erl-xcomp-arm-linux.conf
index 9296704f96..f1c3c2ced8 100644
--- a/xcomp/erl-xcomp-arm-linux.conf
+++ b/xcomp/erl-xcomp-arm-linux.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=arm-wrs-linux-gnueabi
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-arm64-android.conf b/xcomp/erl-xcomp-arm64-android.conf
index 41792dd226..a8032f64e0 100644
--- a/xcomp/erl-xcomp-arm64-android.conf
+++ b/xcomp/erl-xcomp-arm64-android.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=aarch64-linux-android
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf b/xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf
index dffc4a4b56..0424013ae0 100644
--- a/xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf
+++ b/xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf
@@ -48,16 +48,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=armv8-rpi3-linux-gnueabihf
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-avr32-atmel-linux-gnu.conf b/xcomp/erl-xcomp-avr32-atmel-linux-gnu.conf
index d12efa41c3..1c846c5526 100644
--- a/xcomp/erl-xcomp-avr32-atmel-linux-gnu.conf
+++ b/xcomp/erl-xcomp-avr32-atmel-linux-gnu.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=avr32-atmel-linux-gnu
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-mips-linux.conf b/xcomp/erl-xcomp-mips-linux.conf
index 9e05e4c1b2..daf165e10e 100644
--- a/xcomp/erl-xcomp-mips-linux.conf
+++ b/xcomp/erl-xcomp-mips-linux.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=mips-linux
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-powerpc-dso-linux-gnu.conf b/xcomp/erl-xcomp-powerpc-dso-linux-gnu.conf
index 8f1dd03440..85dfd11eef 100644
--- a/xcomp/erl-xcomp-powerpc-dso-linux-gnu.conf
+++ b/xcomp/erl-xcomp-powerpc-dso-linux-gnu.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=powerpc-wrs-linux-gnu
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-powerpc64-bgq-linux.conf b/xcomp/erl-xcomp-powerpc64-bgq-linux.conf
index 26a97ec301..40b762c837 100644
--- a/xcomp/erl-xcomp-powerpc64-bgq-linux.conf
+++ b/xcomp/erl-xcomp-powerpc64-bgq-linux.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=powerpc64-bgq-linux
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-x86_64-android.conf b/xcomp/erl-xcomp-x86_64-android.conf
index 6c9747353d..abbf6e1068 100644
--- a/xcomp/erl-xcomp-x86_64-android.conf
+++ b/xcomp/erl-xcomp-x86_64-android.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=x86_64-linux-android
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp-x86_64-saf-linux-gnu.conf b/xcomp/erl-xcomp-x86_64-saf-linux-gnu.conf
index 2a09869910..e9211bfb63 100644
--- a/xcomp/erl-xcomp-x86_64-saf-linux-gnu.conf
+++ b/xcomp/erl-xcomp-x86_64-saf-linux-gnu.conf
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
erl_xcomp_build=guess
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
erl_xcomp_host=x86_64-saf-linux-gnu
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the
diff --git a/xcomp/erl-xcomp.conf.template b/xcomp/erl-xcomp.conf.template
index 8ac187ad69..b2e4da3efc 100644
--- a/xcomp/erl-xcomp.conf.template
+++ b/xcomp/erl-xcomp.conf.template
@@ -46,16 +46,16 @@
# `--build=$erl_xcomp_build' argument to the `configure' script. It does
# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full
# `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_build'. If set to `guess',
# the build system will be guessed using
-# `$ERL_TOP/erts/autoconf/config.guess'.
+# `$ERL_TOP/make/autoconf/config.guess'.
#erl_xcomp_build=
# * `erl_xcomp_host' - Cross host/target system to build for. This value will
# be passed as `--host=$erl_xcomp_host' argument to the `configure' script.
# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The
# full `CPU-VENDOR-OS' triplet will be created by
-# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'.
+# `$ERL_TOP/make/autoconf/config.sub $erl_xcomp_host'.
#erl_xcomp_host=
# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the